From 997c86340462bb474a8bbbb37f9c69a8b5c60092 Mon Sep 17 00:00:00 2001 From: macfarla Date: Sun, 22 Sep 2024 23:20:38 +0000 Subject: [PATCH] deploy: da6abebe00c377395287a625ffbedaa988ed82a4 --- 404.html | 10 +- assets/js/0145acbf.d16da2ab.js | 1 + assets/js/01562474.3dba0cc2.js | 1 + assets/js/02fd2e39.26c38d69.js | 1 + assets/js/030f9ebf.652fe6a1.js | 1 + assets/js/06aa37f3.3638157d.js | 1 + assets/js/0821166d.eae161cf.js | 1 + assets/js/083d4b51.bd7608aa.js | 1 + assets/js/0c3b97c4.56a83f3e.js | 1 + assets/js/0ea635c0.dc4c9db9.js | 1 + assets/js/0ef1fb3f.ecd4d212.js | 1 + assets/js/0f2e6691.47b9d6f1.js | 1 + assets/js/10d3d954.257e6510.js | 1 + assets/js/1169.474111bd.js | 1 + assets/js/1176.9a7d92ce.js | 1 + assets/js/1245.c61e13ed.js | 1 + assets/js/12718c4a.9364ef40.js | 1 + assets/js/1303.f001da5d.js | 2 + assets/js/1303.f001da5d.js.LICENSE.txt | 9 ++ assets/js/13034d1e.27bd5583.js | 1 + assets/js/1331.f052e86d.js | 1 + assets/js/138e0e15.3444b433.js | 1 + assets/js/13912882.2ce4e4ef.js | 1 + assets/js/1398.ddcb09a0.js | 1 + assets/js/14eb3368.ec56410f.js | 1 + assets/js/16350423.a3ada36e.js | 1 + assets/js/166cf840.57a72276.js | 1 + assets/js/1719a32c.2407471c.js | 1 + assets/js/1721.c0b53a15.js | 2 + assets/js/1721.c0b53a15.js.LICENSE.txt | 9 ++ assets/js/17896441.3e61c7b1.js | 1 + assets/js/1946.457004ff.js | 1 + assets/js/1a4e3797.4b5826b5.js | 1 + assets/js/1a78f042.7689b480.js | 1 + assets/js/1b2e0ee9.74c7a494.js | 1 + assets/js/1b5bfdea.4fa33498.js | 1 + assets/js/1b73c7ba.ff90cfe1.js | 1 + assets/js/1df93b7f.310ae4b5.js | 1 + assets/js/1f29a5e5.194d5ac0.js | 1 + assets/js/2039806a.d6ddf1ad.js | 1 + assets/js/2130.95fd4ec8.js | 1 + assets/js/2237.765a0d7b.js | 1 + assets/js/22dd74f7.d86165fd.js | 1 + assets/js/2376.23ec1be8.js | 1 + assets/js/2453.6e208534.js | 1 + assets/js/248beabf.8a43592f.js | 1 + assets/js/2548.4854bfbf.js | 1 + assets/js/25537021.4c3c521d.js | 1 + assets/js/2712d2e6.08a6a92d.js | 1 + assets/js/27b89368.97dda751.js | 1 + assets/js/28249022.9e6906e9.js | 1 + assets/js/2843.796ce40c.js | 1 + assets/js/2925.c1de506f.js | 1 + assets/js/297e0bb4.9209a15a.js | 1 + assets/js/2983.b4a09367.js | 1 + assets/js/2ce131d7.bddba6d1.js | 1 + assets/js/2de980e5.97c724a4.js | 1 + assets/js/306048a3.bbdcd5ec.js | 1 + assets/js/3234314a.23d59e51.js | 1 + assets/js/3624528b.a6c81356.js | 1 + assets/js/3626.567734c0.js | 1 + assets/js/3706.2daa6e9b.js | 1 + assets/js/3720c009.051c303d.js | 1 + assets/js/37906014.e96042f4.js | 1 + assets/js/3868ebe2.94fe7a15.js | 1 + assets/js/3917f523.54520b57.js | 1 + assets/js/3a4520c6.18bf9121.js | 1 + assets/js/3aaf4567.090eadec.js | 1 + assets/js/3b05cdc2.ee641190.js | 1 + assets/js/3e86fe35.34ea8d39.js | 1 + assets/js/3f04f830.f8a14c73.js | 1 + assets/js/4162.d948d9a1.js | 1 + assets/js/43d83ec4.e7e0e97f.js | 1 + assets/js/46ff6f7b.f215fe24.js | 1 + assets/js/4741.a4c1664e.js | 1 + assets/js/489.ecb90ce5.js | 2 + assets/js/489.ecb90ce5.js.LICENSE.txt | 1 + assets/js/4943.7a968dfc.js | 1 + assets/js/4a41aaaf.0fbde342.js | 1 + assets/js/4b21c0d5.59ec311d.js | 1 + assets/js/4ba08559.41f62f60.js | 1 + assets/js/4d94bde1.fea2dde3.js | 1 + assets/js/4f63be9c.0c0a113e.js | 1 + assets/js/5576e3f0.679fbdc4.js | 1 + assets/js/55b6f436.fd934fa0.js | 1 + assets/js/563e4b8b.e9d64ed4.js | 1 + assets/js/5741.f2309677.js | 1 + assets/js/59af61a6.c622703e.js | 1 + assets/js/5af5c663.2609a21a.js | 1 + assets/js/5b178458.4de7b538.js | 1 + assets/js/5c820069.f9a6f71b.js | 1 + assets/js/5ec0198e.0b38fe62.js | 1 + assets/js/608f60e4.12fd1aea.js | 1 + assets/js/6420.1d302b6f.js | 1 + assets/js/66bba352.d596c93b.js | 1 + assets/js/67359d90.9c6a5c3f.js | 1 + assets/js/6788.582b9064.js | 1 + assets/js/6803.5c976ee3.js | 1 + assets/js/680b46ee.09961d1c.js | 1 + assets/js/6c6be066.7b55fcc0.js | 1 + assets/js/6cafcc6f.99884b59.js | 1 + assets/js/6d0a1147.de68ac01.js | 1 + assets/js/6e493491.b4f3819f.js | 1 + assets/js/6ea682ce.33f2b314.js | 1 + assets/js/6ec2af53.ce63d27b.js | 1 + assets/js/714c5be8.16fbbdd7.js | 1 + assets/js/715197f0.9996b344.js | 1 + assets/js/71635f7b.913be7fe.js | 1 + assets/js/71e3c29d.66b02934.js | 1 + assets/js/7426.b60c03d2.js | 1 + assets/js/76a5e22a.fc8fb787.js | 1 + assets/js/79bb8117.c7ab0d00.js | 1 + assets/js/7a44c711.94783d97.js | 1 + assets/js/7b0f9452.7847efd5.js | 1 + assets/js/7b4961ca.d2b3a768.js | 1 + assets/js/7bb2e71b.0d7a41fe.js | 1 + assets/js/7e9c70a7.b09bb89b.js | 1 + assets/js/7ea61495.8ff9c14b.js | 1 + assets/js/8055.e84c6b8b.js | 1 + assets/js/810074cd.228e5b7c.js | 1 + assets/js/8161613e.62808094.js | 1 + assets/js/833497ee.be45d96a.js | 1 + assets/js/84b35613.46c0e03d.js | 1 + assets/js/8635.9e01011f.js | 1 + assets/js/87114070.258aec83.js | 1 + assets/js/8810.8e349140.js | 1 + assets/js/88771ea1.3718db6e.js | 1 + assets/js/887b6037.03b4e162.js | 1 + assets/js/88996aea.b118aeda.js | 1 + assets/js/89f1fe89.bb340bbd.js | 1 + assets/js/8a886138.8a9eb2e0.js | 1 + assets/js/8b137bfa.9dfb2f95.js | 1 + assets/js/8b8c93ab.2009f544.js | 1 + assets/js/8c0ee333.86633b3b.js | 1 + assets/js/8d677f34.fd46d48d.js | 1 + assets/js/8ef40281.aaa3c872.js | 1 + assets/js/91cde904.d5d26aec.js | 1 + assets/js/91f929bc.db1ffe3e.js | 1 + assets/js/9213a1f9.f3841e84.js | 1 + assets/js/93e76459.524fd05d.js | 1 + assets/js/9689.252d8165.js | 1 + assets/js/981fdc44.2631aab4.js | 1 + assets/js/99a5eb2e.e27a7309.js | 1 + assets/js/9a50decc.b6c64dc3.js | 1 + assets/js/9bb932b9.afa89081.js | 1 + assets/js/9ffeb22a.49801fbd.js | 1 + assets/js/a0520cc7.101b9a64.js | 1 + assets/js/a0f949fc.bcd58d85.js | 1 + assets/js/a2bd30e6.b9419280.js | 1 + assets/js/a626427b.ae5b558b.js | 1 + assets/js/a7456010.396c4ea2.js | 1 + assets/js/a7bd4aaa.3a315759.js | 1 + assets/js/a94703ab.98eb17a6.js | 1 + assets/js/a99a03ac.f53b1c99.js | 1 + assets/js/aa0c6744.5bbc0d85.js | 1 + assets/js/aa612600.83b9921f.js | 1 + assets/js/aba21aa0.f74b2f51.js | 1 + assets/js/af3555a6.8d8c4ead.js | 1 + assets/js/b0eb7c42.5a8a020d.js | 1 + assets/js/b2d12fc2.1317c4e3.js | 1 + assets/js/b4b83649.29e393a4.js | 1 + assets/js/b5388cc7.8e4ba5ca.js | 1 + assets/js/b5e9b728.2405688b.js | 1 + assets/js/b658262b.4407836a.js | 1 + assets/js/b6b2f0db.e7ee8e7b.js | 1 + assets/js/b7759d8d.db359485.js | 1 + assets/js/bbdbb161.99f8c8f5.js | 1 + assets/js/bc60af12.60d23579.js | 1 + assets/js/bc69a950.d52a0855.js | 1 + assets/js/bd3642f6.1f7a447c.js | 1 + assets/js/bd4880eb.01b716ea.js | 1 + assets/js/bea70e21.81bfac1d.js | 1 + assets/js/c029b5c7.f8626ecd.js | 1 + assets/js/c41908c3.1f525574.js | 1 + assets/js/c48436f6.ceedba4d.js | 1 + assets/js/c69ab138.d760b4a7.js | 1 + assets/js/c6a4c9bf.0ba2d938.js | 1 + assets/js/c6c17076.d07d2dbd.js | 1 + assets/js/c8cab34c.2e679808.js | 1 + assets/js/ca90dbf4.78a640a1.js | 1 + assets/js/cdbaa4c0.6b1c2e3e.js | 1 + assets/js/ce4c8b54.661eac58.js | 1 + assets/js/ce515f1b.30380617.js | 1 + assets/js/cf53573e.1cf4a868.js | 1 + assets/js/d13d7343.f36b83d7.js | 1 + assets/js/d1f22a5a.9f8374b5.js | 1 + assets/js/d333d0b1.8068ca24.js | 1 + assets/js/d4c8fb26.65039764.js | 1 + assets/js/d78c9adf.670895a9.js | 1 + assets/js/d7914a50.222188a7.js | 1 + assets/js/d7b72fb9.232604a9.js | 1 + assets/js/d86228ad.04e46fc2.js | 1 + assets/js/d94d9a73.aad3c4bc.js | 1 + assets/js/d97c1e1b.59b77cac.js | 1 + assets/js/dbf86eb1.25be7d49.js | 1 + assets/js/dd3e5b84.1cd1b92a.js | 1 + assets/js/dd5955a1.57842f6a.js | 1 + assets/js/dd900a84.4a6a9763.js | 1 + assets/js/df203c0f.15aaaa71.js | 1 + assets/js/dfe7f568.05d882cb.js | 1 + assets/js/e0a6c7d4.d1acdf63.js | 1 + assets/js/e12df8e0.862983c0.js | 1 + assets/js/e1c9c46b.f63b7265.js | 1 + assets/js/e6ca27ec.eb3396ab.js | 1 + assets/js/e8e619e2.2fdd8d20.js | 1 + assets/js/ebb34ddb.01a618cd.js | 1 + assets/js/ec4f4180.84b21fd8.js | 1 + assets/js/ecc00064.1f415c88.js | 1 + assets/js/edcc188d.270a02da.js | 1 + assets/js/ee08513e.fec2f54e.js | 1 + assets/js/ee5d8003.8490affb.js | 1 + assets/js/eeceef6b.38bac9b2.js | 1 + assets/js/f0bf0af8.e4baebc0.js | 1 + assets/js/f2142509.56209469.js | 1 + assets/js/f3adc880.1e05bd0a.js | 1 + assets/js/f46f4beb.ad1162b3.js | 1 + assets/js/f606b5b5.9a7c8ae3.js | 1 + assets/js/f7a0d716.4949904b.js | 1 + assets/js/f834d930.96d7377e.js | 1 + assets/js/fb537116.7649b17a.js | 1 + assets/js/fb8ebc35.3ded177c.js | 1 + assets/js/fe1d21e1.674e5808.js | 1 + assets/js/main.3fdf14f6.js | 2 + assets/js/main.3fdf14f6.js.LICENSE.txt | 126 ++++++++++++++++++ assets/js/runtime~main.20e90f8d.js | 1 + development/index.html | 6 +- en/development/index.html | 6 +- en/latest/index.html | 6 +- global/postman.html | 10 +- global/test_accounts.html | 12 +- index.html | 6 +- latest/index.html | 6 +- private-networks.html | 12 +- private-networks/chatbot.html | 12 +- private-networks/concepts.html | 12 +- private-networks/concepts/permissioning.html | 12 +- .../concepts/permissioning/onchain.html | 12 +- .../concepts/permissioning/plugin.html | 12 +- private-networks/concepts/pki.html | 12 +- private-networks/concepts/plugins.html | 12 +- private-networks/concepts/poa.html | 12 +- private-networks/concepts/privacy.html | 12 +- .../concepts/privacy/flexible-privacy.html | 12 +- .../concepts/privacy/multi-tenancy.html | 12 +- private-networks/concepts/privacy/plugin.html | 12 +- .../concepts/privacy/privacy-groups.html | 12 +- .../privacy/private-transactions.html | 12 +- .../private-transactions/processing.html | 12 +- private-networks/get-started.html | 10 +- private-networks/get-started/install.html | 12 +- .../install/binary-distribution.html | 12 +- .../get-started/install/run-docker-image.html | 12 +- private-networks/get-started/start-node.html | 12 +- .../get-started/system-requirements.html | 12 +- private-networks/how-to.html | 12 +- private-networks/how-to/backup.html | 12 +- .../block-proposal-permissioning.html | 12 +- .../how-to/configure/bootnodes.html | 12 +- .../how-to/configure/consensus.html | 12 +- .../add-validators-without-voting.html | 12 +- .../how-to/configure/consensus/clique.html | 12 +- .../how-to/configure/consensus/ibft.html | 12 +- .../how-to/configure/consensus/qbft.html | 12 +- .../how-to/configure/contracts.html | 12 +- private-networks/how-to/configure/curves.html | 12 +- .../how-to/configure/free-gas.html | 12 +- .../configure/tls/client-and-server.html | 12 +- .../how-to/configure/tls/p2p.html | 12 +- .../how-to/configure/validators.html | 12 +- private-networks/how-to/deploy/ansible.html | 12 +- private-networks/how-to/deploy/cloud.html | 12 +- private-networks/how-to/deploy/ethstats.html | 12 +- .../how-to/deploy/kubernetes.html | 12 +- private-networks/how-to/monitor.html | 12 +- .../how-to/monitor/chainlens.html | 12 +- .../how-to/monitor/elastic-stack.html | 12 +- private-networks/how-to/monitor/loki.html | 12 +- .../how-to/monitor/opentelemetry.html | 12 +- .../how-to/monitor/quorum-hibernate.html | 12 +- private-networks/how-to/monitor/splunk.html | 12 +- .../how-to/send-transactions.html | 12 +- .../concurrent-private-transactions.html | 12 +- .../private-transactions.html | 12 +- .../send-transactions/revert-reason.html | 12 +- private-networks/how-to/upgrade.html | 12 +- .../how-to/use-permissioning/local.html | 12 +- .../how-to/use-permissioning/onchain.html | 12 +- .../access-private-transactions.html | 12 +- .../how-to/use-privacy/besu-extended.html | 12 +- .../how-to/use-privacy/eea-compliant.html | 12 +- .../how-to/use-privacy/flexible.html | 12 +- .../performance-best-practices.html | 12 +- .../how-to/use-privacy/privacy-groups.html | 12 +- .../how-to/use-privacy/sign-pmts.html | 12 +- .../how-to/use-privacy/tessera.html | 12 +- .../how-to/use-privacy/web3js-quorum.html | 12 +- private-networks/reference.html | 12 +- .../reference/accounts-for-testing.html | 12 +- private-networks/reference/api.html | 12 +- private-networks/reference/api/objects.html | 12 +- private-networks/reference/cli/options.html | 12 +- .../reference/cli/subcommands.html | 12 +- .../reference/plugin-api-interfaces.html | 12 +- private-networks/tutorials.html | 10 +- private-networks/tutorials/azure.html | 12 +- private-networks/tutorials/clique.html | 12 +- private-networks/tutorials/contracts.html | 12 +- .../tutorials/contracts/interact.html | 12 +- .../tutorials/contracts/transfer-funds.html | 12 +- private-networks/tutorials/ethash.html | 12 +- private-networks/tutorials/ibft.html | 12 +- .../tutorials/ibft/validators.html | 12 +- private-networks/tutorials/kubernetes.html | 12 +- .../tutorials/kubernetes/charts.html | 12 +- .../tutorials/kubernetes/cluster.html | 12 +- .../tutorials/kubernetes/maintenance.html | 12 +- .../tutorials/kubernetes/nat-manager.html | 12 +- .../tutorials/kubernetes/playground.html | 12 +- .../tutorials/kubernetes/production.html | 12 +- .../tutorials/kubernetes/quorum-explorer.html | 12 +- private-networks/tutorials/permissioning.html | 12 +- private-networks/tutorials/privacy.html | 12 +- .../tutorials/privacy/multi-tenancy.html | 12 +- .../tutorials/privacy/quickstart.html | 12 +- .../tutorials/privacy/web3js-quorum.html | 12 +- private-networks/tutorials/qbft.html | 12 +- private-networks/tutorials/quickstart.html | 12 +- public-networks.html | 12 +- public-networks/chatbot.html | 12 +- public-networks/concepts.html | 10 +- .../concepts/data-storage-formats.html | 12 +- public-networks/concepts/events-and-logs.html | 12 +- public-networks/concepts/genesis-file.html | 12 +- .../concepts/network-and-chain-id.html | 12 +- public-networks/concepts/node-clients.html | 12 +- public-networks/concepts/node-keys.html | 12 +- .../parallel-transaction-execution.html | 12 +- public-networks/concepts/proof-of-stake.html | 12 +- .../concepts/proof-of-stake/attestations.html | 12 +- .../concepts/transactions/pool.html | 12 +- .../concepts/transactions/types.html | 12 +- .../concepts/transactions/validation.html | 12 +- public-networks/get-started.html | 10 +- public-networks/get-started/connect.html | 12 +- .../get-started/connect/mainnet.html | 12 +- .../get-started/connect/sync-node.html | 12 +- .../get-started/connect/testnet.html | 12 +- public-networks/get-started/install.html | 12 +- .../install/binary-distribution.html | 12 +- .../get-started/install/run-docker-image.html | 12 +- .../get-started/migrate-to-besu.html | 12 +- public-networks/get-started/start-node.html | 12 +- .../get-started/system-requirements.html | 12 +- public-networks/how-to.html | 10 +- .../how-to/bonsai-limit-trie-logs.html | 12 +- public-networks/how-to/configure-besu.html | 12 +- .../how-to/configure-besu/profile.html | 12 +- public-networks/how-to/configure-ha.html | 12 +- .../configure-ha/sample-configuration.html | 12 +- .../configure-java/install-update-java.html | 12 +- .../configure-java/java-flight-recorder.html | 12 +- .../how-to/configure-java/manage-memory.html | 12 +- .../configure-java/pass-jvm-options.html | 12 +- .../how-to/connect/configure-ports.html | 12 +- .../how-to/connect/manage-peers.html | 12 +- .../how-to/connect/specify-nat.html | 12 +- .../how-to/connect/static-nodes.html | 12 +- .../how-to/develop/client-libraries.html | 12 +- public-networks/how-to/develop/hardhat.html | 12 +- public-networks/how-to/monitor.html | 12 +- public-networks/how-to/monitor/logging.html | 12 +- public-networks/how-to/monitor/metrics.html | 12 +- .../how-to/monitor/understand-metrics.html | 12 +- public-networks/how-to/send-transactions.html | 12 +- .../how-to/troubleshoot/evm-tool.html | 12 +- .../how-to/troubleshoot/peering.html | 12 +- .../how-to/troubleshoot/performance.html | 12 +- .../troubleshoot/trace-transactions.html | 12 +- public-networks/how-to/upgrade-node.html | 12 +- public-networks/how-to/use-besu-api.html | 12 +- .../how-to/use-besu-api/access-logs.html | 12 +- .../how-to/use-besu-api/authenticate.html | 12 +- .../how-to/use-besu-api/graphql.html | 12 +- .../how-to/use-besu-api/json-rpc.html | 12 +- .../how-to/use-besu-api/rpc-pubsub.html | 12 +- public-networks/how-to/use-engine-api.html | 12 +- public-networks/how-to/use-pow/mining.html | 12 +- public-networks/reference.html | 10 +- public-networks/reference/api.html | 12 +- public-networks/reference/api/objects.html | 12 +- public-networks/reference/cli/options.html | 12 +- .../reference/cli/subcommands.html | 12 +- public-networks/reference/disclosure.html | 12 +- public-networks/reference/engine-api.html | 12 +- .../reference/engine-api/objects.html | 12 +- public-networks/reference/evm-tool.html | 12 +- public-networks/reference/genesis-items.html | 12 +- .../reference/projects-using-besu.html | 12 +- public-networks/reference/trace-types.html | 12 +- public-networks/tutorials.html | 10 +- .../tutorials/besu-teku-mainnet.html | 12 +- .../tutorials/besu-teku-testnet.html | 12 +- public-networks/tutorials/kubernetes.html | 12 +- search-index.json | 2 +- search.html | 6 +- sitemap.xml | 2 +- tags.html | 10 +- tags/private-networks.html | 10 +- tags/public-networks.html | 10 +- 409 files changed, 1439 insertions(+), 1070 deletions(-) create mode 100644 assets/js/0145acbf.d16da2ab.js create mode 100644 assets/js/01562474.3dba0cc2.js create mode 100644 assets/js/02fd2e39.26c38d69.js create mode 100644 assets/js/030f9ebf.652fe6a1.js create mode 100644 assets/js/06aa37f3.3638157d.js create mode 100644 assets/js/0821166d.eae161cf.js create mode 100644 assets/js/083d4b51.bd7608aa.js create mode 100644 assets/js/0c3b97c4.56a83f3e.js create mode 100644 assets/js/0ea635c0.dc4c9db9.js create mode 100644 assets/js/0ef1fb3f.ecd4d212.js create mode 100644 assets/js/0f2e6691.47b9d6f1.js create mode 100644 assets/js/10d3d954.257e6510.js create mode 100644 assets/js/1169.474111bd.js create mode 100644 assets/js/1176.9a7d92ce.js create mode 100644 assets/js/1245.c61e13ed.js create mode 100644 assets/js/12718c4a.9364ef40.js create mode 100644 assets/js/1303.f001da5d.js create mode 100644 assets/js/1303.f001da5d.js.LICENSE.txt create mode 100644 assets/js/13034d1e.27bd5583.js create mode 100644 assets/js/1331.f052e86d.js create mode 100644 assets/js/138e0e15.3444b433.js create mode 100644 assets/js/13912882.2ce4e4ef.js create mode 100644 assets/js/1398.ddcb09a0.js create mode 100644 assets/js/14eb3368.ec56410f.js create mode 100644 assets/js/16350423.a3ada36e.js create mode 100644 assets/js/166cf840.57a72276.js create mode 100644 assets/js/1719a32c.2407471c.js create mode 100644 assets/js/1721.c0b53a15.js create mode 100644 assets/js/1721.c0b53a15.js.LICENSE.txt create mode 100644 assets/js/17896441.3e61c7b1.js create mode 100644 assets/js/1946.457004ff.js create mode 100644 assets/js/1a4e3797.4b5826b5.js create mode 100644 assets/js/1a78f042.7689b480.js create mode 100644 assets/js/1b2e0ee9.74c7a494.js create mode 100644 assets/js/1b5bfdea.4fa33498.js create mode 100644 assets/js/1b73c7ba.ff90cfe1.js create mode 100644 assets/js/1df93b7f.310ae4b5.js create mode 100644 assets/js/1f29a5e5.194d5ac0.js create mode 100644 assets/js/2039806a.d6ddf1ad.js create mode 100644 assets/js/2130.95fd4ec8.js create mode 100644 assets/js/2237.765a0d7b.js create mode 100644 assets/js/22dd74f7.d86165fd.js create mode 100644 assets/js/2376.23ec1be8.js create mode 100644 assets/js/2453.6e208534.js create mode 100644 assets/js/248beabf.8a43592f.js create mode 100644 assets/js/2548.4854bfbf.js create mode 100644 assets/js/25537021.4c3c521d.js create mode 100644 assets/js/2712d2e6.08a6a92d.js create mode 100644 assets/js/27b89368.97dda751.js create mode 100644 assets/js/28249022.9e6906e9.js create mode 100644 assets/js/2843.796ce40c.js create mode 100644 assets/js/2925.c1de506f.js create mode 100644 assets/js/297e0bb4.9209a15a.js create mode 100644 assets/js/2983.b4a09367.js create mode 100644 assets/js/2ce131d7.bddba6d1.js create mode 100644 assets/js/2de980e5.97c724a4.js create mode 100644 assets/js/306048a3.bbdcd5ec.js create mode 100644 assets/js/3234314a.23d59e51.js create mode 100644 assets/js/3624528b.a6c81356.js create mode 100644 assets/js/3626.567734c0.js create mode 100644 assets/js/3706.2daa6e9b.js create mode 100644 assets/js/3720c009.051c303d.js create mode 100644 assets/js/37906014.e96042f4.js create mode 100644 assets/js/3868ebe2.94fe7a15.js create mode 100644 assets/js/3917f523.54520b57.js create mode 100644 assets/js/3a4520c6.18bf9121.js create mode 100644 assets/js/3aaf4567.090eadec.js create mode 100644 assets/js/3b05cdc2.ee641190.js create mode 100644 assets/js/3e86fe35.34ea8d39.js create mode 100644 assets/js/3f04f830.f8a14c73.js create mode 100644 assets/js/4162.d948d9a1.js create mode 100644 assets/js/43d83ec4.e7e0e97f.js create mode 100644 assets/js/46ff6f7b.f215fe24.js create mode 100644 assets/js/4741.a4c1664e.js create mode 100644 assets/js/489.ecb90ce5.js create mode 100644 assets/js/489.ecb90ce5.js.LICENSE.txt create mode 100644 assets/js/4943.7a968dfc.js create mode 100644 assets/js/4a41aaaf.0fbde342.js create mode 100644 assets/js/4b21c0d5.59ec311d.js create mode 100644 assets/js/4ba08559.41f62f60.js create mode 100644 assets/js/4d94bde1.fea2dde3.js create mode 100644 assets/js/4f63be9c.0c0a113e.js create mode 100644 assets/js/5576e3f0.679fbdc4.js create mode 100644 assets/js/55b6f436.fd934fa0.js create mode 100644 assets/js/563e4b8b.e9d64ed4.js create mode 100644 assets/js/5741.f2309677.js create mode 100644 assets/js/59af61a6.c622703e.js create mode 100644 assets/js/5af5c663.2609a21a.js create mode 100644 assets/js/5b178458.4de7b538.js create mode 100644 assets/js/5c820069.f9a6f71b.js create mode 100644 assets/js/5ec0198e.0b38fe62.js create mode 100644 assets/js/608f60e4.12fd1aea.js create mode 100644 assets/js/6420.1d302b6f.js create mode 100644 assets/js/66bba352.d596c93b.js create mode 100644 assets/js/67359d90.9c6a5c3f.js create mode 100644 assets/js/6788.582b9064.js create mode 100644 assets/js/6803.5c976ee3.js create mode 100644 assets/js/680b46ee.09961d1c.js create mode 100644 assets/js/6c6be066.7b55fcc0.js create mode 100644 assets/js/6cafcc6f.99884b59.js create mode 100644 assets/js/6d0a1147.de68ac01.js create mode 100644 assets/js/6e493491.b4f3819f.js create mode 100644 assets/js/6ea682ce.33f2b314.js create mode 100644 assets/js/6ec2af53.ce63d27b.js create mode 100644 assets/js/714c5be8.16fbbdd7.js create mode 100644 assets/js/715197f0.9996b344.js create mode 100644 assets/js/71635f7b.913be7fe.js create mode 100644 assets/js/71e3c29d.66b02934.js create mode 100644 assets/js/7426.b60c03d2.js create mode 100644 assets/js/76a5e22a.fc8fb787.js create mode 100644 assets/js/79bb8117.c7ab0d00.js create mode 100644 assets/js/7a44c711.94783d97.js create mode 100644 assets/js/7b0f9452.7847efd5.js create mode 100644 assets/js/7b4961ca.d2b3a768.js create mode 100644 assets/js/7bb2e71b.0d7a41fe.js create mode 100644 assets/js/7e9c70a7.b09bb89b.js create mode 100644 assets/js/7ea61495.8ff9c14b.js create mode 100644 assets/js/8055.e84c6b8b.js create mode 100644 assets/js/810074cd.228e5b7c.js create mode 100644 assets/js/8161613e.62808094.js create mode 100644 assets/js/833497ee.be45d96a.js create mode 100644 assets/js/84b35613.46c0e03d.js create mode 100644 assets/js/8635.9e01011f.js create mode 100644 assets/js/87114070.258aec83.js create mode 100644 assets/js/8810.8e349140.js create mode 100644 assets/js/88771ea1.3718db6e.js create mode 100644 assets/js/887b6037.03b4e162.js create mode 100644 assets/js/88996aea.b118aeda.js create mode 100644 assets/js/89f1fe89.bb340bbd.js create mode 100644 assets/js/8a886138.8a9eb2e0.js create mode 100644 assets/js/8b137bfa.9dfb2f95.js create mode 100644 assets/js/8b8c93ab.2009f544.js create mode 100644 assets/js/8c0ee333.86633b3b.js create mode 100644 assets/js/8d677f34.fd46d48d.js create mode 100644 assets/js/8ef40281.aaa3c872.js create mode 100644 assets/js/91cde904.d5d26aec.js create mode 100644 assets/js/91f929bc.db1ffe3e.js create mode 100644 assets/js/9213a1f9.f3841e84.js create mode 100644 assets/js/93e76459.524fd05d.js create mode 100644 assets/js/9689.252d8165.js create mode 100644 assets/js/981fdc44.2631aab4.js create mode 100644 assets/js/99a5eb2e.e27a7309.js create mode 100644 assets/js/9a50decc.b6c64dc3.js create mode 100644 assets/js/9bb932b9.afa89081.js create mode 100644 assets/js/9ffeb22a.49801fbd.js create mode 100644 assets/js/a0520cc7.101b9a64.js create mode 100644 assets/js/a0f949fc.bcd58d85.js create mode 100644 assets/js/a2bd30e6.b9419280.js create mode 100644 assets/js/a626427b.ae5b558b.js create mode 100644 assets/js/a7456010.396c4ea2.js create mode 100644 assets/js/a7bd4aaa.3a315759.js create mode 100644 assets/js/a94703ab.98eb17a6.js create mode 100644 assets/js/a99a03ac.f53b1c99.js create mode 100644 assets/js/aa0c6744.5bbc0d85.js create mode 100644 assets/js/aa612600.83b9921f.js create mode 100644 assets/js/aba21aa0.f74b2f51.js create mode 100644 assets/js/af3555a6.8d8c4ead.js create mode 100644 assets/js/b0eb7c42.5a8a020d.js create mode 100644 assets/js/b2d12fc2.1317c4e3.js create mode 100644 assets/js/b4b83649.29e393a4.js create mode 100644 assets/js/b5388cc7.8e4ba5ca.js create mode 100644 assets/js/b5e9b728.2405688b.js create mode 100644 assets/js/b658262b.4407836a.js create mode 100644 assets/js/b6b2f0db.e7ee8e7b.js create mode 100644 assets/js/b7759d8d.db359485.js create mode 100644 assets/js/bbdbb161.99f8c8f5.js create mode 100644 assets/js/bc60af12.60d23579.js create mode 100644 assets/js/bc69a950.d52a0855.js create mode 100644 assets/js/bd3642f6.1f7a447c.js create mode 100644 assets/js/bd4880eb.01b716ea.js create mode 100644 assets/js/bea70e21.81bfac1d.js create mode 100644 assets/js/c029b5c7.f8626ecd.js create mode 100644 assets/js/c41908c3.1f525574.js create mode 100644 assets/js/c48436f6.ceedba4d.js create mode 100644 assets/js/c69ab138.d760b4a7.js create mode 100644 assets/js/c6a4c9bf.0ba2d938.js create mode 100644 assets/js/c6c17076.d07d2dbd.js create mode 100644 assets/js/c8cab34c.2e679808.js create mode 100644 assets/js/ca90dbf4.78a640a1.js create mode 100644 assets/js/cdbaa4c0.6b1c2e3e.js create mode 100644 assets/js/ce4c8b54.661eac58.js create mode 100644 assets/js/ce515f1b.30380617.js create mode 100644 assets/js/cf53573e.1cf4a868.js create mode 100644 assets/js/d13d7343.f36b83d7.js create mode 100644 assets/js/d1f22a5a.9f8374b5.js create mode 100644 assets/js/d333d0b1.8068ca24.js create mode 100644 assets/js/d4c8fb26.65039764.js create mode 100644 assets/js/d78c9adf.670895a9.js create mode 100644 assets/js/d7914a50.222188a7.js create mode 100644 assets/js/d7b72fb9.232604a9.js create mode 100644 assets/js/d86228ad.04e46fc2.js create mode 100644 assets/js/d94d9a73.aad3c4bc.js create mode 100644 assets/js/d97c1e1b.59b77cac.js create mode 100644 assets/js/dbf86eb1.25be7d49.js create mode 100644 assets/js/dd3e5b84.1cd1b92a.js create mode 100644 assets/js/dd5955a1.57842f6a.js create mode 100644 assets/js/dd900a84.4a6a9763.js create mode 100644 assets/js/df203c0f.15aaaa71.js create mode 100644 assets/js/dfe7f568.05d882cb.js create mode 100644 assets/js/e0a6c7d4.d1acdf63.js create mode 100644 assets/js/e12df8e0.862983c0.js create mode 100644 assets/js/e1c9c46b.f63b7265.js create mode 100644 assets/js/e6ca27ec.eb3396ab.js create mode 100644 assets/js/e8e619e2.2fdd8d20.js create mode 100644 assets/js/ebb34ddb.01a618cd.js create mode 100644 assets/js/ec4f4180.84b21fd8.js create mode 100644 assets/js/ecc00064.1f415c88.js create mode 100644 assets/js/edcc188d.270a02da.js create mode 100644 assets/js/ee08513e.fec2f54e.js create mode 100644 assets/js/ee5d8003.8490affb.js create mode 100644 assets/js/eeceef6b.38bac9b2.js create mode 100644 assets/js/f0bf0af8.e4baebc0.js create mode 100644 assets/js/f2142509.56209469.js create mode 100644 assets/js/f3adc880.1e05bd0a.js create mode 100644 assets/js/f46f4beb.ad1162b3.js create mode 100644 assets/js/f606b5b5.9a7c8ae3.js create mode 100644 assets/js/f7a0d716.4949904b.js create mode 100644 assets/js/f834d930.96d7377e.js create mode 100644 assets/js/fb537116.7649b17a.js create mode 100644 assets/js/fb8ebc35.3ded177c.js create mode 100644 assets/js/fe1d21e1.674e5808.js create mode 100644 assets/js/main.3fdf14f6.js create mode 100644 assets/js/main.3fdf14f6.js.LICENSE.txt create mode 100644 assets/js/runtime~main.20e90f8d.js diff --git a/404.html b/404.html index 2e92df9b4f9..98d8b641c6f 100644 --- a/404.html +++ b/404.html @@ -1,21 +1,21 @@ - + -Besu documentation +Besu documentation - - + + -
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.

+
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/js/0145acbf.d16da2ab.js b/assets/js/0145acbf.d16da2ab.js new file mode 100644 index 00000000000..2d1a7eb923f --- /dev/null +++ b/assets/js/0145acbf.d16da2ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8235],{90090:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var n=t(74848),r=t(28453);const o={title:"Data storage formats",sidebar_position:3,description:"Learn about storing data using Forest of Tries and Bonsai Tries.",tags:["public networks"]},i="Data storage formats",a={id:"public-networks/concepts/data-storage-formats",title:"Data storage formats",description:"Learn about storing data using Forest of Tries and Bonsai Tries.",source:"@site/docs/public-networks/concepts/data-storage-formats.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/data-storage-formats",permalink:"/public-networks/concepts/data-storage-formats",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/data-storage-formats.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Data storage formats",sidebar_position:3,description:"Learn about storing data using Forest of Tries and Bonsai Tries.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Attestations",permalink:"/public-networks/concepts/proof-of-stake/attestations"},next:{title:"Parallel transaction execution",permalink:"/public-networks/concepts/parallel-transaction-execution"}},d={},c=[{value:"Bonsai Tries",id:"bonsai-tries",level:2},{value:"Forest of Tries",id:"forest-of-tries",level:2},{value:"Forest of Tries vs. Bonsai Tries",id:"forest-of-tries-vs-bonsai-tries",level:2},{value:"Storage requirements",id:"storage-requirements",level:3},{value:"Accessing data",id:"accessing-data",level:3},{value:"Syncing nodes",id:"syncing-nodes",level:3}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"data-storage-formats",children:"Data storage formats"})}),"\n",(0,n.jsxs)(s.p,{children:["Besu offers two formats for storing the world state, ",(0,n.jsx)(s.a,{href:"#bonsai-tries",children:"Bonsai Tries"})," and ",(0,n.jsx)(s.a,{href:"#forest-of-tries",children:"Forest of Tries"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"bonsai-tries",children:"Bonsai Tries"}),"\n",(0,n.jsx)(s.p,{children:"Bonsai Tries is a data storage layout policy designed to reduce storage requirements and increase read performance. This is the default for Besu."}),"\n",(0,n.jsx)(s.p,{children:"Bonsai stores leaf values in a trie log, separate from the branches of the trie. Bonsai stores nodes by the location of the node instead of the hash of the node. Bonsai can access the leaf from the underlying storage directly using the account key. This greatly reduces the disk space needed for storage and allows for less resource-demanding and faster read performance. Bonsai inherently prunes orphaned nodes and old branches."}),"\n",(0,n.jsxs)(s.p,{children:["To run a node with Bonsai Tries data storage format, use the command line option ",(0,n.jsx)(s.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,n.jsx)(s.code,{children:"--data-storage-format=BONSAI"})}),"."]}),"\n",(0,n.jsx)("p",{align:"center",children:(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Bonsai_tries",src:t(93031).A+"",width:"828",height:"513"})})}),"\n",(0,n.jsx)(s.admonition,{title:"important",type:"caution",children:(0,n.jsxs)(s.p,{children:["Do not run an ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"})," with Bonsai Tries.\nBonsai is designed for retrieving recent data only."]})}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsxs)(s.p,{children:["You can read more about Bonsai in ",(0,n.jsx)(s.a,{href:"https://consensys.io/blog/bonsai-tries-guide",children:"Consensys' Guide to Bonsai Tries"}),"."]})}),"\n",(0,n.jsx)(s.h2,{id:"forest-of-tries",children:"Forest of Tries"}),"\n",(0,n.jsxs)(s.p,{children:["Forest of Tries, also called forest mode, is another method of representing the world state, and is more suitable for ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive nodes"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"In forest mode, each node in the trie is saved in a key-value store by hash. For each block, the world state is updated with new nodes, leaf nodes, and a new state root. Old leaf nodes remain in the underlying data store. Data is accessed and stored by hash, which increases the size of the database and increases the resources and time needed to access account data."}),"\n",(0,n.jsx)("p",{align:"center",children:(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"forest_of_tries",src:t(79576).A+"",width:"828",height:"631"})})}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["Forest pruning using the ",(0,n.jsx)(s.code,{children:"--pruning-enabled"})," option is no longer supported.\nWe recommend using ",(0,n.jsx)(s.a,{href:"#bonsai-tries",children:"Bonsai Tries"})," to save disk space."]})}),"\n",(0,n.jsx)(s.h2,{id:"forest-of-tries-vs-bonsai-tries",children:"Forest of Tries vs. Bonsai Tries"}),"\n",(0,n.jsx)(s.h3,{id:"storage-requirements",children:"Storage requirements"}),"\n",(0,n.jsxs)(s.p,{children:["Forest mode uses significantly more memory than Bonsai.\nWith a ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#run-a-full-node",children:"full node"}),", forest mode uses an\nestimated 750 GB of storage, while Bonsai uses an estimated 650 GB of storage.\n",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"Archive nodes"})," must use forest mode, which\nuses an estimated 12 TB of storage."]}),"\n",(0,n.jsx)(s.h3,{id:"accessing-data",children:"Accessing data"}),"\n",(0,n.jsx)(s.p,{children:"Forest mode must go through all the branches by hash to read a leaf value. Bonsai can access the leaf from the underlying storage directly using the account key. Bonsai will generally read faster than forest mode, particularly if the blocks are more recent."}),"\n",(0,n.jsxs)(s.p,{children:["However, Bonsai becomes increasingly more resource-intensive the further in history you try to read data. To prevent this, you can limit how far Bonsai looks back while reconstructing data. The default limit Bonsai looks back is 512. To change the parameter, use the ",(0,n.jsx)(s.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:(0,n.jsx)(s.code,{children:"--bonsai-historical-block-limit"})})," option. This might directly impact ",(0,n.jsx)(s.a,{href:"/public-networks/reference/api/",children:"JSON-RPC API"})," queries."]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Using ",(0,n.jsx)(s.code,{children:"--bonsai-historical-block-limit"}),' doesn\'t affect the size of the database being stored, only how far back to load. This means there is no "safe minimum" value to use with this option.']})}),"\n",(0,n.jsx)(s.h3,{id:"syncing-nodes",children:"Syncing nodes"}),"\n",(0,n.jsxs)(s.p,{children:["The following table shows the ways you can ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#run-a-full-node",children:"sync a full node"})," with the different data storage formats using ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#fast-synchronization",children:"fast"})," and ",(0,n.jsx)(s.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap"})," sync."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Data storage format"}),(0,n.jsx)(s.th,{children:"Sync mode"}),(0,n.jsx)(s.th,{children:"Storage estimate"}),(0,n.jsx)(s.th,{children:"Can other nodes sync to your node?"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Bonsai"}),(0,n.jsx)(s.td,{children:"Fast"}),(0,n.jsx)(s.td,{children:"1140 GB"}),(0,n.jsx)(s.td,{children:"No"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Bonsai"}),(0,n.jsx)(s.td,{children:"Snap"}),(0,n.jsx)(s.td,{children:"1090 GB"}),(0,n.jsx)(s.td,{children:"Yes"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Bonsai"}),(0,n.jsx)(s.td,{children:"Checkpoint"}),(0,n.jsx)(s.td,{children:"840 GB"}),(0,n.jsx)(s.td,{children:"No"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Forest"}),(0,n.jsx)(s.td,{children:"Fast"}),(0,n.jsx)(s.td,{children:"1200 GB"}),(0,n.jsx)(s.td,{children:"Yes"})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"tip",children:(0,n.jsx)(s.p,{children:"We recommend using snap sync with Bonsai for the fastest sync and lowest storage requirements."})})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},93031:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Bonsai_tries-5faad47fa3a0b807cd2bb30bce6b38b9.png"},79576:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/forest_of_tries-b2da450e9ecbfc38e09bd13505c66aed.png"},28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var n=t(96540);const r={},o=n.createContext(r);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01562474.3dba0cc2.js b/assets/js/01562474.3dba0cc2.js new file mode 100644 index 00000000000..57f04f6d544 --- /dev/null +++ b/assets/js/01562474.3dba0cc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9812],{49922:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(74848),o=n(28453);const i={title:"Use Hardhat",sidebar_position:1,description:"Using Besu with Hardhat",tags:["public networks","private networks"]},a="Use Hardhat",s={id:"public-networks/how-to/develop/hardhat",title:"Use Hardhat",description:"Using Besu with Hardhat",source:"@site/docs/public-networks/how-to/develop/hardhat.md",sourceDirName:"public-networks/how-to/develop",slug:"/public-networks/how-to/develop/hardhat",permalink:"/public-networks/how-to/develop/hardhat",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/develop/hardhat.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use Hardhat",sidebar_position:1,description:"Using Besu with Hardhat",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use Java Flight Recorder",permalink:"/public-networks/how-to/configure-java/java-flight-recorder"},next:{title:"Use client libraries",permalink:"/public-networks/how-to/develop/client-libraries"}},d={},l=[{value:"Private key management",id:"private-key-management",level:2},{value:"Use an HD wallet",id:"use-an-hd-wallet",level:3},{value:"Specify your private key in code",id:"specify-your-private-key-in-code",level:3},{value:"Start a Besu node",id:"start-a-besu-node",level:2},{value:"Deploy a contract",id:"deploy-a-contract",level:2}];function c(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"use-hardhat",children:"Use Hardhat"})}),"\n",(0,r.jsx)(t.p,{children:"Developing for Besu using Hardhat is the same as developing for public Ethereum networks using Hardhat. Hardhat\nsupports Besu with the only difference being Besu does not support private key management."}),"\n",(0,r.jsx)(t.p,{children:"You can therefore use a wallet provider, or specify your private key in the code."}),"\n",(0,r.jsx)(t.h2,{id:"private-key-management",children:"Private key management"}),"\n",(0,r.jsx)(t.h3,{id:"use-an-hd-wallet",children:"Use an HD wallet"}),"\n",(0,r.jsxs)(t.p,{children:["To add the wallet provider, update the ",(0,r.jsx)(t.code,{children:"hardhat.config.ts"})," file in the project directory. Replace:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:""})," with the JSON-RPC endpoint (IP address and port) of a Besu node."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:""})," with the list of words that make up your account's mnemonic."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:" with your password if used."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:""})," with your account's private key."]}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'module.exports = {\n // See \n // for more about customizing your Hardhat configuration!\n networks: {\n besuWallet: {\n url: "",\n accounts: {\n mnemonic: "",\n path: "m/44\'/60\'/0\'/0",\n initialIndex: 0,\n count: 1,\n passphrase: "",\n },\n },\n },\n};\n'})}),"\n",(0,r.jsx)(t.h3,{id:"specify-your-private-key-in-code",children:"Specify your private key in code"}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"Ensure you do not commit private keys to source control like Github, always inject your keys at runtime as environment variables, or\nuse a vault or similar."})}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:"const provider = new ethers.JsonRpcApiProvider();\nconst wallet = new ethers.Wallet();\n// connect the wallet to the provider\nconst signer = wallet.connect(provider);\n\n"})}),"\n",(0,r.jsx)(t.h2,{id:"start-a-besu-node",children:"Start a Besu node"}),"\n",(0,r.jsx)(t.p,{children:"Start a Besu node with JSON-RPC enabled on the endpoint specified in the Hardhat configuration file."}),"\n",(0,r.jsx)(t.h2,{id:"deploy-a-contract",children:"Deploy a contract"}),"\n",(0,r.jsx)(t.p,{children:"To deploy a contract onto the Besu network:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npx hardhat scripts run ./scripts/deploy_my_contract.ts --network besuWallet\n"})})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>s});var r=n(96540);const o={},i=r.createContext(o);function a(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/02fd2e39.26c38d69.js b/assets/js/02fd2e39.26c38d69.js new file mode 100644 index 00000000000..286c29e9afd --- /dev/null +++ b/assets/js/02fd2e39.26c38d69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7936],{11210:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var s=n(74848),i=n(28453);const a={title:"Multi-tenancy",sidebar_position:4,description:"Multi-tenancy"},r="Multi-tenancy",c={id:"private-networks/concepts/privacy/multi-tenancy",title:"Multi-tenancy",description:"Multi-tenancy",source:"@site/docs/private-networks/concepts/privacy/multi-tenancy.md",sourceDirName:"private-networks/concepts/privacy",slug:"/private-networks/concepts/privacy/multi-tenancy",permalink:"/private-networks/concepts/privacy/multi-tenancy",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/multi-tenancy.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Multi-tenancy",sidebar_position:4,description:"Multi-tenancy"},sidebar:"privateDocSidebar",previous:{title:"Flexible privacy groups",permalink:"/private-networks/concepts/privacy/flexible-privacy"},next:{title:"Privacy plugin",permalink:"/private-networks/concepts/privacy/plugin"}},o={},l=[];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",header:"header",img:"img",p:"p",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"multi-tenancy",children:"Multi-tenancy"})}),"\n",(0,s.jsx)(t.p,{children:"By default, each participant in a privacy network uses its own Besu and Tessera node."}),"\n",(0,s.jsxs)(t.p,{children:["Multi-tenancy allows multiple participants to use the same Besu and Tessera node. Each participant is a ",(0,s.jsx)(t.em,{children:"tenant"}),", and the operator is the ",(0,s.jsx)(t.em,{children:"owner"})," of the Besu and Tessera node."]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["The operator is responsible for ",(0,s.jsx)(t.a,{href:"/private-networks/tutorials/privacy/multi-tenancy",children:"configuring multi-tenancy"}),", and has access to all tenant data."]})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Multi-tenancy",src:n(77719).A+"",width:"1512",height:"648"})}),"\n",(0,s.jsxs)(t.admonition,{type:"tip",children:[(0,s.jsx)(t.p,{children:"Ensure the multi-tenant Tessera node client API is configured to allow access only by the multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode."}),(0,s.jsx)(t.p,{children:"If not configured to allow access only by the multi-tenant Besu node, other Tessera clients, including other Besu nodes, might be able to access tenant data."}),(0,s.jsxs)(t.p,{children:["To secure access, you can ",(0,s.jsx)(t.a,{href:"/private-networks/how-to/configure/tls/client-and-server",children:"configure TLS between Besu and Tessera"})," with the ",(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/en/stable/HowTo/Configure/TLS/#whitelist",children:(0,s.jsx)(t.code,{children:"WHITELIST"})})," trust mode."]})]}),"\n",(0,s.jsx)(t.p,{children:"Multi-tenancy validates that tenants have permission to use the specified HTTP or WebSocket JSON-RPC requests, and the tenant has access to the requested privacy data. Private data is isolated and each tenant uses a JSON Web Token (JWT) for authentication."}),"\n",(0,s.jsxs)(t.p,{children:["You can ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"create the JWT either externally or internally"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},77719:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/Multi-tenancy-509dd20a1055029dd83055ddfc99139a.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>c});var s=n(96540);const i={},a=s.createContext(i);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/030f9ebf.652fe6a1.js b/assets/js/030f9ebf.652fe6a1.js new file mode 100644 index 00000000000..040ea7614d0 --- /dev/null +++ b/assets/js/030f9ebf.652fe6a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4656],{71920:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var t=s(74848),r=s(28453),a=s(11470),i=s(19365);const o={title:"Create a privacy enabled network using the Quickstart",sidebar_position:1,description:"Configure Besu privacy",tags:["private networks"]},l="Create a privacy-enabled network",c={id:"private-networks/tutorials/privacy/index",title:"Create a privacy enabled network using the Quickstart",description:"Configure Besu privacy",source:"@site/docs/private-networks/tutorials/privacy/index.md",sourceDirName:"private-networks/tutorials/privacy",slug:"/private-networks/tutorials/privacy/",permalink:"/private-networks/tutorials/privacy/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/privacy/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Create a privacy enabled network using the Quickstart",sidebar_position:1,description:"Configure Besu privacy",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create an Ethash network",permalink:"/private-networks/tutorials/ethash"},next:{title:"Create a multi-tenant network",permalink:"/private-networks/tutorials/privacy/multi-tenancy"}},d={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create Tessera directories",id:"1-create-tessera-directories",level:3},{value:"2. Generate Tessera keys",id:"2-generate-tessera-keys",level:3},{value:"3. Create Tessera configuration files",id:"3-create-tessera-configuration-files",level:3},{value:"4. Start the Tessera nodes",id:"4-start-the-tessera-nodes",level:3},{value:"5. Start Besu Node-1",id:"5-start-besu-node-1",level:3},{value:"6. Start Besu Node-2",id:"6-start-besu-node-2",level:3},{value:"7. Start Besu Node-3",id:"7-start-besu-node-3",level:3},{value:"8. Start Besu Node-4",id:"8-start-besu-node-4",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"create-a-privacy-enabled-network",children:"Create a privacy-enabled network"})}),"\n",(0,t.jsxs)(n.p,{children:["Configuring a network that supports private transactions requires starting a ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," node for each Besu node. Besu command line options associate the Besu node with the Tessera node."]}),"\n",(0,t.jsxs)(n.p,{children:["This tutorial assumes you have completed setting up an IBFT 2.0 network to the point where you have ",(0,t.jsx)(n.a,{href:"/private-networks/tutorials/ibft/#5-copy-the-node-private-keys-to-the-node-directories",children:"created the genesis file and copied the private keys"}),". If not, complete steps 1 to 5 of the ",(0,t.jsx)(n.a,{href:"/private-networks/tutorials/ibft/",children:"Create an IBFT 2.0"})," tutorial before continuing."]}),"\n",(0,t.jsxs)(n.admonition,{type:"important",children:[(0,t.jsxs)(n.p,{children:["To support privacy, ensure your genesis file includes at least the ",(0,t.jsx)(n.code,{children:"byzantium"})," milestone."]}),(0,t.jsx)(n.p,{children:"This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant."})]}),"\n",(0,t.jsx)(n.p,{children:"In this tutorial we start Tessera nodes for the four Besu nodes and associate each Besu node with a Tessera node."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/category/install",children:"Install Tessera"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"steps",children:"Steps"}),"\n",(0,t.jsx)(n.h3,{id:"1-create-tessera-directories",children:"1. Create Tessera directories"}),"\n",(0,t.jsxs)(n.p,{children:["Inside each ",(0,t.jsx)(n.code,{children:"Node-*"})," directory, create a ",(0,t.jsx)(n.code,{children:"Tessera"})," directory:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"IBFT-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u251c\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u2514\u2500\u2500 Node-4\n \u251c\u2500\u2500 data\n \u251c\u2500\u2500 Tessera\n"})}),"\n",(0,t.jsx)(n.h3,{id:"2-generate-tessera-keys",children:"2. Generate Tessera keys"}),"\n",(0,t.jsx)(n.p,{children:"This example creates an unlocked private key, meaning you do not need a password to decrypt the private key file."}),"\n",(0,t.jsxs)(n.p,{children:["In each ",(0,t.jsx)(n.code,{children:"Tessera"})," directory, generate a public/private key pair for the Tessera node:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"tessera -keygen -filename nodeKey\n"})}),"\n",(0,t.jsxs)(n.p,{children:["At the prompt, press ",(0,t.jsx)(n.strong,{children:"Enter"})," to create an unlocked key."]}),"\n",(0,t.jsxs)(n.p,{children:["Tessera generates the public/private key pair and saves the keys in the ",(0,t.jsx)(n.code,{children:"nodeKey.pub"})," and ",(0,t.jsx)(n.code,{children:"nodeKey.key"})," files."]}),"\n",(0,t.jsx)(n.h3,{id:"3-create-tessera-configuration-files",children:"3. Create Tessera configuration files"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Tessera"})," directory for each node, create a file called ",(0,t.jsx)(n.code,{children:"tessera.conf"}),", with the following configuration:"]}),"\n",(0,t.jsx)(n.admonition,{type:"important",children:(0,t.jsxs)(n.p,{children:["In production environments, only specify ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/TLS/",children:(0,t.jsx)(n.code,{children:"tls"})})," as ",(0,t.jsx)(n.code,{children:"OFF"})," if another transport security mechanism, such as WireGuard, is in place."]})}),"\n",(0,t.jsxs)(a.A,{children:[(0,t.jsx)(i.A,{value:"Node-1",label:"Node-1",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "mode": "orion",\n "useWhiteList": false,\n "jdbc": {\n "username": "sa",\n "password": "",\n "url": "jdbc:h2:./target/h2/tessera1",\n "autoCreateTables": true\n },\n "serverConfigs": [\n {\n "app": "ThirdParty",\n "serverAddress": "http://localhost:9101",\n "communicationType": "REST"\n },\n {\n "app": "Q2T",\n "serverAddress": "http://localhost:9102",\n "communicationType": "REST"\n },\n {\n "app": "P2P",\n "serverAddress": "http://localhost:9103",\n "sslConfig": {\n "tls": "OFF"\n },\n "communicationType": "REST"\n }\n ],\n "peer": [\n {\n "url": "http://localhost:9203"\n },\n {\n "url": "http://localhost:9303"\n },\n {\n "url": "http://localhost:9403"\n }\n ],\n "keys": {\n "passwords": [],\n "keyData": [\n {\n "privateKeyPath": "nodeKey.key",\n "publicKeyPath": "nodeKey.pub"\n }\n ]\n },\n "alwaysSendTo": []\n}\n'})})}),(0,t.jsx)(i.A,{value:"Node-2",label:"Node-2",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "mode": "orion",\n "useWhiteList": false,\n "jdbc": {\n "username": "sa",\n "password": "",\n "url": "jdbc:h2:./target/h2/tessera1",\n "autoCreateTables": true\n },\n "serverConfigs": [\n {\n "app": "ThirdParty",\n "serverAddress": "http://localhost:9201",\n "communicationType": "REST"\n },\n {\n "app": "Q2T",\n "serverAddress": "http://localhost:9202",\n "communicationType": "REST"\n },\n {\n "app": "P2P",\n "serverAddress": "http://localhost:9203",\n "sslConfig": {\n "tls": "OFF"\n },\n "communicationType": "REST"\n }\n ],\n "peer": [\n {\n "url": "http://localhost:9103"\n },\n {\n "url": "http://localhost:9303"\n },\n {\n "url": "http://localhost:9403"\n }\n ],\n "keys": {\n "passwords": [],\n "keyData": [\n {\n "privateKeyPath": "nodeKey.key",\n "publicKeyPath": "nodeKey.pub"\n }\n ]\n },\n "alwaysSendTo": []\n}\n'})})}),(0,t.jsx)(i.A,{value:"Node-3",label:"Node-3",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "mode": "orion",\n "useWhiteList": false,\n "jdbc": {\n "username": "sa",\n "password": "",\n "url": "jdbc:h2:./target/h2/tessera1",\n "autoCreateTables": true\n },\n "serverConfigs": [\n {\n "app": "ThirdParty",\n "serverAddress": "http://localhost:9301",\n "communicationType": "REST"\n },\n {\n "app": "Q2T",\n "serverAddress": "http://localhost:9302",\n "communicationType": "REST"\n },\n {\n "app": "P2P",\n "serverAddress": "http://localhost:9303",\n "sslConfig": {\n "tls": "OFF"\n },\n "communicationType": "REST"\n }\n ],\n "peer": [\n {\n "url": "http://localhost:9103"\n },\n {\n "url": "http://localhost:9203"\n },\n {\n "url": "http://localhost:9403"\n }\n ],\n "keys": {\n "passwords": [],\n "keyData": [\n {\n "privateKeyPath": "nodeKey.key",\n "publicKeyPath": "nodeKey.pub"\n }\n ]\n },\n "alwaysSendTo": []\n}\n'})})}),(0,t.jsx)(i.A,{value:"Node-4",label:"Node-4",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "mode": "orion",\n "useWhiteList": false,\n "jdbc": {\n "username": "sa",\n "password": "",\n "url": "jdbc:h2:./target/h2/tessera1",\n "autoCreateTables": true\n },\n "serverConfigs": [\n {\n "app": "ThirdParty",\n "serverAddress": "http://localhost:9401",\n "communicationType": "REST"\n },\n {\n "app": "Q2T",\n "serverAddress": "http://localhost:9402",\n "communicationType": "REST"\n },\n {\n "app": "P2P",\n "serverAddress": "http://localhost:9403",\n "sslConfig": {\n "tls": "OFF"\n },\n "communicationType": "REST"\n }\n ],\n "peer": [\n {\n "url": "http://localhost:9103"\n },\n {\n "url": "http://localhost:9203"\n },\n {\n "url": "http://localhost:9303"\n }\n ],\n "keys": {\n "passwords": [],\n "keyData": [\n {\n "privateKeyPath": "nodeKey.key",\n "publicKeyPath": "nodeKey.pub"\n }\n ]\n },\n "alwaysSendTo": []\n}\n'})})})]}),"\n",(0,t.jsx)(n.p,{children:"In the configuration file, specify:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Different port numbers for the various servers in the ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/TesseraAPI/",children:(0,t.jsx)(n.code,{children:"serverConfigs"})})," section."]}),"\n",(0,t.jsxs)(n.li,{children:["The address of the Tessera nodes to discover, in the ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/Peer-discovery/#specify-peers",children:(0,t.jsx)(n.code,{children:"peer"})})," section."]}),"\n",(0,t.jsx)(n.li,{children:"The location of the public/private key pair."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"4-start-the-tessera-nodes",children:"4. Start the Tessera nodes"}),"\n",(0,t.jsxs)(n.p,{children:["In each ",(0,t.jsx)(n.code,{children:"Tessera"})," directory, start Tessera specifying the ",(0,t.jsx)(n.a,{href:"#3-create-tessera-configuration-files",children:"configuration file"})," created in the previous step:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"tessera -configfile tessera.conf\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["After starting the first Tessera node and before starting the other nodes, the log message ",(0,t.jsx)(n.code,{children:"failed to connect to node"})," displays. This is normal behavior. Until you start the other peer nodes, your node is not connected and displays this warning. You can continue to start the other nodes."]})}),"\n",(0,t.jsx)(n.h3,{id:"5-start-besu-node-1",children:"5. Start Besu Node-1"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Node-1"})," directory, start Besu Node-1:"]}),"\n",(0,t.jsxs)(a.A,{children:[(0,t.jsx)(i.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0\n'})})}),(0,t.jsx)(i.A,{value:"Windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0\n'})})})]}),"\n",(0,t.jsx)(n.p,{children:"The command line specifies privacy options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-enabled",children:(0,t.jsx)(n.code,{children:"--privacy-enabled"})})," enables privacy"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-url",children:(0,t.jsx)(n.code,{children:"--privacy-url"})})," specifies the Q2T server address of the Tessera node (",(0,t.jsx)(n.code,{children:"Q2T"})," in ",(0,t.jsx)(n.code,{children:"tessera.conf"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-public-key-file",children:(0,t.jsx)(n.code,{children:"--privacy-public-key-file"})})," specifies the file containing Tessera node public key (created in ",(0,t.jsx)(n.a,{href:"#2-generate-tessera-keys",children:"3. Generate Tessera Keys"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(n.code,{children:"--rpc-http-api"})})," includes ",(0,t.jsx)(n.code,{children:"EEA"})," and ",(0,t.jsx)(n.code,{children:"PRIV"})," in the list of JSON-RPC APIs to enable privacy JSON-RPC API methods."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,t.jsx)(n.code,{children:"--min-gas-price"})})," is 0 for a ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas network"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,t.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})})," command line option to sign ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transactions"})," using a supplied key. The command line option is mandatory in privacy-enabled paid gas networks."]})}),"\n",(0,t.jsxs)(n.p,{children:["When the node starts, the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Node 1 Enode URL",src:s(14739).A+"",width:"988",height:"126"})}),"\n",(0,t.jsx)(n.h3,{id:"6-start-besu-node-2",children:"6. Start Besu Node-2"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Node-2"})," directory, start Besu Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,t.jsxs)(a.A,{children:[(0,t.jsx)(i.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0\n'})})}),(0,t.jsx)(i.A,{value:"Windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0\n'})})})]}),"\n",(0,t.jsxs)(n.p,{children:["The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(n.code,{children:"--bootnodes"})})," option specifies the enode URL of Node-1."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["When running Besu from the ",(0,t.jsx)(n.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Docker image"}),", ",(0,t.jsx)(n.a,{href:"/private-networks/get-started/install/run-docker-image#expose-ports",children:"expose ports"}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"7-start-besu-node-3",children:"7. Start Besu Node-3"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Node-3"})," directory, start Besu Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,t.jsxs)(a.A,{children:[(0,t.jsx)(i.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0\n'})})}),(0,t.jsx)(i.A,{value:"Windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0\n'})})})]}),"\n",(0,t.jsxs)(n.p,{children:["The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(n.code,{children:"--bootnodes"})})," option specifies the enode URL of Node-1."]}),"\n",(0,t.jsx)(n.h3,{id:"8-start-besu-node-4",children:"8. Start Besu Node-4"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Node-4"})," directory, start Besu Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,t.jsxs)(a.A,{children:[(0,t.jsx)(i.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0\n'})})}),(0,t.jsx)(i.A,{value:"Windows",label:"Windows",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0\n'})})})]}),"\n",(0,t.jsxs)(n.p,{children:["The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(n.code,{children:"--bootnodes"})})," option specifies the enode URL of Node-1."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var t=s(18215);const r={tabItem:"tabItem_Ymn6"};var a=s(74848);function i(e){let{children:n,hidden:s,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,i),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>T});var t=s(96540),r=s(18215),a=s(23104),i=s(56347),o=s(205),l=s(57485),c=s(31682),d=s(70679);function p(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return p(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function u(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const r=(0,i.W6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,l.aZ)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function y(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=h(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!u({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[c,p]=f({queryString:s,groupId:r}),[y,b]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,d.Dv)(s);return[r,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),v=(()=>{const e=c??y;return u({value:e,tabValues:a})?e:null})();(0,o.A)((()=>{v&&l(v)}),[v]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!u({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),p(e),b(e)}),[p,b,a]),tabValues:a}}var b=s(92303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(74848);function g(e){let{className:n,block:s,selectedValue:t,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{const n=e.currentTarget,s=l.indexOf(n),r=o[s].value;r!==t&&(c(n),i(r))},p=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;n=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;n=l[s]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":s},n),children:o.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:p,onClick:d,...a,className:(0,r.A)("tabs__item",v.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function x(e){let{lazy:n,children:s,selectedValue:a}=e;const i=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function m(e){const n=y(e);return(0,j.jsxs)("div",{className:(0,r.A)("tabs-container",v.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(x,{...n,...e})]})}function T(e){const n=(0,b.A)();return(0,j.jsx)(m,{...e,children:p(e.children)},String(n))}},14739:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var t=s(96540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06aa37f3.3638157d.js b/assets/js/06aa37f3.3638157d.js new file mode 100644 index 00000000000..78494bfb975 --- /dev/null +++ b/assets/js/06aa37f3.3638157d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3824],{35134:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>c,metadata:()=>t,toc:()=>h});var a=s(74848),i=s(28453),l=s(11470),r=s(19365);const c={title:"Private network options",sidebar_position:1,description:"Besu private networks CLI reference",tags:["private networks"]},o="Private network command line options",t={id:"private-networks/reference/cli/options",title:"Private network options",description:"Besu private networks CLI reference",source:"@site/docs/private-networks/reference/cli/options.md",sourceDirName:"private-networks/reference/cli",slug:"/private-networks/reference/cli/options",permalink:"/private-networks/reference/cli/options",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/cli/options.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Private network options",sidebar_position:1,description:"Besu private networks CLI reference",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Reference",permalink:"/private-networks/reference/"},next:{title:"Private network subcommands",permalink:"/private-networks/reference/cli/subcommands"}},d={},h=[{value:"Specify options",id:"specify-options",level:2},{value:"Options",id:"options",level:2},{value:"permissions-accounts-config-file",id:"permissions-accounts-config-file",level:3},{value:"permissions-accounts-config-file-enabled",id:"permissions-accounts-config-file-enabled",level:3},{value:"permissions-accounts-contract-address",id:"permissions-accounts-contract-address",level:3},{value:"permissions-accounts-contract-enabled",id:"permissions-accounts-contract-enabled",level:3},{value:"permissions-nodes-config-file",id:"permissions-nodes-config-file",level:3},{value:"permissions-nodes-config-file-enabled",id:"permissions-nodes-config-file-enabled",level:3},{value:"permissions-nodes-contract-address",id:"permissions-nodes-contract-address",level:3},{value:"permissions-nodes-contract-enabled",id:"permissions-nodes-contract-enabled",level:3},{value:"permissions-nodes-contract-version",id:"permissions-nodes-contract-version",level:3},{value:"poa-block-txs-selection-max-time",id:"poa-block-txs-selection-max-time",level:3},{value:"privacy-enabled",id:"privacy-enabled",level:3},{value:"privacy-marker-transaction-signing-key-file",id:"privacy-marker-transaction-signing-key-file",level:3},{value:"privacy-multi-tenancy-enabled",id:"privacy-multi-tenancy-enabled",level:3},{value:"privacy-flexible-groups-enabled",id:"privacy-flexible-groups-enabled",level:3},{value:"privacy-public-key-file",id:"privacy-public-key-file",level:3},{value:"privacy-tls-enabled",id:"privacy-tls-enabled",level:3},{value:"privacy-tls-keystore-file",id:"privacy-tls-keystore-file",level:3},{value:"privacy-tls-keystore-password-file",id:"privacy-tls-keystore-password-file",level:3},{value:"privacy-tls-known-enclave-file",id:"privacy-tls-known-enclave-file",level:3},{value:"privacy-url",id:"privacy-url",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"private-network-command-line-options",children:"Private network command line options"})}),"\n",(0,a.jsx)(n.p,{children:"This reference describes the syntax of the Besu private network command line interface (CLI) options."}),"\n",(0,a.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,a.jsxs)(n.p,{children:["This reference contains options that apply to only private networks. For options that apply to both private and public networks, see the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"public network options reference"}),"."]})}),"\n",(0,a.jsx)(n.h2,{id:"specify-options",children:"Specify options"}),"\n",(0,a.jsx)(n.p,{children:"You can specify Besu options:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"On the command line."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"besu [OPTIONS] [SUBCOMMAND]\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"As an environment variable. For each command line option, the equivalent environment variable is:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Uppercase."}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"_"})," replaces ",(0,a.jsx)(n.code,{children:"-"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Has a ",(0,a.jsx)(n.code,{children:"BESU_"})," prefix."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For example, set ",(0,a.jsx)(n.code,{children:"--miner-coinbase"})," using the ",(0,a.jsx)(n.code,{children:"BESU_MINER_COINBASE"})," environment variable."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In a ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file."}),"\n",(0,a.jsxs)(n.p,{children:["If using Bash or Z shell, you can view option suggestions by entering ",(0,a.jsx)(n.code,{children:"--"})," and pressing the Tab key twice."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"besu --Tab+Tab\n"})}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsx)(n.p,{children:"Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens."})}),"\n",(0,a.jsx)(n.h2,{id:"options",children:"Options"}),"\n",(0,a.jsx)(n.h3,{id:"permissions-accounts-config-file",children:(0,a.jsx)(n.code,{children:"permissions-accounts-config-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-config-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-config-file=/home/me/me_configFiles/myPermissionsFile\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'permissions-accounts-config-file="/home/me/me_configFiles/myPermissionsFile"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local#permissions-configuration-file",children:"accounts permissions configuration file"}),". The default is the ",(0,a.jsx)(n.code,{children:"permissions_config.toml"})," file in the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:"data directory"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"--permissions-accounts-config-file"})," and ",(0,a.jsx)(n.a,{href:"#permissions-nodes-config-file",children:(0,a.jsx)(n.code,{children:"--permissions-nodes-config-file"})})," can use the same file."]})}),"\n",(0,a.jsx)(n.h3,{id:"permissions-accounts-config-file-enabled",children:(0,a.jsx)(n.code,{children:"permissions-accounts-config-file-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-config-file-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-config-file-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"permissions-accounts-config-file-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables file-based account level permissions. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-accounts-contract-address",children:(0,a.jsx)(n.code,{children:"permissions-accounts-contract-address"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-contract-address=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-contract-address=xyz\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ADDRESS=xyz\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'permissions-accounts-contract-address="xyz"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The contract address for ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain account permissioning"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-accounts-contract-enabled",children:(0,a.jsx)(n.code,{children:"permissions-accounts-contract-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-contract-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-accounts-contract-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"permissions-accounts-contract-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables contract-based ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain account permissioning"}),". The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-nodes-config-file",children:(0,a.jsx)(n.code,{children:"permissions-nodes-config-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-config-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-config-file=/home/me/me_configFiles/myPermissionsFile\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_NODES_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'permissions-nodes-config-file="/home/me/me_configFiles/myPermissionsFile"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local#permissions-configuration-file",children:"nodes permissions configuration file"}),". The default is the ",(0,a.jsx)(n.code,{children:"permissions_config.toml"})," file in the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:"data directory"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"--permissions-nodes-config-file"})," and ",(0,a.jsx)(n.a,{href:"#permissions-accounts-config-file",children:(0,a.jsx)(n.code,{children:"--permissions-accounts-config-file"})})," can use the same file."]})}),"\n",(0,a.jsx)(n.h3,{id:"permissions-nodes-config-file-enabled",children:(0,a.jsx)(n.code,{children:"permissions-nodes-config-file-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-config-file-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-config-file-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_NODES_CONFIG_FILE_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"permissions-nodes-config-file-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables file-based node level permissions. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-nodes-contract-address",children:(0,a.jsx)(n.code,{children:"permissions-nodes-contract-address"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-address=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-address=xyz\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_NODES_CONTRACT_ADDRESS=xyz\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'permissions-nodes-contract-address="xyz"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The contract address for ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain node permissioning"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-nodes-contract-enabled",children:(0,a.jsx)(n.code,{children:"permissions-nodes-contract-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_NODES_CONTRACT_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"permissions-nodes-contract-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables contract-based ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain node permissioning"}),". The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"permissions-nodes-contract-version",children:(0,a.jsx)(n.code,{children:"permissions-nodes-contract-version"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-version=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--permissions-nodes-contract-version=2\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PERMISSIONS_NODES_CONTRACT_VERSION=2\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"permissions-nodes-contract-version=2\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Version of the EEA ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/onchain#specify-the-permissioning-contract-interface-version",children:"node permissioning interface"}),". The default is 1."]}),"\n",(0,a.jsx)(n.h3,{id:"poa-block-txs-selection-max-time",children:(0,a.jsx)(n.code,{children:"poa-block-txs-selection-max-time"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--poa-block-txs-selection-max-time=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--poa-block-txs-selection-max-time=80\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_POA_BLOCK_TXS_SELECTION_MAX_TIME=80\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"poa-block-txs-selection-max-time=80\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum time that can be spent selecting transactions to be included in a block,\nas a percentage of the fixed block time of the network.\nThe default is ",(0,a.jsx)(n.code,{children:"75"}),", or 75%."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This option only applies to proof-of-authority networks.\nFor proof-of-stake and proof-of-work networks, see\n",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#block-txs-selection-max-time",children:(0,a.jsx)(n.code,{children:"--block-txs-selection-max-time"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"privacy-enabled",children:(0,a.jsx)(n.code,{children:"privacy-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"privacy-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"}),". The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"important",children:(0,a.jsxs)(n.p,{children:["Using private transactions with ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats",children:"pruning"})," or ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"fast sync"})," is not supported."]})}),"\n",(0,a.jsx)(n.h3,{id:"privacy-marker-transaction-signing-key-file",children:(0,a.jsx)(n.code,{children:"privacy-marker-transaction-signing-key-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-marker-transaction-signing-key-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-marker-transaction-signing-key-file=/home/me/me_node/myPrivateKey\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_MARKER_TRANSACTION_SIGNING_KEY_FILE=/home/me/me_node/myPrivateKey\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-marker-transaction-signing-key-file="/home/me/me_node/myPrivateKey"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:""})," is the name of the private key file used to ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/sign-pmts",children:"sign privacy marker transactions"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This can be the same file used by ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,a.jsx)(n.code,{children:"--node-private-key-file"})}),", or a different key file to identify who signed the privacy marker transaction."]})}),"\n",(0,a.jsx)(n.p,{children:"You must specify this option if you're using:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"a privacy network where you pay gas. Also, the associated account must contain adequate funds."}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/private-networks/concepts/permissioning/#account-permissioning",children:"account permissioning"})," and privacy. You must include the corresponding public key in the accounts allowlist."]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"If you do not specify this option (for example, in a free gas network), Besu signs each transaction with a different randomly generated key."}),"\n",(0,a.jsx)(n.h3,{id:"privacy-multi-tenancy-enabled",children:(0,a.jsx)(n.code,{children:"privacy-multi-tenancy-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-multi-tenancy-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-multi-tenancy-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_MULTI_TENANCY_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"privacy-multi-tenancy-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"})," for private transactions. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"privacy-flexible-groups-enabled",children:(0,a.jsx)(n.code,{children:"privacy-flexible-groups-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-flexible-groups-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-flexible-groups-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_FLEXIBLE_GROUPS_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"privacy-flexible-groups-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"flexible privacy groups"}),". The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Deprecated syntax for this option is ",(0,a.jsx)(n.code,{children:"--privacy-onchain-groups-enabled"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"privacy-public-key-file",children:(0,a.jsx)(n.code,{children:"privacy-public-key-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-public-key-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-public-key-file=Tessera/nodeKey.pub\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_PUBLIC_KEY_FILE=Tessera/nodeKey.pub\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-public-key-file="Tessera/nodeKey.pub"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"https://docs.tessera.consensys.net/",children:"public key of the Tessera node"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"important",children:(0,a.jsxs)(n.p,{children:["You cannot specify ",(0,a.jsx)(n.code,{children:"privacy-public-key-file"})," when ",(0,a.jsx)(n.a,{href:"#privacy-multi-tenancy-enabled",children:(0,a.jsx)(n.code,{children:"--privacy-multi-tenancy-enabled"})})," is ",(0,a.jsx)(n.code,{children:"true"})]})}),"\n",(0,a.jsx)(n.h3,{id:"privacy-tls-enabled",children:(0,a.jsx)(n.code,{children:"privacy-tls-enabled"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-enabled[=]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_TLS_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"privacy-tls-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/privacy/#private-transaction-manager",children:"TLS on communication with the private transaction manager"}),". The default is false."]}),"\n",(0,a.jsx)(n.h3,{id:"privacy-tls-keystore-file",children:(0,a.jsx)(n.code,{children:"privacy-tls-keystore-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-keystore-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy--keystore-file=/home/me/me_node/key\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_TLS_KEYSTORE_FILE=/home/me/me_node/key\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-tls-keystore-file="/home/me/me_node/key"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"The keystore file (in PKCS #12 format) containing the private key and the certificate presented during authentication."}),"\n",(0,a.jsxs)(n.p,{children:["You must specify ",(0,a.jsx)(n.code,{children:"privacy-tls-keystore-file"})," if ",(0,a.jsx)(n.a,{href:"#privacy-tls-enabled",children:(0,a.jsx)(n.code,{children:"--privacy-tls-enabled"})})," is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"privacy-tls-keystore-password-file",children:(0,a.jsx)(n.code,{children:"privacy-tls-keystore-password-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-keystore-password-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-keystore-password-file=/home/me/me_node/password\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-tls-keystore-password-file="/home/me/me_node/password"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"The path to the file containing the password to decrypt the keystore."}),"\n",(0,a.jsx)(n.h3,{id:"privacy-tls-known-enclave-file",children:(0,a.jsx)(n.code,{children:"privacy-tls-known-enclave-file"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-known-enclave-file=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-tls-known-enclave-file=/home/me/me_node/knownEnclave\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_TLS_KNOWN_ENCLAVE_FILE=/home/me/me_node/knownEnclave\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-tls-known-enclave-file="/home/me/me_node/knownEnclave"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the file containing the hostnames, ports, and SHA256 certificate fingerprints of the ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/tls/client-and-server#create-the-known-servers-file",children:"authorized privacy enclave"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"privacy-url",children:(0,a.jsx)(n.code,{children:"privacy-url"})}),"\n",(0,a.jsxs)(l.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-url=\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--privacy-url=http://127.0.0.1:8888\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PRIVACY_URL=http://127.0.0.1:8888\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'privacy-url="http://127.0.0.1:8888"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The URL on which the ",(0,a.jsx)(n.a,{href:"/private-networks/tutorials/privacy/#3-create-tessera-configuration-files",children:"Tessera node"})," is running."]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>r});s(96540);var a=s(18215);const i={tabItem:"tabItem_Ymn6"};var l=s(74848);function r(e){let{children:n,hidden:s,className:r}=e;return(0,l.jsx)("div",{role:"tabpanel",className:(0,a.A)(i.tabItem,r),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>E});var a=s(96540),i=s(18215),l=s(23104),r=s(56347),c=s(205),o=s(57485),t=s(31682),d=s(70679);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:a,default:i}}=e;return{value:n,label:s,attributes:a,default:i}}))}(s);return function(e){const n=(0,t.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:s}=e;const i=(0,r.W6)(),l=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,o.aZ)(l),(0,a.useCallback)((e=>{if(!l)return;const n=new URLSearchParams(i.location.search);n.set(l,e),i.replace({...i.location,search:n.toString()})}),[l,i])]}function m(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,l=u(e),[r,o]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=s.find((e=>e.default))??s[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:l}))),[t,h]=x({queryString:s,groupId:i}),[m,f]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,l]=(0,d.Dv)(s);return[i,(0,a.useCallback)((e=>{s&&l.set(e)}),[s,l])]}({groupId:i}),j=(()=>{const e=t??m;return p({value:e,tabValues:l})?e:null})();(0,c.A)((()=>{j&&o(j)}),[j]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),f(e)}),[h,f,l]),tabValues:l}}var f=s(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=s(74848);function b(e){let{className:n,block:s,selectedValue:a,selectValue:r,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:t}=(0,l.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),i=c[s].value;i!==a&&(t(n),r(i))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;n=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;n=o[s]??o[o.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:l}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...l,className:(0,i.A)("tabs__item",j.tabItem,l?.className,{"tabs__item--active":a===n}),children:s??n},n)}))})}function g(e){let{lazy:n,children:s,selectedValue:l}=e;const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===l));return e?(0,a.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==l})))})}function y(e){const n=m(e);return(0,v.jsxs)("div",{className:(0,i.A)("tabs-container",j.tabList),children:[(0,v.jsx)(b,{...n,...e}),(0,v.jsx)(g,{...n,...e})]})}function E(e){const n=(0,f.A)();return(0,v.jsx)(y,{...e,children:h(e.children)},String(n))}},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>c});var a=s(96540);const i={},l=a.createContext(i);function r(e){const n=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0821166d.eae161cf.js b/assets/js/0821166d.eae161cf.js new file mode 100644 index 00000000000..7a39e13ed89 --- /dev/null +++ b/assets/js/0821166d.eae161cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6627],{11575:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var s=t(74848),r=t(28453);const i={title:"Start Besu",sidebar_position:3,description:"Start Besu on a public Ethereum network.",tags:["public networks"]},o="Start Besu",a={id:"public-networks/get-started/start-node",title:"Start Besu",description:"Start Besu on a public Ethereum network.",source:"@site/docs/public-networks/get-started/start-node.md",sourceDirName:"public-networks/get-started",slug:"/public-networks/get-started/start-node",permalink:"/public-networks/get-started/start-node",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/start-node.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Start Besu",sidebar_position:3,description:"Start Besu on a public Ethereum network.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Install binary distribution",permalink:"/public-networks/get-started/install/binary-distribution"},next:{title:"Connect to a network overview",permalink:"/public-networks/get-started/connect/"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Local block data",id:"local-block-data",level:2},{value:"Genesis configuration",id:"genesis-configuration",level:2},{value:"Syncing and storage",id:"syncing-and-storage",level:2},{value:"Run a node for testing",id:"run-a-node-for-testing",level:2},{value:"Run a node on Holesky testnet",id:"run-a-node-on-holesky-testnet",level:2},{value:"Run a node on Sepolia testnet",id:"run-a-node-on-sepolia-testnet",level:2},{value:"Run a node on Ethereum Mainnet",id:"run-a-node-on-ethereum-mainnet",level:2},{value:"Confirm node is running",id:"confirm-node-is-running",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"start-besu",children:"Start Besu"})}),"\n",(0,s.jsx)(n.p,{children:"Nodes can connect to Ethereum Mainnet and public testnets."}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:(0,s.jsx)(n.code,{children:"besu"})})," command with the required command line options to start a node."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu installed"})}),"\n",(0,s.jsx)(n.h2,{id:"local-block-data",children:"Local block data"}),"\n",(0,s.jsxs)(n.p,{children:["When connecting to a network other than the network previously connected to, you must either delete the local block data or use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,s.jsx)(n.code,{children:"--data-path"})})," option to specify a different data directory."]}),"\n",(0,s.jsxs)(n.p,{children:["To delete the local block data, delete the ",(0,s.jsx)(n.code,{children:"database"})," directory in the ",(0,s.jsx)(n.code,{children:"besu/build/distribution/besu-"})," directory."]}),"\n",(0,s.jsx)(n.h2,{id:"genesis-configuration",children:"Genesis configuration"}),"\n",(0,s.jsxs)(n.p,{children:["Besu specifies the genesis configuration, and sets the network ID and bootnodes when connecting to ",(0,s.jsx)(n.a,{href:"#run-a-node-on-holesky-testnet",children:"Holesky"}),", ",(0,s.jsx)(n.a,{href:"#run-a-node-on-sepolia-testnet",children:"Sepolia"}),", and ",(0,s.jsx)(n.a,{href:"#run-a-node-on-ethereum-mainnet",children:"Mainnet"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"The Ropsten, Rinkeby, and Kiln testnets are deprecated."})}),"\n",(0,s.jsxs)(n.p,{children:["When you specify ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,s.jsx)(n.code,{children:"--network=dev"})}),", Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,s.jsx)(n.code,{children:"--network=dev"})})," has an empty bootnodes list by default."]}),"\n",(0,s.jsxs)(n.p,{children:["The genesis files defining the genesis configurations are in the ",(0,s.jsx)(n.a,{href:"https://github.com/hyperledger/besu/tree/master/config/src/main/resources",children:"Besu source files"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To define a genesis configuration, create a genesis file (for example, ",(0,s.jsx)(n.code,{children:"genesis.json"}),") and specify the file using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,s.jsx)(n.code,{children:"--genesis-file"})})," option."]}),"\n",(0,s.jsx)(n.h2,{id:"syncing-and-storage",children:"Syncing and storage"}),"\n",(0,s.jsxs)(n.p,{children:["By default, Besu syncs to the current state of the blockchain using ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#fast-synchronization",children:"fast sync"})," in:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Networks specified using ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,s.jsx)(n.code,{children:"--network"})})," except for the ",(0,s.jsx)(n.code,{children:"dev"})," development network."]}),"\n",(0,s.jsx)(n.li,{children:"Ethereum Mainnet."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["We recommend using ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap sync"})," for a faster sync, by starting Besu with ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,s.jsx)(n.code,{children:"--sync-mode=SNAP"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["By default, Besu stores data in the ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#forest-of-tries",children:"Forest of Tries"})," format. We recommend using ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," for lower storage requirements, by starting Besu with ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,s.jsx)(n.code,{children:"--data-storage-format=BONSAI"})}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"run-a-node-for-testing",children:"Run a node for testing"}),"\n",(0,s.jsx)(n.p,{children:"To run a node that mines blocks at a rate suitable for testing purposes:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --host-allowlist="*" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You can also use the following ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"})," on the command line to start a node with the same options as above:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-toml",children:'network="dev"\nminer-enabled=true\nminer-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\nrpc-http-cors-origins=["all"]\nhost-allowlist=["*"]\nrpc-ws-enabled=true\nrpc-http-enabled=true\ndata-path="/tmp/tmpdata-path"\n'})}),"\n",(0,s.jsxs)(n.admonition,{title:"Warning",type:"danger",children:[(0,s.jsx)(n.p,{children:"The following settings are a security risk in production environments:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Enabling the HTTP JSON-RPC service (",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-http-enabled"})}),") and setting ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,s.jsx)(n.code,{children:"--rpc-http-host"})})," to 0.0.0.0 exposes the RPC connection on your node to any remote connection."]}),"\n",(0,s.jsxs)(n.li,{children:["Setting ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,s.jsx)(n.code,{children:"--host-allowlist"})})," to ",(0,s.jsx)(n.code,{children:'"*"'})," allows JSON-RPC API access from any host."]}),"\n",(0,s.jsxs)(n.li,{children:["Setting ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,s.jsx)(n.code,{children:"--rpc-http-cors-origins"})})," to ",(0,s.jsx)(n.code,{children:'"all"'})," or ",(0,s.jsx)(n.code,{children:'"*"'})," allows cross-origin resource sharing (CORS) access from any domain."]}),"\n"]})]}),"\n",(0,s.jsx)(n.h2,{id:"run-a-node-on-holesky-testnet",children:"Run a node on Holesky testnet"}),"\n",(0,s.jsxs)(n.p,{children:["To run a node on ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/holesky",children:"Holesky"})," specifying a data directory:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --network=holesky --data-path=/\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:""})," and ",(0,s.jsx)(n.code,{children:""})," are the path and directory to save the Holesky chain data to."]}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/testnet",children:"guide on connecting to a testnet"})," for more information."]}),"\n",(0,s.jsx)(n.h2,{id:"run-a-node-on-sepolia-testnet",children:"Run a node on Sepolia testnet"}),"\n",(0,s.jsxs)(n.p,{children:["To run a node on ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/sepolia",children:"Sepolia"})," specifying a data directory:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --network=sepolia --data-path=/\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:""})," and ",(0,s.jsx)(n.code,{children:""})," are the path and directory to save the Sepolia chain data to."]}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/testnet",children:"guide on connecting to a testnet"})," for more information."]}),"\n",(0,s.jsx)(n.h2,{id:"run-a-node-on-ethereum-mainnet",children:"Run a node on Ethereum Mainnet"}),"\n",(0,s.jsx)(n.p,{children:"To run a node on the Ethereum Mainnet:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu\n"})}),"\n",(0,s.jsx)(n.p,{children:"To run a node on Mainnet with the HTTP JSON-RPC service enabled and available for localhost only:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --rpc-http-enabled\n"})}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/mainnet",children:"guide on connecting to Mainnet"})," for more information."]}),"\n",(0,s.jsx)(n.h2,{id:"confirm-node-is-running",children:"Confirm node is running"}),"\n",(0,s.jsxs)(n.p,{children:["If you started Besu with the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-http-enabled"})})," option, use ",(0,s.jsx)(n.a,{href:"https://curl.haxx.se/",children:"cURL"})," to call ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/",children:"JSON-RPC API methods"})," to confirm the node is running."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"eth_chainId"})," returns the chain ID of the network."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}\' localhost:8545\n'})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"eth_syncing"})," returns the starting, current, and highest block."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}\' localhost:8545\n'})}),"\n",(0,s.jsxs)(n.p,{children:["For example, after connecting to Mainnet, ",(0,s.jsx)(n.code,{children:"eth_syncing"})," will return something similar to:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "startingBlock": "0x0",\n "currentBlock": "0x2d0",\n "highestBlock": "0x66c0"\n }\n}\n'})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(96540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/083d4b51.bd7608aa.js b/assets/js/083d4b51.bd7608aa.js new file mode 100644 index 00000000000..94a2f403555 --- /dev/null +++ b/assets/js/083d4b51.bd7608aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2622],{77384:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=s(74848),i=s(28453);const a={title:"Transaction types",sidebar_position:1,description:"Description of the different transaction types",tags:["public networks","private networks"]},r="Transaction types",c={id:"public-networks/concepts/transactions/types",title:"Transaction types",description:"Description of the different transaction types",source:"@site/docs/public-networks/concepts/transactions/types.md",sourceDirName:"public-networks/concepts/transactions",slug:"/public-networks/concepts/transactions/types",permalink:"/public-networks/concepts/transactions/types",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/transactions/types.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Transaction types",sidebar_position:1,description:"Description of the different transaction types",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Parallel transaction execution",permalink:"/public-networks/concepts/parallel-transaction-execution"},next:{title:"Transaction pool",permalink:"/public-networks/concepts/transactions/pool"}},o={},d=[{value:"FRONTIER transactions",id:"frontier-transactions",level:2},{value:"ACCESS_LIST transactions",id:"access_list-transactions",level:2},{value:"EIP1559 transactions",id:"eip1559-transactions",level:2},{value:"BLOB transactions",id:"blob-transactions",level:2},{value:"View blob transaction costs",id:"view-blob-transaction-costs",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"transaction-types",children:"Transaction types"})}),"\n",(0,n.jsxs)(t.p,{children:["You can interact with the Besu JSON-RPC API using different transaction types (specified by the ",(0,n.jsx)(t.code,{children:"transactionType"})," parameter)."]}),"\n",(0,n.jsxs)(t.p,{children:["The following API objects use a unique format for each ",(0,n.jsx)(t.code,{children:"transactionType"}),":"]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/public-networks/reference/api/objects#pending-transaction-object",children:"Pending transaction object"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"Transaction object"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"Transaction call object"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/public-networks/reference/api/objects#transaction-receipt-object",children:"Transaction receipt object"})}),"\n"]}),"\n",(0,n.jsxs)(t.h2,{id:"frontier-transactions",children:[(0,n.jsx)(t.code,{children:"FRONTIER"})," transactions"]}),"\n",(0,n.jsxs)(t.p,{children:["Transactions with type ",(0,n.jsx)(t.code,{children:"FRONTIER"})," are ",(0,n.jsx)(t.em,{children:"legacy transactions"})," that use the transaction format existing before typed transactions were introduced in ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-2718",children:"EIP-2718"}),". They contain the parameters ",(0,n.jsx)(t.code,{children:"chainId"}),", ",(0,n.jsx)(t.code,{children:"nonce"}),", ",(0,n.jsx)(t.code,{children:"gasPrice"}),", ",(0,n.jsx)(t.code,{children:"gasLimit"}),", ",(0,n.jsx)(t.code,{children:"to"}),", ",(0,n.jsx)(t.code,{children:"value"}),", ",(0,n.jsx)(t.code,{children:"data"}),", ",(0,n.jsx)(t.code,{children:"v"}),", ",(0,n.jsx)(t.code,{children:"r"}),", and ",(0,n.jsx)(t.code,{children:"s"}),". Legacy transactions don't use ",(0,n.jsx)(t.a,{href:"#access_list-transactions",children:"access lists"})," or incorporate ",(0,n.jsx)(t.a,{href:"#eip1559-transactions",children:"EIP-1559 fee market changes"}),"."]}),"\n",(0,n.jsxs)(t.h2,{id:"access_list-transactions",children:[(0,n.jsx)(t.code,{children:"ACCESS_LIST"})," transactions"]}),"\n",(0,n.jsxs)(t.p,{children:["Transactions with type ",(0,n.jsx)(t.code,{children:"ACCESS_LIST"})," are transactions introduced in ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-2930",children:"EIP-2930"}),". They contain, along with the ",(0,n.jsx)(t.a,{href:"#frontier-transactions",children:"legacy parameters"}),", an ",(0,n.jsx)(t.code,{children:"accessList"})," parameter, which specifies an array of addresses and storage keys that the transaction plans to access (an ",(0,n.jsx)(t.em,{children:"access list"}),"). ",(0,n.jsx)(t.code,{children:"ACCESS_LIST"})," transactions must specify an access list, and they don't incorporate ",(0,n.jsx)(t.a,{href:"#eip1559-transactions",children:"EIP-1559 fee market changes"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Use the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_createaccesslist",children:(0,n.jsx)(t.code,{children:"eth_createAccessList"})})," API to simulate a transaction which returns the addresses and storage keys that may be used to send the real transaction, and the approximate gas cost."]}),"\n",(0,n.jsxs)(t.h2,{id:"eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"\n",(0,n.jsxs)(t.p,{children:["Transactions with type ",(0,n.jsx)(t.code,{children:"EIP1559"})," are transactions introduced in ",(0,n.jsx)(t.a,{href:"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md",children:"EIP-1559"}),". EIP-1559 addresses the network congestion and overpricing of transaction fees caused by the historical fee market, in which users send transactions specifying a gas price bid using the ",(0,n.jsx)(t.code,{children:"gasPrice"})," parameter, and miners choose transactions with the highest bids."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions don't specify ",(0,n.jsx)(t.code,{children:"gasPrice"}),", and instead use an in-protocol, dynamically changing ",(0,n.jsx)(t.em,{children:"base fee"})," per gas. At each block, the base fee per gas is adjusted to address network congestion as measured by a gas target."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions contain, along with the ",(0,n.jsx)(t.a,{href:"#access_list-transactions",children:(0,n.jsx)(t.code,{children:"accessList"})})," parameter and ",(0,n.jsx)(t.a,{href:"#frontier-transactions",children:"legacy parameters"})," except for ",(0,n.jsx)(t.code,{children:"gasPrice"}),", a ",(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})," parameter, which specifies the maximum fee the sender is willing to pay per gas above the base fee (the maximum ",(0,n.jsx)(t.em,{children:"priority fee"})," per gas), and a ",(0,n.jsx)(t.code,{children:"maxFeePerGas"})," parameter, which specifies the maximum total fee (base fee + priority fee) the sender is willing to pay per gas."]}),"\n",(0,n.jsxs)(t.p,{children:["An ",(0,n.jsx)(t.code,{children:"EIP1559"})," transaction always pays the base fee of the block it's included in, and it pays a priority fee as priced by ",(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})," or, if the base fee per gas + ",(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})," exceeds ",(0,n.jsx)(t.code,{children:"maxFeePerGas"}),", it pays a priority fee as priced by ",(0,n.jsx)(t.code,{children:"maxFeePerGas"})," minus the base fee per gas. The base fee is burned, and the priority fee is paid to the miner that included the transaction. A transaction's priority fee per gas incentivizes miners to include the transaction over other transactions with lower priority fees per gas."]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions must specify both ",(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})," and ",(0,n.jsx)(t.code,{children:"maxFeePerGas"}),". They must not specify ",(0,n.jsx)(t.code,{children:"gasPrice"}),"."]}),"\n",(0,n.jsxs)(t.h2,{id:"blob-transactions",children:[(0,n.jsx)(t.code,{children:"BLOB"})," transactions"]}),"\n",(0,n.jsxs)(t.p,{children:["Shard blob transactions introduced in ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-4844",children:"EIP-4844"})," enable scaling the\nEthereum network by allowing large amounts of data (blobs) to be included that cannot be directly accessed or\nprocessed by the Ethereum Virtual Machine (EVM)."]}),"\n",(0,n.jsx)(t.p,{children:"When the network includes a blob-carrying transaction in a block, the transaction doesn't actually contain\nthe blob data itself. Instead, it contains a commitment to this data. The EVM can verify this commitment to\nensure the data's availability and integrity without directly accessing the data."}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"A commitment is a type of cryptographic proof that securely and verifiably confirms the existence and integrity\nof large data blobs."})}),"\n",(0,n.jsx)(t.p,{children:"This mechanism significantly reduces the computational and storage burden on the Ethereum network while ensuring\nthat the data is available for those who need it (for example, rollups or other layer 2 solutions that rely on data\navailability for their security and operation)."}),"\n",(0,n.jsx)(t.p,{children:"Blobs are temporarily stored by consensus clients such as Teku, and blocks on the execution layer permanently store\nthe the reference to the blob."}),"\n",(0,n.jsx)(t.h3,{id:"view-blob-transaction-costs",children:"View blob transaction costs"}),"\n",(0,n.jsxs)(t.p,{children:["Use the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_blobbasefee",children:(0,n.jsx)(t.code,{children:"eth_blobBaseFee"})})," method to view the current base\nfee per blob gas in wei."]}),"\n",(0,n.jsxs)(t.p,{children:["You can also use ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_feehistory",children:(0,n.jsx)(t.code,{children:"eth_feeHistory"})})," to view the historical\nblob transaction cost details."]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>c});var n=s(96540);const i={},a=n.createContext(i);function r(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0c3b97c4.56a83f3e.js b/assets/js/0c3b97c4.56a83f3e.js new file mode 100644 index 00000000000..da929d6e5a3 --- /dev/null +++ b/assets/js/0c3b97c4.56a83f3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2682],{30604:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=r(74848),n=r(28453);const i={title:"System requirements",description:"Ensure you meet the system requirements to sync and run Besu.",sidebar_position:1,tags:["private networks"]},o="System requirements",a={id:"private-networks/get-started/system-requirements",title:"System requirements",description:"Ensure you meet the system requirements to sync and run Besu.",source:"@site/docs/private-networks/get-started/system-requirements.md",sourceDirName:"private-networks/get-started",slug:"/private-networks/get-started/system-requirements",permalink:"/private-networks/get-started/system-requirements",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/get-started/system-requirements.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"System requirements",description:"Ensure you meet the system requirements to sync and run Besu.",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Get started",permalink:"/private-networks/get-started"},next:{title:"Installation options",permalink:"/private-networks/get-started/install/"}},l={},d=[{value:"Determining system requirements",id:"determining-system-requirements",level:2},{value:"Java Virtual Machine size",id:"java-virtual-machine-size",level:2},{value:"VM requirements",id:"vm-requirements",level:2},{value:"Disk type",id:"disk-type",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"system-requirements",children:"System requirements"})}),"\n",(0,s.jsx)(t.p,{children:"Private network system requirements depend on many factors, including:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Size of the world state for the network."}),"\n",(0,s.jsx)(t.li,{children:"Number of transactions submitted to the network."}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"/public-networks/reference/genesis-items#genesis-block-parameters",children:"Block gas limit"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Number and complexity of ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"JSON-RPC"}),", ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"PubSub"}),", or ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/graphql",children:"GraphQL"})," queries handled by the node."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Participation in private networks is typically restricted in some way, so the volume of traffic is much lower than on Mainnet, resulting in lower system requirements."}),"\n",(0,s.jsx)(t.h2,{id:"determining-system-requirements",children:"Determining system requirements"}),"\n",(0,s.jsxs)(t.p,{children:["To determine system requirements, check CPU and disk space requirements using ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/monitor/metrics",children:"Prometheus"}),". Grafana provides a ",(0,s.jsx)(t.a,{href:"https://grafana.com/grafana/dashboards/10273",children:"sample dashboard"})," for Besu."]}),"\n",(0,s.jsx)(t.h2,{id:"java-virtual-machine-size",children:"Java Virtual Machine size"}),"\n",(0,s.jsx)(t.p,{children:"Depending on your environment and network setup, the minimum Java Virtual Machine (JVM) memory requirement for private networks is 4 GB."}),"\n",(0,s.jsx)(t.p,{children:"JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs."}),"\n",(0,s.jsx)(t.h2,{id:"vm-requirements",children:"VM requirements"}),"\n",(0,s.jsxs)(t.p,{children:["If you set up your own VM locally using a VM manager such as ",(0,s.jsx)(t.a,{href:"https://www.oracle.com/virtualization/virtualbox/",children:"VirtualBox"}),":"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Ensure you enable Intel Virtualization Technology (VTx) and Virtualization Technology for Directed I/O (VT-d) in the BIOS settings."}),"\n",(0,s.jsx)(t.li,{children:"On Windows, you might need to disable Hyper-V in the Windows Feature list."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"We recommend you create a VM with the following attributes:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Memory size: Set to 6 GB (recommended)"}),"\n",(0,s.jsx)(t.li,{children:"Create a virtual hard disk with at least 10 GB (20 GB recommended)"}),"\n",(0,s.jsx)(t.li,{children:"Virtual hard disk file type: VDI (if you need to share it with other apps, use VHD)"}),"\n",(0,s.jsxs)(t.li,{children:['(Optional) You can create a shared directory to copy block files or genesis files from the host computer to the VM. For details on how to create a shared directory, see "Share Folders" in the ',(0,s.jsx)(t.a,{href:"https://docs.oracle.com/en/virtualization/virtualbox/6.1/user/",children:"Oracle VirtualBox documentation"}),"."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"disk-type",children:"Disk type"}),"\n",(0,s.jsxs)(t.p,{children:["Use ",(0,s.jsx)(t.a,{href:"https://cloud.google.com/compute/docs/disks",children:"local SSD storage"})," for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup."]}),"\n",(0,s.jsxs)(t.p,{children:["You can use local SSDs through ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/SCSI",children:"SCSI interfaces"}),". For higher performance in production settings, we recommend upgrading to ",(0,s.jsx)(t.a,{href:"https://cloud.google.com/compute/docs/disks/local-ssd#performance",children:"NVMe interfaces"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>o,x:()=>a});var s=r(96540);const n={},i=s.createContext(n);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ea635c0.dc4c9db9.js b/assets/js/0ea635c0.dc4c9db9.js new file mode 100644 index 00000000000..8b088f51e65 --- /dev/null +++ b/assets/js/0ea635c0.dc4c9db9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6126],{54036:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>f,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var s=i(74848),t=i(28453);const o={title:"Genesis file",sidebar_position:8,description:"Learn about configuring a network using the genesis file.",tags:["public networks","private networks"]},r="Genesis file",c={id:"public-networks/concepts/genesis-file",title:"Genesis file",description:"Learn about configuring a network using the genesis file.",source:"@site/docs/public-networks/concepts/genesis-file.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/genesis-file",permalink:"/public-networks/concepts/genesis-file",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/genesis-file.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:8,frontMatter:{title:"Genesis file",sidebar_position:8,description:"Learn about configuring a network using the genesis file.",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Events and logs",permalink:"/public-networks/concepts/events-and-logs"},next:{title:"Node keys",permalink:"/public-networks/concepts/node-keys"}},a={},l=[];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"genesis-file",children:"Genesis file"})}),"\n",(0,s.jsx)(n.p,{children:"The genesis file defines the first block in the chain, and the first block defines which chain you want to join."}),"\n",(0,s.jsxs)(n.p,{children:["For Ethereum Mainnet and public testnets (for example, Holesky) the genesis configuration definition is in Besu and used when specifying a public network using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,s.jsx)(n.code,{children:"--network"})})," command line option."]}),"\n",(0,s.jsxs)(n.p,{children:["For private networks, ",(0,s.jsx)(n.a,{href:"https://consensys.net/blog/quorum/hyperledger-besu-how-to-create-an-ethereum-genesis-file/",children:"create a JSON genesis file"}),", then specify the genesis file using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,s.jsx)(n.code,{children:"--genesis-file"})})," command line option."]}),"\n",(0,s.jsxs)(n.p,{children:["The genesis file specifies the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/genesis-items",children:"network-wide settings"}),", such as those for a ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas network"}),", so all nodes in a network must use the same genesis file."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["You can specify node-level settings on the command line or in the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"node configuration file"}),"."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:'title="Example IBFT 2.0 genesis file"',children:'{\n "config": {\n "chainId": 2018,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n }\n },\n "nonce": "0x0",\n "timestamp": "0x58ee40ba",\n "extraData": "0xf83ea00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000c0",\n "gasLimit": "0x1fffffffffffff",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb": {\n "balance": "0xad78ebc5ac6200000"\n }\n }\n}\n'})})]})}function f(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>c});var s=i(96540);const t={},o=s.createContext(t);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0ef1fb3f.ecd4d212.js b/assets/js/0ef1fb3f.ecd4d212.js new file mode 100644 index 00000000000..fc1eebe4711 --- /dev/null +++ b/assets/js/0ef1fb3f.ecd4d212.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[370],{94289:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=s(74848),o=s(28453);const i={title:"Sync Besu",sidebar_position:1,description:"Full and archive node types",tags:["public networks"]},r="Sync Besu",c={id:"public-networks/get-started/connect/sync-node",title:"Sync Besu",description:"Full and archive node types",source:"@site/docs/public-networks/get-started/connect/sync-node.md",sourceDirName:"public-networks/get-started/connect",slug:"/public-networks/get-started/connect/sync-node",permalink:"/public-networks/get-started/connect/sync-node",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/connect/sync-node.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Sync Besu",sidebar_position:1,description:"Full and archive node types",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Connect to a network overview",permalink:"/public-networks/get-started/connect/"},next:{title:"Connect to Mainnet",permalink:"/public-networks/get-started/connect/mainnet"}},a={},d=[{value:"Sync times",id:"sync-times",level:2},{value:"Storage",id:"storage",level:2},{value:"Run a full node",id:"run-a-full-node",level:2},{value:"Snap synchronization",id:"snap-synchronization",level:3},{value:"Checkpoint synchronization",id:"checkpoint-synchronization",level:3},{value:"Fast synchronization",id:"fast-synchronization",level:3},{value:"Run an archive node",id:"run-an-archive-node",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"sync-besu",children:"Sync Besu"})}),"\n",(0,t.jsxs)(n.p,{children:["Besu supports two node types, commonly referred to as ",(0,t.jsx)(n.a,{href:"#run-a-full-node",children:"full nodes"})," and\n",(0,t.jsx)(n.a,{href:"#run-an-archive-node",children:"archive nodes"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["A full node consists of an\n",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-and-consensus-clients",children:"execution and consensus client"}),",\nand stores a local copy of the blockchain.\nWith a full node, you can check current balances, sign and send transactions, and look at current\ndapp data."]}),"\n",(0,t.jsx)(n.p,{children:"Full nodes can guarantee the latest state of the blockchain (and some older states). However, they\ncan't serve the network with all data requests (for example, the balance of an account at an old\nblock)."}),"\n",(0,t.jsx)(n.p,{children:"An archive node is a node that also stores the intermediary state of every account and contract\nfor every block since the genesis block."}),"\n",(0,t.jsx)(n.p,{children:"Archive nodes can do everything full nodes do, and they can also access historical state data.\nThis means that archive nodes require more disk space than full nodes."}),"\n",(0,t.jsxs)(n.p,{children:["Besu must connect with other peers to sync with the network. If your node is having trouble peering,\ntry ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/peering",children:"troubleshooting peering"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"sync-times",children:"Sync times"}),"\n",(0,t.jsx)(n.p,{children:"To sync with a public network, Besu runs two processes in parallel: the world state sync and the\nblockchain download."}),"\n",(0,t.jsx)(n.p,{children:"While the world state syncs, Besu downloads and imports the blockchain in the background.\nThe blockchain download time depends on CPU, the network, Besu's peers, and disk speed.\nThe blockchain download generally takes longer than the world state sync. Besu must catch up to the\ncurrent chain head and sync the world state to participate on Mainnet."}),"\n",(0,t.jsx)(n.p,{children:"The following table shows the average world state sync time, and blockchain download time, for each\nsync mode on Mainnet."}),"\n",(0,t.jsx)(n.p,{children:"All times are hardware dependent; this table is based on running AWS instances m6gd.2xlarge.\nEach sync mode also has its own world state database size."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Sync mode"}),(0,t.jsx)(n.th,{children:"Time to sync world state"}),(0,t.jsx)(n.th,{children:"Time to download blockchain"}),(0,t.jsx)(n.th,{children:"Disk usage"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Snap"}),(0,t.jsx)(n.td,{children:"~6 hours"}),(0,t.jsx)(n.td,{children:"~1.5 days"}),(0,t.jsx)(n.td,{children:"Average disk"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Checkpoint"}),(0,t.jsx)(n.td,{children:"~5 hours"}),(0,t.jsx)(n.td,{children:"~13 hours"}),(0,t.jsx)(n.td,{children:"Smallest disk"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Fast"}),(0,t.jsx)(n.td,{children:"~1.5 days"}),(0,t.jsx)(n.td,{children:"~1.5 days"}),(0,t.jsx)(n.td,{children:"Average disk"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Full"}),(0,t.jsx)(n.td,{children:"~weeks"}),(0,t.jsx)(n.td,{children:"~weeks"}),(0,t.jsx)(n.td,{children:"Largest disk"})]})]})]}),"\n",(0,t.jsx)(n.admonition,{title:"Notes",type:"note",children:(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["As of late 2023, an average Mainnet snap sync consumes around 1000 GB using Bonsai Tries.\nRead more about ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#storage-requirements",children:"storage requirements"}),"\nacross data storage formats and sync modes."]}),"\n",(0,t.jsx)(n.li,{children:"Testnets take significantly less time and space to sync."}),"\n"]})}),"\n",(0,t.jsx)(n.h2,{id:"storage",children:"Storage"}),"\n",(0,t.jsxs)(n.p,{children:["You can store the world state using ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#forest-of-tries",children:"Forest of Tries"}),"\nor ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["If you're ",(0,t.jsx)(n.a,{href:"#run-a-full-node",children:"running a full node"}),", we recommend using Bonsai Tries for the lowest\nstorage requirements."]}),"\n",(0,t.jsx)(n.h2,{id:"run-a-full-node",children:"Run a full node"}),"\n",(0,t.jsxs)(n.p,{children:["A full node stores a local copy of the blockchain and the current state of the blockchain.\nYou can run a full node using ",(0,t.jsx)(n.a,{href:"#snap-synchronization",children:"snap synchronization (snap sync)"}),",\n",(0,t.jsx)(n.a,{href:"#checkpoint-synchronization",children:"checkpoint synchronization (checkpoint sync)"}),", or\n",(0,t.jsx)(n.a,{href:"#fast-synchronization",children:"fast synchronization (fast sync)"}),"."]}),"\n",(0,t.jsx)(n.admonition,{title:"Sync nodes for BFT",type:"note",children:(0,t.jsxs)(n.p,{children:["Snap sync and checkpoint sync are not supported for\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," or\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," networks."]})}),"\n",(0,t.jsx)(n.h3,{id:"snap-synchronization",children:"Snap synchronization"}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"We recommend using snap sync over fast sync because snap sync can be faster than fast sync by\nseveral days (for Mainnet)."}),(0,t.jsxs)(n.p,{children:["We recommend using snap sync with the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"}),"\ndata storage format for the fastest sync and lowest storage requirements."]})]}),"\n",(0,t.jsxs)(n.p,{children:["Enable snap sync using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,t.jsx)(n.code,{children:"--sync-mode=SNAP"})}),". You need Besu\nversion 22.4.0 or later to use snap sync."]}),"\n",(0,t.jsxs)(n.p,{children:["Instead of downloading the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats",children:"state trie"})," node by node, snap\nsync downloads as many leaves of the trie as possible, and reconstructs the trie locally."]}),"\n",(0,t.jsxs)(n.p,{children:["You can't switch from fast sync to snap sync. If your node is blocked in the middle of a fast sync,\nyou can start over using snap sync instead by stopping the node, deleting the data directory, and\nstarting over using ",(0,t.jsx)(n.code,{children:"--sync-mode=SNAP"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"You can restart Besu during a snap sync in case of hardware or software problems. The sync resumes\nfrom the last valid world state and continues to download blocks starting from the last downloaded\nblock."}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/monitor/understand-metrics",children:"how to read the Besu metrics charts"})," when using\nsnap sync."]}),"\n",(0,t.jsx)(n.h3,{id:"checkpoint-synchronization",children:"Checkpoint synchronization"}),"\n",(0,t.jsxs)(n.p,{children:["Enable checkpoint sync using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,t.jsx)(n.code,{children:"--sync-mode=CHECKPOINT"})}),".\nYou need Besu version 22.4.3 or later to use checkpoint sync."]}),"\n",(0,t.jsxs)(n.p,{children:["Checkpoint sync behaves like ",(0,t.jsx)(n.a,{href:"#snap-synchronization",children:"snap sync"}),", but instead of syncing from the\ngenesis block, it syncs from a specific checkpoint block configured in the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"Besu genesis file"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Ethereum Mainnet and the Holesky testnet configurations already define default checkpoints, so you\ndon't have to add this yourself."}),"\n",(0,t.jsx)(n.p,{children:"For other networks, you can configure a checkpoint in the genesis file by specifying the block hash,\nnumber, and total difficulty as in the following example."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Checkpoint configuration example"',children:'"checkpoint": {\n "hash": "0x844d581cb00058d19f0584fb582fa2de208876ee56bbae27446a679baf4633f4",\n "number": 14700000,\n "totalDifficulty": "0xA2539264C62BF98CFC6"\n}\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If using ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"})," consensus, the\ncheckpoint must be the beginning of an epoch."]})}),"\n",(0,t.jsx)(n.p,{children:"If you enable checkpoint sync without a checkpoint configuration in the genesis file, Besu snap\nsyncs from the genesis block."}),"\n",(0,t.jsx)(n.p,{children:"You can restart Besu during a checkpoint sync in case of hardware or software problems. The sync\nresumes from the last valid world state and continues to download blocks starting from the last\ndownloaded block."}),"\n",(0,t.jsx)(n.h3,{id:"fast-synchronization",children:"Fast synchronization"}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"It might become impossible to sync Ethereum Mainnet using fast sync in the future. If you sync for\nthe first time or ever need to re-sync, update Besu to a version that supports newer sync methods."})}),"\n",(0,t.jsxs)(n.p,{children:["Enable fast sync using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,t.jsx)(n.code,{children:"--sync-mode=FAST"})}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Fast sync downloads the block headers and transaction receipts, and verifies the chain of block\nheaders from the genesis block."}),"\n",(0,t.jsx)(n.p,{children:"When starting fast sync, Besu first downloads the world state for a recent block verified by its\npeers (referred to as a pivot block), and then begins fast sync from the genesis block."}),"\n",(0,t.jsxs)(n.p,{children:["Fast sync is the default for named networks specified using the\n",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,t.jsx)(n.code,{children:"--network"})})," option, except for the ",(0,t.jsx)(n.code,{children:"dev"})," development\nnetwork. It's also the default if connecting to Ethereum Mainnet by not specifying the\n",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,t.jsx)(n.code,{children:"--network"})})," or\n",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,t.jsx)(n.code,{children:"--genesis-file"})})," options."]}),"\n",(0,t.jsxs)(n.p,{children:["Using fast sync with ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"}),"\nisn't supported."]}),"\n",(0,t.jsxs)(n.p,{children:["You can observe the ",(0,t.jsx)(n.code,{children:"besu_synchronizer_fast_sync_*"})," and ",(0,t.jsx)(n.code,{children:"besu_synchronizer_world_state_*"}),"\n",(0,t.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics#metrics-list",children:"metrics"})," to monitor fast sync."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"When fast syncing, block numbers increase until close to the head block, then the process pauses\nwhile the world state download completes. This may take a significant amount of time depending on\nworld state size, during which the current head block doesn't increase. For example, Mainnet may\ntake several days or more to fast sync. Fast sync time may increase because Besu picks new pivot\nblocks, or because peers prune the world state before it completes downloading."})}),"\n",(0,t.jsxs)(n.admonition,{title:"RocksDB error on AWS",type:"caution",children:[(0,t.jsxs)(n.p,{children:["When running Besu on some cloud providers, a known\n",(0,t.jsx)(n.a,{href:"https://github.com/facebook/rocksdb/issues/6435",children:"RocksDB"})," issue causes fast sync to fail occasionally.\nThe following error is displayed repeatedly:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"EthScheduler-Services-1 (importBlock) | ERROR | PipelineChainDownloader | Chain download failed. \nRestarting after short delay.\njava.util.concurrent.CompletionException: org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: block checksum mismatch:\n"})}),(0,t.jsxs)(n.p,{children:["The failure has been seen on AWS and Digital Ocean. On AWS, A full restart of the VM is required to\nrestart the fast sync. Fast sync isn't\n",(0,t.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/CHANGELOG.md#143",children:"currently supported on Digital Ocean"}),"."]})]}),"\n",(0,t.jsxs)(n.admonition,{title:"Pending state nodes stays constant",type:"caution",children:[(0,t.jsx)(n.p,{children:"When fast syncing, the pending state nodes count is the number of nodes yet to be downloaded, and it\nshould change constantly. Pending state nodes trend to 0 during fast sync and then goes to 0."}),(0,t.jsx)(n.p,{children:"If the number stays constant, this could mean your node isn't syncing against any peers."}),(0,t.jsx)(n.p,{children:"In the following example, the pivot block is 0 and the pending state nodes value is constant. This\nmeans the node isn't syncing against any peers. The fact that state nodes have been downloaded means\nat some stage it was syncing."}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Fast synchronization",src:s(55428).A+"",width:"2081",height:"260"})}),(0,t.jsx)(n.p,{children:"The easiest solution in this scenario is to restart fast sync to obtain a new pivot block."})]}),"\n",(0,t.jsx)(n.h2,{id:"run-an-archive-node",children:"Run an archive node"}),"\n",(0,t.jsxs)(n.p,{children:["An archive node stores all historical states of the blockchain.\nTo run an archive node, enable full synchronization (full sync) using\n",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,t.jsx)(n.code,{children:"--sync-mode=FULL"})}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Full sync starts from the genesis block and reprocesses all transactions."}),"\n",(0,t.jsx)(n.admonition,{title:"important",type:"caution",children:(0,t.jsxs)(n.p,{children:["Do not run an archive node with the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"}),"\ndata storage format.\nBonsai is designed for retrieving recent data only."]})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},55428:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/fastsync-8fadeea99996664121739a3d76a88124.png"},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>c});var t=s(96540);const o={},i=t.createContext(o);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f2e6691.47b9d6f1.js b/assets/js/0f2e6691.47b9d6f1.js new file mode 100644 index 00000000000..e78b456b81c --- /dev/null +++ b/assets/js/0f2e6691.47b9d6f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4524],{60441:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>p});var i=t(74848),o=t(28453);const r={title:"Public key infrastructure",sidebar_position:5,description:"Public key infrastructure",tags:["private networks"]},s="Public key infrastructure",a={id:"private-networks/concepts/pki",title:"Public key infrastructure",description:"Public key infrastructure",source:"@site/docs/private-networks/concepts/pki.md",sourceDirName:"private-networks/concepts",slug:"/private-networks/concepts/pki",permalink:"/private-networks/concepts/pki",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/pki.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Public key infrastructure",sidebar_position:5,description:"Public key infrastructure",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Permissioning plugin",permalink:"/private-networks/concepts/permissioning/plugin"},next:{title:"Plugins",permalink:"/private-networks/concepts/plugins"}},c={},p=[{value:"Node permissioning",id:"node-permissioning",level:2},{value:"Block proposal permissioning",id:"block-proposal-permissioning",level:2}];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"public-key-infrastructure",children:"Public key infrastructure"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Public key infrastructure (PKI) support is an early access feature, and functionality and options may be updated between releases."})}),"\n",(0,i.jsx)(n.p,{children:"Besu's public key infrastructure allows you to use certificates issued by a trusted authority to manage node and account identities in the following ways:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Node permissioning - Only authorized nodes can connect to other nodes in the network using TLS for the P2P communication."}),"\n",(0,i.jsx)(n.li,{children:"Block proposal permissioning - Only blocks proposed by authorized validators are accepted."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Supported keystore and truststore formats used to store the certificates include PKCS11, PKCS12, and JKS."}),"\n",(0,i.jsx)(n.h2,{id:"node-permissioning",children:"Node permissioning"}),"\n",(0,i.jsx)(n.p,{children:"Allow TLS communication between nodes by using certificates issued by a trusted authority to connect to other authorized nodes in the network."}),"\n",(0,i.jsx)(n.p,{children:"When receiving connection requests, the incoming connection must be from another authorized node. Similarly, when connecting to a node the initiator ensures that the remote node is authorized to participate in the network."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/private-networks/how-to/configure/tls/p2p",children:"Configure TLS for the P2P communication using the Besu command line options"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"block-proposal-permissioning",children:"Block proposal permissioning"}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsxs)(n.p,{children:["Only private networks using the ",(0,i.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT consensus protocol"})," support block proposal permissioning."]})}),"\n",(0,i.jsxs)(n.p,{children:["Use certificates issued by a trusted authority to ensure only authorized validator nodes can propose new blocks in the network. The block hash is signed by the validator private certificate and included in the header of the proposed block as a ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax",children:"CMS (Cryptographic Message Syntax)"}),". This is used by other validators to verify that the proposer is authorized to create a block in the network."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/private-networks/how-to/configure/block-proposal-permissioning",children:"Configure block proposal permissioning using the Besu command line options"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var i=t(96540);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10d3d954.257e6510.js b/assets/js/10d3d954.257e6510.js new file mode 100644 index 00000000000..9e2077a0cd2 --- /dev/null +++ b/assets/js/10d3d954.257e6510.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5201],{57357:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var i=n(74848),l=n(28453),t=n(11470),s=n(19365);const o={title:"Block proposal permissioning",description:"Block proposal permissioning",sidebar_position:7,tags:["private networks"]},a="Block proposal permissioning",c={id:"private-networks/how-to/configure/block-proposal-permissioning",title:"Block proposal permissioning",description:"Block proposal permissioning",source:"@site/docs/private-networks/how-to/configure/block-proposal-permissioning.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/block-proposal-permissioning",permalink:"/private-networks/how-to/configure/block-proposal-permissioning",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/block-proposal-permissioning.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Block proposal permissioning",description:"Block proposal permissioning",sidebar_position:7,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Peer-to-peer TLS",permalink:"/private-networks/how-to/configure/tls/p2p"},next:{title:"Alternative elliptic curves",permalink:"/private-networks/how-to/configure/curves"}},d={},p=[{value:"Configure block proposal permissioning",id:"configure-block-proposal-permissioning",level:2},{value:"Command line options",id:"command-line-options",level:2},{value:"Xpki-block-creation-crl-file",id:"xpki-block-creation-crl-file",level:3},{value:"Xpki-block-creation-enabled",id:"xpki-block-creation-enabled",level:3},{value:"Xpki-block-creation-keystore-certificate-alias",id:"xpki-block-creation-keystore-certificate-alias",level:3},{value:"Xpki-block-creation-keystore-file",id:"xpki-block-creation-keystore-file",level:3},{value:"Xpki-block-creation-keystore-password-file",id:"xpki-block-creation-keystore-password-file",level:3},{value:"Xpki-block-creation-keystore-type",id:"xpki-block-creation-keystore-type",level:3},{value:"Xpki-block-creation-truststore-file",id:"xpki-block-creation-truststore-file",level:3},{value:"Xpki-block-creation-truststore-password-file",id:"xpki-block-creation-truststore-password-file",level:3},{value:"Xpki-block-creation-truststore-type",id:"xpki-block-creation-truststore-type",level:3}];function u(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.header,{children:(0,i.jsx)(r.h1,{id:"block-proposal-permissioning",children:"Block proposal permissioning"})}),"\n",(0,i.jsxs)(r.admonition,{type:"info",children:[(0,i.jsxs)(r.p,{children:["Only private networks using the ",(0,i.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT consensus protocol"})," support block proposal permissioning."]}),(0,i.jsx)(r.p,{children:"Block proposal permissioning is an early access feature, and functionality and options may be updated between releases."})]}),"\n",(0,i.jsxs)(r.p,{children:["You can configure ",(0,i.jsx)(r.a,{href:"/private-networks/concepts/pki#block-proposal-permissioning",children:"block proposal permissioning"})," to ensure only authorized validator nodes can propose blocks in the network."]}),"\n",(0,i.jsx)(r.p,{children:"Use certificates issued by a trusted authority to ensure validators are authorized to propose blocks."}),"\n",(0,i.jsx)(r.h2,{id:"configure-block-proposal-permissioning",children:"Configure block proposal permissioning"}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Prerequisites"}),":"]}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["A configured network. For example, ",(0,i.jsx)(r.a,{href:"/private-networks/tutorials/qbft",children:"see steps 1 to 5 in the QBFT tutorial"}),"."]}),"\n",(0,i.jsx)(r.li,{children:"A keystore containing the certificate and key for each network node."}),"\n",(0,i.jsx)(r.li,{children:"A truststore containing all the trusted certificates for the network."}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"Start Besu and include the following command line options on the required nodes:"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:'besu --Xpki-block-creation-enabled=true \\\n--Xpki-block-creation-keystore-type="pkcs12" \\\n--Xpki-block-creation-keystore-file="keystore" \\\n--Xpki-block-creation-keystore-password-file="keystore.password" \\\n--Xpki-block-creation-crl-file="crl2.pem" \\\n--Xpki-block-creation-keystore-certificate-alias="validator" \\\n--Xpki-block-creation-truststore-type="pkcs12" \\\n--Xpki-block-creation-truststore-file="truststore" \\\n--Xpki-block-creation-truststore-password-file="truststore.password"\n'})}),"\n",(0,i.jsx)(r.p,{children:"In the command line:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["Enable block proposal permissioning using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-enabled",children:(0,i.jsx)(r.code,{children:"--Xpki-block-creation-enabled=true"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the keystore type and keystore file using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-keystore-type",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-type"})})," and ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-keystore-file",children:(0,i.jsx)(r.code,{children:"--Xpki-block-creation-keystore-file"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the text file containing the password to unlock the keystore file using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-keystore-password-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-password-file"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the optional ",(0,i.jsx)(r.a,{href:"https://www.securew2.com/blog/certificate-revocation-crl-explained",children:"certificate revocation list (CRL)"})," file using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-crl-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-crl-file"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the alias of the certificate to be included in blocks proposed by this validator using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-keystore-certificate-alias",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-certificate-alias"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the truststore type and truststore file using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-truststore-type",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-type"})})," and ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-truststore-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-file"})}),"."]}),"\n",(0,i.jsxs)(r.li,{children:["Specify the text file containing the password to unlock the truststore file using ",(0,i.jsx)(r.a,{href:"#xpki-block-creation-truststore-password-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-password-file"})}),"."]}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"command-line-options",children:"Command line options"}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-crl-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-crl-file"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-crl-file=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-crl-file=/home/cert/cert.crl.pem\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_CRL_FILE=/home/cert/cert.crl.pem\n"})})})]}),"\n",(0,i.jsx)(r.p,{children:"Path to the optional certificate revocation list (CRL) file."}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-enabled",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-enabled"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-enabled[=]\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-enabled=true\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_ENABLED=true\n"})})})]}),"\n",(0,i.jsxs)(r.p,{children:["Enable PKI integration. The default is ",(0,i.jsx)(r.code,{children:"false"}),"."]}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-keystore-certificate-alias",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-certificate-alias"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-certificate-alias=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-certificate-alias=validatorA\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_KEYSTORE_CERTIFICATE_ALIAS=validatorA\n"})})})]}),"\n",(0,i.jsxs)(r.p,{children:["Alias of the certificate to be included in the blocks proposed by this validator. The default is ",(0,i.jsx)(r.code,{children:"validator"}),"."]}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-keystore-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-file"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-file=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-file=/home/cert/keystore.jks\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_KEYSTORE_FILE=/home/cert/keystore.jks\n"})})})]}),"\n",(0,i.jsx)(r.p,{children:"Keystore file containing the key and certificate for PKI block creation."}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-keystore-password-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-password-file"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-password-file=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-password-file=/home/cert/password.txt\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_KEYSTORE_PASSWORD-FILE=/home/cert/password.txt\n"})})})]}),"\n",(0,i.jsx)(r.p,{children:"Text file containing the password to unlock the keystore file."}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-keystore-type",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-keystore-type"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-type=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-keystore-type=JKS\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_KEYSTORE_TYPE=JKS\n"})})})]}),"\n",(0,i.jsxs)(r.p,{children:["PKI keystore type. Valid options are ",(0,i.jsx)(r.code,{children:"JKS"})," and ",(0,i.jsx)(r.code,{children:"PKCS12"}),". The default is ",(0,i.jsx)(r.code,{children:"JKS"}),"."]}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-truststore-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-file"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-file=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-file=/home/cert/truststore.jks\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_FILE=/home/cert/truststore.jks\n"})})})]}),"\n",(0,i.jsx)(r.p,{children:"Truststore containing the trusted certificates for PKI block creation."}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-truststore-password-file",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-password-file"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-password-file=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-password-file=/home/cert/password.txt\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt\n"})})})]}),"\n",(0,i.jsx)(r.p,{children:"Text file containing the password to unlock the truststore file."}),"\n",(0,i.jsx)(r.h3,{id:"xpki-block-creation-truststore-type",children:(0,i.jsx)(r.code,{children:"Xpki-block-creation-truststore-type"})}),"\n",(0,i.jsxs)(t.A,{children:[(0,i.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-type=\n"})})}),(0,i.jsx)(s.A,{value:"Example",label:"Example",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"--Xpki-block-creation-truststore-type=JKS\n"})})}),(0,i.jsx)(s.A,{value:"Environment variable",label:"Environment variable",children:(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-bash",children:"BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_TYPE=JKS\n"})})})]}),"\n",(0,i.jsxs)(r.p,{children:["PKI truststore type. Valid options are ",(0,i.jsx)(r.code,{children:"JKS"})," and ",(0,i.jsx)(r.code,{children:"PKCS12"}),". The default is ",(0,i.jsx)(r.code,{children:"JKS"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},19365:(e,r,n)=>{n.d(r,{A:()=>s});n(96540);var i=n(18215);const l={tabItem:"tabItem_Ymn6"};var t=n(74848);function s(e){let{children:r,hidden:n,className:s}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.A)(l.tabItem,s),hidden:n,children:r})}},11470:(e,r,n)=>{n.d(r,{A:()=>y});var i=n(96540),l=n(18215),t=n(23104),s=n(56347),o=n(205),a=n(57485),c=n(31682),d=n(70679);function p(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:r,children:n}=e;return(0,i.useMemo)((()=>{const e=r??function(e){return p(e).map((e=>{let{props:{value:r,label:n,attributes:i,default:l}}=e;return{value:r,label:n,attributes:i,default:l}}))}(n);return function(e){const r=(0,c.XI)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[r,n])}function h(e){let{value:r,tabValues:n}=e;return n.some((e=>e.value===r))}function k(e){let{queryString:r=!1,groupId:n}=e;const l=(0,s.W6)(),t=function(e){let{queryString:r=!1,groupId:n}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:r,groupId:n});return[(0,a.aZ)(t),(0,i.useCallback)((e=>{if(!t)return;const r=new URLSearchParams(l.location.search);r.set(t,e),l.replace({...l.location,search:r.toString()})}),[t,l])]}function x(e){const{defaultValue:r,queryString:n=!1,groupId:l}=e,t=u(e),[s,a]=(0,i.useState)((()=>function(e){let{defaultValue:r,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(r){if(!h({value:r,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const i=n.find((e=>e.default))??n[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:r,tabValues:t}))),[c,p]=k({queryString:n,groupId:l}),[x,b]=function(e){let{groupId:r}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(r),[l,t]=(0,d.Dv)(n);return[l,(0,i.useCallback)((e=>{n&&t.set(e)}),[n,t])]}({groupId:l}),f=(()=>{const e=c??x;return h({value:e,tabValues:t})?e:null})();(0,o.A)((()=>{f&&a(f)}),[f]);return{selectedValue:s,selectValue:(0,i.useCallback)((e=>{if(!h({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),p(e),b(e)}),[p,b,t]),tabValues:t}}var b=n(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=n(74848);function m(e){let{className:r,block:n,selectedValue:i,selectValue:s,tabValues:o}=e;const a=[],{blockElementScrollPositionUntilNextRender:c}=(0,t.a_)(),d=e=>{const r=e.currentTarget,n=a.indexOf(r),l=o[n].value;l!==i&&(c(r),s(l))},p=e=>{let r=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=a.indexOf(e.currentTarget)+1;r=a[n]??a[0];break}case"ArrowLeft":{const n=a.indexOf(e.currentTarget)-1;r=a[n]??a[a.length-1];break}}r?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.A)("tabs",{"tabs--block":n},r),children:o.map((e=>{let{value:r,label:n,attributes:t}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:i===r?0:-1,"aria-selected":i===r,ref:e=>a.push(e),onKeyDown:p,onClick:d,...t,className:(0,l.A)("tabs__item",f.tabItem,t?.className,{"tabs__item--active":i===r}),children:n??r},r)}))})}function v(e){let{lazy:r,children:n,selectedValue:t}=e;const s=(Array.isArray(n)?n:[n]).filter(Boolean);if(r){const e=s.find((e=>e.props.value===t));return e?(0,i.cloneElement)(e,{className:(0,l.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:s.map(((e,r)=>(0,i.cloneElement)(e,{key:r,hidden:e.props.value!==t})))})}function g(e){const r=x(e);return(0,j.jsxs)("div",{className:(0,l.A)("tabs-container",f.tabList),children:[(0,j.jsx)(m,{...r,...e}),(0,j.jsx)(v,{...r,...e})]})}function y(e){const r=(0,b.A)();return(0,j.jsx)(g,{...e,children:p(e.children)},String(r))}},28453:(e,r,n)=>{n.d(r,{R:()=>s,x:()=>o});var i=n(96540);const l={},t=i.createContext(l);function s(e){const r=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),i.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1169.474111bd.js b/assets/js/1169.474111bd.js new file mode 100644 index 00000000000..d1aa88bc572 --- /dev/null +++ b/assets/js/1169.474111bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1169],{73046:(t,e,r)=>{r.d(e,{T:()=>k});var n=r(48585),o=r(39142),i=r(89610),s=r(27422),u=r(11662),c=r(66401),a=r(8058),f=r(69592),h=r(13588),A=r(24326),d=r(62062),l=r(25707);const v=function(t){return t!=t};const b=function(t,e,r){for(var n=r-1,o=t.length;++n-1};const g=function(t,e,r){for(var n=-1,o=null==t?0:t.length;++n=200){var a=e?null:C(t);if(a)return(0,w.A)(a);s=!1,o=j.A,c=new d.A}else c=e?[]:u;t:for(;++n1?n.setNode(t,e):n.setNode(t)})),this}setNode(t,e){return n.A(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=P,this._children[t]={},this._children[P][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return n.A(this._nodes,t)}removeNode(t){var e=this;if(n.A(this._nodes,t)){var r=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],a.A(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),a.A(s.A(this._in[t]),r),delete this._in[t],delete this._preds[t],a.A(s.A(this._out[t]),r),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.A(e))e=P;else{for(var r=e+="";!f.A(r);r=this.parent(r))if(r===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var e=this._parent[t];if(e!==P)return e}}children(t){if(f.A(t)&&(t=P),this._isCompound){var e=this._children[t];if(e)return s.A(e)}else{if(t===P)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.A(e)}successors(t){var e=this._sucs[t];if(e)return s.A(e)}neighbors(t){var e=this.predecessors(t);if(e)return N(e,this.successors(t))}isLeaf(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length}filterNodes(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var r=this;a.A(this._nodes,(function(r,n){t(n)&&e.setNode(n,r)})),a.A(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,r.edge(t))}));var n={};function o(t){var i=r.parent(t);return void 0===i||e.hasNode(i)?(n[t]=i,i):i in n?n[i]:o(i)}return this._isCompound&&a.A(e.nodes(),(function(t){e.setParent(t,o(t))})),e}setDefaultEdgeLabel(t){return i.A(t)||(t=o.A(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return D.A(this._edgeObjs)}setPath(t,e){var r=this,n=arguments;return S.A(t,(function(t,o){return n.length>1?r.setEdge(t,o,e):r.setEdge(t,o),o})),this}setEdge(){var t,e,r,o,i=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,r=s.name,2===arguments.length&&(o=arguments[1],i=!0)):(t=s,e=arguments[1],r=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),t=""+t,e=""+e,f.A(r)||(r=""+r);var u=U(this._isDirected,t,e,r);if(n.A(this._edgeLabels,u))return i&&(this._edgeLabels[u]=o),this;if(!f.A(r)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[u]=i?o:this._defaultEdgeLabelFn(t,e,r);var c=function(t,e,r,n){var o=""+e,i=""+r;if(!t&&o>i){var s=o;o=i,i=s}var u={v:o,w:i};n&&(u.name=n);return u}(this._isDirected,t,e,r);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[u]=c,x(this._preds[e],t),x(this._sucs[t],e),this._in[e][u]=c,this._out[t][u]=c,this._edgeCount++,this}edge(t,e,r){var n=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,r);return this._edgeLabels[n]}hasEdge(t,e,r){var o=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,r);return n.A(this._edgeLabels,o)}removeEdge(t,e,r){var n=1===arguments.length?z(this._isDirected,arguments[0]):U(this._isDirected,t,e,r),o=this._edgeObjs[n];return o&&(t=o.v,e=o.w,delete this._edgeLabels[n],delete this._edgeObjs[n],I(this._preds[e],t),I(this._sucs[t],e),delete this._in[e][n],delete this._out[t][n],this._edgeCount--),this}inEdges(t,e){var r=this._in[t];if(r){var n=D.A(r);return e?u.A(n,(function(t){return t.v===e})):n}}outEdges(t,e){var r=this._out[t];if(r){var n=D.A(r);return e?u.A(n,(function(t){return t.w===e})):n}}nodeEdges(t,e){var r=this.inEdges(t,e);if(r)return r.concat(this.outEdges(t,e))}}function x(t,e){t[e]?t[e]++:t[e]=1}function I(t,e){--t[e]||delete t[e]}function U(t,e,r,n){var o=""+e,i=""+r;if(!t&&o>i){var s=o;o=i,i=s}return o+M+i+M+(f.A(n)?F:n)}function z(t,e){return U(t,e.v,e.w,e.name)}k.prototype._nodeCount=0,k.prototype._edgeCount=0},697:(t,e,r)=>{r.d(e,{T:()=>n.T});var n=r(73046)},62062:(t,e,r)=>{r.d(e,{A:()=>u});var n=r(29471);const o=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const i=function(t){return this.__data__.has(t)};function s(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new n.A;++e{r.d(e,{A:()=>n});const n=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{r.d(e,{A:()=>n});const n=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,i=[];++r{r.d(e,{A:()=>n});const n=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r{r.d(e,{A:()=>n});const n=function(t,e){for(var r=-1,n=e.length,o=t.length;++r{r.d(e,{A:()=>Z});var n=r(11754),o=r(72641),i=r(52851),s=r(22031),u=r(27422);const c=function(t,e){return t&&(0,s.A)(e,(0,u.A)(e),t)};var a=r(55615);const f=function(t,e){return t&&(0,s.A)(e,(0,a.A)(e),t)};var h=r(80154),A=r(39759),d=r(14792);const l=function(t,e){return(0,s.A)(t,(0,d.A)(t),e)};var v=r(76912),b=r(15647),_=r(13153);const p=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,v.A)(e,(0,d.A)(t)),t=(0,b.A)(t);return e}:_.A;const g=function(t,e){return(0,s.A)(t,p(t),e)};var j=r(19042),y=r(33831);const m=function(t){return(0,y.A)(t,a.A,p)};var w=r(9779),O=Object.prototype.hasOwnProperty;const C=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&O.call(t,"index")&&(r.index=t.index,r.input=t.input),r};var E=r(90565);const L=function(t,e){var r=e?(0,E.A)(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)};var N=/\w*$/;const D=function(t){var e=new t.constructor(t.source,N.exec(t));return e.lastIndex=t.lastIndex,e};var S=r(241),F=S.A?S.A.prototype:void 0,P=F?F.valueOf:void 0;const M=function(t){return P?Object(P.call(t)):{}};var k=r(1801);const x=function(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,E.A)(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return L(t,r);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,k.A)(t,r);case"[object Map]":case"[object Set]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return D(t);case"[object Symbol]":return M(t)}};var I=r(18598),U=r(92049),z=r(99912),B=r(53098);const $=function(t){return(0,B.A)(t)&&"[object Map]"==(0,w.A)(t)};var G=r(52789),R=r(64841),T=R.A&&R.A.isMap;const V=T?(0,G.A)(T):$;var W=r(23149);const q=function(t){return(0,B.A)(t)&&"[object Set]"==(0,w.A)(t)};var H=R.A&&R.A.isSet;const J=H?(0,G.A)(H):q;var K="[object Arguments]",Q="[object Function]",X="[object Object]",Y={};Y[K]=Y["[object Array]"]=Y["[object ArrayBuffer]"]=Y["[object DataView]"]=Y["[object Boolean]"]=Y["[object Date]"]=Y["[object Float32Array]"]=Y["[object Float64Array]"]=Y["[object Int8Array]"]=Y["[object Int16Array]"]=Y["[object Int32Array]"]=Y["[object Map]"]=Y["[object Number]"]=Y[X]=Y["[object RegExp]"]=Y["[object Set]"]=Y["[object String]"]=Y["[object Symbol]"]=Y["[object Uint8Array]"]=Y["[object Uint8ClampedArray]"]=Y["[object Uint16Array]"]=Y["[object Uint32Array]"]=!0,Y["[object Error]"]=Y[Q]=Y["[object WeakMap]"]=!1;const Z=function t(e,r,s,d,v,b){var _,p=1&r,y=2&r,O=4&r;if(s&&(_=v?s(e,d,v,b):s(e)),void 0!==_)return _;if(!(0,W.A)(e))return e;var E=(0,U.A)(e);if(E){if(_=C(e),!p)return(0,A.A)(e,_)}else{var L=(0,w.A)(e),N=L==Q||"[object GeneratorFunction]"==L;if((0,z.A)(e))return(0,h.A)(e,p);if(L==X||L==K||N&&!v){if(_=y||N?{}:(0,I.A)(e),!p)return y?g(e,f(_,e)):l(e,c(_,e))}else{if(!Y[L])return v?e:{};_=x(e,L,p)}}b||(b=new n.A);var D=b.get(e);if(D)return D;b.set(e,_),J(e)?e.forEach((function(n){_.add(t(n,r,s,n,e,b))})):V(e)&&e.forEach((function(n,o){_.set(o,t(n,r,s,o,e,b))}));var S=O?y?m:j.A:y?a.A:u.A,F=E?void 0:S(e);return(0,o.A)(F||e,(function(n,o){F&&(n=e[o=n]),(0,i.A)(_,o,t(n,r,s,o,e,b))})),_}},6240:(t,e,r)=>{r.d(e,{A:()=>i});var n=r(79841),o=r(38446);const i=function(t,e){return function(r,n){if(null==r)return r;if(!(0,o.A)(r))return t(r,n);for(var i=r.length,s=e?i:-1,u=Object(r);(e?s--:++s{r.d(e,{A:()=>n});const n=function(t,e,r,n){for(var o=t.length,i=r+(n?1:-1);n?i--:++i{r.d(e,{A:()=>a});var n=r(76912),o=r(241),i=r(52274),s=r(92049),u=o.A?o.A.isConcatSpreadable:void 0;const c=function(t){return(0,s.A)(t)||(0,i.A)(t)||!!(u&&t&&t[u])};const a=function t(e,r,o,i,s){var u=-1,a=e.length;for(o||(o=c),s||(s=[]);++u0&&o(f)?r>1?t(f,r-1,o,i,s):(0,n.A)(s,f):i||(s[s.length]=f)}return s}},79841:(t,e,r)=>{r.d(e,{A:()=>i});var n=r(4574),o=r(27422);const i=function(t,e){return t&&(0,n.A)(t,e,o.A)}},66318:(t,e,r)=>{r.d(e,{A:()=>i});var n=r(7819),o=r(30901);const i=function(t,e){for(var r=0,i=(e=(0,n.A)(e,t)).length;null!=t&&r{r.d(e,{A:()=>i});var n=r(76912),o=r(92049);const i=function(t,e,r){var i=e(t);return(0,o.A)(t)?i:(0,n.A)(i,r(t))}},49574:(t,e,r)=>{r.d(e,{A:()=>H});var n=r(11754),o=r(62062);const i=function(t,e){for(var r=-1,n=null==t?0:t.length;++rf))return!1;var A=c.get(t),d=c.get(e);if(A&&d)return A==e&&d==t;var l=-1,v=!0,b=2&r?new o.A:void 0;for(c.set(t,e),c.set(e,t);++l{r.d(e,{A:()=>n});const n=function(t){return function(e){return null==e?void 0:e[t]}}},64099:(t,e,r)=>{r.d(e,{A:()=>n});const n=function(t,e){return t.has(e)}},99922:(t,e,r)=>{r.d(e,{A:()=>o});var n=r(29008);const o=function(t){return"function"==typeof t?t:n.A}},7819:(t,e,r)=>{r.d(e,{A:()=>f});var n=r(92049),o=r(86586),i=r(46632);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/g;const c=function(t){var e=(0,i.A)(t,(function(t){return 500===r.size&&r.clear(),t})),r=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,r,n,o){e.push(n?o.replace(u,"$1"):r||t)})),e}));var a=r(28894);const f=function(t,e){return(0,n.A)(t)?t:(0,o.A)(t,e)?[t]:c((0,a.A)(t))}},19042:(t,e,r)=>{r.d(e,{A:()=>s});var n=r(33831),o=r(14792),i=r(27422);const s=function(t){return(0,n.A)(t,i.A,o.A)}},14792:(t,e,r)=>{r.d(e,{A:()=>u});var n=r(2634),o=r(13153),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const u=s?function(t){return null==t?[]:(t=Object(t),(0,n.A)(s(t),(function(e){return i.call(t,e)})))}:o.A},85054:(t,e,r)=>{r.d(e,{A:()=>a});var n=r(7819),o=r(52274),i=r(92049),s=r(25353),u=r(5254),c=r(30901);const a=function(t,e,r){for(var a=-1,f=(e=(0,n.A)(e,t)).length,h=!1;++a{r.d(e,{A:()=>u});var n=r(92049),o=r(61882),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const u=function(t,e){if((0,n.A)(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!(0,o.A)(t))||(s.test(t)||!i.test(t)||null!=e&&t in Object(e))}},29959:(t,e,r)=>{r.d(e,{A:()=>n});const n=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t){r[++e]=t})),r}},30901:(t,e,r)=>{r.d(e,{A:()=>o});var n=r(61882);const o=function(t){if("string"==typeof t||(0,n.A)(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},11662:(t,e,r)=>{r.d(e,{A:()=>c});var n=r(2634),o=r(6240);const i=function(t,e){var r=[];return(0,o.A)(t,(function(t,n,o){e(t,n,o)&&r.push(t)})),r};var s=r(49574),u=r(92049);const c=function(t,e){return((0,u.A)(t)?n.A:i)(t,(0,s.A)(e,3))}},8058:(t,e,r)=>{r.d(e,{A:()=>u});var n=r(72641),o=r(6240),i=r(99922),s=r(92049);const u=function(t,e){return((0,s.A)(t)?n.A:o.A)(t,(0,i.A)(e))}},48585:(t,e,r)=>{r.d(e,{A:()=>s});var n=Object.prototype.hasOwnProperty;const o=function(t,e){return null!=t&&n.call(t,e)};var i=r(85054);const s=function(t,e){return null!=t&&(0,i.A)(t,e,o)}},39188:(t,e,r)=>{r.d(e,{A:()=>i});const n=function(t,e){return null!=t&&e in Object(t)};var o=r(85054);const i=function(t,e){return null!=t&&(0,o.A)(t,e,n)}},61882:(t,e,r)=>{r.d(e,{A:()=>i});var n=r(88496),o=r(53098);const i=function(t){return"symbol"==typeof t||(0,o.A)(t)&&"[object Symbol]"==(0,n.A)(t)}},69592:(t,e,r)=>{r.d(e,{A:()=>n});const n=function(t){return void 0===t}},27422:(t,e,r)=>{r.d(e,{A:()=>s});var n=r(83607),o=r(69471),i=r(38446);const s=function(t){return(0,i.A)(t)?(0,n.A)(t):(0,o.A)(t)}},89463:(t,e,r)=>{r.d(e,{A:()=>c});const n=function(t,e,r,n){var o=-1,i=null==t?0:t.length;for(n&&i&&(r=t[++o]);++o{r.d(e,{A:()=>n});const n=function(){return[]}},28894:(t,e,r)=>{r.d(e,{A:()=>f});var n=r(241),o=r(45572),i=r(92049),s=r(61882),u=n.A?n.A.prototype:void 0,c=u?u.toString:void 0;const a=function t(e){if("string"==typeof e)return e;if((0,i.A)(e))return(0,o.A)(e,t)+"";if((0,s.A)(e))return c?c.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r};const f=function(t){return null==t?"":a(t)}},38207:(t,e,r)=>{r.d(e,{A:()=>s});var n=r(45572);const o=function(t,e){return(0,n.A)(e,(function(e){return t[e]}))};var i=r(27422);const s=function(t){return null==t?[]:o(t,(0,i.A)(t))}}}]); \ No newline at end of file diff --git a/assets/js/1176.9a7d92ce.js b/assets/js/1176.9a7d92ce.js new file mode 100644 index 00000000000..f6443c89d73 --- /dev/null +++ b/assets/js/1176.9a7d92ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1176],{21176:(n,e,r)=>{r.d(e,{Zp:()=>Ce});var t=r(8058),o=r(5664),i=r(48585),u=r(39142),a=r(34098),d=r(74722),c=r(91395),f=r(697);class s{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,r=e._prev;r!==e;)n.push(JSON.stringify(r,g)),r=r._prev;return"["+n.join(", ")+"]"}}function v(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function g(n,e){if("_next"!==n&&"_prev"!==n)return e}var h=u.A(1);function l(n,e){if(n.nodeCount()<=1)return[];var r=function(n,e){var r=new f.T,o=0,i=0;t.A(n.nodes(),(function(n){r.setNode(n,{v:n,in:0,out:0})})),t.A(n.edges(),(function(n){var t=r.edge(n.v,n.w)||0,u=e(n),a=t+u;r.setEdge(n.v,n.w,a),i=Math.max(i,r.node(n.v).out+=u),o=Math.max(o,r.node(n.w).in+=u)}));var u=c.A(i+o+3).map((function(){return new s})),a=o+1;return t.A(r.nodes(),(function(n){p(u,a,r.node(n))})),{graph:r,buckets:u,zeroIdx:a}}(n,e||h),o=function(n,e,r){var t,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;t=u.dequeue();)A(n,e,r,t);for(;t=i.dequeue();)A(n,e,r,t);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(t=e[a].dequeue()){o=o.concat(A(n,e,r,t,!0));break}}return o}(r.graph,r.buckets,r.zeroIdx);return a.A(d.A(o,(function(e){return n.outEdges(e.v,e.w)})))}function A(n,e,r,o,i){var u=i?[]:void 0;return t.A(n.inEdges(o.v),(function(t){var o=n.edge(t),a=n.node(t.v);i&&u.push({v:t.v,w:t.w}),a.out-=o,p(e,r,a)})),t.A(n.outEdges(o.v),(function(t){var o=n.edge(t),i=t.w,u=n.node(i);u.in-=o,p(e,r,u)})),n.removeNode(o.v),u}function p(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function w(n){var e="greedy"===n.graph().acyclicer?l(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],r={},o={};function u(a){i.A(o,a)||(o[a]=!0,r[a]=!0,t.A(n.outEdges(a),(function(n){i.A(r,n.w)?e.push(n):u(n.w)})),delete r[a])}return t.A(n.nodes(),u),e}(n);t.A(e,(function(e){var r=n.edge(e);n.removeEdge(e),r.forwardName=e.name,r.reversed=!0,n.setEdge(e.w,e.v,r,o.A("rev"))}))}var m=r(98879),b=r(81942),y=r(23068),x=r(61882);const k=function(n,e,r){for(var t=-1,o=n.length;++te};var N=r(29008);const _=function(n){return n&&n.length?k(n,N.A,E):void 0};const I=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var T=r(52528),R=r(79841),M=r(49574);const L=function(n,e){var r={};return e=(0,M.A)(e,3),(0,R.A)(n,(function(n,t,o){(0,T.A)(r,t,e(n,t,o))})),r};var C=r(69592);const O=function(n,e){return nMath.abs(u)*c?(a<0&&(c=-c),r=c*u/a,t=c):(u<0&&(d=-d),r=d,t=d*a/u),{x:o+r,y:i+t}}function B(n){var e=d.A(c.A(Y(n)+1),(function(){return[]}));return t.A(n.nodes(),(function(r){var t=n.node(r),o=t.rank;C.A(o)||(e[o][t.order]=r)})),e}function q(n,e,r,t){var o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=t),F(n,"border",o,e)}function Y(n){return _(d.A(n.nodes(),(function(e){var r=n.node(e).rank;if(!C.A(r))return r})))}function z(n,e){var r=j();try{return e()}finally{console.log(n+" time: "+(j()-r)+"ms")}}function D(n,e){return e()}function $(n,e,r,t,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],d=F(n,"border",u,r);o[e][i]=d,n.setParent(d,t),a&&n.setEdge(a,d,{weight:1})}function J(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){t.A(n.nodes(),(function(e){K(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,K),i.A(r,"y")&&K(r)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){t.A(n.nodes(),(function(e){Q(n.node(e))})),t.A(n.edges(),(function(e){var r=n.edge(e);t.A(r.points,Q),i.A(r,"x")&&Q(r)}))}(n),Z(n))}function Z(n){t.A(n.nodes(),(function(e){H(n.node(e))})),t.A(n.edges(),(function(e){H(n.edge(e))}))}function H(n){var e=n.width;n.width=n.height,n.height=e}function K(n){n.y=-n.y}function Q(n){var e=n.x;n.x=n.y,n.y=e}function U(n){n.graph().dummyChains=[],t.A(n.edges(),(function(e){!function(n,e){var r,t,o,i=e.v,u=n.node(i).rank,a=e.w,d=n.node(a).rank,c=e.name,f=n.edge(e),s=f.labelRank;if(d===u+1)return;for(n.removeEdge(e),o=0,++u;u-1?o[i?e[u]:u]:void 0}};var cn=r(25707),fn=r(74342);const sn=function(n){var e=(0,fn.A)(n),r=e%1;return e==e?r?e-r:e:0};var vn=Math.max;const gn=dn((function(n,e,r){var t=null==n?0:n.length;if(!t)return-1;var o=null==r?0:sn(r);return o<0&&(o=vn(t+o,0)),(0,cn.A)(n,(0,M.A)(e,3),o)}));var hn=r(11662);u.A(1);u.A(1);r(69471),r(9779),r(88496);var ln=r(92049);r(53098);(0,r(70805).A)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var An="\\ud800-\\udfff",pn="["+An+"]",wn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",mn="\\ud83c[\\udffb-\\udfff]",bn="[^"+An+"]",yn="(?:\\ud83c[\\udde6-\\uddff]){2}",xn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="(?:"+wn+"|"+mn+")"+"?",En="[\\ufe0e\\ufe0f]?",Nn=En+kn+("(?:\\u200d(?:"+[bn,yn,xn].join("|")+")"+En+kn+")*"),_n="(?:"+[bn+wn+"?",wn,yn,xn,pn].join("|")+")";RegExp(mn+"(?="+mn+")|"+_n+Nn,"g");function In(){}function Tn(n,e,r){ln.A(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return t.A(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Rn(n,e,"post"===r,u,o,i)})),i}function Rn(n,e,r,o,u,a){i.A(o,e)||(o[e]=!0,r||a.push(e),t.A(u(e),(function(e){Rn(n,e,r,o,u,a)})),r&&a.push(e))}In.prototype=new Error;r(73046);function Mn(n){n=function(n){var e=(new f.T).setGraph(n.graph());return t.A(n.nodes(),(function(r){e.setNode(r,n.node(r))})),t.A(n.edges(),(function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},o=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+o.weight,minlen:Math.max(t.minlen,o.minlen)})})),e}(n),X(n);var e,r=en(n);for(On(r),Ln(r,n);e=Sn(r);)Fn(r,n,e,jn(r,n,e))}function Ln(n,e){var r=function(n,e){return Tn(n,e,"post")}(n,n.nodes());r=r.slice(0,r.length-1),t.A(r,(function(r){!function(n,e,r){var t=n.node(r),o=t.parent;n.edge(r,o).cutvalue=Cn(n,e,r)}(n,e,r)}))}function Cn(n,e,r){var o=n.node(r).parent,i=!0,u=e.edge(r,o),a=0;return u||(i=!1,u=e.edge(o,r)),a=u.weight,t.A(e.nodeEdges(r),(function(t){var u,d,c=t.v===r,f=c?t.w:t.v;if(f!==o){var s=c===i,v=e.edge(t).weight;if(a+=s?v:-v,u=r,d=f,n.hasEdge(u,d)){var g=n.edge(r,f).cutvalue;a+=s?-g:g}}})),a}function On(n,e){arguments.length<2&&(e=n.nodes()[0]),Pn(n,{},1,e)}function Pn(n,e,r,o,u){var a=r,d=n.node(o);return e[o]=!0,t.A(n.neighbors(o),(function(t){i.A(e,t)||(r=Pn(n,e,r,t,o))})),d.low=a,d.lim=r++,u?d.parent=u:delete d.parent,r}function Sn(n){return gn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function jn(n,e,r){var t=r.v,o=r.w;e.hasEdge(t,o)||(t=r.w,o=r.v);var i=n.node(t),u=n.node(o),a=i,d=!1;i.lim>u.lim&&(a=u,d=!0);var c=hn.A(e.edges(),(function(e){return d===Gn(n,n.node(e.v),a)&&d!==Gn(n,n.node(e.w),a)}));return W(c,(function(n){return nn(e,n)}))}function Fn(n,e,r,o){var i=r.v,u=r.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),On(n),Ln(n,e),function(n,e){var r=gn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return Tn(n,e,"pre")}(n,r);o=o.slice(1),t.A(o,(function(r){var t=n.node(r).parent,o=e.edge(r,t),i=!1;o||(o=e.edge(t,r),i=!0),e.node(r).rank=e.node(t).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function Gn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Vn(n){switch(n.graph().ranker){case"network-simplex":default:qn(n);break;case"tight-tree":!function(n){X(n),en(n)}(n);break;case"longest-path":Bn(n)}}Mn.initLowLimValues=On,Mn.initCutValues=Ln,Mn.calcCutValue=Cn,Mn.leaveEdge=Sn,Mn.enterEdge=jn,Mn.exchangeEdges=Fn;var Bn=X;function qn(n){Mn(n)}var Yn=r(38207),zn=r(89463);function Dn(n){var e=F(n,"root",{},"_root"),r=function(n){var e={};function r(o,i){var u=n.children(o);u&&u.length&&t.A(u,(function(n){r(n,i+1)})),e[o]=i}return t.A(n.children(),(function(n){r(n,1)})),e}(n),o=_(Yn.A(r))-1,i=2*o+1;n.graph().nestingRoot=e,t.A(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return zn.A(n.edges(),(function(e,r){return e+n.edge(r).weight}),0)}(n)+1;t.A(n.children(),(function(t){$n(n,e,i,u,o,r,t)})),n.graph().nodeRankFactor=i}function $n(n,e,r,o,i,u,a){var d=n.children(a);if(d.length){var c=q(n,"_bt"),f=q(n,"_bb"),s=n.node(a);n.setParent(c,a),s.borderTop=c,n.setParent(f,a),s.borderBottom=f,t.A(d,(function(t){$n(n,e,r,o,i,u,t);var d=n.node(t),s=d.borderTop?d.borderTop:t,v=d.borderBottom?d.borderBottom:t,g=d.borderTop?o:2*o,h=s!==v?1:i-u[a]+1;n.setEdge(c,s,{weight:g,minlen:h,nestingEdge:!0}),n.setEdge(v,f,{weight:g,minlen:h,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,c,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:r})}var Jn=r(91641);const Zn=function(n){return(0,Jn.A)(n,5)};function Hn(n,e,r){var u=function(n){var e;for(;n.hasNode(e=o.A("_root")););return e}(n),a=new f.T({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return t.A(n.nodes(),(function(o){var d=n.node(o),c=n.parent(o);(d.rank===e||d.minRank<=e&&e<=d.maxRank)&&(a.setNode(o),a.setParent(o,c||u),t.A(n[r](o),(function(e){var r=e.v===o?e.w:e.v,t=a.edge(r,o),i=C.A(t)?0:t.weight;a.setEdge(r,o,{weight:n.edge(e).weight+i})})),i.A(d,"minRank")&&a.setNode(o,{borderLeft:d.borderLeft[e],borderRight:d.borderRight[e]}))})),a}var Kn=r(52851);const Qn=function(n,e,r){for(var t=-1,o=n.length,i=e.length,u={};++te||i&&u&&d&&!a&&!c||t&&u&&d||!r&&d||!o)return 1;if(!t&&!i&&!c&&n=a?d:d*("desc"==r[t]?-1:1)}return n.index-e.index};const ue=function(n,e,r){e=e.length?(0,Xn.A)(e,(function(n){return(0,ln.A)(n)?function(e){return(0,ne.A)(e,1===n.length?n[0]:n)}:n})):[N.A];var t=-1;e=(0,Xn.A)(e,(0,te.A)(M.A));var o=(0,ee.A)(n,(function(n,r,o){return{criteria:(0,Xn.A)(e,(function(e){return e(n)})),index:++t,value:n}}));return re(o,(function(n,e){return ie(n,e,r)}))};var ae=r(24326),de=r(6832);const ce=(0,ae.A)((function(n,e){if(null==n)return[];var r=e.length;return r>1&&(0,de.A)(n,e[0],e[1])?e=[]:r>2&&(0,de.A)(e[0],e[1],e[2])&&(e=[e[0]]),ue(n,(0,Wn.A)(e,1),[])}));function fe(n,e){for(var r=0,t=1;t0;)e%2&&(r+=f[e+1]),f[e=e-1>>1]+=n.weight;s+=n.weight*r}))),s}function ve(n,e){var r={};return t.A(n,(function(n,e){var t=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};C.A(n.barycenter)||(t.barycenter=n.barycenter,t.weight=n.weight)})),t.A(e.edges(),(function(n){var e=r[n.v],t=r[n.w];C.A(e)||C.A(t)||(t.indegree++,e.out.push(r[n.w]))})),function(n){var e=[];function r(n){return function(e){e.merged||(C.A(e.barycenter)||C.A(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight);e.weight&&(r+=e.barycenter*e.weight,t+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(r){r.in.push(e),0==--r.indegree&&n.push(r)}}for(;n.length;){var i=n.pop();e.push(i),t.A(i.in.reverse(),r(i)),t.A(i.out,o(i))}return d.A(hn.A(e,(function(n){return!n.merged})),(function(n){return b.A(n,["vs","i","barycenter","weight"])}))}(hn.A(r,(function(n){return!n.indegree})))}function ge(n,e){var r,o=function(n,e){var r={lhs:[],rhs:[]};return t.A(n,(function(n){e(n)?r.lhs.push(n):r.rhs.push(n)})),r}(n,(function(n){return i.A(n,"barycenter")})),u=o.lhs,d=ce(o.rhs,(function(n){return-n.i})),c=[],f=0,s=0,v=0;u.sort((r=!!e,function(n,e){return n.barycentere.barycenter?1:r?e.i-n.i:n.i-e.i})),v=he(c,d,v),t.A(u,(function(n){v+=n.vs.length,c.push(n.vs),f+=n.barycenter*n.weight,s+=n.weight,v=he(c,d,v)}));var g={vs:a.A(c)};return s&&(g.barycenter=f/s,g.weight=s),g}function he(n,e,r){for(var t;e.length&&(t=I(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function le(n,e,r,o){var u=n.children(e),c=n.node(e),f=c?c.borderLeft:void 0,s=c?c.borderRight:void 0,v={};f&&(u=hn.A(u,(function(n){return n!==f&&n!==s})));var g=function(n,e){return d.A(e,(function(e){var r=n.inEdges(e);if(r.length){var t=zn.A(r,(function(e,r){var t=n.edge(r),o=n.node(r.v);return{sum:e.sum+t.weight*o.order,weight:e.weight+t.weight}}),{sum:0,weight:0});return{v:e,barycenter:t.sum/t.weight,weight:t.weight}}return{v:e}}))}(n,u);t.A(g,(function(e){if(n.children(e.v).length){var t=le(n,e.v,r,o);v[e.v]=t,i.A(t,"barycenter")&&(u=e,a=t,C.A(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 h=ve(g,r);!function(n,e){t.A(n,(function(n){n.vs=a.A(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(h,v);var l=ge(h,o);if(f&&(l.vs=a.A([f,l.vs,s]),n.predecessors(f).length)){var A=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(s)[0]);i.A(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+A.order+p.order)/(l.weight+2),l.weight+=2}return l}function Ae(n){var e=Y(n),r=pe(n,c.A(1,e+1),"inEdges"),o=pe(n,c.A(e-1,-1,-1),"outEdges"),u=function(n){var e={},r=hn.A(n.nodes(),(function(e){return!n.children(e).length})),o=_(d.A(r,(function(e){return n.node(e).rank}))),u=d.A(c.A(o+1),(function(){return[]})),a=ce(r,(function(e){return n.node(e).rank}));return t.A(a,(function r(o){if(!i.A(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),t.A(n.successors(o),r)}})),u}(n);me(n,u);for(var a,f=Number.POSITIVE_INFINITY,s=0,v=0;v<4;++s,++v){we(s%2?r:o,s%4>=2);var g=fe(n,u=B(n));gd||c>e[o].lim));i=o,o=t;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,d=0,c=u[d],f=!0;r!==o.w;){if(t=n.node(r),f){for(;(c=u[d])!==a&&n.node(c).maxRankr){var t=e;e=r,r=t}var o=n[e];o||(n[e]=o={}),o[r]=!0}function Te(n,e,r){if(e>r){var t=e;e=r,r=t}return i.A(n[e],r)}function Re(n,e,r,o,u){var a={},d=function(n,e,r,o){var u=new f.T,a=n.graph(),d=function(n,e,r){return function(t,o,u){var a,d=t.node(o),c=t.node(u),f=0;if(f+=d.width/2,i.A(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":a=-d.width/2;break;case"r":a=d.width/2}if(a&&(f+=r?a:-a),a=0,f+=(d.dummy?e:n)/2,f+=(c.dummy?e:n)/2,f+=c.width/2,i.A(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=c.width/2;break;case"r":a=-c.width/2}return a&&(f+=r?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return t.A(e,(function(e){var o;t.A(e,(function(e){var t=r[e];if(u.setNode(t),o){var i=r[o],a=u.edge(i,t);u.setEdge(i,t,Math.max(d(n,e,o),a||0))}o=e}))})),u}(n,e,r,u),c=u?"borderLeft":"borderRight";function s(n,e){for(var r=d.nodes(),t=r.pop(),o={};t;)o[t]?n(t):(o[t]=!0,r.push(t),r=r.concat(e(t))),t=r.pop()}return s((function(n){a[n]=d.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+d.edge(e))}),0)}),d.predecessors.bind(d)),s((function(e){var r=d.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-d.edge(e))}),Number.POSITIVE_INFINITY),t=n.node(e);r!==Number.POSITIVE_INFINITY&&t.borderType!==c&&(a[e]=Math.max(a[e],r))}),d.successors.bind(d)),t.A(o,(function(n){a[n]=a[r[n]]})),a}function Me(n){var e,r=B(n),o=m.A(_e(n,r),function(n,e){var r={};function o(e,o,i,u,a){var d;t.A(c.A(o,i),(function(o){d=e[o],n.node(d).dummy&&t.A(n.predecessors(d),(function(e){var t=n.node(e);t.dummy&&(t.ordera)&&Ie(r,e,d)}))}))}return zn.A(e,(function(e,r){var i,u=-1,a=0;return t.A(r,(function(t,d){if("border"===n.node(t).dummy){var c=n.predecessors(t);c.length&&(i=n.node(c[0]).order,o(r,a,d,u,i),a=d,u=i)}o(r,a,r.length,i,e.length)})),r})),r}(n,r)),i={};t.A(["u","d"],(function(u){e="u"===u?r:Yn.A(r).reverse(),t.A(["l","r"],(function(r){"r"===r&&(e=d.A(e,(function(n){return Yn.A(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),c=function(n,e,r,o){var i={},u={},a={};return t.A(e,(function(n){t.A(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),t.A(e,(function(n){var e=-1;t.A(n,(function(n){var t=o(n);if(t.length){t=ce(t,(function(n){return a[n]}));for(var d=(t.length-1)/2,c=Math.floor(d),f=Math.ceil(d);c<=f;++c){var s=t[c];u[n]===n&&e{r.d(e,{A:()=>i});var t=r(6240),o=r(38446);const i=function(n,e){var r=-1,i=(0,o.A)(n)?Array(n.length):[];return(0,t.A)(n,(function(n,t,o){i[++r]=e(n,t,o)})),i}},23068:(n,e,r)=>{r.d(e,{A:()=>c});var t=r(24326),o=r(66984),i=r(6832),u=r(55615),a=Object.prototype,d=a.hasOwnProperty;const c=(0,t.A)((function(n,e){n=Object(n);var r=-1,t=e.length,c=t>2?e[2]:void 0;for(c&&(0,i.A)(e[0],e[1],c)&&(t=1);++r{r.d(e,{A:()=>o});var t=r(13588);const o=function(n){return(null==n?0:n.length)?(0,t.A)(n,1):[]}},74722:(n,e,r)=>{r.d(e,{A:()=>a});var t=r(45572),o=r(49574),i=r(52568),u=r(92049);const a=function(n,e){return((0,u.A)(n)?t.A:i.A)(n,(0,o.A)(e,3))}},81942:(n,e,r)=>{r.d(e,{A:()=>A});var t=r(66318),o=r(52851),i=r(7819),u=r(25353),a=r(23149),d=r(30901);const c=function(n,e,r,t){if(!(0,a.A)(n))return n;for(var c=-1,f=(e=(0,i.A)(e,n)).length,s=f-1,v=n;null!=v&&++c{r.d(e,{A:()=>d});var t=Math.ceil,o=Math.max;const i=function(n,e,r,i){for(var u=-1,a=o(t((e-n)/(r||1)),0),d=Array(a);a--;)d[i?a:++u]=n,n+=r;return d};var u=r(6832),a=r(74342);const d=function(n){return function(e,r,t){return t&&"number"!=typeof t&&(0,u.A)(e,r,t)&&(r=t=void 0),e=(0,a.A)(e),void 0===r?(r=e,e=0):r=(0,a.A)(r),t=void 0===t?e{r.d(e,{A:()=>l});var t=/\s/;const o=function(n){for(var e=n.length;e--&&t.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=r(23149),d=r(61882),c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,s=/^0o[0-7]+$/i,v=parseInt;const g=function(n){if("number"==typeof n)return n;if((0,d.A)(n))return NaN;if((0,a.A)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.A)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var r=f.test(n);return r||s.test(n)?v(n.slice(2),r?2:8):c.test(n)?NaN:+n};var h=1/0;const l=function(n){return n?(n=g(n))===h||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},5664:(n,e,r)=>{r.d(e,{A:()=>i});var t=r(28894),o=0;const i=function(n){var e=++o;return(0,t.A)(n)+e}}}]); \ No newline at end of file diff --git a/assets/js/1245.c61e13ed.js b/assets/js/1245.c61e13ed.js new file mode 100644 index 00000000000..04f8826345f --- /dev/null +++ b/assets/js/1245.c61e13ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1245],{91245:(t,e,s)=>{s.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>P});var i=s(99702),n=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,15],c=[1,16],l=[1,17],h=[1,18],u=[1,30],d=[1,19],p=[1,20],y=[1,21],f=[1,22],m=[1,23],g=[1,25],S=[1,26],_=[1,27],k=[1,28],T=[1,29],b=[1,32],E=[1,33],x=[1,34],C=[1,35],$=[1,31],v=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],D=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],A=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],L={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"--\x3e":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",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",30:"NOTE_TEXT",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:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(t,e,s,i,n,r,o){var a=r.length-1;switch(n){case 3:return i.setRootDoc(r[a]),r[a];case 4:this.$=[];break;case 5:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 6:case 7:case 11:this.$=r[a];break;case 8:this.$="nl";break;case 12:const t=r[a-1];t.description=i.trimColon(r[a]),this.$=t;break;case 13:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 14:const e=i.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 18:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 19: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 20:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 21:this.$={stmt:"state",id:r[a],type:"fork"};break;case 22:this.$={stmt:"state",id:r[a],type:"join"};break;case 23:this.$={stmt:"state",id:r[a],type:"choice"};break;case 24:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 28:this.$=r[a].trim(),i.setAccTitle(this.$);break;case 29:case 30:this.$=r[a].trim(),i.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 33:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 34:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 42:case 43:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""}}},table:[{3:1,4:e,5:s,6:i},{1:[3]},{3:5,4:e,5:s,6:i},{3:6,4:e,5:s,6:i},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,5]),{9:36,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,7]),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(v,[2,11],{13:[1,37],14:[1,38]}),t(v,[2,15]),{17:[1,39]},t(v,[2,17],{19:[1,40]}),{22:[1,41]},t(v,[2,21]),t(v,[2,22]),t(v,[2,23]),t(v,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(v,[2,27]),{33:[1,46]},{35:[1,47]},t(v,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(D,[2,40],{51:[1,51]}),t(D,[2,41],{51:[1,52]}),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),t(v,[2,6]),t(v,[2,12]),{12:53,23:u,50:$},t(v,[2,16]),t(A,n,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(v,[2,28]),t(v,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(v,[2,13],{13:[1,63]}),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,64],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(v,[2,31]),t(v,[2,32]),t(v,[2,33]),t(D,[2,42]),t(D,[2,43]),t(v,[2,14]),t(v,[2,18]),t(A,n,{7:68}),t(v,[2,25]),t(v,[2,26]),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,69],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],i=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=r.slice.call(arguments,1),u=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]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var f=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,g,S,_,k,T,b,E,x,C={};;){if(g=s[s.length-1],this.defaultActions[g]?S=this.defaultActions[g]:(null==m&&(x=void 0,"number"!=typeof(x=i.pop()||u.lex()||1)&&(x instanceof Array&&(x=(i=x).pop()),x=e.symbols_[x]||x),m=x),S=o[g]&&o[g][m]),void 0===S||!S.length||!S[0]){var $="";for(k in E=[],o[g])this.terminals_[k]&&k>2&&E.push("'"+this.terminals_[k]+"'");$=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError($,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:y,expected:E})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(S[0]){case 1:s.push(m),n.push(u.yytext),r.push(u.yylloc),s.push(S[1]),m=null,l=u.yyleng,a=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[S[1]][1],C.$=n[n.length-T],C._$={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},f&&(C._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(_=this.performAction.apply(C,[a,l,c,d.yy,S[1],n,r].concat(h))))return _;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[S[1]][0]),n.push(C.$),r.push(C._$),b=o[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}},I={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,s=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),s.length-1&&(this.yylineno-=s.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:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[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 s,i,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))),(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],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;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,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,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[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,s,i){switch(s){case 0:return 40;case 1:case 39:return 44;case 2:case 40:return 45;case 3:case 41:return 46;case 4:case 42:return 47;case 5:case 6:case 8:case 9:case 10:case 11:case 51:case 53:case 59:break;case 7:case 74:return 5;case 12:case 29:return this.pushState("SCALE"),16;case 13:case 30:return 17;case 14:case 20:case 31:case 46:case 49:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 32:this.pushState("STATE");break;case 33:case 36:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 34:case 37:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 35:case 38:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),26;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:case 61:return this.popState(),"ID";case 47:return"STATE_DESCR";case 48:return 18;case 50:return this.popState(),this.pushState("struct"),19;case 52:return this.popState(),20;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 60:return"NOTE_TEXT";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),e.yytext=e.yytext.substr(2).trim(),30;case 64:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),30;case 65:case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return e.yytext=e.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 75: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,/^(?:%%(?!\{)[^\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:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};function O(){this.yy={}}return L.lexer=I,O.prototype=L,L.Parser=O,new O}();n.parser=n;const r=n,o="TB",a="state",c="relation",l="default",h="divider",u="[*]",d="start",p=u,y="color",f="fill";let m="LR",g=[],S={};let _={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,b=0;const E=t=>JSON.parse(JSON.stringify(t)),x=(t,e,s)=>{if(e.stmt===c)x(t,e.state1,!0),x(t,e.state2,!1);else if(e.stmt===a&&("[*]"===e.id?(e.id=s?t.id+"_start":t.id+"_end",e.start=s):e.id=e.id.trim()),e.doc){const t=[];let s,n=[];for(s=0;s0&&n.length>0){const s={stmt:a,id:(0,i.I)(),type:"divider",doc:E(n)};t.push(E(s)),e.doc=t}e.doc.forEach((t=>x(e,t,!0)))}},C=function(t,e=l,s=null,n=null,r=null,o=null,a=null,c=null){const h=null==t?void 0:t.trim();if(void 0===k.states[h]?(i.l.info("Adding state ",h,n),k.states[h]={id:h,descriptions:[],type:e,doc:s,note:r,classes:[],styles:[],textStyles:[]}):(k.states[h].doc||(k.states[h].doc=s),k.states[h].type||(k.states[h].type=e)),n&&(i.l.info("Setting state description",h,n),"string"==typeof n&&I(h,n.trim()),"object"==typeof n&&n.forEach((t=>I(h,t.trim())))),r&&(k.states[h].note=r,k.states[h].note.text=i.e.sanitizeText(k.states[h].note.text,(0,i.c)())),o){i.l.info("Setting state classes",h,o);("string"==typeof o?[o]:o).forEach((t=>N(h,t.trim())))}if(a){i.l.info("Setting state styles",h,a);("string"==typeof a?[a]:a).forEach((t=>R(h,t.trim())))}if(c){i.l.info("Setting state styles",h,a);("string"==typeof c?[c]:c).forEach((t=>w(h,t.trim())))}},$=function(t){_={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,S={},t||(0,i.v)()},v=function(t){return k.states[t]};function D(t=""){let e=t;return t===u&&(T++,e=`${d}${T}`),e}function A(t="",e=l){return t===u?d:e}const L=function(t,e,s){if("object"==typeof t)!function(t,e,s){let n=D(t.id.trim()),r=A(t.id.trim(),t.type),o=D(e.id.trim()),a=A(e.id.trim(),e.type);C(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),C(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:n,id2:o,relationTitle:i.e.sanitizeText(s,(0,i.c)())})}(t,e,s);else{const n=D(t.trim()),r=A(t),o=function(t=""){let e=t;return t===p&&(T++,e=`end${T}`),e}(e.trim()),a=function(t="",e=l){return t===p?"end":e}(e);C(n,r),C(o,a),k.relations.push({id1:n,id2:o,title:i.e.sanitizeText(s,(0,i.c)())})}},I=function(t,e){const s=k.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;s.descriptions.push(i.e.sanitizeText(n,(0,i.c)()))},O=function(t,e=""){void 0===S[t]&&(S[t]={id:t,styles:[],textStyles:[]});const s=S[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(y)){const t=e.replace(f,"bgFill").replace(y,f);s.textStyles.push(t)}s.styles.push(e)}))},N=function(t,e){t.split(",").forEach((function(t){let s=v(t);if(void 0===s){const e=t.trim();C(e),s=v(e)}s.classes.push(e)}))},R=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},w=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},B={getConfig:()=>(0,i.c)().state,addState:C,clear:$,getState:v,getStates:function(){return k.states},getRelations:function(){return k.relations},getClasses:function(){return S},getDirection:()=>m,addRelation:L,getDividerId:()=>(b++,"divider-id-"+b),setDirection:t=>{m=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(){i.l.info("Documents = ",_)},getRootDoc:()=>g,setRootDoc:t=>{i.l.info("Setting root doc",t),g=t},getRootDocV2:()=>(x({id:"root"},{id:"root",doc:g},!0),{id:"root",doc:g}),extract:t=>{let e;e=t.doc?t.doc:t,i.l.info(e),$(!0),i.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case a:C(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case c:L(t.state1,t.state2,t.description);break;case"classDef":O(t.id.trim(),t.classes);break;case"applyClass":N(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,addStyleClass:O,setCssClass:N,addDescription:I,setDiagramTitle:i.q,getDiagramTitle:i.t},P=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/12718c4a.9364ef40.js b/assets/js/12718c4a.9364ef40.js new file mode 100644 index 00000000000..e2a85a03e74 --- /dev/null +++ b/assets/js/12718c4a.9364ef40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8472],{39418:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var s=t(74848),i=t(28453);const a={sidebar_position:4,description:"Learn about parallel transaction execution.",tags:["public networks"]},o="Parallel transaction execution",r={id:"public-networks/concepts/parallel-transaction-execution",title:"Parallel transaction execution",description:"Learn about parallel transaction execution.",source:"@site/docs/public-networks/concepts/parallel-transaction-execution.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/parallel-transaction-execution",permalink:"/public-networks/concepts/parallel-transaction-execution",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/parallel-transaction-execution.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Learn about parallel transaction execution.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Data storage formats",permalink:"/public-networks/concepts/data-storage-formats"},next:{title:"Transaction types",permalink:"/public-networks/concepts/transactions/types"}},c={},l=[{value:"Parallelization mechanism overview",id:"parallelization-mechanism-overview",level:2},{value:"Conflict detection strategy",id:"conflict-detection-strategy",level:3},{value:"Metrics",id:"metrics",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",mermaid:"mermaid",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"parallel-transaction-execution",children:"Parallel transaction execution"})}),"\n",(0,s.jsxs)(n.p,{children:["Besu supports parallel transaction execution, using an optimistic approach to parallelize\ntransactions within a block.\nYou can enable this feature when using the ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," data\nstorage format.\nThis page provides an ",(0,s.jsx)(n.a,{href:"#parallelization-mechanism-overview",children:"overview of the parallelization mechanism"}),",\nand ",(0,s.jsx)(n.a,{href:"#metrics",children:"metrics"})," that highlight Besu's improved performance."]}),"\n",(0,s.jsx)(n.admonition,{title:"Important",type:"warning",children:(0,s.jsxs)(n.p,{children:["Parallel transaction execution is an early access feature.\nYou can enable it using the ",(0,s.jsx)(n.code,{children:"--Xbonsai-parallel-tx-processing-enabled"})," option."]})}),"\n",(0,s.jsx)(n.h2,{id:"parallelization-mechanism-overview",children:"Parallelization mechanism overview"}),"\n",(0,s.jsx)(n.p,{children:"When parallel transaction execution is enabled, Besu initially executes all transactions within a\nblock in parallel, operating under the optimistic assumption that they can all be executed\nconcurrently without conflict.\nThis parallel execution runs in the background, and Besu proceeds to sequentially process the\ntransactions without waiting for the parallel execution to complete."}),"\n",(0,s.jsx)(n.p,{children:"The following flowchart outlines the transaction execution flow:"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)(n.mermaid,{value:"graph TD;\n X(Start parallel execution as background process) --\x3e A(Start sequential processing);\n A --\x3e B{{Is transaction completed by background process?}};\n B --\x3e |Yes| C{{Conflict check}};\n C --\x3e |No conflict| D(Apply background state modifications);\n C --\x3e |Conflict detected| E(Replay transaction using background cache);\n B --\x3e |No| F(Execute transaction sequentially);\n D --\x3e G(End sequential processing);\n E --\x3e G;\n F --\x3e G;"})}),"\n",(0,s.jsx)(n.p,{children:"Besu first determines if a transaction has been completed by the background parallel execution:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Completed:"})," If the transaction is completed, Besu examines whether there are any conflicts with\npreviously executed transactions.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"No conflict:"})," If no conflict is detected, Besu directly applies the state modifications\ngenerated in the background to the block, avoiding re-execution."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Conflict detected:"})," If a conflict is detected, Besu replays the transaction, using a cache of\nbackground reads to improve efficiency."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Not completed:"})," If the transaction is not completed, Besu executes it sequentially within the\nblock to ensure its completion, independent of the background execution."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"conflict-detection-strategy",children:"Conflict detection strategy"}),"\n",(0,s.jsxs)(n.p,{children:["Besu's conflict detection strategy uses the ",(0,s.jsx)(n.em,{children:"accumulator"}),", a\n",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," feature that tracks addresses and slots touched\nor modified during block or transaction execution."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["You can read more about Bonsai Tries in ",(0,s.jsx)(n.a,{href:"https://consensys.io/blog/bonsai-tries-guide",children:"Consensys' Guide to Bonsai Tries"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"If a slot, code, or anything else related to an account is modified, the Bonsai accumulator keeps\ntrack of this information.\nThis strategy leverages Bonsai's storage benefits, only keeping track of block-to-block state diffs\nin Besu storage."}),"\n",(0,s.jsx)(n.p,{children:"The following flowchart outlines how Besu detects conflicts and imports transactions into the block:"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)(n.mermaid,{value:"graph TD;\n A(Start block import) --\x3e B(Fetch block's touched addresses);\n B --\x3e C{{For each transaction}};\n C --\x3e|Next transaction| D(Fetch transaction's touched addresses);\n D --\x3e E{{Compare addresses}};\n E --\x3e|Conflict detected| F(Replay transaction using cached data);\n E --\x3e|No conflict| G(Apply transaction result directly \u2013 no replay);\n F --\x3e H{{Attempt to read from cache}};\n H --\x3e|Data found in cache| I(Continue replay using cached data);\n H --\x3e|Data not found in cache| J(Fetch data from disk);\n I --\x3e K(Transaction replay complete);\n J --\x3e K;\n K --\x3e L(Apply transaction changes);\n G --\x3e L;\n L --\x3e M{{More transactions?}};\n M --\x3e|Yes| C;\n M --\x3e|No| N(End block import);"})}),"\n",(0,s.jsx)(n.p,{children:"Besu takes what the accumulator tracks at the block and transaction level, compares the\ntransaction's list of touched addresses to the block's list, and checks for conflicts.\nIn particular:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Besu identifies conflicts by checking whether a transaction has interacted with accounts modified\nby the block (that is, modified by previous transactions)."}),"\n",(0,s.jsx)(n.li,{children:"If a conflict is detected, Besu replays the transaction using cached data or data fetched from disk."}),"\n",(0,s.jsx)(n.li,{children:"Each time a transaction is added to the block, Besu incorporates the transaction's tracked list\ninto the block's list."}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{title:"Note",type:"info",children:[(0,s.jsx)(n.p,{children:"The following are excluded from the conflict check:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Unchanged accounts read by the block."}),"\n",(0,s.jsx)(n.li,{children:"Rewards given to the validator coinbase address at the end of each transaction.\nIf these were considered, every transaction would conflict with the coinbase address.\nBesu identifies this address as a conflict only if it is accessed for reasons other than receiving\nrewards at the transaction's conclusion."}),"\n"]})]}),"\n",(0,s.jsx)(n.p,{children:"The following flowchart outlines how Besu maintains the lists of tracked addresses:"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)(n.mermaid,{value:"graph TD;\n A(Start) --\x3e B(Fetch block's touched addresses);\n B --\x3e C{{Check each address}};\n C --\x3e|Unchanged| D(Mark as read);\n C --\x3e|Modified| E(Add to block's tracked addresses);\n D --\x3e F{{Next address}};\n E --\x3e F;\n F --\x3e|More addresses?| C;\n F --\x3e|No more| G(Fetch transaction's touched addresses);\n G --\x3e H{{For each transaction address}};\n H --\x3e|From, sender, etc.| I(Add to transaction's tracked addresses);\n I --\x3e J{{Next address}};\n J --\x3e|More addresses?| H;\n J --\x3e|No more| K{{Compare block and transaction addresses}};\n K --\x3e|Conflict detected| L(Conflict is detected);\n K --\x3e|No conflict| M(Proceed with transaction);\n L --\x3e N(End);\n M --\x3e N;"})}),"\n",(0,s.jsxs)(n.p,{children:["Besu's conflict detection strategy is intentionally simple to minimize edge cases.\nWith this approach to parallel transaction execution,\n",(0,s.jsx)(n.a,{href:"#metrics",children:"approximately 40% of transactions do not require replay"}),".\nIn the future, the conflict detection strategy may be refined to reduce false positives."]}),"\n",(0,s.jsxs)(n.p,{children:["You can enable parallel transaction execution using the ",(0,s.jsx)(n.code,{children:"--Xbonsai-parallel-tx-processing-enabled"})," option."]}),"\n",(0,s.jsx)(n.h2,{id:"metrics",children:"Metrics"}),"\n",(0,s.jsx)(n.p,{children:"Parallel transaction execution uses Besu's resources more efficiently than traditional\nsequential execution, significantly improving performance."}),"\n",(0,s.jsx)(n.p,{children:"The following metrics were collected on nodes running on Azure VMs (Standard D8as v5 \u2013 8 vCPUs, 32\nGiB memory), with Teku and Nimbus as consensus layer (CL) clients:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Block processing time"})," - With Teku as CL client, block processing time improves by at least 25%.\nThe 50th percentile decreases from 282 ms to 207 ms and the 95th\npercentile decreases from 479 ms to 393 ms."]}),"\n",(0,s.jsx)(n.p,{children:"With Nimbus as CL client, block processing improves by approximately 45%, with the 50th percentile\nat 155 ms, and the 95th percentile at 299 ms.\nBesu running with Nimbus has better performance than with Teku because Nimbus has less overhead on\nBesu, meaning less context switching and fewer cache misses."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Execution throughput"})," - Execution throughput increases, with an average of 96 Mgas/s and peaks\nof up to 250 Mgas/s."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Parallel transactions"})," - Parallel transaction execution introduces two new metrics, which\nindicate that approximately 40% of transactions are parallelized using this feature:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"besu_block_processing_parallelized_transactions_counter_total"})," - The number of transactions\nexecuted in parallel."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"besu_block_processing_conflicted_transactions_counter_total"})," - The number of transactions that\nencountered conflicts and were therefore executed sequentially."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Sync time"})," - Snap synchronization time is approximately 27 hours and 5 minutes, with block import\ntime approximately 6 ms on average."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"CPU profiling"})," - The new payload call time decreases from 251.68 ms to 172.04 ms on average,\nwith notable improvements in SLOAD operation times."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"During the faster block processing time, Besu uses more CPU and more disk accesses in parallel\n(higher IOPS).\nHowever, when these metrics are averaged on different monitoring tools, the resource usage looks the same as\nwith sequential execution.\nOverall, parallel transaction execution improves Besu performance with almost no resource usage\noverhead."})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var s=t(96540);const i={},a=s.createContext(i);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1303.f001da5d.js b/assets/js/1303.f001da5d.js new file mode 100644 index 00000000000..a8c5c1fe21c --- /dev/null +++ b/assets/js/1303.f001da5d.js @@ -0,0 +1,2 @@ +/*! For license information please see 1303.f001da5d.js.LICENSE.txt */ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1303],{87799: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;i0)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;n1)for(s=0;sr&&(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;o1;){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 _=(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;nt&&(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;i1){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=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;i0)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;rl&&(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.height0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width0&&(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;rn&&(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]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.widtha&&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;so&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a0)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;f0&&(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(87799))},23143: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;nt&&(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-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(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(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(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=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=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]o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(ia)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(ra?(n[0]=c,n[1]=h,_=!0):(n[0]=u,n[1]=l,_=!0):D===N&&(r>a?(n[0]=s,n[1]=l,_=!0):(n[0]=d,n[1]=h,_=!0)),-C===N?a>r?(n[2]=m,n[3]=b,T=!0):(n[2]=y,n[3]=v,T=!0):C===N&&(a>r?(n[2]=f,n[3]=v,T=!0):(n[2]=x,n[3]=b,T=!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)),!_)switch(A){case 1:S=l,k=r+-g/N,n[0]=k,n[1]=S;break;case 2:k=d,S=i+p*N,n[0]=k,n[1]=S;break;case 3:S=h,k=r+g/N,n[0]=k,n[1]=S;break;case 4:k=c,S=i+-p*N,n[0]=k,n[1]=S}if(!T)switch(L){case 1:I=v,M=a+-E/N,n[2]=M,n[3]=I;break;case 2:M=x,I=o+w*N,n[2]=M,n[3]=I;break;case 3:I=b,M=a+E/N,n[2]=M,n[3]=I;break;case 4:M=m,I=o+-w*N,n[2]=M,n[3]=I}}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)),n0?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;n0&&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-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;i0){for(var i=this.edgeToDummyNodes.get(n),a=0;a=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;ui.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;n0&&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=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=s.length||u>=s[0].length))for(var c=0;ce}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n2&&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=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{"use strict";n.d(t,{diagram:()=>hh});var r=n(99702);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw a}}}}var p="undefined"==typeof window?null:window,g=p?p.navigator:null;p&&p.document;var f=i(""),v=i({}),y=i((function(){})),m="undefined"==typeof HTMLElement?"undefined":i(HTMLElement),b=function(e){return e&&e.instanceString&&w(e.instanceString)?e.instanceString():null},x=function(e){return null!=e&&i(e)==f},w=function(e){return null!=e&&i(e)===y},E=function(e){return!C(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},_=function(e){return null!=e&&i(e)===v&&!E(e)&&e.constructor===Object},T=function(e){return null!=e&&i(e)===i(1)&&!isNaN(e)},D=function(e){return"undefined"===m?void 0:null!=e&&e instanceof HTMLElement},C=function(e){return N(e)||A(e)},N=function(e){return"collection"===b(e)&&e._private.single},A=function(e){return"collection"===b(e)&&!e._private.single},L=function(e){return"core"===b(e)},k=function(e){return"stylesheet"===b(e)},S=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},M=function(e){return function(e){return null!=e&&i(e)===v}(e)&&w(e.then)},I=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;tt?1:0},U=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)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}(e)||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("^"+Y+"$").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}(e)},q={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]},H=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i=t||n<0||h&&e-u>=a}function f(){var e=ee();if(g(e))return v(e);s=setTimeout(f,function(e){var n=t-(e-l);return h?_e(n,a-(e-u)):n}(e))}function v(e){return s=void 0,d&&r?p(e):(r=i=void 0,o)}function y(){var e=ee(),n=g(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return function(e){return u=e,s=setTimeout(f,t),c?p(e):o}(l);if(h)return clearTimeout(s),s=setTimeout(f,t),p(l)}return void 0===s&&(s=setTimeout(f,t)),o}return t=we(t)||0,$(n)&&(c=!!n.leading,a=(h="maxWait"in n)?Ee(we(n.maxWait)||0,t):a,d="trailing"in n?!!n.trailing:d),y.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=l=i=s=void 0},y.flush=function(){return void 0===s?o:v(ee())},y},De=p?p.performance:null,Ce=De&&De.now?function(){return De.now()}:function(){return Date.now()},Ne=function(){if(p){if(p.requestAnimationFrame)return function(e){p.requestAnimationFrame(e)};if(p.mozRequestAnimationFrame)return function(e){p.mozRequestAnimationFrame(e)};if(p.webkitRequestAnimationFrame)return function(e){p.webkitRequestAnimationFrame(e)};if(p.msRequestAnimationFrame)return function(e){p.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(Ce())}),1e3/60)}}(),Ae=function(e){return Ne(e)},Le=Ce,ke=9261,Se=5381,Me=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ke;!(t=e.next()).done;)n=65599*n+t.value|0;return n},Ie=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:ke)+e|0},Oe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Se;return(t<<5)+t+e|0},Pe=function(e){return 2097152*e[0]+e[1]},Re=function(e,t){return[Ie(e[0],t[0]),Oe(e[1],t[1])]},Be=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return Me({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},rt=function(e){e.splice(0,e.length)},it=function(e,t,n){return n&&(t=R(n,t)),e[t]},at=function(e,t,n,r){n&&(t=R(n,t)),e[t]=r},ot="undefined"!=typeof Map?Map:function(){function e(){a(this,e),this._obj={}}return s(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}(),st=function(){function e(t){if(a(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&L(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 lt,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=[];E(t.classes)?l=t.classes:x(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?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);in;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;af;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;i0;){var E=y.pop(),T=f(E),D=E.id();if(h[D]=T,T!==1/0)for(var C=E.neighborhood().intersect(p),N=0;N0)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)}}}},vt={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;t0;){if(l=f.pop(),u=l.id(),v.delete(u),w++,u===h){for(var E=[],_=i,T=h,D=m[T];E.unshift(_),null!=D&&E.unshift(D),null!=(_=y[T]);)D=m[T=_.id()];return{found:!0,distance:d[u],path:this.spawn(E),steps:w}}g[u]=!0;for(var C=l._private.edges,N=0;NN&&(p[C]=N,y[C]=D,m[C]=w),!i){var A=D*u+T;!i&&p[A]>N&&(p[A]=N,y[A]=T,m[A]=w)}}}for(var L=0;L1&&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)},hasNegativeWeightCycle:g,negativeWeightCycles:f}}},_t=Math.sqrt(2),Tt=function(e,t,n){0===n.length&&We("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;pr;){var i=Math.floor(Math.random()*t.length);t=Tt(i,e,t),n--}return t},Ct={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/_t);if(!(i<2)){for(var l=[],u=0;u0?1:e<0?-1:0},It=function(e,t){return Math.sqrt(Ot(e,t))},Ot=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},Pt=function(e){for(var t=e.length,n=0,r=0;r=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}}},Gt=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},Yt=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},Vt=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},Xt=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 o=u(a,4);t=o[0],n=o[1],r=o[2],i=o[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},Ut=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},jt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},qt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},Ht=function(e,t){return qt(e,t.x1,t.y1)&&qt(e,t.x2,t.y2)},Wt=function(e,t,n,r,i,a,o){var s,l,u=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"auto",c="auto"===u?pn(i,a):u,h=i/2,d=a/2,p=(c=Math.min(c,h,d))!==h,g=c!==d;if(p){var f=r-d-o;if((s=sn(e,t,n,r,n-h+c-o,f,n+h-c+o,f,!1)).length>0)return s}if(g){var v=n+h+o;if((s=sn(e,t,n,r,v,r-d+c-o,v,r+d-c+o,!1)).length>0)return s}if(p){var y=r+d+o;if((s=sn(e,t,n,r,n-h+c-o,y,n+h-c+o,y,!1)).length>0)return s}if(g){var m=n-h-o;if((s=sn(e,t,n,r,m,r-d+c-o,m,r+d-c+o,!1)).length>0)return s}var b=n-h+c,x=r-d+c;if((l=an(e,t,n,r,b,x,c+o)).length>0&&l[0]<=b&&l[1]<=x)return[l[0],l[1]];var w=n+h-c,E=r-d+c;if((l=an(e,t,n,r,w,E,c+o)).length>0&&l[0]>=w&&l[1]<=E)return[l[0],l[1]];var _=n+h-c,T=r+d-c;if((l=an(e,t,n,r,_,T,c+o)).length>0&&l[0]>=_&&l[1]>=T)return[l[0],l[1]];var D=n-h+c,C=r+d-c;return(l=an(e,t,n,r,D,C,c+o)).length>0&&l[0]<=D&&l[1]>=C?[l[0],l[1]]:[]},$t=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},Kt=function(e,t,n,r,i,a,o,s,l){var u=Math.min(n,o,i)-l,c=Math.max(n,o,i)+l,h=Math.min(r,s,a)-l,d=Math.max(r,s,a)+l;return!(ec||td)},Zt=function(e,t,n,r,i,a,o,s){var l=[];!function(e,t,n,r,i){var a,o,s,l,u,c,h,d;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,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,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),i[4]=-h+d*Math.cos((l+4*Math.PI)/3)))}(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=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var h,d,p,g=-1,f=0;f=0?pl?(e-i)*(e-i)+(t-a)*(t-a):u-h},Jt=function(e,t,n){for(var r,i,a,o,s=0,l=0;l=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},en=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;g0){var f=nn(c,-l);h=tn(f)}else h=c;return Jt(e,t,h)},tn=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c=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]},on=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},sn=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;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?on(e,n,o)===o?[o,s]:on(e,n,i)===i?[i,a]:on(i,o,n)===n?[n,r]:[]:[]},ln=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;y0){var m=nn(f,-s);u=tn(m)}else u=f}else u=n;for(var b=0;bu&&(u=t)},h=function(e){return l[e]},d=0;d0?b.edgesTo(m)[0]:m.edgesTo(b)[0];var w=r(x);m=m.id(),d[m]>d[v]+w&&(d[m]=d[v]+w,p.nodes.indexOf(m)<0?p.push(m):p.updateItem(m),u[m]=0,l[m]=[]),d[m]==d[v]+w&&(u[m]=u[m]+u[v],l[m].push(v))}else for(var E=0;E0;){for(var C=n.pop(),N=0;N0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,l,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:On,o=r,s=0;s=2?Gn(e,t,n,0,Bn,Fn):Gn(e,t,n,0,Rn)},squaredEuclidean:function(e,t,n){return Gn(e,t,n,0,Bn)},manhattan:function(e,t,n){return Gn(e,t,n,0,Rn)},max:function(e,t,n){return Gn(e,t,n,-1/0,zn)}};function Vn(e,t,n,r,i,a){var o;return o=w(e)?e:Yn[e]||Yn.euclidean,0===t&&w(e)?o(i,a):o(t,n,r,i,a)}Yn["squared-euclidean"]=Yn.squaredEuclidean,Yn.squaredeuclidean=Yn.squaredEuclidean;var Xn=tt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),Un=function(e){return Xn(e)},jn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return Vn(e,r.length,a,(function(e){return r[e](t)}),o,s)},qn=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;ln)return!1}return!0},Zn=function(e,t,n){for(var r=0;ri&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c=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;vn[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]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]?(n0&&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}(e):"mean"===t?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;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;io&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u=N?(A=N,N=k,L=S):k>A&&(A=k);for(var M=0;M0?1:0;_[E%u.minIterations*t+F]=z,B+=z}if(B>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var G=0,Y=0;Y0&&r.push(i);return r}(t,a,o),U=function(e,t,n){for(var r=fr(e,t,n),i=0;il&&(s=u,l=c)}n[i]=a[s]}return fr(e,t,n)}(t,r,X),j={},q=0;q1||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}},xr=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(l,u,c){l===c&&(r+=1),t[u]={id:n,low:n++,cutVertex:!1};var h,d,p,g,f=e.getElementById(u).connectedEdges().intersection(e);0===f.size()?i.push(e.spawn(e.getElementById(u))):f.forEach((function(n){h=n.source().id(),d=n.target().id(),(p=h===u?d:h)!==c&&(g=n.id(),o[g]||(o[g]=!0,a.push({x:u,y:p,edge:n})),p in t?t[u].low=Math.min(t[u].low,t[p].id):(s(l,p,u),t[u].low=Math.min(t[u].low,t[p].low),t[u].id<=t[p].low&&(t[u].cutVertex=!0,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)}(u,p))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:i}},wr=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}},Er={};[ht,ft,vt,mt,xt,Et,Ct,yn,bn,wn,_n,In,rr,hr,yr,br,{hopcroftTarjanBiconnected:xr,htbc:xr,htb:xr,hopcroftTarjanBiconnectedComponents:xr},{tarjanStronglyConnected:wr,tsc:wr,tscc:wr,tarjanStronglyConnectedComponents:wr}].forEach((function(e){U(Er,e)}));var _r=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,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))};_r.prototype={fulfill:function(e){return Tr(this,1,"fulfillValue",e)},reject:function(e){return Tr(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new _r;return n.onFulfilled.push(Nr(e,r,"fulfill")),n.onRejected.push(Nr(t,r,"reject")),Dr(n),r.proxy}};var Tr=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Dr(e)),e},Dr=function(e){1===e.state?Cr(e,"onFulfilled",e.fulfillValue):2===e.state&&Cr(e,"onRejected",e.rejectReason)},Cr=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e0: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-1};var vi=function(e,t){var n=this.__data__,r=hi(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function yi(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e0&&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){E(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a0&&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}};aa.className=aa.classNames=aa.classes;var oa={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:F,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};oa.variable="(?:[\\w-.]|(?:\\\\"+oa.metaChar+"))+",oa.className="(?:[\\w-]|(?:\\\\"+oa.metaChar+"))+",oa.value=oa.string+"|"+oa.number,oa.id=oa.variable,function(){var e,t,n;for(e=oa.comparatorOp.split("|"),n=0;n=0||"="!==t&&(oa.comparatorOp+="|\\!"+t)}();var sa=0,la=1,ua=2,ca=3,ha=4,da=5,pa=6,ga=7,fa=8,va=9,ya=10,ma=11,ba=12,xa=13,wa=14,Ea=15,_a=16,Ta=17,Da=18,Ca=19,Na=20,Aa=[{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 function(e,t){return-1*X(e,t)}(e.selector,t.selector)})),La=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return Ke("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Ke("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Ke("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 x(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case sa:var l=e(s);return l.substring(0,l.length-1);case ca:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case da:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case ha:return"["+r.field+"]";case pa:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case ga:return s;case fa:return"#"+s;case va:return"."+s;case Ta:case Ea:return i(r.parent,a)+n(">")+i(r.child,a);case Da:case _a:return i(r.ancestor,a)+" "+i(r.descendant,a);case Ca:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case Na: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;o1&&o=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=e0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function $a(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1],$a)},Ha.forEachUp=function(e){return Wa(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Ka)},Ha.forEachUpAndDown=function(e){return Wa(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],Za)},Ha.ancestors=Ha.parents,(Ua=ja={data:ra.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:ra.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ra.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ra.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ra.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ra.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Ua.data,Ua.removeAttr=Ua.removeData;var Qa,Ja,eo=ja,to={};function no(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;ot})),minIndegree:ro("indegree",(function(e,t){return et})),minOutdegree:ro("outdegree",(function(e,t){return et}))}),U(to,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,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;d0,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}},Qa.modelPosition=Qa.point=Qa.position,Qa.modelPositions=Qa.points=Qa.positions,Qa.renderedPoint=Qa.renderedPosition,Qa.relativePoint=Qa.relativePosition;var oo,so,lo=Ja;oo=so={},so.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}},so.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},so.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=function(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}}(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}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},ho=function(e,t){return null==t?e:co(e,t.x1,t.y1,t.x2,t.y2)},po=function(e,t,n){return it(e,t,n)},go=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,Vt(u,1),co(e,u.x1,u.y1,u.x2,u.y2)}}},fo=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=po(a,"labelWidth",n),p=po(a,"labelHeight",n),g=po(a,"labelX",n),f=po(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,_=p,T=d,D=T/2,C=_/2;if(m)o=g-D,s=g+D,l=f-C,u=f+C;else{switch(c.value){case"left":o=g-T,s=g;break;case"center":o=g-D,s=g+D;break;case"right":o=g,s=g+T}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-C,u=f+C;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-2,s+=v+Math.max(x,w)+E+2,l+=y-Math.max(x,w)-E-2,u+=y+Math.max(x,w)+E+2;var N=n||"main",A=i.labelBounds,L=A[N]=A[N]||{};L.x1=o,L.y1=l,L.x2=s,L.y2=u,L.w=s-o,L.h=u-l;var k=m&&"autorotate"===b.strValue,S=null!=b.pfValue&&0!==b.pfValue;if(k||S){var M=k?po(i.rstyle,"labelAngle",n):b.pfValue,I=Math.cos(M),O=Math.sin(M),P=(o+s)/2,R=(l+u)/2;if(!m){switch(c.value){case"left":P=s;break;case"right":P=o}switch(h.value){case"top":R=u;break;case"bottom":R=l}}var B=function(e,t){return{x:(e-=P)*I-(t-=R)*O+P,y:e*O+t*I+R}},F=B(o,l),z=B(o,u),G=B(s,l),Y=B(s,u);o=Math.min(F.x,z.x,G.x,Y.x),s=Math.max(F.x,z.x,G.x,Y.x),l=Math.min(F.y,z.y,G.y,Y.y),u=Math.max(F.y,z.y,G.y,Y.y)}var V=N+"Rot",X=A[V]=A[V]||{};X.x1=o,X.y1=l,X.x2=s,X.y2=u,X.w=s-o,X.h=u-l,co(e,o,l,s,u),co(i.labelBounds.all,o,l,s,u)}return e}},vo=function(e,t){var n,r,i,a,o,s,l,u=e._private.cy,c=u.styleEnabled(),h=u.headless(),d=zt(),p=e._private,g=e.isNode(),f=e.isEdge(),v=p.rstyle,y=g&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!f||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),_=0;if(c&&(_=e.pstyle("width").pfValue/2),g&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var D=e.outerWidth()/2,C=e.outerHeight()/2;co(d,n=o-D,i=s-C,r=o+D,a=s+C),c&&t.includeOutlines&&function(e,t){if(!t.cy().headless()){var n,r,i,a=t.pstyle("outline-opacity").value,o=t.pstyle("outline-width").value;if(a>0&&o>0){var s=t.pstyle("outline-offset").value,l=t.pstyle("shape").value,u=o+s,c=(e.w+2*u)/e.w,h=(e.h+2*u)/e.h,d=0;["diamond","pentagon","round-triangle"].includes(l)?(c=(e.w+2.4*u)/e.w,d=-u/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(l)?c=(e.w+2.4*u)/e.w:"star"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.6*u)/e.h,d=-u/3.8):"triangle"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.4*u)/e.h,d=-u/1.4):"vee"===l&&(c=(e.w+4.4*u)/e.w,h=(e.h+3.8*u)/e.h,d=.5*-u);var p=e.h*h-e.h,g=e.w*c-e.w;if(Xt(e,[Math.ceil(p/2),Math.ceil(g/2)]),0!==d){var f=(r=0,i=d,{x1:(n=e).x1+r,x2:n.x2+r,y1:n.y1+i,y2:n.y2+i,w:n.w,h:n.h});Gt(e,f)}}}}(d,e)}else if(f&&t.includeEdges)if(c&&!h){var N=e.pstyle("curve-style").strValue;if(n=Math.min(v.srcX,v.midX,v.tgtX),r=Math.max(v.srcX,v.midX,v.tgtX),i=Math.min(v.srcY,v.midY,v.tgtY),a=Math.max(v.srcY,v.midY,v.tgtY),co(d,n-=_,i-=_,r+=_,a+=_),"haystack"===N){var A=v.haystackPts;if(A&&2===A.length){if(n=A[0].x,i=A[0].y,n>(r=A[1].x)){var L=n;n=r,r=L}if(i>(a=A[1].y)){var k=i;i=a,a=k}co(d,n-_,i-_,r+_,a+_)}}else if("bezier"===N||"unbundled-bezier"===N||N.endsWith("segments")||N.endsWith("taxi")){var S;switch(N){case"bezier":case"unbundled-bezier":S=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":S=v.linePts}if(null!=S)for(var M=0;M(r=P.x)){var R=n;n=r,r=R}if((i=O.y)>(a=P.y)){var B=i;i=a,a=B}co(d,n-=_,i-=_,r+=_,a+=_)}if(c&&t.includeEdges&&f&&(go(d,e,"mid-source"),go(d,e,"mid-target"),go(d,e,"source"),go(d,e,"target")),c)if("yes"===e.pstyle("ghost").value){var F=e.pstyle("ghost-offset-x").pfValue,z=e.pstyle("ghost-offset-y").pfValue;co(d,d.x1+F,d.y1+z,d.x2+F,d.y2+z)}var G=p.bodyBounds=p.bodyBounds||{};Ut(G,d),Xt(G,y),Vt(G,1),c&&(n=d.x1,r=d.x2,i=d.y1,a=d.y2,co(d,n-E,i-E,r+E,a+E));var Y=p.overlayBounds=p.overlayBounds||{};Ut(Y,d),Xt(Y,y),Vt(Y,1);var V=p.labelBounds=p.labelBounds||{};null!=V.all?((l=V.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):V.all=zt(),c&&t.includeLabels&&(t.includeMainLabels&&fo(d,e,null),f&&(t.includeSourceLabels&&fo(d,e,"source"),t.includeTargetLabels&&fo(d,e,"target")))}return d.x1=uo(d.x1),d.y1=uo(d.y1),d.x2=uo(d.x2),d.y2=uo(d.y2),d.w=uo(d.x2-d.x1),d.h=uo(d.y2-d.y1),d.w>0&&d.h>0&&b&&(Xt(d,y),Vt(d,1)),d},yo=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:Bo,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},zo.removeAllListeners=function(){return this.removeListener("*")},zo.emit=zo.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,E(t)||(t=[t]),Vo(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)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n1&&!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&&x(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;ir&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a=0&&i1&&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)){var a=e;i.applyBypass(this,a,r),this.emitAndNotify("style")}else if(x(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;a0&&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)}}),ps.neighbourhood=ps.neighborhood,ps.closedNeighbourhood=ps.closedNeighborhood,ps.openNeighbourhood=ps.openNeighborhood,U(ps,{source:qa((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:qa((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:ys({attr:"source"}),targets:ys({attr:"target"})}),U(ps,{edgesWith:qa(ms(),"edgesWith"),edgesTo:qa(ms({thisIsSrc:!0}),"edgesTo")}),U(ps,{connectedEdges:qa((function(e){for(var t=[],n=0;n0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),ps.componentsOf=ps.components;var xs=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 ot,a=!1;if(t){if(t.length>0&&_(t[0])&&!N(t[0])){a=!0;for(var o=[],s=new lt,l=0,u=t.length;l0&&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;u0){for(var B=e.length===i.length?i:new xs(a,e),F=0;F0&&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){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n0&&(e?_.emitAndNotify("remove"):t&&_.emit("remove"));for(var T=0;T=.001?function(t,r){for(var a=0;a0?i=l:r=l}while(Math.abs(s)>a&&++uh&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),Ds=function(e,t,n,r){var i=_s(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Cs={linear:function(e,t,n){return e+(t-e)*n},ease:Ds(.25,.1,.25,1),"ease-in":Ds(.42,0,1,1),"ease-out":Ds(0,0,.58,1),"ease-in-out":Ds(.42,0,.58,1),"ease-in-sine":Ds(.47,0,.745,.715),"ease-out-sine":Ds(.39,.575,.565,1),"ease-in-out-sine":Ds(.445,.05,.55,.95),"ease-in-quad":Ds(.55,.085,.68,.53),"ease-out-quad":Ds(.25,.46,.45,.94),"ease-in-out-quad":Ds(.455,.03,.515,.955),"ease-in-cubic":Ds(.55,.055,.675,.19),"ease-out-cubic":Ds(.215,.61,.355,1),"ease-in-out-cubic":Ds(.645,.045,.355,1),"ease-in-quart":Ds(.895,.03,.685,.22),"ease-out-quart":Ds(.165,.84,.44,1),"ease-in-out-quart":Ds(.77,0,.175,1),"ease-in-quint":Ds(.755,.05,.855,.06),"ease-out-quint":Ds(.23,1,.32,1),"ease-in-out-quint":Ds(.86,0,.07,1),"ease-in-expo":Ds(.95,.05,.795,.035),"ease-out-expo":Ds(.19,1,.22,1),"ease-in-out-expo":Ds(1,0,0,1),"ease-in-circ":Ds(.6,.04,.98,.335),"ease-out-circ":Ds(.075,.82,.165,1),"ease-in-out-circ":Ds(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Cs.linear;var r=Ts(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Ds};function Ns(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 As(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Ls(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=As(e,i),s=As(t,i);if(T(o)&&T(s))return Ns(a,o,s,n,r);if(E(o)&&E(s)){for(var l=[],u=0;u0?("spring"===h&&d.push(o.duration),o.easingImpl=Cs[h].apply(null,d)):o.easingImpl=Cs[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={};Ss(f.x,v.x)&&(y.x=Ls(f.x,v.x,p,g)),Ss(f.y,v.y)&&(y.y=Ls(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,b=o.pan,w=a.pan,E=null!=b&&r;E&&(Ss(m.x,b.x)&&(w.x=Ls(m.x,b.x,p,g)),Ss(m.y,b.y)&&(w.y=Ls(m.y,b.y,p,g)),e.emit("pan"));var _=o.startZoom,T=o.zoom,D=null!=T&&r;D&&(Ss(_,T)&&(a.zoom=Ft(a.minZoom,Ls(_,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=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||Ms(0,h,e),ks(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;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Os={animate:ra.animate(),animation:ra.animation(),animated:ra.animated(),clearQueue:ra.clearQueue(),delay:ra.delay(),delayAnimation:ra.delayAnimation(),stop:ra.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._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){Is(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&Ae((function(n){Is(n,e),t()}))}()}}},Ps={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&&N(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}},Rs=function(e){return x(e)?new Ya(e):e},Bs={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Fo(Ps,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Rs(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Rs(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Rs(t),n),this},once:function(e,t,n){return this.emitter().one(e,Rs(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}};ra.eventAliasesOn(Bs);var Fs={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)}};Fs.jpeg=Fs.jpg;var zs={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=x(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(U({},e,{cy:t,eles:i}));return a}We("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else We("A `name` must be specified to make a layout");else We("Layout options must be specified to make a layout")}};zs.createLayout=zs.makeLayout=zs.layout;var Gs={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;r0;)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)}};Vs.invalidateDimensions=Vs.resize;var Xs={collection:function(e,t){return x(e)?this.$(e):C(e)?e.collection():E(e)?(t||(t={}),new xs(this,e,t.unique,t.removed)):new xs(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}};Xs.elements=Xs.filter=Xs.$;var Us={},js="t";Us.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],_=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],k=[Math.round(w+(E-w)*v),Math.round(_+(D-_)*v),Math.round(C+(N-C)*v),Math.round(A+(L-A)*v)];n={bypass:i.bypass,name:i.name,value:k,strValue:"rgb("+k[0]+", "+k[1]+", "+k[2]+")"}}else{if(!s.number)return!1;var S=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,S,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var M=i.field.split("."),I=h.data,O=0;O0&&a>0){for(var s={},l=!1,u=0;u0?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)},Us.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Us.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)}))},Us.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||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()})),!i.triggersBoundsOfConnectedEdges||"display"!==t||"none"!==n&&"none"!==r||e.connectedEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},Us.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var qs={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;at.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var l=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){Ke("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=l[0];var u=l[1];if("core"!==u)if(new Ya(u).invalid){Ke("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],h=!1;n=c;for(var d=[];;){if(n.match(/^\s*$/))break;var p=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!p){Ke("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),h=!0;break}r=p[0];var g=p[1],f=p[2];if(this.properties[g])i.parse(g,f)?(d.push({name:g,val:f}),s()):(Ke("Skipping property: Invalid property definition in: "+r),s());else Ke("Skipping property: Invalid property name in: "+r),s()}if(h){o();break}i.selector(u);for(var v=0;v=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 Ke("`"+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+/):E(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var b=[],_=[],D=[],C="",N=!1,A=0;A0?" ":"")+L.strValue}return h.validate&&!h.validate(b,_)?null:h.singleEnum&&N?1===b.length&&x(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:D,strValue:C,bypass:n,units:_}}var k,S,M=function(){for(var r=0;rh.max||h.strictMax&&t===h.max))return null;var z={name:e,value:t,strValue:""+t+(I||""),units:I,bypass:n};return h.unitless||"px"!==I&&"em"!==I?z.pfValue=t:z.pfValue="px"!==I&&I?this.getEmSizeInPixels()*t:t,"ms"!==I&&"s"!==I||(z.pfValue="ms"===I?t:1e3*t),"deg"!==I&&"rad"!==I||(z.pfValue="rad"===I?t:(k=t,Math.PI*k/180)),"%"===I&&(z.pfValue=t/100),z}if(h.propList){var G=[],Y=""+t;if("none"===Y);else{for(var V=Y.split(/\s*,\s*|\s+/),X=0;X0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=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),T(e)?n=e:_(e)&&(n=e.level,null!=e.position?t=Nt(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;T(l.x)&&(t.pan.x=l.x,o=!1),T(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(x(e)){var n=e;e=this.mutableElements().filter(n)}else C(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,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().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}};nl.centre=nl.center,nl.autolockNodes=nl.autolock,nl.autoungrabifyNodes=nl.autoungrabify;var rl={data:ra.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ra.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ra.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ra.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};rl.attr=rl.data,rl.removeAttr=rl.removeData;var il=function(e){var t=this,n=(e=U({},e)).container;n&&!D(n)&&D(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!==p&&void 0!==n&&!e.headless,o=e;o.layout=U({name:a?"grid":"null"},o.layout),o.renderer=U({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 xs(this),listeners:[],aniEles:new xs(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:T(o.zoom)?o.zoom:1,pan:{x:_(o.pan)&&T(o.pan.x)?o.pan.x:0,y:_(o.pan)&&T(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});l.styleEnabled&&t.setStyle([]);var u=U({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(M))return Lr.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(_(e)||E(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=U({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,w(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,u=zt(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(C(n.roots))e=n.roots;else if(E(n.roots)){for(var c=[],h=0;h0;){var M=L.shift(),I=A(M,k);if(I)M.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(S);else if(null===I){Ke("Detected double maximal shift for node `"+M.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}N();var O=0;if(n.avoidOverlap)for(var P=0;P0&&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:W+c*Math.cos(h),y:$+c*Math.sin(h)}}return{x:W+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var hl={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 dl(e){this.options=U({},hl,e)}dl.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=zt(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),h=0,d=0;d1&&t.avoidOverlap){h*=1.75;var v=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(h*h/(v*v+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l+a,y:u+s}})),this};var pl,gl={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 fl(e){this.options=U({},gl,e)}fl.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=zt(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,h=0;h0)Math.abs(m[0].value-x.value)>=v&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,_=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,_)}for(var T=0,D=0;D1&&t.avoidOverlap){var L=Math.cos(A)-Math.cos(0),k=Math.sin(A)-Math.sin(0),S=Math.sqrt(w*w/(L*L+k*k));T=Math.max(S,T)}C.r=T,T+=w}if(t.equidistant){for(var M=0,I=0,O=0;O=e.numIter)&&(Tl(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&a(),Ae(t)):(Rl(r,e),s())}()}else{for(;u;)u=o(l),l++;Rl(r,e),s()}return this},yl.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},yl.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var ml=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=zt(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u0){o.graphSet.push(E);for(u=0;ur.count?0:r.graph},xl=function e(t,n,r,i){var a=i.graphSet[r];if(-10)var s=(u=r.nodeOverlap*o)*i/(f=Math.sqrt(i*i+a*a)),l=u*a/f;else{var u,c=Ll(e,i,a),h=Ll(t,-1*i,-1*a),d=h.x-c.x,p=h.y-c.y,g=d*d+p*p,f=Math.sqrt(g);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/g)*d/f,l=u*p/f}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Al=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},Ll=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&&0n?(u.x=r,u.y=i+a/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0=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},kl=function(e,t){for(var n=0;n1){var g=t.gravity*h/p,f=t.gravity*d/p;c.offsetX+=g,c.offsetY+=f}}}}},Ml=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(0n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Pl=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.padLefti.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTopg&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},Bl={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 Fl(e){this.options=U({},Bl,e)}Fl.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=zt(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?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=u&&(S=0,k++)},I={},O=0;O(r=Qt(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(r=Zt(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),_=[{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<_.length;w++){var T=_[w],D=s.arrowShapes[n.pstyle(T.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,T.angle,{x:T.x,y:T.y},C,d)&&D.collide(e,t,E,T.angle,{x:T.x,y:T.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return it(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),_=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=_(f,m),D=_(f,x),C=_(y,m),N=_(y,x),A=[T.x+d,T.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Jt(e,t,A))return v(n),!0}else if(qt(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,a,o=this.getCachedZSortedEles().interactive,s=[],l=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),h=Math.max(t,r),d=zt({x1:e=l,y1:t=c,x2:n=u,y2:r=h}),p=0;p0?-(Math.PI-a.ang):Math.PI+a.ang),yu(t,n,vu),eu=fu.nx*vu.ny-fu.ny*vu.nx,tu=fu.nx*vu.nx-fu.ny*-vu.ny,iu=Math.asin(Math.max(-1,Math.min(1,eu))),Math.abs(iu)<1e-6)return Ql=t.x,Jl=t.y,void(ou=lu=0);nu=1,ru=!1,tu<0?iu<0?iu=Math.PI+iu:(iu=Math.PI-iu,nu=-1,ru=!0):iu>0&&(nu=-1,ru=!0),lu=void 0!==t.radius?t.radius:r,au=iu/2,uu=Math.min(fu.len/2,vu.len/2),i?(su=Math.abs(Math.cos(au)*lu/Math.sin(au)))>uu?(su=uu,ou=Math.abs(su*Math.sin(au)/Math.cos(au))):ou=lu:(su=Math.min(uu,lu),ou=Math.abs(su*Math.sin(au)/Math.cos(au))),du=t.x+vu.nx*su,pu=t.y+vu.ny*su,Ql=du-vu.ny*ou*nu,Jl=pu+vu.nx*ou*nu,cu=t.x+fu.nx*su,hu=t.y+fu.ny*su,gu=t};function bu(e,t){0===t.radius?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function xu(e,t,n,r){var i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return 0===r||0===t.radius?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(mu(e,t,n,r,i),{cx:Ql,cy:Jl,radius:ou,startX:cu,startY:hu,stopX:du,stopY:pu,startAngle:fu.ang+Math.PI/2*nu,endAngle:vu.ang-Math.PI/2*nu,counterClockwise:ru})}var wu={};function Eu(e){var t=[];if(null!=e){for(var n=0;n0?Math.max(e-t,0):Math.min(e+t,0)},N=C(T,E),A=C(D,_),L=!1;"auto"===v?f=Math.abs(N)>Math.abs(A)?i:r:v===l||v===s?(f=r,L=!0):v!==a&&v!==o||(f=i,L=!0);var k,S=f===r,M=S?A:N,I=S?D:T,O=Mt(I),P=!1;(L&&(m||x)||!(v===s&&I<0||v===l&&I>0||v===a&&I>0||v===o&&I<0)||(M=(O*=-1)*Math.abs(M),P=!0),m)?k=(b<0?1+b:b)*M:k=(b<0?M:0)+b*O;var R=function(e){return Math.abs(e)=Math.abs(M)},B=R(k),F=R(Math.abs(M)-Math.abs(k));if((B||F)&&!P)if(S){var z=Math.abs(I)<=h/2,G=Math.abs(T)<=d/2;if(z){var Y=(u.x1+u.x2)/2,V=u.y1,X=u.y2;n.segpts=[Y,V,Y,X]}else if(G){var U=(u.y1+u.y2)/2,j=u.x1,q=u.x2;n.segpts=[j,U,q,U]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(I)<=c/2,W=Math.abs(D)<=p/2;if(H){var $=(u.y1+u.y2)/2,K=u.x1,Z=u.x2;n.segpts=[K,$,Z,$]}else if(W){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(S){var te=u.y1+k+(g?h/2*O:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ie=u.x1+k+(g?c/2*O:0),ae=u.y1,oe=u.y2;n.segpts=[ie,ae,ie,oe]}if(n.isRound){var se=e.pstyle("taxi-radius").value,le="arc-radius"===e.pstyle("radius-type").value[0];n.radii=new Array(n.segpts.length/2).fill(se),n.isArcRadius=new Array(n.segpts.length/2).fill(le)}},wu.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=t.srcCornerRadius,d=t.tgtCornerRadius,p=t.srcRs,g=t.tgtRs,f=!T(n.startX)||!T(n.startY),v=!T(n.arrowStartX)||!T(n.arrowStartY),y=!T(n.endX)||!T(n.endY),m=!T(n.arrowEndX)||!T(n.arrowEndY),b=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),x=It({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),w=xd.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)],E=s.srcCornerRadius="auto"===h.pstyle("corner-radius").value?"auto":h.pstyle("corner-radius").pfValue,_=s.tgtCornerRadius="auto"===d.pstyle("corner-radius").value?"auto":d.pstyle("corner-radius").pfValue,D=s.tgtRs=d._private.rscratch,C=s.srcRs=h._private.rscratch;s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var N=0;N0){var q=u,H=Ot(q,Lt(t)),W=Ot(q,Lt(j)),$=H;if(W2)Ot(q,{x:j[2],y:j[3]})<$&&(t=[j[2],j[3]])}}var K=un(t,n,o.arrowShapes[h].spacing(e)+p),Z=un(t,n,o.arrowShapes[h].gap(e)+p);if(m.endX=Z[0],m.endY=Z[1],m.arrowEndX=K[0],m.arrowEndY=K[1],"inside-to-node"===L)t=[u.x,u.y];else if(A.units)t=this.manualEndptToPx(s,A);else if("outside-to-line"===L)t=m.srcIntn;else if("outside-to-node"===L||"outside-to-node-or-label"===L?a=r:"outside-to-line"!==L&&"outside-to-line-or-label"!==L||(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,k,f),"outside-to-node-or-label"===L||"outside-to-line-or-label"===L){var Q=s._private.rscratch,J=Q.labelWidth,ee=Q.labelHeight,te=Q.labelX,ne=Q.labelY,re=J/2,ie=ee/2,ae=s.pstyle("text-valign").value;"top"===ae?ne-=ie:"bottom"===ae&&(ne+=ie);var oe=s.pstyle("text-halign").value;"left"===oe?te-=re:"right"===oe&&(te+=re);var se=ln(a[0],a[1],[te-re,ne-ie,te+re,ne-ie,te+re,ne+ie,te-re,ne+ie],u.x,u.y);if(se.length>0){var le=c,ue=Ot(le,Lt(t)),ce=Ot(le,Lt(se)),he=ue;if(ce2)Ot(le,{x:se[2],y:se[3]})=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,_=s?x.t0+E*w:x.t1-E*w;_=Ft(0,_,1),t=Bt(b.p0,b.p1,b.p2,_),i=function(e,t,n,r){var i=Ft(0,r-.001,1),a=Ft(0,r+.001,1),o=Bt(e,t,n,i),s=Bt(e,t,n,a);return Au(o,s)}(b.p0,b.p1,b.p2,_);break;case"straight":case"segments":case"haystack":for(var T,D,C,N,A=0,L=r.allpts.length,k=0;k+3=u));k+=2);var S=(u-D)/T;S=Ft(0,S,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=It(e,t),s=i/o,l=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(C,N,S),i=Au(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},Cu.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},Cu.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=it(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;at(n.rstyle,"labelWidth",t,h),at(n.rscratch,"labelWidth",t,h),at(n.rstyle,"labelHeight",t,d),at(n.rscratch,"labelHeight",t,d),at(n.rscratch,"labelLineHeight",t,c)},Cu.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?(at(n.rscratch,e,t,r),r):it(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=i.split("\n"),c=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],g=/[\s\u200b]+|$/g,f=0;fc){var b,x="",w=0,E=d(v.matchAll(g));try{for(E.s();!(b=E.n()).done;){var _=b.value,T=_[0],D=v.substring(w,_.index);w=_.index+T.length;var C=0===x.length?D:x+D+T;this.calculateLabelDimensions(e,C).width<=c?x+=D+T:(x&&p.push(x),x=D+T)}}catch(S){E.e(S)}finally{E.f()}x.match(/^[\s\u200b]+$/)||p.push(x)}else p.push(v)}o("labelWrapCachedLines",p),i=o("labelWrapCachedText",p.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var N=e.pstyle("text-max-width").pfValue,A="",L=!1;if(this.calculateLabelDimensions(e,i).widthN)break;A+=i[k],k===i.length-1&&(L=!0)}return L||(A+="\u2026"),A}return i},Cu.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"}},Cu.calculateLabelDimensions=function(e,t){var n=this,r=n.cy.window().document,i=Be(t,e._private.labelDimsKey),a=n.labelDimCache||(n.labelDimCache=[]),o=a[i];if(null!=o)return o;var 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=r.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;y1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var N=i(t);v&&(e.hoverData.tapholdCancelled=!0);n=!0,r(f,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var A=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:c[0],y:c[1]}}),g[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var L={originalEvent:t,type:"cxtdrag",position:{x:c[0],y:c[1]}};m?m.emit(L):o.emit(L),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&f===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:c[0],y:c[1]}}),e.hoverData.cxtOver=f,f&&f.emit({originalEvent:t,type:"cxtdragover",position:{x:c[0],y:c[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var k;if(e.hoverData.justStartedPan){var S=e.hoverData.mdownPos;k={x:(c[0]-S[0])*s,y:(c[1]-S[1])*s},e.hoverData.justStartedPan=!1}else k={x:b[0]*s,y:b[1]*s};o.panBy(k),o.emit("dragpan"),e.hoverData.dragged=!0}c=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=g[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||f==y||(y&&r(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),f&&r(f,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=f),m)if(v){if(o.boxSelectionEnabled()&&N)m&&m.grabbed()&&(h(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),A();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var M=!e.dragData.didDrag;M&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||u(x,{inDragLayer:!0});var I={x:0,y:0};if(T(b[0])&&T(b[1])&&(I.x+=b[0],I.y+=b[1],M)){var O=e.hoverData.dragDelta;O&&T(O[0])&&T(O[1])&&(I.x+=O[0],I.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(I).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!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])}();n=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!N&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,g[4]=0,e.data.bgActivePosistion=Lt(d),e.redrawHint("select",!0),e.redraw())}}else A();m&&m.pannable()&&m.active()&&m.unactivate()}return g[2]=c[0],g[3]=c[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if((1!==e.hoverData.which||1===t.which||!e.hoverData.capture)&&e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,d=i(t);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 p={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(p):a.emit(p),!e.hoverData.cxtDragged){var g={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(g):a.emit(g)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),b=!1,t.timeStamp-x<=a.multiClickDebounceTime()?(m&&clearTimeout(m),b=!0,x=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(m=setTimeout((function(){b||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),x=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).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()||d?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):d||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var f=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),f.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||d||a.$(n).unmerge(f).unselect(),f.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();h(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,e.hoverData.which=null}}),!1);var E,_,D,C,N,A,L,k,S,M,I,O,P,R=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||0!==e.selection[4])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",R,!0),e.registerBinding(t,"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||R(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 B,F,z,G,Y,V,X,U=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},j=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",B=function(t){if(e.hasTouchStarted=!0,w(t)){p(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=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]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,h(e.dragData.touchDragEles);var l=e.findContainerClientCoords();S=l[0],M=l[1],I=l[2],O=l[3],E=t.touches[0].clientX-S,_=t.touches[0].clientY-M,D=t.touches[1].clientX-S,C=t.touches[1].clientY-M,P=0<=E&&E<=I&&0<=D&&D<=I&&0<=_&&_<=O&&0<=C&&C<=O;var d=n.pan(),g=n.zoom();N=U(E,_,D,C),A=j(E,_,D,C),k=[((L=[(E+D)/2,(_+C)/2])[0]-d.x)/g,(L[1]-d.y)/g];if(A<4e4&&!t.touches[2]){var f=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return f&&f.isNode()?(f.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=f):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):n.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])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),u(x,{addToList:b})):c(m,{addToList:b}),s(m);var T=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(T("grabon")),x?x.forEach((function(e){e.emit(T("grab"))})):m.emit(T("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(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||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var R=e.touchData.startPosition=[null,null,null,null,null,null],B=0;B=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-S,L=t.touches[0].clientY-M,I=t.touches[1].clientX-S,O=t.touches[1].clientY-M,R=j(x,L,I,O);if(R/A>=2.25||R>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):o.emit(B)}}if(n&&e.touchData.cxt){B={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(B):o.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&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,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&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),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var z=0;z0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",z=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",G=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.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(t.touches[0]){var d=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=d[0],u[1]=d[1]}if(t.touches[1]){d=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);u[2]=d[0],u[3]=d[1]}if(t.touches[2]){d=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);u[4]=d[0],u[5]=d[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(p):s.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var g=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:t,position:{x:u[0],y:u[1]}});g.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),g.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var f=e.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;h(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),v&&(i.emit("freeon"),f.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),f.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(u[0],u[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var m=e.touchData.startPosition[0]-u[0],b=m*m,x=e.touchData.startPosition[1]-u[1],w=(b+x*x)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),Y=!1,t.timeStamp-X<=s.multiClickDebounceTime()?(V&&clearTimeout(V),Y=!0,X=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):(V=setTimeout((function(){Y||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),X=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w2){for(var p=[c[0],c[1]],g=Math.pow(p[0]-e,2)+Math.pow(p[1]-t,2),f=1;f0)return f[0]}return null},p=Object.keys(h),g=0;g0?u:Wt(i,a,e,t,n,r,o,s)},checkPoint:function(e,t,n,r,i,a,o,s){var l=2*(s="auto"===s?pn(r,i):s);if(en(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(en(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!!Jt(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||(!!rn(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!rn(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},Ru.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",cn(3,0)),this.generateRoundPolygon("round-triangle",cn(3,0)),this.generatePolygon("rectangle",cn(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",cn(5,0)),this.generateRoundPolygon("round-pentagon",cn(5,0)),this.generatePolygon("hexagon",cn(6,0)),this.generateRoundPolygon("round-hexagon",cn(6,0)),this.generatePolygon("heptagon",cn(7,0)),this.generateRoundPolygon("round-heptagon",cn(7,0)),this.generatePolygon("octagon",cn(8,0)),this.generateRoundPolygon("round-octagon",cn(8,0));var r=new Array(20),i=dn(5,0),a=dn(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Yu)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())}),i(t))}}},Xu=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:je;a(this,e),this.idsByKey=new ot,this.keyForId=new ot,this.cachesByLvl=new ot,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return s(e,[{key:"getIdsFor",value:function(e){null==e&&We("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new lt,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 ot,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}(),Uu={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},ju=tt({getKey:null,doesEleInvalidateKey:je,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Ue,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),qu=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=ju(t);U(n,r),n.lookup=new Xu(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Hu=qu.prototype;Hu.reasons=Uu,Hu.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Hu.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},Hu.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new pt((function(e,t){return t.reqs-e.reqs}))},Hu.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},Hu.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(St(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)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<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||h>1024)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.usedWidthr;N--)D=a.getElement(e,t,n,N,Uu.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=-4;L--){var k=l.get(e,L);if(k){A=k;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+8),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},Hu.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},Hu.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?nt(t,e):e.fullnessChecks++},Hu.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;nt(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,rt(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),nt(r,a),n.push(a),a}},Hu.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},Hu.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&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,Uu.dequeue)}}return i},Hu.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=Xe,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},Hu.onDequeue=function(e){this.onDequeues.push(e)},Hu.offDequeue=function(e){nt(this.onDequeues,e)},Hu.setupDequeueing=Vu({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!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;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&nt(c,o)}}();var h=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=zt();for(var t=0;t16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var d=null,p=e.length/1,g=!a,f=0;f=p||!Ht(d.bb,v.boundingBox()))&&!(d=h({insert:!0,after:d})))return null;s||g?r.queueLayer(d,v):r.drawEleInLayer(d,v,n,t),d.eles.push(v),m[n]=d}}return s||(g?null:c)},$u.getEleLevelForLayerLevel=function(e,t){return e},$u.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},$u.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},$u.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},$u.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=Le(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},$u.invalidateLayer=function(e){if(this.lastInvalidationTime=Le(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];nt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i3&&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=t.pstyle("line-outline-width").value,v=t.pstyle("line-outline-color").value,y=u*c,m=u*c,b=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;"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")},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var w=t.pstyle("ghost-offset-x").pfValue,E=t.pstyle("ghost-offset-y").pfValue,_=t.pstyle("ghost-opacity").value,T=y*_;e.translate(w,E),b(T),x(T),e.translate(-w,-E)}else!function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;e.lineWidth=p+f,e.lineCap=g,f>0?(o.colorStrokeStyle(e,v[0],v[1],v[2],n),"straight-triangle"===h?o.drawEdgeTrianglePath(t,e,s.allpts):(o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")):e.lineCap="butt"}();i&&o.drawEdgeUnderlay(e,t),b(),x(),i&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},pc=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")}}}};dc.drawEdgeOverlay=pc("overlay"),dc.drawEdgeUnderlay=pc("underlay"),dc.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 p=2;p+35&&void 0!==arguments[5]?arguments[5]:5,o=arguments.length>6?arguments[6]:void 0;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(),o?e.stroke():e.fill()}fc.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(St(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t5&&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)},fc.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&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)},fc.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=it(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},fc.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=it(a,"labelX",n),c=it(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=it(a,"labelWidth",n),f=it(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.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,D=0===t.pstyle("text-background-shape").strValue.indexOf("round");if(w>0||_>0&&E>0){var C=u-T;switch(b){case"left":C-=g;break;case"center":C-=g/2}var N=c-f-T,A=g+2*T,L=f+2*T;if(w>0){var k=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",D?vc(e,C,N,A,L,2):e.fillRect(C,N,A,L),e.fillStyle=k}if(_>0&&E>0){var M=e.strokeStyle,I=e.lineWidth,O=t.pstyle("text-border-color").value,P=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+O[0]+","+O[1]+","+O[2]+","+E*o+")",e.lineWidth=_,e.setLineDash)switch(P){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(D?vc(e,C,N,A,L,2,"stroke"):e.strokeRect(C,N,A,L),"double"===P){var R=_/2;D?vc(e,C+R,N+R,A-2*R,L-2*R,2,"stroke"):e.strokeRect(C+R,N+R,A-2*R,L-2*R)}e.setLineDash&&e.setLineDash([]),e.lineWidth=I,e.strokeStyle=M}}var B=2*t.pstyle("text-outline-width").pfValue;if(B>0&&(e.lineWidth=B),"wrap"===t.pstyle("text-wrap").value){var F=it(a,"labelWrapCachedLines",n),z=it(a,"labelLineHeight",n),G=g/2,Y=this.getLabelJustification(t);switch("auto"===Y||("left"===b?"left"===Y?u+=-g:"center"===Y&&(u+=-G):"center"===b?"left"===Y?u+=-G:"right"===Y&&(u+=G):"right"===b&&("center"===Y?u+=G:"right"===Y&&(u+=g))),x){case"top":case"center":case"bottom":c-=(F.length-1)*z}for(var V=0;V0&&e.strokeText(F[V],u,c),e.fillText(F[V],u,c),c+=z}else B>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var yc={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(T(h.x)&&T(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;E0&&void 0!==arguments[0]?arguments[0]:A;l.eleFillStyle(e,t,n)},U=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:R;l.colorStrokeStyle(e,L[0],L[1],L[2],t)},j=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:G;l.colorStrokeStyle(e,F[0],F[1],F[2],t)},q=function(e,t,n,r){var i,a=l.nodePathCache=l.nodePathCache||[],o=Fe("polygon"===n?n+","+r.join(","):n,""+t,""+e,""+V),s=a[o],u=!1;return null!=s?(i=s,u=!0,c.pathCache=i):(i=new Path2D,a[o]=c.pathCache=i),{path:i,cacheHit:u}},H=t.pstyle("shape").strValue,W=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var $=q(r,i,H,W);d=$.path,v=$.cacheHit}var K=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,V,c)}f?e.fill(d):e.fill()},Z=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;o0&&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,V,c)))},J=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())},ee=function(){if(N>0){if(e.lineWidth=N,e.lineCap=M,e.lineJoin=S,e.setLineDash)switch(k){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash(O),e.lineDashOffset=P;break;case"solid":case"double":e.setLineDash([])}if("center"!==I){if(e.save(),e.lineWidth*=2,"inside"===I)f?e.clip(d):e.clip();else{var t=new Path2D;t.rect(-r/2-N,-i/2-N,r+2*N,i+2*N),t.addPath(d),e.clip(t,"evenodd")}f?e.stroke(d):e.stroke(),e.restore()}else f?e.stroke(d):e.stroke();if("double"===k){e.lineWidth=N/3;var n=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=n}e.setLineDash&&e.setLineDash([])}},te=function(){if(B>0){if(e.lineWidth=B,e.lineCap="butt",e.setLineDash)switch(z){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=h;f&&(n={x:0,y:0});var a=l.getNodeShape(t),o=N;"inside"===I&&(o=0),"outside"===I&&(o*=2);var s,u=(r+o+(B+Y))/r,c=(i+o+(B+Y))/i,d=r*u,p=i*c,g=l.nodeShapes[a].points;if(f)s=q(d,p,a,g).path;if("ellipse"===a)l.drawEllipsePath(s||e,n.x,n.y,d,p);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(a)){var v=0,y=0,m=0;"round-diamond"===a?v=1.4*(o+Y+B):"round-heptagon"===a?(v=1.075*(o+Y+B),m=-(o/2+Y+B)/35):"round-hexagon"===a?v=1.12*(o+Y+B):"round-pentagon"===a?(v=1.13*(o+Y+B),m=-(o/2+Y+B)/15):"round-tag"===a?(v=1.12*(o+Y+B),y=.07*(o/2+B+Y)):"round-triangle"===a&&(v=(o+Y+B)*(Math.PI/2),m=-(o+Y/2+B)/Math.PI),0!==v&&(d=r*(u=(r+v)/r),["round-hexagon","round-tag"].includes(a)||(p=i*(c=(i+v)/i)));for(var b=d/2,x=p/2,w=(V="auto"===V?gn(d,p):V)+(o+B+Y)/2,E=new Array(g.length/2),_=new Array(g.length/2),T=0;T0){if(r=r||n.position(),null==i||null==a){var h=n.padding();i=n.width()+2*h,a=n.height()+2*h}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,i+2*o,a+2*o,c),t.fill()}}}};yc.drawNodeOverlay=mc("overlay"),yc.drawNodeUnderlay=mc("underlay"),yc.hasPie=function(e){return(e=e[0])._private.hasPie},yc.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 bc={};bc.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=this.cy.window(),n=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(t.devicePixelRatio||1)/n},bc.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;io.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},_={zoom:b,pan:{x:w.x,y:w.y}},T=o.prevViewport;void 0===T||_.zoom!==T.zoom||_.pan.x!==T.pan.x||_.pan.y!==T.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}),(_=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],k=o.textureCache.texture;_=o.textureCache.viewport;L.setTransform(1,0,0,1,0,0),d?C(L,0,0,_.width,_.height):L.clearRect(0,0,_.width,_.height);var S=m.core("outside-texture-bg-color").value,M=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,S[0],S[1],S[2],M),L.fillRect(0,0,_.width,_.height);b=l.zoom();N(L,!1),L.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s),L.drawImage(k,_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var I=l.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&O,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,I):o.drawLayeredElements(L,D.nondrag,s,I),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,I):o.drawCachedElements(L,D.drag,s,I),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)}if(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);L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var V=u.contexts[o.NODE],X=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],U=u.contexts[o.DRAG],j=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,X,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(U,j,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=_,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()}),100)),t||l.emit("render")};for(var xc={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;l0&&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},Nc.png=function(e){return Lc(e,this.bufferCanvasImage(e),"image/png")},Nc.jpg=function(e){return Lc(e,this.bufferCanvasImage(e),"image/jpeg")};var kc={nodeShapeImpl:function(e,t,n,r,i,a,o,s){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,s);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a,s);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a,o,s);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a,s);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},Sc=Ic,Mc=Ic.prototype;function Ic(e){var t=this,n=t.cy.window().document;t.data={canvases:new Array(Mc.CANVAS_LAYERS),contexts:new Array(Mc.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Mc.CANVAS_LAYERS),bufferCanvases:new Array(Mc.BUFFER_COUNT),bufferContexts:new Array(Mc.CANVAS_LAYERS)};var r="-webkit-tap-highlight-color",i="rgba(0,0,0,0)";t.data.canvasContainer=n.createElement("div");var a=t.data.canvasContainer.style;t.data.canvasContainer.style[r]=i,a.position="relative",a.zIndex="0",a.overflow="hidden";var o=e.cy.container();o.appendChild(t.data.canvasContainer),o.style[r]=i;var s={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};g&&g.userAgent.match(/msie|trident|edge/i)&&(s["-ms-touch-action"]="none",s["touch-action"]="none");for(var l=0;l2&&_.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:_})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},b=(e={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;at[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}}},e);function x(){this.yy={}}return m.lexer=b,x.prototype=m,m.Parser=x,new x}());Qc.parser=Qc;const Jc=Qc;let eh=[],th=0,nh={};const rh={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},ih={clear:()=>{eh=[],th=0,nh={}},addNode:(e,t,n,i)=>{var a,o;r.l.info("addNode",e,t,n,i);const s=(0,r.c)();let l=(null==(a=s.mindmap)?void 0:a.padding)??r.B.mindmap.padding;switch(i){case rh.ROUNDED_RECT:case rh.RECT:case rh.HEXAGON:l*=2}const u={id:th++,nodeId:(0,r.d)(t,s),level:e,descr:(0,r.d)(n,s),type:i,children:[],width:(null==(o=s.mindmap)?void 0:o.maxNodeWidth)??r.B.mindmap.maxNodeWidth,padding:l},c=function(e){for(let t=eh.length-1;t>=0;t--)if(eh[t].leveleh.length>0?eh[0]:null,nodeType:rh,getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return rh.RECT;case"(":return")"===t?rh.ROUNDED_RECT:rh.CLOUD;case"((":return rh.CIRCLE;case")":return rh.CLOUD;case"))":return rh.BANG;case"{{":return rh.HEXAGON;default:return rh.DEFAULT}},setElementForId:(e,t)=>{nh[e]=t},decorateNode:e=>{if(!e)return;const t=(0,r.c)(),n=eh[eh.length-1];e.icon&&(n.icon=(0,r.d)(e.icon,t)),e.class&&(n.class=(0,r.d)(e.class,t))},type2Str:e=>{switch(e){case rh.DEFAULT:return"no-border";case rh.RECT:return"rect";case rh.ROUNDED_RECT:return"rounded-rect";case rh.CIRCLE:return"circle";case rh.CLOUD:return"cloud";case rh.BANG:return"bang";case rh.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>r.l,getElementById:e=>nh[e]},ah=ih;function oh(e,t,n,i,a){!function(e,t,n,i,a){const o=a.htmlLabels,s=i%11,l=t.append("g");n.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(n.class?n.class+" ":"")+"mindmap-node "+u);const c=l.append("g"),h=l.append("g"),d=n.descr.replace(/()/g,"\n");(0,Wc.a)(h,d,{useHtmlLabels:o,width:n.width,classes:"mindmap-node-label"}),o||h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const p=h.node().getBBox(),[g]=(0,r.D)(a.fontSize);if(n.height=p.height+1.1*g*.5+n.padding,n.width=p.width+2*n.padding,n.icon)if(n.type===e.nodeType.CIRCLE)n.height+=50,n.width+=50,l.append("foreignObject").attr("height","50px").attr("width",n.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+n.icon),h.attr("transform","translate("+n.width/2+", "+(n.height/2-1.5*n.padding)+")");else{n.width+=50;const e=n.height;n.height=Math.max(e,60);const t=Math.abs(n.height-e);l.append("foreignObject").attr("width","60px").attr("height",n.height).attr("style","text-align: center;margin-top:"+t/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+n.icon),h.attr("transform","translate("+(25+n.width/2)+", "+(t/2+n.padding/2)+")")}else if(o){const e=(n.width-p.width)/2,t=(n.height-p.height)/2;h.attr("transform","translate("+e+", "+t+")")}else{const e=n.width/2,t=n.padding/2;h.attr("transform","translate("+e+", "+t+")")}switch(n.type){case e.nodeType.DEFAULT:!function(e,t,n,r){t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 ${n.height-5} v${10-n.height} q0,-5 5,-5 h${n.width-10} q5,0 5,5 v${n.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",n.height).attr("x2",n.width).attr("y2",n.height)}(e,c,n,s);break;case e.nodeType.ROUNDED_RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("rx",n.padding).attr("ry",n.padding).attr("width",n.width)}(e,c,n);break;case e.nodeType.RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("width",n.width)}(e,c,n);break;case e.nodeType.CIRCLE:c.attr("transform","translate("+n.width/2+", "+ +n.height/2+")"),function(e,t,n){t.append("circle").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("r",n.width/2)}(e,c,n);break;case e.nodeType.CLOUD:!function(e,t,n){const r=n.width,i=n.height,a=.15*r,o=.25*r,s=.35*r,l=.2*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${.25*r},${-1*r*.1}\n a${s},${s} 1 0,1 ${.4*r},${-1*r*.1}\n a${o},${o} 1 0,1 ${.35*r},${1*r*.2}\n\n a${a},${a} 1 0,1 ${.15*r},${1*i*.35}\n a${l},${l} 1 0,1 ${-1*r*.15},${1*i*.65}\n\n a${o},${a} 1 0,1 ${-1*r*.25},${.15*r}\n a${s},${s} 1 0,1 ${-1*r*.5},0\n a${a},${a} 1 0,1 ${-1*r*.25},${-1*r*.15}\n\n a${a},${a} 1 0,1 ${-1*r*.1},${-1*i*.35}\n a${l},${l} 1 0,1 ${.1*r},${-1*i*.65}\n\n H0 V0 Z`)}(e,c,n);break;case e.nodeType.BANG:!function(e,t,n){const r=n.width,i=n.height,a=.15*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${.25*r},${-1*i*.1}\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},${1*i*.1}\n\n a${a},${a} 1 0,0 ${.15*r},${1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${1*i*.34}\n a${a},${a} 1 0,0 ${-1*r*.15},${1*i*.33}\n\n a${a},${a} 1 0,0 ${-1*r*.25},${.15*i}\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},${-1*i*.15}\n\n a${a},${a} 1 0,0 ${-1*r*.1},${-1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${-1*i*.34}\n a${a},${a} 1 0,0 ${.1*r},${-1*i*.33}\n\n H0 V0 Z`)}(e,c,n);break;case e.nodeType.HEXAGON:!function(e,t,n){const r=n.height,i=r/4,a=n.width-n.padding+2*i;!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+")")}(t,a,r,[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],n)}(0,c,n)}e.setElementForId(n.id,l),n.height}(e,t,n,i,a),n.children&&n.children.forEach(((n,r)=>{oh(e,t,n,i<0?r:i,a)}))}function sh(e,t,n,r){t.add({group:"nodes",data:{id:e.id.toString(),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=>{sh(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 lh(e,t){return new Promise((n=>{const i=(0,Hc.Ltv)("body").append("div").attr("id","cy").attr("style","display:none"),a=jc({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});i.remove(),sh(e,a,t,0),a.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),a.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),a.ready((e=>{r.l.info("Ready",e),n(a)}))}))}jc.use(qc);const uh={draw:async(e,t,n,i)=>{var a,o;r.l.debug("Rendering mindmap diagram\n"+e);const s=i.db,l=s.getMindmap();if(!l)return;const u=(0,r.c)();u.htmlLabels=!1;const c=(0,r.A)(t),h=c.append("g");h.attr("class","mindmap-edges");const d=c.append("g");d.attr("class","mindmap-nodes"),oh(s,d,l,-1,u);const p=await lh(l,u);!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)}}))}(h,p),function(e,t){t.nodes().map(((t,n)=>{const i=t.data();i.x=t.position().x,i.y=t.position().y,function(e,t){const n=e.getElementById(t.id),r=t.x||0,i=t.y||0;n.attr("transform","translate("+r+","+i+")")}(e,i);const a=e.getElementById(i.nodeId);r.l.info("Id:",n,"Position: (",t.position().x,", ",t.position().y,")",i),a.attr("transform",`translate(${t.position().x-i.width/2}, ${t.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)}))}(s,p),(0,r.o)(void 0,c,(null==(a=u.mindmap)?void 0:a.padding)??r.B.mindmap.padding,(null==(o=u.mindmap)?void 0:o.useMaxWidth)??r.B.mindmap.useMaxWidth)}},ch=e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>d});var a=t(74848),r=t(28453),o=t(11470),s=t(19365);const i={title:"Manage JVM memory",sidebar_position:3,description:"Besu memory management",tags:["public networks","private networks"]},l="Manage JVM memory",u={id:"public-networks/how-to/configure-java/manage-memory",title:"Manage JVM memory",description:"Besu memory management",source:"@site/docs/public-networks/how-to/configure-java/manage-memory.md",sourceDirName:"public-networks/how-to/configure-java",slug:"/public-networks/how-to/configure-java/manage-memory",permalink:"/public-networks/how-to/configure-java/manage-memory",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-java/manage-memory.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Manage JVM memory",sidebar_position:3,description:"Besu memory management",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Pass JVM options",permalink:"/public-networks/how-to/configure-java/pass-jvm-options"},next:{title:"Use Java Flight Recorder",permalink:"/public-networks/how-to/configure-java/java-flight-recorder"}},c={},d=[{value:"Manage the heap dump",id:"manage-the-heap-dump",level:2},{value:"Default options",id:"default-options",level:2}];function h(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"manage-jvm-memory",children:"Manage JVM memory"})}),"\n",(0,a.jsx)(n.p,{children:"You can manage Java Virtual Machine (JVM) memory usage for Besu by modifying the maximum heap size."}),"\n",(0,a.jsx)(n.p,{children:"By default, the JVM uses 25% of system RAM. For example, if you have 16 GB RAM installed, the JVM uses 4 GB by default."}),"\n",(0,a.jsx)(n.p,{children:"On public networks, we recommend setting the maximum heap size to:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"3 GB on an 8 GB RAM system."}),"\n",(0,a.jsx)(n.li,{children:"5 GB on a 16 GB RAM system."}),"\n",(0,a.jsx)(n.li,{children:"8 GB on a system with at least 24 GB RAM."}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"Setting a higher maximum heap size speeds up the sync period but doesn't have much impact after sync. Thus, we recommend setting it to 8 GB only when you have available RAM."})}),"\n",(0,a.jsxs)(n.p,{children:["You can set the maximum heap size using the ",(0,a.jsx)(n.code,{children:"BESU_OPTS"})," environment variable and the ",(0,a.jsx)(n.code,{children:"-Xmx"})," option. The following examples set the maximum heap size to 8 GB:"]}),"\n",(0,a.jsxs)(o.A,{children:[(0,a.jsxs)(s.A,{value:"Exported environment variable",default:!0,children:[(0,a.jsx)(n.p,{children:"Set the variable for the whole shell before running Besu."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"export BESU_OPTS=-Xmx8g\n"})})]}),(0,a.jsxs)(s.A,{value:"Inline environment variable",children:[(0,a.jsx)(n.p,{children:"Set the variable only for the specific Besu command."}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_OPTS=-Xmx8g besu [Besu options]\n"})})]}),(0,a.jsx)(s.A,{value:".service file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'[Service]\n...\nEnvironment="BESU_OPTS=-Xmx8g"\nExecStart=besu [Besu options]\n...\n'})})})]}),"\n",(0,a.jsx)(n.h2,{id:"manage-the-heap-dump",children:"Manage the heap dump"}),"\n",(0,a.jsxs)(n.p,{children:["Heap dump file generation is disabled by default. To enable it, set the ",(0,a.jsx)(n.code,{children:"-XX:+HeapDumpOnOutOfMemoryError"})," Java option."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_OPTS="-XX:+HeapDumpOnOutOfMemoryError"\n'})}),"\n",(0,a.jsx)(n.p,{children:"When heap dump file generation is enabled, and an out-of-memory error occurs, the heap dump file is saved in the Besu runtime directory by default."}),"\n",(0,a.jsxs)(n.p,{children:["The heap dump file might be large and can saturate your drive. It can be up to the size of the allocated memory. For example, for 8 GB heap memory, the file can be up to 8 GB. Specify the directory where you want the dump to be saved using the ",(0,a.jsx)(n.code,{children:"-XX:HeapDumpPath"})," Java option."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_OPTS="-XX:HeapDumpPath=///"\n'})}),"\n",(0,a.jsx)(n.h2,{id:"default-options",children:"Default options"}),"\n",(0,a.jsx)(n.p,{children:"To reduce Besu memory footprint, the following G1GC Java options are enabled by default:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"-XX:G1ConcRefinementThreads=2\n-XX:G1HeapWastePercent=15\n-XX:MaxGCPauseMillis=100\n"})}),"\n",(0,a.jsxs)(n.p,{children:["To run Besu without the default G1GC options, use the ",(0,a.jsx)(n.code,{children:"besu-untuned"})," start script."]})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>s});t(96540);var a=t(18215);const r={tabItem:"tabItem_Ymn6"};var o=t(74848);function s(e){let{children:n,hidden:t,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.A)(r.tabItem,s),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>w});var a=t(96540),r=t(18215),o=t(23104),s=t(56347),i=t(205),l=t(57485),u=t(31682),c=t(70679);function d(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:r}}=e;return{value:n,label:t,attributes:a,default:r}}))}(t);return function(e){const n=(0,u.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function m(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,s.W6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(o),(0,a.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(r.location.search);n.set(o,e),r.replace({...r.location,search:n.toString()})}),[o,r])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=h(e),[s,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!m({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:o}))),[u,d]=p({queryString:t,groupId:r}),[b,f]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,o]=(0,c.Dv)(t);return[r,(0,a.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:r}),g=(()=>{const e=u??b;return m({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{g&&l(g)}),[g]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),f(e)}),[d,f,o]),tabValues:o}}var f=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=t(74848);function x(e){let{className:n,block:t,selectedValue:a,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),r=i[t].value;r!==a&&(u(n),s(r))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:d,onClick:c,...o,className:(0,r.A)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:o}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function j(e){const n=b(e);return(0,v.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,v.jsx)(x,{...n,...e}),(0,v.jsx)(y,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,v.jsx)(j,{...e,children:d(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>i});var a=t(96540);const r={},o=a.createContext(r);function s(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1331.f052e86d.js b/assets/js/1331.f052e86d.js new file mode 100644 index 00000000000..ef9124d0065 --- /dev/null +++ b/assets/js/1331.f052e86d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1331],{31331:(t,e,a)=>{a.d(e,{diagram:()=>b});var i=a(91245),n=a(26312),d=a(21176),r=a(697),s=a(99702);a(74353),a(16750),a(42838);const o={},c=(t,e)=>{o[t]=e},g=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+1.3*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.c)().state.padding).attr("y",i+.4*(0,s.c)().state.padding+(0,s.c)().state.dividerMargin+(0,s.c)().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.c)().state.padding).text(e);a||i.attr("dy",(0,s.c)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.c)().state.padding).attr("y1",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("y2",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("class","descr-divider"),c=n.node().getBBox(),g=Math.max(c.width,a.width);return o.attr("x2",g+3*(0,s.c)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",g+2*(0,s.c)().state.padding).attr("height",c.height+i+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius),t},p=(t,e,a)=>{const i=(0,s.c)().state.padding,n=2*(0,s.c)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,c=t.append("text").attr("x",0).attr("y",(0,s.c)().state.titleShift).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),g=c.node().getBBox().width+n;let p,h=Math.max(g,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,g>r&&(p=(r-h)/2+i),Math.abs(o-l.x)r&&(p=o-(g-r)/2);const x=1-(0,s.c)().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.c)().state.textHeight+(0,s.c)().state.titleShift+1).attr("rx","0"),c.attr("x",p+i),g<=r&&c.attr("x",o+(h-n)/2-g/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",3*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t},h=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.c)().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,"
");r=r.replace(/\n/g,"
");const o=r.split(s.e.lineBreakRegex);let c=1.25*(0,s.c)().state.noteMargin;for(const g of o){const t=g.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),n+=c,i.attr("x",e+(0,s.c)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.c)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.c)().state.noteMargin),a.attr("width",n+2*(0,s.c)().state.noteMargin),a},l=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.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.c)().state.forkWidth,i=(0,s.c)().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.c)().state.padding).attr("y",(0,s.c)().state.padding)})(n,e),"note"===e.type&&h(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.c)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.c)().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.c)().state.padding).attr("y",(0,s.c)().state.textHeight+2*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",i.width+2*(0,s.c)().state.padding).attr("height",i.height+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&g(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.c)().state.padding,i.height=d.height+2*(0,s.c)().state.padding,c(a,i),i};let x=0;let u;const f={},y=(t,e,a,o,c,g,h)=>{const w=new r.T({compound:!0,multigraph:!0});let b,B=!0;for(b=0;b{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(w.node(t)))}));let M=v.getBBox();w.edges().forEach((function(t){void 0!==t&&void 0!==w.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(w.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),o=t.append("path").attr("d",r(d)).attr("id","edge"+x).attr("class","transition");let c="";if((0,s.c)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),o.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}=s.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let o=0;const c=[];let g=0,p=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+o),a=e.node().getBBox();if(g=Math.max(g,a.width),p=Math.min(p,a.x),s.l.info(a.x,n,d+o),0===o){const t=e.node().getBBox();o=t.height,s.l.info("Title height",o,d)}c.push(e)}let h=o*r.length;if(r.length>1){const t=(r.length-1)*o*.5;c.forEach(((e,a)=>e.attr("y",d+a*o-t))),h=o*r.length}const l=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-g/2-(0,s.c)().state.padding/2).attr("y",d-h/2-(0,s.c)().state.padding/2-3.5).attr("width",g+(0,s.c)().state.padding).attr("height",h+(0,s.c)().state.padding),s.l.info(l)}x++}(e,w.edge(t),w.edge(t).relation))})),M=v.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=M.width+2*u.padding,S.height=M.height+2*u.padding,s.l.debug("Doc rendered",S,w),S},w={setConf:function(){},draw:function(t,e,a,i){u=(0,s.c)().state;const d=(0,s.c)().securityLevel;let r;"sandbox"===d&&(r=(0,n.Ltv)("#i"+e));const o="sandbox"===d?(0,n.Ltv)(r.nodes()[0].contentDocument.body):(0,n.Ltv)("body"),c="sandbox"===d?r.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const g=o.select(`[id='${e}']`);g.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 p=i.db.getRootDoc();y(p,g,void 0,!1,o,c,i);const h=u.padding,l=g.node().getBBox(),x=l.width+2*h,f=l.height+2*h,w=1.75*x;(0,s.i)(g,f,w,u.useMaxWidth),g.attr("viewBox",`${l.x-u.padding} ${l.y-u.padding} `+x+" "+f)}},b={parser:i.p,db:i.d,renderer:w,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/138e0e15.3444b433.js b/assets/js/138e0e15.3444b433.js new file mode 100644 index 00000000000..2c7a481904d --- /dev/null +++ b/assets/js/138e0e15.3444b433.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4921],{41597:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/13912882.2ce4e4ef.js b/assets/js/13912882.2ce4e4ef.js new file mode 100644 index 00000000000..b5fdeadbe79 --- /dev/null +++ b/assets/js/13912882.2ce4e4ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3005],{25319:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>d,toc:()=>l});var r=o(74848),t=o(28453);const s={title:"Upgrade Besu",sidebar_position:11,description:"Upgrade your Besu node to a new version.",tags:["public networks"]},i="Upgrade your Besu node",d={id:"public-networks/how-to/upgrade-node",title:"Upgrade Besu",description:"Upgrade your Besu node to a new version.",source:"@site/docs/public-networks/how-to/upgrade-node.md",sourceDirName:"public-networks/how-to",slug:"/public-networks/how-to/upgrade-node",permalink:"/public-networks/how-to/upgrade-node",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/upgrade-node.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:11,frontMatter:{title:"Upgrade Besu",sidebar_position:11,description:"Upgrade your Besu node to a new version.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Configure mining",permalink:"/public-networks/how-to/use-pow/mining"},next:{title:"Reduce storage for Bonsai Tries",permalink:"/public-networks/how-to/bonsai-limit-trie-logs"}},a={},l=[{value:"Ansible",id:"ansible",level:2},{value:"Find peers on restarting",id:"find-peers-on-restarting",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"upgrade-your-besu-node",children:"Upgrade your Besu node"})}),"\n",(0,r.jsx)(n.p,{children:"When upgrading your Besu node, we recommend:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Using an orchestration method (for example, Ansible or Chef) to keep all nodes in sync with your desired configuration."}),"\n",(0,r.jsx)(n.li,{children:"Storing your configuration under version control."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"ansible",children:"Ansible"}),"\n",(0,r.jsxs)(n.p,{children:["You can use the ",(0,r.jsx)(n.a,{href:"https://galaxy.ansible.com/consensys/hyperledger_besu",children:"Ansible role on Galaxy"})," directly or customize it to suit your needs."]}),"\n",(0,r.jsxs)(n.p,{children:["Upgrade the Besu version on nodes by running the play with the new version. For more information, For more information, select ",(0,r.jsx)(n.strong,{children:"Read Me"})," on the ",(0,r.jsx)(n.a,{href:"https://galaxy.ansible.com/consensys/hyperledger_besu",children:"Ansible Galaxy Besu page"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The playbook:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Stops Besu."}),"\n",(0,r.jsx)(n.li,{children:"Downloads the updated version."}),"\n",(0,r.jsx)(n.li,{children:"Applies any new configuration."}),"\n",(0,r.jsx)(n.li,{children:"Starts Besu."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"find-peers-on-restarting",children:"Find peers on restarting"}),"\n",(0,r.jsx)(n.p,{children:"Nodes store known peers in the peer table. The peer table is not persisted to disk. When a node restarts, the node connects to the specified bootnodes and discovers other nodes through the peer discovery process. The node continues collecting data from where it left off before the restart (assuming there was no data corruption in a failure scenario)."}),"\n",(0,r.jsx)(n.p,{children:"Before the node restarted, connected peers saved the node details in their peer tables. These peers can reconnect to the restarted node. The restarted node uses these peers and the bootnodes, to discover more peers. To ensure that the restarted node successfully rejoins the network, ensure you specify at least one operational bootnode."})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>d});var r=o(96540);const t={},s=r.createContext(t);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1398.ddcb09a0.js b/assets/js/1398.ddcb09a0.js new file mode 100644 index 00000000000..ed9dfd46cf6 --- /dev/null +++ b/assets/js/1398.ddcb09a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1398],{31398:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(99702),a=r(697),n=r(26312),s=r(21176);const o=[];for(let S=0;S<256;++S)o.push((S+256).toString(16).slice(1));function c(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}const l=/^(?:[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 h=function(t){return"string"==typeof t&&l.test(t)};const d=function(t){if(!h(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=255&e,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=255&e,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=255&e,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=255&e,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=255&e,r};function y(t,e,r,i){switch(t){case 0:return e&r^~e&i;case 1:case 3:return e^r^i;case 2:return e&r^e&i^r&i}}function u(t,e){return t<>>32-e}const p=function(t,e,r){function i(t,i,a,n){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>0;l=c,c=o,o=u(a,30)>>>0,a=i,i=s}r[0]=r[0]+i>>>0,r[1]=r[1]+a>>>0,r[2]=r[2]+o>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+l>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));r(74353),r(16750),r(42838);var _=function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[6,8,10,20,22,24,26,27,28],r=[1,10],i=[1,11],a=[1,12],n=[1,13],s=[1,14],o=[1,15],c=[1,21],l=[1,22],h=[1,23],d=[1,24],y=[1,25],u=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],p=[1,34],_=[27,28,46,47],f=[41,42,43,44,45],m=[17,34],E=[1,54],g=[1,53],O=[17,34,36,38],b={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(t,e,r,i,a,n,s){var o=n.length-1;switch(a){case 1:break;case 2:case 6:case 7:this.$=[];break;case 3:n[o-1].push(n[o]),this.$=n[o-1];break;case 4:case 5:case 19:case 43:case 27:case 28:case 31:this.$=n[o];break;case 8:i.addEntity(n[o-4]),i.addEntity(n[o-2]),i.addRelationship(n[o-4],n[o],n[o-2],n[o-3]);break;case 9:i.addEntity(n[o-3]),i.addAttributes(n[o-3],n[o-1]);break;case 10:i.addEntity(n[o-2]);break;case 11:i.addEntity(n[o]);break;case 12:i.addEntity(n[o-6],n[o-4]),i.addAttributes(n[o-6],n[o-1]);break;case 13:i.addEntity(n[o-5],n[o-3]);break;case 14:i.addEntity(n[o-3],n[o-1]);break;case 15:case 16:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 20:case 41:case 42:case 32:this.$=n[o].replace(/"/g,"");break;case 21:case 29:this.$=[n[o]];break;case 22:n[o].push(n[o-1]),this.$=n[o];break;case 23:this.$={attributeType:n[o-1],attributeName:n[o]};break;case 24:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeKeyTypeList:n[o]};break;case 25:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeComment:n[o]};break;case 26:this.$={attributeType:n[o-3],attributeName:n[o-2],attributeKeyTypeList:n[o-1],attributeComment:n[o]};break;case 30:n[o-2].push(n[o]),this.$=n[o-2];break;case 33:this.$={cardA:n[o],relType:n[o-1],cardB:n[o-2]};break;case 34:this.$=i.Cardinality.ZERO_OR_ONE;break;case 35:this.$=i.Cardinality.ZERO_OR_MORE;break;case 36:this.$=i.Cardinality.ONE_OR_MORE;break;case 37:this.$=i.Cardinality.ONLY_ONE;break;case 38:this.$=i.Cardinality.MD_PARENT;break;case 39:this.$=i.Identification.NON_IDENTIFYING;break;case 40:this.$=i.Identification.IDENTIFYING}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:c,42:l,43:h,44:d,45:y}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(u,[2,19]),t(u,[2,20]),t(e,[2,4]),{11:29,27:s,28:o},{16:30,17:[1,31],29:32,30:33,34:p},{11:35,27:s,28:o},{40:36,46:[1,37],47:[1,38]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(_,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:p},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:c,42:l,43:h,44:d,45:y},t(f,[2,39]),t(f,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(m,[2,23],{32:50,33:51,35:52,37:E,38:g}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(m,[2,24],{33:56,36:[1,57],38:g}),t(m,[2,25]),t(O,[2,29]),t(m,[2,32]),t(O,[2,31]),{16:58,17:[1,59],29:32,30:33,34:p},t(m,[2,26]),{35:60,37:E},{17:[1,61]},t(e,[2,13]),t(O,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],s=this.table,o="",c=0,l=0,h=n.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);d.setInput(t,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var p=d.yylloc;n.push(p);var _=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,E,g,O,b,k,R,N,T={};;){if(m=r[r.length-1],this.defaultActions[m]?E=this.defaultActions[m]:(null==f&&(N=void 0,"number"!=typeof(N=i.pop()||d.lex()||1)&&(N instanceof Array&&(N=(i=N).pop()),N=e.symbols_[N]||N),f=N),E=s[m]&&s[m][f]),void 0===E||!E.length||!E[0]){var x="";for(O in R=[],s[m])this.terminals_[O]&&O>2&&R.push("'"+this.terminals_[O]+"'");x=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:p,expected:R})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(E[0]){case 1:r.push(f),a.push(d.yytext),n.push(d.yylloc),r.push(E[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,p=d.yylloc;break;case 2:if(b=this.productions_[E[1]][1],T.$=a[a.length-b],T._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},_&&(T._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(g=this.performAction.apply(T,[o,l,c,y.yy,E[1],a,n].concat(h))))return g;b&&(r=r.slice(0,-1*b*2),a=a.slice(0,-1*b),n=n.slice(0,-1*b)),r.push(this.productions_[E[1]][0]),a.push(T.$),n.push(T._$),k=s[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},k={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,r=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[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 r,i,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))),(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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;ne[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[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,r,i){switch(r){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;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 10;case 8:case 15:case 20:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 16:return 37;case 17:case 18:return 34;case 19:return 38;case 21:return this.popState(),17;case 22:case 54:return e.yytext[0];case 23:return 18;case 24:return 19;case 25:case 29:case 30:case 43:return 41;case 26:case 27:case 28:case 36:case 38:case 45:return 43;case 31:case 32:case 33:case 34:case 35:case 37:case 44:return 42;case 39:case 40:case 41:case 42:return 44;case 46:return 45;case 47:case 50:case 51:case 52:return 46;case 48:case 49:return 47;case 53:return 27;case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/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,/^(?:\[)/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,/^(?:\s*u\b)/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},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,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],inclusive:!0}}};function R(){this.yy={}}return b.lexer=k,R.prototype=b,b.Parser=R,new R}();_.parser=_;const f=_;let m={},E=[];const g=function(t,e=void 0){return void 0===m[t]?(m[t]={attributes:[],alias:e},i.l.info("Added new entity :",t)):m[t]&&!m[t].alias&&e&&(m[t].alias=e,i.l.info(`Add alias '${e}' to entity '${t}'`)),m[t]},O={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},getConfig:()=>(0,i.c)().er,addEntity:g,addAttributes:function(t,e){let r,a=g(t);for(r=e.length-1;r>=0;r--)a.attributes.push(e[r]),i.l.debug("Added attribute ",e[r].attributeName)},getEntities:()=>m,addRelationship:function(t,e,r,a){let n={entityA:t,roleA:e,entityB:r,relSpec:a};E.push(n),i.l.debug("Added new relationship :",n)},getRelationships:()=>E,clear:function(){m={},E=[],(0,i.v)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.q,getDiagramTitle:i.t},b={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",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},k=b,R=function(t,e){let r;t.append("defs").append("marker").attr("id",b.MD_PARENT_START).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",b.MD_PARENT_END).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"),t.append("defs").append("marker").attr("id",b.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",b.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"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",b.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",b.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"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},N=/[^\dA-Za-z](\W)*/g;let T={},x=new Map;const A=function(t,e,r){let a;return Object.keys(e).forEach((function(n){const s=function(t="",e=""){const r=t.replace(N,"");return`${v(e)}${v(r)}${p(t,I)}`}(n,"entity");x.set(n,s);const o=t.append("g").attr("id",s);a=void 0===a?s:a;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,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e[n].alias??n),{width:h,height:d}=((t,e,r)=>{const a=T.entityPadding/3,n=T.entityPadding/3,s=.85*T.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*a,f=1;r.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),r.forEach((r=>{const n=`${e.node().id}-attr-${f}`;let o=0;const m=(0,i.x)(r.attributeType),E=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(m),g=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeName),O={};O.tn=E,O.nn=g;const b=E.node().getBBox(),k=g.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!==r.attributeKeyTypeList?r.attributeKeyTypeList.join(","):"",a=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(e);O.kn=a;const c=a.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",`${n}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeComment||"");O.cn=e;const a=e.node().getBBox();p=Math.max(p,a.width),o=Math.max(o,a.height)}O.height=o,c.push(O),_+=o+2*a,f+=1}));let m=4;l&&(m+=2),h&&(m+=2);const E=d+y+u+p,g={width:Math.max(T.minEntityWidth,Math.max(o.width+2*T.entityPadding,E+n*m)),height:r.length>0?_:Math.max(T.minEntityHeight,o.height+2*T.entityPadding)};if(r.length>0){const r=Math.max(0,(g.width-E-n*m)/(m/2));e.attr("transform","translate("+g.width/2+","+(a+o.height/2)+")");let i=o.height+2*a,s="attributeBoxOdd";c.forEach((e=>{const o=i+a+e.height/2;e.tn.attr("transform","translate("+n+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",i).attr("width",d+2*n+r).attr("height",e.height+2*a),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+n)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",i).attr("width",y+2*n+r).attr("height",e.height+2*a);let m=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(m+n)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",m).attr("y",i).attr("width",u+2*n+r).attr("height",e.height+2*a);m=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(m+n)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",m).attr("y",i).attr("width",p+2*n+r).attr("height",e.height+2*a)),i+=e.height+2*a,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else g.height=Math.max(T.minEntityHeight,_),e.attr("transform","translate("+g.width/2+","+g.height/2+")");return g})(o,l,e[n].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),a},M=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let w=0;const I="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function v(t=""){return t.length>0?`${t}-`:""}const D={parser:f,db:O,renderer:{setConf:function(t){const e=Object.keys(t);for(const r of e)T[r]=t[r]},draw:function(t,e,r,o){T=(0,i.c)().er,i.l.info("Drawing ER diagram");const c=(0,i.c)().securityLevel;let l;"sandbox"===c&&(l=(0,n.Ltv)("#i"+e));const h=("sandbox"===c?(0,n.Ltv)(l.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.T({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:T.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const y=A(h,o.db.getEntities(),d),u=function(t,e){return t.forEach((function(t){e.setEdge(x.get(t.entityA),x.get(t.entityB),{relationship:t},M(t))})),t}(o.db.getRelationships(),d);var p,_;(0,s.Zp)(d),p=h,(_=d).nodes().forEach((function(t){void 0!==t&&void 0!==_.node(t)&&p.select("#"+t).attr("transform","translate("+(_.node(t).x-_.node(t).width/2)+","+(_.node(t).y-_.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,r,a,s){w++;const o=r.edge(x.get(e.entityA),x.get(e.entityB),M(e)),c=(0,n.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.qrM),l=t.insert("path","#"+a).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",T.stroke).style("fill","none");e.relSpec.relType===s.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(T.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 s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_ONE_END+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_MORE_END+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ONE_OR_MORE_END+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+k.ONLY_ONE_END+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+h+"#"+k.MD_PARENT_END+")")}switch(e.relSpec.cardB){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_ONE_START+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_MORE_START+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ONE_OR_MORE_START+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+k.ONLY_ONE_START+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+h+"#"+k.MD_PARENT_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+w,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,i.c)().fontFamily).style("font-size",T.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)}(h,t,d,y,o)}));const f=T.diagramPadding;i.u.insertTitle(h,"entityTitleText",T.titleTopMargin,o.db.getDiagramTitle());const m=h.node().getBBox(),E=m.width+2*f,g=m.height+2*f;(0,i.i)(h,g,E,T.useMaxWidth),h.attr("viewBox",`${m.x-f} ${m.y-f} ${E} ${g}`)}},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 #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n \n`}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.ec56410f.js b/assets/js/14eb3368.ec56410f.js new file mode 100644 index 00000000000..f86ea814baa --- /dev/null +++ b/assets/js/14eb3368.ec56410f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6969],{71243:(e,t,n)=>{n.d(t,{A:()=>g});n(96540);var s=n(18215),r=n(17559),i=n(26972),a=n(99169),l=n(28774),o=n(21312),c=n(86025),d=n(74848);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("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 m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Ay)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.A,{"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function p(e){let{children:t,href:n,isLast:s}=e;const r="breadcrumbs__link";return s?(0,d.jsx)("span",{className:r,itemProp:"name",children:t}):n?(0,d.jsx)(l.A,{className:r,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:r,children:t})}function x(e){let{children:t,active:n,index:r,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}function g(){const e=(0,i.OF)(),t=(0,a.Dt)();return e?(0,d.jsx)("nav",{className:(0,s.A)(r.G.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,r="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(x,{active:s,index:n,addMicrodata:!!r,children:(0,d.jsx)(p,{href:r,isLast:s,children:t.label})},n)}))]})}):null}},79196:(e,t,n)=>{n.r(t),n.d(t,{default:()=>w});n(96540);var s=n(1003),r=n(26972),i=n(86025),a=n(18215),l=n(28774),o=n(53465),c=n(16654),d=n(21312),u=n(51107);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=n(74848);function b(e){let{href:t,children:n}=e;return(0,h.jsx)(l.A,{href:t,className:(0,a.A)("card padding--lg",m.cardContainer),children:n})}function p(e){let{href:t,icon:n,title:s,description:r}=e;return(0,h.jsxs)(b,{href:t,children:[(0,h.jsxs)(u.A,{as:"h2",className:(0,a.A)("text--truncate",m.cardTitle),title:s,children:[n," ",s]}),r&&(0,h.jsx)("p",{className:(0,a.A)("text--truncate",m.cardDescription),title:r,children:r})]})}function x(e){let{item:t}=e;const n=(0,r.Nr)(t),s=function(){const{selectMessage:e}=(0,o.W)();return t=>e(t,(0,d.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return n?(0,h.jsx)(p,{href:n,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??s(t.items.length)}):null}function g(e){let{item:t}=e;const n=(0,c.A)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,r.cC)(t.docId??void 0);return(0,h.jsx)(p,{href:t.href,icon:n,title:t.label,description:t.description??s?.description})}function v(e){let{item:t}=e;switch(t.type){case"link":return(0,h.jsx)(g,{item:t});case"category":return(0,h.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function f(e){let{className:t}=e;const n=(0,r.$S)();return(0,h.jsx)(j,{items:n.items,className:t})}function j(e){const{items:t,className:n}=e;if(!t)return(0,h.jsx)(f,{...e});const s=(0,r.d1)(t);return(0,h.jsx)("section",{className:(0,a.A)("row",n),children:s.map(((e,t)=>(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(v,{item:e})},t)))})}var A=n(86929),N=n(76858);function _(e){let{className:t}=e;return null}var T=n(71243);const k={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function L(e){let{categoryGeneratedIndex:t}=e;return(0,h.jsx)(s.be,{title:t.title,description:t.description,keywords:t.keywords,image:(0,i.Ay)(t.image)})}function y(e){let{categoryGeneratedIndex:t}=e;const n=(0,r.$S)();return(0,h.jsxs)("div",{className:k.generatedIndexPage,children:[(0,h.jsx)(N.A,{}),(0,h.jsx)(T.A,{}),(0,h.jsx)(_,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.A,{as:"h1",className:k.title,children:t.title}),t.description&&(0,h.jsx)("p",{children:t.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:n.items,className:k.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(A.A,{previous:t.navigation.previous,next:t.navigation.next})})]})}function w(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(L,{...e}),(0,h.jsx)(y,{...e})]})}},86929:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(21312),r=n(18215),i=n(28774),a=n(74848);function l(e){const{permalink:t,title:n,subLabel:s,isNext:l}=e;return(0,a.jsxs)(i.A,{className:(0,r.A)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}function o(e){const{previous:t,next:n}=e;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,a.jsx)(l,{...t,subLabel:(0,a.jsx)(s.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,a.jsx)(l,{...n,subLabel:(0,a.jsx)(s.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},53465:(e,t,n)=>{n.d(t,{W:()=>c});var s=n(96540),r=n(44586);const i=["zero","one","two","few","many","other"];function a(e){return i.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(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`),l}}),[e])}function c(){const e=o();return{selectMessage:(t,n)=>function(e,t,n){const s=e.split("|");if(1===s.length)return s[0];s.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const r=n.select(t),i=n.pluralForms.indexOf(r);return s[Math.min(i,s.length-1)]}(n,t,e)}}},76858:(e,t,n)=>{n.d(t,{A:()=>x});n(96540);var s=n(20053),r=n(44586),i=n(28774),a=n(21312),l=n(44070),o=n(17559),c=n(53886),d=n(23025),u=n(74848);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{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:(0,u.jsx)("b",{children:n.label})},children:"This is the development version of the documentation and some features may not yet be available in the stable release."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(a.A,{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:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for Besu version {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)(i.A,{to:n,onClick:s,children:(0,u.jsx)(a.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"stable version"})})},children:" You can switch to the {latestVersionLink} ({versionLabel})."})}function p(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,r.A)(),{pluginId:a}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:d}=(0,c.g1)(a),{latestDocSuggestion:m,latestVersionSuggestion:p}=(0,l.HW)(a),x=m??(g=p).docs.find((e=>e.id===g.mainDocId));var g;return(0,u.jsx)("div",{className:(0,s.A)(t,o.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:(0,u.jsxs)("div",{children:[(0,u.jsx)(h,{siteTitle:i,versionMetadata:n}),(0,u.jsx)(b,{versionLabel:p.name,to:x.path,onClick:()=>d(p.name)})]})})}function x(e){let{className:t}=e;const n=(0,d.r)();return n.banner?(0,u.jsx)(p,{className:t,versionMetadata:n}):null}}}]); \ No newline at end of file diff --git a/assets/js/16350423.a3ada36e.js b/assets/js/16350423.a3ada36e.js new file mode 100644 index 00000000000..bb1685e6743 --- /dev/null +++ b/assets/js/16350423.a3ada36e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8251],{7302:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var t=o(74848),r=o(28453);const i={title:"Configure ports",sidebar_position:2,description:"To enable communication you must expose Besu ports appropriately",tags:["public networks","private networks"]},s="Configure ports",c={id:"public-networks/how-to/connect/configure-ports",title:"Configure ports",description:"To enable communication you must expose Besu ports appropriately",source:"@site/docs/public-networks/how-to/connect/configure-ports.md",sourceDirName:"public-networks/how-to/connect",slug:"/public-networks/how-to/connect/configure-ports",permalink:"/public-networks/how-to/connect/configure-ports",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/connect/configure-ports.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Configure ports",sidebar_position:2,description:"To enable communication you must expose Besu ports appropriately",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Configure static nodes",permalink:"/public-networks/how-to/connect/static-nodes"},next:{title:"Manage peers",permalink:"/public-networks/how-to/connect/manage-peers"}},p={},a=[{value:"P2P networking",id:"p2p-networking",level:2},{value:"JSON-RPC API",id:"json-rpc-api",level:2},{value:"Metrics",id:"metrics",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"configure-ports",children:"Configure ports"})}),"\n",(0,t.jsx)(n.p,{children:"To enable communication you must expose Besu ports appropriately. The following shows an example port configuration for a Besu node on AWS."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Port Configuration",src:o(17538).A+"",width:"2698",height:"790"})}),"\n",(0,t.jsxs)(n.p,{children:["When running Besu from the ",(0,t.jsx)(n.a,{href:"/public-networks/get-started/install/run-docker-image",children:"Docker image"}),", ",(0,t.jsx)(n.a,{href:"/public-networks/get-started/install/run-docker-image#exposing-ports",children:"expose ports"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["If your nodes are running in AWS, ensure you have appropriate ",(0,t.jsx)(n.code,{children:"SecurityGroups"})," to allow access to the required ports."]})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Besu supports ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:"UPnP"})," for home or small office environments where a wireless router or modem provides NAT isolation."]})}),"\n",(0,t.jsx)(n.h2,{id:"p2p-networking",children:"P2P networking"}),"\n",(0,t.jsxs)(n.p,{children:["To enable peer discovery, the P2P UDP port must be open for inbound connections. Specify the P2P port using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,t.jsx)(n.code,{children:"--p2p-port"})})," option. The default is ",(0,t.jsx)(n.code,{children:"30303"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"We also recommend opening the P2P TCP port for inbound connections. This is not strictly required because Besu attempts to open outbound TCP connections. But if no nodes on the network are accepting inbound TCP connections, nodes cannot communicate."}),"\n",(0,t.jsxs)(n.p,{children:["Combine the P2P port with the values for the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,t.jsx)(n.code,{children:"--p2p-host"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-interface",children:(0,t.jsx)(n.code,{children:"--p2p-interface"})})," options when specifying the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:"P2P host"})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-interface",children:"P2P network interface"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["By default, peer discovery listens on ",(0,t.jsx)(n.code,{children:"0.0.0.0:30303"})," (all interfaces). If the device Besu is running on must bind to a specific network interface, specify the interface using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-interface",children:(0,t.jsx)(n.code,{children:"--p2p-interface"})})," option."]})}),"\n",(0,t.jsx)(n.h2,{id:"json-rpc-api",children:"JSON-RPC API"}),"\n",(0,t.jsxs)(n.p,{children:["To enable access to the ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"JSON-RPC API"}),", open the HTTP JSON-RPC and WebSockets JSON-RPC ports to the intended users of the JSON-RPC API on TCP."]}),"\n",(0,t.jsxs)(n.p,{children:["Specify the HTTP and WebSockets JSON-RPC ports using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,t.jsx)(n.code,{children:"--rpc-http-port"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-port",children:(0,t.jsx)(n.code,{children:"--rpc-ws-port"})})," options. The defaults are ",(0,t.jsx)(n.code,{children:"8545"})," and ",(0,t.jsx)(n.code,{children:"8546"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"metrics",children:"Metrics"}),"\n",(0,t.jsxs)(n.p,{children:["To enable ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"Prometheus to access Besu"}),", open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP."]}),"\n",(0,t.jsxs)(n.p,{children:["Specify the ports for Prometheus and Prometheus push gateway using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-port",children:(0,t.jsx)(n.code,{children:"--metrics-port"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-push-port",children:(0,t.jsx)(n.code,{children:"--metrics-push-port"})})," options. The defaults are ",(0,t.jsx)(n.code,{children:"9545"})," and ",(0,t.jsx)(n.code,{children:"9001"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},17538:(e,n,o)=>{o.d(n,{A:()=>t});const t=o.p+"assets/images/PortConfiguration-159d80eca9db24ffaf7bf7029c812faf.png"},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>c});var t=o(96540);const r={},i=t.createContext(r);function s(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/166cf840.57a72276.js b/assets/js/166cf840.57a72276.js new file mode 100644 index 00000000000..b2746b49607 --- /dev/null +++ b/assets/js/166cf840.57a72276.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[609],{53798:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var r=i(74848),t=i(28453),s=i(11470),o=i(19365);const a={title:"IBFT 2.0",description:"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation",sidebar_position:3,tags:["private networks"]},c="Configure IBFT 2.0 consensus",l={id:"private-networks/how-to/configure/consensus/ibft",title:"IBFT 2.0",description:"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation",source:"@site/docs/private-networks/how-to/configure/consensus/ibft.md",sourceDirName:"private-networks/how-to/configure/consensus",slug:"/private-networks/how-to/configure/consensus/ibft",permalink:"/private-networks/how-to/configure/consensus/ibft",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/consensus/ibft.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"IBFT 2.0",description:"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"QBFT",permalink:"/private-networks/how-to/configure/consensus/qbft"},next:{title:"Clique",permalink:"/private-networks/how-to/configure/consensus/clique"}},d={},h=[{value:"Genesis file",id:"genesis-file",level:2},{value:"Extra data",id:"extra-data",level:3},{value:"Generate extra data",id:"generate-extra-data",level:4},{value:"Block time",id:"block-time",level:3},{value:"Tune block timeout",id:"tune-block-timeout",level:4},{value:"Optional configuration options",id:"optional-configuration-options",level:3},{value:"Post-Merge configuration",id:"post-merge-configuration",level:3},{value:"Add and remove validators",id:"add-and-remove-validators",level:2},{value:"Add a validator",id:"add-a-validator",level:3},{value:"Remove a validator",id:"remove-a-validator",level:3},{value:"Epoch transition",id:"epoch-transition",level:3},{value:"Minimum number of validators",id:"minimum-number-of-validators",level:3},{value:"Maximum number of validators",id:"maximum-number-of-validators",level:3},{value:"Transitions",id:"transitions",level:2},{value:"Configure block time on an existing network",id:"configure-block-time-on-an-existing-network",level:3},{value:"Configure block rewards on an existing network",id:"configure-block-rewards-on-an-existing-network",level:3},{value:"Configure the mining beneficiary on an existing network",id:"configure-the-mining-beneficiary-on-an-existing-network",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"configure-ibft-20-consensus",children:"Configure IBFT 2.0 consensus"})}),"\n",(0,r.jsxs)(n.p,{children:["Besu implements the IBFT 2.0 proof of authority (PoA) ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/",children:"consensus protocol"}),". IBFT 2.0 is supported for existing private networks, but ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," is the recommended enterprise-grade consensus protocol for private networks."]}),"\n",(0,r.jsx)(n.p,{children:"In IBFT 2.0 networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block."}),"\n",(0,r.jsxs)(n.p,{children:["Existing validators propose and vote to ",(0,r.jsx)(n.a,{href:"#add-and-remove-validators",children:"add or remove validators"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["You can ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/ibft/",children:"create a private network using IBFT"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsx)(n.p,{children:"Configure your network to ensure you never lose more than 1/3 of your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted."})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can use a plugin to securely store a validator's key using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#security-module",children:(0,r.jsx)(n.code,{children:"--security-module"})})," option."]})}),"\n",(0,r.jsx)(n.h2,{id:"genesis-file",children:"Genesis file"}),"\n",(0,r.jsxs)(n.p,{children:["To use IBFT 2.0, Besu requires an IBFT 2.0 ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),". The genesis file defines properties specific to IBFT 2.0."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="Example IBFT 2.0 genesis file"',children:'{\n "config": {\n "chainId": 1981,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4,\n "blockreward": "5000000000000000",\n "miningbeneficiary": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n }\n },\n "nonce": "0x0",\n "timestamp": "0x58ee40ba",\n "extraData": "0xf83ea00000000000000000000000000000000000000000000000000000000000000000d594c2ab482b506de561668e07f04547232a72897daf808400000000c0",\n "gasLimit": "0x1fffffffffffff",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "alloc": {}\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"The properties specific to IBFT 2.0 are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"blockperiodseconds"})," - The minimum block time, in seconds."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"epochlength"})," - The number of blocks after which to reset all votes."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," - The timeout for each consensus round before a round change, in seconds."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"blockreward"})," - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"miningbeneficiary"})," - Optional beneficiary of the ",(0,r.jsx)(n.code,{children:"blockreward"}),". Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"extraData"})," - RLP encoded ",(0,r.jsx)(n.a,{href:"#extra-data",children:"extra data"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsxs)(n.p,{children:["We don't recommend changing ",(0,r.jsx)(n.code,{children:"epochlength"})," in a running network. Changing the ",(0,r.jsx)(n.code,{children:"epochlength"})," after genesis can result in illegal blocks."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"Invalid block header error",type:"caution",children:[(0,r.jsxs)(n.p,{children:["When adding a new node, if a ",(0,r.jsx)(n.code,{children:"TimeStampMoreRecentThanParent | Invalid block header"})," error occurs, the genesis file of the new node specifies a higher ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu."]}),(0,r.jsxs)(n.p,{children:["Decrease the ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," in the new IBFT 2.0 genesis file to a lower value that satisfies the block header validation."]})]}),"\n",(0,r.jsxs)(n.p,{children:["If the error reads ",(0,r.jsx)(n.code,{children:"| TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds"}),", decrease the ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," from 4 seconds to 3 seconds to match the imported chain."]}),"\n",(0,r.jsxs)(n.p,{children:["After you update the new genesis file, if the imported chain has a ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," value set lower than you prefer, you can adjust it by ",(0,r.jsx)(n.a,{href:"#configure-block-time-on-an-existing-network",children:"configuring the block time on an existing IBFT 2.0 network"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The properties with specific values in the IBFT 2.0 genesis files are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"nonce"})," - ",(0,r.jsx)(n.code,{children:"0x0"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"difficulty"})," - ",(0,r.jsx)(n.code,{children:"0x1"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"mixHash"})," - ",(0,r.jsx)(n.code,{children:"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365"})," for Istanbul block identification"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["To start a node on an IBFT 2.0 private network, use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,r.jsx)(n.code,{children:"--genesis-file"})})," option to specify the custom genesis file."]}),"\n",(0,r.jsx)(n.h3,{id:"extra-data",children:"Extra data"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"extraData"})," property is an RLP encoding of:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"32 bytes of vanity data."}),"\n",(0,r.jsx)(n.li,{children:"A list of validator addresses."}),"\n",(0,r.jsx)(n.li,{children:"Any validator votes. No vote is included in the genesis block."}),"\n",(0,r.jsx)(n.li,{children:"The round the block was created on. The round in the genesis block is 0."}),"\n",(0,r.jsx)(n.li,{children:"A list of seals of the validators (signed block hashes). No seals are included in the genesis block."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["In the genesis block, the important information in the extra data is the list of validators. All other details have empty values. Formally, ",(0,r.jsx)(n.code,{children:"extraData"})," in the genesis block contains ",(0,r.jsx)(n.code,{children:"RLP([32 bytes Vanity, List, No Vote, Round=Int(0), 0 Seals])"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"RLP encoding is a space-efficient object serialization scheme used in Ethereum."})}),"\n",(0,r.jsx)(n.h4,{id:"generate-extra-data",children:"Generate extra data"}),"\n",(0,r.jsxs)(n.p,{children:["To generate the ",(0,r.jsx)(n.code,{children:"extraData"})," RLP string for inclusion in the genesis file, use the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/subcommands#encode",children:(0,r.jsx)(n.code,{children:"rlp encode"})})," Besu subcommand."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:"besu rlp encode --from=toEncode.json\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Where the ",(0,r.jsx)(n.code,{children:"toEncode.json"})," file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the ",(0,r.jsx)(n.code,{children:"toEncode.json"})," file, use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands#export-address",children:(0,r.jsx)(n.code,{children:"public-key export-address"})})," Besu subcommand. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",metastring:'title="One initial validator in toEncode.json file"',children:'["9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"]\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Copy the RLP encoded data to the ",(0,r.jsx)(n.code,{children:"extraData"})," property in the genesis file."]}),"\n",(0,r.jsx)(n.h3,{id:"block-time",children:"Block time"}),"\n",(0,r.jsxs)(n.p,{children:["When the protocol receives a new chain head, the block time (",(0,r.jsx)(n.code,{children:"blockperiodseconds"}),") and round timeout (",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"}),") timers start. When ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," expires, the protocol proposes a new block."]}),"\n",(0,r.jsxs)(n.p,{children:["If ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"}),". The timeout period continues to double each time a round fails to add a block."]}),"\n",(0,r.jsxs)(n.p,{children:["Usually, the protocol adds the proposed block before reaching ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"}),". A new round then starts, resetting the block time and round timeout timers. When ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," expires, the protocol proposes the next new block."]}),"\n",(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsxs)(n.p,{children:["If more than 1/3 of validators stop participating, new blocks can no longer be created and ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," doubles with each round change. The quickest method to resume block production is to restart all validators, which resets ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," to its genesis value."]})}),"\n",(0,r.jsxs)(n.p,{children:["Once ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators."]}),"\n",(0,r.jsxs)(n.p,{children:["An internal network run by ConsenSys had four geographically dispersed validators in Sweden, Sydney, and two in North Virginia. With a ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," of 5 and a ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," of 10, the testnet consistently created blocks with a five second block time."]}),"\n",(0,r.jsx)(n.h4,{id:"tune-block-timeout",children:"Tune block timeout"}),"\n",(0,r.jsx)(n.p,{children:"To tune the block timeout for your network deployment:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Set ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," to your desired block time and ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," to two times ",(0,r.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Reduce ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," until you start to see round changes occurring."]}),"\n",(0,r.jsxs)(n.li,{children:["Increase ",(0,r.jsx)(n.code,{children:"requesttimeoutseconds"})," to the value where round changes are no longer occurring."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["View ",(0,r.jsxs)(n.a,{href:"/public-networks/reference/api/#trace-methods",children:[(0,r.jsx)(n.code,{children:"TRACE"})," logs"]})," to see round change log messages."]})}),"\n",(0,r.jsxs)(n.p,{children:["Use a ",(0,r.jsx)(n.a,{href:"#transitions",children:"transition"})," to update the ",(0,r.jsx)(n.code,{children:"blockperiodseconds"})," in an existing network."]}),"\n",(0,r.jsx)(n.h3,{id:"optional-configuration-options",children:"Optional configuration options"}),"\n",(0,r.jsx)(n.p,{children:"Optional configuration options in the genesis file are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"messageQueueLimit"})," - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"duplicateMessageLimit"})," - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"futureMessagesLimit"})," - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"futureMessagesMaxDistance"})," - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"post-merge-configuration",children:"Post-Merge configuration"}),"\n",(0,r.jsxs)(n.p,{children:["After ",(0,r.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/merge/",children:"The Merge"}),", the following block fields are modified or deprecated. Their fields ",(0,r.jsx)(n.strong,{children:"must"})," contain only the constant values from the following chart."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Field"}),(0,r.jsx)(n.th,{children:"Constant value"}),(0,r.jsx)(n.th,{children:"Comment"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"ommersHash"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"= Keccak256(RLP([]))"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"difficulty"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"0"})}),(0,r.jsxs)(n.td,{children:["Replaced with ",(0,r.jsx)(n.code,{children:"prevrandao"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"mixHash"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"0x0000000000000000000000000000000000000000000000000000000000000000"})}),(0,r.jsxs)(n.td,{children:["Replaced with ",(0,r.jsx)(n.code,{children:"prevrandao"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"nonce"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"0x0000000000000000"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"ommers"})})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"[]"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"RLP([]) = 0xc0"})})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["Additionally, ",(0,r.jsx)(n.a,{href:"#extra-data",children:(0,r.jsx)(n.code,{children:"extraData"})})," is limited to 32 bytes of vanity data after The Merge."]}),"\n",(0,r.jsx)(n.h2,{id:"add-and-remove-validators",children:"Add and remove validators"}),"\n",(0,r.jsxs)(n.p,{children:["Existing validators propose and vote to add or remove validators using the IBFT 2.0 JSON-RPC API methods. Enable the HTTP interface with ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})})," or the WebSocket interface with ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-ws-enabled"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The IBFT 2.0 API methods are disabled by default. To enable them, specify the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,r.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,r.jsx)(n.code,{children:"--rpc-ws-api"})})," option and include ",(0,r.jsx)(n.code,{children:"IBFT"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The methods to add or remove validators are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_getpendingvotes",children:(0,r.jsx)(n.code,{children:"ibft_getPendingVotes"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_proposevalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_proposeValidatorVote"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_discardvalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_discardValidatorVote"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["To view validator metrics for a specified block range, use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#ibft_getsignermetrics",children:(0,r.jsx)(n.code,{children:"ibft_getSignerMetrics"})}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["If network conditions render it impossible to add and remove validators by voting, you can ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/add-validators-without-voting",children:"add and remove validators without voting"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"add-a-validator",children:"Add a validator"}),"\n",(0,r.jsxs)(n.p,{children:["To propose adding a validator to an IBFT 2.0 network, call ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_proposevalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_proposeValidatorVote"})}),", specifying the address of the proposed validator and ",(0,r.jsx)(n.code,{children:"true"}),". A majority of validators must execute the call."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC ibft_proposeValidatorVote request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}\' \n'})}),"\n",(0,r.jsxs)(n.p,{children:["When the validator proposes the next block, the protocol inserts one proposal received from ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_proposevalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_proposeValidatorVote"})})," into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote."]}),"\n",(0,r.jsx)(n.p,{children:"When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks."}),"\n",(0,r.jsxs)(n.p,{children:["To return a list of validators and confirm the addition of a proposed validator, use ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_getvalidatorsbyblocknumber",children:(0,r.jsx)(n.code,{children:"ibft_getValidatorsByBlockNumber"})}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC ibft_getValidatorsByBlockNumber request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' \n'})}),"\n",(0,r.jsxs)(n.p,{children:["To discard your proposal after confirming the addition of a validator, call ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_discardvalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_discardValidatorVote"})}),", specifying the address of the proposed validator."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC ibft_discardValidatorVote request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}\' \n'})}),"\n",(0,r.jsx)(n.h3,{id:"remove-a-validator",children:"Remove a validator"}),"\n",(0,r.jsxs)(n.p,{children:["The process for removing a validator from an IBFT 2.0 network is the same as ",(0,r.jsx)(n.a,{href:"#add-a-validator",children:"adding a validator"})," except you specify ",(0,r.jsx)(n.code,{children:"false"})," as the second parameter of ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_proposevalidatorvote",children:(0,r.jsx)(n.code,{children:"ibft_proposeValidatorVote"})}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"epoch-transition",children:"Epoch transition"}),"\n",(0,r.jsx)(n.p,{children:"At each epoch transition, IBFT 2.0 discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block."}),"\n",(0,r.jsxs)(n.p,{children:["An epoch transition occurs every ",(0,r.jsx)(n.code,{children:"epochLength"})," blocks. Define ",(0,r.jsx)(n.code,{children:"epochlength"})," in the ",(0,r.jsx)(n.a,{href:"#genesis-file",children:"IBFT 2.0 genesis file"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"minimum-number-of-validators",children:"Minimum number of validators"}),"\n",(0,r.jsx)(n.p,{children:"IBFT 2.0 requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers."}),"\n",(0,r.jsx)(n.h3,{id:"maximum-number-of-validators",children:"Maximum number of validators"}),"\n",(0,r.jsxs)(n.p,{children:["As the number of validators increase, the message complexity increases, which can decrease performance. In ",(0,r.jsx)(n.a,{href:"https://wiki.hyperledger.org/display/BESU/Maximum+Validator+count+for+an+IBFT2+Network",children:"network tests"}),", IBFT 2.0 handles up to 30 validators with no loss of performance."]}),"\n",(0,r.jsx)(n.p,{children:"Non-validator nodes don't affect performance and don't count towards the maximum limit."}),"\n",(0,r.jsx)(n.h2,{id:"transitions",children:"Transitions"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"transitions"})," genesis configuration item allows you to specify a future block number at which to\nchange the IBFT 2.0 network configuration in an existing network.\nFor example, you can update the ",(0,r.jsx)(n.a,{href:"#configure-block-time-on-an-existing-network",children:"block time"}),",\n",(0,r.jsx)(n.a,{href:"#configure-block-rewards-on-an-existing-network",children:"block reward"}),", or\n",(0,r.jsx)(n.a,{href:"#configure-the-mining-beneficiary-on-an-existing-network",children:"mining beneficiary"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"Do not specify a transition block in the past.\nSpecifying a transition block in the past can result in unexpected behavior, such as causing the\nnetwork to fork."})}),"\n",(0,r.jsx)(n.h3,{id:"configure-block-time-on-an-existing-network",children:"Configure block time on an existing network"}),"\n",(0,r.jsxs)(n.p,{children:["To update an existing network with a new ",(0,r.jsx)(n.code,{children:"blockperiodseconds"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,r.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the upcoming block at which to change ",(0,r.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the updated value for ",(0,r.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "ibft2": [\n {\n "block": ,\n "blockperiodseconds": \n }\n ]\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(o.A,{value:"Example",label:"Example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "ibft2": [\n {\n "block": 1240,\n "blockperiodseconds": 4\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To verify the changes after the transition block, view the Besu logs and check that the time\ndifference between each block matches the updated block period."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"configure-block-rewards-on-an-existing-network",children:"Configure block rewards on an existing network"}),"\n",(0,r.jsxs)(n.p,{children:["To update an existing network with a new ",(0,r.jsx)(n.code,{children:"blockreward"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,r.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the upcoming block at which to change ",(0,r.jsx)(n.code,{children:"blockreward"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the updated value for ",(0,r.jsx)(n.code,{children:"blockreward"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n "blockreward": "5000000000000000"\n },\n "transitions": {\n "ibft2": [\n {\n "block": ,\n "blockreward": \n },\n {\n "block": ,\n "blockreward": \n },\n {\n "block": ,\n "blockreward": \n }\n ]\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(o.A,{value:"Example",label:"Example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n "blockreward": "5000000000000000"\n },\n "transitions": {\n "ibft2": [\n {\n "block": 10,\n "blockreward": "6000000000000000"\n },\n {\n "block": 15,\n "blockreward": "75000000000000000"\n },\n {\n "block": 20,\n "blockreward": "0"\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You can add multiple ",(0,r.jsx)(n.code,{children:"blockreward"})," updates in one transition object by specifying multiple future blocks."]})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"configure-the-mining-beneficiary-on-an-existing-network",children:"Configure the mining beneficiary on an existing network"}),"\n",(0,r.jsx)(n.p,{children:"To update an existing network with a new mining beneficiary:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,r.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the upcoming block at which to change ",(0,r.jsx)(n.code,{children:"miningbeneficiary"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:""})," is the updated 20-byte address for ",(0,r.jsx)(n.code,{children:"miningbeneficiary"}),". Starting at ",(0,r.jsx)(n.code,{children:""}),", block rewards go to this address."]}),"\n"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "chainId": 999,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 1,\n "epochlength": 30000,\n "requesttimeoutseconds": 5,\n "blockreward": "5000000000000000000",\n "miningbeneficiary": "0x0000000000000000000000000000000000000001"\n },\n "transitions": {\n "ibft2": [\n {\n "block": ,\n "miningbeneficiary": \n },\n {\n "block": ,\n "miningbeneficiary": \n }\n ]\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(o.A,{value:"Example",label:"Example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "chainId": 999,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 1,\n "epochlength": 30000,\n "requesttimeoutseconds": 5,\n "blockreward": "5000000000000000000",\n "miningbeneficiary": "0x0000000000000000000000000000000000000001"\n },\n "transitions": {\n "ibft2": [\n {\n "block": 10000,\n "miningbeneficiary": "",\n },\n {\n "block": 20000,\n "miningbeneficiary": "0x0000000000000000000000000000000000000002",\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Setting the ",(0,r.jsx)(n.code,{children:"miningbeneficiary"})," to an empty value clears out any override so that block rewards go to the block producer rather than a global override address."]})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19365:(e,n,i)=>{i.d(n,{A:()=>o});i(96540);var r=i(18215);const t={tabItem:"tabItem_Ymn6"};var s=i(74848);function o(e){let{children:n,hidden:i,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,o),hidden:i,children:n})}},11470:(e,n,i)=>{i.d(n,{A:()=>w});var r=i(96540),t=i(18215),s=i(23104),o=i(56347),a=i(205),c=i(57485),l=i(31682),d=i(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:i}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:i,attributes:r,default:t}}=e;return{value:n,label:i,attributes:r,default:t}}))}(i);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,i])}function p(e){let{value:n,tabValues:i}=e;return i.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:i}=e;const t=(0,o.W6)(),s=function(e){let{queryString:n=!1,groupId:i}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!i)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:n,groupId:i});return[(0,c.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace({...t.location,search:n.toString()})}),[s,t])]}function f(e){const{defaultValue:n,queryString:i=!1,groupId:t}=e,s=u(e),[o,c]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:i}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=i.find((e=>e.default))??i[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[l,h]=x({queryString:i,groupId:t}),[f,m]=function(e){let{groupId:n}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,s]=(0,d.Dv)(i);return[t,(0,r.useCallback)((e=>{i&&s.set(e)}),[i,s])]}({groupId:t}),b=(()=>{const e=l??f;return p({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{b&&c(b)}),[b]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),m(e)}),[h,m,s]),tabValues:s}}var m=i(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=i(74848);function g(e){let{className:n,block:i,selectedValue:r,selectValue:o,tabValues:a}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.a_)(),d=e=>{const n=e.currentTarget,i=c.indexOf(n),t=a[i].value;t!==r&&(l(n),o(t))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;n=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;n=c[i]??c[c.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":i},n),children:a.map((e=>{let{value:n,label:i,attributes:s}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>c.push(e),onKeyDown:h,onClick:d,...s,className:(0,t.A)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":r===n}),children:i??n},n)}))})}function k(e){let{lazy:n,children:i,selectedValue:s}=e;const o=(Array.isArray(i)?i:[i]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function v(e){const n=f(e);return(0,j.jsxs)("div",{className:(0,t.A)("tabs-container",b.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(k,{...n,...e})]})}function w(e){const n=(0,m.A)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(n))}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>a});var r=i(96540);const t={},s=r.createContext(t);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1719a32c.2407471c.js b/assets/js/1719a32c.2407471c.js new file mode 100644 index 00000000000..cabc9684a2e --- /dev/null +++ b/assets/js/1719a32c.2407471c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2668],{81525:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(74848),i=n(28453);const o={title:"Understand metrics",sidebar_position:2,description:"Understand Besu performance metrics",tags:["public networks"]},r="Understand metrics",a={id:"public-networks/how-to/monitor/understand-metrics",title:"Understand metrics",description:"Understand Besu performance metrics",source:"@site/docs/public-networks/how-to/monitor/understand-metrics.md",sourceDirName:"public-networks/how-to/monitor",slug:"/public-networks/how-to/monitor/understand-metrics",permalink:"/public-networks/how-to/monitor/understand-metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/monitor/understand-metrics.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Understand metrics",sidebar_position:2,description:"Understand Besu performance metrics",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Use metrics",permalink:"/public-networks/how-to/monitor/metrics"},next:{title:"Configure logging",permalink:"/public-networks/how-to/monitor/logging"}},l={},d=[{value:"CPU usage",id:"cpu-usage",level:2},{value:"1. Blocks import and world state download",id:"1-blocks-import-and-world-state-download",level:3},{value:"2. World state healing",id:"2-world-state-healing",level:3},{value:"3. Blocks import",id:"3-blocks-import",level:3},{value:"4. Blocks full import",id:"4-blocks-full-import",level:3},{value:"5. Blocks production and propagation",id:"5-blocks-production-and-propagation",level:3},{value:"Block time",id:"block-time",level:2},{value:"1. Block import time",id:"1-block-import-time",level:3},{value:"2. Block full import time",id:"2-block-full-import-time",level:3},{value:"3. Block network time",id:"3-block-network-time",level:3}];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",section:"section",sup:"sup",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"understand-metrics",children:"Understand metrics"})}),"\n",(0,s.jsxs)(t.p,{children:["When running Besu on Ethereum Mainnet using ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap sync"}),", you might notice graphical patterns that stand out in different metrics charts. These patterns are related to the ",(0,s.jsx)(t.a,{href:"#cpu-usage",children:"CPU usage"})," and ",(0,s.jsx)(t.a,{href:"#block-time",children:"block time"})," of the Besu sync process."]}),"\n",(0,s.jsx)(t.h2,{id:"cpu-usage",children:"CPU usage"}),"\n",(0,s.jsxs)(t.p,{children:["The following screenshot from ",(0,s.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#monitor-nodes-with-prometheus-and-grafana",children:"monitoring Besu with Prometheus and Grafana"})," shows patterns related to CPU usage."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"CPU Grafana Besu dashboard patterns screenshot",src:n(93786).A+"",width:"3278",height:"1542"})}),"\n",(0,s.jsx)(t.p,{children:'The CPU pattern is a "staircase" pattern, where each step represents one of the Besu running stages.'}),"\n",(0,s.jsx)(t.h3,{id:"1-blocks-import-and-world-state-download",children:"1. Blocks import and world state download"}),"\n",(0,s.jsx)(t.p,{children:"Step 1 highlights blocks import and world state download, two tasks executed in parallel in Besu. Besu manages these two tasks with two different pipelines."}),"\n",(0,s.jsxs)(t.p,{children:["This step is CPU-bound.",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-1",id:"user-content-fnref-1","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," The two pipeline stages run on multiple threads."]}),"\n",(0,s.jsx)(t.p,{children:"As displayed in the following screenshot (for a VM with 8 CPUs) the CPU load average is about 7.5 and sometimes exceeds 10 (a 100% load for the 8 CPUs is 8). This means there's more work to be done than what the CPUs can handle."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"System load metrics screenshot",src:n(19483).A+"",width:"3278",height:"1542"})}),"\n",(0,s.jsx)(t.h3,{id:"2-world-state-healing",children:"2. World state healing"}),"\n",(0,s.jsx)(t.p,{children:"Step 2, world state healing, starts just after the world state download in step 1 is complete. The peak in system CPU is related to the high rate of input and output (IO) required during this step. IO usage is around 61% during healing, and it's only 39% during the remaining sync."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"IO utilization metrics screenshot",src:n(56556).A+"",width:"3278",height:"1542"})}),"\n",(0,s.jsx)(t.h3,{id:"3-blocks-import",children:"3. Blocks import"}),"\n",(0,s.jsx)(t.p,{children:"After steps 1 and 2, world state is downloaded and healed, and block import continues."}),"\n",(0,s.jsx)(t.p,{children:"The visible drop in CPU shows that Besu finished the world state nodes download."}),"\n",(0,s.jsx)(t.p,{children:"The block import step is long because Besu can't parallelize block import -- it must validate each parent block before importing a child."}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsx)(t.p,{children:"The Besu team is currently working on other algorithm and implementations to make this block import faster."})}),"\n",(0,s.jsx)(t.h3,{id:"4-blocks-full-import",children:"4. Blocks full import"}),"\n",(0,s.jsx)(t.p,{children:"In step 4, Besu executes all transactions of each block. This is when Besu updates the world state after the healing step."}),"\n",(0,s.jsx)(t.p,{children:"The quantity of imported blocks in this step depends on the speed of the sync. This number indicates the cumulated blocks quantity behind head since the last healing step."}),"\n",(0,s.jsx)(t.p,{children:"This step consumes less CPU than the previous steps because the sequential part -- executing transactions on the EVM -- must be single-threaded, reducing the concurrent work at the CPU level."}),"\n",(0,s.jsx)(t.h3,{id:"5-blocks-production-and-propagation",children:"5. Blocks production and propagation"}),"\n",(0,s.jsx)(t.p,{children:"Once Besu is completely synced, it propagates blocks and executes the transactions inside each block. Step 5, block production and propagation, shows a reduction in CPU consumption due to the idle time while waiting for the new block and the sequential nature of executing transactions on the EVM."}),"\n",(0,s.jsx)(t.h2,{id:"block-time",children:"Block time"}),"\n",(0,s.jsxs)(t.p,{children:["Block time measures the duration of getting new blocks in Besu. Block time is closely related to ",(0,s.jsx)(t.a,{href:"#cpu-usage",children:"CPU usage"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["The following screenshot shows patterns related to block time as available in the ",(0,s.jsx)(t.a,{href:"https://grafana.com/grafana/dashboards/16455-besu-full/",children:"Besu Grafana full dashboard"}),"."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Block time Grafana Besu dashboard patterns screenshot",src:n(916).A+"",width:"3278",height:"1542"})}),"\n",(0,s.jsx)(t.p,{children:'The block time pattern is also a "staircase" pattern.'}),"\n",(0,s.jsx)(t.h3,{id:"1-block-import-time",children:"1. Block import time"}),"\n",(0,s.jsx)(t.p,{children:"Step 1, block import time, is the duration of importing a block."}),"\n",(0,s.jsx)(t.p,{children:"Import includes:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Data retrieval over the network."}),"\n",(0,s.jsx)(t.li,{children:"Headers, body, and receipt validation."}),"\n",(0,s.jsx)(t.li,{children:"Persisting the block in the database."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Block import takes between a few and tens of milliseconds."}),"\n",(0,s.jsx)(t.h3,{id:"2-block-full-import-time",children:"2. Block full import time"}),"\n",(0,s.jsx)(t.p,{children:"Step 2, block full import time, is the duration of importing a block (step 1) and executing all its transactions."}),"\n",(0,s.jsx)(t.p,{children:"Block full import takes between 1 and 2 seconds per block, depending on the number and complexity of the transactions."}),"\n",(0,s.jsx)(t.h3,{id:"3-block-network-time",children:"3. Block network time"}),"\n",(0,s.jsx)(t.p,{children:"Step 3, block network time, is the duration of propagating a block over the network and executing all its transactions."}),"\n",(0,s.jsx)(t.p,{children:"Block network takes between 13 and 16 seconds."}),"\n","\n",(0,s.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,s.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{id:"user-content-fn-1",children:["\n",(0,s.jsxs)(t.p,{children:["A CPU-bound task means that the time required to execute the task is determined only by the CPU speed. ",(0,s.jsx)(t.a,{href:"#user-content-fnref-1","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},93786:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/besu-cpu-pattern-during-sync-9dc0a3001d32b5c874786314294831a1.png"},916:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/block-time-36affada807e42dd327dd24806dbdc08.png"},56556:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/io-utilization-dfd3d125732a0f304100b4f3c9e4ae76.png"},19483:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/system-load-f37361d1a1cd21c6384bfde9cf10ce2f.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const i={},o=s.createContext(i);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1721.c0b53a15.js b/assets/js/1721.c0b53a15.js new file mode 100644 index 00000000000..d94f5dd1602 --- /dev/null +++ b/assets/js/1721.c0b53a15.js @@ -0,0 +1,2 @@ +/*! For license information please see 1721.c0b53a15.js.LICENSE.txt */ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1721],{16750:(t,e)=>{"use strict";e.Jf=e.dz=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.dz="about:blank",e.Jf=function(t){if(!t)return e.dz;var l,c=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.dz;if(function(t){return s.indexOf(t[0])>-1}(c))return c;var h=c.match(a);if(!h)return c;var u=h[0];return i.test(u)?e.dz:c}},60542:(t,e,i)=>{"use strict";i.d(e,{_:()=>s,u:()=>l});var r=i(96540),n=i(89532),o=i(74848);const a=r.createContext(null);function s(t){let{children:e,content:i}=t;const n=function(t){return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,contentTitle:t.contentTitle,toc:t.toc})),[t])}(i);return(0,o.jsx)(a.Provider,{value:n,children:e})}function l(){const t=(0,r.useContext)(a);if(null===t)throw new n.dV("DocProvider");return t}},27293:(t,e,i)=>{"use strict";i.d(e,{A:()=>F});var r=i(96540),n=i(74848);function o(t){const{mdxAdmonitionTitle:e,rest:i}=function(t){const e=r.Children.toArray(t),i=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.type)),o=e.filter((t=>t!==i)),a=i?.props.children;return{mdxAdmonitionTitle:a,rest:o.length>0?(0,n.jsx)(n.Fragment,{children:o}):null}}(t.children),o=t.title??e;return{...t,...o&&{title:o},children:i}}var a=i(18215),s=i(21312),l=i(17559);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function h(t){let{type:e,className:i,children:r}=t;return(0,n.jsx)("div",{className:(0,a.A)(l.G.common.admonition,l.G.common.admonitionType(e),c.admonition,i),children:r})}function u(t){let{icon:e,title:i}=t;return(0,n.jsxs)("div",{className:c.admonitionHeading,children:[(0,n.jsx)("span",{className:c.admonitionIcon,children:e}),i]})}function d(t){let{children:e}=t;return e?(0,n.jsx)("div",{className:c.admonitionContent,children:e}):null}function f(t){const{type:e,icon:i,title:r,children:o,className:a}=t;return(0,n.jsxs)(h,{type:e,className:a,children:[r||i?(0,n.jsx)(u,{title:r,icon:i}):null,(0,n.jsx)(d,{children:o})]})}function p(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("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"})})}const g={icon:(0,n.jsx)(p,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function m(t){return(0,n.jsx)(f,{...g,...t,className:(0,a.A)("alert alert--secondary",t.className),children:t.children})}function y(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("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"})})}const x={icon:(0,n.jsx)(y,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(t){return(0,n.jsx)(f,{...x,...t,className:(0,a.A)("alert alert--success",t.className),children:t.children})}function C(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("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"})})}const _={icon:(0,n.jsx)(C,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function v(t){return(0,n.jsx)(f,{..._,...t,className:(0,a.A)("alert alert--info",t.className),children:t.children})}function k(t){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",...t,children:(0,n.jsx)("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"})})}const T={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function A(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("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"})})}const w={icon:(0,n.jsx)(A,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const S={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const B={...{note:m,tip:b,info:v,warning:function(t){return(0,n.jsx)(f,{...T,...t,className:(0,a.A)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...w,...t,className:(0,a.A)("alert alert--danger",t.className),children:t.children})}},...{secondary:t=>(0,n.jsx)(m,{title:"secondary",...t}),important:t=>(0,n.jsx)(v,{title:"important",...t}),success:t=>(0,n.jsx)(b,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,a.A)("alert alert--warning",t.className),children:t.children})}}};function F(t){const e=o(t),i=(r=e.type,B[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),B.info));var r;return(0,n.jsx)(i,{...e})}},71243:(t,e,i)=>{"use strict";i.d(e,{A:()=>y});i(96540);var r=i(18215),n=i(17559),o=i(26972),a=i(99169),s=i(28774),l=i(21312),c=i(86025),h=i(74848);function u(t){return(0,h.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,h.jsx)("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 d={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function f(){const t=(0,c.Ay)("/");return(0,h.jsx)("li",{className:"breadcrumbs__item",children:(0,h.jsx)(s.A,{"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:t,children:(0,h.jsx)(u,{className:d.breadcrumbHomeIcon})})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(t){let{children:e,href:i,isLast:r}=t;const n="breadcrumbs__link";return r?(0,h.jsx)("span",{className:n,itemProp:"name",children:e}):i?(0,h.jsx)(s.A,{className:n,href:i,itemProp:"item",children:(0,h.jsx)("span",{itemProp:"name",children:e})}):(0,h.jsx)("span",{className:n,children:e})}function m(t){let{children:e,active:i,index:n,addMicrodata:o}=t;return(0,h.jsxs)("li",{...o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,r.A)("breadcrumbs__item",{"breadcrumbs__item--active":i}),children:[e,(0,h.jsx)("meta",{itemProp:"position",content:String(n+1)})]})}function y(){const t=(0,o.OF)(),e=(0,a.Dt)();return t?(0,h.jsx)("nav",{className:(0,r.A)(n.G.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,l.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,h.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[e&&(0,h.jsx)(f,{}),t.map(((e,i)=>{const r=i===t.length-1,n="category"===e.type&&e.linkUnlisted?void 0:e.href;return(0,h.jsx)(m,{active:r,index:i,addMicrodata:!!n,children:(0,h.jsx)(g,{href:n,isLast:r,children:e.label})},i)}))]})}):null}},25685:(t,e,i)=>{"use strict";i.d(e,{A:()=>bt});var r=i(96540),n=i(18215),o=i(17559),a=i(60542),s=i(51107),l=i(28453),c=i(5260),h=i(92303),u=i(95293),d=i(6342);function f(){const{prism:t}=(0,d.p)(),{colorMode:e}=(0,u.G)(),i=t.theme,r=t.darkTheme||i;return"dark"===e?r:i}var p=i(18426),g=i.n(p);const m=/title=(?["'])(?.*?)\1/,y=/\{(?<range>[\d,-]+)\}/,x={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...x,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},C=Object.keys(x);function _(t,e){const i=t.map((t=>{const{start:i,end:r}=b[t];return`(?:${i}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${i})\\s*$`)}function v(t,e){let i=t.replace(/\n$/,"");const{language:r,magicComments:n,metastring:o}=e;if(o&&y.test(o)){const t=o.match(y).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=n[0].className,r=g()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:i}}if(void 0===r)return{lineClassNames:{},code:i};const a=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return _(["js","jsBlock"],e);case"jsx":case"tsx":return _(["js","jsBlock","jsx"],e);case"html":return _(["js","jsBlock","html"],e);case"python":case"py":case"bash":return _(["bash"],e);case"markdown":case"md":return _(["html","jsx","bash"],e);case"tex":case"latex":case"matlab":return _(["tex"],e);case"lua":case"haskell":case"sql":return _(["lua"],e);case"wasm":return _(["wasm"],e);case"vb":case"vba":case"visual-basic":return _(["vb","rem"],e);case"vbnet":return _(["vbnet","rem"],e);case"batch":return _(["rem"],e);case"basic":return _(["rem","f90"],e);case"fsharp":return _(["js","ml"],e);case"ocaml":case"sml":return _(["ml"],e);case"fortran":return _(["f90"],e);case"cobol":return _(["cobol"],e);default:return _(C,e)}}(r,n),s=i.split("\n"),l=Object.fromEntries(n.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(n.filter((t=>t.line)).map((t=>{let{className:e,line:i}=t;return[i,e]}))),h=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.start,e]}))),u=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.end,e]})));for(let f=0;f<s.length;){const t=s[f].match(a);if(!t){f+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${f},`:h[e]?l[h[e]].start=f:u[e]&&(l[u[e]].range+=`${l[u[e]].start}-${f-1},`),s.splice(f,1)}i=s.join("\n");const d={};return Object.entries(l).forEach((t=>{let[e,{range:i}]=t;g()(i).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:i}}const k={codeBlockContainer:"codeBlockContainer_Ckt0"};var T=i(74848);function A(t){let{as:e,...i}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},i={};return Object.entries(t.plain).forEach((t=>{let[r,n]=t;const o=e[r];o&&"string"==typeof n&&(i[o]=n)})),i}(f());return(0,T.jsx)(e,{...i,style:r,className:(0,n.A)(i.className,k.codeBlockContainer,o.G.common.codeBlock)})}const w={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function S(t){let{children:e,className:i}=t;return(0,T.jsx)(A,{as:"pre",tabIndex:0,className:(0,n.A)(w.codeBlockStandalone,"thin-scrollbar",i),children:(0,T.jsx)("code",{className:w.codeBlockLines,children:e})})}var B=i(89532);const F={attributes:!0,characterData:!0,childList:!0,subtree:!0};function L(t,e){const[i,n]=(0,r.useState)(),o=(0,r.useCallback)((()=>{n(t.current?.closest("[role=tabpanel][hidden]"))}),[t,n]);(0,r.useEffect)((()=>{o()}),[o]),function(t,e,i){void 0===i&&(i=F);const n=(0,B._q)(e),o=(0,B.Be)(i);(0,r.useEffect)((()=>{const e=new MutationObserver(n);return t&&e.observe(t,o),()=>e.disconnect()}),[t,n,o])}(i,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var M=i(78181);const E={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function N(t){let{line:e,classNames:i,showLineNumbers:r,getLineProps:o,getTokenProps:a}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const s=o({line:e,className:(0,n.A)(i,r&&E.codeLine)}),l=e.map(((t,e)=>(0,T.jsx)("span",{...a({token:t})},e)));return(0,T.jsxs)("span",{...s,children:[r?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)("span",{className:E.codeLineNumber}),(0,T.jsx)("span",{className:E.codeLineContent,children:l})]}):l,(0,T.jsx)("br",{})]})}var j=i(21312);function O(t){return(0,T.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,T.jsx)("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 I(t){return(0,T.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,T.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const D={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function q(t){let{code:e,className:i}=t;const[o,a]=(0,r.useState)(!1),s=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(t,e){let{target:i=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);i.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let s=!1;try{s=document.execCommand("copy")}catch{}r.remove(),a&&(o.removeAllRanges(),o.addRange(a)),n&&n.focus()}(e),a(!0),s.current=window.setTimeout((()=>{a(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),(0,T.jsx)("button",{type:"button","aria-label":o?(0,j.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,j.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,j.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,n.A)("clean-btn",i,D.copyButton,o&&D.copyButtonCopied),onClick:l,children:(0,T.jsxs)("span",{className:D.copyButtonIcons,"aria-hidden":"true",children:[(0,T.jsx)(O,{className:D.copyButtonIcon}),(0,T.jsx)(I,{className:D.copyButtonSuccessIcon})]})})}function $(t){return(0,T.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,T.jsx)("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 z={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function P(t){let{className:e,onClick:i,isEnabled:r}=t;const o=(0,j.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,T.jsx)("button",{type:"button",onClick:i,className:(0,n.A)("clean-btn",e,r&&z.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,T.jsx)($,{className:z.wordWrapButtonIcon,"aria-hidden":"true"})})}function R(t){let{children:e,className:i="",metastring:o,title:a,showLineNumbers:s,language:l}=t;const{prism:{defaultLanguage:c,magicComments:h}}=(0,d.p)(),u=function(t){return t?.toLowerCase()}(l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(i)??c),p=f(),g=function(){const[t,e]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),o=(0,r.useRef)(null),a=(0,r.useCallback)((()=>{const i=o.current.querySelector("code");t?i.removeAttribute("style"):(i.style.whiteSpace="pre-wrap",i.style.overflowWrap="anywhere"),e((t=>!t))}),[o,t]),s=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=o.current,i=t>e||o.current.querySelector("code").hasAttribute("style");n(i)}),[o]);return L(o,s),(0,r.useEffect)((()=>{s()}),[t,s]),(0,r.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:t,isCodeScrollable:i,toggle:a}}(),y=function(t){return t?.match(m)?.groups.title??""}(o)||a,{lineClassNames:x,code:b}=v(e,{metastring:o,language:u,magicComments:h}),C=s??function(t){return Boolean(t?.includes("showLineNumbers"))}(o);return(0,T.jsxs)(A,{as:"div",className:(0,n.A)(i,u&&!i.includes(`language-${u}`)&&`language-${u}`),children:[y&&(0,T.jsx)("div",{className:w.codeBlockTitle,children:y}),(0,T.jsxs)("div",{className:w.codeBlockContent,children:[(0,T.jsx)(M.f4,{theme:p,code:b,language:u??"text",children:t=>{let{className:e,style:i,tokens:r,getLineProps:o,getTokenProps:a}=t;return(0,T.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,n.A)(e,w.codeBlock,"thin-scrollbar"),style:i,children:(0,T.jsx)("code",{className:(0,n.A)(w.codeBlockLines,C&&w.codeBlockLinesWithNumbering),children:r.map(((t,e)=>(0,T.jsx)(N,{line:t,getLineProps:o,getTokenProps:a,classNames:x[e],showLineNumbers:C},e)))})})}}),(0,T.jsxs)("div",{className:w.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,T.jsx)(P,{className:w.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,T.jsx)(q,{className:w.codeButton,code:b})]})]})]})}function H(t){let{children:e,...i}=t;const n=(0,h.A)(),o=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),a="string"==typeof o?R:S;return(0,T.jsx)(a,{...i,children:o},String(n))}function W(t){return(0,T.jsx)("code",{...t})}var U=i(28774);var Y=i(15066),V=i(63427),G=i(41422);const X={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Z(t){return!!t&&("SUMMARY"===t.tagName||Z(t.parentElement))}function J(t,e){return!!t&&(t===e||J(t.parentElement,e))}function Q(t){let{summary:e,children:i,...n}=t;(0,V.A)().collectAnchor(n.id);const o=(0,h.A)(),a=(0,r.useRef)(null),{collapsed:s,setCollapsed:l}=(0,G.u)({initialState:!n.open}),[c,u]=(0,r.useState)(n.open),d=r.isValidElement(e)?e:(0,T.jsx)("summary",{children:e??"Details"});return(0,T.jsxs)("details",{...n,ref:a,open:c,"data-collapsed":s,className:(0,Y.A)(X.details,o&&X.isBrowser,n.className),onMouseDown:t=>{Z(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;Z(e)&&J(e,a.current)&&(t.preventDefault(),s?(l(!1),u(!0)):l(!0))},children:[d,(0,T.jsx)(G.N,{lazy:!1,collapsed:s,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{l(t),u(!t)},children:(0,T.jsx)("div",{className:X.collapsibleContent,children:i})})]})}const K={details:"details_b_Ee"},tt="alert alert--info";function et(t){let{...e}=t;return(0,T.jsx)(Q,{...e,className:(0,n.A)(tt,K.details,e.className)})}function it(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,T.jsx)(T.Fragment,{children:e.filter((t=>t!==i))});return(0,T.jsx)(et,{...t,summary:i,children:n})}function rt(t){return(0,T.jsx)(s.A,{...t})}const nt={containsTaskList:"containsTaskList_mC6p"};function ot(t){if(void 0!==t)return(0,n.A)(t,t?.includes("contains-task-list")&&nt.containsTaskList)}const at={img:"img_ev3q"};var st=i(27293),lt=i(67489),ct=i(12181),ht=i(99702);const ut="docusaurus-mermaid-container";function dt(){const{colorMode:t}=(0,u.G)(),e=(0,d.p)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function ft(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),a=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,s=dt(),l=i??s;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;ht.N.mermaidAPI.initialize(r);try{return await ht.N.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:a,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[a,e,l]),n}const pt={container:"container_lyt7"};function gt(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,T.jsx)("div",{ref:i,className:`${ut} ${pt.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function mt(t){let{value:e}=t;const i=ft({text:e});return null===i?null:(0,T.jsx)(gt,{renderResult:i})}const yt={Head:c.A,details:it,Details:it,code:function(t){return function(t){return void 0!==t.children&&r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")))}(t)?(0,T.jsx)(W,{...t}):(0,T.jsx)(H,{...t})},a:function(t){return(0,T.jsx)(U.A,{...t})},pre:function(t){return(0,T.jsx)(T.Fragment,{children:t.children})},ul:function(t){return(0,T.jsx)("ul",{...t,className:ot(t.className)})},li:function(t){return(0,V.A)().collectAnchor(t.id),(0,T.jsx)("li",{...t})},img:function(t){return(0,T.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,n.A)(e,at.img))});var e},h1:t=>(0,T.jsx)(rt,{as:"h1",...t}),h2:t=>(0,T.jsx)(rt,{as:"h2",...t}),h3:t=>(0,T.jsx)(rt,{as:"h3",...t}),h4:t=>(0,T.jsx)(rt,{as:"h4",...t}),h5:t=>(0,T.jsx)(rt,{as:"h5",...t}),h6:t=>(0,T.jsx)(rt,{as:"h6",...t}),admonition:st.A,mermaid:function(t){return(0,T.jsx)(lt.A,{fallback:t=>(0,T.jsx)(ct.MN,{...t}),children:(0,T.jsx)(mt,{...t})})}};function xt(t){let{children:e}=t;return(0,T.jsx)(l.x,{components:yt,children:e})}function bt(t){let{children:e}=t;const i=function(){const{metadata:t,frontMatter:e,contentTitle:i}=(0,a.u)();return e.hide_title||void 0!==i?null:t.title}();return(0,T.jsxs)("div",{className:(0,n.A)(o.G.docs.docMarkdown,"markdown"),children:[i&&(0,T.jsx)("header",{children:(0,T.jsx)(s.A,{as:"h1",children:i})}),(0,T.jsx)(xt,{children:e})]})}},23679:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});i(96540);var r=i(60542),n=i(86929),o=i(74848);function a(){const{metadata:t}=(0,r.u)();return(0,o.jsx)(n.A,{previous:t.previous,next:t.next})}},90206:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});i(96540);var r=i(17559),n=i(60542),o=i(18215),a=i(65195);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=i(74848);const c="table-of-contents__link toc-highlight",h="table-of-contents__link--active";function u(t){let{className:e,...i}=t;return(0,l.jsx)("div",{className:(0,o.A)(s.tableOfContents,"thin-scrollbar",e),children:(0,l.jsx)(a.A,{...i,linkClassName:c,linkActiveClassName:h})})}function d(){const{toc:t,frontMatter:e}=(0,n.u)();return(0,l.jsx)(u,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:r.G.docs.docTocDesktop})}},51683:(t,e,i)=>{"use strict";i.d(e,{A:()=>g});i(96540);var r=i(18215),n=i(17559),o=i(60542),a=i(41422),s=i(65195),l=i(21312);const c={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};var h=i(74848);function u(t){let{collapsed:e,...i}=t;return(0,h.jsx)("button",{type:"button",...i,className:(0,r.A)("clean-btn",c.tocCollapsibleButton,!e&&c.tocCollapsibleButtonExpanded,i.className),children:(0,h.jsx)(l.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const d={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function f(t){let{toc:e,className:i,minHeadingLevel:n,maxHeadingLevel:o}=t;const{collapsed:l,toggleCollapsed:c}=(0,a.u)({initialState:!0});return(0,h.jsxs)("div",{className:(0,r.A)(d.tocCollapsible,!l&&d.tocCollapsibleExpanded,i),children:[(0,h.jsx)(u,{collapsed:l,onClick:c}),(0,h.jsx)(a.N,{lazy:!0,className:d.tocCollapsibleContent,collapsed:l,children:(0,h.jsx)(s.A,{toc:e,minHeadingLevel:n,maxHeadingLevel:o})})]})}const p={tocMobile:"tocMobile_ITEo"};function g(){const{toc:t,frontMatter:e}=(0,o.u)();return(0,h.jsx)(f,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,r.A)(n.G.docs.docTocMobile,p.tocMobile)})}},29158:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>l});i(96540);var r=i(1003),n=i(60542),o=i(74848);function a(){const{metadata:t,frontMatter:e,assets:i}=(0,n.u)();return(0,o.jsx)(r.be,{title:t.title,description:t.description,keywords:e.keywords,image:i.image??e.image})}var s=i(69102);function l(t){const e=`docs-doc-id-${t.content.metadata.id}`,i=t.content;return(0,o.jsx)(n._,{content:t.content,children:(0,o.jsxs)(r.e3,{className:e,children:[(0,o.jsx)(a,{}),(0,o.jsx)(s.A,{children:(0,o.jsx)(i,{})})]})})}},86929:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});i(96540);var r=i(21312),n=i(18215),o=i(28774),a=i(74848);function s(t){const{permalink:e,title:i,subLabel:r,isNext:s}=t;return(0,a.jsxs)(o.A,{className:(0,n.A)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[r&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,a.jsx)("div",{className:"pagination-nav__label",children:i})]})}function l(t){const{previous:e,next:i}=t;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[e&&(0,a.jsx)(s,{...e,subLabel:(0,a.jsx)(r.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,a.jsx)(s,{...i,subLabel:(0,a.jsx)(r.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},61943:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});i(96540);var r=i(21312),n=i(17559),o=i(28774),a=i(18215);const s={iconEdit:"iconEdit_Z9Sw"};var l=i(74848);function c(t){let{className:e,...i}=t;return(0,l.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,a.A)(s.iconEdit,e),"aria-hidden":"true",...i,children:(0,l.jsx)("g",{children:(0,l.jsx)("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 h(t){let{editUrl:e}=t;return(0,l.jsxs)(o.A,{to:e,className:n.G.common.editThisPage,children:[(0,l.jsx)(c,{}),(0,l.jsx)(r.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},19175:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});i(96540);var r=i(21312),n=i(17559),o=i(44586);function a(t){void 0===t&&(t={});const{i18n:{currentLocale:e}}=(0,o.A)(),i=function(){const{i18n:{currentLocale:t,localeConfigs:e}}=(0,o.A)();return e[t].calendar}();return new Intl.DateTimeFormat(e,{calendar:i,...t})}var s=i(74848);function l(t){let{lastUpdatedAt:e}=t;const i=new Date(e),n=a({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(i);return(0,s.jsx)(r.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,s.jsx)("b",{children:(0,s.jsx)("time",{dateTime:i.toISOString(),itemProp:"dateModified",children:n})})},children:" on {date}"})}function c(t){let{lastUpdatedBy:e}=t;return(0,s.jsx)(r.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,s.jsx)("b",{children:e})},children:" by {user}"})}function h(t){let{lastUpdatedAt:e,lastUpdatedBy:i}=t;return(0,s.jsxs)("span",{className:n.G.common.lastUpdated,children:[(0,s.jsx)(r.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e?(0,s.jsx)(l,{lastUpdatedAt:e}):"",byUser:i?(0,s.jsx)(c,{lastUpdatedBy:i}):""},children:"Last updated{atDate}{byUser}"}),!1]})}},65195:(t,e,i)=>{"use strict";i.d(e,{A:()=>g});var r=i(96540),n=i(6342);function o(t){const e=t.map((t=>({...t,parentIndex:-1,children:[]}))),i=Array(7).fill(-1);e.forEach(((t,e)=>{const r=i.slice(2,t.level);t.parentIndex=Math.max(...r),i[t.level]=e}));const r=[];return e.forEach((t=>{const{parentIndex:i,...n}=t;i>=0?e[i].children.push(n):r.push(n)})),r}function a(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:r}=t;return e.flatMap((t=>{const e=a({toc:t.children,minHeadingLevel:i,maxHeadingLevel:r});return function(t){return t.level>=i&&t.level<=r}(t)?[{...t,children:e}]:e}))}function s(t){const e=t.getBoundingClientRect();return e.top===e.bottom?s(t.parentNode):e}function l(t,e){let{anchorTopOffset:i}=e;const r=t.find((t=>s(t).top>=i));if(r){return function(t){return t.top>0&&t.bottom<window.innerHeight/2}(s(r))?r:t[t.indexOf(r)-1]??null}return t[t.length-1]??null}function c(){const t=(0,r.useRef)(0),{navbar:{hideOnScroll:e}}=(0,n.p)();return(0,r.useEffect)((()=>{t.current=e?0:document.querySelector(".navbar").clientHeight}),[e]),t}function h(t){const e=(0,r.useRef)(void 0),i=c();(0,r.useEffect)((()=>{if(!t)return()=>{};const{linkClassName:r,linkActiveClassName:n,minHeadingLevel:o,maxHeadingLevel:a}=t;function s(){const t=function(t){return Array.from(document.getElementsByClassName(t))}(r),s=function(t){let{minHeadingLevel:e,maxHeadingLevel:i}=t;const r=[];for(let n=e;n<=i;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:o,maxHeadingLevel:a}),c=l(s,{anchorTopOffset:i.current}),h=t.find((t=>c&&c.id===function(t){return decodeURIComponent(t.href.substring(t.href.indexOf("#")+1))}(t)));t.forEach((t=>{!function(t,i){i?(e.current&&e.current!==t&&e.current.classList.remove(n),t.classList.add(n),e.current=t):t.classList.remove(n)}(t,t===h)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[t,i])}var u=i(28774),d=i(74848);function f(t){let{toc:e,className:i,linkClassName:r,isChild:n}=t;return e.length?(0,d.jsx)("ul",{className:n?void 0:i,children:e.map((t=>(0,d.jsxs)("li",{children:[(0,d.jsx)(u.A,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,d.jsx)(f,{isChild:!0,toc:t.children,className:i,linkClassName:r})]},t.id)))}):null}const p=r.memo(f);function g(t){let{toc:e,className:i="table-of-contents table-of-contents__left-border",linkClassName:s="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:c,maxHeadingLevel:u,...f}=t;const g=(0,n.p)(),m=c??g.tableOfContents.minHeadingLevel,y=u??g.tableOfContents.maxHeadingLevel,x=function(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:n}=t;return(0,r.useMemo)((()=>a({toc:o(e),minHeadingLevel:i,maxHeadingLevel:n})),[e,i,n])}({toc:e,minHeadingLevel:m,maxHeadingLevel:y});return h((0,r.useMemo)((()=>{if(s&&l)return{linkClassName:s,linkActiveClassName:l,minHeadingLevel:m,maxHeadingLevel:y}}),[s,l,m,y])),(0,d.jsx)(p,{toc:x,className:i,linkClassName:s,...f})}},56133:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});i(96540);var r=i(18215),n=i(28774);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var a=i(74848);function s(t){let{permalink:e,label:i,count:s,description:l}=t;return(0,a.jsxs)(n.A,{href:e,title:l,className:(0,r.A)(o.tag,s?o.tagWithCount:o.tagRegular),children:[i,s&&(0,a.jsx)("span",{children:s})]})}},62053:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});i(96540);var r=i(18215),n=i(21312),o=i(56133);const a={tags:"tags_jXut",tag:"tag_QGVx"};var s=i(74848);function l(t){let{tags:e}=t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("b",{children:(0,s.jsx)(n.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,s.jsx)("ul",{className:(0,r.A)(a.tags,"padding--none","margin-left--sm"),children:e.map((t=>(0,s.jsx)("li",{className:a.tag,children:(0,s.jsx)(o.A,{...t})},t.permalink)))})]})}},74353: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",d="date",f="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},x={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:d,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 _="$isDayjsObject",v=function(t){return t instanceof w||!(!t||!t[_])},k=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},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new w(i)},A=x;A.l=k,A.i=v,A.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var w=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[_]=!0}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(A.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.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 A},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return T(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<T(t)},y.$g=function(t,e,i){return A.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=!!A.u(e)||e,h=A.p(t),f=function(t,e){var n=A.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 A.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,x="set"+(this.$u?"UTC":"");switch(h){case u:return r?f(1,0):f(31,11);case c:return r?f(1,m):f(0,m+1);case l:var b=this.$locale().weekStart||0,C=(g<b?g+7:g)-b;return f(r?y-C:y+(6-C),m);case s:case d:return p(x+"Hours",0);case a:return p(x+"Minutes",1);case o:return p(x+"Seconds",2);case n:return p(x+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=A.p(t),h="set"+(this.$u?"UTC":""),f=(i={},i[s]=h+"Date",i[d]=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(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[A.p(t)]()},y.add=function(r,h){var d,f=this;r=Number(r);var p=A.p(h),g=function(t){var e=T(f);return A.w(e.date(e.date()+Math.round(t*r)),f)};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=(d={},d[o]=e,d[a]=i,d[n]=t,d)[p]||1,y=this.$d.getTime()+r*m;return A.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||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=A.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,c=i.months,h=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return A.s(o%12||12,t,"0")},p=h||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return A.s(e.$y,4,"0");case"M":return s+1;case"MM":return A.s(s+1,2,"0");case"MMM":return u(i.monthsShort,s,c,3);case"MMMM":return u(c,s);case"D":return e.$D;case"DD":return A.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return A.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,a,!0);case"A":return p(o,a,!1);case"m":return String(a);case"mm":return A.s(a,2,"0");case"s":return String(e.$s);case"ss":return A.s(e.$s,2,"0");case"SSS":return A.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,d,f){var p,g=this,m=A.p(d),y=T(r),x=(y.utcOffset()-this.utcOffset())*e,b=this-y,C=function(){return A.m(g,y)};switch(m){case u:p=C()/12;break;case c:p=C();break;case h:p=C()/3;break;case l:p=(b-x)/6048e5;break;case s:p=(b-x)/864e5;break;case a:p=b/i;break;case o:p=b/e;break;case n:p=b/t;break;default:p=b}return f?p:A.a(p)},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=k(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return A.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=w.prototype;return T.prototype=S,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",c],["$y",u],["$D",d]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,w,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=C[b],T.Ls=C,T.p={},T}()},42838:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:a,create:s}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),a||(a=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),c||(c=function(t,e){return new t(...e)});const h=v(Array.prototype.forEach),u=v(Array.prototype.pop),d=v(Array.prototype.push),f=v(String.prototype.toLowerCase),p=v(String.prototype.toString),g=v(String.prototype.match),m=v(String.prototype.replace),y=v(String.prototype.indexOf),x=v(String.prototype.trim),b=v(Object.prototype.hasOwnProperty),C=v(RegExp.prototype.test),_=k(TypeError);function v(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 l(t,e,r)}}function k(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 T(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function A(t){for(let e=0;e<t.length;e++)b(t,e)||(t[e]=null);return t}function w(e){const i=s(null);for(const[r,n]of t(e))b(e,r)&&(Array.isArray(n)?i[r]=A(n):n&&"object"==typeof n&&n.constructor===Object?i[r]=w(n):i[r]=n);return i}function S(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return v(i.get);if("function"==typeof i.value)return v(i.value)}t=r(t)}function i(){return null}return i}const B=o(["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"]),F=o(["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"]),L=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),M=o(["animate","color-profile","cursor","discard","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"]),E=o(["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","mprescripts"]),N=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),j=o(["#text"]),O=o(["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","popover","popovertarget","popovertargetaction","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","wrap","xmlns","slot"]),I=o(["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"]),D=o(["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"]),q=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),$=a(/\{\{[\w\W]*|[\w\W]*\}\}/gm),z=a(/<%[\w\W]*|[\w\W]*%>/gm),P=a(/\${[\w\W]*}/gm),R=a(/^data-[\-\w.\u00B7-\uFFFF]/),H=a(/^aria-[\-\w]+$/),W=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=a(/^(?:\w+script|data):/i),Y=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),V=a(/^html$/i),G=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var X=Object.freeze({__proto__:null,MUSTACHE_EXPR:$,ERB_EXPR:z,TMPLIT_EXPR:P,DATA_ATTR:R,ARIA_ATTR:H,IS_ALLOWED_URI:W,IS_SCRIPT_OR_DATA:U,ATTR_WHITESPACE:Y,DOCTYPE_NAME:V,CUSTOM_ELEMENT:G});const Z={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},J=function(){return"undefined"==typeof window?null:window},Q=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function K(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:J();const i=t=>K(t);if(i.version="3.1.6",i.removed=[],!e||!e.document||e.document.nodeType!==Z.document)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:v,Element:k,NodeFilter:A,NamedNodeMap:$=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:z,DOMParser:P,trustedTypes:R}=e,H=k.prototype,U=S(H,"cloneNode"),Y=S(H,"remove"),G=S(H,"nextSibling"),tt=S(H,"childNodes"),et=S(H,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let it,rt="";const{implementation:nt,createNodeIterator:ot,createDocumentFragment:at,getElementsByTagName:st}=r,{importNode:lt}=n;let ct={};i.isSupported="function"==typeof t&&"function"==typeof et&&nt&&void 0!==nt.createHTMLDocument;const{MUSTACHE_EXPR:ht,ERB_EXPR:ut,TMPLIT_EXPR:dt,DATA_ATTR:ft,ARIA_ATTR:pt,IS_SCRIPT_OR_DATA:gt,ATTR_WHITESPACE:mt,CUSTOM_ELEMENT:yt}=X;let{IS_ALLOWED_URI:xt}=X,bt=null;const Ct=T({},[...B,...F,...L,...E,...j]);let _t=null;const vt=T({},[...O,...I,...D,...q]);let kt=Object.seal(s(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}})),Tt=null,At=null,wt=!0,St=!0,Bt=!1,Ft=!0,Lt=!1,Mt=!0,Et=!1,Nt=!1,jt=!1,Ot=!1,It=!1,Dt=!1,qt=!0,$t=!1;const zt="user-content-";let Pt=!0,Rt=!1,Ht={},Wt=null;const Ut=T({},["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"]);let Yt=null;const Vt=T({},["audio","video","img","source","image","track"]);let Gt=null;const Xt=T({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Zt="http://www.w3.org/1998/Math/MathML",Jt="http://www.w3.org/2000/svg",Qt="http://www.w3.org/1999/xhtml";let Kt=Qt,te=!1,ee=null;const ie=T({},[Zt,Jt,Qt],p);let re=null;const ne=["application/xhtml+xml","text/html"],oe="text/html";let ae=null,se=null;const le=r.createElement("form"),ce=function(t){return t instanceof RegExp||t instanceof Function},he=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!se||se!==t){if(t&&"object"==typeof t||(t={}),t=w(t),re=-1===ne.indexOf(t.PARSER_MEDIA_TYPE)?oe:t.PARSER_MEDIA_TYPE,ae="application/xhtml+xml"===re?p:f,bt=b(t,"ALLOWED_TAGS")?T({},t.ALLOWED_TAGS,ae):Ct,_t=b(t,"ALLOWED_ATTR")?T({},t.ALLOWED_ATTR,ae):vt,ee=b(t,"ALLOWED_NAMESPACES")?T({},t.ALLOWED_NAMESPACES,p):ie,Gt=b(t,"ADD_URI_SAFE_ATTR")?T(w(Xt),t.ADD_URI_SAFE_ATTR,ae):Xt,Yt=b(t,"ADD_DATA_URI_TAGS")?T(w(Vt),t.ADD_DATA_URI_TAGS,ae):Vt,Wt=b(t,"FORBID_CONTENTS")?T({},t.FORBID_CONTENTS,ae):Ut,Tt=b(t,"FORBID_TAGS")?T({},t.FORBID_TAGS,ae):{},At=b(t,"FORBID_ATTR")?T({},t.FORBID_ATTR,ae):{},Ht=!!b(t,"USE_PROFILES")&&t.USE_PROFILES,wt=!1!==t.ALLOW_ARIA_ATTR,St=!1!==t.ALLOW_DATA_ATTR,Bt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ft=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Lt=t.SAFE_FOR_TEMPLATES||!1,Mt=!1!==t.SAFE_FOR_XML,Et=t.WHOLE_DOCUMENT||!1,Ot=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Dt=t.RETURN_TRUSTED_TYPE||!1,jt=t.FORCE_BODY||!1,qt=!1!==t.SANITIZE_DOM,$t=t.SANITIZE_NAMED_PROPS||!1,Pt=!1!==t.KEEP_CONTENT,Rt=t.IN_PLACE||!1,xt=t.ALLOWED_URI_REGEXP||W,Kt=t.NAMESPACE||Qt,kt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ce(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(kt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ce(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(kt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(kt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Lt&&(St=!1),It&&(Ot=!0),Ht&&(bt=T({},j),_t=[],!0===Ht.html&&(T(bt,B),T(_t,O)),!0===Ht.svg&&(T(bt,F),T(_t,I),T(_t,q)),!0===Ht.svgFilters&&(T(bt,L),T(_t,I),T(_t,q)),!0===Ht.mathMl&&(T(bt,E),T(_t,D),T(_t,q))),t.ADD_TAGS&&(bt===Ct&&(bt=w(bt)),T(bt,t.ADD_TAGS,ae)),t.ADD_ATTR&&(_t===vt&&(_t=w(_t)),T(_t,t.ADD_ATTR,ae)),t.ADD_URI_SAFE_ATTR&&T(Gt,t.ADD_URI_SAFE_ATTR,ae),t.FORBID_CONTENTS&&(Wt===Ut&&(Wt=w(Wt)),T(Wt,t.FORBID_CONTENTS,ae)),Pt&&(bt["#text"]=!0),Et&&T(bt,["html","head","body"]),bt.table&&(T(bt,["tbody"]),delete Tt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');it=t.TRUSTED_TYPES_POLICY,rt=it.createHTML("")}else void 0===it&&(it=Q(R,a)),null!==it&&"string"==typeof rt&&(rt=it.createHTML(""));o&&o(t),se=t}},ue=T({},["mi","mo","mn","ms","mtext"]),de=T({},["foreignobject","annotation-xml"]),fe=T({},["title","style","font","a","script"]),pe=T({},[...F,...L,...M]),ge=T({},[...E,...N]),me=function(t){let e=et(t);e&&e.tagName||(e={namespaceURI:Kt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!ee[t.namespaceURI]&&(t.namespaceURI===Jt?e.namespaceURI===Qt?"svg"===i:e.namespaceURI===Zt?"svg"===i&&("annotation-xml"===r||ue[r]):Boolean(pe[i]):t.namespaceURI===Zt?e.namespaceURI===Qt?"math"===i:e.namespaceURI===Jt?"math"===i&&de[r]:Boolean(ge[i]):t.namespaceURI===Qt?!(e.namespaceURI===Jt&&!de[r])&&!(e.namespaceURI===Zt&&!ue[r])&&!ge[i]&&(fe[i]||!pe[i]):!("application/xhtml+xml"!==re||!ee[t.namespaceURI]))},ye=function(t){d(i.removed,{element:t});try{et(t).removeChild(t)}catch(e){Y(t)}},xe=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!_t[t])if(Ot||It)try{ye(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},be=function(t){let e=null,i=null;if(jt)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===re&&Kt===Qt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=it?it.createHTML(t):t;if(Kt===Qt)try{e=(new P).parseFromString(n,re)}catch(a){}if(!e||!e.documentElement){e=nt.createDocument(Kt,"template",null);try{e.documentElement.innerHTML=te?rt:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Kt===Qt?st.call(e,Et?"html":"body")[0]:Et?e.documentElement:o},Ce=function(t){return ot.call(t.ownerDocument||t,t,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT|A.SHOW_PROCESSING_INSTRUCTION|A.SHOW_CDATA_SECTION,null)},_e=function(t){return t instanceof z&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof $)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ve=function(t){return"function"==typeof v&&t instanceof v},ke=function(t,e,r){ct[t]&&h(ct[t],(t=>{t.call(i,e,r,se)}))},Te=function(t){let e=null;if(ke("beforeSanitizeElements",t,null),_e(t))return ye(t),!0;const r=ae(t.nodeName);if(ke("uponSanitizeElement",t,{tagName:r,allowedTags:bt}),t.hasChildNodes()&&!ve(t.firstElementChild)&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return ye(t),!0;if(t.nodeType===Z.progressingInstruction)return ye(t),!0;if(Mt&&t.nodeType===Z.comment&&C(/<[/\w]/g,t.data))return ye(t),!0;if(!bt[r]||Tt[r]){if(!Tt[r]&&we(r)){if(kt.tagNameCheck instanceof RegExp&&C(kt.tagNameCheck,r))return!1;if(kt.tagNameCheck instanceof Function&&kt.tagNameCheck(r))return!1}if(Pt&&!Wt[r]){const e=et(t)||t.parentNode,i=tt(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r){const n=U(i[r],!0);n.__removalCount=(t.__removalCount||0)+1,e.insertBefore(n,G(t))}}return ye(t),!0}return t instanceof k&&!me(t)?(ye(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!C(/<\/no(script|embed|frames)/i,t.innerHTML)?(Lt&&t.nodeType===Z.text&&(e=t.textContent,h([ht,ut,dt],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),ke("afterSanitizeElements",t,null),!1):(ye(t),!0)},Ae=function(t,e,i){if(qt&&("id"===e||"name"===e)&&(i in r||i in le))return!1;if(St&&!At[e]&&C(ft,e));else if(wt&&C(pt,e));else if(!_t[e]||At[e]){if(!(we(t)&&(kt.tagNameCheck instanceof RegExp&&C(kt.tagNameCheck,t)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(t))&&(kt.attributeNameCheck instanceof RegExp&&C(kt.attributeNameCheck,e)||kt.attributeNameCheck instanceof Function&&kt.attributeNameCheck(e))||"is"===e&&kt.allowCustomizedBuiltInElements&&(kt.tagNameCheck instanceof RegExp&&C(kt.tagNameCheck,i)||kt.tagNameCheck instanceof Function&&kt.tagNameCheck(i))))return!1}else if(Gt[e]);else if(C(xt,m(i,mt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!Yt[t])if(Bt&&!C(gt,m(i,mt,"")));else if(i)return!1;return!0},we=function(t){return"annotation-xml"!==t&&g(t,yt)},Se=function(t){ke("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:_t};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:c}=a,d=ae(s);let f="value"===s?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,ke("uponSanitizeAttribute",t,r),f=r.attrValue,Mt&&C(/((--!?|])>)|<\/(style|title)/i,f)){xe(s,t);continue}if(r.forceKeepAttr)continue;if(xe(s,t),!r.keepAttr)continue;if(!Ft&&C(/\/>/i,f)){xe(s,t);continue}Lt&&h([ht,ut,dt],(t=>{f=m(f,t," ")}));const p=ae(t.nodeName);if(Ae(p,d,f)){if(!$t||"id"!==d&&"name"!==d||(xe(s,t),f=zt+f),it&&"object"==typeof R&&"function"==typeof R.getAttributeType)if(l);else switch(R.getAttributeType(p,d)){case"TrustedHTML":f=it.createHTML(f);break;case"TrustedScriptURL":f=it.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),_e(t)?ye(t):u(i.removed)}catch(o){}}}ke("afterSanitizeAttributes",t,null)},Be=function t(e){let i=null;const r=Ce(e);for(ke("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)ke("uponSanitizeShadowNode",i,null),Te(i)||(i.content instanceof l&&t(i.content),Se(i));ke("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(te=!t,te&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ve(t)){if("function"!=typeof t.toString)throw _("toString is not a function");if("string"!=typeof(t=t.toString()))throw _("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Nt||he(e),i.removed=[],"string"==typeof t&&(Rt=!1),Rt){if(t.nodeName){const e=ae(t.nodeName);if(!bt[e]||Tt[e])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof v)r=be("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),o.nodeType===Z.element&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!Ot&&!Lt&&!Et&&-1===t.indexOf("<"))return it&&Dt?it.createHTML(t):t;if(r=be(t),!r)return Ot?null:Dt?rt:""}r&&jt&&ye(r.firstChild);const c=Ce(Rt?t:r);for(;a=c.nextNode();)Te(a)||(a.content instanceof l&&Be(a.content),Se(a));if(Rt)return t;if(Ot){if(It)for(s=at.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(_t.shadowroot||_t.shadowrootmode)&&(s=lt.call(n,s,!0)),s}let u=Et?r.outerHTML:r.innerHTML;return Et&&bt["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&C(V,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),Lt&&h([ht,ut,dt],(t=>{u=m(u,t," ")})),it&&Dt?it.createHTML(u):u},i.setConfig=function(){he(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Nt=!0},i.clearConfig=function(){se=null,Nt=!1},i.isValidAttribute=function(t,e,i){se||he({});const r=ae(t),n=ae(e);return Ae(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(ct[t]=ct[t]||[],d(ct[t],e))},i.removeHook=function(t){if(ct[t])return u(ct[t])},i.removeHooks=function(t){ct[t]&&(ct[t]=[])},i.removeAllHooks=function(){ct={}},i}return K()}()},18426:(t,e)=>{function i(t){let e,i=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))i.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,n,o]=e;if(r&&o){r=parseInt(r),o=parseInt(o);const t=r<o?1:-1;"-"!==n&&".."!==n&&"\u2025"!==n||(o+=t);for(let e=r;e!==o;e+=t)i.push(e)}}return i}e.default=i,t.exports=i},60513:(t,e,i)=>{"use strict";function r(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}i.d(e,{T:()=>r})},28453:(t,e,i)=>{"use strict";i.d(e,{R:()=>a,x:()=>s});var r=i(96540);const n={},o=r.createContext(n);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),r.createElement(o.Provider,{value:e},t.children)}},26312:(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,{JLW:()=>cs,l78:()=>x,tlR:()=>y,qrM:()=>vs,Yu4:()=>Ts,IA3:()=>ws,Wi0:()=>Bs,PGM:()=>Fs,OEq:()=>Ms,y8u:()=>js,olC:()=>Is,IrU:()=>qs,oDi:()=>Ps,Q7f:()=>Hs,cVp:()=>Us,lUB:()=>ds,Lx9:()=>Vs,nVG:()=>el,uxU:()=>il,Xf2:()=>ol,GZz:()=>sl,UPb:()=>cl,dyv:()=>ll,bEH:()=>pr,n8j:()=>gs,T9B:()=>r,jkA:()=>n,rLf:()=>xs,WH:()=>kr,m4Y:()=>mn,UMr:()=>vr,w7C:()=>Na,zt:()=>ja,Ltv:()=>Oa,Ubm:()=>Ia,JWy:()=>Vi,UAC:()=>Nn,DCK:()=>uo,TUC:()=>Rn,Agd:()=>Mn,t6C:()=>Sn,wXd:()=>Fn,ABi:()=>qn,Ui6:()=>Qn,rGn:()=>Hn,ucG:()=>Bn,YPH:()=>Dn,Mol:()=>Pn,PGu:()=>$n,GuW:()=>zn});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(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,x=3,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===a||t===c?-1:1,_=t===c||t===s?"x":"y",v=t===a||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(m,0)+x,A=e.range(),w=+A[0]+b,S=+A[A.length-1]+b,B=(e.bandwidth?p:f)(e.copy(),b),F=u.selection?u.selection():u,L=F.selectAll(".domain").data([null]),M=F.selectAll(".tick").data(d,e).order(),E=M.exit(),N=M.enter().append("g").attr("class","tick"),j=M.select("line"),O=M.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(N),j=j.merge(N.append("line").attr("stroke","currentColor").attr(_+"2",C*m)),O=O.merge(N.append("text").attr("fill","currentColor").attr(_,C*T).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==F&&(L=L.transition(u),M=M.transition(u),j=j.transition(u),O=O.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=B(t))?v(t+b):this.getAttribute("transform")})),N.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:B(t))+b)}))),E.remove(),L.attr("d",t===c||t===s?y?"M"+C*y+","+w+"H"+b+"V"+S+"H"+C*y:"M"+b+","+w+"V"+S:y?"M"+w+","+C*y+"V"+b+"H"+S+"V"+C*y:"M"+w+","+b+"H"+S),M.attr("opacity",1).attr("transform",(function(t){return v(B(t)+b)})),j.attr(_+"2",C*m),O.attr(_,C*T).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=B}))}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?(x=+t,k):x},k.offset=function(t){return arguments.length?(b=+t,k):b},k}function y(t){return m(a,t)}function x(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function _(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 T(t){return function(){return this.matches(t)}}function A(t){return function(e){return e.matches(t)}}var w=Array.prototype.find;function S(){return this.firstElementChild}var B=Array.prototype.filter;function F(){return Array.from(this.children)}function L(t){return new Array(t.length)}function M(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 M(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function N(t,e,i,r,n,o,a){var s,l,c,h=new Map,u=e.length,d=o.length,f=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(f[s]=c=a.call(l,l.__data__,s,e)+"",h.has(c)?n[s]=l:h.set(c,l));for(s=0;s<d;++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 M(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&h.get(f[s])===l&&(n[s]=l)}function j(t){return t.__data__}function O(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}M.prototype={constructor:M,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 D="http://www.w3.org/1999/xhtml";const q={svg:"http://www.w3.org/2000/svg",xhtml:D,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function $(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),q.hasOwnProperty(e)?{space:q[e],local:t}:t}function z(t){return function(){this.removeAttribute(t)}}function P(t){return function(){this.removeAttributeNS(t.space,t.local)}}function R(t,e){return function(){this.setAttribute(t,e)}}function H(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 Y(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function V(t){return function(){this.style.removeProperty(t)}}function G(t,e,i){return function(){this.style.setProperty(t,e,i)}}function X(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function Z(t,e){return t.style.getPropertyValue(e)||Y(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 dt(t){return function(){this.innerHTML=t}}function ft(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===D&&e.documentElement.namespaceURI===D?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function xt(t){var e=$(t);return(e.local?yt:mt)(e)}function bt(){return null}function Ct(){var t=this.parentNode;t&&t.removeChild(this)}function _t(){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 Tt(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 At(t,e,i){var r=Y(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 wt(t,e){return function(){return At(this,t,e)}}function St(t,e){return function(){return At(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 Bt=[null];function Ft(t,e){this._groups=t,this._parents=e}function Lt(){return new Ft([[document.documentElement]],Bt)}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 _(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?S:function(t){return function(){return w.call(this.children,t)}}("function"==typeof t?t:A(t)))},selectChildren:function(t){return this.selectAll(null==t?F:function(t){return function(){return B.call(this.children,t)}}("function"==typeof t?t:A(t)))},filter:function(t){"function"!=typeof t&&(t=T(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,j);var i,r=e?N: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],d=o[h],f=d.length,p=O(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,d,m,y,c[h]=new Array(f),p,e);for(var x,b,C=0,_=0;C<g;++C)if(x=m[C]){for(C>=_&&(_=C+1);!(b=y[_])&&++_<g;);x._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],d=h.length,f=s[l]=new Array(d),p=0;p<d;++p)(c=h[p]||u[p])&&(f[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=$(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?P:z:"function"==typeof e?i.local?U:W:i.local?H:R)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?V:"function"==typeof e?X:G)(t,e,null==i?"":i)):Z(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?ft:dt)(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:xt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:xt(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:_t)},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?Tt: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?St:wt)(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 Mt=Lt;var Et={value:()=>{}};function Nt(){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 jt(r)}function jt(t){this._=t}function Ot(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}jt.prototype=Nt.prototype={constructor:jt,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=Ot(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new jt(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 Dt=Nt;var qt,$t,zt=0,Pt=0,Rt=0,Ht=1e3,Wt=0,Ut=0,Yt=0,Vt="object"==typeof performance&&performance.now?performance:Date,Gt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Xt(){return Ut||(Gt(Zt),Ut=Vt.now()+Yt)}function Zt(){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=Vt.now())+Yt,zt=Pt=0;try{!function(){Xt(),++zt;for(var t,e=qt;e;)(t=Ut-e._time)>=0&&e._call.call(void 0,t),e=e._next;--zt}()}finally{zt=0,function(){var t,e,i=qt,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:qt=e);$t=t,ee(r)}(),Ut=0}}function te(){var t=Vt.now(),e=t-Wt;e>Ht&&(Yt-=e,Wt=t)}function ee(t){zt||(Pt&&(Pt=clearTimeout(Pt)),t-Ut>24?(t<1/0&&(Pt=setTimeout(Kt,t-Vt.now()-Yt)),Rt&&(Rt=clearInterval(Rt))):(Rt||(Wt=Vt.now(),Rt=setInterval(te,Ht)),zt=1,Gt(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?Xt():+i)+(null==e?0:+e),this._next||$t===this||($t?$t._next=this:qt=this,$t=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=Dt("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function de(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,d;if(i.state!==ae)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(a);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+c<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.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)(d=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=d);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 fe(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,xe=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)*xe,skewX:Math.atan(l)*xe,scaleX:a,scaleY:s}}function _e(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=_e((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=_e((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 Te(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 Ae(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 we(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 Se(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Be(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Fe(){}var Le=.7,Me=1/Le,Ee="\\s*([+-]?\\d+)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",je="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Oe=/^#([0-9a-f]{3,8})$/,Ie=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),De=new RegExp(`^rgb\\(${je},${je},${je}\\)$`),qe=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Ne}\\)$`),$e=new RegExp(`^rgba\\(${je},${je},${je},${Ne}\\)$`),ze=new RegExp(`^hsl\\(${Ne},${je},${je}\\)$`),Pe=new RegExp(`^hsla\\(${Ne},${je},${je},${Ne}\\)$`),Re={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 He(){return this.rgb().formatHex()}function We(){return this.rgb().formatRgb()}function Ue(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=Oe.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ye(e):3===i?new Ze(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ve(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ve(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 Ze(e[1],e[2],e[3],1):(e=De.exec(t))?new Ze(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=qe.exec(t))?Ve(e[1],e[2],e[3],e[4]):(e=$e.exec(t))?Ve(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=Pe.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Re.hasOwnProperty(t)?Ye(Re[t]):"transparent"===t?new Ze(NaN,NaN,NaN,0):null}function Ye(t){return new Ze(t>>16&255,t>>8&255,255&t,1)}function Ve(t,e,i,r){return r<=0&&(t=e=i=NaN),new Ze(t,e,i,r)}function Ge(t){return t instanceof Fe||(t=Ue(t)),t?new Ze((t=t.rgb()).r,t.g,t.b,t.opacity):new Ze}function Xe(t,e,i,r){return 1===arguments.length?Ge(t):new Ze(t,e,i,null==r?1:r)}function Ze(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}Se(Fe,Ue,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:He,formatHex:He,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:We,toString:We}),Se(Ze,Xe,Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Ze(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ze(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})),Se(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Be(Fe,{brighter(t){return t=null==t?Me:Math.pow(Me,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 Ze(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)?di: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 di(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Xe(t)).r,(e=Xe(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(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=Xe(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 xi(t,e){var i;return("number"==typeof e?me:e instanceof Ue?fi:(i=Ue(e))?(e=i,fi):yi)(t,e)}function bi(t){return function(){this.removeAttribute(t)}}function Ci(t){return function(){this.removeAttributeNS(t.space,t.local)}}function _i(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 Ti(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 Ai(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 wi(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 Si(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Bi(t,e){return e=+e,function(){fe(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 Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Ni=0;function ji(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function Oi(){return++Ni}var Ii=Mt.prototype;ji.prototype=function(t){return Mt().transition(t)}.prototype={constructor:ji,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),d=0;d<h;++d)(s=c[d])&&(l=t.call(s,s.__data__,d,c))&&("__data__"in s&&(l.__data__=s.__data__),u[d]=l,de(u[d],e,i,d,u,ge(s,i)));return new ji(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 d,f=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=f.length;g<m;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),a.push(l)}return new ji(o,a,e,i)},selectChild:Ii.selectChild,selectChildren:Ii.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(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 ji(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,d=a[s]=new Array(u),f=0;f<u;++f)(l=c[f]||h[f])&&(d[f]=l);for(;s<r;++s)a[s]=e[s];return new ji(a,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=Oi(),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);de(a,t,i,c,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new ji(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)?fe: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=$(t),r="transform"===i?ke:xi;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,we(this,"attr."+t,e)):null==e?(i.local?Ci:bi)(i):(i.local?vi:_i)(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=$(t);return this.tween(i,(r.local?Ai:wi)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:xi;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=Z(this,t),a=(this.style.removeProperty(t),Z(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=Z(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=Z(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,we(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=Z(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}}(we(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?Te:Ae)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Si:Bi)(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 Di={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function qi(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.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)}))},Mt.prototype.transition=function(t){var e,i;t instanceof ji?(e=t._id,t=t._name):(e=Oi(),(i=Di).time=Xt(),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])&&de(a,t,e,c,s,i||qi(a,e));return new ji(r,this._parents,t,e)};const{abs:$i,max:zi,min:Pi}=Math;function Ri(t){return[+t[0],+t[1]]}function Hi(t){return[Ri(t[0]),Ri(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 Yi(t){return(e,i)=>function(t,e){return fetch(t,e).then(Ui)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Yi("application/xml");Yi("text/html");var Vi=Yi("image/svg+xml");const Gi=Math.PI/180,Xi=180/Math.PI,Zi=.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 dr(t);t instanceof Ze||(t=Ge(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)/Zi),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)*Xi;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 dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Gi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),a=di(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+""}}}Se(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Be(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 Ze(sr(3.1338561*(e=Zi*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)}})),Se(ur,hr,Be(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 dr(this).rgb()}}));const pr=fr((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)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class mr extends Map{constructor(t,e=Cr){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(yr(this,t))}has(t){return super.has(yr(this,t))}set(t,e){return super.set(xr(this,t),e)}delete(t){return super.delete(br(this,t))}}Set;function yr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function br({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function Cr(t){return null!==t&&"object"==typeof t?t.valueOf():t}const _r=Symbol("implicit");function vr(){var t=new mr,e=[],i=[],r=_r;function n(n){let o=t.get(n);if(void 0===o){if(r!==_r)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 mr;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 vr(e,i).unknown(r)},gr.apply(n,arguments),n}function kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=a<o,d=u?a:o,f=u?o:a;t=(f-d)/Math.max(1,i-l+2*c),s&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*h,e=t*(1-l),s&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,a]=t,o=+o,a=+a,u()):[o,a]},i.rangeRound=function(t){return[o,a]=t,o=+o,a=+a,s=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(s=!!t,u()):s},i.padding=function(t){return arguments.length?(l=Math.min(1,c=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(c=+t,u()):c},i.align=function(t){return arguments.length?(h=Math.max(0,Math.min(1,t)),u()):h},i.copy=function(){return kr(r(),[o,a]).round(s).paddingInner(l).paddingOuter(c).align(h)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),Ar=Math.sqrt(10),wr=Math.sqrt(2);function Sr(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>=Tr?10:o>=Ar?5:o>=wr?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?Sr(t,e,2*i):[s,l,c]}function Br(t,e,i){return Sr(t=+t,e=+e,i=+i)[2]}function Fr(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 Lr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(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=Lr,i=(e,i)=>Lr(t(e),i),r=(e,i)=>t(e)-i):(e=t===Lr||t===Mr?t:Nr,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 Nr(){return 0}const jr=Er(Lr),Or=jr.right,Ir=(jr.left,Er((function(t){return null===t?NaN:+t})).center,Or);function Dr(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]=Pr(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 qr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function $r(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]=Pr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function zr(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 Pr(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,fi):yi:e instanceof Ue?fi:e instanceof Date?qr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Dr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?$r:me:zr))(t,e)}function Rr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Hr(t){return+t}var Wr=[0,1];function Ur(t){return t}function Yr(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Vr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=Yr(n,r),o=i(a,o)):(r=Yr(r,n),o=i(o,a)),function(t){return o(r(t))}}function Gr(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]=Yr(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=Ir(t,e,1,r)-1;return o[i](n[i](e))}}function Xr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Zr(){var t,e,i,r,n,o,a=Wr,s=Wr,l=Pr,c=Ur;function h(){var t,e,i,l=Math.min(a.length,s.length);return c!==Ur&&(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?Gr:Vr,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,Hr),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=Rr,h()},u.clamp=function(t){return arguments.length?(c=!!t||Ur,h()):c!==Ur},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 Jr(){return Zr()(Ur,Ur)}var Qr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({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 en(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 rn(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 nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(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")}tn.prototype=en.prototype,en.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 an={"%":(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)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Qr=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")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,cn,hn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.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?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.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=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):an[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var b="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",C="$"===d?o:/[%p]/.test(x)?l:"",_=an[x],v=/[defgprs%]/.test(x);function k(t){var n,o,l,d=b,k=C;if("c"===x)k=_(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:_(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)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:c:"-"===u||"("===u?"":u)+d,k=("s"===x?dn[8+Qr/3]:"")+k+(T&&"("===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&&!f&&(t=r(t,1/0));var A=d.length+t.length+k.length,w=A<p?new Array(p-A+1).join(e):"";switch(g&&f&&(t=r(w+t,w.length?p-k.length:1/0),w=""),i){case"<":t=d+t+k+w;break;case"=":t=d+w+t+k;break;case"^":t=w.slice(0,A=w.length>>1)+d+t+k+w.slice(A);break;default:t=w+d+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?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=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Fr(t,e,i);switch((r=tn(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(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),hn(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,nn(e)-nn(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,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return cn(r)}function gn(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?Sr(e,t,i):Sr(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 pn(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 mn(){var t=Jr();return t.copy=function(){return Xr(t,mn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),cn=ln.format,hn=ln.formatPrefix;const yn=1e3,xn=6e4,bn=36e5,Cn=864e5,_n=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,An=new Date;function wn(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=>wn((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)=>(Tn.setTime(+e),An.setTime(+r),t(Tn),t(An),Math.floor(i(Tn,An))),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 Sn=wn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Sn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?wn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Sn:null);Sn.range;const Bn=wn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),Fn=(Bn.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),Ln=(Fn.range,wn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(Ln.range,wn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getHours()))),En=(Mn.range,wn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getUTCHours()))),Nn=(En.range,wn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/Cn),(t=>t.getDate()-1))),jn=(Nn.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCDate()-1))),On=(jn.range,wn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>Math.floor(t/Cn))));On.range;function In(t){return wn((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())*xn)/_n))}const Dn=In(0),qn=In(1),$n=In(2),zn=In(3),Pn=In(4),Rn=In(5),Hn=In(6);Dn.range,qn.range,$n.range,zn.range,Pn.range,Rn.range,Hn.range;function Wn(t){return wn((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)/_n))}const Un=Wn(0),Yn=Wn(1),Vn=Wn(2),Gn=Wn(3),Xn=Wn(4),Zn=Wn(5),Jn=Wn(6),Qn=(Un.range,Yn.range,Vn.range,Gn.range,Xn.range,Zn.range,Jn.range,wn((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,wn((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,wn((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?wn((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=wn((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?wn((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=[[Bn,1,yn],[Bn,5,5e3],[Bn,15,15e3],[Bn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,bn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,Cn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Fr(e/kn,i/kn,r));if(0===o)return Sn.every(Math.max(Fr(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,On,En,Ln),[oo,ao]=io(to,Qn,Dn,Nn,Mn,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 xo(t){return t.replace(mo,"\\$&")}function bo(t){return new RegExp("^(?:"+t.map(xo).join("|")+")","i")}function Co(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _o(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 To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function So(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 Bo(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 Mo(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 No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Oo(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 Do(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 qo(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function zo(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function Po(t,e){return yo(t.getDate(),e,2)}function Ro(t,e){return yo(t.getHours(),e,2)}function Ho(t,e){return yo(t.getHours()%12||12,e,2)}function Wo(t,e){return yo(1+Nn.count(to(t),t),e,3)}function Uo(t,e){return yo(t.getMilliseconds(),e,3)}function Yo(t,e){return Uo(t,e)+"000"}function Vo(t,e){return yo(t.getMonth()+1,e,2)}function Go(t,e){return yo(t.getMinutes(),e,2)}function Xo(t,e){return yo(t.getSeconds(),e,2)}function Zo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return yo(Dn.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?Pn(t):Pn.ceil(t)}function Ko(t,e){return t=Qo(t),yo(Pn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(qn.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?Pn(t):Pn.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+jn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(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 xa(t){var e=t.getUTCDay();return e>=4||0===e?Xn(t):Xn.ceil(t)}function ba(t,e){return t=xa(t),yo(Xn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function Ca(t){return t.getUTCDay()}function _a(t,e){return yo(Yn.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=xa(t)).getUTCFullYear()%100,e,2)}function Ta(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function Aa(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Xn(t):Xn.ceil(t)).getUTCFullYear()%1e4,e,4)}function wa(){return"+0000"}function Sa(){return"%"}function Ba(t){return+t}function Fa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=Jr(),u=h.invert,d=h.domain,f=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),b=c("%B"),C=c("%Y");function _(t){return(l(t)<t?f:s(t)<t?p:a(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:x:i(t)<t?b:C)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ma)):d().map(La)},h.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?_:c(e)},h.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(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 Xr(h,Ea(t,e,i,r,n,o,a,s,l,c))},h}function Na(){return gr.apply(Ea(oo,ao,to,Qn,Dn,Nn,Mn,Fn,Bn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!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),d=Co(o),f=bo(a),p=Co(a),g=bo(s),m=Co(s),y=bo(l),x=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:Po,e:Po,f:Yo,g:ra,G:oa,H:Ro,I:Ho,j:Wo,L:Uo,m:Vo,M:Go,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ba,s:Fa,S:Xo,u:Zo,U:Jo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Sa},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:da,g:ka,G:Aa,H:la,I:ca,j:ha,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ba,s:Fa,S:ga,u:ma,U:ya,V:ba,w:Ca,W:_a,x:null,X:null,y:va,Y:Ta,Z:wa,"%":Sa},_={a:function(t,e,i){var r=f.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=d.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=x.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 T(t,e,i,r)},d:Mo,e:Mo,f:Do,g:So,G:wo,H:No,I:No,j:Eo,L:Io,m:Lo,M:jo,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:$o,s:zo,S:Oo,u:vo,U:ko,V:To,w:_o,W:Ao,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:So,Y:wo,Z:Bo,"%":qo};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(T(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?Yn.ceil(r):Yn(r),r=jn.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?qn.ceil(r):qn(r),r=Nn.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 T(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=_[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 ja=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function Oa(t){return"string"==typeof t?new Ft([[document.querySelector(t)]],[document.documentElement]):new Ft([[t]],Bt)}function Ia(t){return"string"==typeof t?new Ft([document.querySelectorAll(t)],[document.documentElement]):new Ft([_(t)],Bt)}function Da(t){return function(){return t}}const qa=Math.abs,$a=Math.atan2,za=Math.cos,Pa=Math.max,Ra=Math.min,Ha=Math.sin,Wa=Math.sqrt,Ua=1e-12,Ya=Math.PI,Va=Ya/2,Ga=2*Ya;function Xa(t){return t>=1?Va:t<=-1?-Va:Math.asin(t)}const Za=Math.PI,Ja=2*Za,Qa=1e-6,Ka=Ja-Qa;function ts(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class es{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ts:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;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>Qa)if(Math.abs(h*s-l*c)>Qa&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Za-Math.acos((p+u-g)/(2*m*y)))/2),b=x/y,C=x/m;Math.abs(b-1)>Qa&&this._append`L${t+b*c},${e+b*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${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)>Qa||Math.abs(this._y1-c)>Qa)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Ja+Ja),u>Ka?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>Qa&&this._append`A${i},${i},0,${+(u>=Za)},${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 is(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 es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Wa(s*s+l*l),h=c*l,u=-c*s,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,b=g-f,C=x*x+b*b,_=n-o,v=d*g-p*f,k=(b<0?-1:1)*Wa(Pa(0,_*_*C-v*v)),T=(v*b-x*k)/C,A=(-v*x-b*k)/C,w=(v*b+x*k)/C,S=(-v*x+b*k)/C,B=T-m,F=A-y,L=w-m,M=S-y;return B*B+F*F>L*L+M*M&&(T=w,A=S),{cx:T,cy:A,x01:-h,y01:-u,x11:T*(n/_-1),y11:A*(n/_-1)}}function cs(){var t=rs,e=ns,i=Da(0),r=null,n=os,o=as,a=ss,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Va,g=o.apply(this,arguments)-Va,m=qa(g-p),y=g>p;if(s||(s=c=l()),f<d&&(h=f,f=d,d=h),f>Ua)if(m>Ga-Ua)s.moveTo(f*za(p),f*Ha(p)),s.arc(0,0,f,p,g,!y),d>Ua&&(s.moveTo(d*za(g),d*Ha(g)),s.arc(0,0,d,g,p,y));else{var x,b,C=p,_=g,v=p,k=g,T=m,A=m,w=a.apply(this,arguments)/2,S=w>Ua&&(r?+r.apply(this,arguments):Wa(d*d+f*f)),B=Ra(qa(f-d)/2,+i.apply(this,arguments)),F=B,L=B;if(S>Ua){var M=Xa(S/d*Ha(w)),E=Xa(S/f*Ha(w));(T-=2*M)>Ua?(v+=M*=y?1:-1,k-=M):(T=0,v=k=(p+g)/2),(A-=2*E)>Ua?(C+=E*=y?1:-1,_-=E):(A=0,C=_=(p+g)/2)}var N=f*za(C),j=f*Ha(C),O=d*za(k),I=d*Ha(k);if(B>Ua){var D,q=f*za(_),$=f*Ha(_),z=d*za(v),P=d*Ha(v);if(m<Ya)if(D=function(t,e,i,r,n,o,a,s){var l=i-t,c=r-e,h=a-n,u=s-o,d=u*l-h*c;if(!(d*d<Ua))return[t+(d=(h*(e-o)-u*(t-n))/d)*l,e+d*c]}(N,j,z,P,q,$,O,I)){var R=N-D[0],H=j-D[1],W=q-D[0],U=$-D[1],Y=1/Ha(((u=(R*W+H*U)/(Wa(R*R+H*H)*Wa(W*W+U*U)))>1?0:u<-1?Ya:Math.acos(u))/2),V=Wa(D[0]*D[0]+D[1]*D[1]);F=Ra(B,(d-V)/(Y-1)),L=Ra(B,(f-V)/(Y+1))}else F=L=0}A>Ua?L>Ua?(x=ls(z,P,N,j,f,L,y),b=ls(q,$,O,I,f,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),L<B?s.arc(x.cx,x.cy,L,$a(x.y01,x.x01),$a(b.y01,b.x01),!y):(s.arc(x.cx,x.cy,L,$a(x.y01,x.x01),$a(x.y11,x.x11),!y),s.arc(0,0,f,$a(x.cy+x.y11,x.cx+x.x11),$a(b.cy+b.y11,b.cx+b.x11),!y),s.arc(b.cx,b.cy,L,$a(b.y11,b.x11),$a(b.y01,b.x01),!y))):(s.moveTo(N,j),s.arc(0,0,f,C,_,!y)):s.moveTo(N,j),d>Ua&&T>Ua?F>Ua?(x=ls(O,I,q,$,d,-F,y),b=ls(N,j,z,P,d,-F,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),F<B?s.arc(x.cx,x.cy,F,$a(x.y01,x.x01),$a(b.y01,b.x01),!y):(s.arc(x.cx,x.cy,F,$a(x.y01,x.x01),$a(x.y11,x.x11),!y),s.arc(0,0,d,$a(x.cy+x.y11,x.cx+x.x11),$a(b.cy+b.y11,b.cx+b.x11),y),s.arc(b.cx,b.cy,F,$a(b.y11,b.x11),$a(b.y01,b.x01),!y))):s.arc(0,0,d,k,v,y):s.lineTo(O,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-Ya/2;return[za(r)*i,Ha(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Da(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Da(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:Da(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Da(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Da(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:Da(+t),c):o},c.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Da(+t),c):a},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}es.prototype;Array.prototype.slice;function hs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function us(t){this._context=t}function ds(t){return new us(t)}function fs(t){return t[0]}function ps(t){return t[1]}function gs(t,e){var i=Da(!0),r=null,n=ds,o=null,a=is(s);function s(s){var l,c,h,u=(s=hs(s)).length,d=!1;for(null==r&&(o=n(h=a())),l=0;l<=u;++l)!(l<u&&i(c=s[l],l,s))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&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:Da(t),e="function"==typeof e?e:void 0===e?ps:Da(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:Da(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:Da(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:Da(!!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 ms(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ys(t){return t}function xs(){var t=ys,e=ms,i=null,r=Da(0),n=Da(Ga),o=Da(0);function a(a){var s,l,c,h,u,d=(a=hs(a)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Ga,Math.max(-Ga,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s<d;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(f+=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=f?(y-d*b)/f:0;s<d;++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:x};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:Da(+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:Da(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Da(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Da(+t),a):o},a}function bs(){}function Cs(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 _s(t){this._context=t}function vs(t){return new _s(t)}function ks(t){this._context=t}function Ts(t){return new ks(t)}function As(t){this._context=t}function ws(t){return new As(t)}us.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)}}},_s.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:Cs(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:Cs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ks.prototype={areaStart:bs,areaEnd:bs,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:Cs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},As.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:Cs(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 Fs(t){return new Ss(t,!1)}function Ls(t,e){this._basis=new _s(t),this._beta=e}Ls.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 Ms=function t(e){function i(t){return 1===e?new _s(t):new Ls(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(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 Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.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:Es(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:Es(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 js=function t(e){function i(t){return new Ns(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:bs,areaEnd:bs,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:Es(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 Is=function t(e){function i(t){return new Os(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ds(t,e){this._context=t,this._k=(1-e)/6}Ds.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:Es(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 qs=function t(e){function i(t){return new Ds(t,e)}return i.tension=function(e){return t(+e)},i}(0);function $s(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Ua){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>Ua){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:$s(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 Ps=function t(e){function i(t){return e?new zs(t,e):new Ns(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:bs,areaEnd:bs,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:$s(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 Hs=function t(e){function i(t){return e?new Rs(t,e):new Os(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ws(t,e){this._context=t,this._alpha=e}Ws.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:$s(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 Us=function t(e){function i(t){return e?new Ws(t,e):new Ds(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ys(t){this._context=t}function Vs(t){return new Ys(t)}function Gs(t){return t<0?-1:1}function Xs(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(Gs(o)+Gs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Zs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Js(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 Qs(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Qs(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(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 ol(t){return new rl(t)}function al(t,e){this._context=t,this._t=e}function sl(t){return new al(t,.5)}function ll(t){return new al(t,0)}function cl(t){return new al(t,1)}function hl(t,e,i){this.k=t,this.x=e,this.y=i}Ys.prototype={areaStart:bs,areaEnd:bs,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))}},Qs.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:Js(this,this._t0,Zs(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,Js(this,Zs(this,i=Xs(this,t,e)),i);break;default:Js(this,this._t0,i=Xs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ks.prototype=Object.create(Qs.prototype)).point=function(t,e){Qs.prototype.point.call(this,e,t)},tl.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)}},rl.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=nl(t),n=nl(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)}},al.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}},hl.prototype={constructor:hl,scale:function(t){return 1===t?this:new hl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new hl(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 hl(1,0,0);hl.prototype},93539:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(72453),n=i(63122);const o=class{constructor(){this.type=n.Z.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.Z.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.Z.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.A.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.A.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.A.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.A.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.A.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.A.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.Z.HSL)||void 0===e?(this._ensureHSL(),r.A.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.Z.RGB)||void 0===e?(this._ensureRGB(),r.A.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.Z.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.Z.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.Z.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")},74886:(t,e,i)=>{"use strict";i.d(e,{A:()=>g});var r=i(93539),n=i(63122);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,d=l?255:15;return r.A.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:s?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}${n.Y[Math.round(255*o)]}`:`#${n.Y[Math.round(e)]}${n.Y[Math.round(i)]}${n.Y[Math.round(r)]}`}},a=o;var s=i(72453);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.A.channel.clamp.h(.9*parseFloat(t));case"rad":return s.A.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.A.channel.clamp.h(360*parseFloat(t))}}return s.A.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.A.set({h:l._hue2deg(n),s:s.A.channel.clamp.s(parseFloat(o)),l:s.A.channel.clamp.l(parseFloat(a)),a:c?s.A.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.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.lang.round(r)}%, ${n})`:`hsl(${s.A.lang.round(e)}, ${s.A.lang.round(i)}%, ${s.A.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,d={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(d.re);if(!i)return;const[,n,o,a,l,c,h,u,f]=i;return r.A.set({r:s.A.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.A.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.A.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.A.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)})`:`rgb(${s.A.lang.round(e)}, ${s.A.lang.round(i)}, ${s.A.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.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.Z.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},63122:(t,e,i)=>{"use strict";i.d(e,{Y:()=>n,Z:()=>o});var r=i(72453);const n={};for(let a=0;a<=255;a++)n[a]=r.A.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},95635:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e,i)=>{const o=n.A.parse(t),a=o[e],s=r.A.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.A.stringify(o)}},8232:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72453),n=i(74886);const o=(t,e)=>{const i=n.A.parse(t);for(const n in e)i[n]=r.A.channel.clamp[n](e[n]);return n.A.stringify(i)}},75263:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",-e)},3219:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(74886);const o=t=>{const{r:e,g:i,b:o}=n.A.parse(t),a=.2126*r.A.channel.toLinear(e)+.7152*r.A.channel.toLinear(i)+.0722*r.A.channel.toLinear(o);return r.A.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},78041:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(95635);const n=(t,e)=>(0,r.A)(t,"l",e)},25582:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72453),n=i(93539),o=i(74886),a=i(8232);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.A)(t,{a:e});const l=n.A.set({r:r.A.channel.clamp.r(t),g:r.A.channel.clamp.g(e),b:r.A.channel.clamp.b(i),a:r.A.channel.clamp.a(s)});return o.A.stringify(l)}},72453:(t,e,i)=>{"use strict";i.d(e,{A:()=>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}`}}}},80127:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(66984);const o=function(t,e){for(var i=t.length;i--;)if((0,n.A)(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 d=u},68335:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Map")},29471:(t,e,i)=>{"use strict";i.d(e,{A:()=>k});const r=(0,i(18744).A)(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 d=u;var f=i(80127),p=i(68335);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.A||f.A),string:new d}};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 x=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 _=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=x,v.prototype.get=b,v.prototype.has=C,v.prototype.set=_;const k=v},39857:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"Set")},11754:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(80127);const n=function(){this.__data__=new r.A,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(68335),c=i(29471);const h=function(t,e){var i=this.__data__;if(i instanceof r.A){var n=i.__data__;if(!l.A||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.A(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.A(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=h;const d=u},241:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Symbol},43988:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=i(41917).A.Uint8Array},83607:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(52274),o=i(92049),a=i(99912),s=i(25353),l=i(33858),c=Object.prototype.hasOwnProperty;const h=function(t,e){var i=(0,o.A)(t),h=!i&&(0,n.A)(t),u=!i&&!h&&(0,a.A)(t),d=!i&&!h&&!u&&(0,l.A)(t),f=i||h||u||d,p=f?r(t.length,String):[],g=p.length;for(var m in t)!e&&!c.call(t,m)||f&&("length"==m||u&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||(0,s.A)(m,g))||p.push(m);return p}},52851:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(52528),n=i(66984),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.A)(a,i)&&(void 0!==i||e in t)||(0,r.A)(t,e,i)}},52528:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(84171);const n=function(t,e,i){"__proto__"==e&&r.A?(0,r.A)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},4574:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},88496:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(241),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.A?r.A.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.A?r.A.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},69471:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(97271);const n=(0,i(40367).A)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.A)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},24326:(t,e,i)=>{"use strict";i.d(e,{A:()=>a});var r=i(29008),n=i(76875),o=i(67525);const a=function(t,e){return(0,o.A)((0,n.A)(t,e,r.A),t+"")}},52789:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(e){return t(e)}}},90565:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(43988);const n=function(t){var e=new t.constructor(t.byteLength);return new r.A(e).set(new r.A(t)),e}},80154:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.A.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},1801:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(90565);const n=function(t,e){var i=e?(0,r.A)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},39759:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},22031:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(52851),n=i(52528);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s<l;){var c=e[s],h=o?o(i[c],t[c],c,i,t):void 0;void 0===h&&(h=t[c]),a?(0,n.A)(i,c,h):(0,r.A)(i,c,h)}return i}},84171:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=i(18744);const n=function(){try{var t=(0,r.A)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},72136:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},18744:(t,e,i)=>{"use strict";i.d(e,{A:()=>x});var r=i(89610);const n=i(41917).A["__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(23149),c=i(81121),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.A)(t)||s(t))&&((0,r.A)(t)?g:h).test((0,c.A)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var i=y(t,e);return m(i)?i:void 0}},15647:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=(0,i(40367).A)(Object.getPrototypeOf,Object)},9779:(t,e,i)=>{"use strict";i.d(e,{A:()=>k});var r=i(18744),n=i(41917);const o=(0,r.A)(n.A,"DataView");var a=i(68335);const s=(0,r.A)(n.A,"Promise");var l=i(39857);const c=(0,r.A)(n.A,"WeakMap");var h=i(88496),u=i(81121),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.A)(o),x=(0,u.A)(a.A),b=(0,u.A)(s),C=(0,u.A)(l.A),_=(0,u.A)(c),v=h.A;(o&&v(new o(new ArrayBuffer(1)))!=m||a.A&&v(new a.A)!=d||s&&v(s.resolve())!=f||l.A&&v(new l.A)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.A)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.A)(i):"";if(r)switch(r){case y:return m;case x:return d;case b:return f;case C:return p;case _:return g}return e});const k=v},18598:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(23149),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.A)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(15647),s=i(97271);const l=function(t){return"function"!=typeof t.constructor||(0,s.A)(t)?{}:o((0,a.A)(t))}},25353:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t<e}},6832:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(66984),n=i(38446),o=i(25353),a=i(23149);const s=function(t,e,i){if(!(0,a.A)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.A)(i)&&(0,o.A)(e,i.length):"string"==s&&e in i)&&(0,r.A)(i[e],t)}},97271:(t,e,i)=>{"use strict";i.d(e,{A:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},64841:(t,e,i)=>{"use strict";i.d(e,{A:()=>s});var r=i(72136),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.A.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},40367:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},76875:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a<s;)l[a]=o[e+a];a=-1;for(var c=Array(e+1);++a<e;)c[a]=o[a];return c[e]=i(l),r(t,this,c)}}},41917:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(72136),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.A||n||Function("return this")()},67525:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(39142),n=i(84171),o=i(29008);const a=n.A?function(t,e){return(0,n.A)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.A)(e),writable:!0})}:o.A;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},81121:(t,e,i)=>{"use strict";i.d(e,{A:()=>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""}},39142:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return function(){return t}}},66984:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},29008:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return t}},52274:(t,e,i)=>{"use strict";i.d(e,{A:()=>c});var r=i(88496),n=i(53098);const o=function(t){return(0,n.A)(t)&&"[object Arguments]"==(0,r.A)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.A)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},92049:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=Array.isArray},38446:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(89610),n=i(5254);const o=function(t){return null!=t&&(0,n.A)(t.length)&&!(0,r.A)(t)}},53533:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(38446),n=i(53098);const o=function(t){return(0,n.A)(t)&&(0,r.A)(t)}},99912:(t,e,i)=>{"use strict";i.d(e,{A:()=>l});var r=i(41917);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.A.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},66401:(t,e,i)=>{"use strict";i.d(e,{A:()=>d});var r=i(69471),n=i(9779),o=i(52274),a=i(92049),s=i(38446),l=i(99912),c=i(97271),h=i(33858),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.A)(t)&&((0,a.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.A)(t)||(0,h.A)(t)||(0,o.A)(t)))return!t.length;var e=(0,n.A)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.A)(t))return!(0,r.A)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},89610:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(88496),n=i(23149);const o=function(t){if(!(0,n.A)(t))return!1;var e=(0,r.A)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},5254:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},23149:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},53098:(t,e,i)=>{"use strict";i.d(e,{A:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},34963:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(15647),o=i(53098),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.A)(t)||"[object Object]"!=(0,r.A)(t))return!1;var e=(0,n.A)(t);if(null===e)return!0;var i=c.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==h}},33858:(t,e,i)=>{"use strict";i.d(e,{A:()=>u});var r=i(88496),n=i(5254),o=i(53098),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.A)(t)&&(0,n.A)(t.length)&&!!a[(0,r.A)(t)]};var l=i(52789),c=i(64841),h=c.A&&c.A.isTypedArray;const u=h?(0,l.A)(h):s},55615:(t,e,i)=>{"use strict";i.d(e,{A:()=>h});var r=i(83607),n=i(23149),o=i(97271);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.A)(t))return a(t);var e=(0,o.A)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var c=i(38446);const h=function(t){return(0,c.A)(t)?(0,r.A)(t,!0):l(t)}},46632:(t,e,i)=>{"use strict";i.d(e,{A:()=>o});var r=i(29471);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.A),i}n.Cache=r.A;const o=n},98879:(t,e,i)=>{"use strict";i.d(e,{A:()=>B});var r=i(11754),n=i(52528),o=i(66984);const a=function(t,e,i){(void 0!==i&&!(0,o.A)(t[e],i)||void 0===i&&!(e in t))&&(0,n.A)(t,e,i)};var s=i(4574),l=i(80154),c=i(1801),h=i(39759),u=i(18598),d=i(52274),f=i(92049),p=i(53533),g=i(99912),m=i(89610),y=i(23149),x=i(34963),b=i(33858);const C=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(22031),v=i(55615);const k=function(t){return(0,_.A)(t,(0,v.A)(t))};const T=function(t,e,i,r,n,o,s){var _=C(t,i),v=C(e,i),T=s.get(v);if(T)a(t,i,T);else{var A=o?o(_,v,i+"",t,e,s):void 0,w=void 0===A;if(w){var S=(0,f.A)(v),B=!S&&(0,g.A)(v),F=!S&&!B&&(0,b.A)(v);A=v,S||B||F?(0,f.A)(_)?A=_:(0,p.A)(_)?A=(0,h.A)(_):B?(w=!1,A=(0,l.A)(v,!0)):F?(w=!1,A=(0,c.A)(v,!0)):A=[]:(0,x.A)(v)||(0,d.A)(v)?(A=_,(0,d.A)(_)?A=k(_):(0,y.A)(_)&&!(0,m.A)(_)||(A=(0,u.A)(v))):w=!1}w&&(s.set(v,A),n(A,v,r,o,s),s.delete(v)),a(t,i,A)}};const A=function t(e,i,n,o,l){e!==i&&(0,s.A)(i,(function(s,c){if(l||(l=new r.A),(0,y.A)(s))T(e,i,c,n,t,o,l);else{var h=o?o(C(e,c),s,c+"",e,i,l):void 0;void 0===h&&(h=s),a(e,c,h)}}),v.A)};var w=i(24326),S=i(6832);const B=function(t){return(0,w.A)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,S.A)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=i[r];s&&t(e,s,r,o)}return e}))}((function(t,e,i){A(t,e,i)}))},99702:(t,e,i)=>{"use strict";i.d(e,{A:()=>Ui,B:()=>Rt,C:()=>ve,D:()=>_e,E:()=>jt,F:()=>je,G:()=>Tt,H:()=>At,I:()=>ue,J:()=>ht,K:()=>qi,L:()=>Ni,M:()=>Te,N:()=>co,Z:()=>ee,a:()=>Li,b:()=>Fi,c:()=>Ii,d:()=>pt,e:()=>St,f:()=>te,g:()=>Bi,h:()=>ye,i:()=>xi,j:()=>me,k:()=>ce,l:()=>st,m:()=>yt,n:()=>oe,o:()=>bi,p:()=>Di,q:()=>Mi,r:()=>wt,s:()=>Si,t:()=>Ei,u:()=>ke,v:()=>wi,w:()=>pe,x:()=>xt,y:()=>de,z:()=>zi});var r=i(60513),n=i(74353),o=i(16750),a=i(26312),s=i(42838),l=i(74886),c=i(8232);const h=(t,e)=>{const i=l.A.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.A)(t,r)};var u=i(25582);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.A.parse(t),{r:s,g:c,b:h,a:d}=l.A.parse(e),f=i/100,p=2*f-1,g=a-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+s*y,b=n*m+c*y,C=o*m+h*y,_=a*f+d*(1-f);return(0,u.A)(x,b,C,_)},f=(t,e=100)=>{const i=l.A.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(75263),g=i(78041),m=i(3219),y=i(46632),x=i(98879),b="comm",C="rule",_="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function A(t,e,i){return t.replace(e,i)}function w(t,e,i){return t.indexOf(e,i)}function S(t,e){return 0|t.charCodeAt(e)}function B(t,e,i){return t.slice(e,i)}function F(t){return t.length}function L(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case _:return t.return=t.return||t.value;case b:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case C:if(!F(t.value=t.props.join(",")))return""}return F(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var N=1,j=1,O=0,I=0,D=0,q="";function $(t,e,i,r,n,o,a,s){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:N,column:j,length:a,return:"",siblings:s}}function z(){return D=I>0?S(q,--I):0,j--,10===D&&(j=1,N--),D}function P(){return D=I<O?S(q,I++):0,j++,10===D&&(j=1,N++),D}function R(){return S(q,I)}function H(){return I}function W(t,e){return B(q,t,e)}function U(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 Y(t){return N=j=1,O=F(q=t),I=0,[]}function V(t){return q="",t}function G(t){return T(W(I-1,J(91===t?t+2:40===t?t+1:t)))}function X(t){for(;(D=R())&&D<33;)P();return U(t)>2||U(D)>3?"":" "}function Z(t,e){for(;--e&&P()&&!(D<48||D>102||D>57&&D<65||D>70&&D<97););return W(t,H()+(e<6&&32==R()&&32==P()))}function J(t){for(;P();)switch(D){case t:return I;case 34:case 39:34!==t&&39!==t&&J(D);break;case 40:41===t&&J(t);break;case 92:P()}return I}function Q(t,e){for(;P()&&t+D!==57&&(t+D!==84||47!==R()););return"/*"+W(e,I-1)+"*"+k(47===t?t:P())}function K(t){for(;!U(R());)P();return W(t,I)}function tt(t){return V(et("",null,null,null,[""],t=Y(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var c=0,h=0,u=a,d=0,f=0,p=0,g=1,m=1,y=1,x=0,b="",C=n,_=o,T=r,M=b;m;)switch(p=x,x=P()){case 40:if(108!=p&&58==S(M,u-1)){-1!=w(M+=A(G(x),"&","&\f"),"&\f",v(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:M+=G(x);break;case 9:case 10:case 13:case 32:M+=X(p);break;case 92:M+=Z(H()-1,7);continue;case 47:switch(R()){case 42:case 47:L(rt(Q(P(),H()),e,i,l),l),5!=U(p||1)&&5!=U(R()||1)||!F(M)||" "===B(M,-1,void 0)||(M+=" ");break;default:M+="/"}break;case 123*g:s[c++]=F(M)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(M=A(M,/\f/g,"")),f>0&&(F(M)-u||0===g&&47===p)&&L(f>32?nt(M+";",r,i,u-1,l):nt(A(M," ","")+";",r,i,u-2,l),l);break;case 59:M+=";";default:if(L(T=it(M,e,i,c,h,n,s,b,C=[],_=[],u,o),o),123===x)if(0===h)et(M,e,T,T,C,o,u,s,_);else switch(99===d&&110===S(M,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&L(it(t,T,T,0,0,n,s,b,n,C=[],u,_),_),n,_,u,s,r?C:_);break;default:et(M,T,T,T,[""],_,0,s,_)}}c=h=f=0,g=y=1,b=M="",u=a;break;case 58:u=1+F(M),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==z())continue;switch(M+=k(x),x*g){case 38:y=h>0?1:(M+="\f",-1);break;case 44:s[c++]=(F(M)-1)*y,y=1;break;case 64:45===R()&&(M+=G(P())),d=R(),h=u=F(b=M+=K(H())),x++;break;case 45:45===p&&2==F(M)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,c,h,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,m=0,y=0;g<r;++g)for(var x=0,b=B(t,d+1,d=v(m=a[g])),_=t;x<p;++x)(_=T(m>0?f[x]+" "+b:A(b,/&\f/g,f[x])))&&(l[y++]=_);return $(t,e,i,0===n?C:s,l,c,h,u)}function rt(t,e,i,r){return $(t,e,i,b,k(D),B(t,2,-2),0,r)}function nt(t,e,i,r,n){return $(t,e,i,_,B(t,0,r),B(t,r+1,-1),r,n)}var ot=i(66401);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("TRACE")))},ct=t=>`%c${n().format("ss.SSS")} : ${t} : `,ht=/<br\s*\/?>/gi,ut=(()=>{let t=!1;return()=>{t||(!function(){const t="data-temp-href-target";s.addHook("beforeSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")})),s.addHook("afterSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))}))}(),t=!0)}})();const dt=t=>{ut();return s.sanitize(t)},ft=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=dt(t):"loose"!==i&&(t=(t=(t=mt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=gt(t))}return t},pt=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(ft(t,e),e.dompurifyConfig).toString():s.sanitize(ft(t,e),{FORBID_TAGS:["style"]}).toString():t,gt=t=>t.replace(/#br#/g,"<br/>"),mt=t=>t.replace(ht,"#br#"),yt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),xt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];Ct(n,o)&&(t=n+","+o,r++,i.pop())}i.push(_t(t))}return i.join("")},bt=(t,e)=>Math.max(0,t.split(e).length-1),Ct=(t,e)=>{const i=bt(t,"~"),r=bt(e,"~");return 1===i&&1===r},_t=t=>{const e=bt(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},vt=()=>void 0!==window.MathMLElement,kt=/\$\$(.*)\$\$/g,Tt=t=>{var e;return((null==(e=t.match(kt))?void 0:e.length)??0)>0},At=async(t,e)=>{t=await wt(t,e);const i=document.createElement("div");i.innerHTML=t,i.id="katex-temp",i.style.visibility="hidden",i.style.position="absolute",i.style.top="0";const r=document.querySelector("body");null==r||r.insertAdjacentElement("beforeend",i);const n={width:i.clientWidth,height:i.clientHeight};return i.remove(),n},wt=async(t,e)=>{if(!Tt(t))return t;if(!vt()&&!e.legacyMathML)return t.replace(kt,"MathML is unsupported in this environment.");const{default:r}=await i.e(2130).then(i.bind(i,22130));return t.split(ht).map((t=>Tt(t)?`\n <div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">\n ${t}\n </div>\n `:`<div>${t}</div>`)).join("").replace(kt,((t,e)=>r.renderToString(e,{throwOnError:!0,displayMode:!0,output:vt()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(/<annotation.*<\/annotation>/g,"")))},St={getRows:t=>{if(!t)return[""];return mt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:pt,sanitizeTextOrArray:(t,e)=>"string"==typeof t?pt(t,e):t.flat().map((t=>pt(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:dt,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:yt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},Bt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),Ft="#ffffff",Lt="#f2f2f2";let Mt=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(){var t,e,i,r,n,o,a,s,l,c,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||h(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||h(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Bt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Bt(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.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,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,p.A)(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,p.A)(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,g.A)(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||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.darkMode)for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.A)(this["cScale"+h],75);else for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.A)(this["cScale"+h],25);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.A)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.A)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||h(this.primaryColor,{h:64}),this.fillType3=this.fillType3||h(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||h(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||h(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||h(this.primaryColor,{h:128}),this.fillType7=this.fillType7||h(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||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-10}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||h(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.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.A)(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||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(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||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}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]}))}};let Et=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.A)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(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,g.A)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.A)(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,p.A)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.A)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.A)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.A)(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=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.A)(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,g.A)(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,g.A)(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=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(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||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.A)(this["cScale"+h],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];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.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.A)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.A)(this.secondaryColor,20),this.git1=(0,g.A)(this.pie2||this.secondaryColor,20),this.git2=(0,g.A)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.A)(this.pie4||h(this.primaryColor,{h:-30}),20),this.git4=(0,g.A)(this.pie5||h(this.primaryColor,{h:-60}),20),this.git5=(0,g.A)(this.pie6||h(this.primaryColor,{h:-90}),10),this.git6=(0,g.A)(this.pie7||h(this.primaryColor,{h:60}),10),this.git7=(0,g.A)(this.pie8||h(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.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||(0,g.A)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.A)(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]}))}};let Nt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=h(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(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=(0,u.A)(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=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.A)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.A)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,l:-(7+5*d)});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,g.A)(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=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||h(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||h(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||h(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.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",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||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.A)(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||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}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 jt=t=>{const e=new Nt;return e.calculate(t),e};let Ot=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,g.A)("#cde498",10),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(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=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.actorBorder=(0,p.A)(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.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.A)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.A)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.A)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,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=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(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||h(this.primaryColor,{l:-30}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||h(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.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",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||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.A)(this.git0,25),this.git1=(0,g.A)(this.git1,25),this.git2=(0,g.A)(this.git2,25),this.git3=(0,g.A)(this.git3,25),this.git4=(0,g.A)(this.git4,25),this.git5=(0,g.A)(this.git5,25),this.git6=(0,g.A)(this.git6,25),this.git7=(0,g.A)(this.git7,25)):(this.git0=(0,p.A)(this.git0,25),this.git1=(0,p.A)(this.git1,25),this.git2=(0,p.A)(this.git2,25),this.git3=(0,p.A)(this.git3,25),this.git4=(0,p.A)(this.git4,25),this.git5=(0,p.A)(this.git5,25),this.git6=(0,p.A)(this.git6,25),this.git7=(0,p.A)(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.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||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}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]}))}};class It{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.A)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=Bt(this.primaryColor,this.darkMode),this.secondaryBorderColor=Bt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Bt(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=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.A)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.A)(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.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 h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.A)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.A)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{l:-(8+5*d)});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.sectionBkgColor=(0,g.A)(this.contrast,30),this.sectionBkgColor2=(0,g.A)(this.contrast,30),this.taskBorderColor=(0,p.A)(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,g.A)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.A)(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=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];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.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.A)(this.quadrant1Fill)?(0,g.A)(this.quadrant1Fill):(0,p.A)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",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,p.A)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||h(this.primaryColor,{h:-30}),this.git4=this.pie5||h(this.primaryColor,{h:-60}),this.git5=this.pie6||h(this.primaryColor,{h:-90}),this.git6=this.pie7||h(this.primaryColor,{h:60}),this.git7=this.pie8||h(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||Ft,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Lt}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 Dt={base:{getThemeVariables:t=>{const e=new Mt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Et;return e.calculate(t),e}},default:{getThemeVariables:jt},forest:{getThemeVariables:t=>{const e=new Ot;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new It;return e.calculate(t),e}}},qt={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,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,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},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,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"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,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,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{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},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,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},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,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,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"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},$t={...qt,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Dt.default.getThemeVariables(),sequence:{...qt.sequence,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:{...qt.gantt,tickInterval:void 0,useWidth:void 0},c4:{...qt.c4,useWidth:void 0,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}}},pie:{...qt.pie,useWidth:984},xyChart:{...qt.xyChart,useWidth:void 0},requirement:{...qt.requirement,useWidth:void 0},gitGraph:{...qt.gitGraph,useMaxWidth:!1},sankey:{...qt.sankey,useMaxWidth:!1}},zt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...zt(t[r],"")]:[...i,e+r]),[]),Pt=new Set(zt($t,"")),Rt=$t,Ht=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>Ht(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Pt.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),Ht(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=Wt(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},Wt=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},Ut=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Yt=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Vt=/\s*%%.*\n/gm;class Gt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Xt={},Zt=function(t,e){t=t.replace(Ut,"").replace(Yt,"").replace(Vt,"\n");for(const[i,{detector:r}]of Object.entries(Xt)){if(r(t,e))return i}throw new Gt(`No diagram type detected matching given configuration for text: ${t}`)},Jt=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Qt(e,i,r)},Qt=(t,e,i)=>{Xt[t]?st.error(`Detector with key ${t} already exists`):Xt[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Kt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Kt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=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((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Kt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},te=Kt,ee="\u200b",ie={curveBasis:a.qrM,curveBasisClosed:a.Yu4,curveBasisOpen:a.IA3,curveBumpX:a.Wi0,curveBumpY:a.PGM,curveBundle:a.OEq,curveCardinalClosed:a.olC,curveCardinalOpen:a.IrU,curveCardinal:a.y8u,curveCatmullRomClosed:a.Q7f,curveCatmullRomOpen:a.cVp,curveCatmullRom:a.oDi,curveLinear:a.lUB,curveLinearClosed:a.Lx9,curveMonotoneX:a.nVG,curveMonotoneY:a.uxU,curveNatural:a.Xf2,curveStep:a.GZz,curveStepAfter:a.UPb,curveStepBefore:a.dyv},re=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,ne=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${re.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=Yt.exec(t));)if(r.index===Yt.lastIndex&&Yt.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?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function oe(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return ie[i]??e}function ae(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const se=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},le=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=ae(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:se((1-e)*i.x+e*n.x,5),y:se((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function ce(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 he=0;const ue=()=>(he++,"id-"+Math.random().toString(36).substr(2,12)+"-"+he);const de=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),fe=function(t,e){const i=e.text.replace(St.lineBreakRegex," "),[,r]=_e(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 o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},pe=(0,y.A)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),St.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=ye(`${t} `,i),l=ye(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=ge(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),ge=(0,y.A)(((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(ye(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 me(t,e){return xe(t,e).height}function ye(t,e){return xe(t,e).width}const xe=(0,y.A)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=_e(i),s=["sans-serif",r],l=t.split(St.lineBreakRegex),c=[],h=(0,a.Ltv)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){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,text:""};r.text=i||ee;const s=fe(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[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))}c.push(e)}u.remove();return c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let be;function Ce(t){return"str"in t}const _e=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]};function ve(t,e){return(0,x.A)({},t,e)}const ke={assignWithDepth:te,wrapLabel:pe,calculateTextHeight:me,calculateTextWidth:ye,calculateTextDimensions:xe,cleanAndMerge:ve,detectInit:function(t,e){const i=ne(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));Ht(t),r=te(r,[...t])}else r=i.args;if(!r)return;let n=Zt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:ne,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:oe,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=ae(t,e),e=t})),le(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=le(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=le(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Jf)(i):i},getStylesFromArray:ce,generateId:ue,random:de,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 void st.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return be=be||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),be.innerHTML=t,unescape(be.textContent)},insertTitle:(t,e,i,r)=>{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:_e,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},Te=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},Ae="10.9.1",we=Object.freeze(Rt);let Se,Be=te({},we),Fe=[],Le=te({},we);const Me=(t,e)=>{let i=te({},t),r={};for(const n of e)Oe(n),r=te(r,n);if(i=te(i,r),r.theme&&r.theme in Dt){const t=te({},Se),e=te(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Dt&&(i.themeVariables=Dt[i.theme].getThemeVariables(e))}return Le=i,ze(Le),Le},Ee=()=>te({},Be),Ne=t=>(ze(t),te(Le,t),je()),je=()=>te({},Le),Oe=t=>{t&&(["secure",...Be.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&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]&&Oe(t[e])})))},Ie=t=>{Ht(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),Fe.push(t),Me(Be,Fe)},De=(t=Be)=>{Fe=[],Me(t,Fe)},qe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},$e={},ze=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&($e[e="LAZY_LOAD_DEPRECATED"]||(st.warn(qe[e]),$e[e]=!0)))},Pe={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(1946).then(i.bind(i,31946));return{id:"c4",diagram:t}}},Re="flowchart",He={id:Re,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)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(8810)]).then(i.bind(i,88810));return{id:Re,diagram:t}}},We="flowchart-v2",Ue={id:We,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)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(2548),i.e(2453)]).then(i.bind(i,22453));return{id:We,diagram:t}}},Ye={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1398)]).then(i.bind(i,31398));return{id:"er",diagram:t}}},Ve="gitGraph",Ge={id:Ve,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(4943).then(i.bind(i,74943));return{id:Ve,diagram:t}}},Xe="gantt",Ze={id:Xe,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8869).then(i.bind(i,8869));return{id:Xe,diagram:t}}},Je="info",Qe={id:Je,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(2843).then(i.bind(i,22843));return{id:Je,diagram:t}}},Ke={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(6803).then(i.bind(i,76803));return{id:"pie",diagram:t}}},ti="quadrantChart",ei={id:ti,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(8478).then(i.bind(i,8478));return{id:ti,diagram:t}}},ii="xychart",ri={id:ii,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(2925)]).then(i.bind(i,32925));return{id:ii,diagram:t}}},ni="requirement",oi={id:ni,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3706)]).then(i.bind(i,43706));return{id:ni,diagram:t}}},ai="sequence",si={id:ai,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(9689).then(i.bind(i,79689));return{id:ai,diagram:t}}},li="class",ci={id:li,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(3626),i.e(7426)]).then(i.bind(i,87426));return{id:li,diagram:t}}},hi="classDiagram",ui={id:hi,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(3626),i.e(8635)]).then(i.bind(i,18635));return{id:hi,diagram:t}}},di="state",fi={id:di,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(1176),i.e(1245),i.e(1331)]).then(i.bind(i,31331));return{id:di,diagram:t}}},pi="stateDiagram",gi={id:pi,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(1176),i.e(8055),i.e(2983),i.e(1245),i.e(3068)]).then(i.bind(i,3068));return{id:pi,diagram:t}}},mi="journey",yi={id:mi,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(6420).then(i.bind(i,26420));return{id:mi,diagram:t}}},xi=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)},bi=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),xi(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},Ci={},_i=(t,e,i)=>{let r="";return t in Ci&&Ci[t]?r=Ci[t](i):st.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 vi="",ki="",Ti="";const Ai=t=>pt(t,je()),wi=()=>{vi="",Ti="",ki=""},Si=t=>{vi=Ai(t).replace(/^\s+/g,"")},Bi=()=>vi,Fi=t=>{Ti=Ai(t).replace(/\n\s+/g,"\n")},Li=()=>Ti,Mi=t=>{ki=Ai(t)},Ei=()=>ki,Ni=Object.freeze(Object.defineProperty({__proto__:null,clear:wi,getAccDescription:Li,getAccTitle:Bi,getDiagramTitle:Ei,setAccDescription:Fi,setAccTitle:Si,setDiagramTitle:Mi},Symbol.toStringTag,{value:"Module"})),ji=st,Oi=lt,Ii=je,Di=Ne,qi=we,$i=t=>pt(t,Ii()),zi=bi,Pi={},Ri=(t,e,i)=>{var r,n,o;if(Pi[t])throw new Error(`Diagram ${t} already registered.`);Pi[t]=e,i&&Qt(t,i),n=t,void 0!==(o=e.styles)&&(Ci[n]=o),null==(r=e.injectUtils)||r.call(e,ji,Oi,Ii,$i,zi,Ni,(()=>{}))},Hi=t=>{if(t in Pi)return Pi[t];throw new Wi(t)};class Wi extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const Ui=t=>{var e;const{securityLevel:i}=Ii();let r=(0,a.Ltv)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ltv)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ltv)(i.body)}return r.select(`#${t}`)},Yi={draw:(t,e,i)=>{st.debug("rendering svg for syntax error\n");const r=Ui(e),n=r.append("g");r.attr("viewBox","0 0 2412 512"),xi(r,100,512,!0),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}`)}},Vi=Yi,Gi={db:{},renderer:Yi,parser:{parser:{yy:{}},parse:()=>{}}},Xi="flowchart-elk",Zi={id:Xi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(8055),i.e(2548),i.e(4741)]).then(i.bind(i,74741));return{id:Xi,diagram:t}}},Ji="timeline",Qi={id:Ji,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(2376).then(i.bind(i,42376));return{id:Ji,diagram:t}}},Ki="mindmap",tr={id:Ki,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8337),i.e(1303)]).then(i.bind(i,31303));return{id:Ki,diagram:t}}},er="sankey",ir={id:er,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(6788).then(i.bind(i,16788));return{id:er,diagram:t}}},rr="block",nr={id:rr,detector:t=>/^\s*block-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1169),i.e(8337),i.e(8055),i.e(4162)]).then(i.bind(i,14162));return{id:rr,diagram:t}}};let or=!1;const ar=()=>{or||(or=!0,Ri("error",Gi,(t=>"error"===t.toLowerCase().trim())),Ri("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},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("---"))),Jt(Pe,ui,ci,Ye,Ze,Qe,Ke,oi,si,Zi,Ue,He,tr,Qi,Ge,gi,fi,yi,ei,ir,ri,nr))};class sr{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text=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}(t),this.text+="\n";const i=je();try{this.type=Zt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Hi(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=je();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),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 lr=async(t,e={})=>{const i=Zt(t,je());try{Hi(i)}catch(r){const t=Xt[i].loader;if(!t)throw new Gt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Ri(e,n)}return new sr(t,e)};let cr=[];const hr="graphics-document document";const ur=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function dr(t){return null==t}var fr={isNothing:dr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:dr(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 pr(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 gr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=pr(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}gr.prototype=Object.create(Error.prototype),gr.prototype.constructor=gr,gr.prototype.toString=function(t){return this.name+": "+pr(this,t)};var mr=gr;function yr(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 xr(t,e){return fr.repeat(" ",e-t.length)+t}var br=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,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=yr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),c=fr.repeat(" ",e.indent)+xr((t.line-s+1).toString(),h)+" | "+l.str+"\n"+c;for(l=yr(t.buffer,n[a],o[a],t.position,u),c+=fr.repeat(" ",e.indent)+xr((t.line+1).toString(),h)+" | "+l.str+"\n",c+=fr.repeat("-",e.indent+h+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=yr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),c+=fr.repeat(" ",e.indent)+xr((t.line+s+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},Cr=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],_r=["scalar","sequence","mapping"];var vr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===Cr.indexOf(e))throw new mr('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===_r.indexOf(this.kind))throw new mr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function kr(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 Tr(t){return this.extend(t)}Tr.prototype.extend=function(t){var e=[],i=[];if(t instanceof vr)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 mr("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 vr))throw new mr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new mr("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 mr("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 vr))throw new mr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(Tr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=kr(r,"implicit"),r.compiledExplicit=kr(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 Ar=new Tr({explicit:[new vr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new vr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new vr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var wr=new vr("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 Sr=new vr("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 Br(t){return 48<=t&&t<=55}function Fr(t){return 48<=t&&t<=57}var Lr=new vr("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(!Br(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!Fr(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&&!fr.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"]}}),Mr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Er=/^[-+]?[0-9]+e/;var Nr=new vr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!Mr.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||fr.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(fr.isNegativeZero(t))return"-0.0";return i=t.toString(10),Er.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),jr=Ar.extend({implicit:[wr,Sr,Lr,Nr]}),Or=jr,Ir=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Dr=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 qr=new vr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Ir.exec(t)||null!==Dr.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=Ir.exec(t))&&(e=Dr.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 $r=new vr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),zr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Pr=new vr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=zr;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=zr,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=zr;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}}),Rr=Object.prototype.hasOwnProperty,Hr=Object.prototype.toString;var Wr=new vr("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]"!==Hr.call(r))return!1;for(n in r)if(Rr.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:[]}}),Ur=Object.prototype.toString;var Yr=new vr("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]"!==Ur.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}}),Vr=Object.prototype.hasOwnProperty;var Gr=new vr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(Vr.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),Xr=Or.extend({implicit:[qr,$r],explicit:[Pr,Wr,Yr,Gr]}),Zr=Object.prototype.hasOwnProperty,Jr=1,Qr=2,Kr=3,tn=4,en=1,rn=2,nn=3,on=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,an=/[\x85\u2028\u2029]/,sn=/[,\[\]\{\}]/,ln=/^(?:!|!!|![a-z\-]+!)$/i,cn=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function hn(t){return Object.prototype.toString.call(t)}function un(t){return 10===t||13===t}function dn(t){return 9===t||32===t}function fn(t){return 9===t||32===t||10===t||13===t}function pn(t){return 44===t||91===t||93===t||123===t||125===t}function gn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function mn(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 yn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var xn=new Array(256),bn=new Array(256),Cn=0;Cn<256;Cn++)xn[Cn]=mn(Cn)?1:0,bn[Cn]=mn(Cn);function _n(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Xr,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 vn(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=br(i),new mr(e,i)}function kn(t,e){throw vn(t,e)}function Tn(t,e){t.onWarning&&t.onWarning.call(null,vn(t,e))}var An={YAML:function(t,e,i){var r,n,o;null!==t.version&&kn(t,"duplication of %YAML directive"),1!==i.length&&kn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&kn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&kn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&Tn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&kn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],ln.test(r)||kn(t,"ill-formed tag handle (first argument) of the TAG directive"),Zr.call(t.tagMap,r)&&kn(t,'there is a previously declared suffix for "'+r+'" tag handle'),cn.test(n)||kn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){kn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function wn(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||kn(t,"expected valid JSON character");else on.test(s)&&kn(t,"the stream contains non-printable characters");t.result+=s}}function Sn(t,e,i,r){var n,o,a,s;for(fr.isObject(i)||kn(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],Zr.call(e,o)||(e[o]=i[o],r[o]=!0)}function Bn(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])&&kn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===hn(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===hn(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)Sn(t,e,o[c],i);else Sn(t,e,o,i);else t.json||Zr.call(i,n)||!Zr.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,kn(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 Fn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):kn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ln(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;dn(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(!un(n))break;for(Fn(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&&Tn(t,"deficient indentation"),r}function Mn(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))&&!fn(e)))}function En(t,e){1===e?t.result+=" ":e>1&&(t.result+=fr.repeat("\n",e-1))}function Nn(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,kn(t,"tab characters must not be used in indentation")),45===r)&&fn(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,Ln(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,In(t,e,Kr,!1,!0),a.push(t.result),Ln(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)kn(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 jn(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&kn(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)):kn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!fn(n);)33===n&&(a?kn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),ln.test(i)||kn(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),sn.test(r)&&kn(t,"tag suffix cannot contain flow indicator characters")}r&&!cn.test(r)&&kn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){kn(t,"tag name is malformed: "+r)}return o?t.tag=r:Zr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:kn(t,'undeclared tag handle "'+i+'"'),!0}function On(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&kn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!fn(i)&&!pn(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&kn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function In(t,e,i,r,n){var o,a,s,l,c,h,u,d,f,p=1,g=!1,m=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=tn===i||Kr===i,r&&Ln(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;jn(t)||On(t);)Ln(t,!0,-1)?(g=!0,s=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):s=!1;if(s&&(s=g||n),1!==p&&tn!==i||(d=Jr===i||Qr===i?e:e+1,f=t.position-t.lineStart,1===p?s&&(Nn(t,f)||function(t,e,i){var r,n,o,a,s,l,c,h=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,m=null,y=!1,x=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,kn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!fn(r)){if(a=t.line,s=t.lineStart,l=t.position,!In(t,i,Qr,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);dn(c);)c=t.input.charCodeAt(++t.position);if(58===c)fn(c=t.input.charCodeAt(++t.position))||kn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(Bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!x)return t.tag=h,t.anchor=u,!0;kn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return t.tag=h,t.anchor=u,!0;kn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(Bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!0,n=!0):y?(y=!1,n=!0):kn(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),In(t,e,tn,!0,n)&&(y?g=t.result:m=t.result),y||(Bn(t,d,f,p,g,m,a,s,l),p=g=m=null),Ln(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)kn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&Bn(t,d,f,p,g,null,a,s,l),x&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),x}(t,f,d))||function(t,e){var i,r,n,o,a,s,l,c,h,u,d,f,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))a=93,c=!1,o=[];else{if(123!==f)return!1;a=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(Ln(t,!0,e),(f=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===f&&kn(t,"expected the node content, but found ','"):kn(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===f&&fn(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,Ln(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,In(t,e,Jr,!1,!0),u=t.tag,h=t.result,Ln(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(s=!0,f=t.input.charCodeAt(++t.position),Ln(t,!0,e),In(t,e,Jr,!1,!0),d=t.result),c?Bn(t,o,y,u,h,d,i,r,n):s?o.push(Bn(t,null,y,u,h,d,i,r,n)):o.push(h),Ln(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}kn(t,"unexpected end of the stream within a flow collection")}(t,d)?m=!0:(a&&function(t,e){var i,r,n,o,a,s=en,l=!1,c=!1,h=e,u=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)en===s?s=43===o?nn:rn:kn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?kn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?kn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(dn(o)){do{o=t.input.charCodeAt(++t.position)}while(dn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!un(o)&&0!==o)}for(;0!==o;){for(Fn(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),un(o))u++;else{if(t.lineIndent<h){s===nn?t.result+=fr.repeat("\n",l?1+u:u):s===en&&l&&(t.result+="\n");break}for(r?dn(o)?(d=!0,t.result+=fr.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=fr.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=fr.repeat("\n",u):t.result+=fr.repeat("\n",l?1+u:u),l=!0,c=!0,u=0,i=t.position;!un(o)&&0!==o;)o=t.input.charCodeAt(++t.position);wn(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(wn(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else un(i)?(wn(t,r,n,!0),En(t,Ln(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Mn(t)?kn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);kn(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 wn(t,i,t.position,!0),t.position++,!0;if(92===s){if(wn(t,i,t.position,!0),un(s=t.input.charCodeAt(++t.position)))Ln(t,!1,e);else if(s<256&&xn[s])t.result+=bn[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=gn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:kn(t,"expected hexadecimal character");t.result+=yn(o),t.position++}else kn(t,"unknown escape sequence");i=r=t.position}else un(s)?(wn(t,i,r,!0),En(t,Ln(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Mn(t)?kn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}kn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?m=!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&&!fn(r)&&!pn(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&kn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Zr.call(t.anchorMap,i)||kn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],Ln(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,d=t.result;if(fn(h=t.input.charCodeAt(t.position))||pn(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)&&(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(fn(r=t.input.charCodeAt(t.position+1))||i&&pn(r))break}else if(35===h){if(fn(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Mn(t)||i&&pn(h))break;if(un(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,Ln(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&&(wn(t,n,o,!1),En(t,t.line-s),n=o=t.position,a=!1),dn(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return wn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Jr===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||kn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=s&&Nn(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&kn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Zr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,c=(h=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,h[l].tag.length)===h[l].tag){u=h[l];break}u||kn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&kn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):kn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function Dn(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))&&(Ln(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&&!fn(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&kn(t,"directive name must not be less than one character in length");0!==n;){for(;dn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!un(n));break}if(un(n))break;for(e=t.position;0!==n&&!fn(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&Fn(t),Zr.call(An,i)?An[i](t,i,r):Tn(t,'unknown document directive "'+i+'"')}Ln(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,Ln(t,!0,-1)):a&&kn(t,"directives end mark is expected"),In(t,t.lineIndent-1,tn,!1,!0),Ln(t,!0,-1),t.checkLineBreaks&&an.test(t.input.slice(o,t.position))&&Tn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Mn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Ln(t,!0,-1)):t.position<t.length-1&&kn(t,"end of the stream or a document separator is expected")}function qn(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 _n(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,kn(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;)Dn(i);return i.documents}var $n=jr,zn={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=qn(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=qn(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new mr("expected a single document in the stream, but found more")}}}.load;const Pn=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),Rn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(Ut);if(!e)return{text:t,metadata:{}};let i=zn(e[1],{schema:$n})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},Hn=t=>{const e=ke.detectInit(t)??{},i=ke.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace(Yt,"")),directive:e};var r};function Wn(t){const e=Pn(t),i=Rn(e),r=Hn(i.text),n=ve(i.config,r.directive);return{code:t=ur(r.text),title:i.title,config:n}}const Un=["foreignobject"],Yn=["dominant-baseline"];function Vn(t){const e=Wn(t);return De(),Ie(e.config??{}),e}const Gn=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Xn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.A)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.A)(i.styles)||n.forEach((t=>{r+=Gn(i.id,t,i.styles)})),(0,ot.A)(i.textStyles)||(r+=Gn(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${_i(e,n,t.themeVariables)}}`),E)},Zn=(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 Jn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Qn=(t,e={})=>{const{code:i}=Wn(t);return lr(i,e)};const Kn=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;ar();const u=Vn(e);e=u.code;const d=je();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,m="d"+t,y="#"+m;let x=(0,a.Ltv)("body");const b="sandbox"===d.securityLevel,C="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),b){const t=Jn((0,a.Ltv)(i),p);x=(0,a.Ltv)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ltv)(i);Zn(x,t,m,`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,m,p),b){const t=Jn((0,a.Ltv)("body"),p);x=(0,a.Ltv)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ltv)("body");Zn(x,t,m)}let v,k;try{v=await Qn(e,{title:u.title})}catch(j){v=new sr("error"),k=j}const T=x.select(y).node(),A=v.type,w=T.firstChild,S=w.firstChild,B=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),F=Xn(d,A,B,f),L=document.createElement("style");L.innerHTML=F,w.insertBefore(L,S);try{await v.renderer.draw(e,t,Ae,v)}catch(O){throw Vi.draw(e,t,Ae),O}!function(t,e,i,r){(function(t,e){t.attr("role",hr),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){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"))}(A,x.select(`${y} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(h=(c=v.db).getAccDescription)?void 0:h.call(c)),x.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=x.select(y).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=Te(r),r=r.replace(/<br>/g,"<br/>"),r})(M,b,yt(d.arrowMarkerAbsolute)),b){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?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,x.select(y+" svg").node())}else C||(M=s.sanitize(M,{ADD_TAGS:Un,ADD_ATTR:Yn}));if(cr.forEach((t=>{t()})),cr=[],k)throw k;const E=b?g:y,N=(0,a.Ltv)(E).node();return N&&"remove"in N&&N.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){ar(),t=Vn(t).code;try{await Qn(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Qn,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),Se=te({},t),(null==t?void 0:t.theme)&&t.theme in Dt?t.themeVariables=Dt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Dt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(Be=te({},we),Be=te(Be,t),t.theme&&Dt[t.theme]&&(Be.themeVariables=Dt[t.theme].getThemeVariables(t.themeVariables)),Me(Be,Fe),Be))(t):Ee();lt(i.logLevel),ar()},getConfig:je,setConfig:Ne,getSiteConfig:Ee,updateSiteConfig:t=>(Be=te(Be,t),Me(Be,Fe),Be),reset:()=>{De()},globalReset:()=>{De(we)},defaultConfig:we});lt(je().logLevel),De(je());const to=(t,e,i)=>{st.warn(t),Ce(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}))},eo=async function(t={querySelector:".mermaid"}){try{await io(t)}catch(e){if(Ce(e)&&st.error(e.str),co.parseError&&co.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},io=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Kn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Kn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new ke.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const h of Array.from(o)){if(st.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=h.innerHTML,s=(0,r.T)(ke.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=ke.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await lo(e,s,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){to(c,l,co.parseError)}}if(l.length>0)throw l[0]},ro=function(t){Kn.initialize(t)},no=function(){if(co.startOnLoad){const{startOnLoad:t}=Kn.getConfig();t&&co.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",no,!1);const oo=[];let ao=!1;const so=async()=>{if(!ao){for(ao=!0;oo.length>0;){const e=oo.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}ao=!1}},lo=(t,e,i)=>new Promise(((r,n)=>{oo.push((()=>new Promise(((o,a)=>{Kn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=co.parseError)||e.call(co,t),a(t),n(t)}))})))),so().catch(n)})),co={startOnLoad:!0,mermaidAPI:Kn,parse:async(t,e)=>new Promise(((i,r)=>{oo.push((()=>new Promise(((n,o)=>{Kn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=co.parseError)||e.call(co,t),o(t),r(t)}))})))),so().catch(r)})),render:lo,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&ro(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await eo(r)},run:eo,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Jt(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Xt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Hi(t)}catch(r){try{const{diagram:t,id:r}=await i();Ri(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Xt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:ro,parseError:void 0,contentLoaded:no,setParseErrorHandler:function(t){co.parseError=t},detectType:Zt}}}]); \ No newline at end of file diff --git a/assets/js/1721.c0b53a15.js.LICENSE.txt b/assets/js/1721.c0b53a15.js.LICENSE.txt new file mode 100644 index 00000000000..110c6efd55a --- /dev/null +++ b/assets/js/1721.c0b53a15.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/assets/js/17896441.3e61c7b1.js b/assets/js/17896441.3e61c7b1.js new file mode 100644 index 00000000000..08677bffd9f --- /dev/null +++ b/assets/js/17896441.3e61c7b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8401],{69102:(e,t,s)=>{s.d(t,{A:()=>L});s(96540);var a=s(20053),n=s(24581),o=s(60542),i=s(23679),l=s(76858),d=s(17559),r=s(19175),c=s(61943);const u={lastUpdated:"lastUpdated_VsjB"};var h=s(74848);function m(e){let{editUrl:t,lastUpdatedAt:s,lastUpdatedBy:n,formattedLastUpdatedAt:o}=e;return(0,h.jsxs)("div",{className:(0,a.A)(d.G.docs.docFooterEditMetaRow,"row"),children:[(0,h.jsx)("div",{className:"col",children:t&&(0,h.jsx)(c.A,{editUrl:t})}),(0,h.jsx)("div",{className:(0,a.A)("col",u.lastUpdated),children:(s||n)&&(0,h.jsx)(r.A,{lastUpdatedAt:s,formattedLastUpdatedAt:o,lastUpdatedBy:n})})]})}function v(){const{metadata:e}=(0,o.u)(),{editUrl:t,lastUpdatedAt:s,formattedLastUpdatedAt:n,lastUpdatedBy:i}=e,l=!!(t||s||i);return l?(0,h.jsx)("footer",{className:(0,a.A)(d.G.docs.docFooter,"docusaurus-mt-lg"),children:l&&(0,h.jsx)(m,{editUrl:t,lastUpdatedAt:s,lastUpdatedBy:i,formattedLastUpdatedAt:n})}):null}var j=s(62053);function x(e){return(0,h.jsx)("div",{className:(0,a.A)(d.G.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,h.jsx)("div",{className:"col",children:(0,h.jsx)(j.A,{...e})})})}function b(){const{metadata:e}=(0,o.u)(),{tags:t}=e,s=t.length>0;return(0,h.jsx)("footer",{className:(0,a.A)(d.G.docs.docFooter,"docusaurus-mt-lg","margin-top--sm"),children:s&&(0,h.jsx)(x,{tags:t})})}var A=s(51683),f=s(90206),p=s(25685),g=s(71243);const U={docItemContainer:"docItemContainer_c0TR",docItemCol:"docItemCol_z5aJ"};function L(e){let{children:t}=e;const s=function(){const{frontMatter:e,toc:t}=(0,o.u)(),s=(0,n.l)(),a=e.hide_table_of_contents,i=!a&&t.length>0;return{hidden:a,mobile:i?(0,h.jsx)(A.A,{}):void 0,desktop:!i||"desktop"!==s&&"ssr"!==s?void 0:(0,h.jsx)(f.A,{})}}();return(0,h.jsxs)("div",{className:"row",children:[(0,h.jsxs)("div",{className:(0,a.A)("col",!s.hidden&&U.docItemCol),children:[(0,h.jsx)(l.A,{}),(0,h.jsxs)("div",{className:U.docItemContainer,children:[(0,h.jsxs)("article",{children:[(0,h.jsx)(g.A,{}),(0,h.jsx)(b,{}),s.mobile,(0,h.jsx)(p.A,{children:t}),(0,h.jsx)(v,{})]}),(0,h.jsx)(i.A,{})]})]}),s.desktop&&(0,h.jsx)("div",{className:"col col--3",children:s.desktop})]})}},76858:(e,t,s)=>{s.d(t,{A:()=>x});s(96540);var a=s(20053),n=s(44586),o=s(28774),i=s(21312),l=s(44070),d=s(17559),r=s(53886),c=s(23025),u=s(74848);const h={unreleased:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,u.jsx)(i.A,{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:(0,u.jsx)("b",{children:s.label})},children:"This is the development version of the documentation and some features may not yet be available in the stable release."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,u.jsx)(i.A,{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:(0,u.jsx)("b",{children:s.label})},children:"This is documentation for Besu version {versionLabel}, which is no longer actively maintained."})}};function m(e){const t=h[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function v(e){let{versionLabel:t,to:s,onClick:a}=e;return(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)(o.A,{to:s,onClick:a,children:(0,u.jsx)(i.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"stable version"})})},children:" You can switch to the {latestVersionLink} ({versionLabel})."})}function j(e){let{className:t,versionMetadata:s}=e;const{siteConfig:{title:o}}=(0,n.A)(),{pluginId:i}=(0,l.vT)({failfast:!0}),{savePreferredVersionName:c}=(0,r.g1)(i),{latestDocSuggestion:h,latestVersionSuggestion:j}=(0,l.HW)(i),x=h??(b=j).docs.find((e=>e.id===b.mainDocId));var b;return(0,u.jsx)("div",{className:(0,a.A)(t,d.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:(0,u.jsxs)("div",{children:[(0,u.jsx)(m,{siteTitle:o,versionMetadata:s}),(0,u.jsx)(v,{versionLabel:j.name,to:x.path,onClick:()=>c(j.name)})]})})}function x(e){let{className:t}=e;const s=(0,c.r)();return s.banner?(0,u.jsx)(j,{className:t,versionMetadata:s}):null}}}]); \ No newline at end of file diff --git a/assets/js/1946.457004ff.js b/assets/js/1946.457004ff.js new file mode 100644 index 00000000000..2daf0ded794 --- /dev/null +++ b/assets/js/1946.457004ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1946],{31946:(t,e,n)=>{n.d(e,{diagram:()=>nt});var a=n(99702),i=n(26312),s=n(28259),r=n(16750),l=(n(74353),n(42838),function(){var t=function(t,e,n,a){for(n=n||{},a=t.length;a--;n[t[a]]=e);return n},e=[1,24],n=[1,25],a=[1,26],i=[1,27],s=[1,28],r=[1,63],l=[1,64],o=[1,65],h=[1,66],d=[1,67],u=[1,68],p=[1,69],y=[1,29],f=[1,30],b=[1,31],g=[1,32],x=[1,33],_=[1,34],m=[1,35],E=[1,36],A=[1,37],S=[1,38],C=[1,39],k=[1,40],O=[1,41],v=[1,42],T=[1,43],w=[1,44],R=[1,45],D=[1,46],N=[1,47],P=[1,48],M=[1,50],j=[1,51],B=[1,52],L=[1,53],Y=[1,54],I=[1,55],U=[1,56],F=[1,57],X=[1,58],z=[1,59],W=[1,60],Q=[14,42],$=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],V=[1,82],G=[1,83],H=[1,84],K=[1,85],J=[12,14,42],Z=[12,14,33,42],tt=[12,14,33,42,76,77,79,80],et=[12,33],nt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],at={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(t,e,n,a,i,s,r){var l=s.length-1;switch(i){case 3:a.setDirection("TB");break;case 4:a.setDirection("BT");break;case 5:a.setDirection("RL");break;case 6:a.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:a.setC4Type(s[l-3]);break;case 19:a.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 20:a.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 21:this.$=s[l].trim(),a.setTitle(this.$);break;case 22:case 23:this.$=s[l].trim(),a.setAccDescription(this.$);break;case 28:case 29:s[l].splice(2,0,"ENTERPRISE"),a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 30:a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 31:s[l].splice(2,0,"CONTAINER"),a.addContainerBoundary(...s[l]),this.$=s[l];break;case 32:a.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 33:a.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 34:a.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 35:a.popBoundaryParseStack();break;case 39:a.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 40:a.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 41:a.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 42:a.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 43:a.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 44:a.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 45:a.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 46:a.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 47:a.addContainer("container",...s[l]),this.$=s[l];break;case 48:a.addContainer("container_db",...s[l]),this.$=s[l];break;case 49:a.addContainer("container_queue",...s[l]),this.$=s[l];break;case 50:a.addContainer("external_container",...s[l]),this.$=s[l];break;case 51:a.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 52:a.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 53:a.addComponent("component",...s[l]),this.$=s[l];break;case 54:a.addComponent("component_db",...s[l]),this.$=s[l];break;case 55:a.addComponent("component_queue",...s[l]),this.$=s[l];break;case 56:a.addComponent("external_component",...s[l]),this.$=s[l];break;case 57:a.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 58:a.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 60:a.addRel("rel",...s[l]),this.$=s[l];break;case 61:a.addRel("birel",...s[l]),this.$=s[l];break;case 62:a.addRel("rel_u",...s[l]),this.$=s[l];break;case 63:a.addRel("rel_d",...s[l]),this.$=s[l];break;case 64:a.addRel("rel_l",...s[l]),this.$=s[l];break;case 65:a.addRel("rel_r",...s[l]),this.$=s[l];break;case 66:a.addRel("rel_b",...s[l]),this.$=s[l];break;case 67:s[l].splice(0,1),a.addRel("rel",...s[l]),this.$=s[l];break;case 68:a.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 69:a.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 70:a.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 71:this.$=[s[l]];break;case 72:s[l].unshift(s[l-1]),this.$=s[l];break;case 73:case 75:this.$=s[l].trim();break;case 74:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 76:this.$=""}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:70,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:71,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:72,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{13:73,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{14:[1,74]},t(Q,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(Q,[2,14]),t($,[2,16],{12:[1,76]}),t(Q,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:V,77:G,79:H,80:K},{35:86,75:81,76:V,77:G,79:H,80:K},{35:87,75:81,76:V,77:G,79:H,80:K},{35:88,75:81,76:V,77:G,79:H,80:K},{35:89,75:81,76:V,77:G,79:H,80:K},{35:90,75:81,76:V,77:G,79:H,80:K},{35:91,75:81,76:V,77:G,79:H,80:K},{35:92,75:81,76:V,77:G,79:H,80:K},{35:93,75:81,76:V,77:G,79:H,80:K},{35:94,75:81,76:V,77:G,79:H,80:K},{35:95,75:81,76:V,77:G,79:H,80:K},{35:96,75:81,76:V,77:G,79:H,80:K},{35:97,75:81,76:V,77:G,79:H,80:K},{35:98,75:81,76:V,77:G,79:H,80:K},{35:99,75:81,76:V,77:G,79:H,80:K},{35:100,75:81,76:V,77:G,79:H,80:K},{35:101,75:81,76:V,77:G,79:H,80:K},{35:102,75:81,76:V,77:G,79:H,80:K},{35:103,75:81,76:V,77:G,79:H,80:K},{35:104,75:81,76:V,77:G,79:H,80:K},t(J,[2,59]),{35:105,75:81,76:V,77:G,79:H,80:K},{35:106,75:81,76:V,77:G,79:H,80:K},{35:107,75:81,76:V,77:G,79:H,80:K},{35:108,75:81,76:V,77:G,79:H,80:K},{35:109,75:81,76:V,77:G,79:H,80:K},{35:110,75:81,76:V,77:G,79:H,80:K},{35:111,75:81,76:V,77:G,79:H,80:K},{35:112,75:81,76:V,77:G,79:H,80:K},{35:113,75:81,76:V,77:G,79:H,80:K},{35:114,75:81,76:V,77:G,79:H,80:K},{35:115,75:81,76:V,77:G,79:H,80:K},{20:116,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W},{12:[1,118],33:[1,117]},{35:119,75:81,76:V,77:G,79:H,80:K},{35:120,75:81,76:V,77:G,79:H,80:K},{35:121,75:81,76:V,77:G,79:H,80:K},{35:122,75:81,76:V,77:G,79:H,80:K},{35:123,75:81,76:V,77:G,79:H,80:K},{35:124,75:81,76:V,77:G,79:H,80:K},{35:125,75:81,76:V,77:G,79:H,80:K},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(Q,[2,15]),t($,[2,17],{21:22,19:130,22:e,23:n,24:a,26:i,28:s}),t(Q,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:n,24:a,26:i,28:s,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:L,68:Y,69:I,70:U,71:F,72:X,73:z,74:W}),t(q,[2,21]),t(q,[2,22]),t(J,[2,39]),t(Z,[2,71],{75:81,35:132,76:V,77:G,79:H,80:K}),t(tt,[2,73]),{78:[1,133]},t(tt,[2,75]),t(tt,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(et,[2,28]),t(et,[2,29]),t(et,[2,30]),t(et,[2,31]),t(et,[2,32]),t(et,[2,33]),t(et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t($,[2,18]),t(Q,[2,38]),t(Z,[2,72]),t(tt,[2,74]),t(J,[2,24]),t(J,[2,35]),t(nt,[2,25]),t(nt,[2,26],{12:[1,138]}),t(nt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},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],a=[],i=[null],s=[],r=this.table,l="",o=0,c=0,h=s.slice.call(arguments,1),d=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]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;s.push(y);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,g,x,_,m,E,A,S,C,k={};;){if(g=n[n.length-1],this.defaultActions[g]?x=this.defaultActions[g]:(null==b&&(C=void 0,"number"!=typeof(C=a.pop()||d.lex()||1)&&(C instanceof Array&&(C=(a=C).pop()),C=e.symbols_[C]||C),b=C),x=r[g]&&r[g][b]),void 0===x||!x.length||!x[0]){var O="";for(m in S=[],r[g])this.terminals_[m]&&m>2&&S.push("'"+this.terminals_[m]+"'");O=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(O,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:y,expected:S})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+b);switch(x[0]){case 1:n.push(b),i.push(d.yytext),s.push(d.yylloc),n.push(x[1]),b=null,c=d.yyleng,l=d.yytext,o=d.yylineno,y=d.yylloc;break;case 2:if(E=this.productions_[x[1]][1],k.$=i[i.length-E],k._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},f&&(k._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(_=this.performAction.apply(k,[l,c,o,u.yy,x[1],i,s].concat(h))))return _;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),s=s.slice(0,-1*E)),n.push(this.productions_[x[1]][0]),i.push(k.$),s.push(k._$),A=r[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},it={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 a=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===a.length?this.yylloc.first_column:0)+a[a.length-n.length].length-n[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 n,a,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))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.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 i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((n=this._input.match(this.rules[i[s]]))&&(!e||n[0].length>e[0].length)){if(e=n,a=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[a]))&&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,a){switch(n){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 73:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 16:case 70:break;case 14:c;break;case 15:return 12;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:case 53:return this.begin("rel_u"),66;case 54:case 55:return this.begin("rel_d"),67;case 56:case 57:return this.begin("rel_l"),68;case 58:case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:case 79:this.popState(),this.popState();break;case 69:case 71:return 80;case 72:this.begin("string");break;case 74:case 80:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\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:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,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,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};function st(){this.yy={}}return at.lexer=it,st.prototype=at,at.Parser=st,new st}());l.parser=l;const o=l;let h=[],d=[""],u="global",p="",y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],f=[],b="",g=!1,x=4,_=2;var m;const E=function(t){return null==t?h:h.filter((e=>e.parentBoundary===t))},A=function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},S=function(){return g},C={addPersonOrSystem:function(t,e,n,a,i,s,r){if(null===e||null===n)return;let l={};const o=h.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,h.push(l)),l.label=null==n?{text:""}:{text:n},null==a)l.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]={text:e}}else l.descr={text:a};if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.sprite=i;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=u,l.wrap=S()},addPersonOrSystemBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addContainer:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};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=u},addContainerBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=S(),p=u,u=t,d.push(p)},addComponent:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};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=u},addDeploymentNode:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=y.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,y.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.type={text:"node"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.type={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};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=u,o.wrap=S(),p=u,u=e,d.push(p)},popBoundaryParseStack:function(){u=p,d.pop(),p=d.pop(),d.push(p)},addRel:function(t,e,n,a,i,s,r,l,o){if(null==t||null==e||null==n||null==a)return;let c={};const h=f.find((t=>t.from===e&&t.to===n));if(h?c=h:f.push(c),c.type=t,c.from=e,c.to=n,c.label={text:a},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};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,n,a,i,s,r,l,o,c,d){let u=h.find((t=>t.alias===e));if(void 0!==u||(u=y.find((t=>t.alias===e)),void 0!==u)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.bgColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.fontColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.borderColor=i;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!=d)if("object"==typeof d){let[t,e]=Object.entries(d)[0];u[t]=e}else u.legendSprite=d}},updateRelStyle:function(t,e,n,a,i,s,r){const l=f.find((t=>t.from===e&&t.to===n));if(void 0!==l){if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.textColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.lineColor=i;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,n){let a=x,i=_;if("object"==typeof e){const t=Object.values(e)[0];a=parseInt(t)}else a=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);a>=1&&(x=a),i>=1&&(_=i)},autoWrap:S,setWrap:function(t){g=t},getC4ShapeArray:E,getC4Shape:function(t){return h.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(E(t))},getBoundaries:A,getBoundarys:A,getCurrentBoundaryParse:function(){return u},getParentBoundaryParse:function(){return p},getRels:function(){return f},getTitle:function(){return b},getC4Type:function(){return m},getC4ShapeInRow:function(){return x},getC4BoundaryInRow:function(){return _},setAccTitle:a.s,getAccTitle:a.g,getAccDescription:a.a,setAccDescription:a.b,getConfig:()=>(0,a.c)().c4,clear:function(){h=[],y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],p="",u="global",d=[""],f=[],d=[""],b="",g=!1,x=4,_=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.d)(t,(0,a.c)());b=e},setC4Type:function(t){let e=(0,a.d)(t,(0,a.c)());m=e}},k=function(t,e){return(0,s.d)(t,e)},O=function(t,e,n,a,i,s){const l=t.append("image");l.attr("width",e),l.attr("height",n),l.attr("x",a),l.attr("y",i);let o=s.startsWith("data:image/png;base64")?s:(0,r.Jf)(s);l.attr("xlink:href",o)},v=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),T=function(){function t(t,e,n,a,s,r,l){i(e.append("text").attr("x",n+s/2).attr("y",a+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,n,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",n+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"),i(l,o)}}function n(t,n,a,s,r,l,o,c){const h=n.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),i(d,o)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(a){return"fo"===a.textPlacement?n:"old"===a.textPlacement?t:e}}(),w=function(t,e,n){const a=t.append("g");let i=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:i,stroke:s,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};k(a,o);let c=n.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=r,T(n)(e.label.text,a,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=n.boundaryFont(),c.fontColor=r,T(n)(e.type.text,a,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=n.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=r,T(n)(e.descr.text,a,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},R=function(t,e,n){var a;let i=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],r=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],l=e.fontColor?e.fontColor:"#FFFFFF",o="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":o="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":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const h=(0,s.g)();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":h.x=e.x,h.y=e.y,h.fill=i,h.width=e.width,h.height=e.height,h.stroke=r,h.rx=2.5,h.ry=2.5,h.attrs={"stroke-width":.5},k(c,h);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).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)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).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":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).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)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).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 d=v(n,e.typeC4Shape.text);switch(c.append("text").attr("fill",l).attr("font-family",d.fontFamily).attr("font-size",d.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":O(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let u=n[e.typeC4Shape.text+"Font"]();return u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=l,T(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:l},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=l,e.techn&&""!==(null==(a=e.techn)?void 0:a.text)?T(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:l,"font-style":"italic"},u):e.type&&""!==e.type.text&&T(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:l,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=l,T(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},u)),e.height},D=(t,e,n)=>{const a=t.append("g");let i=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===i){let t=a.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)"),i=-1}else{let t=a.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=n.messageFont();T(n)(s.label.text,a,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=n.messageFont(),T(n)("["+s.techn.text+"]",a,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+n.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},N=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")},P=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")},j=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")},B=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")},Y=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")};let I=0,U=0,F=4,X=2;l.yy=C;let z={};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,Q(t.db.getConfig())}setData(t,e,n,a){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=a}updateVal(t,e,n,a){void 0===t[e]?t[e]=n:t[e]=a(n,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,n=e+t.width,a=this.nextData.starty+2*t.margin,i=a+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>F)&&(e=this.nextData.startx+t.margin+z.nextLinePaddingX,a=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=a+t.height,this.nextData.cnt=1),t.x=e,t.y=a,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",a,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",a,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",i,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},Q(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const Q=function(t){(0,a.f)(z,t),t.fontFamily&&(z.personFontFamily=z.systemFontFamily=z.messageFontFamily=t.fontFamily),t.fontSize&&(z.personFontSize=z.systemFontSize=z.messageFontSize=t.fontSize),t.fontWeight&&(z.personFontWeight=z.systemFontWeight=z.messageFontWeight=t.fontWeight)},$=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),q=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function V(t,e,n,i,s){if(!e[t].width)if(n)e[t].text=(0,a.w)(e[t].text,s,i),e[t].textLines=e[t].text.split(a.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,a.j)(e[t].text,i);else{let n=e[t].text.split(a.e.lineBreakRegex);e[t].textLines=n.length;let s=0;e[t].height=0,e[t].width=0;for(const r of n)e[t].width=Math.max((0,a.h)(r,i),e[t].width),s=(0,a.j)(r,i),e[t].height=e[t].height+s}}const G=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=z.c4ShapeMargin-35;let i=e.wrap&&z.wrap,s=q(z);s.fontSize=s.fontSize+2,s.fontWeight="bold",V("label",e,i,s,(0,a.h)(e.label.text,s)),w(t,e,z)},H=function(t,e,n,i){let s=0;for(const r of i){s=0;const i=n[r];let l=$(z,i.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,i.typeC4Shape.width=(0,a.h)("\xab"+i.typeC4Shape.text+"\xbb",l),i.typeC4Shape.height=l.fontSize+2,i.typeC4Shape.Y=z.c4ShapePadding,s=i.typeC4Shape.Y+i.typeC4Shape.height-4,i.image={width:0,height:0,Y:0},i.typeC4Shape.text){case"person":case"external_person":i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height}i.sprite&&(i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height);let o=i.wrap&&z.wrap,c=z.width-2*z.c4ShapePadding,h=$(z,i.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",V("label",i,o,h,c),i.label.Y=s+8,s=i.label.Y+i.label.height,i.type&&""!==i.type.text){i.type.text="["+i.type.text+"]",V("type",i,o,$(z,i.typeC4Shape.text),c),i.type.Y=s+5,s=i.type.Y+i.type.height}else if(i.techn&&""!==i.techn.text){i.techn.text="["+i.techn.text+"]",V("techn",i,o,$(z,i.techn.text),c),i.techn.Y=s+5,s=i.techn.Y+i.techn.height}let d=s,u=i.label.width;if(i.descr&&""!==i.descr.text){V("descr",i,o,$(z,i.typeC4Shape.text),c),i.descr.Y=s+20,s=i.descr.Y+i.descr.height,u=Math.max(i.label.width,i.descr.width),d=s-5*i.descr.textLines}u+=z.c4ShapePadding,i.width=Math.max(i.width||z.width,u,z.width),i.height=Math.max(i.height||z.height,d,z.height),i.margin=i.margin||z.c4ShapeMargin,t.insert(i),R(e,i,z)}t.bumpLastMargin(z.c4ShapeMargin)};class K{constructor(t,e){this.x=t,this.y=e}}let J=function(t,e){let n=t.x,a=t.y,i=e.x,s=e.y,r=n+t.width/2,l=a+t.height/2,o=Math.abs(n-i),c=Math.abs(a-s),h=c/o,d=t.height/t.width,u=null;return a==s&&n<i?u=new K(n+t.width,l):a==s&&n>i?u=new K(n,l):n==i&&a<s?u=new K(r,a+t.height):n==i&&a>s&&(u=new K(r,a)),n>i&&a<s?u=d>=h?new K(n,l+h*t.width/2):new K(r-o/c*t.height/2,a+t.height):n<i&&a<s?u=d>=h?new K(n+t.width,l+h*t.width/2):new K(r+o/c*t.height/2,a+t.height):n<i&&a>s?u=d>=h?new K(n+t.width,l-h*t.width/2):new K(r+t.height/2*o/c,a):n>i&&a>s&&(u=d>=h?new K(n,l-t.width/2*h):new K(r-t.height/2*o/c,a)),u},Z=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let a=J(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:a,endPoint:J(e,n)}};function tt(t,e,n,a,i){let s=new W(i);s.data.widthLimit=n.data.widthLimit/Math.min(X,a.length);for(let[r,l]of a.entries()){let a=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=a,a=l.image.Y+l.image.height);let o=l.wrap&&z.wrap,c=q(z);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",V("label",l,o,c,s.data.widthLimit),l.label.Y=a+8,a=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",V("type",l,o,q(z),s.data.widthLimit),l.type.Y=a+5,a=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=q(z);t.fontSize=t.fontSize-2,V("descr",l,o,t,s.data.widthLimit),l.descr.Y=a+20,a=l.descr.Y+l.descr.height}if(0==r||r%X==0){let t=n.data.startx+z.diagramMarginX,e=n.data.stopy+z.diagramMarginY+a;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+z.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=i.db.getC4ShapeArray(l.alias),d=i.db.getC4ShapeKeys(l.alias);d.length>0&&H(s,t,h,d),e=l.alias;let u=i.db.getBoundarys(e);u.length>0&&tt(t,e,s,u,i),"global"!==l.alias&&G(t,l,s),n.data.stopy=Math.max(s.data.stopy+z.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(s.data.stopx+z.c4ShapeMargin,n.data.stopx),I=Math.max(I,n.data.stopx),U=Math.max(U,n.data.stopy)}}const et={drawPersonOrSystemArray:H,drawBoundary:G,setConf:Q,draw:function(t,e,n,s){z=(0,a.c)().c4;const r=(0,a.c)().securityLevel;let l;"sandbox"===r&&(l=(0,i.Ltv)("#i"+e));const o="sandbox"===r?(0,i.Ltv)(l.nodes()[0].contentDocument.body):(0,i.Ltv)("body");let c=s.db;s.db.setWrap(z.wrap),F=c.getC4ShapeInRow(),X=c.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(z,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,i.Ltv)(`[id="${e}"]`);L(h),B(h),Y(h);let d=new W(s);d.setData(z.diagramMarginX,z.diagramMarginX,z.diagramMarginY,z.diagramMarginY),d.data.widthLimit=screen.availWidth,I=z.diagramMarginX,U=z.diagramMarginY;const u=s.db.getTitle();tt(h,"",d,s.db.getBoundarys(""),s),N(h),P(h),j(h),M(h),function(t,e,n,i){let s=0;for(let l of e){s+=1;let t=l.wrap&&z.wrap,e={fontFamily:(r=z).messageFontFamily,fontSize:r.messageFontSize,fontWeight:r.messageFontWeight};"C4Dynamic"===i.db.getC4Type()&&(l.label.text=s+": "+l.label.text);let o=(0,a.h)(l.label.text,e);V("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,a.h)(l.techn.text,e),V("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,a.h)(l.descr.text,e),V("descr",l,t,e,o));let c=n(l.from),h=n(l.to),d=Z(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;D(t,e,z)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=I,d.data.stopy=U;const p=d.data;let y=p.stopy-p.starty+2*z.diagramMarginY;const f=p.stopx-p.startx+2*z.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*z.diagramMarginX).attr("y",p.starty+z.diagramMarginY),(0,a.i)(h,y,f,z.useMaxWidth);const b=u?60:0;h.attr("viewBox",p.startx-z.diagramMarginX+" -"+(z.diagramMarginY+b)+" "+f+" "+(y+b)),a.l.debug("models:",p)}},nt={parser:o,db:C,renderer:et,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:({c4:t,wrap:e})=>{et.setConf(t),C.setWrap(e)}}},28259:(t,e,n)=>{n.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var a=n(16750),i=n(99702);const s=(t,e)=>{const n=t.append("rect");if(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),e.name&&n.attr("name",e.name),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const a in e.attrs)n.attr(a,e.attrs[a]);return void 0!==e.class&&n.attr("class",e.class),n},r=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,n).lower()},l=(t,e)=>{const n=e.text.replace(i.J," "),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.attr("class","legend"),a.style("text-anchor",e.anchor),void 0!==e.class&&a.attr("class",e.class);const s=a.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),a},o=(t,e,n,i)=>{const s=t.append("image");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",r)},c=(t,e,n,i)=>{const s=t.append("use");s.attr("x",e),s.attr("y",n);const r=(0,a.Jf)(i);s.attr("xlink:href",`#${r}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.4b5826b5.js b/assets/js/1a4e3797.4b5826b5.js new file mode 100644 index 00000000000..ba9f0edfb28 --- /dev/null +++ b/assets/js/1a4e3797.4b5826b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2138],{53465:(e,t,r)=>{r.d(t,{W:()=>u});var s=r(96540),a=r(44586);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.A)();return(0,s.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`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},41283:(e,t,r)=>{r.r(t),r.d(t,{default:()=>b});var s=r(96540),a=r(44586),n=r(59504),c=r(5260),l=r(28774),o=r(21312),u=r(53465),h=r(20053),i=r(56347),m=r(92303),d=r(11088);const p=function(){const e=(0,m.A)(),t=(0,i.W6)(),r=(0,i.zy)(),{siteConfig:{baseUrl:s}}=(0,a.A)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(d.Hg)&&d.Hg.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(5891),x=r(32384),f=r(69913),y=r(86841),C=r(43810),S=r(27674),j=r(2849),A=r(4471);const w={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var I=r(43385),v=r(74848);function R(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.A)(),{selectMessage:r}=(0,u.W)(),{searchValue:n,searchContext:l,searchVersion:i,updateSearchPath:m,updateSearchContext:f}=p(),[y,C]=(0,s.useState)(n),[S,A]=(0,s.useState)(),[R,b]=(0,s.useState)(),_=`${e}${i}`,F=(0,s.useMemo)((()=>y?(0,o.T)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.T)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{m(y),S&&(y?S(y,(e=>{b(e)})):b(void 0))}),[y,S]);const T=(0,s.useCallback)((e=>{C(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&C(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(d.Hg)||l||d.dz?await(0,g.Z)(_,l):{wrappedIndexes:[],zhDictionary:[]};A((()=>(0,x.m)(e,t,100)))}()}),[l,_]),(0,v.jsxs)(s.Fragment,{children:[(0,v.jsxs)(c.A,{children:[(0,v.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,v.jsx)("title",{children:F})]}),(0,v.jsxs)("div",{className:"container margin-vert--lg",children:[(0,v.jsx)("h1",{children:F}),(0,v.jsxs)("div",{className:"row",children:[(0,v.jsx)("div",{className:(0,h.A)("col",{[w.searchQueryColumn]:Array.isArray(d.Hg),"col--9":Array.isArray(d.Hg),"col--12":!Array.isArray(d.Hg)}),children:(0,v.jsx)("input",{type:"search",name:"q",className:w.searchQueryInput,"aria-label":"Search",onChange:T,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(d.Hg)?(0,v.jsx)("div",{className:(0,h.A)("col","col--3","padding-left--none",w.searchContextColumn),children:(0,v.jsxs)("select",{name:"search-context",className:w.searchContextInput,id:"context-selector",value:l,onChange:e=>f(e.target.value),children:[d.dz&&(0,v.jsx)("option",{value:"",children:(0,o.T)({id:"theme.SearchPage.searchContext.everywhere",message:"Everywhere"})}),d.Hg.map((e=>{const{label:r,path:s}=(0,I.p)(e,t);return(0,v.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!S&&y&&(0,v.jsx)("div",{children:(0,v.jsx)(j.A,{})}),R&&(R.length>0?(0,v.jsx)("p",{children:r(R.length,(0,o.T)({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:R.length}))}):(0,v.jsx)("p",{children:(0,o.T)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,v.jsx)("section",{children:R&&R.map((e=>(0,v.jsx)(P,{searchResult:e},e.document.i)))})]})]})}function P(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=r===f.i.Title,o=r===f.i.Keywords,u=r===f.i.Description,h=u||o,i=c||h,m=r===f.i.Content,p=(c?t.b:s.b).slice(),g=m||h?t.s:t.t;i||p.push(s.t);let x="";if(d.CU&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);x=`?${e.toString()}`}return(0,v.jsxs)("article",{className:w.searchResultItem,children:[(0,v.jsx)("h2",{children:(0,v.jsx)(l.A,{to:t.u+x+(t.h||""),dangerouslySetInnerHTML:{__html:m||h?(0,y.Z)(g,a):(0,C.C)(g,(0,S.g)(n,"t"),a,100)}})}),p.length>0&&(0,v.jsx)("p",{className:w.searchResultItemPath,children:(0,A.$)(p)}),(m||u)&&(0,v.jsx)("p",{className:w.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,C.C)(t.t,(0,S.g)(n,"t"),a,100)}})]})}const b=function(){return(0,v.jsx)(n.A,{children:(0,v.jsx)(R,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a78f042.7689b480.js b/assets/js/1a78f042.7689b480.js new file mode 100644 index 00000000000..b29072a22bd --- /dev/null +++ b/assets/js/1a78f042.7689b480.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2460],{22556:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var o=s(74848),i=s(28453);const t={title:"Manage peers",sidebar_position:3,description:"Managing Besu peers",tags:["public networks","private networks"]},r="Manage peers",c={id:"public-networks/how-to/connect/manage-peers",title:"Manage peers",description:"Managing Besu peers",source:"@site/docs/public-networks/how-to/connect/manage-peers.md",sourceDirName:"public-networks/how-to/connect",slug:"/public-networks/how-to/connect/manage-peers",permalink:"/public-networks/how-to/connect/manage-peers",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/connect/manage-peers.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Manage peers",sidebar_position:3,description:"Managing Besu peers",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Configure ports",permalink:"/public-networks/how-to/connect/configure-ports"},next:{title:"Specify NAT method",permalink:"/public-networks/how-to/connect/specify-nat"}},l={},d=[{value:"P2P discovery process",id:"p2p-discovery-process",level:2},{value:"Limit peers",id:"limit-peers",level:2},{value:"Allowlist peers",id:"allowlist-peers",level:2},{value:"Limit remote connections",id:"limit-remote-connections",level:2},{value:"Monitor peer connections",id:"monitor-peer-connections",level:2},{value:"List node connections",id:"list-node-connections",level:2},{value:"Disable discovery",id:"disable-discovery",level:2},{value:"Troubleshoot",id:"troubleshoot",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"manage-peers",children:"Manage peers"})}),"\n",(0,o.jsxs)(n.p,{children:["Besu peer-to-peer (P2P) discovery happens periodically based on the number of peers in a\nnetwork and the node's ",(0,o.jsx)(n.a,{href:"#limit-peers",children:"peer limit"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"The frequency of discovery isn't configurable, but you can:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"#limit-remote-connections",children:"Limit remote connections"})," in public networks."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"#allowlist-peers",children:"Allowlist peers by IP subnet"})," to create a private network of peers across public\nnetworks."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#random-peer-priority-enabled",children:"Randomly prioritize connections"})," in\nsmall, stable networks."]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsxs)(n.p,{children:["You can use ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#admin_addpeer",children:(0,o.jsx)(n.code,{children:"admin_addPeer"})})," to attempt a specific\nconnection, but this isn't P2P discovery."]})}),"\n",(0,o.jsxs)(n.p,{children:["In private networks, we recommend\n",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"using bootnodes"})," to initially discover peers."]}),"\n",(0,o.jsx)(n.h2,{id:"p2p-discovery-process",children:"P2P discovery process"}),"\n",(0,o.jsxs)(n.p,{children:["The P2P discovery process requires ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports#p2p-networking",children:"ports to be open to UDP and TCP traffic"}),".\nIf you have a firewall in place, keep those ports open to allow traffic in and out.\nIf you are running a node at home on your network, ensure that your router has those ports open."]}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"discovery"})," stack uses UDP to keep peer discovery lightweight and quick.\nIt only allows a node to find peers and connect to them, without any additional overhead.\nOnce peers have bonded, the data exchange between them is complex and needs a fully featured\nprotocol to support error checking and retries, so the ",(0,o.jsx)(n.code,{children:"devP2P"})," stack uses TCP."]}),"\n",(0,o.jsxs)(n.p,{children:["Both stacks work in parallel: the ",(0,o.jsx)(n.code,{children:"discovery"})," stack adds new peers to the network, and the ",(0,o.jsx)(n.code,{children:"devP2P"}),"\nstack enables interactions and data flow between them.\nIn detail, the P2P discovery process is as follows:"]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["When Besu starts up it advertises its presence and details (including the enode) using UDP before\nestablishing a formal connection with any peer (log messages look like ",(0,o.jsx)(n.code,{children:"Enode URL enode://...."}),")."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Besu attempts to connect to the network's bootnodes (a set of predefined nodes used to help\nbootstrap discovery)."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Once a connection with a bootnode is established using UDP (",(0,o.jsx)(n.code,{children:"ping/pong"})," handshake messages in the\ndebug and trace logs), Besu requests a list of neighbors (potential peers) from the bootnode\n(",(0,o.jsx)(n.code,{children:"find node"})," messages in the debug and trace logs)."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Besu attempts to connect to each peer using TCP, and get status information from them \u2013 such\nas network details, what the peer believes to be the current chain head, and its list of neighbors.\nFrom this point on any traffic to that peer is only done using TCP."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Depending on the ",(0,o.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node",children:"synchronization method"}),", a common block\n(the pivot block) is selected that all connected peers (default of 5) have, and Besu syncs from\nthat block till it gets to chain head.\nLog messages look like ",(0,o.jsx)(n.code,{children:"Downloading world state from peers for pivot block ......."}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Besu repeats the same process for each peer in step 4, and any new peers that come along\n(regardless of client)."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The more peers Besu is connected to, the more confident it is of having an accurate view of the network."}),"\n",(0,o.jsx)(n.h2,{id:"limit-peers",children:"Limit peers"}),"\n",(0,o.jsx)(n.p,{children:"You can limit peers to reduce the bandwidth, CPU time, and disk access Besu uses to manage and respond to peers."}),"\n",(0,o.jsxs)(n.p,{children:["To reduce the maximum number of peers, use the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#max-peers",children:(0,o.jsx)(n.code,{children:"--max-peers"})})," option. The default is 25."]}),"\n",(0,o.jsx)(n.h2,{id:"allowlist-peers",children:"Allowlist peers"}),"\n",(0,o.jsxs)(n.p,{children:["You can can define specific IP subnets permitted to interact with the node using the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#net-restrict",children:(0,o.jsx)(n.code,{children:"--net-restrict"})})," configuration. This restricts access to only those peers whose IP addresses fall within the allowed subnets. This is useful if you maintain a set of nodes and want to restrict which of those can connect to external nodes."]}),"\n",(0,o.jsx)(n.h2,{id:"limit-remote-connections",children:"Limit remote connections"}),"\n",(0,o.jsxs)(n.p,{children:["Prevent eclipse attacks when using ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,o.jsx)(n.code,{children:"--sync-mode"})})," and ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options##sync-min-peers-fast-sync-min-peers",children:(0,o.jsx)(n.code,{children:"--fast-sync-min-peers"})})," on public networks by enabling the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#remote-connections-limit-enabled",children:"remote connection limits"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["In private and permissioned networks with only trusted peers, enabling the remote connection limits is unnecessary and might adversely affect the speed at which nodes can join the network. Limiting remote connections can cause a closed group of peers to form when the number of nodes in the network is slightly higher than ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#max-peers",children:(0,o.jsx)(n.code,{children:"--max-peers"})}),". The nodes in this closed group are all connected to each other and can't accept more connections."]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["You can use ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#random-peer-priority-enabled",children:(0,o.jsx)(n.code,{children:"--random-peer-priority-enabled"})})," to help prevent closed groups of peers in small, stable networks."]})}),"\n",(0,o.jsx)(n.h2,{id:"monitor-peer-connections",children:"Monitor peer connections"}),"\n",(0,o.jsx)(n.p,{children:"JSON-RPC API methods to monitor peer connections include:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,o.jsx)(n.code,{children:"net_peerCount"})}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#admin_peers",children:(0,o.jsx)(n.code,{children:"admin_peers"})}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#debug_metrics",children:(0,o.jsx)(n.code,{children:"debug_metrics"})}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Each peer entry returned by ",(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#admin_peers",children:(0,o.jsx)(n.code,{children:"admin_peers"})})," includes a ",(0,o.jsx)(n.code,{children:"protocols"})," section. Use the information in the ",(0,o.jsx)(n.code,{children:"protocols"})," section to:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Determine the health of peers. For example, an external process can use ",(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#admin_peers",children:(0,o.jsx)(n.code,{children:"admin_peers"})})," and ",(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#admin_removepeer",children:(0,o.jsx)(n.code,{children:"admin_removePeer"})})," to disconnect from peers that are stalled at a single difficulty for an extended period of time."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Monitor node health. For example, if peers report increasing difficulties but the node is stuck at the same block number, the node may be on a different fork to most peers."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Determine which protocol level peers are communicating with. For example, you can see if ",(0,o.jsx)(n.code,{children:'"version": 65'})," is being used to reduce transaction sharing traffic."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"list-node-connections",children:"List node connections"}),"\n",(0,o.jsxs)(n.p,{children:["The default logging configuration doesn't list node connection and disconnection messages. To enable listing them, set the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#logging",children:(0,o.jsx)(n.code,{children:"--logging"})})," option to ",(0,o.jsx)(n.code,{children:"DEBUG"}),". For more verbosity, set the option to ",(0,o.jsx)(n.code,{children:"TRACE"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The console logs connection and disconnection events when the log level is ",(0,o.jsx)(n.code,{children:"DEBUG"})," or higher. If the message ",(0,o.jsx)(n.code,{children:"Successfully accepted connection from ..."})," displays, connections are getting through the firewalls."]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Sample log output"',children:"2018-10-16 12:37:35.479-04:00 | nioEventLoopGroup-3-1 | INFO | NettyP2PNetwork | Successfully accepted connection from 0xa979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c\n"})}),"\n",(0,o.jsx)(n.h2,{id:"disable-discovery",children:"Disable discovery"}),"\n",(0,o.jsxs)(n.p,{children:["To disable P2P discovery, set the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#discovery-enabled",children:(0,o.jsx)(n.code,{children:"--discovery-enabled"})})," option to ",(0,o.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["With discovery disabled, peers can't open connections with the node unless they were previously discovered or manually peered (for example, using ",(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#admin_addpeer",children:(0,o.jsx)(n.code,{children:"admin_addPeer"})}),"). ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"Static nodes"})," can also open connections."]}),"\n",(0,o.jsx)(n.h2,{id:"troubleshoot",children:"Troubleshoot"}),"\n",(0,o.jsxs)(n.p,{children:["If you encounter issues with peering, see the ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/peering",children:"troubleshoot peering documentation"}),", which helps you identify and resolve common problems that can occur during the peering process."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>c});var o=s(96540);const i={},t=o.createContext(i);function r(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b2e0ee9.74c7a494.js b/assets/js/1b2e0ee9.74c7a494.js new file mode 100644 index 00000000000..9b97c070906 --- /dev/null +++ b/assets/js/1b2e0ee9.74c7a494.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5430],{58087:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var r=i(74848),s=i(28453);const n={title:"Use client libraries",sidebar_position:2,description:"Besu client libraries",tags:["public networks","private networks"]},o="Use client libraries",l={id:"public-networks/how-to/develop/client-libraries",title:"Use client libraries",description:"Besu client libraries",source:"@site/docs/public-networks/how-to/develop/client-libraries.md",sourceDirName:"public-networks/how-to/develop",slug:"/public-networks/how-to/develop/client-libraries",permalink:"/public-networks/how-to/develop/client-libraries",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/develop/client-libraries.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use client libraries",sidebar_position:2,description:"Besu client libraries",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use Hardhat",permalink:"/public-networks/how-to/develop/hardhat"},next:{title:"Configure mining",permalink:"/public-networks/how-to/use-pow/mining"}},a={},c=[];function p(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"use-client-libraries",children:"Use client libraries"})}),"\n",(0,r.jsxs)(t.p,{children:["Dapps use client libraries, such as ",(0,r.jsx)(t.a,{href:"https://github.com/ethereum/web3.js/",children:"web3.js"}),", ",(0,r.jsx)(t.a,{href:"https://github.com/web3j/web3j",children:"web3j"}),", or ",(0,r.jsx)(t.a,{href:"https://github.com/ethereum/ethereumj",children:"ethereumj"}),", to forward JSON-RPC requests to Besu. Any client library implementing core Ethereum RPC methods works with Besu."]}),"\n",(0,r.jsxs)(t.p,{children:["Use the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/use-privacy/web3js-quorum",children:"web3js-quorum library"})," with Besu for ",(0,r.jsx)(t.a,{href:"/private-networks/concepts/privacy/",children:"privacy features"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Client Libraries",src:i(84494).A+"",width:"1520",height:"1316"})}),"\n",(0,r.jsx)(t.p,{children:"Use client libraries to:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Create signed transactions"}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:"Create and send private transactions"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/public-networks/how-to/send-transactions#use-wallets-for-key-management",children:"Besu does not support key management inside the client"}),"."]})})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},84494:(e,t,i)=>{i.d(t,{A:()=>r});const r=i.p+"assets/images/Hyperledger-Besu-Client-Libraries-cab8a506f122249c4d4d139436858697.png"},28453:(e,t,i)=>{i.d(t,{R:()=>o,x:()=>l});var r=i(96540);const s={},n=r.createContext(s);function o(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b5bfdea.4fa33498.js b/assets/js/1b5bfdea.4fa33498.js new file mode 100644 index 00000000000..73540f96810 --- /dev/null +++ b/assets/js/1b5bfdea.4fa33498.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[903],{96349:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var t=n(74848),o=n(28453);const r={description:"Besu API",tags:["public networks","private networks"]},i="Access the Besu API",c={id:"public-networks/how-to/use-besu-api/index",title:"Access the Besu API",description:"Besu API",source:"@site/docs/public-networks/how-to/use-besu-api/index.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/",permalink:"/public-networks/how-to/use-besu-api/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Besu API",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use a profile",permalink:"/public-networks/how-to/configure-besu/profile"},next:{title:"Use JSON-RPC over HTTP, WS, and IPC",permalink:"/public-networks/how-to/use-besu-api/json-rpc"}},l={},h=[{value:"Enable API access",id:"enable-api-access",level:2},{value:"Service hosts",id:"service-hosts",level:2},{value:"Service ports",id:"service-ports",level:2},{value:"Socket path",id:"socket-path",level:2},{value:"Host allowlist",id:"host-allowlist",level:2},{value:"Not supported by Besu",id:"not-supported-by-besu",level:2},{value:"Account management",id:"account-management",level:3},{value:"Protocols",id:"protocols",level:3}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"access-the-besu-api",children:"Access the Besu API"})}),"\n",(0,t.jsxs)(s.p,{children:["Access the ",(0,t.jsx)(s.a,{href:"/public-networks/reference/api/",children:"Besu API"})," using:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"JSON-RPC over HTTP, WebSocket, or IPC"})}),"\n",(0,t.jsx)(s.li,{children:(0,t.jsx)(s.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub over WebSockets"})}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"/public-networks/how-to/use-besu-api/graphql",children:"GraphQL over HTTP"}),"."]}),"\n"]}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["HTTP and WebSocket responses are compact JSON by default. You can use ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#json-pretty-print-enabled",children:(0,t.jsx)(s.code,{children:"--json-pretty-print-enabled"})})," to pretty-print the output."]})}),"\n",(0,t.jsx)(s.p,{children:"The following sections provide information about JSON-RPC, RPC Pub/Sub, and GraphQL."}),"\n",(0,t.jsx)(s.h2,{id:"enable-api-access",children:"Enable API access"}),"\n",(0,t.jsxs)(s.p,{children:["To enable API access, use the ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,t.jsx)(s.code,{children:"--rpc-http-enabled"})}),", ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,t.jsx)(s.code,{children:"--ws-http-enabled"})}),", ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#graphql-http-enabled",children:(0,t.jsx)(s.code,{children:"--graphql-http-enabled"})}),", and ",(0,t.jsx)(s.code,{children:"--Xrpc-ipc-enabled"})," options."]}),"\n",(0,t.jsx)(s.admonition,{type:"caution",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"--Xrpc-ipc-enabled"})," is an early access option."]})}),"\n",(0,t.jsx)(s.h2,{id:"service-hosts",children:"Service hosts"}),"\n",(0,t.jsxs)(s.p,{children:["To specify the host the API service listens on, use the ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,t.jsx)(s.code,{children:"--rpc-http-host"})}),", ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-ws-host",children:(0,t.jsx)(s.code,{children:"--rpc-ws-host"})}),", and ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#graphql-http-host",children:(0,t.jsx)(s.code,{children:"--graphql-http-host"})})," options. The default host is ",(0,t.jsx)(s.code,{children:"127.0.0.1"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["To allow remote connections, set the host to ",(0,t.jsx)(s.code,{children:"0.0.0.0"}),"."]}),"\n",(0,t.jsx)(s.admonition,{type:"caution",children:(0,t.jsxs)(s.p,{children:["Setting the host to ",(0,t.jsx)(s.code,{children:"0.0.0.0"})," exposes the API service connection on your node to any remote connection. In a production environment, ensure you use a firewall to avoid exposing your node to the internet."]})}),"\n",(0,t.jsx)(s.h2,{id:"service-ports",children:"Service ports"}),"\n",(0,t.jsxs)(s.p,{children:["To specify the port the API service listens on, use the ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,t.jsx)(s.code,{children:"--rpc-http-port"})}),", ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#rpc-ws-port",children:(0,t.jsx)(s.code,{children:"--rpc-ws-port"})}),", and ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#graphql-http-port",children:(0,t.jsx)(s.code,{children:"--graphql-http-port"})})," options."]}),"\n",(0,t.jsx)(s.p,{children:"The default ports are:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"8545 for JSON-RPC over HTTP."}),"\n",(0,t.jsx)(s.li,{children:"8546 for JSON-RPC over WebSocket."}),"\n",(0,t.jsx)(s.li,{children:"8547 for GraphQL over HTTP."}),"\n"]}),"\n",(0,t.jsxs)(s.p,{children:["Ports must be ",(0,t.jsx)(s.a,{href:"/public-networks/how-to/connect/configure-ports",children:"exposed appropriately"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"socket-path",children:"Socket path"}),"\n",(0,t.jsxs)(s.p,{children:["To specify the socket path for the IPC socket, use the ",(0,t.jsx)(s.code,{children:"--Xrpc-ipc-path"})," option. The default path is ",(0,t.jsx)(s.code,{children:"besu.ipc"})," in the Besu data directory."]}),"\n",(0,t.jsx)(s.admonition,{type:"caution",children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.code,{children:"--Xrpc-ipc-path"})," is an early access option."]})}),"\n",(0,t.jsx)(s.h2,{id:"host-allowlist",children:"Host allowlist"}),"\n",(0,t.jsxs)(s.p,{children:["To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the ",(0,t.jsx)(s.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,t.jsx)(s.code,{children:"--host-allowlist"})})," option matches the request host headers. By default, Besu accepts requests and connections from ",(0,t.jsx)(s.code,{children:"localhost"})," and ",(0,t.jsx)(s.code,{children:"127.0.0.1"}),"."]}),"\n",(0,t.jsx)(s.admonition,{type:"info",children:(0,t.jsxs)(s.p,{children:["This isn't a permissioning feature. To restrict access to the API, we recommend using the ",(0,t.jsx)(s.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Besu authentication mechanism"})," with username and password authentication or JWT public key authentication."]})}),"\n",(0,t.jsx)(s.p,{children:"If your application publishes RPC ports, specify the hostnames when starting Besu."}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"besu --host-allowlist=example.com\n"})}),"\n",(0,t.jsxs)(s.p,{children:["Specify ",(0,t.jsx)(s.code,{children:"*"})," for ",(0,t.jsx)(s.code,{children:"--host-allowlist"})," to effectively disable host protection."]}),"\n",(0,t.jsx)(s.admonition,{type:"caution",children:(0,t.jsxs)(s.p,{children:["Specifying ",(0,t.jsx)(s.code,{children:"*"})," for ",(0,t.jsx)(s.code,{children:"--host-allowlist"})," is not recommended for production code."]})}),"\n",(0,t.jsx)(s.h2,{id:"not-supported-by-besu",children:"Not supported by Besu"}),"\n",(0,t.jsx)(s.h3,{id:"account-management",children:"Account management"}),"\n",(0,t.jsx)(s.p,{children:"Account management relies on private key management in the client, which is not supported by Besu."}),"\n",(0,t.jsxs)(s.p,{children:["To send signed transactions, use ",(0,t.jsx)(s.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,t.jsx)(s.code,{children:"eth_sendRawTransaction"})}),". ",(0,t.jsx)(s.code,{children:"eth_sendTransaction"})," is not implemented."]}),"\n",(0,t.jsxs)(s.p,{children:["For ",(0,t.jsx)(s.a,{href:"/public-networks/how-to/send-transactions#use-wallets-for-key-management",children:"account management"}),", use third-party wallets."]}),"\n",(0,t.jsx)(s.h3,{id:"protocols",children:"Protocols"}),"\n",(0,t.jsx)(s.p,{children:"Besu does not support the Whisper and Swarm protocols."})]})}function p(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>c});var t=n(96540);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1b73c7ba.ff90cfe1.js b/assets/js/1b73c7ba.ff90cfe1.js new file mode 100644 index 00000000000..cf78b66fd74 --- /dev/null +++ b/assets/js/1b73c7ba.ff90cfe1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[973],{10512:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var s=r(74848),t=r(28453);const o={description:"Private networks how to overview",tags:["private networks"]},i="How to",l={id:"private-networks/how-to/index",title:"How to",description:"Private networks how to overview",source:"@site/docs/private-networks/how-to/index.md",sourceDirName:"private-networks/how-to",slug:"/private-networks/how-to/",permalink:"/private-networks/how-to/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Private networks how to overview",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Start Besu",permalink:"/private-networks/get-started/start-node"},next:{title:"Consensus protocols",permalink:"/private-networks/how-to/configure/consensus/"}},c={},a=[];function h(e){const n={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"how-to",children:"How to"})}),"\n",(0,s.jsx)(n.p,{children:"This section provides instructional content for private network features."}),"\n",(0,s.jsxs)(n.p,{children:["The following features are shared with ",(0,s.jsx)(n.a,{href:"/public-networks/",children:"public networks"})," and the content can be found in the public networks section:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Configure and manage:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"Use a configuration file"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-ha/",children:"Configure high availability"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-pow/mining",children:"Configure mining"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/",children:"Use the Besu API"}),":","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"Use JSON-RPC over HTTP, WS, and IPC"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"Use RPC Pub/Sub over WS"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/graphql",children:"Use GraphQL over HTTP"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Authenticate JSON-RPC requests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:"Access logs using JSON-RPC API"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Find and connect to peers:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"Configure static nodes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"Configure ports"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/manage-peers",children:"Manage peers"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:"Specify NAT method"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Configure Java:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-java/install-update-java",children:"Install and update Java"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-java/pass-jvm-options",children:"Pass JVM options"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-java/manage-memory",children:"Manage JVM memory"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-java/java-flight-recorder",children:"Use Java Flight Recorder"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Develop dapps:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/develop/hardhat",children:"Use Hardhat"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/develop/client-libraries",children:"Use client libraries"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Troubleshoot:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/evm-tool",children:"Use EVM tool"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/trace-transactions",children:"Trace transactions"})}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>l});var s=r(96540);const t={},o=s.createContext(t);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.310ae4b5.js b/assets/js/1df93b7f.310ae4b5.js new file mode 100644 index 00000000000..0cafac54a78 --- /dev/null +++ b/assets/js/1df93b7f.310ae4b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4583],{52989:(e,n,s)=>{s.r(n),s.d(n,{default:()=>u});s(96540);var t=s(59504),r=s(28774),i=s(51107),o=s(20053),c=s(74848);const a=[{title:"\ud83c\udf10 Public networks",link:"/public-networks",description:(0,c.jsx)(c.Fragment,{children:"Run Besu as an execution client on Ethereum Mainnet and Ethereum public testnets, such as Holesky and Sepolia."}),buttonName:"Get started",buttonType:"secondary"},{title:"\ud83d\udd10 Private networks",link:"/private-networks",description:(0,c.jsx)(c.Fragment,{children:"Use private networks for enterprise applications requiring secure, high-performance transaction processing."}),buttonName:"Get started",buttonType:"secondary"}];function d(e){let{title:n,link:s,description:t,buttonName:a,buttonType:d}=e;return(0,c.jsx)("div",{className:(0,o.A)("col","margin-top--md"),children:(0,c.jsx)("div",{className:"card-demo",children:(0,c.jsxs)("div",{className:"card",children:[(0,c.jsx)("div",{className:"card__header",children:(0,c.jsx)(i.A,{as:"h3",children:n})}),(0,c.jsx)("div",{className:"card__body",children:(0,c.jsx)("p",{children:t})}),(0,c.jsx)("div",{className:"card__footer",children:(0,c.jsx)(r.A,{className:(0,o.A)("button","button--"+d,"button--block"),to:s,children:a})})]})})})}function l(){return(0,c.jsx)("section",{className:(0,o.A)("margin-top--lg","margin-bottom--lg"),children:(0,c.jsxs)("div",{className:"container homepageContainer",children:[(0,c.jsx)(i.A,{as:"h1",className:"homepageTitle",children:"Hyperledger Besu Ethereum client"}),(0,c.jsx)("p",{children:"Hyperledger Besu is an open source Ethereum client developed under the Apache 2.0 license and written in Java. It runs on public and private networks:"}),(0,c.jsx)("div",{className:"row",children:a.map(((e,n)=>(0,c.jsx)(d,{...e},n)))})]})})}function h(){return(0,c.jsxs)("div",{className:"container homepageContainer margin-bottom--xl",children:[(0,c.jsx)(i.A,{as:"h2",children:"What does Besu support?"}),(0,c.jsxs)("p",{children:["Besu includes a"," ",(0,c.jsx)(r.A,{href:"/public-networks/reference/cli/options",children:"command line interface"})," ","and ",(0,c.jsx)(r.A,{to:"/public-networks/how-to/use-besu-api",children:"JSON-RPC API"})," for running, maintaining, debugging, and monitoring nodes in an Ethereum network. You can use the API via RPC over HTTP or via WebSocket. Besu also supports Pub/Sub."]}),(0,c.jsxs)("p",{children:["Besu supports common smart contract and dapp development, deployment, and operational use cases, using tools such as"," ",(0,c.jsx)(r.A,{to:"https://github.com/NomicFoundation/hardhat",children:"Hardhat"}),","," ",(0,c.jsx)(r.A,{to:"https://github.com/ethereum/remix",children:"Remix"}),", and"," ",(0,c.jsx)(r.A,{to:"https://web3j.io/",children:"web3j"}),". The client supports common JSON-RPC API methods such as ",(0,c.jsx)("code",{children:"eth"}),", ",(0,c.jsx)("code",{children:"net"}),","," ",(0,c.jsx)("code",{children:"web3"}),", ",(0,c.jsx)("code",{children:"debug"}),", and ",(0,c.jsx)("code",{children:"miner"}),"."]}),(0,c.jsxs)("p",{children:["Besu doesn't support key management inside the client. You can use"," ",(0,c.jsx)(r.A,{to:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," with Besu to access your keystore and sign transactions."]}),(0,c.jsx)(i.A,{as:"h2",children:"Questions?"}),(0,c.jsxs)("p",{children:["If you have any questions about Besu, ask on the ",(0,c.jsx)("b",{children:"besu"})," channel on"," ",(0,c.jsx)(r.A,{to:"https://discord.gg/hyperledger",children:"Hyperledger Discord"}),"."]}),(0,c.jsxs)("p",{children:["Learn more about the"," ",(0,c.jsx)(r.A,{to:"https://www.hyperledger.org/Linkbout",children:"Hyperledger Foundation"}),". You can"," ",(0,c.jsx)(r.A,{to:"https://wiki.hyperledger.org/display/BESU/Documentation",children:"contribute to the documentation"})," ","or to"," ",(0,c.jsx)(r.A,{to:"https://wiki.hyperledger.org/display/BESU/Contributing",children:"Besu itself"}),"."]})]})}function u(){return(0,c.jsx)(t.A,{title:"Welcome",children:(0,c.jsxs)("main",{children:[(0,c.jsx)(l,{}),(0,c.jsx)(h,{})]})})}}}]); \ No newline at end of file diff --git a/assets/js/1f29a5e5.194d5ac0.js b/assets/js/1f29a5e5.194d5ac0.js new file mode 100644 index 00000000000..6ab28a6f802 --- /dev/null +++ b/assets/js/1f29a5e5.194d5ac0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2093],{76658:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=r(74848),n=r(28453),o=r(11470),s=r(19365);const i={title:"Add and removing IBFT 2.0 validators",sidebar_position:1,description:"Adding and removing IBFT 2.0 validators",tags:["private networks"]},d="Add and remove IBFT 2.0 validators",l={id:"private-networks/tutorials/ibft/validators",title:"Add and removing IBFT 2.0 validators",description:"Adding and removing IBFT 2.0 validators",source:"@site/docs/private-networks/tutorials/ibft/validators.md",sourceDirName:"private-networks/tutorials/ibft",slug:"/private-networks/tutorials/ibft/validators",permalink:"/private-networks/tutorials/ibft/validators",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/ibft/validators.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Add and removing IBFT 2.0 validators",sidebar_position:1,description:"Adding and removing IBFT 2.0 validators",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a private network using IBFT 2.0",permalink:"/private-networks/tutorials/ibft/"},next:{title:"Create a Clique network",permalink:"/private-networks/tutorials/clique"}},c={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Add a validator",id:"add-a-validator",level:2},{value:"1. Create directories",id:"1-create-directories",level:3},{value:"2. Start the node",id:"2-start-the-node",level:3},{value:"3. Copy the address of the node",id:"3-copy-the-address-of-the-node",level:3},{value:"4. Propose adding the new validator",id:"4-propose-adding-the-new-validator",level:3},{value:"5. Verify the addition of the new validator",id:"5-verify-the-addition-of-the-new-validator",level:3},{value:"Remove a validator",id:"remove-a-validator",level:2}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"add-and-remove-ibft-20-validators",children:"Add and remove IBFT 2.0 validators"})}),"\n",(0,a.jsxs)(t.p,{children:["This example walks through ",(0,a.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"adding and removing an IBFT 2.0 validator"}),"."]}),"\n",(0,a.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:(0,a.jsx)(t.a,{href:"/private-networks/tutorials/ibft/",children:"IBFT 2.0 network as configured in the IBFT 2.0 tutorial"})}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"add-a-validator",children:"Add a validator"}),"\n",(0,a.jsx)(t.h3,{id:"1-create-directories",children:"1. Create directories"}),"\n",(0,a.jsx)(t.p,{children:"Create a working directory and a data directory for the new node that needs to be added:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"mkdir -p Node-5/data\n"})}),"\n",(0,a.jsx)(t.h3,{id:"2-start-the-node",children:"2. Start the node"}),"\n",(0,a.jsxs)(t.p,{children:["Change into the working directory for the new Node-5 and start the node, specifying the ",(0,a.jsx)(t.a,{href:"/private-networks/tutorials/ibft/#6-start-the-first-node-as-the-bootnode",children:"Node-1 enode URL"})," as the bootnode:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30307 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8549\n'})}),"\n",(0,a.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["The data directory for Node-5 using the ",(0,a.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,a.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,a.jsxs)(t.li,{children:["A different port to Node-1 for P2P discovery using the ",(0,a.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,a.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,a.jsxs)(t.li,{children:["A different port to Node-1 for HTTP JSON-RPC using the ",(0,a.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,a.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,a.jsxs)(t.li,{children:["The enode URL of Node-1 using the ",(0,a.jsx)(t.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,a.jsx)(t.code,{children:"--bootnodes"})})," option."]}),"\n",(0,a.jsxs)(t.li,{children:["Other options as for ",(0,a.jsx)(t.a,{href:"/private-networks/tutorials/ibft/#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"3-copy-the-address-of-the-node",children:"3. Copy the address of the node"}),"\n",(0,a.jsx)(t.p,{children:"Copy the address of the node. You can find the address in the logs when starting the new node:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"2021-05-28 09:49:00.881+10:00 | main | INFO | DefaultP2PNetwork | Node address 0x90626e6a67445aabf1c0615410d108d4733aa90b\n"})}),"\n",(0,a.jsxs)(t.p,{children:["Or use the ",(0,a.jsx)(t.a,{href:"/public-networks/reference/cli/subcommands#export-address",children:(0,a.jsx)(t.code,{children:"public-key export-address"})})," subcommand:"]}),"\n",(0,a.jsxs)(o.A,{children:[(0,a.jsx)(s.A,{value:"Subcommand",label:"Subcommand",default:!0,children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"besu --data-path=IBFT-Network/Node-5/data public-key export-address\n"})})}),(0,a.jsx)(s.A,{value:"Output",label:"Output",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:"0x90626e6a67445aabf1c0615410d108d4733aa90b\n"})})})]}),"\n",(0,a.jsx)(t.h3,{id:"4-propose-adding-the-new-validator",children:"4. Propose adding the new validator"}),"\n",(0,a.jsxs)(t.p,{children:["Propose adding the new validator from more than half the number of current validators, using ",(0,a.jsx)(t.a,{href:"/public-networks/reference/api/#ibft_proposevalidatorvote",children:(0,a.jsx)(t.code,{children:"ibft_proposeValidatorVote"})}),", specifying the address of the proposed validator and ",(0,a.jsx)(t.code,{children:"true"}),":"]}),"\n",(0,a.jsxs)(o.A,{children:[(0,a.jsx)(s.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["0x90626e6a67445aabf1c0615410d108d4733aa90b", true], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,a.jsx)(s.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,a.jsx)(t.p,{children:"Repeat the proposal process for this candidate node from at least two of the other nodes."}),"\n",(0,a.jsx)(t.h3,{id:"5-verify-the-addition-of-the-new-validator",children:"5. Verify the addition of the new validator"}),"\n",(0,a.jsxs)(t.p,{children:["Verify that the new validator is now in the list of validators using ",(0,a.jsx)(t.a,{href:"/public-networks/reference/api/#ibft_getvalidatorsbyblocknumber",children:(0,a.jsx)(t.code,{children:"ibft_getValidatorsByBlockNumber"})}),":"]}),"\n",(0,a.jsxs)(o.A,{children:[(0,a.jsx)(s.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,a.jsx)(s.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-json",children:'[\n "0x189d23d201b03ae1cf9113672df29a5d672aefa3",\n "0x2aabbc1bb9bacef60a09764d1a1f4f04a47885c1",\n "0x44b07d2c28b8ed8f02b45bd84ac7d9051b3349e6",\n "0x4c1ccd426833b9782729a212c857f2f03b7b4c0d",\n "0x90626e6a67445aabf1c0615410d108d4733aa90b"\n]\n'})})})]}),"\n",(0,a.jsx)(t.p,{children:"The list of validators contains 5 addresses now."}),"\n",(0,a.jsx)(t.h2,{id:"remove-a-validator",children:"Remove a validator"}),"\n",(0,a.jsxs)(t.p,{children:["The process for removing a validator is similar to ",(0,a.jsx)(t.a,{href:"#add-a-validator",children:"adding a validator"})," starting from step 2, except you specify ",(0,a.jsx)(t.code,{children:"false"})," as the second parameter of ",(0,a.jsx)(t.a,{href:"/public-networks/reference/api/#ibft_proposevalidatorvote",children:(0,a.jsx)(t.code,{children:"ibft_proposeValidatorVote"})}),"."]})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},19365:(e,t,r)=>{r.d(t,{A:()=>s});r(96540);var a=r(18215);const n={tabItem:"tabItem_Ymn6"};var o=r(74848);function s(e){let{children:t,hidden:r,className:s}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,a.A)(n.tabItem,s),hidden:r,children:t})}},11470:(e,t,r)=>{r.d(t,{A:()=>k});var a=r(96540),n=r(18215),o=r(23104),s=r(56347),i=r(205),d=r(57485),l=r(31682),c=r(70679);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,a.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:r,attributes:a,default:n}}=e;return{value:t,label:r,attributes:a,default:n}}))}(r);return function(e){const t=(0,l.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const n=(0,s.W6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,d.aZ)(o),(0,a.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function b(e){const{defaultValue:t,queryString:r=!1,groupId:n}=e,o=h(e),[s,d]=(0,a.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=r.find((e=>e.default))??r[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,u]=f({queryString:r,groupId:n}),[b,v]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,c.Dv)(r);return[n,(0,a.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:n}),m=(()=>{const e=l??b;return p({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{m&&d(m)}),[m]);return{selectedValue:s,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);d(e),u(e),v(e)}),[u,v,o]),tabValues:o}}var v=r(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=r(74848);function j(e){let{className:t,block:r,selectedValue:a,selectValue:s,tabValues:i}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),c=e=>{const t=e.currentTarget,r=d.indexOf(t),n=i[r].value;n!==a&&(l(t),s(n))},u=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=d.indexOf(e.currentTarget)+1;t=d[r]??d[0];break}case"ArrowLeft":{const r=d.indexOf(e.currentTarget)-1;t=d[r]??d[d.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.A)("tabs",{"tabs--block":r},t),children:i.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:a===t?0:-1,"aria-selected":a===t,ref:e=>d.push(e),onKeyDown:u,onClick:c,...o,className:(0,n.A)("tabs__item",m.tabItem,o?.className,{"tabs__item--active":a===t}),children:r??t},t)}))})}function g(e){let{lazy:t,children:r,selectedValue:o}=e;const s=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===o));return e?(0,a.cloneElement)(e,{className:(0,n.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==o})))})}function w(e){const t=b(e);return(0,x.jsxs)("div",{className:(0,n.A)("tabs-container",m.tabList),children:[(0,x.jsx)(j,{...t,...e}),(0,x.jsx)(g,{...t,...e})]})}function k(e){const t=(0,v.A)();return(0,x.jsx)(w,{...e,children:u(e.children)},String(t))}},28453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>i});var a=r(96540);const n={},o=a.createContext(n);function s(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),a.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2039806a.d6ddf1ad.js b/assets/js/2039806a.d6ddf1ad.js new file mode 100644 index 00000000000..f98c3638201 --- /dev/null +++ b/assets/js/2039806a.d6ddf1ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7698],{23207:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var i=s(74848),r=s(28453);const o={description:"Besu high availability",tags:["public networks","private networks"]},t="High availability of JSON-RPC and RPC Pub/Sub APIs",c={id:"public-networks/how-to/configure-ha/index",title:"High availability of JSON-RPC and RPC Pub/Sub APIs",description:"Besu high availability",source:"@site/docs/public-networks/how-to/configure-ha/index.md",sourceDirName:"public-networks/how-to/configure-ha",slug:"/public-networks/how-to/configure-ha/",permalink:"/public-networks/how-to/configure-ha/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-ha/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Besu high availability",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Configure logging",permalink:"/public-networks/how-to/monitor/logging"},next:{title:"Sample load balancer configurations",permalink:"/public-networks/how-to/configure-ha/sample-configuration"}},a={},d=[{value:"Determine when a node is ready",id:"determine-when-a-node-is-ready",level:2},{value:"Transaction nonces",id:"transaction-nonces",level:2},{value:"Subscriptions",id:"subscriptions",level:2},{value:"Recover from dropped subscriptions",id:"recover-from-dropped-subscriptions",level:2},{value:"New headers",id:"new-headers",level:3},{value:"Logs",id:"logs",level:3},{value:"New pending transactions",id:"new-pending-transactions",level:3},{value:"Dropped pending transactions",id:"dropped-pending-transactions",level:3},{value:"Syncing",id:"syncing",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"high-availability-of-json-rpc-and-rpc-pubsub-apis",children:"High availability of JSON-RPC and RPC Pub/Sub APIs"})}),"\n",(0,i.jsxs)(n.p,{children:["To enable high availability to the ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub API over WebSocket"})," or the ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"JSON-RPC API"}),", run and synchronize more than one Besu node to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Load Balancer",src:s(99313).A+"",width:"1394",height:"1152"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["We don't recommend putting ",(0,i.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"})," behind a load balancer."]})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We recommend using load balancers over WebSockets because WebSockets are persistent connections associated with specific nodes. If you use load balancers configured in sticky mode over HTTP instead, the connection sticks to the associated node even when the node is congested and there is a lower load node available. If you use load balancers not configured in sticky mode over HTTP, the connections may switch from node to node, so some JSON-RPC requests may not provide expected results (for example, ",(0,i.jsxs)(n.a,{href:"/public-networks/reference/api/#admin-methods",children:[(0,i.jsx)(n.code,{children:"admin"})," methods"]}),", ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#net_enode",children:(0,i.jsx)(n.code,{children:"net_enode"})}),", ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,i.jsx)(n.code,{children:"net_peerCount"})}),", and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_syncing",children:(0,i.jsx)(n.code,{children:"eth_syncing"})}),")."]})}),"\n",(0,i.jsx)(n.h2,{id:"determine-when-a-node-is-ready",children:"Determine when a node is ready"}),"\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#readiness-and-liveness-endpoints",children:"readiness endpoint"})," to determine when a node is ready."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"The minimum number of peers and number of blocks from the best known block for determining if a node considered ready is deployment specific."})}),"\n",(0,i.jsx)(n.h2,{id:"transaction-nonces",children:"Transaction nonces"}),"\n",(0,i.jsxs)(n.p,{children:["Besu obtains the nonce for the next transaction using ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,i.jsx)(n.code,{children:"eth_getTransactionCount"})}),". The nonce depends on the transactions in the ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),". If sending ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,i.jsx)(n.code,{children:"eth_getTransactionCount"})})," and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,i.jsx)(n.code,{children:"eth_sendRawTransaction"})})," requests for a specific account to more than one node, the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,i.jsx)(n.code,{children:"eth_getTransactionCount"})})," results might be incorrect."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["If using ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:"private transactions"}),", retrieve the nonce using ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#priv_gettransactioncount",children:(0,i.jsx)(n.code,{children:"priv_getTransactionCount"})})," or ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#priv_geteeatransactioncount",children:(0,i.jsx)(n.code,{children:"priv_getEeaTransactionCount"})})," and send the private transactions using ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,i.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"To get correct nonces when distributing requests across a cluster, either:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Track the next nonce outside of the Besu node (as MetaMask does)."}),"\n",(0,i.jsx)(n.li,{children:"Configure the load balancer in sticky mode to send requests from a specific account to a single node, unless that node is unavailable."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"subscriptions",children:"Subscriptions"}),"\n",(0,i.jsx)(n.p,{children:"You can subscribe to events using:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub over WebSockets"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:"Filters over HTTP"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["We recommend using ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub over WebSocket"})," because WebSockets connections associate with a specific node and do not require using the load balancer in sticky mode."]}),"\n",(0,i.jsxs)(n.p,{children:["If using ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:"filters over HTTP"}),", configure the load balancer in sticky mode to associate the subscription with a specific node."]}),"\n",(0,i.jsx)(n.h2,{id:"recover-from-dropped-subscriptions",children:"Recover from dropped subscriptions"}),"\n",(0,i.jsx)(n.p,{children:"Dropped subscriptions can occur because of:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A disconnected WebSockets connection"}),"\n",(0,i.jsx)(n.li,{children:"The removal of the node serving the subscription from the ready pool."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If there is a dropped subscription, missed events might occur while reconnecting to a different node. To recover dropped messages, create another subscription and follow the process for that ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub#subscribe",children:"subscription type"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#new-headers",children:(0,i.jsx)(n.code,{children:"newHeads"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#logs",children:(0,i.jsx)(n.code,{children:"logs"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#new-pending-transactions",children:(0,i.jsx)(n.code,{children:"newPendingTransactions"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#dropped-pending-transactions",children:(0,i.jsx)(n.code,{children:"droppedPendingTransactions"})})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#syncing",children:(0,i.jsx)(n.code,{children:"syncing"})}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"new-headers",children:"New headers"}),"\n",(0,i.jsxs)(n.p,{children:["To request information on blocks from the last block before the subscription dropped to the first block received from the new subscription, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getblockbynumber",children:(0,i.jsx)(n.code,{children:"eth_getBlockByNumber"})}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"logs",children:"Logs"}),"\n",(0,i.jsxs)(n.p,{children:["To request logs from the block number of the last log received before the subscription dropped to the current chain head, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,i.jsx)(n.code,{children:"eth_getLogs"})}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"new-pending-transactions",children:"New pending transactions"}),"\n",(0,i.jsxs)(n.p,{children:["To request all pending transactions for the new node, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#txpool_besutransactions",children:(0,i.jsx)(n.code,{children:"txpool_besuTransactions"})}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Nodes do not all store the same pending transactions."})}),"\n",(0,i.jsx)(n.h3,{id:"dropped-pending-transactions",children:"Dropped pending transactions"}),"\n",(0,i.jsxs)(n.p,{children:["To request all pending transactions for the new node, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#txpool_besutransactions",children:(0,i.jsx)(n.code,{children:"txpool_besuTransactions"})}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Nodes do not all store the same pending transactions."})}),"\n",(0,i.jsx)(n.h3,{id:"syncing",children:"Syncing"}),"\n",(0,i.jsxs)(n.p,{children:["The syncing state of each node is specific to that node. To retrieve the syncing state of the new node, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_syncing",children:(0,i.jsx)(n.code,{children:"eth_syncing"})}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},99313:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/LoadBalancer-826ae74f729e635521c18cce763c439d.png"},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>c});var i=s(96540);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2130.95fd4ec8.js b/assets/js/2130.95fd4ec8.js new file mode 100644 index 00000000000..3027dac7ae7 --- /dev/null +++ b/assets/js/2130.95fd4ec8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2130],{22130:(e,t,r)=>{r.d(t,{default:()=>Ja});class a{constructor(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new a(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class n{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new n(t,a.range(this,e))}}class i{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var r,a,n="KaTeX parse error: "+e,o=t&&t.loc;if(o&&o.start<=o.end){var s=o.lexer.input;r=o.start,a=o.end,r===s.length?n+=" at end of input: ":n+=" at position "+(r+1)+": ";var l=s.slice(r,a).replace(/[^]/g,"$&\u0332");n+=(r>15?"\u2026"+s.slice(r-15,r):s.slice(0,r))+l+(a+15<s.length?s.slice(a,a+15)+"\u2026":s.slice(a))}var h=new Error(n);return h.name="ParseError",h.__proto__=i.prototype,h.position=r,null!=r&&null!=a&&(h.length=a-r),h.rawMessage=e,h}}i.prototype.__proto__=Error.prototype;var o=/([A-Z])/g,s={"&":"&",">":">","<":"<",'"':""","'":"'"},l=/[&><"']/g;var h=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},m={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(l,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:h,isCharacterBox:function(e){var t=h(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}},c={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function p(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class u{constructor(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},c)if(c.hasOwnProperty(t)){var r=c[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:p(r)}}reportNonstrict(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new i("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){var a=this.strict;if("function"==typeof a)try{a=a(e,t,r)}catch(n){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){var t=m.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}var r="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(r)}}class d{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return g[f[this.id]]}sub(){return g[v[this.id]]}fracNum(){return g[b[this.id]]}fracDen(){return g[y[this.id]]}cramp(){return g[x[this.id]]}text(){return g[w[this.id]]}isTight(){return this.size>=2}}var g=[new d(0,0,!1),new d(1,0,!0),new d(2,1,!1),new d(3,1,!0),new d(4,2,!1),new d(5,2,!0),new d(6,3,!1),new d(7,3,!0)],f=[4,5,4,5,6,7,6,7],v=[5,5,5,5,7,7,7,7],b=[2,3,4,5,6,7,6,7],y=[3,3,5,5,7,7,7,7],x=[1,1,3,3,5,5,7,7],w=[0,1,2,3,2,3,2,3],k={DISPLAY:g[0],TEXT:g[2],SCRIPT:g[4],SCRIPTSCRIPT:g[6]},S=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var M=[];function z(e){for(var t=0;t<M.length;t+=2)if(e>=M[t]&&e<=M[t+1])return!0;return!1}S.forEach((e=>e.blocks.forEach((e=>M.push(...e)))));var A=80,T={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};class B{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return m.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e}toMarkup(){for(var e="",t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e}toText(){return this.children.map((e=>e.toText())).join("")}}var C={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},N={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},q={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function I(e,t,r){if(!C[t])throw new Error("Font metrics not found for font: "+t+".");var a=e.charCodeAt(0),n=C[t][a];if(!n&&e[0]in q&&(a=q[e[0]].charCodeAt(0),n=C[t][a]),n||"text"!==r||z(a)&&(n=C[t][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var R={};var H=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],O=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],E=function(e,t){return t.size<2?e:H[e-1][t.size-1]};class L{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||L.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=O[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new L(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:E(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:O[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=E(L.BASESIZE,e);return this.size===t&&this.textSize===L.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==L.BASESIZE?["sizing","reset-size"+this.size,"size"+L.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){var t;if(!R[t=e>=5?0:e>=3?1:2]){var r=R[t]={cssEmPerMu:N.quad[t]/18};for(var a in N)N.hasOwnProperty(a)&&(r[a]=N[a][t])}return R[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}L.BASESIZE=6;var D={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},V={ex:!0,em:!0,mu:!0},P=function(e){return"string"!=typeof e&&(e=e.unit),e in D||e in V||"ex"===e},F=function(e,t){var r;if(e.unit in D)r=D[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new i("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},G=function(e){return+e.toFixed(4)+"em"},U=function(e){return e.filter((e=>e)).join(" ")},Y=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var a=t.getColor();a&&(this.style.color=a)}},X=function(e){var t=document.createElement(e);for(var r in t.className=U(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n<this.children.length;n++)t.appendChild(this.children[n].toNode());return t},W=function(e){var t="<"+e;this.classes.length&&(t+=' class="'+m.escape(U(this.classes))+'"');var r="";for(var a in this.style)this.style.hasOwnProperty(a)&&(r+=m.hyphenate(a)+":"+this.style[a]+";");for(var n in r&&(t+=' style="'+m.escape(r)+'"'),this.attributes)this.attributes.hasOwnProperty(n)&&(t+=" "+n+'="'+m.escape(this.attributes[n])+'"');t+=">";for(var i=0;i<this.children.length;i++)t+=this.children[i].toMarkup();return t+="</"+e+">"};class _{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,e,r,a),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"span")}toMarkup(){return W.call(this,"span")}}class j{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Y.call(this,t,a),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return m.contains(this.classes,e)}toNode(){return X.call(this,"a")}toMarkup(){return W.call(this,"a")}}class ${constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e='<img src="'+m.escape(this.src)+'" alt="'+m.escape(this.alt)+'"',t="";for(var r in this.style)this.style.hasOwnProperty(r)&&(t+=m.hyphenate(r)+":"+this.style[r]+";");return t&&(e+=' style="'+m.escape(t)+'"'),e+="'/>"}}var Z={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"};class K{constructor(e,t,r,a,n,i,o,s){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=t||0,this.depth=r||0,this.italic=a||0,this.skew=n||0,this.width=i||0,this.classes=o||[],this.style=s||{},this.maxFontSize=0;var l=function(e){for(var t=0;t<S.length;t++)for(var r=S[t],a=0;a<r.blocks.length;a++){var n=r.blocks[a];if(e>=n[0]&&e<=n[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=Z[this.text])}hasClass(e){return m.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=G(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=U(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="<span";this.classes.length&&(e=!0,t+=' class="',t+=m.escape(U(this.classes)),t+='"');var r="";for(var a in this.italic>0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=m.hyphenate(a)+":"+this.style[a]+";");r&&(e=!0,t+=' style="'+m.escape(r)+'"');var n=m.escape(this.text);return e?(t+=">",t+=n,t+="</span>"):n}}class J{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="'+m.escape(this.attributes[t])+'"');e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</svg>"}}class Q{constructor(e,t){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=t}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","path");return this.alternate?e.setAttribute("d",this.alternate):e.setAttribute("d",T[this.pathName]),e}toMarkup(){return this.alternate?'<path d="'+m.escape(this.alternate)+'"/>':'<path d="'+m.escape(T[this.pathName])+'"/>'}}class ee{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){var e="<line";for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="'+m.escape(this.attributes[t])+'"');return e+="/>"}}function te(e){if(e instanceof K)return e;throw new Error("Expected symbolNode but got "+String(e)+".")}var re={bin:1,close:1,inner:1,open:1,punct:1,rel:1},ae={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},ne={math:{},text:{}};function ie(e,t,r,a,n,i){ne[e][n]={font:t,group:r,replace:a},i&&a&&(ne[e][a]=ne[e][n])}var oe="math",se="text",le="main",he="ams",me="accent-token",ce="bin",pe="close",ue="inner",de="mathord",ge="op-token",fe="open",ve="punct",be="rel",ye="spacing",xe="textord";ie(oe,le,be,"\u2261","\\equiv",!0),ie(oe,le,be,"\u227a","\\prec",!0),ie(oe,le,be,"\u227b","\\succ",!0),ie(oe,le,be,"\u223c","\\sim",!0),ie(oe,le,be,"\u22a5","\\perp"),ie(oe,le,be,"\u2aaf","\\preceq",!0),ie(oe,le,be,"\u2ab0","\\succeq",!0),ie(oe,le,be,"\u2243","\\simeq",!0),ie(oe,le,be,"\u2223","\\mid",!0),ie(oe,le,be,"\u226a","\\ll",!0),ie(oe,le,be,"\u226b","\\gg",!0),ie(oe,le,be,"\u224d","\\asymp",!0),ie(oe,le,be,"\u2225","\\parallel"),ie(oe,le,be,"\u22c8","\\bowtie",!0),ie(oe,le,be,"\u2323","\\smile",!0),ie(oe,le,be,"\u2291","\\sqsubseteq",!0),ie(oe,le,be,"\u2292","\\sqsupseteq",!0),ie(oe,le,be,"\u2250","\\doteq",!0),ie(oe,le,be,"\u2322","\\frown",!0),ie(oe,le,be,"\u220b","\\ni",!0),ie(oe,le,be,"\u221d","\\propto",!0),ie(oe,le,be,"\u22a2","\\vdash",!0),ie(oe,le,be,"\u22a3","\\dashv",!0),ie(oe,le,be,"\u220b","\\owns"),ie(oe,le,ve,".","\\ldotp"),ie(oe,le,ve,"\u22c5","\\cdotp"),ie(oe,le,xe,"#","\\#"),ie(se,le,xe,"#","\\#"),ie(oe,le,xe,"&","\\&"),ie(se,le,xe,"&","\\&"),ie(oe,le,xe,"\u2135","\\aleph",!0),ie(oe,le,xe,"\u2200","\\forall",!0),ie(oe,le,xe,"\u210f","\\hbar",!0),ie(oe,le,xe,"\u2203","\\exists",!0),ie(oe,le,xe,"\u2207","\\nabla",!0),ie(oe,le,xe,"\u266d","\\flat",!0),ie(oe,le,xe,"\u2113","\\ell",!0),ie(oe,le,xe,"\u266e","\\natural",!0),ie(oe,le,xe,"\u2663","\\clubsuit",!0),ie(oe,le,xe,"\u2118","\\wp",!0),ie(oe,le,xe,"\u266f","\\sharp",!0),ie(oe,le,xe,"\u2662","\\diamondsuit",!0),ie(oe,le,xe,"\u211c","\\Re",!0),ie(oe,le,xe,"\u2661","\\heartsuit",!0),ie(oe,le,xe,"\u2111","\\Im",!0),ie(oe,le,xe,"\u2660","\\spadesuit",!0),ie(oe,le,xe,"\xa7","\\S",!0),ie(se,le,xe,"\xa7","\\S"),ie(oe,le,xe,"\xb6","\\P",!0),ie(se,le,xe,"\xb6","\\P"),ie(oe,le,xe,"\u2020","\\dag"),ie(se,le,xe,"\u2020","\\dag"),ie(se,le,xe,"\u2020","\\textdagger"),ie(oe,le,xe,"\u2021","\\ddag"),ie(se,le,xe,"\u2021","\\ddag"),ie(se,le,xe,"\u2021","\\textdaggerdbl"),ie(oe,le,pe,"\u23b1","\\rmoustache",!0),ie(oe,le,fe,"\u23b0","\\lmoustache",!0),ie(oe,le,pe,"\u27ef","\\rgroup",!0),ie(oe,le,fe,"\u27ee","\\lgroup",!0),ie(oe,le,ce,"\u2213","\\mp",!0),ie(oe,le,ce,"\u2296","\\ominus",!0),ie(oe,le,ce,"\u228e","\\uplus",!0),ie(oe,le,ce,"\u2293","\\sqcap",!0),ie(oe,le,ce,"\u2217","\\ast"),ie(oe,le,ce,"\u2294","\\sqcup",!0),ie(oe,le,ce,"\u25ef","\\bigcirc",!0),ie(oe,le,ce,"\u2219","\\bullet",!0),ie(oe,le,ce,"\u2021","\\ddagger"),ie(oe,le,ce,"\u2240","\\wr",!0),ie(oe,le,ce,"\u2a3f","\\amalg"),ie(oe,le,ce,"&","\\And"),ie(oe,le,be,"\u27f5","\\longleftarrow",!0),ie(oe,le,be,"\u21d0","\\Leftarrow",!0),ie(oe,le,be,"\u27f8","\\Longleftarrow",!0),ie(oe,le,be,"\u27f6","\\longrightarrow",!0),ie(oe,le,be,"\u21d2","\\Rightarrow",!0),ie(oe,le,be,"\u27f9","\\Longrightarrow",!0),ie(oe,le,be,"\u2194","\\leftrightarrow",!0),ie(oe,le,be,"\u27f7","\\longleftrightarrow",!0),ie(oe,le,be,"\u21d4","\\Leftrightarrow",!0),ie(oe,le,be,"\u27fa","\\Longleftrightarrow",!0),ie(oe,le,be,"\u21a6","\\mapsto",!0),ie(oe,le,be,"\u27fc","\\longmapsto",!0),ie(oe,le,be,"\u2197","\\nearrow",!0),ie(oe,le,be,"\u21a9","\\hookleftarrow",!0),ie(oe,le,be,"\u21aa","\\hookrightarrow",!0),ie(oe,le,be,"\u2198","\\searrow",!0),ie(oe,le,be,"\u21bc","\\leftharpoonup",!0),ie(oe,le,be,"\u21c0","\\rightharpoonup",!0),ie(oe,le,be,"\u2199","\\swarrow",!0),ie(oe,le,be,"\u21bd","\\leftharpoondown",!0),ie(oe,le,be,"\u21c1","\\rightharpoondown",!0),ie(oe,le,be,"\u2196","\\nwarrow",!0),ie(oe,le,be,"\u21cc","\\rightleftharpoons",!0),ie(oe,he,be,"\u226e","\\nless",!0),ie(oe,he,be,"\ue010","\\@nleqslant"),ie(oe,he,be,"\ue011","\\@nleqq"),ie(oe,he,be,"\u2a87","\\lneq",!0),ie(oe,he,be,"\u2268","\\lneqq",!0),ie(oe,he,be,"\ue00c","\\@lvertneqq"),ie(oe,he,be,"\u22e6","\\lnsim",!0),ie(oe,he,be,"\u2a89","\\lnapprox",!0),ie(oe,he,be,"\u2280","\\nprec",!0),ie(oe,he,be,"\u22e0","\\npreceq",!0),ie(oe,he,be,"\u22e8","\\precnsim",!0),ie(oe,he,be,"\u2ab9","\\precnapprox",!0),ie(oe,he,be,"\u2241","\\nsim",!0),ie(oe,he,be,"\ue006","\\@nshortmid"),ie(oe,he,be,"\u2224","\\nmid",!0),ie(oe,he,be,"\u22ac","\\nvdash",!0),ie(oe,he,be,"\u22ad","\\nvDash",!0),ie(oe,he,be,"\u22ea","\\ntriangleleft"),ie(oe,he,be,"\u22ec","\\ntrianglelefteq",!0),ie(oe,he,be,"\u228a","\\subsetneq",!0),ie(oe,he,be,"\ue01a","\\@varsubsetneq"),ie(oe,he,be,"\u2acb","\\subsetneqq",!0),ie(oe,he,be,"\ue017","\\@varsubsetneqq"),ie(oe,he,be,"\u226f","\\ngtr",!0),ie(oe,he,be,"\ue00f","\\@ngeqslant"),ie(oe,he,be,"\ue00e","\\@ngeqq"),ie(oe,he,be,"\u2a88","\\gneq",!0),ie(oe,he,be,"\u2269","\\gneqq",!0),ie(oe,he,be,"\ue00d","\\@gvertneqq"),ie(oe,he,be,"\u22e7","\\gnsim",!0),ie(oe,he,be,"\u2a8a","\\gnapprox",!0),ie(oe,he,be,"\u2281","\\nsucc",!0),ie(oe,he,be,"\u22e1","\\nsucceq",!0),ie(oe,he,be,"\u22e9","\\succnsim",!0),ie(oe,he,be,"\u2aba","\\succnapprox",!0),ie(oe,he,be,"\u2246","\\ncong",!0),ie(oe,he,be,"\ue007","\\@nshortparallel"),ie(oe,he,be,"\u2226","\\nparallel",!0),ie(oe,he,be,"\u22af","\\nVDash",!0),ie(oe,he,be,"\u22eb","\\ntriangleright"),ie(oe,he,be,"\u22ed","\\ntrianglerighteq",!0),ie(oe,he,be,"\ue018","\\@nsupseteqq"),ie(oe,he,be,"\u228b","\\supsetneq",!0),ie(oe,he,be,"\ue01b","\\@varsupsetneq"),ie(oe,he,be,"\u2acc","\\supsetneqq",!0),ie(oe,he,be,"\ue019","\\@varsupsetneqq"),ie(oe,he,be,"\u22ae","\\nVdash",!0),ie(oe,he,be,"\u2ab5","\\precneqq",!0),ie(oe,he,be,"\u2ab6","\\succneqq",!0),ie(oe,he,be,"\ue016","\\@nsubseteqq"),ie(oe,he,ce,"\u22b4","\\unlhd"),ie(oe,he,ce,"\u22b5","\\unrhd"),ie(oe,he,be,"\u219a","\\nleftarrow",!0),ie(oe,he,be,"\u219b","\\nrightarrow",!0),ie(oe,he,be,"\u21cd","\\nLeftarrow",!0),ie(oe,he,be,"\u21cf","\\nRightarrow",!0),ie(oe,he,be,"\u21ae","\\nleftrightarrow",!0),ie(oe,he,be,"\u21ce","\\nLeftrightarrow",!0),ie(oe,he,be,"\u25b3","\\vartriangle"),ie(oe,he,xe,"\u210f","\\hslash"),ie(oe,he,xe,"\u25bd","\\triangledown"),ie(oe,he,xe,"\u25ca","\\lozenge"),ie(oe,he,xe,"\u24c8","\\circledS"),ie(oe,he,xe,"\xae","\\circledR"),ie(se,he,xe,"\xae","\\circledR"),ie(oe,he,xe,"\u2221","\\measuredangle",!0),ie(oe,he,xe,"\u2204","\\nexists"),ie(oe,he,xe,"\u2127","\\mho"),ie(oe,he,xe,"\u2132","\\Finv",!0),ie(oe,he,xe,"\u2141","\\Game",!0),ie(oe,he,xe,"\u2035","\\backprime"),ie(oe,he,xe,"\u25b2","\\blacktriangle"),ie(oe,he,xe,"\u25bc","\\blacktriangledown"),ie(oe,he,xe,"\u25a0","\\blacksquare"),ie(oe,he,xe,"\u29eb","\\blacklozenge"),ie(oe,he,xe,"\u2605","\\bigstar"),ie(oe,he,xe,"\u2222","\\sphericalangle",!0),ie(oe,he,xe,"\u2201","\\complement",!0),ie(oe,he,xe,"\xf0","\\eth",!0),ie(se,le,xe,"\xf0","\xf0"),ie(oe,he,xe,"\u2571","\\diagup"),ie(oe,he,xe,"\u2572","\\diagdown"),ie(oe,he,xe,"\u25a1","\\square"),ie(oe,he,xe,"\u25a1","\\Box"),ie(oe,he,xe,"\u25ca","\\Diamond"),ie(oe,he,xe,"\xa5","\\yen",!0),ie(se,he,xe,"\xa5","\\yen",!0),ie(oe,he,xe,"\u2713","\\checkmark",!0),ie(se,he,xe,"\u2713","\\checkmark"),ie(oe,he,xe,"\u2136","\\beth",!0),ie(oe,he,xe,"\u2138","\\daleth",!0),ie(oe,he,xe,"\u2137","\\gimel",!0),ie(oe,he,xe,"\u03dd","\\digamma",!0),ie(oe,he,xe,"\u03f0","\\varkappa"),ie(oe,he,fe,"\u250c","\\@ulcorner",!0),ie(oe,he,pe,"\u2510","\\@urcorner",!0),ie(oe,he,fe,"\u2514","\\@llcorner",!0),ie(oe,he,pe,"\u2518","\\@lrcorner",!0),ie(oe,he,be,"\u2266","\\leqq",!0),ie(oe,he,be,"\u2a7d","\\leqslant",!0),ie(oe,he,be,"\u2a95","\\eqslantless",!0),ie(oe,he,be,"\u2272","\\lesssim",!0),ie(oe,he,be,"\u2a85","\\lessapprox",!0),ie(oe,he,be,"\u224a","\\approxeq",!0),ie(oe,he,ce,"\u22d6","\\lessdot"),ie(oe,he,be,"\u22d8","\\lll",!0),ie(oe,he,be,"\u2276","\\lessgtr",!0),ie(oe,he,be,"\u22da","\\lesseqgtr",!0),ie(oe,he,be,"\u2a8b","\\lesseqqgtr",!0),ie(oe,he,be,"\u2251","\\doteqdot"),ie(oe,he,be,"\u2253","\\risingdotseq",!0),ie(oe,he,be,"\u2252","\\fallingdotseq",!0),ie(oe,he,be,"\u223d","\\backsim",!0),ie(oe,he,be,"\u22cd","\\backsimeq",!0),ie(oe,he,be,"\u2ac5","\\subseteqq",!0),ie(oe,he,be,"\u22d0","\\Subset",!0),ie(oe,he,be,"\u228f","\\sqsubset",!0),ie(oe,he,be,"\u227c","\\preccurlyeq",!0),ie(oe,he,be,"\u22de","\\curlyeqprec",!0),ie(oe,he,be,"\u227e","\\precsim",!0),ie(oe,he,be,"\u2ab7","\\precapprox",!0),ie(oe,he,be,"\u22b2","\\vartriangleleft"),ie(oe,he,be,"\u22b4","\\trianglelefteq"),ie(oe,he,be,"\u22a8","\\vDash",!0),ie(oe,he,be,"\u22aa","\\Vvdash",!0),ie(oe,he,be,"\u2323","\\smallsmile"),ie(oe,he,be,"\u2322","\\smallfrown"),ie(oe,he,be,"\u224f","\\bumpeq",!0),ie(oe,he,be,"\u224e","\\Bumpeq",!0),ie(oe,he,be,"\u2267","\\geqq",!0),ie(oe,he,be,"\u2a7e","\\geqslant",!0),ie(oe,he,be,"\u2a96","\\eqslantgtr",!0),ie(oe,he,be,"\u2273","\\gtrsim",!0),ie(oe,he,be,"\u2a86","\\gtrapprox",!0),ie(oe,he,ce,"\u22d7","\\gtrdot"),ie(oe,he,be,"\u22d9","\\ggg",!0),ie(oe,he,be,"\u2277","\\gtrless",!0),ie(oe,he,be,"\u22db","\\gtreqless",!0),ie(oe,he,be,"\u2a8c","\\gtreqqless",!0),ie(oe,he,be,"\u2256","\\eqcirc",!0),ie(oe,he,be,"\u2257","\\circeq",!0),ie(oe,he,be,"\u225c","\\triangleq",!0),ie(oe,he,be,"\u223c","\\thicksim"),ie(oe,he,be,"\u2248","\\thickapprox"),ie(oe,he,be,"\u2ac6","\\supseteqq",!0),ie(oe,he,be,"\u22d1","\\Supset",!0),ie(oe,he,be,"\u2290","\\sqsupset",!0),ie(oe,he,be,"\u227d","\\succcurlyeq",!0),ie(oe,he,be,"\u22df","\\curlyeqsucc",!0),ie(oe,he,be,"\u227f","\\succsim",!0),ie(oe,he,be,"\u2ab8","\\succapprox",!0),ie(oe,he,be,"\u22b3","\\vartriangleright"),ie(oe,he,be,"\u22b5","\\trianglerighteq"),ie(oe,he,be,"\u22a9","\\Vdash",!0),ie(oe,he,be,"\u2223","\\shortmid"),ie(oe,he,be,"\u2225","\\shortparallel"),ie(oe,he,be,"\u226c","\\between",!0),ie(oe,he,be,"\u22d4","\\pitchfork",!0),ie(oe,he,be,"\u221d","\\varpropto"),ie(oe,he,be,"\u25c0","\\blacktriangleleft"),ie(oe,he,be,"\u2234","\\therefore",!0),ie(oe,he,be,"\u220d","\\backepsilon"),ie(oe,he,be,"\u25b6","\\blacktriangleright"),ie(oe,he,be,"\u2235","\\because",!0),ie(oe,he,be,"\u22d8","\\llless"),ie(oe,he,be,"\u22d9","\\gggtr"),ie(oe,he,ce,"\u22b2","\\lhd"),ie(oe,he,ce,"\u22b3","\\rhd"),ie(oe,he,be,"\u2242","\\eqsim",!0),ie(oe,le,be,"\u22c8","\\Join"),ie(oe,he,be,"\u2251","\\Doteq",!0),ie(oe,he,ce,"\u2214","\\dotplus",!0),ie(oe,he,ce,"\u2216","\\smallsetminus"),ie(oe,he,ce,"\u22d2","\\Cap",!0),ie(oe,he,ce,"\u22d3","\\Cup",!0),ie(oe,he,ce,"\u2a5e","\\doublebarwedge",!0),ie(oe,he,ce,"\u229f","\\boxminus",!0),ie(oe,he,ce,"\u229e","\\boxplus",!0),ie(oe,he,ce,"\u22c7","\\divideontimes",!0),ie(oe,he,ce,"\u22c9","\\ltimes",!0),ie(oe,he,ce,"\u22ca","\\rtimes",!0),ie(oe,he,ce,"\u22cb","\\leftthreetimes",!0),ie(oe,he,ce,"\u22cc","\\rightthreetimes",!0),ie(oe,he,ce,"\u22cf","\\curlywedge",!0),ie(oe,he,ce,"\u22ce","\\curlyvee",!0),ie(oe,he,ce,"\u229d","\\circleddash",!0),ie(oe,he,ce,"\u229b","\\circledast",!0),ie(oe,he,ce,"\u22c5","\\centerdot"),ie(oe,he,ce,"\u22ba","\\intercal",!0),ie(oe,he,ce,"\u22d2","\\doublecap"),ie(oe,he,ce,"\u22d3","\\doublecup"),ie(oe,he,ce,"\u22a0","\\boxtimes",!0),ie(oe,he,be,"\u21e2","\\dashrightarrow",!0),ie(oe,he,be,"\u21e0","\\dashleftarrow",!0),ie(oe,he,be,"\u21c7","\\leftleftarrows",!0),ie(oe,he,be,"\u21c6","\\leftrightarrows",!0),ie(oe,he,be,"\u21da","\\Lleftarrow",!0),ie(oe,he,be,"\u219e","\\twoheadleftarrow",!0),ie(oe,he,be,"\u21a2","\\leftarrowtail",!0),ie(oe,he,be,"\u21ab","\\looparrowleft",!0),ie(oe,he,be,"\u21cb","\\leftrightharpoons",!0),ie(oe,he,be,"\u21b6","\\curvearrowleft",!0),ie(oe,he,be,"\u21ba","\\circlearrowleft",!0),ie(oe,he,be,"\u21b0","\\Lsh",!0),ie(oe,he,be,"\u21c8","\\upuparrows",!0),ie(oe,he,be,"\u21bf","\\upharpoonleft",!0),ie(oe,he,be,"\u21c3","\\downharpoonleft",!0),ie(oe,le,be,"\u22b6","\\origof",!0),ie(oe,le,be,"\u22b7","\\imageof",!0),ie(oe,he,be,"\u22b8","\\multimap",!0),ie(oe,he,be,"\u21ad","\\leftrightsquigarrow",!0),ie(oe,he,be,"\u21c9","\\rightrightarrows",!0),ie(oe,he,be,"\u21c4","\\rightleftarrows",!0),ie(oe,he,be,"\u21a0","\\twoheadrightarrow",!0),ie(oe,he,be,"\u21a3","\\rightarrowtail",!0),ie(oe,he,be,"\u21ac","\\looparrowright",!0),ie(oe,he,be,"\u21b7","\\curvearrowright",!0),ie(oe,he,be,"\u21bb","\\circlearrowright",!0),ie(oe,he,be,"\u21b1","\\Rsh",!0),ie(oe,he,be,"\u21ca","\\downdownarrows",!0),ie(oe,he,be,"\u21be","\\upharpoonright",!0),ie(oe,he,be,"\u21c2","\\downharpoonright",!0),ie(oe,he,be,"\u21dd","\\rightsquigarrow",!0),ie(oe,he,be,"\u21dd","\\leadsto"),ie(oe,he,be,"\u21db","\\Rrightarrow",!0),ie(oe,he,be,"\u21be","\\restriction"),ie(oe,le,xe,"\u2018","`"),ie(oe,le,xe,"$","\\$"),ie(se,le,xe,"$","\\$"),ie(se,le,xe,"$","\\textdollar"),ie(oe,le,xe,"%","\\%"),ie(se,le,xe,"%","\\%"),ie(oe,le,xe,"_","\\_"),ie(se,le,xe,"_","\\_"),ie(se,le,xe,"_","\\textunderscore"),ie(oe,le,xe,"\u2220","\\angle",!0),ie(oe,le,xe,"\u221e","\\infty",!0),ie(oe,le,xe,"\u2032","\\prime"),ie(oe,le,xe,"\u25b3","\\triangle"),ie(oe,le,xe,"\u0393","\\Gamma",!0),ie(oe,le,xe,"\u0394","\\Delta",!0),ie(oe,le,xe,"\u0398","\\Theta",!0),ie(oe,le,xe,"\u039b","\\Lambda",!0),ie(oe,le,xe,"\u039e","\\Xi",!0),ie(oe,le,xe,"\u03a0","\\Pi",!0),ie(oe,le,xe,"\u03a3","\\Sigma",!0),ie(oe,le,xe,"\u03a5","\\Upsilon",!0),ie(oe,le,xe,"\u03a6","\\Phi",!0),ie(oe,le,xe,"\u03a8","\\Psi",!0),ie(oe,le,xe,"\u03a9","\\Omega",!0),ie(oe,le,xe,"A","\u0391"),ie(oe,le,xe,"B","\u0392"),ie(oe,le,xe,"E","\u0395"),ie(oe,le,xe,"Z","\u0396"),ie(oe,le,xe,"H","\u0397"),ie(oe,le,xe,"I","\u0399"),ie(oe,le,xe,"K","\u039a"),ie(oe,le,xe,"M","\u039c"),ie(oe,le,xe,"N","\u039d"),ie(oe,le,xe,"O","\u039f"),ie(oe,le,xe,"P","\u03a1"),ie(oe,le,xe,"T","\u03a4"),ie(oe,le,xe,"X","\u03a7"),ie(oe,le,xe,"\xac","\\neg",!0),ie(oe,le,xe,"\xac","\\lnot"),ie(oe,le,xe,"\u22a4","\\top"),ie(oe,le,xe,"\u22a5","\\bot"),ie(oe,le,xe,"\u2205","\\emptyset"),ie(oe,he,xe,"\u2205","\\varnothing"),ie(oe,le,de,"\u03b1","\\alpha",!0),ie(oe,le,de,"\u03b2","\\beta",!0),ie(oe,le,de,"\u03b3","\\gamma",!0),ie(oe,le,de,"\u03b4","\\delta",!0),ie(oe,le,de,"\u03f5","\\epsilon",!0),ie(oe,le,de,"\u03b6","\\zeta",!0),ie(oe,le,de,"\u03b7","\\eta",!0),ie(oe,le,de,"\u03b8","\\theta",!0),ie(oe,le,de,"\u03b9","\\iota",!0),ie(oe,le,de,"\u03ba","\\kappa",!0),ie(oe,le,de,"\u03bb","\\lambda",!0),ie(oe,le,de,"\u03bc","\\mu",!0),ie(oe,le,de,"\u03bd","\\nu",!0),ie(oe,le,de,"\u03be","\\xi",!0),ie(oe,le,de,"\u03bf","\\omicron",!0),ie(oe,le,de,"\u03c0","\\pi",!0),ie(oe,le,de,"\u03c1","\\rho",!0),ie(oe,le,de,"\u03c3","\\sigma",!0),ie(oe,le,de,"\u03c4","\\tau",!0),ie(oe,le,de,"\u03c5","\\upsilon",!0),ie(oe,le,de,"\u03d5","\\phi",!0),ie(oe,le,de,"\u03c7","\\chi",!0),ie(oe,le,de,"\u03c8","\\psi",!0),ie(oe,le,de,"\u03c9","\\omega",!0),ie(oe,le,de,"\u03b5","\\varepsilon",!0),ie(oe,le,de,"\u03d1","\\vartheta",!0),ie(oe,le,de,"\u03d6","\\varpi",!0),ie(oe,le,de,"\u03f1","\\varrho",!0),ie(oe,le,de,"\u03c2","\\varsigma",!0),ie(oe,le,de,"\u03c6","\\varphi",!0),ie(oe,le,ce,"\u2217","*",!0),ie(oe,le,ce,"+","+"),ie(oe,le,ce,"\u2212","-",!0),ie(oe,le,ce,"\u22c5","\\cdot",!0),ie(oe,le,ce,"\u2218","\\circ",!0),ie(oe,le,ce,"\xf7","\\div",!0),ie(oe,le,ce,"\xb1","\\pm",!0),ie(oe,le,ce,"\xd7","\\times",!0),ie(oe,le,ce,"\u2229","\\cap",!0),ie(oe,le,ce,"\u222a","\\cup",!0),ie(oe,le,ce,"\u2216","\\setminus",!0),ie(oe,le,ce,"\u2227","\\land"),ie(oe,le,ce,"\u2228","\\lor"),ie(oe,le,ce,"\u2227","\\wedge",!0),ie(oe,le,ce,"\u2228","\\vee",!0),ie(oe,le,xe,"\u221a","\\surd"),ie(oe,le,fe,"\u27e8","\\langle",!0),ie(oe,le,fe,"\u2223","\\lvert"),ie(oe,le,fe,"\u2225","\\lVert"),ie(oe,le,pe,"?","?"),ie(oe,le,pe,"!","!"),ie(oe,le,pe,"\u27e9","\\rangle",!0),ie(oe,le,pe,"\u2223","\\rvert"),ie(oe,le,pe,"\u2225","\\rVert"),ie(oe,le,be,"=","="),ie(oe,le,be,":",":"),ie(oe,le,be,"\u2248","\\approx",!0),ie(oe,le,be,"\u2245","\\cong",!0),ie(oe,le,be,"\u2265","\\ge"),ie(oe,le,be,"\u2265","\\geq",!0),ie(oe,le,be,"\u2190","\\gets"),ie(oe,le,be,">","\\gt",!0),ie(oe,le,be,"\u2208","\\in",!0),ie(oe,le,be,"\ue020","\\@not"),ie(oe,le,be,"\u2282","\\subset",!0),ie(oe,le,be,"\u2283","\\supset",!0),ie(oe,le,be,"\u2286","\\subseteq",!0),ie(oe,le,be,"\u2287","\\supseteq",!0),ie(oe,he,be,"\u2288","\\nsubseteq",!0),ie(oe,he,be,"\u2289","\\nsupseteq",!0),ie(oe,le,be,"\u22a8","\\models"),ie(oe,le,be,"\u2190","\\leftarrow",!0),ie(oe,le,be,"\u2264","\\le"),ie(oe,le,be,"\u2264","\\leq",!0),ie(oe,le,be,"<","\\lt",!0),ie(oe,le,be,"\u2192","\\rightarrow",!0),ie(oe,le,be,"\u2192","\\to"),ie(oe,he,be,"\u2271","\\ngeq",!0),ie(oe,he,be,"\u2270","\\nleq",!0),ie(oe,le,ye,"\xa0","\\ "),ie(oe,le,ye,"\xa0","\\space"),ie(oe,le,ye,"\xa0","\\nobreakspace"),ie(se,le,ye,"\xa0","\\ "),ie(se,le,ye,"\xa0"," "),ie(se,le,ye,"\xa0","\\space"),ie(se,le,ye,"\xa0","\\nobreakspace"),ie(oe,le,ye,null,"\\nobreak"),ie(oe,le,ye,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,ce,"\u22bc","\\barwedge",!0),ie(oe,he,ce,"\u22bb","\\veebar",!0),ie(oe,le,ce,"\u2299","\\odot",!0),ie(oe,le,ce,"\u2295","\\oplus",!0),ie(oe,le,ce,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,ce,"\u2298","\\oslash",!0),ie(oe,he,ce,"\u229a","\\circledcirc",!0),ie(oe,he,ce,"\u22a1","\\boxdot",!0),ie(oe,le,ce,"\u25b3","\\bigtriangleup"),ie(oe,le,ce,"\u25bd","\\bigtriangledown"),ie(oe,le,ce,"\u2020","\\dagger"),ie(oe,le,ce,"\u22c4","\\diamond"),ie(oe,le,ce,"\u22c6","\\star"),ie(oe,le,ce,"\u25c3","\\triangleleft"),ie(oe,le,ce,"\u25b9","\\triangleright"),ie(oe,le,fe,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,pe,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,fe,"{","\\lbrace"),ie(oe,le,pe,"}","\\rbrace"),ie(oe,le,fe,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,pe,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,fe,"(","\\lparen",!0),ie(oe,le,pe,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,fe,"\u230a","\\lfloor",!0),ie(oe,le,pe,"\u230b","\\rfloor",!0),ie(oe,le,fe,"\u2308","\\lceil",!0),ie(oe,le,pe,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,be,"\u2191","\\uparrow",!0),ie(oe,le,be,"\u21d1","\\Uparrow",!0),ie(oe,le,be,"\u2193","\\downarrow",!0),ie(oe,le,be,"\u21d3","\\Downarrow",!0),ie(oe,le,be,"\u2195","\\updownarrow",!0),ie(oe,le,be,"\u21d5","\\Updownarrow",!0),ie(oe,le,ge,"\u2210","\\coprod"),ie(oe,le,ge,"\u22c1","\\bigvee"),ie(oe,le,ge,"\u22c0","\\bigwedge"),ie(oe,le,ge,"\u2a04","\\biguplus"),ie(oe,le,ge,"\u22c2","\\bigcap"),ie(oe,le,ge,"\u22c3","\\bigcup"),ie(oe,le,ge,"\u222b","\\int"),ie(oe,le,ge,"\u222b","\\intop"),ie(oe,le,ge,"\u222c","\\iint"),ie(oe,le,ge,"\u222d","\\iiint"),ie(oe,le,ge,"\u220f","\\prod"),ie(oe,le,ge,"\u2211","\\sum"),ie(oe,le,ge,"\u2a02","\\bigotimes"),ie(oe,le,ge,"\u2a01","\\bigoplus"),ie(oe,le,ge,"\u2a00","\\bigodot"),ie(oe,le,ge,"\u222e","\\oint"),ie(oe,le,ge,"\u222f","\\oiint"),ie(oe,le,ge,"\u2230","\\oiiint"),ie(oe,le,ge,"\u2a06","\\bigsqcup"),ie(oe,le,ge,"\u222b","\\smallint"),ie(se,le,ue,"\u2026","\\textellipsis"),ie(oe,le,ue,"\u2026","\\mathellipsis"),ie(se,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u2026","\\ldots",!0),ie(oe,le,ue,"\u22ef","\\@cdots",!0),ie(oe,le,ue,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,me,"\u02ca","\\acute"),ie(oe,le,me,"\u02cb","\\grave"),ie(oe,le,me,"\xa8","\\ddot"),ie(oe,le,me,"~","\\tilde"),ie(oe,le,me,"\u02c9","\\bar"),ie(oe,le,me,"\u02d8","\\breve"),ie(oe,le,me,"\u02c7","\\check"),ie(oe,le,me,"^","\\hat"),ie(oe,le,me,"\u20d7","\\vec"),ie(oe,le,me,"\u02d9","\\dot"),ie(oe,le,me,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,me,"\u02ca","\\'"),ie(se,le,me,"\u02cb","\\`"),ie(se,le,me,"\u02c6","\\^"),ie(se,le,me,"\u02dc","\\~"),ie(se,le,me,"\u02c9","\\="),ie(se,le,me,"\u02d8","\\u"),ie(se,le,me,"\u02d9","\\."),ie(se,le,me,"\xb8","\\c"),ie(se,le,me,"\u02da","\\r"),ie(se,le,me,"\u02c7","\\v"),ie(se,le,me,"\xa8",'\\"'),ie(se,le,me,"\u02dd","\\H"),ie(se,le,me,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Se<14;Se++){var Me=ke.charAt(Se);ie(oe,le,xe,Me,Me)}for(var ze='0123456789!@*()-=+";:?/.,',Ae=0;Ae<25;Ae++){var Te=ze.charAt(Ae);ie(se,le,xe,Te,Te)}for(var Be="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ce=0;Ce<52;Ce++){var Ne=Be.charAt(Ce);ie(oe,le,de,Ne,Ne),ie(se,le,xe,Ne,Ne)}ie(oe,he,xe,"C","\u2102"),ie(se,he,xe,"C","\u2102"),ie(oe,he,xe,"H","\u210d"),ie(se,he,xe,"H","\u210d"),ie(oe,he,xe,"N","\u2115"),ie(se,he,xe,"N","\u2115"),ie(oe,he,xe,"P","\u2119"),ie(se,he,xe,"P","\u2119"),ie(oe,he,xe,"Q","\u211a"),ie(se,he,xe,"Q","\u211a"),ie(oe,he,xe,"R","\u211d"),ie(se,he,xe,"R","\u211d"),ie(oe,he,xe,"Z","\u2124"),ie(se,he,xe,"Z","\u2124"),ie(oe,le,de,"h","\u210e"),ie(se,le,de,"h","\u210e");for(var qe="",Ie=0;Ie<52;Ie++){var Re=Be.charAt(Ie);ie(oe,le,de,Re,qe=String.fromCharCode(55349,56320+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56372+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56424+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56580+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56684+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56736+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56788+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56840+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56944+Ie)),ie(se,le,xe,Re,qe),Ie<26&&(ie(oe,le,de,Re,qe=String.fromCharCode(55349,56632+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56476+Ie)),ie(se,le,xe,Re,qe))}ie(oe,le,de,"k",qe=String.fromCharCode(55349,56668)),ie(se,le,xe,"k",qe);for(var He=0;He<10;He++){var Oe=He.toString();ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57294+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57314+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57324+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57334+He)),ie(se,le,xe,Oe,qe)}for(var Ee="\xd0\xde\xfe",Le=0;Le<3;Le++){var De=Ee.charAt(Le);ie(oe,le,de,De,De),ie(se,le,xe,De,De)}var Ve=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Pe=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Fe=function(e,t,r){return ne[r][e]&&ne[r][e].replace&&(e=ne[r][e].replace),{value:e,metrics:I(e,t,r)}},Ge=function(e,t,r,a,n){var i,o=Fe(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||a&&"mathit"===a.font)&&(l=0),i=new K(e,s.height,s.depth,l,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new K(e,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var h=a.getColor();h&&(i.style.color=h)}return i},Ue=(e,t)=>{if(U(e.classes)!==U(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var a in e.style)if(e.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;return!0},Ye=function(e){for(var t=0,r=0,a=0,n=0;n<e.children.length;n++){var i=e.children[n];i.height>t&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=a},Xe=function(e,t,r,a){var n=new _(e,t,r,a);return Ye(n),n},We=(e,t,r,a)=>new _(e,t,r,a),_e=function(e){var t=new B(e);return Ye(t),t},je=function(e,t,r){var a="";switch(e){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=e}return a+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,a.concat(["mathbf"])):"\\"===e||"main"===ne[t][e].font?Ge(e,"Main-Regular",t,r,a):Ge(e,"AMS-Regular",t,r,a.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var a=Xe([e],[],t);return a.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),a.style.borderBottomWidth=G(a.height),a.maxFontSize=1,a},makeAnchor:function(e,t,r,a){var n=new j(e,t,r,a);return Ye(n),n},makeFragment:_e,wrapFragment:function(e,t){return e instanceof B?Xe([],[e],t):e},makeVList:function(e,t){for(var{children:r,depth:a}=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],a=-t[0].shift-t[0].elem.depth,n=a,i=1;i<t.length;i++){var o=-t[i].shift-n-t[i].elem.depth,s=o-(t[i-1].elem.height+t[i-1].elem.depth);n+=o,r.push({type:"kern",size:s}),r.push(t[i])}return{children:r,depth:a}}var l;if("top"===e.positionType){for(var h=e.positionData,m=0;m<e.children.length;m++){var c=e.children[m];h-="kern"===c.type?c.size:c.elem.height+c.elem.depth}l=h}else if("bottom"===e.positionType)l=-e.positionData;else{var p=e.children[0];if("elem"!==p.type)throw new Error('First child must have type "elem".');if("shift"===e.positionType)l=-p.elem.depth-e.positionData;else{if("firstBaseline"!==e.positionType)throw new Error("Invalid positionType "+e.positionType+".");l=-p.elem.depth}}return{children:e.children,depth:l}}(e),n=0,i=0;i<r.length;i++){var o=r[i];if("elem"===o.type){var s=o.elem;n=Math.max(n,s.maxFontSize,s.height)}}n+=2;var l=Xe(["pstrut"],[]);l.style.height=G(n);for(var h=[],m=a,c=a,p=a,u=0;u<r.length;u++){var d=r[u];if("kern"===d.type)p+=d.size;else{var g=d.elem,f=d.wrapperClasses||[],v=d.wrapperStyle||{},b=Xe(f,[l,g],void 0,v);b.style.top=G(-n-p-g.depth),d.marginLeft&&(b.style.marginLeft=d.marginLeft),d.marginRight&&(b.style.marginRight=d.marginRight),h.push(b),p+=g.height+g.depth}m=Math.min(m,p),c=Math.max(c,p)}var y,x=Xe(["vlist"],h);if(x.style.height=G(c),m<0){var w=Xe([],[]),k=Xe(["vlist"],[w]);k.style.height=G(-m);var S=Xe(["vlist-s"],[new K("\u200b")]);y=[Xe(["vlist-r"],[x,S]),Xe(["vlist-r"],[k])]}else y=[Xe(["vlist-r"],[x])];var M=Xe(["vlist-t"],y);return 2===y.length&&M.classes.push("vlist-t2"),M.height=c,M.depth=-m,M},makeOrd:function(e,t,r){var a=e.mode,n=e.text,o=["mord"],s="math"===a||"text"===a&&t.font,l=s?t.font:t.fontFamily,h="",m="";if(55349===n.charCodeAt(0)&&([h,m]=function(e,t){var r=1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536,a="math"===t?0:1;if(119808<=r&&r<120484){var n=Math.floor((r-119808)/26);return[Ve[n][2],Ve[n][a]]}if(120782<=r&&r<=120831){var o=Math.floor((r-120782)/10);return[Pe[o][2],Pe[o][a]]}if(120485===r||120486===r)return[Ve[0][2],Ve[0][a]];if(120486<r&&r<120782)return["",""];throw new i("Unsupported character: "+e)}(n,a)),h.length>0)return Ge(n,h,a,t,o.concat(m));if(l){var c,p;if("boldsymbol"===l){var u=function(e,t,r,a,n){return"textord"!==n&&Fe(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(n,a,0,0,r);c=u.fontName,p=[u.fontClass]}else s?(c=$e[l].fontName,p=[l]):(c=je(l,t.fontWeight,t.fontShape),p=[l,t.fontWeight,t.fontShape]);if(Fe(n,c,a).metrics)return Ge(n,c,a,t,o.concat(p));if(we.hasOwnProperty(n)&&"Typewriter"===c.slice(0,10)){for(var d=[],g=0;g<n.length;g++)d.push(Ge(n[g],c,a,t,o.concat(p)));return _e(d)}}if("mathord"===r)return Ge(n,"Math-Italic",a,t,o.concat(["mathnormal"]));if("textord"===r){var f=ne[a][n]&&ne[a][n].font;if("ams"===f){var v=je("amsrm",t.fontWeight,t.fontShape);return Ge(n,v,a,t,o.concat("amsrm",t.fontWeight,t.fontShape))}if("main"!==f&&f){var b=je(f,t.fontWeight,t.fontShape);return Ge(n,b,a,t,o.concat(b,t.fontWeight,t.fontShape))}var y=je("textrm",t.fontWeight,t.fontShape);return Ge(n,y,a,t,o.concat(t.fontWeight,t.fontShape))}throw new Error("unexpected type: "+r+" in makeOrd")},makeGlue:(e,t)=>{var r=Xe(["mspace"],[],t),a=F(e,t);return r.style.marginRight=G(a),r},staticSvg:function(e,t){var[r,a,n]=Ze[e],i=new Q(r),o=new J([i],{width:G(a),height:G(n),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+1e3*n,preserveAspectRatio:"xMinYMin"}),s=We(["overlay"],[o],t);return s.height=n,s.style.height=G(n),s.style.width=G(a),s},svgData:Ze,tryCombineChars:e=>{for(var t=0;t<e.length-1;t++){var r=e[t],a=e[t+1];r instanceof K&&a instanceof K&&Ue(r,a)&&(r.text+=a.text,r.height=Math.max(r.height,a.height),r.depth=Math.max(r.depth,a.depth),r.italic=a.italic,e.splice(t+1,1),t--)}return e}},Je={number:3,unit:"mu"},Qe={number:4,unit:"mu"},et={number:5,unit:"mu"},tt={mord:{mop:Je,mbin:Qe,mrel:et,minner:Je},mop:{mord:Je,mop:Je,mrel:et,minner:Je},mbin:{mord:Qe,mop:Qe,mopen:Qe,minner:Qe},mrel:{mord:et,mop:et,mopen:et,minner:et},mopen:{},mclose:{mop:Je,mbin:Qe,mrel:et,minner:Je},mpunct:{mord:Je,mop:Je,mrel:et,mopen:Je,mclose:Je,mpunct:Je,minner:Je},minner:{mord:Je,mop:Je,mbin:Qe,mrel:et,mopen:Je,mpunct:Je,minner:Je}},rt={mord:{mop:Je},mop:{mord:Je,mop:Je},mbin:{},mrel:{},mopen:{},mclose:{mop:Je},mpunct:{},minner:{mop:Je}},at={},nt={},it={};function ot(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:o}=e,s={type:t,numArgs:a.numArgs,argTypes:a.argTypes,allowedInArgument:!!a.allowedInArgument,allowedInText:!!a.allowedInText,allowedInMath:void 0===a.allowedInMath||a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,primitive:!!a.primitive,handler:n},l=0;l<r.length;++l)at[r[l]]=s;t&&(i&&(nt[t]=i),o&&(it[t]=o))}function st(e){var{type:t,htmlBuilder:r,mathmlBuilder:a}=e;ot({type:t,names:[],props:{numArgs:0},handler(){throw new Error("Should never be called.")},htmlBuilder:r,mathmlBuilder:a})}var lt=function(e){return"ordgroup"===e.type&&1===e.body.length?e.body[0]:e},ht=function(e){return"ordgroup"===e.type?e.body:[e]},mt=Ke.makeSpan,ct=["leftmost","mbin","mopen","mrel","mop","mpunct"],pt=["rightmost","mrel","mclose","mpunct"],ut={display:k.DISPLAY,text:k.TEXT,script:k.SCRIPT,scriptscript:k.SCRIPTSCRIPT},dt={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},gt=function(e,t,r,a){void 0===a&&(a=[null,null]);for(var n=[],i=0;i<e.length;i++){var o=wt(e[i],t);if(o instanceof B){var s=o.children;n.push(...s)}else n.push(o)}if(Ke.tryCombineChars(n),!r)return n;var l=t;if(1===e.length){var h=e[0];"sizing"===h.type?l=t.havingSize(h.size):"styling"===h.type&&(l=t.havingStyle(ut[h.style]))}var c=mt([a[0]||"leftmost"],[],t),p=mt([a[1]||"rightmost"],[],t),u="root"===r;return ft(n,((e,t)=>{var r=t.classes[0],a=e.classes[0];"mbin"===r&&m.contains(pt,a)?t.classes[0]="mord":"mbin"===a&&m.contains(ct,r)&&(e.classes[0]="mord")}),{node:c},p,u),ft(n,((e,t)=>{var r=yt(t),a=yt(e),n=r&&a?e.hasClass("mtight")?rt[r][a]:tt[r][a]:null;if(n)return Ke.makeGlue(n,l)}),{node:c},p,u),n},ft=function e(t,r,a,n,i){n&&t.push(n);for(var o=0;o<t.length;o++){var s=t[o],l=vt(s);if(l)e(l.children,r,a,null,i);else{var h=!s.hasClass("mspace");if(h){var m=r(s,a.node);m&&(a.insertAfter?a.insertAfter(m):(t.unshift(m),o++))}h?a.node=s:i&&s.hasClass("newline")&&(a.node=mt(["leftmost"])),a.insertAfter=(e=>r=>{t.splice(e+1,0,r),o++})(o)}}n&&t.pop()},vt=function(e){return e instanceof B||e instanceof j||e instanceof _&&e.hasClass("enclosing")?e:null},bt=function e(t,r){var a=vt(t);if(a){var n=a.children;if(n.length){if("right"===r)return e(n[n.length-1],"right");if("left"===r)return e(n[0],"left")}}return t},yt=function(e,t){return e?(t&&(e=bt(e,t)),dt[e.classes[0]]||null):null},xt=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return mt(t.concat(r))},wt=function(e,t,r){if(!e)return mt();if(nt[e.type]){var a=nt[e.type](e,t);if(r&&t.size!==r.size){a=mt(t.sizingClasses(r),[a],t);var n=t.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new i("Got group of unknown type: '"+e.type+"'")};function kt(e,t){var r=mt(["base"],e,t),a=mt(["strut"]);return a.style.height=G(r.height+r.depth),r.depth&&(a.style.verticalAlign=G(-r.depth)),r.children.unshift(a),r}function St(e,t){var r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);var a,n=gt(e,t,"root");2===n.length&&n[1].hasClass("tag")&&(a=n.pop());for(var i,o=[],s=[],l=0;l<n.length;l++)if(s.push(n[l]),n[l].hasClass("mbin")||n[l].hasClass("mrel")||n[l].hasClass("allowbreak")){for(var h=!1;l<n.length-1&&n[l+1].hasClass("mspace")&&!n[l+1].hasClass("newline");)l++,s.push(n[l]),n[l].hasClass("nobreak")&&(h=!0);h||(o.push(kt(s,t)),s=[])}else n[l].hasClass("newline")&&(s.pop(),s.length>0&&(o.push(kt(s,t)),s=[]),o.push(n[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(gt(r,t,!0))).classes=["tag"],o.push(i)):a&&o.push(a);var m=mt(["katex-html"],o);if(m.setAttribute("aria-hidden","true"),i){var c=i.children[0];c.style.height=G(m.height+m.depth),m.depth&&(c.style.verticalAlign=G(-m.depth))}return m}function Mt(e){return new B(e)}class zt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=U(this.classes));for(var r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e}toMarkup(){var e="<"+this.type;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="',e+=m.escape(this.attributes[t]),e+='"');this.classes.length>0&&(e+=' class ="'+m.escape(U(this.classes))+'"'),e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</"+this.type+">"}toText(){return this.children.map((e=>e.toText())).join("")}}class At{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return m.escape(this.toText())}toText(){return this.text}}var Tt={MathNode:zt,TextNode:At,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",G(this.width)),e}toMarkup(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+G(this.width)+'"/>'}toText(){return this.character?this.character:" "}},newDocumentFragment:Mt},Bt=function(e,t,r){return!ne[t][e]||!ne[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ne[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var a=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=e.text;return m.contains(["\\imath","\\jmath"],n)?null:(ne[a][n]&&ne[a][n].replace&&(n=ne[a][n].replace),I(n,Ke.fontMap[r].fontName,a)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var a=Rt(e[0],t);return r&&a instanceof zt&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o<e.length;o++){var s=Rt(e[o],t);if(s instanceof zt&&n instanceof zt){if("mtext"===s.type&&"mtext"===n.type&&s.getAttribute("mathvariant")===n.getAttribute("mathvariant")){n.children.push(...s.children);continue}if("mn"===s.type&&"mn"===n.type){n.children.push(...s.children);continue}if("mi"===s.type&&1===s.children.length&&"mn"===n.type){var l=s.children[0];if(l instanceof At&&"."===l.text){n.children.push(...s.children);continue}}else if("mi"===n.type&&1===n.children.length){var h=n.children[0];if(h instanceof At&&"\u0338"===h.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){var m=s.children[0];m instanceof At&&m.text.length>0&&(m.text=m.text.slice(0,1)+"\u0338"+m.text.slice(1),i.pop())}}}i.push(s),n=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new i("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,a,n){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&m.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new Tt.MathNode("semantics",[i,s]),h=new Tt.MathNode("math",[l]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&h.setAttribute("display","block");var c=n?"katex":"katex-mathml";return Ke.makeSpan([c],[h])}var Ot=function(e){return new L({style:e.displayMode?k.DISPLAY:k.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Dt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Vt=function(e,t,r,a,n){var i,o=e.height+e.depth+r+a;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],n),"fbox"===t){var s=n.color&&n.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new ee({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new J(l,{width:"100%",height:G(o)});i=Ke.makeSvgSpan([],[h],n)}return i.height=o,i.style.height=G(o),i},Pt=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Lt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Ft=function(e,t){var{span:r,minWidth:a,height:n}=function(){var r=4e5,a=e.label.slice(1);if(m.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var l=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][l],n=[0,239,300,360,420][l],o=[0,.24,.3,.3,.36,.42][l],i=a+l):(r=[0,600,1033,2339,2340][l],n=[0,260,286,306,312][l],o=[0,.26,.286,.3,.306,.34][l],i="tilde"+l)}var h=new Q(i),c=new J([h],{width:"100%",height:G(o),viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[c],t),minWidth:0,height:o}}var p,u,d,g=[],f=Dt[a],[v,b,y]=f,x=y/1e3,w=v.length;if(1===w)p=["hide-tail"],u=[f[3]];else if(2===w)p=["halfarrow-left","halfarrow-right"],u=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n "+w+" children.");p=["brace-left","brace-center","brace-right"],u=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k<w;k++){var S=new Q(v[k]),M=new J([S],{width:"400em",height:G(x),viewBox:"0 0 "+r+" "+y,preserveAspectRatio:u[k]+" slice"}),z=Ke.makeSvgSpan([p[k]],[M],t);if(1===w)return{span:z,minWidth:b,height:x};z.style.height=G(x),g.push(z)}return{span:Ke.makeSpan(["stretchy"],g,t),minWidth:b,height:x}}();return r.height=n,r.style.height=G(n),a>0&&(r.style.minWidth=G(a)),r};function Gt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ut(e){var t=Yt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Yt(e){return e&&("atom"===e.type||ae.hasOwnProperty(e.type))?e:null}var Xt=(e,t)=>{var r,a,n;e&&"supsub"===e.type?(r=(a=Gt(e.base,"accent")).base,e.base=r,n=function(e){if(e instanceof _)return e;throw new Error("Expected span<HtmlDomNode> but got "+String(e)+".")}(wt(e,t)),e.base=a):r=(a=Gt(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(a.isShifty&&m.isCharacterBox(r)){var s=m.getBaseElem(r);o=te(wt(s,t.havingCrampedStyle())).skew}var l,h="\\c"===a.label,c=h?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(a.isStretchy)l=Ft(a,t),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+G(2*o)+")",marginLeft:G(2*o)}:void 0}]},t);else{var p,u;"\\vec"===a.label?(p=Ke.staticSvg("vec",t),u=Ke.svgData.vec[1]):((p=te(p=Ke.makeOrd({mode:a.mode,text:a.label},t,"textord"))).italic=0,u=p.width,h&&(c+=p.depth)),l=Ke.makeSpan(["accent-body"],[p]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),c=i.height);var g=o;d||(g-=u/2),l.style.left=G(g),"\\textcircled"===a.label&&(l.style.top=".2em"),l=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-c},{type:"elem",elem:l}]},t)}var f=Ke.makeSpan(["mord","accent"],[l],t);return n?(n.children[0]=f,n.height=Math.max(f.height,n.height),n.classes[0]="mord",n):f},Wt=(e,t)=>{var r=e.isStretchy?Pt(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),a=new Tt.MathNode("mover",[Rt(e.base,t),r]);return a.setAttribute("accent","true"),a},_t=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{var r=lt(t[0]),a=!_t.test(e.funcName),n=!a||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{var r=t[0],a=e.parser.mode;return"math"===a&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Xt,mathmlBuilder:Wt}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:(e,t)=>{var r=wt(e.base,t),a=Ft(e,t),n="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:(e,t)=>{var r=Pt(e.label),a=new Tt.MathNode("munder",[Rt(e.base,t),r]);return a.setAttribute("accentunder","true"),a}});var jt=e=>{var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a,funcName:n}=e;return{type:"xArrow",mode:a.mode,label:n,body:t[0],below:r[0]}},htmlBuilder(e,t){var r,a=t.style,n=t.havingStyle(a.sup()),i=Ke.wrapFragment(wt(e.body,n,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(n=t.havingStyle(a.sub()),(r=Ke.wrapFragment(wt(e.below,n,t),t)).classes.push(o+"-arrow-pad"));var s,l=Ft(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=i.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:m},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder(e,t){var r,a=Pt(e.label);if(a.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var n=jt(Rt(e.body,t));if(e.below){var i=jt(Rt(e.below,t));r=new Tt.MathNode("munderover",[a,i,n])}else r=new Tt.MathNode("mover",[a,n])}else if(e.below){var o=jt(Rt(e.below,t));r=new Tt.MathNode("munder",[a,o])}else r=jt(),r=new Tt.MathNode("mover",[a,r]);return r}});var $t=Ke.makeSpan;function Zt(e,t){var r=gt(e.body,t,!0);return $t([e.mclass],r,t)}function Kt(e,t){var r,a=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",a):"mord"===e.mclass?e.isCharacterBox?(r=a[0]).type="mi":r=new Tt.MathNode("mi",a):(e.isCharacterBox?(r=a[0]).type="mo":r=new Tt.MathNode("mo",a),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+a.slice(5),body:ht(n),isCharacterBox:m.isCharacterBox(n)}},htmlBuilder:Zt,mathmlBuilder:Kt});var Jt=e=>{var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Jt(t[0]),body:ht(t[1]),isCharacterBox:m.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var r,{parser:a,funcName:n}=e,i=t[1],o=t[0];r="\\stackrel"!==n?Jt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:ht(i)},l={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===n?null:o,sub:"\\underset"===n?o:null};return{type:"mclass",mode:a.mode,mclass:r,body:[l],isCharacterBox:m.isCharacterBox(l)}},htmlBuilder:Zt,mathmlBuilder:Kt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Jt(t[0]),body:ht(t[0])}},htmlBuilder(e,t){var r=gt(e.body,t,!0),a=Ke.makeSpan([e.mclass],r,t);return a.style.textShadow="0.02em 0.01em 0.04px",a},mathmlBuilder(e,t){var r=qt(e.body,t),a=new Tt.MathNode("mstyle",r);return a.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),a}});var Qt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},er=e=>"textord"===e.type&&"@"===e.text;function tr(e,t,r){var a=Qt[e];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(a,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var n={type:"atom",text:a,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[n],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"cdlabel",mode:r.mode,side:a.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),a=Ke.wrapFragment(wt(e.label,r,t),t);return a.classes.push("cd-label-"+e.side),a.style.bottom=G(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:(e,t)=>new Tt.MathNode("mrow",[Rt(e.fragment,t)])}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var{parser:r}=e,a=Gt(t[0],"ordgroup").body,n="",o=0;o<a.length;o++){n+=Gt(a[o],"textord").text}var s,l=parseInt(n);if(isNaN(l))throw new i("\\@char has non-numeric argument "+n);if(l<0||l>=1114111)throw new i("\\@char with invalid code point "+n);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var rr=(e,t)=>{var r=gt(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=(e,t)=>{var r=qt(e.body,t.withColor(e.color)),a=new Tt.MathNode("mstyle",r);return a.setAttribute("mathcolor",e.color),a};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,a=Gt(t[0],"color-token").color,n=t[1];return{type:"color",mode:r.mode,color:a,body:ht(n)}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:a}=e,n=Gt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:rr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){var{parser:a}=e,n="["===a.gullet.future().text?a.parseSizeGroup(!0):null,i=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:i,size:n&&Gt(n,"size").value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=G(F(e.size,t)))),r},mathmlBuilder(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",G(F(e.size,t)))),r}});var nr={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},ir=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new i("Expected a control sequence",e);return t},or=(e,t,r,a)=>{var n=e.gullet.macros.get(r.text);null==n&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,n,a)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var a=t.fetch();if(nr[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=nr[a.text]),Gt(t.parseFunction(),"internal");throw new i("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=t.gullet.popToken(),n=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(n))throw new i("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new i('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new i('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new i("Expected a macro definition");l[s].push(a.text)}var{tokens:h}=t.gullet.consumeArg();return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(n,{tokens:h,numArgs:s,delimiters:l},r===nr[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken());t.gullet.consumeSpaces();var n=(e=>{var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t})(t);return or(t,a,n,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=ir(t.gullet.popToken()),n=t.gullet.popToken(),i=t.gullet.popToken();return or(t,a,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(n),{type:"internal",mode:t.mode}}});var sr=function(e,t,r){var a=I(ne.math[e]&&ne.math[e].replace||e,t,r);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return a},lr=function(e,t,r,a){var n=r.havingBaseStyle(t),i=Ke.makeSpan(a.concat(n.sizingClasses(r)),[e],r),o=n.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=n.sizeMultiplier,i},hr=function(e,t,r){var a=t.havingBaseStyle(r),n=(1-t.sizeMultiplier/a.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=G(n),e.height-=n,e.depth+=n},mr=function(e,t,r,a,n,i){var o=function(e,t,r,a){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,a)}(e,t,n,a),s=lr(Ke.makeSpan(["delimsizing","size"+t],[o],a),k.TEXT,a,i);return r&&hr(s,a,k.TEXT),s},cr=function(e,t,r){var a;return a="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",a],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var a=C["Size4-Regular"][e.charCodeAt(0)]?C["Size4-Regular"][e.charCodeAt(0)][4]:C["Size1-Regular"][e.charCodeAt(0)][4],n=new Q("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new J([n],{width:G(a),height:G(t),style:"width:"+G(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=G(t),o.style.width=G(a),{type:"elem",elem:o}},ur={type:"kern",size:-.008},dr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],fr=function(e,t,r,a,n,i){var o,s,l,h,c="",p=0;o=l=h=e,s=null;var u="Size1-Regular";"\\uparrow"===e?l=h="\u23d0":"\\Uparrow"===e?l=h="\u2016":"\\downarrow"===e?o=l="\u23d0":"\\Downarrow"===e?o=l="\u2016":"\\updownarrow"===e?(o="\\uparrow",l="\u23d0",h="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",l="\u2016",h="\\Downarrow"):m.contains(dr,e)?(l="\u2223",c="vert",p=333):m.contains(gr,e)?(l="\u2225",c="doublevert",p=556):"["===e||"\\lbrack"===e?(o="\u23a1",l="\u23a2",h="\u23a3",u="Size4-Regular",c="lbrack",p=667):"]"===e||"\\rbrack"===e?(o="\u23a4",l="\u23a5",h="\u23a6",u="Size4-Regular",c="rbrack",p=667):"\\lfloor"===e||"\u230a"===e?(l=o="\u23a2",h="\u23a3",u="Size4-Regular",c="lfloor",p=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",l=h="\u23a2",u="Size4-Regular",c="lceil",p=667):"\\rfloor"===e||"\u230b"===e?(l=o="\u23a5",h="\u23a6",u="Size4-Regular",c="rfloor",p=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",l=h="\u23a5",u="Size4-Regular",c="rceil",p=667):"("===e||"\\lparen"===e?(o="\u239b",l="\u239c",h="\u239d",u="Size4-Regular",c="lparen",p=875):")"===e||"\\rparen"===e?(o="\u239e",l="\u239f",h="\u23a0",u="Size4-Regular",c="rparen",p=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",h="\u23a9",l="\u23aa",u="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",h="\u23ad",l="\u23aa",u="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",h="\u23a9",l="\u23aa",u="Size4-Regular");var d=sr(o,u,n),g=d.height+d.depth,f=sr(l,u,n),v=f.height+f.depth,b=sr(h,u,n),y=b.height+b.depth,x=0,w=1;if(null!==s){var S=sr(s,u,n);x=S.height+S.depth,w=2}var M=g+y+x,z=M+Math.max(0,Math.ceil((t-M)/(w*v)))*w*v,A=a.fontMetrics().axisHeight;r&&(A*=a.sizeMultiplier);var T=z/2-A,B=[];if(c.length>0){var C=z-g-y,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(c,Math.round(1e3*C)),I=new Q(c,q),R=(p/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new J([I],{width:R,height:H,viewBox:"0 0 "+p+" "+N}),E=Ke.makeSvgSpan([],[O],a);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(cr(h,u,n)),B.push(ur),null===s){var L=z-g-y+.016;B.push(pr(l,L,a))}else{var D=(z-g-y-x)/2+.016;B.push(pr(l,D,a)),B.push(ur),B.push(cr(s,u,n)),B.push(ur),B.push(pr(l,D,a))}B.push(ur),B.push(cr(o,u,n))}var V=a.havingBaseStyle(k.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return lr(Ke.makeSpan(["delimsizing","mult"],[P],V),k.TEXT,a,i)},vr=.08,br=function(e,t,r,a,n){var i=function(e,t,r){t*=1e3;var a="";switch(e){case"sqrtMain":a=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize1":a=function(e,t){return"M263,"+(601+e+t)+"c0.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\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.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\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize2":a=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize3":a=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,A);break;case"sqrtSize4":a=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,A);break;case"sqrtTall":a=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,A,r)}return a}(e,a,r),o=new Q(e,i),s=new J([o],{width:"400em",height:G(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],n)},yr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],xr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],wr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],kr=[0,1.2,1.8,2.4,3],Sr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Mr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"stack"}],zr=[{type:"small",style:k.SCRIPTSCRIPT},{type:"small",style:k.SCRIPT},{type:"small",style:k.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Ar=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Tr=function(e,t,r,a){for(var n=Math.min(2,3-a.style.size);n<r.length&&"stack"!==r[n].type;n++){var i=sr(e,Ar(r[n]),"math"),o=i.height+i.depth;if("small"===r[n].type&&(o*=a.havingBaseStyle(r[n].style).sizeMultiplier),o>t)return r[n]}return r[r.length-1]},Br=function(e,t,r,a,n,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=m.contains(wr,e)?Sr:m.contains(yr,e)?zr:Mr;var s=Tr(e,t,o,a);return"small"===s.type?function(e,t,r,a,n,i){var o=Ke.makeSymbol(e,"Main-Regular",n,a),s=lr(o,t,a,i);return r&&hr(s,a,t),s}(e,s.style,r,a,n,i):"large"===s.type?mr(e,s.size,r,a,n,i):fr(e,t,r,a,n,i)},Cr={sqrtImage:function(e,t){var r,a,n=t.havingBaseSizing(),i=Tr("\\surd",e*n.sizeMultiplier,zr,n),o=n.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=br("sqrtMain",l=(1+s+vr)/o,m=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*kr[i.size],h=(kr[i.size]+s)/o,l=(kr[i.size]+s+vr)/o,(r=br("sqrtSize"+i.size,l,m,s,t)).style.minWidth="1.02em",a=1/o):(l=e+s+vr,h=e+s,m=Math.floor(1e3*e+s)+80,(r=br("sqrtTall",l,m,s,t)).style.minWidth="0.742em",a=1.056),r.height=h,r.style.height=G(l),{span:r,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,n){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),m.contains(yr,e)||m.contains(wr,e))return mr(e,t,!1,r,a,n);if(m.contains(xr,e))return fr(e,kr[t],!1,r,a,n);throw new i("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:kr,customSizedDelim:Br,leftRightDelim:function(e,t,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Br(e,h,!0,a,n,i)}},Nr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},qr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ir(e,t){var r=Yt(e);if(r&&m.contains(qr,r.text))return r;throw new i(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Rr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{var r=Ir(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Nr[e.funcName].size,mclass:Nr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Ke.makeSpan([e.mclass]):Cr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var a=G(Cr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",a),r.setAttribute("maxsize",a),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new i("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Ir(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e),a=e.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Gt(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:(e,t)=>{Rr(e);for(var r,a,n=gt(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l<n.length;l++)n[l].isMiddle?s=!0:(i=Math.max(n[l].height,i),o=Math.max(n[l].depth,o));if(i*=t.sizeMultiplier,o*=t.sizeMultiplier,r="."===e.left?xt(t,["mopen"]):Cr.leftRightDelim(e.left,i,o,t,e.mode,["mopen"]),n.unshift(r),s)for(var h=1;h<n.length;h++){var m=n[h].isMiddle;m&&(n[h]=Cr.leftRightDelim(m.delim,i,o,m.options,e.mode,[]))}if("."===e.right)a=xt(t,["mclose"]);else{var c=e.rightColor?t.withColor(e.rightColor):t;a=Cr.leftRightDelim(e.right,i,o,c,e.mode,["mclose"])}return n.push(a),Ke.makeSpan(["minner"],n,t)},mathmlBuilder:(e,t)=>{Rr(e);var r=qt(e.body,t);if("."!==e.left){var a=new Tt.MathNode("mo",[Bt(e.left,e.mode)]);a.setAttribute("fence","true"),r.unshift(a)}if("."!==e.right){var n=new Tt.MathNode("mo",[Bt(e.right,e.mode)]);n.setAttribute("fence","true"),e.rightColor&&n.setAttribute("mathcolor",e.rightColor),r.push(n)}return Ct(r)}}),ot({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var r=Ir(t[0],e);if(!e.parser.leftrightDepth)throw new i("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{var r;if("."===e.delim)r=xt(t,[]);else{r=Cr.sizedDelim(e.delim,1,t,e.mode,[]);var a={delim:e.delim,options:t};r.isMiddle=a}return r},mathmlBuilder:(e,t)=>{var r="\\vert"===e.delim||"|"===e.delim?Bt("|","text"):Bt(e.delim,e.mode),a=new Tt.MathNode("mo",[r]);return a.setAttribute("fence","true"),a.setAttribute("lspace","0.05em"),a.setAttribute("rspace","0.05em"),a}});var Hr=(e,t)=>{var r,a,n,i=Ke.wrapFragment(wt(e.body,t),t),o=e.label.slice(1),s=t.sizeMultiplier,l=0,h=m.isCharacterBox(e.body);if("sout"===o)(r=Ke.makeSpan(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/s,l=-.5*t.fontMetrics().xHeight;else if("phase"===o){var c=F({number:.6,unit:"pt"},t),p=F({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;var u=i.height+i.depth+c+p;i.style.paddingLeft=G(u/2+c);var d=Math.floor(1e3*u*s),g="M400000 "+(a=d)+" H0 L"+a/2+" 0 l65 45 L145 "+(a-80)+" H400000z",f=new J([new Q("phase",g)],{width:"400em",height:G(d/1e3),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});(r=Ke.makeSvgSpan(["hide-tail"],[f],t)).style.height=G(u),l=i.depth+c+p}else{/cancel/.test(o)?h||i.classes.push("cancel-pad"):"angl"===o?i.classes.push("anglpad"):i.classes.push("boxpad");var v=0,b=0,y=0;/box/.test(o)?(y=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),b=v=t.fontMetrics().fboxsep+("colorbox"===o?0:y)):"angl"===o?(v=4*(y=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),b=Math.max(0,.25-i.depth)):b=v=h?.2:0,r=Vt(i,o,v,b,t),/fbox|boxed|fcolorbox/.test(o)?(r.style.borderStyle="solid",r.style.borderWidth=G(y)):"angl"===o&&.049!==y&&(r.style.borderTopWidth=G(y),r.style.borderRightWidth=G(y)),l=i.depth+b,e.backgroundColor&&(r.style.backgroundColor=e.backgroundColor,e.borderColor&&(r.style.borderColor=e.borderColor))}if(e.backgroundColor)n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:l},{type:"elem",elem:i,shift:0}]},t);else{var x=/cancel|phase/.test(o)?["svg-align"]:[];n=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:0},{type:"elem",elem:r,shift:l,wrapperClasses:x}]},t)}return/cancel/.test(o)&&(n.height=i.height,n.depth=i.depth),/cancel/.test(o)&&!h?Ke.makeSpan(["mord","cancel-lap"],[n],t):Ke.makeSpan(["mord"],[n],t)},Or=(e,t)=>{var r=0,a=new Tt.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var n=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(e.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&a.setAttribute("mathbackground",e.backgroundColor),a};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=Gt(t[0],"color-token").color,o=Gt(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"enclose",mode:r.mode,label:a,body:n}},htmlBuilder:Hr,mathmlBuilder:Or}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var Er={};function Lr(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:o}=e,s={type:t,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},l=0;l<r.length;++l)Er[r[l]]=s;i&&(nt[t]=i),o&&(it[t]=o)}var Dr={};function Vr(e,t){Dr[e]=t}function Pr(e){var t=[];e.consumeSpaces();var r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}var Fr=e=>{if(!e.parser.settings.displayMode)throw new i("{"+e.envName+"} can be used only in display mode.")};function Gr(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Ur(e,t,r){var{hskipBeforeAndAfter:a,addJot:o,cols:s,arraystretch:l,colSeparationType:h,autoTag:m,singleRow:c,emptySingleRow:p,maxNumCols:u,leqno:d}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!l){var g=e.gullet.expandMacroAsText("\\arraystretch");if(null==g)l=1;else if(!(l=parseFloat(g))||l<0)throw new i("Invalid \\arraystretch: "+g)}e.gullet.beginGroup();var f=[],v=[f],b=[],y=[],x=null!=m?[]:void 0;function w(){m&&e.gullet.macros.set("\\@eqnsw","1",!0)}function k(){x&&(e.gullet.macros.get("\\df@tag")?(x.push(e.subparse([new n("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):x.push(Boolean(m)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(w(),y.push(Pr(e));;){var S=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),S={type:"ordgroup",mode:e.mode,body:S},r&&(S={type:"styling",mode:e.mode,style:r,body:[S]}),f.push(S);var M=e.fetch().text;if("&"===M){if(u&&f.length===u){if(c||h)throw new i("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===M){k(),1===f.length&&"styling"===S.type&&0===S.body[0].body.length&&(v.length>1||!p)&&v.pop(),y.length<v.length+1&&y.push([]);break}if("\\\\"!==M)throw new i("Expected & or \\\\ or \\cr or \\end",e.nextToken);e.consume();var z=void 0;" "!==e.gullet.future().text&&(z=e.parseSizeGroup(!0)),b.push(z?z.value:null),k(),y.push(Pr(e)),f=[],v.push(f),w()}}return e.gullet.endGroup(),e.gullet.endGroup(),{type:"array",mode:e.mode,addJot:o,arraystretch:l,body:v,cols:s,rowGaps:b,hskipBeforeAndAfter:a,hLinesBeforeRow:y,colSeparationType:h,tags:x,leqno:d}}function Yr(e){return"d"===e.slice(0,1)?"display":"text"}var Xr=function(e,t){var r,a,n=e.body.length,o=e.hLinesBeforeRow,s=0,l=new Array(n),h=[],c=Math.max(t.fontMetrics().arrayRuleWidth,t.minRuleThickness),p=1/t.fontMetrics().ptPerEm,u=5*p;e.colSeparationType&&"small"===e.colSeparationType&&(u=t.havingStyle(k.SCRIPT).sizeMultiplier/t.sizeMultiplier*.2778);var d="CD"===e.colSeparationType?F({number:3,unit:"ex"},t):12*p,g=3*p,f=e.arraystretch*d,v=.7*f,b=.3*f,y=0;function x(e){for(var t=0;t<e.length;++t)t>0&&(y+=.25),h.push({pos:y,isDashed:e[t]})}for(x(o[0]),r=0;r<e.body.length;++r){var w=e.body[r],S=v,M=b;s<w.length&&(s=w.length);var z=new Array(w.length);for(a=0;a<w.length;++a){var A=wt(w[a],t);M<A.depth&&(M=A.depth),S<A.height&&(S=A.height),z[a]=A}var T=e.rowGaps[r],B=0;T&&(B=F(T,t))>0&&(M<(B+=b)&&(M=B),B=0),e.addJot&&(M+=g),z.height=S,z.depth=M,y+=S,z.pos=y,y+=M+B,l[r]=z,x(o[r+1])}var C,N,q=y/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((e=>e)))for(r=0;r<n;++r){var O=l[r],E=O.pos-q,L=e.tags[r],D=void 0;(D=!0===L?Ke.makeSpan(["eqn-num"],[],t):!1===L?Ke.makeSpan([],[],t):Ke.makeSpan([],gt(L,t,!0),t)).depth=O.depth,D.height=O.height,H.push({type:"elem",elem:D,shift:E})}for(a=0,N=0;a<s||N<I.length;++a,++N){for(var V=I[N]||{},P=!0;"separator"===V.type;){if(P||((C=Ke.makeSpan(["arraycolsep"],[])).style.width=G(t.fontMetrics().doubleRuleSep),R.push(C)),"|"!==V.separator&&":"!==V.separator)throw new i("Invalid separator type: "+V.separator);var U="|"===V.separator?"solid":"dashed",Y=Ke.makeSpan(["vertical-separator"],[],t);Y.style.height=G(y),Y.style.borderRightWidth=G(c),Y.style.borderRightStyle=U,Y.style.margin="0 "+G(-c/2);var X=y-q;X&&(Y.style.verticalAlign=G(-X)),R.push(Y),V=I[++N]||{},P=!1}if(!(a>=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=m.deflt(V.pregap,u))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=G(W),R.push(C));var _=[];for(r=0;r<n;++r){var j=l[r],$=j[a];if($){var Z=j.pos-q;$.depth=j.depth,$.height=j.height,_.push({type:"elem",elem:$,shift:Z})}}_=Ke.makeVList({positionType:"individualShift",children:_},t),_=Ke.makeSpan(["col-align-"+(V.align||"c")],[_]),R.push(_),(a<s-1||e.hskipBeforeAndAfter)&&0!==(W=m.deflt(V.postgap,u))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=G(W),R.push(C))}}if(l=Ke.makeSpan(["mtable"],R),h.length>0){for(var K=Ke.makeLineSpan("hline",t,c),J=Ke.makeLineSpan("hdashline",t,c),Q=[{type:"elem",elem:l,shift:0}];h.length>0;){var ee=h.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}l=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[l],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([l,re])},Wr={c:"center ",l:"left ",r:"right "},_r=function(e,t){for(var r=[],a=new Tt.MathNode("mtd",[],["mtr-glue"]),n=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i<e.body.length;i++){for(var o=e.body[i],s=[],l=0;l<o.length;l++)s.push(new Tt.MathNode("mtd",[Rt(o[l],t)]));e.tags&&e.tags[i]&&(s.unshift(a),s.push(a),e.leqno?s.unshift(n):s.push(n)),r.push(new Tt.MathNode("mtr",s))}var h=new Tt.MathNode("mtable",r),m=.5===e.arraystretch?.1:.16+e.arraystretch-1+(e.addJot?.09:0);h.setAttribute("rowspacing",G(m));var c="",p="";if(e.cols&&e.cols.length>0){var u=e.cols,d="",g=!1,f=0,v=u.length;"separator"===u[0].type&&(c+="top ",f=1),"separator"===u[u.length-1].type&&(c+="bottom ",v-=1);for(var b=f;b<v;b++)"align"===u[b].type?(p+=Wr[u[b].align],g&&(d+="none "),g=!0):"separator"===u[b].type&&g&&(d+="|"===u[b].separator?"solid ":"dashed ",g=!1);h.setAttribute("columnalign",p.trim()),/[sd]/.test(d)&&h.setAttribute("columnlines",d.trim())}if("align"===e.colSeparationType){for(var y=e.cols||[],x="",w=1;w<y.length;w++)x+=w%2?"0em ":"1em ";h.setAttribute("columnspacing",x.trim())}else"alignat"===e.colSeparationType||"gather"===e.colSeparationType?h.setAttribute("columnspacing","0em"):"small"===e.colSeparationType?h.setAttribute("columnspacing","0.2778em"):"CD"===e.colSeparationType?h.setAttribute("columnspacing","0.5em"):h.setAttribute("columnspacing","1em");var k="",S=e.hLinesBeforeRow;c+=S[0].length>0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M<S.length-1;M++)k+=0===S[M].length?"none ":S[M][0]?"dashed ":"solid ";return/[sd]/.test(k)&&h.setAttribute("rowlines",k.trim()),""!==c&&(h=new Tt.MathNode("menclose",[h])).setAttribute("notation",c.trim()),e.arraystretch&&e.arraystretch<1&&(h=new Tt.MathNode("mstyle",[h])).setAttribute("scriptlevel","1"),h},jr=function(e,t){-1===e.envName.indexOf("ed")&&Fr(e);var r,a=[],n=e.envName.indexOf("at")>-1?"alignat":"align",o="split"===e.envName,s=Ur(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Gr(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c<t[0].body.length;c++){m+=Gt(t[0].body[c],"textord").text}r=Number(m),l=2*r}var p=!l;s.body.forEach((function(e){for(var t=1;t<e.length;t+=2){var a=Gt(e[t],"styling");Gt(a.body[0],"ordgroup").body.unshift(h)}if(p)l<e.length&&(l=e.length);else{var n=e.length/2;if(r<n)throw new i("Too many math in a row: expected "+r+", but got "+n,e[0])}}));for(var u=0;u<l;++u){var d="r",g=0;u%2==1?d="l":u>0&&p&&(g=1),a[u]={type:"align",align:d,pregap:g,postgap:0}}return s.colSeparationType=p?"align":"alignat",s};Lr({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new i("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Ur(e.parser,a,Yr(e.envName))},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var n=e.parser;if(n.consumeSpaces(),"["===n.fetch().text){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,-1==="lcr".indexOf(r))throw new i("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:r}]}}var o=Ur(e.parser,a,Yr(e.envName)),s=Math.max(0,...o.body.map((e=>e.length)));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=(Yt(t[0])?[t[0]]:Gt(t[0],"ordgroup").body).map((function(e){var t=Ut(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new i("Unknown column alignment: "+t,e)}));if(r.length>1)throw new i("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Ur(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new i("{subarray} can contain only one column");return a},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t=Ur(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Yr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){m.contains(["gather","gather*"],e.envName)&&Fr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Gr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:jr,htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Fr(e);var t={autoTag:Gr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Ur(e.parser,t,"display")},htmlBuilder:Xr,mathmlBuilder:_r}),Lr({type:"array",names:["CD"],props:{numArgs:0},handler:e=>(Fr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new i("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,n,o=[],s=[o],l=0;l<t.length;l++){for(var h=t[l],m={type:"styling",body:[],mode:"math",style:"display"},c=0;c<h.length;c++)if(er(h[c])){o.push(m);var p=Ut(h[c+=1]).text,u=new Array(2);if(u[0]={type:"ordgroup",mode:"math",body:[]},u[1]={type:"ordgroup",mode:"math",body:[]},"=|.".indexOf(p)>-1);else{if(!("<>AV".indexOf(p)>-1))throw new i('Expected one of "<>AV=|." after @',h[c]);for(var d=0;d<2;d++){for(var g=!0,f=c+1;f<h.length;f++){if(n=p,("mathord"===(a=h[f]).type||"atom"===a.type)&&a.text===n){g=!1,c=f;break}if(er(h[f]))throw new i("Missing a "+p+" character to complete a CD arrow.",h[f]);u[d].body.push(h[f])}if(g)throw new i("Missing a "+p+" character to complete a CD arrow.",h[c])}}var v={type:"styling",body:[tr(p,u,e)],mode:"math",style:"display"};o.push(v),m={type:"styling",body:[],mode:"math",style:"display"}}else m.body.push(h[c]);l%2==0?o.push(m):o.shift(),o=[],s.push(o)}return e.gullet.endGroup(),e.gullet.endGroup(),{type:"array",mode:"math",body:s,arraystretch:1,addJot:!0,rowGaps:[null],cols:new Array(s[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25}),colSeparationType:"CD",hLinesBeforeRow:new Array(s.length+1).fill([])}}(e.parser)),htmlBuilder:Xr,mathmlBuilder:_r}),Vr("\\nonumber","\\gdef\\@eqnsw{0}"),Vr("\\notag","\\nonumber"),ot({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new i(e.funcName+" valid only within array environment")}});var $r=Er;ot({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];if("ordgroup"!==n.type)throw new i("Invalid environment name",n);for(var o="",s=0;s<n.body.length;++s)o+=Gt(n.body[s],"textord").text;if("\\begin"===a){if(!$r.hasOwnProperty(o))throw new i("No such environment: "+o,n);var l=$r[o],{args:h,optArgs:m}=r.parseArguments("\\begin{"+o+"}",l),c={mode:r.mode,envName:o,parser:r},p=l.handler(c,h,m);r.expect("\\end",!1);var u=r.nextToken,d=Gt(r.parseFunction(),"environment");if(d.name!==o)throw new i("Mismatch: \\begin{"+o+"} matched by \\end{"+d.name+"}",u);return p}return{type:"environment",mode:r.mode,name:o,nameGroup:n}}});var Zr=(e,t)=>{var r=e.font,a=t.withFont(r);return wt(e.body,a)},Kr=(e,t)=>{var r=e.font,a=t.withFont(r);return Rt(e.body,a)},Jr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};ot({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=lt(t[0]),i=a;return i in Jr&&(i=Jr[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:Zr,mathmlBuilder:Kr}),ot({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{var{parser:r}=e,a=t[0],n=m.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:Jt(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),ot({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a,breakOnTokenText:n}=e,{mode:i}=r,o=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Zr,mathmlBuilder:Kr});var Qr=(e,t)=>{var r=t;return"display"===e?r=r.id>=k.SCRIPT.id?r.text():k.DISPLAY:"text"===e&&r.size===k.DISPLAY.size?r=k.TEXT:"script"===e?r=k.SCRIPT:"scriptscript"===e&&(r=k.SCRIPTSCRIPT),r},ea=(e,t)=>{var r,a=Qr(e.size,t.style),n=a.fracNum(),i=a.fracDen();r=t.havingStyle(n);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height<s?s:o.height,o.depth=o.depth<l?l:o.depth}r=t.havingStyle(i);var h,m,c,p,u,d,g,f,v,b,y=wt(e.denom,r,t);if(e.hasBarLine?(e.barSize?(m=F(e.barSize,t),h=Ke.makeLineSpan("frac-line",t,m)):h=Ke.makeLineSpan("frac-line",t),m=h.height,c=h.height):(h=null,m=0,c=t.fontMetrics().defaultRuleThickness),a.size===k.DISPLAY.size||"display"===e.size?(p=t.fontMetrics().num1,u=m>0?3*c:7*c,d=t.fontMetrics().denom1):(m>0?(p=t.fontMetrics().num2,u=c):(p=t.fontMetrics().num3,u=3*c),d=t.fontMetrics().denom2),h){var x=t.fontMetrics().axisHeight;p-o.depth-(x+.5*m)<u&&(p+=u-(p-o.depth-(x+.5*m))),x-.5*m-(y.height-d)<u&&(d+=u-(x-.5*m-(y.height-d)));var w=-(x-.5*m);g=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:y,shift:d},{type:"elem",elem:h,shift:w},{type:"elem",elem:o,shift:-p}]},t)}else{var S=p-o.depth-(y.height-d);S<u&&(p+=.5*(u-S),d+=.5*(u-S)),g=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:y,shift:d},{type:"elem",elem:o,shift:-p}]},t)}return r=t.havingStyle(a),g.height*=r.sizeMultiplier/t.sizeMultiplier,g.depth*=r.sizeMultiplier/t.sizeMultiplier,f=a.size===k.DISPLAY.size?t.fontMetrics().delim1:a.size===k.SCRIPTSCRIPT.size?t.havingStyle(k.SCRIPT).fontMetrics().delim2:t.fontMetrics().delim2,v=null==e.leftDelim?xt(t,["mopen"]):Cr.customSizedDelim(e.leftDelim,f,!0,t.havingStyle(a),e.mode,["mopen"]),b=e.continued?Ke.makeSpan([]):null==e.rightDelim?xt(t,["mclose"]):Cr.customSizedDelim(e.rightDelim,f,!0,t.havingStyle(a),e.mode,["mclose"]),Ke.makeSpan(["mord"].concat(r.sizingClasses(t)),[v,Ke.makeSpan(["mfrac"],[g]),b],t)},ta=(e,t)=>{var r=new Tt.MathNode("mfrac",[Rt(e.numer,t),Rt(e.denom,t)]);if(e.hasBarLine){if(e.barSize){var a=F(e.barSize,t);r.setAttribute("linethickness",G(a))}}else r.setAttribute("linethickness","0px");var n=Qr(e.size,t.style);if(n.size!==t.style.size){r=new Tt.MathNode("mstyle",[r]);var i=n.size===k.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){var o=[];if(null!=e.leftDelim){var s=new Tt.MathNode("mo",[new Tt.TextNode(e.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=e.rightDelim){var l=new Tt.MathNode("mo",[new Tt.TextNode(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),o.push(l)}return Ct(o)}return r};ot({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{var r,{parser:a,funcName:n}=e,i=t[0],o=t[1],s=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",l=")";break;case"\\\\bracefrac":r=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":r=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:a.mode,continued:!1,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:l,size:h,barSize:null}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:i,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),ot({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var t,{parser:r,funcName:a,token:n}=e;switch(a){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:n}}});var ra=["display","text","script","scriptscript"],aa=function(e){var t=null;return e.length>0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var r,{parser:a}=e,n=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?aa(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?aa(l.text):null,m=Gt(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){var d=Gt(u.body[0],"textord");p=ra[Number(d.text)]}}else u=Gt(u,"textord"),p=ra[Number(u.text)];return{type:"genfrac",mode:a.mode,numer:n,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:p}},htmlBuilder:ea,mathmlBuilder:ta}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:a,token:n}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Gt(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0],i=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Gt(t[1],"infix").size),o=t[2],s=i.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:s,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:ea,mathmlBuilder:ta});var na=(e,t)=>{var r,a,n=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(n.sup()),t):wt(e.sub,t.havingStyle(n.sub()),t),a=Gt(e.base,"horizBrace")):a=Gt(e,"horizBrace");var i,o=wt(a.base,t.havingBaseStyle(k.DISPLAY)),s=Ft(a,t);if(a.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t);i=a.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",a.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:t[0]}},htmlBuilder:na,mathmlBuilder:(e,t)=>{var r=Pt(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[1],n=Gt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ht(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{var r=gt(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=Gt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;i<a.length;i++){var o=a[i];"~"===o&&(o="\\textasciitilde"),n.push({type:"textord",mode:"text",text:o})}var s={type:"text",mode:r.mode,font:"\\texttt",body:n};return{type:"href",mode:r.mode,href:a,body:ht(s)}}}),ot({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler(e,t){var{parser:r}=e;return{type:"hbox",mode:r.mode,body:ht(t[0])}},htmlBuilder(e,t){var r=gt(e.body,t,!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>new Tt.MathNode("mrow",qt(e.body,t))}),ot({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:(e,t)=>{var r,{parser:a,funcName:n,token:o}=e,s=Gt(t[0],"raw").string,l=t[1];a.settings.strict&&a.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h={};switch(n){case"\\htmlClass":h.class=s,r={command:"\\htmlClass",class:s};break;case"\\htmlId":h.id=s,r={command:"\\htmlId",id:s};break;case"\\htmlStyle":h.style=s,r={command:"\\htmlStyle",style:s};break;case"\\htmlData":for(var m=s.split(","),c=0;c<m.length;c++){var p=m[c].split("=");if(2!==p.length)throw new i("Error parsing key-value for \\htmlData");h["data-"+p[0].trim()]=p[1].trim()}r={command:"\\htmlData",attributes:h};break;default:throw new Error("Unrecognized html command")}return a.settings.isTrusted(r)?{type:"html",mode:a.mode,attributes:h,body:ht(l)}:a.formatUnsupportedCmd(n)},htmlBuilder:(e,t)=>{var r=gt(e.body,t,!1),a=["enclosing"];e.attributes.class&&a.push(...e.attributes.class.trim().split(/\s+/));var n=Ke.makeSpan(a,r,t);for(var i in e.attributes)"class"!==i&&e.attributes.hasOwnProperty(i)&&n.setAttribute(i,e.attributes[i]);return n},mathmlBuilder:(e,t)=>It(e.body,t)}),ot({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:ht(t[0]),mathml:ht(t[1])}},htmlBuilder:(e,t)=>{var r=gt(e.html,t,!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>It(e.mathml,t)});var ia=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new i("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!P(r))throw new i("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};ot({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{var{parser:a}=e,n={number:0,unit:"em"},o={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var h=Gt(r[0],"raw").string.split(","),m=0;m<h.length;m++){var c=h[m].split("=");if(2===c.length){var p=c[1].trim();switch(c[0].trim()){case"alt":l=p;break;case"width":n=ia(p);break;case"height":o=ia(p);break;case"totalheight":s=ia(p);break;default:throw new i("Invalid key: '"+c[0]+"' in \\includegraphics.")}}}var u=Gt(t[0],"url").url;return""===l&&(l=(l=(l=u).replace(/^.*[\\/]/,"")).substring(0,l.lastIndexOf("."))),a.settings.isTrusted({command:"\\includegraphics",url:u})?{type:"includegraphics",mode:a.mode,alt:l,width:n,height:o,totalheight:s,src:u}:a.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:(e,t)=>{var r=F(e.height,t),a=0;e.totalheight.number>0&&(a=F(e.totalheight,t)-r);var n=0;e.width.number>0&&(n=F(e.width,t));var i={height:G(r+a)};n>0&&(i.width=G(n)),a>0&&(i.verticalAlign=G(-a));var o=new $(e.src,e.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var a=F(e.height,t),n=0;if(e.totalheight.number>0&&(n=F(e.totalheight,t)-a,r.setAttribute("valign",G(-n))),r.setAttribute("height",G(a+n)),e.width.number>0){var i=F(e.width,t);r.setAttribute("width",G(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=Gt(t[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:(e,t)=>Ke.makeGlue(e.dimension,t),mathmlBuilder(e,t){var r=F(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:(e,t)=>{var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var a=Ke.makeSpan(["fix"],[]),n=Ke.makeSpan([e.alignment],[r,a],t),i=Ke.makeSpan(["strut"]);return i.style.height=G(n.height+n.depth),n.depth&&(i.style.verticalAlign=G(-n.depth)),n.children.unshift(i),n=Ke.makeSpan(["thinbox"],[n],t),Ke.makeSpan(["mord","vbox"],[n],t)},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var a="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:a}=e,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new i("Mismatched "+e.funcName)}});var oa=(e,t)=>{switch(t.style.size){case k.DISPLAY.size:return e.display;case k.TEXT.size:return e.text;case k.SCRIPT.size:return e.script;case k.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:(e,t)=>{var r=oa(e,t),a=gt(r,t,!1);return Ke.makeFragment(a)},mathmlBuilder:(e,t)=>{var r=oa(e,t);return It(r,t)}});var sa=(e,t,r,a,n,i,o)=>{e=Ke.makeSpan([],[e]);var s,l,h,c=r&&m.isCharacterBox(r);if(t){var p=wt(t,a.havingStyle(n.sup()),a);l={elem:p,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-p.depth)}}if(r){var u=wt(r,a.havingStyle(n.sub()),a);s={elem:u,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-u.height)}}if(l&&s){var d=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var g=e.height-o;h=Ke.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:G(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},a)}else{if(!l)return e;var f=e.depth+o;h=Ke.makeVList({positionType:"bottom",positionData:f,children:[{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:G(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}var v=[h];if(s&&0!==i&&!c){var b=Ke.makeSpan(["mspace"],[],a);b.style.marginRight=G(i),v.unshift(b)}return Ke.makeSpan(["mop","op-limits"],v,a)},la=["\\smallint"],ha=(e,t)=>{var r,a,n,i=!1;"supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"op"),i=!0):n=Gt(e,"op");var o,s=t.style,l=!1;if(s.size===k.DISPLAY.size&&n.symbol&&!m.contains(la,n.name)&&(l=!0),n.symbol){var h=l?"Size2-Regular":"Size1-Regular",c="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(c=n.name.slice(1),n.name="oiint"===c?"\\iint":"\\iiint"),o=Ke.makeSymbol(n.name,h,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),c.length>0){var p=o.italic,u=Ke.staticSvg(c+"Size"+(l?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:u,shift:l?.08:0}]},t),n.name="\\"+c,o.classes.unshift("mop"),o.italic=p}}else if(n.body){var d=gt(n.body,t,!0);1===d.length&&d[0]instanceof K?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var g=[],f=1;f<n.name.length;f++)g.push(Ke.mathsym(n.name[f],n.mode,t));o=Ke.makeSpan(["mop"],g,t)}var v=0,b=0;return(o instanceof K||"\\oiint"===n.name||"\\oiiint"===n.name)&&!n.suppressBaseShift&&(v=(o.height-o.depth)/2-t.fontMetrics().axisHeight,b=o.italic),i?sa(o,r,a,t,s,b,v):(v&&(o.style.position="relative",o.style.top=G(v)),o)},ma=(e,t)=>{var r;if(e.symbol)r=new zt("mo",[Bt(e.name,e.mode)]),m.contains(la,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new zt("mo",qt(e.body,t));else{r=new zt("mi",[new At(e.name.slice(1))]);var a=new zt("mo",[Bt("\u2061","text")]);r=e.parentIsSupSub?new zt("mrow",[r,a]):Mt([r,a])}return r},ca={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};ot({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=a;return 1===n.length&&(n=ca[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ht(a)}},htmlBuilder:ha,mathmlBuilder:ma});var pa={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};ot({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ha,mathmlBuilder:ma}),ot({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e,a=r;return 1===a.length&&(a=pa[a]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:ha,mathmlBuilder:ma});var ua=(e,t)=>{var r,a,n,i,o=!1;if("supsub"===e.type?(r=e.sup,a=e.sub,n=Gt(e.base,"operatorname"),o=!0):n=Gt(e,"operatorname"),n.body.length>0){for(var s=n.body.map((e=>{var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=gt(s,t.withFont("mathrm"),!0),h=0;h<l.length;h++){var m=l[h];m instanceof K&&(m.text=m.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}i=Ke.makeSpan(["mop"],l,t)}else i=Ke.makeSpan(["mop"],[],t);return o?sa(i,r,a,t,t.style,0,0):i};function da(e,t,r){for(var a=gt(e,t,!1),n=t.sizeMultiplier/r.sizeMultiplier,i=0;i<a.length;i++){var o=a[i].classes.indexOf("sizing");o<0?Array.prototype.push.apply(a[i].classes,t.sizingClasses(r)):a[i].classes[o+1]==="reset-size"+t.size&&(a[i].classes[o+1]="reset-size"+r.size),a[i].height*=n,a[i].depth*=n}return Ke.makeFragment(a)}ot({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(e,t)=>{var{parser:r,funcName:a}=e,n=t[0];return{type:"operatorname",mode:r.mode,body:ht(n),alwaysHandleSupSub:"\\operatornamewithlimits"===a,limits:!1,parentIsSupSub:!1}},htmlBuilder:ua,mathmlBuilder:(e,t)=>{for(var r=qt(e.body,t.withFont("mathrm")),a=!0,n=0;n<r.length;n++){var i=r[n];if(i instanceof Tt.SpaceNode);else if(i instanceof Tt.MathNode)switch(i.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":var o=i.children[0];1===i.children.length&&o instanceof Tt.TextNode?o.text=o.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):a=!1;break;default:a=!1}else a=!1}if(a){var s=r.map((e=>e.toText())).join("");r=[new Tt.TextNode(s)]}var l=new Tt.MathNode("mi",r);l.setAttribute("mathvariant","normal");var h=new Tt.MathNode("mo",[Bt("\u2061","text")]);return e.parentIsSupSub?new Tt.MathNode("mrow",[l,h]):Tt.newDocumentFragment([l,h])}}),Vr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),st({type:"ordgroup",htmlBuilder:(e,t)=>e.semisimple?Ke.makeFragment(gt(e.body,t,!1)):Ke.makeSpan(["mord"],gt(e.body,t,!0),t),mathmlBuilder:(e,t)=>It(e.body,t,!0)}),ot({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,a=t[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle()),a=Ke.makeLineSpan("overline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},t);return Ke.makeSpan(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("mover",[Rt(e.body,t),r]);return a.setAttribute("accent","true"),a}}),ot({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"phantom",mode:r.mode,body:ht(a)}},htmlBuilder:(e,t)=>{var r=gt(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},mathmlBuilder:(e,t)=>{var r=qt(e.body,t);return new Tt.MathNode("mphantom",r)}}),ot({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan([],[wt(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a<r.children.length;a++)r.children[a].height=0,r.children[a].depth=0;return r=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},t),Ke.makeSpan(["mord"],[r],t)},mathmlBuilder:(e,t)=>{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("height","0px"),n.setAttribute("depth","0px"),n}}),ot({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{var{parser:r}=e,a=t[0];return{type:"vphantom",mode:r.mode,body:a}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan(["inner"],[wt(e.body,t.withPhantom())]),a=Ke.makeSpan(["fix"],[]);return Ke.makeSpan(["mord","rlap"],[r,a],t)},mathmlBuilder:(e,t)=>{var r=qt(ht(e.body),t),a=new Tt.MathNode("mphantom",r),n=new Tt.MathNode("mpadded",[a]);return n.setAttribute("width","0px"),n}}),ot({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e,a=Gt(t[0],"size").value,n=t[1];return{type:"raisebox",mode:r.mode,dy:a,body:n}},htmlBuilder(e,t){var r=wt(e.body,t),a=F(e.dy,t);return Ke.makeVList({positionType:"shift",positionData:-a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]),a=e.dy.number+e.dy.unit;return r.setAttribute("voffset",a),r}}),ot({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t}=e;return{type:"internal",mode:t.mode}}}),ot({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(e,t,r){var{parser:a}=e,n=r[0],i=Gt(t[0],"size"),o=Gt(t[1],"size");return{type:"rule",mode:a.mode,shift:n&&Gt(n,"size").value,width:i.value,height:o.value}},htmlBuilder(e,t){var r=Ke.makeSpan(["mord","rule"],[],t),a=F(e.width,t),n=F(e.height,t),i=e.shift?F(e.shift,t):0;return r.style.borderRightWidth=G(a),r.style.borderTopWidth=G(n),r.style.bottom=G(i),r.width=a,r.height=n+i,r.depth=-i,r.maxFontSize=1.125*n*t.sizeMultiplier,r},mathmlBuilder(e,t){var r=F(e.width,t),a=F(e.height,t),n=e.shift?F(e.shift,t):0,i=t.color&&t.getColor()||"black",o=new Tt.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",G(r)),o.setAttribute("height",G(a));var s=new Tt.MathNode("mpadded",[o]);return n>=0?s.setAttribute("height",G(n)):(s.setAttribute("height",G(n)),s.setAttribute("depth",G(-n))),s.setAttribute("voffset",G(n)),s}});var ga=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:ga,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:ga.indexOf(a)+1,body:i}},htmlBuilder:(e,t)=>{var r=t.havingSize(e.size);return da(e.body,r,t)},mathmlBuilder:(e,t)=>{var r=t.havingSize(e.size),a=qt(e.body,r),n=new Tt.MathNode("mstyle",a);return n.setAttribute("mathsize",G(r.sizeMultiplier)),n}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{var{parser:a}=e,n=!1,i=!1,o=r[0]&&Gt(r[0],"ordgroup");if(o)for(var s="",l=0;l<o.body.length;++l){if("t"===(s=o.body[l].text))n=!0;else{if("b"!==s){n=!1,i=!1;break}i=!0}}else n=!0,i=!0;var h=t[0];return{type:"smash",mode:a.mode,body:h,smashHeight:n,smashDepth:i}},htmlBuilder:(e,t)=>{var r=Ke.makeSpan([],[wt(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(var a=0;a<r.children.length;a++)r.children[a].height=0;if(e.smashDepth&&(r.depth=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].depth=0;var i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord"],[i],t)},mathmlBuilder:(e,t)=>{var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),ot({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a}=e,n=r[0],i=t[0];return{type:"sqrt",mode:a.mode,body:i,index:n}},htmlBuilder(e,t){var r=wt(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Ke.wrapFragment(r,t);var a=t.fontMetrics().defaultRuleThickness,n=a;t.style.id<k.TEXT.id&&(n=t.fontMetrics().xHeight);var i=a+n/4,o=r.height+r.depth+i+a,{span:s,ruleWidth:l,advanceWidth:h}=Cr.sqrtImage(o,t),m=s.height-l;m>r.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var c=s.height-r.height-i-l;r.style.paddingLeft=G(h);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+c)},{type:"elem",elem:s},{type:"kern",size:l}]},t);if(e.index){var u=t.havingStyle(k.SCRIPTSCRIPT),d=wt(e.index,u,t),g=.6*(p.height-p.depth),f=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:d}]},t),v=Ke.makeSpan(["root"],[f]);return Ke.makeSpan(["mord","sqrt"],[v,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){var{body:r,index:a}=e;return a?new Tt.MathNode("mroot",[Rt(r,t),Rt(a,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var fa={display:k.DISPLAY,text:k.TEXT,script:k.SCRIPT,scriptscript:k.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r).withFont("");return da(e.body,a,t)},mathmlBuilder(e,t){var r=fa[e.style],a=t.havingStyle(r),n=qt(e.body,a),i=new Tt.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});st({type:"supsub",htmlBuilder(e,t){var r=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===k.DISPLAY.size||r.alwaysHandleSupSub)?ha:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===k.DISPLAY.size||r.limits)?ua:null:"accent"===r.type?m.isCharacterBox(r.base)?Xt:null:"horizBrace"===r.type&&!e.sub===r.isOver?na:null:null}(e,t);if(r)return r(e,t);var a,n,i,{base:o,sup:s,sub:l}=e,h=wt(o,t),c=t.fontMetrics(),p=0,u=0,d=o&&m.isCharacterBox(o);if(s){var g=t.havingStyle(t.style.sup());a=wt(s,g,t),d||(p=h.height-g.fontMetrics().supDrop*g.sizeMultiplier/t.sizeMultiplier)}if(l){var f=t.havingStyle(t.style.sub());n=wt(l,f,t),d||(u=h.depth+f.fontMetrics().subDrop*f.sizeMultiplier/t.sizeMultiplier)}i=t.style===k.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,b=t.sizeMultiplier,y=G(.5/c.ptPerEm/b),x=null;if(n){var w=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(h instanceof K||w)&&(x=G(-h.italic))}if(a&&n){p=Math.max(p,i,a.depth+.25*c.xHeight),u=Math.max(u,c.sub2);var S=4*c.defaultRuleThickness;if(p-a.depth-(n.height-u)<S){u=S-(p-a.depth)+n.height;var M=.8*c.xHeight-(p-a.depth);M>0&&(p+=M,u-=M)}var z=[{type:"elem",elem:n,shift:u,marginRight:y,marginLeft:x},{type:"elem",elem:a,shift:-p,marginRight:y}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(n){u=Math.max(u,c.sub1,n.height-.8*c.xHeight);var A=[{type:"elem",elem:n,marginLeft:x,marginRight:y}];v=Ke.makeVList({positionType:"shift",positionData:u,children:A},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");p=Math.max(p,i,a.depth+.25*c.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-p,children:[{type:"elem",elem:a,marginRight:y}]},t)}var T=yt(h,"right")||"mord";return Ke.makeSpan([T],[h,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder(e,t){var r,a=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(a=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var n,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),a)n=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;n=o&&"op"===o.type&&o.limits&&t.style===k.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===k.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;n=s&&"op"===s.type&&s.limits&&(t.style===k.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===k.DISPLAY)?"munder":"msub"}else{var l=e.base;n=l&&"op"===l.type&&l.limits&&(t.style===k.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===k.DISPLAY)?"mover":"msup"}return new Tt.MathNode(n,i)}}),st({type:"atom",htmlBuilder:(e,t)=>Ke.mathsym(e.text,e.mode,t,["m"+e.family]),mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var a=Nt(e,t);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var va={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"mathord"),mathmlBuilder(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),a=Nt(e,t)||"italic";return a!==va[r.type]&&r.setAttribute("mathvariant",a),r}}),st({type:"textord",htmlBuilder:(e,t)=>Ke.makeOrd(e,t,"textord"),mathmlBuilder(e,t){var r,a=Bt(e.text,e.mode,t),n=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[a]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[a]):"\\prime"===e.text?new Tt.MathNode("mo",[a]):new Tt.MathNode("mi",[a]),n!==va[r.type]&&r.setAttribute("mathvariant",n),r}});var ba={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ya={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder(e,t){if(ya.hasOwnProperty(e.text)){var r=ya[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(ba.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",ba[e.text]],[],t);throw new i('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){if(!ya.hasOwnProperty(e.text)){if(ba.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new i('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var xa=()=>{var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[xa(),new Tt.MathNode("mtd",[It(e.body,t)]),xa(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var wa={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ka={"\\textbf":"textbf","\\textmd":"textmd"},Sa={"\\textit":"textit","\\textup":"textup"},Ma=(e,t)=>{var r=e.font;return r?wa[r]?t.withTextFontFamily(wa[r]):ka[r]?t.withTextFontWeight(ka[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(Sa[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"text",mode:r.mode,body:ht(n),font:a}},htmlBuilder(e,t){var r=Ma(e,t),a=gt(e.body,r,!0);return Ke.makeSpan(["mord","text"],a,r)},mathmlBuilder(e,t){var r=Ma(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=Ke.makeLineSpan("underline-line",t),n=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new Tt.MathNode("munder",[Rt(e.body,t),r]);return a.setAttribute("accentunder","true"),a}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=wt(e.body,t),a=t.fontMetrics().axisHeight,n=.5*(r.height-a-(r.depth+a));return Ke.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:(e,t)=>new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new i("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=za(e),a=[],n=t.havingStyle(t.style.text()),i=0;i<r.length;i++){var o=r[i];"~"===o&&(o="\\textasciitilde"),a.push(Ke.makeSymbol(o,"Typewriter-Regular",e.mode,n,["mord","texttt"]))}return Ke.makeSpan(["mord","text"].concat(n.sizingClasses(t)),Ke.tryCombineChars(a),n)},mathmlBuilder(e,t){var r=new Tt.TextNode(za(e)),a=new Tt.MathNode("mtext",[r]);return a.setAttribute("mathvariant","monospace"),a}});var za=e=>e.body.replace(/ /g,e.star?"\u2423":"\xa0"),Aa=at,Ta="[ \r\n\t]",Ba="(\\\\[a-zA-Z@]+)"+Ta+"*",Ca="[\u0300-\u036f]",Na=new RegExp(Ca+"+$"),qa="("+Ta+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Ca+"*|[\ud800-\udbff][\udc00-\udfff]"+Ca+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+Ba+"|\\\\[^\ud800-\udfff])";class Ia{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(qa,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new n("EOF",new a(this,t,t));var r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new i("Unexpected character: '"+e[t]+"'",new n(e[t],new a(this,t,t+1)));var o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){var s=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new n(o,new a(this,t,this.tokenRegex.lastIndex))}}class Ra{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new i("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(var a=0;a<this.undefStack.length;a++)delete this.undefStack[a][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(e)&&(n[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Ha=Dr;Vr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Vr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Vr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Vr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Vr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Vr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Vr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var Oa={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Vr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new i("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=Oa[r.text])||a>=t)throw new i("Invalid base-"+t+" digit "+r.text);for(var n;null!=(n=Oa[e.future().text])&&n<t;)a*=t,a+=n,e.popToken()}return"\\@char{"+a+"}"}));var Ea=(e,t,r)=>{var a=e.consumeArg().tokens;if(1!==a.length)throw new i("\\newcommand's first argument must be a macro name");var n=a[0].text,o=e.isDefined(n);if(o&&!t)throw new i("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!o&&!r)throw new i("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var s=0;if(1===(a=e.consumeArg().tokens).length&&"["===a[0].text){for(var l="",h=e.expandNextToken();"]"!==h.text&&"EOF"!==h.text;)l+=h.text,h=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new i("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return e.macros.set(n,{tokens:a,numArgs:s}),""};Vr("\\newcommand",(e=>Ea(e,!1,!0))),Vr("\\renewcommand",(e=>Ea(e,!0,!1))),Vr("\\providecommand",(e=>Ea(e,!0,!0))),Vr("\\message",(e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\errmessage",(e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Vr("\\show",(e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),Aa[r],ne.math[r],ne.text[r]),""})),Vr("\\bgroup","{"),Vr("\\egroup","}"),Vr("~","\\nobreakspace"),Vr("\\lq","`"),Vr("\\rq","'"),Vr("\\aa","\\r a"),Vr("\\AA","\\r A"),Vr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Vr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Vr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Vr("\u212c","\\mathscr{B}"),Vr("\u2130","\\mathscr{E}"),Vr("\u2131","\\mathscr{F}"),Vr("\u210b","\\mathscr{H}"),Vr("\u2110","\\mathscr{I}"),Vr("\u2112","\\mathscr{L}"),Vr("\u2133","\\mathscr{M}"),Vr("\u211b","\\mathscr{R}"),Vr("\u212d","\\mathfrak{C}"),Vr("\u210c","\\mathfrak{H}"),Vr("\u2128","\\mathfrak{Z}"),Vr("\\Bbbk","\\Bbb{k}"),Vr("\xb7","\\cdotp"),Vr("\\llap","\\mathllap{\\textrm{#1}}"),Vr("\\rlap","\\mathrlap{\\textrm{#1}}"),Vr("\\clap","\\mathclap{\\textrm{#1}}"),Vr("\\mathstrut","\\vphantom{(}"),Vr("\\underbar","\\underline{\\text{#1}}"),Vr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Vr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Vr("\\ne","\\neq"),Vr("\u2260","\\neq"),Vr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Vr("\u2209","\\notin"),Vr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Vr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Vr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Vr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Vr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Vr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Vr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Vr("\u27c2","\\perp"),Vr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Vr("\u220c","\\notni"),Vr("\u231c","\\ulcorner"),Vr("\u231d","\\urcorner"),Vr("\u231e","\\llcorner"),Vr("\u231f","\\lrcorner"),Vr("\xa9","\\copyright"),Vr("\xae","\\textregistered"),Vr("\ufe0f","\\textregistered"),Vr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Vr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Vr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Vr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Vr("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),Vr("\u22ee","\\vdots"),Vr("\\varGamma","\\mathit{\\Gamma}"),Vr("\\varDelta","\\mathit{\\Delta}"),Vr("\\varTheta","\\mathit{\\Theta}"),Vr("\\varLambda","\\mathit{\\Lambda}"),Vr("\\varXi","\\mathit{\\Xi}"),Vr("\\varPi","\\mathit{\\Pi}"),Vr("\\varSigma","\\mathit{\\Sigma}"),Vr("\\varUpsilon","\\mathit{\\Upsilon}"),Vr("\\varPhi","\\mathit{\\Phi}"),Vr("\\varPsi","\\mathit{\\Psi}"),Vr("\\varOmega","\\mathit{\\Omega}"),Vr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Vr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Vr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Vr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Vr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Vr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var La={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Vr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in La?t=La[r]:("\\not"===r.slice(0,4)||r in ne.math&&m.contains(["bin","rel"],ne.math[r].group))&&(t="\\dotsb"),t}));var Da={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Vr("\\dotso",(function(e){return e.future().text in Da?"\\ldots\\,":"\\ldots"})),Vr("\\dotsc",(function(e){var t=e.future().text;return t in Da&&","!==t?"\\ldots\\,":"\\ldots"})),Vr("\\cdots",(function(e){return e.future().text in Da?"\\@cdots\\,":"\\@cdots"})),Vr("\\dotsb","\\cdots"),Vr("\\dotsm","\\cdots"),Vr("\\dotsi","\\!\\cdots"),Vr("\\dotsx","\\ldots\\,"),Vr("\\DOTSI","\\relax"),Vr("\\DOTSB","\\relax"),Vr("\\DOTSX","\\relax"),Vr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Vr("\\,","\\tmspace+{3mu}{.1667em}"),Vr("\\thinspace","\\,"),Vr("\\>","\\mskip{4mu}"),Vr("\\:","\\tmspace+{4mu}{.2222em}"),Vr("\\medspace","\\:"),Vr("\\;","\\tmspace+{5mu}{.2777em}"),Vr("\\thickspace","\\;"),Vr("\\!","\\tmspace-{3mu}{.1667em}"),Vr("\\negthinspace","\\!"),Vr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Vr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Vr("\\enspace","\\kern.5em "),Vr("\\enskip","\\hskip.5em\\relax"),Vr("\\quad","\\hskip1em\\relax"),Vr("\\qquad","\\hskip2em\\relax"),Vr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Vr("\\tag@paren","\\tag@literal{({#1})}"),Vr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new i("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Vr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Vr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Vr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Vr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Vr("\\newline","\\\\\\relax"),Vr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Va=G(C["Main-Regular"]["T".charCodeAt(0)][1]-.7*C["Main-Regular"]["A".charCodeAt(0)][1]);Vr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Vr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Va+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Vr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Vr("\\@hspace","\\hskip #1\\relax"),Vr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Vr("\\ordinarycolon",":"),Vr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Vr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Vr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Vr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Vr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Vr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Vr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Vr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Vr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Vr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Vr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Vr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Vr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Vr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Vr("\u2237","\\dblcolon"),Vr("\u2239","\\eqcolon"),Vr("\u2254","\\coloneqq"),Vr("\u2255","\\eqqcolon"),Vr("\u2a74","\\Coloneqq"),Vr("\\ratio","\\vcentcolon"),Vr("\\coloncolon","\\dblcolon"),Vr("\\colonequals","\\coloneqq"),Vr("\\coloncolonequals","\\Coloneqq"),Vr("\\equalscolon","\\eqqcolon"),Vr("\\equalscoloncolon","\\Eqqcolon"),Vr("\\colonminus","\\coloneq"),Vr("\\coloncolonminus","\\Coloneq"),Vr("\\minuscolon","\\eqcolon"),Vr("\\minuscoloncolon","\\Eqcolon"),Vr("\\coloncolonapprox","\\Colonapprox"),Vr("\\coloncolonsim","\\Colonsim"),Vr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Vr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Vr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Vr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Vr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Vr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Vr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Vr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Vr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Vr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Vr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Vr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Vr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Vr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Vr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Vr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Vr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Vr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Vr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Vr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Vr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Vr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Vr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Vr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Vr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Vr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Vr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Vr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Vr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Vr("\u27e6","\\llbracket"),Vr("\u27e7","\\rrbracket"),Vr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Vr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Vr("\u2983","\\lBrace"),Vr("\u2984","\\rBrace"),Vr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Vr("\u29b5","\\minuso"),Vr("\\darr","\\downarrow"),Vr("\\dArr","\\Downarrow"),Vr("\\Darr","\\Downarrow"),Vr("\\lang","\\langle"),Vr("\\rang","\\rangle"),Vr("\\uarr","\\uparrow"),Vr("\\uArr","\\Uparrow"),Vr("\\Uarr","\\Uparrow"),Vr("\\N","\\mathbb{N}"),Vr("\\R","\\mathbb{R}"),Vr("\\Z","\\mathbb{Z}"),Vr("\\alef","\\aleph"),Vr("\\alefsym","\\aleph"),Vr("\\Alpha","\\mathrm{A}"),Vr("\\Beta","\\mathrm{B}"),Vr("\\bull","\\bullet"),Vr("\\Chi","\\mathrm{X}"),Vr("\\clubs","\\clubsuit"),Vr("\\cnums","\\mathbb{C}"),Vr("\\Complex","\\mathbb{C}"),Vr("\\Dagger","\\ddagger"),Vr("\\diamonds","\\diamondsuit"),Vr("\\empty","\\emptyset"),Vr("\\Epsilon","\\mathrm{E}"),Vr("\\Eta","\\mathrm{H}"),Vr("\\exist","\\exists"),Vr("\\harr","\\leftrightarrow"),Vr("\\hArr","\\Leftrightarrow"),Vr("\\Harr","\\Leftrightarrow"),Vr("\\hearts","\\heartsuit"),Vr("\\image","\\Im"),Vr("\\infin","\\infty"),Vr("\\Iota","\\mathrm{I}"),Vr("\\isin","\\in"),Vr("\\Kappa","\\mathrm{K}"),Vr("\\larr","\\leftarrow"),Vr("\\lArr","\\Leftarrow"),Vr("\\Larr","\\Leftarrow"),Vr("\\lrarr","\\leftrightarrow"),Vr("\\lrArr","\\Leftrightarrow"),Vr("\\Lrarr","\\Leftrightarrow"),Vr("\\Mu","\\mathrm{M}"),Vr("\\natnums","\\mathbb{N}"),Vr("\\Nu","\\mathrm{N}"),Vr("\\Omicron","\\mathrm{O}"),Vr("\\plusmn","\\pm"),Vr("\\rarr","\\rightarrow"),Vr("\\rArr","\\Rightarrow"),Vr("\\Rarr","\\Rightarrow"),Vr("\\real","\\Re"),Vr("\\reals","\\mathbb{R}"),Vr("\\Reals","\\mathbb{R}"),Vr("\\Rho","\\mathrm{P}"),Vr("\\sdot","\\cdot"),Vr("\\sect","\\S"),Vr("\\spades","\\spadesuit"),Vr("\\sub","\\subset"),Vr("\\sube","\\subseteq"),Vr("\\supe","\\supseteq"),Vr("\\Tau","\\mathrm{T}"),Vr("\\thetasym","\\vartheta"),Vr("\\weierp","\\wp"),Vr("\\Zeta","\\mathrm{Z}"),Vr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Vr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Vr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Vr("\\bra","\\mathinner{\\langle{#1}|}"),Vr("\\ket","\\mathinner{|{#1}\\rangle}"),Vr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Vr("\\Bra","\\left\\langle#1\\right|"),Vr("\\Ket","\\left|#1\\right\\rangle");var Pa=e=>t=>{var r=t.consumeArg().tokens,a=t.consumeArg().tokens,n=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=t=>r=>{e&&(r.macros.set("|",o),n.length&&r.macros.set("\\|",s));var i=t;!t&&n.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?n:a,numArgs:0}};t.macros.set("|",l(!1)),n.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([...i,...h,...r]);return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}};Vr("\\bra@ket",Pa(!1)),Vr("\\bra@set",Pa(!0)),Vr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Vr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Vr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Vr("\\angln","{\\angl n}"),Vr("\\blue","\\textcolor{##6495ed}{#1}"),Vr("\\orange","\\textcolor{##ffa500}{#1}"),Vr("\\pink","\\textcolor{##ff00af}{#1}"),Vr("\\red","\\textcolor{##df0030}{#1}"),Vr("\\green","\\textcolor{##28ae7b}{#1}"),Vr("\\gray","\\textcolor{gray}{#1}"),Vr("\\purple","\\textcolor{##9d38bd}{#1}"),Vr("\\blueA","\\textcolor{##ccfaff}{#1}"),Vr("\\blueB","\\textcolor{##80f6ff}{#1}"),Vr("\\blueC","\\textcolor{##63d9ea}{#1}"),Vr("\\blueD","\\textcolor{##11accd}{#1}"),Vr("\\blueE","\\textcolor{##0c7f99}{#1}"),Vr("\\tealA","\\textcolor{##94fff5}{#1}"),Vr("\\tealB","\\textcolor{##26edd5}{#1}"),Vr("\\tealC","\\textcolor{##01d1c1}{#1}"),Vr("\\tealD","\\textcolor{##01a995}{#1}"),Vr("\\tealE","\\textcolor{##208170}{#1}"),Vr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Vr("\\greenB","\\textcolor{##8af281}{#1}"),Vr("\\greenC","\\textcolor{##74cf70}{#1}"),Vr("\\greenD","\\textcolor{##1fab54}{#1}"),Vr("\\greenE","\\textcolor{##0d923f}{#1}"),Vr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Vr("\\goldB","\\textcolor{##ffbb71}{#1}"),Vr("\\goldC","\\textcolor{##ff9c39}{#1}"),Vr("\\goldD","\\textcolor{##e07d10}{#1}"),Vr("\\goldE","\\textcolor{##a75a05}{#1}"),Vr("\\redA","\\textcolor{##fca9a9}{#1}"),Vr("\\redB","\\textcolor{##ff8482}{#1}"),Vr("\\redC","\\textcolor{##f9685d}{#1}"),Vr("\\redD","\\textcolor{##e84d39}{#1}"),Vr("\\redE","\\textcolor{##bc2612}{#1}"),Vr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Vr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Vr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Vr("\\maroonD","\\textcolor{##ca337c}{#1}"),Vr("\\maroonE","\\textcolor{##9e034e}{#1}"),Vr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Vr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Vr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Vr("\\purpleD","\\textcolor{##7854ab}{#1}"),Vr("\\purpleE","\\textcolor{##543b78}{#1}"),Vr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Vr("\\mintB","\\textcolor{##edf2df}{#1}"),Vr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Vr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Vr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Vr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Vr("\\grayD","\\textcolor{##d6d8da}{#1}"),Vr("\\grayE","\\textcolor{##babec2}{#1}"),Vr("\\grayF","\\textcolor{##888d93}{#1}"),Vr("\\grayG","\\textcolor{##626569}{#1}"),Vr("\\grayH","\\textcolor{##3b3e40}{#1}"),Vr("\\grayI","\\textcolor{##21242c}{#1}"),Vr("\\kaBlue","\\textcolor{##314453}{#1}"),Vr("\\kaGreen","\\textcolor{##71B307}{#1}");var Fa={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class Ga{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Ra(Ha,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new Ia(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,r,a;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:a,end:r}=this.consumeArg(["]"]))}else({tokens:a,start:t,end:r}=this.consumeArg());return this.pushToken(new n("EOF",r.loc)),this.pushTokens(a),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,n=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new i("Extra }",a)}else if("EOF"===a.text)throw new i("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===n.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:a}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new i("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;a<r.length;a++){var n=this.popToken();if(r[a]!==n.text)throw new i("Use of the macro doesn't match its definition",n)}}for(var o=[],s=0;s<e;s++)o.push(this.consumeArg(t&&t[s+1]).tokens);return o}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new i("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),r=t.text,a=t.noexpand?null:this._getExpansion(r);if(null==a||e&&a.unexpandable){if(e&&null==a&&"\\"===r[0]&&!this.isDefined(r))throw new i("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);var n=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(n=n.slice()).length-1;s>=0;--s){var l=n[s];if("#"===l.text){if(0===s)throw new i("Incomplete placeholder at end of macro body",l);if("#"===(l=n[--s]).text)n.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new i("Not a valid argument number",l);n.splice(s,2,...o[+l.text-1])}}}return this.pushTokens(n),n.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new n(e)]):void 0}expandTokens(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){var a=this.stack.pop();a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),t.push(a)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var a="function"==typeof t?t(this):t;if("string"==typeof a){var n=0;if(-1!==a.indexOf("#"))for(var i=a.replace(/##/g,"");-1!==i.indexOf("#"+(n+1));)++n;for(var o=new Ia(a,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:n}}return a}isDefined(e){return this.macros.has(e)||Aa.hasOwnProperty(e)||ne.math.hasOwnProperty(e)||ne.text.hasOwnProperty(e)||Fa.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:Aa.hasOwnProperty(e)&&!Aa[e].primitive}}var Ua=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Ya=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Xa={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Wa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"};class _a{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Ga(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new i("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new n("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){for(var r=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==_a.endOfExpression.indexOf(a.text))break;if(t&&a.text===t)break;if(e&&Aa[a.text]&&Aa[a.text].infix)break;var n=this.parseAtom(t);if(!n)break;"internal"!==n.type&&r.push(n)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){for(var t,r=-1,a=0;a<e.length;a++)if("infix"===e[a].type){if(-1!==r)throw new i("only one infix operator per group",e[a].token);r=a,t=e[a].replaceWith}if(-1!==r&&t){var n,o,s=e.slice(0,r),l=e.slice(r+1);return n=1===s.length&&"ordgroup"===s[0].type?s[0]:{type:"ordgroup",mode:this.mode,body:s},o=1===l.length&&"ordgroup"===l[0].type?l[0]:{type:"ordgroup",mode:this.mode,body:l},["\\\\abovefrac"===t?this.callFunction(t,[n,e[r],o],[]):this.callFunction(t,[n,o],[])]}return e}handleSupSubscript(e){var t=this.fetch(),r=t.text;this.consume(),this.consumeSpaces();var a=this.parseGroup(e);if(!a)throw new i("Expected group after '"+r+"'",t);return a}formatUnsupportedCmd(e){for(var t=[],r=0;r<e.length;r++)t.push({type:"textord",mode:"text",text:e[r]});var a={type:"text",mode:this.mode,body:t};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[a]}}parseAtom(e){var t,r,a=this.parseGroup("atom",e);if("text"===this.mode)return a;for(;;){this.consumeSpaces();var o=this.fetch();if("\\limits"===o.text||"\\nolimits"===o.text){if(a&&"op"===a.type){var s="\\limits"===o.text;a.limits=s,a.alwaysHandleSupSub=!0}else{if(!a||"operatorname"!==a.type)throw new i("Limit controls must follow a math operator",o);a.alwaysHandleSupSub&&(a.limits="\\limits"===o.text)}this.consume()}else if("^"===o.text){if(t)throw new i("Double superscript",o);t=this.handleSupSubscript("superscript")}else if("_"===o.text){if(r)throw new i("Double subscript",o);r=this.handleSupSubscript("subscript")}else if("'"===o.text){if(t)throw new i("Double superscript",o);var l={type:"textord",mode:this.mode,text:"\\prime"},h=[l];for(this.consume();"'"===this.fetch().text;)h.push(l),this.consume();"^"===this.fetch().text&&h.push(this.handleSupSubscript("superscript")),t={type:"ordgroup",mode:this.mode,body:h}}else{if(!Ya[o.text])break;var m=Ua.test(o.text),c=[];for(c.push(new n(Ya[o.text])),this.consume();;){var p=this.fetch().text;if(!Ya[p])break;if(Ua.test(p)!==m)break;c.unshift(new n(Ya[p])),this.consume()}var u=this.subparse(c);m?r={type:"ordgroup",mode:"math",body:u}:t={type:"ordgroup",mode:"math",body:u}}}return t||r?{type:"supsub",mode:this.mode,base:a,sup:t,sub:r}:a}parseFunction(e,t){var r=this.fetch(),a=r.text,n=Aa[a];if(!n)return null;if(this.consume(),t&&"atom"!==t&&!n.allowedInArgument)throw new i("Got function '"+a+"' with no arguments"+(t?" as "+t:""),r);if("text"===this.mode&&!n.allowedInText)throw new i("Can't use function '"+a+"' in text mode",r);if("math"===this.mode&&!1===n.allowedInMath)throw new i("Can't use function '"+a+"' in math mode",r);var{args:o,optArgs:s}=this.parseArguments(a,n);return this.callFunction(a,o,s,r,e)}callFunction(e,t,r,a,n){var o={funcName:e,parser:this,token:a,breakOnTokenText:n},s=Aa[e];if(s&&s.handler)return s.handler(o,t,r);throw new i("No function handler for "+e)}parseArguments(e,t){var r=t.numArgs+t.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var a=[],n=[],o=0;o<r;o++){var s=t.argTypes&&t.argTypes[o],l=o<t.numOptionalArgs;(t.primitive&&null==s||"sqrt"===t.type&&1===o&&null==n[0])&&(s="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",s,l);if(l)n.push(h);else{if(null==h)throw new i("Null argument, please report this as a bug");a.push(h)}}return{args:a,optArgs:n}}parseGroupOfType(e,t,r){switch(t){case"color":return this.parseColorGroup(r);case"size":return this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r);case"math":case"text":return this.parseArgumentGroup(r,t);case"hbox":var a=this.parseArgumentGroup(r,"text");return null!=a?{type:"styling",mode:a.mode,body:[a],style:"text"}:null;case"raw":var n=this.parseStringGroup("raw",r);return null!=n?{type:"raw",mode:"text",string:n.text}:null;case"primitive":if(r)throw new i("A primitive argument cannot be optional");var o=this.parseGroup(e);if(null==o)throw new i("Expected group as "+e,this.fetch());return o;case"original":case null:case void 0:return this.parseArgumentGroup(r);default:throw new i("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;" "===this.fetch().text;)this.consume()}parseStringGroup(e,t){var r=this.gullet.scanArgument(t);if(null==r)return null;for(var a,n="";"EOF"!==(a=this.fetch()).text;)n+=a.text,this.consume();return this.consume(),r.text=n,r}parseRegexGroup(e,t){for(var r,a=this.fetch(),n=a,o="";"EOF"!==(r=this.fetch()).text&&e.test(o+r.text);)o+=(n=r).text,this.consume();if(""===o)throw new i("Invalid "+t+": '"+a.text+"'",a);return a.range(n,o)}parseColorGroup(e){var t=this.parseStringGroup("color",e);if(null==t)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(t.text);if(!r)throw new i("Invalid color: '"+t.text+"'",t);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a="#"+a),{type:"color-token",mode:this.mode,color:a}}parseSizeGroup(e){var t,r=!1;if(this.gullet.consumeSpaces(),!(t=e||"{"===this.gullet.future().text?this.parseStringGroup("size",e):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;e||0!==t.text.length||(t.text="0pt",r=!0);var a=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!a)throw new i("Invalid size: '"+t.text+"'",t);var n={number:+(a[1]+a[2]),unit:a[3]};if(!P(n))throw new i("Invalid unit: '"+n.unit+"'",t);return{type:"size",mode:this.mode,value:n,isBlank:r}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),null==t)return null;var r=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:r}}parseArgumentGroup(e,t){var r=this.gullet.scanArgument(e);if(null==r)return null;var a=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();var n=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var i={type:"ordgroup",mode:this.mode,loc:r.loc,body:n};return t&&this.switchMode(a),i}parseGroup(e,t){var r,n=this.fetch(),o=n.text;if("{"===o||"\\begingroup"===o){this.consume();var s="{"===o?"}":"\\endgroup";this.gullet.beginGroup();var l=this.parseExpression(!1,s),h=this.fetch();this.expect(s),this.gullet.endGroup(),r={type:"ordgroup",mode:this.mode,loc:a.range(n,h),body:l,semisimple:"\\begingroup"===o||void 0}}else if(null==(r=this.parseFunction(t,e)||this.parseSymbol())&&"\\"===o[0]&&!Fa.hasOwnProperty(o)){if(this.settings.throwOnError)throw new i("Undefined control sequence: "+o,n);r=this.formatUnsupportedCmd(o),this.consume()}return r}formLigatures(e){for(var t=e.length-1,r=0;r<t;++r){var n=e[r],i=n.text;"-"===i&&"-"===e[r+1].text&&(r+1<t&&"-"===e[r+2].text?(e.splice(r,3,{type:"textord",mode:"text",loc:a.range(n,e[r+2]),text:"---"}),t-=2):(e.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,e[r+1]),text:"--"}),t-=1)),"'"!==i&&"`"!==i||e[r+1].text!==i||(e.splice(r,2,{type:"textord",mode:"text",loc:a.range(n,e[r+1]),text:i+i}),t-=1)}}parseSymbol(){var e=this.fetch(),t=e.text;if(/^\\verb[^a-zA-Z]/.test(t)){this.consume();var r=t.slice(5),n="*"===r.charAt(0);if(n&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new i("\\verb assertion failed --\n please report what input caused this bug");return{type:"verb",mode:"text",body:r=r.slice(1,-1),star:n}}Wa.hasOwnProperty(t[0])&&!ne[this.mode][t[0]]&&(this.settings.strict&&"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+t[0]+'" used in math mode',e),t=Wa[t[0]]+t.slice(1));var o,s=Na.exec(t);if(s&&("i"===(t=t.substring(0,s.index))?t="\u0131":"j"===t&&(t="\u0237")),ne[this.mode][t]){this.settings.strict&&"math"===this.mode&&Ee.indexOf(t)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var l,h=ne[this.mode][t].group,m=a.range(e);if(re.hasOwnProperty(h)){var c=h;l={type:"atom",mode:this.mode,family:c,loc:m,text:t}}else l={type:h,mode:this.mode,loc:m,text:t};o=l}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(z(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:a.range(e),text:t}}if(this.consume(),s)for(var p=0;p<s[0].length;p++){var u=s[0][p];if(!Xa[u])throw new i("Unknown accent ' "+u+"'",e);var d=Xa[u][this.mode]||Xa[u].text;if(!d)throw new i("Accent "+u+" unsupported in "+this.mode+" mode",e);o={type:"accent",mode:this.mode,loc:a.range(e),label:d,isStretchy:!1,isShifty:!0,base:o}}return o}}_a.endOfExpression=["}","\\endgroup","\\end","\\right","&"];var ja=function(e,t){if(!("string"==typeof e||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new _a(e,t);delete r.gullet.macros.current["\\df@tag"];var a=r.parse();if(delete r.gullet.macros.current["\\current@color"],delete r.gullet.macros.current["\\color"],r.gullet.macros.get("\\df@tag")){if(!t.displayMode)throw new i("\\tag works only in display equations");a=[{type:"tag",mode:"text",body:a,tag:r.subparse([new n("\\df@tag")])}]}return a},$a=function(e,t,r){t.textContent="";var a=Ka(e,r).toNode();t.appendChild(a)};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),$a=function(){throw new i("KaTeX doesn't work in quirks mode.")});var Za=function(e,t,r){if(r.throwOnError||!(e instanceof i))throw e;var a=Ke.makeSpan(["katex-error"],[new K(t)]);return a.setAttribute("title",e.toString()),a.setAttribute("style","color:"+r.errorColor),a},Ka=function(e,t){var r=new u(t);try{return function(e,t,r){var a,n=Ot(r);if("mathml"===r.output)return Ht(e,t,n,r.displayMode,!0);if("html"===r.output){var i=St(e,n);a=Ke.makeSpan(["katex"],[i])}else{var o=Ht(e,t,n,r.displayMode,!1),s=St(e,n);a=Ke.makeSpan(["katex"],[o,s])}return Et(a,r)}(ja(e,r),e,r)}catch(a){return Za(a,e,r)}},Ja={version:"0.16.11",render:$a,renderToString:function(e,t){return Ka(e,t).toMarkup()},ParseError:i,SETTINGS_SCHEMA:c,__parse:function(e,t){var r=new u(t);return ja(e,r)},__renderToDomTree:Ka,__renderToHTMLTree:function(e,t){var r=new u(t);try{return function(e,t,r){var a=St(e,Ot(r)),n=Ke.makeSpan(["katex"],[a]);return Et(n,r)}(ja(e,r),0,r)}catch(a){return Za(a,e,r)}},__setFontMetrics:function(e,t){C[e]=t},__defineSymbol:ie,__defineFunction:ot,__defineMacro:Vr,__domTree:{Span:_,Anchor:j,SymbolNode:K,SvgNode:J,PathNode:Q,LineNode:ee}}}}]); \ No newline at end of file diff --git a/assets/js/2237.765a0d7b.js b/assets/js/2237.765a0d7b.js new file mode 100644 index 00000000000..f303971e541 --- /dev/null +++ b/assets/js/2237.765a0d7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2237],{23363:(e,t,n)=>{n.d(t,{A:()=>a});n(96540);var i=n(18215),o=n(21312),s=n(51107),r=n(74848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},82237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(96540);var i=n(21312),o=n(1003),s=n(59504),r=n(23363),a=n(74848);function d(){const e=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.d86165fd.js b/assets/js/22dd74f7.d86165fd.js new file mode 100644 index 00000000000..1ae68f20e9d --- /dev/null +++ b/assets/js/22dd74f7.d86165fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"publicDocSidebar":[{"type":"link","label":"Introduction","href":"/public-networks/","docId":"public-networks/index","unlisted":false},{"type":"category","label":"Get started","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"System requirements","href":"/public-networks/get-started/system-requirements","docId":"public-networks/get-started/system-requirements","unlisted":false},{"type":"category","label":"Install Besu","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Run Besu from Docker image","href":"/public-networks/get-started/install/run-docker-image","docId":"public-networks/get-started/install/run-docker-image","unlisted":false},{"type":"link","label":"Install binary distribution","href":"/public-networks/get-started/install/binary-distribution","docId":"public-networks/get-started/install/binary-distribution","unlisted":false}],"href":"/public-networks/get-started/install/"},{"type":"link","label":"Start Besu","href":"/public-networks/get-started/start-node","docId":"public-networks/get-started/start-node","unlisted":false},{"type":"category","label":"Connect to a network","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Sync Besu","href":"/public-networks/get-started/connect/sync-node","docId":"public-networks/get-started/connect/sync-node","unlisted":false},{"type":"link","label":"Connect to Mainnet","href":"/public-networks/get-started/connect/mainnet","docId":"public-networks/get-started/connect/mainnet","unlisted":false},{"type":"link","label":"Connect to a testnet","href":"/public-networks/get-started/connect/testnet","docId":"public-networks/get-started/connect/testnet","unlisted":false}],"href":"/public-networks/get-started/connect/"},{"type":"link","label":"Migrate to Besu","href":"/public-networks/get-started/migrate-to-besu","docId":"public-networks/get-started/migrate-to-besu","unlisted":false}],"href":"/public-networks/get-started"},{"type":"category","label":"How to","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Configure Besu","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use a profile","href":"/public-networks/how-to/configure-besu/profile","docId":"public-networks/how-to/configure-besu/profile","unlisted":false}],"href":"/public-networks/how-to/configure-besu/"},{"type":"category","label":"Use the Besu API","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use JSON-RPC over HTTP, WS, and IPC","href":"/public-networks/how-to/use-besu-api/json-rpc","docId":"public-networks/how-to/use-besu-api/json-rpc","unlisted":false},{"type":"link","label":"Use RPC Pub/Sub over WS","href":"/public-networks/how-to/use-besu-api/rpc-pubsub","docId":"public-networks/how-to/use-besu-api/rpc-pubsub","unlisted":false},{"type":"link","label":"Use GraphQL over HTTP","href":"/public-networks/how-to/use-besu-api/graphql","docId":"public-networks/how-to/use-besu-api/graphql","unlisted":false},{"type":"link","label":"Authenticate over JSON-RPC requests","href":"/public-networks/how-to/use-besu-api/authenticate","docId":"public-networks/how-to/use-besu-api/authenticate","unlisted":false},{"type":"link","label":"Access logs using JSON-RPC","href":"/public-networks/how-to/use-besu-api/access-logs","docId":"public-networks/how-to/use-besu-api/access-logs","unlisted":false}],"href":"/public-networks/how-to/use-besu-api/"},{"type":"link","label":"Use the Engine API","href":"/public-networks/how-to/use-engine-api","docId":"public-networks/how-to/use-engine-api","unlisted":false},{"type":"link","label":"Create and send transactions","href":"/public-networks/how-to/send-transactions","docId":"public-networks/how-to/send-transactions","unlisted":false},{"type":"category","label":"Find and connect to peers","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure static nodes","href":"/public-networks/how-to/connect/static-nodes","docId":"public-networks/how-to/connect/static-nodes","unlisted":false},{"type":"link","label":"Configure ports","href":"/public-networks/how-to/connect/configure-ports","docId":"public-networks/how-to/connect/configure-ports","unlisted":false},{"type":"link","label":"Manage peers","href":"/public-networks/how-to/connect/manage-peers","docId":"public-networks/how-to/connect/manage-peers","unlisted":false},{"type":"link","label":"Specify NAT method","href":"/public-networks/how-to/connect/specify-nat","docId":"public-networks/how-to/connect/specify-nat","unlisted":false}]},{"type":"category","label":"Monitor nodes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use metrics","href":"/public-networks/how-to/monitor/metrics","docId":"public-networks/how-to/monitor/metrics","unlisted":false},{"type":"link","label":"Understand metrics","href":"/public-networks/how-to/monitor/understand-metrics","docId":"public-networks/how-to/monitor/understand-metrics","unlisted":false},{"type":"link","label":"Configure logging","href":"/public-networks/how-to/monitor/logging","docId":"public-networks/how-to/monitor/logging","unlisted":false}],"href":"/public-networks/how-to/monitor/"},{"type":"category","label":"Configure high availability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Sample load balancer configurations","href":"/public-networks/how-to/configure-ha/sample-configuration","docId":"public-networks/how-to/configure-ha/sample-configuration","unlisted":false}],"href":"/public-networks/how-to/configure-ha/"},{"type":"category","label":"Configure Java","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Install and update Java","href":"/public-networks/how-to/configure-java/install-update-java","docId":"public-networks/how-to/configure-java/install-update-java","unlisted":false},{"type":"link","label":"Pass JVM options","href":"/public-networks/how-to/configure-java/pass-jvm-options","docId":"public-networks/how-to/configure-java/pass-jvm-options","unlisted":false},{"type":"link","label":"Manage JVM memory","href":"/public-networks/how-to/configure-java/manage-memory","docId":"public-networks/how-to/configure-java/manage-memory","unlisted":false},{"type":"link","label":"Use Java Flight Recorder","href":"/public-networks/how-to/configure-java/java-flight-recorder","docId":"public-networks/how-to/configure-java/java-flight-recorder","unlisted":false}]},{"type":"category","label":"Develop dapps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use Hardhat","href":"/public-networks/how-to/develop/hardhat","docId":"public-networks/how-to/develop/hardhat","unlisted":false},{"type":"link","label":"Use client libraries","href":"/public-networks/how-to/develop/client-libraries","docId":"public-networks/how-to/develop/client-libraries","unlisted":false}]},{"type":"category","label":"Use proof of work","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure mining","href":"/public-networks/how-to/use-pow/mining","docId":"public-networks/how-to/use-pow/mining","unlisted":false}]},{"type":"link","label":"Upgrade Besu","href":"/public-networks/how-to/upgrade-node","docId":"public-networks/how-to/upgrade-node","unlisted":false},{"type":"link","label":"Reduce storage for Bonsai Tries","href":"/public-networks/how-to/bonsai-limit-trie-logs","docId":"public-networks/how-to/bonsai-limit-trie-logs","unlisted":false},{"type":"category","label":"Troubleshoot","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use EVM tool","href":"/public-networks/how-to/troubleshoot/evm-tool","docId":"public-networks/how-to/troubleshoot/evm-tool","unlisted":false},{"type":"link","label":"Trace transactions","href":"/public-networks/how-to/troubleshoot/trace-transactions","docId":"public-networks/how-to/troubleshoot/trace-transactions","unlisted":false},{"type":"link","label":"Troubleshoot performance","href":"/public-networks/how-to/troubleshoot/performance","docId":"public-networks/how-to/troubleshoot/performance","unlisted":false},{"type":"link","label":"Troubleshoot peering","href":"/public-networks/how-to/troubleshoot/peering","docId":"public-networks/how-to/troubleshoot/peering","unlisted":false}]}],"href":"/public-networks/how-to"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Node clients","href":"/public-networks/concepts/node-clients","docId":"public-networks/concepts/node-clients","unlisted":false},{"type":"category","label":"Proof of stake consensus","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Attestations","href":"/public-networks/concepts/proof-of-stake/attestations","docId":"public-networks/concepts/proof-of-stake/attestations","unlisted":false}],"href":"/public-networks/concepts/proof-of-stake/"},{"type":"link","label":"Data storage formats","href":"/public-networks/concepts/data-storage-formats","docId":"public-networks/concepts/data-storage-formats","unlisted":false},{"type":"link","label":"Parallel transaction execution","href":"/public-networks/concepts/parallel-transaction-execution","docId":"public-networks/concepts/parallel-transaction-execution","unlisted":false},{"type":"category","label":"Transactions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transaction types","href":"/public-networks/concepts/transactions/types","docId":"public-networks/concepts/transactions/types","unlisted":false},{"type":"link","label":"Transaction pool","href":"/public-networks/concepts/transactions/pool","docId":"public-networks/concepts/transactions/pool","unlisted":false},{"type":"link","label":"Transaction validation","href":"/public-networks/concepts/transactions/validation","docId":"public-networks/concepts/transactions/validation","unlisted":false}]},{"type":"link","label":"Network ID and chain ID","href":"/public-networks/concepts/network-and-chain-id","docId":"public-networks/concepts/network-and-chain-id","unlisted":false},{"type":"link","label":"Events and logs","href":"/public-networks/concepts/events-and-logs","docId":"public-networks/concepts/events-and-logs","unlisted":false},{"type":"link","label":"Genesis file","href":"/public-networks/concepts/genesis-file","docId":"public-networks/concepts/genesis-file","unlisted":false},{"type":"link","label":"Node keys","href":"/public-networks/concepts/node-keys","docId":"public-networks/concepts/node-keys","unlisted":false}],"href":"/public-networks/concepts"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Run Besu and Teku on Mainnet","href":"/public-networks/tutorials/besu-teku-mainnet","docId":"public-networks/tutorials/besu-teku-mainnet","unlisted":false},{"type":"link","label":"Run Besu and Teku on a testnet","href":"/public-networks/tutorials/besu-teku-testnet","docId":"public-networks/tutorials/besu-teku-testnet","unlisted":false},{"type":"link","label":"Deploy Besu using Kubernetes","href":"/public-networks/tutorials/kubernetes","docId":"public-networks/tutorials/kubernetes","unlisted":false}],"href":"/public-networks/tutorials"},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Besu command line","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Options","href":"/public-networks/reference/cli/options","docId":"public-networks/reference/cli/options","unlisted":false},{"type":"link","label":"Subcommands","href":"/public-networks/reference/cli/subcommands","docId":"public-networks/reference/cli/subcommands","unlisted":false}]},{"type":"category","label":"Besu API","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Objects","href":"/public-networks/reference/api/objects","docId":"public-networks/reference/api/objects","unlisted":false}],"href":"/public-networks/reference/api/"},{"type":"category","label":"Engine API","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Objects","href":"/public-networks/reference/engine-api/objects","docId":"public-networks/reference/engine-api/objects","unlisted":false}],"href":"/public-networks/reference/engine-api/"},{"type":"link","label":"Genesis file items","href":"/public-networks/reference/genesis-items","docId":"public-networks/reference/genesis-items","unlisted":false},{"type":"link","label":"EVM tool options","href":"/public-networks/reference/evm-tool","docId":"public-networks/reference/evm-tool","unlisted":false},{"type":"link","label":"Transaction trace types","href":"/public-networks/reference/trace-types","docId":"public-networks/reference/trace-types","unlisted":false},{"type":"link","label":"Projects using Besu","href":"/public-networks/reference/projects-using-besu","docId":"public-networks/reference/projects-using-besu","unlisted":false},{"type":"link","label":"Security disclosure policy","href":"/public-networks/reference/disclosure","docId":"public-networks/reference/disclosure","unlisted":false}],"href":"/public-networks/reference"},{"type":"link","label":"Chatbot","href":"/public-networks/chatbot","docId":"public-networks/chatbot","unlisted":false}],"privateDocSidebar":[{"type":"link","label":"Introduction","href":"/private-networks/","docId":"private-networks/index","unlisted":false},{"type":"category","label":"Get started","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"System requirements","href":"/private-networks/get-started/system-requirements","docId":"private-networks/get-started/system-requirements","unlisted":false},{"type":"category","label":"Install Besu","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Run Besu from Docker image","href":"/private-networks/get-started/install/run-docker-image","docId":"private-networks/get-started/install/run-docker-image","unlisted":false},{"type":"link","label":"Install binary distribution","href":"/private-networks/get-started/install/binary-distribution","docId":"private-networks/get-started/install/binary-distribution","unlisted":false}],"href":"/private-networks/get-started/install/"},{"type":"link","label":"Start Besu","href":"/private-networks/get-started/start-node","docId":"private-networks/get-started/start-node","unlisted":false}],"href":"/private-networks/get-started"},{"type":"category","label":"How to","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Configure","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Consensus","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"QBFT","href":"/private-networks/how-to/configure/consensus/qbft","docId":"private-networks/how-to/configure/consensus/qbft","unlisted":false},{"type":"link","label":"IBFT 2.0","href":"/private-networks/how-to/configure/consensus/ibft","docId":"private-networks/how-to/configure/consensus/ibft","unlisted":false},{"type":"link","label":"Clique","href":"/private-networks/how-to/configure/consensus/clique","docId":"private-networks/how-to/configure/consensus/clique","unlisted":false},{"type":"link","label":"Add and remove validators without voting","href":"/private-networks/how-to/configure/consensus/add-validators-without-voting","docId":"private-networks/how-to/configure/consensus/add-validators-without-voting","unlisted":false}],"href":"/private-networks/how-to/configure/consensus/"},{"type":"link","label":"Free gas network","href":"/private-networks/how-to/configure/free-gas","docId":"private-networks/how-to/configure/free-gas","unlisted":false},{"type":"link","label":"Bootnodes","href":"/private-networks/how-to/configure/bootnodes","docId":"private-networks/how-to/configure/bootnodes","unlisted":false},{"type":"link","label":"Validators","href":"/private-networks/how-to/configure/validators","docId":"private-networks/how-to/configure/validators","unlisted":false},{"type":"link","label":"Pre-deploy a contract","href":"/private-networks/how-to/configure/contracts","docId":"private-networks/how-to/configure/contracts","unlisted":false},{"type":"category","label":"TLS","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Client and server TLS","href":"/private-networks/how-to/configure/tls/client-and-server","docId":"private-networks/how-to/configure/tls/client-and-server","unlisted":false},{"type":"link","label":"Peer-to-peer TLS","href":"/private-networks/how-to/configure/tls/p2p","docId":"private-networks/how-to/configure/tls/p2p","unlisted":false}]},{"type":"link","label":"Block proposal permissioning","href":"/private-networks/how-to/configure/block-proposal-permissioning","docId":"private-networks/how-to/configure/block-proposal-permissioning","unlisted":false},{"type":"link","label":"Alternative elliptic curves","href":"/private-networks/how-to/configure/curves","docId":"private-networks/how-to/configure/curves","unlisted":false}]},{"type":"category","label":"Create and send transactions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create and send private transactions","href":"/private-networks/how-to/send-transactions/private-transactions","docId":"private-networks/how-to/send-transactions/private-transactions","unlisted":false},{"type":"link","label":"Send concurrent private transactions","href":"/private-networks/how-to/send-transactions/concurrent-private-transactions","docId":"private-networks/how-to/send-transactions/concurrent-private-transactions","unlisted":false},{"type":"link","label":"Include revert reason","href":"/private-networks/how-to/send-transactions/revert-reason","docId":"private-networks/how-to/send-transactions/revert-reason","unlisted":false}],"href":"/private-networks/how-to/send-transactions/"},{"type":"category","label":"Monitor nodes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use Grafana Loki","href":"/private-networks/how-to/monitor/loki","docId":"private-networks/how-to/monitor/loki","unlisted":false},{"type":"link","label":"Use Elastic Stack","href":"/private-networks/how-to/monitor/elastic-stack","docId":"private-networks/how-to/monitor/elastic-stack","unlisted":false},{"type":"link","label":"Use Quorum Hibernate","href":"/private-networks/how-to/monitor/quorum-hibernate","docId":"private-networks/how-to/monitor/quorum-hibernate","unlisted":false},{"type":"link","label":"Use Splunk","href":"/private-networks/how-to/monitor/splunk","docId":"private-networks/how-to/monitor/splunk","unlisted":false},{"type":"link","label":"Use OpenTelemetry","href":"/private-networks/how-to/monitor/opentelemetry","docId":"private-networks/how-to/monitor/opentelemetry","unlisted":false},{"type":"link","label":"Use Chainlens Explorer","href":"/private-networks/how-to/monitor/chainlens","docId":"private-networks/how-to/monitor/chainlens","unlisted":false}],"href":"/private-networks/how-to/monitor/"},{"type":"category","label":"Use privacy","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use EEA-compliant privacy","href":"/private-networks/how-to/use-privacy/eea-compliant","docId":"private-networks/how-to/use-privacy/eea-compliant","unlisted":false},{"type":"link","label":"Use Besu-extended privacy","href":"/private-networks/how-to/use-privacy/besu-extended","docId":"private-networks/how-to/use-privacy/besu-extended","unlisted":false},{"type":"link","label":"Run Tessera with Besu","href":"/private-networks/how-to/use-privacy/tessera","docId":"private-networks/how-to/use-privacy/tessera","unlisted":false},{"type":"link","label":"Create and manage privacy groups","href":"/private-networks/how-to/use-privacy/privacy-groups","docId":"private-networks/how-to/use-privacy/privacy-groups","unlisted":false},{"type":"link","label":"Use flexible privacy groups","href":"/private-networks/how-to/use-privacy/flexible","docId":"private-networks/how-to/use-privacy/flexible","unlisted":false},{"type":"link","label":"Access private and privacy marker transactions","href":"/private-networks/how-to/use-privacy/access-private-transactions","docId":"private-networks/how-to/use-privacy/access-private-transactions","unlisted":false},{"type":"link","label":"Sign privacy marker transactions","href":"/private-networks/how-to/use-privacy/sign-pmts","docId":"private-networks/how-to/use-privacy/sign-pmts","unlisted":false},{"type":"link","label":"Use the web3js-quorum library","href":"/private-networks/how-to/use-privacy/web3js-quorum","docId":"private-networks/how-to/use-privacy/web3js-quorum","unlisted":false},{"type":"link","label":"Performance best practices","href":"/private-networks/how-to/use-privacy/performance-best-practices","docId":"private-networks/how-to/use-privacy/performance-best-practices","unlisted":false}]},{"type":"category","label":"Use permissioning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use local permissioning","href":"/private-networks/how-to/use-permissioning/local","docId":"private-networks/how-to/use-permissioning/local","unlisted":false},{"type":"link","label":"Use onchain permissioning","href":"/private-networks/how-to/use-permissioning/onchain","docId":"private-networks/how-to/use-permissioning/onchain","unlisted":false}]},{"type":"category","label":"Deploy for production","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Deploy to the cloud","href":"/private-networks/how-to/deploy/cloud","docId":"private-networks/how-to/deploy/cloud","unlisted":false},{"type":"link","label":"Use Ansible","href":"/private-networks/how-to/deploy/ansible","docId":"private-networks/how-to/deploy/ansible","unlisted":false},{"type":"link","label":"Use Kubernetes","href":"/private-networks/how-to/deploy/kubernetes","docId":"private-networks/how-to/deploy/kubernetes","unlisted":false},{"type":"link","label":"Use Ethstats network monitor","href":"/private-networks/how-to/deploy/ethstats","docId":"private-networks/how-to/deploy/ethstats","unlisted":false}]},{"type":"link","label":"Backup and restore","href":"/private-networks/how-to/backup","docId":"private-networks/how-to/backup","unlisted":false},{"type":"link","label":"Upgrade","href":"/private-networks/how-to/upgrade","docId":"private-networks/how-to/upgrade","unlisted":false}],"href":"/private-networks/how-to/"},{"type":"category","label":"Concepts","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Proof of authority consensus","href":"/private-networks/concepts/poa","docId":"private-networks/concepts/poa","unlisted":false},{"type":"category","label":"Privacy","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Private transactions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Private transaction processing","href":"/private-networks/concepts/privacy/private-transactions/processing","docId":"private-networks/concepts/privacy/private-transactions/processing","unlisted":false}],"href":"/private-networks/concepts/privacy/private-transactions/"},{"type":"link","label":"Privacy groups","href":"/private-networks/concepts/privacy/privacy-groups","docId":"private-networks/concepts/privacy/privacy-groups","unlisted":false},{"type":"link","label":"Flexible privacy groups","href":"/private-networks/concepts/privacy/flexible-privacy","docId":"private-networks/concepts/privacy/flexible-privacy","unlisted":false},{"type":"link","label":"Multi-tenancy","href":"/private-networks/concepts/privacy/multi-tenancy","docId":"private-networks/concepts/privacy/multi-tenancy","unlisted":false},{"type":"link","label":"Privacy plugin","href":"/private-networks/concepts/privacy/plugin","docId":"private-networks/concepts/privacy/plugin","unlisted":false}],"href":"/private-networks/concepts/privacy/"},{"type":"category","label":"Permissioning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Onchain permissioning","href":"/private-networks/concepts/permissioning/onchain","docId":"private-networks/concepts/permissioning/onchain","unlisted":false},{"type":"link","label":"Permissioning plugin","href":"/private-networks/concepts/permissioning/plugin","docId":"private-networks/concepts/permissioning/plugin","unlisted":false}],"href":"/private-networks/concepts/permissioning/"},{"type":"link","label":"Public key infrastructure","href":"/private-networks/concepts/pki","docId":"private-networks/concepts/pki","unlisted":false},{"type":"link","label":"Plugins","href":"/private-networks/concepts/plugins","docId":"private-networks/concepts/plugins","unlisted":false}],"href":"/private-networks/concepts/"},{"type":"category","label":"Tutorials","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Quorum Developer Quickstart","href":"/private-networks/tutorials/quickstart","docId":"private-networks/tutorials/quickstart","unlisted":false},{"type":"link","label":"Create a QBFT network","href":"/private-networks/tutorials/qbft","docId":"private-networks/tutorials/qbft","unlisted":false},{"type":"category","label":"Create an IBFT 2.0 network","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Add and removing IBFT 2.0 validators","href":"/private-networks/tutorials/ibft/validators","docId":"private-networks/tutorials/ibft/validators","unlisted":false}],"href":"/private-networks/tutorials/ibft/"},{"type":"link","label":"Create a Clique network","href":"/private-networks/tutorials/clique","docId":"private-networks/tutorials/clique","unlisted":false},{"type":"link","label":"Create an Ethash network","href":"/private-networks/tutorials/ethash","docId":"private-networks/tutorials/ethash","unlisted":false},{"type":"category","label":"Create a privacy enabled network","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Create a multi-tenant network","href":"/private-networks/tutorials/privacy/multi-tenancy","docId":"private-networks/tutorials/privacy/multi-tenancy","unlisted":false},{"type":"link","label":"Use the web3js-quorum multi-node example","href":"/private-networks/tutorials/privacy/web3js-quorum","docId":"private-networks/tutorials/privacy/web3js-quorum","unlisted":false},{"type":"link","label":"Create a privacy-enabled network using the Quorum Developer Quickstart","href":"/private-networks/tutorials/privacy/quickstart","docId":"private-networks/tutorials/privacy/quickstart","unlisted":false}],"href":"/private-networks/tutorials/privacy/"},{"type":"link","label":"Create a permissioned network","href":"/private-networks/tutorials/permissioning/","docId":"private-networks/tutorials/permissioning/index","unlisted":false},{"type":"category","label":"Deploy a smart contract","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Transfer account funds","href":"/private-networks/tutorials/contracts/transfer-funds","docId":"private-networks/tutorials/contracts/transfer-funds","unlisted":false},{"type":"link","label":"Interact with a deployed contract","href":"/private-networks/tutorials/contracts/interact","docId":"private-networks/tutorials/contracts/interact","unlisted":false}],"href":"/private-networks/tutorials/contracts/"},{"type":"category","label":"Deploy using Kubernetes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Local playground","href":"/private-networks/tutorials/kubernetes/playground","docId":"private-networks/tutorials/kubernetes/playground","unlisted":false},{"type":"link","label":"Create a cluster","href":"/private-networks/tutorials/kubernetes/cluster","docId":"private-networks/tutorials/kubernetes/cluster","unlisted":false},{"type":"link","label":"Deploy charts","href":"/private-networks/tutorials/kubernetes/charts","docId":"private-networks/tutorials/kubernetes/charts","unlisted":false},{"type":"link","label":"Use the Quorum Explorer","href":"/private-networks/tutorials/kubernetes/quorum-explorer","docId":"private-networks/tutorials/kubernetes/quorum-explorer","unlisted":false},{"type":"link","label":"Maintenance","href":"/private-networks/tutorials/kubernetes/maintenance","docId":"private-networks/tutorials/kubernetes/maintenance","unlisted":false},{"type":"link","label":"Production","href":"/private-networks/tutorials/kubernetes/production","docId":"private-networks/tutorials/kubernetes/production","unlisted":false},{"type":"link","label":"Configure Kubernetes mode in NAT manager","href":"/private-networks/tutorials/kubernetes/nat-manager","docId":"private-networks/tutorials/kubernetes/nat-manager","unlisted":false}],"href":"/private-networks/tutorials/kubernetes/"},{"type":"link","label":"Deploy using Microsoft Azure","href":"/private-networks/tutorials/azure","docId":"private-networks/tutorials/azure","unlisted":false}],"href":"/private-networks/tutorials"},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Besu CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Private network options","href":"/private-networks/reference/cli/options","docId":"private-networks/reference/cli/options","unlisted":false},{"type":"link","label":"Private network subcommands","href":"/private-networks/reference/cli/subcommands","docId":"private-networks/reference/cli/subcommands","unlisted":false}]},{"type":"category","label":"Besu API","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Private network API objects","href":"/private-networks/reference/api/objects","docId":"private-networks/reference/api/objects","unlisted":false}],"href":"/private-networks/reference/api/"},{"type":"link","label":"Accounts for testing","href":"/private-networks/reference/accounts-for-testing","docId":"private-networks/reference/accounts-for-testing","unlisted":false},{"type":"link","label":"Plugin API interfaces","href":"/private-networks/reference/plugin-api-interfaces","docId":"private-networks/reference/plugin-api-interfaces","unlisted":false}],"href":"/private-networks/reference/"},{"type":"link","label":"Chatbot","href":"/private-networks/chatbot","docId":"private-networks/chatbot","unlisted":false}]},"docs":{"global/postman":{"id":"global/postman","title":"postman","description":"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages."},"global/test_accounts":{"id":"global/test_accounts","title":"test_accounts","description":"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code."},"private-networks/chatbot":{"id":"private-networks/chatbot","title":"Chatbot","description":"Chatbot","sidebar":"privateDocSidebar"},"private-networks/concepts/index":{"id":"private-networks/concepts/index","title":"Concepts","description":"private networks concepts overview","sidebar":"privateDocSidebar"},"private-networks/concepts/permissioning/index":{"id":"private-networks/concepts/permissioning/index","title":"Permissioning","description":"Besu permissioning feature","sidebar":"privateDocSidebar"},"private-networks/concepts/permissioning/onchain":{"id":"private-networks/concepts/permissioning/onchain","title":"Onchain permissioning","description":"Onchain permissioning","sidebar":"privateDocSidebar"},"private-networks/concepts/permissioning/plugin":{"id":"private-networks/concepts/permissioning/plugin","title":"Permissioning plugin","description":"Plugin based permissioning","sidebar":"privateDocSidebar"},"private-networks/concepts/pki":{"id":"private-networks/concepts/pki","title":"Public key infrastructure","description":"Public key infrastructure","sidebar":"privateDocSidebar"},"private-networks/concepts/plugins":{"id":"private-networks/concepts/plugins","title":"Plugins","description":"Plugins overview","sidebar":"privateDocSidebar"},"private-networks/concepts/poa":{"id":"private-networks/concepts/poa","title":"Proof of authority consensus","description":"Besu proof of authority consensus protocols comparison","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/flexible-privacy":{"id":"private-networks/concepts/privacy/flexible-privacy","title":"Flexible privacy groups","description":"Flexible privacy groups","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/index":{"id":"private-networks/concepts/privacy/index","title":"Privacy","description":"Privacy","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/multi-tenancy":{"id":"private-networks/concepts/privacy/multi-tenancy","title":"Multi-tenancy","description":"Multi-tenancy","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/plugin":{"id":"private-networks/concepts/privacy/plugin","title":"Privacy plugin","description":"Privacy plugin","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/privacy-groups":{"id":"private-networks/concepts/privacy/privacy-groups","title":"Privacy groups","description":"Privacy groups","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/private-transactions/index":{"id":"private-networks/concepts/privacy/private-transactions/index","title":"Private transactions","description":"Private transaction overview","sidebar":"privateDocSidebar"},"private-networks/concepts/privacy/private-transactions/processing":{"id":"private-networks/concepts/privacy/private-transactions/processing","title":"Private transaction processing","description":"Private transaction processing","sidebar":"privateDocSidebar"},"private-networks/get-started/install/binary-distribution":{"id":"private-networks/get-started/install/binary-distribution","title":"Install binary distribution","description":"Install or upgrade Besu from binary distribution","sidebar":"privateDocSidebar"},"private-networks/get-started/install/index":{"id":"private-networks/get-started/install/index","title":"Installation options","description":"Options for getting started with Besu","sidebar":"privateDocSidebar"},"private-networks/get-started/install/run-docker-image":{"id":"private-networks/get-started/install/run-docker-image","title":"Run Besu from Docker image","description":"Run Besu using the official docker image","sidebar":"privateDocSidebar"},"private-networks/get-started/start-node":{"id":"private-networks/get-started/start-node","title":"Start Besu","description":"Start Besu on a private Ethereum network.","sidebar":"privateDocSidebar"},"private-networks/get-started/system-requirements":{"id":"private-networks/get-started/system-requirements","title":"System requirements","description":"Ensure you meet the system requirements to sync and run Besu.","sidebar":"privateDocSidebar"},"private-networks/how-to/backup":{"id":"private-networks/how-to/backup","title":"Backup and restore","description":"Backing up and restoring Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/block-proposal-permissioning":{"id":"private-networks/how-to/configure/block-proposal-permissioning","title":"Block proposal permissioning","description":"Block proposal permissioning","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/bootnodes":{"id":"private-networks/how-to/configure/bootnodes","title":"Bootnodes","description":"Configuring bootnodes","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/consensus/add-validators-without-voting":{"id":"private-networks/how-to/configure/consensus/add-validators-without-voting","title":"Add and remove validators without voting","description":"How to add or remove validators without voting","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/consensus/clique":{"id":"private-networks/how-to/configure/consensus/clique","title":"Clique","description":"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/consensus/ibft":{"id":"private-networks/how-to/configure/consensus/ibft","title":"IBFT 2.0","description":"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/consensus/index":{"id":"private-networks/how-to/configure/consensus/index","title":"Consensus protocols","description":"Besu consensus protocols","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/consensus/qbft":{"id":"private-networks/how-to/configure/consensus/qbft","title":"QBFT","description":"Besu QBFT proof of authority (PoA) consensus protocol implementation","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/contracts":{"id":"private-networks/how-to/configure/contracts","title":"Pre-deploy a contract","description":"Pre-deploying contracts in the genesis file","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/curves":{"id":"private-networks/how-to/configure/curves","title":"Alternative elliptic curves","description":"Using alternative elliptic curves in Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/free-gas":{"id":"private-networks/how-to/configure/free-gas","title":"Free gas network","description":"Configuring free gas networks","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/tls/client-and-server":{"id":"private-networks/how-to/configure/tls/client-and-server","title":"Client and server TLS","description":"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/tls/p2p":{"id":"private-networks/how-to/configure/tls/p2p","title":"Peer-to-peer TLS","description":"Configure P2P TLS communication","sidebar":"privateDocSidebar"},"private-networks/how-to/configure/validators":{"id":"private-networks/how-to/configure/validators","title":"Validators","description":"Configuring validators in production networks","sidebar":"privateDocSidebar"},"private-networks/how-to/deploy/ansible":{"id":"private-networks/how-to/deploy/ansible","title":"Use Ansible","description":"Deploying Besu with Ansible role on Galaxy","sidebar":"privateDocSidebar"},"private-networks/how-to/deploy/cloud":{"id":"private-networks/how-to/deploy/cloud","title":"Deploy to the cloud","description":"Deploying Besu to the cloud","sidebar":"privateDocSidebar"},"private-networks/how-to/deploy/ethstats":{"id":"private-networks/how-to/deploy/ethstats","title":"Use Ethstats network monitor","description":"Ethstats network monitor","sidebar":"privateDocSidebar"},"private-networks/how-to/deploy/kubernetes":{"id":"private-networks/how-to/deploy/kubernetes","title":"Use Kubernetes","description":"Deploying Besu with Kubernetes","sidebar":"privateDocSidebar"},"private-networks/how-to/index":{"id":"private-networks/how-to/index","title":"How to","description":"Private networks how to overview","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/chainlens":{"id":"private-networks/how-to/monitor/chainlens","title":"Use Chainlens Explorer","description":"Use Chainlens Explorer on a privacy-enabled Besu network","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/elastic-stack":{"id":"private-networks/how-to/monitor/elastic-stack","title":"Use Elastic Stack","description":"Using Elastic Stack (ELK) with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/index":{"id":"private-networks/how-to/monitor/index","title":"Monitoring","description":"Monitoring using metrics and logging","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/loki":{"id":"private-networks/how-to/monitor/loki","title":"Use Grafana Loki","description":"Using Grafana Loki log management platform with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/opentelemetry":{"id":"private-networks/how-to/monitor/opentelemetry","title":"Use OpenTelemetry","description":"Collect Besu information with the OpenTelemetry Collector","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/quorum-hibernate":{"id":"private-networks/how-to/monitor/quorum-hibernate","title":"Use Quorum Hibernate","description":"Use Quorum Hibernate with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/monitor/splunk":{"id":"private-networks/how-to/monitor/splunk","title":"Use Splunk","description":"Send Besu logs to Splunk","sidebar":"privateDocSidebar"},"private-networks/how-to/send-transactions/concurrent-private-transactions":{"id":"private-networks/how-to/send-transactions/concurrent-private-transactions","title":"Send concurrent private transactions","description":"Creating and sending concurrent private transactions with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/send-transactions/index":{"id":"private-networks/how-to/send-transactions/index","title":"Create and send transactions","description":"private networks send transactions overview","sidebar":"privateDocSidebar"},"private-networks/how-to/send-transactions/private-transactions":{"id":"private-networks/how-to/send-transactions/private-transactions","title":"Create and send private transactions","description":"Creating and sending private transactions with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/send-transactions/revert-reason":{"id":"private-networks/how-to/send-transactions/revert-reason","title":"Include revert reason","description":"Including revert reason in transactions with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/upgrade":{"id":"private-networks/how-to/upgrade","title":"Upgrade","description":"Upgrading protocol versions","sidebar":"privateDocSidebar"},"private-networks/how-to/use-permissioning/local":{"id":"private-networks/how-to/use-permissioning/local","title":"Use local permissioning","description":"Besu local permissioning","sidebar":"privateDocSidebar"},"private-networks/how-to/use-permissioning/onchain":{"id":"private-networks/how-to/use-permissioning/onchain","title":"Use onchain permissioning","description":"Use onchain permissioning allowlists","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/access-private-transactions":{"id":"private-networks/how-to/use-privacy/access-private-transactions","title":"Access private and privacy marker transactions","description":"Methods for accessing and managing private transactions and privacy groups in Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/besu-extended":{"id":"private-networks/how-to/use-privacy/besu-extended","title":"Use Besu-extended privacy","description":"Besu-extended privacy","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/eea-compliant":{"id":"private-networks/how-to/use-privacy/eea-compliant","title":"Use EEA-compliant privacy","description":"Besu JSON-RPC methods to use for EEA-compliant privacy","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/flexible":{"id":"private-networks/how-to/use-privacy/flexible","title":"Use flexible privacy groups","description":"Use flexible privacy groups","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/performance-best-practices":{"id":"private-networks/how-to/use-privacy/performance-best-practices","title":"Performance best practices","description":"Performance best practices","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/privacy-groups":{"id":"private-networks/how-to/use-privacy/privacy-groups","title":"Create and manage privacy groups","description":"Create and manage privacy groups with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/sign-pmts":{"id":"private-networks/how-to/use-privacy/sign-pmts","title":"Sign privacy marker transactions","description":"How to sign a privacy marker transaction with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/tessera":{"id":"private-networks/how-to/use-privacy/tessera","title":"Run Tessera with Besu","description":"Running ConsenSys Quorum Tessera with Besu","sidebar":"privateDocSidebar"},"private-networks/how-to/use-privacy/web3js-quorum":{"id":"private-networks/how-to/use-privacy/web3js-quorum","title":"Use the web3js-quorum library","description":"web3js-quorum client library","sidebar":"privateDocSidebar"},"private-networks/index":{"id":"private-networks/index","title":"Private networks","description":"Private networks overview","sidebar":"privateDocSidebar"},"private-networks/reference/accounts-for-testing":{"id":"private-networks/reference/accounts-for-testing","title":"Accounts for testing","description":"Ethereum accounts used for Besu testing only on private networks","sidebar":"privateDocSidebar"},"private-networks/reference/api/index":{"id":"private-networks/reference/api/index","title":"Private network API methods","description":"Besu private network JSON-RPC API methods reference","sidebar":"privateDocSidebar"},"private-networks/reference/api/objects":{"id":"private-networks/reference/api/objects","title":"Private network API objects","description":"Besu private network API objects reference","sidebar":"privateDocSidebar"},"private-networks/reference/cli/options":{"id":"private-networks/reference/cli/options","title":"Private network options","description":"Besu private networks CLI reference","sidebar":"privateDocSidebar"},"private-networks/reference/cli/subcommands":{"id":"private-networks/reference/cli/subcommands","title":"Private network subcommands","description":"Besu command line interface subcommands","sidebar":"privateDocSidebar"},"private-networks/reference/index":{"id":"private-networks/reference/index","title":"Reference","description":"private networks reference overview","sidebar":"privateDocSidebar"},"private-networks/reference/plugin-api-interfaces":{"id":"private-networks/reference/plugin-api-interfaces","title":"Plugin API interfaces","description":"Plugin interfaces","sidebar":"privateDocSidebar"},"private-networks/tutorials/azure":{"id":"private-networks/tutorials/azure","title":"Deploy using Microsoft Azure","description":"Deploy a private IBFT 2.0 network using Microsoft Azure.","sidebar":"privateDocSidebar"},"private-networks/tutorials/clique":{"id":"private-networks/tutorials/clique","title":"Create a Clique network","description":"Create a private network using the Clique consensus protocol.","sidebar":"privateDocSidebar"},"private-networks/tutorials/contracts/index":{"id":"private-networks/tutorials/contracts/index","title":"Deploy a smart contract","description":"deploying smart contracts","sidebar":"privateDocSidebar"},"private-networks/tutorials/contracts/interact":{"id":"private-networks/tutorials/contracts/interact","title":"Interact with a deployed contract","description":"calling smart contracts functions","sidebar":"privateDocSidebar"},"private-networks/tutorials/contracts/transfer-funds":{"id":"private-networks/tutorials/contracts/transfer-funds","title":"Transfer account funds","description":"funds transfer transactions","sidebar":"privateDocSidebar"},"private-networks/tutorials/ethash":{"id":"private-networks/tutorials/ethash","title":"Create an Ethash network","description":"Create a private network using the Ethash consensus protocol.","sidebar":"privateDocSidebar"},"private-networks/tutorials/ibft/index":{"id":"private-networks/tutorials/ibft/index","title":"Create a private network using IBFT 2.0","description":"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol","sidebar":"privateDocSidebar"},"private-networks/tutorials/ibft/validators":{"id":"private-networks/tutorials/ibft/validators","title":"Add and removing IBFT 2.0 validators","description":"Adding and removing IBFT 2.0 validators","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/charts":{"id":"private-networks/tutorials/kubernetes/charts","title":"Deploy charts","description":"Deploying Besu Helm Charts for a Kubernetes cluster","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/cluster":{"id":"private-networks/tutorials/kubernetes/cluster","title":"Create a cluster","description":"Create a cluster for deployment","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/index":{"id":"private-networks/tutorials/kubernetes/index","title":"Deploy a Besu private network with Kubernetes","description":"Deploying Besu with Kubernetes","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/maintenance":{"id":"private-networks/tutorials/kubernetes/maintenance","title":"Maintenance","description":"Maintenance for Besu on a Kubernetes cluster","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/nat-manager":{"id":"private-networks/tutorials/kubernetes/nat-manager","title":"Configure Kubernetes mode in NAT manager","description":"Tutorial to configure Kubernetes mode for Besu Nat Manager","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/playground":{"id":"private-networks/tutorials/kubernetes/playground","title":"Local playground","description":"Deploying a Besu private network locally with Kubernetes","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/production":{"id":"private-networks/tutorials/kubernetes/production","title":"Production","description":"Deploying Besu Helm Charts for production on a Kubernetes cluster","sidebar":"privateDocSidebar"},"private-networks/tutorials/kubernetes/quorum-explorer":{"id":"private-networks/tutorials/kubernetes/quorum-explorer","title":"Use the Quorum Explorer","description":"Using the Quorum Explorer on a Kubernetes cluster","sidebar":"privateDocSidebar"},"private-networks/tutorials/permissioning/index":{"id":"private-networks/tutorials/permissioning/index","title":"Create a permissioned network","description":"Besu create a permissioned network","sidebar":"privateDocSidebar"},"private-networks/tutorials/privacy/index":{"id":"private-networks/tutorials/privacy/index","title":"Create a privacy enabled network using the Quickstart","description":"Configure Besu privacy","sidebar":"privateDocSidebar"},"private-networks/tutorials/privacy/multi-tenancy":{"id":"private-networks/tutorials/privacy/multi-tenancy","title":"Create a multi-tenant network","description":"Configure multi-tenancy","sidebar":"privateDocSidebar"},"private-networks/tutorials/privacy/quickstart":{"id":"private-networks/tutorials/privacy/quickstart","title":"Create a privacy-enabled network using the Quorum Developer Quickstart","description":"Besu privacy-enabled private network tutorial","sidebar":"privateDocSidebar"},"private-networks/tutorials/privacy/web3js-quorum":{"id":"private-networks/tutorials/privacy/web3js-quorum","title":"Use the web3js-quorum multi-node example","description":"web3js-quorum client library multi-node example","sidebar":"privateDocSidebar"},"private-networks/tutorials/qbft":{"id":"private-networks/tutorials/qbft","title":"Create a QBFT network","description":"Create a private network using the QBFT consensus protocol.","sidebar":"privateDocSidebar"},"private-networks/tutorials/quickstart":{"id":"private-networks/tutorials/quickstart","title":"Quorum Developer Quickstart","description":"Rapidly generate a local blockchain network using the Quickstart.","sidebar":"privateDocSidebar"},"public-networks/chatbot":{"id":"public-networks/chatbot","title":"Chatbot","description":"Chatbot","sidebar":"publicDocSidebar"},"public-networks/concepts/data-storage-formats":{"id":"public-networks/concepts/data-storage-formats","title":"Data storage formats","description":"Learn about storing data using Forest of Tries and Bonsai Tries.","sidebar":"publicDocSidebar"},"public-networks/concepts/events-and-logs":{"id":"public-networks/concepts/events-and-logs","title":"Events and logs","description":"Learn about events and logs in Besu.","sidebar":"publicDocSidebar"},"public-networks/concepts/genesis-file":{"id":"public-networks/concepts/genesis-file","title":"Genesis file","description":"Learn about configuring a network using the genesis file.","sidebar":"publicDocSidebar"},"public-networks/concepts/network-and-chain-id":{"id":"public-networks/concepts/network-and-chain-id","title":"Network ID and chain ID","description":"Learn about network ID and chain ID in Besu.","sidebar":"publicDocSidebar"},"public-networks/concepts/node-clients":{"id":"public-networks/concepts/node-clients","title":"Node clients","description":"Learn about execution and consensus clients.","sidebar":"publicDocSidebar"},"public-networks/concepts/node-keys":{"id":"public-networks/concepts/node-keys","title":"Node keys","description":"Learn about node public and private keys, and the node address.","sidebar":"publicDocSidebar"},"public-networks/concepts/parallel-transaction-execution":{"id":"public-networks/concepts/parallel-transaction-execution","title":"Parallel transaction execution","description":"Learn about parallel transaction execution.","sidebar":"publicDocSidebar"},"public-networks/concepts/proof-of-stake/attestations":{"id":"public-networks/concepts/proof-of-stake/attestations","title":"Attestations","description":"Proof of stake attestations","sidebar":"publicDocSidebar"},"public-networks/concepts/proof-of-stake/index":{"id":"public-networks/concepts/proof-of-stake/index","title":"Proof of stake consensus","description":"Ethereum proof of stake consensus","sidebar":"publicDocSidebar"},"public-networks/concepts/transactions/pool":{"id":"public-networks/concepts/transactions/pool","title":"Transaction pool","description":"Transaction pool overview","sidebar":"publicDocSidebar"},"public-networks/concepts/transactions/types":{"id":"public-networks/concepts/transactions/types","title":"Transaction types","description":"Description of the different transaction types","sidebar":"publicDocSidebar"},"public-networks/concepts/transactions/validation":{"id":"public-networks/concepts/transactions/validation","title":"Transaction validation","description":"What transaction validation and when","sidebar":"publicDocSidebar"},"public-networks/get-started/connect/index":{"id":"public-networks/get-started/connect/index","title":"Connect to a network overview","description":"This section provides information on connecting Besu to a public Ethereum network.","sidebar":"publicDocSidebar"},"public-networks/get-started/connect/mainnet":{"id":"public-networks/get-started/connect/mainnet","title":"Connect to Mainnet","description":"How to connect to Mainnet","sidebar":"publicDocSidebar"},"public-networks/get-started/connect/sync-node":{"id":"public-networks/get-started/connect/sync-node","title":"Sync Besu","description":"Full and archive node types","sidebar":"publicDocSidebar"},"public-networks/get-started/connect/testnet":{"id":"public-networks/get-started/connect/testnet","title":"Connect to a testnet","description":"Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.","sidebar":"publicDocSidebar"},"public-networks/get-started/install/binary-distribution":{"id":"public-networks/get-started/install/binary-distribution","title":"Install binary distribution","description":"Install or upgrade Besu from binary distribution","sidebar":"publicDocSidebar"},"public-networks/get-started/install/index":{"id":"public-networks/get-started/install/index","title":"Installation options","description":"Options for getting started with Besu","sidebar":"publicDocSidebar"},"public-networks/get-started/install/run-docker-image":{"id":"public-networks/get-started/install/run-docker-image","title":"Run Besu from Docker image","description":"Run Besu using the official docker image","sidebar":"publicDocSidebar"},"public-networks/get-started/migrate-to-besu":{"id":"public-networks/get-started/migrate-to-besu","title":"Migrate to Besu","description":"Migrate to Besu from a different Ethereum execution client.","sidebar":"publicDocSidebar"},"public-networks/get-started/start-node":{"id":"public-networks/get-started/start-node","title":"Start Besu","description":"Start Besu on a public Ethereum network.","sidebar":"publicDocSidebar"},"public-networks/get-started/system-requirements":{"id":"public-networks/get-started/system-requirements","title":"System requirements","description":"Ensure you meet the system requirements to sync and run Besu.","sidebar":"publicDocSidebar"},"public-networks/how-to/bonsai-limit-trie-logs":{"id":"public-networks/how-to/bonsai-limit-trie-logs","title":"Reduce storage for Bonsai Tries","description":"Reduce the size of your database when using Bonsai Tries","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-besu/index":{"id":"public-networks/how-to/configure-besu/index","title":"Configure Besu","description":"Specify options in the Besu configuration file.","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-besu/profile":{"id":"public-networks/how-to/configure-besu/profile","title":"Use a profile","description":"You can load a profile to extend Besu\'s default configuration, using the --profile option.","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-ha/index":{"id":"public-networks/how-to/configure-ha/index","title":"High availability of JSON-RPC and RPC Pub/Sub APIs","description":"Besu high availability","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-ha/sample-configuration":{"id":"public-networks/how-to/configure-ha/sample-configuration","title":"Sample load balancer configurations","description":"Sample load balancers","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-java/install-update-java":{"id":"public-networks/how-to/configure-java/install-update-java","title":"Install and update Java","description":"Install or update Java for use with Besu","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-java/java-flight-recorder":{"id":"public-networks/how-to/configure-java/java-flight-recorder","title":"Use Java Flight Recorder","description":"Using Java Flight Recorder with Besu","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-java/manage-memory":{"id":"public-networks/how-to/configure-java/manage-memory","title":"Manage JVM memory","description":"Besu memory management","sidebar":"publicDocSidebar"},"public-networks/how-to/configure-java/pass-jvm-options":{"id":"public-networks/how-to/configure-java/pass-jvm-options","title":"Pass JVM options","description":"Passing Java virtual machine JVM options to Besu at runtime","sidebar":"publicDocSidebar"},"public-networks/how-to/connect/configure-ports":{"id":"public-networks/how-to/connect/configure-ports","title":"Configure ports","description":"To enable communication you must expose Besu ports appropriately","sidebar":"publicDocSidebar"},"public-networks/how-to/connect/manage-peers":{"id":"public-networks/how-to/connect/manage-peers","title":"Manage peers","description":"Managing Besu peers","sidebar":"publicDocSidebar"},"public-networks/how-to/connect/specify-nat":{"id":"public-networks/how-to/connect/specify-nat","title":"Specify NAT method","description":"Configuring NAT with Besu","sidebar":"publicDocSidebar"},"public-networks/how-to/connect/static-nodes":{"id":"public-networks/how-to/connect/static-nodes","title":"Configure static nodes","description":"Configuring static nodes","sidebar":"publicDocSidebar"},"public-networks/how-to/develop/client-libraries":{"id":"public-networks/how-to/develop/client-libraries","title":"Use client libraries","description":"Besu client libraries","sidebar":"publicDocSidebar"},"public-networks/how-to/develop/hardhat":{"id":"public-networks/how-to/develop/hardhat","title":"Use Hardhat","description":"Using Besu with Hardhat","sidebar":"publicDocSidebar"},"public-networks/how-to/monitor/index":{"id":"public-networks/how-to/monitor/index","title":"Monitor Besu","description":"Monitoring using metrics and logging","sidebar":"publicDocSidebar"},"public-networks/how-to/monitor/logging":{"id":"public-networks/how-to/monitor/logging","title":"Configure logging","description":"Besu log level setting and log formatting","sidebar":"publicDocSidebar"},"public-networks/how-to/monitor/metrics":{"id":"public-networks/how-to/monitor/metrics","title":"Use metrics","description":"Monitoring and metrics","sidebar":"publicDocSidebar"},"public-networks/how-to/monitor/understand-metrics":{"id":"public-networks/how-to/monitor/understand-metrics","title":"Understand metrics","description":"Understand Besu performance metrics","sidebar":"publicDocSidebar"},"public-networks/how-to/send-transactions":{"id":"public-networks/how-to/send-transactions","title":"Create and send transactions","description":"Send transactions using eth_call or eth_sendRawTransaction.","sidebar":"publicDocSidebar"},"public-networks/how-to/troubleshoot/evm-tool":{"id":"public-networks/how-to/troubleshoot/evm-tool","title":"Use EVM tool","description":"Besu EVM tool","sidebar":"publicDocSidebar"},"public-networks/how-to/troubleshoot/peering":{"id":"public-networks/how-to/troubleshoot/peering","title":"Troubleshoot peering","description":"How to troubleshoot peering","sidebar":"publicDocSidebar"},"public-networks/how-to/troubleshoot/performance":{"id":"public-networks/how-to/troubleshoot/performance","title":"Troubleshoot poor performance and resource constraints","description":"Troubleshoot poor performance and resource constraints.","sidebar":"publicDocSidebar"},"public-networks/how-to/troubleshoot/trace-transactions":{"id":"public-networks/how-to/troubleshoot/trace-transactions","title":"Trace transactions","description":"How to trace transactions","sidebar":"publicDocSidebar"},"public-networks/how-to/upgrade-node":{"id":"public-networks/how-to/upgrade-node","title":"Upgrade Besu","description":"Upgrade your Besu node to a new version.","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/access-logs":{"id":"public-networks/how-to/use-besu-api/access-logs","title":"Access logs using JSON-RPC","description":"Accessing logs using the Besu API","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/authenticate":{"id":"public-networks/how-to/use-besu-api/authenticate","title":"Authenticate over JSON-RPC requests","description":"Besu authentication and authorization for JSON-RPC","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/graphql":{"id":"public-networks/how-to/use-besu-api/graphql","title":"Use GraphQL over HTTP","description":"How to access the Besu API using GraphQL","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/index":{"id":"public-networks/how-to/use-besu-api/index","title":"Access the Besu API","description":"Besu API","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/json-rpc":{"id":"public-networks/how-to/use-besu-api/json-rpc","title":"Use JSON-RPC over HTTP, WS, and IPC","description":"How to access the Besu API using JSON-RPC","sidebar":"publicDocSidebar"},"public-networks/how-to/use-besu-api/rpc-pubsub":{"id":"public-networks/how-to/use-besu-api/rpc-pubsub","title":"Use RPC Pub/Sub over WS","description":"Using RPC Pub/Sub with Besu WebSockets","sidebar":"publicDocSidebar"},"public-networks/how-to/use-engine-api":{"id":"public-networks/how-to/use-engine-api","title":"Use the Engine API","description":"Use the Engine API to communicate with a consensus client.","sidebar":"publicDocSidebar"},"public-networks/how-to/use-pow/mining":{"id":"public-networks/how-to/use-pow/mining","title":"Configure mining","description":"Using Besu for PoW CPU mining","sidebar":"publicDocSidebar"},"public-networks/index":{"id":"public-networks/index","title":"Public networks","description":"Public networks overview","sidebar":"publicDocSidebar"},"public-networks/reference/api/index":{"id":"public-networks/reference/api/index","title":"Besu API","description":"Besu JSON-RPC API methods reference","sidebar":"publicDocSidebar"},"public-networks/reference/api/objects":{"id":"public-networks/reference/api/objects","title":"Objects","description":"Besu API objects reference","sidebar":"publicDocSidebar"},"public-networks/reference/cli/options":{"id":"public-networks/reference/cli/options","title":"Options","description":"Besu command line interface reference","sidebar":"publicDocSidebar"},"public-networks/reference/cli/subcommands":{"id":"public-networks/reference/cli/subcommands","title":"Subcommands","description":"Besu command line interface subcommands","sidebar":"publicDocSidebar"},"public-networks/reference/disclosure":{"id":"public-networks/reference/disclosure","title":"Security disclosure policy","description":"Besu responsible disclosure statement","sidebar":"publicDocSidebar"},"public-networks/reference/engine-api/index":{"id":"public-networks/reference/engine-api/index","title":"Engine API","description":"Engine API methods reference","sidebar":"publicDocSidebar"},"public-networks/reference/engine-api/objects":{"id":"public-networks/reference/engine-api/objects","title":"Objects","description":"Engine API objects reference","sidebar":"publicDocSidebar"},"public-networks/reference/evm-tool":{"id":"public-networks/reference/evm-tool","title":"EVM tool options","description":"Besu EVM tool options reference","sidebar":"publicDocSidebar"},"public-networks/reference/genesis-items":{"id":"public-networks/reference/genesis-items","title":"Genesis file items","description":"Genesis file configuration items reference","sidebar":"publicDocSidebar"},"public-networks/reference/projects-using-besu":{"id":"public-networks/reference/projects-using-besu","title":"Projects using Besu","description":"List of projects using Besu","sidebar":"publicDocSidebar"},"public-networks/reference/trace-types":{"id":"public-networks/reference/trace-types","title":"Transaction trace types","description":"Transaction trace types reference","sidebar":"publicDocSidebar"},"public-networks/tutorials/besu-teku-mainnet":{"id":"public-networks/tutorials/besu-teku-mainnet","title":"Run Besu and Teku on Mainnet","description":"Run Besu and Teku on Ethereum Mainnet.","sidebar":"publicDocSidebar"},"public-networks/tutorials/besu-teku-testnet":{"id":"public-networks/tutorials/besu-teku-testnet","title":"Run Besu and Teku on a testnet","description":"Run Besu and Teku on Holesky or Sepolia testnet.","sidebar":"publicDocSidebar"},"public-networks/tutorials/kubernetes":{"id":"public-networks/tutorials/kubernetes","title":"Deploy Besu using Kubernetes","description":"Deploy a Besu node using Kubernetes.","sidebar":"publicDocSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/2376.23ec1be8.js b/assets/js/2376.23ec1be8.js new file mode 100644 index 00000000000..33cfc54e1f4 --- /dev/null +++ b/assets/js/2376.23ec1be8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2376],{42376:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(99702),s=n(26312),r=n(3219),a=n(78041),o=n(75263),l=(n(74353),n(16750),n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,16],l=[1,17],c={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},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="",l=0,c=0,h=r.slice.call(arguments,1),d=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]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,x,k,v,w,S,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(S=void 0,"number"!=typeof(S=i.pop()||d.lex()||1)&&(S instanceof Array&&(S=(i=S).pop()),S=e.symbols_[S]||S),f=S),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(x in w=[],a[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:w})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,c=d.yyleng,o=d.yytext,l=d.yylineno,y=d.yylloc;break;case 2:if(k=this.productions_[_[1]][1],$.$=s[s.length-k],$._$={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},g&&($._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,c,l,u.yy,_[1],s,r].concat(h))))return b;k&&(n=n.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},h={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:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\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:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};function d(){this.yy={}}return c.lexer=h,d.prototype=c,c.Parser=d,new d}());l.parser=l;const c=l;let h="",d=0;const u=[],p=[],y=[],g=()=>i.L,f=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.v)()},m=function(t){h=t,u.push(t)},_=function(){return u},b=function(){let t=w();let e=0;for(;!t&&e<100;)t=w(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},k=function(t){y.find((t=>t.id===d-1)).events.push(t)},v=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},w=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},S={clear:f,getCommonDb:g,addSection:m,getSections:_,getTasks:b,addTask:x,addTaskOrg:v,addEvent:k},$=Object.freeze(Object.defineProperty({__proto__:null,addEvent:k,addSection:m,addTask:x,addTaskOrg:v,clear:f,default:S,getCommonDb:g,getSections:_,getTasks:b},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:d}=l,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",c).style("text-anchor","middle").style("font-size",h).style("font-family",d);l.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),l.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,o)}}function n(t,n,s,r,a,o,l,c){const h=n.append("switch"),d=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%");d.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,l,c),i(d,l)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}}();function E(t,e){t.each((function(){var t,n=(0,s.Ltv)(this),i=n.text().split(/(\s+|<br>)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;s<i.length;s++)t=i[i.length-1-s],r.push(t),l.text(r.join(" ").trim()),(l.node().getComputedTextLength()>e||"<br>"===t)&&(r.pop(),l.text(r.join(" ").trim()),r="<br>"===t?[""]:[t],l=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const I=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")},T=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"),l=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),c=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=l.height+1.1*c*.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+")"),I(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(E,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},C=function(t,e,n,s,r,a,o,l,c,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const l=t.append("g").attr("class","taskWrapper"),y=T(l,e,n,o).height;if(i.l.debug("taskHeight after draw",y),l.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=M(t,p.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+c+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},M=function(t,e,n,s,r,a){let o=0;const l=r;r+=100;for(const c of e){const e={descr:c,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const l=t.append("g").attr("class","eventWrapper"),h=T(l,e,n,a).height;o+=h,l.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=l,o},O={db:$,renderer:{setConf:()=>{},draw:function(t,e,n,r){var a,o;const l=(0,i.c)(),c=l.leftMargin??50;i.l.debug("timeline",r.db);const h=l.securityLevel;let d;"sandbox"===h&&(d=(0,s.Ltv)("#i"+e));const u=("sandbox"===h?(0,s.Ltv)(d.nodes()[0].contentDocument.body):(0,s.Ltv)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),L(u);const g=r.db.getSections();i.l.debug("sections",g);let f=0,m=0,_=0,b=0,x=50+c,k=50;b=50;let v=0,w=!0;g.forEach((function(t){const e=A(u,{number:v,descr:t,section:v,width:150,padding:20,maxHeight:f},l);i.l.debug("sectionHeight before draw",e),f=Math.max(f,e+20)}));let S=0,$=0;i.l.debug("tasks.length",p.length);for(const[s,I]of p.entries()){const t={number:s,descr:I,section:I.section,width:150,padding:20,maxHeight:m},e=A(u,t,l);i.l.debug("taskHeight before draw",e),m=Math.max(m,e+20),S=Math.max(S,I.events.length);let n=0;for(let i=0;i<I.events.length;i++){const t={descr:I.events[i],section:I.section,number:I.section,width:150,padding:20,maxHeight:50};n+=A(u,t,l)}$=Math.max($,n)}i.l.debug("maxSectionHeight before draw",f),i.l.debug("maxTaskHeight before draw",m),g&&g.length>0?g.forEach((t=>{const e=p.filter((e=>e.section===t)),n={number:v,descr:t,section:v,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:f};i.l.debug("sectionNode",n);const s=u.append("g"),r=T(s,n,v,l);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),k+=f+50,e.length>0&&C(u,e,v,x,k,m,l,S,$,f,!1),x+=200*Math.max(e.length,1),k=50,v++})):(w=!1,C(u,p,v,x,k,m,l,S,$,f,!0));const E=u.node().getBBox();i.l.debug("bounds",E),y&&u.append("text").text(y).attr("x",E.width/2-c).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),_=w?f+m+150:m+100;u.append("g").attr("class","lineWrapper").append("line").attr("x1",c).attr("y1",_).attr("x2",E.width+3*c).attr("y2",_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.o)(void 0,u,(null==(a=l.timeline)?void 0:a.padding)??50,(null==(o=l.timeline)?void 0:o.useMaxWidth)??!1)}},parser:c,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],(0,r.A)(t["lineColor"+n])?t["lineColor"+n]=(0,a.A)(t["lineColor"+n],20):t["lineColor"+n]=(0,o.A)(t["lineColor"+n],20);for(let n=0;n<t.THEME_COLOR_LIMIT;n++){const i=""+(17-3*n);e+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} path {\n fill: ${t["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${t["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${t["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${t["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${i};\n }\n .section-${n-1} line {\n stroke: ${t["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${t["cScaleLabel"+n]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return e})(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.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 .eventWrapper {\n filter: brightness(120%);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/2453.6e208534.js b/assets/js/2453.6e208534.js new file mode 100644 index 00000000000..f956008faf9 --- /dev/null +++ b/assets/js/2453.6e208534.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2453],{10646:(e,t,n)=>{n.d(t,{H:()=>l});var r=n(82933);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.AV(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}},82933:(e,t,n)=>{n.d(t,{AV:()=>c,De:()=>o,c$:()=>p,gh:()=>a,nh:()=>d});var r=n(34963),l=n(89610);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.A(n)){var o=n.transition;if(l.A(o))return o(e)}return e}},75937:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(72453),l=n(74886);const o=(e,t)=>r.A.lang.round(l.A.parse(e)[t])},22453:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(32548),l=n(65382),o=n(99702);n(26312),n(697),n(21176),n(14075),n(74353),n(16750),n(42838);const a={parser:r.p,db:r.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.p)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),r.f.clear(),r.f.setGen("gen-2")}}},65382:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(697),l=n(26312),o=n(99702),a=n(35364),s=n(10646),i=n(75937),c=n(25582);const d={},p=async function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`),c=Object.keys(e);for(const d of c){const n=e[d];let r="default";n.classes.length>0&&(r=n.classes.join(" ")),r+=" flowchart-label";const c=(0,o.k)(n.styles);let p,b=void 0!==n.text?n.text:n.id;if(o.l.info("vertex",n,n.labelType),"markdown"===n.labelType)o.l.info("vertex",n,n.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b};p=(0,s.H)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",c.labelStyle.replace("color:","fill:"));const t=b.split(o.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)}p=e}let w=0,f="";switch(n.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}const u=await(0,o.r)(b,(0,o.c)());t.setNode(n.id,{labelStyle:c.labelStyle,shape:f,labelText:u,labelType:n.labelType,rx:w,ry:w,class:r,style:c.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:a.db.getTooltip(n.id)||"",domId:a.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,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:c.labelStyle,labelType:n.labelType,shape:f,labelText:u,rx:w,ry:w,class:r,style:c.style,id:n.id,domId:a.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,o.c)().flowchart.padding})}},b=async function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}for(const c of e){s++;const n="L-"+c.start+"-"+c.end;void 0===i[n]?(i[n]=0,o.l.info("abc78 new entry",n,i[n])):(i[n]++,o.l.info("abc78 new entry",n,i[n]));let p=n+"-"+i[n];o.l.info("abc78 new link id to be used is",n,p,i[n]);const b="LS-"+c.start,w="LE-"+c.end,f={style:"",labelStyle:""};switch(f.minlen=c.length||1,"arrow_open"===c.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",c.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(c.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==c.style){const e=(0,o.k)(c.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==c.interpolate?f.curve=(0,o.n)(c.interpolate,l.lUB):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.lUB):f.curve=(0,o.n)(d.curve,l.lUB),void 0===c.text?void 0!==c.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=c.labelType,f.label=await(0,o.r)(c.text.replace(o.e.lineBreakRegex,"\n"),(0,o.c)()),void 0===c.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(c.start,c.end,f,s)}},w={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){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ltv)("#i"+t));const h="sandbox"===c?(0,l.Ltv)(u.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.T({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.Ubm)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}await p(v,y,t,h,g,s),await b(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.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(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ltv)("#"+t+' [id="'+e+'"]');if(r){const e=g.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"===c?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()}))}}}))}},f=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 .katex path {\n fill: #000;\n stroke: #000;\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: ${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 /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.A,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.A(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \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/248beabf.8a43592f.js b/assets/js/248beabf.8a43592f.js new file mode 100644 index 00000000000..a5556397294 --- /dev/null +++ b/assets/js/248beabf.8a43592f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5305],{49444:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>r});var s=t(74848),a=t(28453);const c={title:"Events and logs",sidebar_position:7,description:"Learn about events and logs in Besu.",tags:["public networks","private networks"]},i="Events and logs",o={id:"public-networks/concepts/events-and-logs",title:"Events and logs",description:"Learn about events and logs in Besu.",source:"@site/docs/public-networks/concepts/events-and-logs.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/events-and-logs",permalink:"/public-networks/concepts/events-and-logs",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/events-and-logs.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Events and logs",sidebar_position:7,description:"Learn about events and logs in Besu.",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Network ID and chain ID",permalink:"/public-networks/concepts/network-and-chain-id"},next:{title:"Genesis file",permalink:"/public-networks/concepts/genesis-file"}},d={},r=[{value:"Topics",id:"topics",level:2},{value:"Event parameters",id:"event-parameters",level:2},{value:"Event signature hash",id:"event-signature-hash",level:2},{value:"Topic filters",id:"topic-filters",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"events-and-logs",children:"Events and logs"})}),"\n",(0,s.jsx)(n.p,{children:"Transaction mining causes smart contracts to emit events and write logs to the blockchain."}),"\n",(0,s.jsx)(n.p,{children:"The smart contract address is the link to the logs and the blockchain includes the logs, but contracts cannot access logs. Log storage is cheaper than contract storage (that is, it costs less gas) so storing and accessing the required data in logs reduces the cost. For example, use logs to display all transfers made using a specific contract, but not the current state of the contract."}),"\n",(0,s.jsxs)(n.p,{children:["A Dapp front end can either access logs using the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:"JSON-RPC API filter methods"})," or subscribe to logs using the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub#logs",children:"RPC Pub/Sub API"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#admin_generatelogbloomcache",children:(0,s.jsx)(n.code,{children:"admin_generateLogBloomCache"})})," to improve log retrieval performance."]}),"\n",(0,s.jsx)(n.h2,{id:"topics",children:"Topics"}),"\n",(0,s.jsxs)(n.p,{children:["Log entries contain up to four topics. The first topic is the ",(0,s.jsx)(n.a,{href:"#event-signature-hash",children:"event signature hash"})," and up to three topics are the indexed ",(0,s.jsx)(n.a,{href:"#event-parameters",children:"event parameters"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:'title="A log entry for an event with one indexed parameter"',children:'{\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x84",\n "blockHash": "0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336",\n "transactionHash": "0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3",\n "0x0000000000000000000000000000000000000000000000000000000000000001"\n ]\n}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"event-parameters",children:"Event parameters"}),"\n",(0,s.jsxs)(n.p,{children:["Up to three event parameters can have the ",(0,s.jsx)(n.code,{children:"indexed"})," attribute. Logs store these indexed parameters as ",(0,s.jsx)(n.code,{children:"topics"}),". Indexed parameters are searchable and filterable."]}),"\n",(0,s.jsxs)(n.p,{children:["Topics are 32 bytes. If an indexed argument is an array (including ",(0,s.jsx)(n.code,{children:"string"})," and ",(0,s.jsx)(n.code,{children:"byte"})," datatypes), the log stores the keccak-256 hash of the parameter as a topic."]}),"\n",(0,s.jsxs)(n.p,{children:["Log ",(0,s.jsx)(n.code,{children:"data"})," includes non-indexed parameters but is difficult to search or filter."]}),"\n",(0,s.jsx)(n.p,{children:"A Solidity contract storing one indexed and one non-indexed parameter and has an event emitting the value of each parameter:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-solidity",children:"pragma solidity ^0.5.1;\ncontract Storage {\n uint256 public valueIndexed;\n uint256 public valueNotIndexed;\n\n event Event1(uint256 indexed valueIndexed, uint256 valueNotIndexed);\n\n function setValue(uint256 _valueIndexed, uint256 _valueNotIndexed) public {\n valueIndexed = _valueIndexed;\n valueNotIndexed = _valueNotIndexed;\n emit Event1(_valueIndexed, _valueNotIndexed);\n }\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["A log entry created by invoking the contract in the previous example with ",(0,s.jsx)(n.code,{children:"valueIndexed"})," set to 5 and ",(0,s.jsx)(n.code,{children:"valueNotIndexed"})," set to 7:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x4d6",\n "blockHash": "0x7d0ac7c12ac9f622d346d444c7e0fa4dda8d4ed90de80d6a28814613a4884a67",\n "transactionHash": "0xe994022ada94371ace00c4e1e20663a01437846ced02f18b3f3afec827002781",\n "transactionIndex": "0x0",\n "address": "0x43d1f9096674b5722d359b6402381816d5b22f28",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000007",\n "topics": [\n "0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8",\n "0x0000000000000000000000000000000000000000000000000000000000000005"\n ]\n}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"event-signature-hash",children:"Event signature hash"}),"\n",(0,s.jsxs)(n.p,{children:["The first topic in a log entry is always the event signature hash. The event signature hash is a keccak-256 hash of the event name and input argument types, with argument names ignored. For example, the event ",(0,s.jsx)(n.code,{children:"Hello(uint256 worldId)"})," has the signature hash ",(0,s.jsx)(n.code,{children:"keccak('Hello(uint256)')"}),". The signature identifies to which event log topics belong."]}),"\n",(0,s.jsx)(n.p,{children:"A Solidity contract with two different events:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-solidity",children:"pragma solidity ^0.5.1;\ncontract Storage {\n uint256 public valueA;\n uint256 public valueB;\n\n event Event1(uint256 indexed valueA);\n event Event2(uint256 indexed valueB);\n\n function setValue(uint256 _valueA) public {\n valueA = _valueA;\n emit Event1(_valueA);\n }\n\n function setValueAgain(uint256 _valueB) public {\n valueB = _valueB;\n emit Event2(_valueB);\n }\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The event signature hash for event 1 is ",(0,s.jsx)(n.code,{children:"keccak('Event1(uint256)')"})," and the event signature hash for event 2 is ",(0,s.jsx)(n.code,{children:"keccak('Event2(uint256)')"}),". The hashes are:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"})," for event 1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e"})," for event 2."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["You can use a library keccak (sha3) hash function, such as provided in ",(0,s.jsx)(n.a,{href:"https://web3js.readthedocs.io/en/v1.2.11/web3-utils.html?highlight=sha3#sha3",children:"Web3.js"}),", or an online tool, such as ",(0,s.jsx)(n.a,{href:"https://emn178.github.io/online-tools/keccak_256.html",children:"https://emn178.github.io/online-tools/keccak_256.html"}),", to generate event signature hashes."]})}),"\n",(0,s.jsx)(n.p,{children:"Log entries from invoking the Solidity contract in the previous example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'[\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x84",\n "blockHash": "0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336",\n "transactionHash": "0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3",\n "0x0000000000000000000000000000000000000000000000000000000000000001"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x87",\n "blockHash": "0x6643a1e58ad857f727552e4572b837a85b3ca64c4799d085170c707e4dad5255",\n "transactionHash": "0xa95295fcea7df3b9e47ab95d2dadeb868145719ed9cc0e6c757c8a174e1fcb11",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x",\n "topics": [\n "0x06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e",\n "0x0000000000000000000000000000000000000000000000000000000000000002"\n ]\n }\n]\n'})}),"\n",(0,s.jsx)(n.h2,{id:"topic-filters",children:"Topic filters"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/api/objects#filter-options-object",children:"Filter options objects"})," have a ",(0,s.jsx)(n.code,{children:"topics"})," key to filter logs by topics."]}),"\n",(0,s.jsxs)(n.p,{children:["Topics are order-dependent. A transaction with a log containing topics ",(0,s.jsx)(n.code,{children:"[A, B]"})," matches with the following topic filters:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"[]"})," - Match any topic"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"[A]"})," - Match A in first position"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"[[null], [B]]"})," - Match any topic in first position AND B in second position"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"[[A],[B]]"})," - Match A in first position AND B in second position"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"[[A, C], [B, D]]"})," - Match (A OR C) in first position AND (B OR D) in second position."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The following filter option object returns log entries for the ",(0,s.jsx)(n.a,{href:"#event-parameters",children:"Event Parameters example contract"})," with ",(0,s.jsx)(n.code,{children:"valueIndexed"})," set to 5 or 9:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "fromBlock": "earliest",\n "toBlock": "latest",\n "address": "0x43d1f9096674b5722d359b6402381816d5b22f28",\n "topics": [\n ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],\n [\n "0x0000000000000000000000000000000000000000000000000000000000000005",\n "0x0000000000000000000000000000000000000000000000000000000000000009"\n ]\n ]\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var s=t(96540);const a={},c=s.createContext(a);function i(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2548.4854bfbf.js b/assets/js/2548.4854bfbf.js new file mode 100644 index 00000000000..033bce376b2 --- /dev/null +++ b/assets/js/2548.4854bfbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2548],{32548:(t,e,s)=>{s.d(e,{d:()=>st,f:()=>et,p:()=>r});var u=s(26312),i=s(99702),n=function(){var t=function(t,e,s,u){for(s=s||{},u=t.length;u--;s[t[u]]=e);return s},e=[1,4],s=[1,3],u=[1,5],i=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],n=[2,2],r=[1,13],a=[1,14],c=[1,15],o=[1,16],l=[1,23],h=[1,25],A=[1,26],d=[1,27],p=[1,49],y=[1,48],E=[1,29],f=[1,30],g=[1,31],k=[1,32],D=[1,33],b=[1,44],F=[1,46],T=[1,42],C=[1,47],_=[1,43],B=[1,50],S=[1,45],m=[1,51],x=[1,52],v=[1,34],L=[1,35],I=[1,36],R=[1,37],$=[1,57],N=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],O=[1,61],w=[1,60],P=[1,62],U=[8,9,11,73,75],V=[1,88],G=[1,93],M=[1,92],K=[1,89],Y=[1,85],j=[1,91],X=[1,87],z=[1,94],H=[1,90],W=[1,95],Q=[1,86],q=[8,9,10,11,73,75],Z=[8,9,10,11,44,73,75],J=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],tt=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],et=[42,58,86,99,102,103,106,108,111,112,113],st=[1,121],ut=[1,120],it=[1,128],nt=[1,142],rt=[1,143],at=[1,144],ct=[1,145],ot=[1,130],lt=[1,132],ht=[1,136],At=[1,137],dt=[1,138],pt=[1,139],yt=[1,140],Et=[1,141],ft=[1,146],gt=[1,147],kt=[1,126],Dt=[1,127],bt=[1,134],Ft=[1,129],Tt=[1,133],Ct=[1,131],_t=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bt=[1,149],St=[8,9,11],mt=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],xt=[1,169],vt=[1,165],Lt=[1,166],It=[1,170],Rt=[1,167],$t=[1,168],Nt=[75,113,116],Ot=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],wt=[10,103],Pt=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Ut=[1,235],Vt=[1,233],Gt=[1,237],Mt=[1,231],Kt=[1,232],Yt=[1,234],jt=[1,236],Xt=[1,238],zt=[1,255],Ht=[8,9,11,103],Wt=[8,9,10,11,58,81,102,103,106,107,108,109],Qt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(t,e,s,u,i,n,r){var a=n.length-1;switch(i){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(n[a])||n[a].length>0)&&n[a-1].push(n[a]),this.$=n[a-1];break;case 4:case 176:case 49:case 71:case 174:this.$=n[a];break;case 11:u.setDirection("TB"),this.$="TB";break;case 12:u.setDirection(n[a-1]),this.$=n[a-1];break;case 27:this.$=n[a-1].nodes;break;case 33:this.$=u.addSubGraph(n[a-6],n[a-1],n[a-4]);break;case 34:this.$=u.addSubGraph(n[a-3],n[a-1],n[a-3]);break;case 35:this.$=u.addSubGraph(void 0,n[a-1],void 0);break;case 37:this.$=n[a].trim(),u.setAccTitle(this.$);break;case 38:case 39:this.$=n[a].trim(),u.setAccDescription(this.$);break;case 43:u.addLink(n[a-2].stmt,n[a],n[a-1]),this.$={stmt:n[a],nodes:n[a].concat(n[a-2].nodes)};break;case 44:u.addLink(n[a-3].stmt,n[a-1],n[a-2]),this.$={stmt:n[a-1],nodes:n[a-1].concat(n[a-3].nodes)};break;case 45:this.$={stmt:n[a-1],nodes:n[a-1]};break;case 46:this.$={stmt:n[a],nodes:n[a]};break;case 47:case 121:case 123:this.$=[n[a]];break;case 48:this.$=n[a-4].concat(n[a]);break;case 50:this.$=n[a-2],u.setClass(n[a-2],n[a]);break;case 51:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"square");break;case 52:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"doublecircle");break;case 53:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"circle");break;case 54:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"ellipse");break;case 55:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"stadium");break;case 56:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"subroutine");break;case 57:this.$=n[a-7],u.addVertex(n[a-7],n[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[n[a-5],n[a-3]]]));break;case 58:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"cylinder");break;case 59:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"round");break;case 60:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"diamond");break;case 61:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"hexagon");break;case 62:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"odd");break;case 63:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"trapezoid");break;case 64:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"inv_trapezoid");break;case 65:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_right");break;case 66:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_left");break;case 67:this.$=n[a],u.addVertex(n[a]);break;case 68:n[a-1].text=n[a],this.$=n[a-1];break;case 69:case 70:n[a-2].text=n[a-1],this.$=n[a-2];break;case 72:var c=u.destructLink(n[a],n[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:n[a-1]};break;case 73:case 79:case 94:case 96:this.$={text:n[a],type:"text"};break;case 74:case 80:case 95:this.$={text:n[a-1].text+""+n[a],type:n[a-1].type};break;case 75:case 81:this.$={text:n[a],type:"string"};break;case 76:case 82:case 97:this.$={text:n[a],type:"markdown"};break;case 77:c=u.destructLink(n[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 78:this.$=n[a-1];break;case 98:this.$=n[a-4],u.addClass(n[a-2],n[a]);break;case 99:this.$=n[a-4],u.setClass(n[a-2],n[a]);break;case 100:case 108:this.$=n[a-1],u.setClickEvent(n[a-1],n[a]);break;case 101:case 109:this.$=n[a-3],u.setClickEvent(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 102:this.$=n[a-2],u.setClickEvent(n[a-2],n[a-1],n[a]);break;case 103:this.$=n[a-4],u.setClickEvent(n[a-4],n[a-3],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 104:this.$=n[a-2],u.setLink(n[a-2],n[a]);break;case 105:this.$=n[a-4],u.setLink(n[a-4],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 106:this.$=n[a-4],u.setLink(n[a-4],n[a-2],n[a]);break;case 107:this.$=n[a-6],u.setLink(n[a-6],n[a-4],n[a]),u.setTooltip(n[a-6],n[a-2]);break;case 110:this.$=n[a-1],u.setLink(n[a-1],n[a]);break;case 111:this.$=n[a-3],u.setLink(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 112:this.$=n[a-3],u.setLink(n[a-3],n[a-2],n[a]);break;case 113:this.$=n[a-5],u.setLink(n[a-5],n[a-4],n[a]),u.setTooltip(n[a-5],n[a-2]);break;case 114:this.$=n[a-4],u.addVertex(n[a-2],void 0,void 0,n[a]);break;case 115:this.$=n[a-4],u.updateLink([n[a-2]],n[a]);break;case 116:this.$=n[a-4],u.updateLink(n[a-2],n[a]);break;case 117:this.$=n[a-8],u.updateLinkInterpolate([n[a-6]],n[a-2]),u.updateLink([n[a-6]],n[a]);break;case 118:this.$=n[a-8],u.updateLinkInterpolate(n[a-6],n[a-2]),u.updateLink(n[a-6],n[a]);break;case 119:this.$=n[a-6],u.updateLinkInterpolate([n[a-4]],n[a]);break;case 120:this.$=n[a-6],u.updateLinkInterpolate(n[a-4],n[a]);break;case 122:case 124:n[a-2].push(n[a]),this.$=n[a-2];break;case 126:this.$=n[a-1]+n[a];break;case 175:case 177:this.$=n[a-1]+""+n[a];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,9:e,10:s,12:u},{1:[3]},t(i,n,{5:6}),{4:7,9:e,10:s,12:u},{4:8,9:e,10:s,12:u},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:$,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:O,9:w,11:P,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:O,9:w,11:P,21:66},{8:O,9:w,11:P,21:67},{8:O,9:w,11:P,21:68},{8:O,9:w,11:P,21:69},{8:O,9:w,11:P,21:70},{8:O,9:w,10:[1,71],11:P,21:72},t(N,[2,36]),{35:[1,73]},{37:[1,74]},t(N,[2,39]),t(U,[2,46],{18:75,10:$}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:V,42:G,58:M,77:[1,83],86:K,92:[1,80],94:[1,81],98:82,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},t(N,[2,178]),t(N,[2,179]),t(N,[2,180]),t(N,[2,181]),t(q,[2,47]),t(q,[2,49],{44:[1,96]}),t(Z,[2,67],{110:109,29:[1,97],42:p,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:y,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(J,[2,174]),t(J,[2,135]),t(J,[2,136]),t(J,[2,137]),t(J,[2,138]),t(J,[2,139]),t(J,[2,140]),t(J,[2,141]),t(J,[2,142]),t(J,[2,143]),t(J,[2,144]),t(J,[2,145]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,110]},t(tt,[2,26],{18:111,10:$}),t(N,[2,27]),{40:112,41:38,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(et,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:st,116:ut},t([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:it,12:nt,14:rt,27:at,28:122,32:ct,42:ot,58:lt,73:ht,77:[1,124],78:[1,125],80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:123,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(_t,n,{5:148}),t(N,[2,37]),t(N,[2,38]),t(U,[2,45],{42:Bt}),{42:p,45:150,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{99:[1,151],100:152,102:[1,153]},{42:p,45:154,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{42:p,45:155,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},t(St,[2,108],{117:160,10:[1,159],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,110],{10:[1,161]}),t(mt,[2,176]),t(mt,[2,163]),t(mt,[2,164]),t(mt,[2,165]),t(mt,[2,166]),t(mt,[2,167]),t(mt,[2,168]),t(mt,[2,169]),t(mt,[2,170]),t(mt,[2,171]),t(mt,[2,172]),t(mt,[2,173]),{42:p,45:162,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{30:163,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:171,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:173,48:[1,172],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:174,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:175,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:176,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{106:[1,177]},{30:178,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:179,63:[1,180],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:181,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:182,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:183,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(J,[2,175]),t(i,[2,20]),t(tt,[2,25]),t(U,[2,43],{18:184,10:$}),t(et,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{75:[1,188],76:189,113:st,116:ut},t(Nt,[2,73]),t(Nt,[2,75]),t(Nt,[2,76]),t(Nt,[2,161]),t(Nt,[2,162]),{8:O,9:w,10:it,11:P,12:nt,14:rt,21:191,27:at,29:[1,190],32:ct,42:ot,58:lt,73:ht,80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:192,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(Ot,[2,94]),t(Ot,[2,96]),t(Ot,[2,97]),t(Ot,[2,150]),t(Ot,[2,151]),t(Ot,[2,152]),t(Ot,[2,153]),t(Ot,[2,154]),t(Ot,[2,155]),t(Ot,[2,156]),t(Ot,[2,157]),t(Ot,[2,158]),t(Ot,[2,159]),t(Ot,[2,160]),t(Ot,[2,83]),t(Ot,[2,84]),t(Ot,[2,85]),t(Ot,[2,86]),t(Ot,[2,87]),t(Ot,[2,88]),t(Ot,[2,89]),t(Ot,[2,90]),t(Ot,[2,91]),t(Ot,[2,92]),t(Ot,[2,93]),{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,193],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:$,18:194},{10:[1,195],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,196]},{10:[1,197],103:[1,198]},t(wt,[2,121]),{10:[1,199],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,200],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{77:[1,201]},t(St,[2,102],{10:[1,202]}),t(St,[2,104],{10:[1,203]}),{77:[1,204]},t(mt,[2,177]),{77:[1,205],95:[1,206]},t(q,[2,50],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),{31:[1,207],65:xt,79:208,113:It,114:Rt,115:$t},t(Pt,[2,79]),t(Pt,[2,81]),t(Pt,[2,82]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),{47:[1,209],65:xt,79:208,113:It,114:Rt,115:$t},{30:210,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{49:[1,211],65:xt,79:208,113:It,114:Rt,115:$t},{51:[1,212],65:xt,79:208,113:It,114:Rt,115:$t},{53:[1,213],65:xt,79:208,113:It,114:Rt,115:$t},{55:[1,214],65:xt,79:208,113:It,114:Rt,115:$t},{58:[1,215]},{62:[1,216],65:xt,79:208,113:It,114:Rt,115:$t},{64:[1,217],65:xt,79:208,113:It,114:Rt,115:$t},{30:218,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{31:[1,219],65:xt,79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,220],69:[1,221],79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,223],69:[1,222],79:208,113:It,114:Rt,115:$t},t(U,[2,44],{42:Bt}),t(et,[2,70]),t(et,[2,69]),{60:[1,224],65:xt,79:208,113:It,114:Rt,115:$t},t(et,[2,72]),t(Nt,[2,74]),{30:225,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(_t,n,{5:226}),t(Ot,[2,95]),t(N,[2,35]),{41:227,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{10:Ut,58:Vt,81:Gt,89:228,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:239,101:[1,240],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:241,101:[1,242],102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{102:[1,243]},{10:Ut,58:Vt,81:Gt,89:244,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{42:p,45:245,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},t(St,[2,109]),t(St,[2,111],{10:[1,249]}),t(St,[2,112]),t(Z,[2,51]),t(Pt,[2,80]),t(Z,[2,52]),{49:[1,250],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,59]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),{106:[1,251]},t(Z,[2,58]),t(Z,[2,60]),{64:[1,252],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,65]),t(Z,[2,64]),t(Z,[2,66]),t([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,254],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(q,[2,48]),t(St,[2,114],{103:zt}),t(Ht,[2,123],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(Wt,[2,125]),t(Wt,[2,127]),t(Wt,[2,128]),t(Wt,[2,129]),t(Wt,[2,130]),t(Wt,[2,131]),t(Wt,[2,132]),t(Wt,[2,133]),t(Wt,[2,134]),t(St,[2,115],{103:zt}),{10:[1,257]},t(St,[2,116],{103:zt}),{10:[1,258]},t(wt,[2,122]),t(St,[2,98],{103:zt}),t(St,[2,99],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(St,[2,103]),t(St,[2,105],{10:[1,259]}),t(St,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:O,9:w,11:P,21:264},t(N,[2,34]),{10:Ut,58:Vt,81:Gt,102:Mt,104:265,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Wt,[2,126]),{14:V,42:G,58:M,86:K,98:266,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{14:V,42:G,58:M,86:K,98:267,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{95:[1,268]},t(St,[2,113]),t(Z,[2,53]),{30:269,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(Z,[2,61]),t(_t,n,{5:270}),t(Ht,[2,124],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Kt,107:Yt,108:jt,109:Xt}),t(St,[2,119],{117:160,10:[1,271],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,120],{117:160,10:[1,272],14:V,42:G,58:M,86:K,102:Y,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,107]),{31:[1,273],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,274],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:Ut,58:Vt,81:Gt,89:275,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:276,102:Mt,104:229,105:230,106:Kt,107:Yt,108:jt,109:Xt},t(Z,[2,57]),t(N,[2,33]),t(St,[2,117],{103:zt}),t(St,[2,118],{103:zt})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],u=[],i=[null],n=[],r=this.table,a="",c=0,o=0,l=n.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(A.yy[d]=this.yy[d]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;n.push(p);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,f,g,k,D,b,F,T,C,_={};;){if(f=s[s.length-1],this.defaultActions[f]?g=this.defaultActions[f]:(null==E&&(C=void 0,"number"!=typeof(C=u.pop()||h.lex()||1)&&(C instanceof Array&&(C=(u=C).pop()),C=e.symbols_[C]||C),E=C),g=r[f]&&r[f][E]),void 0===g||!g.length||!g[0]){var B="";for(D in T=[],r[f])this.terminals_[D]&&D>2&&T.push("'"+this.terminals_[D]+"'");B=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(B,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:p,expected:T})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+E);switch(g[0]){case 1:s.push(E),i.push(h.yytext),n.push(h.yylloc),s.push(g[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,p=h.yylloc;break;case 2:if(b=this.productions_[g[1]][1],_.$=i[i.length-b],_._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},y&&(_._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(k=this.performAction.apply(_,[a,o,c,A.yy,g[1],i,n].concat(l))))return k;b&&(s=s.slice(0,-1*b*2),i=i.slice(0,-1*b),n=n.slice(0,-1*b)),s.push(this.productions_[g[1]][0]),i.push(_.$),n.push(_._$),F=r[s[s.length-2]][s[s.length-1]],s.push(F);break;case 3:return!0}}return!0}},qt={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,s=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 u=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),s.length-1&&(this.yylineno-=s.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:s?(s.length===u.length?this.yylloc.first_column:0)+u[u.length-s.length].length-s[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 s,u,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))),(u=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.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],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in i)this[n]=i[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,u;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),n=0;n<i.length;n++)if((s=this._input.match(this.rules[i[n]]))&&(!e||s[0].length>e[0].length)){if(e=s,u=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[u]))&&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,s,u){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 8:case 11:case 14:case 17:case 27:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 12:return 93;case 13:return"MD_STR";case 15:this.begin("md_string");break;case 16:return"STR";case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 28:return 85;case 29:case 30:case 31:return t.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:case 35:case 36:case 37:return 95;case 38:return this.popState(),13;case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:case 95:return 108;case 55:return 44;case 56:return 58;case 57:case 96:return 42;case 58:return 8;case 59:return 103;case 60:case 94:return 112;case 61:case 64:case 67:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:case 66:case 69:return 116;case 65:return this.pushState("thickEdgeText"),73;case 68:return this.pushState("dottedEdgeText"),73;case 70:return 75;case 71:return this.popState(),51;case 72:case 108:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\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<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-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])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};function Zt(){this.yy={}}return Qt.lexer=qt,Zt.prototype=Qt,Qt.Parser=Zt,new Zt}();n.parser=n;const r=n;let a,c,o=0,l=(0,i.c)(),h={},A=[],d={},p=[],y={},E={},f=0,g=!0,k=[];const D=t=>i.e.sanitizeText(t,l),b=function(t){const e=Object.keys(h);for(const s of e)if(h[s].id===t)return h[s].domId;return t},F=function(t,e,s,u,n,r,a={}){let c,A=t;void 0!==A&&0!==A.trim().length&&(void 0===h[A]&&(h[A]={id:A,labelType:"text",domId:"flowchart-"+A+"-"+o,styles:[],classes:[]}),o++,void 0!==e?(l=(0,i.c)(),c=D(e.text.trim()),h[A].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),h[A].text=c):void 0===h[A].text&&(h[A].text=t),void 0!==s&&(h[A].type=s),null!=u&&u.forEach((function(t){h[A].styles.push(t)})),null!=n&&n.forEach((function(t){h[A].classes.push(t)})),void 0!==r&&(h[A].dir=r),void 0===h[A].props?h[A].props=a:void 0!==a&&Object.assign(h[A].props,a))},T=function(t,e,s){const u={start:t,end:e,type:void 0,text:"",labelType:"text"};i.l.info("abc78 Got edge...",u);const n=s.text;if(void 0!==n&&(u.text=D(n.text.trim()),'"'===u.text[0]&&'"'===u.text[u.text.length-1]&&(u.text=u.text.substring(1,u.text.length-1)),u.labelType=n.type),void 0!==s&&(u.type=s.type,u.stroke=s.stroke,u.length=s.length),(null==u?void 0:u.length)>10&&(u.length=10),!(A.length<(l.maxEdges??500)))throw new Error(`Edge limit exceeded. ${A.length} edges found, but the limit is ${l.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`);i.l.info("abc78 pushing edge..."),A.push(u)},C=function(t,e,s){let u,n;for(i.l.info("addLink (abc78)",t,e,s),u=0;u<t.length;u++)for(n=0;n<e.length;n++)T(t[u],e[n],s)},_=function(t,e){t.forEach((function(t){"default"===t?A.defaultInterpolate=e:A[t].interpolate=e}))},B=function(t,e){t.forEach((function(t){if(t>=A.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${A.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?A.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),A[t].style=e)}))},S=function(t,e){t.split(",").forEach((function(t){void 0===d[t]&&(d[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const s=e.replace("fill","bgFill").replace("color","fill");d[t].textStyles.push(s)}d[t].styles.push(e)}))}))},m=function(t){a=t,a.match(/.*</)&&(a="RL"),a.match(/.*\^/)&&(a="BT"),a.match(/.*>/)&&(a="LR"),a.match(/.*v/)&&(a="TB"),"TD"===a&&(a="TB")},x=function(t,e){t.split(",").forEach((function(t){let s=t;void 0!==h[s]&&h[s].classes.push(e),void 0!==y[s]&&y[s].classes.push(e)}))},v=function(t,e,s){t.split(",").forEach((function(t){void 0!==h[t]&&(h[t].link=i.u.formatUrl(e,l),h[t].linkTarget=s)})),x(t,"clickable")},L=function(t){if(E.hasOwnProperty(t))return E[t]},I=function(t,e,s){t.split(",").forEach((function(t){!function(t,e,s){let u=b(t);if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.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!==h[t]&&(h[t].haveCallback=!0,k.push((function(){const t=document.querySelector(`[id="${u}"]`);null!==t&&t.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)})))}(t,e,s)})),x(t,"clickable")},R=function(t){k.forEach((function(e){e(t)}))},$=function(){return a.trim()},N=function(){return h},O=function(){return A},w=function(){return d},P=function(t){let e=(0,u.Ltv)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,u.Ltv)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,u.Ltv)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,u.Ltv)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.bottom+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ltv)(this).classed("hover",!1)}))};k.push(P);const U=function(t="gen-1"){h={},d={},A=[],k=[P],p=[],y={},f=0,E={},g=!0,c=t,l=(0,i.c)(),(0,i.v)()},V=t=>{c=t||"gen-2"},G=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},M=function(t,e,s){let u=t.text.trim(),n=s.text;t===s&&s.text.match(/\s/)&&(u=void 0);let r=[];const{nodeList:a,dir:o}=function(t){const e={boolean:{},number:{},string:{}},s=[];let u;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(u=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!s.includes(t)&&s.push(t))})),dir:u}}(r.concat.apply(r,e));if(r=a,"gen-1"===c)for(let i=0;i<r.length;i++)r[i]=b(r[i]);u=u||"subGraph"+f,n=n||"",n=D(n),f+=1;const l={id:u,nodes:r,title:n.trim(),classes:[],dir:o,labelType:s.type};return i.l.info("Adding",l.id,l.nodes,l.dir),l.nodes=J(l,p).nodes,p.push(l),y[u]=l,u},K=function(t){for(const[e,s]of p.entries())if(s.id===t)return e;return-1};let Y=-1;const j=[],X=function(t,e){const s=p[e].nodes;if(Y+=1,Y>2e3)return;if(j[Y]=e,p[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u<s.length;){const e=K(s[u]);if(e>=0){const s=X(t,e);if(s.result)return{result:!0,count:i+s.count};i+=s.count}u+=1}return{result:!1,count:i}},z=function(t){return j[t]},H=function(){Y=-1,p.length>0&&X("none",p.length-1)},W=function(){return p},Q=()=>!!g&&(g=!1,!0),q=(t,e)=>{const s=(t=>{const e=t.trim();let s=e.slice(0,-1),u="arrow_open";switch(e.slice(-1)){case"x":u="arrow_cross","x"===e[0]&&(u="double_"+u,s=s.slice(1));break;case">":u="arrow_point","<"===e[0]&&(u="double_"+u,s=s.slice(1));break;case"o":u="arrow_circle","o"===e[0]&&(u="double_"+u,s=s.slice(1))}let i="normal",n=s.length-1;"="===s[0]&&(i="thick"),"~"===s[0]&&(i="invisible");let r=((t,e)=>{const s=e.length;let u=0;for(let i=0;i<s;++i)e[i]===t&&++u;return u})(".",s);return r&&(i="dotted",n=r),{type:u,stroke:i,length:n}})(t);let u;if(e){if(u=(t=>{let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let u="normal";return e.includes("=")&&(u="thick"),e.includes(".")&&(u="dotted"),{type:s,stroke:u}})(e),u.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===u.type)u.type=s.type;else{if(u.type!==s.type)return{type:"INVALID",stroke:"INVALID"};u.type="double_"+u.type}return"double_arrow"===u.type&&(u.type="double_arrow_point"),u.length=s.length,u}return s},Z=(t,e)=>{let s=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(s=!0)})),s},J=(t,e)=>{const s=[];return t.nodes.forEach(((u,i)=>{Z(e,u)||s.push(t.nodes[i])})),{nodes:s}},tt={firstGraph:Q},et={defaultConfig:()=>i.K.flowchart,setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,addVertex:F,lookUpDomId:b,addLink:C,updateLinkInterpolate:_,updateLink:B,addClass:S,setDirection:m,setClass:x,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(E["gen-1"===c?b(t):t]=D(e))}))},getTooltip:L,setClickEvent:I,setLink:v,bindFunctions:R,getDirection:$,getVertices:N,getEdges:O,getClasses:w,clear:U,setGen:V,defaultStyle:G,addSubGraph:M,getDepthFirstPos:z,indexNodes:H,getSubGraphs:W,destructLink:q,lex:tt,exists:Z,makeUniq:J,setDiagramTitle:i.q,getDiagramTitle:i.t},st=Object.freeze(Object.defineProperty({__proto__:null,addClass:S,addLink:C,addSingleLink:T,addSubGraph:M,addVertex:F,bindFunctions:R,clear:U,default:et,defaultStyle:G,destructLink:q,firstGraph:Q,getClasses:w,getDepthFirstPos:z,getDirection:$,getEdges:O,getSubGraphs:W,getTooltip:L,getVertices:N,indexNodes:H,lex:tt,lookUpDomId:b,setClass:x,setClickEvent:I,setDirection:m,setGen:V,setLink:v,updateLink:B,updateLinkInterpolate:_},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/assets/js/25537021.4c3c521d.js b/assets/js/25537021.4c3c521d.js new file mode 100644 index 00000000000..3e029a1c1f9 --- /dev/null +++ b/assets/js/25537021.4c3c521d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2618],{89040:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var s=i(74848),r=i(28453);const t={title:"Install binary distribution",sidebar_position:2,description:"Install or upgrade Besu from binary distribution",tags:["public networks"]},l="Install binary distribution",a={id:"public-networks/get-started/install/binary-distribution",title:"Install binary distribution",description:"Install or upgrade Besu from binary distribution",source:"@site/docs/public-networks/get-started/install/binary-distribution.md",sourceDirName:"public-networks/get-started/install",slug:"/public-networks/get-started/install/binary-distribution",permalink:"/public-networks/get-started/install/binary-distribution",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/install/binary-distribution.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Install binary distribution",sidebar_position:2,description:"Install or upgrade Besu from binary distribution",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Run Besu from Docker image",permalink:"/public-networks/get-started/install/run-docker-image"},next:{title:"Start Besu",permalink:"/public-networks/get-started/start-node"}},o={},d=[{value:"MacOS with Homebrew",id:"macos-with-homebrew",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Install (or upgrade) using Homebrew",id:"install-or-upgrade-using-homebrew",level:3},{value:"Linux / Unix",id:"linux--unix",level:2},{value:"Prerequisites",id:"prerequisites-1",level:3},{value:"Install from packaged binaries",id:"install-from-packaged-binaries",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"install-binary-distribution",children:"Install binary distribution"})}),"\n",(0,s.jsx)(n.h2,{id:"macos-with-homebrew",children:"MacOS with Homebrew"}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://brew.sh/",children:"Homebrew"})}),"\n",(0,s.jsx)(n.li,{children:"Java JDK"}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"caution",children:[(0,s.jsx)(n.p,{children:"Besu supports:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"MacOS High Sierra 10.13 or later versions."}),"\n",(0,s.jsxs)(n.li,{children:["Java 21+. You can install Java using ",(0,s.jsx)(n.code,{children:"brew install openjdk@21"}),". Alternatively, you can manually install the ",(0,s.jsx)(n.a,{href:"https://www.oracle.com/java/technologies/downloads",children:"Java JDK"}),"."]}),"\n"]})]}),"\n",(0,s.jsx)(n.h3,{id:"install-or-upgrade-using-homebrew",children:"Install (or upgrade) using Homebrew"}),"\n",(0,s.jsx)(n.p,{children:"To install Besu using Homebrew:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew tap hyperledger/besu\nbrew install hyperledger/besu/besu\n"})}),"\n",(0,s.jsx)(n.p,{children:"To upgrade an existing Besu installation using Homebrew:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew upgrade hyperledger/besu/besu\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"notes",type:"note",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["If you upgraded your MacOS version between installing and upgrading Besu, when running ",(0,s.jsx)(n.code,{children:"brew upgrade hyperledger/besu/besu"})," you\nmight be prompted to reinstall command line tools with ",(0,s.jsx)(n.code,{children:"xcode-select --install"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command ",(0,s.jsx)(n.code,{children:"brew tap --repair"}),"."]}),"\n"]}),"\n"]})}),"\n",(0,s.jsx)(n.p,{children:"To display the Besu version and confirm installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --version\n"})}),"\n",(0,s.jsx)(n.p,{children:"To display Besu command line help:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --help\n"})}),"\n",(0,s.jsx)(n.h2,{id:"linux--unix",children:"Linux / Unix"}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.oracle.com/java/technologies/downloads/",children:"Java JDK 21+"})}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Linux open file limit",type:"note",children:(0,s.jsxs)(n.p,{children:["If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ",(0,s.jsx)(n.code,{children:"ulimit"}),". If the open files limit is not high enough, a ",(0,s.jsx)(n.code,{children:"Too many open files"})," RocksDB exception occurs."]})}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["We recommend installing ",(0,s.jsx)(n.a,{href:"https://jemalloc.net/",children:"jemalloc"})," to reduce memory usage. If using Ubuntu, you can install it with the command: ",(0,s.jsx)(n.code,{children:"apt install libjemalloc-dev"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"install-from-packaged-binaries",children:"Install from packaged binaries"}),"\n",(0,s.jsxs)(n.p,{children:["Download the Besu ",(0,s.jsx)(n.a,{href:"https://github.com/hyperledger/besu/releases",children:"packaged binaries"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Unpack the downloaded files and change into the ",(0,s.jsx)(n.code,{children:"besu-<release>"})," directory."]}),"\n",(0,s.jsx)(n.p,{children:"Display Besu command line help to confirm installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"bin/besu --help\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>a});var s=i(96540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2712d2e6.08a6a92d.js b/assets/js/2712d2e6.08a6a92d.js new file mode 100644 index 00000000000..0efb1ec830d --- /dev/null +++ b/assets/js/2712d2e6.08a6a92d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6948],{53800:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(74848),o=r(28453);const s={title:"Chatbot",sidebar_position:10,sidebar_label:"Chatbot",description:"Chatbot",tags:["private networks"]},a="Chatbot",i={id:"private-networks/chatbot",title:"Chatbot",description:"Chatbot",source:"@site/docs/private-networks/chatbot.mdx",sourceDirName:"private-networks",slug:"/private-networks/chatbot",permalink:"/private-networks/chatbot",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/chatbot.mdx",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:10,frontMatter:{title:"Chatbot",sidebar_position:10,sidebar_label:"Chatbot",description:"Chatbot",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Plugin API interfaces",permalink:"/private-networks/reference/plugin-api-interfaces"}},c={},d=[];function p(t){const e={h1:"h1",header:"header",...(0,o.R)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"chatbot",children:"Chatbot"})}),"\n",(0,n.jsx)("iframe",{src:"https://docsbot-besu.prd.ai.consensys.io/?embed=true",height:"800",width:"100%"})]})}function h(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(p,{...t})}):p(t)}},28453:(t,e,r)=>{r.d(e,{R:()=>a,x:()=>i});var n=r(96540);const o={},s=n.createContext(o);function a(t){const e=n.useContext(s);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(s.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/27b89368.97dda751.js b/assets/js/27b89368.97dda751.js new file mode 100644 index 00000000000..5ef0766c032 --- /dev/null +++ b/assets/js/27b89368.97dda751.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9022],{70298:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var s=i(74848),r=i(28453);const t={title:"Install binary distribution",description:"Install or upgrade Besu from binary distribution",sidebar_position:3,tags:["private networks"]},a="Install binary distribution",l={id:"private-networks/get-started/install/binary-distribution",title:"Install binary distribution",description:"Install or upgrade Besu from binary distribution",source:"@site/docs/private-networks/get-started/install/binary-distribution.md",sourceDirName:"private-networks/get-started/install",slug:"/private-networks/get-started/install/binary-distribution",permalink:"/private-networks/get-started/install/binary-distribution",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/get-started/install/binary-distribution.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Install binary distribution",description:"Install or upgrade Besu from binary distribution",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Run Besu from Docker image",permalink:"/private-networks/get-started/install/run-docker-image"},next:{title:"Start Besu",permalink:"/private-networks/get-started/start-node"}},o={},d=[{value:"MacOS with Homebrew",id:"macos-with-homebrew",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Install (or upgrade) using Homebrew",id:"install-or-upgrade-using-homebrew",level:3},{value:"Linux / Unix",id:"linux--unix",level:2},{value:"Prerequisites",id:"prerequisites-1",level:3},{value:"Install from packaged binaries",id:"install-from-packaged-binaries",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"install-binary-distribution",children:"Install binary distribution"})}),"\n",(0,s.jsx)(n.h2,{id:"macos-with-homebrew",children:"MacOS with Homebrew"}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://brew.sh/",children:"Homebrew"})}),"\n",(0,s.jsx)(n.li,{children:"Java JDK"}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"caution",children:[(0,s.jsx)(n.p,{children:"Besu supports:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"MacOS High Sierra 10.13 or later versions."}),"\n",(0,s.jsxs)(n.li,{children:["Java 21+. You can install Java using ",(0,s.jsx)(n.code,{children:"brew install openjdk@21"}),". Alternatively, you can manually install the ",(0,s.jsx)(n.a,{href:"https://www.oracle.com/java/technologies/downloads",children:"Java JDK"}),"."]}),"\n"]})]}),"\n",(0,s.jsx)(n.h3,{id:"install-or-upgrade-using-homebrew",children:"Install (or upgrade) using Homebrew"}),"\n",(0,s.jsx)(n.p,{children:"To install Besu using Homebrew:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew tap hyperledger/besu\nbrew install hyperledger/besu/besu\n"})}),"\n",(0,s.jsx)(n.p,{children:"To upgrade an existing Besu installation using Homebrew:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew upgrade hyperledger/besu/besu\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you've upgraded your MacOS version between installing and upgrading Besu, when running ",(0,s.jsx)(n.code,{children:"brew upgrade hyperledger/besu/besu"})," you may be prompted to reinstall command line tools with ",(0,s.jsx)(n.code,{children:"xcode-select --install"}),"."]})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command ",(0,s.jsx)(n.code,{children:"brew tap --repair"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"To display the Besu version and confirm installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --version\n"})}),"\n",(0,s.jsx)(n.p,{children:"To display Besu command line help:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu --help\n"})}),"\n",(0,s.jsx)(n.h2,{id:"linux--unix",children:"Linux / Unix"}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.oracle.com/java/technologies/downloads/",children:"Java JDK 17+"})}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Linux open file limit",type:"note",children:(0,s.jsxs)(n.p,{children:["If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ",(0,s.jsx)(n.code,{children:"ulimit"}),". If the open files limit is not high enough, a ",(0,s.jsx)(n.code,{children:"Too many open files"})," RocksDB exception occurs."]})}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["We recommend installing ",(0,s.jsx)(n.a,{href:"https://jemalloc.net/",children:"jemalloc"})," to reduce memory usage. If using Ubuntu, you can install it with the command: ",(0,s.jsx)(n.code,{children:"apt install libjemalloc-dev"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"install-from-packaged-binaries",children:"Install from packaged binaries"}),"\n",(0,s.jsxs)(n.p,{children:["Download the Besu ",(0,s.jsx)(n.a,{href:"https://github.com/hyperledger/besu/releases",children:"packaged binaries"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Unpack the downloaded files and change into the ",(0,s.jsx)(n.code,{children:"besu-<release>"})," directory."]}),"\n",(0,s.jsx)(n.p,{children:"Display Besu command line help to confirm installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"bin/besu --help\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>l});var s=i(96540);const r={},t=s.createContext(r);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28249022.9e6906e9.js b/assets/js/28249022.9e6906e9.js new file mode 100644 index 00000000000..2d60ea5744b --- /dev/null +++ b/assets/js/28249022.9e6906e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[76],{75125:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var s=t(74848),r=t(28453);const o={title:"Concepts",description:"private networks concepts overview",sidebar_position:3,tags:["private networks"]},i="Concepts",c={id:"private-networks/concepts/index",title:"Concepts",description:"private networks concepts overview",source:"@site/docs/private-networks/concepts/index.md",sourceDirName:"private-networks/concepts",slug:"/private-networks/concepts/",permalink:"/private-networks/concepts/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Concepts",description:"private networks concepts overview",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Upgrade",permalink:"/private-networks/how-to/upgrade"},next:{title:"Proof of authority consensus",permalink:"/private-networks/concepts/poa"}},a={},p=[];function l(e){const n={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"concepts",children:"Concepts"})}),"\n",(0,s.jsx)(n.p,{children:"This section provides background information and context about private network features."}),"\n",(0,s.jsxs)(n.p,{children:["The following features are shared with ",(0,s.jsx)(n.a,{href:"/public-networks/",children:"public networks"})," and the content can be found in the public networks section:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Transactions:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/transactions/types",children:"Transaction types"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"Transaction pool"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/transactions/validation",children:"Transaction validation"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"Network ID and chain ID"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"Events and logs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"Genesis file"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-keys",children:"Node keys"})}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var s=t(96540);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2843.796ce40c.js b/assets/js/2843.796ce40c.js new file mode 100644 index 00000000000..abc88cae05b --- /dev/null +++ b/assets/js/2843.796ce40c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2843],{22843:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(99702),e=(n(74353),n(16750),n(26312),n(42838),function(){var t=function(t,i,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=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,s,e,r,h){switch(r.length,e){case 1:return s;case 4:break;case 6:s.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],s=[],e=[null],r=[],h=this.table,o="",l=0,c=0,a=r.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 f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,m,d,k,b,x,v,w,I,S={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==_&&(I=void 0,"number"!=typeof(I=s.pop()||y.lex()||1)&&(I instanceof Array&&(I=(s=I).pop()),I=i.symbols_[I]||I),_=I),d=h[m]&&h[m][_]),void 0===d||!d.length||!d[0]){var E="";for(b in w=[],h[m])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:f,expected:w})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+_);switch(d[0]){case 1:n.push(_),e.push(y.yytext),r.push(y.yylloc),n.push(d[1]),_=null,c=y.yyleng,o=y.yytext,l=y.yylineno,f=y.yylloc;break;case 2:if(x=this.productions_[d[1]][1],S.$=e[e.length-x],S._$={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},g&&(S._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(S,[o,c,l,u.yy,d[1],e,r].concat(a))))return k;x&&(n=n.slice(0,-1*x*2),e=e.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[d[1]][0]),e.push(S.$),r.push(S._$),v=h[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},s={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 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),n.length-1&&(this.yylineno-=n.length-1);var e=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===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[e[0],e[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,s,e;if(this.options.backtrack_lexer&&(e={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&&(e.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],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 e)this[r]=e[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),r=0;r<e.length;r++)if((n=this._input.match(this.rules[e[r]]))&&(!i||n[0].length>i[0].length)){if(i=n,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,e[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,e[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,i,n,s){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 e(){this.yy={}}return n.lexer=s,e.prototype=n,n.Parser=e,new e}());e.parser=e;const r=!1;let h=r;const o={parser:e,db:{clear:()=>{h=r},setInfo:t=>{h=t},getInfo:()=>h},renderer:{draw:(t,i,n)=>{s.l.debug("rendering info diagram\n"+t);const e=(0,s.A)(i);(0,s.i)(e,100,400,!0);e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${n}`)}}}}}]); \ No newline at end of file diff --git a/assets/js/2925.c1de506f.js b/assets/js/2925.c1de506f.js new file mode 100644 index 00000000000..25bb594fc32 --- /dev/null +++ b/assets/js/2925.c1de506f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2925],{32925:(t,i,e)=>{e.d(i,{diagram:()=>F});var s=e(99702),n=e(8337),a=e(26312),h=(e(74353),e(16750),e(42838),function(){var t=function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],a=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,34,35,36],r=[1,25],l=[1,26],c=[1,28],g=[1,29],u=[1,30],x=[1,31],d=[1,32],p=[1,33],f=[1,34],y=[1,35],m=[1,36],b=[1,37],A=[1,43],w=[1,42],S=[1,47],C=[1,50],k=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],T=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],D={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(t,i,e,s,n,a,h){var o=a.length-1;switch(n){case 5:s.setOrientation(a[o]);break;case 9:s.setDiagramTitle(a[o].text.trim());break;case 12:s.setLineData({text:"",type:"text"},a[o]);break;case 13:s.setLineData(a[o-1],a[o]);break;case 14:s.setBarData({text:"",type:"text"},a[o]);break;case 15:s.setBarData(a[o-1],a[o]);break;case 16:this.$=a[o].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=a[o].trim(),s.setAccDescription(this.$);break;case 19:case 27:this.$=a[o-1];break;case 20:this.$=[Number(a[o-2]),...a[o]];break;case 21:this.$=[Number(a[o])];break;case 22:s.setXAxisTitle(a[o]);break;case 23:s.setXAxisTitle(a[o-1]);break;case 24:s.setXAxisTitle({type:"text",text:""});break;case 25:s.setXAxisBand(a[o]);break;case 26:s.setXAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 28:this.$=[a[o-2],...a[o]];break;case 29:this.$=[a[o]];break;case 30:s.setYAxisTitle(a[o]);break;case 31:s.setYAxisTitle(a[o-1]);break;case 32:s.setYAxisTitle({type:"text",text:""});break;case 33:s.setYAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 37:case 38:this.$={text:a[o],type:"text"};break;case 39:this.$={text:a[o],type:"markdown"};break;case 40:this.$=a[o];break;case 41:this.$=a[o-1]+""+a[o]}},table:[t(i,e,{3:1,4:2,7:4,5:s,34:n,35:a,36:h}),{1:[3]},t(i,e,{4:2,7:4,3:8,5:s,34:n,35:a,36:h}),t(i,e,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:a,36:h}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(o,[2,34]),t(o,[2,35]),t(o,[2,36]),{1:[2,1]},t(i,e,{4:2,7:4,3:21,5:s,34:n,35:a,36:h}),{1:[2,3]},t(o,[2,5]),t(i,[2,7],{4:22,34:n,35:a,36:h}),{11:23,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:39,13:38,24:A,27:w,29:40,30:41,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:45,15:44,27:S,33:46,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:49,17:48,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:52,17:51,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{20:[1,53]},{22:[1,54]},t(k,[2,18]),{1:[2,2]},t(k,[2,8]),t(k,[2,9]),t(_,[2,37],{40:55,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b}),t(_,[2,38]),t(_,[2,39]),t(T,[2,40]),t(T,[2,42]),t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),t(T,[2,50]),t(T,[2,51]),t(k,[2,10]),t(k,[2,22],{30:41,29:56,24:A,27:w}),t(k,[2,24]),t(k,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,11]),t(k,[2,30],{33:60,27:S}),t(k,[2,32]),{31:[1,61]},t(k,[2,12]),{17:62,24:C},{25:63,27:R},t(k,[2,14]),{17:65,24:C},t(k,[2,16]),t(k,[2,17]),t(T,[2,41]),t(k,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(k,[2,31]),{27:[1,69]},t(k,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(k,[2,15]),t(k,[2,26]),t(k,[2,27]),{11:59,32:72,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,33]),t(k,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],s=[],n=[null],a=[],h=this.table,o="",r=0,l=0,c=a.slice.call(arguments,1),g=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);g.setInput(t,u.yy),u.yy.lexer=g,u.yy.parser=this,void 0===g.yylloc&&(g.yylloc={});var d=g.yylloc;a.push(d);var p=g.options&&g.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,y,m,b,A,w,S,C,k,_={};;){if(y=e[e.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==f&&(k=void 0,"number"!=typeof(k=s.pop()||g.lex()||1)&&(k instanceof Array&&(k=(s=k).pop()),k=i.symbols_[k]||k),f=k),m=h[y]&&h[y][f]),void 0===m||!m.length||!m[0]){var T="";for(A in C=[],h[y])this.terminals_[A]&&A>2&&C.push("'"+this.terminals_[A]+"'");T=g.showPosition?"Parse error on line "+(r+1)+":\n"+g.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(r+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(T,{text:g.match,token:this.terminals_[f]||f,line:g.yylineno,loc:d,expected:C})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+f);switch(m[0]){case 1:e.push(f),n.push(g.yytext),a.push(g.yylloc),e.push(m[1]),f=null,l=g.yyleng,o=g.yytext,r=g.yylineno,d=g.yylloc;break;case 2:if(w=this.productions_[m[1]][1],_.$=n[n.length-w],_._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},p&&(_._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(_,[o,l,r,u.yy,m[1],n,a].concat(c))))return b;w&&(e=e.slice(0,-1*w*2),n=n.slice(0,-1*w),a=a.slice(0,-1*w)),e.push(this.productions_[m[1]][0]),n.push(_.$),a.push(_._$),S=h[e[e.length-2]][e[e.length-1]],e.push(S);break;case 3:return!0}}return!0}},L={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,e=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 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),e.length-1&&(this.yylineno-=e.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:e?(e.length===s.length?this.yylloc.first_column:0)+s[s.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[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 e,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],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;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,i,e,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;a<n.length;a++)if((e=this._input.match(this.rules[n[a]]))&&(!i||e[0].length>i[0].length)){if(i=e,s=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[a])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,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,i,e,s){switch(e){case 0:case 1:case 5:case 43:break;case 2:case 3:return this.popState(),34;case 4:return 34;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:case 25:case 27:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 26:this.pushState("string");break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};function P(){this.yy={}}return D.lexer=L,P.prototype=D,D.Parser=P,new P}());h.parser=h;const o=h;function r(t){return"bar"===t.type}function l(t){return"band"===t.type}function c(t){return"linear"===t.type}class g{constructor(t){this.parentGroup=t}getMaxDimension(t,i){if(!this.parentGroup)return{width:t.reduce(((t,i)=>Math.max(i.length,t)),0)*i,height:i};const e={width:0,height:0},s=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",i);for(const a of t){const t=(0,n.c)(s,1,a),h=t?t.width:a.length*i,o=t?t.height:i;e.width=Math.max(e.width,h),e.height=Math.max(e.height,o)}return s.remove(),e}}class u{constructor(t,i,e,s){this.axisConfig=t,this.title=i,this.textDimensionCalculator=e,this.axisThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(t){this.range=t,"left"===this.axisPosition||"right"===this.axisPosition?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){const t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map((t=>t.toString())),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>2*this.outerPadding&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let i=t.height;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.width;this.outerPadding=Math.min(e.width/2,s);const n=e.height+2*this.axisConfig.labelPadding;this.labelTextHeight=e.height,n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-i}calculateSpaceIfDrawnVertical(t){let i=t.width;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.height;this.outerPadding=Math.min(e.height/2,s);const n=e.width+2*this.axisConfig.labelPadding;n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width-i,this.boundingRect.height=t.height}calculateSpace(t){return"left"===this.axisPosition||"right"===this.axisPosition?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${i},${this.boundingRect.y} L ${i},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(t),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"})))}),this.showTick){const i=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${i},${this.getScaleValue(t)} L ${i-this.axisConfig.tickLength},${this.getScaleValue(t)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i} L ${this.getScaleValue(t)},${i+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+2*this.axisConfig.titlePadding:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(t)},${i+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if("left"===this.axisPosition)return this.getDrawableElementsForLeftAxis();if("right"===this.axisPosition)throw Error("Drawing of right axis is not implemented");return"bottom"===this.axisPosition?this.getDrawableElementsForBottomAxis():"top"===this.axisPosition?this.getDrawableElementsForTopAxis():[]}}class x extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.categories=e,this.scale=(0,a.WH)().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=(0,a.WH)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),s.l.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)||this.getRange()[0]}}class d extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.domain=e,this.scale=(0,a.m4Y)().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const t=[...this.domain];"left"===this.axisPosition&&t.reverse(),this.scale=(0,a.m4Y)().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}}function p(t,i,e,s){const n=new g(s);return l(t)?new x(i,e,t.categories,t.title,n):new d(i,e,[t.min,t.max],t.title,n)}class f{constructor(t,i,e,s){this.textDimensionCalculator=t,this.chartConfig=i,this.chartData=e,this.chartThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){const i=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),e=Math.max(i.width,t.width),s=i.height+2*this.chartConfig.titlePadding;return i.width<=e&&i.height<=s&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=e,this.boundingRect.height=s,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}}function y(t,i,e,s){const n=new g(s);return new f(n,t,i,e)}class m{constructor(t,i,e,s,n){this.plotData=t,this.xAxis=i,this.yAxis=e,this.orientation=s,this.plotIndex=n}getDrawableElement(){const t=this.plotData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])]));let i;return i="horizontal"===this.orientation?(0,a.n8j)().y((t=>t[0])).x((t=>t[1]))(t):(0,a.n8j)().x((t=>t[0])).y((t=>t[1]))(t),i?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:i,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class b{constructor(t,i,e,s,n,a){this.barData=t,this.boundingRect=i,this.xAxis=e,this.yAxis=s,this.orientation=n,this.plotIndex=a}getDrawableElement(){const t=this.barData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])])),i=.95*Math.min(2*this.xAxis.getAxisOuterPadding(),this.xAxis.getTickDistance()),e=i/2;return"horizontal"===this.orientation?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:this.boundingRect.x,y:t[0]-e,height:i,width:t[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:t[0]-e,y:t[1],width:i,height:this.boundingRect.y+this.boundingRect.height-t[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]}}class A{constructor(t,i,e){this.chartConfig=t,this.chartData=i,this.chartThemeConfig=e,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(t,i){this.xAxis=t,this.yAxis=i}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!this.xAxis||!this.yAxis)throw Error("Axes must be passed to render Plots");const t=[];for(const[i,e]of this.chartData.plots.entries())switch(e.type){case"line":{const s=new m(e,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}break;case"bar":{const s=new b(e,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}}return t}}function w(t,i,e){return new A(t,i,e)}class S{constructor(t,i,e,s){this.chartConfig=t,this.chartData=i,this.componentStore={title:y(t,i,e,s),plot:w(t,i,e),xAxis:p(i.xAxis,t.xAxis,{titleColor:e.xAxisTitleColor,labelColor:e.xAxisLabelColor,tickColor:e.xAxisTickColor,axisLineColor:e.xAxisLineColor},s),yAxis:p(i.yAxis,t.yAxis,{titleColor:e.yAxisTitleColor,labelColor:e.yAxisLabelColor,tickColor:e.yAxisTickColor,axisLineColor:e.yAxisLineColor},s)}}calculateVerticalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),a=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),h=this.componentStore.plot.calculateSpace({width:n,height:a});t-=h.width,i-=h.height,h=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),s=h.height,i-=h.height,this.componentStore.xAxis.setAxisPosition("bottom"),h=this.componentStore.xAxis.calculateSpace({width:t,height:i}),i-=h.height,this.componentStore.yAxis.setAxisPosition("left"),h=this.componentStore.yAxis.calculateSpace({width:t,height:i}),e=h.width,t-=h.width,t>0&&(n+=t,t=0),i>0&&(a+=i,i=0),this.componentStore.plot.calculateSpace({width:n,height:a}),this.componentStore.plot.setBoundingBoxXY({x:e,y:s}),this.componentStore.xAxis.setRange([e,e+n]),this.componentStore.xAxis.setBoundingBoxXY({x:e,y:s+a}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:s}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=0,a=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),h=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),o=this.componentStore.plot.calculateSpace({width:a,height:h});t-=o.width,i-=o.height,o=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),e=o.height,i-=o.height,this.componentStore.xAxis.setAxisPosition("left"),o=this.componentStore.xAxis.calculateSpace({width:t,height:i}),t-=o.width,s=o.width,this.componentStore.yAxis.setAxisPosition("top"),o=this.componentStore.yAxis.calculateSpace({width:t,height:i}),i-=o.height,n=e+o.height,t>0&&(a+=t,t=0),i>0&&(h+=i,i=0),this.componentStore.plot.calculateSpace({width:a,height:h}),this.componentStore.plot.setBoundingBoxXY({x:s,y:n}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:s,y:e}),this.componentStore.xAxis.setRange([n,n+h]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){"horizontal"===this.chartConfig.chartOrientation?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const i of Object.values(this.componentStore))t.push(...i.getDrawableElements());return t}}class C{static build(t,i,e,s){return new S(t,i,e,s).getDrawableElement()}}let k,_=0,T=I(),R=v(),D=M(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1;function v(){const t=(0,s.E)(),i=(0,s.F)();return(0,s.C)(t.xyChart,i.themeVariables.xyChart)}function I(){const t=(0,s.F)();return(0,s.C)(s.B.xyChart,t.xyChart)}function M(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function $(t){const i=(0,s.F)();return(0,s.d)(t.trim(),i)}function z(t,i){D.xAxis={type:"linear",title:D.xAxis.title,min:t,max:i},P=!0}function B(t){let i=[];if(0===t.length)return i;if(!P){const i=c(D.xAxis)?D.xAxis.min:1/0,e=c(D.xAxis)?D.xAxis.max:-1/0;z(Math.min(i,1),Math.max(e,t.length))}if(E||function(t){const i=Math.min(...t),e=Math.max(...t),s=c(D.yAxis)?D.yAxis.min:1/0,n=c(D.yAxis)?D.yAxis.max:-1/0;D.yAxis={type:"linear",title:D.yAxis.title,min:Math.min(s,i),max:Math.max(n,e)}}(t),l(D.xAxis)&&(i=D.xAxis.categories.map(((i,e)=>[i,t[e]]))),c(D.xAxis)){const e=D.xAxis.min,s=D.xAxis.max,n=(s-e+1)/t.length,a=[];for(let t=e;t<=s;t+=n)a.push(`${t}`);i=a.map(((i,e)=>[i,t[e]]))}return i}function W(t){return L[0===t?0:t%L.length]}const F={parser:o,db:{getDrawableElem:function(){if(0===D.plots.length)throw Error("No Plot to render, please provide a plot with some data");return D.title=(0,s.t)(),C.build(T,D,R,k)},clear:function(){(0,s.v)(),_=0,T=I(),D={yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]},R=v(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1},setAccTitle:s.s,getAccTitle:s.g,setDiagramTitle:s.q,getDiagramTitle:s.t,getAccDescription:s.a,setAccDescription:s.b,setOrientation:function(t){T.chartOrientation="horizontal"===t?"horizontal":"vertical"},setXAxisTitle:function(t){D.xAxis.title=$(t.text)},setXAxisRangeData:z,setXAxisBand:function(t){D.xAxis={type:"band",title:D.xAxis.title,categories:t.map((t=>$(t.text)))},P=!0},setYAxisTitle:function(t){D.yAxis.title=$(t.text)},setYAxisRangeData:function(t,i){D.yAxis={type:"linear",title:D.yAxis.title,min:t,max:i},E=!0},setLineData:function(t,i){const e=B(i);D.plots.push({type:"line",strokeFill:W(_),strokeWidth:2,data:e}),_++},setBarData:function(t,i){const e=B(i);D.plots.push({type:"bar",fill:W(_),data:e}),_++},setTmpSVGG:function(t){k=t},getChartThemeConfig:function(){return R},getChartConfig:function(){return T}},renderer:{draw:(t,i,e,n)=>{const a=n.db,h=a.getChartThemeConfig(),o=a.getChartConfig();function r(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}s.l.debug("Rendering xychart chart\n"+t);const l=(0,s.A)(i),c=l.append("g").attr("class","main"),g=c.append("rect").attr("width",o.width).attr("height",o.height).attr("class","background");(0,s.i)(l,o.height,o.width,!0),l.attr("viewBox",`0 0 ${o.width} ${o.height}`),g.attr("fill",h.backgroundColor),a.setTmpSVGG(l.append("g").attr("class","mermaid-tmp-group"));const u=a.getDrawableElem(),x={};function d(t){let i=c,e="";for(const[s]of t.entries()){let n=c;s>0&&x[e]&&(n=x[e]),e+=t[s],i=x[e],i||(i=x[e]=n.append("g").attr("class",t[s]))}return i}for(const s of u){if(0===s.data.length)continue;const t=d(s.groupTexts);switch(s.type){case"rect":t.selectAll("rect").data(s.data).enter().append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth));break;case"text":t.selectAll("text").data(s.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>"top"===t.verticalPos?"text-before-edge":"middle")).attr("text-anchor",(t=>{return"left"===(i=t.horizontalPos)?"start":"right"===i?"end":"middle";var i})).attr("transform",(t=>r(t))).text((t=>t.text));break;case"path":t.selectAll("path").data(s.data).enter().append("path").attr("d",(t=>t.path)).attr("fill",(t=>t.fill?t.fill:"none")).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth))}}}}}}}]); \ No newline at end of file diff --git a/assets/js/297e0bb4.9209a15a.js b/assets/js/297e0bb4.9209a15a.js new file mode 100644 index 00000000000..b6b769d0228 --- /dev/null +++ b/assets/js/297e0bb4.9209a15a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2764,5327,4852],{14311:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var s=t(74848),r=t(28453);const o={},a=void 0,i={id:"global/postman",title:"postman",description:"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.",source:"@site/docs/global/postman.md",sourceDirName:"global",slug:"/global/postman",permalink:"/global/postman",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/postman.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},c={},d=[{value:"Run in Postman",id:"run-in-postman",level:4},{value:"Download collection",id:"download-collection",level:4}];function l(e){const n={a:"a",admonition:"admonition",h4:"h4",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(n.admonition,{title:"Besu JSON-RPC APIs documentation in Postman format",type:"info",children:[(0,s.jsxs)(n.p,{children:["View the ",(0,s.jsx)(n.a,{href:"https://www.postman.com/hyperledger/workspace/hyperledger-besu/collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8",children:"Besu JSON-RPC APIs documentation"})," in the Postman format and obtain example requests in multiple coding languages."]}),(0,s.jsx)(n.h4,{id:"run-in-postman",children:"Run in Postman"}),(0,s.jsx)(n.p,{children:"Click the following button to fork the collection and run requests directly on your local network."}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://god.gw.postman.com/run-collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8?action=collection%2Ffork&collection-url=entityId%3D11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8%26entityType%3Dcollection%26workspaceId%3Dc4b60b6f-9f15-42d0-8327-7ebabca6f0fd#?env%5BBesu%20node%20on%20local%20host%5D=W3sia2V5IjoicnBjLWh0dHAtaG9zdCIsInZhbHVlIjoibG9jYWxob3N0IiwiZW5hYmxlZCI6ZmFsc2V9LHsia2V5IjoicnBjLWh0dHAtcG9ydCIsInZhbHVlIjoiODU0NSIsImVuYWJsZWQiOmZhbHNlfV0=",children:(0,s.jsx)(n.img,{src:"https://run.pstmn.io/button.svg",alt:"Run in Postman"})}),"."]}),(0,s.jsx)(n.h4,{id:"download-collection",children:"Download collection"}),(0,s.jsxs)(n.p,{children:["Alternatively you can ",(0,s.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(34705).A+"",children:"download the JSON collection file"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},93120:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var s=t(74848),r=t(28453);const o={},a=void 0,i={id:"global/test_accounts",title:"test_accounts",description:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.",source:"@site/docs/global/test_accounts.md",sourceDirName:"global",slug:"/global/test_accounts",permalink:"/global/test_accounts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/test_accounts.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},c={},d=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsx)(n.mdxAdmonitionTitle,{children:(0,s.jsx)(n.strong,{children:"Do not use the test accounts on Ethereum Mainnet or any production network."})}),(0,s.jsx)(n.p,{children:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code."}),(0,s.jsx)(n.p,{children:"They are not secure and everyone can use them."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud."})}),(0,s.jsx)(n.p,{children:"In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Always secure your Ethereum Mainnet and any production account properly."})}),(0,s.jsxs)(n.p,{children:["See for instance ",(0,s.jsx)(n.a,{href:"https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds",children:'MyCrypto "Protecting Yourself and Your Funds" guide'}),"."]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 1 (address ',(0,s.jsx)(n.code,{children:"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 200 Eth ",(0,s.jsx)(n.em,{children:"(200000000000000000000 Wei)"})]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 2 (address ',(0,s.jsx)(n.code,{children:"0x627306090abaB3A6e1400e9345bC60c78a8BEf57"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,s.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 3 (address ',(0,s.jsx)(n.code,{children:"0xf17f52151EbEF6C7334FAD080c5704D77216b732"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,s.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},13742:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>x,frontMatter:()=>d,metadata:()=>h,toc:()=>p});var s=t(74848),r=t(28453),o=t(93120),a=t(14311),i=t(11470),c=t(19365);const d={title:"Quorum Developer Quickstart",sidebar_position:1,description:"Rapidly generate a local blockchain network using the Quickstart.",tags:["private networks"]},l="Developer Quickstart",h={id:"private-networks/tutorials/quickstart",title:"Quorum Developer Quickstart",description:"Rapidly generate a local blockchain network using the Quickstart.",source:"@site/docs/private-networks/tutorials/quickstart.md",sourceDirName:"private-networks/tutorials",slug:"/private-networks/tutorials/quickstart",permalink:"/private-networks/tutorials/quickstart",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/quickstart.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Quorum Developer Quickstart",sidebar_position:1,description:"Rapidly generate a local blockchain network using the Quickstart.",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Tutorials",permalink:"/private-networks/tutorials"},next:{title:"Create a QBFT network",permalink:"/private-networks/tutorials/qbft"}},u={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Generate the tutorial blockchain configuration files",id:"generate-the-tutorial-blockchain-configuration-files",level:2},{value:"Start the network",id:"start-the-network",level:2},{value:"Use a block explorer",id:"use-a-block-explorer",level:2},{value:"Monitor nodes with Prometheus and Grafana",id:"monitor-nodes-with-prometheus-and-grafana",level:2},{value:"Run JSON-RPC requests",id:"run-json-rpc-requests",level:2},{value:"Run with <code>cURL</code>",id:"run-with-curl",level:3},{value:"Run with Postman",id:"run-with-postman",level:3},...a.toc,{value:"Request the node version",id:"request-the-node-version",level:3},{value:"Count the peers",id:"count-the-peers",level:3},{value:"Request the most recent block number",id:"request-the-most-recent-block-number",level:3},{value:"Public transactions",id:"public-transactions",level:2},{value:"Create a transaction using MetaMask",id:"create-a-transaction-using-metamask",level:2},...o.toc,{value:"Smart contract and dapp usage",id:"smart-contract-and-dapp-usage",level:2},{value:"Deploy the contract",id:"deploy-the-contract",level:3},{value:"Run the dapp",id:"run-the-dapp",level:3},{value:"Deploy your own dapp",id:"deploy-your-own-dapp",level:3},{value:"Stop and restart the private network without removing containers",id:"stop-and-restart-the-private-network-without-removing-containers",level:2},{value:"Stop the private network and remove containers",id:"stop-the-private-network-and-remove-containers",level:2},{value:"Add a new node to the network",id:"add-a-new-node-to-the-network",level:2},{value:"1. Create the node key files",id:"1-create-the-node-key-files",level:3},{value:"2. Create new node directory",id:"2-create-new-node-directory",level:3},{value:"3. Update docker-compose",id:"3-update-docker-compose",level:3},{value:"4. Update Prometheus configuration",id:"4-update-prometheus-configuration",level:3},{value:"5. Update files with the enode address",id:"5-update-files-with-the-enode-address",level:3},{value:"6. Start the network",id:"6-start-the-network",level:3}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"developer-quickstart",children:"Developer Quickstart"})}),"\n",(0,s.jsxs)(n.p,{children:["The Quorum Developer Quickstart uses the Besu Docker image to run a private ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," network of Besu nodes managed by Docker Compose."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks."})}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["One of the following operating systems:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Linux on x86_64 architecture"}),"\n",(0,s.jsx)(n.li,{children:"macOS on an Intel processor (M1 processor not supported yet)"}),"\n",(0,s.jsxs)(n.li,{children:["Windows 64-bit edition, with:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Windows Subsystem for Linux 2"}),"\n",(0,s.jsx)(n.li,{children:"Docker desktop configured to use the WSL2-based engine"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker and Docker Compose"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"Node.js"})," version 12 or higher"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://hardhat.org/hardhat-runner/docs/getting-started#overview",children:"Hardhat"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:"cURL command line"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://metamask.io/",children:"MetaMask"})}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Allow Docker up to 4G of memory or 6G if running the privacy examples. Refer to the ",(0,s.jsx)(n.strong,{children:"Resources"})," section in ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/docker-for-mac/",children:"Docker for Mac"})," and ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/docker-for-windows/",children:"Docker Desktop"})," for details."]})}),"\n",(0,s.jsx)(n.h2,{id:"generate-the-tutorial-blockchain-configuration-files",children:"Generate the tutorial blockchain configuration files"}),"\n",(0,s.jsxs)(n.p,{children:["To create the tutorial ",(0,s.jsx)(n.code,{children:"docker-compose"})," files and artifacts, run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npx quorum-dev-quickstart\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Follow the prompts displayed to run Besu and ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/monitor/elastic-stack",children:"logging with ELK"}),". Enter ",(0,s.jsx)(n.code,{children:"n"})," for Codefi Orchestrate and ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you enter ",(0,s.jsx)(n.code,{children:"y"})," for private transactions, you get three Besu nodes with corresponding Tessera nodes for privacy. You can follow the ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/privacy/",children:"privacy walk-through"}),", which details how to send private transactions and interact with deployed private contracts."]})}),"\n",(0,s.jsx)(n.h2,{id:"start-the-network",children:"Start the network"}),"\n",(0,s.jsxs)(n.p,{children:["To start the network, go to the installation directory (",(0,s.jsx)(n.code,{children:"quorum-test-network"})," if you used the default value) and run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"./run.sh\n"})}),"\n",(0,s.jsx)(n.p,{children:"The script builds the Docker images, and runs the Docker containers."}),"\n",(0,s.jsx)(n.p,{children:"Four Besu IBFT 2.0 validator nodes and a non-validator node are created to simulate a base network."}),"\n",(0,s.jsx)(n.p,{children:"When execution is successfully finished, the process lists the available services:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-log",metastring:'title="Services list"',children:"*************************************\nQuorum Dev Quickstart\n*************************************\n----------------------------------\nList endpoints and services\n----------------------------------\nJSON-RPC HTTP service endpoint : http://localhost:8545\nJSON-RPC WebSocket service endpoint : ws://localhost:8546\nWeb block explorer address : http://localhost:25000/\nPrometheus address : http://localhost:9090/graph\nGrafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All\nKibana logs address : http://localhost:5601/app/kibana#/discover\nCollated logs using Grafana Loki : http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search=\n\nFor more information on the endpoints and services, refer to README.md in the installation directory.\n****************************************************************\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"JSON-RPC HTTP service endpoint"})," to access the RPC node service from your dapp or from cryptocurrency wallets such as MetaMask."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"JSON-RPC WebSocket service endpoint"})," to access the Web socket node service from your dapp."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"Web block explorer address"})," to display the ",(0,s.jsx)(n.a,{href:"http://localhost:25000",children:"block explorer Web application"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"Prometheus address"})," to access the ",(0,s.jsx)(n.a,{href:"http://localhost:9090/graph",children:"Prometheus dashboard"}),". ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"Read more about metrics"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"Grafana address"})," to access the ",(0,s.jsx)(n.a,{href:"http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All",children:"Grafana dashboard"}),". ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"Read more about metrics"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"Kibana logs address"})," to access the ",(0,s.jsx)(n.a,{href:"http://localhost:5601/app/kibana#/discover",children:"logs in Kibana"}),". ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/monitor/elastic-stack",children:"Read more about log management"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Use the ",(0,s.jsx)(n.strong,{children:"Grafana Loki logs address"})," to access the ",(0,s.jsx)(n.a,{href:"http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search=",children:"logs in Grafana"}),". ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/monitor/loki",children:"Read more about log management"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To display the list of endpoints again, run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"./list.sh\n"})}),"\n",(0,s.jsx)(n.h2,{id:"use-a-block-explorer",children:"Use a block explorer"}),"\n",(0,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/monitor/chainlens",children:"use Chainlens Blockchain Explorer"})," to analyze block\ninformation, contract metadata, transaction searches, and more.\nChainlens has built-in support for privacy-enabled Besu networks."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["You must connect to one of the privacy nodes (for example, ",(0,s.jsx)(n.code,{children:"member1besu"}),"), not the dedicated RPC,\nto allow access for Besu ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#priv-methods",children:"privacy API methods"}),".\nIn production networks, you must ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"secure access"}),"\nto RPC nodes."]})}),"\n",(0,s.jsxs)(n.p,{children:["Clone the ",(0,s.jsx)(n.a,{href:"https://github.com/web3labs/chainlens-free",children:"Chainlens GitHub repository"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/web3labs/chainlens-free\n"})}),"\n",(0,s.jsxs)(n.p,{children:["From the ",(0,s.jsx)(n.code,{children:"docker-compose"})," directory, run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd docker-compose\nNODE_ENDPOINT=member1besu PORT=26000 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Open ",(0,s.jsx)(n.code,{children:"http://localhost/"})," on your browser.\nYou\u2019ll see the new initialization page while it boots up.\nThis may take 5\u201310 minutes for the all services to start and the ingestion sync to complete."]}),"\n",(0,s.jsxs)(n.p,{children:["To stop all the services from running, run the following command from the ",(0,s.jsx)(n.code,{children:"docker-compose"})," directory:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker-compose down -v\n"})}),"\n",(0,s.jsx)(n.h2,{id:"monitor-nodes-with-prometheus-and-grafana",children:"Monitor nodes with Prometheus and Grafana"}),"\n",(0,s.jsx)(n.p,{children:"The sample network also includes Prometheus and Grafana monitoring tools to let you visualize node health and usage. You can directly access these tools from your browser at the addresses displayed in the endpoint list."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"http://localhost:9090/graph",children:"Prometheus dashboard"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All",children:"Grafana dashboard"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=quorum&var-search=",children:"Grafana Loki logs dashboard"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more details on how to configure and use these tools for your own nodes, see the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"performance monitoring documentation"}),", ",(0,s.jsx)(n.a,{href:"https://prometheus.io/docs/introduction/overview/",children:"Prometheus documentation"})," and ",(0,s.jsx)(n.a,{href:"https://grafana.com/docs/",children:"Grafana documentation"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Grafana dashboard screenshot",src:t(68683).A+"",width:"2880",height:"3958"})}),"\n",(0,s.jsx)(n.p,{children:"and collated logs via Grafana Loki"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Grafana Loki dashboard screenshot",src:t(60119).A+"",width:"1915",height:"898"})}),"\n",(0,s.jsx)(n.h2,{id:"run-json-rpc-requests",children:"Run JSON-RPC requests"}),"\n",(0,s.jsx)(n.p,{children:"You can run JSON-RPC requests on:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["HTTP with ",(0,s.jsx)(n.code,{children:"http://localhost:8545"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["WebSockets with ",(0,s.jsx)(n.code,{children:"ws://localhost:8546"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"run-with-curl",children:["Run with ",(0,s.jsx)(n.code,{children:"cURL"})]}),"\n",(0,s.jsxs)(n.p,{children:["This tutorial uses ",(0,s.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:"cURL"})," to send JSON-RPC requests over HTTP."]}),"\n",(0,s.jsx)(n.h3,{id:"run-with-postman",children:"Run with Postman"}),"\n",(0,s.jsx)(n.p,{children:"You can also run all the requests with the Besu Postman collection."}),"\n",(0,s.jsx)(a.default,{}),"\n",(0,s.jsx)(n.h3,{id:"request-the-node-version",children:"Request the node version"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command from the host shell:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}\' http://localhost:8545\n'})}),"\n",(0,s.jsx)(n.p,{children:"The result displays the client version of the running node:"}),"\n",(0,s.jsxs)(i.A,{children:[(0,s.jsx)(c.A,{value:"Result example",label:"Result example",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "besu/v21.1.2/linux-x86_64/oracle_openjdk-java-11"\n}\n'})})}),(0,s.jsx)(c.A,{value:"Result explanation",label:"Result explanation",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"jsonrpc" : "2.0"'})," indicates that the JSON-RPC 2.0 spec format is used."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"id" : 1'})," is the request identifier used to match the request and the response. This tutorial always uses 1."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"result"'})," contains the running Besu information:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"v21.1.2"})," is the running Besu version number. This may be different when you run this tutorial."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"linux-x86_64"})," is the architecture used to build this version."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"oracle_openjdk-java-11"})," is the JVM type and version used to build this version. This may be different when you run this tutorial."]}),"\n"]}),"\n"]}),"\n"]})})]}),"\n",(0,s.jsx)(n.p,{children:"Successfully calling this method shows that you can connect to the nodes using JSON-RPC over HTTP."}),"\n",(0,s.jsxs)(n.p,{children:["From here, you can walk through more interesting requests demonstrated in the rest of this section, or skip ahead to ",(0,s.jsx)(n.a,{href:"#create-a-transaction-using-metamask",children:"Create a transaction using MetaMask"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"count-the-peers",children:"Count the peers"}),"\n",(0,s.jsx)(n.p,{children:"Peers are the other nodes connected to the node receiving the JSON-RPC request."}),"\n",(0,s.jsxs)(n.p,{children:["Poll the peer count using ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,s.jsx)(n.code,{children:"net_peerCount"})}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}\' http://localhost:8545\n'})}),"\n",(0,s.jsx)(n.p,{children:"The result indicates that there are four peers (the validators):"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x4"\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"request-the-most-recent-block-number",children:"Request the most recent block number"}),"\n",(0,s.jsxs)(n.p,{children:["Call ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_blockNumber",children:(0,s.jsx)(n.code,{children:"eth_blockNumber"})})," to retrieve the number of the most recently synchronized block:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}\' http://localhost:8545\n'})}),"\n",(0,s.jsx)(n.p,{children:"The result indicates the highest block number synchronized on this node."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x2a"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Here the hexadecimal value ",(0,s.jsx)(n.code,{children:"0x2a"})," translates to decimal as ",(0,s.jsx)(n.code,{children:"42"}),", the number of blocks received by the node so far, about two minutes after the new network started."]}),"\n",(0,s.jsx)(n.h2,{id:"public-transactions",children:"Public transactions"}),"\n",(0,s.jsxs)(n.p,{children:["This example uses the ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/web3",children:"web3.js"})," library to make the API calls, using the ",(0,s.jsx)(n.code,{children:"rpcnode"}),"\naccessed on ",(0,s.jsx)(n.code,{children:"http://localhost:8545"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Navigate to the ",(0,s.jsx)(n.code,{children:"smart_contracts"})," directory and deploy the public transaction:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd smart_contracts\nnpm install\nnode scripts/public/hre_1559_public_tx.js\n# or via ethers\nnode scripts/public/hre_public_tx.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This deploys the contract and sends an arbitrary value (",(0,s.jsx)(n.code,{children:"47"}),") from ",(0,s.jsx)(n.code,{children:"Member1"})," to ",(0,s.jsx)(n.code,{children:"Member3"}),". The script then performs:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["A read operation on the contract using the ",(0,s.jsx)(n.code,{children:"get"})," function and the contract's ABI, at the specified address."]}),"\n",(0,s.jsxs)(n.li,{children:["A write operation using the ",(0,s.jsx)(n.code,{children:"set"})," function and the contract's ABI, at the address and sets the value to ",(0,s.jsx)(n.code,{children:"123"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"A read operation on all events emitted."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The script output is as follows:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"{\n address: '0x2b224e70f606267586616586850aC6f4Ae971eCb',\n privateKey: '0xb3f2ab4d7bb07a4168432fb572ceb57fd9b842ed8dc41256255db6ff95784000',\n signTransaction: [Function: signTransaction],\n sign: [Function: sign],\n encrypt: [Function: encrypt]\n}\ncreate and sign the txn\nsending the txn\ntx transactionHash: 0x423d56f958a316d2691e05e158c6a3f37004c27a1ec9697cf9fed2a5c2ae2c2b\ntx contractAddress: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9\nContract deployed at address: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9\nUse the smart contracts 'get' function to read the contract's constructor initialized value .. \nObtained value at deployed contract is: 47\nUse the smart contracts 'set' function to update that value to 123 .. \nsending the txn\ntx transactionHash: 0xab460da2544687c5fae4089d01b14bbb9bea765449e1fd2c30b30e1761481344\ntx contractAddress: null\nVerify the updated value that was set .. \nObtained value at deployed contract is: 123\nObtained all value events from deployed contract : [47,123]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["We also have a second example that shows how to transfer ETH between accounts. Navigate to the ",(0,s.jsx)(n.code,{children:"smart_contracts"})," directory\nand deploy the ",(0,s.jsx)(n.code,{children:"eth_tx"})," transaction:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd smart_contracts\nnpm install\nnode scripts/public/hre_eth_tx.js\n"})}),"\n",(0,s.jsx)(n.p,{children:"The output is as follows:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Account A has balance of: 90000\nAccount B has balance of: 0\ncreate and sign the txn\nsending the txn\ntx transactionHash: 0x8b9d247900f2b50a8dded3c0d73ee29f04487a268714ec4ebddf268e73080f98\nAccount A has an updated balance of: 89999.999999999999999744\nAccount B has an updated balance of: 0.000000000000000256\n"})}),"\n",(0,s.jsx)(n.h2,{id:"create-a-transaction-using-metamask",children:"Create a transaction using MetaMask"}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.a,{href:"https://metamask.io/",children:"MetaMask"})," to send a transaction on your private network."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open MetaMask and connect it to your private network RPC endpoint by selecting ",(0,s.jsx)(n.code,{children:"Localhost 8545"})," in the network list."]}),"\n",(0,s.jsxs)(n.li,{children:["Choose one of the following test accounts and ",(0,s.jsx)(n.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015489331-How-to-import-an-Account",children:"import it into MetaMask by copying the corresponding private key"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.default,{}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Besu doesn't incorporate ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"account management"}),". To create your own account, you have to use a third-party tool, such as MetaMask."]})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["After importing an existing test account, ",(0,s.jsx)(n.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015289452-Creating-Additional-MetaMask-Wallets-New-UI-",children:"create another test account from scratch"})," to use as the recipient for a test Ether transaction."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In MetaMask, select the new test account and ",(0,s.jsx)(n.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015289512-How-to-copy-your-MetaMask-Account-Public-Address",children:"copy its address"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.a,{href:"http://localhost:25000",children:"Block Explorer"}),", search for the new test account by selecting the ","\ud83d\udd0d"," and pasting the test account address into the search box."]}),"\n",(0,s.jsx)(n.p,{children:"The new test account displays with a zero balance."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015488931-How-to-send-ETH-and-ERC-20-tokens-from-your-MetaMask-Wallet",children:"Send test Ether"})," from the first test account (containing test Ether) to the new test account (which has a zero balance)."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["You can use a zero gas price here as this private test network is a ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas network"}),", but the maximum amount of gas that can be used (the gas limit) for a value transaction must be at least 21000."]})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Refresh the Block Explorer page in your browser displaying the target test account."}),"\n",(0,s.jsx)(n.p,{children:"The updated balance reflects the transaction completed using MetaMask."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"smart-contract-and-dapp-usage",children:"Smart contract and dapp usage"}),"\n",(0,s.jsx)(n.p,{children:"You can use a demo dapp called QuorumToken which uses an ERC20 token that is deployed to the network."}),"\n",(0,s.jsxs)(n.p,{children:["We'll use ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/hardhat",children:"Hardhat"}),", ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/ethers",children:"Ethers"})," and ",(0,s.jsx)(n.a,{href:"https://metamask.io/",children:"MetaMask"})," to interact with the network, which involves the following steps:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Deploy the contract and ",(0,s.jsx)(n.strong,{children:"save the contract's address"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"Start the dapp, and read and transact with the deployed token."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"dapps/quorumToken"})," directory is this structured in this manner (only relevant paths shown):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"quorumToken\n\u251c\u2500\u2500 hardhat.config.ts // hardhat network config\n\u251c\u2500\u2500 contracts // the QuorumToken.sol\n\u251c\u2500\u2500 scripts // handy scripts eg: to deploy to a chain\n\u251c\u2500\u2500 test // contract tests\n\u2514\u2500\u2500 frontend // dapp done in next.js\n \u251c\u2500\u2500 public\n \u251c\u2500\u2500 src\n \u251c\u2500\u2500 styles\n \u251c\u2500\u2500 tsconfig.json\n"})}),"\n",(0,s.jsx)(n.h3,{id:"deploy-the-contract",children:"Deploy the contract"}),"\n",(0,s.jsxs)(n.p,{children:["Once the network is up and running, enter the ",(0,s.jsx)(n.code,{children:"quorumToken"})," directory and run the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# install dependencies\nnpm i\n# compile the contract\nnpm run compile\nnpm run test\n# deploy the contract to the quickstart network\nnpm run deploy-quorumtoken\n"})}),"\n",(0,s.jsx)(n.p,{children:"The output is similar to the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# compile\n> quorumToken@1.0.0 compile\n> npx hardhat compile\n\nGenerating typings for: 5 artifacts in dir: typechain-types for target: ethers-v6\nSuccessfully generated 24 typings!\nCompiled 5 Solidity files successfully\n\n# test\n> quorumToken@1.0.0 test\n> npx hardhat test\n\n QuorumToken\n Deployment\n \u2714 Should have the correct initial supply (1075ms)\n \u2714 Should token transfer with correct balance (78ms)\n\n\n 2 passing (1s)\n\n# deploy\nContract deploy at: 0x5FbDB2315678afecb367f032d93F642f64180aa3\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This will deploy the contract to the network and return the address. ",(0,s.jsx)(n.strong,{children:"Please save this address for the next step"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"run-the-dapp",children:"Run the dapp"}),"\n",(0,s.jsx)(n.p,{children:"The dapp runs a local website using Next.js, and uses the contract in the previous step deployed on the network."}),"\n",(0,s.jsxs)(n.p,{children:["With the blockchain running, and MetaMask connected to ",(0,s.jsx)(n.code,{children:"localhost"})," on port ",(0,s.jsx)(n.code,{children:"8545"}),", import one of ",(0,s.jsx)(n.a,{href:"/private-networks/reference/accounts-for-testing",children:"our test accounts via private key"}),", and run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd frontend\nnpm i\nnpm run dev\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This starts the dapp, binding it to port ",(0,s.jsx)(n.code,{children:"3001"})," on your machine."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"> webapp@0.1.0 dev\n> next dev -p 3001\n\n- ready started server on [::]:3001, url: http://localhost:3001\n- event compiled client and server successfully in 270 ms (18 modules)\n- wait compiling...\n- event compiled client and server successfully in 173 ms (18 modules)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In the browser where you have MetaMask enabled and one of the test accounts loaded, open a new tab and navigate to\n",(0,s.jsx)(n.a,{href:"http://localhost:3001",children:"the QuorumToken dapp"}),".\nConnect to MetaMask and input the address from the previous step. Fox example our contract above deployed to ",(0,s.jsx)(n.code,{children:"0x5FbDB2315678afecb367f032d93F642f64180aa3"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The dapp will then read the balance of the account from MetaMask and get details of the contract. You can then send funds\nto another address (any of the other test accounts) on the network, and MetaMask will sign and send the transaction."}),"\n",(0,s.jsxs)(n.p,{children:["You can also search for the transaction and view its details in the ",(0,s.jsx)(n.a,{href:"http://localhost:25000/",children:"Block Explorer"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dapp UI",src:t(71419).A+"",width:"1309",height:"738"})}),"\n",(0,s.jsx)(n.p,{children:"The MetMask UI also keeps a record of the transaction."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dapp UI",src:t(37061).A+"",width:"1303",height:"662"})}),"\n",(0,s.jsx)(n.h3,{id:"deploy-your-own-dapp",children:"Deploy your own dapp"}),"\n",(0,s.jsx)(n.p,{children:"You can deploy your own dapp to the Quorum Developer Quickstart by configuring your dapp to point to the Quickstart network."}),"\n",(0,s.jsxs)(n.p,{children:["We recommend using ",(0,s.jsx)(n.a,{href:"https://hardhat.org/hardhat-runner/docs/guides/project-setup",children:"Hardhat"}),", and you can use the sample\n",(0,s.jsx)(n.code,{children:"hardhat.config.js"})," to configure the ",(0,s.jsx)(n.code,{children:"networks"})," object in the ",(0,s.jsx)(n.a,{href:"https://hardhat.org/hardhat-network/docs/reference#config",children:"Hardhat configuration file"}),"\nto specify which networks to connect to for deployments and testing. The Quickstart's RPC service endpoint is ",(0,s.jsx)(n.code,{children:"http://localhost:8545"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"For example, the following is the Hardhat configuration file for the QuorumToken dapp used in the Quickstart GoQuorum network:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'module.exports = {\n networks: {\n // in built test network to use when developing contracts\n hardhat: {\n chainId: 1337\n },\n quickstart: {\n url: "http://127.0.0.1:8545",\n chainId: 1337,\n // test accounts only, all good ;)\n accounts: [\n "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",\n "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f"\n ]\n }\n }, \n defaultNetwork: "hardhat",\n ...\n ...\n'})}),"\n",(0,s.jsx)(n.p,{children:"Deploy the contract using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"npx hardhat run ./scripts/deploy_quorumtoken.ts --network quickstart\n"})}),"\n",(0,s.jsx)(n.h2,{id:"stop-and-restart-the-private-network-without-removing-containers",children:"Stop and restart the private network without removing containers"}),"\n",(0,s.jsx)(n.p,{children:"To shut down the private network without deleting the containers:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"./stop.sh\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This command stops the containers related to the services specified in the ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," file."]}),"\n",(0,s.jsx)(n.p,{children:"To restart the private network:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"./resume.sh\n"})}),"\n",(0,s.jsx)(n.h2,{id:"stop-the-private-network-and-remove-containers",children:"Stop the private network and remove containers"}),"\n",(0,s.jsx)(n.p,{children:"To shut down the private network and delete all containers and images created from running the sample network and the Pet Shop dapp:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"./remove.sh\n"})}),"\n",(0,s.jsx)(n.h2,{id:"add-a-new-node-to-the-network",children:"Add a new node to the network"}),"\n",(0,s.jsx)(n.p,{children:"New nodes joining an existing network require the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The same genesis file used by all other nodes on the running network."}),"\n",(0,s.jsxs)(n.li,{children:["A list of nodes to connect to; this is done by specifying ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"}),", or by providing a list of ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static nodes"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["A node key pair and optionally an account. If the running network is using permissions, then you need to add the new node's enode details to the ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local",children:"permissions file"})," used by existing nodes, or update the onchain permissioning contract."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The following steps describe the process to add a new node to the Developer Quickstart."}),"\n",(0,s.jsx)(n.h3,{id:"1-create-the-node-key-files",children:"1. Create the node key files"}),"\n",(0,s.jsx)(n.p,{children:"Create a node key pair and account for a new node by running the following script:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'cd ./extra\nnpm install\nnode generate_node_keys.js --password "Password"\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"--password"})," parameter is optional."]})}),"\n",(0,s.jsx)(n.h3,{id:"2-create-new-node-directory",children:"2. Create new node directory"}),"\n",(0,s.jsx)(n.p,{children:"Navigate to the directory where the configuration files for the network were created."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The directory was specified in an earlier step when running ",(0,s.jsx)(n.code,{children:"npx quorum-dev-quickstart"}),". The default location is ",(0,s.jsx)(n.code,{children:"./quorum-test-network"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"config/nodes"})," directory, create a subdirectory for the new node (for example, ",(0,s.jsx)(n.code,{children:"newnode"}),"), and move the ",(0,s.jsx)(n.code,{children:"nodekey"}),", ",(0,s.jsx)(n.code,{children:"nodekey.pub"}),", ",(0,s.jsx)(n.code,{children:"address"})," and ",(0,s.jsx)(n.code,{children:"accountkey"})," files from the previous step into this directory."]}),"\n",(0,s.jsx)(n.h3,{id:"3-update-docker-compose",children:"3. Update docker-compose"}),"\n",(0,s.jsx)(n.p,{children:"Add an entry for the new node into the docker-compose file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"newnode:\n <<: *besu-def\n container_name: newnode\n volumes:\n - public-keys:/opt/besu/public-keys/\n - ./config/besu/:/config\n - ./config/nodes/newnode:/opt/besu/keys\n - ./logs/besu:/tmp/besu\n depends_on:\n - validator1\n networks:\n quorum-dev-quickstart:\n ipv4_address: 172.16.239.41\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"important",type:"caution",children:(0,s.jsxs)(n.p,{children:["Select an IP address and port map not being used for the other containers.\nMount the newly created folder ",(0,s.jsx)(n.code,{children:"./config/nodes/newnode"})," to the ",(0,s.jsx)(n.code,{children:"/opt/besu/keys"})," directory of the new node, as seen\nin this example."]})}),"\n",(0,s.jsx)(n.h3,{id:"4-update-prometheus-configuration",children:"4. Update Prometheus configuration"}),"\n",(0,s.jsxs)(n.p,{children:["Update ",(0,s.jsx)(n.code,{children:"prometheus.yml"})," in the ",(0,s.jsx)(n.code,{children:"./config/prometheus/"})," directory to configure metrics to display in Grafana."]}),"\n",(0,s.jsxs)(n.p,{children:["Insert the following under ",(0,s.jsx)(n.code,{children:"scrape_configs"})," section in the file. Change ",(0,s.jsx)(n.code,{children:"job_name"})," and ",(0,s.jsx)(n.code,{children:"targets"})," appropriately if you've updated them."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- job_name: newnode\n scrape_interval: 15s\n scrape_timeout: 10s\n metrics_path: /metrics\n scheme: http\n static_configs:\n - targets: [newnode:9545]\n"})}),"\n",(0,s.jsx)(n.h3,{id:"5-update-files-with-the-enode-address",children:"5. Update files with the enode address"}),"\n",(0,s.jsxs)(n.p,{children:["Add the new node's enode address to the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static nodes"})," file and ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local",children:"permissions file"}),". The enode uses the format ",(0,s.jsx)(n.code,{children:"enode://pubkey@ip_address:30303"}),". If the ",(0,s.jsx)(n.code,{children:"nodekey.pub"})," is ",(0,s.jsx)(n.code,{children:"4540ea...9c1d78"})," and the IP address is ",(0,s.jsx)(n.code,{children:"172.16.239.41"}),", then the enode address is ",(0,s.jsx)(n.code,{children:'"enode://4540ea...9c1d78@172.16.239.41:30303"'}),", which must be added to both files."]}),"\n",(0,s.jsxs)(n.p,{children:["Alternatively, call the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#perm_addnodestoallowlist",children:(0,s.jsx)(n.code,{children:"perm_addNodesToAllowlist"})})," API method on existing nodes to add the new node without restarting."]}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsx)(n.p,{children:"Calling the API method by itself only persists for as long as the nodes remain online and is lost on the next restart."}),(0,s.jsxs)(n.p,{children:["On a live network, the new node must be added to the ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local",children:"permissions file"})," so that subsequent restarts of the nodes are aware of the change."]})]}),"\n",(0,s.jsx)(n.h3,{id:"6-start-the-network",children:"6. Start the network"}),"\n",(0,s.jsxs)(n.p,{children:["Once complete, start the network up with ",(0,s.jsx)(n.code,{children:"./run.sh"}),". When using the smart contract you can either make changes via a ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/permissioning-smart-contracts",children:"dapp"})," or via ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#perm_addnodestoallowlist",children:"RPC API calls"}),"."]})]})}function x(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(m,{...e})}):m(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var s=t(18215);const r={tabItem:"tabItem_Ymn6"};var o=t(74848);function a(e){let{children:n,hidden:t,className:a}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,a),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>v});var s=t(96540),r=t(18215),o=t(23104),a=t(56347),i=t(205),c=t(57485),d=t(31682),l=t(70679);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,d.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const r=(0,a.W6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,c.aZ)(o),(0,s.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(r.location.search);n.set(o,e),r.replace({...r.location,search:n.toString()})}),[o,r])]}function x(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,o=u(e),[a,c]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:o}))),[d,h]=m({queryString:t,groupId:r}),[x,f]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,o]=(0,l.Dv)(t);return[r,(0,s.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:r}),j=(()=>{const e=d??x;return p({value:e,tabValues:o})?e:null})();(0,i.A)((()=>{j&&c(j)}),[j]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),f(e)}),[h,f,o]),tabValues:o}}var f=t(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(74848);function b(e){let{className:n,block:t,selectedValue:s,selectValue:a,tabValues:i}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,o.a_)(),l=e=>{const n=e.currentTarget,t=c.indexOf(n),r=i[t].value;r!==s&&(d(n),a(r))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>c.push(e),onKeyDown:h,onClick:l,...o,className:(0,r.A)("tabs__item",j.tabItem,o?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function w(e){let{lazy:n,children:t,selectedValue:o}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===o));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function k(e){const n=x(e);return(0,g.jsxs)("div",{className:(0,r.A)("tabs-container",j.tabList),children:[(0,g.jsx)(b,{...n,...e}),(0,g.jsx)(w,{...n,...e})]})}function v(e){const n=(0,f.A)();return(0,g.jsx)(k,{...e,children:h(e.children)},String(n))}},34705:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/files/postman_collection-53d58dda1f254764c957a43f3344607d.json"},71419:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/dapp-explorer-tx-4832cf06aacadf781a6e485a2555cf4c.png"},37061:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/dapp-metamask-tx-b4805abc15ffa4ea88dca9f72c81ecc9.png"},68683:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/grafana-609e4f8ed34ccebba624a8917e366c36.png"},60119:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/grafana_loki-b7ec065514dfe7bb716e9029bda5c056.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var s=t(96540);const r={},o=s.createContext(r);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2983.b4a09367.js b/assets/js/2983.b4a09367.js new file mode 100644 index 00000000000..fee72333bca --- /dev/null +++ b/assets/js/2983.b4a09367.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2983],{14075:(e,t,n)=>{n.d(t,{M:()=>d});var r=n(69592),i=n(50053),a=n(74722);n(73046);function d(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:l(e)};return r.A(e.graph())||(t.value=i.A(e.graph())),t}function o(e){return a.A(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.A(n)||(a.value=n),r.A(i)||(a.parent=i),a}))}function l(e){return a.A(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.A(t.name)||(i.name=t.name),r.A(n)||(i.value=n),i}))}},50053:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(91641);const i=function(e){return(0,r.A)(e,4)}},35364:(e,t,n)=>{n.d(t,{r:()=>E});var r=n(21176),i=n(14075),a=n(98055),d=n(99702),o=n(697),l=n(8337),s=n(26312);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDescendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{d.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),d.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const a=t.node(i);d.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,a),r!==t.parent(i)&&(d.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(d.l.debug("Setting parent",i,e),n.setParent(i,e)):(d.l.info("In copy ",e,"root",r,"data",t.node(e),r),d.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const o=t.edges(i);d.l.debug("Copying Edges",o),o.forEach((i=>{d.l.info("Edge",i);const a=t.edge(i.v,i.w,i.name);d.l.info("Edge data",a,r);try{((e,t)=>(d.l.info("Descendants of ",t," is ",h[t]),d.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):(d.l.debug("Tilt, ",t,",not in descendants"),!1))))(i,r)?(d.l.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),d.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):d.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(o){d.l.error(o)}}))}d.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)=>{d.l.trace("Searching",e);const n=t.children(e);if(d.l.trace("Searching children of id ",e,n),n.length<1)return d.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return d.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(d.l.warn("extractor - ",t,i.M(e),e.children("D")),t>10)return void d.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){d.l.debug("Nodes = ",n,t);for(const r of n)if(d.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){d.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,d.l.warn("Fixing dir",c[r].clusterData.dir,n));const a=new o.T({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));d.l.warn("Old graph before copy",i.M(e)),u(r,e,a,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:a}),d.l.warn("New graph after copy node: (",r,")",i.M(a)),d.l.debug("Old graph after copy",i.M(e))}else d.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),d.l.debug(c);else d.l.debug("Not a cluster",r,t);n=e.nodes(),d.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);d.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else d.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)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=(0,d.c)(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),o=(0,d.m)(n.flowchart.htmlLabels),c=r.insert("g").attr("class","cluster-label"),h="markdown"===t.labelType?(0,l.a)(c,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):c.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let g=h.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=h.children[0],t=(0,s.Ltv)(h);g=e.getBoundingClientRect(),t.attr("width",g.width),t.attr("height",g.height)}const f=0*t.padding,u=f/2,w=t.width<=g.width+f?g.width+f:t.width;t.width<=g.width+f?t.diff=(g.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-u).attr("width",w).attr("height",t.height+f);const{subGraphTitleTopMargin:p}=(0,a.g)(n);o?c.attr("transform",`translate(${t.x-g.width/2}, ${t.y-t.height/2+p})`):c.attr("transform",`translate(${t.x}, ${t.y-t.height/2+p})`);const v=i.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(e){return(0,a.i)(t,e)},r},roundedWithTitle:(e,t)=>{const n=(0,d.c)(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),l=r.append("rect"),c=o.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ltv)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}h=c.getBBox();const g=0*t.padding,f=g/2,u=t.width<=h.width+t.padding?h.width+t.padding:t.width;t.width<=h.width+t.padding?t.diff=(h.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f).attr("width",u+g).attr("height",t.height+g),l.attr("class","inner").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f+h.height-1).attr("width",u+g).attr("height",t.height+g-h.height-3);const{subGraphTitleTopMargin:w}=(0,a.g)(n);o.attr("transform",`translate(${t.x-h.width/2}, ${t.y-t.height/2-t.padding/3+((0,d.m)(n.flowchart.htmlLabels)?5:3)+w})`);const p=i.node().getBBox();return t.height=p.height,t.intersect=function(e){return(0,a.i)(t,e)},r},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,d=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2-d).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,a.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,d=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-d).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,a.i)(t,e)},n}};let b={};const C=async(e,t,n,o,l,s)=>{d.l.info("Graph in recursive render: XXX",i.M(t),l);const h=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",h);const g=e.insert("g").attr("class","root");t.nodes()?d.l.info("Recursive render XXX",t.nodes()):d.l.info("No nodes found for",t),t.edges().length>0&&d.l.trace("Recursive edges",t.edge(t.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),w=g.insert("g").attr("class","edgeLabels"),v=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==l){const n=JSON.parse(JSON.stringify(l.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,l),t.setNode(l.id,n),t.parent(e)||(d.l.trace("Setting parent",e,l.id),t.setParent(e,l.id,n))}if(d.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){d.l.info("Cluster identified",e,r.width,t.node(e));const i=await C(v,r.graph,n,o,t.node(e),s),l=i.elem;(0,a.u)(r,l),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(l,r),d.l.warn("Recursive render complete ",l,r)}else t.children(e).length>0?(d.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),d.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(d.l.info("Node - the non recursive path",e,r.id,r),await(0,a.e)(v,t.node(e),h))}))),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),d.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),d.l.info("Fix",c,"ids:",e.v,e.w,"Translating: ",c[e.v],c[e.w]),(0,a.f)(w,n)})),t.edges().forEach((function(e){d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),d.l.info("#############################################"),d.l.info("### Layout ###"),d.l.info("#############################################"),d.l.info(t),(0,r.Zp)(t),d.l.info("Graph after layout:",i.M(t));let y=0;const{subGraphTitleTotalMargin:E}=(0,a.g)(s);return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);d.l.info("Position "+e+": "+JSON.stringify(t.node(e))),d.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(n.y+=E,(0,a.p)(n)):t.children(e).length>0?(n.height+=E,((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=m[n](e,t)})(f,n),c[n.id].node=n):(n.y+=E/2,(0,a.p)(n))})),t.edges().forEach((function(e){const r=t.edge(e);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r),r.points.forEach((e=>e.y+=E/2));const i=(0,a.h)(u,e,r,c,n,t,o);(0,a.j)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(y=n.diff)})),{elem:g,diff:y}},E=async(e,t,n,r,o)=>{(0,a.a)(e,n,r,o),(0,a.b)(),(0,a.d)(),b={},h={},g={},c={},d.l.warn("Graph at first:",JSON.stringify(i.M(t))),((e,t)=>{if(!e||t>10)d.l.debug("Opting out, no graph ");else{d.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(d.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?(d.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(d.l.warn("Edge: ",e," leaves cluster ",t),d.l.warn("Descendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)}));for(let t of Object.keys(c)){const n=c[t].id,r=e.parent(n);r!==t&&c[r]&&!c[r].externalConnections&&(c[t].id=r)}e.edges().forEach((function(t){const n=e.edge(t);d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(d.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]){d.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),d.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 a=t.w+"---"+t.v;e.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=structuredClone(n),l=structuredClone(n);o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=t.v,l.toCluster=t.v,e.setEdge(r,a,o,t.name+"-cyclic-special"),e.setEdge(a,i,l,t.name+"-cyclic-special")}else if(c[t.v]||c[t.w]){if(d.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){const i=e.parent(r);c[i].externalConnections=!0,n.fromCluster=t.v}if(i!==t.w){const r=e.parent(i);c[r].externalConnections=!0,n.toCluster=t.w}d.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name)}})),d.l.warn("Adjusted Graph",i.M(e)),y(e,0),d.l.trace(c)}})(t),d.l.warn("Graph after:",JSON.stringify(i.M(t)));const l=(0,d.c)();await C(e,t,r,o,void 0,l)}}}]); \ No newline at end of file diff --git a/assets/js/2ce131d7.bddba6d1.js b/assets/js/2ce131d7.bddba6d1.js new file mode 100644 index 00000000000..656c13b4590 --- /dev/null +++ b/assets/js/2ce131d7.bddba6d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1023],{45021:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var s=n(74848),r=n(28453);const i={title:"Public networks",sidebar_position:1,sidebar_label:"Introduction",description:"Public networks overview",tags:["public networks"]},o="Besu for public networks",c={id:"public-networks/index",title:"Public networks",description:"Public networks overview",source:"@site/docs/public-networks/index.md",sourceDirName:"public-networks",slug:"/public-networks/",permalink:"/public-networks/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Public networks",sidebar_position:1,sidebar_label:"Introduction",description:"Public networks overview",tags:["public networks"]},sidebar:"publicDocSidebar",next:{title:"Get started",permalink:"/public-networks/get-started"}},l={},u=[{value:"Architecture",id:"architecture",level:2}];function a(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"besu-for-public-networks",children:"Besu for public networks"})}),"\n",(0,s.jsxs)(t.p,{children:["Besu serves as an ",(0,s.jsx)(t.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," on public proof-of-stake Ethereum networks such as Ethereum Mainnet, Holesky, and Sepolia."]}),"\n",(0,s.jsxs)(t.p,{children:["You can also run Besu using proof of work on ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-pow/mining",children:"Ethereum Classic (ETC)"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Get started by ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/",children:"installing Besu"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"architecture",children:"Architecture"}),"\n",(0,s.jsx)(t.p,{children:"The following diagram outlines the high-level architecture of Besu for public networks."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Public architecture",src:n(66207).A+"",width:"1656",height:"864"})}),"\n",(0,s.jsxs)(t.p,{children:["If you have any questions about Besu for public networks, ask on the ",(0,s.jsx)(t.strong,{children:"besu"})," channel on\n",(0,s.jsx)(t.a,{href:"https://discord.gg/hyperledger",children:"Discord"}),"."]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},66207:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/public-architecture-f5c7eccbe91313bd2b626b2ad1ced0ca.jpeg"},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var s=n(96540);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2de980e5.97c724a4.js b/assets/js/2de980e5.97c724a4.js new file mode 100644 index 00000000000..27defbb5191 --- /dev/null +++ b/assets/js/2de980e5.97c724a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5953],{61878:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var r=n(74848),o=n(28453),s=n(11470),l=n(19365);const a={title:"Use OpenTelemetry",sidebar_position:6,description:"Collect Besu information with the OpenTelemetry Collector",tags:["private networks"]},i="Use OpenTelemetry",c={id:"private-networks/how-to/monitor/opentelemetry",title:"Use OpenTelemetry",description:"Collect Besu information with the OpenTelemetry Collector",source:"@site/docs/private-networks/how-to/monitor/opentelemetry.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/opentelemetry",permalink:"/private-networks/how-to/monitor/opentelemetry",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/opentelemetry.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Use OpenTelemetry",sidebar_position:6,description:"Collect Besu information with the OpenTelemetry Collector",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Splunk",permalink:"/private-networks/how-to/monitor/splunk"},next:{title:"Use Chainlens Explorer",permalink:"/private-networks/how-to/monitor/chainlens"}},u={},d=[{value:"Install OpenTelemetry Collector",id:"install-opentelemetry-collector",level:2},{value:"Setting up and running OpenTelemetry with Besu",id:"setting-up-and-running-opentelemetry-with-besu",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"use-opentelemetry",children:"Use OpenTelemetry"})}),"\n",(0,r.jsxs)(t.p,{children:["You can use the OpenTelemetry monitoring and tracing service to gather node metrics and traces. To enable OpenTelemetry to access Besu, use the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#metrics-enabled",children:(0,r.jsx)(t.code,{children:"--metrics-enabled"})})," and ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#metrics-protocol",children:(0,r.jsx)(t.code,{children:"--metrics-protocol=opentelemetry"})})," options. Use ",(0,r.jsx)(t.a,{href:"https://splunk.com",children:"Splunk"})," to visualize the collected data. A ",(0,r.jsx)(t.a,{href:"https://github.com/splunk/splunk-connect-for-ethereum/tree/master/examples/besu-sync",children:"Besu Sync example"})," is available."]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsx)(t.p,{children:"Use OpenTelemetry to monitor the sync time of your Besu node and show where time is spent internally and over the JSON-RPC interface."}),(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://wiki.hyperledger.org/display/BESU/2021-01-19+Office+Hours+Notes",children:"This office hours recording"})," shows examples of monitoring Besu."]})]}),"\n",(0,r.jsx)(t.h2,{id:"install-opentelemetry-collector",children:"Install OpenTelemetry Collector"}),"\n",(0,r.jsxs)(t.p,{children:["Download and install the ",(0,r.jsx)(t.a,{href:"https://github.com/open-telemetry/opentelemetry-collector-contrib/releases",children:"OpenTelemetry Collector"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsx)(t.p,{children:"You can also install exporters that send system metrics to OpenTelemetry to monitor non-Besu-specific items such as disk and CPU usage. The OpenTelemetry Collector can connect to additional applications, and may be deployed in Kubernetes environments as a daemonset."})}),"\n",(0,r.jsx)(t.h2,{id:"setting-up-and-running-opentelemetry-with-besu",children:"Setting up and running OpenTelemetry with Besu"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Configure OpenTelemetry to accept data from Besu. For example, use the following configuration for your ",(0,r.jsx)(t.code,{children:"otel-collector-config.yml"})," file, and send data to Splunk and Splunk APM:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yml",metastring:'title="otel-collector-config.yml"',children:'receivers:\n otlp:\n protocols:\n grpc:\n http:\n\nexporters:\n splunk_hec/traces:\n # Splunk HTTP Event Collector token.\n token: "11111111-1111-1111-1111-1111111111113"\n # URL to a Splunk instance to send data to.\n endpoint: "https://<SPLUNK INSTANCE>:8088/services/collector"\n # Optional Splunk source: https://docs.splunk.com/Splexicon:Source\n source: "besu:traces"\n # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype\n sourcetype: "otlp"\n # Splunk index, optional name of the Splunk index targeted.\n index: "traces"\n # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100.\n max_connections: 20\n # Whether to disable gzip compression over HTTP. Defaults to false.\n disable_compression: false\n # HTTP timeout when sending data. Defaults to 10s.\n timeout: 10s\n # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false.\n # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true.\n insecure_skip_verify: true\n splunk_hec/metrics:\n # Splunk HTTP Event Collector token.\n token: "11111111-1111-1111-1111-1111111111113"\n # URL to a Splunk instance to send data to.\n endpoint: "https://<SPLUNK INSTANCE>:8088/services/collector"\n # Optional Splunk source: https://docs.splunk.com/Splexicon:Source\n source: "besu:metrics"\n # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype\n sourcetype: "prometheus"\n # Splunk index, optional name of the Splunk index targeted.\n index: "metrics"\n # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100.\n max_connections: 20\n # Whether to disable gzip compression over HTTP. Defaults to false.\n disable_compression: false\n # HTTP timeout when sending data. Defaults to 10s.\n timeout: 10s\n # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false.\n # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true.\n insecure_skip_verify: true\n # Traces\n sapm:\n access_token: "${SPLUNK_ACCESS_TOKEN}"\n endpoint: "https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace"\n # Metrics + Events\n signalfx:\n access_token: "${SPLUNK_ACCESS_TOKEN}"\n realm: "${SPLUNK_REALM}"\n\nprocessors:\n batch:\n\nextensions:\n health_check:\n pprof:\n zpages:\n\nservice:\n extensions: [pprof, zpages, health_check]\n pipelines:\n traces:\n receivers: [otlp]\n exporters: [splunk_hec/traces, sapm]\n processors: [batch]\n metrics:\n receivers: [otlp]\n exporters: [splunk_hec/metrics, signalfx]\n processors: [batch]\n'})}),"\n",(0,r.jsx)(t.p,{children:"It is easiest to run the OpenTelemetry collector with Docker with the following command:"}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"docker run -d \\\n -v ./otel-collector-config.yml:/etc/otel/config.yaml \\\n -e SPLUNK_ACCESS_TOKEN=<access token> \\\n -e SPLUNK_REALM=<realm> \\\n -p 4317:4317 \\\n otel/opentelemetry-collector-contrib:latest\n"})})}),(0,r.jsx)(l.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"docker run -d \\\n -v ./otel-collector-config.yml:/etc/otel/config.yaml \\\n -e SPLUNK_ACCESS_TOKEN=abcdefg654 \\\n -e SPLUNK_REALM=us1 \\\n -p 4317:4317 \\\n otel/opentelemetry-collector-contrib:latest\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["You can also refer to this ",(0,r.jsx)(t.a,{href:"https://github.com/splunk/splunk-connect-for-ethereum/blob/989dc2ccae7d8235bf3ce2a83a18cf0cd1713294/examples/besu-sync/full-sync/docker-compose.yaml",children:"Docker-compose example"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Start Besu with the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#metrics-enabled",children:(0,r.jsx)(t.code,{children:"--metrics-enabled"})})," and ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#metrics-protocol",children:(0,r.jsx)(t.code,{children:"--metrics-protocol=opentelemetry"})})," options. For example, run the following command to start a single node:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'OTEL_EXPORTER_OTLP_ENDPOINT=https://<host>:<port> besu --network=dev --miner-enabled --miner-coinbase <COINBASE ADDRESS> --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry\n'})})}),(0,r.jsx)(l.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317 besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry\n'})})})]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"https://github.com/open-telemetry/opentelemetry-specification/blob/8f7cdb73618a0b3afa9532b8f8103d719e352781/specification/sdk-environment-variables.md",children:"OpenTelemetry SDK"})," mandates how to configure the OpenTelemetry gRPC client, so data flows to the collector from Besu."]}),"\n",(0,r.jsx)(t.p,{children:"You can use the following environment variables:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Required"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"OTEL_EXPORTER_OTLP_ENDPOINT"})}),(0,r.jsxs)(t.td,{children:["OpenTelemetry Collector endpoint, of the form ",(0,r.jsx)(t.code,{children:"https://host:port"}),". The default is ",(0,r.jsx)(t.code,{children:"https://localhost:4317"}),"."]}),(0,r.jsx)(t.td,{children:"Yes"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"OTEL_EXPORTER_OTLP_INSECURE"})}),(0,r.jsxs)(t.td,{children:["Whether to allow insecure connections for OpenTelemetry data. The default is ",(0,r.jsx)(t.code,{children:"false"}),"."]}),(0,r.jsx)(t.td,{children:"No"})]})]})]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,t,n)=>{n.d(t,{A:()=>l});n(96540);var r=n(18215);const o={tabItem:"tabItem_Ymn6"};var s=n(74848);function l(e){let{children:t,hidden:n,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(o.tabItem,l),hidden:n,children:t})}},11470:(e,t,n)=>{n.d(t,{A:()=>T});var r=n(96540),o=n(18215),s=n(23104),l=n(56347),a=n(205),i=n(57485),c=n(31682),u=n(70679);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:o}}=e;return{value:t,label:n,attributes:r,default:o}}))}(n);return function(e){const t=(0,c.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function h(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:n}=e;const o=(0,l.W6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(o.location.search);t.set(s,e),o.replace({...o.location,search:t.toString()})}),[s,o])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,s=p(e),[l,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,d]=m({queryString:n,groupId:o}),[f,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,s]=(0,u.Dv)(n);return[o,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:o}),x=(()=>{const e=c??f;return h({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{x&&i(x)}),[x]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),b(e)}),[d,b,s]),tabValues:s}}var b=n(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=n(74848);function g(e){let{className:t,block:n,selectedValue:r,selectValue:l,tabValues:a}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),o=a[n].value;o!==r&&(c(t),l(o))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,y.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":n},t),children:a.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,y.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...s,className:(0,o.A)("tabs__item",x.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:s}=e;const l=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,y.jsx)("div",{className:"margin-top--md",children:l.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function k(e){const t=f(e);return(0,y.jsxs)("div",{className:(0,o.A)("tabs-container",x.tabList),children:[(0,y.jsx)(g,{...t,...e}),(0,y.jsx)(v,{...t,...e})]})}function T(e){const t=(0,b.A)();return(0,y.jsx)(k,{...e,children:d(e.children)},String(t))}},28453:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>a});var r=n(96540);const o={},s=r.createContext(o);function l(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/306048a3.bbdcd5ec.js b/assets/js/306048a3.bbdcd5ec.js new file mode 100644 index 00000000000..128f44cad6e --- /dev/null +++ b/assets/js/306048a3.bbdcd5ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1524],{2556:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=s(74848),i=s(28453);const o={title:"Use Chainlens Explorer",sidebar_position:7,description:"Use Chainlens Explorer on a privacy-enabled Besu network",tags:["private networks"]},r="Use Chainlens Blockchain Explorer",a={id:"private-networks/how-to/monitor/chainlens",title:"Use Chainlens Explorer",description:"Use Chainlens Explorer on a privacy-enabled Besu network",source:"@site/docs/private-networks/how-to/monitor/chainlens.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/chainlens",permalink:"/private-networks/how-to/monitor/chainlens",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/chainlens.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Use Chainlens Explorer",sidebar_position:7,description:"Use Chainlens Explorer on a privacy-enabled Besu network",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use OpenTelemetry",permalink:"/private-networks/how-to/monitor/opentelemetry"},next:{title:"Use EEA-compliant privacy",permalink:"/private-networks/how-to/use-privacy/eea-compliant"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Start Chainlens",id:"start-chainlens",level:2},{value:"View on Chainlens",id:"view-on-chainlens",level:2},{value:"Stop Chainlens",id:"stop-chainlens",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"use-chainlens-blockchain-explorer",children:"Use Chainlens Blockchain Explorer"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://chainlens.com/",children:"Chainlens Blockchain Explorer"})," supports public and private EVM networks.\nThis page describes how to use the free version of Chainlens with its built-in support for\n",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"privacy-enabled"})," Besu networks created using the\n",(0,t.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Chainlens provides an overview of the entire network, including block information, contract\nmetadata, transaction searches, and ",(0,t.jsx)(n.a,{href:"https://chainlens.com/",children:"more"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["You must connect to one of the privacy nodes (for example, ",(0,t.jsx)(n.code,{children:"member1besu"}),"), not the dedicated RPC, to\nallow access for Besu ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv-methods",children:"privacy API methods"}),".\nIn production networks, you must ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"secure access"}),"\nto RPC nodes."]})}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker and Docker Compose"})," installed."]}),"\n",(0,t.jsx)(n.h2,{id:"start-chainlens",children:"Start Chainlens"}),"\n",(0,t.jsxs)(n.p,{children:["Clone the ",(0,t.jsx)(n.a,{href:"https://github.com/web3labs/chainlens-free",children:"Chainlens GitHub repository"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/web3labs/chainlens-free\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The repository contains a ",(0,t.jsx)(n.code,{children:"docker-compose"})," directory to allow Chainlens to start with a Developer\nQuickstart test network.\nFrom the ",(0,t.jsx)(n.code,{children:"docker-compose"})," directory, run the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"NODE_ENDPOINT=http://rpcnode:8545 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up\n"})}),"\n",(0,t.jsx)(n.p,{children:"This command does two things:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Sets up the node endpoint"}),"\n",(0,t.jsx)(n.li,{children:"Tells Docker to run by using the two Docker Compose files provided"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The first ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file in the command contains all the services required for Chainlens."]}),"\n",(0,t.jsxs)(n.p,{children:["The second file named ",(0,t.jsx)(n.code,{children:"docker-compose-quorum-dev-quickstart"})," contains the network settings required to start\nChainlens on the same network as the Besu development node."]}),"\n",(0,t.jsxs)(n.p,{children:["Next, open ",(0,t.jsx)(n.code,{children:"http://localhost/"})," on your browser.\nYou\u2019ll see the new initialization page while it boots up.\nThis may take 5\u201310 minutes for the all services to start and the ingestion sync to complete."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens_loading",src:s(93107).A+"",width:"2432",height:"1308"})}),"\n",(0,t.jsx)(n.h2,{id:"view-on-chainlens",children:"View on Chainlens"}),"\n",(0,t.jsx)(n.p,{children:"After starting Chainlens, you can view information about your network."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Screenshots in this section are taken from the ",(0,t.jsx)(n.a,{href:"https://holesky.chainlens.com/dashboard",children:"Chainlens Holesky network"}),"."]})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Dashboard"})," page provides an aggregated view of network activities."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens_dashboard",src:s(14299).A+"",width:"2860",height:"1906"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Network"})," page provides an overview of the network status and connected peers.\nThis page is disabled by default, and is only visible if you set ",(0,t.jsx)(n.code,{children:"DISPLAY_NETWOR_TAB=enabled"})," using\nthe following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"NODE_ENDPOINT=http://member1besu:8545 DISPLAY_NETWORK_TAB=enabled docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Blocks"})," page shows a real-time view of the finalized blocks."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens blocks",src:s(57700).A+"",width:"2692",height:"1920"})}),"\n",(0,t.jsx)(n.p,{children:"You can view a given block details by selecting a block hash or number."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens block details",src:s(34561).A+"",width:"2608",height:"1924"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Transactions"})," page shows a paginated view of new and historical transactions."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens transactions",src:s(21988).A+"",width:"2766",height:"1922"})}),"\n",(0,t.jsxs)(n.p,{children:["If you select any transaction hash, you can get the ",(0,t.jsx)(n.strong,{children:"transaction details."})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens transaction_details",src:s(45634).A+"",width:"4166",height:"3206"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Contracts"})," page shows all the smart contracts deployed on the network."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens contracts",src:s(31422).A+"",width:"2844",height:"1924"})}),"\n",(0,t.jsx)(n.p,{children:"You can view a smart contract details by selecting the contract address."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens contract details",src:s(54192).A+"",width:"2706",height:"1918"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Events"})," page shows all the events generated on the network."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Chainlens events",src:s(67716).A+"",width:"4264",height:"3204"})}),"\n",(0,t.jsx)(n.h2,{id:"stop-chainlens",children:"Stop Chainlens"}),"\n",(0,t.jsx)(n.p,{children:"To stop all the services from running, run the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker-compose down\n"})})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},34561:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-block-details-df6e36c4bd72ce823087f9faf9470d4c.png"},57700:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-block-42b56c10be9794c4f7fa59148d876ae1.png"},54192:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-contract-details-aa987d5cb4567c531b027d594b7102d8.png"},31422:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-contracts-1070acb58fc0b4c26e5244e1a0de2467.png"},14299:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-dashboard-0a9dc4f45e20c2d0e82a40a62185776e.png"},67716:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-events-a72036c7a41af2abc3e7158fc65e95b1.png"},93107:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-loading-6892fc684a7239dcf9bc2d70d0ec7b40.png"},45634:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-transaction-details-2f78a8932e911d945bd54740e2d43ec2.png"},21988:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/chainlens-transactions-23e6efc701865a9616ed778d5deb6b2f.png"},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>a});var t=s(96540);const i={},o=t.createContext(i);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3234314a.23d59e51.js b/assets/js/3234314a.23d59e51.js new file mode 100644 index 00000000000..bbf94f200d9 --- /dev/null +++ b/assets/js/3234314a.23d59e51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8088],{58971:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var n=a(74848),r=a(28453);const i={title:"Access private and privacy marker transactions",description:"Methods for accessing and managing private transactions and privacy groups in Besu",sidebar_position:6,tags:["private networks"]},s="Access private and privacy marker transactions",c={id:"private-networks/how-to/use-privacy/access-private-transactions",title:"Access private and privacy marker transactions",description:"Methods for accessing and managing private transactions and privacy groups in Besu",source:"@site/docs/private-networks/how-to/use-privacy/access-private-transactions.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/access-private-transactions",permalink:"/private-networks/how-to/use-privacy/access-private-transactions",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/access-private-transactions.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Access private and privacy marker transactions",description:"Methods for accessing and managing private transactions and privacy groups in Besu",sidebar_position:6,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use flexible privacy groups",permalink:"/private-networks/how-to/use-privacy/flexible"},next:{title:"Sign privacy marker transactions",permalink:"/private-networks/how-to/use-privacy/sign-pmts"}},o={},p=[{value:"Transaction receipts",id:"transaction-receipts",level:2},{value:"Transactions",id:"transactions",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"access-private-and-privacy-marker-transactions",children:"Access private and privacy marker transactions"})}),"\n",(0,n.jsxs)(t.p,{children:["A Besu private transaction creates a ",(0,n.jsx)(t.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"})," and the private transaction itself."]}),"\n",(0,n.jsx)(t.h2,{id:"transaction-receipts",children:"Transaction receipts"}),"\n",(0,n.jsx)(t.p,{children:"With the transaction hash returned when submitting the private transaction, to get the transaction receipt for the:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Private transaction, use ",(0,n.jsx)(t.a,{href:"/private-networks/reference/api/#priv_gettransactionreceipt",children:(0,n.jsx)(t.code,{children:"priv_getTransactionReceipt"})}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Privacy marker transaction, use ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionreceipt",children:(0,n.jsx)(t.code,{children:"eth_getTransactionReceipt"})}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The transaction receipt includes a ",(0,n.jsx)(t.code,{children:"status"})," indicating if the transaction failed (",(0,n.jsx)(t.code,{children:"0x0"}),"), succeeded (",(0,n.jsx)(t.code,{children:"0x1"}),"), or was invalid (",(0,n.jsx)(t.code,{children:"0x2"}),")."]}),"\n",(0,n.jsx)(t.admonition,{title:"Private transaction failure example",type:"note",children:(0,n.jsxs)(t.p,{children:["To deploy a private contract, you submit a transaction using ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:(0,n.jsx)(t.code,{children:"eea_sendRawTransaction"})}),". If contract deployment fails because of insufficient gas, the privacy marker transaction receipt has a status of success and the private transaction receipt has a status of failure."]})}),"\n",(0,n.jsx)(t.h2,{id:"transactions",children:"Transactions"}),"\n",(0,n.jsx)(t.p,{children:"With the transaction hash returned when submitting the private transaction, to get the:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Private transaction, use ",(0,n.jsx)(t.a,{href:"/private-networks/reference/api/#priv_getprivatetransaction",children:(0,n.jsx)(t.code,{children:"priv_getPrivateTransaction"})}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Privacy marker transaction, use ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionbyhash",children:(0,n.jsx)(t.code,{children:"eth_getTransactionByHash"})}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>c});var n=a(96540);const r={},i=n.createContext(r);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3624528b.a6c81356.js b/assets/js/3624528b.a6c81356.js new file mode 100644 index 00000000000..5cfa52b5522 --- /dev/null +++ b/assets/js/3624528b.a6c81356.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1701],{95751:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var s=t(74848),r=t(28453);const a={title:"Create and send transactions",description:"private networks send transactions overview",tags:["private networks"]},o="Create and send transactions",i={id:"private-networks/how-to/send-transactions/index",title:"Create and send transactions",description:"private networks send transactions overview",source:"@site/docs/private-networks/how-to/send-transactions/index.md",sourceDirName:"private-networks/how-to/send-transactions",slug:"/private-networks/how-to/send-transactions/",permalink:"/private-networks/how-to/send-transactions/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/send-transactions/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Create and send transactions",description:"private networks send transactions overview",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Alternative elliptic curves",permalink:"/private-networks/how-to/configure/curves"},next:{title:"Create and send private transactions",permalink:"/private-networks/how-to/send-transactions/private-transactions"}},c={},d=[];function l(e){const n={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"create-and-send-transactions",children:"Create and send transactions"})}),"\n",(0,s.jsxs)(n.p,{children:["In private networks, you can create and ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"send regular transactions"})," as in public networks."]}),"\n",(0,s.jsx)(n.p,{children:"You can also:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:"Send private transactions"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/concurrent-private-transactions",children:"Send concurrent private transactions"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"Include revert reason in transactions"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#in-networks-with-zero-base-base-or-free-gas",children:"Replace transactions in the transaction pool"}),"."]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var s=t(96540);const r={},a=s.createContext(r);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3626.567734c0.js b/assets/js/3626.567734c0.js new file mode 100644 index 00000000000..2ff24c95824 --- /dev/null +++ b/assets/js/3626.567734c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3626],{63626:(t,e,s)=>{s.d(e,{d:()=>D,p:()=>r,s:()=>_});var n=s(26312),i=s(99702),u=function(){var t=function(t,e,s,n){for(s=s||{},n=t.length;n--;s[t[n]]=e);return s},e=[1,17],s=[1,18],n=[1,19],i=[1,39],u=[1,40],r=[1,25],a=[1,23],c=[1,24],o=[1,31],l=[1,32],h=[1,33],A=[1,34],p=[1,35],d=[1,36],y=[1,26],E=[1,27],C=[1,28],m=[1,29],f=[1,43],b=[1,30],F=[1,42],g=[1,44],k=[1,41],T=[1,45],B=[1,9],D=[1,8,9],_=[1,56],S=[1,57],N=[1,58],L=[1,59],$=[1,60],v=[1,61],O=[1,62],x=[1,8,9,39],I=[1,74],R=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],w=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],P=[13,74,80,95,97,98],M=[13,64,65,74,80,95,97,98],G=[13,59,60,61,62,63,74,80,95,97,98],U=[1,93],z=[1,110],K=[1,108],Y=[1,102],j=[1,103],Q=[1,104],X=[1,105],W=[1,106],q=[1,107],H=[1,109],J=[1,8,9,37,39,42],V=[1,8,9,21],Z=[1,8,9,78],tt=[1,8,9,21,73,74,78,80,81,82,83,84,85],et={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(t,e,s,n,i,u,r){var a=u.length-1;switch(i){case 8:this.$=u[a-1];break;case 9:case 11:case 12:this.$=u[a];break;case 10:case 13:case 89:this.$=u[a-1]+u[a];break;case 14:case 15:this.$=u[a-1]+"~"+u[a]+"~";break;case 16:n.addRelation(u[a]);break;case 17:u[a-1].title=n.cleanupLabel(u[a]),n.addRelation(u[a-1]);break;case 27:this.$=u[a].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=u[a].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(u[a-3],u[a-1]);break;case 31:n.addClassesToNamespace(u[a-4],u[a-1]);break;case 32:this.$=u[a],n.addNamespace(u[a]);break;case 33:case 43:case 86:this.$=[u[a]];break;case 34:this.$=[u[a-1]];break;case 35:u[a].unshift(u[a-2]),this.$=u[a];break;case 37:n.setCssClass(u[a-2],u[a]);break;case 38:n.addMembers(u[a-3],u[a-1]);break;case 39:n.setCssClass(u[a-5],u[a-3]),n.addMembers(u[a-5],u[a-1]);break;case 40:this.$=u[a],n.addClass(u[a]);break;case 41:this.$=u[a-1],n.addClass(u[a-1]),n.setClassLabel(u[a-1],u[a]);break;case 42:n.addAnnotation(u[a],u[a-2]);break;case 44:u[a].push(u[a-1]),this.$=u[a];break;case 45:case 47:case 48:break;case 46:n.addMember(u[a-1],n.cleanupLabel(u[a]));break;case 49:this.$={id1:u[a-2],id2:u[a],relation:u[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:u[a-3],id2:u[a],relation:u[a-1],relationTitle1:u[a-2],relationTitle2:"none"};break;case 51:this.$={id1:u[a-3],id2:u[a],relation:u[a-2],relationTitle1:"none",relationTitle2:u[a-1]};break;case 52:this.$={id1:u[a-4],id2:u[a],relation:u[a-2],relationTitle1:u[a-3],relationTitle2:u[a-1]};break;case 53:n.addNote(u[a],u[a-1]);break;case 54:n.addNote(u[a]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:u[a-2],type2:u[a],lineType:u[a-1]};break;case 60:this.$={type1:"none",type2:u[a],lineType:u[a-1]};break;case 61:this.$={type1:u[a-1],type2:"none",lineType:u[a]};break;case 62:this.$={type1:"none",type2:"none",lineType:u[a]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=u[a-2],n.setClickEvent(u[a-1],u[a]);break;case 71:case 77:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 72:this.$=u[a-2],n.setLink(u[a-1],u[a]);break;case 73:this.$=u[a-3],n.setLink(u[a-2],u[a-1],u[a]);break;case 74:this.$=u[a-3],n.setLink(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 75:this.$=u[a-4],n.setLink(u[a-3],u[a-2],u[a]),n.setTooltip(u[a-3],u[a-1]);break;case 78:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1],u[a]);break;case 79:this.$=u[a-4],n.setClickEvent(u[a-3],u[a-2],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 80:this.$=u[a-3],n.setLink(u[a-2],u[a]);break;case 81:this.$=u[a-4],n.setLink(u[a-3],u[a-1],u[a]);break;case 82:this.$=u[a-4],n.setLink(u[a-3],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 83:this.$=u[a-5],n.setLink(u[a-4],u[a-2],u[a]),n.setTooltip(u[a-4],u[a-1]);break;case 84:this.$=u[a-2],n.setCssStyle(u[a-1],u[a]);break;case 85:n.setCssClass(u[a-1],u[a]);break;case 87:u[a-2].push(u[a]),this.$=u[a-2]}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(B,[2,5],{8:[1,46]}),{8:[1,47]},t(D,[2,16],{21:[1,48]}),t(D,[2,18]),t(D,[2,19]),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),{32:[1,49]},{34:[1,50]},t(D,[2,29]),t(D,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:_,60:S,61:N,62:L,63:$,64:v,65:O}),{37:[1,63]},t(x,[2,36],{37:[1,65],42:[1,64]}),t(D,[2,47]),t(D,[2,48]),{16:66,74:f,80:F,95:g,97:k},{16:37,17:67,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:68,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:69,18:38,74:f,80:F,95:g,97:k,98:T},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:f,80:F,95:g,97:k,98:T},{13:I,51:73},t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(R,[2,11],{16:37,18:38,17:75,19:[1,76],74:f,80:F,95:g,97:k,98:T}),t(R,[2,12],{19:[1,77]}),{15:78,16:79,74:f,80:F,95:g,97:k},{16:37,17:80,18:38,74:f,80:F,95:g,97:k,98:T},t(w,[2,112]),t(w,[2,113]),t(w,[2,114]),t(w,[2,115]),t([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),t(B,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:e,33:s,35:n,40:i,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},t(D,[2,17]),t(D,[2,27]),t(D,[2,28]),{13:[1,84],16:37,17:83,18:38,74:f,80:F,95:g,97:k,98:T},{49:85,57:54,58:55,59:_,60:S,61:N,62:L,63:$,64:v,65:O},t(D,[2,46]),{58:86,64:v,65:O},t(P,[2,62],{57:87,59:_,60:S,61:N,62:L,63:$}),t(M,[2,63]),t(M,[2,64]),t(M,[2,65]),t(M,[2,66]),t(M,[2,67]),t(G,[2,68]),t(G,[2,69]),{8:[1,89],23:90,38:88,41:22,44:u},{16:91,74:f,80:F,95:g,97:k},{43:92,47:U},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:z,73:K,74:Y,75:99,77:100,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},{74:[1,111]},{13:I,51:112},t(D,[2,54]),t(D,[2,117]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:f,80:F,95:g,97:k},t(J,[2,40],{11:114,12:[1,115]}),t(B,[2,7]),{9:[1,116]},t(V,[2,49]),{16:37,17:117,18:38,74:f,80:F,95:g,97:k,98:T},{13:[1,119],16:37,17:118,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,61],{57:120,59:_,60:S,61:N,62:L,63:$}),t(P,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:u},{8:[1,123],39:[2,33]},t(x,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:U},{16:37,17:127,18:38,74:f,80:F,95:g,97:k,98:T},t(D,[2,70],{13:[1,128]}),t(D,[2,72],{13:[1,130],68:[1,129]}),t(D,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},t(D,[2,84],{78:[1,134]}),t(Z,[2,86],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(tt,[2,88]),t(tt,[2,90]),t(tt,[2,91]),t(tt,[2,92]),t(tt,[2,93]),t(tt,[2,94]),t(tt,[2,95]),t(tt,[2,96]),t(tt,[2,97]),t(tt,[2,98]),t(D,[2,85]),t(D,[2,53]),{37:[2,10]},t(J,[2,41]),{13:[1,136]},{1:[2,4]},t(V,[2,51]),t(V,[2,50]),{16:37,17:137,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,59]),t(D,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:u},{43:140,47:U},t(x,[2,38]),{39:[2,44]},t(D,[2,42]),t(D,[2,71]),t(D,[2,73]),t(D,[2,74],{68:[1,141]}),t(D,[2,77]),t(D,[2,78],{13:[1,142]}),t(D,[2,80],{13:[1,144],68:[1,143]}),{21:z,73:K,74:Y,77:145,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},t(tt,[2,89]),{14:[1,146]},t(V,[2,52]),t(D,[2,31]),{39:[2,35]},{39:[1,147]},t(D,[2,75]),t(D,[2,79]),t(D,[2,81]),t(D,[2,82],{68:[1,148]}),t(Z,[2,87],{79:135,21:z,73:K,74:Y,80:j,81:Q,82:X,83:W,84:q,85:H}),t(J,[2,8]),t(x,[2,39]),t(D,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],n=[],i=[null],u=[],r=this.table,a="",c=0,o=0,l=u.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;u.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,C,m,f,b,F,g,k,T,B={};;){if(C=s[s.length-1],this.defaultActions[C]?m=this.defaultActions[C]:(null==E&&(T=void 0,"number"!=typeof(T=n.pop()||h.lex()||1)&&(T instanceof Array&&(T=(n=T).pop()),T=e.symbols_[T]||T),E=T),m=r[C]&&r[C][E]),void 0===m||!m.length||!m[0]){var D="";for(b in k=[],r[C])this.terminals_[b]&&b>2&&k.push("'"+this.terminals_[b]+"'");D=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:k})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+E);switch(m[0]){case 1:s.push(E),i.push(h.yytext),u.push(h.yylloc),s.push(m[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(F=this.productions_[m[1]][1],B.$=i[i.length-F],B._$={first_line:u[u.length-(F||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(F||1)].first_column,last_column:u[u.length-1].last_column},y&&(B._$.range=[u[u.length-(F||1)].range[0],u[u.length-1].range[1]]),void 0!==(f=this.performAction.apply(B,[a,o,c,A.yy,m[1],i,u].concat(l))))return f;F&&(s=s.slice(0,-1*F*2),i=i.slice(0,-1*F),u=u.slice(0,-1*F)),s.push(this.productions_[m[1]][0]),i.push(B.$),u.push(B._$),g=r[s[s.length-2]][s[s.length-1]],s.push(g);break;case 3:return!0}}return!0}},st={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,s=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),s.length-1&&(this.yylineno-=s.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:s?(s.length===n.length?this.yylloc.first_column:0)+n[n.length-s.length].length-s[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 s,n,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))),(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],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var u in i)this[u]=i[u];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),u=0;u<i.length;u++)if((s=this._input.match(this.rules[i[u]]))&&(!e||s[0].length>e[0].length)){if(e=s,n=u,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[u])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[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,s,n){switch(s){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:case 5:case 14:case 30:case 35:case 39:case 46:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 19:case 22:case 24:case 57:case 60:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 34:return 8;case 15:case 16:return 7;case 17:case 36:case 44:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 23:return 71;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:case 38:return this.popState(),8;case 31:return this.begin("namespace-body"),37;case 32:case 42:return this.popState(),39;case 33:case 43:return"EOF_IN_STRUCT";case 37:return this.begin("class"),44;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 45:return"OPEN_IN_STRUCT";case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:case 64:case 65:case 66:return 68;case 67:case 68:return 60;case 69:case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:case 84:return 84;case 85:return 85;case 86:case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\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)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_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)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,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],inclusive:!0}}};function nt(){this.yy={}}return et.lexer=st,nt.prototype=et,et.Parser=nt,new nt}();u.parser=u;const r=u,a=["#","+","~","-",""];class c{constructor(t,e){this.memberType=e,this.visibility="",this.classifier="";const s=(0,i.d)(t,(0,i.c)());this.parseMember(s)}getDisplayDetails(){let t=this.visibility+(0,i.x)(this.id);"method"===this.memberType&&(t+=`(${(0,i.x)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,i.x)(this.returnType))),t=t.trim();return{displayText:t,cssStyle:this.parseClassifier()}}parseMember(t){let e="";if("method"===this.memberType){const s=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,n=t.match(s);if(n){const t=n[1]?n[1].trim():"";if(a.includes(t)&&(this.visibility=t),this.id=n[2].trim(),this.parameters=n[3]?n[3].trim():"",e=n[4]?n[4].trim():"",this.returnType=n[5]?n[5].trim():"",""===e){const t=this.returnType.substring(this.returnType.length-1);t.match(/[$*]/)&&(e=t,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const s=t.length,n=t.substring(0,1),i=t.substring(s-1);a.includes(n)&&(this.visibility=n),i.match(/[$*]/)&&(e=i),this.id=t.substring(""===this.visibility?0:1,""===e?s:s-1)}this.classifier=e}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const o="classId-";let l=[],h={},A=[],p=0,d={},y=0,E=[];const C=t=>i.e.sanitizeText(t,(0,i.c)()),m=function(t){const e=i.e.sanitizeText(t,(0,i.c)());let s="",n=e;if(e.indexOf("~")>0){const t=e.split("~");n=C(t[0]),s=C(t[1])}return{className:n,type:s}},f=function(t){const e=i.e.sanitizeText(t,(0,i.c)()),{className:s,type:n}=m(e);if(Object.hasOwn(h,s))return;const u=i.e.sanitizeText(s,(0,i.c)());h[u]={id:u,type:n,label:u,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:o+u+"-"+p},p++},b=function(t){const e=i.e.sanitizeText(t,(0,i.c)());if(e in h)return h[e].domId;throw new Error("Class not found: "+e)},F=function(t,e){f(t);const s=m(t).className,n=h[s];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?n.annotations.push(C(t.substring(2,t.length-2))):t.indexOf(")")>0?n.methods.push(new c(t,"method")):t&&n.members.push(new c(t,"attribute"))}},g=function(t,e){t.split(",").forEach((function(t){let s=t;t[0].match(/\d/)&&(s=o+s),void 0!==h[s]&&h[s].cssClasses.push(e)}))},k=function(t,e,s){const n=i.e.sanitizeText(t,(0,i.c)());if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;const u=n;if(void 0!==h[u]){const t=b(u);let n=[];if("string"==typeof s){n=s.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),E.push((function(){const s=document.querySelector(`[id="${t}"]`);null!==s&&s.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)}))}},T=function(t){let e=(0,n.Ltv)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,n.Ltv)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,n.Ltv)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,n.Ltv)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.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,n.Ltv)(this).classed("hover",!1)}))};E.push(T);let B="TB";const D={setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,getConfig:()=>(0,i.c)().class,addClass:f,bindFunctions:function(t){E.forEach((function(e){e(t)}))},clear:function(){l=[],h={},A=[],E=[],E.push(T),d={},y=0,(0,i.v)()},getClass:function(t){return h[t]},getClasses:function(){return h},getNotes:function(){return A},addAnnotation:function(t,e){const s=m(t).className;h[s].annotations.push(e)},addNote:function(t,e){const s={id:`note${A.length}`,class:e,text:t};A.push(s)},getRelations:function(){return l},addRelation:function(t){i.l.debug("Adding relation: "+JSON.stringify(t)),f(t.id1),f(t.id2),t.id1=m(t.id1).className,t.id2=m(t.id2).className,t.relationTitle1=i.e.sanitizeText(t.relationTitle1.trim(),(0,i.c)()),t.relationTitle2=i.e.sanitizeText(t.relationTitle2.trim(),(0,i.c)()),l.push(t)},getDirection:()=>B,setDirection:t=>{B=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)),C(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,s){t.split(",").forEach((function(t){k(t,e,s),h[t].haveCallback=!0})),g(t,"clickable")},setCssClass:g,setLink:function(t,e,s){const n=(0,i.c)();t.split(",").forEach((function(t){let u=t;t[0].match(/\d/)&&(u=o+u),void 0!==h[u]&&(h[u].link=i.u.formatUrl(e,n),"sandbox"===n.securityLevel?h[u].linkTarget="_top":h[u].linkTarget="string"==typeof s?C(s):"_blank")})),g(t,"clickable")},getTooltip:function(t,e){return e?d[e].classes[t].tooltip:h[t].tooltip},setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(h[t].tooltip=C(e))}))},lookUpDomId:b,setDiagramTitle:i.q,getDiagramTitle:i.t,setClassLabel:function(t,e){const s=i.e.sanitizeText(t,(0,i.c)());e&&(e=C(e));const{className:n}=m(s);h[n].label=e},addNamespace:function(t){void 0===d[t]&&(d[t]={id:t,classes:{},children:{},domId:o+t+"-"+y},y++)},addClassesToNamespace:function(t,e){if(void 0!==d[t])for(const s of e){const{className:e}=m(s);h[e].parent=t,d[t].classes[e]=h[e]}},getNamespace:function(t){return d[t]},getNamespaces:function(){return d},setCssStyle:function(t,e){const s=h[t];if(e&&s)for(const n of e)n.includes(",")?s.styles.push(...n.split(",")):s.styles.push(n)}},_=t=>`g.classGroup text {\n fill: ${t.nodeBorder||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-width: 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: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !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 line-height: initial;\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/3706.2daa6e9b.js b/assets/js/3706.2daa6e9b.js new file mode 100644 index 00000000000..4ab5f4a2154 --- /dev/null +++ b/assets/js/3706.2daa6e9b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3706],{43706:(t,e,i)=>{i.d(e,{diagram:()=>T});var n=i(99702),r=i(26312),s=i(21176),a=i(697),l=(i(74353),i(16750),i(42838),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],r=[1,6],s=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],a=[1,18],l=[2,7],c=[1,22],o=[1,23],h=[1,24],u=[1,25],y=[1,26],d=[1,27],p=[1,20],_=[1,28],E=[1,29],g=[62,63],R=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],m=[1,47],f=[1,48],I=[1,49],b=[1,50],k=[1,51],S=[1,52],T=[1,53],N=[53,54],x=[1,64],A=[1,60],v=[1,61],q=[1,62],$=[1,63],O=[1,65],w=[1,69],C=[1,70],L=[1,67],F=[1,68],M=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],D={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(t,e,i,n,r,s,a){var l=s.length-1;switch(r){case 4:this.$=s[l].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[l-3],s[l-4]);break;case 14:n.setNewReqId(s[l-2]);break;case 15:n.setNewReqText(s[l-2]);break;case 16:n.setNewReqRisk(s[l-2]);break;case 17:n.setNewReqVerifyMethod(s[l-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[l-3]);break;case 34:n.setNewElementType(s[l-2]);break;case 35:n.setNewElementDocRef(s[l-2]);break;case 38:n.addRelationship(s[l-2],s[l],s[l-4]);break;case 39:n.addRelationship(s[l-2],s[l-4],s[l]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:i,11:n,13:r},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:i,11:n,13:r},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(s,[2,6]),{3:12,4:2,6:e,9:i,11:n,13:r},{1:[2,2]},{4:17,5:a,7:13,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},t(s,[2,4]),t(s,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:a,7:31,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:32,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:33,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:34,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:35,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(R,[2,49]),t(R,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{52:54,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(N,[2,43]),t(N,[2,44]),t(N,[2,45]),t(N,[2,46]),{54:[1,58]},{5:x,20:59,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:66,47:L,49:F},{23:71,62:_,63:E},{23:72,62:_,63:E},t(M,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:x,20:77,21:A,24:v,26:q,28:$,30:O},t(M,[2,19]),t(M,[2,33]),{22:[1,78]},{22:[1,79]},{5:w,30:C,46:80,47:L,49:F},t(M,[2,37]),t(M,[2,38]),t(M,[2,39]),{23:81,62:_,63:E},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(M,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(M,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:x,20:106,21:A,24:v,26:q,28:$,30:O},{5:x,20:107,21:A,24:v,26:q,28:$,30:O},{5:x,20:108,21:A,24:v,26:q,28:$,30:O},{5:x,20:109,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:110,47:L,49:F},{5:w,30:C,46:111,47:L,49:F},t(M,[2,14]),t(M,[2,15]),t(M,[2,16]),t(M,[2,17]),t(M,[2,34]),t(M,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},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=[],r=[null],s=[],a=this.table,l="",c=0,o=0,h=s.slice.call(arguments,1),u=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]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var p=u.yylloc;s.push(p);var _=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,g,R,m,f,I,b,k,S,T={};;){if(g=i[i.length-1],this.defaultActions[g]?R=this.defaultActions[g]:(null==E&&(S=void 0,"number"!=typeof(S=n.pop()||u.lex()||1)&&(S instanceof Array&&(S=(n=S).pop()),S=e.symbols_[S]||S),E=S),R=a[g]&&a[g][E]),void 0===R||!R.length||!R[0]){var N="";for(f in k=[],a[g])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");N=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(N,{text:u.match,token:this.terminals_[E]||E,line:u.yylineno,loc:p,expected:k})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+E);switch(R[0]){case 1:i.push(E),r.push(u.yytext),s.push(u.yylloc),i.push(R[1]),E=null,o=u.yyleng,l=u.yytext,c=u.yylineno,p=u.yylloc;break;case 2:if(I=this.productions_[R[1]][1],T.$=r[r.length-I],T._$={first_line:s[s.length-(I||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(I||1)].first_column,last_column:s[s.length-1].last_column},_&&(T._$.range=[s[s.length-(I||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(T,[l,o,c,y.yy,R[1],r,s].concat(h))))return m;I&&(i=i.slice(0,-1*I*2),r=r.slice(0,-1*I),s=s.slice(0,-1*I)),i.push(this.productions_[R[1]][0]),r.push(T.$),s.push(T._$),b=a[i[i.length-2]][i[i.length-1]],i.push(b);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,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 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: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=[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 i,n,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))),(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 r)this[s]=r[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 r=this._currentRules(),s=0;s<r.length;s++)if((i=this._input.match(this.rules[r[s]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,r[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[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"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 48:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:case 10:case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 49:return"qString";case 50:return e.yytext=e.yytext.trim(),62}},rules:[/^(?: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:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};function V(){this.yy={}}return D.lexer=P,V.prototype=D,D.Parser=V,new V}());l.parser=l;const c=l;let o=[],h={},u={},y={},d={};const p={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"},getConfig:()=>(0,n.c)().req,addRequirement:(t,e)=>(void 0===u[t]&&(u[t]={name:t,type:e,id:h.id,text:h.text,risk:h.risk,verifyMethod:h.verifyMethod}),h={},u[t]),getRequirements:()=>u,setNewReqId:t=>{void 0!==h&&(h.id=t)},setNewReqText:t=>{void 0!==h&&(h.text=t)},setNewReqRisk:t=>{void 0!==h&&(h.risk=t)},setNewReqVerifyMethod:t=>{void 0!==h&&(h.verifyMethod=t)},setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addElement:t=>(void 0===d[t]&&(d[t]={name:t,type:y.type,docRef:y.docRef},n.l.info("Added new requirement: ",t)),y={},d[t]),getElements:()=>d,setNewElementType:t=>{void 0!==y&&(y.type=t)},setNewElementDocRef:t=>{void 0!==y&&(y.docRef=t)},addRelationship:(t,e,i)=>{o.push({type:t,src:e,dst:i})},getRelationships:()=>o,clear:()=>{o=[],h={},u={},y={},d={},(0,n.v)()}},_={CONTAINS:"contains",ARROW:"arrow"},E=_,g=(t,e)=>{let i=t.append("defs").append("marker").attr("id",_.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",_.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${e.line_height},${e.line_height/2}\n M${e.line_height},${e.line_height/2}\n L0,${e.line_height}`).attr("stroke-width",1)};let R={},m=0;const f=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",R.rect_min_width+"px").attr("height",R.rect_min_height+"px"),I=(t,e,i)=>{let n=R.rect_min_width/2,r=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",R.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((t=>{0==s?r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",0).text(t):r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",.75*R.line_height).text(t),s++}));let a=1.5*R.rect_padding+s*R.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",R.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:r,y:a}},b=(t,e,i,n)=>{let r=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",R.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((t=>{let e=t.length;for(;e>30&&s<3;){let i=t.substring(0,30);e=(t=t.substring(30,t.length)).length,a[a.length]=i,s++}if(3==s){let t=a[a.length-1];a[a.length-1]=t.substring(0,t.length-4)+"..."}else a[a.length]=t;s=0})),a.forEach((t=>{r.append("tspan").attr("x",R.rect_padding).attr("dy",R.line_height).text(t)})),r},k=function(t,e,i,s,a){const l=i.edge(S(e.src),S(e.dst)),c=(0,r.n8j)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+s).attr("class","er relationshipLine").attr("d",c(l.points)).attr("fill","none");e.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+E.ARROW+"_line_ending)")),((t,e,i,n)=>{const r=e.node().getTotalLength(),s=e.node().getPointAtLength(.5*r),a="rel"+m;m++;const l=t.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(n).node().getBBox();t.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-l.width/2).attr("y",s.y-l.height/2).attr("width",l.width).attr("height",l.height).attr("fill","white").attr("fill-opacity","85%")})(t,o,0,`<<${e.type}>>`)},S=t=>t.replace(/\s/g,"").replace(/\./g,"_"),T={parser:c,db:p,renderer:{draw:(t,e,i,l)=>{R=(0,n.c)().requirement;const c=R.securityLevel;let o;"sandbox"===c&&(o=(0,r.Ltv)("#i"+e));const h=("sandbox"===c?(0,r.Ltv)(o.nodes()[0].contentDocument.body):(0,r.Ltv)("body")).select(`[id='${e}']`);g(h,R);const u=new a.T({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let y=l.db.getRequirements(),d=l.db.getElements(),p=l.db.getRelationships();var _,E,m;_=y,E=u,m=h,Object.keys(_).forEach((t=>{let e=_[t];t=S(t),n.l.info("Added new requirement: ",t);const i=m.append("g").attr("id",t),r=f(i,"req-"+t);let s=I(i,t+"_title",[`<<${e.type}>>`,`${e.name}`]);b(i,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],s.y);const a=r.node().getBBox();E.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,i)=>{Object.keys(t).forEach((n=>{let r=t[n];const s=S(n),a=i.append("g").attr("id",s),l="element-"+s,c=f(a,l);let o=I(a,l+"_title",["<<Element>>",`${n}`]);b(a,l+"_body",[`Type: ${r.type||"Not Specified"}`,`Doc Ref: ${r.docRef||"None"}`],o.y);const h=c.node().getBBox();e.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(d,u,h),((t,e)=>{t.forEach((function(t){let i=S(t.src),n=S(t.dst);e.setEdge(i,n,{relationship:t})}))})(p,u),(0,s.Zp)(u),function(t,e){e.nodes().forEach((function(i){void 0!==i&&void 0!==e.node(i)&&(t.select("#"+i),t.select("#"+i).attr("transform","translate("+(e.node(i).x-e.node(i).width/2)+","+(e.node(i).y-e.node(i).height/2)+" )"))}))}(h,u),p.forEach((function(t){k(h,t,u,e,l)}));const T=R.rect_padding,N=h.node().getBBox(),x=N.width+2*T,A=N.height+2*T;(0,n.i)(h,A,x,R.useMaxWidth),h.attr("viewBox",`${N.x-T} ${N.y-T} ${x} ${A}`)}},styles:t=>`\n\n marker {\n fill: ${t.relationColor};\n stroke: ${t.relationColor};\n }\n\n marker.cross {\n stroke: ${t.lineColor};\n }\n\n svg {\n font-family: ${t.fontFamily};\n font-size: ${t.fontSize};\n }\n\n .reqBox {\n fill: ${t.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${t.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${t.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${t.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${t.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.051c303d.js b/assets/js/3720c009.051c303d.js new file mode 100644 index 00000000000..9ff149579ef --- /dev/null +++ b/assets/js/3720c009.051c303d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4787],{30876:(t,e,s)=>{s.r(e),s.d(e,{default:()=>p});s(96540);var a=s(18215),r=s(1003),l=s(17559),n=s(21312);const c=()=>(0,n.T)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=s(56133),o=s(51107);const g={tag:"tag_Nnez"};var u=s(74848);function h(t){let{letterEntry:e}=t;return(0,u.jsxs)("article",{children:[(0,u.jsx)(o.A,{as:"h2",id:e.letter,children:e.letter}),(0,u.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,u.jsx)("li",{className:g.tag,children:(0,u.jsx)(i.A,{...t})},t.permalink)))}),(0,u.jsx)("hr",{})]})}function d(t){let{tags:e}=t;const s=function(t){const e={};return Object.values(t).forEach((t=>{const s=function(t){return t[0].toUpperCase()}(t.label);e[s]??=[],e[s].push(t)})),Object.entries(e).sort(((t,e)=>{let[s]=t,[a]=e;return s.localeCompare(a)})).map((t=>{let[e,s]=t;return{letter:e,tags:s.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}(e);return(0,u.jsx)("section",{className:"margin-vert--lg",children:s.map((t=>(0,u.jsx)(h,{letterEntry:t},t.letter)))})}var j=s(41463);function m(t){let{title:e}=t;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.be,{title:e}),(0,u.jsx)(j.A,{tag:"doc_tags_list"})]})}function x(t){let{tags:e,title:s}=t;return(0,u.jsx)(r.e3,{className:(0,a.A)(l.G.page.docsTagsListPage),children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,u.jsx)(o.A,{as:"h1",children:s}),(0,u.jsx)(d,{tags:e})]})})})})}function p(t){const e=c();return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(m,{...t,title:e}),(0,u.jsx)(x,{...t,title:e})]})}},56133:(t,e,s)=>{s.d(e,{A:()=>c});s(96540);var a=s(18215),r=s(28774);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=s(74848);function c(t){let{permalink:e,label:s,count:c,description:i}=t;return(0,n.jsxs)(r.A,{href:e,title:i,className:(0,a.A)(l.tag,c?l.tagWithCount:l.tagRegular),children:[s,c&&(0,n.jsx)("span",{children:c})]})}}}]); \ No newline at end of file diff --git a/assets/js/37906014.e96042f4.js b/assets/js/37906014.e96042f4.js new file mode 100644 index 00000000000..05ee08bf2b2 --- /dev/null +++ b/assets/js/37906014.e96042f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5407],{92586:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=t(74848),s=t(28453);const o={title:"Run Besu from Docker image",description:"Run Besu using the official docker image",sidebar_position:2,tags:["private networks"]},i="Run Besu from a Docker image",c={id:"private-networks/get-started/install/run-docker-image",title:"Run Besu from Docker image",description:"Run Besu using the official docker image",source:"@site/docs/private-networks/get-started/install/run-docker-image.md",sourceDirName:"private-networks/get-started/install",slug:"/private-networks/get-started/install/run-docker-image",permalink:"/private-networks/get-started/install/run-docker-image",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/get-started/install/run-docker-image.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Run Besu from Docker image",description:"Run Besu using the official docker image",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Installation options",permalink:"/private-networks/get-started/install/"},next:{title:"Install binary distribution",permalink:"/private-networks/get-started/install/binary-distribution"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Expose ports",id:"expose-ports",level:2},{value:"Start Besu",id:"start-besu",level:2},{value:"Run a node for testing",id:"run-a-node-for-testing",level:3},{value:"Stop Besu and clean up resources",id:"stop-besu-and-clean-up-resources",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"run-besu-from-a-docker-image",children:"Run Besu from a Docker image"})}),"\n",(0,r.jsx)(n.p,{children:"Besu provides a Docker image to run a Besu node in a Docker container."}),"\n",(0,r.jsx)(n.p,{children:"Use this Docker image to run a single Besu node without installing Besu."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"MacOS or Linux"}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"The Docker image does not run on Windows."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"expose-ports",children:"Expose ports"}),"\n",(0,r.jsxs)(n.p,{children:["Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-port",children:(0,r.jsx)(n.code,{children:"--rpc-ws-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-port",children:(0,r.jsx)(n.code,{children:"--metrics-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#graphql-http-port",children:(0,r.jsx)(n.code,{children:"--graphql-http-port"})}),", and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-push-port",children:(0,r.jsx)(n.code,{children:"--metrics-push-port"})})," options."]}),"\n",(0,r.jsx)(n.p,{children:"To run Besu exposing local ports for access:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p <localportJSON-RPC>:8545 -p <localportWS>:8546 -p <localportP2P>:30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["The examples on this page expose TCP ports only. To expose UDP ports, specify ",(0,r.jsx)(n.code,{children:"/udp"})," at the end of the argument for the ",(0,r.jsx)(n.code,{children:"-p"})," Docker subcommand option:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p <port>:<port>/udp\n"})}),(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsxs)(n.a,{href:"https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose",children:[(0,r.jsx)(n.code,{children:"docker run -p"})," documentation"]}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["To enable JSON-RPC HTTP calls to ",(0,r.jsx)(n.code,{children:"127.0.0.1:8545"})," and P2P discovery on ",(0,r.jsx)(n.code,{children:"127.0.0.1:13001"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled\n"})}),"\n",(0,r.jsx)(n.h2,{id:"start-besu",children:"Start Besu"}),"\n",(0,r.jsxs)(n.admonition,{type:"danger",children:[(0,r.jsxs)(n.p,{children:["Don't mount a volume at the default data path (",(0,r.jsx)(n.code,{children:"/opt/besu"}),"). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching."]}),(0,r.jsxs)(n.p,{children:["To run a node that maintains the node state (key and database), ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," must be set to a location other than ",(0,r.jsx)(n.code,{children:"/opt/besu"})," and a storage volume mounted at that location."]}),(0,r.jsxs)(n.p,{children:["When running in a Docker container, ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,r.jsx)(n.code,{children:"--nat-method"})})," must be set to ",(0,r.jsx)(n.code,{children:"DOCKER"})," or ",(0,r.jsx)(n.code,{children:"AUTO"})," (default). Don't set ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,r.jsx)(n.code,{children:"--nat-method"})})," to ",(0,r.jsx)(n.code,{children:"NONE"})," or ",(0,r.jsx)(n.code,{children:"UPNP"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["You can specify ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#specify-options",children:"Besu environment variables"})," with the Docker image instead of the command line options."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:'"Unsupported address type exception"',type:"caution",children:[(0,r.jsx)(n.p,{children:"When running Besu from a Docker image, you might get the following exception:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime.\n"})}),(0,r.jsx)(n.p,{children:"This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker."}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.docker.com/config/daemon/ipv6/",children:"Enable IPv6 support in Docker"})," to allow outbound IPv6 traffic and allow connection with IPv6 peers."]})]}),"\n",(0,r.jsx)(n.h3,{id:"run-a-node-for-testing",children:"Run a node for testing"}),"\n",(0,r.jsx)(n.p,{children:"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 8546:8546 --mount type=bind,source=/<myvolume/besu/testnode>,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu\n"})}),"\n",(0,r.jsx)(n.h2,{id:"stop-besu-and-clean-up-resources",children:"Stop Besu and clean up resources"}),"\n",(0,r.jsxs)(n.p,{children:["When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run ",(0,r.jsx)(n.code,{children:"docker container ls"})," and ",(0,r.jsx)(n.code,{children:"docker volume ls"})," to get the container and volume names."]}),"\n",(0,r.jsx)(n.p,{children:"To stop a container:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker stop <container-name>\n"})}),"\n",(0,r.jsx)(n.p,{children:"To delete a container:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker rm <container-name>\n"})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var r=t(96540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3868ebe2.94fe7a15.js b/assets/js/3868ebe2.94fe7a15.js new file mode 100644 index 00000000000..fb113107feb --- /dev/null +++ b/assets/js/3868ebe2.94fe7a15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6116],{10739:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var t=s(74848),o=s(28453);const r={description:"Ethereum proof of stake consensus",tags:["public networks"]},i="Proof of stake consensus",c={id:"public-networks/concepts/proof-of-stake/index",title:"Proof of stake consensus",description:"Ethereum proof of stake consensus",source:"@site/docs/public-networks/concepts/proof-of-stake/index.md",sourceDirName:"public-networks/concepts/proof-of-stake",slug:"/public-networks/concepts/proof-of-stake/",permalink:"/public-networks/concepts/proof-of-stake/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/proof-of-stake/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Ethereum proof of stake consensus",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Node clients",permalink:"/public-networks/concepts/node-clients"},next:{title:"Attestations",permalink:"/public-networks/concepts/proof-of-stake/attestations"}},a={},l=[];function d(e){const n={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"proof-of-stake-consensus",children:"Proof of stake consensus"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/merge/",children:"The Merge"})," transitioned Ethereum Mainnet to ",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/",children:"Proof of Stake\n(PoS)"})," consensus."]}),"\n",(0,t.jsxs)(n.p,{children:["Under Ethereum's PoS, you must run a ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-and-consensus-clients",children:"full node"})," and\n",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/staking/",children:"stake 32 ETH"})," to become a validator."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["To operate a full node on Mainnet, you must run a beacon node, i.e. a consensus client and an execution client.\nTo become a validator, you must also run a validator client (either ",(0,t.jsx)(n.a,{href:"https://docs.teku.consensys.net/get-started/start-teku#start-the-clients-in-a-single-process",children:"in the same process as the\nbeacon node"}),"\nor ",(0,t.jsx)(n.a,{href:"https://docs.teku.consensys.net/get-started/start-teku#run-the-clients-separately",children:"separately"}),")."]})}),"\n",(0,t.jsx)(n.p,{children:"PoS is preferred over Proof of Work and Proof of Authority as a consensus mechanism because it is\nmore secure, requires less energy, and lowers the barrier to entry."}),"\n",(0,t.jsxs)(n.p,{children:["The PoS mechanism randomly chooses validators to propose or validate blocks on the ",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/beacon-chain/",children:"Beacon\nChain"})," in defined time frames."]}),"\n",(0,t.jsxs)(n.p,{children:["Proposers are responsible for proposing new consensus blocks, and non-proposing validators are\nresponsible for validating (attesting to) proposed blocks.\nValidators earn ",(0,t.jsx)(n.a,{href:"https://www.blocknative.com/ethereum-staking-calculator",children:"rewards"})," for proposing and\nattesting to consensus blocks eventually included in the Beacon Chain, and penalized for malicious behavior.\n",(0,t.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/attestations",children:"Attestations"})," make up the bulk of validator rewards (~85%).\nValidators also receive transaction fees for included blocks."]}),"\n",(0,t.jsx)(n.p,{children:"Each consensus block contains an execution payload, which contains a list of transactions and other data required to execute and validate the payload."}),"\n",(0,t.jsxs)(n.p,{children:["When a node validates a consensus block, its ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"})," processes the block and sends the execution payload to the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"}),", which:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Assembles a block on the execution layer."}),"\n",(0,t.jsx)(n.li,{children:"Verifies pre-conditions."}),"\n",(0,t.jsx)(n.li,{children:"Executes transactions."}),"\n",(0,t.jsx)(n.li,{children:"Verifies post-conditions."}),"\n",(0,t.jsx)(n.li,{children:"Sends the validity result back to the consensus client."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If the block is valid, the execution client includes it in the execution chain and stores the new state in execution state storage."}),"\n",(0,t.jsx)(n.p,{children:"If a consensus block receives attestations backed by enough staked ETH, the block is included in the Beacon Chain. In the case of competing chains, the chain with the highest number of validator votes is selected."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var t=s(96540);const o={},r=t.createContext(o);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3917f523.54520b57.js b/assets/js/3917f523.54520b57.js new file mode 100644 index 00000000000..d47a085f2bd --- /dev/null +++ b/assets/js/3917f523.54520b57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5769],{45988:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var s=i(74848),t=i(28453);const r={title:"Genesis file items",sidebar_position:4,description:"Genesis file configuration items reference",tags:["public networks","private networks"]},c="Genesis file items",o={id:"public-networks/reference/genesis-items",title:"Genesis file items",description:"Genesis file configuration items reference",source:"@site/docs/public-networks/reference/genesis-items.md",sourceDirName:"public-networks/reference",slug:"/public-networks/reference/genesis-items",permalink:"/public-networks/reference/genesis-items",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/genesis-items.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Genesis file items",sidebar_position:4,description:"Genesis file configuration items reference",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Objects",permalink:"/public-networks/reference/engine-api/objects"},next:{title:"EVM tool options",permalink:"/public-networks/reference/evm-tool"}},l={},d=[{value:"Configuration items",id:"configuration-items",level:2},{value:"Genesis block parameters",id:"genesis-block-parameters",level:2},{value:"Milestone blocks",id:"milestone-blocks",level:2},{value:"Fixed difficulty",id:"fixed-difficulty",level:2},{value:"Discovery configuration items",id:"discovery-configuration-items",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"genesis-file-items",children:"Genesis file items"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"Besu genesis file"})," contains ",(0,s.jsx)(n.a,{href:"#configuration-items",children:"network configuration items"})," and ",(0,s.jsx)(n.a,{href:"#genesis-block-parameters",children:"genesis block parameters"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"configuration-items",children:"Configuration items"}),"\n",(0,s.jsxs)(n.p,{children:["Network configuration items are specified in the genesis file in the ",(0,s.jsx)(n.code,{children:"config"})," object."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{style:{textAlign:"left"},children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Milestone blocks"}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:[(0,s.jsx)(n.a,{href:"#milestone-blocks",children:"Milestone blocks for the network"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"chainID"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:[(0,s.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"Chain ID for the network"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ethash"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies network uses ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/",children:"Ethash"})," and contains ",(0,s.jsx)(n.a,{href:"#fixed-difficulty",children:(0,s.jsx)(n.code,{children:"fixeddifficulty"})}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"clique"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies network uses ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"})," and contains ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique#genesis-file",children:"Clique configuration items"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ibft2"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies network uses ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," and contains ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"IBFT 2.0 configuration items"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"qbft"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies network uses ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," and contains ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#genesis-file",children:"QBFT configuration items"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"transitions"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies block at which to ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/add-validators-without-voting",children:"change IBFT 2.0 or QBFT validators"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"contractSizeLimit"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Maximum contract size in bytes. Specify in ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas networks"}),". The default is ",(0,s.jsx)(n.code,{children:"24576"})," and the maximum size is ",(0,s.jsx)(n.code,{children:"2147483647"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"evmStackSize"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Maximum stack size. Specify to increase the maximum stack size in private networks with complex smart contracts. The default is ",(0,s.jsx)(n.code,{children:"1024"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ecCurve"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/curves",children:"the elliptic curve to use"}),". Default is ",(0,s.jsx)(n.code,{children:"secp256k1"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"discovery"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies ",(0,s.jsx)(n.a,{href:"#discovery-configuration-items",children:"discovery configuration items"}),". The ",(0,s.jsx)(n.code,{children:"discovery"})," object can be left empty."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"zeroBaseFee"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies a base fee of ",(0,s.jsx)(n.code,{children:"0"})," for ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas#4-enable-zero-base-fee-if-using-london-fork-or-later",children:"free gas networks"}),"."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fixedBaseFee"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Specifies a constant base fee for blocks, overriding the dynamic base fee calculation of ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:"EIP-1559"}),"."]})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"genesis-block-parameters",children:"Genesis block parameters"}),"\n",(0,s.jsxs)(n.p,{children:["The purpose of some genesis block parameters varies depending on the consensus protocol (Ethash, ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"}),", ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"}),", or ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"}),"). These parameters include:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"difficulty"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"extraData"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"mixHash"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The following table describes the genesis block parameters with the same purpose across all consensus protocols."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{style:{textAlign:"left"},children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"coinbase"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Address to pay mining rewards to. Can be any value in the genesis block (commonly set to ",(0,s.jsx)(n.code,{children:"0x0000000000000000000000000000000000000000"}),")."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"gasLimit"})}),(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"Block gas limit. Total gas limit for all transactions in a block."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"nonce"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Used in block computation. Can be any value in the genesis block (commonly set to ",(0,s.jsx)(n.code,{children:"0x0"}),")."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"timestamp"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Creation date and time of the block. Must be before the next block so we recommend specifying ",(0,s.jsx)(n.code,{children:"0x0"})," in the genesis file."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"alloc"})}),(0,s.jsxs)(n.td,{style:{textAlign:"left"},children:["Defines ",(0,s.jsx)(n.a,{href:"/private-networks/reference/accounts-for-testing",children:"accounts with balances"})," or ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/contracts",children:"contracts"}),"."]})]})]})]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:["If a ",(0,s.jsx)(n.code,{children:"Supplied genesis block does not match stored chain data"})," error occurs, use the genesis file matching the genesis block of the data directory, or use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,s.jsx)(n.code,{children:"--data-path"})})," option to specify a different data directory."]})}),"\n",(0,s.jsx)(n.h2,{id:"milestone-blocks",children:"Milestone blocks"}),"\n",(0,s.jsxs)(n.p,{children:["In public networks, the milestone blocks specify the blocks at which the network changed protocol. See a ",(0,s.jsx)(n.a,{href:"https://github.com/ethereum/execution-specs#ethereum-protocol-releases",children:"full list of Ethereum protocol releases"})," and their corresponding milestone blocks."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:'title="Ethereum Mainnet milestone blocks"',children:'{\n "config": {\n ...\n "homesteadBlock": 1150000,\n "daoForkBlock": 1920000,\n "daoForkSupport": true,\n "eip150Block": 2463000,\n "eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",\n "eip155Block": 2675000,\n "eip158Block": 2675000,\n "byzantiumBlock": 4370000,\n "constantinopleBlock": 7280000,\n "constantinopleFixBlock": 7280000,\n "muirGlacierBlock": 9200000,\n "berlinBlock": 12244000,\n "londonBlock": 12965000,\n "arrowGlacierBlock": 13773000,\n "grayGlacierBlock": 15050000,\n ...\n },\n}\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Ensure you include a milestone far enough in advance in the genesis file. Not doing so can lead to unexpected and inconsistent behavior without specific errors."})}),"\n",(0,s.jsx)(n.p,{children:"In private networks, the milestone block defines the protocol version for the network."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:'title="Private network milestone block"',children:'{\n "config": {\n ...\n "berlinBlock": 0,\n ...\n },\n}\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"In private networks, we recommend specifying the latest milestone block. It's implied this includes the preceding milestones. This ensures you use the most up-to-date protocol and have access to the most recent opcodes."})}),"\n",(0,s.jsx)(n.h2,{id:"fixed-difficulty",children:"Fixed difficulty"}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.code,{children:"fixeddifficulty"})," to specify a fixed difficulty in private networks using Ethash. This will keep the network's difficulty constant and override the ",(0,s.jsx)(n.code,{children:"difficulty"})," parameter from the genesis file."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ethash": {\n "fixeddifficulty": 1000\n },\n\n },\n ...\n}\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Using ",(0,s.jsx)(n.code,{children:"fixeddifficulty"})," is not recommended for use with Ethash outside of test environments. For production networks using Ethash, we recommend setting a low ",(0,s.jsx)(n.code,{children:"difficulty"})," value in the genesis file instead. Ethash will adjust the difficulty of the network based on hashrate to produce blocks at the targeted frequency."]})}),"\n",(0,s.jsx)(n.h2,{id:"discovery-configuration-items",children:"Discovery configuration items"}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"discovery"})," configuration items to specify the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,s.jsx)(n.code,{children:"bootnodes"})})," and ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#discovery-dns-url",children:(0,s.jsx)(n.code,{children:"discovery-dns-url"})})," in the genesis file, in place of using CLI options or listing them in the configuration file. If either CLI option is used, it takes precedence over the genesis file. Anything listed in the configuration file also takes precedence."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "discovery": {\n "bootnodes": [\n "enode://c35c3...d615f@1.2.3.4:30303",\n "enode://f42c13...fc456@1.2.3.5:30303"\n ],\n "dns": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org"\n }\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>o});var s=i(96540);const t={},r=s.createContext(t);function c(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3a4520c6.18bf9121.js b/assets/js/3a4520c6.18bf9121.js new file mode 100644 index 00000000000..52429202832 --- /dev/null +++ b/assets/js/3a4520c6.18bf9121.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1275],{12317:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=o(74848),i=o(28453);const r={title:"Proof of authority consensus",sidebar_position:1,description:"Besu proof of authority consensus protocols comparison",tags:["private networks"]},s="Proof of authority consensus",a={id:"private-networks/concepts/poa",title:"Proof of authority consensus",description:"Besu proof of authority consensus protocols comparison",source:"@site/docs/private-networks/concepts/poa.md",sourceDirName:"private-networks/concepts",slug:"/private-networks/concepts/poa",permalink:"/private-networks/concepts/poa",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/poa.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Proof of authority consensus",sidebar_position:1,description:"Besu proof of authority consensus protocols comparison",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Concepts",permalink:"/private-networks/concepts/"},next:{title:"Privacy",permalink:"/private-networks/concepts/privacy/"}},l={},d=[{value:"Properties",id:"properties",level:2},{value:"Immediate finality",id:"immediate-finality",level:3},{value:"Minimum number of validators",id:"minimum-number-of-validators",level:3},{value:"Liveness",id:"liveness",level:3},{value:"Speed",id:"speed",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"proof-of-authority-consensus",children:"Proof of authority consensus"})}),"\n",(0,t.jsxs)(n.p,{children:["Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/",children:"consensus protocols"}),". PoA consensus protocols work when participants know each other and there is a level of trust between them. For example, in a permissioned consortium network."]}),"\n",(0,t.jsx)(n.p,{children:"PoA consensus protocols have faster block times and a much greater transaction throughput than the Ethash proof of work consensus protocol used on the Ethereum Mainnet."}),"\n",(0,t.jsx)(n.p,{children:"In QBFT, IBFT 2.0, or Clique, a group of nodes in the network act as validators (QBFT and IBFT 2.0) or signers (Clique). The existing nodes in the signer/validator pool vote to add nodes to or remove nodes from the pool."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"For the rest of this page, the term validator is used to refer to signers and validators."})}),"\n",(0,t.jsx)(n.h2,{id:"properties",children:"Properties"}),"\n",(0,t.jsx)(n.p,{children:"Properties to consider when comparing QBFT, IBFT 2.0, and Clique are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Immediate finality."}),"\n",(0,t.jsx)(n.li,{children:"Minimum number of validators."}),"\n",(0,t.jsx)(n.li,{children:"Liveness."}),"\n",(0,t.jsx)(n.li,{children:"Speed."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"immediate-finality",children:"Immediate finality"}),"\n",(0,t.jsx)(n.p,{children:"QBFT and IBFT 2.0 have immediate finality; there are no forks and all valid blocks get included in the main chain."}),"\n",(0,t.jsx)(n.p,{children:"Clique does not have immediate finality. Implementations using Clique must be aware of forks and chain reorganizations occurring."}),"\n",(0,t.jsx)(n.h3,{id:"minimum-number-of-validators",children:"Minimum number of validators"}),"\n",(0,t.jsx)(n.p,{children:"To be Byzantine fault tolerant, QBFT and IBFT 2.0 require a minimum of four validators."}),"\n",(0,t.jsx)(n.p,{children:"Clique can operate with a single validator but operating with a single validator offers no redundancy if the validator fails."}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"Byzantine fault tolerant is the ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers."})}),"\n",(0,t.jsx)(n.h3,{id:"liveness",children:"Liveness"}),"\n",(0,t.jsx)(n.p,{children:"Clique is more fault tolerant than QBFT and IBFT 2.0. Clique tolerates up to half of the validators failing. QBFT and IBFT 2.0 networks require greater than or equal to two-thirds of validators to be operating to create blocks. For example, an QBFT and IBFT 2.0 network of:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Four to five validators tolerates one unresponsive validator."}),"\n",(0,t.jsx)(n.li,{children:"Six to eight validators tolerates two unresponsive validators."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Networks with three or less validators can produce blocks but do not guarantee finality when operating in adversarial environments."}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"We recommend using QBFT or IBFT 2.0 networks with at least four nodes in production environments."})}),"\n",(0,t.jsx)(n.h3,{id:"speed",children:"Speed"}),"\n",(0,t.jsx)(n.p,{children:"Reaching consensus and adding blocks is faster in Clique networks. For Clique, the probability of a fork increases as the number of validators increases."}),"\n",(0,t.jsx)(n.p,{children:"For QBFT and IBFT 2.0, the time to add new blocks increases as the number of validators increases."})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>a});var t=o(96540);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3aaf4567.090eadec.js b/assets/js/3aaf4567.090eadec.js new file mode 100644 index 00000000000..da2d7896b91 --- /dev/null +++ b/assets/js/3aaf4567.090eadec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5398],{62629:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>h,toc:()=>l});var t=n(74848),r=n(28453);const s={title:"Troubleshoot peering",sidebar_position:4,description:"How to troubleshoot peering",tags:["public networks"]},i="Troubleshoot peering",h={id:"public-networks/how-to/troubleshoot/peering",title:"Troubleshoot peering",description:"How to troubleshoot peering",source:"@site/docs/public-networks/how-to/troubleshoot/peering.md",sourceDirName:"public-networks/how-to/troubleshoot",slug:"/public-networks/how-to/troubleshoot/peering",permalink:"/public-networks/how-to/troubleshoot/peering",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/troubleshoot/peering.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Troubleshoot peering",sidebar_position:4,description:"How to troubleshoot peering",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Troubleshoot performance",permalink:"/public-networks/how-to/troubleshoot/performance"},next:{title:"Concepts",permalink:"/public-networks/concepts"}},c={},l=[{value:"Peering FAQ",id:"peering-faq",level:2},{value:""Why can\u2019t I find enough peers to sync?"",id:"why-cant-i-find-enough-peers-to-sync",level:3},{value:""What network or router/modem settings should I check?"",id:"what-network-or-routermodem-settings-should-i-check",level:3},{value:""Which URLs should I check?"",id:"which-urls-should-i-check",level:3},{value:""How do I open/forward my ports?"",id:"how-do-i-openforward-my-ports",level:3},{value:""How do I test that my ports are open?"",id:"how-do-i-test-that-my-ports-are-open",level:3},{value:""What's the ideal number of peers for Besu?"",id:"whats-the-ideal-number-of-peers-for-besu",level:3},{value:""What's the benefit of increasing the number of peers?"",id:"whats-the-benefit-of-increasing-the-number-of-peers",level:3},{value:"Metrics",id:"metrics",level:2}];function a(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"troubleshoot-peering",children:"Troubleshoot peering"})}),"\n",(0,t.jsxs)(o.p,{children:["Many factors can affect the ability of your node to find and maintain peers. Your network router, machine environment, and node configuration are all important. If you have peering issues, start by ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/connect/configure-ports",children:"configuring your ports"})," and ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/connect/manage-peers",children:"managing peers"}),"."]}),"\n",(0,t.jsx)(o.h2,{id:"peering-faq",children:"Peering FAQ"}),"\n",(0,t.jsx)(o.h3,{id:"why-cant-i-find-enough-peers-to-sync",children:'"Why can\u2019t I find enough peers to sync?"'}),"\n",(0,t.jsx)(o.p,{children:"One or more of the following may be the cause:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Your hardware doesn't have enough CPU, disk IOPS, or bandwidth to handle all the peers."}),"\n",(0,t.jsx)(o.li,{children:"Your ports aren't open in your firewall and/or router."}),"\n",(0,t.jsxs)(o.li,{children:["Your node is sending large numbers of DNS requests. See ",(0,t.jsx)(o.a,{href:"https://github.com/hyperledger/besu/issues/4375",children:"issue #4375"}),"."]}),"\n",(0,t.jsxs)(o.li,{children:["You're using ",(0,t.jsx)(o.a,{href:"/public-networks/get-started/connect/sync-node#checkpoint-synchronization",children:"checkpoint sync"}),", which doesn't download all historical block data, so your peers may disconnect you when fetching those blocks."]}),"\n",(0,t.jsx)(o.li,{children:"Your node is experiencing the normal behavior of peers connecting and disconnecting. This is especially normal soon after you start your node."}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:"You can try the following to find more peers:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Set ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,t.jsx)(o.code,{children:"p2p-host"})})," to your external IP address to allow inbound connections."]}),"\n",(0,t.jsx)(o.li,{children:"Restart Besu. This can take a while to build up again."}),"\n",(0,t.jsxs)(o.li,{children:["Set ",(0,t.jsx)(o.code,{children:"-Xdns-enabled"})," to ",(0,t.jsx)(o.code,{children:"true"})," (only for private networks)."]}),"\n",(0,t.jsxs)(o.li,{children:["Delete the node key (which is autogenerated in your data directory). There are two reasons that this might help find more peers:","\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:"Your node (identified by the address associated with this key) has been put onto other peers' bad peer lists for some reason."}),"\n",(0,t.jsxs)(o.li,{children:['Peer discovery is influenced by the value of the node key. This is related to the node "distance" in the ',(0,t.jsx)(o.a,{href:"https://github.com/ethereum/devp2p/wiki/Discovery-Overview#kademlia",children:"discovery algorithm"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["You can read the ",(0,t.jsx)(o.a,{href:"https://docs.prylabs.network/docs/prysm-usage/p2p-host-ip",children:"Prysm EL and CL peering documentation"})," for more information."]}),"\n",(0,t.jsx)(o.h3,{id:"what-network-or-routermodem-settings-should-i-check",children:'"What network or router/modem settings should I check?"'}),"\n",(0,t.jsx)(o.p,{children:"Check the following settings:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Your machine and router's specified DNS should support TCP. You can check your DNS online for TCP support. Google and Cloudflare, 8.8.8.8 and 1.1.1.1, support TCP over port 853. Other DNS might as well."}),"\n",(0,t.jsx)(o.li,{children:"The appropriate ports should be open on your router, or your router should have UPNP enabled. See the next FAQ for more information on router settings."}),"\n",(0,t.jsxs)(o.li,{children:["If you use ",(0,t.jsx)(o.a,{href:"https://docs.docker.com/network/network-tutorial-host/",children:"Docker"})," or virtualization, the container should be able to create outbound connections on the host machine."]}),"\n"]}),"\n",(0,t.jsx)(o.h3,{id:"which-urls-should-i-check",children:'"Which URLs should I check?"'}),"\n",(0,t.jsxs)(o.p,{children:["Check that the ",(0,t.jsx)(o.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})," specified for ",(0,t.jsx)(o.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"})," or ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static nodes"})," match the enode URLs displayed when starting the remote nodes."]}),"\n",(0,t.jsx)(o.h3,{id:"how-do-i-openforward-my-ports",children:'"How do I open/forward my ports?"'}),"\n",(0,t.jsxs)(o.p,{children:["If you\u2019re behind NAT, you probably need to set up port forwarding in your router. You might also need to configure your firewall. Forward and open ",(0,t.jsx)(o.code,{children:"30303"})," (if using the default p2p port) for both UDP and TCP. If your router supports UPNP, you can set ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#nat-method",children:(0,t.jsx)(o.code,{children:"--nat-method"})})," to ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/connect/specify-nat#upnp",children:(0,t.jsx)(o.code,{children:"UPNPP2PONLY"})}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"how-do-i-test-that-my-ports-are-open",children:'"How do I test that my ports are open?"'}),"\n",(0,t.jsxs)(o.p,{children:["You can use this ",(0,t.jsx)(o.a,{href:"https://www.yougetsignal.com/tools/open-ports/",children:"open port checker"}),"."]}),"\n",(0,t.jsx)(o.h3,{id:"whats-the-ideal-number-of-peers-for-besu",children:'"What\'s the ideal number of peers for Besu?"'}),"\n",(0,t.jsx)(o.p,{children:"The default maximum is 25. Increasing the number of peers increases the bandwidth, CPU, and disk access Besu uses to respond to peers. Hardware with low specifications might result in low peer numbers. You'll experience diminishing returns with a larger number of peers (>100)."}),"\n",(0,t.jsx)(o.h3,{id:"whats-the-benefit-of-increasing-the-number-of-peers",children:'"What\'s the benefit of increasing the number of peers?"'}),"\n",(0,t.jsx)(o.p,{children:"Increasing the number of max peers won't speed up Besu syncing, because the bottleneck during sync is disk IO and CPU."}),"\n",(0,t.jsx)(o.p,{children:"Note that Besu's peers are only used for the initial sync and transaction gossip, neither of which affects attestation performance. The beacon node connectivity controls how quickly you receive blocks and how attestations are published. Increasing Besu's peer count increases the load on your node, which may hurt attestations."}),"\n",(0,t.jsx)(o.h2,{id:"metrics",children:"Metrics"}),"\n",(0,t.jsxs)(o.p,{children:["Capture ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/monitor/",children:"metrics"})," to gain insights into peering behavior over time."]}),"\n",(0,t.jsxs)(o.p,{children:["To ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/monitor/metrics",children:"enable Prometheus to access Besu"}),", open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP."]}),"\n",(0,t.jsxs)(o.p,{children:["Specify the ports for Prometheus and Prometheus push gateway using the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#metrics-port",children:(0,t.jsx)(o.code,{children:"--metrics-port"})})," and ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#metrics-push-port",children:(0,t.jsx)(o.code,{children:"--metrics-push-port"})})," options. The defaults are ",(0,t.jsx)(o.code,{children:"9545"})," and ",(0,t.jsx)(o.code,{children:"9001"}),"."]})]})}function d(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>i,x:()=>h});var t=n(96540);const r={},s=t.createContext(r);function i(e){const o=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function h(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b05cdc2.ee641190.js b/assets/js/3b05cdc2.ee641190.js new file mode 100644 index 00000000000..108ba5b72e2 --- /dev/null +++ b/assets/js/3b05cdc2.ee641190.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6563],{42260:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>o});var t=a(74848),r=a(28453);const i={title:"Create and send private transactions",description:"Creating and sending private transactions with Besu",sidebar_position:1,tags:["private networks"]},s="Create and send private transactions",c={id:"private-networks/how-to/send-transactions/private-transactions",title:"Create and send private transactions",description:"Creating and sending private transactions with Besu",source:"@site/docs/private-networks/how-to/send-transactions/private-transactions.md",sourceDirName:"private-networks/how-to/send-transactions",slug:"/private-networks/how-to/send-transactions/private-transactions",permalink:"/private-networks/how-to/send-transactions/private-transactions",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/send-transactions/private-transactions.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Create and send private transactions",description:"Creating and sending private transactions with Besu",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create and send transactions",permalink:"/private-networks/how-to/send-transactions/"},next:{title:"Send concurrent private transactions",permalink:"/private-networks/how-to/send-transactions/concurrent-private-transactions"}},d={},o=[{value:"<code>eea_sendRawTransaction</code>",id:"eea_sendrawtransaction",level:2},{value:"<code>priv_distributeRawTransaction</code>",id:"priv_distributerawtransaction",level:2},{value:"EEA-compliant or Besu-extended privacy",id:"eea-compliant-or-besu-extended-privacy",level:2},{value:"Unsigned and unencoded private transactions",id:"unsigned-and-unencoded-private-transactions",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"create-and-send-private-transactions",children:"Create and send private transactions"})}),"\n",(0,t.jsxs)(n.p,{children:["Create and send ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"})," using:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/web3js-quorum",children:"web3js-quorum client library"})," or ",(0,t.jsx)(n.a,{href:"https://github.com/web3j/web3j",children:"web3j client library"})]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"All private transaction participants must be online for a private transaction to be successfully distributed. If any participants are offline when submitting the private transaction, the transaction is not attempted and you must resubmit the transaction."}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"gas"})," and ",(0,t.jsx)(n.code,{children:"gasPrice"})," specified when sending a private transaction are used by the ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction (PMT)"}),", not the private transaction itself."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Private transactions either deploy contracts or call contract functions. Ether transfer transactions cannot be private."})}),"\n",(0,t.jsx)(n.h2,{id:"eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})})," distributes the private transaction to the participating nodes, and signs and submits the PMT, as described in ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"Private transaction processing"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/concurrent-private-transactions",children:"sending concurrent transactions"}),", you must use ",(0,t.jsx)(n.a,{href:"#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})}),"\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,t.jsx)(n.a,{href:"#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})})," when sending ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/concurrent-private-transactions",children:"concurrent private transactions"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," distributes the private transaction to the participating nodes but does not sign and submit the PMT. That is, it performs steps 1 to 5 of ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"private transaction processing"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["If using ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),", use the value returned by ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_distributerawtransaction",children:(0,t.jsx)(n.code,{children:"priv_distributeRawTransaction"})}),", which is the enclave key to the private transaction in ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"}),", in the ",(0,t.jsx)(n.code,{children:"data"})," field of a call to ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eth_sendRawTransaction"})}),". Use the value returned by ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_getprivacyprecompileaddress",children:(0,t.jsx)(n.code,{children:"priv_getPrivacyPrecompileAddress"})}),", which is the address of the ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy precompiled contract"}),", in the ",(0,t.jsx)(n.code,{children:"to"})," field of the call."]}),"\n",(0,t.jsxs)(n.p,{children:["By using the ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/",children:"public Ethereum transaction"}),", ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eth_sendRawTransaction"})}),", you are signing and submitting the PMT yourself instead of having it signed by the Besu node, giving you greater control over the PMT."]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"If the PMT is not sent after distributing the private transaction, the distributed private transaction is not executed and the private states are not updated."})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Distribute private transaction using priv_distributeRawTransaction"',children:'{\n "jsonrpc": "2.0",\n "method": "priv_distributeRawTransaction",\n "params": [\n "0xf90198808203e8832dc6c08080b8fb608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c003600291ba05393543d483654fd01d9ee818cddfc7527dd6e13e6ef7b45a61e2ca13ffb6b70a0452338873862803ffe04056aea98cd0e3417ff971dcb384e54fce8ca1756a665a09de8260dc3763f8383a6a9ffe96909d36cd3ff4c346e3846a6467c50feaf0119e1a0839f41993789227ec721c9eaf1541683287fa436ef6edd9ec8fd088bad1a0c3c8a72657374726963746564"\n ],\n "id": 1\n}\n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Enclave key to the private transaction in Tessera returned by priv_distributeRawTransaction"',children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b"\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Send the enclave key in the ",(0,t.jsx)(n.code,{children:"data"})," field, and the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#priv_getprivacyprecompileaddress",children:"privacy precompile address"})," in the ",(0,t.jsx)(n.code,{children:"to"})," field of ",(0,t.jsx)(n.code,{children:"eth_sendRawTransaction"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_sendRawTransaction",\n "params": [\n {\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "to": "0x000000000000000000000000000000000000007e",\n "data": "0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b",\n "gas": "0x2E1800",\n "gasPrice": "0x9184e72a000"\n }\n ],\n "id": 1\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"eea-compliant-or-besu-extended-privacy",children:"EEA-compliant or Besu-extended privacy"}),"\n",(0,t.jsxs)(n.p,{children:["To create an ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups#enterprise-ethereum-alliance-privacy",children:"EEA-compliant private transaction"}),", specify ",(0,t.jsx)(n.code,{children:"privateFor"})," when creating the signed transaction passed as an input parameter to ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To create a ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups#besu-extended-privacy",children:"Besu-extended private transaction"}),", specify a ",(0,t.jsx)(n.code,{children:"privacyGroupId"})," when creating the signed transaction passed as an input parameter to ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"unsigned-and-unencoded-private-transactions",children:"Unsigned and unencoded private transactions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})})," parameter is a signed RLP-encoded private transaction. Shown below are examples of unsigned and unencoded private transactions to create a contract."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Unencoded and unsigned EEA-compliant private transaction"',children:'{\n "to": null,\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x7600",\n "gasPrice": "0x0",\n "data": "0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",\n "nonce": "0x0",\n "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "privateFor": [\n "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=",\n "6fg8q5rWMBoAT2oIiU3tYJbk4b7oAr7dxaaVY7TeM3U="\n ],\n "restriction": "restricted"\n}\n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Unencoded and unsigned Besu-extended private transaction"',children:'{\n "to": null,\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x7600",\n "gasPrice": "0x0",\n "data": "0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",\n "nonce": "0x0",\n "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "privacyGroupId": "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=",\n "restriction": "restricted"\n}\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"example"})," directory in the ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/web3js-quorum",children:"web3js-quorum client library"})," contains examples of signing and encoding private transactions."]})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},28453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>c});var t=a(96540);const r={},i=t.createContext(r);function s(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e86fe35.34ea8d39.js b/assets/js/3e86fe35.34ea8d39.js new file mode 100644 index 00000000000..ce7f34dca04 --- /dev/null +++ b/assets/js/3e86fe35.34ea8d39.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1874],{81090:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=o(74848),i=o(28453);const r={title:"Configure logging",sidebar_position:3,description:"Besu log level setting and log formatting",path:"blob/master/besu/src/main/resources/",source:"log4j2.xml",tags:["public networks","private networks"]},s="Use logging",l={id:"public-networks/how-to/monitor/logging",title:"Configure logging",description:"Besu log level setting and log formatting",source:"@site/docs/public-networks/how-to/monitor/logging.md",sourceDirName:"public-networks/how-to/monitor",slug:"/public-networks/how-to/monitor/logging",permalink:"/public-networks/how-to/monitor/logging",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/monitor/logging.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Configure logging",sidebar_position:3,description:"Besu log level setting and log formatting",path:"blob/master/besu/src/main/resources/",source:"log4j2.xml",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Understand metrics",permalink:"/public-networks/how-to/monitor/understand-metrics"},next:{title:"High availability of JSON-RPC and RPC Pub/Sub APIs",permalink:"/public-networks/how-to/configure-ha/"}},a={},c=[{value:"Basic logging",id:"basic-logging",level:2},{value:"Advanced logging",id:"advanced-logging",level:2},{value:"Log invalid transactions",id:"log-invalid-transactions",level:3},{value:"Log rotation",id:"log-rotation",level:3}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"use-logging",children:"Use logging"})}),"\n",(0,t.jsxs)(n.p,{children:["Besu uses ",(0,t.jsx)(n.a,{href:"https://logging.apache.org/log4j/2.x/",children:"Log4j 2"})," for logging and provides two methods to configure logging behavior:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#basic-logging",children:"Basic"})," - Changes the log level."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#advanced-logging",children:"Advanced"})," - Configures the output and format of the logs."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart",children:"Quorum Developer Quickstart"})," provides an ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/monitor/elastic-stack",children:"example implementation using Elastic Stack"})," for log management."]}),"\n",(0,t.jsx)(n.h2,{id:"basic-logging",children:"Basic logging"}),"\n",(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#logging",children:(0,t.jsx)(n.code,{children:"--logging"})})," command line option to specify logging verbosity. The ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#logging",children:(0,t.jsx)(n.code,{children:"--logging"})})," option changes the volume of events displayed in the log. Valid log levels are ",(0,t.jsx)(n.code,{children:"OFF"}),", ",(0,t.jsx)(n.code,{children:"ERROR"}),", ",(0,t.jsx)(n.code,{children:"WARN"}),", ",(0,t.jsx)(n.code,{children:"INFO"}),", ",(0,t.jsx)(n.code,{children:"DEBUG"}),", ",(0,t.jsx)(n.code,{children:"TRACE"}),", ",(0,t.jsx)(n.code,{children:"ALL"}),". The default level is ",(0,t.jsx)(n.code,{children:"INFO"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"For most use cases, the basic method provides enough configurability."}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#admin_changeloglevel",children:(0,t.jsx)(n.code,{children:"admin_changeLogLevel"})})," API method to change the log level while Besu is running."]})}),"\n",(0,t.jsx)(n.h2,{id:"advanced-logging",children:"Advanced logging"}),"\n",(0,t.jsxs)(n.p,{children:["You can provide your own logging configuration using the standard Log4j 2 configuration mechanisms. For example, the following Log4j 2 configuration is the same as the ",(0,t.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/besu/src/main/resources/log4j2.xml",children:"default configuration"})," except for the exclusion of logging of stack traces for exceptions:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-xml",metastring:'title="debug.xml"',children:'<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="INFO">\n <Properties>\n <Property name="root.log.level">INFO</Property>\n </Properties>\n\n <Appenders>\n <Console name="Console" target="SYSTEM_OUT">\n <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSSZZZ} | %t | %-5level | %c{1} | %msg %throwable{short.message}%n" />\n </Console>\n </Appenders>\n <Loggers>\n <Root level="${sys:root.log.level}">\n <AppenderRef ref="Console" />\n </Root>\n </Loggers>\n</Configuration>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["To use your custom configuration, set the environment variable ",(0,t.jsx)(n.code,{children:"LOG4J_CONFIGURATION_FILE"})," to the location of your configuration file."]}),"\n",(0,t.jsxs)(n.p,{children:["If you have more specific requirements, you can create your own ",(0,t.jsx)(n.a,{href:"https://logging.apache.org/log4j/2.x/manual/configuration.html",children:"Log4j 2 configuration"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu."}),"\n",(0,t.jsx)(n.p,{children:"To set the debug logging and start Besu connected to the Holesky testnet:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"LOG4J_CONFIGURATION_FILE=./debug.xml besu --network=holesky\n"})}),"\n",(0,t.jsx)(n.h3,{id:"log-invalid-transactions",children:"Log invalid transactions"}),"\n",(0,t.jsx)(n.p,{children:"You can log information about invalid transactions that have been removed from the transaction pool."}),"\n",(0,t.jsxs)(n.p,{children:["Use the log marker ",(0,t.jsx)(n.code,{children:"INVALID_TX_REMOVED"})," and the following fields to format the log line as required:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"txhash"})," - The hash of the transaction."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"txlog"})," - The human-readable log of the transaction."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"reason"})," - The reason the transaction is invalid."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"txrlp"})," - The RLP encoding of the transaction."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"For example, the following Log4j 2 configuration enables logging of invalid transactions:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-xml",metastring:'title="debug.xml"',children:'<?xml version="1.0" encoding="UTF-8"?>\n<Configuration monitorInterval="30" status="INFO">\n <Properties>\n <Property name="root.log.level">INFO</Property>\n </Properties>\n <Appenders>\n <Console name="Console">\n <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSSZZZ} | %t | %-5level | %c{1} | %msg%n"/>\n </Console>\n <Routing name="Router">\n <Routes pattern="$${event:Marker}">\n <Route key="INVALID_TX_REMOVED">\n <Console name="ConsoleITR" target="SYSTEM_OUT">\n <PatternLayout pattern="Invalid tx removed:%X{txlog}, reason:%X{reason}; RLP={%X{txrlp}}}%n"/>\n </Console>\n </Route>\n <Route ref="Console"/>\n </Routes>\n </Routing>\n </Appenders>\n <Loggers>\n <Logger additivity="false" name="org.hyperledger.besu.ethereum.eth.transactions">\n <AppenderRef ref="Router"/>\n </Logger>\n <Root level="${sys:root.log.level}">\n <AppenderRef ref="Console"/>\n </Root>\n </Loggers>\n</Configuration>\n'})}),"\n",(0,t.jsx)(n.h3,{id:"log-rotation",children:"Log rotation"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart",children:"Quorum Developer Quickstart"})," logging configuration defines a ",(0,t.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/besu/config/besu/log-config.xml",children:"log rotation to restrict the size of the log files"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>l});var t=o(96540);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f04f830.f8a14c73.js b/assets/js/3f04f830.f8a14c73.js new file mode 100644 index 00000000000..6eef4cec3d0 --- /dev/null +++ b/assets/js/3f04f830.f8a14c73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1903],{49857:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=t(74848),o=t(28453),s=t(11470),a=t(19365);const i={description:"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol",tags:["private networks"]},d="Create a private network using IBFT 2.0",c={id:"private-networks/tutorials/ibft/index",title:"Create a private network using IBFT 2.0",description:"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol",source:"@site/docs/private-networks/tutorials/ibft/index.md",sourceDirName:"private-networks/tutorials/ibft",slug:"/private-networks/tutorials/ibft/",permalink:"/private-networks/tutorials/ibft/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/ibft/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a QBFT network",permalink:"/private-networks/tutorials/qbft"},next:{title:"Add and removing IBFT 2.0 validators",permalink:"/private-networks/tutorials/ibft/validators"}},l={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create directories",id:"1-create-directories",level:3},{value:"2. Create a configuration file",id:"2-create-a-configuration-file",level:3},{value:"3. Generate node keys and a genesis file",id:"3-generate-node-keys-and-a-genesis-file",level:3},{value:"4. Copy the genesis file to the IBFT-Network directory",id:"4-copy-the-genesis-file-to-the-ibft-network-directory",level:3},{value:"5. Copy the node private keys to the node directories",id:"5-copy-the-node-private-keys-to-the-node-directories",level:3},{value:"6. Start the first node as the bootnode",id:"6-start-the-first-node-as-the-bootnode",level:3},{value:"7. Start Node-2",id:"7-start-node-2",level:3},{value:"8. Start Node-3",id:"8-start-node-3",level:3},{value:"9. Start Node-4",id:"9-start-node-4",level:3},{value:"10. Confirm the private network is working",id:"10-confirm-the-private-network-is-working",level:3},{value:"Next steps",id:"next-steps",level:2},{value:"Stop the nodes",id:"stop-the-nodes",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"create-a-private-network-using-ibft-20",children:"Create a private network using IBFT 2.0"})}),"\n",(0,r.jsxs)(n.p,{children:["A private network provides a configurable network for testing. This private network uses the ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0 (proof of authority) consensus protocol"}),"."]}),"\n",(0,r.jsxs)(n.admonition,{type:"danger",children:[(0,r.jsx)(n.p,{children:"The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall."}),(0,r.jsx)(n.p,{children:"This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant."})]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:"Curl (or similar webservice client)"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(n.p,{children:"Listed on the right-hand side of the page are the steps to create a private network using IBFT 2.0 with four nodes. The four nodes are all validators."}),"\n",(0,r.jsx)(n.h3,{id:"1-create-directories",children:"1. Create directories"}),"\n",(0,r.jsx)(n.p,{children:"Each node requires a data directory for the blockchain data."}),"\n",(0,r.jsx)(n.p,{children:"Create directories for your private network, each of the four nodes, and a data directory for each node:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"IBFT-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-4\n \u251c\u2500\u2500 data\n"})}),"\n",(0,r.jsx)(n.h3,{id:"2-create-a-configuration-file",children:"2. Create a configuration file"}),"\n",(0,r.jsxs)(n.p,{children:["The configuration file defines the ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"IBFT 2.0 genesis file"})," and the number of node key pairs to generate."]}),"\n",(0,r.jsxs)(n.p,{children:["The configuration file has two nested JSON nodes. The first is the ",(0,r.jsx)(n.code,{children:"genesis"})," property defining the IBFT 2.0 genesis file, except for the ",(0,r.jsx)(n.code,{children:"extraData"})," string, which Besu generates automatically in the resulting genesis file. The second is the ",(0,r.jsx)(n.code,{children:"blockchain"})," property defining the number of key pairs to generate."]}),"\n",(0,r.jsxs)(n.p,{children:["Copy the following configuration file definition to a file called ",(0,r.jsx)(n.code,{children:"ibftConfigFile.json"})," and save it in the ",(0,r.jsx)(n.code,{children:"IBFT-Network"})," directory:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "genesis": {\n "config": {\n "chainId": 1337,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n }\n },\n "nonce": "0x0",\n "timestamp": "0x58ee40ba",\n "gasLimit": "0x47b760",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {\n "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "0xad78ebc5ac6200000"\n },\n "627306090abaB3A6e1400e9345bC60c78a8BEf57": {\n "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n },\n "f17f52151EbEF6C7334FAD080c5704D77216b732": {\n "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n }\n }\n },\n "blockchain": {\n "nodes": {\n "generate": true,\n "count": 4\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["We recommend specifying the latest ",(0,r.jsx)(n.a,{href:"/public-networks/reference/genesis-items#milestone-blocks",children:"milestone"})," when creating the configuration file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Do not use the accounts in ",(0,r.jsx)(n.code,{children:"alloc"})," in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure."]})}),"\n",(0,r.jsx)(n.h3,{id:"3-generate-node-keys-and-a-genesis-file",children:"3. Generate node keys and a genesis file"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"IBFT-Network"})," directory, generate the node key and genesis file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Besu creates the following in the ",(0,r.jsx)(n.code,{children:"networkFiles"})," directory:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"genesis.json"})," - The genesis file including the ",(0,r.jsx)(n.code,{children:"extraData"})," property specifying the four nodes are validators."]}),"\n",(0,r.jsx)(n.li,{children:"A directory for each node named using the node address and containing the public and private key for each node."}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"networkFiles/\n\u251c\u2500\u2500 genesis.json\n\u2514\u2500\u2500 keys\n \u251c\u2500\u2500 0x438821c42b812fecdcea7fe8235806a412712fc0\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xcd5629bd37155608a0c9b28c4fd19310d53b3184\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u2514\u2500\u2500 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a\n \u251c\u2500\u2500 key\n \u2514\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(n.h3,{id:"4-copy-the-genesis-file-to-the-ibft-network-directory",children:"4. Copy the genesis file to the IBFT-Network directory"}),"\n",(0,r.jsxs)(n.p,{children:["Copy the ",(0,r.jsx)(n.code,{children:"genesis.json"})," file to the ",(0,r.jsx)(n.code,{children:"IBFT-Network"})," directory."]}),"\n",(0,r.jsx)(n.h3,{id:"5-copy-the-node-private-keys-to-the-node-directories",children:"5. Copy the node private keys to the node directories"}),"\n",(0,r.jsxs)(n.p,{children:["For each node, copy the key files to the ",(0,r.jsx)(n.code,{children:"data"})," directory for that node"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"IBFT-Network/\n\u251c\u2500\u2500 genesis.json\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-4\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(n.h3,{id:"6-start-the-first-node-as-the-bootnode",children:"6. Start the first node as the bootnode"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"Node-1"})," directory, start Node-1:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Specifies the data directory for Node-1 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["Enables the JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["Enables the ETH, NET, and IBFT APIs using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,r.jsx)(n.code,{children:"--rpc-http-api"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["Enables all-host access to the HTTP JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(n.code,{children:"--host-allowlist"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["Enables all-domain access to the node through the HTTP JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(n.code,{children:"--rpc-http-cors-origins"})})," option."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Node 1 Enode URL",src:t(14739).A+"",width:"988",height:"126"})}),"\n",(0,r.jsx)(n.h3,{id:"7-start-node-2",children:"7. Start Node-2"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-2"})," directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The data directory for Node-2 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 for P2P discovery using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 for HTTP JSON-RPC using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["The enode URL of Node-1 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,r.jsx)(n.code,{children:"--bootnodes"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"8-start-node-3",children:"8. Start Node-3"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-3"})," directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The data directory for Node-3 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 and Node-2 for P2P discovery using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 and Node-2 for HTTP JSON-RPC using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["The bootnode as for ",(0,r.jsx)(n.a,{href:"#7-start-node-2",children:"Node-2"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"9-start-node-4",children:"9. Start Node-4"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-4"})," directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The data directory for Node-4 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1, Node-2, and Node-3 for P2P discovery using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["The bootnode as for ",(0,r.jsx)(n.a,{href:"#7-start-node-2",children:"Node-2"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"10-confirm-the-private-network-is-working",children:"10. Confirm the private network is working"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, use curl to call the JSON-RPC API ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_getvalidatorsbyblocknumber",children:(0,r.jsx)(n.code,{children:"ibft_getvalidatorsbyblocknumber"})})," method and confirm the network has four validators:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' localhost:8545\n'})}),"\n",(0,r.jsx)(n.p,{children:"The result displays the four validators:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x1e326b6da177ede2d3eb6d7247bd9f6901d40234",\n "0x4aaac297fefe4466ebcb0b23ab90c5f466b11556",\n "0xa267ead2e91e1673e0943b925176b51d9cd4f6d2",\n "0xe3e680bc0ff485d1d415a384721f19e0db65fea7"\n ]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Look at the logs to confirm Besu is producing blocks:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2020-12-21 07:22:17.883+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0xde088192f27ca376eea969cb7a4a1de445bd923fde0444194c88e630f7705584) in 0.010s. Peers: 4\n2020-12-21 07:22:19.057+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=2, Round=0}, hash=0x2ca2652fa79ae2b3b6aadcfb13d5d362ffd6207c3b5ae47971e04eb9d05deaa9\n2020-12-21 07:22:21.044+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=3, Round=0}, hash=0x5d9a06cd17127712cfae7d1c25f705f302e146f4b64a73de3c814e1b5a3f9a16\n2020-12-21 07:22:23.049+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=4, Round=0}, hash=0x843981375f4cb2bb0f33a09b647ac27da5df2c539d940d8344c907eede57829c\n2020-12-21 07:22:25.060+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=5, Round=0}, hash=0x82b2069961d9185f7857cad1123de72d715729e122441335db486ea436834d6e\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"info",children:[(0,r.jsxs)(n.p,{children:["If the key files were not copied to the correct directory in ",(0,r.jsx)(n.a,{href:"#5-copy-the-node-private-keys-to-the-node-directories",children:"step 5"}),", the network will not start producing blocks."]}),(0,r.jsxs)(n.p,{children:["The logs for each node should indicate the public key was loaded from the ",(0,r.jsx)(n.code,{children:"data/key"})," directory:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2020-12-21 07:16:18.360+10:00 | main | INFO | KeyPairUtil | Loaded public key 0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc from <path to network>/IBFT-Network/Node-1/data/key\n"})}),(0,r.jsx)(n.p,{children:"If the keys were not copied to the correct directory, Besu creates a key when starting up:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2020-12-21 07:33:11.458+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to <path to network>/IBFT-Network/Node-1/data/key\n"})}),(0,r.jsx)(n.p,{children:"If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks."})]}),"\n",(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#ibft-20-methods",children:"IBFT API"})," to remove or add validators."]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["To add or remove nodes as validators you need the node address. The directory ",(0,r.jsx)(n.a,{href:"#3-generate-node-keys-and-a-genesis-file",children:"created for each node"})," has the node address as the name."]}),(0,r.jsx)(n.p,{children:"This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires four validators to be Byzantine fault tolerant."})]}),"\n",(0,r.jsxs)(n.p,{children:["Import accounts to MetaMask and send transactions as described in the ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Besu doesn't support ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"private key management"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"stop-the-nodes",children:"Stop the nodes"}),"\n",(0,r.jsx)(n.p,{children:"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["To restart the IBFT 2.0 network in the future, start from ",(0,r.jsx)(n.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"6. Start First Node as Bootnode"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"*[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers."})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var r=t(18215);const o={tabItem:"tabItem_Ymn6"};var s=t(74848);function a(e){let{children:n,hidden:t,className:a}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(o.tabItem,a),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>v});var r=t(96540),o=t(18215),s=t(23104),a=t(56347),i=t(205),d=t(57485),c=t(31682),l=t(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:o}}=e;return{value:n,label:t,attributes:r,default:o}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function u(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const o=(0,a.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,d.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(o.location.search);n.set(s,e),o.replace({...o.location,search:n.toString()})}),[s,o])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,s=p(e),[a,d]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!u({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,h]=f({queryString:t,groupId:o}),[b,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,s]=(0,l.Dv)(t);return[o,(0,r.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:o}),g=(()=>{const e=c??b;return u({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{g&&d(g)}),[g]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),x(e)}),[h,x,s]),tabValues:s}}var x=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(74848);function k(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:i}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),l=e=>{const n=e.currentTarget,t=d.indexOf(n),o=i[t].value;o!==r&&(c(n),a(o))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>d.push(e),onKeyDown:h,onClick:l,...s,className:(0,o.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function m(e){let{lazy:n,children:t,selectedValue:s}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function y(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,o.A)("tabs-container",g.tabList),children:[(0,j.jsx)(k,{...n,...e}),(0,j.jsx)(m,{...n,...e})]})}function v(e){const n=(0,x.A)();return(0,j.jsx)(y,{...e,children:h(e.children)},String(n))}},14739:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var r=t(96540);const o={},s=r.createContext(o);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4162.d948d9a1.js b/assets/js/4162.d948d9a1.js new file mode 100644 index 00000000000..608f988d143 --- /dev/null +++ b/assets/js/4162.d948d9a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4162],{75937:(e,t,i)=>{i.d(t,{A:()=>r});var s=i(72453),n=i(74886);const r=(e,t)=>s.A.lang.round(n.A.parse(e)[t])},50053:(e,t,i)=>{i.d(t,{A:()=>n});var s=i(91641);const n=function(e){return(0,s.A)(e,4)}},14162:(e,t,i)=>{i.d(t,{diagram:()=>X});var s,n,r=i(99702),l=i(50053),o=i(75937),a=i(25582),c=i(98055),h=i(697),u=i(26312),d=(i(74353),i(16750),i(42838),function(){var e=function(e,t,i,s){for(i=i||{},s=e.length;s--;i[e[s]]=t);return i},t=[1,7],i=[1,13],s=[1,14],n=[1,15],r=[1,19],l=[1,16],o=[1,17],a=[1,18],c=[8,30],h=[8,21,28,29,30,31,32,40,44,47],u=[1,23],d=[1,24],g=[8,15,16,21,28,29,30,31,32,40,44,47],y=[8,15,16,21,27,28,29,30,31,32,40,44,47],p=[1,49],b={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(e,t,i,s,n,r,l){var o=r.length-1;switch(n){case 4:s.getLogger().debug("Rule: separator (NL) ");break;case 5:s.getLogger().debug("Rule: separator (Space) ");break;case 6:s.getLogger().debug("Rule: separator (EOF) ");break;case 7:s.getLogger().debug("Rule: hierarchy: ",r[o-1]),s.setHierarchy(r[o-1]);break;case 8:s.getLogger().debug("Stop NL ");break;case 9:s.getLogger().debug("Stop EOF ");break;case 10:s.getLogger().debug("Stop NL2 ");break;case 11:s.getLogger().debug("Stop EOF2 ");break;case 12:s.getLogger().debug("Rule: statement: ",r[o]),"number"==typeof r[o].length?this.$=r[o]:this.$=[r[o]];break;case 13:s.getLogger().debug("Rule: statement #2: ",r[o-1]),this.$=[r[o-1]].concat(r[o]);break;case 14:s.getLogger().debug("Rule: link: ",r[o],e),this.$={edgeTypeStr:r[o],label:""};break;case 15:s.getLogger().debug("Rule: LABEL link: ",r[o-3],r[o-1],r[o]),this.$={edgeTypeStr:r[o],label:r[o-1]};break;case 18:const t=parseInt(r[o]),i=s.generateId();this.$={id:i,type:"space",label:"",width:t,children:[]};break;case 23:s.getLogger().debug("Rule: (nodeStatement link node) ",r[o-2],r[o-1],r[o]," typestr: ",r[o-1].edgeTypeStr);const n=s.edgeStrToEdgeData(r[o-1].edgeTypeStr);this.$=[{id:r[o-2].id,label:r[o-2].label,type:r[o-2].type,directions:r[o-2].directions},{id:r[o-2].id+"-"+r[o].id,start:r[o-2].id,end:r[o].id,label:r[o-1].label,type:"edge",directions:r[o].directions,arrowTypeEnd:n,arrowTypeStart:"arrow_open"},{id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions}];break;case 24:s.getLogger().debug("Rule: nodeStatement (abc88 node size) ",r[o-1],r[o]),this.$={id:r[o-1].id,label:r[o-1].label,type:s.typeStr2Type(r[o-1].typeStr),directions:r[o-1].directions,widthInColumns:parseInt(r[o],10)};break;case 25:s.getLogger().debug("Rule: nodeStatement (node) ",r[o]),this.$={id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions,widthInColumns:1};break;case 26:s.getLogger().debug("APA123",this?this:"na"),s.getLogger().debug("COLUMNS: ",r[o]),this.$={type:"column-setting",columns:"auto"===r[o]?-1:parseInt(r[o])};break;case 27:s.getLogger().debug("Rule: id-block statement : ",r[o-2],r[o-1]),s.generateId(),this.$={...r[o-2],type:"composite",children:r[o-1]};break;case 28:s.getLogger().debug("Rule: blockStatement : ",r[o-2],r[o-1],r[o]);const l=s.generateId();this.$={id:l,type:"composite",label:"",children:r[o-1]};break;case 29:s.getLogger().debug("Rule: node (NODE_ID separator): ",r[o]),this.$={id:r[o]};break;case 30:s.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",r[o-1],r[o]),this.$={id:r[o-1],label:r[o].label,typeStr:r[o].typeStr,directions:r[o].directions};break;case 31:s.getLogger().debug("Rule: dirList: ",r[o]),this.$=[r[o]];break;case 32:s.getLogger().debug("Rule: dirList: ",r[o-1],r[o]),this.$=[r[o-1]].concat(r[o]);break;case 33:s.getLogger().debug("Rule: nodeShapeNLabel: ",r[o-2],r[o-1],r[o]),this.$={typeStr:r[o-2]+r[o],label:r[o-1]};break;case 34:s.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",r[o-3],r[o-2]," #3:",r[o-1],r[o]),this.$={typeStr:r[o-3]+r[o],label:r[o-2],directions:r[o-1]};break;case 35:case 36:this.$={type:"classDef",id:r[o-1].trim(),css:r[o].trim()};break;case 37:this.$={type:"applyClass",id:r[o-1].trim(),styleClass:r[o].trim()};break;case 38:this.$={type:"applyStyles",id:r[o-1].trim(),stylesStr:r[o].trim()}}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{8:[1,20]},e(c,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:t,28:i,29:s,31:n,32:r,40:l,44:o,47:a}),e(h,[2,16],{14:22,15:u,16:d}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(g,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,32:r},{11:27,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(y,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(c,[2,13]),{26:35,32:r},{32:[2,14]},{17:[1,36]},e(g,[2,24]),{11:37,13:4,14:22,15:u,16:d,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(y,[2,30]),{18:[1,43]},{18:[1,44]},e(g,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{37:[1,47]},{34:48,35:p},{15:[1,50]},e(h,[2,27]),e(y,[2,33]),{39:[1,51]},{34:52,35:p,39:[2,31]},{32:[2,15]},e(y,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},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],s=[],n=[null],r=[],l=this.table,o="",a=0,c=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(d.yy[g]=this.yy[g]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var p=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,x,L,S,f,m,_,k,E,w={};;){if(x=i[i.length-1],this.defaultActions[x]?L=this.defaultActions[x]:(null==b&&(E=void 0,"number"!=typeof(E=s.pop()||u.lex()||1)&&(E instanceof Array&&(E=(s=E).pop()),E=t.symbols_[E]||E),b=E),L=l[x]&&l[x][b]),void 0===L||!L.length||!L[0]){var v="";for(f in k=[],l[x])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");v=u.showPosition?"Parse error on line "+(a+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(v,{text:u.match,token:this.terminals_[b]||b,line:u.yylineno,loc:y,expected:k})}if(L[0]instanceof Array&&L.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+b);switch(L[0]){case 1:i.push(b),n.push(u.yytext),r.push(u.yylloc),i.push(L[1]),b=null,c=u.yyleng,o=u.yytext,a=u.yylineno,y=u.yylloc;break;case 2:if(m=this.productions_[L[1]][1],w.$=n[n.length-m],w._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},p&&(w._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(S=this.performAction.apply(w,[o,c,a,d.yy,L[1],n,r].concat(h))))return S;m&&(i=i.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),i.push(this.productions_[L[1]][0]),n.push(w.$),r.push(w._$),_=l[i[i.length-2]][i[i.length-1]],i.push(_);break;case 3:return!0}}return!0}},x={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 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-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,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=e[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+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 r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((i=this._input.match(this.rules[n[r]]))&&(!t||i[0].length>t[0].length)){if(t=i,s=r,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[r])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[s]))&&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:{},performAction:function(e,t,i,s){switch(i){case 0:return 10;case 1:return e.getLogger().debug("Found space-block"),31;case 2:return e.getLogger().debug("Found nl-block"),31;case 3:return e.getLogger().debug("Found space-block"),29;case 4:e.getLogger().debug(".",t.yytext);break;case 5:e.getLogger().debug("_",t.yytext);break;case 6:return 5;case 7:return t.yytext=-1,28;case 8:return t.yytext=t.yytext.replace(/columns\s+/,""),e.getLogger().debug("COLUMNS (LEX)",t.yytext),28;case 9:case 77:case 78:case 100:this.pushState("md_string");break;case 10:return"MD_STR";case 11:case 35:case 80:this.popState();break;case 12:this.pushState("string");break;case 13:e.getLogger().debug("LEX: POPPING STR:",t.yytext),this.popState();break;case 14:return e.getLogger().debug("LEX: STR end:",t.yytext),"STR";case 15:return t.yytext=t.yytext.replace(/space\:/,""),e.getLogger().debug("SPACE NUM (LEX)",t.yytext),21;case 16:return t.yytext="1",e.getLogger().debug("COLUMNS (LEX)",t.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:case 39:case 41:case 42:case 45:return this.popState(),e.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),e.getLogger().debug("Lex: ))"),"NODE_DEND";case 43:return this.popState(),e.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),e.getLogger().debug("Lex: -)"),"NODE_DEND";case 46:return this.popState(),e.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),e.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),e.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:case 50:return this.popState(),e.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),e.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),e.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),e.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),e.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return e.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return e.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return e.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:case 60:case 61:case 62:case 65:return e.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return e.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 63:return e.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return e.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 66:case 67:case 68:case 69:case 70:case 71:case 72:return this.pushState("NODE"),36;case 73:return e.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),e.getLogger().debug("LEX ARR START"),38;case 75:return e.getLogger().debug("Lex: NODE_ID",t.yytext),32;case 76:return e.getLogger().debug("Lex: EOF",t.yytext),8;case 79:return"NODE_DESCR";case 81:e.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:e.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return e.getLogger().debug("LEX: NODE_DESCR:",t.yytext),"NODE_DESCR";case 84:e.getLogger().debug("LEX POPPING"),this.popState();break;case 85:e.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (right): dir:",t.yytext),"DIR";case 87:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (left):",t.yytext),"DIR";case 88:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (x):",t.yytext),"DIR";case 89:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (y):",t.yytext),"DIR";case 90:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (up):",t.yytext),"DIR";case 91:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (down):",t.yytext),"DIR";case 92:return t.yytext="]>",e.getLogger().debug("Lex (ARROW_DIR end):",t.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 94:case 95:case 96:return e.getLogger().debug("Lex: LINK",t.yytext),15;case 97:case 98:case 99:return e.getLogger().debug("Lex: START_LINK",t.yytext),this.pushState("LLABEL"),16;case 101:return e.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 103:case 104:return this.popState(),e.getLogger().debug("Lex: LINK",t.yytext),15;case 105:return e.getLogger().debug("Lex: COLON",t.yytext),t.yytext=t.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};function L(){this.yy={}}return b.lexer=x,L.prototype=b,b.Parser=L,new L}());d.parser=d;const g=d;let y={},p=[],b={};const x="color",L="fill",S=(0,r.c)();let f={};const m=function(e,t=""){void 0===f[e]&&(f[e]={id:e,styles:[],textStyles:[]});const i=f[e];null!=t&&t.split(",").forEach((e=>{const t=e.replace(/([^;]*);/,"$1").trim();if(e.match(x)){const e=t.replace(L,"bgFill").replace(x,L);i.textStyles.push(e)}i.styles.push(t)}))},_=function(e,t=""){const i=y[e];null!=t&&(i.styles=t.split(","))},k=function(e,t){e.split(",").forEach((function(e){let i=y[e];if(void 0===i){const t=e.trim();y[t]={id:t,type:"na",children:[]},i=y[t]}i.classes||(i.classes=[]),i.classes.push(t)}))},E=(e,t)=>{const i=e.flat(),s=[];for(const o of i)if(o.label&&(o.label=(n=o.label,r.e.sanitizeText(n,S))),"classDef"!==o.type)if("applyClass"!==o.type)if("applyStyles"!==o.type)if("column-setting"===o.type)t.columns=o.columns||-1;else if("edge"===o.type)b[o.id]?b[o.id]++:b[o.id]=1,o.id=b[o.id]+"-"+o.id,p.push(o);else{o.label||("composite"===o.type?o.label="":o.label=o.id);const e=!y[o.id];if(e?y[o.id]=o:("na"!==o.type&&(y[o.id].type=o.type),o.label!==o.id&&(y[o.id].label=o.label)),o.children&&E(o.children,o),"space"===o.type){const e=o.width||1;for(let t=0;t<e;t++){const e=(0,l.A)(o);e.id=e.id+"-"+t,y[e.id]=e,s.push(e)}}else e&&s.push(o)}else(null==o?void 0:o.stylesStr)&&_(o.id,null==o?void 0:o.stylesStr);else k(o.id,(null==o?void 0:o.styleClass)||"");else m(o.id,o.css);var n;t.children=s};let w=[],v={id:"root",type:"composite",children:[],columns:-1};let D=0;const $={getConfig:()=>(0,r.F)().block,typeStr2Type:function(e){switch(r.l.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return r.l.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}},edgeTypeStr2Type:function(e){return r.l.debug("typeStr2Type",e),"=="===e?"thick":"normal"},edgeStrToEdgeData:function(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}},getLogger:()=>console,getBlocksFlat:()=>[...Object.values(y)],getBlocks:()=>w||[],getEdges:()=>p,setHierarchy:e=>{v.children=e,E(e,v),w=v.children},getBlock:e=>y[e],setBlock:e=>{y[e.id]=e},getColumns:e=>{const t=y[e];return t?t.columns?t.columns:t.children?t.children.length:-1:-1},getClasses:function(){return f},clear:()=>{r.l.debug("Clear called"),(0,r.v)(),v={id:"root",type:"composite",children:[],columns:-1},y={root:v},w=[],f={},p=[],b={}},generateId:()=>(D++,"id-"+Math.random().toString(36).substr(2,12)+"-"+D)},N=(e,t)=>{const i=o.A,s=i(e,"r"),n=i(e,"g"),r=i(e,"b");return a.A(s,n,r,t)},I=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\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 /* For html labels only */\n .labelBkg {\n background-color: ${N(e.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${N(e.mainBkg,.5)};\n fill: ${N(e.clusterBkg,.5)};\n stroke: ${N(e.clusterBorder,.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\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`;function T(e,t,i=!1){var s,n,l;const o=e;let a="default";((null==(s=null==o?void 0:o.classes)?void 0:s.length)||0)>0&&(a=((null==o?void 0:o.classes)||[]).join(" ")),a+=" flowchart-label";let c,h=0,u="";switch(o.type){case"round":h=5,u="rect";break;case"composite":h=0,u="composite",c=0;break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"block_arrow":u="block_arrow";break;case"odd":case"rect_left_inv_arrow":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"}const d=(0,r.k)((null==o?void 0:o.styles)||[]),g=o.label,y=o.size||{width:0,height:0,x:0,y:0};return{labelStyle:d.labelStyle,shape:u,labelText:g,rx:h,ry:h,class:a,style:d.style,id:o.id,directions:o.directions,width:y.width,height:y.height,x:y.x,y:y.y,positioned:i,intersect:void 0,type:o.type,padding:c??((null==(l=null==(n=(0,r.F)())?void 0:n.block)?void 0:l.padding)||0)}}async function z(e,t,i){const s=T(t,0,!1);if("group"===s.type)return;const n=await(0,c.e)(e,s),r=n.node().getBBox(),l=i.getBlock(s.id);l.size={width:r.width,height:r.height,x:0,y:0,node:n},i.setBlock(l),n.remove()}async function A(e,t,i){const s=T(t,0,!0);"space"!==i.getBlock(s.id).type&&(await(0,c.e)(e,s),t.intersect=null==s?void 0:s.intersect,(0,c.p)(s))}async function C(e,t,i,s){for(const n of t)await s(e,n,i),n.children&&await C(e,n.children,i,s)}const O=(null==(n=null==(s=(0,r.c)())?void 0:s.block)?void 0:n.padding)||8;function R(e,t){if(0===e||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(1===e)return{px:0,py:t};return{px:t%e,py:Math.floor(t/e)}}const B=e=>{let t=0,i=0;for(const s of e.children){const{width:n,height:l,x:o,y:a}=s.size||{width:0,height:0,x:0,y:0};r.l.debug("getMaxChildSize abc95 child:",s.id,"width:",n,"height:",l,"x:",o,"y:",a,s.type),"space"!==s.type&&(n>t&&(t=n/(e.widthInColumns||1)),l>i&&(i=l))}return{width:t,height:i}};function F(e,t,i=0,s=0){var n,l,o,a,c,h,u,d,g,y,p;r.l.debug("setBlockSizes abc95 (start)",e.id,null==(n=null==e?void 0:e.size)?void 0:n.x,"block width =",null==e?void 0:e.size,"sieblingWidth",i),(null==(l=null==e?void 0:e.size)?void 0:l.width)||(e.size={width:i,height:s,x:0,y:0});let b=0,x=0;if((null==(o=e.children)?void 0:o.length)>0){for(const i of e.children)F(i,t);const n=B(e);b=n.width,x=n.height,r.l.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",b,x);for(const t of e.children)t.size&&(r.l.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${b} ${x} ${t.size}`),t.size.width=b*(t.widthInColumns||1)+O*((t.widthInColumns||1)-1),t.size.height=x,t.size.x=0,t.size.y=0,r.l.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${b} maxHeight:${x}`));for(const i of e.children)F(i,t,b,x);const l=e.columns||-1;let o=0;for(const t of e.children)o+=t.widthInColumns||1;let d=e.children.length;l>0&&l<o&&(d=l),e.widthInColumns;const g=Math.ceil(o/d);let y=d*(b+O)+O,p=g*(x+O)+O;if(y<i){r.l.debug(`Detected to small siebling: abc95 ${e.id} sieblingWidth ${i} sieblingHeight ${s} width ${y}`),y=i,p=s;const t=(i-d*O-O)/d,n=(s-g*O-O)/g;r.l.debug("Size indata abc88",e.id,"childWidth",t,"maxWidth",b),r.l.debug("Size indata abc88",e.id,"childHeight",n,"maxHeight",x),r.l.debug("Size indata abc88 xSize",d,"padding",O);for(const i of e.children)i.size&&(i.size.width=t,i.size.height=n,i.size.x=0,i.size.y=0)}if(r.l.debug(`abc95 (finale calc) ${e.id} xSize ${d} ySize ${g} columns ${l}${e.children.length} width=${Math.max(y,(null==(a=e.size)?void 0:a.width)||0)}`),y<((null==(c=null==e?void 0:e.size)?void 0:c.width)||0)){y=(null==(h=null==e?void 0:e.size)?void 0:h.width)||0;const t=l>0?Math.min(e.children.length,l):e.children.length;if(t>0){const i=(y-t*O-O)/t;r.l.debug("abc95 (growing to fit) width",e.id,y,null==(u=e.size)?void 0:u.width,i);for(const t of e.children)t.size&&(t.size.width=i)}}e.size={width:y,height:p,x:0,y:0}}r.l.debug("setBlockSizes abc94 (done)",e.id,null==(d=null==e?void 0:e.size)?void 0:d.x,null==(g=null==e?void 0:e.size)?void 0:g.width,null==(y=null==e?void 0:e.size)?void 0:y.y,null==(p=null==e?void 0:e.size)?void 0:p.height)}function P(e,t){var i,s,n,l,o,a,c,h,u,d,g,y,p,b,x,L,S;r.l.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${null==(i=null==e?void 0:e.size)?void 0:i.x} y: ${null==(s=null==e?void 0:e.size)?void 0:s.y} width: ${null==(n=null==e?void 0:e.size)?void 0:n.width}`);const f=e.columns||-1;if(r.l.debug("layoutBlocks columns abc95",e.id,"=>",f,e),e.children&&e.children.length>0){const t=(null==(o=null==(l=null==e?void 0:e.children[0])?void 0:l.size)?void 0:o.width)||0,i=e.children.length*t+(e.children.length-1)*O;r.l.debug("widthOfChildren 88",i,"posX");let s=0;r.l.debug("abc91 block?.size?.x",e.id,null==(a=null==e?void 0:e.size)?void 0:a.x);let n=(null==(c=null==e?void 0:e.size)?void 0:c.x)?(null==(h=null==e?void 0:e.size)?void 0:h.x)+(-(null==(u=null==e?void 0:e.size)?void 0:u.width)/2||0):-O,x=0;for(const l of e.children){const t=e;if(!l.size)continue;const{width:i,height:o}=l.size,{px:a,py:c}=R(f,s);if(c!=x&&(x=c,n=(null==(d=null==e?void 0:e.size)?void 0:d.x)?(null==(g=null==e?void 0:e.size)?void 0:g.x)+(-(null==(y=null==e?void 0:e.size)?void 0:y.width)/2||0):-O,r.l.debug("New row in layout for block",e.id," and child ",l.id,x)),r.l.debug(`abc89 layout blocks (child) id: ${l.id} Pos: ${s} (px, py) ${a},${c} (${null==(p=null==t?void 0:t.size)?void 0:p.x},${null==(b=null==t?void 0:t.size)?void 0:b.y}) parent: ${t.id} width: ${i}${O}`),t.size){const e=i/2;l.size.x=n+O+e,r.l.debug(`abc91 layout blocks (calc) px, pyid:${l.id} startingPos=X${n} new startingPosX${l.size.x} ${e} padding=${O} width=${i} halfWidth=${e} => x:${l.size.x} y:${l.size.y} ${l.widthInColumns} (width * (child?.w || 1)) / 2 ${i*((null==l?void 0:l.widthInColumns)||1)/2}`),n=l.size.x+e,l.size.y=t.size.y-t.size.height/2+c*(o+O)+o/2+O,r.l.debug(`abc88 layout blocks (calc) px, pyid:${l.id}startingPosX${n}${O}${e}=>x:${l.size.x}y:${l.size.y}${l.widthInColumns}(width * (child?.w || 1)) / 2${i*((null==l?void 0:l.widthInColumns)||1)/2}`)}l.children&&P(l),s+=(null==l?void 0:l.widthInColumns)||1,r.l.debug("abc88 columnsPos",l,s)}}r.l.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${null==(x=null==e?void 0:e.size)?void 0:x.x} y: ${null==(L=null==e?void 0:e.size)?void 0:L.y} width: ${null==(S=null==e?void 0:e.size)?void 0:S.width}`)}function Y(e,{minX:t,minY:i,maxX:s,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&"root"!==e.id){const{x:r,y:l,width:o,height:a}=e.size;r-o/2<t&&(t=r-o/2),l-a/2<i&&(i=l-a/2),r+o/2>s&&(s=r+o/2),l+a/2>n&&(n=l+a/2)}if(e.children)for(const r of e.children)({minX:t,minY:i,maxX:s,maxY:n}=Y(r,{minX:t,minY:i,maxX:s,maxY:n}));return{minX:t,minY:i,maxX:s,maxY:n}}function K(e){const t=e.getBlock("root");if(!t)return;F(t,e,0,0),P(t),r.l.debug("getBlocks",JSON.stringify(t,null,2));const{minX:i,minY:s,maxX:n,maxY:l}=Y(t);return{x:i,y:s,width:n-i,height:l-s}}const X={parser:g,db:$,renderer:{draw:async function(e,t,i,s){const{securityLevel:n,block:l}=(0,r.F)(),o=s.db;let a;"sandbox"===n&&(a=(0,u.Ltv)("#i"+t));const d="sandbox"===n?(0,u.Ltv)(a.nodes()[0].contentDocument.body):(0,u.Ltv)("body"),g="sandbox"===n?d.select(`[id="${t}"]`):(0,u.Ltv)(`[id="${t}"]`);(0,c.a)(g,["point","circle","cross"],s.type,t);const y=o.getBlocks(),p=o.getBlocksFlat(),b=o.getEdges(),x=g.insert("g").attr("class","block");await async function(e,t,i){await C(e,t,i,z)}(x,y,o);const L=K(o);if(await async function(e,t,i){await C(e,t,i,A)}(x,y,o),await async function(e,t,i,s,n){const r=new h.T({multigraph:!0,compound:!0});r.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const l of i)l.size&&r.setNode(l.id,{width:l.size.width,height:l.size.height,intersect:l.intersect});for(const l of t)if(l.start&&l.end){const t=s.getBlock(l.start),i=s.getBlock(l.end);if((null==t?void 0:t.size)&&(null==i?void 0:i.size)){const s=t.size,o=i.size,a=[{x:s.x,y:s.y},{x:s.x+(o.x-s.x)/2,y:s.y+(o.y-s.y)/2},{x:o.x,y:o.y}];await(0,c.h)(e,{v:l.start,w:l.end,name:l.id},{...l,arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",r,n),l.label&&(await(0,c.f)(e,{...l,label:l.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await(0,c.j)({...l,x:a[1].x,y:a[1].y},{originalPath:a}))}}}(x,b,p,o,t),L){const e=L,t=Math.max(1,Math.round(e.width/e.height*.125)),i=e.height+t+10,s=e.width+10,{useMaxWidth:n}=l;(0,r.i)(g,i,s,!!n),r.l.debug("Here Bounds",L,e),g.attr("viewBox",`${e.x-5} ${e.y-5} ${e.width+10} ${e.height+10}`)}(0,u.UMr)(u.zt)},getClasses:function(e,t){return t.db.getClasses()}},styles:I}}}]); \ No newline at end of file diff --git a/assets/js/43d83ec4.e7e0e97f.js b/assets/js/43d83ec4.e7e0e97f.js new file mode 100644 index 00000000000..204c984d7b3 --- /dev/null +++ b/assets/js/43d83ec4.e7e0e97f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4029],{95402:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>h});var s=n(74848),o=n(28453);const i={sidebar_position:4,title:"Use Ethstats network monitor",description:"Ethstats network monitor",tags:["private networks"]},r="Connect to Ethstats network monitor",a={id:"private-networks/how-to/deploy/ethstats",title:"Use Ethstats network monitor",description:"Ethstats network monitor",source:"@site/docs/private-networks/how-to/deploy/ethstats.md",sourceDirName:"private-networks/how-to/deploy",slug:"/private-networks/how-to/deploy/ethstats",permalink:"/private-networks/how-to/deploy/ethstats",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/deploy/ethstats.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Use Ethstats network monitor",description:"Ethstats network monitor",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Kubernetes",permalink:"/private-networks/how-to/deploy/kubernetes"},next:{title:"Backup and restore",permalink:"/private-networks/how-to/backup"}},c={},h=[{value:"Components",id:"components",level:2},{value:"Statistics",id:"statistics",level:2},{value:"Connect through a client and server",id:"connect-through-a-client-and-server",level:2},{value:"Connect through the command line",id:"connect-through-the-command-line",level:2}];function d(t){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"connect-to-ethstats-network-monitor",children:"Connect to Ethstats network monitor"})}),"\n",(0,s.jsxs)(e.p,{children:["Connect to ",(0,s.jsx)(e.a,{href:"https://ethstats.dev",children:"Ethstats"})," to display real time and historical ",(0,s.jsx)(e.a,{href:"#statistics",children:"statistics"})," about the network and nodes. You can connect to the Ethstats dashboard by ",(0,s.jsx)(e.a,{href:"#connect-through-a-client-and-server",children:"connecting to a client and server"})," or by ",(0,s.jsx)(e.a,{href:"#connect-through-the-command-line",children:"connecting through the command line"}),"."]}),"\n",(0,s.jsx)(e.h2,{id:"components",children:"Components"}),"\n",(0,s.jsx)(e.p,{children:"Ethstats consists of:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["A ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-server",children:"server"}),", which consumes node data received from the client."]}),"\n",(0,s.jsxs)(e.li,{children:["A ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-client",children:"client"}),", which extracts data from the node and sends it to the server."]}),"\n",(0,s.jsxs)(e.li,{children:["A ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-client#available-dashboards",children:"dashboard"}),", which displays statistics."]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"statistics",children:"Statistics"}),"\n",(0,s.jsx)(e.p,{children:"Statistics displayed by Ethstats include:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Nodes in the network. Metrics for nodes include:","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Information about the last received block such as block number, block hash, transaction count, uncle count, block time, and propagation time."}),"\n",(0,s.jsx)(e.li,{children:"Connected peers, whether the node is mining, hash rate, latency, and uptime."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(e.li,{children:"Charts for block time, block difficulty, block gas limit, block uncles, block transactions, block gas used, block propagation histogram, and top miners."}),"\n",(0,s.jsx)(e.li,{children:"IP-based geolocation overview."}),"\n",(0,s.jsx)(e.li,{children:"Node logs, which display the data sent by a node."}),"\n",(0,s.jsx)(e.li,{children:"Block history, which provides the ability to go back in time and playback the block propagation through the nodes."}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"connect-through-a-client-and-server",children:"Connect through a client and server"}),"\n",(0,s.jsxs)(e.p,{children:["Refer to the external ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-client",children:"Ethstats client"})," and ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-server",children:"Ethstats server"})," documentation for installing those components and connecting to a dashboard."]}),"\n",(0,s.jsx)(e.h2,{id:"connect-through-the-command-line",children:"Connect through the command line"}),"\n",(0,s.jsxs)(e.p,{children:["You can use command line options to connect a node directly to a ",(0,s.jsx)(e.a,{href:"https://github.com/goerli/ethstats-client#available-dashboards",children:"dashboard"}),", without using a client."]}),"\n",(0,s.jsxs)(e.p,{children:["Start a node using the ",(0,s.jsx)(e.a,{href:"/public-networks/reference/cli/options#ethstats",children:(0,s.jsx)(e.code,{children:"--ethstats"})})," option to specify the Ethstats server URL. You can specify a contact email to send to the server using ",(0,s.jsx)(e.a,{href:"/public-networks/reference/cli/options#ethstats-contact",children:(0,s.jsx)(e.code,{children:"--ethstats-contact"})}),"."]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:"besu --ethstats=Dev-Node-1:secret@127.0.0.1:3001 --ethstats-contact=contact@mail.com\n"})}),"\n",(0,s.jsx)(e.admonition,{type:"note",children:(0,s.jsxs)(e.p,{children:["A server must be specified by ",(0,s.jsx)(e.code,{children:"--ethstats"})," in order to use ",(0,s.jsx)(e.code,{children:"--ethstats-contact"}),"."]})}),"\n",(0,s.jsx)(e.p,{children:"Open the selected dashboard website. Find your node under the list of nodes to see the statistics for the node and the network."}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"dashboard",src:n(14407).A+"",width:"2636",height:"1874"})})]})}function l(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(d,{...t})}):d(t)}},14407:(t,e,n)=>{n.d(e,{A:()=>s});const s=n.p+"assets/images/dashboard-62de99e929247a02f835d87c68166f76.png"},28453:(t,e,n)=>{n.d(e,{R:()=>r,x:()=>a});var s=n(96540);const o={},i=s.createContext(o);function r(t){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:r(t.components),s.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/46ff6f7b.f215fe24.js b/assets/js/46ff6f7b.f215fe24.js new file mode 100644 index 00000000000..5ce132adac3 --- /dev/null +++ b/assets/js/46ff6f7b.f215fe24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7738],{82557:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>h,contentTitle:()=>o,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var r=i(74848),s=i(28453);const t={title:"Configure mining",sidebar_position:1,description:"Using Besu for PoW CPU mining",tags:["public networks","private networks"]},o="Configure mining",c={id:"public-networks/how-to/use-pow/mining",title:"Configure mining",description:"Using Besu for PoW CPU mining",source:"@site/docs/public-networks/how-to/use-pow/mining.md",sourceDirName:"public-networks/how-to/use-pow",slug:"/public-networks/how-to/use-pow/mining",permalink:"/public-networks/how-to/use-pow/mining",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-pow/mining.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Configure mining",sidebar_position:1,description:"Using Besu for PoW CPU mining",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use client libraries",permalink:"/public-networks/how-to/develop/client-libraries"},next:{title:"Upgrade Besu",permalink:"/public-networks/how-to/upgrade-node"}},h={},a=[{value:"Configure CPU mining",id:"configure-cpu-mining",level:2},{value:"Configure GPU mining",id:"configure-gpu-mining",level:2},{value:"Mining APIs",id:"mining-apis",level:2},{value:"Troubleshoot",id:"troubleshoot",level:2},{value:"Check block creation",id:"check-block-creation",level:3},{value:"No mined transactions",id:"no-mined-transactions",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"configure-mining",children:"Configure mining"})}),"\n",(0,r.jsx)(n.p,{children:"Besu supports CPU and GPU mining, which are configured using command line options."}),"\n",(0,r.jsxs)(n.p,{children:["GPU mining tests used ",(0,r.jsx)(n.a,{href:"https://github.com/ethereum-mining/ethminer",children:"Ethminer"})," with the ",(0,r.jsx)(n.code,{children:"stratum+tcp"})," and ",(0,r.jsx)(n.code,{children:"getwork"})," schemes."]}),"\n",(0,r.jsx)(n.p,{children:"Ethminer has been used with Besu to mine blocks on the Ropsten testnet, ETC Mainnet (uncle block only) and Mordor ETC testnet."}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Some mining software supports the ",(0,r.jsx)(n.code,{children:"getwork"})," scheme as the ",(0,r.jsx)(n.code,{children:"http"})," scheme."]}),"\n",(0,r.jsx)(n.li,{children:"The Ropsten testnet is now deprecated. It transitioned to proof of stake consensus before deprecation."}),"\n"]})}),"\n",(0,r.jsx)(n.h2,{id:"configure-cpu-mining",children:"Configure CPU mining"}),"\n",(0,r.jsx)(n.p,{children:"To enable CPU mining, start Besu with the following options:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --rpc-http-api=ETH,MINER --miner-enabled --miner-coinbase=<account>\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Where ",(0,r.jsx)(n.code,{children:"<account>"})," is the account you pay mining rewards to. For example, ",(0,r.jsx)(n.code,{children:"fe3b557e8fb62b89f4916b721be55ceb828dbd73"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Start and stop mining using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_start",children:(0,r.jsx)(n.code,{children:"miner_start"})})," and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_stop",children:(0,r.jsx)(n.code,{children:"miner_stop"})})," APIs."]}),"\n",(0,r.jsx)(n.h2,{id:"configure-gpu-mining",children:"Configure GPU mining"}),"\n",(0,r.jsxs)(n.p,{children:["Besu supports GPU mining, tested using ",(0,r.jsx)(n.a,{href:"https://github.com/ethereum-mining/ethminer",children:"Ethminer"})," with the ",(0,r.jsx)(n.code,{children:"stratum+tcp"})," scheme."]}),"\n",(0,r.jsx)(n.p,{children:"To enable GPU mining, start Besu with the following options:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --rpc-http-api=ETH,MINER --miner-enabled --miner-stratum-enabled --miner-coinbase=<account>\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Where ",(0,r.jsx)(n.code,{children:"<account>"})," is the account you pay mining rewards to. For example, ",(0,r.jsx)(n.code,{children:"fe3b557e8fb62b89f4916b721be55ceb828dbd73"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Optional command line options are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-stratum-host",children:(0,r.jsx)(n.code,{children:"--miner-stratum-host"})})," to specify the host of the mining service."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-stratum-port",children:(0,r.jsx)(n.code,{children:"--miner-stratum-port"})})," to specify the port of the mining service."]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["Besu also supports the ",(0,r.jsx)(n.code,{children:"getwork"})," scheme. Use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-stratum-enabled",children:(0,r.jsx)(n.code,{children:"--miner-stratum-enabled"})})," option and ",(0,r.jsxs)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:["enable the ",(0,r.jsx)(n.code,{children:"ETH"})," RPCs"]}),"."]}),(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"getwork"})," scheme is supported as the ",(0,r.jsx)(n.code,{children:"http"})," scheme in certain mining software."]})]}),"\n",(0,r.jsxs)(n.p,{children:["Start and stop mining using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_start",children:(0,r.jsx)(n.code,{children:"miner_start"})})," and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_stop",children:(0,r.jsx)(n.code,{children:"miner_stop"})})," APIs."]}),"\n",(0,r.jsx)(n.h2,{id:"mining-apis",children:"Mining APIs"}),"\n",(0,r.jsx)(n.p,{children:"The JSON-RPC API methods for mining are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_start",children:(0,r.jsx)(n.code,{children:"miner_start"})})," to start mining."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#miner_stop",children:(0,r.jsx)(n.code,{children:"miner_stop"})})," to stop mining."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_mining",children:(0,r.jsx)(n.code,{children:"eth_mining"})})," to determine whether the client is actively mining new blocks."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getminerdatabyblockhash",children:(0,r.jsx)(n.code,{children:"eth_getMinerDataByBlockHash"})})," and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getminerdatabyblocknumber",children:(0,r.jsx)(n.code,{children:"eth_getMinerDataByBlockNumber"})})," to get the miner data for a specified block."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_hashrate",children:(0,r.jsx)(n.code,{children:"eth_hashrate"})})," to get the number of hashes per second with which the node is mining. Not supported for GPU mining."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getwork",children:(0,r.jsx)(n.code,{children:"eth_getWork"})})," to get the hash of the current block, the seed hash, and the target boundary condition. Only used when using the ",(0,r.jsx)(n.code,{children:"getwork"})," scheme."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_submitwork",children:(0,r.jsx)(n.code,{children:"eth_submitWork"})})," to submit the PoW solution. Only used when using the ",(0,r.jsx)(n.code,{children:"getwork"})," scheme."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"troubleshoot",children:"Troubleshoot"}),"\n",(0,r.jsx)(n.h3,{id:"check-block-creation",children:"Check block creation"}),"\n",(0,r.jsx)(n.p,{children:"On mining nodes, log messages indicate block creation."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2019-05-08 20:28:27.026+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=660, Round=0}, hash=0x759afaba4e923d89175d850ceca4b8ef81f7d9c727b0b0b8e714b624a4b8e8cc\n2019-05-08 20:28:29.020+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=661, Round=0}, hash=0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14\n"})}),"\n",(0,r.jsx)(n.p,{children:"On non-mining nodes, log messages indicate importing blocks."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2019-05-08 20:28:29.026+10:00 | EthScheduler-Workers-1 | INFO | BlockPropagationManager | Imported #661 / 0 tx / 0 om / 0 (0.0%) gas / (0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14) in 0.000s.\n2019-05-08 20:28:31.031+10:00 | EthScheduler-Workers-0 | INFO | BlockPropagationManager | Imported #662 / 0 tx / 0 om / 0 (0.0%) gas / (0x0ead4e20123d3f1433d8dec894fcce386da4049819b24b309963ce7a8a0fcf03) in 0.000s.\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To confirm the block number is increasing, use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_blocknumber",children:(0,r.jsx)(n.code,{children:"eth_blockNumber"})})," JSON-RPC API method."]}),"\n",(0,r.jsxs)(n.p,{children:["If there's no block creation in ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique#extra-data",children:"Clique"})," or ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#extra-data",children:"IBFT 2.0"})," networks, ensure the validator addresses in the genesis file match running nodes."]}),"\n",(0,r.jsx)(n.h3,{id:"no-mined-transactions",children:"No mined transactions"}),"\n",(0,r.jsxs)(n.p,{children:["If you add a transaction to the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"})," and the transaction hash returns, but the transaction is never mined, check the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,r.jsx)(n.code,{children:"--min-gas-price"})})," option on mining nodes. If the ",(0,r.jsx)(n.code,{children:"gasPrice"})," on a ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"transaction"})," is lower than the ",(0,r.jsx)(n.code,{children:"min-gas-price"})," for the mining node, the transaction will never mine."]}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas networks"}),", you must set ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,r.jsx)(n.code,{children:"--min-gas-price"})})," to zero."]})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>c});var r=i(96540);const s={},t=r.createContext(s);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4741.a4c1664e.js b/assets/js/4741.a4c1664e.js new file mode 100644 index 00000000000..355eae9ac2a --- /dev/null +++ b/assets/js/4741.a4c1664e.js @@ -0,0 +1 @@ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4741],{62954:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,o){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}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,o=e.algorithms,u=void 0===o?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:o,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:u}).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,o=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:o}}):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&&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&&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 o(){}function u(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function m(){}function v(){}function k(){}function y(){}function M(){}function T(){}function j(){}function E(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function L(){}function N(){}function $(){}function D(){}function x(){}function R(){}function K(){}function F(){}function _(){}function B(){}function H(){}function U(){}function G(){}function q(){}function X(){}function z(){}function V(){}function W(){}function Q(){}function J(){}function Y(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function on(){}function un(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function mn(){}function vn(){}function kn(){}function yn(){}function Mn(){}function Tn(){}function jn(){}function En(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function Ln(){}function Nn(){}function $n(){}function Dn(){}function xn(){}function Rn(){}function Kn(){}function Fn(){}function _n(){}function Bn(){}function Hn(){}function Un(){}function Gn(){}function qn(){}function Xn(){}function zn(){}function Vn(){}function Wn(){}function Qn(){}function Jn(){}function Yn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ot(){}function ut(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function mt(){}function vt(){}function kt(){}function yt(){}function Mt(){}function Tt(){}function jt(){}function Et(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function Lt(){}function Nt(){}function $t(){}function Dt(){}function xt(){}function Rt(){}function Kt(){}function Ft(){}function _t(){}function Bt(){}function Ht(){}function Ut(){}function Gt(){}function qt(){}function Xt(){}function zt(){}function Vt(){}function Wt(){}function Qt(){}function Jt(){}function Yt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function oe(){}function ue(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function me(){}function ve(){}function ke(){}function ye(){}function Me(){}function Te(){}function je(){}function Ee(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function Le(){}function Ne(){}function $e(){}function De(){}function xe(){}function Re(){}function Ke(){}function Fe(){}function _e(){}function Be(){}function He(){}function Ue(){}function Ge(){}function qe(){}function Xe(){}function ze(){}function Ve(){}function We(){}function Qe(){}function Je(){}function Ye(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function oi(){}function ui(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function mi(){}function vi(){}function ki(){}function yi(){}function Mi(){}function Ti(){}function ji(){}function Ei(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function Li(){}function Ni(){}function $i(){}function Di(){}function xi(){}function Ri(){}function Ki(){}function Fi(){}function _i(){}function Bi(){}function Hi(){}function Ui(){}function Gi(){}function qi(){}function Xi(){}function zi(){}function Vi(){}function Wi(){}function Qi(){}function Ji(){}function Yi(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function or(){}function ur(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function mr(){}function vr(){}function kr(){}function yr(){}function Mr(){}function Tr(){}function jr(){}function Er(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function Lr(){}function Nr(){}function $r(){}function Dr(){}function xr(){}function Rr(){}function Kr(){}function Fr(){}function _r(){}function Br(){}function Hr(){}function Ur(){}function Gr(){}function qr(){}function Xr(){}function zr(){}function Vr(){}function Wr(){}function Qr(){}function Jr(){}function Yr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function oc(){}function uc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function mc(){}function vc(){}function kc(){}function yc(){}function Mc(){}function Tc(){}function jc(){}function Ec(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function Lc(){}function Nc(){}function $c(){}function Dc(){}function xc(){}function Rc(){}function Kc(){}function Fc(){}function _c(){}function Bc(){}function Hc(){}function Uc(){}function Gc(){}function qc(){}function Xc(){}function zc(){}function Vc(){}function Wc(){}function Qc(){}function Jc(){}function Yc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function oa(){}function ua(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function ma(){}function va(){}function ka(){}function ya(){}function Ma(){}function Ta(){}function ja(){}function Ea(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function La(){}function Na(){}function $a(){}function Da(){}function xa(){}function Ra(){}function Ka(){}function Fa(){}function _a(){}function Ba(){}function Ha(){}function Ua(){}function Ga(){}function qa(){}function Xa(){}function za(){}function Va(){}function Wa(){}function Qa(){}function Ja(){}function Ya(){}function Za(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function oo(){}function uo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function mo(){}function vo(){}function ko(){}function yo(){}function Mo(){}function To(){}function jo(){}function Eo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function Lo(){}function No(){}function $o(){}function Do(){}function xo(){}function Ro(){}function Ko(){}function Fo(){}function _o(){}function Bo(){}function Ho(){}function Uo(){}function Go(){}function qo(){}function Xo(){}function zo(){}function Vo(){}function Wo(){}function Qo(){}function Jo(){}function Yo(){}function Zo(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function ou(){}function uu(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function mu(){}function vu(){}function ku(){}function yu(){}function Mu(){}function Tu(){}function ju(){}function Eu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function Lu(){}function Nu(){}function $u(){}function Du(){}function xu(){}function Ru(){}function Ku(){}function Fu(){}function _u(){}function Bu(){}function Hu(){}function Uu(){}function Gu(){}function qu(){}function Xu(){}function zu(){}function Vu(){}function Wu(){}function Qu(){}function Ju(){}function Yu(){}function Zu(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function os(){}function us(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function ms(){}function vs(){}function ks(){}function ys(){}function Ms(){}function Ts(){}function js(){}function Es(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function Ls(){}function Ns(){}function $s(){}function Ds(){}function xs(){}function Rs(){}function Ks(){}function Fs(){}function _s(){}function Bs(){}function Hs(){}function Us(){}function Gs(){}function qs(){}function Xs(){}function zs(){}function Vs(){}function Ws(){}function Qs(){}function Js(){}function Ys(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function oh(){}function uh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function mh(){}function vh(){}function kh(){}function yh(){}function Mh(){}function Th(){}function jh(){}function Eh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function Lh(){}function Nh(){}function $h(){}function Dh(){}function xh(){}function Rh(){}function Kh(){}function Fh(){}function _h(){}function Bh(){}function Hh(){}function Uh(){}function Gh(){}function qh(){}function Xh(){}function zh(){}function Vh(){}function Wh(){}function Qh(){}function Jh(){}function Yh(){}function Zh(){}function nf(){}function tf(){}function ef(){}function rf(){}function cf(){}function af(){}function of(){}function uf(){}function sf(){}function hf(){}function ff(){}function lf(){}function bf(){}function wf(){}function df(){}function gf(){}function pf(){}function mf(){}function vf(){}function kf(){}function yf(){}function Mf(){}function Tf(){}function jf(){}function Ef(){}function Sf(){}function Pf(){}function Cf(){}function If(){}function Of(){}function Af(){}function Lf(){}function Nf(){}function $f(){}function Df(){}function xf(){}function Rf(n){}function Kf(n){}function Ff(){gy()}function _f(){VS()}function Bf(){MEn()}function Hf(){pbn()}function Uf(){ryn()}function Gf(){oOn()}function qf(){rGn()}function Xf(){yjn()}function zf(){Bjn()}function Vf(){WS()}function Wf(){HB()}function Qf(){QS()}function Jf(){Pun()}function Yf(){F7()}function Zf(){Ean()}function nl(){Y0()}function tl(){Pan()}function el(){Unn()}function il(){Q0()}function rl(){Cln()}function cl(){Ian()}function al(){Can()}function ol(){c6()}function ul(){Oan()}function sl(){jIn()}function hl(){YS()}function fl(){VYn()}function ll(){jYn()}function bl(){Aan()}function wl(){Iun()}function dl(){Z0()}function gl(){Pjn()}function pl(){t2()}function ml(){dUn()}function vl(){eDn()}function kl(){tcn()}function yl(){Kdn()}function Ml(){QGn()}function Tl(){e3()}function jl(){ncn()}function El(){EHn()}function Sl(){jOn()}function Pl(){IHn()}function Cl(){S_n()}function Il(){fIn()}function Ol(){uBn()}function Al(){jMn()}function Ll(){oB()}function Nl(){Stn()}function $l(){lIn()}function Dl(){XYn()}function xl(){Iln()}function Rl(){Wmn()}function Kl(){Oun()}function Fl(){tXn()}function _l(){vGn()}function Bl(n){tJ(n)}function Hl(n){this.a=n}function Ul(n){this.a=n}function Gl(n){this.a=n}function ql(n){this.a=n}function Xl(n){this.a=n}function zl(n){this.a=n}function Vl(n){this.a=n}function Wl(n){this.a=n}function Ql(n){this.a=n}function Jl(n){this.a=n}function Yl(n){this.a=n}function Zl(n){this.a=n}function nb(n){this.a=n}function tb(n){this.a=n}function eb(n){this.a=n}function ib(n){this.a=n}function rb(n){this.a=n}function cb(n){this.a=n}function ab(n){this.a=n}function ob(n){this.a=n}function ub(n){this.a=n}function sb(n){this.a=n}function hb(n){this.b=n}function fb(n){this.c=n}function lb(n){this.a=n}function bb(n){this.a=n}function wb(n){this.a=n}function db(n){this.a=n}function gb(n){this.a=n}function pb(n){this.a=n}function mb(n){this.a=n}function vb(n){this.a=n}function kb(n){this.a=n}function yb(n){this.a=n}function Mb(n){this.a=n}function Tb(n){this.a=n}function jb(n){this.a=n}function Eb(n){this.a=n}function Sb(n){this.a=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(){this.a=[]}function Ob(n,t){n.a=t}function Ab(n,t){n.a=t}function Lb(n,t){n.b=t}function Nb(n,t){n.b=t}function $b(n,t){n.b=t}function Db(n,t){n.j=t}function xb(n,t){n.g=t}function Rb(n,t){n.i=t}function Kb(n,t){n.c=t}function Fb(n,t){n.c=t}function _b(n,t){n.d=t}function Bb(n,t){n.d=t}function Hb(n,t){n.k=t}function Ub(n,t){n.c=t}function Gb(n,t){n.c=t}function qb(n,t){n.a=t}function Xb(n,t){n.a=t}function zb(n,t){n.f=t}function Vb(n,t){n.a=t}function Wb(n,t){n.b=t}function Qb(n,t){n.d=t}function Jb(n,t){n.i=t}function Yb(n,t){n.o=t}function Zb(n,t){n.r=t}function nw(n,t){n.a=t}function tw(n,t){n.b=t}function ew(n,t){n.e=t}function iw(n,t){n.f=t}function rw(n,t){n.g=t}function cw(n,t){n.e=t}function aw(n,t){n.f=t}function ow(n,t){n.f=t}function uw(n,t){n.a=t}function sw(n,t){n.b=t}function hw(n,t){n.n=t}function fw(n,t){n.a=t}function lw(n,t){n.c=t}function bw(n,t){n.c=t}function ww(n,t){n.c=t}function dw(n,t){n.a=t}function gw(n,t){n.a=t}function pw(n,t){n.d=t}function mw(n,t){n.d=t}function vw(n,t){n.e=t}function kw(n,t){n.e=t}function yw(n,t){n.g=t}function Mw(n,t){n.f=t}function Tw(n,t){n.j=t}function jw(n,t){n.a=t}function Ew(n,t){n.a=t}function Sw(n,t){n.b=t}function Pw(n){n.b=n.a}function Cw(n){n.c=n.d.d}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function $w(n){this.a=n}function Dw(n){this.a=n}function xw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function Fw(n){this.a=n}function _w(n){this.a=n}function Bw(n){this.a=n}function Hw(n){this.a=n}function Uw(n){this.b=n}function Gw(n){this.b=n}function qw(n){this.b=n}function Xw(n){this.a=n}function zw(n){this.a=n}function Vw(n){this.c=n}function Ww(n){this.c=n}function Qw(n){this.c=n}function Jw(n){this.d=n}function Yw(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 od(n){this.a=n}function ud(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 md(n){this.a=n}function vd(n){this.a=n}function kd(n){this.a=n}function yd(n){this.a=n}function Md(n){this.a=n}function Td(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function $d(n){this.a=n}function Dd(n){this.a=n}function xd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function Fd(n){this.a=n}function _d(n){this.a=n}function Bd(n){this.a=n}function Hd(n){this.a=n}function Ud(n){this.a=n}function Gd(n){this.a=n}function qd(n){this.a=n}function Xd(n){this.e=n}function zd(n){this.a=n}function Vd(n){this.a=n}function Wd(n){this.a=n}function Qd(n){this.a=n}function Jd(n){this.a=n}function Yd(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 og(n){this.a=n}function ug(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 mg(n){this.a=n}function vg(n){this.a=n}function kg(n){this.a=n}function yg(n){this.a=n}function Mg(n){this.a=n}function Tg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function $g(n){this.a=n}function Dg(n){this.a=n}function xg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function Fg(n){this.a=n}function _g(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function Ug(n){this.a=n}function Gg(n){this.a=n}function qg(n){this.a=n}function Xg(n){this.a=n}function zg(n){this.c=n}function Vg(n){this.b=n}function Wg(n){this.a=n}function Qg(n){this.a=n}function Jg(n){this.a=n}function Yg(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 op(n){this.a=n}function up(n){this.a=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 mp(n){this.a=n}function vp(n){this.a=n}function kp(n){this.a=n}function yp(n){this.a=n}function Mp(n){this.a=n}function Tp(n){this.a=n}function jp(n){this.a=n}function Ep(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.a=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.a=n}function Lp(n){this.a=n}function Np(n){this.a=n}function $p(n){this.a=n}function Dp(n){this.a=n}function xp(n){this.a=n}function Rp(n){this.a=n}function Kp(n){this.a=n}function Fp(n){this.a=n}function _p(n){this.a=n}function Bp(n){this.a=n}function Hp(n){this.a=n}function Up(n){this.a=n}function Gp(n){this.a=n}function qp(n){this.a=n}function Xp(n){this.a=n}function zp(n){this.a=n}function Vp(n){this.a=n}function Wp(n){this.a=n}function Qp(n){this.a=n}function Jp(n){this.f=n}function Yp(n){this.a=n}function Zp(n){this.a=n}function nm(n){this.a=n}function tm(n){this.a=n}function em(n){this.a=n}function im(n){this.a=n}function rm(n){this.a=n}function cm(n){this.a=n}function am(n){this.a=n}function om(n){this.a=n}function um(n){this.a=n}function sm(n){this.a=n}function hm(n){this.a=n}function fm(n){this.a=n}function lm(n){this.a=n}function bm(n){this.a=n}function wm(n){this.a=n}function dm(n){this.a=n}function gm(n){this.a=n}function pm(n){this.a=n}function mm(n){this.a=n}function vm(n){this.a=n}function km(n){this.a=n}function ym(n){this.a=n}function Mm(n){this.a=n}function Tm(n){this.a=n}function jm(n){this.a=n}function Em(n){this.a=n}function Sm(n){this.a=n}function Pm(n){this.a=n}function Cm(n){this.b=n}function Im(n){this.a=n}function Om(n){this.a=n}function Am(n){this.a=n}function Lm(n){this.a=n}function Nm(n){this.a=n}function $m(n){this.a=n}function Dm(n){this.a=n}function xm(n){this.b=n}function Rm(n){this.a=n}function Km(n){this.a=n}function Fm(n){this.a=n}function _m(n){this.a=n}function Bm(n){this.c=n}function Hm(n){this.e=n}function Um(n){this.a=n}function Gm(n){this.a=n}function qm(n){this.a=n}function Xm(n){this.d=n}function zm(n){this.a=n}function Vm(n){this.a=n}function Wm(n){this.a=n}function Qm(n){this.e=n}function Jm(){this.a=0}function Ym(){$V(this)}function Zm(){IN(this)}function nv(){XQ(this)}function tv(){Rf(this)}function ev(){this.c=nBt}function iv(n,t){n.b+=t}function rv(n,t){t.Wb(n)}function cv(n){return n.a}function av(n){return n.a}function ov(n){return n.a}function uv(n){return n.a}function sv(n){return n.a}function hv(n){return n.e}function fv(){return null}function lv(){return null}function bv(){mj(),xJn()}function wv(n){n.b.Of(n.e)}function dv(n){n.b=new rT}function gv(n,t){n.b=t-n.b}function pv(n,t){n.a=t-n.a}function mv(n,t){n.push(t)}function vv(n,t){n.sort(t)}function kv(n,t){t.jd(n.a)}function yv(n,t){NLn(t,n)}function Mv(n,t,e){n.Yd(e,t)}function Tv(n,t){n.e=t,t.b=n}function jv(n){sB(),this.a=n}function Ev(n){sB(),this.a=n}function Sv(n){sB(),this.a=n}function Pv(n){ZW(),this.a=n}function Cv(n){EZ(),_at.le(n)}function Iv(){Iv=E,new Ym}function Ov(){vx.call(this)}function Av(){vx.call(this)}function Lv(){Ov.call(this)}function Nv(){Ov.call(this)}function $v(){Ov.call(this)}function Dv(){Ov.call(this)}function xv(){Ov.call(this)}function Rv(){Ov.call(this)}function Kv(){Ov.call(this)}function Fv(){Ov.call(this)}function _v(){Ov.call(this)}function Bv(){Ov.call(this)}function Hv(){Ov.call(this)}function Uv(){this.a=this}function Gv(){this.Bb|=256}function qv(){this.b=new hL}function Xv(n,t){n.length=t}function zv(n,t){kD(n.a,t)}function Vv(n,t){LOn(n.c,t)}function Wv(n,t){FV(n.b,t)}function Qv(n,t){bMn(n.a,t)}function Jv(n,t){Vdn(n.a,t)}function Yv(n,t){Msn(n.e,t)}function Zv(n){C$n(n.c,n.b)}function nk(n,t){n.kc().Nb(t)}function tk(n){this.a=Agn(n)}function ek(){this.a=new Ym}function ik(){this.a=new Ym}function rk(){this.a=new hS}function ck(){this.a=new Zm}function ak(){this.a=new Zm}function ok(){this.a=new Zm}function uk(){this.a=new kn}function sk(){this.a=new g7}function hk(){this.a=new lt}function fk(){this.a=new V0}function lk(){this.a=new NF}function bk(){this.a=new Zm}function wk(){this.a=new Zm}function dk(){this.a=new Zm}function gk(){this.a=new Zm}function pk(){this.d=new Zm}function mk(){this.a=new i4}function vk(){this.a=new ek}function kk(){this.a=new Ym}function yk(){this.b=new Ym}function Mk(){this.b=new Zm}function Tk(){this.e=new Zm}function jk(){this.a=new sl}function Ek(){this.d=new Zm}function Sk(){BZ.call(this)}function Pk(){BZ.call(this)}function Ck(){Zm.call(this)}function Ik(){Lv.call(this)}function Ok(){ck.call(this)}function Ak(){HF.call(this)}function Lk(){gk.call(this)}function Nk(){tv.call(this)}function $k(){Nk.call(this)}function Dk(){tv.call(this)}function xk(){Dk.call(this)}function Rk(){oy.call(this)}function Kk(){oy.call(this)}function Fk(){oy.call(this)}function _k(){hy.call(this)}function Bk(){ts.call(this)}function Hk(){ts.call(this)}function Uk(){lS.call(this)}function Gk(){wy.call(this)}function qk(){wy.call(this)}function Xk(){Ym.call(this)}function zk(){Ym.call(this)}function Vk(){Ym.call(this)}function Wk(){Kan.call(this)}function Qk(){ek.call(this)}function Jk(){Gv.call(this)}function Yk(){$D.call(this)}function Zk(){Ym.call(this)}function ny(){$D.call(this)}function ty(){Ym.call(this)}function ey(){Ym.call(this)}function iy(){ps.call(this)}function ry(){iy.call(this)}function cy(){ps.call(this)}function ay(){$f.call(this)}function oy(){this.a=new ek}function uy(){this.a=new Ym}function sy(){this.a=new Zm}function hy(){this.a=new Ym}function fy(){this.a=new lS}function ly(){this.j=new Zm}function by(){this.a=new zj}function wy(){this.a=new gs}function dy(){this.a=new Do}function gy(){gy=E,wat=new c}function py(){py=E,Mat=new ky}function my(){my=E,Tat=new vy}function vy(){ib.call(this,"")}function ky(){ib.call(this,"")}function yy(n){Arn.call(this,n)}function My(n){Arn.call(this,n)}function Ty(n){Ql.call(this,n)}function jy(n){HE.call(this,n)}function Ey(n){HE.call(this,n)}function Sy(n){jy.call(this,n)}function Py(n){jy.call(this,n)}function Cy(n){jy.call(this,n)}function Iy(n){c8.call(this,n)}function Oy(n){c8.call(this,n)}function Ay(n){K_.call(this,n)}function Ly(n){XE.call(this,n)}function Ny(n){WE.call(this,n)}function $y(n){WE.call(this,n)}function Dy(n){WE.call(this,n)}function xy(n){cOn.call(this,n)}function Ry(n){xy.call(this,n)}function Ky(n){Uz.call(this,n)}function Fy(n){Ky.call(this,n)}function _y(){Cb.call(this,{})}function By(){By=E,Vat=new T}function Hy(){Hy=E,Iat=new X$}function Uy(){Uy=E,Dat=new r}function Gy(){Gy=E,Fat=new p}function qy(){qy=E,Hat=new k}function Xy(n){UD(),this.a=n}function zy(n){Cun(),this.a=n}function Vy(n){rz(),this.f=n}function Wy(n){rz(),this.f=n}function Qy(n){aB(),this.a=n}function Jy(n){n.b=null,n.c=0}function Yy(n,t){n.e=t,yFn(n,t)}function Zy(n,t){n.a=t,WAn(n)}function nM(n,t,e){n.a[t.g]=e}function tM(n,t,e){nSn(e,n,t)}function eM(n,t){F_(t.i,n.n)}function iM(n,t){yln(n).Cd(t)}function rM(n,t){n.a.ec().Mc(t)}function cM(n,t){return n.g-t.g}function aM(n,t){return n*n/t}function oM(n){return tJ(n),n}function uM(n){return tJ(n),n}function sM(n){return tJ(n),n}function hM(n){return new Pb(n)}function fM(n){return new QW(n)}function lM(n){return tJ(n),n}function bM(n){return tJ(n),n}function wM(n){Ky.call(this,n)}function dM(n){Ky.call(this,n)}function gM(n){Ky.call(this,n)}function pM(n){Uz.call(this,n)}function mM(n){Ky.call(this,n)}function vM(n){Ky.call(this,n)}function kM(n){Ky.call(this,n)}function yM(n){Ky.call(this,n)}function MM(n){Ky.call(this,n)}function TM(n){Ky.call(this,n)}function jM(n){Ky.call(this,n)}function EM(n){Ky.call(this,n)}function SM(n){Ky.call(this,n)}function PM(n){Ky.call(this,n)}function CM(n){Ky.call(this,n)}function IM(n){tJ(n),this.a=n}function OM(n){return hln(n),n}function AM(n){zV(n,n.length)}function LM(n){return n.b==n.c}function NM(n){return!!n&&n.b}function $M(n){return!!n&&n.k}function DM(n){return!!n&&n.j}function xM(n,t,e){n.c.Ef(t,e)}function RM(n,t){n.be(t),t.ae(n)}function KM(n){sB(),this.a=WW(n)}function FM(){this.a=mK(WW(TZn))}function _M(){throw hv(new Kv)}function BM(){throw hv(new Kv)}function HM(){throw hv(new Kv)}function UM(){throw hv(new Kv)}function GM(){throw hv(new Kv)}function qM(){throw hv(new Kv)}function XM(){XM=E,EZ()}function zM(){$w.call(this,"")}function VM(){$w.call(this,"")}function WM(){$w.call(this,"")}function QM(){$w.call(this,"")}function JM(n){dM.call(this,n)}function YM(n){dM.call(this,n)}function ZM(n){vM.call(this,n)}function nT(n){qw.call(this,n)}function tT(n){nT.call(this,n)}function eT(n){gx.call(this,n)}function iT(n){Qx.call(this,n,0)}function rT(){L2.call(this,12,3)}function cT(n,t){return B0(n,t)}function aT(n,t){return Ltn(n,t)}function oT(n,t){return n.a-t.a}function uT(n,t){return n.a-t.a}function sT(n,t){return n.a-t.a}function hT(n,t){return t in n.a}function fT(n){return n.a?n.b:0}function lT(n){return n.a?n.b:0}function bT(n,t,e){t.Cd(n.a[e])}function wT(n,t,e){t.Pe(n.a[e])}function dT(n,t){n.b=new eN(t)}function gT(n,t){return n.b=t,n}function pT(n,t){return n.c=t,n}function mT(n,t){return n.f=t,n}function vT(n,t){return n.g=t,n}function kT(n,t){return n.a=t,n}function yT(n,t){return n.f=t,n}function MT(n,t){return n.k=t,n}function TT(n,t){return n.a=t,n}function jT(n,t){return n.e=t,n}function ET(n,t){return n.e=t,n}function ST(n,t){return n.f=t,n}function PT(n,t){n.b=!0,n.d=t}function CT(n,t){return n.b-t.b}function IT(n,t){return n.g-t.g}function OT(n,t){return n?0:t-1}function AT(n,t){return n?0:t-1}function LT(n,t){return n?t-1:0}function NT(n,t){return n.s-t.s}function $T(n,t){return t.rg(n)}function DT(n,t){return n.b=t,n}function xT(n,t){return n.a=t,n}function RT(n,t){return n.c=t,n}function KT(n,t){return n.d=t,n}function FT(n,t){return n.e=t,n}function _T(n,t){return n.f=t,n}function BT(n,t){return n.a=t,n}function HT(n,t){return n.b=t,n}function UT(n,t){return n.c=t,n}function GT(n,t){return n.c=t,n}function qT(n,t){return n.b=t,n}function XT(n,t){return n.d=t,n}function zT(n,t){return n.e=t,n}function VT(n,t){return n.f=t,n}function WT(n,t){return n.g=t,n}function QT(n,t){return n.a=t,n}function JT(n,t){return n.i=t,n}function YT(n,t){return n.j=t,n}function ZT(n,t){jIn(),o2(t,n)}function nj(n,t,e){az(n.a,t,e)}function tj(n){Y_.call(this,n)}function ej(n){dpn.call(this,n)}function ij(n){TY.call(this,n)}function rj(n){TY.call(this,n)}function cj(n){Drn.call(this,n)}function aj(n){HY.call(this,n)}function oj(n){HY.call(this,n)}function uj(){S$.call(this,"")}function sj(){this.a=0,this.b=0}function hj(){this.b=0,this.a=0}function fj(n,t){n.b=0,Ccn(n,t)}function lj(n,t){return n.k=t,n}function bj(n,t){return n.j=t,n}function wj(n,t){n.c=t,n.b=!0}function dj(){dj=E,rut=ePn()}function gj(){gj=E,xKt=AEn()}function pj(){pj=E,RKt=VPn()}function mj(){mj=E,NFt=aan()}function vj(){vj=E,y_t=LEn()}function kj(){kj=E,xBt=NEn()}function yj(){yj=E,RBt=qAn()}function Mj(n){return n.e&&n.e()}function Tj(n){return n.l|n.m<<22}function jj(n,t){return n.c._b(t)}function Ej(n,t){return Uwn(n.b,t)}function Sj(n){return n?n.d:null}function Pj(n){return n?n.g:null}function Cj(n){return n?n.i:null}function Ij(n){return vK(n),n.o}function Oj(n,t){return n.a+=t,n}function Aj(n,t){return n.a+=t,n}function Lj(n,t){return n.a+=t,n}function Nj(n,t){return n.a+=t,n}function $j(n,t){for(;n.Bd(t););}function Dj(n){this.a=new sS(n)}function xj(){throw hv(new Kv)}function Rj(){throw hv(new Kv)}function Kj(){throw hv(new Kv)}function Fj(){throw hv(new Kv)}function _j(){throw hv(new Kv)}function Bj(){throw hv(new Kv)}function Hj(n){this.a=new Hz(n)}function Uj(){this.a=new mKn(iIt)}function Gj(){this.b=new mKn(ZSt)}function qj(){this.a=new mKn(dOt)}function Xj(){this.b=new mKn(VAt)}function zj(){this.b=new mKn(VAt)}function Vj(n){this.a=0,this.b=n}function Wj(n){CQn(),uYn(this,n)}function Qj(n){return GQ(n),n.a}function Jj(n){return n.b!=n.d.c}function Yj(n,t){return n.d[t.p]}function Zj(n,t){return vFn(n,t)}function nE(n,t,e){n.splice(t,e)}function tE(n,t){for(;n.Re(t););}function eE(n){n.c?P_n(n):C_n(n)}function iE(){throw hv(new Kv)}function rE(){throw hv(new Kv)}function cE(){throw hv(new Kv)}function aE(){throw hv(new Kv)}function oE(){throw hv(new Kv)}function uE(){throw hv(new Kv)}function sE(){throw hv(new Kv)}function hE(){throw hv(new Kv)}function fE(){throw hv(new Kv)}function lE(){throw hv(new Kv)}function bE(){throw hv(new Bv)}function wE(){throw hv(new Bv)}function dE(n){this.a=new gE(n)}function gE(n){Zan(this,n,fOn())}function pE(n){return!n||FQ(n)}function mE(n){return-1!=dHt[n]}function vE(){0!=Uat&&(Uat=0),qat=-1}function kE(){null==hZn&&(hZn=[])}function yE(n,t){RD.call(this,n,t)}function ME(n,t){yE.call(this,n,t)}function TE(n,t){this.a=n,this.b=t}function jE(n,t){this.a=n,this.b=t}function EE(n,t){this.a=n,this.b=t}function SE(n,t){this.a=n,this.b=t}function PE(n,t){this.a=n,this.b=t}function CE(n,t){this.a=n,this.b=t}function IE(n,t){this.a=n,this.b=t}function OE(n,t){this.e=n,this.d=t}function AE(n,t){this.b=n,this.c=t}function LE(n,t){this.b=n,this.a=t}function NE(n,t){this.b=n,this.a=t}function $E(n,t){this.b=n,this.a=t}function DE(n,t){this.b=n,this.a=t}function xE(n,t){this.a=n,this.b=t}function RE(n,t){this.a=n,this.b=t}function KE(n,t){this.a=n,this.f=t}function FE(n,t){this.g=n,this.i=t}function _E(n,t){this.f=n,this.g=t}function BE(n,t){this.b=n,this.c=t}function HE(n){FD(n.dc()),this.c=n}function UE(n,t){this.a=n,this.b=t}function GE(n,t){this.a=n,this.b=t}function qE(n){this.a=uG(WW(n),15)}function XE(n){this.a=uG(WW(n),15)}function zE(n){this.a=uG(WW(n),85)}function VE(n){this.b=uG(WW(n),85)}function WE(n){this.b=uG(WW(n),51)}function QE(){this.q=new e.Date}function JE(n,t){this.a=n,this.b=t}function YE(n,t){return PV(n.b,t)}function ZE(n,t){return n.b.Hc(t)}function nS(n,t){return n.b.Ic(t)}function tS(n,t){return n.b.Qc(t)}function eS(n,t){return n.b.Hc(t)}function iS(n,t){return n.c.uc(t)}function rS(n,t){return udn(n.c,t)}function cS(n,t){return n.a._b(t)}function aS(n,t){return n>t&&t<d1n}function oS(n){return n.f.c+n.i.c}function uS(n){return xW(),n?zat:Xat}function sS(n){Nfn.call(this,n,0)}function hS(){Hz.call(this,null)}function fS(n){this.c=n,Sin(this)}function lS(){O$(this),BY(this)}function bS(){bS=E,Eot=new S}function wS(){wS=E,Qot=new I}function dS(){dS=E,hut=new uL}function gS(){gS=E,fut=new sL}function pS(){pS=E,Eut=new U}function mS(){Fnn.call(this,null)}function vS(){vS=E,Kut=new sn}function kS(n,t){GQ(n),n.a.Nb(t)}function yS(n,t){return n.a.Xc(t)}function MS(n,t){return n.a.Yc(t)}function TS(n,t){return n.a.$c(t)}function jS(n,t){return n.a._c(t)}function ES(n,t){return n.Gc(t),n}function SS(n,t){return Qon(n,t),n}function PS(n,t){V$n(gZ(n.a),t)}function CS(n,t){V$n(gZ(n.a),t)}function IS(n,t){return n.Gc(t),n}function OS(n,t){return n.a.f=t,n}function AS(n,t){return n.a.d=t,n}function LS(n,t){return n.a.g=t,n}function NS(n,t){return n.a.j=t,n}function $S(n,t){return n.a.a=t,n}function DS(n,t){return n.a.d=t,n}function xS(n,t){return n.a.e=t,n}function RS(n,t){return n.a.g=t,n}function KS(n,t){return n.a.f=t,n}function FS(n){return n.b=!1,n}function _S(){_S=E,Uut=new wn}function BS(){BS=E,Kht=new qR}function HS(){HS=E,Olt=new wt}function US(){US=E,Alt=new Mt}function GS(){GS=E,Dlt=new nz}function qS(){qS=E,Qlt=new St}function XS(){XS=E,cbt=new Rt}function zS(){zS=E,ubt=new Kt}function VS(){VS=E,Cbt=new be}function WS(){WS=E,Pbt=new sj}function QS(){QS=E,Bwt=new Je}function JS(){JS=E,idt=new Nr}function YS(){YS=E,Fdt=new rc}function ZS(){ZS=E,VTt=new Gu}function nP(){nP=E,zAt=new rP}function tP(){tP=E,QAt=new GR}function eP(){eP=E,GLt=new pJ}function iP(){San(),this.c=new rT}function rP(){_E.call(this,R6n,0)}function cP(n,t,e){r2(n.d,t.f,e)}function aP(n,t,e,i){xyn(n,i,t,e)}function oP(n,t,e,i){QRn(i,n,t,e)}function uP(n,t,e,i){TQn(i,n,t,e)}function sP(n,t){Akn(n.c.c,t.b,t)}function hP(n,t){Akn(n.c.b,t.c,t)}function fP(n){return n.e.b+n.f.b}function lP(n){return n.e.a+n.f.a}function bP(n){return n.b?n.b:n.a}function wP(n){return(n.c+n.a)/2}function dP(n,t){return Fjn(n.a,t)}function gP(n,t){return n.a=t.g,n}function pP(){pP=E,k_t=new ey}function mP(){mP=E,b_t=new Vk}function vP(){vP=E,NKt=new qu}function kP(){kP=E,WKt=new os}function yP(){yP=E,r_t=new zk}function MP(){MP=E,l_t=new Zk}function TP(){TP=E,_Ft=new Ym}function jP(){jP=E,tBt=new G$}function EP(){EP=E,eBt=new q$}function SP(){SP=E,EBt=new Ah}function PP(){PP=E,PBt=new Lh}function CP(){CP=E,XHt=new xf}function IP(){IP=E,gBt=new Zm}function OP(n){return uG(n,44).ld()}function AP(n){return n.b<n.d.gc()}function LP(n,t){return t.split(n)}function NP(n,t){return dwn(n,t)>0}function $P(n,t){return dwn(n,t)<0}function DP(n,t){return RX(n.a,t)}function xP(n,t){U0.call(this,n,t)}function RP(n){nQ(),K_.call(this,n)}function KP(n,t){zX(n,n.length,t)}function FP(n,t){dW(n,n.length,t)}function _P(n,t){return n.a.get(t)}function BP(n,t){return PV(n.e,t)}function HP(n){return tJ(n),!1}function UP(n){this.a=uG(WW(n),229)}function GP(n){h3.call(this,n,21)}function qP(n,t){_E.call(this,n,t)}function XP(n,t){_E.call(this,n,t)}function zP(n,t){this.b=n,this.a=t}function VP(n,t){this.d=n,this.e=t}function WP(n,t){this.a=n,this.b=t}function QP(n,t){this.a=n,this.b=t}function JP(n,t){this.a=n,this.b=t}function YP(n,t){this.a=n,this.b=t}function ZP(n,t){this.a=n,this.b=t}function nC(n,t){this.b=n,this.a=t}function tC(n,t){this.b=n,this.a=t}function eC(n,t){_E.call(this,n,t)}function iC(n,t){_E.call(this,n,t)}function rC(n,t){_E.call(this,n,t)}function cC(n,t){_E.call(this,n,t)}function aC(n,t){_E.call(this,n,t)}function oC(n,t){_E.call(this,n,t)}function uC(n,t){_E.call(this,n,t)}function sC(n,t){this.b=n,this.a=t}function hC(n,t){_E.call(this,n,t)}function fC(n,t){this.b=n,this.a=t}function lC(n,t){_E.call(this,n,t)}function bC(n,t){this.b=n,this.a=t}function wC(n,t){_E.call(this,n,t)}function dC(n,t){_E.call(this,n,t)}function gC(n,t){_E.call(this,n,t)}function pC(n,t,e){n.splice(t,0,e)}function mC(n,t,e){n.Mb(e)&&t.Cd(e)}function vC(n,t,e){t.Pe(n.a.Ye(e))}function kC(n,t,e){t.Dd(n.a.Ze(e))}function yC(n,t,e){t.Cd(n.a.Kb(e))}function MC(n,t){return $x(n.c,t)}function TC(n,t){return $x(n.e,t)}function jC(n,t){_E.call(this,n,t)}function EC(n,t){_E.call(this,n,t)}function SC(n,t){_E.call(this,n,t)}function PC(n,t){_E.call(this,n,t)}function CC(n,t){_E.call(this,n,t)}function IC(n,t){_E.call(this,n,t)}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function $C(n,t){this.a=n,this.b=t}function DC(n,t){this.a=n,this.b=t}function xC(n,t){this.b=n,this.a=t}function RC(n,t){this.b=n,this.a=t}function KC(n,t){this.b=n,this.a=t}function FC(n,t){this.c=n,this.d=t}function _C(n,t){this.e=n,this.d=t}function BC(n,t){this.a=n,this.b=t}function HC(n,t){this.a=n,this.b=t}function UC(n,t){this.a=n,this.b=t}function GC(n,t){this.b=n,this.a=t}function qC(n,t){this.b=t,this.c=n}function XC(n,t){_E.call(this,n,t)}function zC(n,t){_E.call(this,n,t)}function VC(n,t){_E.call(this,n,t)}function WC(n,t){_E.call(this,n,t)}function QC(n,t){_E.call(this,n,t)}function JC(n,t){_E.call(this,n,t)}function YC(n,t){_E.call(this,n,t)}function ZC(n,t){_E.call(this,n,t)}function nI(n,t){_E.call(this,n,t)}function tI(n,t){_E.call(this,n,t)}function eI(n,t){_E.call(this,n,t)}function iI(n,t){_E.call(this,n,t)}function rI(n,t){_E.call(this,n,t)}function cI(n,t){_E.call(this,n,t)}function aI(n,t){_E.call(this,n,t)}function oI(n,t){_E.call(this,n,t)}function uI(n,t){_E.call(this,n,t)}function sI(n,t){_E.call(this,n,t)}function hI(n,t){_E.call(this,n,t)}function fI(n,t){_E.call(this,n,t)}function lI(n,t){_E.call(this,n,t)}function bI(n,t){_E.call(this,n,t)}function wI(n,t){_E.call(this,n,t)}function dI(n,t){_E.call(this,n,t)}function gI(n,t){_E.call(this,n,t)}function pI(n,t){_E.call(this,n,t)}function mI(n,t){_E.call(this,n,t)}function vI(n,t){_E.call(this,n,t)}function kI(n,t){_E.call(this,n,t)}function yI(n,t){_E.call(this,n,t)}function MI(n,t){_E.call(this,n,t)}function TI(n,t){_E.call(this,n,t)}function jI(n,t){_E.call(this,n,t)}function EI(n,t){this.b=n,this.a=t}function SI(n,t){_E.call(this,n,t)}function PI(n,t){this.a=n,this.b=t}function CI(n,t){this.a=n,this.b=t}function II(n,t){this.a=n,this.b=t}function OI(n,t){_E.call(this,n,t)}function AI(n,t){_E.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){return PU(),t!=n}function $I(n){return MK(n.a),n.b}function DI(n){return K$n(n,n.c),n}function xI(){return dj(),new rut}function RI(){UB(),this.a=new xF}function KI(){oFn(),this.a=new ek}function FI(){e2(),this.b=new ek}function _I(n,t){this.b=n,this.d=t}function BI(n,t){this.a=n,this.b=t}function HI(n,t){this.a=n,this.b=t}function UI(n,t){this.a=n,this.b=t}function GI(n,t){this.b=n,this.a=t}function qI(n,t){_E.call(this,n,t)}function XI(n,t){_E.call(this,n,t)}function zI(n,t){_E.call(this,n,t)}function VI(n,t){_E.call(this,n,t)}function WI(n,t){_E.call(this,n,t)}function QI(n,t){_E.call(this,n,t)}function JI(n,t){_E.call(this,n,t)}function YI(n,t){_E.call(this,n,t)}function ZI(n,t){_E.call(this,n,t)}function nO(n,t){_E.call(this,n,t)}function tO(n,t){_E.call(this,n,t)}function eO(n,t){_E.call(this,n,t)}function iO(n,t){_E.call(this,n,t)}function rO(n,t){_E.call(this,n,t)}function cO(n,t){_E.call(this,n,t)}function aO(n,t){_E.call(this,n,t)}function oO(n,t){_E.call(this,n,t)}function uO(n,t){_E.call(this,n,t)}function sO(n,t){_E.call(this,n,t)}function hO(n,t){_E.call(this,n,t)}function fO(n,t){_E.call(this,n,t)}function lO(n,t){_E.call(this,n,t)}function bO(n,t){_E.call(this,n,t)}function wO(n,t){_E.call(this,n,t)}function dO(n,t){this.b=n,this.a=t}function gO(n,t){this.b=n,this.a=t}function pO(n,t){this.b=n,this.a=t}function mO(n,t){this.b=n,this.a=t}function vO(n,t){this.a=n,this.b=t}function kO(n,t){this.a=n,this.b=t}function yO(n,t){this.a=n,this.b=t}function MO(n,t){this.a=n,this.b=t}function TO(n,t){_E.call(this,n,t)}function jO(n,t){_E.call(this,n,t)}function EO(n,t){_E.call(this,n,t)}function SO(n,t){_E.call(this,n,t)}function PO(n,t){_E.call(this,n,t)}function CO(n,t){_E.call(this,n,t)}function IO(n,t){_E.call(this,n,t)}function OO(n,t){_E.call(this,n,t)}function AO(n,t){_E.call(this,n,t)}function LO(n,t){_E.call(this,n,t)}function NO(n,t){_E.call(this,n,t)}function $O(n,t){_E.call(this,n,t)}function DO(n,t){_E.call(this,n,t)}function xO(n,t){_E.call(this,n,t)}function RO(n,t){_E.call(this,n,t)}function KO(n,t){_E.call(this,n,t)}function FO(n,t){_E.call(this,n,t)}function _O(n,t){_E.call(this,n,t)}function BO(n,t){_E.call(this,n,t)}function HO(n,t){_E.call(this,n,t)}function UO(n,t){this.a=n,this.b=t}function GO(n,t){this.a=n,this.b=t}function qO(n,t){this.a=n,this.b=t}function XO(n,t){this.a=n,this.b=t}function zO(n,t){this.a=n,this.b=t}function VO(n,t){this.a=n,this.b=t}function WO(n,t){this.a=n,this.b=t}function QO(n,t){this.a=n,this.b=t}function JO(n,t){this.a=n,this.b=t}function YO(n,t){this.a=n,this.b=t}function ZO(n,t){this.a=n,this.b=t}function nA(n,t){this.a=n,this.b=t}function tA(n,t){this.a=n,this.b=t}function eA(n,t){this.b=n,this.a=t}function iA(n,t){this.b=n,this.a=t}function rA(n,t){this.b=n,this.a=t}function cA(n,t){this.b=n,this.a=t}function aA(n,t){this.a=n,this.b=t}function oA(n,t){this.a=n,this.b=t}function uA(n,t){_E.call(this,n,t)}function sA(n,t){this.a=n,this.b=t}function hA(n,t){this.a=n,this.b=t}function fA(n,t){_E.call(this,n,t)}function lA(n,t){this.f=n,this.c=t}function bA(n,t){return $x(n.g,t)}function wA(n,t){return $x(t.b,n)}function dA(n,t){return ymn(n.a,t)}function gA(n,t){return-n.b.af(t)}function pA(n,t){n&&vJ(AFt,n,t)}function mA(n,t){n.i=null,lon(n,t)}function vA(n,t,e){MSn(t,jAn(n,e))}function kA(n,t,e){MSn(t,jAn(n,e))}function yA(n,t){BRn(n.a,uG(t,58))}function MA(n,t){aen(n.a,uG(t,12))}function TA(n,t){this.a=n,this.b=t}function jA(n,t){this.a=n,this.b=t}function EA(n,t){this.a=n,this.b=t}function SA(n,t){this.a=n,this.b=t}function PA(n,t){this.a=n,this.b=t}function CA(n,t){this.d=n,this.b=t}function IA(n,t){this.e=n,this.a=t}function OA(n,t){this.b=n,this.c=t}function AA(n,t){this.i=n,this.g=t}function LA(n,t){this.d=n,this.e=t}function NA(n,t){Iin(new DD(n),t)}function $A(n){return kmn(n.c,n.b)}function DA(n){return n?n.md():null}function xA(n){return null==n?null:n}function RA(n){return typeof n===pZn}function KA(n){return typeof n===dZn}function FA(n){return typeof n===gZn}function _A(n,t){return 0==dwn(n,t)}function BA(n,t){return dwn(n,t)>=0}function HA(n,t){return 0!=dwn(n,t)}function UA(n,t){return Zun(n.Kc(),t)}function GA(n,t){return n.Rd().Xb(t)}function qA(n){return bpn(n),n.d.gc()}function XA(n){return Fq(null==n),n}function zA(n,t){return n.a+=""+t,n}function VA(n,t){return n.a+=""+t,n}function WA(n,t){return n.a+=""+t,n}function QA(n,t){return n.a+=""+t,n}function JA(n,t){return n.a+=""+t,n}function YA(n,t){return n.a+=""+t,n}function ZA(n){return""+(tJ(n),n)}function nL(n){$V(this),xun(this,n)}function tL(){J0(),ez.call(this)}function eL(n,t){Bz.call(this,n,t)}function iL(n,t){Bz.call(this,n,t)}function rL(n,t){Bz.call(this,n,t)}function cL(n,t){s8(n,t,n.c.b,n.c)}function aL(n,t){s8(n,t,n.a,n.a.a)}function oL(n){return u3(n,0),null}function uL(){this.b=0,this.a=!1}function sL(){this.b=0,this.a=!1}function hL(){this.b=new sS(orn(12))}function fL(){fL=E,fht=Abn(Nkn())}function lL(){lL=E,_wt=Abn(bKn())}function bL(){bL=E,bPt=Abn(usn())}function wL(){wL=E,Iv(),Bat=new Ym}function dL(n){return n.a=0,n.b=0,n}function gL(n,t){return n.a=t.g+1,n}function pL(n,t){w_.call(this,n,t)}function mL(n,t){uF.call(this,n,t)}function vL(n,t){AA.call(this,n,t)}function kL(n,t){zx.call(this,n,t)}function yL(n,t){Zsn.call(this,n,t)}function ML(n,t){TP(),vJ(_Ft,n,t)}function TL(n,t){n.q.setTime(W4(t))}function jL(n){e.clearTimeout(n)}function EL(n){return WW(n),new iN(n)}function SL(n,t){return xA(n)===xA(t)}function PL(n,t){return n.a.a.a.cc(t)}function CL(n,t){return r1(n.a,0,t)}function IL(n){return jW(uG(n,74))}function OL(n){return t0((tJ(n),n))}function AL(n){return t0((tJ(n),n))}function LL(n){return p$(n.l,n.m,n.h)}function NL(n,t){return d$(n.a,t.a)}function $L(n,t){return rW(n.a,t.a)}function DL(n,t){return ugn(n.a,t.a)}function xL(n,t){return n.indexOf(t)}function RL(n,t){return 2==n.j[t.p]}function KL(n,t){return n==t?0:n?1:-1}function FL(n){return n<10?"0"+n:""+n}function _L(n){return typeof n===gZn}function BL(n){return n==Flt||n==Hlt}function HL(n){return n==Flt||n==_lt}function UL(n,t){return d$(n.g,t.g)}function GL(n){return Ten(n.b.b,n,0)}function qL(){lX.call(this,0,0,0,0)}function XL(){td.call(this,new u8)}function zL(n,t){Ntn(n,0,n.length,t)}function VL(n,t){return kD(n.a,t),t}function WL(n,t){return GB(),t.a+=n}function QL(n,t){return GB(),t.a+=n}function JL(n,t){return GB(),t.c+=n}function YL(n,t){return kD(n.c,t),n}function ZL(n,t){return gsn(n.a,t),n}function nN(n){this.a=xI(),this.b=n}function tN(n){this.a=xI(),this.b=n}function eN(n){this.a=n.a,this.b=n.b}function iN(n){this.a=n,Ff.call(this)}function rN(n){this.a=n,Ff.call(this)}function cN(){gY.call(this,0,0,0,0)}function aN(n){return gsn(new wJ,n)}function oN(n){return xJ(uG(n,123))}function uN(n){return n.vh()&&n.wh()}function sN(n){return n!=uRt&&n!=sRt}function hN(n){return n==JDt||n==YDt}function fN(n){return n==nxt||n==QDt}function lN(n){return n==wjt||n==bjt}function bN(n,t){return d$(n.g,t.g)}function wN(n,t){return new Zsn(t,n)}function dN(n,t){return new Zsn(t,n)}function gN(n){return nG(n.b.Kc(),n.a)}function pN(n,t){sbn(n,t),Ocn(n,n.D)}function mN(n,t,e){Scn(n,t),pcn(n,e)}function vN(n,t,e){kcn(n,t),vcn(n,e)}function kN(n,t,e){ycn(n,t),Mcn(n,e)}function yN(n,t,e){mcn(n,t),jcn(n,e)}function MN(n,t,e){Tcn(n,t),Ecn(n,e)}function TN(n,t,e){AK.call(this,n,t,e)}function jN(n){lA.call(this,n,!0)}function EN(){qP.call(this,"Tail",3)}function SN(){qP.call(this,"Head",1)}function PN(n){cHn(),Bun.call(this,n)}function CN(n){lX.call(this,n,n,n,n)}function IN(n){n.c=Inn(dat,EZn,1,0,5,1)}function ON(n){return n.b&&sXn(n),n.a}function AN(n){return n.b&&sXn(n),n.c}function LN(n,t){Nut||(n.b=t)}function NN(n,t){return n[n.length]=t}function $N(n,t){return n[n.length]=t}function DN(n,t){return Ern(t,h0(n))}function xN(n,t){return Ern(t,h0(n))}function RN(n,t){return kan(UW(n.d),t)}function KN(n,t){return kan(UW(n.g),t)}function FN(n,t){return kan(UW(n.j),t)}function _N(n,t){uF.call(this,n.b,t)}function BN(n,t){ttn(z5(n.a),v2(t))}function HN(n,t){ttn(Aen(n.a),k2(t))}function UN(n,t,e){kN(e,e.i+n,e.j+t)}function GN(n,t,e){uQ(n.c[t.g],t.g,e)}function qN(n,t,e){uG(n.c,71).Gi(t,e)}function XN(n,t,e){return uQ(n,t,e),e}function zN(n){Prn(n.Sf(),new Od(n))}function VN(n){return null!=n?Hon(n):0}function WN(n){return null==n?0:Hon(n)}function QN(n){QYn(),Qm.call(this,n)}function JN(n){this.a=n,WU.call(this,n)}function YN(){YN=E,e.Math.log(2)}function ZN(){ZN=E,kP(),rBt=WKt}function n$(){n$=E,vSt=new rpn(kxt)}function t$(){t$=E,new e$,new Zm}function e$(){new Ym,new Ym,new Ym}function i$(){throw hv(new TM(hat))}function r$(){throw hv(new TM(hat))}function c$(){throw hv(new TM(fat))}function a$(){throw hv(new TM(fat))}function o$(n){this.a=n,VE.call(this,n)}function u$(n){this.a=n,VE.call(this,n)}function s$(n,t){ZW(),this.a=n,this.b=t}function h$(n,t){WW(t),uY(n).Jc(new b)}function f$(n,t){UX(n.c,n.c.length,t)}function l$(n){return n.a<n.c.c.length}function b$(n){return n.a<n.c.a.length}function w$(n,t){return n.a?n.b:t.We()}function d$(n,t){return n<t?-1:n>t?1:0}function g$(n,t){return dwn(n,t)>0?n:t}function p$(n,t,e){return{l:n,m:t,h:e}}function m$(n,t){null!=n.a&&MA(t,n.a)}function v$(n){c2(n,null),u2(n,null)}function k$(n,t,e){return vJ(n.g,e,t)}function y$(n,t,e){return avn(t,e,n.c)}function M$(n,t,e){return vJ(n.k,e,t)}function T$(n,t,e){return gWn(n,t,e),e}function j$(n,t){return n2(),t.n.b+=n}function E$(n){HZ.call(this),this.b=n}function S$(n){LF.call(this),this.a=n}function P$(){qP.call(this,"Range",2)}function C$(n){this.b=n,this.a=new Zm}function I$(n){this.b=new tt,this.a=n}function O$(n){n.a=new R,n.c=new R}function A$(n){n.a=new Ym,n.d=new Ym}function L$(n){s2(n,null),h2(n,null)}function N$(n,t){return kWn(n.a,t,null)}function $$(n,t){return vJ(n.a,t.a,t)}function D$(n){return new MO(n.a,n.b)}function x$(n){return new MO(n.c,n.d)}function R$(n){return new MO(n.c,n.d)}function K$(n,t){return rVn(n.c,n.b,t)}function F$(n,t){return null!=n&&Eyn(n,t)}function _$(n,t){return-1!=Yhn(n.Kc(),t)}function B$(n){return n.Ob()?n.Pb():null}function H$(n){this.b=(hZ(),new Vw(n))}function U$(n){this.a=n,Ym.call(this)}function G$(){zx.call(this,null,null)}function q$(){Vx.call(this,null,null)}function X$(){_E.call(this,"INSTANCE",0)}function z$(){FEn(),this.a=new mKn(Llt)}function V$(n){return mvn(n,0,n.length)}function W$(n,t){return new ex(n.Kc(),t)}function Q$(n,t){return null!=n.a.Bc(t)}function J$(n,t){Czn(n),n.Gc(uG(t,15))}function Y$(n,t,e){n.c.bd(t,uG(e,136))}function Z$(n,t,e){n.c.Ui(t,uG(e,136))}function nD(n,t){n.c&&(cq(t),B1(t))}function tD(n,t){n.q.setHours(t),Iqn(n,t)}function eD(n,t){KR(t,n.a.a.a,n.a.a.b)}function iD(n,t,e,i){uQ(n.a[t.g],e.g,i)}function rD(n,t,e){return n.a[t.g][e.g]}function cD(n,t){return n.e[t.c.p][t.p]}function aD(n,t){return n.c[t.c.p][t.p]}function oD(n,t){return n.a[t.c.p][t.p]}function uD(n,t){return n.j[t.p]=oRn(t)}function sD(n,t){return null!=n.a.Bc(t)}function hD(n,t){return uM(pK(t.a))<=n}function fD(n,t){return uM(pK(t.a))>=n}function lD(n,t){return r7(n.f,t.Pg())}function bD(n,t){return n.a*t.a+n.b*t.b}function wD(n,t){return n.a<Q_(t)?-1:1}function dD(n,t){return r7(n.b,t.Pg())}function gD(n,t,e){return e?0!=t:t!=n-1}function pD(n,t,e){n.a=1502^t,n.b=e^X0n}function mD(n,t,e){return n.a=t,n.b=e,n}function vD(n,t){return n.a*=t,n.b*=t,n}function kD(n,t){return mv(n.c,t),!0}function yD(n,t,e){return uQ(n.g,t,e),e}function MD(n,t,e){FG.call(this,n,t,e)}function TD(n,t,e){MD.call(this,n,t,e)}function jD(n,t,e){_G.call(this,n,t,e)}function ED(n,t,e){_G.call(this,n,t,e)}function SD(n,t,e){jD.call(this,n,t,e)}function PD(n,t,e){MD.call(this,n,t,e)}function CD(n,t,e){TD.call(this,n,t,e)}function ID(n,t,e){FG.call(this,n,t,e)}function OD(n,t,e){FG.call(this,n,t,e)}function AD(n,t,e){ID.call(this,n,t,e)}function LD(n){n.j=Inn(jot,zZn,319,0,0,1)}function ND(){this.a=Inn(dat,EZn,1,8,5,1)}function $D(){this.Bb|=256,this.Bb|=512}function DD(n){this.i=n,this.f=this.i.j}function xD(n){this.c=n,this.a=this.c.a}function RD(n,t){this.a=n,VE.call(this,t)}function KD(n,t){return Hgn(n,new WM,t).a}function FD(n){if(!n)throw hv(new Dv)}function _D(n){if(!n)throw hv(new xv)}function BD(){(BD=E)(),dut=new _}function HD(){HD=E,SP(),SBt=new _l}function UD(){UD=E,sut=new Xy(null)}function GD(n){ZZ(n,Uet),ARn(n,zQn(n))}function qD(n){n.a=uG(Lsn(n.b.a,4),129)}function XD(n){n.a=uG(Lsn(n.b.a,4),129)}function zD(n){n.b.Qb(),--n.d.f.d,DX(n.d)}function VD(n){this.a=n,fb.call(this,n.d)}function WD(n,t){this.a=n,iT.call(this,t)}function QD(n,t){this.a=n,iT.call(this,t)}function JD(n,t){this.a=n,iT.call(this,t)}function YD(n,t){this.a=t,iT.call(this,n)}function ZD(n,t){this.a=t,c8.call(this,n)}function nx(n,t){this.a=n,c8.call(this,t)}function tx(n,t){this.a=t,WE.call(this,n)}function ex(n,t){this.a=t,WE.call(this,n)}function ix(n,t){return WW(t),new tx(n,t)}function rx(n,t){return new EAn(n.a,n.b,t)}function cx(n,t,e){return n.indexOf(t,e)}function ax(n,t){return n.lastIndexOf(t)}function ox(n){return null==n?IZn:cpn(n)}function ux(n){return null==n?null:n.name}function sx(n){return n.l+n.m*w0n+n.h*d0n}function hx(n){return Jj(n.a)?y2(n):null}function fx(n){$w.call(this,(tJ(n),n))}function lx(n){$w.call(this,(tJ(n),n))}function bx(n){ib.call(this,uG(WW(n),34))}function wx(n){ib.call(this,uG(WW(n),34))}function dx(n){td.call(this,new Bnn(n))}function gx(n){qw.call(this,n),this.a=n}function px(n){Gw.call(this,n),this.a=n}function mx(n){nT.call(this,n),this.a=n}function vx(){LD(this),KY(this),this.je()}function kx(n){this.a=n,Uw.call(this,n)}function yx(n){return MK(null!=n.a),n.a}function Mx(n,t){return kD(t.a,n.a),n.a}function Tx(n,t){return kD(t.b,n.a),n.a}function jx(n,t){return kD(t.a,n.a),n.a}function Ex(n,t,e){return psn(n,t,t,e),n}function Sx(n,t){return++n.b,kD(n.a,t)}function Px(n,t){return++n.b,men(n.a,t)}function Cx(n,t){return ugn(n.c.d,t.c.d)}function Ix(n,t){return ugn(n.c.c,t.c.c)}function Ox(n,t){return ugn(n.n.a,t.n.a)}function Ax(n,t){return uG(Y9(n.b,t),15)}function Lx(n,t){return n.n.b=(tJ(t),t)}function Nx(n,t){return n.n.b=(tJ(t),t)}function $x(n,t){return!!t&&n.b[t.g]==t}function Dx(n){return l$(n.a)||l$(n.b)}function xx(n){return n.$H||(n.$H=++_ut)}function Rx(n){return null!=n.a?n.a:null}function Kx(n,t){return ugn(n.e.b,t.e.b)}function Fx(n,t){return ugn(n.e.a,t.e.a)}function _x(n,t,e){return m5(n,t,e,n.b)}function Bx(n,t,e){return m5(n,t,e,n.c)}function Hx(n){return GB(),!!n&&!n.dc()}function Ux(){JS(),this.b=new Eg(this)}function Gx(){Gx=E,bht=new uF(i3n,0)}function qx(){qx=E,tot=!1,eot=!0}function Xx(n){var t;t=n.a,n.a=n.b,n.b=t}function zx(n,t){jP(),this.a=n,this.b=t}function Vx(n,t){EP(),this.b=n,this.c=t}function Wx(n,t){rz(),this.f=t,this.d=n}function Qx(n,t){e7(t,n),this.d=n,this.c=t}function Jx(n,t){Yvn.call(this,n,t,null)}function Yx(n,t,e,i){qz.call(this,n,t,e,i)}function Zx(n){this.d=n,DD.call(this,n)}function nR(n){this.c=n,DD.call(this,n)}function tR(n){this.c=n,Zx.call(this,n)}function eR(n){return new n8(3,n)}function iR(n){return man(n,g1n),new R7(n)}function rR(n){return EZ(),parseInt(n)||-1}function cR(n){return Hy(),Fcn((d0(),Aat),n)}function aR(n,t,e){return cx(n,$Cn(t),e)}function oR(n,t){return new $_(n,n.gc(),t)}function uR(n,t){return Tz(n.c).Md().Xb(t)}function sR(n,t,e){n.fd(t).Rb(e)}function hR(n,t,e){uG(xen(n,t),21).Fc(e)}function fR(n,t,e){Vdn(n.a,e),bMn(n.a,t)}function lR(n){F$(n,158)&&uG(n,158).pi()}function bR(n){bG.call(this,n,null,null)}function wR(n){dS(),this.b=n,this.a=!0}function dR(n){gS(),this.b=n,this.a=!0}function gR(n){return MK(0!=n.b),n.a.a.c}function pR(n){return MK(0!=n.b),n.c.b.c}function mR(n,t){return psn(n,t,t+1,""),n}function vR(n,t){return!!n.q&&PV(n.q,t)}function kR(n){return n.b=uG(_Y(n.a),44)}function yR(n){return null!=n.f?n.f:""+n.g}function MR(n){return null!=n.f?n.f:""+n.g}function TR(n,t){return n>0?t/(n*n):100*t}function jR(n,t){return n>0?t*t/n:t*t*100}function ER(n,t){return uG(ain(n.a,t),34)}function SR(n,t){return jIn(),UNn(n,t.e,t)}function PR(n,t,e){return ZS(),e.Mg(n,t)}function CR(n){return tcn(),n.e.a+n.f.a/2}function IR(n,t,e){return tcn(),e.e.a-n*t}function OR(n){return tcn(),n.e.b+n.f.b/2}function AR(n,t,e){return tcn(),e.e.b-n*t}function LR(n){n.d=new bR(n),n.e=new Ym}function NR(){this.a=new K1,this.b=new K1}function $R(n){this.c=n,this.a=1,this.b=1}function DR(n){aYn(),dv(this),this.Ff(n)}function xR(n,t,e){Stn(),n.pf(t)&&e.Cd(n)}function RR(n,t,e){return kD(t,xpn(n,e))}function KR(n,t,e){return n.a+=t,n.b+=e,n}function FR(n,t,e){return n.a*=t,n.b*=e,n}function _R(n,t){return n.a=t.a,n.b=t.b,n}function BR(n){return n.a=-n.a,n.b=-n.b,n}function HR(n,t,e){return n.a-=t,n.b-=e,n}function UR(n){lS.call(this),dan(this,n)}function GR(){_E.call(this,"GROW_TREE",0)}function qR(){_E.call(this,"POLYOMINO",0)}function XR(n,t,e){ltn.call(this,n,t,e,2)}function zR(n,t,e){$dn(z5(n.a),t,v2(e))}function VR(n,t){jP(),zx.call(this,n,t)}function WR(n,t){EP(),Vx.call(this,n,t)}function QR(n,t){EP(),WR.call(this,n,t)}function JR(n,t){EP(),Vx.call(this,n,t)}function YR(n,t){return n.c.Fc(uG(t,136))}function ZR(n,t,e){$dn(Aen(n.a),t,k2(e))}function nK(n){this.c=n,ycn(n,0),Mcn(n,0)}function tK(n,t){ZN(),OX.call(this,n,t)}function eK(n,t){ZN(),tK.call(this,n,t)}function iK(n,t){ZN(),tK.call(this,n,t)}function rK(n,t){ZN(),OX.call(this,n,t)}function cK(n,t){ZN(),iK.call(this,n,t)}function aK(n,t){ZN(),rK.call(this,n,t)}function oK(n,t){ZN(),OX.call(this,n,t)}function uK(n,t,e){return t.zl(n.e,n.c,e)}function sK(n,t,e){return t.Al(n.e,n.c,e)}function hK(n,t,e){return QXn(Len(n,t),e)}function fK(n,t){return mwn(n.e,uG(t,54))}function lK(n){return null==n?null:AQn(n)}function bK(n){return null==n?null:mOn(n)}function wK(n){return null==n?null:cpn(n)}function dK(n){return null==n?null:cpn(n)}function gK(n){return Fq(null==n||KA(n)),n}function pK(n){return Fq(null==n||FA(n)),n}function mK(n){return Fq(null==n||RA(n)),n}function vK(n){null==n.o&&axn(n)}function kK(n){if(!n)throw hv(new Dv)}function yK(n){if(!n)throw hv(new Nv)}function MK(n){if(!n)throw hv(new Bv)}function TK(n){if(!n)throw hv(new xv)}function jK(n){if(!n)throw hv(new Fv)}function EK(){EK=E,KFt=new Gk,new qk}function SK(){SK=E,zCt=new Cm("root")}function PK(){Kan.call(this),this.Bb|=P0n}function CK(n,t){this.d=n,Cw(this),this.b=t}function IK(n,t){Fnn.call(this,n),this.a=t}function OK(n,t){Fnn.call(this,n),this.a=t}function AK(n,t,e){A7.call(this,n,t,e,null)}function LK(n,t,e){A7.call(this,n,t,e,null)}function NK(n,t){this.c=n,OE.call(this,n,t)}function $K(n,t){this.a=n,NK.call(this,n,t)}function DK(n){this.q=new e.Date(W4(n))}function xK(n){return n>8?0:n+1}function RK(n,t){Nut||kD(n.a,t)}function KK(n,t){return WS(),jsn(t.d.i,n)}function FK(n,t){return Pun(),new oHn(t,n)}function _K(n,t,e){return n.Ne(t,e)<=0?e:t}function BK(n,t,e){return n.Ne(t,e)<=0?t:e}function HK(n,t){return uG(ain(n.b,t),143)}function UK(n,t){return uG(ain(n.c,t),233)}function GK(n){return uG(zq(n.a,n.b),294)}function qK(n){return new MO(n.c,n.d+n.a)}function XK(n){return tJ(n),n?1231:1237}function zK(n){return n2(),lN(uG(n,203))}function VK(){VK=E,lht=ggn((Qmn(),JRt))}function WK(n,t){t.a?W$n(n,t):sD(n.a,t.b)}function QK(n,t,e){++n.j,n.tj(),Ann(n,t,e)}function JK(n,t,e){++n.j,n.qj(t,n.Zi(t,e))}function YK(n,t,e){n.fd(t).Rb(e)}function ZK(n,t,e){return e=$Un(n,t,6,e)}function nF(n,t,e){return e=$Un(n,t,3,e)}function tF(n,t,e){return e=$Un(n,t,9,e)}function eF(n,t){return ZZ(t,W2n),n.f=t,n}function iF(n,t){return(t&vZn)%n.d.length}function rF(n,t,e){return fXn(n.c,n.b,t,e)}function cF(n,t){this.c=n,Drn.call(this,t)}function aF(n,t){this.a=n,xm.call(this,t)}function oF(n,t){this.a=n,xm.call(this,t)}function uF(n,t){Cm.call(this,n),this.a=t}function sF(n,t){Bm.call(this,n),this.a=t}function hF(n,t){Bm.call(this,n),this.a=t}function fF(n){smn.call(this,0,0),this.f=n}function lF(n,t,e){return n.a+=mvn(t,0,e),n}function bF(n){return!n.a&&(n.a=new M),n.a}function wF(n,t){var e;return e=n.e,n.e=t,e}function dF(n,t){var e;return e=t,!!n.Fe(e)}function gF(n,t){return qx(),n==t?0:n?1:-1}function pF(n,t){n.a.bd(n.b,t),++n.b,n.c=-1}function mF(n){n.b?mF(n.b):n.f.c.zc(n.e,n.d)}function vF(n){$V(n.e),n.d.b=n.d,n.d.a=n.d}function kF(n,t,e){vS(),Ob(n,t.Ve(n.a,e))}function yF(n,t,e){return UV(n,uG(t,22),e)}function MF(n,t){return aT(new Array(t),n)}function TF(n){return pz(Dz(n,32))^pz(n)}function jF(n){return String.fromCharCode(n)}function EF(n){return null==n?null:n.message}function SF(n,t,e){return n.apply(t,e)}function PF(n,t){n[U0n].call(n,t)}function CF(n,t){n[U0n].call(n,t)}function IF(n,t){return WS(),!jsn(t.d.i,n)}function OF(n,t,e,i){lX.call(this,n,t,e,i)}function AF(){HF.call(this),this.a=new sj}function LF(){this.n=new sj,this.o=new sj}function NF(){this.b=new sj,this.c=new Zm}function $F(){this.a=new Zm,this.b=new Zm}function DF(){this.a=new lt,this.b=new qv}function xF(){this.b=new u8,this.a=new u8}function RF(){this.b=new ek,this.a=new ek}function KF(){this.b=new Ym,this.a=new Ym}function FF(){this.b=new Gj,this.a=new Ma}function _F(){this.a=new hl,this.b=new oc}function BF(){this.a=new Zm,this.d=new Zm}function HF(){this.n=new Dk,this.i=new cN}function UF(n){this.a=(man(n,g1n),new R7(n))}function GF(n){this.a=(man(n,g1n),new R7(n))}function qF(n){return n<100?null:new cj(n)}function XF(n,t){return n.n.a=(tJ(t),t+10)}function zF(n,t){return n.n.a=(tJ(t),t+10)}function VF(n,t){return t==n||sSn(mRn(t),n)}function WF(n,t){return null==vJ(n.a,t,"")}function QF(n,t){return t.qi(n.a)}function JF(n,t){return n.a+=t.a,n.b+=t.b,n}function YF(n,t){return n.a-=t.a,n.b-=t.b,n}function ZF(n){return Xv(n.j.c,0),n.a=-1,n}function n_(n,t,e){return e=$Un(n,t,11,e)}function t_(n,t,e){null!=e&&Xan(t,gTn(n,e))}function e_(n,t,e){null!=e&&zan(t,gTn(n,e))}function i_(n,t,e,i){fV.call(this,n,t,e,i)}function r_(n,t,e,i){fV.call(this,n,t,e,i)}function c_(n,t,e,i){r_.call(this,n,t,e,i)}function a_(n,t,e,i){wV.call(this,n,t,e,i)}function o_(n,t,e,i){wV.call(this,n,t,e,i)}function u_(n,t,e,i){wV.call(this,n,t,e,i)}function s_(n,t,e,i){o_.call(this,n,t,e,i)}function h_(n,t,e,i){o_.call(this,n,t,e,i)}function f_(n,t,e,i){u_.call(this,n,t,e,i)}function l_(n,t,e,i){h_.call(this,n,t,e,i)}function b_(n,t,e,i){kV.call(this,n,t,e,i)}function w_(n,t){dM.call(this,Hit+n+Vet+t)}function d_(n,t){return n.jk().wi().ri(n,t)}function g_(n,t){return n.jk().wi().ti(n,t)}function p_(n,t){return tJ(n),xA(n)===xA(t)}function m_(n,t){return tJ(n),xA(n)===xA(t)}function v_(n,t){return n.b.Bd(new QP(n,t))}function k_(n,t){return n.b.Bd(new JP(n,t))}function y_(n,t){return n.b.Bd(new YP(n,t))}function M_(n,t){return n.e=uG(n.d.Kb(t),159)}function T_(n,t,e){return n.lastIndexOf(t,e)}function j_(n,t,e){return ugn(n[t.a],n[e.a])}function E_(n,t){return kfn(t,(jYn(),Oyt),n)}function S_(n,t){return d$(t.a.d.p,n.a.d.p)}function P_(n,t){return d$(n.a.d.p,t.a.d.p)}function C_(n,t){return ugn(n.c-n.s,t.c-t.s)}function I_(n,t){return ugn(n.b.e.a,t.b.e.a)}function O_(n,t){return ugn(n.c.e.a,t.c.e.a)}function A_(n){return n.c?Ten(n.c.a,n,0):-1}function L_(n){return n==rRt||n==aRt||n==cRt}function N_(n,t){this.c=n,QV.call(this,n,t)}function $_(n,t,e){this.a=n,Qx.call(this,t,e)}function D_(n){this.c=n,rL.call(this,YZn,0)}function x_(n,t,e){this.c=t,this.b=e,this.a=n}function R_(n){PU(),this.d=n,this.a=new ND}function K_(n){sB(),this.a=(hZ(),new nT(n))}function F_(n,t){hN(n.f)?JDn(n,t):wCn(n,t)}function __(n,t){sG.call(this,n,n.length,t)}function B_(n,t){Nut||t&&(n.d=t)}function H_(n,t){return F$(t,15)&&G_n(n.c,t)}function U_(n,t,e){return uG(n.c,71).Wk(t,e)}function G_(n,t,e){return uG(n.c,71).Xk(t,e)}function q_(n,t,e){return uK(n,uG(t,343),e)}function X_(n,t,e){return sK(n,uG(t,343),e)}function z_(n,t,e){return yPn(n,uG(t,343),e)}function V_(n,t,e){return FCn(n,uG(t,343),e)}function W_(n,t){return null==t?null:Xwn(n.b,t)}function Q_(n){return FA(n)?(tJ(n),n):n.ue()}function J_(n){return!isNaN(n)&&!isFinite(n)}function Y_(n){O$(this),BY(this),Qon(this,n)}function Z_(n){IN(this),dG(this.c,0,n.Pc())}function nB(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 eB(n,t,e){this.d=n,this.b=e,this.a=t}function iB(n){this.a=n,bS(),Bsn(Date.now())}function rB(n){LQ(n.a),Lnn(n.c,n.b),n.b=null}function cB(){cB=E,out=new K,uut=new F}function aB(){aB=E,DFt=Inn(dat,EZn,1,0,5,1)}function oB(){oB=E,X_t=Inn(dat,EZn,1,0,5,1)}function uB(){uB=E,z_t=Inn(dat,EZn,1,0,5,1)}function sB(){sB=E,new jv((hZ(),hZ(),zot))}function hB(n){return Rtn(),Fcn((xtn(),Mut),n)}function fB(n){return ybn(),Fcn((bnn(),xut),n)}function lB(n){return _kn(),Fcn((k8(),Jut),n)}function bB(n){return Xin(),Fcn((y8(),tst),n)}function wB(n){return W_n(),Fcn((uhn(),kst),n)}function dB(n){return Yrn(),Fcn((fnn(),Cst),n)}function gB(n){return Ktn(),Fcn((hnn(),Dst),n)}function pB(n){return Yen(),Fcn((lnn(),Bst),n)}function mB(n){return JYn(),Fcn((fL(),fht),n)}function vB(n){return ehn(),Fcn((_tn(),vht),n)}function kB(n){return vyn(),Fcn((Htn(),Eht),n)}function yB(n){return myn(),Fcn((Btn(),Rht),n)}function MB(n){return BS(),Fcn((r6(),_ht),n)}function TB(n){return zin(),Fcn((M8(),vft),n)}function jB(n){return Jen(),Fcn((wnn(),vlt),n)}function EB(n){return uIn(),Fcn(($in(),Ilt),n)}function SB(n){return Xhn(),Fcn((Gtn(),Glt),n)}function PB(n){return Uvn(),Fcn((Utn(),ibt),n)}function CB(n,t){if(!n)throw hv(new vM(t))}function IB(n){if(!n)throw hv(new kM(PZn))}function OB(n,t){if(n!=t)throw hv(new Fv)}function AB(n,t,e){this.a=n,this.b=t,this.c=e}function LB(n,t,e){this.a=n,this.b=t,this.c=e}function NB(n,t,e){this.a=n,this.b=t,this.c=e}function $B(n,t,e){this.b=n,this.a=t,this.c=e}function DB(n,t,e){this.b=n,this.c=t,this.a=e}function xB(n,t,e){this.a=n,this.b=t,this.c=e}function RB(n,t,e){this.e=t,this.b=n,this.d=e}function KB(n,t,e){this.b=n,this.a=t,this.c=e}function FB(n,t,e){return vS(),n.a.Yd(t,e),t}function _B(n){var t;return(t=new yn).e=n,t}function BB(n){var t;return(t=new pk).b=n,t}function HB(){HB=E,Nbt=new $e,$bt=new De}function UB(){UB=E,Jwt=new ui,Qwt=new si}function GB(){GB=E,rdt=new mr,cdt=new vr}function qB(n){return gon(),Fcn((q7(),Cdt),n)}function XB(n){return zYn(),Fcn((lL(),_wt),n)}function zB(n){return Ghn(),Fcn((Xtn(),Wwt),n)}function VB(n){return qhn(),Fcn((qtn(),ldt),n)}function WB(n){return gPn(),Fcn((Din(),vdt),n)}function QB(n){return h_n(),Fcn((osn(),Kdt),n)}function JB(n){return vAn(),Fcn((ecn(),zdt),n)}function YB(n){return H7(),Fcn((I8(),Jdt),n)}function ZB(n){return jan(),Fcn((U7(),egt),n)}function nH(n){return ran(),Fcn((G7(),ogt),n)}function tH(n){return kvn(),Fcn((xin(),wgt),n)}function eH(n){return Vin(),Fcn((E8(),mgt),n)}function iH(n){return RIn(),Fcn((ccn(),Jgt),n)}function rH(n){return r_n(),Fcn((Efn(),spt),n)}function cH(n){return ihn(),Fcn((z7(),wpt),n)}function aH(n){return Zen(),Fcn((V7(),vpt),n)}function oH(n){return Y6(),Fcn((j8(),Tpt),n)}function uH(n){return ESn(),Fcn((rcn(),Ugt),n)}function sH(n){return Pfn(),Fcn((X7(),Tgt),n)}function hH(n){return tOn(),Fcn((icn(),Agt),n)}function fH(n){return Wtn(),Fcn((S8(),Dgt),n)}function lH(n){return Gpn(),Fcn((Kin(),$mt),n)}function bH(n){return MKn(),Fcn((chn(),ojt),n)}function wH(n){return Cwn(),Fcn((W7(),ljt),n)}function dH(n){return Yyn(),Fcn((ztn(),mjt),n)}function gH(n){return pyn(),Fcn((Rin(),Ejt),n)}function pH(n){return THn(),Fcn((Sfn(),Rjt),n)}function mH(n){return yvn(),Fcn((Vtn(),Ujt),n)}function vH(n){return nin(),Fcn((P8(),zjt),n)}function kH(n){return can(),Fcn((Y7(),Yjt),n)}function yH(n){return isn(),Fcn((Q7(),iEt),n)}function MH(n){return Sln(),Fcn((J7(),uEt),n)}function TH(n){return kbn(),Fcn((Z7(),bEt),n)}function jH(n){return ian(),Fcn((nnn(),mEt),n)}function EH(n){return zhn(),Fcn((tnn(),TEt),n)}function SH(n){return ean(),Fcn((snn(),GEt),n)}function PH(n){return Z6(),Fcn((C8(),nSt),n)}function CH(n){return b0(),Fcn((L8(),bSt),n)}function IH(n){return w0(),Fcn((N8(),pSt),n)}function OH(n){return _7(),Fcn(($8(),RSt),n)}function AH(n){return l0(),Fcn((D8(),XSt),n)}function LH(n){return Cjn(),Fcn((sen(),YSt),n)}function NH(n){return OHn(),Fcn((bL(),bPt),n)}function $H(n){return Pln(),Fcn((enn(),mPt),n)}function DH(n){return mbn(),Fcn((uen(),KCt),n)}function xH(n){return i3(),Fcn((O8(),HCt),n)}function RH(n){return pon(),Fcn((A8(),JCt),n)}function KH(n){return zPn(),Fcn((Fin(),rIt),n)}function FH(n){return vbn(),Fcn((inn(),bIt),n)}function _H(n){return Ptn(),Fcn((x8(),uIt),n)}function BH(n){return dTn(),Fcn((oen(),tOt),n)}function HH(n){return esn(),Fcn((rnn(),aOt),n)}function UH(n){return Jmn(),Fcn((cnn(),fOt),n)}function GH(n){return Zyn(),Fcn((ann(),gOt),n)}function qH(n){return Bgn(),Fcn((onn(),LOt),n)}function XH(n){return a9(),Fcn((R8(),jAt),n)}function zH(n){return Aun(),Fcn((T8(),Lbt),n)}function VH(n){return zIn(),Fcn((acn(),mbt),n)}function WH(n){return den(),Fcn((unn(),IAt),n)}function QH(n){return rhn(),Fcn((K8(),NAt),n)}function JH(n){return _Rn(),Fcn((_in(),BAt),n)}function YH(n){return nP(),Fcn(($6(),WAt),n)}function ZH(n){return Rdn(),Fcn((gnn(),XAt),n)}function nU(n){return tP(),Fcn((D6(),YAt),n)}function tU(n){return B7(),Fcn((F8(),eLt),n)}function eU(n){return pOn(),Fcn((Bin(),sLt),n)}function iU(n){return eP(),Fcn((x6(),XLt),n)}function rU(n){return Vhn(),Fcn((_8(),QLt),n)}function cU(n){return Rkn(),Fcn((Uin(),bNt),n)}function aU(n){return lAn(),Fcn((csn(),TNt),n)}function oU(n){return nMn(),Fcn((ocn(),DNt),n)}function uU(n){return ZSn(),Fcn((ucn(),t$t),n)}function sU(n){return xdn(),Fcn((Hin(),ext),n)}function hU(n){return Zrn(),Fcn((pnn(),oxt),n)}function fU(n){return _gn(),Fcn((hen(),bxt),n)}function lU(n){return RCn(),Fcn((scn(),yxt),n)}function bU(n){return Own(),Fcn((dnn(),Nxt),n)}function wU(n){return Ajn(),Fcn((fen(),Fxt),n)}function dU(n){return VDn(),Fcn((ohn(),Qxt),n)}function gU(n){return Vkn(),Fcn((Gin(),iRt),n)}function pU(n){return $Pn(),Fcn((hcn(),fRt),n)}function mU(n){return eNn(),Fcn((fcn(),vRt),n)}function vU(n){return KQn(),Fcn((qin(),HRt),n)}function kU(n){return Qmn(),Fcn((len(),ZRt),n)}function yU(n){return aUn(),Fcn((ahn(),hKt),n)}function MU(n){return Iwn(),Fcn((mnn(),dKt),n)}function TU(n,t){return tJ(n),n+(tJ(t),t)}function jU(n){return CU(),Fcn((B8(),vKt),n)}function EU(n){return qpn(),Fcn((ben(),EKt),n)}function SU(n){return Eln(),Fcn((wen(),LKt),n)}function PU(){PU=E,KQn(),zEt=_Rt,VEt=kRt}function CU(){CU=E,gKt=new Pq,pKt=new gV}function IU(n){return!n.e&&(n.e=new Zm),n.e}function OU(n,t){this.c=n,this.a=t,this.b=t-n}function AU(n,t,e){this.a=n,this.b=t,this.c=e}function LU(n,t,e){this.a=n,this.b=t,this.c=e}function NU(n,t,e){this.a=n,this.b=t,this.c=e}function $U(n,t,e){this.a=n,this.b=t,this.c=e}function DU(n,t,e){this.a=n,this.b=t,this.c=e}function xU(n,t,e){this.a=n,this.b=t,this.c=e}function RU(n,t,e){this.e=n,this.a=t,this.c=e}function KU(n,t,e){ZN(),_1.call(this,n,t,e)}function FU(n,t,e){ZN(),CQ.call(this,n,t,e)}function _U(n,t,e){ZN(),CQ.call(this,n,t,e)}function BU(n,t,e){ZN(),CQ.call(this,n,t,e)}function HU(n,t,e){ZN(),FU.call(this,n,t,e)}function UU(n,t,e){ZN(),FU.call(this,n,t,e)}function GU(n,t,e){ZN(),UU.call(this,n,t,e)}function qU(n,t,e){ZN(),_U.call(this,n,t,e)}function XU(n,t,e){ZN(),BU.call(this,n,t,e)}function zU(n){lX.call(this,n.d,n.c,n.a,n.b)}function VU(n){lX.call(this,n.d,n.c,n.a,n.b)}function WU(n){this.d=n,Cw(this),this.b=Ez(n.d)}function QU(n){return rDn(),Fcn((asn(),SFt),n)}function JU(n,t){return WW(n),WW(t),new jE(n,t)}function YU(n,t){return WW(n),WW(t),new WG(n,t)}function ZU(n,t){return WW(n),WW(t),new QG(n,t)}function nG(n,t){return WW(n),WW(t),new DE(n,t)}function tG(n){return MK(0!=n.b),Lrn(n,n.a.a)}function eG(n){return MK(0!=n.b),Lrn(n,n.c.b)}function iG(n){return!n.c&&(n.c=new Ks),n.c}function rG(n){var t;return cin(t=new Zm,n),t}function cG(n){var t;return cin(t=new ek,n),t}function aG(n){var t;return Fon(t=new rk,n),t}function oG(n){var t;return Fon(t=new lS,n),t}function uG(n,t){return Fq(null==n||Eyn(n,t)),n}function sG(n,t,e){_z.call(this,t,e),this.a=n}function hG(n,t){this.c=n,this.b=t,this.a=!1}function fG(){this.a=";,;",this.b="",this.c=""}function lG(n,t,e){this.b=n,eL.call(this,t,e)}function bG(n,t,e){this.c=n,VP.call(this,t,e)}function wG(n,t,e){FC.call(this,n,t),this.b=e}function dG(n,t,e){b$n(e,0,n,t,e.length,!1)}function gG(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function pG(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function mG(n,t){t&&(n.b=t,n.a=(GQ(t),t.a))}function vG(n,t){if(!n)throw hv(new vM(t))}function kG(n,t){if(!n)throw hv(new kM(t))}function yG(n,t){if(!n)throw hv(new gM(t))}function MG(n,t){return YS(),d$(n.d.p,t.d.p)}function TG(n,t){return tcn(),ugn(n.e.b,t.e.b)}function jG(n,t){return tcn(),ugn(n.e.a,t.e.a)}function EG(n,t){return d$(wq(n.d),wq(t.d))}function SG(n,t){return t&&$Q(n,t.d)?t:null}function PG(n,t){return t==(KQn(),_Rt)?n.c:n.d}function CG(n){return Esn(LV(_L(n)?Gsn(n):n))}function IG(n){return new MO(n.c+n.b,n.d+n.a)}function OG(n){return null!=n&&!mpn(n,n_t,t_t)}function AG(n,t){return(ldn(n)<<4|ldn(t))&D1n}function LG(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function NG(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function $G(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function DG(n,t){var e;return e=n.c,Jan(n,t),e}function xG(n,t){return n.g=t<0?-1:t,n}function RG(n,t){return Brn(n),n.a*=t,n.b*=t,n}function KG(n,t,e){Orn.call(this,t,e),this.d=n}function FG(n,t,e){LA.call(this,n,t),this.c=e}function _G(n,t,e){LA.call(this,n,t),this.c=e}function BG(n){uB(),ps.call(this),this.ci(n)}function HG(){N7(),OQ.call(this,(MP(),l_t))}function UG(n){return QYn(),new IX(0,n)}function GG(){GG=E,hZ(),CBt=new Xw(bct)}function qG(){qG=E,new Gyn((my(),Tat),(py(),Mat))}function XG(){XG=E,bot=Inn(dot,zZn,17,256,0,1)}function zG(){this.b=uM(pK(Jkn((rGn(),Bft))))}function VG(n){this.b=n,this.a=Mz(this.b.a).Od()}function WG(n,t){this.b=n,this.a=t,Ff.call(this)}function QG(n,t){this.a=n,this.b=t,Ff.call(this)}function JG(n,t,e){this.a=n,vL.call(this,t,e)}function YG(n,t,e){this.a=n,vL.call(this,t,e)}function ZG(n,t,e){nrn(n,t,new QW(e))}function nq(n,t,e){var i;return i=n[t],n[t]=e,i}function tq(n){return Ltn(n.slice(),n)}function eq(n){var t;return t=n.n,n.a.b+t.d+t.a}function iq(n){var t;return t=n.n,n.e.b+t.d+t.a}function rq(n){var t;return t=n.n,n.e.a+t.b+t.c}function cq(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function aq(n,t){return s8(n,t,n.c.b,n.c),!0}function oq(n){return n.a?n.a:sY(n)}function uq(n){return lZ(),bIn(n)==R0(gIn(n))}function sq(n){return lZ(),gIn(n)==R0(bIn(n))}function hq(n,t){return CEn(n,new FC(t.a,t.b))}function fq(n,t){return TJ(),IMn(n,t),new bJ(n,t)}function lq(n,t){return n.c<t.c?-1:n.c==t.c?0:1}function bq(n){return n.b.c.length-n.e.c.length}function wq(n){return n.e.c.length-n.g.c.length}function dq(n){return n.e.c.length+n.g.c.length}function gq(n){return 0==n||isNaN(n)?n:n<0?-1:1}function pq(n){return!v9(n)&&n.c.i.c==n.d.i.c}function mq(n){return n2(),(KQn(),ERt).Hc(n.j)}function vq(n,t,e){return tcn(),e.e.a+e.f.a+n*t}function kq(n,t,e){return tcn(),e.e.b+e.f.b+n*t}function yq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Mq(n,t,e){return vJ(n.b,uG(e.b,18),t)}function Tq(n,t,e){eQn(n.a,n.b,n.c,uG(t,166),e)}function jq(n,t,e,i){Mvn.call(this,n,t,e,i,0,0)}function Eq(n){uB(),BG.call(this,n),this.a=-1}function Sq(n,t){_z.call(this,t,1040),this.a=n}function Pq(){BO.call(this,"COUNT_CHILDREN",0)}function Cq(n,t){OA.call(this,n,t),this.a=this}function Iq(n,t){var e;return(e=VW(n,t)).i=2,e}function Oq(n,t){return++n.j,n.Cj(t)}function Aq(n,t,e){return n.a=-1,hR(n,t.g,e),n}function Lq(n,t){return kD(n,new MO(t.a,t.b))}function Nq(n){return ncn(),Inn(lPt,z9n,40,n,0,1)}function $q(n){return n.e.Rd().gc()*n.c.Rd().gc()}function Dq(n,t,e){return new x_(BQ(n)._e(),e,t)}function xq(n,t){Yan(n,null==t?null:(tJ(t),t))}function Rq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Kq(n,t){Qan(n,null==t?null:(tJ(t),t))}function Fq(n){if(!n)throw hv(new mM(null))}function _q(n){if(n.c.e!=n.a)throw hv(new Fv)}function Bq(n){if(n.e.c!=n.b)throw hv(new Fv)}function Hq(n){for(WW(n);n.Ob();)n.Pb(),n.Qb()}function Uq(n){ZW(),this.a=(hZ(),new Xw(WW(n)))}function Gq(n){this.c=n,this.b=this.c.d.vc().Kc()}function qq(n){n.a.ld(),uG(n.a.md(),16).gc(),HM()}function Xq(n,t){return n.a+=mvn(t,0,t.length),n}function zq(n,t){return u3(t,n.c.length),n.c[t]}function Vq(n,t){return u3(t,n.a.length),n.a[t]}function Wq(n,t){return tJ(t),Dun(t,(tJ(n),n))}function Qq(n,t){return tJ(n),Dun(n,(tJ(t),t))}function Jq(n,t,e,i,r,c){return NSn(n,t,e,i,r,0,c)}function Yq(n,t){return uQ(t,0,nX(t[0],Hvn(1)))}function Zq(n,t){return Hvn(Lgn(Hvn(n.a).a,t.a))}function nX(n,t){return Zq(uG(n,168),uG(t,168))}function tX(){tX=E,got=Inn(yot,zZn,168,256,0,1)}function eX(){eX=E,Mot=Inn(Tot,zZn,191,256,0,1)}function iX(){iX=E,aot=Inn(uot,zZn,222,256,0,1)}function rX(){rX=E,sot=Inn(hot,zZn,180,128,0,1)}function cX(){gG(this,!1,!1,!1,!1)}function aX(n){td.call(this,new u8),Qon(this,n)}function oX(n){this.a=new sS(n.gc()),Qon(this,n)}function uX(n){this.c=n,this.a=new fS(this.c.a)}function sX(n){this.a=n,this.c=new Ym,jfn(this)}function hX(){this.d=new MO(0,0),this.e=new ek}function fX(n,t){vS(),Fnn.call(this,n),this.a=t}function lX(n,t,e,i){Rf(this),pG(this,n,t,e,i)}function bX(n,t,e){return d$(t.d[n.g],e.d[n.g])}function wX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function dX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function gX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function pX(n,t,e){return d$(n.d[t.p],n.d[e.p])}function mX(n,t,i){return e.Math.min(i/n,1/t)}function vX(n,t){return n?0:e.Math.max(0,t-1)}function kX(n,t){return null==n?null==t:m_(n,t)}function yX(n,t){return null==n?null==t:Bvn(n,t)}function MX(n){return n.q?n.q:(hZ(),hZ(),Vot)}function TX(n){return n.c-uG(zq(n.a,n.b),294).b}function jX(n){return n.c?n.c.f:n.e.b}function EX(n){return n.c?n.c.g:n.e.a}function SX(n,t){return null==n.a&&fBn(n),n.a[t]}function PX(n){var t;return(t=GSn(n))?PX(t):n}function CX(n,t){return QYn(),new eW(n,t)}function IX(n,t){QYn(),Qm.call(this,n),this.a=t}function OX(n,t){ZN(),Hm.call(this,t),this.a=n}function AX(n,t,e){this.a=n,MD.call(this,t,e,2)}function LX(n){this.b=new lS,this.a=n,this.c=-1}function NX(n){Qx.call(this,0,0),this.a=n,this.b=0}function $X(n){Drn.call(this,n.gc()),CW(this,n)}function DX(n){n.b?DX(n.b):n.d.dc()&&n.f.c.Bc(n.e)}function xX(n){return Array.isArray(n)&&n.Tm===j}function RX(n,t){return F$(t,22)&&$x(n,uG(t,22))}function KX(n,t){return F$(t,22)&&Nrn(n,uG(t,22))}function FX(n,t){return Ibn(n,t,A9(n,n.b.Ce(t)))}function _X(n,t){return!(void 0===n.a.get(t))}function BX(n){return uRn(n,26)*G0n+uRn(n,27)*q0n}function HX(n,t){return yan(new Z,new fd(n),t)}function UX(n,t,e){ubn(0,t,n.length),Ntn(n,0,t,e)}function GX(n,t,e){o3(t,n.c.length),pC(n.c,t,e)}function qX(n,t,e){var i;n&&((i=n.i).c=t,i.b=e)}function XX(n,t,e){var i;n&&((i=n.i).d=t,i.a=e)}function zX(n,t,e){var i;for(i=0;i<t;++i)n[i]=e}function VX(n,t){var e;for(e=0;e<t;++e)n[e]=-1}function WX(n,t){var e;return Dfn(e=ggn(n),t),e}function QX(n,t){return!n&&(n=[]),n[n.length]=t,n}function JX(n,t){JF(n.c,t),n.b.c+=t.a,n.b.d+=t.b}function YX(n,t){JX(n,YF(new MO(t.a,t.b),n.c))}function ZX(n,t){this.b=new lS,this.a=n,this.c=t}function nz(){this.b=new Et,this.c=new FZ(this)}function tz(){this.d=new mn,this.e=new KZ(this)}function ez(){J0(),this.f=new lS,this.e=new lS}function iz(){n2(),this.k=new Ym,this.d=new ek}function rz(){rz=E,$Kt=new _N((XYn(),uDt),0)}function cz(){cz=E,Pat=new NX(Inn(dat,EZn,1,0,5,1))}function az(n,t,e){return FV(n,new ZP(t.a,e.a))}function oz(n,t,e){return-d$(n.f[t.p],n.f[e.p])}function uz(n,t,e){HDn(e,n,1),kD(t,new $C(e,n))}function sz(n,t,e){TEn(e,n,1),kD(t,new RC(e,n))}function hz(n,t,e){this.a=n,TD.call(this,t,e,22)}function fz(n,t,e){this.a=n,TD.call(this,t,e,14)}function lz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function bz(n,t,e,i){ZN(),d4.call(this,n,t,e,i)}function wz(n,t,e){return n.a=-1,hR(n,t.g+1,e),n}function dz(n,t,e){return e=$Un(n,uG(t,54),7,e)}function gz(n,t,e){return e=$Un(n,uG(t,54),3,e)}function pz(n){return _L(n)?0|n:Tj(n)}function mz(n){return QYn(),new F1(10,n,0)}function vz(n){return n.f||(n.f=n.Dc())}function kz(n){return n.i||(n.i=n.bc())}function yz(n){if(n.e.j!=n.d)throw hv(new Fv)}function Mz(n){return n.c?n.c:n.c=n.Sd()}function Tz(n){return n.d?n.d:n.d=n.Td()}function jz(n,t){return Gvn(Len(n,t))?t.zi():null}function Ez(n){return F$(n,15)?uG(n,15).ed():n.Kc()}function Sz(n){return n.Qc(Inn(dat,EZn,1,n.gc(),5,1))}function Pz(n){return null!=n&&NV(n)&&!(n.Tm===j)}function Cz(n){return!Array.isArray(n)&&n.Tm===j}function Iz(n,t){return WW(t),n.a.Jd(t)&&!n.b.Jd(t)}function Oz(n,t){return p$(n.l&t.l,n.m&t.m,n.h&t.h)}function Az(n,t){return p$(n.l|t.l,n.m|t.m,n.h|t.h)}function Lz(n,t){return p$(n.l^t.l,n.m^t.m,n.h^t.h)}function Nz(n,t){return Esn(JIn(_L(n)?Gsn(n):n,t))}function $z(n,t){return Esn(gDn(_L(n)?Gsn(n):n,t))}function Dz(n,t){return Esn(FOn(_L(n)?Gsn(n):n,t))}function xz(n,t){return gF((tJ(n),n),(tJ(t),t))}function Rz(n,t){return ugn((tJ(n),n),(tJ(t),t))}function Kz(n){this.b=new R7(11),this.a=(sZ(),n)}function Fz(n){this.a=(cz(),Pat),this.d=uG(WW(n),51)}function _z(n,t){this.c=0,this.d=n,this.b=64|t|VZn}function Bz(n,t){this.e=n,this.d=64&t?t|VZn:t}function Hz(n){this.b=null,this.a=(sZ(),n||Jot)}function Uz(n){LD(this),this.g=n,KY(this),this.je()}function Gz(n){CP(),this.a=0,this.b=n-1,this.c=1}function qz(n,t,e,i){this.a=n,A7.call(this,n,t,e,i)}function Xz(n,t,e){n.a.Mb(e)&&(n.b=!0,t.Cd(e))}function zz(n){n.d||(n.d=n.b.Kc(),n.c=n.b.gc())}function Vz(n,t){if(n<0||n>=t)throw hv(new Ik)}function Wz(n,t){return cdn(n,(tJ(t),new ud(t)))}function Qz(n,t){return cdn(n,(tJ(t),new sd(t)))}function Jz(n,t,e){return BYn(n,uG(t,12),uG(e,12))}function Yz(n){return Lun(),0!=uG(n,12).g.c.length}function Zz(n){return Lun(),0!=uG(n,12).e.c.length}function nV(n,t){return Pun(),ugn(t.a.o.a,n.a.o.a)}function tV(n,t){t.Bb&Qtt&&!n.a.o&&(n.a.o=t)}function eV(n,t){t.Ug("General 'Rotator",1),lQn(n)}function iV(n,t,e){t.qf(e,uM(pK(cQ(n.b,e)))*n.a)}function rV(n,t,e){return l_n(),qun(n,t)&&qun(n,e)}function cV(n){return eNn(),!n.Hc(wRt)&&!n.Hc(gRt)}function aV(n){return n.e?T7(n.e):null}function oV(n){return _L(n)?""+n:K_n(n)}function uV(n){var t;for(t=n;t.f;)t=t.f;return t}function sV(n,t,e){return uQ(t,0,nX(t[0],e[0])),t}function hV(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function fV(n,t,e,i){MD.call(this,n,t,e),this.b=i}function lV(n,t,e,i,r){btn.call(this,n,t,e,i,r,-1)}function bV(n,t,e,i,r){wtn.call(this,n,t,e,i,r,-1)}function wV(n,t,e,i){FG.call(this,n,t,e),this.b=i}function dV(n){lA.call(this,n,!1),this.a=!1}function gV(){BO.call(this,"LOOKAHEAD_LAYOUT",1)}function pV(n){this.b=n,Zx.call(this,n),qD(this)}function mV(n){this.b=n,tR.call(this,n),XD(this)}function vV(n,t,e){this.a=n,i_.call(this,t,e,5,6)}function kV(n,t,e,i){this.b=n,MD.call(this,t,e,i)}function yV(n,t){this.b=n,fb.call(this,n.b),this.a=t}function MV(n){this.a=Fyn(n.a),this.b=new Z_(n.b)}function TV(n,t){ZW(),UE.call(this,n,Dwn(new IM(t)))}function jV(n,t){return QYn(),new PQ(n,t,0)}function EV(n,t){return QYn(),new PQ(6,n,t)}function SV(n,t){for(tJ(t);n.Ob();)t.Cd(n.Pb())}function PV(n,t){return RA(t)?AZ(n,t):!!FX(n.f,t)}function CV(n,t){return t.Vh()?mwn(n.b,uG(t,54)):t}function IV(n,t){return m_(n.substr(0,t.length),t)}function OV(n){return new Fz(new YD(n.a.length,n.a))}function AV(n){return new MO(n.c+n.b/2,n.d+n.a/2)}function LV(n){return p$(~n.l&f0n,~n.m&f0n,~n.h&l0n)}function NV(n){return typeof n===wZn||typeof n===mZn}function $V(n){n.f=new nN(n),n.i=new tN(n),++n.g}function DV(n){if(!n)throw hv(new Bv);return n.d}function xV(n){var t;return MK(null!=(t=Rfn(n))),t}function RV(n){var t;return MK(null!=(t=sgn(n))),t}function KV(n,t){var e;return e7(t,e=n.a.gc()),e-t}function FV(n,t){return null==n.a.zc(t,n)}function _V(n,t){return null==n.a.zc(t,(qx(),tot))}function BV(n){return new fX(null,oW(n,n.length))}function HV(n,t,e){return HXn(n,uG(t,42),uG(e,176))}function UV(n,t,e){return Mon(n.a,t),nq(n.b,t.g,e)}function GV(n,t,e){Vz(e,n.a.c.length),Y8(n.a,e,t)}function qV(n,t,e,i){ubn(t,e,n.length),XV(n,t,e,i)}function XV(n,t,e,i){var r;for(r=t;r<e;++r)n[r]=i}function zV(n,t){var e;for(e=0;e<t;++e)n[e]=!1}function VV(n,t,e){cHn(),this.e=n,this.d=t,this.a=e}function WV(n,t,e){this.c=n,this.a=t,hZ(),this.b=e}function QV(n,t){this.d=n,DD.call(this,n),this.e=t}function JV(n,t,e){return bbn(n,t.g,e),Mon(n.c,t),n}function YV(n){return qWn(n,(xdn(),JDt)),n.d=!0,n}function ZV(n){return!n.j&&Tw(n,KHn(n.g,n.b)),n.j}function nW(n){n.a=null,n.e=null,$V(n.b),n.d=0,++n.c}function tW(n){TK(-1!=n.b),i7(n.c,n.a=n.b),n.b=-1}function eW(n,t){Qm.call(this,1),this.a=n,this.b=t}function iW(n,t){return n>0?e.Math.log(n/t):-100}function rW(n,t){return dwn(n,t)<0?-1:dwn(n,t)>0?1:0}function cW(n,t){J$(n,F$(t,160)?t:uG(t,2036).Rl())}function aW(n,t){if(null==n)throw hv(new MM(t))}function oW(n,t){return $rn(t,n.length),new Sq(n,t)}function uW(n,t){return!!t&&Qon(n,t)}function sW(){return Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])}function hW(n){return 0==n.e?n:new VV(-n.e,n.d,n.a)}function fW(n,t){return ugn(n.c.c+n.c.b,t.c.c+t.c.b)}function lW(n,t){s8(n.d,t,n.b.b,n.b),++n.a,n.c=null}function bW(n,t){return n.c?bW(n.c,t):kD(n.b,t),n}function wW(n,t,e){var i;return i=uin(n,t),W5(n,t,e),i}function dW(n,t,e){var i;for(i=0;i<t;++i)uQ(n,i,e)}function gW(n,t,e,i,r){for(;t<e;)i[r++]=VJ(n,t++)}function pW(n,t,e,i,r){TCn(n,uG(Y9(t.k,e),15),e,i,r)}function mW(n,t){kS(YJ(n.Oc(),new Kr),new $g(t))}function vW(n,t){return ugn(n.e.a+n.f.a,t.e.a+t.f.a)}function kW(n,t){return ugn(n.e.b+n.f.b,t.e.b+t.f.b)}function yW(n){return e.Math.abs(n.d.e-n.e.e)-n.a}function MW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function TW(n){return n==M0n?yct:n==T0n?"-INF":""+n}function jW(n){return lZ(),R0(bIn(n))==R0(gIn(n))}function EW(n,t,e){return uG(n.c.hd(t,uG(e,136)),44)}function SW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function PW(n,t){pQ(n,new QW(null!=t.f?t.f:""+t.g))}function CW(n,t){return n.Si()&&(t=A0(n,t)),n.Fi(t)}function IW(n,t){return t=n.Yk(null,t),pCn(n,null,t)}function OW(n,t){++n.j,WPn(n,n.i,t),xNn(n,uG(t,343))}function AW(n){n?UPn(n,(bS(),Eot),""):a1((bS(),n))}function LW(n){this.d=(tJ(n),n),this.a=0,this.c=YZn}function NW(n,t){this.d=_dn(n),this.c=t,this.a=.5*t}function $W(n){HZ.call(this),this.a=n,kD(n.a,this)}function DW(){u8.call(this),this.a=!0,this.b=!0}function xW(){xW=E,Xat=new Sb(!1),zat=new Sb(!0)}function RW(n){return n.g||(n.g=new Ql(n))}function KW(n){return n.k||(n.k=new Jl(n))}function FW(n){return n.k||(n.k=new Jl(n))}function _W(n){return n.i||(n.i=new tb(n))}function BW(n){return n.f||(n.f=new VD(n))}function HW(n){return n.j||(n.j=new mb(n))}function UW(n){return n.d||(n.d=new rb(n))}function GW(n,t,e){return QYn(),new R3(n,t,e)}function qW(n,t){return q4(t,n.c.b.c.gc()),new TE(n,t)}function XW(n,t){var e;return q4(t,e=n.a.gc()),e-1-t}function zW(n,t,e){var i;return Rcn(e,i=VW(n,t)),i}function VW(n,t){var e;return(e=new Ifn).j=n,e.d=t,e}function WW(n){if(null==n)throw hv(new Rv);return n}function QW(n){if(null==n)throw hv(new Rv);this.a=n}function JW(n){Iv(),this.b=new Zm,this.a=n,xVn(this,n)}function YW(n){this.b=n,this.a=uG(nJ(this.b.a.e),227)}function ZW(){ZW=E,sB(),jat=new t1((hZ(),hZ(),zot))}function nQ(){nQ=E,sB(),Nat=new RP((hZ(),hZ(),Wot))}function tQ(){tQ=E,M_t=DNn(),YYn(),j_t&&kEn()}function eQ(n){n.s=NaN,n.c=NaN,X$n(n,n.e),X$n(n,n.j)}function iQ(n){return(null==n.i&&eqn(n),n.i).length}function rQ(n,t){return uG(Mz(n.a).Md().Xb(t),44).ld()}function cQ(n,t){return RA(t)?U1(n,t):DA(FX(n.f,t))}function aQ(n,t){return lZ(),n==bIn(t)?gIn(t):bIn(t)}function oQ(n,t,e,i){return 0==e||(e-i)/e<n.e||t>=n.g}function uQ(n,t,e){return yK(null==e||cGn(n,e)),n[t]=e}function sQ(n,t){return s3(t,n.length+1),n.substr(t)}function hQ(n,t){for(tJ(t);n.c<n.d;)n.Se(t,n.c++)}function fQ(n){this.d=n,this.c=n.a.d.a,this.b=n.a.e.g}function lQ(n){this.c=n,this.a=new lS,this.b=new lS}function bQ(n){this.c=new sj,this.a=new Zm,this.b=n}function wQ(n){this.b=new Zm,this.a=new Zm,this.c=n}function dQ(n,t,e){uG(t.b,68),Prn(t.a,new NU(n,e,t))}function gQ(n,t){return Pun(),uG(AJ(n,t.d),15).Fc(t)}function pQ(n,t){var e;uin(n,e=n.a.length),W5(n,e,t)}function mQ(n,t){console[n].call(console,t)}function vQ(n,t){var e;++n.j,e=n.Ej(),n.rj(n.Zi(e,t))}function kQ(n,t,e){return NBn(n,Aon(n,t,e))}function yQ(n){return!n.d&&(n.d=new MD(g_t,n,1)),n.d}function MQ(n){return!n.a&&(n.a=new MD(nFt,n,4)),n.a}function TQ(n,t){return n.a+=String.fromCharCode(t),n}function jQ(n,t){return n.a+=String.fromCharCode(t),n}function EQ(n,t,e){this.a=n,Bm.call(this,t),this.b=e}function SQ(n,t,e){this.a=n,E6.call(this,8,t,null,e)}function PQ(n,t,e){Qm.call(this,n),this.a=t,this.b=e}function CQ(n,t,e){Hm.call(this,t),this.a=n,this.b=e}function IQ(n){this.c=n,this.b=this.c.a,this.a=this.c.e}function OQ(n){this.a=(tJ(Ert),Ert),this.b=n,new Zk}function AQ(n){oY(n.a),n.b=Inn(dat,EZn,1,n.b.length,5,1)}function LQ(n){TK(-1!=n.c),n.d.gd(n.c),n.b=n.c,n.c=-1}function NQ(n){return e.Math.sqrt(n.a*n.a+n.b*n.b)}function $Q(n,t){return ljn(n.c,n.f,t,n.b,n.a,n.e,n.d)}function DQ(n,t){return Vz(t,n.a.c.length),zq(n.a,t)}function xQ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function RQ(n){return F$(n,102)&&!!(uG(n,19).Bb&Qtt)}function KQ(n){return nJ(n),F$(n,484)?uG(n,484):cpn(n)}function FQ(n){return n?n.dc():!n.Kc().Ob()}function _Q(n){return!!zHt&&AZ(zHt,n)}function BQ(n){return 0>=n?new mS:ton(n-1)}function HQ(n){return!n.a&&n.c?n.c.b:n.a}function UQ(n){return F$(n,616)?n:new e0(n)}function GQ(n){n.c?GQ(n.c):(vgn(n),n.d=!0)}function qQ(n){n.c?n.c.$e():(n.d=!0,uKn(n))}function XQ(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function zQ(n){return n.c.i.c==n.d.i.c}function VQ(n,t){var e;(e=n.Ih(t))>=0?n.ki(e):zLn(n,t)}function WQ(n,t){n.c<0||n.b.b<n.c?cL(n.b,t):n.a.tf(t)}function QQ(n,t){ttn((!n.a&&(n.a=new oF(n,n)),n.a),t)}function JQ(n,t){JX(uG(t.b,68),n),Prn(t.a,new Dd(n))}function YQ(n,t){return d$(t.j.c.length,n.j.c.length)}function ZQ(n,t,e){return Whn(),e.Lg(n,uG(t.ld(),149))}function nJ(n){if(null==n)throw hv(new Rv);return n}function tJ(n){if(null==n)throw hv(new Rv);return n}function eJ(n){if(4!=n.p)throw hv(new xv);return n.e}function iJ(n){if(3!=n.p)throw hv(new xv);return n.e}function rJ(n){if(3!=n.p)throw hv(new xv);return n.j}function cJ(n){if(4!=n.p)throw hv(new xv);return n.j}function aJ(n){if(6!=n.p)throw hv(new xv);return n.f}function oJ(n){if(6!=n.p)throw hv(new xv);return n.k}function uJ(n){return!n.b&&(n.b=new Um(new ty)),n.b}function sJ(n){return-2==n.c&&ww(n,XCn(n.g,n.b)),n.c}function hJ(n,t){var e;return(e=VW("",n)).n=t,e.i=1,e}function fJ(n,t,e,i){FE.call(this,n,e),this.a=t,this.f=i}function lJ(n,t,e,i){FE.call(this,n,t),this.d=e,this.a=i}function bJ(n,t){H$.call(this,eon(WW(n),WW(t))),this.a=t}function wJ(){ly.call(this),Xv(this.j.c,0),this.a=-1}function dJ(){iIn.call(this,Drt,(vj(),y_t)),XXn(this)}function gJ(){iIn.call(this,lct,(kj(),xBt)),hVn(this)}function pJ(){_E.call(this,"DELAUNAY_TRIANGULATION",0)}function mJ(n){return String.fromCharCode.apply(null,n)}function vJ(n,t,e){return RA(t)?r2(n,t,e):VAn(n.f,t,e)}function kJ(n){return hZ(),n?n.Oe():(sZ(),sZ(),Zot)}function yJ(n){return man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))}function MJ(n,t){return qG(),new Gyn(new wx(n),new bx(t))}function TJ(){TJ=E,Eat=new Ry(Uhn(cT(Sat,1),c1n,44,0,[]))}function jJ(n){return!n.d&&(n.d=new qw(n.c.Cc())),n.d}function EJ(n){return!n.a&&(n.a=new tT(n.c.vc())),n.a}function SJ(n){return!n.b&&(n.b=new nT(n.c.ec())),n.b}function PJ(n,t){for(;t-- >0;)n=n<<1|(n<0?1:0);return n}function CJ(n,t){var e;return e=new bQ(n),mv(t.c,e),e}function IJ(n,t){n.u.Hc((eNn(),wRt))&&vNn(n,t),knn(n,t)}function OJ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function AJ(n,t){return RX(n.a,t)?n.b[uG(t,22).g]:null}function LJ(){return BS(),Uhn(cT(oft,1),p1n,489,0,[Kht])}function NJ(){return nP(),Uhn(cT(JAt,1),p1n,490,0,[zAt])}function $J(){return tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])}function DJ(){return eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])}function xJ(n){return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n}function RJ(n){return!n.c&&(n.c=new fV(wFt,n,9,9)),n.c}function KJ(n){return!n.c&&(n.c=new f_(cFt,n,5,8)),n.c}function FJ(n){return!n.b&&(n.b=new f_(cFt,n,4,7)),n.b}function _J(n){return n.j.c.length=0,oY(n.c),ZF(n.a),n}function BJ(n){return n.e==wct&&kw(n,akn(n.g,n.b)),n.e}function HJ(n){return n.f==wct&&Mw(n,tEn(n.g,n.b)),n.f}function UJ(n,t,e,i){return Dsn(n,t,e,!1),pdn(n,i),n}function GJ(n,t){this.b=n,QV.call(this,n,t),qD(this)}function qJ(n,t){this.b=n,N_.call(this,n,t),XD(this)}function XJ(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function zJ(n,t){this.b=n,this.c=t,this.a=new fS(this.b)}function VJ(n,t){return s3(t,n.length),n.charCodeAt(t)}function WJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function QJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function JJ(n,t){return vgn(n),new fX(n,new ien(t,n.a))}function YJ(n,t){return vgn(n),new fX(n,new f7(t,n.a))}function ZJ(n,t){return vgn(n),new IK(n,new s7(t,n.a))}function nY(n,t){return vgn(n),new OK(n,new h7(t,n.a))}function tY(n,t){return new MZ(uG(WW(n),50),uG(WW(t),50))}function eY(n,t){return ugn(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function iY(n,t,e){e.a?Mcn(n,t.b-n.f/2):ycn(n,t.a-n.g/2)}function rY(n,t){return ugn(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function cY(n,t){return qS(),ugn((tJ(n),n),(tJ(t),t))}function aY(n){return null!=n&&ZE(UFt,n.toLowerCase())}function oY(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function uY(n){var t;return!(t=n.b)&&(n.b=t=new Yl(n)),t}function sY(n){return con(n)||null}function hY(n,t){var e,i;return(e=n/t)>(i=t0(e))&&++i,i}function fY(n,t,e){var i;(i=uG(n.d.Kb(e),159))&&i.Nb(t)}function lY(n,t,e){KXn(n.a,e),jhn(e),EDn(n.b,e),Mzn(t,e)}function bY(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function wY(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function dY(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function gY(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function pY(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function mY(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function vY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function kY(n,t,e){this.a=L1n,this.d=n,this.b=t,this.c=e}function yY(n,t,e,i){_E.call(this,n,t),this.a=e,this.b=i}function MY(n,t){this.d=(tJ(n),n),this.a=16449,this.c=t}function TY(n){this.a=new Zm,this.e=Inn(YHt,zZn,53,n,0,2)}function jY(n){n.Ug("No crossing minimization",1),n.Vg()}function EY(){Ky.call(this,"There is no more element.")}function SY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function PY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function CY(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function IY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function OY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function AY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function LY(n,t,e){var i;return i=eJn(n),t.ti(e,i)}function NY(n){var t;return Urn(t=new ev,n),t}function $Y(n){var t;return MIn(t=new ev,n),t}function DY(n,t){return Qun(t,cQ(n.f,t)),null}function xY(n){return!n.b&&(n.b=new fV(aFt,n,12,3)),n.b}function RY(n){return Fq(null==n||NV(n)&&!(n.Tm===j)),n}function KY(n){return n.n&&(n.e!==E1n&&n.je(),n.j=null),n}function FY(n){if(bpn(n.d),n.d.d!=n.c)throw hv(new Fv)}function _Y(n){return MK(n.b<n.d.gc()),n.d.Xb(n.c=n.b++)}function BY(n){n.a.a=n.c,n.c.b=n.a,n.a.b=n.c.a=null,n.b=0}function HY(n){this.f=n,this.c=this.f.e,n.f>0&&XEn(this)}function UY(n,t){this.a=n,CK.call(this,n,uG(n.d,15).fd(t))}function GY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function qY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function XY(n){return BNn(n)&&oM(gK(zDn(n,(jYn(),hMt))))}function zY(n,t){return UNn(n,uG(oIn(t,(jYn(),UMt)),17),t)}function VY(n,t){return uG(oIn(n,(GYn(),Vpt)),15).Fc(t),t}function WY(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function QY(n,t,e,i){this.b=n,this.c=i,rL.call(this,t,e)}function JY(n,t,e){n.i=0,n.e=0,t!=e&&tln(n,t,e)}function YY(n,t,e){n.i=0,n.e=0,t!=e&&eln(n,t,e)}function ZY(n,t,e){return JS(),opn(uG(cQ(n.e,t),529),e)}function nZ(n){return n.f||(n.f=new OE(n,n.c))}function tZ(n,t){return Hwn(n.j,t.s,t.c)+Hwn(t.e,n.s,n.c)}function eZ(n,t){n.e&&!n.e.a&&(iv(n.e,t),eZ(n.e,t))}function iZ(n,t){n.d&&!n.d.a&&(iv(n.d,t),iZ(n.d,t))}function rZ(n,t){return-ugn(EX(n)*jX(n),EX(t)*jX(t))}function cZ(n){return uG(n.ld(),149).Pg()+":"+cpn(n.md())}function aZ(){HIn(this,new Fl),this.wb=(tQ(),M_t),vj()}function oZ(n){this.b=new Zm,Ohn(this.b,this.b),this.a=n}function uZ(n,t){new lS,this.a=new Uk,this.b=n,this.c=t}function sZ(){sZ=E,Jot=new N,Yot=new N,Zot=new $}function hZ(){hZ=E,zot=new C,Vot=new O,Wot=new A}function fZ(){fZ=E,Gut=new dn,Xut=new tz,qut=new gn}function lZ(){lZ=E,aft=new Zm,cft=new Ym,rft=new Zm}function bZ(n,t){if(null==n)throw hv(new MM(t));return n}function wZ(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a}function dZ(n){return!n.q&&(n.q=new fV(p_t,n,11,10)),n.q}function gZ(n){return!n.s&&(n.s=new fV(o_t,n,21,17)),n.s}function pZ(n){return WW(n),KMn(new Fz(ix(n.a.Kc(),new h)))}function mZ(n,t){return Tbn(n),Tbn(t),cM(uG(n,22),uG(t,22))}function vZ(n,t,e){nrn(n,t,new Pb(Q_(e)))}function kZ(n,t,e,i,r,c){wtn.call(this,n,t,e,i,r,c?-2:-1)}function yZ(n,t,e,i){LA.call(this,t,e),this.b=n,this.a=i}function MZ(n,t){Sy.call(this,new Hz(n)),this.a=n,this.b=t}function TZ(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function jZ(n){var t;GB(),(t=uG(n.g,10)).n.a=n.d.c+t.d.b}function EZ(){var n,t;EZ=E,t=!ovn(),n=new v,_at=t?new m:n}function SZ(n){return hZ(),F$(n,59)?new eT(n):new gx(n)}function PZ(n){return F$(n,16)?new oX(uG(n,16)):cG(n.Kc())}function CZ(n){return new WD(n,n.e.Rd().gc()*n.c.Rd().gc())}function IZ(n){return new QD(n,n.e.Rd().gc()*n.c.Rd().gc())}function OZ(n){return n&&n.hashCode?n.hashCode():xx(n)}function AZ(n,t){return null==t?!!FX(n.f,null):_X(n.i,t)}function LZ(n,t){var e;return(e=Q$(n.a,t))&&(t.d=null),e}function NZ(n,t,e){return!!n.f&&n.f.ef(t,e)}function $Z(n,t,e,i){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i)}function DZ(n,t,e,i){uQ(n.c[t.g],t.g,e),uQ(n.b[t.g],t.g,i)}function xZ(n,t,e){return uM(pK(e.a))<=n&&uM(pK(e.b))>=t}function RZ(n,t){this.g=n,this.d=Uhn(cT(pbt,1),e6n,10,0,[t])}function KZ(n){this.c=n,this.b=new Hj(uG(WW(new pn),50))}function FZ(n){this.c=n,this.b=new Hj(uG(WW(new jt),50))}function _Z(n){this.b=n,this.a=new Hj(uG(WW(new nt),50))}function BZ(){this.b=new ek,this.d=new lS,this.e=new Ok}function HZ(){this.c=new sj,this.d=new sj,this.e=new sj}function UZ(){this.a=new Uk,this.b=(man(3,g1n),new R7(3))}function GZ(n,t){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t}function qZ(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function XZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function zZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function VZ(n,t,e,i,r,c,a){return new i8(n.e,t,e,i,r,c,a)}function WZ(n,t,e){return e>=0&&m_(n.substr(e,t.length),t)}function QZ(n,t){return F$(t,149)&&m_(n.b,uG(t,149).Pg())}function JZ(n,t){return n.a?t.Gh().Kc():uG(t.Gh(),71).Ii()}function YZ(n,t){var e;return w8(e=n.b.Qc(t),n.b.gc()),e}function ZZ(n,t){if(null==n)throw hv(new MM(t));return n}function n1(n){return n.u||(y9(n),n.u=new aF(n,n)),n.u}function t1(n){this.a=(hZ(),F$(n,59)?new eT(n):new gx(n))}function e1(n){return uG(Lsn(n,16),29)||n.ii()}function i1(n,t){var e;return e=Ij(n.Rm),null==t?e:e+": "+t}function r1(n,t,e){return Knn(t,e,n.length),n.substr(t,e-t)}function c1(n,t){HF.call(this),Qrn(this),this.a=n,this.c=t}function a1(n){n&&i1(n,n.ie()),String.fromCharCode(10)}function o1(n){XM(),e.setTimeout((function(){throw n}),0)}function u1(){return _kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])}function s1(){return Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])}function h1(){return zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])}function f1(){return Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])}function l1(){return Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])}function b1(){return Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])}function w1(){return H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])}function d1(){return nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])}function g1(){return Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])}function p1(){return pon(),Uhn(cT(iIt,1),p1n,501,0,[VCt,WCt])}function m1(){return b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])}function v1(){return w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])}function k1(){return _7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])}function y1(){return Wtn(),Uhn(cT(Hgt,1),p1n,488,0,[Ngt,Lgt])}function M1(){return a9(),Uhn(cT(CAt,1),p1n,491,0,[yAt,MAt])}function T1(){return rhn(),Uhn(cT($At,1),p1n,492,0,[OAt,AAt])}function j1(){return i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])}function E1(){return Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])}function S1(){return l0(),Uhn(cT(JSt,1),p1n,465,0,[USt,GSt])}function P1(){return B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])}function C1(){return Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])}function I1(){return CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])}function O1(n,t,e,i){return e>=0?n.Uh(t,e,i):n.Ch(null,e,i)}function A1(n){return 0==n.b.b?n.a.sf():tG(n.b)}function L1(n){if(5!=n.p)throw hv(new xv);return pz(n.f)}function N1(n){if(5!=n.p)throw hv(new xv);return pz(n.k)}function $1(n){return xA(n.a)===xA((Oun(),Q_t))&&eVn(n),n.a}function D1(n,t){n.b=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function x1(n,t){n.c=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function R1(n,t){nw(this,new MO(n.a,n.b)),tw(this,oG(t))}function K1(){Py.call(this,new sS(orn(12))),FD(!0),this.a=2}function F1(n,t,e){QYn(),Qm.call(this,n),this.b=t,this.a=e}function _1(n,t,e){ZN(),Hm.call(this,t),this.a=n,this.b=e}function B1(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function H1(n){return 0==n.b?null:(MK(0!=n.b),Lrn(n,n.a.a))}function U1(n,t){return null==t?DA(FX(n.f,null)):_P(n.i,t)}function G1(n,t,e,i,r){return new AOn(n,(Rtn(),vut),t,e,i,r)}function q1(n,t){return V5(t),Jcn(n,Inn(YHt,W1n,28,t,15,1),t)}function X1(n,t){return bZ(n,"set1"),bZ(t,"set2"),new GE(n,t)}function z1(n,t){var e=Rat[n.charCodeAt(0)];return null==e?n:e}function V1(n,t){var e;return pWn(n,t,e=new B),e.d}function W1(n,t,e,i){var r;r=new AF,t.a[e.g]=r,UV(n.b,i,r)}function Q1(n,t){return JF(BR(Lcn(n.f,t)),n.f.d)}function J1(n){Lan(n.a),zN(n.a),Apn(new Ad(n.a))}function Y1(n,t){iBn(n,!0),Prn(n.e.Rf(),new DB(n,!0,t))}function Z1(n,t){return lZ(),n==R0(bIn(t))||n==R0(gIn(t))}function n0(n,t){return tcn(),uG(oIn(t,(QGn(),ACt)),17).a==n}function t0(n){return 0|Math.max(Math.min(n,vZn),-2147483648)}function e0(n){this.a=uG(WW(n),277),this.b=(hZ(),new mx(n))}function i0(n,t,e){this.i=new Zm,this.b=n,this.g=t,this.a=e}function r0(n,t,e){this.a=new Zm,this.e=n,this.f=t,this.c=e}function c0(n,t,e){this.c=new Zm,this.e=n,this.f=t,this.b=e}function a0(n){HF.call(this),Qrn(this),this.a=n,this.c=!0}function o0(n){function t(){}return t.prototype=n||{},new t}function u0(n){if(n.Ae())return null;var t=n.n;return sZn[t]}function s0(n){return n.Db>>16!=3?null:uG(n.Cb,27)}function h0(n){return n.Db>>16!=9?null:uG(n.Cb,27)}function f0(n){return n.Db>>16!=6?null:uG(n.Cb,74)}function l0(){l0=E,USt=new XI(z2n,0),GSt=new XI(V2n,1)}function b0(){b0=E,fSt=new OI(V2n,0),hSt=new OI(z2n,1)}function w0(){w0=E,wSt=new AI(c3n,0),dSt=new AI("UP",1)}function d0(){d0=E,Aat=Abn((Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])))}function g0(n){var t;return Dfn(t=new Dj(orn(n.length)),n),t}function p0(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function m0(n,t){return!!Chn(n,t)&&(lan(n),!0)}function v0(n,t){if(null==t)throw hv(new Rv);return Tvn(n,t)}function k0(n,t){var e;e=n.q.getHours(),n.q.setDate(t),Iqn(n,e)}function y0(n,t,e){var i;(i=n.Ih(t))>=0?n.bi(i,e):lRn(n,t,e)}function M0(n,t){var e;return(e=n.Ih(t))>=0?n.Wh(e):$Nn(n,t)}function T0(n,t){var e;for(WW(t),e=n.a;e;e=e.c)t.Yd(e.g,e.i)}function j0(n,t,e){var i;i=Ufn(n,t,e),n.b=new Don(i.c.length)}function E0(n,t,e){W0(),n&&vJ(LFt,n,t),n&&vJ(AFt,n,e)}function S0(n,t){return UB(),qx(),uG(t.a,17).a<n}function P0(n,t){return UB(),qx(),uG(t.b,17).a<n}function C0(n,t){return e.Math.abs(n)<e.Math.abs(t)?n:t}function I0(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a.i>0}function O0(n){var t;return t=n.d,t=n.bj(n.f),ttn(n,t),t.Ob()}function A0(n,t){var e;return zCn(e=new aX(t),n),new Z_(e)}function L0(n){if(0!=n.p)throw hv(new xv);return HA(n.f,0)}function N0(n){if(0!=n.p)throw hv(new xv);return HA(n.k,0)}function $0(n){return n.Db>>16!=7?null:uG(n.Cb,241)}function D0(n){return n.Db>>16!=6?null:uG(n.Cb,241)}function x0(n){return n.Db>>16!=7?null:uG(n.Cb,167)}function R0(n){return n.Db>>16!=11?null:uG(n.Cb,27)}function K0(n){return n.Db>>16!=17?null:uG(n.Cb,29)}function F0(n){return n.Db>>16!=3?null:uG(n.Cb,155)}function _0(n){return vgn(n),JJ(n,new Md(new ek))}function B0(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.ve(t))}function H0(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),Iqn(n,e)}function U0(n,t){LD(this),this.f=t,this.g=n,KY(this),this.je()}function G0(n,t){this.a=n,this.c=D$(this.a),this.b=new qZ(t)}function q0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function X0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function z0(n){this.a=n,this.b=Inn(WEt,zZn,2043,n.e.length,0,2)}function V0(){this.a=new XL,this.e=new ek,this.g=0,this.i=0}function W0(){W0=E,LFt=new Ym,AFt=new Ym,pA(iut,new fs)}function Q0(){Q0=E,jEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function J0(){J0=E,EEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Y0(){Y0=E,PEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Z0(){Z0=E,tSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function n2(){n2=E,aSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function t2(){t2=E,sSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function e2(){e2=E,mSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function i2(n,t,e,i,r,c){return new Ken(n.e,t,n.Lj(),e,i,r,c)}function r2(n,t,e){return null==t?VAn(n.f,null,e):kgn(n.i,t,e)}function c2(n,t){n.c&&men(n.c.g,n),n.c=t,n.c&&kD(n.c.g,n)}function a2(n,t){n.c&&men(n.c.a,n),n.c=t,n.c&&kD(n.c.a,n)}function o2(n,t){n.i&&men(n.i.j,n),n.i=t,n.i&&kD(n.i.j,n)}function u2(n,t){n.d&&men(n.d.e,n),n.d=t,n.d&&kD(n.d.e,n)}function s2(n,t){n.a&&men(n.a.k,n),n.a=t,n.a&&kD(n.a.k,n)}function h2(n,t){n.b&&men(n.b.f,n),n.b=t,n.b&&kD(n.b.f,n)}function f2(n,t){dQ(n,n.b,n.c),uG(n.b.b,68),t&&uG(t.b,68).b}function l2(n,t){return ugn(uG(n.c,65).c.e.b,uG(t.c,65).c.e.b)}function b2(n,t){return ugn(uG(n.c,65).c.e.a,uG(t.c,65).c.e.a)}function w2(n){return Mbn(),qx(),0!=uG(n.a,86).d.e}function d2(n,t){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,t)}function g2(n,t){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,t)}function p2(n,t){Pgn(n,t),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2)}function m2(n,t){null!=t.c&&pQ(n,new QW(t.c))}function v2(n){var t;return vj(),Urn(t=new ev,n),t}function k2(n){var t;return vj(),Urn(t=new ev,n),t}function y2(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function M2(n,t,e){return kD(n.a,(TJ(),IMn(t,e),new FE(t,e))),n}function T2(n,t){return PP(),ein(t)?new Cq(t,n):new OA(t,n)}function j2(n){return cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))}function E2(n){var t;return t=uG(tq(n.b),9),new nB(n.a,t,n.c)}function S2(n,t){var e;return(e=uG(Xwn(nZ(n.a),t),16))?e.gc():0}function P2(n,t,e){var i;hdn(t,e,n.c.length),i=e-t,nE(n.c,t,i)}function C2(n,t,e){hdn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function I2(n){this.c=new lS,this.b=n.b,this.d=n.c,this.a=n.a}function O2(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function A2(n,t,e,i){this.c=n,this.d=i,s2(this,t),h2(this,e)}function L2(n,t){Ey.call(this,new sS(orn(n))),man(t,XZn),this.a=t}function N2(n,t,e){return new AOn(n,(Rtn(),mut),null,!1,t,e)}function $2(n,t,e){return new AOn(n,(Rtn(),kut),t,e,null,!1)}function D2(){return ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])}function x2(){return Yen(),Uhn(cT(hht,1),p1n,472,0,[Fst,Kst,Rst])}function R2(){return Ktn(),Uhn(cT(xst,1),p1n,471,0,[Ast,Ost,Lst])}function K2(){return Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])}function F2(){return Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])}function _2(){return gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])}function B2(){return jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])}function H2(){return ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])}function U2(){return Pfn(),Uhn(cT(Ogt,1),p1n,460,0,[kgt,vgt,ygt])}function G2(){return ihn(),Uhn(cT(mpt,1),p1n,299,0,[fpt,lpt,hpt])}function q2(){return Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])}function X2(){return Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])}function z2(){return can(),Uhn(cT(eEt,1),p1n,463,0,[Qjt,Vjt,Wjt])}function V2(){return isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])}function W2(){return Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])}function Q2(){return kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])}function J2(){return ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])}function Y2(){return zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])}function Z2(){return ean(),Uhn(cT(qEt,1),p1n,464,0,[_Et,BEt,HEt])}function n3(n){return Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))}function t3(){return Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])}function e3(){e3=E,UCt=wz(new wJ,(Cjn(),WSt),(OHn(),ePt))}function i3(){i3=E,_Ct=new JI("DFS",0),FCt=new JI("BFS",1)}function r3(n,t,e){var i;(i=new ia).b=t,i.a=e,++t.b,kD(n.d,i)}function c3(n,t,e){var i;JF(i=new eN(e.d),n),jgn(t,i.a,i.b)}function a3(n,t){pD(n,pz(E3($z(t,24),W0n)),pz(E3(t,W0n)))}function o3(n,t){if(n<0||n>t)throw hv(new dM(h2n+n+f2n+t))}function u3(n,t){if(n<0||n>=t)throw hv(new dM(h2n+n+f2n+t))}function s3(n,t){if(n<0||n>=t)throw hv(new JM(h2n+n+f2n+t))}function h3(n,t){this.b=(tJ(n),n),this.a=t&j0n?t:64|t|VZn}function f3(n){return vgn(n),sZ(),sZ(),krn(n,Yot)}function l3(n,t,e){var i;return(i=uXn(n,t,!1)).b<=t&&i.a<=e}function b3(){return den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])}function w3(){return Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])}function d3(){return Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])}function g3(){return Zyn(),Uhn(cT(AOt,1),p1n,456,0,[lOt,wOt,bOt])}function p3(){return vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])}function m3(){return esn(),Uhn(cT(hOt,1),p1n,300,0,[iOt,rOt,eOt])}function v3(){return Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])}function k3(){return Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])}function y3(){return Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])}function M3(){return Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])}function T3(n){return WW(n),F$(n,16)?new Z_(uG(n,16)):rG(n.Kc())}function j3(n,t){return n&&n.equals?n.equals(t):xA(n)===xA(t)}function E3(n,t){return Esn(Oz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function S3(n,t){return Esn(Az(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function P3(n,t){return Esn(Lz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function C3(n,t){var e;return kK(!!(e=(tJ(n),n).g)),tJ(t),e(t)}function I3(n,t){var e,i;return i=KV(n,t),e=n.a.fd(i),new BE(n,e)}function O3(n){return n.Db>>16!=6?null:uG(J$n(n),241)}function A3(n){if(2!=n.p)throw hv(new xv);return pz(n.f)&D1n}function L3(n){if(2!=n.p)throw hv(new xv);return pz(n.k)&D1n}function N3(n){return MK(n.a<n.c.c.length),n.b=n.a++,n.c.c[n.b]}function $3(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 D3(n,t){var e;e=uM(pK(n.a.of((XYn(),LDt)))),pJn(n,t,e)}function x3(n,t){VV.call(this,1,2,Uhn(cT(YHt,1),W1n,28,15,[n,t]))}function R3(n,t,e){Qm.call(this,25),this.b=n,this.a=t,this.c=e}function K3(n){QYn(),Qm.call(this,n),this.c=!1,this.a=!1}function F3(n){return n.a==(N7(),TBt)&&gw(n,X_n(n.g,n.b)),n.a}function _3(n){return n.d==(N7(),TBt)&&mw(n,oqn(n.g,n.b)),n.d}function B3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(t.c,n.c)}function H3(n,t){return Win(),n.c==t.c?ugn(t.d,n.d):ugn(n.c,t.c)}function U3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(n.c,t.c)}function G3(n,t){return Win(),n.c==t.c?ugn(n.d,t.d):ugn(t.c,n.c)}function q3(n,t){return KX(n.a,t)?nq(n.b,uG(t,22).g,null):null}function X3(n){return Lgn(Nz(Bsn(uRn(n,32)),32),Bsn(uRn(n,32)))}function z3(n){return null==n.b||0==n.b.length?"n_"+n.a:"n_"+n.b}function V3(n){return null==n.c||0==n.c.length?"n_"+n.g:"n_"+n.c}function W3(n,t){var e;for(e=n+"";e.length<t;)e="0"+e;return e}function Q3(n,t){var e;e=uG(cQ(n.g,t),60),Prn(t.d,new HC(n,e))}function J3(n,t){var e,i;return(e=qTn(n))<(i=qTn(t))?-1:e>i?1:0}function Y3(n,t){var e;return e=jen(t),uG(cQ(n.c,e),17).a}function Z3(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function n4(n,t,e){var i;n.n&&t&&e&&(i=new Yu,kD(n.e,i))}function t4(n,t){if(FV(n.a,t),t.d)throw hv(new Ky(p2n));t.d=n}function e4(n,t){this.a=new Zm,this.d=new Zm,this.f=n,this.c=t}function i4(){this.c=new z$,this.a=new p7,this.b=new yk,XS()}function r4(){Whn(),this.b=new Ym,this.a=new Ym,this.c=new Zm}function c4(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function a4(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function o4(n,t,e,i,r,c){Bcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function u4(n,t,e,i,r,c){Hcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function s4(n,t,e,i,r,c){E9.call(this,n,t,e,i,r),c&&(this.o=-2)}function h4(n,t,e,i,r,c){qcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function f4(n,t,e,i,r,c){S9.call(this,n,t,e,i,r),c&&(this.o=-2)}function l4(n,t,e,i,r,c){Ucn.call(this,n,t,e,i,r),c&&(this.o=-2)}function b4(n,t,e,i,r,c){Gcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function w4(n,t,e,i,r,c){P9.call(this,n,t,e,i,r),c&&(this.o=-2)}function d4(n,t,e,i){Hm.call(this,e),this.b=n,this.c=t,this.d=i}function g4(n,t){this.f=n,this.a=(N7(),MBt),this.c=MBt,this.b=t}function p4(n,t){this.g=n,this.d=(N7(),TBt),this.a=TBt,this.b=t}function m4(n,t){!n.c&&(n.c=new wsn(n,0)),BXn(n.c,(uVn(),nHt),t)}function v4(n,t){return lxn(n,t,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function k4(n,t){return rW(Bsn(n.q.getTime()),Bsn(t.q.getTime()))}function y4(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),16,new zl(n))}function M4(n){return!(!n.u||0==z5(n.u.a).i||n.n&&yMn(n.n))}function T4(n){return!(!n.a||0==Aen(n.a.a).i||n.b&&MMn(n.b))}function j4(n,t){return 0==t?!!n.o&&0!=n.o.f:Wkn(n,t)}function E4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Hc(e)}function S4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Mc(e)}function P4(n,t){var e;return e=1-t,n.a[e]=Ton(n.a[e],e),Ton(n,t)}function C4(n,t){var e;return e=E3(n,L0n),S3(Nz(t,32),e)}function I4(n,t,e){WW(n),mjn(new q0(new Z_(n),t,e))}function O4(n,t,e){WW(n),vjn(new X0(new Z_(n),t,e))}function A4(n,t,e,i,r,c){return Dsn(n,t,e,c),gdn(n,i),vdn(n,r),n}function L4(n,t,e,i){return n.a+=""+r1(null==t?IZn:cpn(t),e,i),n}function N4(n,t){this.a=n,Jw.call(this,n),o3(t,n.gc()),this.b=t}function $4(n){this.a=Inn(dat,EZn,1,pfn(e.Math.max(8,n))<<1,5,1)}function D4(n){return uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199)}function x4(n){return uG(Ekn(n,Inn(obt,t6n,18,n.c.length,0,1)),483)}function R4(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function K4(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function F4(n){return MK(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function _4(n,t,e){n.a=t,n.c=e,n.b.a.$b(),BY(n.d),Xv(n.e.a.c,0)}function B4(n,t){var e;n.e=new dy,f$(e=GFn(t),n.c),T_n(n,e,0)}function H4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.a,r)}function U4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.b,r)}function G4(n,t,e){if(n<0||t<n||t>e)throw hv(new dM(QOn(n,t,e)))}function q4(n,t){if(n<0||n>=t)throw hv(new dM(TLn(n,t)));return n}function X4(n){if(!("stack"in n))try{throw n}catch(t){}return n}function z4(n){return JS(),F$(n.g,10)?uG(n.g,10):null}function V4(n){return!uY(n).dc()&&(h$(n,new w),!0)}function W4(n){var t;return _L(n)?-0==(t=n)?0:t:Gen(n)}function Q4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function J4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Y4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Z4(n){var t;return GQ(n),t=new D,tE(n.a,new vd(t)),t}function n6(){var n,t;return n=new ev,kD(gBt,t=n),t}function t6(n){var t;return GQ(n),t=new x,tE(n.a,new kd(t)),t}function e6(n,t){return n.a<=n.b&&(t.Dd(n.a++),!0)}function i6(n){dun.call(this,n,(Rtn(),put),null,!1,null,!1)}function r6(){r6=E,_ht=Abn((BS(),Uhn(cT(oft,1),p1n,489,0,[Kht])))}function c6(){c6=E,$Et=MJ(xwn(1),xwn(4)),NEt=MJ(xwn(1),xwn(2))}function a6(n,t){return new LU(t,HR(D$(t.e),n,n),(qx(),!0))}function o6(n){return new R7((man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))))}function u6(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),273,new Xl(n))}function s6(n){return uG(Ekn(n,Inn(Abt,i6n,12,n.c.length,0,1)),2042)}function h6(n){return n2(),!(v9(n)||!v9(n)&&n.c.i.c==n.d.i.c)}function f6(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a>=n.gc()}function l6(n,t){_Jn(t,n),NG(n.d),NG(uG(oIn(n,(jYn(),SMt)),214))}function b6(n,t){BJn(t,n),$G(n.d),$G(uG(oIn(n,(jYn(),SMt)),214))}function w6(n,t,e){n.d&&men(n.d.e,n),n.d=t,n.d&&GX(n.d.e,e,n)}function d6(n,t,e){return e.f.c.length>0?HV(n.a,t,e):HV(n.b,t,e)}function g6(n,t,e){var i;i=bkn();try{return SF(n,t,e)}finally{m8(i)}}function p6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.pe()),i}function m6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.se()),i}function v6(n,t){var e,i;return i=null,(e=uin(n,t))&&(i=e.se()),i}function k6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=uAn(e)),i}function y6(n,t,e){var i;return i=jvn(e),yHn(n.g,i,t),yHn(n.i,t,e),t}function M6(n,t,e){this.d=new qg(this),this.e=n,this.i=t,this.f=e}function T6(n,t,e,i){this.e=null,this.c=n,this.d=t,this.a=e,this.b=i}function j6(n,t,e,i){A$(this),this.c=n,this.e=t,this.f=e,this.b=i}function E6(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function S6(n,t,e,i){return F$(e,59)?new Yx(n,t,e,i):new qz(n,t,e,i)}function P6(n){return F$(n,16)?uG(n,16).dc():!n.Kc().Ob()}function C6(n){if(n.e.g!=n.b)throw hv(new Fv);return!!n.c&&n.d>0}function I6(n){return MK(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function O6(n,t){tJ(t),uQ(n.a,n.c,t),n.c=n.c+1&n.a.length-1,JTn(n)}function A6(n,t){tJ(t),n.b=n.b-1&n.a.length-1,uQ(n.a,n.b,t),JTn(n)}function L6(n){var t;t=n.Gh(),this.a=F$(t,71)?uG(t,71).Ii():t.Kc()}function N6(n){return new h3(Vrn(uG(n.a.md(),16).gc(),n.a.ld()),16)}function $6(){$6=E,WAt=Abn((nP(),Uhn(cT(JAt,1),p1n,490,0,[zAt])))}function D6(){D6=E,YAt=Abn((tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])))}function x6(){x6=E,XLt=Abn((eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])))}function R6(){return Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])}function K6(){return Rtn(),Uhn(cT(Tut,1),p1n,304,0,[put,mut,vut,kut])}function F6(){return vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])}function _6(){return myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])}function B6(){return ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])}function H6(){return Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])}function U6(){return qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])}function G6(){return Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])}function q6(){return Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])}function X6(){return yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])}function z6(n){return n.j==(KQn(),KRt)&&$x(_$n(n),kRt)}function V6(n,t){var e;c2(e=t.a,t.c.d),u2(e,t.d.d),Xun(e.a,n.n)}function W6(n,t){var e;return!(e=uG(ain(n.b,t),67))&&(e=new lS),e}function Q6(n){return JS(),F$(n.g,154)?uG(n.g,154):null}function J6(n){n.a=null,n.e=null,Xv(n.b.c,0),Xv(n.f.c,0),n.c=null}function Y6(){Y6=E,kpt=new sI(G2n,0),ypt=new sI("TOP_LEFT",1)}function Z6(){Z6=E,YEt=new SI("UPPER",0),JEt=new SI("LOWER",1)}function n5(n,t){return bD(new MO(t.e.a+t.f.a/2,t.e.b+t.f.b/2),n)}function t5(n,t){return uG(yx(Wz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function e5(n,t){return uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function i5(){return Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])}function r5(){return mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])}function c5(){return dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])}function a5(){return Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])}function o5(){return Ajn(),Uhn(cT(Wxt,1),p1n,291,0,[Rxt,$xt,Dxt,xxt])}function u5(){return _gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])}function s5(){return qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])}function h5(){return Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])}function f5(n){return W0(),PV(LFt,n)?uG(cQ(LFt,n),341).Qg():null}function l5(n,t,e){return t<0?$Nn(n,e):uG(e,69).wk().Bk(n,n.hi(),t)}function b5(n,t,e){var i;return i=jvn(e),yHn(n.j,i,t),vJ(n.k,t,e),t}function w5(n,t,e){var i;return i=jvn(e),yHn(n.d,i,t),vJ(n.e,t,e),t}function d5(n){var t;return gj(),t=new es,n&&ARn(t,n),t}function g5(n){var t;return t=n.aj(n.i),n.i>0&&qGn(n.g,0,t,0,n.i),t}function p5(n,t){var e;for(e=n.j.c.length;e<t;e++)kD(n.j,n.Ng())}function m5(n,t,e,i){var r;return r=i[t.g][e.g],uM(pK(oIn(n.a,r)))}function v5(n,t){var e;return TP(),!(e=uG(cQ(_Ft,n),57))||e.fk(t)}function k5(n){if(1!=n.p)throw hv(new xv);return pz(n.f)<<24>>24}function y5(n){if(1!=n.p)throw hv(new xv);return pz(n.k)<<24>>24}function M5(n){if(7!=n.p)throw hv(new xv);return pz(n.k)<<16>>16}function T5(n){if(7!=n.p)throw hv(new xv);return pz(n.f)<<16>>16}function j5(n,t){return 0==t.e||0==n.e?_ot:(b_n(),yKn(n,t))}function E5(n,t){return xA(t)===xA(n)?"(this Map)":null==t?IZn:cpn(t)}function S5(n,t,e){return Rz(pK(DA(FX(n.f,t))),pK(DA(FX(n.f,e))))}function P5(n,t,e){var i;i=uG(cQ(n.g,e),60),kD(n.a.c,new WO(t,i))}function C5(n,t,e){n.i=0,n.e=0,t!=e&&(eln(n,t,e),tln(n,t,e))}function I5(n,t,e,i,r){kD(t,uLn(r,Bxn(r,e,i))),LIn(n,r,t)}function O5(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function A5(n,t){HZ.call(this),this.a=n,this.b=t,kD(this.a.b,this)}function L5(n){this.b=new Ym,this.c=new Ym,this.d=new Ym,this.a=n}function N5(n,t){var e;return e=new QM,n.Gd(e),e.a+="..",t.Hd(e),e.a}function $5(n,t){var e;for(e=t;e;)KR(n,e.i,e.j),e=R0(e);return n}function D5(n,t,e){var i;return i=jvn(e),vJ(n.b,i,t),vJ(n.c,t,e),t}function x5(n){var t;for(t=0;n.Ob();)n.Pb(),t=Lgn(t,1);return arn(t)}function R5(n,t){var e;return PP(),uOn(e=uG(n,69).vk(),t),e.xl(t)}function K5(n,t,e){if(e){var i=e.oe();n.a[t]=i(e)}else delete n.a[t]}function F5(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+V1n),Iqn(n,e)}function _5(n,t){return uG(null==t?DA(FX(n.f,null)):_P(n.i,t),288)}function B5(n,t){return n==(zIn(),dbt)&&t==dbt?4:n==dbt||t==dbt?8:32}function H5(n,t,e){return aqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function U5(n,t,e){return Dqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function G5(n,t,e){return Cxn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n))}function q5(n){n.b!=n.c&&(n.a=Inn(dat,EZn,1,8,5,1),n.b=0,n.c=0)}function X5(n){return MK(n.a<n.c.a.length),n.b=n.a,Sin(n),n.c.b[n.b]}function z5(n){return n.n||(y9(n),n.n=new hz(n,g_t,n),n1(n)),n.n}function V5(n){if(n<0)throw hv(new yM("Negative array size: "+n))}function W5(n,t,e){if(e){var i=e.oe();e=i(e)}else e=void 0;n.a[t]=e}function Q5(n,t){var e;return Cln(),0!=(e=n.j.g-t.j.g)?e:0}function J5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Y5(n,t){return bS(),String.fromCharCode(10),ttn(gZ(n.a),t)}function Z5(n,t){cHn(),VV.call(this,n,1,Uhn(cT(YHt,1),W1n,28,15,[t]))}function n8(n,t){QYn(),Qm.call(this,n),this.a=t,this.c=-1,this.b=-1}function t8(n,t,e,i){c4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function e8(n,t,e,i){a4.call(this,1,e,i),Kf(this),this.c=n,this.b=t}function i8(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),this.c=n,this.a=e}function r8(n,t,e){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t,this.d=e}function c8(n){this.e=n,this.c=this.e.a,this.b=this.e.g,this.d=this.e.i}function a8(n){this.d=n,this.b=this.d.a.entries(),this.a=this.b.next()}function o8(n){this.c=n,this.a=uG(bEn(n),156),this.b=this.a.jk().wi()}function u8(){Ym.call(this),LR(this),this.d.b=this.d,this.d.a=this.d}function s8(n,t,e,i){var r;(r=new R).c=t,r.b=e,r.a=i,i.b=e.a=r,++n.b}function h8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function f8(n,t){return XA(null!=t?U1(n,t):DA(FX(n.f,t)))}function l8(n,t){return t.b.Kb(ven(n,t.c.Xe(),new jd(t)))}function b8(n,t){var e;return V5(t),(e=n.slice(0,t)).length=t,Ltn(e,n)}function w8(n,t){var e;for(e=0;e<t;++e)uQ(n,e,new Yw(uG(n[e],44)))}function d8(n,t){var e;for(e=n.d-1;e>=0&&n.a[e]===t[e];e--);return e<0}function g8(n){var t;return n?new aX(n):(Fon(t=new XL,n),t)}function p8(n,t){var e,i;i=!1;do{i|=e=Tfn(n,t)}while(e);return i}function m8(n){n&&Cin((Gy(),Fat)),--Uat,n&&-1!=qat&&(jL(qat),qat=-1)}function v8(n){aCn(),pD(this,pz(E3($z(n,24),W0n)),pz(E3(n,W0n)))}function k8(){k8=E,Jut=Abn((_kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])))}function y8(){y8=E,tst=Abn((Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])))}function M8(){M8=E,vft=Abn((zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])))}function T8(){T8=E,Lbt=Abn((Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])))}function j8(){j8=E,Tpt=Abn((Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])))}function E8(){E8=E,mgt=Abn((Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])))}function S8(){S8=E,Dgt=Abn((Wtn(),Uhn(cT(Hgt,1),p1n,488,0,[Ngt,Lgt])))}function P8(){P8=E,zjt=Abn((nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])))}function C8(){C8=E,nSt=Abn((Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])))}function I8(){I8=E,Jdt=Abn((H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])))}function O8(){O8=E,HCt=Abn((i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])))}function A8(){A8=E,JCt=Abn((pon(),Uhn(cT(iIt,1),p1n,501,0,[VCt,WCt])))}function L8(){L8=E,bSt=Abn((b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])))}function N8(){N8=E,pSt=Abn((w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])))}function $8(){$8=E,RSt=Abn((_7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])))}function D8(){D8=E,XSt=Abn((l0(),Uhn(cT(JSt,1),p1n,465,0,[USt,GSt])))}function x8(){x8=E,uIt=Abn((Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])))}function R8(){R8=E,jAt=Abn((a9(),Uhn(cT(CAt,1),p1n,491,0,[yAt,MAt])))}function K8(){K8=E,NAt=Abn((rhn(),Uhn(cT($At,1),p1n,492,0,[OAt,AAt])))}function F8(){F8=E,eLt=Abn((B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])))}function _8(){_8=E,QLt=Abn((Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])))}function B8(){B8=E,vKt=Abn((CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])))}function H8(){return xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])}function U8(){return KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])}function G8(n,t,e){return uG(null==t?VAn(n.f,null,e):kgn(n.i,t,e),288)}function q8(n){return(n.k==(zIn(),dbt)||n.k==lbt)&&vR(n,(GYn(),$pt))}function X8(n){return n.c&&n.d?z3(n.c)+"->"+z3(n.d):"e_"+xx(n)}function z8(n,t){var e,i;for(tJ(t),i=n.Kc();i.Ob();)e=i.Pb(),t.Cd(e)}function V8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function W8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function Q8(n,t){var e;for(e=t;e;)KR(n,-e.i,-e.j),e=R0(e);return n}function J8(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function Y8(n,t,e){var i;return u3(t,n.c.length),i=n.c[t],n.c[t]=e,i}function Z8(n,t,e){n.a.c.length=0,sVn(n,t,e),0==n.a.c.length||pUn(n,t)}function n9(n){n.i=0,FP(n.b,null),FP(n.c,null),n.a=null,n.e=null,++n.g}function t9(){t9=E,Nut=!0,Aut=!1,Lut=!1,Dut=!1,$ut=!1}function e9(n){t9(),Nut||(this.c=n,this.e=!0,this.a=new Zm)}function i9(n,t){this.c=0,this.b=t,iL.call(this,n,17493),this.a=this.c}function r9(n){NYn(),dv(this),this.a=new lS,Lln(this,n),aq(this.a,n)}function c9(){IN(this),this.b=new MO(M0n,M0n),this.a=new MO(T0n,T0n)}function a9(){a9=E,yAt=new oO(x6n,0),MAt=new oO("TARGET_WIDTH",1)}function o9(n,t){return(vgn(n),Qj(new fX(n,new ien(t,n.a)))).Bd(Kut)}function u9(){return uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])}function s9(){return gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])}function h9(){return kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])}function f9(){return pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])}function l9(){return Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])}function b9(){return zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])}function w9(){return _Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])}function d9(){return pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])}function g9(){return Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])}function p9(){return Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])}function m9(n){return XM(),function(){return g6(n,this,arguments)}}function v9(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function k9(n,t){return!!F$(t,143)&&m_(n.c,uG(t,143).c)}function y9(n){return n.t||(n.t=new $m(n),$dn(new Qy(n),0,n.t)),n.t}function M9(n){this.b=n,DD.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function T9(n){this.b=n,nR.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function j9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.b=e}function E9(n,t,e,i,r){c4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function S9(n,t,e,i,r){a4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function P9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function C9(n,t){return uG(ain(n.d,t),23)||uG(ain(n.e,t),23)}function I9(n,t){var e,i;return e=t.ld(),!!(i=n.Fe(e))&&OJ(i.e,t.md())}function O9(n,t){var e;return new FE(e=t.ld(),n.e.pc(e,uG(t.md(),16)))}function A9(n,t){var e;return null==(e=n.a.get(t))?Inn(dat,EZn,1,0,5,1):e}function L9(n){var t;return t=n.length,m_(S0n.substr(S0n.length-t,t),n)}function N9(n){if(hDn(n))return n.c=n.a,n.a.Pb();throw hv(new Bv)}function $9(n,t){return 0==t||0==n.e?n:t>0?MFn(n,t):rvn(n,-t)}function D9(n,t){return 0==t||0==n.e?n:t>0?rvn(n,t):MFn(n,-t)}function x9(n){xP.call(this,null==n?IZn:cpn(n),F$(n,82)?uG(n,82):null)}function R9(n){var t;return n.c||F$(t=n.r,90)&&(n.c=uG(t,29)),n.c}function K9(n){var t;return zsn(t=new UZ,n),kfn(t,(jYn(),bMt),null),t}function F9(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(zIn(),lbt)&&e.k==lbt}function _9(n){return p$(n&f0n,n>>22&f0n,n<0?l0n:0)}function B9(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)qQ(t[e])}function H9(n,t){var e,i;(e=uG(zwn(n.c,t),16))&&(i=e.gc(),e.$b(),n.d-=i)}function U9(n,t,e){var i;return(i=n.Ih(t))>=0?n.Lh(i,e,!0):YNn(n,t,e)}function G9(n,t,e){return ugn(bD($kn(n),D$(t.b)),bD($kn(n),D$(e.b)))}function q9(n,t,e){return ugn(bD($kn(n),D$(t.e)),bD($kn(n),D$(e.e)))}function X9(n,t){return e.Math.min(atn(t.a,n.d.d.c),atn(t.b,n.d.d.c))}function z9(n,t){n._i(n.i+1),yD(n,n.i,n.Zi(n.i,t)),n.Mi(n.i++,t),n.Ni()}function V9(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.Oi(e,t),n.Ni()}function W9(n,t,e){var i;xun(i=new U$(n.a),n.a.a),VAn(i.f,t,e),n.a.a=i}function Q9(n,t,e,i){var r;for(r=0;r<$st;r++)qX(n.a[r][t.g],e,i[t.g])}function J9(n,t,e,i){var r;for(r=0;r<Nst;r++)XX(n.a[t.g][r],e,i[t.g])}function Y9(n,t){var e;return!(e=uG(n.c.xc(t),16))&&(e=n.ic(t)),n.pc(t,e)}function Z9(n){var t;return WW(n),_An(t=n?new Z_(n):rG(n.Kc())),Dwn(t)}function n7(n){var t;return WW(n),Dfn(t=new R7(yJ(n.length)),n),t}function t7(n,t,e,i){var r;return rCn(r=Inn(YHt,W1n,28,t,15,1),n,t,e,i),r}function e7(n,t){if(n<0||n>t)throw hv(new dM(iLn(n,t,"index")));return n}function i7(n,t){var e;return u3(t,n.c.length),e=n.c[t],nE(n.c,t,1),e}function r7(n,t){var e,i;return tJ(n),e=n,tJ(t),e==(i=t)?0:e<i?-1:1}function c7(n){var t;return t=n.e+n.f,isNaN(t)&&J_(n.d)?n.d:t}function a7(n){return n.e=3,n.d=n.Yb(),2!=n.e&&(n.e=0,!0)}function o7(n,t){return n.a?JA(n.a,n.b):n.a=new lx(n.d),WA(n.a,t),n}function u7(n,t){return RA(t)?null==t?Y$n(n.f,null):Vsn(n.i,t):Y$n(n.f,t)}function s7(n,t){eL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function h7(n,t){iL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function f7(n,t){rL.call(this,t.zd(),-6&t.yd()),tJ(n),this.a=n,this.b=t}function l7(n,t,e){Hm.call(this,e),this.b=n,this.c=t,this.d=(Pmn(),lBt)}function b7(n,t,e){this.d=n,this.k=t?1:0,this.f=e?1:0,this.o=-1,this.p=0}function w7(n){this.c=n,this.a=new Ww(this.c.a),this.b=new Ww(this.c.b)}function d7(){this.e=new Zm,this.c=new Zm,this.d=new Zm,this.b=new Zm}function g7(){this.g=new ok,this.b=new ok,this.a=new Zm,this.k=new Zm}function p7(){this.a=new gk,this.b=new Lk,this.d=new Ct,this.e=new Dt}function m7(n,t,e){this.a=n,this.c=t,this.d=e,kD(t.e,this),kD(e.b,this)}function v7(n,t,e){var i,r;for(i=0,r=0;r<t.length;r++)i+=n.tg(t[r],i,e)}function k7(n,t){var e;return e=$Vn(n,t),n.b=new Don(e.c.length),$zn(n,e)}function y7(n,t){var e;e=n.q.getHours()+(t/60|0),n.q.setMinutes(t),Iqn(n,e)}function M7(n){var t;return 0==(t=n.b).b?null:uG(hyn(t,0),65).b}function T7(n){return n.a?n.e?T7(n.e):null:n}function j7(n,t){return n.p<t.p?1:n.p>t.p?-1:0}function E7(n){var t;return n.a||F$(t=n.r,156)&&(n.a=uG(t,156)),n.a}function S7(n,t,e){return++n.e,--n.f,uG(n.d[t].gd(e),136).md()}function P7(n){var t;return t=n.ld(),JU(uG(n.md(),16).Nc(),new Wl(t))}function C7(n,t){return!!PV(n.a,t)&&(u7(n.a,t),!0)}function I7(n,t,e){return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),n.a[t][e]}function O7(n,t,e){this.a=n,this.b=t,this.c=e,kD(n.t,this),kD(t.i,this)}function A7(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function L7(){this.b=new lS,this.a=new lS,this.b=new lS,this.a=new lS}function N7(){var n,t;N7=E,vj(),t=new Gv,MBt=t,n=new Wk,TBt=n}function $7(n){return vgn(n),new IK(n,new lG(n,n.a.e,4|n.a.d))}function D7(n){var t;for(GQ(n),t=0;n.a.Bd(new hn);)t=Lgn(t,1);return t}function x7(n,t){return tJ(t),n.c<n.d&&(n.Se(t,n.c++),!0)}function R7(n){IN(this),vG(n>=0,"Initial capacity must not be negative")}function K7(){K7=E,jNt=new Cm("org.eclipse.elk.labels.labelManager")}function F7(){F7=E,Uwt=new uF("separateLayerConnections",(Ghn(),zwt))}function _7(){_7=E,DSt=new qI("REGULAR",0),$St=new qI("CRITICAL",1)}function B7(){B7=E,nLt=new lO("FIXED",0),ZAt=new lO("CENTER_NODE",1)}function H7(){H7=E,Vdt=new WC("QUADRATIC",0),Wdt=new WC("SCANLINE",1)}function U7(){U7=E,egt=Abn((jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])))}function G7(){G7=E,ogt=Abn((ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])))}function q7(){q7=E,Cdt=Abn((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))}function X7(){X7=E,Tgt=Abn((Pfn(),Uhn(cT(Ogt,1),p1n,460,0,[kgt,vgt,ygt])))}function z7(){z7=E,wpt=Abn((ihn(),Uhn(cT(mpt,1),p1n,299,0,[fpt,lpt,hpt])))}function V7(){V7=E,vpt=Abn((Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])))}function W7(){W7=E,ljt=Abn((Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])))}function Q7(){Q7=E,iEt=Abn((isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])))}function J7(){J7=E,uEt=Abn((Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])))}function Y7(){Y7=E,Yjt=Abn((can(),Uhn(cT(eEt,1),p1n,463,0,[Qjt,Vjt,Wjt])))}function Z7(){Z7=E,bEt=Abn((kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])))}function nnn(){nnn=E,mEt=Abn((ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])))}function tnn(){tnn=E,TEt=Abn((zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])))}function enn(){enn=E,mPt=Abn((Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])))}function inn(){inn=E,bIt=Abn((vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])))}function rnn(){rnn=E,aOt=Abn((esn(),Uhn(cT(hOt,1),p1n,300,0,[iOt,rOt,eOt])))}function cnn(){cnn=E,fOt=Abn((Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])))}function ann(){ann=E,gOt=Abn((Zyn(),Uhn(cT(AOt,1),p1n,456,0,[lOt,wOt,bOt])))}function onn(){onn=E,LOt=Abn((Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])))}function unn(){unn=E,IAt=Abn((den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])))}function snn(){snn=E,GEt=Abn((ean(),Uhn(cT(qEt,1),p1n,464,0,[_Et,BEt,HEt])))}function hnn(){hnn=E,Dst=Abn((Ktn(),Uhn(cT(xst,1),p1n,471,0,[Ast,Ost,Lst])))}function fnn(){fnn=E,Cst=Abn((Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])))}function lnn(){lnn=E,Bst=Abn((Yen(),Uhn(cT(hht,1),p1n,472,0,[Fst,Kst,Rst])))}function bnn(){bnn=E,xut=Abn((ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])))}function wnn(){wnn=E,vlt=Abn((Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])))}function dnn(){dnn=E,Nxt=Abn((Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])))}function gnn(){gnn=E,XAt=Abn((Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])))}function pnn(){pnn=E,oxt=Abn((Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])))}function mnn(){mnn=E,dKt=Abn((Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])))}function vnn(n,t){return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),ymn(n.o,t)}function knn(n,t){var e;n.C&&((e=uG(AJ(n.b,t),127).n).d=n.C.d,e.a=n.C.a)}function ynn(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 Mnn(n){return!n.g&&(n.g=new ds),!n.g.b&&(n.g.b=new Om(n)),n.g.b}function Tnn(n){return!n.g&&(n.g=new ds),!n.g.c&&(n.g.c=new Nm(n)),n.g.c}function jnn(n){return!n.g&&(n.g=new ds),!n.g.d&&(n.g.d=new Am(n)),n.g.d}function Enn(n){return!n.g&&(n.g=new ds),!n.g.a&&(n.g.a=new Lm(n)),n.g.a}function Snn(n,t,e,i){return e&&(i=e.Rh(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Pnn(n,t,e,i){return e&&(i=e.Th(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Cnn(n,t,e,i){var r;return KGn(r=Inn(YHt,W1n,28,t+1,15,1),n,t,e,i),r}function Inn(n,t,e,i,r,c){var a;return a=PTn(r,i),10!=r&&Uhn(cT(n,c),t,e,r,a),a}function Onn(n,t,e){var i,r;for(r=new Zsn(t,n),i=0;i<e;++i)_yn(r);return r}function Ann(n,t,e){var i,r;if(null!=e)for(i=0;i<t;++i)r=e[i],n.Qi(i,r)}function Lnn(n,t){var e;return(e=new B).c=!0,e.d=t.md(),pWn(n,t.ld(),e)}function Nnn(n,t){var e;e=n.q.getHours()+(t/3600|0),n.q.setSeconds(t),Iqn(n,e)}function $nn(n,t){var e,i;return i=SZ(rG(new Een(n,e=t))),Hq(new Een(n,e)),i}function Dnn(n,t){t.Ug("Label management",1),XA(oIn(n,(K7(),jNt))),t.Vg()}function xnn(n,t,e,i){EGn(n,t,e,Dqn(n,t,i,F$(t,102)&&!!(uG(t,19).Bb&P0n)))}function Rnn(n,t,e){uG(n.b,68),uG(n.b,68),uG(n.b,68),Prn(n.a,new AB(e,t,n))}function Knn(n,t,e){if(n<0||t>e||t<n)throw hv(new JM(o2n+n+s2n+t+Q0n+e))}function Fnn(n){n?(this.c=n,this.b=null):(this.c=null,this.b=new Zm)}function _nn(n,t){VP.call(this,n,t),this.a=Inn(yut,c1n,447,2,0,1),this.b=!0}function Bnn(n){Nfn.call(this,n,0),LR(this),this.d.b=this.d,this.d.a=this.d}function Hnn(n){this.e=n,this.b=this.e.a.entries(),this.a=Inn(dat,EZn,1,0,5,1)}function Unn(){Unn=E,SEt=wz(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),Plt,Owt)}function Gnn(){return tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])}function qnn(){return ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])}function Xnn(){return RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])}function znn(){return vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])}function Vnn(){return zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])}function Wnn(){return eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])}function Qnn(){return $Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])}function Jnn(){return RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])}function Ynn(){return nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])}function Znn(){return ZSn(),Uhn(cT(txt,1),p1n,298,0,[ZNt,YNt,JNt,WNt,VNt,QNt])}function ntn(n){var t;return n.a||-1==n.b||(t=n.c.Dh(),n.a=ern(t,n.b)),n.a}function ttn(n,t){return!(n.Si()&&n.Hc(t)||(n.Hi(t),0))}function etn(n,t){return ZZ(t,"Horizontal alignment cannot be null"),n.b=t,n}function itn(n,t,e){var i;return QYn(),i=kJn(n,t),e&&i&&_Q(n)&&(i=null),i}function rtn(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 ctn(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 atn(n,t){var i,r;return i=n.a-t.a,r=n.b-t.b,e.Math.sqrt(i*i+r*r)}function otn(n,t){var e;for(e=t.Kc();e.Ob();)FHn(n,uG(e.Pb(),36),0,0)}function utn(n,t,e){var i;for(i=n.Kc();i.Ob();)tHn(uG(i.Pb(),36),t,e)}function stn(n){var t;for(t=Fkn(n.a,0);t.b!=t.d.c;)hNn(uG(I6(t),65))}function htn(n,t){return BP(n.e,t)||Akn(n.e,t,new Bkn(t)),uG(ain(n.e,t),113)}function ftn(n,t,e,i){return tJ(n),tJ(t),tJ(e),tJ(i),new WV(n,t,new H)}function ltn(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=new kV(this,t,e,i)}function btn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.b=e}function wtn(n,t,e,i,r,c){E6.call(this,t,i,r,c),Kf(this),this.c=n,this.a=e}function dtn(n,t){var e,i,r;return r=n.r,i=n.d,(e=uXn(n,t,!0)).b!=r||e.a!=i}function gtn(n,t,e){var i;return(i=jxn(n.b,t))?QXn(Len(n,i),e):null}function ptn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function mtn(n,t,e){var i,r;r=null,(i=v0(n,e))&&(r=uAn(i)),Tkn(t,e,r)}function vtn(n,t){var e;return(e=n.Ih(t))>=0?n.Lh(e,!0,!0):YNn(n,t,!0)}function ktn(n,t,e){var i;return i=Ufn(n,t,e),n.b=new Don(i.c.length),ZFn(n,i)}function ytn(n){if(n.b<=0)throw hv(new Bv);return--n.b,n.a-=n.c.c,xwn(n.a)}function Mtn(n){var t;if(!n.a)throw hv(new EY);return t=n.a,n.a=R0(n.a),t}function Ttn(n){for(;!n.a;)if(!y_(n.c,new yd(n)))return!1;return!0}function jtn(n){return WW(n),F$(n,204)?uG(n,204):new sb(n)}function Etn(n){Stn(),uG(n.of((XYn(),bDt)),181).Fc((eNn(),dRt)),n.qf(lDt,null)}function Stn(){Stn=E,tNt=new hu,iNt=new fu,eNt=Rln((XYn(),lDt),tNt,q$t,iNt)}function Ptn(){Ptn=E,cIt=new nO("LEAF_NUMBER",0),aIt=new nO("NODE_SIZE",1)}function Ctn(n){n.a=Inn(YHt,W1n,28,n.b+1,15,1),n.c=Inn(YHt,W1n,28,n.b,15,1),n.d=0}function Itn(n,t){n.a.Ne(t.d,n.b)>0&&(kD(n.c,new wG(t.c,t.d,n.d)),n.b=t.d)}function Otn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.g[t]}function Atn(n,t,e){if(gln(n,e),null!=e&&!n.fk(e))throw hv(new Nv);return e}function Ltn(n,t){return 10!=Min(t)&&Uhn(Tbn(t),t.Sm,t.__elementTypeId$,Min(t),n),n}function Ntn(n,t,e,i){sZ(),i=i||Jot,rLn(n.slice(t,e),n,t,e,-t,i)}function $tn(n,t,e,i,r){return t<0?YNn(n,e,i):uG(e,69).wk().yk(n,n.hi(),t,i,r)}function Dtn(n,t){return ugn(uM(pK(oIn(n,(GYn(),bmt)))),uM(pK(oIn(t,bmt))))}function xtn(){xtn=E,Mut=Abn((Rtn(),Uhn(cT(Tut,1),p1n,304,0,[put,mut,vut,kut])))}function Rtn(){Rtn=E,put=new qP("All",0),mut=new SN,vut=new P$,kut=new EN}function Ktn(){Ktn=E,Ast=new aC(z2n,0),Ost=new aC(G2n,1),Lst=new aC(V2n,2)}function Ftn(){Ftn=E,tXn(),sHt=M0n,uHt=T0n,fHt=new Rw(M0n),hHt=new Rw(T0n)}function _tn(){_tn=E,vht=Abn((ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])))}function Btn(){Btn=E,Rht=Abn((myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])))}function Htn(){Htn=E,Eht=Abn((vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])))}function Utn(){Utn=E,ibt=Abn((Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])))}function Gtn(){Gtn=E,Glt=Abn((Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])))}function qtn(){qtn=E,ldt=Abn((qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])))}function Xtn(){Xtn=E,Wwt=Abn((Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])))}function ztn(){ztn=E,mjt=Abn((Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])))}function Vtn(){Vtn=E,Ujt=Abn((yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])))}function Wtn(){Wtn=E,Ngt=new iI(q4n,0),Lgt=new iI("IMPROVE_STRAIGHTNESS",1)}function Qtn(n,t){var e,i;return i=t/n.c.Rd().gc()|0,e=t%n.c.Rd().gc(),I7(n,i,e)}function Jtn(n){var t;if(n.nl())for(t=n.i-1;t>=0;--t)zrn(n,t);return g5(n)}function Ytn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function Ztn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[1];)e=t;return e}function nen(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function ten(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function een(n,t){if(t.a)throw hv(new Ky(p2n));FV(n.a,t),t.a=n,!n.j&&(n.j=t)}function ien(n,t){rL.call(this,t.zd(),-16449&t.yd()),tJ(n),this.a=n,this.c=t}function ren(n,t){return new LU(t,KR(D$(t.e),t.f.a+n,t.f.b+n),(qx(),!1))}function cen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function aen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function oen(){oen=E,tOt=Abn((dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])))}function uen(){uen=E,KCt=Abn((mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])))}function sen(){sen=E,YSt=Abn((Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])))}function hen(){hen=E,bxt=Abn((_gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])))}function fen(){fen=E,Fxt=Abn((Ajn(),Uhn(cT(Wxt,1),p1n,291,0,[Rxt,$xt,Dxt,xxt])))}function len(){len=E,ZRt=Abn((Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])))}function ben(){ben=E,EKt=Abn((qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])))}function wen(){wen=E,LKt=Abn((Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])))}function den(){den=E,EAt=new uO(g7n,0),PAt=new uO(k9n,1),SAt=new uO(q4n,2)}function gen(n,t,e,i,r){return tJ(n),tJ(t),tJ(e),tJ(i),tJ(r),new WV(n,t,i)}function pen(n,t){var e;return(e=uG(u7(n.e,t),400))?(cq(e),e.e):null}function men(n,t){var e;return-1!=(e=Ten(n,t,0))&&(i7(n,e),!0)}function ven(n,t,e){var i;return GQ(n),(i=new un).a=t,n.a.Nb(new nC(i,e)),i.a}function ken(n){var t;return GQ(n),t=Inn(eUt,I0n,28,0,15,1),tE(n.a,new md(t)),t}function yen(n){var t;if(!oon(n))throw hv(new Bv);return n.e=1,t=n.d,n.d=null,t}function Men(n){var t;return _L(n)&&(t=0-n,!isNaN(t))?t:Esn(gfn(n))}function Ten(n,t,e){for(;e<n.c.length;++e)if(OJ(t,n.c[e]))return e;return-1}function jen(n){var t;return t=uG(zq(n.j,0),12),uG(oIn(t,(GYn(),rmt)),12)}function Een(n,t){var e;this.f=n,this.b=t,e=uG(cQ(n.b,t),260),this.c=e?e.b:null}function Sen(){GB(),this.b=new Ym,this.f=new Ym,this.g=new Ym,this.e=new Ym}function Pen(n){LD(this),this.g=n?i1(n,n.ie()):null,this.f=n,KY(this),this.je()}function Cen(n){var t;null!=(t=n.jj())&&-1!=n.d&&uG(t,94).xh(n),n.i&&n.i.oj()}function Ien(n){var t;for(t=n.p+1;t<n.c.a.c.length;++t)--uG(zq(n.c.a,t),10).p}function Oen(n){TK(!!n.c),OB(n.f.g,n.d),n.c.Qb(),n.c=null,n.b=Phn(n),n.d=n.f.g}function Aen(n){return n.b||(n.b=new fz(n,g_t,n),!n.a&&(n.a=new oF(n,n))),n.b}function Len(n,t){var e,i;return!(i=(e=uG(t,690)).xi())&&e.Ai(i=new IA(n,t)),i}function Nen(n,t){var e,i;return!(i=(e=uG(t,692)).$k())&&e.cl(i=new p4(n,t)),i}function $en(n,t){var e,i;return JS(),e=Q6(n),i=Q6(t),!!e&&!!i&&!Tyn(e.k,i.k)}function Den(n,t){return OJ(t,zq(n.f,0))||OJ(t,zq(n.f,1))||OJ(t,zq(n.f,2))}function xen(n,t){if(t<0)throw hv(new dM(Nnt+t));return p5(n,t+1),zq(n.j,t)}function Ren(n,t,e,i){if(!n)throw hv(new vM(LBn(t,Uhn(cT(dat,1),EZn,1,5,[e,i]))))}function Ken(n,t,e,i,r,c,a){Ran.call(this,t,i,r,c,a),Kf(this),this.c=n,this.b=e}function Fen(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 _en(n){var t,e;return gW(n,0,e=n.length,t=Inn(JHt,N1n,28,e,15,1),0),t}function Ben(n){var t,e;return iX(),!(e=aot[t=n+128])&&(e=aot[t]=new Dw(n)),e}function Hen(n){return OB(n.d.a.e.g,n.b),MK(n.c!=n.d.a.d),n.a=n.c,n.c=n.c.a,n.a}function Uen(n){switch(n.g){case 0:return vZn;case 1:return-1;default:return 0}}function Gen(n){return yEn(n,(tin(),not))<0?-sx(gfn(n)):n.l+n.m*w0n+n.h*d0n}function qen(n){(this.q?this.q:(hZ(),hZ(),Vot)).Ac(n.q?n.q:(hZ(),hZ(),Vot))}function Xen(n,t){L_(uG(uG(n.f,27).of((XYn(),sDt)),101))&&ppn(RJ(uG(n.f,27)),t)}function zen(n,t){var e;return(e=emn(n.d,t))>=0?Dyn(n,e,!0,!0):YNn(n,t,!0)}function Ven(n){var t;return null==(t=Kcn(Lsn(n,32)))&&($vn(n),t=Kcn(Lsn(n,32))),t}function Wen(n){var t;return n.Oh()||(t=iQ(n.Dh())-n.ji(),n.$h().Mk(t)),n.zh()}function Qen(n,t){Iht=new et,xht=t,uG((Cht=n).b,68),Rnn(Cht,Iht,null),Szn(Cht)}function Jen(){Jen=E,glt=new dC("XY",0),dlt=new dC("X",1),plt=new dC("Y",2)}function Yen(){Yen=E,Fst=new oC("TOP",0),Kst=new oC(G2n,1),Rst=new oC(Q2n,2)}function Zen(){Zen=E,gpt=new uI(q4n,0),ppt=new uI("TOP",1),dpt=new uI(Q2n,2)}function nin(){nin=E,Gjt=new pI("INPUT_ORDER",0),qjt=new pI("PORT_DEGREE",1)}function tin(){tin=E,Jat=p$(f0n,f0n,524287),Yat=p$(0,0,b0n),Zat=_9(1),_9(2),not=_9(0)}function ein(n){var t;return n.d!=n.r&&(t=bEn(n),n.e=!!t&&t.lk()==srt,n.d=t),n.e}function iin(n,t,e){var i;return i=n.g[t],yD(n,t,n.Zi(t,e)),n.Ri(t,e,i),n.Ni(),i}function rin(n,t){var e;return(e=n.dd(t))>=0&&(n.gd(e),!0)}function cin(n,t){var e;for(WW(n),WW(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function ain(n,t){var e;return(e=uG(cQ(n.e,t),400))?(nD(n,e),e.e):null}function oin(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function uin(n,t){var e=n.a[t],i=(Cfn(),Wat)[typeof e];return i?i(e):Vbn(typeof e)}function sin(n,t){return vgn(n),new fX(n,new D_(new f7(t,n.a)))}function hin(n){var t;return null!=(t=0==n.b.c.length?null:zq(n.b,0))&&Con(n,0),t}function fin(n,t){var e,i,r;r=t.c.i,i=(e=uG(cQ(n.f,r),60)).d.c-e.e.c,fun(t.a,i,0)}function lin(n,t){var e;for(++n.d,++n.c[t],e=t+1;e<n.a.length;)++n.a[e],e+=e&-e}function bin(n,t,e,i){QYn(),Qm.call(this,26),this.c=n,this.a=t,this.d=e,this.b=i}function win(n,t){for(;t[0]<n.length&&xL(" \t\r\n",$Cn(VJ(n,t[0])))>=0;)++t[0]}function din(n,t){ycn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function gin(n,t){Mcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function pin(n,t){kcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function min(n,t){vcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function vin(n,t,e){return bD(new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)==(tJ(t),t)}function kin(n,t){return F$(t,102)&&uG(t,19).Bb&P0n?new yL(t,n):new Zsn(t,n)}function yin(n,t){return F$(t,102)&&uG(t,19).Bb&P0n?new yL(t,n):new Zsn(t,n)}function Min(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function Tin(n,t){return t==(cB(),cB(),uut)?n.toLocaleLowerCase():n.toLowerCase()}function jin(n){if(!n.e)throw hv(new Bv);return n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ein(n){if(!n.c)throw hv(new Bv);return n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function Sin(n){var t;for(++n.a,t=n.c.a.length;n.a<t;++n.a)if(n.c.b[n.a])return}function Pin(n){var t,e;if(n.a){e=null;do{t=n.a,n.a=null,e=JOn(t,e)}while(n.a);n.a=e}}function Cin(n){var t,e;if(n.b){e=null;do{t=n.b,n.b=null,e=JOn(t,e)}while(n.b);n.b=e}}function Iin(n,t){var e;for(e=0;n.e!=n.i.gc();)Tq(t,Zkn(n),xwn(e)),e!=vZn&&++e}function Oin(n,t){var e;return 0==(e=Fgn(n.e.c,t.e.c))?ugn(n.e.d,t.e.d):e}function Ain(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 Lin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.a==n}function Nin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.i==n}function $in(){$in=E,Ilt=Abn((uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])))}function Din(){Din=E,vdt=Abn((gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])))}function xin(){xin=E,wgt=Abn((kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])))}function Rin(){Rin=E,Ejt=Abn((pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])))}function Kin(){Kin=E,$mt=Abn((Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])))}function Fin(){Fin=E,rIt=Abn((zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])))}function _in(){_in=E,BAt=Abn((_Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])))}function Bin(){Bin=E,sLt=Abn((pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])))}function Hin(){Hin=E,ext=Abn((xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])))}function Uin(){Uin=E,bNt=Abn((Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])))}function Gin(){Gin=E,iRt=Abn((Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])))}function qin(){qin=E,HRt=Abn((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])))}function Xin(){Xin=E,Yut=new iC("BY_SIZE",0),Zut=new iC("BY_SIZE_AND_SHAPE",1)}function zin(){zin=E,gft=new wC("EADES",0),pft=new wC("FRUCHTERMAN_REINGOLD",1)}function Vin(){Vin=E,dgt=new nI("READING_DIRECTION",0),ggt=new nI("ROTATION",1)}function Win(){Win=E,zlt=new Pt,Vlt=new At,qlt=new Lt,Xlt=new Ot,Wlt=new Nt}function Qin(n){this.b=new Zm,this.a=new Zm,this.c=new Zm,this.d=new Zm,this.e=n}function Jin(n){this.g=n,this.f=new Zm,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function Yin(n,t,e){HF.call(this),Qrn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function Zin(n,t,e){var i;for(i=new Ww(e);i.a<i.c.c.length;)PPn(n,t,N3(i))}function nrn(n,t,e){var i;if(null==t)throw hv(new Rv);return i=v0(n,t),K5(n,t,e),i}function trn(n,t){var e;return(e=uG(cQ(n.a,t),137))||(e=new Yn,vJ(n.a,t,e)),e}function ern(n,t){var e;return null==n.i&&eqn(n),e=n.i,t>=0&&t<e.length?e[t]:null}function irn(n,t){var e;return e=t>0?t-1:t,lj(bj(xcn(xG(new fy,e),n.n),n.j),n.k)}function rrn(n){var t;t=new Yk,ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),t)}function crn(n){return(2&n.i?"interface ":1&n.i?"":"class ")+(vK(n),n.o)}function arn(n){return dwn(n,vZn)>0?vZn:dwn(n,j1n)<0?j1n:pz(n)}function orn(n){return n<3?(man(n,b1n),n+1):n<d1n?t0(n/.75+1):vZn}function urn(n,t){return tJ(t),zz(n),!!n.d.Ob()&&(t.Cd(n.d.Pb()),!0)}function srn(n,t){var e,i;return(e=uG(Xwn(n.d,t),16))?(i=t,n.e.pc(i,e)):null}function hrn(n,t,e,i){n.j=-1,P$n(n,sAn(n,t,e),(PP(),uG(t,69).vk().xl(i)))}function frn(n,t){return ncn(),-d$(uG(oIn(n,(QGn(),kCt)),17).a,uG(oIn(t,kCt),17).a)}function lrn(n,t){return!!bun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))}function brn(){return rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])}function wrn(){return lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])}function drn(){return h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])}function grn(n){var t;return(t=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,t=0),t}function prn(n,t){var e;for(e=n.Kc();e.Ob();)kfn(uG(e.Pb(),72),(GYn(),Qpt),t)}function mrn(n,t,i){var r;TEn(i,r=e.Math.max(0,n.b/2-.5),1),kD(t,new AC(i,r))}function vrn(n,t,e){return t0(gq(n.a.e[uG(t.a,10).p]-n.a.e[uG(e.a,10).p]))}function krn(n,t){var e;return vgn(n),e=new QY(n,n.a.zd(),4|n.a.yd(),t),new fX(n,e)}function yrn(n){var t;TK(!!n.c),t=n.c.a,Lrn(n.d,n.c),n.b==n.c?n.b=t:--n.a,n.c=null}function Mrn(n){return n.a>=-.01&&n.a<=Z2n&&(n.a=0),n.b>=-.01&&n.b<=Z2n&&(n.b=0),n}function Trn(n){var t,e;for(l_n(),e=G9n,t=0;t<n.length;t++)n[t]>e&&(e=n[t]);return e}function jrn(n,t){var e;if(!(e=EKn(n.Dh(),t)))throw hv(new vM(Gtt+t+ztt));return e}function Ern(n,t){var e;for(e=n;R0(e);)if((e=R0(e))==t)return!0;return!1}function Srn(n,t){var e,i,r;for(i=t.a.ld(),e=uG(t.a.md(),16).gc(),r=0;r<e;r++)n.Cd(i)}function Prn(n,t){var e,i,r,c;for(tJ(t),r=0,c=(i=n.c).length;r<c;++r)e=i[r],t.Cd(e)}function Crn(n,t,e,i,r,c){var a;c2(a=K9(i),r),u2(a,c),UNn(n.a,i,new $B(a,t,e.f))}function Irn(n,t){Myn(n,(lBn(),jOt),t.f),Myn(n,yOt,t.e),Myn(n,TOt,t.d),Myn(n,kOt,t.c)}function Orn(n,t){this.a=new Ym,this.e=new Ym,this.b=(Cwn(),hjt),this.c=n,this.b=t}function Arn(n){this.d=n,this.c=n.c.vc().Kc(),this.b=null,this.a=null,this.e=(Hy(),Iat)}function Lrn(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 Nrn(n,t){return!(!t||n.b[t.g]!=t||(uQ(n.b,t.g,null),--n.c,0))}function $rn(n,t){if(0>n||n>t)throw hv(new YM("fromIndex: 0, toIndex: "+n+Q0n+t))}function Drn(n){if(n<0)throw hv(new vM("Illegal Capacity: "+n));this.g=this.aj(n)}function xrn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function Rrn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r<c;++r)e=i[r],oD(n.g,e).a=t}function Krn(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 Frn(n){var t;for(t=0;t<n.c.length;t++)(u3(t,n.c.length),uG(n.c[t],12)).p=t}function _rn(n){var t,e;for(t=n.a.d.j,e=n.c.d.j;t!=e;)Mon(n.b,t),t=qdn(t);Mon(n.b,t)}function Brn(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 Hrn(n){var t;return n.w?n.w:((t=O3(n))&&!t.Vh()&&(n.w=t),t)}function Urn(n,t){var e,i;i=n.a,e=kdn(n,t,null),i!=t&&!n.e&&(e=PWn(n,t,e)),e&&e.oj()}function Grn(n,t,e){var i,r;i=t;do{r=uM(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function qrn(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function Xrn(n){var t;return null==n?null:NCn(t=uG(n,195),t.length)}function zrn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.Wi(t,n.g[t])}function Vrn(n,t){var e,i;for(hZ(),i=new Zm,e=0;e<n;++e)mv(i.c,t);return new eT(i)}function Wrn(n){return vgn(n),kG(!0,"n may not be negative"),new fX(n,new Fan(n.a))}function Qrn(n){n.b=(Ktn(),Ost),n.f=(Yen(),Kst),n.d=(man(2,g1n),new R7(2)),n.e=new sj}function Jrn(n){this.b=(WW(n),new Z_(n)),this.a=new Zm,this.d=new Zm,this.e=new sj}function Yrn(){Yrn=E,jst=new cC("BEGIN",0),Est=new cC(G2n,1),Sst=new cC("END",2)}function Zrn(){Zrn=E,ixt=new CO(G2n,0),rxt=new CO("HEAD",1),cxt=new CO("TAIL",2)}function ncn(){ncn=E,GCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),VSt)),(OHn(),fPt)),rPt),uPt)}function tcn(){tcn=E,XCt=Lvn(Lvn(Lvn(gP(new wJ,(Cjn(),QSt)),(OHn(),aPt)),tPt),cPt)}function ecn(){ecn=E,zdt=Abn((vAn(),Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])))}function icn(){icn=E,Agt=Abn((tOn(),Uhn(cT($gt,1),p1n,283,0,[Egt,jgt,Pgt,Sgt,Igt,Cgt])))}function rcn(){rcn=E,Ugt=Abn((ESn(),Uhn(cT(Qgt,1),p1n,281,0,[Fgt,Kgt,Bgt,Rgt,_gt,xgt])))}function ccn(){ccn=E,Jgt=Abn((RIn(),Uhn(cT(upt,1),p1n,282,0,[Vgt,qgt,Wgt,zgt,Xgt,Ggt])))}function acn(){acn=E,mbt=Abn((zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])))}function ocn(){ocn=E,DNt=Abn((nMn(),Uhn(cT(n$t,1),p1n,255,0,[CNt,ANt,LNt,NNt,INt,ONt])))}function ucn(){ucn=E,t$t=Abn((ZSn(),Uhn(cT(txt,1),p1n,298,0,[ZNt,YNt,JNt,WNt,VNt,QNt])))}function scn(){scn=E,yxt=Abn((RCn(),Uhn(cT(Lxt,1),p1n,321,0,[mxt,gxt,vxt,wxt,pxt,dxt])))}function hcn(){hcn=E,fRt=Abn(($Pn(),Uhn(cT(mRt,1),p1n,101,0,[sRt,uRt,oRt,rRt,aRt,cRt])))}function fcn(){fcn=E,vRt=Abn((eNn(),Uhn(cT(BRt,1),p1n,279,0,[gRt,wRt,dRt,bRt,lRt,pRt])))}function lcn(){lcn=E,$st=(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,Nst=$st}function bcn(){return VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])}function wcn(n,t){return jIn(),d$(n.b.c.length-n.e.c.length,t.b.c.length-t.e.c.length)}function dcn(n,t){return Cj(lun(n,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function gcn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function pcn(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,1,e,n.b))}function mcn(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,3,e,n.b))}function vcn(n,t){var e;e=n.f,n.f=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,3,e,n.f))}function kcn(n,t){var e;e=n.g,n.g=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,4,e,n.g))}function ycn(n,t){var e;e=n.i,n.i=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,5,e,n.i))}function Mcn(n,t){var e;e=n.j,n.j=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,6,e,n.j))}function Tcn(n,t){var e;e=n.j,n.j=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,1,e,n.j))}function jcn(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,4,e,n.c))}function Ecn(n,t){var e;e=n.k,n.k=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,2,e,n.k))}function Scn(n,t){var e;e=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&Msn(n,new t8(n,0,e,n.a))}function Pcn(n,t){var e;e=n.s,n.s=t,4&n.Db&&!(1&n.Db)&&Msn(n,new e8(n,4,e,n.s))}function Ccn(n,t){var e;e=n.t,n.t=t,4&n.Db&&!(1&n.Db)&&Msn(n,new e8(n,5,e,n.t))}function Icn(n,t){var e;e=n.d,n.d=t,4&n.Db&&!(1&n.Db)&&Msn(n,new e8(n,2,e,n.d))}function Ocn(n,t){var e;e=n.F,n.F=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,5,e,t))}function Acn(n,t){var e;return(e=uG(cQ((TP(),_Ft),n),57))?e.gk(t):Inn(dat,EZn,1,t,5,1)}function Lcn(n,t){return YF(D$(uG(cQ(n.g,t),8)),x$(uG(cQ(n.f,t),470).b))}function Ncn(n,t){var e,i;return gj(),i=new cs,!!t&&vKn(i,t),Van(e=i,n),e}function $cn(n,t){var e;return t in n.a&&(e=v0(n,t).re())?e.a:null}function Dcn(n,t,e){if(gln(n,e),!n.kl()&&null!=e&&!n.fk(e))throw hv(new Nv);return e}function xcn(n,t){return n.n=t,n.n?(n.f=new Zm,n.e=new Zm):(n.f=null,n.e=null),n}function Rcn(n,t){if(n){t.n=n;var e=u0(t);e?e.Rm=t:sZn[n]=[t]}}function Kcn(n){var t;return Fq(null==n||Array.isArray(n)&&!((t=Min(n))>=14&&t<=16)),n}function Fcn(n,t){var e;return tJ(t),vG(!!(e=n[":"+t]),"Enum constant undefined: "+t),e}function _cn(n,t,e,i,r,c){var a;return Rcn(e,a=VW(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Bcn(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 Hcn(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 Ucn(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 Gcn(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 qcn(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 Xcn(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r<c;++r)e=i[r],een(n.a,e);return n}function zcn(n){var t,e,i;for(e=0,i=(t=n).length;e<i;++e)WW(t[e]);return new rN(n)}function Vcn(n){var t;return OEn(t=YF(D$(n.d.d),n.c.d),n.c.e.a,n.c.e.b),JF(t,n.c.d)}function Wcn(n){var t;return OEn(t=YF(D$(n.c.d),n.d.d),n.d.e.a,n.d.e.b),JF(t,n.d.d)}function Qcn(n){var t=/function(?:\s+([\w$]+))?\s*\(/.exec(n);return t&&t[1]||O1n}function Jcn(n,t,i){var r;return r=n.length,b$n(n,0,t,0,e.Math.min(i,r),!0),t}function Ycn(n,t,e){var i,r;for(r=t.Kc();r.Ob();)i=uG(r.Pb(),74),FV(n,uG(e.Kb(i),27))}function Zcn(n,t){L_(uG(oIn(uG(n.e,10),(jYn(),JMt)),101))&&(hZ(),f$(uG(n.e,10).j,t))}function nan(){return W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])}function tan(){return MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])}function ean(){ean=E,_Et=new jI("BARYCENTER",0),BEt=new jI(p6n,1),HEt=new jI(m6n,2)}function ian(){ian=E,gEt=new MI("NO",0),wEt=new MI(x6n,1),dEt=new MI("LOOK_BACK",2)}function ran(){ran=E,igt=new YC("ARD",0),cgt=new YC("MSD",1),rgt=new YC("MANUAL",2)}function can(){can=E,Qjt=new mI(Y2n,0),Vjt=new mI("INPUT",1),Wjt=new mI("OUTPUT",2)}function aan(){return cNt||Oln(cNt=new ABn,Uhn(cT(vst,1),EZn,134,0,[new Dl])),cNt}function oan(n){if(!(n>=0))throw hv(new vM("tolerance ("+n+") must be >= 0"));return n}function uan(n,t){var e;return F$(t,44)?n.c.Mc(t):(e=ymn(n,t),Svn(n,t),e)}function san(n,t,e){return Kbn(n,t),qon(n,e),Pcn(n,0),Ccn(n,1),mdn(n,!0),ddn(n,!0),n}function han(n,t){var e;if(e=n.gc(),t<0||t>e)throw hv(new w_(t,e));return new N_(n,t)}function fan(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),kD(n.a,t)}function lan(n){TK(n.c>=0),Rvn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function ban(n){var t;for(t=n.c.Cc().Kc();t.Ob();)uG(t.Pb(),16).$b();n.c.$b(),n.d=0}function wan(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)dW(t=e[i],t.length,null)}function dan(n,t){var e,i,r;for(i=0,r=(e=t).length;i<r;++i)s8(n,e[i],n.c.b,n.c)}function gan(n,t){var e,i;for(e=0,i=n.gc();e<i;++e)if(OJ(t,n.Xb(e)))return e;return-1}function pan(n){var t,e;if(0==n)return 32;for(e=0,t=1;!(t&n);t<<=1)++e;return e}function man(n,t){if(n<0)throw hv(new vM(t+" cannot be negative but was: "+n));return n}function van(n,t){typeof window===wZn&&typeof window.$gwt===wZn&&(window.$gwt[n]=t)}function kan(n,t){return Pj(bun(n.a,t,pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15)))))}function yan(n,t,e){return gen(n,new dd(t),new an,new gd(e),Uhn(cT(Rut,1),p1n,108,0,[]))}function Man(){return aUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])}function Tan(){Tan=E,wot=Uhn(cT(YHt,1),W1n,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])}function jan(){jan=E,Zdt=new JC("LAYER_SWEEP",0),Ydt=new JC(D6n,1),ngt=new JC(q4n,2)}function Ean(){Ean=E,CEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function San(){San=E,IEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Pan(){Pan=E,OEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Can(){Can=E,AEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Ian(){Ian=E,LEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Oan(){Oan=E,DEt=Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)}function Aan(){Aan=E,KEt=wz(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt,vwt)}function Lan(n){var t;for(t=new Ww(FTn(n));t.a<t.c.c.length;)uG(N3(t),695)._f()}function Nan(){kE();for(var n=hZn,t=0;t<arguments.length;t++)n.push(arguments[t])}function $an(n){HS(),this.g=new Ym,this.f=new Ym,this.b=new Ym,this.c=new K1,this.i=n}function Dan(){this.f=new sj,this.d=new xk,this.c=new sj,this.a=new Zm,this.b=new Zm}function xan(n,t,e,i){this.ak(),this.a=t,this.b=n,this.c=null,this.c=new b_(this,t,e,i)}function Ran(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 Kan(){$D.call(this),this.n=-1,this.g=null,this.i=null,this.j=null,this.Bb|=w1n}function Fan(n){rL.call(this,n.Ad(64)?g$(0,$gn(n.zd(),1)):YZn,n.yd()),this.b=1,this.a=n}function _an(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a<n.gc()&&uG(oIn(t,kCt),17).a>=0}function Ban(n,t){n.r>0&&n.c<n.r&&(n.c+=t,n.i&&n.i.d>0&&0!=n.g&&Ban(n.i,t/n.r*n.i.d))}function Han(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Uan(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,4,e,n.c))}function Gan(n,t){var e;e=n.k,n.k=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.k))}function qan(n,t){var e;e=n.D,n.D=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.D))}function Xan(n,t){var e;e=n.f,n.f=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.f))}function zan(n,t){var e;e=n.i,n.i=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,7,e,n.i))}function Van(n,t){var e;e=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.a))}function Wan(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Qan(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Jan(n,t){var e;e=n.c,n.c=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Yan(n,t){var e;e=n.d,n.d=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.d))}function Zan(n,t,e){var i;n.b=t,n.a=e,i=512&~n.a?new $f:new ay,n.c=qFn(i,n.b,n.a)}function non(n,t){return EFn(n.e,t)?(PP(),ein(t)?new Cq(t,n):new OA(t,n)):new PA(t,n)}function ton(n){return 0>n?new mS:new OK(null,new i9(n+1,n))}function eon(n,t){var e;return hZ(),e=new sS(1),RA(n)?r2(e,n,t):VAn(e.f,n,t),new Vw(e)}function ion(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?uG(zq(e.a,i-1),10):null}function ron(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function con(n){var t;return F$(t=oIn(n,(GYn(),rmt)),167)?Qpn(uG(t,167)):null}function aon(n){var t;return(n=e.Math.max(n,2))>(t=pfn(n))?(t<<=1)>0?t:d1n:t}function oon(n){switch(_D(3!=n.e),n.e){case 2:return!1;case 0:return!0}return a7(n)}function uon(n,t){var e;return!!F$(t,8)&&(e=uG(t,8),n.a==e.a&&n.b==e.b)}function son(n,t){var e;e=new et,uG(t.b,68),uG(t.b,68),uG(t.b,68),Prn(t.a,new $U(n,e,t))}function hon(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)rSn(n,(e=uG(i.Pb(),44)).ld(),e.md())}function fon(n,t){var e;e=n.d,n.d=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,11,e,n.d))}function lon(n,t){var e;e=n.j,n.j=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,13,e,n.j))}function bon(n,t){var e;e=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,21,e,n.b))}function won(n,t){0==(t9(),Nut?null:t.c).length&&RK(t,new G),r2(n.a,Nut?null:t.c,t)}function don(n,t){t.Ug("Hierarchical port constraint processing",1),ayn(n),yYn(n),t.Vg()}function gon(){gon=E,Sdt=new VC("START",0),Edt=new VC("MIDDLE",1),jdt=new VC("END",2)}function pon(){pon=E,VCt=new YI("P1_NODE_PLACEMENT",0),WCt=new YI("P2_EDGE_ROUTING",1)}function mon(){mon=E,Wft=new Cm(E4n),Qft=new Cm(S4n),Vft=new Cm(P4n),zft=new Cm(C4n)}function von(n){var t;return OB(n.f.g,n.d),MK(n.b),n.c=n.a,t=uG(n.a.Pb(),44),n.b=Phn(n),t}function kon(n){return null==n.b?(EP(),EP(),eBt):n.ul()?n.tl():n.sl()}function yon(n,t){var e;return!((e=null==t?-1:Ten(n.b,t,0))<0||(Con(n,e),0))}function Mon(n,t){var e;return tJ(t),e=t.g,!n.b[e]&&(uQ(n.b,e,t),++n.c,!0)}function Ton(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 jon(n,t){var e,i;for(i=t.Kc();i.Ob();)e=uG(i.Pb(),272),n.b=!0,FV(n.e,e),e.b=n}function Eon(n,t){var e,i;return e=uG(oIn(n,(jYn(),rTt)),8),i=uG(oIn(t,rTt),8),ugn(e.b,i.b)}function Son(n,t,e){var i,r;return r=t>>5,i=31&t,E3(Dz(n.n[e][r],pz(Nz(i,1))),3)}function Pon(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)uQ(t,i,n.a[r])}function Con(n,t){var e;e=i7(n.b,n.b.c.length-1),t<n.b.c.length&&(Y8(n.b,t,e),CLn(n,t))}function Ion(n,t){var e;return(e=uG(cQ(n.c,t),467))||((e=new Ek).c=t,vJ(n.c,e.c,e)),e}function Oon(n,t){var e,i;i=new Zm,e=t;do{mv(i.c,e),e=uG(cQ(n.k,e),18)}while(e);return i}function Aon(n,t,e){var i;return gFn(n,t,i=new Zm,e,!0,!0),n.b=new Don(i.c.length),i}function Lon(n,t){var e,i;for(Ntn(e=n.Pc(),0,e.length,t),i=0;i<e.length;i++)n.hd(i,e[i])}function Non(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)ycn(t=uG(Zkn(e),27),0),Mcn(t,0)}function $on(n){this.e=n,this.d=new Dj(orn(kz(this.e).gc())),this.c=this.e.a,this.b=this.e.c}function Don(n){this.b=n,this.a=Inn(YHt,W1n,28,n+1,15,1),this.c=Inn(YHt,W1n,28,n,15,1),this.d=0}function xon(n,t,e){Orn.call(this,t,e),this.d=Inn(pbt,e6n,10,n.a.c.length,0,1),Ekn(n.a,this.d)}function Ron(n,t,e){M6.call(this,n,t,e),this.a=new Ym,this.b=new Ym,this.d=new Zg(this)}function Kon(n){tz.call(this),this.b=uM(pK(oIn(n,(jYn(),dTt)))),this.a=uG(oIn(n,Vyt),223)}function Fon(n,t){var e;return F$(t,16)?(e=uG(t,16),n.Gc(e)):cin(n,uG(WW(t),20).Kc())}function _on(n,t){kS(JJ(new fX(null,new h3(new Lw(n.b),1)),new UO(n,t)),new qO(n,t))}function Bon(n,t){t.Ug(g6n,1),kS(sin(new fX(null,new h3(n.b,16)),new Zt),new ne),t.Vg()}function Hon(n){return RA(n)?pln(n):FA(n)?OL(n):KA(n)?XK(n):Cz(n)?n.Hb():xX(n)?xx(n):OZ(n)}function Uon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)Xb(t=uG(e.Pb(),219),new MV(t.f))}function Gon(n){var t,e;for(e=n.c.a.ec().Kc();e.Ob();)zb(t=uG(e.Pb(),219),new PIn(t.e))}function qon(n,t){var e;e=n.zb,n.zb=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.zb))}function Xon(n,t){var e;e=n.xb,n.xb=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,e,n.xb))}function zon(n,t){var e;e=n.yb,n.yb=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.yb))}function Von(n,t){var e;(e=new Wk).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Won(n,t){var e;(e=new PK).n=t,ttn((!n.s&&(n.s=new fV(o_t,n,21,17)),n.s),e)}function Qon(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),e|=n.Fc(i);return e}function Jon(n){var t,e,i;for(t=0,i=n.Kc();i.Ob();)t=~~(t+=null!=(e=i.Pb())?Hon(e):0);return t}function Yon(n,t){var e=n.a,i=0;for(var r in e)e.hasOwnProperty(r)&&(t[i++]=r);return t}function Zon(n){var t;return 0==n?"UTC":(n<0?(n=-n,t="UTC+"):t="UTC-",t+oin(n))}function nun(n){return n.a<54?n.f<0?-1:n.f>0?1:0:(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e}function tun(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function eun(n,t){return Xhn(),n==Flt&&t==Hlt||n==Hlt&&t==Flt||n==Blt&&t==_lt||n==_lt&&t==Blt}function iun(n,t){return Xhn(),n==Flt&&t==_lt||n==Flt&&t==Blt||n==Hlt&&t==Blt||n==Hlt&&t==_lt}function run(n,t){return YN(),oan(Z2n),e.Math.abs(0-t)<=Z2n||0==t||isNaN(0)&&isNaN(t)?0:n/t}function cun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new _g(n)),t))))}function aun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new Fg(n)),t))))}function oun(){return r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])}function uun(){return THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])}function sun(n,t){t.Ug("General Compactor",1),Bpn(uG(zDn(n,(jOn(),LIt)),393)).Cg(n)}function hun(n,t){var e,i;return e=uG(zDn(n,(jOn(),FIt)),17),i=uG(zDn(t,FIt),17),d$(e.a,i.a)}function fun(n,t,e){var i,r;for(r=Fkn(n,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a+=t,i.b+=e;return n}function lun(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&xQ(t,i.g))return i;return null}function bun(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&xQ(t,i.i))return i;return null}function wun(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 dun(n,t,e,i,r,c){var a;this.c=n,tTn(n,a=new Zm,t,n.b,e,i,r,c),this.a=new N4(a,0)}function gun(){this.c=new Vj(0),this.b=new Vj(F9n),this.d=new Vj(K9n),this.a=new Vj(_3n)}function pun(n,t,e,i,r,c,a){_E.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=n7(a)}function mun(n,t,e,i,r,c,a,o,u,s,h,f,l){return eLn(n,t,e,i,r,c,a,o,u,s,h,f,l),Sgn(n,!1),n}function vun(n){return n.b.c.i.k==(zIn(),lbt)?uG(oIn(n.b.c.i,(GYn(),rmt)),12):n.b.c}function kun(n){return n.b.d.i.k==(zIn(),lbt)?uG(oIn(n.b.d.i,(GYn(),rmt)),12):n.b.d}function yun(n){var t;return _A((t=t6(n)).a,0)?(gS(),gS(),fut):(gS(),new dR(t.b))}function Mun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.b))}function Tun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.c))}function jun(n){switch(n.g){case 2:return KQn(),_Rt;case 4:return KQn(),kRt;default:return n}}function Eun(n){switch(n.g){case 1:return KQn(),KRt;case 3:return KQn(),yRt;default:return n}}function Sun(n){switch(n.g){case 0:return new Wo;case 1:return new Qo;default:return null}}function Pun(){Pun=E,Hwt=new uF("edgelabelcenterednessanalysis.includelabel",(qx(),tot))}function Cun(){Cun=E,FEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Iun(){Iun=E,XEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Oun(){Oun=E,V_t=new Qk,Q_t=Uhn(cT(o_t,1),krt,179,0,[]),W_t=Uhn(cT(p_t,1),yrt,62,0,[])}function Aun(){Aun=E,Obt=new PC("TO_INTERNAL_LTR",0),Ibt=new PC("TO_INPUT_DIRECTION",1)}function Lun(){Lun=E,Tbt=new Bt,ybt=new Ht,Mbt=new Ut,kbt=new Gt,jbt=new qt,Ebt=new Xt}function Nun(n,t){t.Ug(g6n,1),Apn(FS(new Ad((zS(),new mY(n,!1,!1,new Ft))))),t.Vg()}function $un(n,t,e){e.Ug("DFS Treeifying phase",1),qmn(n,t),qKn(n,t),n.a=null,n.b=null,e.Vg()}function Dun(n,t){return qx(),RA(n)?r7(n,mK(t)):FA(n)?Rz(n,pK(t)):KA(n)?xz(n,gK(t)):n.Fd(t)}function xun(n,t){var e,i;for(tJ(t),i=t.vc().Kc();i.Ob();)e=uG(i.Pb(),44),n.zc(e.ld(),e.md())}function Run(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!H5(n,t,i.Pb()))return!1;return!0}function Kun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Rh(t,-1-(-1==c?i:c),null,r)),r}function Fun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Th(t,-1-(-1==c?i:c),null,r)),r}function _un(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 Bun(n){if(tJ(n),0==n.length)throw hv(new ZM("Zero length BigInteger"));qHn(this,n)}function Hun(n){this.i=n.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Uun(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Zm,RLn(this),hZ(),f$(this.a,null)}function Gun(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),kD(n.a,t)}function qun(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 Xun(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),8)).a+=t.a,e.b+=t.b;return n}function zun(n){var t,e;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),30).p=e,++e}function Vun(n){var t,e,i;return n.j==(KQn(),yRt)&&(e=$x(t=_$n(n),kRt),(i=$x(t,_Rt))||i&&e)}function Wun(n,t){var e;return jNn(new MO((e=ECn(n)).c,e.d),new MO(e.b,e.a),n.Mf(),t,n.ag())}function Qun(n,t){var e;vZ(e=uG(t,190),"x",n.i),vZ(e,"y",n.j),vZ(e,wet,n.g),vZ(e,bet,n.f)}function Jun(n,t){F$(t,85)?(uG(n.c,79).Gk(),hon(n,uG(t,85))):uG(n.c,79).Wb(t)}function Yun(n,t){var e,i;for(tJ(t),i=n.vc().Kc();i.Ob();)e=uG(i.Pb(),44),t.Yd(e.ld(),e.md())}function Zun(n,t){for(WW(t);n.Ob();)if(!shn(uG(n.Pb(),10)))return!1;return!0}function nsn(){var n;return Sut||(Sut=new ik,LN(n=new e9(""),(pS(),Eut)),won(Sut,n)),Sut}function tsn(n,t){return gen(new ld(n),new bd(t),new wd(t),new nn,Uhn(cT(Rut,1),p1n,108,0,[]))}function esn(){esn=E,iOt=new iO(q4n,0),rOt=new iO("POLAR_COORDINATE",1),eOt=new iO("ID",2)}function isn(){isn=E,Zjt=new vI("EQUALLY",0),nEt=new vI(o3n,1),tEt=new vI("NORTH_SOUTH",2)}function rsn(){rsn=E,Oht=new uF("debugSVG",(qx(),!1)),Aht=new uF("overlapsExisted",!0)}function csn(){csn=E,TNt=Abn((lAn(),Uhn(cT(SNt,1),p1n,285,0,[yNt,wNt,mNt,kNt,dNt,gNt,pNt,vNt])))}function asn(){asn=E,SFt=Abn((rDn(),Uhn(cT(PFt,1),p1n,245,0,[jFt,yFt,MFt,kFt,TFt,mFt,pFt,vFt])))}function osn(){osn=E,Kdt=Abn((h_n(),Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt])))}function usn(){return OHn(),Uhn(cT(pPt,1),p1n,262,0,[fPt,rPt,uPt,sPt,oPt,iPt,hPt,tPt,aPt,cPt,ePt])}function ssn(n,t,e){var i,r;return r=uG(W_(n.d,t),17),i=uG(W_(n.b,e),17),r&&i?I7(n,r.a,i.a):null}function hsn(n,t){var e;return!!(e=QBn(aan(),n))&&(Myn(t,(XYn(),yDt),e),!0)}function fsn(n){return VK(),n.A.Hc((Qmn(),VRt))&&!n.B.Hc((aUn(),rKt))?xmn(n):null}function lsn(){this.a=uG(Jkn((rGn(),Tft)),17).a,this.c=uM(pK(Jkn(_ft))),this.b=uM(pK(Jkn(xft)))}function bsn(n){this.f=n,this.e=new a8(this.f.i),this.a=this.e,this.b=Phn(this),this.d=this.f.g}function wsn(n,t){_G.call(this,dBt,n,t),this.b=this,this.a=VKn(n.Dh(),ern(this.e.Dh(),this.c))}function dsn(n,t){var e,i;for(i=new Ww(t.b);i.a<i.c.c.length;)e=uG(N3(i),30),n.a[e.p]=OIn(e)}function gsn(n,t){var e;for(e=0;e<t.j.c.length;e++)uG(xen(n,e),21).Gc(uG(xen(t,e),16));return n}function psn(n,t,e,i){var r;e>(r=n.a.length)?e=r:s3(t,e+1),n.a=r1(n.a,0,t)+""+i+sQ(n.a,e)}function msn(n,t){n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=Lgn(n.d,t)}function vsn(n,t){return t<n.b.gc()?uG(n.b.Xb(t),10):t==n.b.gc()?n.a:uG(zq(n.e,t-n.b.gc()-1),10)}function ksn(n,t,e){return ugn(bD($kn(n),new MO(t.e.a,t.e.b)),bD($kn(n),new MO(e.e.a,e.e.b)))}function ysn(n,t,e){return n==(ean(),HEt)?new Cc:0!=uRn(t,1)?new rj(e.length):new ij(e.length)}function Msn(n,t){var e,i,r;if(null!=(e=n.th())&&n.wh())for(i=0,r=e.length;i<r;++i)e[i].dj(t)}function Tsn(n,t){var e,i,r;for(e=n.c.Xe(),r=t.Kc();r.Ob();)i=r.Pb(),n.a.Yd(e,i);return n.b.Kb(e)}function jsn(n,t){var e,i;for(i=HQ(e=n).e;i;){if((e=i)==t)return!0;i=HQ(e).e}return!1}function Esn(n){var t;return 0==(t=n.h)?n.l+n.m*w0n:t==l0n?n.l+n.m*w0n-d0n:n}function Ssn(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 Psn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),72),kD(n.d,e),TIn(n,e)}function Csn(n,t){t.Ug("Edge and layer constraint edge reversal",1),cQn(pBn(n)),t.Vg()}function Isn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)kN(e=uG(Zkn(i),27),e.i+t.b,e.j+t.d)}function Osn(n){var t;null==n.d?(++n.e,n.f=0,Mwn(null)):(++n.e,t=n.d,n.d=null,n.f=0,Mwn(t))}function Asn(n){var t;if(n.a==n.b.a)throw hv(new Bv);return t=n.a,n.c=t,n.a=uG(nJ(n.a.e),227),t}function Lsn(n,t){var e;return n.Db&t?-1==(e=jTn(n,t))?n.Eb:Kcn(n.Eb)[e]:null}function Nsn(n,t){var e;return(e=new Kl).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function $sn(n,t){var e;return(e=new Gv).G=t,!n.rb&&(n.rb=new vV(n,s_t,n)),ttn(n.rb,e),e}function Dsn(n,t,e,i){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,e),t&&INn(n,t),i&&n.gl(!0)}function xsn(n,t){n.c&&(vHn(n,t,!0),kS(new fX(null,new h3(t,16)),new Xg(n))),vHn(n,t,!1)}function Rsn(n){var t;return n$(),DP(vSt,n)||((t=new ca).a=n,yF(vSt,n,t)),uG(AJ(vSt,n),645)}function Ksn(n){var t;if(n.g>1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw hv(new Bv)}function Fsn(n){switch(n.a.g){case 1:return new KI;case 3:return new zTn;default:return new ml}}function _sn(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return j4(n,t)}function Bsn(n){return p0n<n&&n<d0n?n<0?e.Math.ceil(n):e.Math.floor(n):Esn(oKn(n))}function Hsn(n){var t;return n<128?(rX(),!(t=sot[n])&&(t=sot[n]=new xw(n)),t):new xw(n)}function Usn(n,t){var e;try{t.de()}catch(i){if(!F$(i=Ehn(i),82))throw hv(i);e=i,mv(n.c,e)}}function Gsn(n){var t,e,i;return e=0,(i=n)<0&&(i+=d0n,e=l0n),t=t0(i/w0n),p$(t0(i-t*w0n),t,e)}function qsn(n){var t,e,i;for(i=0,e=new fS(n.a);e.a<e.c.a.length;)t=X5(e),n.b.Hc(t)&&++i;return i}function Xsn(n){var t,e,i;for(t=1,i=n.Kc();i.Ob();)t=~~(t=31*t+(null==(e=i.Pb())?0:Hon(e)));return t}function zsn(n,t){var e;return t?((e=t.nf()).dc()||(n.q?xun(n.q,e):n.q=new nL(e)),n):n}function Vsn(n,t){var e;return void 0===(e=n.a.get(t))?++n.d:(CF(n.a,t),--n.c,++n.b.g),e}function Wsn(n,t){var e;return 0==(e=t.p-n.p)?ugn(n.f.a*n.f.b,t.f.a*t.f.b):e}function Qsn(n,t){var e,i;return(e=n.j)!=(i=t.j)?e.g-i.g:n.p==t.p?0:e==(KQn(),yRt)?n.p-t.p:t.p-n.p}function Jsn(n,t,e,i,r){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i),uQ(n.b[t.g],e.g,r),uQ(n.b[e.g],t.g,r)}function Ysn(n,t,e){this.b=(tJ(n),n),this.d=(tJ(t),t),this.e=(tJ(e),e),this.c=this.d+""+this.e}function Zsn(n,t){this.b=n,this.e=t,this.d=t.j,this.f=(PP(),uG(n,69).xk()),this.k=VKn(t.e.Dh(),n)}function nhn(n){this.n=new Zm,this.e=new lS,this.j=new lS,this.k=new Zm,this.f=new Zm,this.p=n}function thn(n){n.r=new ek,n.w=new ek,n.t=new Zm,n.i=new Zm,n.d=new ek,n.a=new cN,n.c=new Ym}function ehn(){ehn=E,pht=new uC("UP",0),wht=new uC(c3n,1),dht=new uC(z2n,2),ght=new uC(V2n,3)}function ihn(){ihn=E,fpt=new oI("ONE_SIDED",0),lpt=new oI("TWO_SIDED",1),hpt=new oI("OFF",2)}function rhn(){rhn=E,OAt=new sO("EQUAL_BETWEEN_STRUCTURES",0),AAt=new sO("TO_ASPECT_RATIO",1)}function chn(){chn=E,ojt=Abn((MKn(),Uhn(cT(fjt,1),p1n,265,0,[rjt,tjt,ejt,YTt,njt,cjt,ijt,JTt,ZTt])))}function ahn(){ahn=E,hKt=Abn((aUn(),Uhn(cT(wKt,1),p1n,264,0,[eKt,rKt,tKt,cKt,aKt,uKt,oKt,iKt,nKt])))}function ohn(){ohn=E,Qxt=Abn((VDn(),Uhn(cT(eRt,1),p1n,95,0,[Bxt,_xt,Uxt,Vxt,zxt,Xxt,Gxt,qxt,Hxt])))}function uhn(){uhn=E,kst=Abn((W_n(),Uhn(cT(yst,1),p1n,257,0,[pst,lst,bst,fst,dst,gst,wst,hst,sst])))}function shn(n){var t;return t=uG(oIn(n,(GYn(),Fpt)),64),n.k==(zIn(),lbt)&&(t==(KQn(),_Rt)||t==kRt)}function hhn(n,t,e){var i,r;(r=uG(oIn(n,(jYn(),bMt)),75))&&(rbn(i=new Uk,0,r),Xun(i,e),Qon(t,i))}function fhn(n,t,e){var i,r,c,a;i=(a=HQ(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 lhn(n,t){var e,i;return(e=n.f.c.length)<(i=t.f.c.length)?-1:e==i?0:1}function bhn(n){return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:sY(n)}function whn(n){var t;if(n){if((t=n).dc())throw hv(new Bv);return t.Xb(t.gc()-1)}return y2(n.Kc())}function dhn(n){var t;return dwn(n,0)<0&&(n=CG(n)),64-(0!=(t=pz(Dz(n,32)))?GNn(t):GNn(pz(n))+32)}function ghn(){return t9(),Nut?new e9(null):$$n(nsn(),"com.google.common.base.Strings")}function phn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nyn(n.n,t,i)):BIn(n,t,e,i)}function mhn(n,t){var e;return qon(e=new Fs,t),ttn((!n.A&&(n.A=new PD(J_t,n,7)),n.A),e),e}function vhn(n,t,e){var i,r;return r=p6(t,pet),iSn((i=new QO(n,e)).a,i.b,r),r}function khn(n){var t;return n.a&&(1&n.Bb||!n.a.Vh())||F$(t=bEn(n),156)&&(n.a=uG(t,156)),n.a}function yhn(n,t){var e,i;for(tJ(t),i=t.Kc();i.Ob();)if(e=i.Pb(),!n.Hc(e))return!1;return!0}function Mhn(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),p$(e&f0n,i&f0n,r&l0n)}function Thn(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),p$(e&f0n,i&f0n,r&l0n)}function jhn(n){var t,e;for(BQn(n),e=new Ww(n.d);e.a<e.c.c.length;)(t=uG(N3(e),105)).i&&NOn(t)}function Ehn(n){var t;return F$(n,82)?n:((t=n&&n.__java$exception)||Cv(t=new qbn(n)),t)}function Shn(n){if(F$(n,193))return uG(n,123);if(n)return null;throw hv(new MM(Het))}function Phn(n){return!!n.a.Ob()||n.a==n.e&&(n.a=new Hnn(n.f.f),n.a.Ob())}function Chn(n,t){if(null==t)return!1;for(;n.a!=n.b;)if(udn(t,rwn(n)))return!0;return!1}function Ihn(n,t){return!(!n||!t||n==t)&&hvn(n.d.c,t.d.c+t.d.b)&&hvn(t.d.c,n.d.c+n.d.b)}function Ohn(n,t){var e;return 0!=(e=t.Pc()).length&&(dG(n.c,n.c.length,e),!0)}function Ahn(n,t,e){var i,r;for(r=t.vc().Kc();r.Ob();)i=uG(r.Pb(),44),n.yc(i.ld(),i.md(),e);return n}function Lhn(n){var t,e;for(t=new lS,e=Fkn(n.d,0);e.b!=e.d.c;)aq(t,uG(I6(e),65).c);return t}function Nhn(n,t){var e;for(e=new Ww(n.b);e.a<e.c.c.length;)kfn(uG(N3(e),72),(GYn(),Qpt),t)}function $hn(n,t,e){var i,r;for(r=new Ww(n.b);r.a<r.c.c.length;)kN(i=uG(N3(r),27),i.i+t,i.j+e)}function Dhn(n,t){if(!n)throw hv(new vM(LBn("value already present: %s",Uhn(cT(dat,1),EZn,1,5,[t]))))}function xhn(n,t,i,r,c){return l_n(),e.Math.min(uWn(n,t,i,r,c),uWn(i,r,n,t,BR(new MO(c.a,c.b))))}function Rhn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),uG(i.b,68),Prn(i.a,new NU(n,t,i))}function Khn(n,t){n.d==(xdn(),JDt)||n.d==nxt?uG(t.a,60).c.Fc(uG(t.b,60)):uG(t.b,60).c.Fc(uG(t.a,60))}function Fhn(n,t){var e;return e=iR(t.a.gc()),kS(krn(new fX(null,new h3(t,1)),n.i),new yO(n,e)),e}function _hn(n){var t;return qon(t=new Fs,"T"),ttn((!n.d&&(n.d=new PD(J_t,n,11)),n.d),t),t}function Bhn(n){var t,e,i,r;for(t=1,e=0,r=n.gc();e<r;++e)t=31*t+(null==(i=n.Vi(e))?0:Hon(i));return t}function Hhn(n,t,e,i){var r;return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),r=n.a[t][e],uQ(n.a[t],e,i),r}function Uhn(n,t,e,i,r){return r.Rm=n,r.Sm=t,r.Tm=j,r.__elementTypeId$=e,r.__elementTypeCategory$=i,r}function Ghn(){Ghn=E,zwt=new IC(q4n,0),qwt=new IC(M6n,1),Xwt=new IC(T6n,2),Gwt=new IC("BOTH",3)}function qhn(){qhn=E,odt=new XC(G2n,0),udt=new XC(z2n,1),sdt=new XC(V2n,2),hdt=new XC("TOP",3)}function Xhn(){Xhn=E,Flt=new jC("Q1",0),Hlt=new jC("Q4",1),_lt=new jC("Q2",2),Blt=new jC("Q3",3)}function zhn(){zhn=E,kEt=new TI("OFF",0),yEt=new TI("SINGLE_EDGE",1),vEt=new TI("MULTI_EDGE",2)}function Vhn(){Vhn=E,VLt=new wO("MINIMUM_SPANNING_TREE",0),zLt=new wO("MAXIMUM_SPANNING_TREE",1)}function Whn(){Whn=E,new Cm("org.eclipse.elk.addLayoutConfig"),ZLt=new ru,YLt=new iu,new cu}function Qhn(n){var t;return gj(),t=new is,n&&ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),t),t}function Jhn(n){var t,e;for(e=new Zm,t=n.Kc();t.Ob();)Ohn(e,GFn(uG(t.Pb(),27)));return e}function Yhn(n,t){var e,i;for(bZ(t,"predicate"),i=0;n.Ob();i++)if(e=n.Pb(),t.Lb(e))return i;return-1}function Zhn(n,t){var e,i;if(i=0,n<64&&n<=t)for(t=t<64?t:63,e=n;e<=t;e++)i=S3(i,Nz(1,e));return i}function nfn(n,t){var e,i;return e=n.c,(i=t.e[n.p])<e.a.c.length-1?uG(zq(e.a,i+1),10):null}function tfn(n){var t,e,i;for(hZ(),i=0,e=n.Kc();e.Ob();)i+=null!=(t=e.Pb())?Hon(t):0,i|=0;return i}function efn(n){var t,e;return e=(t=uG(n.e&&n.e(),9)).slice(),new nB(t,uG(Ltn(e,t),9),t.length)}function ifn(n,t,e){var i;$V(n.a),Prn(e.i,new Bp(n)),Wvn(n,i=new C$(uG(cQ(n.a,t.b),68)),t),e.f=i}function rfn(n){var t;pqn(n,!0),t=$1n,vR(n,(jYn(),aTt))&&(t+=uG(oIn(n,aTt),17).a),kfn(n,aTt,xwn(t))}function cfn(n){var t;return(t=new y).a=n,t.b=Qfn(n),t.c=Inn($ot,zZn,2,2,6,1),t.c[0]=Zon(n),t.c[1]=Zon(n),t}function afn(n){var t,e,i;return e=n.n,i=n.o,t=n.d,new gY(e.a-t.b,e.b-t.d,i.a+(t.b+t.c),i.b+(t.d+t.a))}function ofn(n,t){return!(!n||!t||n==t)&&Fgn(n.b.c,t.b.c+t.b.b)<0&&Fgn(t.b.c,n.b.c+n.b.b)<0}function ufn(n){switch(n.g){case 1:return Dxt;case 2:return $xt;case 3:return xxt;default:return Rxt}}function sfn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 2:case 4:return!0;default:return!1}}function hfn(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 ffn(n,t){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void n.o.c.$b();oAn(n,t)}function lfn(n,t){return OGn(uG(uG(cQ(n.g,t.a),42).a,68),uG(uG(cQ(n.g,t.b),42).a,68))}function bfn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));return n.Si()&&(e=A0(n,e)),n.Ei(t,e)}function wfn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)eTn(n,c,a)||HBn(n,c,a,!0,!1)}function dfn(n){var t,e,i;for(l_n(),e=Inn(PNt,zZn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=WMn(i,n);return e}function gfn(n){var t,e;return p$(t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,~n.h+(0==t&&0==e?1:0)&l0n)}function pfn(n){var t;if(n<0)return j1n;if(0==n)return 0;for(t=d1n;!(t&n);t>>=1);return t}function mfn(n,t,e){return!(n>=128)&&HA(n<64?E3(Nz(1,n),e):E3(Nz(1,n-64),t),0)}function vfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function kfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function yfn(n){var t,e;return zsn(e=new d7,n),kfn(e,(mon(),Wft),n),kqn(n,e,t=new Ym),zWn(n,e,t),e}function Mfn(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 Tfn(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r<i-1;r++)e|=tvn(n,t,r,r+1);return e}function jfn(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i<r;++i)Hfn(n,t=e[i],(KQn(),KRt)),Hfn(n,t,yRt)}function Efn(){Efn=E,spt=Abn((r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])))}function Sfn(){Sfn=E,Rjt=Abn((THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])))}function Pfn(){Pfn=E,kgt=new tI(q4n,0),vgt=new tI("INCOMING_ONLY",1),ygt=new tI("OUTGOING_ONLY",2)}function Cfn(){Cfn=E,Wat={boolean:uS,number:hM,string:fM,object:wLn,function:wLn,undefined:lv}}function Ifn(){this.o=null,this.k=null,this.j=null,this.d=null,this.b=null,this.n=null,this.a=null}function Ofn(n,t){this.c=n,this.d=t,this.b=this.d/this.c.c.Rd().gc()|0,this.a=this.d%this.c.c.Rd().gc()}function Afn(n,t){this.b=n,vL.call(this,(uG(zrn(gZ((tQ(),M_t).o),10),19),t.i),t.g),this.a=(Oun(),Q_t)}function Lfn(n,t,i){this.q=new e.Date,this.q.setFullYear(n+V1n,t,i),this.q.setHours(0,0,0,0),Iqn(this,0)}function Nfn(n,t){vG(n>=0,"Negative initial capacity"),vG(t>=0,"Non-positive load factor"),$V(this)}function $fn(n,t,e,i,r){var c,a;if(a=n.length,c=e.length,t<0||i<0||r<0||t+r>a||i+r>c)throw hv(new Lv)}function Dfn(n,t){var e,i,r,c,a;for(hZ(),a=!1,r=0,c=(i=t).length;r<c;++r)e=i[r],a|=n.Fc(e);return a}function xfn(n,t,e){var i,r;return i=new _nn(t,e),r=new B,n.b=FFn(n,n.b,i,r),r.b||++n.c,n.b.b=!1,r.d}function Rfn(n){var t;return null==(t=n.a[n.b])?null:(uQ(n.a,n.b,null),n.b=n.b+1&n.a.length-1,t)}function Kfn(n){var t,e;return 32==(e=GNn(n.h))?32==(t=GNn(n.m))?GNn(n.l)+32:t+20-10:e-12}function Ffn(n){var t;return(!n.c||!(1&n.Bb)&&64&n.c.Db)&&F$(t=bEn(n),90)&&(n.c=uG(t,29)),n.c}function _fn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).d.c=-t.d.c-t.d.b;hKn(n)}function Bfn(n){var t,e;for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).g.c=-t.g.c-t.g.b;fKn(n)}function Hfn(n,t,e){var i,r,c;for(c=0,r=Vwn(t,e).Kc();r.Ob();)i=uG(r.Pb(),12),vJ(n.c,i,xwn(c++))}function Ufn(n,t,e){var i;return gFn(n,t,i=new Zm,(KQn(),kRt),!0,!1),gFn(n,e,i,_Rt,!1,!1),i}function Gfn(n){var t,e,i,r,c;for(t=new sj,r=0,c=(i=n).length;r<c;++r)e=i[r],t.a+=e.a,t.b+=e.b;return t}function qfn(n,t,e){var i,r;return r=p6(t,"labels"),_Dn((i=new aA(n,e)).a,i.b,r),r}function Xfn(n,t,e,i){var r;return(r=hxn(n,t,e,i))||!(r=Odn(n,e,i))||iVn(n,t,r)?r:null}function zfn(n,t,e,i){var r;return(r=fxn(n,t,e,i))||!(r=Adn(n,e,i))||iVn(n,t,r)?r:null}function Vfn(n,t,e){if(WW(t),e.Ob())for(YA(t,KQ(e.Pb()));e.Ob();)YA(t,n.a),YA(t,KQ(e.Pb()));return t}function Wfn(n,t){var e;for(e=0;e<n.a.a.length;e++)if(!uG(Vq(n.a,e),178).Lb(t))return!1;return!0}function Qfn(n){var t;return 0==n?"Etc/GMT":(n<0?(n=-n,t="Etc/GMT-"):t="Etc/GMT+",t+oin(n))}function Jfn(n){var t;return!(n.b<=0)&&((t=xL("MLydhHmsSDkK",$Cn(VJ(n.c,0))))>1||t>=0&&n.b<3)}function Yfn(n){var t,e,i;t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,i=~n.h+(0==t&&0==e?1:0)&l0n,n.l=t,n.m=e,n.h=i}function Zfn(n){var t,e,i;for(hZ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?Hon(t):0),i|=0;return i}function nln(n,t,e,i,r){var c;return c=gDn(n,t),e&&Yfn(c),r&&(n=hTn(n,t),Qat=i?gfn(n):p$(n.l,n.m,n.h)),c}function tln(n,t,e){n.g=mAn(n,t,(KQn(),kRt),n.b),n.d=mAn(n,e,kRt,n.b),0!=n.g.c&&0!=n.d.c&&AIn(n)}function eln(n,t,e){n.g=mAn(n,t,(KQn(),_Rt),n.j),n.d=mAn(n,e,_Rt,n.j),0!=n.g.c&&0!=n.d.c&&AIn(n)}function iln(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return Kpn(n,t)}function rln(n,t){switch(t.g){case 0:F$(n.b,641)||(n.b=new lsn);break;case 1:F$(n.b,642)||(n.b=new zG)}}function cln(n){if(0===n.g)return new eu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function aln(n){if(0===n.g)return new nu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function oln(n,t,e){return!Qj(JJ(new fX(null,new h3(n.c,16)),new hd(new GO(t,e)))).Bd((vS(),Kut))}function uln(n,t){return bD($kn(uG(oIn(t,(QGn(),cCt)),88)),new MO(n.c.e.a-n.b.e.a,n.c.e.b-n.b.e.b))<=0}function sln(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&uG(n.g[n.i-1],51).Ob():O0(n);)yA(t,Wxn(n))}function hln(n){var t;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),86).f.$b();Zy(n.b,n),LKn(n)}function fln(n){var t,e;for(t=new Uk,e=Fkn(n,0);e.b!=e.d.c;)sR(t,0,new eN(uG(I6(e),8)));return t}function lln(n){var t;return GQ(n),t=new un,n.a.Bd(t)?(UD(),new Xy(tJ(t.a))):(UD(),UD(),sut)}function bln(n,t,e){if(0===t)return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),void Jun(n.o,e);sLn(n,t,e)}function wln(n,t,e){this.g=n,this.e=new sj,this.f=new sj,this.d=new lS,this.b=new lS,this.a=t,this.c=e}function dln(n,t,e,i){this.b=new Zm,this.n=new Zm,this.i=i,this.j=e,this.s=n,this.t=t,this.r=0,this.d=0}function gln(n,t){if(!n.Li()&&null==t)throw hv(new vM("The 'no null' constraint is violated"));return t}function pln(n){var t,e;for(t=0,e=0;e<n.length;e++)t=(t<<5)-t+(s3(e,n.length),n.charCodeAt(e))|0;return t}function mln(n,t){var e,i,r;for(r=n.b;r;){if(0==(e=n.a.Ne(t,r.d)))return r;i=e<0?0:1,r=r.a[i]}return null}function vln(n,t,e){var i,r;qx(),i=!!IL(e),(r=uG(t.xc(i),15))||(r=new Zm,t.zc(i,r)),r.Fc(e)}function kln(n,t){var e,i;return(e=uG(zDn(n,(S_n(),JOt)),17).a)==(i=uG(zDn(t,JOt),17).a)||e<i?-1:e>i?1:0}function yln(n){return kD(n.c,(Whn(),ZLt)),xrn(n.a,uM(pK(Jkn((lmn(),WTt)))))?new zu:new zp(n)}function Mln(n){for(;!n.d||!n.d.Ob();){if(!n.b||LM(n.b))return null;n.d=uG(xV(n.b),51)}return n.d}function Tln(n){switch(n.g){case 1:return K9n;default:case 2:return 0;case 3:return _3n;case 4:return F9n}}function jln(){var n;return QYn(),VHt||(n=eR(kJn("M",!0)),n=CX(kJn("M",!1),n),VHt=n)}function Eln(){Eln=E,CKt=new uA("ELK",0),IKt=new uA("JSON",1),PKt=new uA("DOT",2),OKt=new uA("SVG",3)}function Sln(){Sln=E,aEt=new kI("STACKED",0),rEt=new kI("REVERSE_STACKED",1),cEt=new kI("SEQUENCED",2)}function Pln(){Pln=E,gPt=new WI(q4n,0),dPt=new WI("MIDDLE_TO_MIDDLE",1),wPt=new WI("AVOID_OVERLAP",2)}function Cln(){Cln=E,tdt=new ji,edt=new Ei,ndt=new Mi,Zwt=new Si,tJ(new Ti),Ywt=new L}function Iln(){Iln=E,Pxt=new CN(15),Sxt=new _N((XYn(),W$t),Pxt),Cxt=mDt,Mxt=a$t,Txt=_$t,Ext=U$t,jxt=H$t}function Oln(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r<c;++r)e=i[r],a=new lQ(n),e.hf(a),zqn(a);$V(n.f)}function Aln(n,t){var e;return t===n||!!F$(t,229)&&(e=uG(t,229),udn(n.Zb(),e.Zb()))}function Lln(n,t){return!!rKn(n,t)&&(UNn(n.b,uG(oIn(t,(GYn(),xpt)),21),t),aq(n.a,t),!0)}function Nln(n){var t,e;(t=uG(oIn(n,(GYn(),lmt)),10))&&(men((e=t.c).a,t),0==e.a.c.length&&men(HQ(t).b,e))}function $ln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(t,imt),17).a-uG(oIn(n,imt),17).a:0}function Dln(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?uG(oIn(n,imt),17).a-uG(oIn(t,imt),17).a:0}function xln(n){return Nut?Inn(Put,i2n,581,0,0,1):uG(Ekn(n.a,Inn(Put,i2n,581,n.a.c.length,0,1)),856)}function Rln(n,t,e,i){return TJ(),new Ry(Uhn(cT(Sat,1),c1n,44,0,[(IMn(n,t),new FE(n,t)),(IMn(e,i),new FE(e,i))]))}function Kln(n,t,e){var i;return san(i=new Yk,t,e),ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),i),i}function Fln(n){var t,e,i,r;for(e=(r=LP(YKt,n)).length,i=Inn($ot,zZn,2,e,6,1),t=0;t<e;++t)i[t]=r[t];return i}function _ln(n,t){var e;2*t+1>=n.b.c.length||(_ln(n,2*t+1),(e=2*t+2)<n.b.c.length&&_ln(n,e),CLn(n,t))}function Bln(n,t){var e,i;for(i=Fkn(n,0);i.b!=i.d.c;)(e=uG(I6(i),219)).e.length>0&&(t.Cd(e),e.i&&Zdn(e))}function Hln(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:$P(E3(n[i],L0n),E3(t[i],L0n))?-1:1}function Uln(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=aon(e),i=Inn($at,l1n,227,r,0,1),this.b=i}function Gln(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(eTn(n,c,a))return!0;return!1}function qln(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(uG(e.Pb(),16).Hc(t))return!0;return!1}function Xln(n,t,e){var i,r,c,a;for(tJ(e),a=!1,c=n.fd(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function zln(n,t){var e,i;return i=uG(Lsn(n.a,4),129),e=Inn(xFt,Uit,424,t,0,1),null!=i&&qGn(i,0,e,0,i.length),e}function Vln(n,t){var e;return e=new Z_n(!!(256&n.f),n.i,n.a,n.d,!!(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Wln(n,t){var e;return n===t||!!F$(t,85)&&(e=uG(t,85),OOn(Mz(n),e.vc()))}function Qln(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=uG(r.Pb(),44),n.Be(t,i.md()))return!0;return!1}function Jln(n,t,e){return n.d[t.p][e.p]||(Kyn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function Yln(n,t){return!(!n||n==t||!vR(t,(GYn(),zpt)))&&uG(oIn(t,(GYn(),zpt)),10)!=n}function Zln(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.$l()}}function nbn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n._l()}}function tbn(n){U0.call(this,"The given string does not match the expected format for individual spacings.",n)}function ebn(n,t){var e;t.Ug("Min Size Preprocessing",1),e=xAn(n),Myn(n,(lBn(),EOt),e.a),Myn(n,MOt,e.b),t.Vg()}function ibn(n){var t,e,i;for(t=0,i=Inn(PNt,zZn,8,n.b,0,1),e=Fkn(n,0);e.b!=e.d.c;)i[t++]=uG(I6(e),8);return i}function rbn(n,t,e){var i,r;for(i=new lS,r=Fkn(e,0);r.b!=r.d.c;)aq(i,new eN(uG(I6(r),8)));Xln(n,t,i)}function cbn(n,t){var e;return e=Lgn(n,t),$P(P3(n,t),0)|BA(P3(n,e),0)?e:Lgn(YZn,P3(Dz(e,63),1))}function abn(n,t){var e,i;return(e=uG(n.d.Bc(t),16))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function obn(n){var t;if((t=n.a.c.length)>0)return Vz(t-1,n.a.c.length),i7(n.a,t-1);throw hv(new _v)}function ubn(n,t,e){if(n>t)throw hv(new vM(o2n+n+u2n+t));if(n<0||t>e)throw hv(new YM(o2n+n+s2n+t+Q0n+e))}function sbn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),qan(n,null==t?null:(tJ(t),t)),n.C&&n.hl(null)}function hbn(n,t){var e;e=null!=Jkn((lmn(),WTt))&&null!=t.Sg()?uM(pK(t.Sg()))/uM(pK(Jkn(WTt))):1,vJ(n.b,t,e)}function fbn(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 lbn(n){var t;++n.j,0==n.i?n.g=null:n.i<n.g.length&&(t=n.g,n.g=n.aj(n.i),qGn(t,0,n.g,0,n.i))}function bbn(n,t,e){if(t<0)throw hv(new dM(Nnt+t));t<n.j.c.length?Y8(n.j,t,e):(p5(n,t),kD(n.j,e))}function wbn(n){if(!(n.a&&8&n.a.i))throw hv(new kM("Enumeration class expected for layout option "+n.f))}function dbn(n){var t;return!n.a&&(n.a=new fV(d_t,n,9,5)),0!=(t=n.a).i?bP(uG(zrn(t,0),694)):null}function gbn(n){var t;for(WW(n),CB(!0,"numberToAdvance must be nonnegative"),t=0;t<0&&hDn(n);t++)N9(n);return t}function pbn(){pbn=E,BS(),Hht=new mL(I3n,Uht=Kht),Bht=new Cm(O3n),Ght=new Cm(A3n),qht=new Cm(L3n)}function mbn(){mbn=E,xCt=new QI(X4n,0),$Ct=new QI(Q9n,1),DCt=new QI("FAN",2),NCt=new QI("CONSTRAINT",3)}function vbn(){vbn=E,sIt=new tO(q4n,0),hIt=new tO("RADIAL_COMPACTION",1),fIt=new tO("WEDGE_COMPACTION",2)}function kbn(){kbn=E,sEt=new yI("CONSERVATIVE",0),hEt=new yI("CONSERVATIVE_SOFT",1),fEt=new yI("SLOPPY",2)}function ybn(){ybn=E,Cut=new XP("CONCURRENT",0),Iut=new XP("IDENTITY_FINISH",1),Out=new XP("UNORDERED",2)}function Mbn(){Mbn=E,Nlt=g0(Uhn(cT(axt,1),p1n,88,0,[(xdn(),JDt),YDt])),$lt=g0(Uhn(cT(axt,1),p1n,88,0,[nxt,QDt]))}function Tbn(n){return RA(n)?$ot:FA(n)?fot:KA(n)?cot:Cz(n)||xX(n)?n.Rm:n.Rm||Array.isArray(n)&&cT(Kat,1)||Kat}function jbn(n){return n?1&n.i?n==ZHt?cot:n==YHt?dot:n==iUt?lot:n==eUt?fot:n==nUt?yot:n==rUt?Tot:n==tUt?uot:hot:n:null}function Ebn(n){return n.c==n.b.b&&n.i==n.g.b||(Xv(n.a.c,0),Ohn(n.a,n.b),Ohn(n.a,n.g),n.c=n.b.b,n.i=n.g.b),n.a}function Sbn(n,t){var e,i;for(e=n.a.length-1;t!=n.b;)i=t-1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.b,null),n.b=n.b+1&e}function Pbn(n,t){var e,i;for(e=n.a.length-1,n.c=n.c-1&e;t!=n.c;)i=t+1&e,uQ(n.a,t,n.a[i]),t=i;uQ(n.a,n.c,null)}function Cbn(n,t,e){var i;return o3(t,n.c.length),0!=(i=e.Pc()).length&&(dG(n.c,t,i),!0)}function Ibn(n,t,e){var i,r,c,a;for(c=0,a=(r=e).length;c<a;++c)if(i=r[c],n.b.Be(t,i.ld()))return i;return null}function Obn(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])?Hon(t):0),c|=0;return c}function Abn(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 Lbn(n){var t,e;if(null==n)return null;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return n[t];return null}function Nbn(n,t){return n?t&&!n.j||F$(n,127)&&0==uG(n,127).a.b?0:n.jf():0}function $bn(n,t){return n?t&&!n.k||F$(n,127)&&0==uG(n,127).a.a?0:n.kf():0}function Dbn(n,t){return vR(n,(GYn(),imt))&&vR(t,imt)?d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a):0}function xbn(n){var t,e,i;for(i=0,e=new Fz(ix(n.a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||++i;return i}function Rbn(n,t){var e,i,r;for(r=t-n.f,i=new Ww(n.d);i.a<i.c.c.length;)Xmn(e=uG(N3(i),315),e.e,e.f+r);n.f=t}function Kbn(n,t){var e,i;e=n.Yk(t,null),i=null,t&&(vj(),Urn(i=new ev,n.r)),(e=CCn(n,i,e))&&e.oj()}function Fbn(n,t){var e,i,r;for(e=n,r=0;;){if(e==t)return r;if(!(i=e.e))throw hv(new Dv);e=HQ(i),++r}}function _bn(n){var t,e;for(t=n.b.a.a.ec().Kc();t.Ob();)e=new Uxn(uG(t.Pb(),567),n.e,n.f),kD(n.g,e)}function Bbn(n){var t;return t=new Jin(n),O4(n.a,Wlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[t]))),t.d&&kD(t.f,t.d),t.f}function Hbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Ubn(n,t){return t<n.length&&(s3(t,n.length),63!=n.charCodeAt(t))&&(s3(t,n.length),35!=n.charCodeAt(t))}function Gbn(n,t,e,i){A$(this),this.c=Inn(pbt,e6n,10,n.a.c.length,0,1),this.e=t,Ekn(n.a,this.c),this.f=e,this.b=i}function qbn(n){Uy(),LD(this),KY(this),this.e=n,yFn(this,n),this.g=null==n?IZn:cpn(n),this.a="",this.b=n,this.a=""}function Xbn(){this.a=new Jo,this.f=new $p(this),this.b=new Dp(this),this.i=new xp(this),this.e=new Rp(this)}function zbn(){Cy.call(this,new Bnn(orn(16))),man(2,XZn),this.b=2,this.a=new lJ(null,null,0,null),Tv(this.a,this.a)}function Vbn(n){throw Cfn(),hv(new Fy("Unexpected typeof result '"+n+"'; please report this bug to the GWT team"))}function Wbn(n,t,i){return e.Math.abs(t-n)<R9n||e.Math.abs(i-n)<R9n||(t-n>R9n?n-i>R9n:i-n>R9n)}function Qbn(n,t){var e;for(e=0;e<t.length;e++)if(n==(s3(e,t.length),t.charCodeAt(e)))return!0;return!1}function Jbn(n){var t,e;if(null==n)return!1;for(t=0,e=n.length;t<e;t++)if(!OG(n[t]))return!1;return!0}function Ybn(n,t){var e,i,r;return i=!1,e=t.q.d,t.d<n.b&&(r=cKn(t.q,n.b),t.q.d>r&&(USn(t.q,r),i=e!=t.q.d)),i}function Zbn(n,t){var i,r,c,a,o;return a=t.i,o=t.j,r=a-(i=n.f).i,c=o-i.j,e.Math.sqrt(r*r+c*c)}function nwn(n,t){var e;return(e=Kvn(n))||(!ZKt&&(ZKt=new Ps),YXn(),ttn((e=new Xm(sxn(t))).El(),n)),e}function twn(n,t){var e,i;return(e=uG(n.c.Bc(t),16))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function ewn(n,t){var e,i;for(i=0!=uRn(n.d,1),e=!0;e;)e=!1,e=t.c.mg(t.e,i),e|=PKn(n,t,i,!1),i=!i;Gon(n)}function iwn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new _On(n.c,n.a,e,c),new eBn(e,n.a,r,n.e,n.b,n.c==(ean(),BEt)))}function rwn(n){var t;return MK(n.a!=n.b),t=n.d.a[n.a],jK(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function cwn(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 awn(n){var t;if(!(n.c.c<0?n.a>=n.c.b:n.a<=n.c.b))throw hv(new Bv);return t=n.a,n.a+=n.c.c,++n.b,xwn(t)}function own(n){var t;return zsn(t=new S$(n.a),n),kfn(t,(GYn(),rmt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function uwn(n){return(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b}function swn(n){var t;return t=aN(KEt),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),rpt))&&Aq(t,(uIn(),Elt),(zYn(),Cwt)),t}function hwn(n){var t,e;for(e=new ek,t=new Ww(n);t.a<t.c.c.length;)Qon(e,f_n(uG(N3(t),27)));return e}function fwn(n){var t,e;for(e=new Ww(n.r);e.a<e.c.c.length;)if(t=uG(N3(e),10),n.n[t.p]<=0)return t;return null}function lwn(n,t,e){var i;for(i=t.a.a.ec().Kc();i.Ob();)if(NZ(n,uG(i.Pb(),60),e))return!0;return!1}function bwn(n,t,e,i){var r,c;for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),72)).n.a=t.a+(i.a-r.o.a)/2,r.n.b=t.b,t.b+=r.o.b+e}function wwn(n,t,e){var i;i=new v$n(n,t),UNn(n.r,t.ag(),i),e&&!cV(n.u)&&(i.c=new a0(n.d),Prn(t.Rf(),new Ld(i)))}function dwn(n,t){var e;return _L(n)&&_L(t)&&(e=n-t,!isNaN(e))?e:yEn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t)}function gwn(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 pwn(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 mwn(n,t){var e,i,r,c;return(c=fLn((i=t,(r=n?Kvn(n):null)&&r.Gl(),i)))==t&&(e=Kvn(n))&&e.Gl(),c}function vwn(n,t,e){var i,r;return r=n.f,n.f=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,0,r,t),e?e.nj(i):e=i),e}function kwn(n,t,e){var i,r;return r=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,3,r,t),e?e.nj(i):e=i),e}function ywn(n,t,e){var i,r;return r=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,1,r,t),e?e.nj(i):e=i),e}function Mwn(n){var t,e,i,r;if(null!=n)for(e=0;e<n.length;++e)if(t=n[e])for(uG(t.g,379),r=t.i,i=0;i<r;++i);}function Twn(n,t,e,i,r,c,a,o){var u;for(u=e;c<a;)u>=i||t<e&&o.Ne(n[t],n[u])<=0?uQ(r,c++,n[t++]):uQ(r,c++,n[u++])}function jwn(n,t,e,i,r){0!=t&&0!=i&&(1==t?r[i]=tMn(r,e,i,n[0]):1==i?r[t]=tMn(r,n,t,e[0]):G$n(n,e,r,t,i))}function Ewn(n,t,e){var i,r,c,a;for(i=e/n.gc(),r=0,a=n.Kc();a.Ob();)Rbn(c=uG(a.Pb(),186),c.f+i*r),qEn(c,t,i),++r}function Swn(n){var t,i,r;for(r=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),r=e.Math.max(r,t.g);return r}function Pwn(n){var t,e,i;for(i=new Ww(n.b);i.a<i.c.c.length;)(t=(e=uG(N3(i),219)).c.kg()?e.f:e.a)&&bzn(t,e.j)}function Cwn(){Cwn=E,ujt=new lI("DUMMY_NODE_OVER",0),sjt=new lI("DUMMY_NODE_UNDER",1),hjt=new lI("EQUAL",2)}function Iwn(){Iwn=E,lKt=new _O("PARALLEL_NODE",0),fKt=new _O("HIERARCHICAL_NODE",1),bKt=new _O("ROOT_NODE",2)}function Own(){Own=E,Oxt=new AO("INHERIT",0),Ixt=new AO("INCLUDE_CHILDREN",1),Axt=new AO("SEPARATE_CHILDREN",2)}function Awn(n,t){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),void Czn(n.n);case 2:return void Gan(n,null)}ffn(n,t)}function Lwn(n){switch(n.g){case 0:return new Xo;case 1:return new Vo;case 2:return new zo;default:return null}}function Nwn(n){switch(sB(),n.c){case 0:return nQ(),Nat;case 1:return new KM(ULn(new fS(n)));default:return new Ay(n)}}function $wn(n){switch(sB(),n.gc()){case 0:return nQ(),Nat;case 1:return new KM(n.Kc().Pb());default:return new RP(n)}}function Dwn(n){switch(n.gc()){case 0:return jat;case 1:return new Uq(WW(n.Xb(0)));default:return new t1(n)}}function xwn(n){var t,e;return n>-129&&n<128?(XG(),!(e=bot[t=n+128])&&(e=bot[t]=new Iw(n)),e):new Iw(n)}function Rwn(n){var t,e;return n>-129&&n<128?(eX(),!(e=Mot[t=n+128])&&(e=Mot[t]=new Aw(n)),e):new Aw(n)}function Kwn(n,t){n.a.c.length>0&&Lln(uG(zq(n.a,n.a.c.length-1),579),t)||kD(n.a,new r9(t))}function Fwn(n){var t,e;GB(),t=n.d.c-n.e.c,Prn((e=uG(n.g,154)).b,new Pg(t)),Prn(e.c,new Cg(t)),z8(e.i,new Ig(t))}function _wn(n){var t;return(t=new WM).a+="VerticalSegment ",QA(t,n.e),t.a+=" ",JA(t,KD(new FM,new Ww(n.k))),t.a}function Bwn(n,t){var e,i;for(e=0,i=Dgn(n,t).Kc();i.Ob();)e+=null!=oIn(uG(i.Pb(),12),(GYn(),lmt))?1:0;return e}function Hwn(n,t,e){var i,r,c;for(i=0,c=Fkn(n,0);c.b!=c.d.c&&!((r=uM(pK(I6(c))))>e);)r>=t&&++i;return i}function Uwn(n,t){WW(n);try{return n._b(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Gwn(n,t){WW(n);try{return n.Hc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function qwn(n,t){WW(n);try{return n.Mc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Xwn(n,t){WW(n);try{return n.xc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function zwn(n,t){WW(n);try{return n.Bc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function Vwn(n,t){switch(t.g){case 2:case 1:return Dgn(n,t);case 3:case 4:return Spn(Dgn(n,t))}return hZ(),hZ(),zot}function Wwn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (name: ",VA(t,n.zb),t.a+=")",t.a)}function Qwn(n){var t;return(t=uG(ain(n.c.c,""),233))||(t=new I2(UT(HT(new du,""),"Other")),Akn(n.c.c,"",t)),t}function Jwn(n,t,e){var i,r;return r=n.sb,n.sb=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),e}function Ywn(n,t,e){var i,r;return r=n.r,n.r=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,8,r,n.r),e?e.nj(i):e=i),e}function Zwn(n,t,e){var i;return i=new Ken(n.e,4,13,t.c||(YYn(),N_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function ndn(n,t,e){var i;return i=new Ken(n.e,3,13,null,t.c||(YYn(),N_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function tdn(n,t){var e,i;return!(i=(e=uG(t,691)).el())&&e.fl(i=F$(t,90)?new CA(n,uG(t,29)):new g4(n,uG(t,156))),i}function edn(n,t,e){var i;n._i(n.i+1),i=n.Zi(t,e),t!=n.i&&qGn(n.g,t,n.g,t+1,n.i-t),uQ(n.g,t,i),++n.i,n.Mi(t,e),n.Ni()}function idn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?JA(n.a,n.b):n.a=new lx(n.d),L4(n.a,t.a,t.d.length,e)),n}function rdn(n,t){var e;n.c=t,n.a=Jpn(t),n.a<54&&(n.f=(e=t.d>1?C4(t.a[0],t.a[1]):C4(t.a[0],0),W4(t.e>0?e:Men(e))))}function cdn(n,t){var e;return e=new un,n.a.Bd(e)?(UD(),new Xy(tJ(ven(n,e.a,t)))):(GQ(n),UD(),UD(),sut)}function adn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Oe),WNn(e,t))}function odn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Ae),WNn(e,t))}function udn(n,t){return RA(n)?m_(n,t):FA(n)?p_(n,t):KA(n)?(tJ(n),xA(n)===xA(t)):Cz(n)?n.Fb(t):xX(n)?SL(n,t):j3(n,t)}function sdn(n,t,e){if(t<0)zLn(n,e);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ek(n,n.hi(),t)}}function hdn(n,t,e){if(n<0||t>e)throw hv(new dM(o2n+n+s2n+t+", size: "+e));if(n>t)throw hv(new vM(o2n+n+u2n+t))}function fdn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (source: ",VA(t,n.d),t.a+=")",t.a)}function ldn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function bdn(n){var t,e,i,r;for(JYn(),i=0,r=(e=Nkn()).length;i<r;++i)if(-1!=Ten((t=e[i]).a,n,0))return t;return sht}function wdn(n,t){var e,i,r;if(t.ej(n.a),null!=(r=uG(Lsn(n.a,8),2035)))for(e=0,i=r.length;e<i;++e)null.Um()}function ddn(n,t){var e;e=!!(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,2,e,t))}function gdn(n,t){var e;e=!!(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function pdn(n,t){var e;e=!!(256&n.Bb),t?n.Bb|=256:n.Bb&=-257,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,8,e,t))}function mdn(n,t){var e;e=!!(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,3,e,t))}function vdn(n,t){var e;e=!!(512&n.Bb),t?n.Bb|=512:n.Bb&=-513,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,9,e,t))}function kdn(n,t,e){var i,r;return r=n.a,n.a=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,5,r,n.a),e?kPn(e,i):e=i),e}function ydn(n,t){var e;return-1==n.b&&n.a&&(e=n.a.pk(),n.b=e?n.c.Hh(n.a.Lj(),e):emn(n.c.Dh(),n.a)),n.c.yh(n.b,t)}function Mdn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),29),xA(t)===xA(e))return!0;return!1}function Tdn(n){var t;return n.k==(zIn(),lbt)&&((t=uG(oIn(n,(GYn(),Fpt)),64))==(KQn(),yRt)||t==KRt)}function jdn(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(NP(t.a,0)?c7(t)/W4(t.a):0))}function Edn(n,t){this.e=t,this.a=dhn(n),this.a<54?this.f=W4(n):this.c=(cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n))))}function Sdn(n,t,e,i,r,c){this.e=new Zm,this.f=(can(),Qjt),kD(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Pdn(n,t,i){n.n=Jq(nUt,[zZn,E0n],[376,28],14,[i,t0(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function Cdn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function Idn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),142),xA(t)===xA(e))return!0;return!1}function Odn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(QXn(Len(n,r),""),29))?hxn(n,i,t,e):null}function Adn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(QXn(Len(n,r),""),29))?fxn(n,i,t,e):null}function Ldn(n,t){var e;if(null==(e=dcn(n.i,t)))throw hv(new SM("Node did not exist in input."));return Qun(t,e),null}function Ndn(n,t){var e;if(F$(e=EKn(n,t),331))return uG(e,35);throw hv(new vM(Gtt+t+"' is not a valid attribute"))}function $dn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));if(n.Si()&&n.Hc(e))throw hv(new vM(Xet));n.Gi(t,e)}function Ddn(n,t){t.Ug("Sort end labels",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new we),new de),new ge),t.Vg()}function xdn(){xdn=E,ZDt=new PO(Y2n,0),YDt=new PO(V2n,1),JDt=new PO(z2n,2),QDt=new PO(c3n,3),nxt=new PO("UP",4)}function Rdn(){Rdn=E,HAt=new fO("P1_STRUCTURE",0),UAt=new fO("P2_PROCESSING_ORDER",1),GAt=new fO("P3_EXECUTION",2)}function Kdn(){Kdn=E,qCt=Lvn(Lvn(gP(Lvn(Lvn(gP(Aq(new wJ,(Cjn(),VSt),(OHn(),fPt)),WSt),oPt),sPt),QSt),iPt),hPt)}function Fdn(n){switch(uG(oIn(n,(GYn(),Xpt)),311).g){case 1:kfn(n,Xpt,(Zen(),dpt));break;case 2:kfn(n,Xpt,(Zen(),ppt))}}function _dn(n){switch(n){case 0:return new Fk;case 1:return new Rk;case 2:return new Kk;default:throw hv(new Dv)}}function Bdn(n){switch(n.g){case 2:return YDt;case 1:return JDt;case 4:return QDt;case 3:return nxt;default:return ZDt}}function Hdn(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new gY(t.d,0,t.a,t.b);default:return null}}function Udn(n){switch(n.g){case 1:return _Rt;case 2:return yRt;case 3:return kRt;case 4:return KRt;default:return FRt}}function Gdn(n){switch(n.g){case 1:return KRt;case 2:return _Rt;case 3:return yRt;case 4:return kRt;default:return FRt}}function qdn(n){switch(n.g){case 1:return kRt;case 2:return KRt;case 3:return _Rt;case 4:return yRt;default:return FRt}}function Xdn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n;case 2:return n.k}return ajn(n,t,e,i)}function zdn(n,t,e){var i,r;return n.Pj()?(r=n.Qj(),i=HNn(n,t,e),n.Jj(n.Ij(7,xwn(e),i,t,r)),i):HNn(n,t,e)}function Vdn(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.ld(),S7(n,i=((e=t.Bi())&vZn)%n.d.length,Txn(n,i,e,r)))}function Wdn(n,t){var e;e=!!(n.Bb&w1n),t?n.Bb|=w1n:n.Bb&=-1025,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,10,e,t))}function Qdn(n,t){var e;e=!!(n.Bb&j0n),t?n.Bb|=j0n:n.Bb&=-4097,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,12,e,t))}function Jdn(n,t){var e;e=!!(n.Bb&hrt),t?n.Bb|=hrt:n.Bb&=-8193,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,15,e,t))}function Ydn(n,t){var e;e=!!(n.Bb&frt),t?n.Bb|=frt:n.Bb&=-2049,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,11,e,t))}function Zdn(n){var t;n.g&&(CFn((t=n.c.kg()?n.f:n.a).a,n.o,!0),CFn(t.a,n.o,!1),kfn(n.o,(jYn(),JMt),($Pn(),rRt)))}function ngn(n){var t;if(!n.a)throw hv(new kM("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,iZ(n,t),eZ(n,t)}function tgn(n,t){var e;if(null==(e=cQ(n.k,t)))throw hv(new SM("Port did not exist in input."));return Qun(t,e),null}function egn(n){var t,e;for(e=bxn(Hrn(n)).Kc();e.Ob();)if(GUn(n,t=mK(e.Pb())))return h8((yP(),r_t),t);return null}function ign(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=uG(e.Pb(),218)).f&&n.b[t.c]<-1e-10)return t;return null}function rgn(n){var t,e;for(e=jQ(new WM,91),t=!0;n.Ob();)t||(e.a+=TZn),t=!1,QA(e,n.Pb());return(e.a+="]",e).a}function cgn(n){var t,e,i;for(t=new Zm,i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),602),Ohn(t,uG(e.Cf(),16));return t}function agn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),men(n.b.b,e.b),LZ(uG(e.a,194),uG(e.b,86))}function ogn(n,t){var e;return 0!=(e=ugn(n.b.c,t.b.c))||0!=(e=ugn(n.a.a,t.a.a))?e:ugn(n.a.b,t.a.b)}function ugn(n,t){return n<t?-1:n>t?1:n==t?0==n?ugn(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function sgn(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,uQ(n.a,n.c,null),t)}function hgn(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 fgn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=0,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&++c;return c}function lgn(n,t,e){var i,r;for(r=F$(t,102)&&uG(t,19).Bb&P0n?new yL(t,n):new Zsn(t,n),i=0;i<e;++i)_yn(r);return r}function bgn(n,t,e){var i;if(n.c)JCn(n.c,t,e);else for(i=new Ww(n.b);i.a<i.c.c.length;)bgn(uG(N3(i),163),t,e)}function wgn(n,t,e){var i,r;return i=uG(t.of(n.a),34),r=uG(e.of(n.a),34),null!=i&&null!=r?Dun(i,r):null!=i?-1:null!=r?1:0}function dgn(n,t){var e,i,r;for(tJ(t),e=!1,i=new Ww(n);i.a<i.c.c.length;)r=N3(i),t.Hc(r)&&(tW(i),e=!0);return e}function ggn(n){var t,e,i,r;return Mon(e=new nB(t=uG(Mj((r=(i=n.Rm).f)==Oat?i:r),9),uG(MF(t,t.length),9),0),n),e}function pgn(n){var t;return(t=uG(oIn(n,(jYn(),Byt)),88))==(xdn(),ZDt)?uM(pK(oIn(n,dyt)))>=1?YDt:QDt:t}function mgn(n){switch(uG(oIn(n,(jYn(),Vyt)),223).g){case 1:return new ic;case 3:return new uc;default:return new ec}}function vgn(n){if(n.c)vgn(n.c);else if(n.d)throw hv(new kM("Stream already terminated, can't be modified or used"))}function kgn(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,++n.b.g):++n.d,i}function ygn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),10),yhn(e,uG(zq(t,i.p),16)))return i;return null}function Mgn(n,t,e){var i;return i=0,t&&(fN(n.a)?i+=t.f.a/2:i+=t.f.b/2),e&&(fN(n.a)?i+=e.f.a/2:i+=e.f.b/2),i}function Tgn(n,t,e){var i;!(i=e)&&(i=xG(new fy,0)),i.Ug(K4n,2),zyn(n.b,t,i.eh(1)),Xzn(n,t,i.eh(1)),hJn(t,i.eh(1)),i.Vg()}function jgn(n,t,e){var i;return gj(),Scn(i=new ns,t),pcn(i,e),n&&ttn((!n.a&&(n.a=new MD(eFt,n,5)),n.a),i),i}function Egn(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (identifier: ",VA(t,n.k),t.a+=")",t.a)}function Sgn(n,t){var e;e=!!(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Pgn(n,t){var e;e=!!(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Cgn(n,t){var e;e=!!(n.Bb&VZn),t?n.Bb|=VZn:n.Bb&=-16385,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,16,e,t))}function Ign(n,t){var e;e=!!(n.Bb&P0n),t?n.Bb|=P0n:n.Bb&=-65537,4&n.Db&&!(1&n.Db)&&Msn(n,new j9(n,1,20,e,t))}function Ogn(n){var t;return t=Inn(JHt,N1n,28,2,15,1),n-=P0n,t[0]=(n>>10)+C0n&D1n,t[1]=56320+(1023&n)&D1n,mvn(t,0,t.length)}function Agn(n){var t;return(t=YIn(n))>34028234663852886e22?M0n:t<-34028234663852886e22?T0n:t}function Lgn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n+t)&&e<d0n?e:Esn(Mhn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Ngn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n*t)&&e<d0n?e:Esn(Ozn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function $gn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n-t)&&e<d0n?e:Esn(Thn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function Dgn(n,t){var e;return n.i||qLn(n),(e=uG(AJ(n.g,t),42))?new C2(n.j,uG(e.a,17).a,uG(e.b,17).a):(hZ(),hZ(),zot)}function xgn(n){return Mbn(),qx(),!!(upn(uG(n.a,86).j,uG(n.b,88))||0!=uG(n.a,86).d.e&&upn(uG(n.a,86).j,uG(n.b,88)))}function Rgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Kgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Fgn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t))}function _gn(){_gn=E,fxt=new IO(Y2n,0),sxt=new IO("POLYLINE",1),uxt=new IO("ORTHOGONAL",2),hxt=new IO("SPLINES",3)}function Bgn(){Bgn=E,IOt=new aO("ASPECT_RATIO_DRIVEN",0),OOt=new aO("MAX_SCALE_DRIVEN",1),COt=new aO("AREA_DRIVEN",2)}function Hgn(n,t,e){try{Vfn(n,t,e)}catch(i){throw F$(i=Ehn(i),606)?hv(new x9(i)):hv(i)}return t}function Ugn(n){var t,e;for(t=0,e=n.length;t<e;t++)if(null==n[t])throw hv(new MM("at index "+t));return new IM(n)}function Ggn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).b);return WW(t),new iN(t)}function qgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).e);return WW(t),new iN(t)}function Xgn(n){var t,e;for(t=new Zm,e=new Ww(n.j);e.a<e.c.c.length;)kD(t,uG(N3(e),12).g);return WW(t),new iN(t)}function zgn(n,t){var e,i,r;for(r=new Ym,i=t.vc().Kc();i.Ob();)vJ(r,(e=uG(i.Pb(),44)).ld(),Tsn(n,uG(e.md(),15)));return r}function Vgn(n){var t,e;for(e=TDn(Hrn(K0(n))).Kc();e.Ob();)if(GUn(n,t=mK(e.Pb())))return f8((mP(),b_t),t);return null}function Wgn(n,t){var e,i;for(i=0,e=uG(t.Kb(n),20).Kc();e.Ob();)oM(gK(oIn(uG(e.Pb(),18),(GYn(),pmt))))||++i;return i}function Qgn(n){var t,e,i;for(t=new GF(n.Rd().gc()),i=0,e=jtn(n.Rd().Kc());e.Ob();)M2(t,e.Pb(),xwn(i++));return vOn(t.a)}function Jgn(n,t,e,i){var r,c;return tJ(i),tJ(e),null==(c=null==(r=n.xc(t))?e:IS(uG(r,15),uG(e,16)))?n.Bc(t):n.zc(t,c),c}function Ygn(n,t,e,i){var r,c,a;for(r=t+1;r<e;++r)for(c=r;c>t&&i.Ne(n[c-1],n[c])>0;--c)a=n[c],uQ(n,c,n[c-1]),uQ(n,c-1,a)}function Zgn(n,t){var e,i,r,c,a;if(e=t.f,Akn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;c<a;++c)i=r[c],Akn(n.c.e,i,t)}function npn(n,t){var e,i;for(e=Fkn(n,0);e.b!=e.d.c;){if((i=sM(pK(I6(e))))==t)return;if(i>t){F4(e);break}}lW(e,t)}function tpn(n,t){var i,r;r=uM(pK(Omn(z4(t),(jYn(),dTt)))),TEn(t,i=e.Math.max(0,r/2-.5),1),kD(n,new xC(t,i))}function epn(n,t,e){e.Ug("Straight Line Edge Routing",1),e.dh(t,l7n),DXn(n,uG(zDn(t,(SK(),zCt)),27)),e.dh(t,w7n)}function ipn(n,t){0==n.n.c.length&&kD(n.n,new c0(n.s,n.t,n.i)),kD(n.b,t),zMn(uG(zq(n.n,n.n.c.length-1),209),t),nqn(n,t)}function rpn(n){var t;this.a=new nB(t=uG(n.e&&n.e(),9),uG(MF(t,t.length),9),0),this.b=Inn(dat,EZn,1,this.a.a.length,5,1)}function cpn(n){return Array.isArray(n)&&n.Tm===j?Ij(Tbn(n))+"@"+(Hon(n)>>>0).toString(16):n.toString()}function apn(n,t){return n.h==b0n&&0==n.m&&0==n.l?(t&&(Qat=p$(0,0,0)),LL((tin(),Zat))):(t&&(Qat=p$(n.l,n.m,n.h)),p$(0,0,0))}function opn(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 upn(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 spn(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 Xdn(n,t,e,i)}function hpn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw hv(new vM("Node "+t+" not part of edge "+n))}function fpn(n,t){var e;if(F$(e=EKn(n.Dh(),t),102))return uG(e,19);throw hv(new vM(Gtt+t+"' is not a valid reference"))}function lpn(n,t,e,i){if(t<0)lRn(n,e,i);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ck(n,n.hi(),t,i)}}function bpn(n){var t;if(n.b){if(bpn(n.b),n.b.d!=n.c)throw hv(new Fv)}else n.d.dc()&&(t=uG(n.f.c.xc(n.e),16))&&(n.d=t)}function wpn(n){var t,e;for(VK(),t=n.o.b,e=uG(uG(Y9(n.r,(KQn(),KRt)),21),87).Kc();e.Ob();)uG(e.Pb(),117).e.b+=t}function dpn(n){var t,e,i;for(this.a=new XL,i=new Ww(n);i.a<i.c.c.length;)e=uG(N3(i),16),jon(t=new hX,e),FV(this.a,t)}function gpn(n,t){var e,i,r;for(r=(i=qBn(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 ppn(n,t){var e,i,r,c;for(EK(),r=t,Ntn(i=Jtn(n),0,i.length,r),e=0;e<i.length;e++)e!=(c=nEn(n,i[e],e))&&zdn(n,e,c)}function mpn(n,t,e){var i,r;for(i=0,r=n.length;i<r;i++)if(mfn((s3(i,n.length),n.charCodeAt(i)),t,e))return!0;return!1}function vpn(n,t){var e,i;for(i=n.e.a.ec().Kc();i.Ob();)if(_In(t,(e=uG(i.Pb(),272)).d)||vLn(t,e.d))return!0;return!1}function kpn(n,t,e,i,r){var c,a,o;for(a=r;t.b!=t.c;)c=uG(xV(t),10),o=uG(Dgn(c,i).Xb(0),12),n.d[o.p]=a++,mv(e.c,o);return a}function ypn(n,t){var e,i,r,c,a,o;for(i=0,e=0,a=0,o=(c=t).length;a<o;++a)(r=c[a])>0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Mpn(n){var t,e,i;return i=gCn(n),!pE(n.c)&&(nrn(i,"knownLayouters",e=new Ib),t=new jm(e),z8(n.c,t)),i}function Tpn(n){var t,e,i;for((i=new zM).a+="[",t=0,e=n.gc();t<e;)VA(i,ox(n.Vi(t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a}function jpn(n){return null==n.e?n:(!n.c&&(n.c=new Z_n(!!(256&n.f),n.i,n.a,n.d,!!(16&n.f),n.j,n.g,null)),n.c)}function Epn(n){return n.k==(zIn(),dbt)&&o9(new fX(null,new LW(new Fz(ix(Xgn(n).a.Kc(),new h)))),new qr)}function Spn(n){return F$(n,307)?Z9(uG(n,307)):F$(n,441)?uG(n,441).a:F$(n,59)?new Ly(n):new XE(n)}function Ppn(n){var t;return null==n||(t=n.length)>0&&(s3(t-1,n.length),58==n.charCodeAt(t-1))&&!mpn(n,n_t,t_t)}function Cpn(n,t){var e;return xA(n)===xA(t)||!!F$(t,92)&&(e=uG(t,92),n.e==e.e&&n.d==e.d&&d8(n,e.a))}function Ipn(n){switch(KQn(),n.g){case 4:return yRt;case 1:return kRt;case 3:return KRt;case 2:return _Rt;default:return FRt}}function Opn(n){var t,e;if(n.b)return n.b;for(e=Nut?null:n.d;e;){if(t=Nut?null:e.b)return t;e=Nut?null:e.d}return pS(),Eut}function Apn(n){var t,e;for(e=uM(pK(n.a.of((XYn(),LDt)))),t=new Ww(n.a.Sf());t.a<t.c.c.length;)pJn(n,uG(N3(t),695),e)}function Lpn(n){var t,e;for(null==n.j&&(n.j=(EZ(),lSn(_at.me(n)))),t=0,e=n.j.length;t<e;++t)String.fromCharCode(10)}function Npn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),42),kD(n.b.b,uG(e.b,86)),t4(uG(e.a,194),uG(e.b,86))}function $pn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)GX(r,0,new bQ(n.a));a2(t,uG(zq(r,r.c.length-e),30)),n.b[t.p]=e}function Dpn(n,t,e,i,r){n2(),RKn(xS(DS($S(RS(new uk,0),r.d.e-n),t),r.d)),RKn(xS(DS($S(RS(new uk,0),e-r.a.e),r.a),i))}function xpn(n,t){var e;return n.d?PV(n.b,t)?uG(cQ(n.b,t),47):(e=t.dg(),vJ(n.b,t,e),e):t.dg()}function Rpn(n){var t=n.e;function e(n){return n&&0!=n.length?"\t"+n.join("\n\t"):""}return t&&(t.stack||e(n[A1n]))}function Kpn(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 _sn(n,t)}function Fpn(n){switch(n.g){case 0:return new Ao;case 1:return new $o;default:throw hv(new vM(v6n+(null!=n.f?n.f:""+n.g)))}}function _pn(n){switch(n.g){case 0:return new Lo;case 1:return new No;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Bpn(n){switch(n.g){case 1:return new jo;case 2:return new NR;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function Hpn(n){switch(n.g){case 0:return new hy;case 1:return new _k;default:throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}}function Upn(){var n,t,i;aCn(),i=gut+++Date.now(),n=t0(e.Math.floor(i*z0n))&W0n,t=t0(i-n*V0n),this.a=1502^n,this.b=t^X0n}function Gpn(){Gpn=E,Lmt=new hI(q4n,0),Cmt=new hI("FIRST",1),Imt=new hI(M6n,2),Omt=new hI("LAST",3),Amt=new hI(T6n,4)}function qpn(){qpn=E,TKt=new HO(k9n,0),kKt=new HO("GROUP_DEC",1),MKt=new HO("GROUP_MIXED",2),yKt=new HO("GROUP_INC",3)}function Xpn(n,t){var e,i;t&&(e=$cn(t,"x"),Tcn(new dm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new pm(n).a,(tJ(i),i)))}function zpn(n,t){var e,i;t&&(e=$cn(t,"x"),mcn(new vm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new km(n).a,(tJ(i),i)))}function Vpn(n,t){var e,i,r;for(i=new R7(t.gc()),e=t.Kc();e.Ob();)(r=oUn(n,uG(e.Pb(),58)))&&mv(i.c,r);return i}function Wpn(n,t,e){var i,r;for(r=n.Kc();r.Ob();)if(i=r.Pb(),xA(t)===xA(i)||null!=t&&udn(t,i))return e&&r.Qb(),!0;return!1}function Qpn(n){var t,e,i;return(e=n.jh())?F$(t=n.Eh(),167)&&null!=(i=Qpn(uG(t,167)))?i+"."+e:e:null}function Jpn(n){var t,e;return 0==n.e?0:(t=n.d<<5,e=n.a[n.d-1],n.e<0&&_un(n)==n.d-1&&(--e,e|=0),t-=GNn(e))}function Ypn(n){var t,e,i;return n<Fot.length?Fot[n]:(t=31&n,(i=Inn(YHt,W1n,28,1+(e=n>>5),15,1))[e]=1<<t,new VV(1,e+1,i))}function Zpn(n,t){var e;if(t){for(e=0;e<n.i;++e)if(uG(n.g[e],378).mj(t))return!1;return ttn(n,t)}return!1}function nmn(n,t,e){var i,r;if(++n.j,e.dc())return!1;for(r=e.Kc();r.Ob();)i=r.Pb(),n.qj(t,n.Zi(t,i)),++t;return!0}function tmn(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 emn(n,t){var e,i,r;if(null==n.i&&eqn(n),e=n.i,-1!=(i=t.Lj()))for(r=e.length;i<r;++i)if(e[i]==t)return i;return-1}function imn(n){var t,e,i,r;for(e=uG(n.g,689),i=n.i-1;i>=0;--i)for(t=e[i],r=0;r<i;++r)if(jGn(n,t,e[r])){gjn(n,i);break}}function rmn(n){var t,e,i;for(t=new Ib,i=new Gw(n.b.Kc());i.b.Ob();)e=xOn(uG(i.b.Pb(),701)),wW(t,t.a.length,e);return t.a}function cmn(n){var t;return!n.c&&(n.c=new Ln),f$(n.d,new $n),v_n(n),t=i_n(n),kS(new fX(null,new h3(n.d,16)),new Nd(n)),t}function amn(n,t){t.Ug("End label post-processing",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new ae),new oe),new ue),t.Vg()}function omn(n){lmn(),this.c=n7(Uhn(cT(rNt,1),EZn,845,0,[VTt])),this.b=new Ym,this.a=n,vJ(this.b,WTt,1),Prn(QTt,new Xp(this))}function umn(n,t,e){lcn(),Ak.call(this),this.a=Jq(Pst,[zZn,X2n],[603,217],0,[$st,Nst],2),this.c=new cN,this.g=n,this.f=t,this.d=e}function smn(n,t){this.n=Jq(nUt,[zZn,E0n],[376,28],14,[t,t0(e.Math.ceil(n/32))],2),this.o=n,this.p=t,this.j=n-1>>1,this.k=t-1>>1}function hmn(n){Stn(),uG(n.of((XYn(),q$t)),181).Hc((aUn(),oKt))&&(uG(n.of(bDt),181).Fc((eNn(),pRt)),uG(n.of(q$t),181).Mc(oKt))}function fmn(n){var t,e;t=n.d==(vAn(),Bdt),e=dPn(n),kfn(n.a,(jYn(),byt),t&&!e||!t&&e?(nMn(),LNt):(nMn(),ANt))}function lmn(){lmn=E,ZS(),jYn(),WTt=ETt,QTt=n7(Uhn(cT(lNt,1),m9n,149,0,[wTt,dTt,pTt,mTt,yTt,MTt,TTt,jTt,PTt,ITt,gTt,vTt,STt]))}function bmn(n,t){var e;return(e=uG(l8(n,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Qc(Nq(e.gc()))}function wmn(n,t){var e,i;if((i=new od(n.a.ad(t,!0))).a.gc()<=1)throw hv(new Rv);return(e=i.a.ec().Kc()).Pb(),uG(e.Pb(),40)}function dmn(n,t,e){var i;return i=uM(n.p[t.i.p])+uM(n.d[t.i.p])+t.n.b+t.a.b,uM(n.p[e.i.p])+uM(n.d[e.i.p])+e.n.b+e.a.b-i}function gmn(n,t){return n.i>0&&(t.length<n.i&&(t=Acn(Tbn(t).c,n.i)),qGn(n.g,0,t,0,n.i)),t.length>n.i&&uQ(t,n.i,null),t}function pmn(n){var t;return 64&n.Db?Wwn(n):((t=new fx(Wwn(n))).a+=" (instanceClassName: ",VA(t,n.D),t.a+=")",t.a)}function mmn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)s3(e,n.length),(t=n.charCodeAt(e))<64&&(r=S3(r,Nz(1,t)));return r}function vmn(n,t,e){var i,r;for(i=E3(e,L0n),r=0;0!=dwn(i,0)&&r<t;r++)i=Lgn(i,E3(n[r],L0n)),n[r]=pz(i),i=$z(i,32);return pz(i)}function kmn(n,t){var e,i,r,c;for(c=VKn(n.e.Dh(),t),e=uG(n.g,124),r=0;r<n.i;++r)if(i=e[r],c.am(i.Lk()))return!1;return!0}function ymn(n,t){var e;return n.f>0&&(n._j(),-1!=Txn(n,((e=null==t?0:Hon(t))&vZn)%n.d.length,e,t))}function Mmn(n,t){var i,r;n.a=Lgn(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 Tmn(n,t){switch(t){case 3:return void vcn(n,0);case 4:return void kcn(n,0);case 5:return void ycn(n,0);case 6:return void Mcn(n,0)}Awn(n,t)}function jmn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),ybt));case 2:return YU(n.j,(Lun(),Tbt));default:return hZ(),hZ(),zot}}function Emn(n){var t;switch(ZW(),(t=n.Pc()).length){case 0:return jat;case 1:return new Uq(WW(t[0]));default:return new t1(Ugn(t))}}function Smn(n,t){n.Xj();try{n.d.bd(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function Pmn(){Pmn=E,lBt=new Is,cBt=new Os,aBt=new As,oBt=new Ls,uBt=new Ns,sBt=new $s,hBt=new Ds,fBt=new xs,bBt=new Rs}function Cmn(n,t){var e,i;return wL(),i=null,t==(e=bF((qy(),qy(),Hat)))&&(i=uG(U1(Bat,n),624)),i||(i=new JW(n),t==e&&r2(Bat,n,i)),i}function Imn(n){return Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203)}function Omn(n,t){var e,i;return i=null,vR(n,(jYn(),kTt))&&(e=uG(oIn(n,kTt),96)).pf(t)&&(i=e.of(t)),null==i&&(i=oIn(HQ(n),t)),i}function Amn(n,t){var e,i,r;return!!F$(t,44)&&(i=(e=uG(t,44)).ld(),xQ(r=Xwn(n.Rc(),i),e.md())&&(null!=r||n.Rc()._b(i)))}function Lmn(n,t){var e,i;return n.f>0&&(n._j(),e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?e.md():null}function Nmn(n,t,e){var i,r,c;return n.Pj()?(i=n.i,c=n.Qj(),edn(n,i,t),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):edn(n,n.i,t),e}function $mn(n,t,e){var i,r;return i=new Ken(n.e,4,10,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function Dmn(n,t,e){var i,r;return i=new Ken(n.e,3,10,null,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function xmn(n){var t;return VK(),t=new eN(uG(n.e.of((XYn(),U$t)),8)),n.B.Hc((aUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function Rmn(n){var t,e;return cHn(),e=pz(n),0!=(t=pz(Dz(n,32)))?new x3(e,t):e>10||e<0?new Z5(1,e):Rot[e]}function Kmn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n%t)&&e<d0n?e:Esn((Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!0),Qat))}function Fmn(n,t){var e;tQn(t),(e=uG(oIn(n,(jYn(),zyt)),283))&&kfn(n,zyt,wjn(e)),Xx(n.c),Xx(n.f),ynn(n.d),ynn(uG(oIn(n,SMt),214))}function _mn(n){var t,e,i;for(f$(e=JAn(n),Cbt),(i=n.d).c.length=0,t=new Ww(e);t.a<t.c.c.length;)Ohn(i,uG(N3(t),466).b)}function Bmn(n){var t;0!=n.c&&(1==(t=uG(zq(n.a,n.b),294)).b?(++n.b,n.b<n.a.c.length&&Pw(uG(zq(n.a,n.b),294))):--t.b,--n.c)}function Hmn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(Xgn(t).a.Kc(),new h))),18).d.i).k==(zIn(),wbt)&&kD(n.e,t)}while(t.k==(zIn(),wbt))}function Umn(n){this.e=Inn(YHt,W1n,28,n.length,15,1),this.c=Inn(ZHt,B2n,28,n.length,16,1),this.b=Inn(ZHt,B2n,28,n.length,16,1),this.f=0}function Gmn(n){var t,e;for(n.j=Inn(eUt,I0n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.j[t.p]=t.o.b/n.i}function qmn(n,t){var e,i,r;for(r=t.b.b,n.a=new lS,n.b=Inn(YHt,W1n,28,r,15,1),e=0,i=Fkn(t.b,0);i.b!=i.d.c;)uG(I6(i),40).g=e++}function Xmn(n,t,e){var i,r,c,a;for(c=t-n.e,a=e-n.f,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),i.s+c,i.t+a);n.e=t,n.f=e}function zmn(n,t){var e,i;for(i=t.length,e=0;e<i;e+=2)HFn(n,(s3(e,t.length),t.charCodeAt(e)),(s3(e+1,t.length),t.charCodeAt(e+1)))}function Vmn(n,t){t.Ug("Min Size Postprocessing",1),Myn(n,(lBn(),POt),e.Math.max(uM(pK(zDn(n,POt))),uM(pK(zDn(n,EOt))))),t.Vg()}function Wmn(){Wmn=E,qRt=new CN(15),GRt=new _N((XYn(),W$t),qRt),zRt=new _N(DDt,15),XRt=new _N(kDt,xwn(0)),URt=new _N(c$t,r4n)}function Qmn(){Qmn=E,QRt=new KO("PORTS",0),JRt=new KO("PORT_LABELS",1),WRt=new KO("NODE_LABELS",2),VRt=new KO("MINIMUM_SIZE",3)}function Jmn(){Jmn=E,oOt=new rO("P1_WIDTH_APPROXIMATION",0),uOt=new rO("P2_PACKING",1),sOt=new rO("P3_WHITESPACE_ELIMINATION",2)}function Ymn(n){if(null==n.b){for(;n.a.Ob();)if(n.b=n.a.Pb(),!uG(n.b,54).Jh())return!0;return n.b=null,!1}return!0}function Zmn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i>=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function nvn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function tvn(n,t,e,i){var r,c,a;return r=!1,nWn(n.f,e,i)&&(hkn(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 evn(n,t,e){var i,r,c;for(r=uG(cQ(n.b,e),183),i=0,c=new Ww(t.j);c.a<c.c.c.length;)r[uG(N3(c),113).d.p]&&++i;return i}function ivn(n,t,e){var i,r;i=uG(U1(jHt,t),122),r=uG(U1(EHt,t),122),e?(r2(jHt,n,i),r2(EHt,n,r)):(r2(EHt,n,i),r2(jHt,n,r))}function rvn(n,t){var e,i,r,c;return e=t>>5,t&=31,r=n.d+e+(0==t?0:1),kCn(i=Inn(YHt,W1n,28,r,15,1),n.a,e,t),K4(c=new VV(n.e,r,i)),c}function cvn(n,t){var e;for(e=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(e);)if(uG(N9(e),18).d.i.c==t)return!1;return!0}function avn(n,t,i){var r,c,a,o,u;return o=n.k,u=t.k,c=pK(Omn(n,r=i[o.g][u.g])),a=pK(Omn(t,r)),e.Math.max((tJ(c),c),(tJ(a),a))}function ovn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function uvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))>0}function svn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))<0}function hvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:n<t?-1:n>t?1:KL(isNaN(n),isNaN(t)))<=0}function fvn(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 lvn(n){var t,e;return null!=(t=uG(Lsn(n.a,4),129))?(qGn(t,0,e=Inn(xFt,Uit,424,t.length,0,1),0,t.length),e):DFt}function bvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function wvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function dvn(n){var t,e,i,r;if(null==n)return null;for(r=new Zm,e=0,i=(t=Fln(n)).length;e<i;++e)kD(r,yXn(t[e],!0));return r}function gvn(n,t){var e,i,r;if(n.c)vcn(n.c,t);else for(e=t-jX(n),r=new Ww(n.a);r.a<r.c.c.length;)gvn(i=uG(N3(r),163),jX(i)+e)}function pvn(n,t){var e,i,r;if(n.c)kcn(n.c,t);else for(e=t-EX(n),r=new Ww(n.d);r.a<r.c.c.length;)pvn(i=uG(N3(r),163),EX(i)+e)}function mvn(n,t,i){var r,c,a,o;for(Knn(t,a=t+i,n.length),o="",c=t;c<a;)r=e.Math.min(c+1e4,a),o+=mJ(n.slice(c,r)),c=r;return o}function vvn(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 kvn(){kvn=E,sgt=new ZC(x6n,0),ugt=new ZC(R6n,1),fgt=new ZC(D6n,2),lgt=new ZC(X4n,3),hgt=new ZC("GREEDY_MODEL_ORDER",4)}function yvn(){yvn=E,Fjt=new gI(q4n,0),Kjt=new gI("NODES_AND_EDGES",1),_jt=new gI("PREFER_EDGES",2),Bjt=new gI("PREFER_NODES",3)}function Mvn(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&&(this.g=mX(this.c,this.b,this.a))}function Tvn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Cfn(),Wat)[typeof e];return r?r(e):Vbn(typeof e)}function jvn(n){if(!(Iet in n.a))throw hv(new SM("Every element must have an id."));return fNn(v0(n,Iet))}function Evn(n){var t,e;for(e=WOn(n),t=null;2==n.c;)EYn(n),t||(QYn(),QYn(),vzn(t=new QN(2),e),e=t),e.Jm(WOn(n));return e}function Svn(n,t){var e,i;return n._j(),(e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?(uan(n,e),e.md()):null}function Pvn(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*Hln(n.a,t.a,n.d)}function Cvn(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 Ivn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw hv(new vM("Input edge is not connected to the input port."))}function Ovn(n){if(Bvn(Fnt,n))return qx(),eot;if(Bvn(_nt,n))return qx(),tot;throw hv(new vM("Expecting true or false"))}function Avn(n){switch(typeof n){case pZn:return pln(n);case gZn:return OL(n);case dZn:return XK(n);default:return null==n?0:xx(n)}}function Lvn(n,t){if(n.a<0)throw hv(new kM("Did not call before(...) or after(...) before calling add(...)."));return hR(n,n.a,t),n}function Nvn(n){return W0(),F$(n,162)?uG(cQ(AFt,iut),295).Rg(n):PV(AFt,Tbn(n))?uG(cQ(AFt,Tbn(n)),295).Rg(n):null}function $vn(n){var t;return 32&n.Db||0!=(t=iQ(uG(Lsn(n,16),29)||n.ii())-iQ(n.ii()))&&Dvn(n,32,Inn(dat,EZn,1,t,5,1)),n}function Dvn(n,t,e){var i;n.Db&t?null==e?H$n(n,t):-1==(i=jTn(n,t))?n.Eb=e:uQ(Kcn(n.Eb),i,e):null!=e&&lFn(n,t,e)}function xvn(n,t,e,i){var r;0!=t.c.length&&(r=gRn(e,i),kS(krn(new fX(null,new h3(WLn(t),1)),new ba),new pY(n,e,r,i)))}function Rvn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,jK(e<(n.c-n.b&i)),e>=r?(Pbn(n,t),-1):(Sbn(n,t),1)}function Kvn(n){var t,e,i;if(!(i=n.Jh()))for(t=0,e=n.Ph();e;e=e.Ph()){if(++t>O0n)return e.Qh();if((i=e.Jh())||e==n)break}return i}function Fvn(n,t){var e;return xA(t)===xA(n)||!!F$(t,21)&&(e=uG(t,21)).gc()==n.gc()&&n.Ic(e)}function _vn(n,t){return n.e<t.e?-1:n.e>t.e?1:n.f<t.f?-1:n.f>t.f?1:Hon(n)-Hon(t)}function Bvn(n,t){return tJ(n),null!=t&&(!!m_(n,t)||n.length==t.length&&m_(n.toLowerCase(),t.toLowerCase()))}function Hvn(n){var t,e;return dwn(n,-129)>0&&dwn(n,128)<0?(tX(),t=pz(n)+128,!(e=got[t])&&(e=got[t]=new Ow(n)),e):new Ow(n)}function Uvn(){Uvn=E,tbt=new EC(q4n,0),Zlt=new EC("INSIDE_PORT_SIDE_GROUPS",1),Ylt=new EC("GROUP_MODEL_ORDER",2),nbt=new EC(X4n,3)}function Gvn(n){var t;return n.b||wj(n,!(t=QF(n.e,n.a))||!m_(_nt,Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"qualified"))),n.c}function qvn(n,t){var e,i;for(s3(t,n.length),e=n.charCodeAt(t),i=t+1;i<n.length&&(s3(i,n.length),n.charCodeAt(i)==e);)++i;return i-t}function Xvn(n,t){(t||null==console.groupCollapsed?null!=console.group?console.group:console.log:console.groupCollapsed).call(console,n)}function zvn(n,t,e,i){uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68).c.b,Rnn(i,t,n)}function Vvn(n){var t,e;for(t=new Ww(n.g);t.a<t.c.c.length;)uG(N3(t),568);hQn(e=new bFn(n.g,uM(n.a),n.c)),n.g=e.b,n.d=e.a}function Wvn(n,t,e){var i,r,c;for(c=new Ww(e.a);c.a<c.c.c.length;)r=uG(N3(c),225),i=new C$(uG(cQ(n.a,r.b),68)),kD(t.a,i),Wvn(n,i,r)}function Qvn(n,t,e){var i,r;return((r=(i=uG(zrn(Aen(n.a),t),89)).c||(YYn(),N_t)).Vh()?mwn(n.b,uG(r,54)):r)==e?MGn(i):Urn(i,e),r}function Jvn(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 Yvn(n,t,e){this.c=n,this.f=new Zm,this.e=new sj,this.j=new cX,this.n=new cX,this.b=t,this.g=new gY(t.c,t.d,t.b,t.a),this.a=e}function Zvn(n){var t,e,i,r;for(this.a=new XL,this.d=new ek,this.e=0,i=0,r=(e=n).length;i<r;++i)t=e[i],!this.f&&(this.f=t),t4(this,t)}function nkn(n){cHn(),0==n.length?(this.e=0,this.d=1,this.a=Uhn(cT(YHt,1),W1n,28,15,[0])):(this.e=1,this.d=n.length,this.a=n,K4(this))}function tkn(n,t,e){Ak.call(this),this.a=Inn(Pst,X2n,217,(Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length,0,1),this.b=n,this.d=t,this.c=e}function ekn(n){var t,e,i,r;for(kfn(r=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),e=0,i=(t=x4(n.e)).length;e<i;++e)u2(t[e],r)}function ikn(n){var t,e,i,r;for(kfn(t=uG(oIn(n,(GYn(),rmt)),12),Mmt,n.i.n.b),i=0,r=(e=x4(n.g)).length;i<r;++i)c2(e[i],t)}function rkn(n,t){var e,i;for(e2(),i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)if((e=uG(N9(i),18)).d.i==t||e.c.i==t)return e;return null}function ckn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function akn(n,t){var e,i;return(e=t.qi(n.a))&&null!=(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Bet)))?i:t.xe()}function okn(n,t){var e,i;return 0!=(e=d$(n.a.c.p,t.a.c.p))?e:0!=(i=d$(n.a.d.i.p,t.a.d.i.p))?i:d$(t.a.d.p,n.a.d.p)}function ukn(n,t){var e,i,r,c;for(i=0,r=t.gc();i<r;++i)F$(e=t.Tl(i),102)&&uG(e,19).Bb&Qtt&&null!=(c=t.Ul(i))&&oUn(n,uG(c,58))}function skn(n,t){var e,i,r;if(kD(aft,n),t.Fc(n),e=uG(cQ(cft,n),21))for(r=e.Kc();r.Ob();)i=uG(r.Pb(),27),-1!=Ten(aft,i,0)||skn(i,t)}function hkn(n,t,e){var i,r;QCn(n.e,t,e,(KQn(),_Rt)),QCn(n.i,t,e,kRt),n.a&&(r=uG(oIn(t,(GYn(),rmt)),12),i=uG(oIn(e,rmt),12),Z3(n.g,r,i))}function fkn(n,t,e){var i,r,c;i=t.c.p,c=t.p,n.b[i][c]=new RZ(n,t),e&&(n.a[i][c]=new zg(t),(r=uG(oIn(t,(GYn(),zpt)),10))&&UNn(n.d,r,t))}function lkn(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:ugn(i,r))}function bkn(){var n;return 0!=Uat&&(n=Date.now())-Gat>2e3&&(Gat=n,qat=e.setTimeout(vE,10)),0==Uat++&&(Pin((Gy(),Fat)),!0)}function wkn(n,t,e){var i;(Aut?(Opn(n),1):Lut||Dut?(pS(),1):$ut&&(pS(),0))&&((i=new iB(t)).b=e,qIn(n,i))}function dkn(n,t){var e;e=!n.A.Hc((Qmn(),JRt))||n.q==($Pn(),cRt),n.u.Hc((eNn(),wRt))?e?QQn(n,t):MQn(n,t):n.u.Hc(gRt)&&(e?YWn(n,t):MJn(n,t))}function gkn(n){var t;xA(zDn(n,(XYn(),E$t)))===xA((Own(),Oxt))&&(R0(n)?(t=uG(zDn(R0(n),E$t),346),Myn(n,E$t,t)):Myn(n,E$t,Axt))}function pkn(n){var t,e;return!!vR(n.d.i,(jYn(),UMt))&&(t=uG(oIn(n.c.i,UMt),17),e=uG(oIn(n.d.i,UMt),17),d$(t.a,e.a)>0)}function mkn(n,t,i){return new gY(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 vkn(n){var t;this.d=new Zm,this.j=new sj,this.g=new sj,t=n.g.b,this.f=uG(oIn(HQ(t),(jYn(),Byt)),88),this.e=uM(pK(eyn(t,yTt)))}function kkn(n){this.d=new Zm,this.e=new u8,this.c=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=n}function ykn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new MO(0,i);case 2:case 4:return new MO(i,0);default:return null}}function Mkn(n,t,e){var i;i=uG(A1(t.f),205);try{i.rf(n,e),WQ(t.f,i)}catch(r){throw F$(r=Ehn(r),103),hv(r)}}function Tkn(n,t,e){var i,r,c,a;return i=null,(c=DVn(aan(),t))&&(r=null,null!=(a=vVn(c,e))&&(r=n.qf(c,a)),i=r),i}function jkn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;t<r&&!mfn((s3(t,n.length),n.charCodeAt(t)),e,i);t++);return t}function Ekn(n,t){var e,i;for(i=n.c.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.c[e]);return t.length>i&&uQ(t,i,null),t}function Skn(n,t){var e,i;for(i=n.a.length,t.length<i&&(t=aT(new Array(i),t)),e=0;e<i;++e)uQ(t,e,n.a[e]);return t.length>i&&uQ(t,i,null),t}function Pkn(n,t){var e,i;++n.j,null!=t&&e$n(t,e=F$(i=n.a.Cb,99)?uG(i,99).th():null)?Dvn(n.a,4,e):Dvn(n.a,4,uG(t,129))}function Ckn(n){var t;if(null==n)return null;if(null==(t=Exn(yXn(n,!0))))throw hv(new PM("Invalid hexBinary value: '"+n+"'"));return t}function Ikn(n,t,e){var i;t.a.length>0&&(kD(n.b,new hG(t.a,e)),0<(i=t.a.length)?t.a=r1(t.a,0,0):0>i&&(t.a+=V$(Inn(JHt,N1n,28,-i,15,1))))}function Okn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Ww(Ebn(t));i.a<i.c.c.length;)Okn(n,hpn(uG(N3(i),218),t),e)}function Akn(n,t,e){var i,r,c;return(r=uG(cQ(n.e,t),400))?(c=wF(r,e),nD(n,r),c):(i=new bG(n,t,e),vJ(n.e,t,i),B1(i),null)}function Lkn(n,t,e,i){var r;return r=new Ken(n.e,1,13,t.c||(YYn(),N_t),e.c||(YYn(),N_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function Nkn(){return JYn(),Uhn(cT(mht,1),p1n,164,0,[oht,aht,uht,Yst,Jst,Zst,eht,tht,nht,cht,rht,iht,Wst,Vst,Qst,Xst,qst,zst,Ust,Hst,Gst,sht])}function $kn(n){switch(n.g){case 4:return new MO(0,-1);case 1:return new MO(1,0);case 2:return new MO(-1,0);default:return new MO(0,1)}}function Dkn(n){switch(n.g){case 1:return xdn(),nxt;case 4:return xdn(),JDt;case 2:return xdn(),YDt;case 3:return xdn(),QDt}return xdn(),ZDt}function xkn(n){switch(n.hj(null)){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4}return-1}function Rkn(){Rkn=E,hNt=new jO("PARENTS",0),sNt=new jO("NODES",1),oNt=new jO("EDGES",2),fNt=new jO("PORTS",3),uNt=new jO("LABELS",4)}function Kkn(n,t,e){var i;switch((i=e.q.getFullYear()-V1n+V1n)<0&&(i=-i),t){case 1:n.a+=i;break;case 2:Fen(n,i%100,2);break;default:Fen(n,i,t)}}function Fkn(n,t){var e,i;if(o3(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 eB(n,t,i)}function _kn(){_kn=E,Wut=new eC("NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST",0),Vut=new eC("CORNER_CASES_THAN_SINGLE_SIDE_LAST",1)}function Bkn(n){this.b=new Zm,this.e=new Zm,this.d=n,this.a=!Qj(JJ(new fX(null,new LW(new w7(n.b))),new hd(new Xr))).Bd((vS(),Kut))}function Hkn(n,t){var i,r,c,a;for(i=0,c=new Ww(t.a);c.a<c.c.c.length;)a=(r=uG(N3(c),10)).o.a+r.d.c+r.d.b+n.j,i=e.Math.max(i,a);return i}function Ukn(n,t){var e,i,r;(i=(r=t.d.i).k)!=(zIn(),dbt)&&i!=fbt&&hDn(e=new Fz(ix(Xgn(r).a.Kc(),new h)))&&vJ(n.k,t,uG(N9(e),18))}function Gkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).b,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).b)}function qkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.c.e.a,n.c.e.b):uG(gR(n.a),8)).a,(0==t.a.b?new MO(t.c.e.a,t.c.e.b):uG(gR(t.a),8)).a)}function Xkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).a,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).a)}function zkn(n,t){return tcn(),ugn((0==n.a.b?new MO(n.b.e.a,n.b.e.b):uG(pR(n.a),8)).b,(0==t.a.b?new MO(t.b.e.a,t.b.e.b):uG(pR(t.a),8)).b)}function Vkn(){Vkn=E,Zxt=new $O("DISTRIBUTED",0),tRt=new $O("JUSTIFIED",1),Jxt=new $O("BEGIN",2),Yxt=new $O(G2n,3),nRt=new $O("END",4)}function Wkn(n,t){var e,i,r;return i=ern(n.Dh(),t),(e=t-n.ji())<0?(r=n.Ih(i))>=0?n.Wh(r):$Nn(n,i):e<0?$Nn(n,i):uG(i,69).wk().Bk(n,n.hi(),e)}function Qkn(n){var t,e;for(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)uG(t.Yj(),44).md();return Tnn(e)}function Jkn(n){var t;if(F$(n.a,4)){if(null==(t=Nvn(n.a)))throw hv(new kM(Bnt+n.b+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return t}return n.a}function Ykn(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(!m_(n.j[e],t.j[e]))return!1;return!0}function Zkn(n){var t;try{return t=n.i.Xb(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function nyn(n){var t;try{return t=n.c.Vi(n.e),n.Xj(),n.g=n.e++,t}catch(e){throw F$(e=Ehn(e),77)?(n.Xj(),hv(new Bv)):hv(e)}}function tyn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e<i;e++)s3(e,n.length),(t=n.charCodeAt(e))>=64&&t<128&&(r=S3(r,Nz(1,t-64)));return r}function eyn(n,t){var e,i;return i=null,vR(n,(XYn(),ODt))&&(e=uG(oIn(n,ODt),96)).pf(t)&&(i=e.of(t)),null==i&&HQ(n)&&(i=oIn(HQ(n),t)),i}function iyn(n,t){var e;return e=uG(oIn(n,(jYn(),bMt)),75),_$(t,cbt)?e?BY(e):(e=new Uk,kfn(n,bMt,e)):e&&kfn(n,bMt,null),e}function ryn(){ryn=E,XYn(),ift=SDt,Jht=M$t,Xht=c$t,Yht=W$t,MEn(),tft=cst,nft=ist,eft=ost,Zht=est,pbn(),Vht=Hht,zht=Bht,Wht=Ght,Qht=qht}function cyn(n){switch(qS(),this.c=new Zm,this.d=n,n.g){case 0:case 2:this.a=kJ(Qlt),this.b=M0n;break;case 3:case 1:this.a=Qlt,this.b=T0n}}function ayn(n){var t;L_(uG(oIn(n,(jYn(),JMt)),101))&&(c$n((u3(0,(t=n.b).c.length),uG(t.c[0],30))),c$n(uG(zq(t,t.c.length-1),30)))}function oyn(n,t){t.Ug("Self-Loop post-processing",1),kS(JJ(JJ(sin(new fX(null,new h3(n.b,16)),new Di),new xi),new Ri),new Ki),t.Vg()}function uyn(n,t,e){var i;if(n.c)ycn(n.c,n.c.i+t),Mcn(n.c,n.c.j+e);else for(i=new Ww(n.b);i.a<i.c.c.length;)uyn(uG(N3(i),163),t,e)}function syn(n){var t;if(null==n)return null;if(null==(t=bJn(yXn(n,!0))))throw hv(new PM("Invalid base64Binary value: '"+n+"'"));return t}function hyn(n,t){var e;e=n.fd(t);try{return e.Pb()}catch(i){throw F$(i=Ehn(i),112)?hv(new dM("Can't get element "+t)):hv(i)}}function fyn(n,t){var e,i,r;for(e=n.o,r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.a=YTn(i,e.a),i.e.b=e.b*uM(pK(i.b.of(bht)))}function lyn(n,t){var e,i,r;for(r=new R7(t.gc()),i=t.Kc();i.Ob();)(e=uG(i.Pb(),293)).c==e.f?YOn(n,e,e.c):qOn(n,e)||mv(r.c,e);return r}function byn(n){var t;return(t=new WM).a+="n",n.k!=(zIn(),dbt)&&JA(JA((t.a+="(",t),MR(n.k).toLowerCase()),")"),JA((t.a+="_",t),ZTn(n)),t.a}function wyn(n,t){var e,i,r,c;return r=n.k,e=uM(pK(oIn(n,(GYn(),bmt)))),c=t.k,i=uM(pK(oIn(t,bmt))),c!=(zIn(),lbt)?-1:r!=lbt?1:e==i?0:e<i?-1:1}function dyn(n,t){var e,i;return e=uG(uG(cQ(n.g,t.a),42).a,68),i=uG(uG(cQ(n.g,t.b),42).a,68),atn(t.a,t.b)-atn(t.a,x$(e.b))-atn(t.b,x$(i.b))}function gyn(n,t){var e;switch(e=uG(AJ(n.b,t),127).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 pyn(){pyn=E,Tjt=new wI(k9n,0),kjt=new wI(D6n,1),yjt=new wI("LINEAR_SEGMENTS",2),vjt=new wI("BRANDES_KOEPF",3),Mjt=new wI(v9n,4)}function myn(){myn=E,Nht=new lC(o3n,0),Lht=new lC(u3n,1),$ht=new lC(s3n,2),Dht=new lC(h3n,3),Nht.a=!1,Lht.a=!0,$ht.a=!1,Dht.a=!0}function vyn(){vyn=E,yht=new hC(o3n,0),kht=new hC(u3n,1),Mht=new hC(s3n,2),Tht=new hC(h3n,3),yht.a=!1,kht.a=!0,Mht.a=!1,Tht.a=!0}function kyn(n,t,e,i){var r;return e>=0?n.Sh(t,e,i):(n.Ph()&&(i=(r=n.Fh())>=0?n.Ah(i):n.Ph().Th(n,-1-r,null,i)),n.Ch(t,e,i))}function yyn(n,t){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),void Czn(n.e);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),void Czn(n.d)}Tmn(n,t)}function Myn(n,t,e){return null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e)),n}function Tyn(n,t){var e,i,r,c;for(hZ(),e=n,c=t,F$(n,21)&&!F$(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function jyn(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 Eyn(n,t){return RA(n)?!!bZn[t]:n.Sm?!!n.Sm[t]:FA(n)?!!lZn[t]:!!KA(n)&&!!fZn[t]}function Syn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i).k==(zIn(),wbt)&&n.b.Fc(t)}while(t.k==(zIn(),wbt));n.b=Spn(n.b)}function Pyn(n,t){var i,r,c;for(c=n,r=new Fz(ix(qgn(t).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.c&&(c=e.Math.max(c,i.c.i.c.p));return c}function Cyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.d+e.b.Mf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Iyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.b+e.b.Mf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Oyn(n){var t,e,i;if(e=0,0==(i=GFn(n)).c.length)return 1;for(t=new Ww(i);t.a<t.c.c.length;)e+=Oyn(uG(N3(t),27));return e}function Ayn(n){var t,e,i;for(i=n.c.a,n.p=(WW(i),new Z_(i)),e=new Ww(i);e.a<e.c.c.length;)(t=uG(N3(e),10)).p=nLn(t).a;hZ(),f$(n.p,new Pc)}function Lyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=Oq(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):Oq(n,i)),e}function Nyn(n,t,e){var i,r,c,a;return-1!=(i=n.dd(t))&&(n.Pj()?(c=n.Qj(),a=gjn(n,i),r=n.Ij(4,a,null,i,c),e?e.nj(r):e=r):gjn(n,i)),e}function $yn(n,t,e,i){var r,c;e.Xh(t)&&(PP(),ein(t)?ukn(n,uG(e.Mh(t),160)):(r=(c=t)?uG(i,54).gi(c):null)&&rv(e.Mh(t),r))}function Dyn(n,t,e,i){var r,c,a;return c=ern(n.Dh(),t),(r=t-n.ji())<0?(a=n.Ih(c))>=0?n.Lh(a,e,!0):YNn(n,c,e):uG(c,69).wk().yk(n,n.hi(),r,e,i)}function xyn(n,t,e,i){var r;(r=bdn(t.pf((XYn(),K$t))?uG(t.of(K$t),21):n.j))!=(JYn(),sht)&&(e&&!vvn(r)||LOn(Sxn(n,r,i),t))}function Ryn(n){switch(n.g){case 1:return ehn(),pht;case 3:return ehn(),wht;case 2:return ehn(),ght;case 4:return ehn(),dht;default:return null}}function Kyn(n,t,e){if(n.e)switch(n.b){case 1:JY(n.c,t,e);break;case 0:YY(n.c,t,e)}else C5(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function Fyn(n){var t,e;if(null==n)return null;for(e=Inn(pbt,zZn,199,n.length,0,2),t=0;t<e.length;t++)e[t]=uG(b8(n[t],n[t].length),199);return e}function _yn(n){var t;if(Zln(n))return yz(n),n.ul()&&(t=ONn(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 hv(new Bv)}function Byn(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 Hyn(n,t){var e,i;if((i=Ljn(n,t))>=0)return i;if(n.ol())for(e=0;e<n.i;++e)if(xA(n.pl(uG(n.g[e],58)))===xA(t))return e;return-1}function Uyn(n,t,e){var i,r;if(t>=(r=n.gc()))throw hv(new w_(t,r));if(n.Si()&&(i=n.dd(e))>=0&&i!=t)throw hv(new vM(Xet));return n.Xi(t,e)}function Gyn(n,t){if(this.a=uG(WW(n),253),this.b=uG(WW(t),253),n.Ed(t)>0||n==(py(),Mat)||t==(my(),Tat))throw hv(new vM("Invalid range: "+N5(n,t)))}function qyn(n){var t,e;for(this.b=new Zm,this.c=n,this.a=!1,e=new Ww(n.a);e.a<e.c.c.length;)t=uG(N3(e),10),this.a=this.a|t.k==(zIn(),dbt)}function Xyn(n,t){var e,i,r;for(e=jx(new sk,n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),125),RKn(xS(DS(RS($S(new uk,0),0),e),i));return e}function zyn(n,t,e){e.Ug("Compound graph preprocessor",1),n.a=new K1,ZWn(n,t,null),szn(n,t),qRn(n),kfn(t,(GYn(),Apt),n.a),n.a=null,$V(n.b),e.Vg()}function Vyn(n,t,e){var i,r,c;for(r=new Fz(ix((t?qgn(n):Xgn(n)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),(c=t?i.c.i:i.d.i).k==(zIn(),bbt)&&a2(c,e)}function Wyn(n,t){var e,i;for(t.Ug("Untreeify",1),i=uG(oIn(n,(OQn(),_Pt)),15).Kc();i.Ob();)aq((e=uG(i.Pb(),65)).b.d,e),aq(e.c.b,e);t.Vg()}function Qyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),gdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Jyn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),pdt)),15).Kc();i.Ob();)pW(n,e=uG(i.Pb(),105),(t=Ejn(e))[0],(gon(),jdt),0),pW(n,e,t[1],Sdt,1)}function Yyn(){Yyn=E,djt=new bI(q4n,0),gjt=new bI("PORT_POSITION",1),wjt=new bI("NODE_SIZE_WHERE_SPACE_PERMITS",2),bjt=new bI("NODE_SIZE",3)}function Zyn(){Zyn=E,lOt=new cO("INTERACTIVE_NODE_REORDERER",0),wOt=new cO("MIN_SIZE_PRE_PROCESSOR",1),bOt=new cO("MIN_SIZE_POST_PROCESSOR",2)}function nMn(){nMn=E,CNt=new TO("AUTOMATIC",0),ANt=new TO(z2n,1),LNt=new TO(V2n,2),NNt=new TO("TOP",3),INt=new TO(Q2n,4),ONt=new TO(G2n,5)}function tMn(n,t,e,i){var r,c;for(b_n(),r=0,c=0;c<e;c++)r=Lgn(Ngn(E3(t[c],L0n),E3(i,L0n)),E3(pz(r),L0n)),n[c]=pz(r),r=Dz(r,32);return pz(r)}function eMn(n,t,i){var r,c;for(c=0,r=0;r<Nst;r++)c=e.Math.max(c,Nbn(n.a[t.g][r],i));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.b)),c}function iMn(n,t){var e,i;if(kK(t>0),(t&-t)==t)return t0(t*uRn(n,31)*4.656612873077393e-10);do{i=(e=uRn(n,31))%t}while(e-i+(t-1)<0);return t0(i)}function rMn(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 cMn(n,t,e,i){var r,c;for(r=t;r<n.c.length;r++){if(u3(r,n.c.length),c=uG(n.c[r],12),!e.Mb(c))return r;mv(i.c,c)}return n.c.length}function aMn(n){switch(n.g){case 0:return null;case 1:return new gun;case 2:return new dy;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function oMn(n,t,e){var i,r;for($hn(n,t-n.s,e-n.t),r=new Ww(n.n);r.a<r.c.c.length;)cw(i=uG(N3(r),209),i.e+t-n.s),aw(i,i.f+e-n.t);n.s=t,n.t=e}function uMn(n){var t,e,i,r;for(e=0,i=new Ww(n.a);i.a<i.c.c.length;)uG(N3(i),125).d=e++;return r=null,(t=ZCn(n)).c.length>1&&(r=Xyn(n,t)),r}function sMn(n){var t;return new MO(t=uM(pK(zDn(n,(XYn(),BDt))))*e.Math.sqrt((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i),t/uM(pK(zDn(n,_Dt))))}function hMn(n){var t;return n.f&&n.f.Vh()&&(t=uG(n.f,54),n.f=uG(mwn(n,t),84),n.f!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.f))),n.f}function fMn(n){var t;return n.i&&n.i.Vh()&&(t=uG(n.i,54),n.i=uG(mwn(n,t),84),n.i!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,7,t,n.i))),n.i}function lMn(n){var t;return n.b&&64&n.b.Db&&(t=n.b,n.b=uG(mwn(n,t),19),n.b!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,21,t,n.b))),n.b}function bMn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Bi(),eKn(n,n.f+1),r=(i&vZn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.dk()),e.Fc(t),++n.f)}function wMn(n,t,e){var i;return!t.tk()&&(-2!=t.Ik()?null==(i=t.ik())?null==e:udn(i,e):t.qk()==n.e.Dh()&&null==e)}function dMn(){var n;man(16,b1n),n=aon(16),this.b=Inn(Cat,l1n,303,n,0,1),this.c=Inn(Cat,l1n,303,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function gMn(n){LF.call(this),this.k=(zIn(),dbt),this.j=(man(6,g1n),new R7(6)),this.b=(man(2,g1n),new R7(2)),this.d=new $k,this.f=new xk,this.a=n}function pMn(n){var t,e;n.c.length<=1||(iAn(n,uG((t=w_n(n,(KQn(),KRt))).a,17).a,uG(t.b,17).a),iAn(n,uG((e=w_n(n,_Rt)).a,17).a,uG(e.b,17).a))}function mMn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i<e;i++)GX(r,r.c.length,new bQ(n.a));a2(t,(u3(e-1,r.c.length),uG(r.c[e-1],30))),n.b[t.p]=e}function vMn(n,t){var e,i,r;for(n.b[t.g]=1,i=Fkn(t.d,0);i.b!=i.d.c;)r=(e=uG(I6(i),65)).c,1==n.b[r.g]?aq(n.a,e):2==n.b[r.g]?n.b[r.g]=1:vMn(n,r)}function kMn(n,t,e,i){var r;for(r=uG(Y9(i?n.a:n.b,t),21).Kc();r.Ob();)if(p_n(n,e,uG(r.Pb(),27)))return!0;return!1}function yMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function MMn(n){var t,e;for(e=new DD(n);e.e!=e.i.gc();)if((t=uG(Zkn(e),89)).e||0!=(!t.d&&(t.d=new MD(g_t,t,1)),t.d).i)return!0;return!1}function TMn(n){var t,e;for(t=0,e=new Ww(n.c.a);e.a<e.c.c.length;)t+=x5(new Fz(ix(Xgn(uG(N3(e),10)).a.Kc(),new h)));return t/n.c.a.c.length}function jMn(){jMn=E,uBn(),ULt=RLt,BLt=new CN(8),new _N((XYn(),W$t),BLt),new _N(DDt,8),HLt=DLt,FLt=ELt,_Lt=SLt,KLt=new _N(w$t,(qx(),!1))}function EMn(n,t,e){e.Ug("Shrinking tree compaction",1),oM(gK(oIn(t,(rsn(),Oht))))?(son(n,t.f),Qen(t.f,t.c)):Qen(t.f,t.c),e.Vg()}function SMn(n,t,e,i){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),n.e;case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),n.d}return spn(n,t,e,i)}function PMn(n){var t;return n.a&&n.a.Vh()&&(t=uG(n.a,54),n.a=uG(mwn(n,t),142),n.a!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,5,t,n.a))),n.a}function CMn(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 IMn(n,t){if(null==n)throw hv(new MM("null key in entry: null="+t));if(null==t)throw hv(new MM("null value in entry: "+n+"=null"))}function OMn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(xA(e)===xA(i)||null!=e&&udn(e,i)))return!1}return!t.Ob()}function AMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[Nbn(n.a[0],t),Nbn(n.a[1],t),Nbn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[$bn(n.a[0],t),$bn(n.a[1],t),$bn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function NMn(n,t,e){L_(uG(oIn(t,(jYn(),JMt)),101))||(Z8(n,t,yOn(t,e)),Z8(n,t,yOn(t,(KQn(),KRt))),Z8(n,t,yOn(t,yRt)),hZ(),f$(t.j,new Gg(n)))}function $Mn(n){var t,e;for(n.c||oVn(n),e=new Uk,N3(t=new Ww(n.a));t.a<t.c.c.length;)aq(e,uG(N3(t),418).a);return MK(0!=e.b),Lrn(e,e.c.b),e}function DMn(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 Ww(n.n);c.a<c.c.c.length;)rxn(uG(N3(c),209),a,i,r),++r}function xMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(zut,EZn,60,n.c.c.a.b.c.length,0,1),t=0,e=new Ww(n.c.c.a.b);e.a<e.c.c.length;)uG(N3(e),60).f=t++}function RMn(n){var t,e;for(n.b.a.$b(),n.a=Inn(xlt,EZn,86,n.c.a.a.b.c.length,0,1),t=0,e=new Ww(n.c.a.a.b);e.a<e.c.c.length;)uG(N3(e),86).i=t++}function KMn(n){var t;if(t=gbn(n),!hDn(n))throw hv(new dM("position (0) must be less than the number of elements that remained ("+t+")"));return N9(n)}function FMn(n,t){var e;return n.a||(e=Inn(eUt,I0n,28,0,15,1),tE(n.b.a,new pd(e)),vv(e,qrn(P.prototype.Me,P,[])),n.a=new __(e,n.d)),x7(n.a,t)}function _Mn(n,t,e){try{return eTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function BMn(n,t,e){try{return iTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function HMn(n,t,e){try{return rTn(n,t+n.j,e+n.k)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function UMn(n){switch(n.g){case 1:return KQn(),_Rt;case 4:return KQn(),yRt;case 3:return KQn(),kRt;case 2:return KQn(),KRt;default:return KQn(),FRt}}function GMn(n,t,e){t.k==(zIn(),dbt)&&e.k==wbt&&(n.d=Bwn(t,(KQn(),KRt)),n.b=Bwn(t,yRt)),e.k==dbt&&t.k==wbt&&(n.d=Bwn(e,(KQn(),yRt)),n.b=Bwn(e,KRt))}function qMn(n,t){var e,i;for(i=Dgn(n,t).Kc();i.Ob();)if(null!=oIn(e=uG(i.Pb(),12),(GYn(),lmt))||Dx(new w7(e.b)))return!0;return!1}function XMn(n,t,e){e.Ug("Linear segments node placement",1),n.b=uG(oIn(t,(GYn(),kmt)),312),MYn(n,t),$Xn(n,t),dzn(n,t),LJn(n),n.a=null,n.b=null,e.Vg()}function zMn(n,t){return ycn(t,n.e+n.d+(0==n.c.c.length?0:n.b)),Mcn(t,n.f),n.a=e.Math.max(n.a,t.f),n.d+=t.g+(0==n.c.c.length?0:n.b),kD(n.c,t),!0}function VMn(n,t,e){var i,r,c,a;for(a=0,i=e/n.a.c.length,c=new Ww(n.a);c.a<c.c.c.length;)oMn(r=uG(N3(c),172),r.s,r.t+a*i),DMn(r,n.d-r.r+t,i),++a}function WMn(n,t){var e,i,r,c,a,o;for(r=t.length-1,a=0,o=0,i=0;i<=r;i++)c=t[i],e=eOn(r,i)*gwn(1-n,r-i)*gwn(n,i),a+=c.a*e,o+=c.b*e;return new MO(a,o)}function QMn(n,t){var e,i,r,c,a;for(e=t.gc(),n._i(n.i+e),c=t.Kc(),a=n.i,n.i+=e,i=a;i<n.i;++i)r=c.Pb(),yD(n,i,n.Zi(i,r)),n.Mi(i,r),n.Ni();return 0!=e}function JMn(n,t,e){var i,r,c;return n.Pj()?(i=n.Ej(),c=n.Qj(),++n.j,n.qj(i,n.Zi(i,t)),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):JK(n,n.Ej(),t),e}function YMn(n,t,e){var i,r,c;return(64&(c=F$(r=(i=uG(zrn(z5(n.a),t),89)).c,90)?uG(r,29):(YYn(),x_t)).Db?mwn(n.b,c):c)==e?MGn(i):Urn(i,e),c}function ZMn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function nTn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function tTn(n,t,e,i,r,c,a,o){var u,s;i&&((u=i.a[0])&&tTn(n,t,e,u,r,c,a,o),ljn(n,e,i.d,r,c,a,o)&&t.Fc(i),(s=i.a[1])&&tTn(n,t,e,s,r,c,a,o))}function eTn(n,t,e){try{return _A(Son(n,t,e),1)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function iTn(n,t,e){try{return _A(Son(n,t,e),0)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function rTn(n,t,e){try{return _A(Son(n,t,e),2)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function cTn(n,t){if(-1==n.g)throw hv(new xv);n.Xj();try{n.d.hd(n.g,t),n.f=n.d.j}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function aTn(n){var t,e,i;for(e=new Ww(n.b);e.a<e.c.c.length;)for(t=0,i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)uG(N3(i),10).p=t++}function oTn(n,t){var e,i,r,c;for(c=n.gc(),t.length<c&&(t=aT(new Array(c),t)),r=t,i=n.Kc(),e=0;e<c;++e)uQ(r,e,i.Pb());return t.length>c&&uQ(t,c,null),t}function uTn(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(udn(t,n.Xb(e)))return e;return-1}function sTn(n,t){var e,i,r;return e=t.ld(),r=t.md(),i=n.xc(e),!(!(xA(r)===xA(i)||null!=r&&udn(r,i))||null==i&&!n._b(e))}function hTn(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),p$(e,i,r)}function fTn(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 lTn(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 bTn(n,t,e,i){var r,c;this.a=t,this.c=i,Nb(this,new MO(-(r=n.a).c,-r.d)),JF(this.b,e),c=i/2,t.a?HR(this.b,0,c):HR(this.b,c,0),kD(n.c,this)}function wTn(n,t,e,i){var r;this.c=n,this.d=t,s8(r=new lS,e,r.c.b,r.c),this.a=r,this.b=uG(oIn(i,(QGn(),cCt)),88),this.e=uM(pK(oIn(i,jCt))),RYn(this)}function dTn(){dTn=E,ZIt=new eO(q4n,0),JIt=new eO(K6n,1),YIt=new eO("EDGE_LENGTH_BY_POSITION",2),QIt=new eO("CROSSING_MINIMIZATION_BY_POSITION",3)}function gTn(n,t){var e,i;if(e=uG(dcn(n.g,t),27))return e;if(i=uG(dcn(n.j,t),123))return i;throw hv(new SM("Referenced shape does not exist: "+t))}function pTn(n,t){var e;if(F$(t,253)){e=uG(t,253);try{return 0==n.Ed(e)}catch(i){if(F$(i=Ehn(i),212))return!1;throw hv(i)}}return!1}function mTn(n,t){if(n.c==t)return n.d;if(n.d==t)return n.c;throw hv(new vM("Node 'one' must be either source or target of edge 'edge'."))}function vTn(n,t){if(n.c.i==t)return n.d.i;if(n.d.i==t)return n.c.i;throw hv(new vM("Node "+t+" is neither source nor target of edge "+n))}function kTn(n,t,e){e.Ug("Self-Loop ordering",1),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new Ii),new Oi),new Ai),new Li),new gg(n)),e.Vg()}function yTn(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),hV(n,t,(qhn(),hdt),e);break;case 1:case 3:hV(n,t,(qhn(),odt),null)}}function MTn(n,t,e,i,r,c){var a,o,u,s,h;for(a=BEn(t,e,c),o=e==(KQn(),yRt)||e==_Rt?-1:1,s=n[e.g],h=0;h<s.length;h++)(u=s[h])>0&&(u+=r),s[h]=a,a+=o*(u+i)}function TTn(n){var t,e,i;for(i=n.f,n.n=Inn(eUt,I0n,28,i,15,1),n.d=Inn(eUt,I0n,28,i,15,1),t=0;t<i;t++)e=uG(zq(n.c.b,t),30),n.n[t]=Hkn(n,e),n.d[t]=FRn(n,e)}function jTn(n,t){var e,i,r;for(r=0,i=2;i<t;i<<=1)n.Db&i&&++r;if(0==r){for(e=t<<=1;e<=128;e<<=1)if(n.Db&e)return 0;return-1}return r}function ETn(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),c=null,e=uG(n.g,124),r=0;r<n.i;++r)i=e[r],a.am(i.Lk())&&(!c&&(c=new ls),ttn(c,i));c&&PJn(n,c)}function STn(n){var t,e;if(!n)return null;if(n.dc())return"";for(e=new zM,t=n.Kc();t.Ob();)VA(e,mK(t.Pb())),e.a+=" ";return CL(e,e.a.length-1)}function PTn(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 CTn(n){var t;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();Prn(hN(n.d)?n.a.c:n.a.d,new Id(n)),n.c.df(n),NFn(n)}function ITn(n){var t,e,i;for(e=new Ww(n.e.c);e.a<e.c.c.length;){for(i=new Ww((t=uG(N3(e),290)).b);i.a<i.c.c.length;)Yqn(uG(N3(i),454));CNn(t)}}function OTn(n){var t,i,r,c,a;for(r=0,a=0,c=0,i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),172),a=e.Math.max(a,t.r),r+=t.d+(c>0?n.c:0),++c;n.b=r,n.d=a}function ATn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[eMn(n,(Yrn(),jst),t),eMn(n,Est,t),eMn(n,Sst,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function NTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function $Tn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Bxt))?(t.Mc(Bxt),t.Fc(Uxt)):t.Hc(Uxt)&&(t.Mc(Uxt),t.Fc(Bxt)))}function DTn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Vxt))?(t.Mc(Vxt),t.Fc(Xxt)):t.Hc(Xxt)&&(t.Mc(Xxt),t.Fc(Vxt)))}function xTn(n,t,e,i){var r,c,a;return null==n.a&&nOn(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 RTn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,27).kh().i),e=new DD(uG(n.f,27).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function KTn(n){var t,e;if(!n.e)for(n.e=o6(RJ(uG(n.f,27)).i),e=new DD(RJ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),123),kD(n.e,new Jp(t));return n.e}function FTn(n){var t,e;if(!n.a)for(n.a=o6(wZ(uG(n.f,27)).i),e=new DD(wZ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),27),kD(n.a,new Wx(n,t));return n.a}function _Tn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=KWn(n))n.hl(t);else try{n.hl(null)}catch(e){if(!F$(e=Ehn(e),63))throw hv(e)}return n.C}function BTn(n){switch(n.q.g){case 5:QEn(n,(KQn(),yRt)),QEn(n,KRt);break;case 4:TVn(n,(KQn(),yRt)),TVn(n,KRt);break;default:PAn(n,(KQn(),yRt)),PAn(n,KRt)}}function HTn(n){switch(n.q.g){case 5:JEn(n,(KQn(),kRt)),JEn(n,_Rt);break;case 4:jVn(n,(KQn(),kRt)),jVn(n,_Rt);break;default:CAn(n,(KQn(),kRt)),CAn(n,_Rt)}}function UTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),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 GTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),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 qTn(n){var t,i,r;for(r=vZn,i=new Ww(n.a);i.a<i.c.c.length;)vR(t=uG(N3(i),10),(GYn(),imt))&&(r=e.Math.min(r,uG(oIn(t,imt),17).a));return r}function XTn(n,t){var e,i;if(0==t.length)return 0;for(e=kQ(n.a,t[0],(KQn(),_Rt)),e+=kQ(n.a,t[t.length-1],kRt),i=0;i<t.length;i++)e+=CIn(n,i,t);return e}function zTn(){uFn(),this.c=new Zm,this.i=new Zm,this.e=new XL,this.f=new XL,this.g=new XL,this.j=new Zm,this.a=new Zm,this.b=new Ym,this.k=new Ym}function VTn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,5,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function WTn(n){EZ();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 QTn(n){var t;return Tan(),(t=wot)[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 JTn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=pfn(e.Math.max(8,r))<<1,0!=n.b?(Pon(n,t=MF(n.a,i),r),n.a=t,n.b=0):Xv(n.a,i),n.c=r)}function YTn(n,t){var e;return(e=n.b).pf((XYn(),uDt))?e.ag()==(KQn(),_Rt)?-e.Mf().a-uM(pK(e.of(uDt))):t+uM(pK(e.of(uDt))):e.ag()==(KQn(),_Rt)?-e.Mf().a:t}function ZTn(n){var t;return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:null!=(t=sY(n))?t:""+(n.c?Ten(n.c.a,n,0):-1)}function njn(n){var t;return 0!=n.f.c.length&&uG(zq(n.f,0),72).a?uG(zq(n.f,0),72).a:null!=(t=sY(n))?t:""+(n.i?Ten(n.i.j,n,0):-1)}function tjn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e<n.gc();++e)if(i=uG(n.Xb(e),131),e==n.gc()-1||!i.o)return new WO(xwn(e),i);return null}function ejn(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=uG(zq(c.a,r),10)).k!=(zIn(),fbt)&&!pEn(a))return!1;return!0}function ijn(n){var t,i,r,c,a;for(a=0,c=T0n,r=0,i=new Ww(n.a);i.a<i.c.c.length;)a+=(t=uG(N3(i),172)).r+(r>0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function rjn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,123).kh().i),e=new DD(uG(n.f,123).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function cjn(n,t){var e,i,r;if(t.dc())return EK(),EK(),KFt;for(e=new cF(n,t.gc()),r=new DD(n);r.e!=r.i.gc();)i=Zkn(r),t.Hc(i)&&ttn(e,i);return e}function ajn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),n.o):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Tnn(n.o)):Dyn(n,t,e,i)}function ojn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t<e;++t)lR(zrn(n.rb,t));if(n.vb)for(t=0,e=n.vb.i;t<e;++t)lR(zrn(n.vb,t));jz((gAn(),kBt),n),n.Bb|=1}function ujn(n,t,e,i,r,c,a,o,u,s,h,f,l,b){return eLn(n,t,i,null,r,c,a,o,u,s,l,!0,b),Pgn(n,h),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2),e&&bon(n,e),Ign(n,f),n}function sjn(n){var t;if(null==n)return null;t=0;try{t=mUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function hjn(n){var t;if(null==n)return null;t=0;try{t=mUn(n,j1n,vZn)&D1n}catch(e){if(!F$(e=Ehn(e),130))throw hv(e);t=_en(n)[0]}return Hsn(t)}function fjn(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&f0n,n.m=i&f0n,n.h=r&l0n,0)))}function ljn(n,t,e,i,r,c,a){var o,u;return!(t.Te()&&(u=n.a.Ne(e,i),u<0||!r&&0==u)||t.Ue()&&(o=n.a.Ne(e,c),o>0||!a&&0==o))}function bjn(n,t){if(Cln(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return Wgn(t,edt)-Wgn(n,edt);case 4:return Wgn(n,tdt)-Wgn(t,tdt)}return 0}function wjn(n){switch(n.g){case 0:return jgt;case 1:return Egt;case 2:return Sgt;case 3:return Pgt;case 4:return Cgt;case 5:return Igt;default:return null}}function djn(n,t,e){var i,r;return Kbn(r=new ny,t),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(i=r,0),Ccn(i,1),mdn(i,!0),ddn(i,!0),i}function gjn(n,t){var e,i;if(t>=n.i)throw hv(new pL(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&qGn(n.g,t+1,n.g,t,i),uQ(n.g,--n.i,null),n.Qi(t,e),n.Ni(),e}function pjn(n,t){var e;return n.Db>>16==17?n.Cb.Th(n,21,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function mjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),693).bf(e)}function vjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.a<i.c.c.length;)for(e=N3(i),t=new Ww(n.b);t.a<t.c.c.length;)uG(N3(t),382).bf(e)}function kjn(n){var t,e,i,r,c;for(r=vZn,c=null,i=new Ww(n.d);i.a<i.c.c.length;)(e=uG(N3(i),218)).d.j^e.e.j&&(t=e.e.e-e.d.e-e.a)<r&&(r=t,c=e);return c}function yjn(){yjn=E,tlt=new mL(I4n,(qx(),!1)),Jft=new mL(O4n,100),Jen(),Yft=new mL(A4n,Zft=glt),nlt=new mL(L4n,t4n),elt=new mL(N4n,xwn(vZn))}function Mjn(n,t,e){var i,r,c,a,o,u;for(u=0,r=0,c=(i=n.a[t]).length;r<c;++r)for(o=Vwn(i[r],e).Kc();o.Ob();)a=uG(o.Pb(),12),vJ(n.f,a,xwn(u++))}function Tjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function jjn(n,t,e){var i,r;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)UNn(n,t,fNn(uin(e,uG(r.Pb(),17).a)))}function Ejn(n){var t;return jIn(),Ntn(t=uG(oTn(kz(n.k),Inn(YRt,z4n,64,2,0,1)),126),0,t.length,null),t[0]==(KQn(),yRt)&&t[1]==_Rt&&(uQ(t,0,_Rt),uQ(t,1,yRt)),t}function Sjn(n,t,e){var i,r,c;return c=ZFn(n,r=xKn(n,t,e)),Ctn(n.b),Z3(n,t,e),hZ(),f$(r,new np(n)),i=ZFn(n,r),Ctn(n.b),Z3(n,e,t),new WO(xwn(c),xwn(i))}function Pjn(){Pjn=E,eSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt)),iSt=new uF("linearSegments.inputPrio",xwn(0)),rSt=new uF("linearSegments.outputPrio",xwn(0))}function Cjn(){Cjn=E,zSt=new zI("P1_TREEIFICATION",0),VSt=new zI("P2_NODE_ORDERING",1),WSt=new zI("P3_NODE_PLACEMENT",2),QSt=new zI("P4_EDGE_ROUTING",3)}function Ijn(n){var t,i,r,c;for(i=0,t=0,c=new DD(n);c.e!=c.i.gc();)r=uG(Zkn(c),27),i=e.Math.max(r.g+r.i,i),t=e.Math.max(r.f+r.j,t);return new MO(i,t)}function Ojn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),27),c+=e.Math.pow(i.g*i.f-t,2);return e.Math.sqrt(c/(n.c.length-1))}function Ajn(){Ajn=E,Rxt=new LO("UNKNOWN",0),$xt=new LO("ABOVE",1),Dxt=new LO("BELOW",2),xxt=new LO("INLINE",3),new uF("org.eclipse.elk.labelSide",Rxt)}function Ljn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return e}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return e;return-1}function Njn(n,t,e){var i,r;return t.c==(can(),Wjt)&&e.c==Vjt?-1:t.c==Vjt&&e.c==Wjt?1:(i=Fbn(t.a,n.a),r=Fbn(e.a,n.a),t.c==Wjt?r-i:i-r)}function $jn(n,t,e){if(e&&(t<0||t>e.a.c.length))throw hv(new vM("index must be >= 0 and <= layer node count"));n.c&&men(n.c.a,n),n.c=e,e&&GX(e.a,t,n)}function Djn(n,t){var e,i,r;for(i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)return e=uG(N9(i),18),new Ul(WW((r=uG(t.Kb(e),10)).n.b+r.o.b/2));return gy(),gy(),wat}function xjn(n,t){this.c=new Ym,this.a=n,this.b=t,this.d=uG(oIn(n,(GYn(),kmt)),312),xA(oIn(n,(jYn(),CMt)))===xA((Wtn(),Lgt))?this.e=new Pk:this.e=new Sk}function Rjn(n,t){var e,i;return i=null,n.pf((XYn(),ODt))&&(e=uG(n.of(ODt),96)).pf(t)&&(i=e.of(t)),null==i&&n.Tf()&&(i=n.Tf().of(t)),null==i&&(i=Jkn(t)),i}function Kjn(n,t){var e,i;e=n.fd(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't remove element "+t)):hv(r)}}function Fjn(n,t){var e,i,r;if(0==(e=Wqn(n,t,r=new Lfn((i=new QE).q.getFullYear()-V1n,i.q.getMonth(),i.q.getDate())))||e<t.length)throw hv(new vM(t));return r}function _jn(n,t){var e,i,r;for(tJ(t),kK(t!=n),r=n.b.c.length,i=t.Kc();i.Ob();)e=i.Pb(),kD(n.b,tJ(e));return r!=n.b.c.length&&(_ln(n,0),!0)}function Bjn(){Bjn=E,XYn(),olt=O$t,new _N(p$t,(qx(),!0)),hlt=_$t,flt=U$t,llt=q$t,slt=K$t,blt=V$t,wlt=bDt,yjn(),alt=tlt,rlt=Yft,clt=nlt,ult=elt,ilt=Jft}function Hjn(n,t){if(t==n.c)return n.d;if(t==n.d)return n.c;throw hv(new vM("'port' must be either the source port or target port of the edge."))}function Ujn(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 Gjn(n,t,e,i){var r,c,a;for(a2(t,uG(i.Xb(0),30)),a=i.kd(1,i.gc()),c=uG(e.Kb(t),20).Kc();c.Ob();)Gjn(n,(r=uG(c.Pb(),18)).c.i==t?r.d.i:r.c.i,e,a)}function qjn(n){var t;return t=new Ym,vR(n,(GYn(),Emt))?uG(oIn(n,Emt),85):(kS(JJ(new fX(null,new h3(n.j,16)),new tr),new yg(t)),kfn(n,Emt,t),t)}function Xjn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),186),r=e.Math.max(r,a.e),c+=a.b+(i>0?t:0),++i;return new MO(r,c)}function zjn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,6,aFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),BKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Vjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,1,iFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),UKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Wjn(n,t){var e;return n.Db>>16==9?n.Cb.Th(n,9,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),qKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Qjn(n,t){var e;return n.Db>>16==5?n.Cb.Th(n,9,w_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),O_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Jjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,6,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),F_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Yjn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,0,uFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),T_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Zjn(){this.a=new ss,this.g=new dMn,this.j=new dMn,this.b=new Ym,this.d=new dMn,this.i=new dMn,this.k=new Ym,this.c=new Ym,this.e=new Ym,this.f=new Ym}function nEn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;r<c;r++)if(i=zrn(n,r),null==t){if(null==i)return r}else if(xA(t)===xA(i)||udn(t,i))return r;return-1}function tEn(n,t){var e,i;return(e=t.qi(n.a))?(i=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),uct)),m_(sct,i)?jz(n,Hrn(t.qk())):i):null}function eEn(n,t){var e,i;if(t){if(t==n)return!0;for(e=0,i=uG(t,54).Ph();i&&i!=t;i=i.Ph()){if(++e>O0n)return eEn(n,i);if(i==n)return!0}}return!1}function iEn(n){switch(Gx(),n.q.g){case 5:uNn(n,(KQn(),yRt)),uNn(n,KRt);break;case 4:Kxn(n,(KQn(),yRt)),Kxn(n,KRt);break;default:$Qn(n,(KQn(),yRt)),$Qn(n,KRt)}}function rEn(n){switch(Gx(),n.q.g){case 5:k$n(n,(KQn(),kRt)),k$n(n,_Rt);break;case 4:fyn(n,(KQn(),kRt)),fyn(n,_Rt);break;default:DQn(n,(KQn(),kRt)),DQn(n,_Rt)}}function cEn(n){var t,e;(t=uG(oIn(n,(rGn(),Dft)),17))?(e=t.a,kfn(n,(mon(),Qft),0==e?new Upn:new v8(e))):kfn(n,(mon(),Qft),new v8(1))}function aEn(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 oEn(n,t){switch(n.g){case 0:return t==(Gpn(),Imt)?qwt:Xwt;case 1:return t==(Gpn(),Imt)?qwt:Gwt;case 2:return t==(Gpn(),Imt)?Gwt:Xwt;default:return Gwt}}function uEn(n,t){var i,r,c;for(men(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=b7n,r=new Ww(n.a);r.a<r.c.c.length;)i=uG(N3(r),172),c=e.Math.max(c,i.d);n.b=c}function sEn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,12,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),_Kt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function hEn(n,t){var e;return n.Db>>16==11?n.Cb.Th(n,10,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),GKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function fEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,11,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),R_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function lEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,12,p_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),__t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function bEn(n){var t;return 1&n.Bb||!n.r||!n.r.Vh()||(t=uG(n.r,54),n.r=uG(mwn(n,t),142),n.r!=t&&4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.r))),n.r}function wEn(n,t,i){var r;return r=Uhn(cT(eUt,1),I0n,28,15,[BCn(n,(Yrn(),jst),t,i),BCn(n,Est,t,i),BCn(n,Sst,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function dEn(n,t){var e,i,r;if(0!=(r=lyn(n,t)).c.length)for(f$(r,new ti),e=r.c.length,i=0;i<e;i++)YOn(n,(u3(i,r.c.length),uG(r.c[i],293)),m_n(n,r,i))}function gEn(n){var t,e,i;for(i=uG(Y9(n.a,(gPn(),bdt)),15).Kc();i.Ob();)for(t=kz((e=uG(i.Pb(),105)).k).Kc();t.Ob();)pW(n,e,uG(t.Pb(),64),(gon(),Edt),1)}function pEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&n.c==wSn(t,n).c)return!0;return!1}function mEn(n){var t,e;if(n.k==(zIn(),wbt))for(e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)if(!v9(t=uG(N9(e),18))&&t.c.i.c==t.d.i.c)return!0;return!1}function vEn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)(i=v6(t,uG(r.Pb(),17).a))&&Mxn(n,i)}function kEn(){var n;for(IP(),OYn((tQ(),M_t)),sYn(M_t),ojn(M_t),YYn(),nBt=N_t,n=new Ww(gBt);n.a<n.c.c.length;)PWn(uG(N3(n),248),N_t,null);return!0}function yEn(n,t){var e,i,r,c,a,o;return(a=n.h>>19)!=(o=t.h>>19)?o-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function MEn(){MEn=E,W_n(),ost=new mL($2n,ust=dst),Xin(),cst=new mL(D2n,ast=Zut),_kn(),ist=new mL(x2n,rst=Wut),est=new mL(R2n,(qx(),!0))}function TEn(n,t,e){var i,r;i=t*e,F$(n.g,154)?(r=Q6(n)).f.d?r.f.a||(n.d.a+=i+Z2n):(n.d.d-=i+Z2n,n.d.a+=i+Z2n):F$(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function jEn(n,t,i){var r,c,a,o,u;for(c=n[i.g],u=new Ww(t.d);u.a<u.c.c.length;)(a=(o=uG(N3(u),105)).i)&&a.i==i&&(c[r=o.d[i.g]]=e.Math.max(c[r],a.j.b))}function EEn(n,t){var i,r,c,a,o;for(r=0,c=0,i=0,o=new Ww(t.d);o.a<o.c.c.length;)OTn(a=uG(N3(o),315)),r=e.Math.max(r,a.b),c+=a.d+(i>0?n.b:0),++i;t.b=r,t.e=c}function SEn(n){var t,e,i;if(i=n.b,aS(n.i,i.length)){for(e=2*i.length,n.b=Inn(Cat,l1n,303,e,0,1),n.c=Inn(Cat,l1n,303,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)HLn(n,t,t);++n.g}}function PEn(n,t,e,i){var r,c,a,o;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)o=a-t.k+i,eTn(t,r,a)?HMn(n,c,o)||LTn(n,c,o):rTn(t,r,a)&&(_Mn(n,c,o)||NTn(n,c,o))}function CEn(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),mv(n.c,t),!0}function IEn(n,t,e){var i;(i=t.c.i).k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function OEn(n,t,i){var r,c,a,o,u,s;return l_n(),o=t/2,a=i/2,u=1,s=1,(r=e.Math.abs(n.a))>o&&(u=o/r),(c=e.Math.abs(n.b))>a&&(s=a/c),vD(n,e.Math.min(u,s)),n}function AEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),aet),2113))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new rs}function LEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),Drt),2040))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new _s}function NEn(){var n,t;Ftn();try{if(t=uG(ASn((MP(),l_t),lct),2122))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new Nh}function $En(n,t,e){var i,r;return r=n.e,n.e=t,4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),r!=t&&(e=PWn(n,t?bRn(n,t):n.a,e)),e}function DEn(){QE.call(this),this.e=-1,this.a=!1,this.p=j1n,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=j1n}function xEn(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=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function REn(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=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function KEn(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=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function FEn(){FEn=E,klt=wz(Aq(Aq(Aq(new wJ,(uIn(),Slt),(zYn(),owt)),Slt,fwt),Plt,mwt),Plt,Wbt),Mlt=Aq(Aq(new wJ,Slt,Fbt),Slt,Qbt),ylt=wz(new wJ,Plt,Ybt)}function _En(n){var t,e,i,r,c;for(t=uG(oIn(n,(GYn(),$pt)),85),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=uG(i.Pb(),314)).i).c+=c.a,r.d+=c.b,e.c?P_n(e):C_n(e);kfn(n,$pt,null)}function BEn(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 HEn(n,t,e){var i;for(e.Ug("Interactive node placement",1),n.a=uG(oIn(t,(GYn(),kmt)),312),i=new Ww(t.b);i.a<i.c.c.length;)XFn(n,uG(N3(i),30));e.Vg()}function UEn(n){var t,e,i,r,c;if(i=0,r=B3n,n.b)for(t=0;t<360;t++)e=.017453292519943295*t,ZHn(n,n.d,0,0,f7n,e),(c=n.b.Dg(n.d))<r&&(i=e,r=c);ZHn(n,n.d,0,0,f7n,i)}function GEn(n,t){var e,i,r,c;for(c=new Ym,t.e=null,t.f=null,i=new Ww(t.i);i.a<i.c.c.length;)e=uG(N3(i),68),r=uG(cQ(n.g,e.a),42),e.a=AV(e.b),vJ(c,e.a,r);n.g=c}function qEn(n,t,e){var i,r,c,a,o;for(r=(t-n.e)/n.d.c.length,c=0,o=new Ww(n.d);o.a<o.c.c.length;)a=uG(N3(o),315),i=n.b-a.b+e,Xmn(a,a.e+c*r,a.f),VMn(a,r,i),++c}function XEn(n){var t;if(n.f._j(),-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 zEn(n,t){var e,i,r;for(e=MLn(n,0==(r=t.c.length)?"":(u3(0,t.c.length),mK(t.c[0]))),i=1;i<r&&e;++i)e=uG(e,54).Zh((u3(i,t.c.length),mK(t.c[i])));return e}function VEn(n,t){var e,i;for(i=new Ww(t);i.a<i.c.c.length;)e=uG(N3(i),10),n.c[e.c.p][e.p].a=BX(n.i),n.c[e.c.p][e.p].d=uM(n.c[e.c.p][e.p].a),n.c[e.c.p][e.p].b=1}function WEn(n,t){var i,r,c;for(c=0,r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),163),c+=e.Math.pow(EX(i)*jX(i)-t,2);return e.Math.sqrt(c/(n.c.length-1))}function QEn(n,t){var i,r,c,a;for(a=0,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)r=uG(c.Pb(),117),a=e.Math.max(a,r.e.a+r.b.Mf().a);(i=uG(AJ(n.b,t),127)).n.b=0,i.a.a=a}function JEn(n,t){var i,r,c,a;for(i=0,a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)c=uG(a.Pb(),117),i=e.Math.max(i,c.e.b+c.b.Mf().b);(r=uG(AJ(n.b,t),127)).n.d=0,r.a.b=i}function YEn(n,t,e,i){var r,c,a;return a=NBn(n,c=UBn(n,t,e,i)),QCn(n,t,e,i),Ctn(n.b),hZ(),f$(c,new tp(n)),r=NBn(n,c),QCn(n,e,t,i),Ctn(n.b),new WO(xwn(a),xwn(r))}function ZEn(n,t){var e;t.Ug("Delaunay triangulation",1),e=new Zm,Prn(n.i,new Fp(e)),oM(gK(oIn(n,(rsn(),Oht)))),n.e?Qon(n.e,nYn(e)):n.e=nYn(e),t.Vg()}function nSn(n,t,e){var i,r;for(MN(n,n.j+t,n.k+e),r=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));r.e!=r.i.gc();)mN(i=uG(Zkn(r),377),i.a+t,i.b+e);yN(n,n.b+t,n.c+e)}function tSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nmn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nmn(n.d,t,i)}return SCn(n,t,e,i)}function eSn(n,t,e,i){switch(e){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Nyn(n.e,t,i);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Nyn(n.d,t,i)}return phn(n,t,e,i)}function iSn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&iNn(n,r,t)}function rSn(n,t,e){var i,r,c;return n._j(),c=null==t?0:Hon(t),n.f>0&&(r=ZNn(n,(c&vZn)%n.d.length,c,t))?r.nd(e):(i=n.ck(c,t,e),n.c.Fc(i),null)}function cSn(n,t){var e,i,r,c;switch(tdn(n,t).Kl()){case 3:case 2:for(r=0,c=(e=hXn(t)).i;r<c;++r)if(5==sJ(Nen(n,i=uG(zrn(e,r),35))))return i}return null}function aSn(n){var t,e,i,r,c;if(aS(n.f,n.b.length))for(i=Inn($at,l1n,227,2*n.b.length,0,1),n.b=i,r=i.length-1,e=n.a;e!=n;e=e._d())t=(c=uG(e,227)).d&r,c.a=i[t],i[t]=c}function oSn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(CSt),e.Hc((r_n(),cpt))&&gsn(t,ASt),e.Hc(opt)&&gsn(t,NSt),e.Hc(Ygt)&&gsn(t,ISt),e.Hc(npt)&&gsn(t,OSt),t}function uSn(n){if(n<0)throw hv(new vM("The input must be positive"));return n<ENt.length?W4(ENt[n]):e.Math.sqrt(f7n*n)*(pwn(n,n)/gwn(2.718281828459045,n))}function sSn(n,t){var e;if(n.Yi()&&null!=t){for(e=0;e<n.i;++e)if(udn(t,n.g[e]))return!0}else for(e=0;e<n.i;++e)if(xA(n.g[e])===xA(t))return!0;return!1}function hSn(n,t){if(null==t){for(;n.a.Ob();)if(null==uG(n.a.Pb(),44).md())return!0}else for(;n.a.Ob();)if(udn(t,uG(n.a.Pb(),44).md()))return!0;return!1}function fSn(n,t){var e;return t===n||!!F$(t,678)&&(e=uG(t,2046),Fvn(n.g||(n.g=new nb(n)),e.g||(e.g=new nb(e))))}function lSn(n){var t,i,r;for(t="gA",i="vz",r=e.Math.min(n.length,5)-1;r>=0;r--)if(m_(n[r].d,t)||m_(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function bSn(n,t){var i;return _L(n)&&_L(t)&&p0n<(i=n/t)&&i<d0n?i<0?e.Math.ceil(i):e.Math.floor(i):Esn(Yzn(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t,!1))}function wSn(n,t){if(t==n.c.i)return n.d.i;if(t==n.d.i)return n.c.i;throw hv(new vM("'node' must either be the source node or target node of the edge."))}function dSn(n){var t,e,i,r;if(r=uG(oIn(n,(GYn(),Ipt)),36)){for(i=new sj,t=HQ(n.c.i);t!=r;)t=HQ(e=t.e),KR(JF(JF(i,e.n),t.c),t.d.b,t.d.d);return i}return Pbt}function gSn(n){var t;kS(sin(new fX(null,new h3((t=uG(oIn(n,(GYn(),vmt)),337)).d,16)),new Fi),new dg(n)),kS(JJ(new fX(null,new h3(t.d,16)),new _i),new pg(n))}function pSn(n,t){var e,i;for(e=new Fz(ix((t?Xgn(n):qgn(n)).a.Kc(),new h));hDn(e);)if((i=wSn(uG(N9(e),18),n)).k==(zIn(),wbt)&&i.c!=n.c)return i;return null}function mSn(n){var t,i,r;for(i=new Ww(n.p);i.a<i.c.c.length;)(t=uG(N3(i),10)).k==(zIn(),dbt)&&(r=t.o.b,n.i=e.Math.min(n.i,r),n.g=e.Math.max(n.g,r))}function vSn(n,t,e){var i,r,c;for(c=new Ww(t);c.a<c.c.c.length;)i=uG(N3(c),10),n.c[i.c.p][i.p].e=!1;for(r=new Ww(t);r.a<r.c.c.length;)nQn(n,i=uG(N3(r),10),e)}function kSn(n,t,i){var r,c;(r=Hwn(t.j,i.s,i.c)+Hwn(i.e,t.s,t.c))==(c=Hwn(i.j,t.s,t.c)+Hwn(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 ySn(n){var t;t=uG(oIn(uG(hyn(n.b,0),40),(QGn(),pCt)),107),kfn(n,(OQn(),kPt),new MO(0,0)),iUn(new L7,n,t.b+t.c-uM(pK(oIn(n,PPt))),t.d+t.a-uM(pK(oIn(n,IPt))))}function MSn(n,t){var e;if(e=!1,RA(t)&&(e=!0,pQ(n,new QW(mK(t)))),e||F$(t,242)&&(e=!0,pQ(n,new Pb(Q_(uG(t,242))))),!e)throw hv(new pM(Cet))}function TSn(n,t,e,i){var r,c,a;return r=new Ken(n.e,1,10,F$(a=t.c,90)?uG(a,29):(YYn(),x_t),F$(c=e.c,90)?uG(c,29):(YYn(),x_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function jSn(n){var t,e;switch(uG(oIn(HQ(n),(jYn(),lMt)),429).g){case 0:return t=n.n,e=n.o,new MO(t.a+e.a/2,t.b+e.b/2);case 1:return new eN(n.n);default:return null}}function ESn(){ESn=E,Fgt=new rI(q4n,0),Kgt=new rI("LEFTUP",1),Bgt=new rI("RIGHTUP",2),Rgt=new rI("LEFTDOWN",3),_gt=new rI("RIGHTDOWN",4),xgt=new rI("BALANCED",5)}function SSn(n,t,e){var i,r,c;if(0==(i=ugn(n.a[t.p],n.a[e.p]))){if(r=uG(oIn(t,(GYn(),Vpt)),15),c=uG(oIn(e,Vpt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function PSn(n){switch(n.g){case 1:return new So;case 2:return new Po;case 3:return new Eo;case 0:return null;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function CSn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),Czn(n.n),!n.n&&(n.n=new fV(lFt,n,1,7)),void CW(n.n,uG(e,16));case 2:return void Gan(n,mK(e))}bln(n,t,e)}function ISn(n,t,e){switch(t){case 3:return void vcn(n,uM(pK(e)));case 4:return void kcn(n,uM(pK(e)));case 5:return void ycn(n,uM(pK(e)));case 6:return void Mcn(n,uM(pK(e)))}CSn(n,t,e)}function OSn(n,t,e){var i,r;(i=CCn(r=new ny,t,null))&&i.oj(),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(r,0),Ccn(r,1),mdn(r,!0),ddn(r,!0)}function ASn(n,t){var e,i;return F$(e=_P(n.i,t),241)?((i=uG(e,241)).zi(),i.wi()):F$(e,507)?i=uG(e,2037).b:null}function LSn(n,t,e,i){var r,c;return WW(t),WW(e),Ren(!!(c=uG(W_(n.d,t),17)),"Row %s not in %s",t,n.e),Ren(!!(r=uG(W_(n.b,e),17)),"Column %s not in %s",e,n.c),Hhn(n,c.a,r.a,i)}function NSn(n,t,e,i,r,c,a){var o,u,s,h,f;if(f=PTn(o=(s=c==a-1)?i:0,h=r[c]),10!=i&&Uhn(cT(n,a-c),t[c],e[c],o,f),!s)for(++c,u=0;u<h;++u)f[u]=NSn(n,t,e,i,r,c,a);return f}function $Sn(n){if(-1==n.g)throw hv(new xv);n.Xj();try{n.i.gd(n.g),n.f=n.i.j,n.g<n.e&&--n.e,n.g=-1}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}}function DSn(n){var t,e,i;for(i=-1,e=0,t=new Ww(n);t.a<t.c.c.length;){if(uG(N3(t),249).c==(can(),Vjt)){i=0==e?0:e-1;break}e==n.c.length-1&&(i=e),e+=1}return i}function xSn(n){var t,i,r,c;for(c=0,t=0,r=new Ww(n.c);r.a<r.c.c.length;)ycn(i=uG(N3(r),27),n.e+c),Mcn(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 RSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),60)).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;hKn(n)}function KSn(n){var t,e,i;for(e=new Ww(n.a.b);e.a<e.c.c.length;)i=(t=uG(N3(e),86)).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;fKn(n)}function FSn(n){var t,e,i,r,c;for(c=kz(n.k),KQn(),i=0,r=(e=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;i<r;++i)if((t=e[i])!=FRt&&!c.Hc(t))return t;return null}function _Sn(n,t){var e,i;return(i=uG(Rx(lln(JJ(new fX(null,new h3(t.j,16)),new sc))),12))&&(e=uG(zq(i.e,0),18))?uG(oIn(e,(GYn(),imt)),17).a:Uen(n.b)}function BSn(n,t){var e,i,r;for(r=new Ww(t.a);r.a<r.c.c.length;)for(i=uG(N3(r),10),AM(n.d),e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)B$n(n,i,uG(N9(e),18).d.i)}function HSn(n,t){var e,i;for(men(n.b,t),i=new Ww(n.n);i.a<i.c.c.length;)if(-1!=Ten((e=uG(N3(i),209)).c,t,0)){men(e.c,t),xSn(e),0==e.c.c.length&&men(n.n,e);break}EXn(n)}function USn(n,t){var i,r,c,a,o;for(o=n.f,c=0,a=0,r=new Ww(n.a);r.a<r.c.c.length;)oMn(i=uG(N3(r),172),n.e,o),dtn(i,t),a=e.Math.max(a,i.r),c=o+=i.d+n.c;n.d=a,n.b=c}function GSn(n){var t,e;return P6(e=tRn(n))?null:(WW(e),t=uG(KMn(new Fz(ix(e.a.Kc(),new h))),74),lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)))}function qSn(n){return n.o||(n.uk()?n.o=new EQ(n,n,null):n.al()?n.o=new sF(n,null):1==sJ(Nen((gAn(),kBt),n))?n.o=new o8(n):n.o=new hF(n,null)),n.o}function XSn(n,t,e,i){var r,c,a,o,u;e.Xh(t)&&(r=(a=t)?uG(i,54).gi(a):null)&&(u=e.Mh(t),(o=t.t)>1||-1==o?(c=uG(u,15),r.Wb(Vpn(n,c))):r.Wb(oUn(n,uG(u,58))))}function zSn(n,t,e,i){kE();var r=hZn;function c(){for(var n=0;n<r.length;n++)r[n]()}if(n)try{sUt(c)()}catch(a){n(t,a)}else sUt(c)()}function VSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))<0)return!1;return!0}function WSn(n,t){var e,i,r;for(r=new Kw(new Lw(n.b).a.vc().Kc());r.a.Ob();)if(e=uG(r.a.Pb(),44),i=uG(e.ld(),34),NL(t,uG(i,17))>0)return!1;return!0}function QSn(n){var t,e,i,r,c;for(i=new bsn(new Nw(n.b).a);i.b;)t=uG((e=von(i)).ld(),10),c=uG(uG(e.md(),42).a,10),r=uG(uG(e.md(),42).b,8),JF(dL(t.n),JF(D$(c.n),r))}function JSn(n){switch(uG(oIn(n.b,(jYn(),Jyt)),387).g){case 1:kS(YJ(sin(new fX(null,new h3(n.d,16)),new Vr),new Wr),new Qr);break;case 2:gBn(n);break;case 0:mLn(n)}}function YSn(n,t,e){var i,r,c;for(!(i=e)&&(i=new fy),i.Ug("Layout",n.a.c.length),c=new Ww(n.a);c.a<c.c.c.length;){if(r=uG(N3(c),47),i.$g())return;r.Kf(t,i.eh(1))}i.Vg()}function ZSn(){ZSn=E,ZNt=new SO("V_TOP",0),YNt=new SO("V_CENTER",1),JNt=new SO("V_BOTTOM",2),WNt=new SO("H_LEFT",3),VNt=new SO("H_CENTER",4),QNt=new SO("H_RIGHT",5)}function nPn(n){var t;return 64&n.Db?pmn(n):((t=new fx(pmn(n))).a+=" (abstract: ",Lj(t,!!(256&n.Bb)),t.a+=", interface: ",Lj(t,!!(512&n.Bb)),t.a+=")",t.a)}function tPn(n){var t;null==n.c&&(t=xA(n.b)===xA(Dat)?null:n.b,n.d=null==t?IZn:Pz(t)?ux(RY(t)):RA(t)?C1n:Ij(Tbn(t)),n.a=n.a+": "+(Pz(t)?EF(RY(t)):t+""),n.c="("+n.d+") "+n.a)}function ePn(){function n(){try{return(new Map).entries().next().done}catch(n){return!1}}return typeof Map===mZn&&Map.prototype.entries&&n()?Map:IQn()}function iPn(n,t){var e,i,r;for(r=new N4(n.e,0),e=0;r.b<r.d.gc();){if((i=uM((MK(r.b<r.d.gc()),pK(r.d.Xb(r.c=r.b++))))-t)>$9n)return e;i>-1e-6&&++e}return e}function rPn(n,t){var e;t!=n.b?(e=null,n.b&&(e=O1(n.b,n,-4,e)),t&&(e=kyn(t,n,-4,e)),(e=kwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function cPn(n,t){var e;t!=n.f?(e=null,n.f&&(e=O1(n.f,n,-1,e)),t&&(e=kyn(t,n,-1,e)),(e=vwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,0,t,t))}function aPn(n,t,e,i){var r,c,a;return uN(n.e)&&(a=VZ(n,1,r=t.Lk(),t.md(),c=e.md(),r.Jk()?Dqn(n,r,c,F$(r,102)&&!!(uG(r,19).Bb&P0n)):-1,!0),i?i.nj(a):i=a),i}function oPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function uPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function sPn(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?Rz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function hPn(n,t,e){return e.Ug("Tree layout",1),_J(n.b),JV(n.b,(Cjn(),zSt),zSt),JV(n.b,VSt,VSt),JV(n.b,WSt,WSt),JV(n.b,QSt,QSt),n.a=Qzn(n.b,t),YSn(n,t,e.eh(1)),e.Vg(),t}function fPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),QJ(new om(n).a,i)}function lPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),WJ(new Yp(n).a,i)}function bPn(n){if(null!=n&&n.length>0&&33==VJ(n,n.length-1))try{return null==sxn(r1(n,0,n.length-1)).e}catch(t){if(!F$(t=Ehn(t),33))throw hv(t)}return!1}function wPn(n,t,e){var i,r;switch(i=pgn(HQ(t)),o2(r=new lOn,t),e.g){case 1:NLn(r,Gdn(Ipn(i)));break;case 2:NLn(r,Ipn(i))}return kfn(r,(jYn(),QMt),pK(oIn(n,QMt))),r}function dPn(n){var t,e;return t=uG(N9(new Fz(ix(qgn(n.a).a.Kc(),new h))),18),e=uG(N9(new Fz(ix(Xgn(n.a).a.Kc(),new h))),18),oM(gK(oIn(t,(GYn(),pmt))))||oM(gK(oIn(e,pmt)))}function gPn(){gPn=E,wdt=new zC("ONE_SIDE",0),gdt=new zC("TWO_SIDES_CORNER",1),pdt=new zC("TWO_SIDES_OPPOSING",2),ddt=new zC("THREE_SIDES",3),bdt=new zC("FOUR_SIDES",4)}function pPn(n,t){var e,i,r,c;for(c=new Zm,r=0,i=t.Kc();i.Ob();){for(e=xwn(uG(i.Pb(),17).a+r);e.a<n.f&&!SX(n,e.a);)e=xwn(e.a+1),++r;if(e.a>=n.f)break;mv(c.c,e)}return c}function mPn(n,t){var e,i,r;for(i=new Ww(t.a);i.a<i.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(i),10)).a.Kc(),new h));hDn(e);)r=uG(N9(e),18).c.i.p,n.n[r]=n.n[r]-1}function vPn(n){var t;for(t=new Ww(n.e.b);t.a<t.c.c.length;)AWn(n,uG(N3(t),30));kS(JJ(sin(sin(new fX(null,new h3(n.e.b,16)),new qc),new Jc),new Yc),new dp(n))}function kPn(n,t){return!!t&&!n.mj(t)&&(n.i?n.i.nj(t):F$(t,152)?(n.i=uG(t,152),!0):(n.i=new bs,n.i.nj(t)))}function yPn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,3,i,null,c,Dqn(n,i,c,F$(i,102)&&!!(uG(i,19).Bb&P0n)),!0):VZ(n,1,i,i.ik(),c,-1,!0),e?e.nj(r):e=r,e}function MPn(n){if(n=yXn(n,!0),m_(Fnt,n)||m_("1",n))return qx(),eot;if(m_(_nt,n)||m_("0",n))return qx(),tot;throw hv(new PM("Invalid boolean value: '"+n+"'"))}function TPn(n,t,e){var i,r,c;for(r=n.vc().Kc();r.Ob();)if(c=(i=uG(r.Pb(),44)).ld(),xA(t)===xA(c)||null!=t&&udn(t,c))return e&&(i=new VP(i.ld(),i.md()),r.Qb()),i;return null}function jPn(n){var t,e,i;VK(),n.B.Hc((aUn(),tKt))&&(i=n.f.i,t=new qZ(n.a.c),(e=new Dk).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.$f(e))}function EPn(n,t,i,r){var c,a,o;for(o=e.Math.min(i,uqn(uG(n.b,68),t,i,r)),a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),225))!=t&&(o=e.Math.min(o,EPn(c,t,o,r)));return o}function SPn(n){var t,e,i;for(i=Inn(pbt,zZn,199,n.b.c.length,0,2),e=new N4(n.b,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),30),i[e.b-1]=D4(t.a);return i}function PPn(n,t,e){var i,r;null!=(i=uG(ain(n.a,e),34))&&Wpn(uG(ain(n.b,i),67),e,!0),(r=uG(ain(n.b,t),67))||(r=new lS,Akn(n.b,t,r)),s8(r,e,r.c.b,r.c),Akn(n.a,e,t)}function CPn(n,t,e,i,r){var c,a,o,u;for(a=jT(TT(BB(Ryn(e)),i),Ujn(n,e,r)),u=yOn(n,e).Kc();u.Ob();)t[(o=uG(u.Pb(),12)).p]&&(c=t[o.p].i,kD(a.d,new ZX(c,Hdn(a,c))));cmn(a)}function IPn(n,t){this.f=new Ym,this.b=new Ym,this.j=new Ym,this.a=n,this.c=t,this.c>0&&Mjn(this,this.c-1,(KQn(),kRt)),this.c<this.a.length-1&&Mjn(this,this.c+1,(KQn(),_Rt))}function OPn(n,t){var e,i,r,c;for(r=new Ww(t.d);r.a<r.c.c.length;)for(i=uG(N3(r),105),c=uG(cQ(n.c,i),118).o,e=new fS(i.b);e.a<e.c.a.length;)ctn(i,uG(X5(e),64),c)}function APn(n){n.length>0&&n[0].length>0&&(this.c=oM(gK(oIn(HQ(n[0][0]),(GYn(),Wpt))))),this.a=Inn(REt,zZn,2117,n.length,0,2),this.b=Inn(UEt,zZn,2118,n.length,0,2),this.d=new zbn}function LPn(n){return 0!=n.c.length&&((u3(0,n.c.length),uG(n.c[0],18)).c.i.k==(zIn(),wbt)||o9(YJ(new fX(null,new h3(n,16)),new xc),new Rc))}function NPn(n,t){var i,r,c,a,o,u;for(o=GFn(t),c=t.f,u=t.g,a=e.Math.sqrt(c*c+u*u),r=0,i=new Ww(o);i.a<i.c.c.length;)r+=NPn(n,uG(N3(i),27));return e.Math.max(r,a)}function $Pn(){$Pn=E,sRt=new DO(Y2n,0),uRt=new DO("FREE",1),oRt=new DO("FIXED_SIDE",2),rRt=new DO("FIXED_ORDER",3),aRt=new DO("FIXED_RATIO",4),cRt=new DO("FIXED_POS",5)}function DPn(n,t){var e,i,r;if(e=t.qi(n.a))for(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),hct)),i=1;i<(gAn(),yBt).length;++i)if(m_(yBt[i],r))return i;return 0}function xPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function RPn(n){var t,e,i,r;if(null==n)return IZn;for(r=new Ysn(TZn,"[","]"),e=0,i=(t=n).length;e<i;++e)o7(r,""+t[e]);return r.a?0==r.e.length?r.a.a:r.a.a+""+r.e:r.c}function KPn(n){var t,e,i;for(i=new Ysn(TZn,"{","}"),e=n.vc().Kc();e.Ob();)o7(i,E5(n,(t=uG(e.Pb(),44)).ld())+"="+E5(n,t.md()));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function FPn(n){for(var t,e,i,r;!LM(n.o);)e=uG(xV(n.o),42),i=uG(e.a,125),r=hpn(t=uG(e.b,218),i),t.e==i?(Sx(r.g,t),i.e=r.e+t.a):(Sx(r.b,t),i.e=r.e-t.a),kD(n.e.a,i)}function _Pn(n,t){var e,i,r;for(e=null,r=uG(t.Kb(n),20).Kc();r.Ob();)if(i=uG(r.Pb(),18),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 BPn(n,t){var e,i,r;for(i=new Ww(sRn(n,!1,t));i.a<i.c.c.length;)0==(e=uG(N3(i),132)).d?(s2(e,null),h2(e,null)):(r=e.a,s2(e,e.b),h2(e,r))}function HPn(n){var t,e;return gsn(t=new wJ,KSt),(e=uG(oIn(n,(GYn(),Hpt)),21)).Hc((r_n(),opt))&&gsn(t,HSt),e.Hc(Ygt)&&gsn(t,FSt),e.Hc(cpt)&&gsn(t,BSt),e.Hc(npt)&&gsn(t,_St),t}function UPn(n,t,e){var i,r,c,a;for(String.fromCharCode(10),Lpn(n),null==n.k&&(n.k=Inn(xat,zZn,82,0,0,1)),r=0,c=(i=n.k).length;r<c;++r)UPn(i[r],t,"\t"+e);(a=n.f)&&UPn(a,t,e)}function GPn(n){var t,e,i,r;for(Wzn(n),e=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(e);)r=(i=(t=uG(N9(e),18)).c.i==n)?t.d:t.c,i?u2(t,null):c2(t,null),kfn(t,(GYn(),umt),r),nDn(n,r.i)}function qPn(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 XPn(n){var t,e;for(e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)if(!hDn(new Fz(ix(tRn(t=uG(Zkn(e),27)).a.Kc(),new h))))return t;return null}function zPn(){zPn=E,tIt=new ZI("OVERLAP_REMOVAL",0),YCt=new ZI(g7n,1),eIt=new ZI("ROTATION",2),ZCt=new ZI("GRAPH_SIZE_CALCULATION",3),nIt=new ZI("OUTGOING_EDGE_ANGLES",4)}function VPn(){var n;return dFt?uG(jxn((MP(),l_t),aet),2115):(n=uG(F$(U1((MP(),l_t),aet),569)?U1(l_t,aet):new iDn,569),dFt=!0,iWn(n),cZn(n),ojn(n),r2(l_t,aet,n),n)}function WPn(n,t,e){var i,r;if(0==n.j)return e;if(r=uG(Dcn(n,t,e),76),!(i=e.Lk()).rk()||!n.a.am(i))throw hv(new Ky("Invalid entry feature '"+i.qk().zb+"."+i.xe()+"'"));return r}function QPn(n,t){var e,i,r,c,a,o,u;for(o=0,u=(a=n.a).length;o<u;++o)for(r=0,c=(i=a[o]).length;r<c;++r)if(e=i[r],xA(t)===xA(e)||null!=t&&udn(t,e))return!0;return!1}function JPn(n){var t,e,i;return dwn(n,0)>=0?(e=bSn(n,g0n),i=Kmn(n,g0n)):(e=bSn(t=Dz(n,1),5e8),i=Lgn(Nz(i=Kmn(t,5e8),1),E3(n,1))),S3(Nz(i,32),E3(e,L0n))}function YPn(n,t,e){var i;switch(MK(0!=t.b),i=uG(Lrn(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 lW(Fkn(t,0),i),t}function ZPn(n,t,e,i){var r,c,a,o,u;switch(u=n.b,o=ykn(a=(c=t.d).j,u.d[a.g],e),r=JF(D$(c.n),c.a),c.j.g){case 1:case 3:o.a+=r.a;break;case 2:case 4:o.b+=r.b}s8(i,o,i.c.b,i.c)}function nCn(n,t,e){var i,r,c,a;for(a=Ten(n.e,t,0),(c=new Tk).b=e,i=new N4(n.e,a);i.b<i.d.gc();)MK(i.b<i.d.gc()),(r=uG(i.d.Xb(i.c=i.b++),10)).p=e,kD(c.e,r),LQ(i);return c}function tCn(n,t,e,i){var r,c,a,o,u;for(r=null,c=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).i+a.g,n<a.j+a.f+i&&(r?e.i-u<e.i-c&&(r=a):r=a,c=r.i+r.g);return r?c+i:0}function eCn(n,t,e,i){var r,c,a,o,u;for(c=null,r=0,o=new Ww(t);o.a<o.c.c.length;)u=(a=uG(N3(o),27)).j+a.f,n<a.i+a.g+i&&(c?e.j-u<e.j-r&&(c=a):c=a,r=c.j+c.f);return c?r+i:0}function iCn(n){var t,e,i;for(t=!1,i=n.b.c.length,e=0;e<i;e++)Jfn(uG(zq(n.b,e),443))?!t&&e+1<i&&Jfn(uG(zq(n.b,e+1),443))&&(t=!0,uG(zq(n.b,e),443).a=!0):t=!1}function rCn(n,t,e,i,r){var c,a;for(c=0,a=0;a<r;a++)c=Lgn(c,$gn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}function cCn(n,t){var e,i;for(b_n(),cHn(),i=xot,e=n;t>1;t>>=1)1&t&&(i=j5(i,e)),e=1==e.d?j5(e,e):new nkn(FUn(e.a,e.d,Inn(YHt,W1n,28,e.d<<1,15,1)));return i=j5(i,e)}function aCn(){var n,t,e,i;for(aCn=E,but=Inn(eUt,I0n,28,25,15,1),wut=Inn(eUt,I0n,28,33,15,1),i=152587890625e-16,t=32;t>=0;t--)wut[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)but[n]=e,e*=.5}function oCn(n){var t,e;if(oM(gK(zDn(n,(jYn(),sMt)))))for(e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)if(BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,hMt))))return!0;return!1}function uCn(n,t){var e,i,r;FV(n.f,t)&&(t.b=n,i=t.c,-1!=Ten(n.j,i,0)||kD(n.j,i),r=t.d,-1!=Ten(n.j,r,0)||kD(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new vkn(n)),Psn(n.i,e)))}function sCn(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:qdn(e)==r?0:Udn(e)==r?1:$x(n.b.b,qdn(e))?0:1}function hCn(n){var t;this.d=new Ym,this.c=n.c,this.e=n.d,this.b=n.b,this.f=new LX(n.e),this.a=n.a,n.f?this.g=n.f:this.g=new nB(t=uG(Mj(PFt),9),uG(MF(t,t.length),9),0)}function fCn(n,t){var e,i,r,c;!(r=m6(i=n,"layoutOptions"))&&(r=m6(i,het)),r&&(e=null,(c=r)&&(e=new JE(c,Yon(c,Inn($ot,zZn,2,0,6,1)))),e&&z8(e,new rA(c,t)))}function lCn(n){if(F$(n,207))return uG(n,27);if(F$(n,193))return h0(uG(n,123));throw hv(n?new TM("Only support nodes and ports."):new MM(Het))}function bCn(n,t,e,i){return t>=0&&m_(n.substr(t,3),"GMT")||t>=0&&m_(n.substr(t,3),"UTC")?(e[0]=t+3,SUn(n,e,i)):SUn(n,e,i)}function wCn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.a<i.c.c.length;)(r=(e=uG(N3(i),72)).n).a=c,n.i==(KQn(),yRt)?r.b=a+n.j.b-e.o.b:r.b=a,JF(r,t),c+=e.o.a+n.e}function dCn(n,t,e){if(n.b)throw hv(new kM("The task is already done."));return null==n.p&&(n.p=t,n.r=e,n.k&&(n.o=(bS(),Ngn(Bsn(Date.now()),$1n))),!0)}function gCn(n){var t;return t=new _y,null!=n.Pg()&&ZG(t,Iet,n.Pg()),null!=n.xe()&&ZG(t,Bet,n.xe()),null!=n.Og()&&ZG(t,"description",n.Og()),t}function pCn(n,t,e){var i,r,c;return c=n.q,n.q=t,4&n.Db&&!(1&n.Db)&&(r=new lV(n,1,9,c,t),e?e.nj(r):e=r),t?(i=t.c)!=n.r&&(e=n.Yk(i,e)):n.r&&(e=n.Yk(null,e)),e}function mCn(n,t,e){var i,r;for(e=kyn(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function vCn(n,t,e){var i,r;for(e=O1(t,n.e,-1-n.c,e),r=new Gm(new bsn(new Nw(uJ(n.a).a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,n.a),e);return e}function kCn(n,t,e,i){var r,c,a;if(0==i)qGn(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 yCn(n){var t,i,r,c,a;for(t=0,i=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),t=e.Math.max(t,r.d.b),i=e.Math.max(i,r.d.c);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.b=t,r.d.c=i}function MCn(n){var t,i,r,c,a;for(i=0,t=0,a=n.Kc();a.Ob();)r=uG(a.Pb(),117),i=e.Math.max(i,r.d.d),t=e.Math.max(t,r.d.a);for(c=n.Kc();c.Ob();)(r=uG(c.Pb(),117)).d.d=i,r.d.a=t}function TCn(n,t,e,i,r){var c,a;_An(c=uG(l8(JJ(t.Oc(),new _r),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)),a=uG(ssn(n.b,e,i),15),0==r?a.cd(0,c):a.Gc(c)}function jCn(n,t,e){e.Ug("Grow Tree",1),n.b=t.f,oM(gK(oIn(t,(rsn(),Oht))))?(n.c=new et,f2(n,null)):n.c=new et,n.a=!1,AKn(n,t.f),kfn(t,Aht,(qx(),!!n.a)),e.Vg()}function ECn(n){var t,e,i,r;for(t=null,r=new Ww(n.Rf());r.a<r.c.c.length;)e=new gY((i=uG(N3(r),187)).Lf().a,i.Lf().b,i.Mf().a,i.Mf().b),t?bAn(t,e):t=e;return!t&&(t=new cN),t}function SCn(n,t,e,i){return 1==e?(!n.n&&(n.n=new fV(lFt,n,1,7)),Nmn(n.n,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().zk(n,$vn(n),e-iQ(n.ii()),t,i)}function PCn(n,t,e){var i,r,c,a,o;for(i=e.gc(),n._i(n.i+i),(o=n.i-t)>0&&qGn(n.g,t,n.g,t+i,o),a=e.Kc(),n.i+=i,r=0;r<i;++r)c=a.Pb(),yD(n,t,n.Zi(t,c)),n.Mi(t,c),n.Ni(),++t;return 0!=i}function CCn(n,t,e){var i;return t!=n.q?(n.q&&(e=O1(n.q,n,-10,e)),t&&(e=kyn(t,n,-10,e)),e=pCn(n,t,e)):4&n.Db&&!(1&n.Db)&&(i=new lV(n,1,9,t,t),e?e.nj(i):e=i),e}function ICn(n,t,e,i){return CB(!(e&VZn),"flatMap does not support SUBSIZED characteristic"),CB(!(4&e),"flatMap does not support SORTED characteristic"),WW(n),WW(t),new T6(n,t,e,i)}function OCn(n,t){aW(t,"Cannot suppress a null exception."),vG(t!=n,"Exception can not suppress itself."),n.i||(null==n.k?n.k=Uhn(cT(xat,1),zZn,82,0,[t]):n.k[n.k.length]=t)}function ACn(n,t){var e;if(0!=(e=UL(n.b.ag(),t.b.ag())))return e;switch(n.b.ag().g){case 1:case 2:return d$(n.b.Nf(),t.b.Nf());case 3:case 4:return d$(t.b.Nf(),n.b.Nf())}return 0}function LCn(n){var t,e,i;for(i=n.e.c.length,n.a=Jq(YHt,[zZn,W1n],[53,28],15,[i,i],2),e=new Ww(n.c);e.a<e.c.c.length;)t=uG(N3(e),290),n.a[t.c.a][t.d.a]+=uG(oIn(t,(rGn(),$ft)),17).a}function NCn(n,t){var e,i,r,c,a;if(null==n)return null;for(a=Inn(JHt,N1n,28,2*t,15,1),i=0,r=0;i<t;++i)e=n[i]>>4&15,c=15&n[i],a[r++]=JKt[e],a[r++]=JKt[c];return mvn(a,0,a.length)}function $Cn(n){var t,e;return n>=P0n?(t=C0n+(n-P0n>>10&1023)&D1n,e=56320+(n-P0n&1023)&D1n,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&D1n)}function DCn(n,t){var e,i,r,c;return VK(),(r=uG(uG(Y9(n.r,t),21),87)).gc()>=2&&(i=uG(r.Kc().Pb(),117),e=n.u.Hc((eNn(),bRt)),c=n.u.Hc(pRt),!i.a&&!e&&(2==r.gc()||c))}function xCn(n,t,e,i,r){var c,a,o;for(c=zFn(n,t,e,i,r),o=!1;!c;)gxn(n,r,!0),o=!0,c=zFn(n,t,e,i,r);o&&gxn(n,r,!1),0!=(a=Jhn(r)).c.length&&(n.d&&n.d.Gg(a),xCn(n,r,e,i,a))}function RCn(){RCn=E,mxt=new OO(q4n,0),gxt=new OO("DIRECTED",1),vxt=new OO("UNDIRECTED",2),wxt=new OO("ASSOCIATION",3),pxt=new OO("GENERALIZATION",4),dxt=new OO("DEPENDENCY",5)}function KCn(n,t){var e;if(!h0(n))throw hv(new kM(Stt));switch(e=h0(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 FCn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,4,i,c,null,Dqn(n,i,c,F$(i,102)&&!!(uG(i,19).Bb&P0n)),!0):VZ(n,i.tk()?2:1,i,c,i.ik(),-1,!0),e?e.nj(r):e=r,e}function _Cn(n,t){var e,i;for(tJ(t),i=n.b.c.length,kD(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.Ne(zq(n.b,i),t)<=0)return Y8(n.b,e,t),!0;Y8(n.b,e,zq(n.b,i))}return Y8(n.b,i,t),!0}function BCn(n,t,i,r){var c,a;if(c=0,i)c=$bn(n.a[i.g][t.g],r);else for(a=0;a<$st;a++)c=e.Math.max(c,$bn(n.a[a][t.g],r));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function HCn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(KQn(),kRt)&&i.i!=(KQn(),_Rt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function UCn(n){switch(n.g){case 0:return new Uo;case 1:return new qo;default:throw hv(new vM("No implementation is available for the width approximator "+(null!=n.f?n.f:""+n.g)))}}function GCn(n,t,e,i){var r;if(r=!1,RA(i)&&(r=!0,ZG(t,e,mK(i))),r||KA(i)&&(r=!0,GCn(n,t,e,i)),r||F$(i,242)&&(r=!0,vZ(t,e,uG(i,242))),!r)throw hv(new pM(Cet))}function qCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),mBt).length;++i)if(m_(mBt[i],r))return i;return 0}function XCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),vBt).length;++i)if(m_(vBt[i],r))return i;return 0}function zCn(n,t){var e,i,r,c;if(tJ(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 VCn(n){var t,e;switch(e=D$(Gfn(Uhn(cT(PNt,1),zZn,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 WCn(n){var t;for(Pun(),t=uG(N9(new Fz(ix(qgn(n).a.Kc(),new h))),18).c.i;t.k==(zIn(),wbt);)kfn(t,(GYn(),Jpt),(qx(),!0)),t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i}function QCn(n,t,e,i){var r,c,a;for(a=Vwn(t,i).Kc();a.Ob();)r=uG(a.Pb(),12),n.d[r.p]=n.d[r.p]+n.c[e.p];for(c=Vwn(e,i).Kc();c.Ob();)r=uG(c.Pb(),12),n.d[r.p]=n.d[r.p]-n.c[t.p]}function JCn(n,t,e){var i,r;for(r=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));r.e!=r.i.gc();)kN(i=uG(Zkn(r),27),i.i+t,i.j+e);z8((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b),new XO(t,e))}function YCn(n,t,e,i){var r,c;for(r=null==(c=t).d||n.a.Ne(e.d,c.d)>0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.Ne(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 ZCn(n){var t,e,i,r;for(t=new Zm,zV(e=Inn(ZHt,B2n,28,n.a.c.length,16,1),e.length),r=new Ww(n.a);r.a<r.c.c.length;)e[(i=uG(N3(r),125)).d]||(mv(t.c,i),Okn(n,i,e));return t}function nIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),men(n.b.b,r.b),men(n.b.a,uG(r.b,86).d)}function tIn(n,t){var e;t.Ug("Hierarchical port position processing",1),(e=n.b).c.length>0&&fUn((u3(0,e.c.length),uG(e.c[0],30)),n),e.c.length>1&&fUn(uG(zq(e,e.c.length-1),30),n),t.Vg()}function eIn(n){return eNn(),!(qsn(X1(WX(wRt,Uhn(cT(BRt,1),p1n,279,0,[gRt])),n))>1||qsn(X1(WX(bRt,Uhn(cT(BRt,1),p1n,279,0,[lRt,pRt])),n))>1)}function iIn(n,t){F$(U1((MP(),l_t),n),507)?r2(l_t,n,new EA(this,t)):r2(l_t,n,this),HIn(this,t),t==(vj(),y_t)?(this.wb=uG(this,2038),uG(t,2040)):this.wb=(tQ(),M_t)}function rIn(n){var t,e;if(null==n)return null;for(t=null,e=0;e<QKt.length;++e)try{return dP(QKt[e],n)}catch(i){if(!F$(i=Ehn(i),33))throw hv(i);t=i}throw hv(new Pen(t))}function cIn(){cIn=E,nut=Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),tut=Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])}function aIn(n){var t,e,i;(t=m_(typeof t,r2n)?null:new fn)&&(pS(),mQ(e=(i=900)>=$1n?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&SKn(t,e,n.b,"Exception: ",!0))}function oIn(n,t){var e,i;return!n.q&&(n.q=new Ym),null!=(i=cQ(n.q,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e))),e)}function uIn(){uIn=E,Tlt=new gC("P1_CYCLE_BREAKING",0),jlt=new gC("P2_LAYERING",1),Elt=new gC("P3_NODE_ORDERING",2),Slt=new gC("P4_NODE_PLACEMENT",3),Plt=new gC("P5_EDGE_ROUTING",4)}function sIn(n,t){var e;if(Win(),n.c==t.c){if(n.b==t.b||eun(n.b,t.b)){if(e=BL(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return d$(n.b.g,t.b.g)}return ugn(n.c,t.c)}function hIn(n,t){var e,i;if(kIn(n,t))return!0;for(i=new Ww(t);i.a<i.c.c.length;){if(p_n(n,e=uG(N3(i),27),GSn(e)))return!0;if(Zbn(n,e)-n.g<=n.a)return!0}return!1}function fIn(){fIn=E,uBn(),yLt=RLt,mLt=NLt,pLt=ALt,dLt=PLt,gLt=ILt,wLt=new CN(8),bLt=new _N((XYn(),W$t),wLt),vLt=new _N(DDt,8),kLt=DLt,hLt=MLt,fLt=jLt,lLt=new _N(w$t,(qx(),!1))}function lIn(){lIn=E,qNt=new CN(15),GNt=new _N((XYn(),W$t),qNt),zNt=new _N(DDt,15),XNt=new _N(vDt,xwn(0)),FNt=j$t,BNt=_$t,UNt=q$t,xNt=new _N(c$t,Gnt),_Nt=O$t,HNt=U$t,RNt=o$t,KNt=l$t}function bIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function wIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))}function dIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function gIn(n){if(1!=(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i||1!=(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new vM(Get));return lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))}function pIn(n,t,e){var i,r,c;if(++n.j,t>=(r=n.Ej())||t<0)throw hv(new dM(zet+t+Vet+r));if(e>=r||e<0)throw hv(new dM(Wet+e+Vet+r));return t!=e?(c=n.Cj(e),n.qj(t,c),i=c):i=n.xj(e),i}function mIn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Eh();e;e=e.Eh()){if(++t>O0n)return mIn(e);if(i=e,e==n)throw hv(new kM("There is a cycle in the containment hierarchy of "+n))}return i}function vIn(n){var t,e,i;for(i=new Ysn(TZn,"[","]"),e=n.Kc();e.Ob();)o7(i,xA(t=e.Pb())===xA(n)?"(this Collection)":null==t?IZn:cpn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function kIn(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|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(e+1),27)):i|=p_n(n,uG(t.Xb(e),27),uG(t.Xb(0),27));return i}function yIn(n,t){var e;t!=n.a?(e=null,n.a&&(e=uG(n.a,54).Th(n,4,fFt,e)),t&&(e=uG(t,54).Rh(n,4,fFt,e)),(e=ywn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,1,t,t))}function MIn(n,t){var e;t!=n.e?(n.e&&C7(uJ(n.e),n),t&&(!t.b&&(t.b=new Um(new ty)),WF(t.b,n)),(e=$En(n,t,null))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function TIn(n,t){var i;i=t.o,hN(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 jIn(){jIn=E,ydt=Uhn(cT(YRt,1),z4n,64,0,[(KQn(),yRt),kRt,KRt]),kdt=Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt]),Mdt=Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt,yRt]),Tdt=Uhn(cT(YRt,1),z4n,64,0,[_Rt,yRt,kRt])}function EIn(n,t,e,i){var r,c,a,o,u;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(u=n.b,r=c.j,o=null;r!=a.j;)o=0==t?qdn(r):Udn(r),aq(i,JF(ykn(r,u.d[r.g],e),ykn(o,u.d[o.g],e))),r=o}function SIn(n,t,e,i){var r,c,a,o,u;return o=uG((a=Sjn(n.a,t,e)).a,17).a,c=uG(a.b,17).a,i&&(u=uG(oIn(t,(GYn(),lmt)),10),r=uG(oIn(e,lmt),10),u&&r&&(C5(n.b,u,r),o+=n.b.i,c+=n.b.e)),o>c}function PIn(n){var t,e,i,r,c,a,o,u;for(this.a=Fyn(n),this.b=new Zm,i=0,r=(e=n).length;i<r;++i)for(t=e[i],c=new Zm,kD(this.b,c),o=0,u=(a=t).length;o<u;++o)kD(c,new Z_(a[o].j))}function CIn(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=WYn(n.d,i,r),c+=kQ(n.a,i,(KQn(),kRt)),c+=kQ(n.a,r,_Rt)):c=ktn(n.a,i,r)),n.c[t]&&(c+=k7(n.a,i)),c}function IIn(n,t,e,i,r){var c,a,o,u;for(u=null,o=new Ww(i);o.a<o.c.c.length;)if((a=uG(N3(o),453))!=e&&-1!=Ten(a.e,r,0)){u=a;break}c2(c=K9(r),e.b),u2(c,u.b),UNn(n.a,r,new $B(c,t,e.f))}function OIn(n){var t,i,r,c;if(fN(uG(oIn(n.b,(jYn(),Byt)),88)))return 0;for(t=0,r=new Ww(n.a);r.a<r.c.c.length;)(i=uG(N3(r),10)).k==(zIn(),dbt)&&(c=i.o.a,t=e.Math.max(t,c));return t}function AIn(n){for(;0!=n.g.c&&0!=n.d.c;)GK(n.g).c>GK(n.d).c?(n.i+=n.g.c,Bmn(n.d)):GK(n.d).c>GK(n.g).c?(n.e+=n.d.c,Bmn(n.g)):(n.i+=TX(n.g),n.e+=TX(n.d),Bmn(n.g),Bmn(n.d))}function LIn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new A2((_7(),$St),t,c,1),new A2($St,c,a,1),r=new Ww(e);r.a<r.c.c.length;)(i=uG(N3(r),118))!=c&&i!=t&&i!=a&&(OXn(n.a,i,t),OXn(n.a,i,a))}function NIn(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=x9n*n.b+.9*t,n.f=x9n*n.b+.9*i):(n.b=.5*(t+r),n.g=x9n*n.b+.9*r,n.f=x9n*n.b+.9*t)}function $In(n){var t,e,i,r;if(0!=n.b){for(t=new lS,r=Fkn(n,0);r.b!=r.d.c;)Qon(t,Lhn(i=uG(I6(r),40))),(e=i.e).a=uG(oIn(i,(OQn(),GPt)),17).a,e.b=uG(oIn(i,qPt),17).a;return t}return new lS}function DIn(n){switch(uG(oIn(n,(jYn(),gMt)),171).g){case 1:kfn(n,gMt,(Gpn(),Omt));break;case 2:kfn(n,gMt,(Gpn(),Amt));break;case 3:kfn(n,gMt,(Gpn(),Cmt));break;case 4:kfn(n,gMt,(Gpn(),Imt))}}function xIn(n,t,e){var i;e.Ug("Self-Loop routing",1),i=mgn(t),XA(oIn(t,(K7(),jNt))),kS(YJ(JJ(JJ(sin(new fX(null,new h3(t.b,16)),new qi),new Xi),new zi),new Vi),new OC(n,i)),e.Vg()}function RIn(){RIn=E,Vgt=new cI(q4n,0),qgt=new cI(z2n,1),Wgt=new cI(V2n,2),zgt=new cI("LEFT_RIGHT_CONSTRAINT_LOCKING",3),Xgt=new cI("LEFT_RIGHT_CONNECTION_LOCKING",4),Ggt=new cI(K6n,5)}function KIn(n,t,i){var r,c,a,o,u,s,h;u=i.a/2,a=i.b/2,s=1,h=1,(r=e.Math.abs(t.a-n.a))>u&&(s=u/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),o=e.Math.min(s,h),n.a+=o*(t.a-n.a),n.b+=o*(t.b-n.b)}function FIn(n,t,e,i,r){var c,a;for(a=!1,c=uG(zq(e.b,0),27);Sqn(n,t,c,i,r)&&(a=!0,HSn(e,c),0!=e.b.c.length);)c=uG(zq(e.b,0),27);return 0==e.b.c.length&&uEn(e.j,e),a&&OTn(t.q),a}function _In(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(VRn(n,i,r=uG(I6(c),8)))return!0;i=r}return!!VRn(n,i,e)}function BIn(n,t,e,i){return 0==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),G_(n.o,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().Ak(n,$vn(n),e-iQ(n.ii()),t,i)}function HIn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=uG(n.sb,54).Th(n,1,sFt,e)),t&&(e=uG(t,54).Rh(n,1,sFt,e)),(e=Jwn(n,t,e))&&e.oj()):4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function UIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need an end point."));e=$cn(t,"x"),mcn(new rm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new cm(n).a,(tJ(i),i))}function GIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need a start point."));e=$cn(t,"x"),Tcn(new tm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new em(n).a,(tJ(i),i))}function qIn(n,t){var e,i,r,c,a;for(i=0,c=xln(n).length;i<c;++i)aIn(t);for(a=!Nut&&n.e?Nut?null:n.d:null;a;){for(e=0,r=xln(a).length;e<r;++e)aIn(t);a=!Nut&&a.e?Nut?null:a.d:null}}function XIn(n,t){var e,i;i=uG(oIn(t,(jYn(),JMt)),101),kfn(t,(GYn(),smt),i),(e=t.e)&&(kS(new fX(null,new h3(e.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(e.b,16)),new dt),new Ud(n)))}function zIn(){zIn=E,dbt=new SC("NORMAL",0),wbt=new SC("LONG_EDGE",1),lbt=new SC("EXTERNAL_PORT",2),gbt=new SC("NORTH_SOUTH_PORT",3),bbt=new SC("LABEL",4),fbt=new SC("BREAKING_POINT",5)}function VIn(n){var t,e,i,r;if(t=!1,vR(n,(GYn(),$pt)))for(e=uG(oIn(n,$pt),85),r=new Ww(n.j);r.a<r.c.c.length;)qxn(i=uG(N3(r),12))&&(t||(XLn(HQ(n)),t=!0),_mn(uG(e.xc(i),314)))}function WIn(n){var t,e,i;return i=gCn(n),null!=n.e&&ZG(i,_et,n.e),!!n.k&&ZG(i,"type",MR(n.k)),!pE(n.j)&&(e=new Ib,nrn(i,ket,e),t=new Em(e),z8(n.j,t)),i}function QIn(n){var t,e,i,r;for(r=jQ((man(n.gc(),"size"),new QM),123),i=!0,e=Mz(n).Kc();e.Ob();)t=uG(e.Pb(),44),i||(r.a+=TZn),i=!1,QA(jQ(QA(r,t.ld()),61),t.md());return(r.a+="}",r).a}function JIn(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),p$(e&f0n,i&f0n,r&l0n)}function YIn(n){if(null==rot&&(rot=new RegExp("^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$")),!rot.test(n))throw hv(new ZM(y0n+n+'"'));return parseFloat(n)}function ZIn(n,t){var e,i,r,c;for(i=(1==t?$lt:Nlt).a.ec().Kc();i.Ob();)for(e=uG(i.Pb(),88),c=uG(Y9(n.f.c,e),21).Kc();c.Ob();)r=uG(c.Pb(),42),kD(n.b.b,uG(r.b,86)),kD(n.b.a,uG(r.b,86).d)}function nOn(n,t){var e,i,r,c;for(c=t.b.j,n.a=Inn(YHt,W1n,28,c.c.length,15,1),r=0,i=0;i<c.c.length;i++)u3(i,c.c.length),0==(e=uG(c.c[i],12)).e.c.length&&0==e.g.c.length?r+=1:r+=3,n.a[i]=r}function tOn(){tOn=E,Egt=new eI("ALWAYS_UP",0),jgt=new eI("ALWAYS_DOWN",1),Pgt=new eI("DIRECTION_UP",2),Sgt=new eI("DIRECTION_DOWN",3),Igt=new eI("SMART_UP",4),Cgt=new eI("SMART_DOWN",5)}function eOn(n,t){if(n<0||t<0)throw hv(new vM("k and n must be positive"));if(t>n)throw hv(new vM("k must be smaller than n"));return 0==t||t==n?1:0==n?0:uSn(n)/(uSn(t)*uSn(n-t))}function iOn(n,t){var e,i,r,c;for(e=new jN(n);null!=e.g||e.c?null==e.g||0!=e.i&&uG(e.g[e.i-1],51).Ob():O0(e);)if(F$(c=uG(Wxn(e),58),167))for(i=uG(c,167),r=0;r<t.length;r++)t[r].Kg(i)}function rOn(n){var t;return 64&n.Db?Egn(n):((t=new fx(Egn(n))).a+=" (height: ",Oj(t,n.f),t.a+=", width: ",Oj(t,n.g),t.a+=", x: ",Oj(t,n.i),t.a+=", y: ",Oj(t,n.j),t.a+=")",t.a)}function cOn(n){var t,e,i,r,c,a;for(t=new u8,r=0,c=(i=n).length;r<c;++r)if(null!=Akn(t,a=WW((e=i[r]).ld()),WW(e.md())))throw hv(new vM("duplicate key: "+a));this.b=(hZ(),new Vw(t))}function aOn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],o7(c,String.fromCharCode(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oOn(){oOn=E,zin(),sft=new mL(J3n,hft=pft),xwn(1),uft=new mL(Y3n,xwn(300)),xwn(0),bft=new mL(Z3n,xwn(0)),new Jm,wft=new mL(n4n,t4n),new Jm,fft=new mL(e4n,5),dft=pft,lft=gft}function uOn(n,t){var e;if(null!=t&&!n.c.Hk().fk(t))throw e=F$(t,58)?uG(t,58).Dh().zb:Ij(Tbn(t)),hv(new mM(Gtt+n.c.xe()+"'s type '"+n.c.Hk().xe()+"' does not permit a value of type '"+e+"'"))}function sOn(n,t,e){var i,r;for(r=new N4(n.b,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),xA(oIn(i=uG(r.d.Xb(r.c=r.b++),72),(GYn(),omt)))===xA(t)&&(pAn(i.n,HQ(n.c.i),e),LQ(r),kD(t.b,i))}function hOn(n){var t,i;return i=e.Math.sqrt((null==n.k&&(n.k=aun(n,new vc)),uM(n.k)/(n.b*(null==n.g&&(n.g=cun(n,new mc)),uM(n.g))))),t=pz(Bsn(e.Math.round(i))),t=e.Math.min(t,n.f)}function fOn(){var n,t,e;for(t=0,n=0;n<1;n++){if(0==(e=U$n((s3(n,1),"X".charCodeAt(n)))))throw hv(new CM((s3(n,2),"Unknown Option: "+"X".substr(n))));t|=e}return t}function lOn(){Lun(),LF.call(this),this.j=(KQn(),FRt),this.a=new sj,new $k,this.f=(man(2,g1n),new R7(2)),this.e=(man(4,g1n),new R7(4)),this.g=(man(4,g1n),new R7(4)),this.b=new LC(this.e,this.g)}function bOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.c.i,(n!=(Gpn(),Cmt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Imt)}function wOn(n,t){var e;return!oM(gK(oIn(t,(GYn(),pmt))))&&(e=t.d.i,(n!=(Gpn(),Omt)||e.k!=(zIn(),bbt))&&uG(oIn(e,(jYn(),gMt)),171)!=Amt)}function dOn(n,t){var e,i,r,c,a,o,u;for(a=n.d,u=n.o,o=new gY(-a.b,-a.d,a.b+u.a+a.c,a.d+u.b+a.a),r=0,c=(i=t).length;r<c;++r)(e=i[r])&&bAn(o,e.i);a.b=-o.c,a.d=-o.d,a.c=o.b-a.b-u.a,a.a=o.a-a.d-u.b}function gOn(n,t){if(t.a)switch(uG(oIn(t.b,(GYn(),smt)),101).g){case 0:case 1:JSn(t);case 2:kS(new fX(null,new h3(t.d,16)),new Ni),tDn(n.a,t)}else kS(new fX(null,new h3(t.d,16)),new Ni)}function pOn(){pOn=E,iLt=new bO("CENTER_DISTANCE",0),rLt=new bO("CIRCLE_UNDERLAP",1),oLt=new bO("RECTANGLE_UNDERLAP",2),cLt=new bO("INVERTED_OVERLAP",3),aLt=new bO("MINIMUM_ROOT_DISTANCE",4)}function mOn(n){var t,e,i,r;if(L_n(),null==n)return null;for(i=n.length,t=Inn(JHt,N1n,28,2*i,15,1),e=0;e<i;e++)(r=n[e])<0&&(r+=256),t[2*e]=mHt[r>>4],t[2*e+1]=mHt[15&r];return mvn(t,0,t.length)}function vOn(n){var t;switch(TJ(),n.c.length){case 0:return Eat;case 1:return fq((t=uG(ULn(new Ww(n)),44)).ld(),t.md());default:return new xy(uG(Ekn(n,Inn(Sat,c1n,44,n.c.length,0,1)),173))}}function kOn(n){var t,e,i,r,c;for(t=new ND,e=new ND,A6(t,n),A6(e,n);e.b!=e.c;)for(c=new Ww(uG(xV(e),36).a);c.a<c.c.c.length;)(r=uG(N3(c),10)).e&&(A6(t,i=r.e),A6(e,i));return t}function yOn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),Mbt));case 2:return YU(n.j,(Lun(),kbt));case 3:return YU(n.j,(Lun(),jbt));case 4:return YU(n.j,(Lun(),Ebt));default:return hZ(),hZ(),zot}}function MOn(n,t){var e,i,r;e=PG(t,n.e),i=uG(cQ(n.g.f,e),17).a,r=n.a.c.length-1,0!=n.a.c.length&&uG(zq(n.a,r),294).c==i?(++uG(zq(n.a,r),294).a,++uG(zq(n.a,r),294).b):kD(n.a,new $R(i))}function TOn(n,t,e){var i,r;return 0!=(i=CBn(n,t,e))?i:vR(t,(GYn(),imt))&&vR(e,imt)?((r=d$(uG(oIn(t,imt),17).a,uG(oIn(e,imt),17).a))<0?sHn(n,t,e):r>0&&sHn(n,e,t),r):j$n(n,t,e)}function jOn(){jOn=E,XYn(),BIt=mDt,VIt=DDt,$It=_$t,DIt=U$t,xIt=q$t,NIt=K$t,RIt=V$t,_It=bDt,EHn(),AIt=dIt,LIt=gIt,UIt=MIt,XIt=EIt,GIt=TIt,qIt=jIt,KIt=mIt,FIt=kIt,HIt=yIt,zIt=SIt,WIt=CIt,OIt=wIt}function EOn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(l3(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=uXn(n,r,!1)).b<=r&&e.a<=t?(a=r,c=r):i=r,r=(c-i)/2+i;return a}function SOn(n,t,e){dCn(e,"Recursive Graph Layout",t_n(n,t,!0)),iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new Nl])),vnn(t,(XYn(),yDt))||iOn(t,Uhn(cT(nNt,1),EZn,536,0,[new wu])),nZn(n,t,null,e),POn(e)}function POn(n){var t;if(null==n.p)throw hv(new kM("The task has not begun yet."));n.b||(n.k&&(bS(),t=Ngn(Bsn(Date.now()),$1n),n.q=1e-9*W4($gn(t,n.o))),n.c<n.r&&Ban(n,n.r-n.c),n.b=!0)}function COn(n){var t,e,i;for(aq(i=new Uk,new MO(n.j,n.k)),e=new DD((!n.a&&(n.a=new MD(eFt,n,5)),n.a));e.e!=e.i.gc();)aq(i,new MO((t=uG(Zkn(e),377)).a,t.b));return aq(i,new MO(n.b,n.c)),i}function IOn(n,t,e,i,r){var c,a,o,u;if(r)for(u=((c=new Gz(r.a.length)).b-c.a)*c.c<0?(CP(),XHt):new xD(c);u.Ob();)o=v6(r,uG(u.Pb(),17).a),qUn((a=new PY(n,t,e,i)).a,a.b,a.c,a.d,o)}function OOn(n,t){var e;if(xA(n)===xA(t))return!0;if(F$(t,21)){e=uG(t,21);try{return n.gc()==e.gc()&&n.Ic(e)}catch(i){if(F$(i=Ehn(i),169)||F$(i,212))return!1;throw hv(i)}}return!1}function AOn(n,t,e,i,r,c){switch(this.c=n,t.g){case 2:if(n.a.Ne(r,e)<0)throw hv(new vM(Y0n+r+Z0n+e));break;case 1:n.a.Ne(r,r);break;case 3:n.a.Ne(e,e)}this.f=t,this.b=e,this.a=i,this.e=r,this.d=c}function LOn(n,t){var i;kD(n.d,t),i=t.Mf(),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 NOn(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 $On(n,t,e){var i,r,c;for(r=new Fz(ix(Ggn(e).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||!v9(i)&&i.c.i.c==i.d.i.c||(c=aRn(n,i,e,new Ck)).c.length>1&&mv(t.c,c)}function DOn(n,t,e,i,r){if(i<t||r<e)throw hv(new vM("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 xOn(n){if(F$(n,143))return dKn(uG(n,143));if(F$(n,233))return Mpn(uG(n,233));if(F$(n,23))return WIn(uG(n,23));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[n])))))}function ROn(n,t,e,i,r){var c,a,o;for(c=!0,a=0;a<i;a++)c&=0==e[a];if(0==r)qGn(e,i,n,0,t),a=t;else{for(o=32-r,c&=!(e[a]<<o),a=0;a<t-1;a++)n[a]=e[a+i]>>>r|e[a+i+1]<<o;n[a]=e[a+i]>>>r,++a}return c}function KOn(n,t,e,i){var r,c;if(t.k==(zIn(),wbt))for(c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if((r=uG(N9(c),18)).c.i.k==wbt&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function FOn(n,t){var e,i,r,c;return t&=63,e=n.h&l0n,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),p$(i&f0n,r&f0n,c&l0n)}function _On(n,t,e,i){var r;this.b=i,this.e=n==(ean(),BEt),r=t[e],this.d=Jq(ZHt,[zZn,B2n],[183,28],16,[r.length,r.length],2),this.a=Jq(YHt,[zZn,W1n],[53,28],15,[r.length,r.length],2),this.c=new IPn(t,e)}function BOn(n){var t,e,i;for(n.k=new L2((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,n.j.c.length),i=new Ww(n.j);i.a<i.c.c.length;)t=(e=uG(N3(i),113)).d.j,UNn(n.k,t,e);n.e=zRn(kz(n.k))}function HOn(n,t){var e,i,r;FV(n.d,t),e=new ya,vJ(n.c,t,e),e.f=uwn(t.c),e.a=uwn(t.d),e.d=(uFn(),(r=t.c.i.k)==(zIn(),dbt)||r==fbt),e.e=(i=t.d.i.k)==dbt||i==fbt,e.b=t.c.j==(KQn(),_Rt),e.c=t.d.j==kRt}function UOn(n){var t,e,i,r,c;for(c=vZn,r=vZn,i=new Ww(Ebn(n));i.a<i.c.c.length;)t=(e=uG(N3(i),218)).e.e-e.d.e,e.e==n&&t<r?r=t:t<c&&(c=t);return r==vZn&&(r=-1),c==vZn&&(c=-1),new WO(xwn(r),xwn(c))}function GOn(n,t){var i,r,c;return c=B3n,myn(),r=Nht,c=e.Math.abs(n.b),(i=e.Math.abs(t.f-n.b))<c&&(c=i,r=$ht),(i=e.Math.abs(n.a))<c&&(c=i,r=Dht),(i=e.Math.abs(t.g-n.a))<c&&(c=i,r=Lht),r}function qOn(n,t){var e,i,r;for(e=t.a.o.a,r=new Jw(new C2(HQ(t.a).b,t.c,t.f+1));r.b<r.d.gc();)if(MK(r.b<r.d.gc()),(i=uG(r.d.Xb(r.c=r.b++),30)).c.a>=e)return YOn(n,t,i.p),!0;return!1}function XOn(n,t,e,i){var r,c,a,o,u,s;for(a=e.length,c=0,r=-1,s=Tin((s3(t,n.length+1),n.substr(t)),(cB(),out)),o=0;o<a;++o)(u=e[o].length)>c&&IV(s,Tin(e[o],out))&&(r=o,c=u);return r>=0&&(i[0]=t+c),r}function zOn(n){var t;return 64&n.Db?rOn(n):(t=new lx(Ftt),!n.a||JA(JA((t.a+=' "',t),n.a),'"'),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VOn(n,t,e){var i,r,c,a,o;for(o=VKn(n.e.Dh(),t),r=uG(n.g,124),i=0,a=0;a<n.i;++a)if(c=r[a],o.am(c.Lk())){if(i==e)return e_n(n,a),PP(),uG(t,69).xk()?c:c.md();++i}throw hv(new dM(Hit+e+Vet+i))}function WOn(n){var t,e,i;if(2==(t=n.c)||7==t||1==t)return QYn(),QYn(),OHt;for(i=eYn(n),e=null;2!=(t=n.c)&&7!=t&&1!=t;)e||(QYn(),QYn(),vzn(e=new QN(1),i),i=e),vzn(e,eYn(n));return i}function QOn(n,t,e){return n<0||n>e?iLn(n,e,"start index"):t<0||t>e?iLn(t,e,"end index"):LBn("end index (%s) must not be less than start index (%s)",Uhn(cT(dat,1),EZn,1,5,[xwn(t),xwn(n)]))}function JOn(n,t){var e,i,r,c;for(i=0,r=n.length;i<r;i++){c=n[i];try{c[1]?c[0].Um()&&(t=QX(t,c)):c[0].Um()}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);e=a,XM(),o1(F$(e,486)?uG(e,486).ke():e)}}return t}function YOn(n,t,i){var r,c;for(i!=t.c+t.b.gc()&&PXn(t.a,vsn(t,i-t.c)),c=t.a.c.p,n.a[c]=e.Math.max(n.a[c],t.a.o.a),r=uG(oIn(t.a,(GYn(),gmt)),15).Kc();r.Ob();)kfn(uG(r.Pb(),72),Hwt,(qx(),!0))}function ZOn(n,t){var i,r,c;c=$Kn(t),kfn(t,(GYn(),tmt),c),c&&(r=vZn,FX(n.f,c)&&(r=uG(DA(FX(n.f,c)),17).a),oM(gK(oIn(i=uG(zq(t.g,0),18),pmt)))||vJ(n,c,xwn(e.Math.min(uG(oIn(i,imt),17).a,r))))}function nAn(n,t,e){var i,r,c,a;for(t.p=-1,a=jmn(t,(can(),Wjt)).Kc();a.Ob();)for(r=new Ww(uG(a.Pb(),12).g);r.a<r.c.c.length;)t!=(c=(i=uG(N3(r),18)).d.i)&&(c.p<0?e.Fc(i):c.p>0&&nAn(n,c,e));t.p=0}function tAn(n){var t;this.c=new lS,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 nB(t=uG(Mj(MNt),9),uG(MF(t,t.length),9),0),this.g=n.f}function eAn(n){var t,e,i,r;for(t=jQ(JA(new lx("Predicates."),"and"),40),e=!0,r=new Jw(n);r.b<r.d.gc();)MK(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 iAn(n,t,e){var i,r,c;if(!(e<=t+2))for(r=(e-t)/2|0,i=0;i<r;++i)u3(t+i,n.c.length),c=uG(n.c[t+i],12),Y8(n,t+i,(u3(e-i-1,n.c.length),uG(n.c[e-i-1],12))),u3(e-i-1,n.c.length),n.c[e-i-1]=c}function rAn(n,t,e){var i,r,c,a,o,u,s;o=(c=n.d.p).e,u=c.r,n.g=new R_(u),i=(a=n.d.o.c.p)>0?o[a-1]:Inn(pbt,e6n,10,0,0,1),r=o[a],s=a<o.length-1?o[a+1]:Inn(pbt,e6n,10,0,0,1),t==e-1?j0(n.g,r,s):j0(n.g,i,r)}function cAn(n){var t;this.j=new Zm,this.f=new ek,this.b=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),this.d=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.g=n}function aAn(n,t){var e,i,r;if(0!=t.c.length){for(e=hIn(n,t),r=!1;!e;)gxn(n,t,!0),r=!0,e=hIn(n,t);r&&gxn(n,t,!1),i=Jhn(t),n.b&&n.b.Gg(i),n.a=Zbn(n,(u3(0,t.c.length),uG(t.c[0],27))),aAn(n,i)}}function oAn(n,t){var e,i,r;if(i=ern(n.Dh(),t),(e=t-n.ji())<0){if(!i)throw hv(new vM(Vtt+t+Wtt));if(!i.rk())throw hv(new vM(Gtt+i.xe()+qtt));(r=n.Ih(i))>=0?n.ki(r):zLn(n,i)}else sdn(n,e,i)}function uAn(n){var t,e;if(e=null,t=!1,F$(n,211)&&(t=!0,e=uG(n,211).a),t||F$(n,263)&&(t=!0,e=""+uG(n,263).a),t||F$(n,493)&&(t=!0,e=""+uG(n,493).a),!t)throw hv(new pM(Cet));return e}function sAn(n,t,e){var i,r,c,a,o,u;for(u=VKn(n.e.Dh(),t),i=0,o=n.i,r=uG(n.g,124),a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())){if(e==i)return a;++i,o=a+1}if(e==i)return o;throw hv(new dM(Hit+e+Vet+i))}function hAn(n,t){var i,r,c;if(0==n.f.c.length)return null;for(c=new cN,i=new Ww(n.f);i.a<i.c.c.length;)r=uG(N3(i),72).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 fAn(n){var t,e,i;for(Qon(e=new lS,n.o),i=new Ok;0!=e.b;)gJn(n,t=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),515),!0)&&kD(i.a,t);for(;0!=i.a.c.length;)gJn(n,t=uG(obn(i),515),!1)}function lAn(){lAn=E,yNt=new EO(Y2n,0),wNt=new EO("BOOLEAN",1),mNt=new EO("INT",2),kNt=new EO("STRING",3),dNt=new EO("DOUBLE",4),gNt=new EO("ENUM",5),pNt=new EO("ENUMSET",6),vNt=new EO("OBJECT",7)}function bAn(n,t){var i,r,c,a,o;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),(o=e.Math.max(n.d+n.a,t.d+t.a))<a&&(i=a,a=o,o=i),LG(n,r,a,c-r,o-a)}function wAn(n,t){var e,i;if(n.f){for(;t.Ob();)if(F$(i=(e=uG(t.Pb(),76)).Lk(),102)&&uG(i,19).Bb&Qtt&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Ub(),!0;return!1}return t.Ob()}function dAn(n,t){var e,i;if(n.f){for(;t.Sb();)if(F$(i=(e=uG(t.Ub(),76)).Lk(),102)&&uG(i,19).Bb&Qtt&&(!n.e||i.pk()!=tFt||0!=i.Lj())&&null!=e.md())return t.Pb(),!0;return!1}return t.Sb()}function gAn(){gAn=E,vBt=Uhn(cT($ot,1),zZn,2,6,[nct,tct,ect,ict,rct,cct,_et]),mBt=Uhn(cT($ot,1),zZn,2,6,[nct,"empty",tct,jrt,"elementOnly"]),yBt=Uhn(cT($ot,1),zZn,2,6,[nct,"preserve","replace",act]),kBt=new HG}function pAn(n,t,e){var i,r,c;if(t!=e){i=t;do{JF(n,i.c),(r=i.e)&&(KR(n,(c=i.d).b,c.d),JF(n,r.n),i=HQ(r))}while(r);i=e;do{YF(n,i.c),(r=i.e)&&(HR(n,(c=i.d).b,c.d),YF(n,r.n),i=HQ(r))}while(r)}}function mAn(n,t,e,i){var r,c,a,o,u;if(i.f.c+i.i.c==0)for(o=0,u=(a=n.a[n.c]).length;o<u;++o)vJ(i,c=a[o],new Uun(n,c,e));return(r=uG(DA(FX(i.f,t)),677)).b=0,r.c=r.f,0==r.c||Pw(uG(zq(r.a,r.b),294)),r}function vAn(){vAn=E,Hdt=new QC("MEDIAN_LAYER",0),Gdt=new QC("TAIL_LAYER",1),Bdt=new QC("HEAD_LAYER",2),Udt=new QC("SPACE_EFFICIENT_LAYER",3),qdt=new QC("WIDEST_LAYER",4),_dt=new QC("CENTER_LAYER",5)}function kAn(n){var t,e,i,r;for(n.e=0,r=Fkn(n.f,0);r.b!=r.d.c;)(i=uG(I6(r),10)).p>=n.d.b.c.length&&((t=new bQ(n.d)).p=i.p-1,kD(n.d.b,t),(e=new bQ(n.d)).p=i.p,kD(n.d.b,e)),a2(i,uG(zq(n.d.b,i.p),30))}function yAn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new L7),aq(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=uG(c.Pb(),65)).b!=t&&yAn(n,r.b,i),r.c!=t&&yAn(n,r.c,i),aq(i.a,r);return i}return null}function MAn(n){switch(n.g){case 0:case 1:case 2:return KQn(),yRt;case 3:case 4:case 5:return KQn(),KRt;case 6:case 7:case 8:return KQn(),_Rt;case 9:case 10:case 11:return KQn(),kRt;default:return KQn(),FRt}}function TAn(n,t){var e;return 0!=n.c.length&&(e=Imn((u3(0,n.c.length),uG(n.c[0],18)).c.i),n2(),e==(Yyn(),wjt)||e==bjt||o9(YJ(new fX(null,new h3(n,16)),new Kc),new up(t)))}function jAn(n,t){if(F$(t,207))return KN(n,uG(t,27));if(F$(t,193))return FN(n,uG(t,123));if(F$(t,452))return RN(n,uG(t,166));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function EAn(n,t,e){var i,r;if(this.f=n,e7(e,r=(i=uG(cQ(n.b,t),260))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++<r;)jin(this);else for(this.c=i?i.b:null;e-- >0;)Ein(this);this.b=t,this.a=null}function SAn(n,t){var e,i;t.a?WKn(n,t):(!!(e=uG(jS(n.b,t.b),60))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=uG(TS(n.b,t.b),60))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),sD(n.b,t.b))}function PAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).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((Qmn(),JRt))&&vBn(n,t),i=Iyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.a=i}function CAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).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((Qmn(),JRt))&&kBn(n,t),i=Cyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.b=i}function IAn(n,t){var e,i,r,c;for(c=new Zm,i=new Ww(t);i.a<i.c.c.length;)kD(c,new fC(e=uG(N3(i),68),!0)),kD(c,new fC(e,!1));(r=new _Z(n)).a.a.$b(),I4(c,n.b,new IM(Uhn(cT(Hut,1),EZn,693,0,[r])))}function OAn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;return o=n.a,f=n.b,u=t.a,l=t.b,s=e.a,b=e.b,new MO(((c=o*l-f*u)*(s-(h=i.a))-(a=s*(w=i.b)-b*h)*(o-u))/(r=(o-u)*(b-w)-(f-l)*(s-h)),(c*(b-w)-a*(f-l))/r)}function AAn(n,t){var e,i,r;t.Ug("End label pre-processing",1),e=uM(pK(oIn(n,(jYn(),pTt)))),i=uM(pK(oIn(n,yTt))),r=fN(uG(oIn(n,Byt),88)),kS(sin(new fX(null,new h3(n.b,16)),new he),new NB(e,i,r)),t.Vg()}function LAn(n,t){var e,i,r;if(!n.d[t.p]){for(n.d[t.p]=!0,n.a[t.p]=!0,i=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||(r=e.d.i,n.a[r.p]?kD(n.b,e):LAn(n,r));n.a[t.p]=!1}}function NAn(n,t,e){var i;switch(i=0,uG(oIn(t,(jYn(),gMt)),171).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 vR(t,(GYn(),imt))&&(i+=uG(oIn(t,imt),17).a),i}function $An(n,t,e){var i,r,c;for(e.zc(t,n),kD(n.n,t),c=n.p.zg(t),t.j==n.p.Ag()?npn(n.e,c):npn(n.j,c),eQ(n),r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(r);)i=uG(N9(r),12),e._b(i)||$An(n,i,e)}function DAn(n,t,e){var i,r,c;for(e.Ug("Processor set neighbors",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),40),(OQn(),UPt))))&&(r=c);r&&k_n(n,new Mp(r),e),e.Vg()}function xAn(n){var t,e;return uG(zDn(n,(XYn(),_$t)),21).Hc((Qmn(),VRt))?(e=uG(zDn(n,q$t),21),t=new eN(uG(zDn(n,U$t),8)),e.Hc((aUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t):new sj}function RAn(n){var t,e,i;if(!n.b){for(i=new Es,e=new nR(Zqn(n));e.e!=e.i.gc();)(t=uG(nyn(e),19)).Bb&Qtt&&ttn(i,t);lbn(i),n.b=new vL((uG(zrn(gZ((tQ(),M_t).o),8),19),i.i),i.g),y9(n).b&=-9}return n.b}function KAn(n){var t,e,i;for(e=n.length,i=0;i<e&&(s3(i,n.length),n.charCodeAt(i)<=32);)++i;for(t=e;t>i&&(s3(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||t<e?(Knn(i,t,n.length),n.substr(i,t-i)):n}function FAn(n,t){var e,i,r,c,a,o;a=uG(oTn(kz(t.k),Inn(YRt,z4n,64,2,0,1)),126),xTn(n,o=t.g,e=e5(t,a[0]),i=t5(t,a[1]))<=xTn(n,o,r=e5(t,a[1]),c=t5(t,a[0]))?(t.a=e,t.c=i):(t.a=r,t.c=c)}function _An(n){var t,e,i,r,c,a,o;if(hZ(),F$(n,59))for(c=0,r=n.gc()-1;c<r;++c,--r)t=n.Xb(c),n.hd(c,n.Xb(r)),n.hd(r,t);else for(e=n.ed(),a=n.fd(n.gc());e.Tb()<a.Vb();)i=e.Pb(),o=a.Ub(),e.Wb(o),a.Wb(i)}function BAn(n,t){var e,i,r,c,a,o;for(o=0,A6(c=new ND,t);c.b!=c.c;)for(o+=XTn((a=uG(xV(c),219)).d,a.e),r=new Ww(a.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(o+=BAn(n,e));return o}function HAn(n,t,e,i,r){var c,a,o,u;if(t)for(a=t.Kc();a.Ob();)for(u=nBn(uG(a.Pb(),10),(can(),Wjt),e).Kc();u.Ob();)o=uG(u.Pb(),12),(c=uG(DA(FX(r.f,o)),118))||(c=new nhn(n.d),mv(i.c,c),$An(c,o,r))}function UAn(n,t,i){var r,c;thn(this),t==(l0(),USt)?FV(this.r,n.c):FV(this.w,n.c),FV(i==USt?this.r:this.w,n.d),HOn(this,n),NIn(this,r=uwn(n.c),c=uwn(n.d),c),this.o=(uFn(),e.Math.abs(r-c)<.2)}function GAn(n,t,e){var i,r,c,a,o;if(null!=(a=uG(Lsn(n.a,8),2035)))for(r=0,c=a.length;r<c;++r)null.Um();i=e,1&n.a.Db||(o=new SQ(n,e,t),i.dj(o)),F$(i,686)?uG(i,686).fj(n.a):i.cj()==n.a&&i.ej(null)}function qAn(){var n;return kHt?uG(jxn((MP(),l_t),lct),2044):(SQn(),n=uG(F$(U1((MP(),l_t),lct),594)?U1(l_t,lct):new gJ,594),kHt=!0,FJn(n),ZYn(n),vJ((pP(),k_t),n,new $h),ojn(n),r2(l_t,lct,n),n)}function XAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function zAn(n,t,e,i){var r;return(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n]),t))<0&&(r=XOn(n,e,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),t)),!(r<0||(i.d=r,0))}function VAn(n,t,e){var i,r,c,a;if(a=n.b.Ce(t),0==(r=null==(i=n.a.get(a))?Inn(dat,EZn,1,0,5,1):i).length)n.a.set(a,r);else if(c=Ibn(n,t,r))return c.nd(e);return uQ(r,r.length,new VP(t,e)),++n.c,++n.b.g,null}function WAn(n){var t,e,i;for($xn(n),i=new Zm,e=new Ww(n.a.a.b);e.a<e.c.c.length;)kD(i,new KC(t=uG(N3(e),86),!0)),kD(i,new KC(t,!1));RMn(n.c),O4(i,n.b,new IM(Uhn(cT(Klt,1),EZn,382,0,[n.c]))),lDn(n)}function QAn(n,t){var e,i,r;for(r=new Zm,i=new Ww(n.c.a.b);i.a<i.c.c.length;)e=uG(N3(i),60),t.Lb(e)&&(kD(r,new tC(e,!0)),kD(r,new tC(e,!1)));xMn(n.e),I4(r,n.d,new IM(Uhn(cT(Hut,1),EZn,693,0,[n.e])))}function JAn(n){var t,e,i,r;for(e=new Ym,r=new Ww(n.d);r.a<r.c.c.length;)i=uG(N3(r),187),t=uG(i.of((GYn(),Dpt)),18),FX(e.f,t)||vJ(e,t,new oZ(t)),kD(uG(DA(FX(e.f,t)),466).b,i);return new Z_(new Fw(e))}function YAn(n,t){var e,i,r,c,a;for(i=new $4(n.j.c.length),e=null,c=new Ww(n.j);c.a<c.c.c.length;)(r=uG(N3(c),12)).j!=e&&(i.b==i.c||Dxn(i,e,t),q5(i),e=r.j),(a=bDn(r))&&O6(i,a);i.b==i.c||Dxn(i,e,t)}function ZAn(n,t){var e,i;for(i=new N4(n.b,0);i.b<i.d.gc();)MK(i.b<i.d.gc()),e=uG(i.d.Xb(i.c=i.b++),72),uG(oIn(e,(jYn(),Xyt)),278)==(Zrn(),rxt)&&(LQ(i),kD(t.b,e),vR(e,(GYn(),Dpt))||kfn(e,Dpt,n))}function nLn(n){var t,i,r;for(t=x5(new Fz(ix(Xgn(n).a.Kc(),new h))),i=new Fz(ix(qgn(n).a.Kc(),new h));hDn(i);)r=x5(new Fz(ix(Xgn(uG(N9(i),18).c.i).a.Kc(),new h))),t=e.Math.max(t,r);return xwn(t)}function tLn(n,t,e){var i,r,c;i=uG(zDn(n,(XYn(),l$t)),21),r=0,c=0,t.a>e.a&&(i.Hc((ZSn(),VNt))?r=(t.a-e.a)/2:i.Hc(QNt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((ZSn(),YNt))?c=(t.b-e.b)/2:i.Hc(JNt)&&(c=t.b-e.b)),JCn(n,r,c)}function eLn(n,t,e,i,r,c,a,o,u,s,h,f,l){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=a,Qdn(n,o),Ydn(n,u),Wdn(n,s),Jdn(n,h),mdn(n,f),Cgn(n,l),ddn(n,!0),Pcn(n,r),n.Zk(c),Kbn(n,t),null!=i&&(n.i=null,lon(n,i))}function iLn(n,t,e){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,[e,xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must not be greater than size (%s)",Uhn(cT(dat,1),EZn,1,5,[e,xwn(n),xwn(t)]))}function rLn(n,t,e,i,r,c){var a,o,u;if(i-e<7)Ygn(t,e,i,c);else if(rLn(t,n,o=e+r,u=o+((a=i+r)-o>>1),-r,c),rLn(t,n,u,a,-r,c),c.Ne(n[u-1],n[u])<=0)for(;e<i;)uQ(t,e++,n[o++]);else Twn(n,o,u,a,t,e,i,c)}function cLn(n,t){var e,i,r,c,a,o,u;for(u=t.d,r=t.b.j,o=new Ww(u);o.a<o.c.c.length;)for(a=uG(N3(o),105),c=Inn(ZHt,B2n,28,r.c.length,16,1),vJ(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 aLn(n,t){if(Ean(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The BF model order layer assigner requires all real nodes to have a model order."))}function oLn(n,t){if(Pan(),vR(n,(GYn(),imt))&&vR(t,imt))return d$(uG(oIn(n,imt),17).a,uG(oIn(t,imt),17).a);throw hv(new EM("The DF model order layer assigner requires all real nodes to have a model order."))}function uLn(n,t){for(n.r=new nhn(n.p),Zb(n.r,n),Qon(n.r.j,n.j),BY(n.j),aq(n.j,t),aq(n.r.e,t),eQ(n),eQ(n.r);0!=n.f.c.length;)L$(uG(zq(n.f,0),132));for(;0!=n.k.c.length;)L$(uG(zq(n.k,0),132));return n.r}function sLn(n,t,e){var i,r,c;if(r=ern(n.Dh(),t),(i=t-n.ji())<0){if(!r)throw hv(new vM(Vtt+t+Wtt));if(!r.rk())throw hv(new vM(Gtt+r.xe()+qtt));(c=n.Ih(r))>=0?n.bi(c,e):lRn(n,r,e)}else lpn(n,i,r,e)}function hLn(n){var t,e;if(n.f){for(;n.n>0;){if(F$(e=(t=uG(n.k.Xb(n.n-1),76)).Lk(),102)&&uG(e,19).Bb&Qtt&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;--n.n}return!1}return n.n>0}function fLn(n){var t,e,i,r;if(e=uG(n,54)._h())try{if(i=null,(t=jxn((MP(),l_t),DUn(jpn(e))))&&(r=t.ai())&&(i=r.Fl(bM(e.e))),i&&i!=n)return fLn(i)}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}return n}function lLn(n,t,e){var i,r;e.Ug("Remove overlaps",1),e.dh(t,l7n),i=uG(zDn(t,(SK(),zCt)),27),n.f=i,n.a=aMn(uG(zDn(t,(jOn(),zIt)),300)),rw(n,(tJ(r=pK(zDn(t,(XYn(),DDt)))),r)),xWn(n,t,GFn(i),e),e.dh(t,w7n)}function bLn(n){var t,e,i;if(oM(gK(zDn(n,(XYn(),C$t))))){for(i=new Zm,e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,I$t)))&&mv(i.c,t);return i}return hZ(),hZ(),zot}function wLn(n){if(!n)return By(),Vat;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=Wat[typeof t];return i?i(t):Vbn(typeof t)}return n instanceof Array||n instanceof e.Array?new Eb(n):new Cb(n)}function dLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(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}YGn(r),rqn(r)}function gLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(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}YGn(r),rqn(r)}function pLn(n,t){var e,i,r,c,a;if(!t.dc())if(r=uG(t.Xb(0),131),1!=t.gc())for(e=1;e<t.gc();)!r.j&&r.o||(c=tjn(t,e))&&(i=uG(c.a,17).a,wFn(n,r,a=uG(c.b,131),e,i,t),e=i+1,r=a);else wFn(n,r,r,1,0,t)}function mLn(n){var t,e,i,r;for(f$(r=new Z_(n.d),new zr),h_n(),t=Uhn(cT(Xdt,1),p1n,276,0,[Odt,Ndt,Idt,xdt,Ldt,Adt,Ddt,$dt]),e=0,i=new Ww(r);i.a<i.c.c.length;)T$n(uG(N3(i),105),t[e%t.length]),++e}function vLn(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(r=uG(I6(c),8),!qun(n,i)||!qun(n,r))return!1;i=r}return!(!qun(n,i)||!qun(n,e))}function kLn(n,t){var e,i,r,c,a;return e=$cn(a=n,"x"),din(new sm(t).a,e),i=$cn(a,"y"),gin(new hm(t).a,i),r=$cn(a,wet),pin(new fm(t).a,r),c=$cn(a,bet),min(new lm(t).a,c),c}function yLn(n,t){bBn(n,t),1&n.b&&(n.a.a=null),2&n.b&&(n.a.f=null),4&n.b&&(n.a.g=null,n.a.i=null),16&n.b&&(n.a.d=null,n.a.e=null),8&n.b&&(n.a.b=null),32&n.b&&(n.a.j=null,n.a.c=null)}function MLn(n,t){var e,i;if(i=0,t.length>0)try{i=mUn(t,j1n,vZn)}catch(r){throw F$(r=Ehn(r),130)?hv(new Pen(r)):hv(r)}return!n.a&&(n.a=new qm(n)),i<(e=n.a).i&&i>=0?uG(zrn(e,i),58):null}function TLn(n,t){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,["index",xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must be less than size (%s)",Uhn(cT(dat,1),EZn,1,5,["index",xwn(n),xwn(t)]))}function jLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function ELn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function SLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function PLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+t);return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function CLn(n,t){var e,i,r,c,a,o;for(e=n.b.c.length,r=zq(n.b,t);2*t+1<e&&(o=c=2*t+1,(a=c+1)<e&&n.a.Ne(zq(n.b,a),zq(n.b,c))<0&&(o=a),i=o,!(n.a.Ne(r,zq(n.b,i))<0));)Y8(n.b,t,zq(n.b,i)),t=i;Y8(n.b,t,r)}function ILn(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 OLn(n,t){var e;if((e=uG(oIn(t,(jYn(),Kyt)),322))!=n)throw hv(new EM("The hierarchy aware processor "+e+" in child node "+t+" is only allowed if the root node specifies the same hierarchical processor."))}function ALn(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 2:case 3:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function LLn(n,t,i){var r,c,a,o,u,s;for(s=M0n,a=new Ww($Rn(n.b));a.a<a.c.c.length;)for(c=uG(N3(a),177),u=new Ww($Rn(t.b));u.a<u.c.c.length;)o=uG(N3(u),177),r=xhn(c.a,c.b,o.a,o.b,i),s=e.Math.min(s,r);return s}function NLn(n,t){if(!t)throw hv(new Rv);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 $Ln(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function DLn(n,t){var i,r;return F$(t.g,10)&&uG(t.g,10).k==(zIn(),lbt)?M0n:Q6(t)?e.Math.max(0,n.b/2-.5):(i=z4(t))?(r=uM(pK(Omn(i,(jYn(),ETt)))),e.Math.max(0,r/2-.5)):M0n}function xLn(n,t){var e,i,r,c;for(GB(),e=null,r=t.Kc();r.Ob();)(i=uG(r.Pb(),131)).o||(kD((c=new Hqn(R$(i.a),IG(i.a),null,uG(i.d.a.ec().Kc().Pb(),18))).c,i.a),mv(n.c,c),e&&kD(e.d,c),e=c)}function RLn(n){var t,e,i,r;for(r=Vwn(n.d,n.e).Kc();r.Ob();)for(i=uG(r.Pb(),12),e=new Ww(n.e==(KQn(),_Rt)?i.e:i.g);e.a<e.c.c.length;)v9(t=uG(N3(e),18))||t.c.i.c==t.d.i.c||(MOn(n,t),++n.f,++n.c)}function KLn(n,t){var e,i;if(t.dc())return hZ(),hZ(),zot;for(kD(i=new Zm,xwn(j1n)),e=1;e<n.f;++e)null==n.a&&fBn(n),n.a[e]&&kD(i,xwn(e));return 1==i.c.length?(hZ(),hZ(),zot):(kD(i,xwn(vZn)),Aqn(t,i))}function FLn(n,t){var e,i,r,c,a,o;e=Hjn(t,o=t.c.i.k!=(zIn(),dbt)?t.d:t.c).i,r=uG(cQ(n.k,o),125),i=n.i[e.p].a,A_(o.i)<(e.c?Ten(e.c.a,e,0):-1)?(c=r,a=i):(c=i,a=r),RKn(xS(DS(RS($S(new uk,0),4),c),a))}function _Ln(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.b&&(t.b=new f_(cFt,t,4,7)),ttn(t.b,c))}function BLn(n,t,e){var i,r,c;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=gTn(n,fNn(uin(e,uG(r.Pb(),17).a))))&&(!t.c&&(t.c=new f_(cFt,t,5,8)),ttn(t.c,c))}function HLn(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 ULn(n){var t,e,i;if(t=n.Pb(),!n.Ob())return t;for(i=QA(JA(new WM,"expected one element but was: <"),t),e=0;e<4&&n.Ob();e++)QA((i.a+=TZn,i),n.Pb());throw n.Ob()&&(i.a+=", ..."),i.a+=">",hv(new vM(i.a))}function GLn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[3]=t[3]+(e%60/10|0)&D1n,t[4]=t[4]+e%10&D1n,mvn(t,0,t.length)}function qLn(n){var t,e,i,r;for(n.g=new rpn(uG(WW(YRt),297)),i=0,KQn(),e=yRt,t=0;t<n.j.c.length;t++)(r=uG(zq(n.j,t),12)).j!=e&&(i!=t&&UV(n.g,e,new WO(xwn(i),xwn(t))),e=r.j,i=t);UV(n.g,e,new WO(xwn(i),xwn(t)))}function XLn(n){var t,e,i,r,c;for(e=0,t=new Ww(n.b);t.a<t.c.c.length;)for(r=new Ww(uG(N3(t),30).a);r.a<r.c.c.length;)for((i=uG(N3(r),10)).p=e++,c=new Ww(i.j);c.a<c.c.c.length;)uG(N3(c),12).p=e++}function zLn(n,t){var e,i,r;if(!(r=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Zl(t)}function VLn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=t0(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):dhn(Bsn(n))}function WLn(n){var t,e,i,r,c,a,o;for(c=new XL,e=new Ww(n);e.a<e.c.c.length;)a=(t=uG(N3(e),132)).a,o=t.b,c.a._b(a)||c.a._b(o)||(r=a,i=o,a.e.b+a.j.b>2&&o.e.b+o.j.b<=2&&(r=o,i=a),c.a.zc(r,c),r.q=i);return c}function QLn(n,t,e){e.Ug("Eades radial",1),e.dh(t,w7n),n.d=uG(zDn(t,(SK(),zCt)),27),n.c=uM(pK(zDn(t,(jOn(),HIt)))),n.e=aMn(uG(zDn(t,zIt),300)),n.a=_pn(uG(zDn(t,WIt),434)),n.b=PSn(uG(zDn(t,KIt),354)),UEn(n),e.dh(t,w7n)}function JLn(n,t){if(t.Ug("Target Width Setter",1),!vnn(n,(S_n(),vAt)))throw hv(new jM("A target width has to be set if the TargetWidthWidthApproximator should be used."));Myn(n,(lBn(),POt),pK(zDn(n,vAt))),t.Vg()}function YLn(n,t){var e,i,r;return zsn(i=new gMn(n),t),kfn(i,(GYn(),Kpt),t),kfn(i,(jYn(),JMt),($Pn(),cRt)),kfn(i,byt,(nMn(),ONt)),Hb(i,(zIn(),lbt)),o2(e=new lOn,i),NLn(e,(KQn(),_Rt)),o2(r=new lOn,i),NLn(r,kRt),i}function ZLn(n){switch(n.g){case 0:return new zy((ean(),_Et));case 1:return new bl;case 2:return new wl;default:throw hv(new vM("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function nNn(n,t){var e,i,r,c;for(n.c[t.p]=!0,kD(n.a,t),c=new Ww(t.j);c.a<c.c.c.length;)for(e=new w7((r=uG(N3(c),12)).b);l$(e.a)||l$(e.b);)i=Ivn(r,uG(l$(e.a)?N3(e.a):N3(e.b),18)).i,n.c[i.p]||nNn(n,i)}function tNn(n){var t,i,r,c,a,o,u;for(o=0,i=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));i.e!=i.i.gc();)u=(t=uG(Zkn(i),27)).g,c=t.f,r=e.Math.sqrt(u*u+c*c),o=e.Math.max(r,o),a=tNn(t),o=e.Math.max(a,o);return o}function eNn(){eNn=E,gRt=new xO("OUTSIDE",0),wRt=new xO("INSIDE",1),dRt=new xO("NEXT_TO_PORT_IF_POSSIBLE",2),bRt=new xO("ALWAYS_SAME_SIDE",3),lRt=new xO("ALWAYS_OTHER_SAME_SIDE",4),pRt=new xO("SPACE_EFFICIENT",5)}function iNn(n,t,e){var i,r,c,a;return Gan(i=y6(n,(gj(),r=new Bk,!!e&&GRn(r,e),r),t),k6(t,Iet)),fCn(t,i),YDn(t,i),kLn(t,i),c=p6(t,"ports"),pRn((a=new oA(n,i)).a,a.b,c),qfn(n,t,i),vhn(n,t,i),i}function rNn(n){var t,e;return e=-n.a,t=Uhn(cT(JHt,1),N1n,28,15,[43,48,48,58,48,48]),e<0&&(t[0]=45,e=-e),t[1]=t[1]+((e/60|0)/10|0)&D1n,t[2]=t[2]+(e/60|0)%10&D1n,t[4]=t[4]+(e%60/10|0)&D1n,t[5]=t[5]+e%10&D1n,mvn(t,0,t.length)}function cNn(n){var t;return t=Uhn(cT(JHt,1),N1n,28,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)&D1n,t[5]=t[5]+(n/60|0)%10&D1n,t[7]=t[7]+(n%60/10|0)&D1n,t[8]=t[8]+n%10&D1n,mvn(t,0,t.length)}function aNn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i<r;++i)t=e[i],c.a?JA(c.a,c.b):c.a=new lx(c.d),WA(c.a,""+oV(t));return c.a?0==c.e.length?c.a.a:c.a.a+""+c.e:c.c}function oNn(n,t){var i,r,c;for(c=vZn,r=new Ww(Ebn(t));r.a<r.c.c.length;)(i=uG(N3(r),218)).f&&!n.c[i.c]&&(n.c[i.c]=!0,c=e.Math.min(c,oNn(n,hpn(i,t))));return n.i[t.d]=n.j,n.g[t.d]=e.Math.min(c,n.j++),n.g[t.d]}function uNn(n,t){var e,i,r;for(r=uG(uG(Y9(n.r,t),21),87).Kc();r.Ob();)(i=uG(r.Pb(),117)).e.b=(e=i.b).pf((XYn(),uDt))?e.ag()==(KQn(),yRt)?-e.Mf().b-uM(pK(e.of(uDt))):uM(pK(e.of(uDt))):e.ag()==(KQn(),yRt)?-e.Mf().b:0}function sNn(n){var t,e,i,r,c,a,o;for(e=AN(n.e),c=vD(HR(D$(ON(n.e)),n.d*n.a,n.c*n.b),-.5),t=e.a-c.a,r=e.b-c.b,o=0;o<n.c;o++){for(i=t,a=0;a<n.d;a++)vpn(n.e,new gY(i,r,n.a,n.b))&&HBn(n,a,o,!1,!0),i+=n.a;r+=n.b}}function hNn(n){var t,e,i,r,c;t=n.a,e=n.b,r=n.c,i=new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),c=new MO(r.e.a+r.f.a/2,r.e.b+r.f.b/2),s8(t,i,t.a,t.a.a),s8(t,c,t.c.b,t.c),KIn(i,uG(hyn(t,1),8),n.b.f),KIn(c,uG(hyn(t,t.b-2),8),n.c.f)}function fNn(n){var t;if(t=!1,F$(n,211))return t=!0,uG(n,211).a;if(!t&&F$(n,263)&&uG(n,263).a%1==0)return t=!0,xwn(AL(uG(n,263).a));throw hv(new SM("Id must be a string or an integer: '"+n+"'."))}function lNn(n,t){var e,i,r,c,a,o;for(c=null,r=new dV((!n.a&&(n.a=new qm(n)),n.a));u$n(r);)if(hXn(a=(e=uG(Wxn(r),58)).Dh()),null!=(i=(o=a.o)&&e.Xh(o)?d_(khn(o),e.Mh(o)):null)&&m_(i,t)){c=e;break}return c}function bNn(n,t,e){var i,r,c,a,o;if(man(e,"occurrences"),0==e)return(o=uG(Xwn(nZ(n.a),t),16))?o.gc():0;if(!(a=uG(Xwn(nZ(n.a),t),16)))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 wNn(n,t,e){var i,r,c;return man(e,"oldCount"),man(0,"newCount"),((i=uG(Xwn(nZ(n.a),t),16))?i.gc():0)==e&&(man(0,"count"),(c=-((r=uG(Xwn(nZ(n.a),t),16))?r.gc():0))>0?HM():c<0&&bNn(n,t,-c),!0)}function dNn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=AMn(n,!0)).length;r<c;++r)(e=i[r])>0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=fT(Mun(ZJ(JJ(BV(n.a),new jn),new En)));return a>0?a+n.n.d+n.n.a:0}function gNn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=fT(Mun(ZJ(JJ(BV(n.a),new Mn),new Tn)));else{for(t=0,r=0,c=(i=LMn(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 pNn(n){var t,e;if(2!=n.c.length)throw hv(new kM("Order only allowed for two paths."));u3(0,n.c.length),t=uG(n.c[0],18),u3(1,n.c.length),e=uG(n.c[1],18),t.d.i!=e.c.i&&(n.c.length=0,mv(n.c,e),mv(n.c,t))}function mNn(n,t,e){var i;for(vN(e,t.g,t.f),kN(e,t.i,t.j),i=0;i<(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i;i++)mNn(n,uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),i),27),uG(zrn((!e.a&&(e.a=new fV(bFt,e,10,11)),e.a),i),27))}function vNn(n,t){var i,r,c,a;for(i=(a=uG(AJ(n.b,t),127)).a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).c&&(i.a=e.Math.max(i.a,rq(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 kNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(rGn(),$ft)),17).a-uG(oIn(n,$ft),17).a)?(i=YF(D$(uG(oIn(n,(mon(),zft)),8)),uG(oIn(n,Vft),8)),r=YF(D$(uG(oIn(t,zft),8)),uG(oIn(t,Vft),8)),ugn(i.a*i.b,r.a*r.b)):e}function yNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(QGn(),yCt)),17).a-uG(oIn(n,yCt),17).a)?(i=YF(D$(uG(oIn(n,(OQn(),vPt)),8)),uG(oIn(n,kPt),8)),r=YF(D$(uG(oIn(t,vPt),8)),uG(oIn(t,kPt),8)),ugn(i.a*i.b,r.a*r.b)):e}function MNn(n){var t,e;return(e=new WM).a+="e_",null!=(t=bhn(n))&&(e.a+=""+t),n.c&&n.d&&(JA((e.a+=" ",e),njn(n.c)),JA(QA((e.a+="[",e),n.c.i),"]"),JA((e.a+=Y4n,e),njn(n.d)),JA(QA((e.a+="[",e),n.d.i),"]")),e.a}function TNn(n){switch(n.g){case 0:return new Tl;case 1:return new jl;case 2:return new yl;case 3:return new kl;default:throw hv(new vM("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function jNn(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 ENn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)r=v6(e,uG(c.Pb(),17).a),vet in r.a||ket in r.a?bHn(n,r,t):JJn(n,r,t),GD(uG(cQ(n.b,jvn(r)),74))}function SNn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=bEn(n))&&(PP(),t.lk()==srt)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function PNn(n,t){var e,i,r,c;if(EYn(n),0!=n.c||123!=n.a)throw hv(new CM(rZn((t$(),bit))));if(c=112==t,i=n.d,(e=aR(n.i,125,i))<0)throw hv(new CM(rZn((t$(),wit))));return r=r1(n.i,i,e),n.d=e+1,itn(r,c,!(512&~n.e))}function CNn(n){var t,e,i,r,c,a,o;if((i=n.a.c.length)>0)for(a=n.c.d,r=vD(YF(new MO((o=n.d.d).a,o.b),a),1/(i+1)),c=new MO(a.a,a.b),e=new Ww(n.a);e.a<e.c.c.length;)(t=uG(N3(e),250)).d.a=c.a+r.a,t.d.b=c.b+r.b,JF(c,r)}function INn(n,t){var e,i,r;if(t)if(4&t.i)for(i="[]",e=t.c;;e=e.c){if(!(4&e.i)){qan(n,r=lM((vK(e),e.o+i))),Ocn(n,r);break}i+="[]"}else qan(n,r=lM((vK(t),t.o))),Ocn(n,r);else qan(n,null),Ocn(n,null);n.hl(t)}function ONn(n,t,e,i,r){var c,a,o,u;return xA(u=fK(n,uG(r,58)))!==xA(r)?(o=uG(n.g[e],76),yD(n,e,WPn(n,e,c=R5(t,u))),uN(n.e)&&(kPn(a=VZ(n,9,c.Lk(),r,u,i,!1),new Ken(n.e,9,n.c,o,c,i,!1)),Cen(a)),u):r}function ANn(n,t,e){var i,r,c,a,o,u;for(i=uG(Y9(n.c,t),15),r=uG(Y9(n.c,e),15),c=i.fd(i.gc()),a=r.fd(r.gc());c.Sb()&&a.Sb();)if((o=uG(c.Ub(),17))!=(u=uG(a.Ub(),17)))return d$(o.a,u.a);return c.Ob()||a.Ob()?c.Ob()?1:-1:0}function LNn(n){var t,e,i,r,c,a;for(a=iR(n.c.length),r=new Ww(n);r.a<r.c.c.length;){for(i=uG(N3(r),10),c=new ek,e=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(e);)(t=uG(N9(e),18)).c.i==t.d.i||FV(c,t.d.i);mv(a.c,c)}return a}function NNn(n,t){var e,i;try{return C3(n.a,t)}catch(r){if(F$(r=Ehn(r),33)){try{if(i=mUn(t,j1n,vZn),e=Mj(n.a),i>=0&&i<e.length)return e[i]}catch(c){if(!F$(c=Ehn(c),130))throw hv(c)}return null}throw hv(r)}}function $Nn(n,t){var e,i,r;if(r=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(r,69).xk()||(r=_3(Nen(kBt,r))),i=uG((e=n.Ih(r))>=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Wl(t);throw hv(new vM(Gtt+t.xe()+ztt))}function DNn(){var n;return IP(),pBt?uG(jxn((MP(),l_t),Drt),2038):(ML(Sat,new Eh),yWn(),n=uG(F$(U1((MP(),l_t),Drt),560)?U1(l_t,Drt):new dJ,560),pBt=!0,HYn(n),oZn(n),vJ((pP(),k_t),n,new Bs),r2(l_t,Drt,n),n)}function xNn(n,t){var e,i,r,c;n.j=-1,uN(n.e)?(e=n.i,c=0!=n.i,z9(n,t),i=new Ken(n.e,3,n.c,null,t,e,c),r=t.zl(n.e,n.c,null),(r=yPn(n,t,r))?(r.nj(i),r.oj()):Msn(n.e,i)):(z9(n,t),(r=t.zl(n.e,n.c,null))&&r.oj())}function RNn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(s3(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)s3(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function KNn(n){var t,i,r,c,a;return i=c=uG(n.a,17).a,r=a=uG(n.b,17).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 WO(xwn(i),xwn(r))}function FNn(n,t,e,i){var r,c,a,o,u,s;for(r=0;r<t.o;r++)for(c=r-t.j+e,a=0;a<t.p;a++)if(u=c,s=o=a-t.k+i,u+=n.j,s+=n.k,u>=0&&s>=0&&u<n.o&&s<n.p&&(!iTn(t,r,a)&&_Mn(n,c,o)||eTn(t,r,a)&&!BMn(n,c,o)))return!0;return!1}function _Nn(n,t,e){var i,r,c,a;c=n.c,a=n.d,r=(Gfn(Uhn(cT(PNt,1),zZn,8,0,[c.i.n,c.n,c.a])).b+Gfn(Uhn(cT(PNt,1),zZn,8,0,[a.i.n,a.n,a.a])).b)/2,i=null,i=c.j==(KQn(),kRt)?new MO(t+c.i.c.c.a+e,r):new MO(t-e,r),sR(n.a,0,i)}function BNn(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=i)return!1}else t=i;return!0}function HNn(n,t,e){var i;if(++n.j,t>=n.i)throw hv(new dM(zet+t+Vet+n.i));if(e>=n.i)throw hv(new dM(Wet+e+Vet+n.i));return i=n.g[e],t!=e&&(t<e?qGn(n.g,t,n.g,t+1,e-t):qGn(n.g,e+1,n.g,e,t-e),uQ(n.g,t,i),n.Pi(t,i,e),n.Ni()),i}function UNn(n,t,e){var i;if(i=uG(n.c.xc(t),16))return!!i.Fc(e)&&(++n.d,!0);if((i=n.ic(t)).Fc(e))return++n.d,n.c.zc(t,i),!0;throw hv(new x9("New Collection violated the Collection spec"))}function GNn(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)-j0n)>>16&4,(e+=t=(i=(n<<=t)-VZn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function qNn(n){var t,e,i,r;for(lZ(),aft=new Zm,cft=new Ym,rft=new Zm,!n.a&&(n.a=new fV(bFt,n,10,11)),JQn(t=n.a),r=new DD(t);r.e!=r.i.gc();)i=uG(Zkn(r),27),-1==Ten(aft,i,0)&&(e=new Zm,kD(rft,e),skn(i,e));return rft}function XNn(n,t,e){var i,r,c,a;n.a=e.b.d,F$(t,326)?(z8(c=COn(r=JFn(uG(t,74),!1,!1)),i=new Kd(n)),sqn(c,r),null!=t.of((XYn(),L$t))&&z8(uG(t.of(L$t),75),i)):((a=uG(t,422)).rh(a.nh()+n.a.a),a.sh(a.oh()+n.a.b))}function zNn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).c.g==n.g&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new kp(e))&&mv(r.c,e);return f$(r,new ja),r}function VNn(n,t,e){var i,r,c,a;return F$(t,153)&&F$(e,153)?(c=uG(t,153),a=uG(e,153),n.a[c.a][a.a]+n.a[a.a][c.a]):F$(t,250)&&F$(e,250)&&(i=uG(t,250),r=uG(e,250),i.a==r.a)?uG(oIn(r.a,(rGn(),$ft)),17).a:0}function WNn(n,t){var i,r,c,a,o,u,s,h;for(h=uM(pK(oIn(t,(jYn(),ITt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,u=1;u<n.length;u++)r=n[u].n,c=n[u].o,i=n[u].d,(a=r.a-i.b-s)<0&&(r.a-=a),(o=t.f).a=e.Math.max(o.a,r.a+c.a),s=r.a+c.a+i.c+h}function QNn(n,t){var e,i,r,c,a,o;return i=uG(uG(cQ(n.g,t.a),42).a,68),r=uG(uG(cQ(n.g,t.b),42).a,68),(e=mzn(c=i.b,a=r.b))>=0?e:(o=NQ(YF(new MO(a.c+a.b/2,a.d+a.a/2),new MO(c.c+c.b/2,c.d+c.a/2))),-(oGn(c,a)-1)*o)}function JNn(n,t,e){var i;kS(new fX(null,(!e.a&&(e.a=new fV(oFt,e,6,6)),new h3(e.a,16))),new zO(n,t)),kS(new fX(null,(!e.n&&(e.n=new fV(lFt,e,1,7)),new h3(e.n,16))),new VO(n,t)),(i=uG(zDn(e,(XYn(),L$t)),75))&&fun(i,n,t)}function YNn(n,t,e){var i,r,c;if(c=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(c,69).xk()||(c=_3(Nen(kBt,c))),r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Sl(t,e);throw hv(new vM(Gtt+t.xe()+ztt))}function ZNn(n,t,e,i){var r,c,a,o,u;if(r=n.d[t])if(c=r.g,u=r.i,null!=i){for(o=0;o<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return a}else for(o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return a;return null}function n$n(n,t){var e,i,r,c,a;for(!t.s&&(t.s=new fV(o_t,t,21,17)),c=null,r=0,a=(i=t.s).i;r<a;++r)switch(sJ(Nen(n,e=uG(zrn(i,r),179)))){case 4:case 5:case 6:!c&&(c=new Zm),mv(c.c,e)}return c||(hZ(),hZ(),zot)}function t$n(n,t){var e;if(t<0)throw hv(new wM("Negative exponent"));if(0==t)return xot;if(1==t||Cpn(n,xot)||Cpn(n,_ot))return n;if(!aDn(n,0)){for(e=1;!aDn(n,e);)++e;return j5(Ypn(e*t),t$n($9(n,e),t))}return cCn(n,t)}function e$n(n,t){var e,i,r;if(xA(n)===xA(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],!(xA(i)===xA(r)||null!=i&&udn(i,r)))return!1;return!0}function i$n(n){var t,e,i;for(GS(),this.b=Dlt,this.c=(xdn(),ZDt),this.f=(US(),Alt),this.a=n,ET(this,new Tt),fKn(this),i=new Ww(n.b);i.a<i.c.c.length;)(e=uG(N3(i),86)).d||(t=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[e])),kD(n.a,t))}function r$n(n,t,e){var i,r,c,a,o,u;if(!n||0==n.c.length)return null;for(c=new c1(t,!e),r=new Ww(n);r.a<r.c.c.length;)i=uG(N3(r),72),LOn(c,(zS(),new Xd(i)));return(a=c.i).a=(u=c.n,c.e.b+u.d+u.a),a.b=(o=c.n,c.e.a+o.b+o.c),c}function c$n(n){var t,e,i,r,c,a,o;for(zL(o=D4(n.a),new Pe),e=null,c=0,a=(r=o).length;c<a&&(i=r[c]).k==(zIn(),lbt);++c)(t=uG(oIn(i,(GYn(),Fpt)),64))!=(KQn(),_Rt)&&t!=kRt||(e&&uG(oIn(e,Vpt),15).Fc(i),e=i)}function a$n(n,t,e){var i,r,c,a,o,u;u3(t,n.c.length),o=uG(n.c[t],339),i7(n,t),o.b/2>=e&&(i=t,c=(u=(o.c+o.a)/2)-e,o.c<=u-e&&GX(n,i++,new OU(o.c,c)),(a=u+e)<=o.a&&(r=new OU(a,o.a),o3(i,n.c.length),pC(n.c,i,r)))}function o$n(n,t,e){var i,r,c,a;if(!t.dc()){for(i=new lS,a=t.Kc();a.Ob();)for(c=uG(a.Pb(),40),vJ(n.a,xwn(c.g),xwn(e)),r=new Tp(Fkn(new Mp(c).a.d,0));Jj(r.a);)s8(i,uG(I6(r.a),65).c,i.c.b,i.c);o$n(n,i,e+1)}}function u$n(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=uG(n.g[n.i-1],51)}else n.d=n.bj(n.f),ttn(n,n.d),t=n.d;return t==n.b&&null.Vm>=null.Um()?(Wxn(n),u$n(n)):t.Ob()}function s$n(n){if(this.a=n,n.c.i.k==(zIn(),lbt))this.c=n.c,this.d=uG(oIn(n.c.i,(GYn(),Fpt)),64);else{if(n.d.i.k!=lbt)throw hv(new vM("Edge "+n+" is not an external edge."));this.c=n.d,this.d=uG(oIn(n.d.i,(GYn(),Fpt)),64)}}function h$n(n,t){var e,i,r;r=n.b,n.b=t,4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,r,n.b)),t?t!=n&&(qon(n,t.zb),Icn(n,t.d),Uan(n,null==(e=null==(i=t.c)?t.zb:i)||m_(e,t.zb)?null:e)):(qon(n,null),Icn(n,0),Uan(n,null))}function f$n(n,t){var e;this.e=(ZW(),WW(n),ZW(),Emn(n)),this.c=(WW(t),Emn(t)),FD(this.e.Rd().dc()==this.c.Rd().dc()),this.d=Qgn(this.e),this.b=Qgn(this.c),e=Jq(dat,[zZn,EZn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=e,wan(this)}function l$n(n){var t=(!Rat&&(Rat=mJn()),Rat);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 z1(n,t)}))+'"'}function b$n(n,t,i,r,c,a){var o,u,s,h,f;if(0!=c)for(xA(n)===xA(i)&&(n=n.slice(t,t+c),t=0),s=i,u=t,h=t+c;u<h;)c=(o=e.Math.min(u+1e4,h))-u,(f=n.slice(u,o)).splice(0,0,r,a?c:0),Array.prototype.splice.apply(s,f),u=o,r+=c}function w$n(n){var t,e;for(fZ(),this.b=Gut,this.c=Xut,this.g=(_S(),Uut),this.d=(xdn(),ZDt),this.a=n,hKn(this),e=new Ww(n.b);e.a<e.c.c.length;)!(t=uG(N3(e),60)).a&&Mx(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),n),t.e=new qZ(t.d)}function d$n(n){var t,e,i,r,c;for(r=n.e.c.length,i=Inn(yat,H3n,15,r,0,1),c=new Ww(n.e);c.a<c.c.c.length;)i[uG(N3(c),153).a]=new lS;for(e=new Ww(n.c);e.a<e.c.c.length;)i[(t=uG(N3(e),290)).c.a].Fc(t),i[t.d.a].Fc(t);return i}function g$n(n,t){var e,i,r,c,a;if(t>=(a=null==(e=uG(Lsn(n.a,4),129))?0:e.length))throw hv(new w_(t,a));return r=e[t],1==a?i=null:(qGn(e,0,i=Inn(xFt,Uit,424,a-1,0,1),0,t),(c=a-t-1)>0&&qGn(e,t+1,i,t,c)),Pkn(n,i),GAn(n,t,r),r}function p$n(n){var t,e;if(n.f){for(;n.n<n.o;){if(F$(e=(t=uG(n.j?n.j.$i(n.n):n.k.Xb(n.n),76)).Lk(),102)&&uG(e,19).Bb&Qtt&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;++n.n}return!1}return n.n<n.o}function m$n(){m$n=E,NBt=uG(zrn(gZ((yj(),RBt).qb),6),35),OBt=uG(zrn(gZ(RBt.qb),3),35),ABt=uG(zrn(gZ(RBt.qb),4),35),LBt=uG(zrn(gZ(RBt.qb),5),19),qSn(NBt),qSn(OBt),qSn(ABt),qSn(LBt),$Bt=new IM(Uhn(cT(o_t,1),krt,179,0,[NBt,OBt]))}function v$n(n,t){var e;this.d=new Nk,this.b=t,this.e=new eN(t.Lf()),e=n.u.Hc((eNn(),dRt)),n.u.Hc(wRt)?n.F?this.a=e&&!t.bg():this.a=!0:n.u.Hc(gRt)?this.a=!!e&&!(t.Uf().Kc().Ob()||t.Wf().Kc().Ob()):this.a=!1}function k$n(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),_Rt)?-i.Mf().a-uM(pK(i.of(uDt))):e+uM(pK(i.of(uDt))):i.ag()==(KQn(),_Rt)?-i.Mf().a:e}function y$n(n,t){var e,i,r;e=uG(oIn(n,(jYn(),Byt)),88),r=uG(zDn(t,eTt),64),(i=uG(oIn(n,JMt),101))!=($Pn(),uRt)&&i!=sRt?r==(KQn(),FRt)&&(r=RGn(t,e))==FRt&&(r=Ipn(e)):r=fzn(t)>0?Ipn(e):Gdn(Ipn(e)),Myn(t,eTt,r)}function M$n(n,t){t.Ug("Partition preprocessing",1),kS(uG(l8(JJ(sin(JJ(new fX(null,new h3(n.a,16)),new mi),new vi),new ki),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Oc(),new yi),t.Vg()}function T$n(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&f$(a,new Yr),r=a.c.length/2|0,i=0;i<r;i++)u3(i,a.c.length),(c=uG(a.c[i],113)).c&&NLn(c.d,t.a);for(e=r;e<a.c.length;e++)u3(e,a.c.length),(c=uG(a.c[e],113)).c&&NLn(c.d,t.b)}function j$n(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=Rz(i.a,r.a))<0?sHn(n,t,e):c>0&&sHn(n,e,t),c):null!=i.a?(sHn(n,t,e),-1):null!=r.a?(sHn(n,e,t),1):0}function E$n(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=Inn(yat,H3n,15,r,0,1),n.b=Inn(ZHt,B2n,28,r,16,1),a=Fkn(t.b,0);a.b!=a.d.c;)c=uG(I6(a),40),n.a[c.g]=new lS;for(i=Fkn(t.a,0);i.b!=i.d.c;)e=uG(I6(i),65),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function S$n(n,t){var e,i,r,c;n.Pj()?(e=n.Ej(),c=n.Qj(),++n.j,n.qj(e,n.Zi(e,t)),i=n.Ij(3,null,t,e,c),n.Mj()&&(r=n.Nj(t,null))?(r.nj(i),r.oj()):n.Jj(i)):(vQ(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function P$n(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),edn(n,t,e),i=n.Ij(3,null,e,t,c),n.Mj()?(r=n.Nj(e,null),n.Tj()&&(r=n.Uj(e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(edn(n,t,e),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function C$n(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),r=new ls,e=uG(n.g,124),c=n.i;--c>=0;)i=e[c],a.am(i.Lk())&&ttn(r,i);!PJn(n,r)&&uN(n.e)&&Yv(n,t.Jk()?VZ(n,6,t,(hZ(),zot),null,-1,!1):VZ(n,t.tk()?2:1,t,null,null,-1,!1))}function I$n(n,t){var e,i,r,c;return n.a==(RIn(),Vgt)||(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 O$n(n){var t,e,i,r,c,a;for(e2(),e=new u8,i=new Ww(n.e.b);i.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)r=uG(N3(c),10),(t=uG(ain(e,a=n.g[r.p]),15))||Akn(e,a,t=new Zm),t.Fc(r);return e}function A$n(n){var t;return 64&n.Db?vxn(n):((t=new fx(vxn(n))).a+=" (startX: ",Oj(t,n.j),t.a+=", startY: ",Oj(t,n.k),t.a+=", endX: ",Oj(t,n.b),t.a+=", endY: ",Oj(t,n.c),t.a+=", identifier: ",VA(t,n.d),t.a+=")",t.a)}function L$n(n){var t;return 64&n.Db?Wwn(n):((t=new fx(Wwn(n))).a+=" (ordered: ",Lj(t,!!(256&n.Bb)),t.a+=", unique: ",Lj(t,!!(512&n.Bb)),t.a+=", lowerBound: ",Aj(t,n.s),t.a+=", upperBound: ",Aj(t,n.t),t.a+=")",t.a)}function N$n(n,t,e,i,r,c,a,o){var u;return F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=i,Qdn(n,r),Ydn(n,c),Wdn(n,a),Jdn(n,!1),mdn(n,!0),Cgn(n,o),ddn(n,!0),Pcn(n,0),n.b=0,Ccn(n,1),(u=CCn(n,t,null))&&u.oj(),Sgn(n,!1),n}function $$n(n,t){var i,r;return uG(U1(n.a,t),525)||(i=new e9(t),t9(),B_(i,$$n(n,r1(r=Nut?null:i.c,0,e.Math.max(0,ax(r,$Cn(46)))))),0==(Nut?null:i.c).length&&RK(i,new G),r2(n.a,Nut?null:i.c,i),i)}function D$n(n,t){var e;n.b=t,n.g=new Zm,e=q$n(n.b),n.e=e,n.f=e,n.c=oM(gK(oIn(n.b,(MEn(),est)))),n.a=pK(oIn(n.b,(XYn(),c$t))),null==n.a&&(n.a=1),uM(n.a)>1?n.e*=uM(n.a):n.f/=uM(n.a),_bn(n),Vvn(n),EBn(n),kfn(n.b,(ryn(),Qht),n.g)}function x$n(n,t,e){var i,r,c,a,o;for(i=0,o=e,t||(i=e*(n.c.length-1),o*=-1),c=new Ww(n);c.a<c.c.c.length;){for(kfn(r=uG(N3(c),10),(jYn(),byt),(nMn(),ONt)),r.o.a=i,a=yOn(r,(KQn(),kRt)).Kc();a.Ob();)uG(a.Pb(),12).n.a=i;i+=o}}function R$n(n,t,e){var i,r,c,a,o,u;return(o=n.pl(e))!=e?(a=n.g[t],u=o,yD(n,t,n.Zi(t,u)),c=a,n.Ri(t,u,c),n.al()&&(i=e,r=n.Oj(i,null),!uG(o,54).Ph()&&(r=n.Nj(u,r)),r&&r.oj()),uN(n.e)&&Yv(n,n.Ij(9,e,o,t,!1)),o):e}function K$n(n,t){var e,i,r;for(e=new Ww(n.a.a);e.a<e.c.c.length;)uG(N3(e),194).g=!0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)(i=uG(N3(r),86)).k=oM(gK(n.e.Kb(new WO(i,t)))),i.d.g=i.d.g&oM(gK(n.e.Kb(new WO(i,t))));return n}function F$n(n,t){var e;if(0!=n.c.length){if(2==n.c.length)Gqn((u3(0,n.c.length),uG(n.c[0],10)),(Ajn(),$xt)),Gqn((u3(1,n.c.length),uG(n.c[1],10)),Dxt);else for(e=new Ww(n);e.a<e.c.c.length;)Gqn(uG(N3(e),10),t);n.c.length=0}}function _$n(n){var t,e,i,r,c;if(e=new nB(t=uG(Mj(YRt),9),uG(MF(t,t.length),9),0),c=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(c.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&Dx(new w7(i.b))&&Mon(e,i.j);return e}function B$n(n,t,e){var i,r,c,a;if(!n.d[e.p]){for(i=new Fz(ix(Xgn(e).a.Kc(),new h));hDn(i);){for(c=new Fz(ix(qgn(a=uG(N9(i),18).d.i).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).c.i==t&&(n.a[r.p]=!0);B$n(n,t,a)}n.d[e.p]=!0}}function H$n(n,t){var e,i,r,c,a,o,u;if(1==(i=Cdn(254&n.Db)))n.Eb=null;else if(c=Kcn(n.Eb),2==i)r=jTn(n,t),n.Eb=c[0==r?1:0];else{for(a=Inn(dat,EZn,1,i-1,5,1),e=2,o=0,u=0;e<=128;e<<=1)e==t?++o:n.Db&e&&(a[u++]=c[o++]);n.Eb=a}n.Db&=~t}function U$n(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=w1n}return t}function G$n(n,t,e,i,r){var c,a,o,u;if(xA(n)!==xA(t)||i!=r)for(o=0;o<i;o++){for(a=0,c=n[o],u=0;u<r;u++)a=Lgn(Lgn(Ngn(E3(c,L0n),E3(t[u],L0n)),E3(e[o+u],L0n)),E3(pz(a),L0n)),e[o+u]=pz(a),a=Dz(a,32);e[o+r]=pz(a)}else FUn(n,i,e)}function q$n(n){var t,i,r,c,a,o,u,s,h,f,l;for(f=0,h=0,u=(c=n.a).a.gc(),r=c.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),567)).b&&sXn(i),f+=(l=(t=i.a).a)+(o=t.b),h+=l*o;return s=e.Math.sqrt(400*u*h-4*h+f*f)+f,0==(a=2*(100*u-1))?s:s/a}function X$n(n,t){0!=t.b&&(isNaN(n.s)?n.s=uM((MK(0!=t.b),pK(t.a.a.c))):n.s=e.Math.min(n.s,uM((MK(0!=t.b),pK(t.a.a.c)))),isNaN(n.c)?n.c=uM((MK(0!=t.b),pK(t.c.b.c))):n.c=e.Math.max(n.c,uM((MK(0!=t.b),pK(t.c.b.c)))))}function z$n(n){var t,e,i;for(t=null,e=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])));hDn(e);)if(i=lCn(uG(N9(e),84)),t){if(t!=R0(i))return!0}else t=R0(i);return!1}function V$n(n,t){var e,i,r,c;n.Pj()?(e=n.i,c=n.Qj(),z9(n,t),i=n.Ij(3,null,t,e,c),n.Mj()?(r=n.Nj(t,null),n.Tj()&&(r=n.Uj(t,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(z9(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function W$n(n,t){var e,i,r;if(!_V(n.a,t.b))throw hv(new kM("Invalid hitboxes for scanline overlap calculation."));for(r=!1,i=n.a.a.ec().Kc();i.Ob();)if(e=uG(i.Pb(),68),ofn(t.b,e))nj(n.b.a,t.b,e),r=!0;else if(r)break}function Q$n(n){var t;if(!n.a)throw hv(new kM("IDataType class expected for layout option "+n.f));if(null==(t=f5(n.a)))throw hv(new kM("Couldn't create new instance of property '"+n.f+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return uG(t,423)}function J$n(n){var t,e,i,r,c;return(c=n.Ph())&&c.Vh()&&(r=mwn(n,c))!=c?(e=n.Fh(),i=(t=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-t,null,null),n.Bh(uG(r,54),e),i&&i.oj(),n.vh()&&n.wh()&&e>-1&&Msn(n,new lV(n,9,e,c,r)),r):c}function Y$n(n,t){var e,i,r,c,a;for(c=n.b.Ce(t),i=null==(e=n.a.get(c))?Inn(dat,EZn,1,0,5,1):e,a=0;a<i.length;a++)if(r=i[a],n.b.Be(t,r.ld()))return 1==i.length?(i.length=0,PF(n.a,c)):i.splice(a,1),--n.c,++n.b.g,r.md();return null}function Z$n(n){var t,e,i,r,c,a,o;for(c=0,r=n.f.e,e=0;e<r.c.length;++e)for(u3(e,r.c.length),a=uG(r.c[e],153),i=e+1;i<r.c.length;++i)u3(i,r.c.length),o=uG(r.c[i],153),t=atn(a.d,o.d)-n.a[a.a][o.a],c+=n.i[a.a][o.a]*t*t;return c}function nDn(n,t){var e;if(!vR(t,(jYn(),gMt))&&(e=oEn(uG(oIn(t,Uwt),371),uG(oIn(n,gMt),171)),kfn(t,Uwt,e),!hDn(new Fz(ix(Ggn(t).a.Kc(),new h)))))switch(e.g){case 1:kfn(t,gMt,(Gpn(),Cmt));break;case 2:kfn(t,gMt,(Gpn(),Omt))}}function tDn(n,t){var e;mBn(n),n.a=(e=new rT,kS(new fX(null,new h3(t.d,16)),new Dg(e)),e),WBn(n,uG(oIn(t.b,(jYn(),Yyt)),349)),Qyn(n),jDn(n),gEn(n),Jyn(n),Hzn(n,t),kS(sin(new fX(null,y4(_W(n.b).a)),new Dr),new xr),t.a=!1,n.a=null}function eDn(){eDn=E,XPt=new mL(J9n,(qx(),!1)),zPt=new mL(Y9n,7),xwn(0),ZPt=new mL(Z9n,xwn(0)),QPt=new mL(n7n,xwn(-1)),mbn(),nCt=new mL(t7n,tCt=xCt),Pln(),VPt=new mL(e7n,WPt=wPt),i3(),JPt=new mL(i7n,YPt=_Ct)}function iDn(){iIn.call(this,aet,(gj(),xKt)),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 rDn(){rDn=E,jFt=new fA(F6n,0),yFt=new fA("INSIDE_SELF_LOOPS",1),MFt=new fA("MULTI_EDGES",2),kFt=new fA("EDGE_LABELS",3),TFt=new fA("PORTS",4),mFt=new fA("COMPOUND",5),pFt=new fA("CLUSTERS",6),vFt=new fA("DISCONNECTED",7)}function cDn(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),++n.j,n.qj(t,n.Zi(t,e)),i=n.Ij(3,null,e,t,c),n.Mj()&&(r=n.Nj(e,null))?(r.nj(i),r.oj()):n.Jj(i)):(++n.j,n.qj(t,n.Zi(t,e)),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function aDn(n,t){var e,i,r;if(0==t)return!!(1&n.a[0]);if(t<0)throw hv(new wM("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=_un(n)))return!1;e=i==r?-e:~e}return!!(e&t)}function oDn(n,t,e,i){var r;uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),RG(r=YF(D$(uG(e.b,68).c),uG(i.b,68).c),LLn(uG(e.b,68),uG(i.b,68),r)),uG(i.b,68),uG(i.b,68),uG(i.b,68).c.a,r.a,uG(i.b,68).c.b,r.b,uG(i.b,68),Prn(i.a,new $U(n,t,i))}function uDn(n,t){var e,i,r,c,a,o,u;if(c=t.e)for(e=J$n(c),i=uG(n.g,689),a=0;a<n.i;++a)if(PMn(u=i[a])==e&&(!u.d&&(u.d=new MD(g_t,u,1)),r=u.d,(o=uG(e.Mh(PHn(c,c.Cb,c.Db>>16)),15).dd(c))<r.i))return uDn(n,uG(zrn(r,o),89));return t}function sDn(n,t,e){var i,r=sZn,c=r[n],a=c instanceof Array?c[0]:null;c&&!a?uZn=c:(!(i=t&&t.prototype)&&(i=sZn[t]),(uZn=o0(i)).Sm=e,!t&&(uZn.Tm=j),r[n]=uZn);for(var o=3;o<arguments.length;++o)arguments[o].prototype=uZn;a&&(uZn.Rm=a)}function hDn(n){for(var t;!uG(WW(n.a),51).Ob();){if(n.d=Mln(n),!n.d)return!1;if(n.a=uG(n.d.Pb(),51),F$(n.a,38)){if(t=uG(n.a,38),n.a=t.a,!n.b&&(n.b=new ND),A6(n.b,n.d),t.b)for(;!LM(t.b);)A6(n.b,uG(RV(t.b),51));n.d=t.d}}return!0}function fDn(n,t){var e,i,r,c;for(r=1,t.j=!0,c=null,i=new Ww(Ebn(t));i.a<i.c.c.length;)e=uG(N3(i),218),n.c[e.c]||(n.c[e.c]=!0,c=hpn(e,t),e.f?r+=fDn(n,c):c.j||e.a!=e.e.e-e.d.e||(e.f=!0,FV(n.p,e),r+=fDn(n,c)));return r}function lDn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function bDn(n){var t,i,r,c,a;if(a=zUn(n,c=new Zm),t=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(t.j);r.a<r.c.c.length;)xA(oIn(i=uG(N3(r),12),rmt))===xA(n)&&(a=e.Math.max(a,zUn(i,c)));return 0==c.c.length||kfn(n,emt,a),-1!=a?c:null}function wDn(n,t,e){var i,r,c,a,o,u;r=(i=(c=uG(zq(t.e,0),18).c).i).k,o=(a=(u=uG(zq(e.g,0),18).d).i).k,r==(zIn(),wbt)?kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)):kfn(n,(GYn(),Zpt),c),kfn(n,(GYn(),nmt),o==wbt?uG(oIn(a,nmt),12):u)}function dDn(n){var t,e,i;this.c=n,i=uG(oIn(n,(jYn(),Byt)),88),t=uM(pK(oIn(n,dyt))),e=uM(pK(oIn(n,KTt))),i==(xdn(),JDt)||i==YDt||i==ZDt?this.b=t*e:this.b=1/(t*e),this.j=uM(pK(oIn(n,STt))),this.e=uM(pK(oIn(n,ETt))),this.f=n.b.c.length}function gDn(n,t){var e,i,r,c,a;return t&=63,(i=!!((e=n.h)&b0n))&&(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?l0n:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?l0n:0,c=i?f0n:0,r=e>>t-44),p$(r&f0n,c&f0n,a&l0n)}function pDn(n){var t,i,r,c,a,o;for(this.c=new Zm,this.d=n,r=M0n,c=M0n,t=T0n,i=T0n,o=Fkn(n,0);o.b!=o.d.c;)a=uG(I6(o),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 gY(r,c,t-r,i-c)}function mDn(n,t){var e,i,r,c;for(i=new Ww(n.b);i.a<i.c.c.length;)for(c=new Ww(uG(N3(i),30).a);c.a<c.c.c.length;)for((r=uG(N3(c),10)).k==(zIn(),bbt)&&Gqn(r,t),e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)Nhn(uG(N9(e),18),t)}function vDn(n,t){var e,i,r;for(t.Ug("Layer constraint preprocessing",1),e=new Zm,r=new N4(n.a,0);r.b<r.d.gc();)MK(r.b<r.d.gc()),sfn(i=uG(r.d.Xb(r.c=r.b++),10))&&(GPn(i),mv(e.c,i),LQ(r));0==e.c.length||kfn(n,(GYn(),Upt),e),t.Vg()}function kDn(n){var t,e;for(n.e=Inn(YHt,W1n,28,n.p.c.length,15,1),n.k=Inn(YHt,W1n,28,n.p.c.length,15,1),e=new Ww(n.p);e.a<e.c.c.length;)t=uG(N3(e),10),n.e[t.p]=x5(new Fz(ix(qgn(t).a.Kc(),new h))),n.k[t.p]=x5(new Fz(ix(Xgn(t).a.Kc(),new h)))}function yDn(n){var t,e,i,r,c;for(i=0,n.q=new Zm,t=new ek,c=new Ww(n.p);c.a<c.c.c.length;){for((r=uG(N3(c),10)).p=i,e=new Fz(ix(Xgn(r).a.Kc(),new h));hDn(e);)FV(t,uG(N9(e),18).d.i);t.a.Bc(r),kD(n.q,new oX(t)),t.a.$b(),++i}}function MDn(n,t){var e,i,r,c,a,o,u,s,h;if(n.a.f>0&&F$(t,44)&&(n.a._j(),c=null==(u=(s=uG(t,44)).ld())?0:Hon(u),a=iF(n.a,c),e=n.a.d[a]))for(i=uG(e.g,379),h=e.i,o=0;o<h;++o)if((r=i[o]).Bi()==c&&r.Fb(s))return MDn(n,s),!0;return!1}function TDn(n){var t,e,i,r,c,a,o;if((t=n.qi(Drt))&&null!=(o=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"settingDelegates")))){for(e=new Zm,c=0,a=(r=WGn(o,"\\w+")).length;c<a;++c)i=r[c],mv(e.c,i);return e}return hZ(),hZ(),zot}function jDn(n){var t,e,i,r;for(r=uG(Y9(n.a,(gPn(),ddt)),15).Kc();r.Ob();)pW(n,i=uG(r.Pb(),105),(e=(t=kz(i.k)).Hc((KQn(),yRt))?t.Hc(kRt)?t.Hc(KRt)?t.Hc(_Rt)?null:ydt:Tdt:Mdt:kdt)[0],(gon(),jdt),0),pW(n,i,e[1],Edt,1),pW(n,i,e[2],Sdt,1)}function EDn(n,t){var e,i;UFn(n,t,e=CHn(t)),BPn(n.a,uG(oIn(HQ(t.b),(GYn(),dmt)),234)),vUn(n),OPn(n,t),i=Inn(YHt,W1n,28,t.b.j.c.length,15,1),OWn(n,t,(KQn(),yRt),i,e),OWn(n,t,kRt,i,e),OWn(n,t,KRt,i,e),OWn(n,t,_Rt,i,e),n.a=null,n.c=null,n.b=null}function SDn(n,t,e){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),Czn(n.e),!n.e&&(n.e=new f_(aFt,n,7,4)),void CW(n.e,uG(e,16));case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),Czn(n.d),!n.d&&(n.d=new f_(aFt,n,8,5)),void CW(n.d,uG(e,16))}ISn(n,t,e)}function PDn(n,t){var e,i,r,c,a;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(a=uG(t,15),n.gc()!=a.gc())return!1;for(c=a.Kc(),i=n.Kc();i.Ob();)if(e=i.Pb(),r=c.Pb(),!(xA(e)===xA(r)||null!=e&&udn(e,r)))return!1;return!0}function CDn(n,t){var e,i,r,c;for((c=uG(l8(sin(sin(new fX(null,new h3(t.b,16)),new Re),new Ke),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Jc(new Fe),e=0,r=c.Kc();r.Ob();)-1==(i=uG(r.Pb(),12)).p&&NDn(n,i,e++)}function IDn(n){switch(n.g){case 0:return new pl;case 1:return new dl;case 2:return new gl;case 3:return new FI;case 4:return new iz;default:throw hv(new vM("No implementation is available for the node placer "+(null!=n.f?n.f:""+n.g)))}}function ODn(n){switch(n.g){case 0:return new ez;case 1:return new il;case 2:return new el;case 3:return new nl;case 4:return new tL;default:throw hv(new vM("No implementation is available for the cycle breaker "+(null!=n.f?n.f:""+n.g)))}}function ADn(n,t){var e,i,r,c,a;s8(i=new lS,t,i.c.b,i.c);do{for(MK(0!=i.b),e=uG(Lrn(i,i.a.a),40),n.b[e.g]=1,c=Fkn(e.d,0);c.b!=c.d.c;)a=(r=uG(I6(c),65)).c,1==n.b[a.g]?aq(n.a,r):2==n.b[a.g]?n.b[a.g]=1:s8(i,a,i.c.b,i.c)}while(0!=i.b)}function LDn(n,t,e){var i;i=null,t&&(i=t.d),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a-i.b+e.a,t.n.b+t.o.b+i.a+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b-i.d+e.b)),CEn(n,new FC(t.n.a+t.o.a+i.c+e.a,t.n.b+t.o.b+i.a+e.b))}function NDn(n,t,e){var i,r,c;for(t.p=e,c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(t),new Wd(t)])));hDn(c);)-1==(i=uG(N9(c),12)).p&&NDn(n,i,e);if(t.i.k==(zIn(),wbt))for(r=new Ww(t.i.j);r.a<r.c.c.length;)(i=uG(N3(r),12))!=t&&-1==i.p&&NDn(n,i,e)}function $Dn(n,t){var e,i,r,c,a;for(i=new u8,c=g8(new IM(n.g)).a.ec().Kc();c.Ob();){if(!(r=uG(c.Pb(),10))){t.bh("There are no classes in a balanced layout.");break}(e=uG(ain(i,a=n.j[r.p]),15))||Akn(i,a,e=new Zm),e.Fc(r)}return i}function DDn(n){var t,i,r,c,a;if(c=uG(l8(_0(f3(n)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),r=B3n,c.gc()>=2)for(t=pK((i=c.Kc()).Pb());i.Ob();)a=t,t=pK(i.Pb()),r=e.Math.min(r,(tJ(t),t-(tJ(a),a)));return r}function xDn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).b.g==n.g&&!m_(e.b.c,H9n)&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new yp(e))&&mv(r.c,e);return f$(r,new Ca),r}function RDn(n,t){var e,i,r;if(xA(t)===xA(WW(n)))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),(r=n.gc())!=i.gc())return!1;if(F$(i,59)){for(e=0;e<r;e++)if(!xQ(n.Xb(e),i.Xb(e)))return!1;return!0}return OMn(n.Kc(),i.Kc())}function KDn(n,t,e,i,r,c){var a,o,u,s;for(o=!Qj(JJ(n.Oc(),new hd(new Ye))).Bd((vS(),Kut)),a=n,c==(xdn(),nxt)&&(a=Spn(a)),s=a.Kc();s.Ob();)(u=uG(s.Pb(),72)).n.a=t.a,u.n.b=o?t.b+(i.b-u.o.b)/2:r?t.b:t.b+i.b-u.o.b,t.a+=u.o.a+e}function FDn(n,t){var e,i,r;for(t.Ug("Port side processing",1),r=new Ww(n.a);r.a<r.c.c.length;)Tqn(uG(N3(r),10));for(e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)Tqn(uG(N3(i),10));t.Vg()}function _Dn(n,t,e){var i,r,c,a;if(e)for(r=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);r.Ob();)(c=v6(e,uG(r.Pb(),17).a))&&(a=Ncn(k6(c,get),t),vJ(n.f,a,c),Iet in c.a&&Gan(a,k6(c,Iet)),fCn(c,a),kLn(c,a))}function BDn(n,t,e){var i,r,c,a,o;if(!(o=e)&&(o=xG(new fy,0)),o.Ug(K4n,1),JVn(n.c,t),1==(a=SWn(n.a,t)).gc())czn(uG(a.Xb(0),36),o);else for(c=1/a.gc(),r=a.Kc();r.Ob();){if(i=uG(r.Pb(),36),e.$g())return;czn(i,o.eh(c))}xM(n.a,a,t),$_n(t),o.Vg()}function HDn(n,t,e){var i,r,c,a,o;if(!(r=n.f)&&(r=uG(n.a.a.ec().Kc().Pb(),60)),TEn(r,t,e),1!=n.a.a.gc())for(i=t*e,a=n.a.a.ec().Kc();a.Ob();)(c=uG(a.Pb(),60))!=r&&((o=Q6(c)).f.d?(c.d.d+=i+Z2n,c.d.a-=i+Z2n):o.f.a&&(c.d.a-=i+Z2n))}function UDn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w;return o=i-n,u=r-t,s=(a=e.Math.atan2(o,u))+_3n,h=a-_3n,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,n7(Uhn(cT(PNt,1),zZn,8,0,[new MO(f,b),new MO(l,w)]))}function GDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],u=uM(n.p[l.p])+uM(n.d[a.p])-a.d.d,(s=ion(a,r))&&(h=n.g[s.p],o=uM(n.p[h.p])+uM(n.d[s.p])+s.o.b+s.d.a,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function qDn(n,t,i,r){var c,a,o,u,s,h,f,l;c=i,a=f=t;do{a=n.a[a.p],l=n.g[a.p],o=uM(n.p[l.p])+uM(n.d[a.p])+a.o.b+a.d.a,(s=nfn(a,r))&&(h=n.g[s.p],u=uM(n.p[h.p])+uM(n.d[s.p])-s.d.d,c=e.Math.min(c,u-(o+y$(n.k,a,s))))}while(f!=a);return c}function XDn(n,t){var e;if(t.Ug("Equal Whitespace Eliminator",1),!vnn(n,(lBn(),SOt)))throw hv(new jM("The graph does not contain rows."));Ewn(uG(zDn(n,SOt),15),uM(pK(zDn(n,vOt))),(e=uM(pK(zDn(n,pOt))),uM(pK(zDn(n,(S_n(),bAt)))),e)),t.Vg()}function zDn(n,t){var e,i;return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),null!=(i=Lmn(n.o,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e))),e)}function VDn(){VDn=E,Bxt=new NO("H_LEFT",0),_xt=new NO("H_CENTER",1),Uxt=new NO("H_RIGHT",2),Vxt=new NO("V_TOP",3),zxt=new NO("V_CENTER",4),Xxt=new NO("V_BOTTOM",5),Gxt=new NO("INSIDE",6),qxt=new NO("OUTSIDE",7),Hxt=new NO("H_PRIORITY",8)}function WDn(n,t){var e,i,r,c,a,o,u;if(!t.f)throw hv(new vM("The input edge is not a tree edge."));for(c=null,r=vZn,i=new Ww(n.d);i.a<i.c.c.length;)o=(e=uG(N3(i),218)).d,u=e.e,ILn(n,o,t)&&!ILn(n,u,t)&&(a=u.e-o.e-e.a)<r&&(r=a,c=e);return c}function QDn(n){var t,e,i,r,c,a;if(!(n.f.e.c.length<=1)){t=0,r=Z$n(n),e=M0n;do{for(t>0&&(r=e),a=new Ww(n.f.e);a.a<a.c.c.length;)oM(gK(oIn(c=uG(N3(a),153),(Bjn(),alt))))||(i=uGn(n,c),JF(dL(c.d),i));e=Z$n(n)}while(!oQ(n,t++,r,e))}}function JDn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.a<i.c.c.length;)r=(e=uG(N3(i),72)).n,n.a==(qhn(),udt)||n.i==(KQn(),kRt)?r.a=c:n.a==sdt||n.i==(KQn(),_Rt)?r.a=c+n.j.a-e.o.a:r.a=c+(n.j.a-e.o.a)/2,r.b=a,JF(r,t),a+=e.o.b+n.e}function YDn(n,t){var e,i,r,c,a;(c=m6(n,"individualSpacings"))&&(!vnn(t,(XYn(),ODt))&&(e=new Qu,Myn(t,ODt,e)),r=uG(zDn(t,ODt),385),i=null,(a=c)&&(i=new JE(a,Yon(a,Inn($ot,zZn,2,0,6,1)))),i&&z8(i,new cA(a,r)))}function ZDn(n,t){var e,i,r,c,a,o;return c=null,(Ket in(a=n).a||Fet in a.a||Met in a.a)&&(o=Qhn(t),i=m6(a,Ket),Xpn(new um(o).a,i),r=m6(a,Fet),zpn(new mm(o).a,r),e=p6(a,Met),lPn(new ym(o).a,e),c=e),c}function nxn(n,t){var e,i,r;if(t===n)return!0;if(F$(t,552)){if(r=uG(t,849),n.a.d!=r.a.d||uY(n).gc()!=uY(r).gc())return!1;for(i=uY(r).Kc();i.Ob();)if(S2(n,(e=uG(i.Pb(),425)).a.ld())!=uG(e.a.md(),16).gc())return!1;return!0}return!1}function txn(n){var t,e,i,r;return t=i=uG(n.a,17).a,e=r=uG(n.b,17).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 WO(xwn(t),xwn(e))}function exn(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?Hon(n.a)-Hon(t.a):n.d==(Z6(),YEt)&&t.d==JEt?-1:n.d==JEt&&t.d==YEt?1:0}function ixn(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=dmn(n.a,a,i))>0&&r<B3n?(e=GDn(n.a,i.i,r,n.c),Grn(n.a,i.i,-e),e>0):r<0&&-r<B3n&&(e=qDn(n.a,i.i,-r,n.c),Grn(n.a,i.i,e),e>0)}function rxn(n,t,e,i){var r,c,a,o,u,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Ww(n.c);s.a<s.c.c.length;)o=(u=uG(N3(s),27)).g,a=u.f,ycn(u,u.i+c*r),Mcn(u,u.j+i*e),kcn(u,u.g+r),vcn(u,n.a),++c,tLn(u,new MO(u.g,u.f),new MO(o,a))}function cxn(n){var t,e,i,r,c,a,o;if(null==n)return null;for(o=n.length,a=Inn(tUt,ret,28,r=(o+1)/2|0,15,1),o%2!=0&&(a[--r]=V_n((s3(o-1,n.length),n.charCodeAt(o-1)))),e=0,i=0;e<r;++e)t=V_n(VJ(n,i++)),c=V_n(VJ(n,i++)),a[e]=(t<<4|c)<<24>>24;return a}function axn(n){if(n.ze()){var t=n.c;return t.Ae()?n.o="["+t.n:t.ze()?n.o="["+t.xe():n.o="[L"+t.xe()+";",n.b=t.we()+"[]",void(n.k=t.ye()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=fvn(".",[e,fvn("$",i)]),n.b=fvn(".",[e,fvn(".",i)]),n.k=i[i.length-1]}function oxn(n,t){var e,i,r,c,a;for(a=null,c=new Ww(n.e.a);c.a<c.c.c.length;)if((r=uG(N3(c),125)).b.a.c.length==r.g.a.c.length){for(i=r.e,a=UOn(r),e=r.e-uG(a.a,17).a+1;e<r.e+uG(a.b,17).a;e++)t[e]<t[i]&&(i=e);t[i]<t[r.e]&&(--t[r.e],++t[i],r.e=i)}}function uxn(n){var t,i,r,c,a,o,u;for(r=M0n,i=T0n,t=new Ww(n.e.b);t.a<t.c.c.length;)for(a=new Ww(uG(N3(t),30).a);a.a<a.c.c.length;)c=uG(N3(a),10),o=(u=uM(n.p[c.p]))+uM(n.b[n.g[c.p].p]),r=e.Math.min(r,u),i=e.Math.max(i,o);return i-r}function sxn(n){var t,e,i,r;return YXn(),t=-1==(i=xL(n,$Cn(35)))?n:(Knn(0,i,n.length),n.substr(0,i)),e=-1==i?null:(s3(i+1,n.length+1),n.substr(i+1)),(r=_5(GFt,t))?null!=e&&(r=Vln(r,(tJ(e),e))):(r=LYn(t),G8(GFt,t,r),null!=e&&(r=Vln(r,e))),r}function hxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=AHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function fxn(n,t,e,i){var r,c,a,o,u,s;for(u=null,o=0,s=(r=LHn(n,t)).gc();o<s;++o)if(m_(i,BJ(Nen(n,c=uG(r.Xb(o),179)))))if(a=HJ(Nen(n,c)),null==e){if(null==a)return c;!u&&(u=c)}else{if(m_(e,a))return c;null==a&&!u&&(u=c)}return null}function lxn(n,t,e){var i,r,c,a,o,u;if(a=new ls,o=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk())for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&ttn(a,r);else for(c=0;c<n.i;++c)r=i[c],o.am(r.Lk())&&(u=r.md(),ttn(a,e?ONn(n,t,c,a.i,u):u));return g5(a)}function bxn(n){var t,e,i,r,c,a,o;if(n&&(t=n.qi(Drt))&&null!=(a=mK(Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"conversionDelegates")))){for(o=new Zm,r=0,c=(i=WGn(a,"\\w+")).length;r<c;++r)e=i[r],mv(o.c,e);return o}return hZ(),hZ(),zot}function wxn(n,t){var e,i,r,c,a,o;for(c=(1==t?$lt:Nlt).a.ec().Kc();c.Ob();)for(r=uG(c.Pb(),88),o=uG(Y9(n.f.c,r),21).Kc();o.Ob();)switch(a=uG(o.Pb(),42),i=uG(a.b,86),e=uG(a.a,194).c,r.g){case 2:case 1:i.g.d+=e;break;case 4:case 3:i.g.c+=e}}function dxn(n,t){var e,i,r,c;for(e=new rpn(Qdt),vAn(),r=0,c=(i=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;r<c;++r)yF(e,i[r],new Zm);return kS(YJ(JJ(sin(new fX(null,new h3(n.b,16)),new Ze),new ni),new bg(t)),new wg(e)),e}function gxn(n,t,i){var r,c,a,o,u,s,h,f;for(a=t.Kc();a.Ob();)s=(c=uG(a.Pb(),27)).i+c.g/2,f=c.j+c.f/2,u=s-((o=n.f).i+o.g/2),h=f-(o.j+o.f/2),r=e.Math.sqrt(u*u+h*h),u*=n.e/r,h*=n.e/r,i?(s-=u,f-=h):(s+=u,f+=h),ycn(c,s-c.g/2),Mcn(c,f-c.f/2)}function pxn(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 mxn(n,t){var e,i,r,c,a,o,u,s,h;for(s=-1,h=0,o=0,u=(a=n).length;o<u;++o){for(c=a[o],e=new KG(-1==s?n[0]:n[s],t,(Cwn(),hjt)),i=0;i<c.length;i++)for(r=i+1;r<c.length;r++)vR(c[i],(GYn(),imt))&&vR(c[r],imt)&&rYn(e,c[i],c[r])>0&&++h;++s}return h}function vxn(n){var t;return(t=new lx(Ij(n.Rm))).a+="@",JA(t,(Hon(n)>>>0).toString(16)),n.Vh()?(t.a+=" (eProxyURI: ",QA(t,n._h()),n.Kh()&&(t.a+=" eClass: ",QA(t,n.Kh())),t.a+=")"):n.Kh()&&(t.a+=" (eClass: ",QA(t,n.Kh()),t.a+=")"),t.a}function kxn(n){var t,e,i;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));for(n.d==(xdn(),ZDt)&&GWn(n,JDt),e=new Ww(n.a.a);e.a<e.c.c.length;)(t=uG(N3(e),316)).g=t.i;for(i=new Ww(n.a.b);i.a<i.c.c.length;)uG(N3(i),60).i=T0n;return n.b.cf(n),n}function yxn(n,t){var e,i,r,c,a;if(t<2*n.b)throw hv(new vM("The knot vector must have at least two time the dimension elements."));for(n.f=1,r=0;r<n.b;r++)kD(n.e,0);for(e=a=t+1-2*n.b,c=1;c<a;c++)kD(n.e,c/e);if(n.d)for(i=0;i<n.b;i++)kD(n.e,1)}function Mxn(n,t){var e,i,r,c,a;if(c=t,!(a=uG(kan(UW(n.i),c),27)))throw hv(new SM("Unable to find elk node for json object '"+k6(c,Iet)+"' Panic!"));i=p6(c,"edges"),ENn((e=new JO(n,a)).a,e.b,i),r=p6(c,pet),vEn(new nm(n).a,r)}function Txn(n,t,e,i){var r,c,a,o,u;if(null!=i){if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if((a=uG(c[o],136)).Bi()==e&&udn(i,a.ld()))return o}else if(r=n.d[t])for(c=r.g,u=r.i,o=0;o<u;++o)if(xA((a=uG(c[o],136)).ld())===xA(i))return o;return-1}function jxn(n,t){var e,i;return F$(e=null==t?DA(FX(n.f,null)):_P(n.i,t),241)?((i=uG(e,241)).zi(),i):F$(e,507)?((i=uG(e,2037).a)&&(null==i.yb||(null==t?VAn(n.f,null,i):kgn(n.i,t,i))),i):null}function Exn(n){var t,e,i,r,c,a,o;if(L_n(),null==n)return null;if((r=n.length)%2!=0)return null;for(t=_en(n),e=Inn(tUt,ret,28,c=r/2|0,15,1),i=0;i<c;i++){if(-1==(a=pHt[t[2*i]]))return null;if(-1==(o=pHt[t[2*i+1]]))return null;e[i]=(a<<4|o)<<24>>24}return e}function Sxn(n,t,e){var i,r,c;if(!(r=uG(AJ(n.i,t),314)))if(r=new Yin(n.d,t,e),UV(n.i,t,r),vvn(t))iD(n.a,t.c,t.b,r);else switch(c=MAn(t),i=uG(AJ(n.p,c),252),c.g){case 1:case 3:r.j=!0,nM(i,t.b,r);break;case 4:case 2:r.k=!0,nM(i,t.c,r)}return r}function Pxn(n,t){var e,i,r,c,a,o,u,s,h;for(u=iR(n.c-n.b&n.a.length-1),s=null,h=null,c=new XJ(n);c.a!=c.b;)r=uG(rwn(c),10),e=(o=uG(oIn(r,(GYn(),Zpt)),12))?o.i:null,i=(a=uG(oIn(r,nmt),12))?a.i:null,s==e&&h==i||(F$n(u,t),s=e,h=i),mv(u.c,r);F$n(u,t)}function Cxn(n,t,e,i){var r,c,a,o,u,s;if(o=new ls,u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk())for(a=0;a<n.i;++a)c=r[a],u.am(c.Lk())&&ttn(o,c);else for(a=0;a<n.i;++a)c=r[a],u.am(c.Lk())&&(s=c.md(),ttn(o,i?ONn(n,t,a,o.i,s):s));return gmn(o,e)}function Ixn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).g);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).d.i)&&(o=Ixn(n,u),c=e.Math.max(c,o+1));return $pn(n,t,c),c}function Oxn(n,t){var i,r,c,a,o,u;if((r=n.b[t.p])>=0)return r;for(c=1,a=new Ww(t.j);a.a<a.c.c.length;)for(i=new Ww(uG(N3(a),12).e);i.a<i.c.c.length;)t!=(u=uG(N3(i),18).c.i)&&(o=Oxn(n,u),c=e.Math.max(c,o+1));return mMn(n,t,c),c}function Axn(n,t,e){var i,r,c;for(i=1;i<n.c.length;i++){for(u3(i,n.c.length),c=uG(n.c[i],10),r=i;r>0&&t.Ne((u3(r-1,n.c.length),uG(n.c[r-1],10)),c)>0;)Y8(n,r,(u3(r-1,n.c.length),uG(n.c[r-1],10))),--r;u3(r,n.c.length),n.c[r]=c}e.a=new Ym,e.b=new Ym}function Lxn(n,t,e){var i,r,c,a,o,u,s;for(s=new nB(i=uG(t.e&&t.e(),9),uG(MF(i,i.length),9),0),a=0,o=(c=WGn(e,"[\\[\\]\\s,]+")).length;a<o;++a)if(0!=KAn(r=c[a]).length){if(null==(u=NNn(n,r)))return null;Mon(s,uG(u,22))}return s}function Nxn(n){var t,e,i,r;for(r=n.length,t=null,i=0;i<r;i++)s3(i,n.length),xL(".*+?{[()|\\^$",$Cn(e=n.charCodeAt(i)))>=0?(t||(t=new VM,i>0&&VA(t,(Knn(0,i,n.length),n.substr(0,i)))),t.a+="\\",TQ(t,e&D1n)):t&&TQ(t,e&D1n);return t?t.a:n}function $xn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a<i.c.c.length;)t=uG(N3(i),86),tJ(0),(r=0)>0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function Dxn(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(KQn(),yRt)||t==kRt?(prn(uG(Rfn(n),15),(Ajn(),$xt)),prn(uG(Rfn(n),15),Dxt)):(prn(uG(Rfn(n),15),(Ajn(),Dxt)),prn(uG(Rfn(n),15),$xt));else for(i=new XJ(n);i.a!=i.b;)prn(uG(rwn(i),15),e)}function xxn(n,t){var e,i,r,c,a,o;for(a=new N4(i=rG(new Pm(n)),i.c.length),o=new N4(r=rG(new Pm(t)),r.c.length),c=null;a.b>0&&o.b>0&&(MK(a.b>0),e=uG(a.a.Xb(a.c=--a.b),27),MK(o.b>0),e==uG(o.a.Xb(o.c=--o.b),27));)c=e;return c}function Rxn(n,t,e){var i,r,c,a;Y3(n,t)>Y3(n,e)?(i=Dgn(e,(KQn(),kRt)),n.d=i.dc()?0:dq(uG(i.Xb(0),12)),a=Dgn(t,_Rt),n.b=a.dc()?0:dq(uG(a.Xb(0),12))):(r=Dgn(e,(KQn(),_Rt)),n.d=r.dc()?0:dq(uG(r.Xb(0),12)),c=Dgn(t,kRt),n.b=c.dc()?0:dq(uG(c.Xb(0),12)))}function Kxn(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=e*uM(pK(r.b.of(bht))),r.e.b=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),yRt)?-i.Mf().b-uM(pK(i.of(uDt))):uM(pK(i.of(uDt))):i.ag()==(KQn(),yRt)?-i.Mf().b:0}function Fxn(n,t){var e,i,r,c;for(t.Ug("Self-Loop pre-processing",1),i=new Ww(n.a);i.a<i.c.c.length;)Epn(e=uG(N3(i),10))&&(c=new kkn(e),kfn(e,(GYn(),vmt),c),PUn(c),kS(YJ(sin(new fX(null,new h3((r=c).d,16)),new Hi),new Ui),new Gi),nFn(r));t.Vg()}function _xn(n){var t,e,i,r,c,a,o,u;t=!0,r=null,c=null;n:for(u=new Ww(n.a);u.a<u.c.c.length;)for(i=new Fz(ix(qgn(o=uG(N3(u),10)).a.Kc(),new h));hDn(i);){if(e=uG(N9(i),18),r&&r!=o){t=!1;break n}if(r=o,a=e.c.i,c&&c!=a){t=!1;break n}c=a}return t}function Bxn(n,t,e){var i,r,c,a,o,u;for(c=-1,o=-1,a=0;a<t.c.length&&(u3(a,t.c.length),!((r=uG(t.c[a],339)).c>n.c));a++)r.a>=n.s&&(c<0&&(c=a),o=a);return u=(n.s+n.c)/2,c>=0&&(u=wP((u3(i=fHn(n,t,c,o),t.c.length),uG(t.c[i],339))),a$n(t,i,e)),u}function Hxn(n,t,e){var i,r,c,a,o;for(Yan(r=new vs,(tJ(t),t)),!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),o=r.b,a=1;a<e.length;a+=2)rSn(o,e[a-1],e[a]);for(!n.Ab&&(n.Ab=new fV(c_t,n,0,3)),i=n.Ab,c=0;c<0;++c)i=MQ(uG(zrn(i,i.i-1),598));ttn(i,r)}function Uxn(n,t,e){var i,r,c;for(fF.call(this,new Zm),this.a=t,this.b=e,this.e=n,n.b&&sXn(n),i=n.a,this.d=hY(i.a,this.a),this.c=hY(i.b,this.b),Pdn(this,this.d,this.c),sNn(this),c=this.e.e.a.ec().Kc();c.Ob();)(r=uG(c.Pb(),272)).c.c.length>0&&tVn(this,r)}function Gxn(n,t,e,i,r,c){var a,o,u;if(!r[t.a]){for(r[t.a]=!0,!(a=i)&&(a=new d7),kD(a.e,t),u=c[t.a].Kc();u.Ob();)(o=uG(u.Pb(),290)).d!=e&&o.c!=e&&(o.c!=t&&Gxn(n,o.c,t,a,r,c),o.d!=t&&Gxn(n,o.d,t,a,r,c),kD(a.c,o),Ohn(a.d,o.b));return a}return null}function qxn(n){var t,e,i;for(t=0,e=new Ww(n.e);e.a<e.c.c.length;)o9(new fX(null,new h3(uG(N3(e),18).b,16)),new pe)&&++t;for(i=new Ww(n.g);i.a<i.c.c.length;)o9(new fX(null,new h3(uG(N3(i),18).b,16)),new me)&&++t;return t>=2}function Xxn(n,t,e,i,r){var c,a,o,u,s;for(c=n.c.d.j,a=uG(hyn(e,0),8),s=1;s<e.b;s++)u=uG(hyn(e,s),8),s8(i,a,i.c.b,i.c),o=vD(JF(new eN(a),u),.5),JF(o,vD(new O2(Tln(c)),r)),s8(i,o,i.c.b,i.c),a=u,c=0==t?qdn(c):Udn(c);aq(i,(MK(0!=e.b),uG(e.c.b.c,8)))}function zxn(n){return VDn(),!(qsn(X1(WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[qxt])),n))>1||qsn(X1(WX(Bxt,Uhn(cT(eRt,1),p1n,95,0,[_xt,Uxt])),n))>1||qsn(X1(WX(Vxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Xxt])),n))>1)}function Vxn(n,t,e){var i,r,c;for(c=new Ww(n.t);c.a<c.c.c.length;)(i=uG(N3(c),274)).b.s<0&&i.c>0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&aq(t,i.b));for(r=new Ww(n.i);r.a<r.c.c.length;)(i=uG(N3(r),274)).a.s<0&&i.c>0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&aq(e,i.a))}function Wxn(n){var t,e,i;if(null==n.g&&(n.d=n.bj(n.f),ttn(n,n.d),n.c))return n.f;if(i=(t=uG(n.g[n.i-1],51)).Pb(),n.e=t,(e=n.bj(i)).Ob())n.d=e,ttn(n,e);else for(n.d=null;!t.Ob()&&(uQ(n.g,--n.i,null),0!=n.i);)t=uG(n.g[n.i-1],51);return i}function Qxn(n,t){var e,i,r,c,a,o;if(r=(i=t).Lk(),EFn(n.e,r)){if(r.Si()&&H5(n,r,i.md()))return!1}else for(o=VKn(n.e.Dh(),r),e=uG(n.g,124),c=0;c<n.i;++c)if(a=e[c],o.am(a.Lk()))return!udn(a,i)&&(uG(Uyn(n,c,t),76),!0);return ttn(n,t)}function Jxn(n,t,i,r){var c,a,o;for(Hb(c=new gMn(n),(zIn(),bbt)),kfn(c,(GYn(),rmt),t),kfn(c,gmt,r),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,Zpt,t.c),kfn(c,nmt,t.d),xFn(t,c),o=e.Math.floor(i/2),a=new Ww(c.j);a.a<a.c.c.length;)uG(N3(a),12).n.b=o;return c}function Yxn(n){var t,i,r,c,a,o;for(t=0,i=new Ww(n.a);i.a<i.c.c.length;)for(c=new Fz(ix(Xgn(uG(N3(i),10)).a.Kc(),new h));hDn(c);)n==(r=uG(N9(c),18)).d.i.c&&r.c.j==(KQn(),_Rt)&&(a=n3(r.c).b,o=n3(r.d).b,t=e.Math.max(t,e.Math.abs(o-a)));return t}function Zxn(n,t,e){var i,r,c,a;for(e.Ug("ELK Force",1),oM(gK(zDn(t,(rGn(),Ift))))||J1(new Sd((vP(),new Vy(t)))),cEn(a=yfn(t)),rln(n,uG(oIn(a,jft),432)),r=(c=tqn(n.a,a)).Kc();r.Ob();)i=uG(r.Pb(),235),DGn(n.b,i,e.eh(1/c.gc()));YJn(a=lJn(c)),e.Vg()}function nRn(n,t,i){switch(i.g){case 1:return new MO(t.a,e.Math.min(n.d.b,t.b));case 2:return new MO(e.Math.max(n.c.a,t.a),t.b);case 3:return new MO(t.a,e.Math.max(n.c.b,t.b));case 4:return new MO(e.Math.min(t.a,n.d.a),t.b)}return new MO(t.a,t.b)}function tRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).d&&(e.d=new f_(aFt,e,8,5)),e.d));return WW(t),new iN(t)}function eRn(n){var t,e,i;for(kD(t=iR(1+(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c).i),(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),i=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));i.e!=i.i.gc();)kD(t,(!(e=uG(Zkn(i),123)).e&&(e.e=new f_(aFt,e,7,4)),e.e));return WW(t),new iN(t)}function iRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return sHt;if(45==t)return uHt}else if(3==e)return sHt;return YIn(i)}function rRn(n,t){var e,i,r;if(t.Ug("Breaking Point Processor",1),WWn(n),oM(gK(oIn(n,(jYn(),GTt))))){for(i=new Ww(n.b);i.a<i.c.c.length;)for(e=0,r=new Ww(uG(N3(i),30).a);r.a<r.c.c.length;)uG(N3(r),10).p=e++;kXn(n),dFn(n,!0),dFn(n,!1)}t.Vg()}function cRn(n,t,e,i){var r,c,a,o,u,s,h,f,l;for(f=i?(KQn(),_Rt):(KQn(),kRt),r=!1,s=0,h=(u=t[e]).length;s<h;++s)L_(uG(oIn(o=u[s],(jYn(),JMt)),101))||(a=o.e,(l=!Dgn(o,f).dc()&&!!a)&&(c=SPn(a),n.b=new IPn(c,i?0:c.length-1)),r|=d_n(n,o,f,l));return r}function aRn(n,t,e,i){var r,c,a;if(a=wSn(t,e),mv(i.c,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 Fz(ix(Ggn(a).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&(v9(r)||r.c.i.c!=r.d.i.c)&&r!=t)return aRn(n,r,a,i);return i}function oRn(n){var t,e,i,r;for(t=0,e=0,r=new Ww(n.j);r.a<r.c.c.length;)if(t=pz(Lgn(t,D7(JJ(new fX(null,new h3((i=uG(N3(r),12)).e,16)),new Wc)))),e=pz(Lgn(e,D7(JJ(new fX(null,new h3(i.g,16)),new Qc)))),t>1||e>1)return 2;return t+e==1?2:0}function uRn(n,t){var i,r,c,a;return c=n.a*X0n+1502*n.b,a=n.b*X0n+11,c+=i=e.Math.floor(a*z0n),a-=i*V0n,c%=V0n,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*but[t]):((r=n.a*(1<<t-24)+e.Math.floor(n.b*wut[t]))>=2147483648&&(r-=4294967296),r)}function sRn(n,t,e){var i,r,c,a,o,u,s;for(c=new Zm,Uqn(n,s=new lS,a=new lS,t),RVn(n,s,a,t,e),u=new Ww(n);u.a<u.c.c.length;)for(r=new Ww((o=uG(N3(u),118)).k);r.a<r.c.c.length;)i=uG(N3(r),132),(!t||i.c==(_7(),$St))&&o.g>i.b.g&&mv(c.c,i);return c}function hRn(n,t,e){var i,r,c,a,o;for(a=n.c,c=(e.q?e.q:(hZ(),hZ(),Vot)).vc().Kc();c.Ob();)r=uG(c.Pb(),44),!Qj(JJ(new fX(null,new h3(a,16)),new hd(new kO(t,r)))).Bd((vS(),Kut))&&(F$(o=r.md(),4)&&null!=(i=Nvn(o))&&(o=i),t.qf(uG(r.ld(),149),o))}function fRn(n,t,e){var i;if(_J(n.b),JV(n.b,(Rdn(),HAt),(eP(),GLt)),JV(n.b,UAt,t.g),JV(n.b,GAt,t.a),n.a=Qzn(n.b,t),e.Ug("Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Ww(n.a);i.a<i.c.c.length;)uG(N3(i),47).Kf(t,e.eh(1));e.Vg()}function lRn(n,t,e){var i,r,c;if(!(c=iVn((gAn(),kBt),n.Dh(),t)))throw hv(new vM(Gtt+t.xe()+qtt));if(PP(),!uG(c,69).xk()&&!(c=_3(Nen(kBt,c))))throw hv(new vM(Gtt+t.xe()+qtt));r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Xl(t,e)}function bRn(n,t){var e,i,r,c;if(t){for(c=!(r=F$(n.Cb,90)||F$(n.Cb,102))&&F$(n.Cb,331),e=new DD((!t.a&&(t.a=new AX(t,g_t,t)),t.a));e.e!=e.i.gc();)if(i=MGn(uG(Zkn(e),89)),r?F$(i,90):c?F$(i,156):i)return i;return r?(YYn(),x_t):(YYn(),N_t)}return null}function wRn(n,t){var e,i,r;for(t.Ug("Resize child graph to fit parent.",1),i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),30),Ohn(n.a,e.a),e.a.c.length=0;for(r=new Ww(n.a);r.a<r.c.c.length;)a2(uG(N3(r),10),null);n.b.c.length=0,$Fn(n),n.e&&xUn(n.e,n),t.Vg()}function dRn(n,t){var e,i,r,c;for(t.Ug("Edge joining",1),e=oM(gK(oIn(n,(jYn(),xTt)))),i=new Ww(n.b);i.a<i.c.c.length;)for(c=new N4(uG(N3(i),30).a,0);c.b<c.d.gc();)MK(c.b<c.d.gc()),(r=uG(c.d.Xb(c.c=c.b++),10)).k==(zIn(),wbt)&&(pVn(r,e),LQ(c));t.Vg()}function gRn(n,t){var e,i,r,c,a;for(e=new Zm,r=sin(new fX(null,new h3(n,16)),new wa),c=sin(new fX(null,new h3(n,16)),new da),a=ken($7(ZJ(gKn(Uhn(cT(Fut,1),EZn,848,0,[r,c])),new ga))),i=1;i<a.length;i++)a[i]-a[i-1]>=2*t&&kD(e,new OU(a[i-1]+t,a[i]-t));return e}function pRn(n,t,e){var i,r,c,a,o;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&(Gan(a=b5(n,(gj(),o=new Hk,!!t&&LRn(o,t),o),r),k6(r,Iet)),fCn(r,a),kLn(r,a),qfn(n,r,a))}function mRn(n){var t,e,i,r;if(!n.j){if(r=new Ss,null==(t=V_t).a.zc(n,t)){for(i=new DD(n1(n));i.e!=i.i.gc();)CW(r,mRn(e=uG(Zkn(i),29))),ttn(r,e);t.a.Bc(n)}lbn(r),n.j=new vL((uG(zrn(gZ((tQ(),M_t).o),11),19),r.i),r.g),y9(n).b&=-33}return n.j}function vRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return fHt;if(45==t)return hHt}else if(3==e)return fHt;return new tk(i)}function kRn(n){var t,e,i;return(e=n.l)&e-1||(i=n.m)&i-1||(t=n.h)&t-1||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?pan(e):0==t&&0!=i&&0==e?pan(i)+22:0!=t&&0==i&&0==e?pan(t)+44:-1}function yRn(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 MRn(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=uG(nJ(uG(cQ(n.b,t.a),260)),260)).a,t.e?t.e.c=t.c:e.b=uG(nJ(t.c),511),t.c?t.c.e=t.e:e.c=uG(nJ(t.e),511)):((e=uG(nJ(uG(u7(n.b,t.a),260)),260)).a=0,++n.c),--n.d}function TRn(n){var t,i,r,c,a,o,u,s,h,f;for(i=n.o,t=n.p,o=vZn,c=j1n,u=vZn,a=j1n,h=0;h<i;++h)for(f=0;f<t;++f)eTn(n,h,f)&&(o=e.Math.min(o,h),c=e.Math.max(c,h),u=e.Math.min(u,f),a=e.Math.max(a,f));return s=c-o+1,r=a-u+1,new vY(xwn(o),xwn(u),xwn(s),xwn(r))}function jRn(n,t){var e,i,r,c;for(MK((c=new N4(n,0)).b<c.d.gc()),e=uG(c.d.Xb(c.c=c.b++),148);c.b<c.d.gc();)MK(c.b<c.d.gc()),r=new wG((i=uG(c.d.Xb(c.c=c.b++),148)).c,e.d,t),MK(c.b>0),c.a.Xb(c.c=--c.b),pF(c,r),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),r.a=!1,e=i}function ERn(n){var t,e,i,r,c;for(i=uG(oIn(n,(GYn(),Ppt)),12),c=new Ww(n.j);c.a<c.c.c.length;){for(e=new Ww((r=uG(N3(c),12)).g);e.a<e.c.c.length;)return u2(uG(N3(e),18),i),r;for(t=new Ww(r.e);t.a<t.c.c.length;)return c2(uG(N3(t),18),i),r}return null}function SRn(n,t,e){var i,r,c,a,o;for(o=uG(ER(n.a,t),17).a,PPn(n.a,xwn(e?o+1:o-1),t),a=new XL,r=new Fz(ix((e?Xgn(t):qgn(t)).a.Kc(),new h));hDn(r);)i=uG(N9(r),18),c=e?i.d.i:i.c.i,xA(ER(n.a,c))===xA(ER(n.a,t))&&a.a.zc(c,a);return a}function PRn(n,t,i){var r,c;dwn(r=Bsn(i.q.getTime()),0)<0?(c=$1n-pz(Kmn(Men(r),$1n)))==$1n&&(c=0):c=pz(Kmn(r,$1n)),1==t?jQ(n,48+(c=e.Math.min((c+50)/100|0,9))&D1n):2==t?Fen(n,c=e.Math.min((c+5)/10|0,99),2):(Fen(n,c,3),t>3&&Fen(n,0,t-3))}function CRn(n){var t,e,i,r;return xA(oIn(n,(jYn(),rMt)))===xA((Own(),Ixt))?!n.e&&xA(oIn(n,Oyt))!==xA((ihn(),hpt)):(i=uG(oIn(n,Ayt),299),r=oM(gK(oIn(n,Ryt)))||xA(oIn(n,Kyt))===xA((jan(),Ydt)),t=uG(oIn(n,Iyt),17).a,e=n.a.c.length,!r&&i!=(ihn(),hpt)&&(0==t||t>e))}function IRn(n){var t,e;for(e=0;e<n.c.length&&!(bq((u3(e,n.c.length),uG(n.c[e],113)))>0);e++);if(e>0&&e<n.c.length-1)return e;for(t=0;t<n.c.length&&!(bq((u3(t,n.c.length),uG(n.c[t],113)))>0);t++);return t>0&&e<n.c.length-1?t:n.c.length/2|0}function ORn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=6&&t){if(eEn(n,t))throw hv(new vM(net+A$n(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?zjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,6,i)),(i=ZK(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,6,t,t))}function ARn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+SXn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?sEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,12,i)),(i=nF(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function LRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(eEn(n,t))throw hv(new vM(net+VBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Wjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,9,i)),(i=tF(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,9,t,t))}function NRn(n){var t,e,i,r,c;if(i=bEn(n),null==(c=n.j)&&i)return n.Jk()?null:i.ik();if(F$(i,156)){if((e=i.jk())&&(r=e.wi())!=n.i){if((t=uG(i,156)).nk())try{n.g=r.ti(t,c)}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);n.g=null}n.i=r}return n.g}return null}function $Rn(n){var t;return kD(t=new Zm,new ZP(new MO(n.c,n.d),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c,n.d),new MO(n.c,n.d+n.a))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a))),t}function DRn(n){var t,e;if(null==n)return IZn;try{return cpn(n)}catch(i){if(F$(i=Ehn(i),103))return t=i,e=Ij(Tbn(n))+"@"+(bS(),(Avn(n)>>>0).toString(16)),wkn(ghn(),(pS(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+Ij(t.Rm)+">";throw hv(i)}}function xRn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=uG(r.Pb(),74),!uG(cQ(n.b,i),272)&&(R0(bIn(i))==R0(gIn(i))?QKn(n,i,e):bIn(i)==R0(gIn(i))?null==cQ(n.c,i)&&null!=cQ(n.b,gIn(i))&&bWn(n,i,e,!1):null==cQ(n.d,i)&&null!=cQ(n.b,bIn(i))&&bWn(n,i,e,!0))}function RRn(n,t){var e,i,r,c,a,o,u;for(r=n.Kc();r.Ob();)for(i=uG(r.Pb(),10),o2(o=new lOn,i),NLn(o,(KQn(),kRt)),kfn(o,(GYn(),fmt),(qx(),!0)),a=t.Kc();a.Ob();)c=uG(a.Pb(),10),o2(u=new lOn,c),NLn(u,_Rt),kfn(u,fmt,!0),kfn(e=new UZ,fmt,!0),c2(e,o),u2(e,u)}function KRn(n,t,e,i){var r,c,a,o;r=evn(n,t,e),c=evn(n,e,t),a=uG(cQ(n.c,t),118),o=uG(cQ(n.c,e),118),r<c?new A2((_7(),DSt),a,o,c-r):c<r?new A2((_7(),DSt),o,a,r-c):(0!=r||t.i&&e.i&&i[t.i.c][e.i.c])&&(new A2((_7(),DSt),a,o,0),new A2(DSt,o,a,0))}function FRn(n,t){var e,i,r,c,a,o;for(r=0,a=new Ww(t.a);a.a<a.c.c.length;)for(r+=(c=uG(N3(a),10)).o.b+c.d.a+c.d.d+n.e,i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)(e=uG(N9(i),18)).c.i.k==(zIn(),gbt)&&(r+=(o=uG(oIn(e.c.i,(GYn(),rmt)),10)).o.b+o.d.a+o.d.d);return r}function _Rn(){_Rn=E,xAt=new hO("CANDIDATE_POSITION_LAST_PLACED_RIGHT",0),DAt=new hO("CANDIDATE_POSITION_LAST_PLACED_BELOW",1),KAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT",2),RAt=new hO("CANDIDATE_POSITION_WHOLE_DRAWING_BELOW",3),FAt=new hO("WHOLE_DRAWING",4)}function BRn(n,t){if(F$(t,207))return Ldn(n,uG(t,27));if(F$(t,193))return tgn(n,uG(t,123));if(F$(t,366))return DY(n,uG(t,135));if(F$(t,326))return wqn(n,uG(t,74));if(t)return null;throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function HRn(n){var t,e,i,r,c,a,o;for(c=new lS,r=new Ww(n.d.a);r.a<r.c.c.length;)0==(i=uG(N3(r),125)).b.a.c.length&&s8(c,i,c.c.b,c.c);if(c.b>1)for(t=jx((e=new sk,++n.b,e),n.d),o=Fkn(c,0);o.b!=o.d.c;)a=uG(I6(o),125),RKn(xS(DS(RS($S(new uk,1),0),t),a))}function URn(n,t,e){var i,r,c,a;for(e.Ug("Breaking Point Removing",1),n.a=uG(oIn(t,(jYn(),Vyt)),223),r=new Ww(t.b);r.a<r.c.c.length;)for(a=new Ww(T3(uG(N3(r),30).a));a.a<a.c.c.length;)Lin(c=uG(N3(a),10))&&!(i=uG(oIn(c,(GYn(),Spt)),313)).d&&PQn(n,i);e.Vg()}function GRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=11&&t){if(eEn(n,t))throw hv(new vM(net+zBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,10,i)),(i=n_(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,11,t,t))}function qRn(n){var t,e,i,r;for(i=new bsn(new Nw(n.b).a);i.b;)r=uG((e=von(i)).ld(),12),kfn(t=uG(e.md(),10),(GYn(),rmt),r),kfn(r,lmt,t),kfn(r,qpt,(qx(),!0)),NLn(r,uG(oIn(t,Fpt),64)),oIn(t,Fpt),kfn(r.i,(jYn(),JMt),($Pn(),oRt)),uG(oIn(HQ(r.i),Hpt),21).Fc((r_n(),rpt))}function XRn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Ww(n.d.i.j);c.a<c.c.c.length;)i+=uG(N3(c),12).e.c.length;else i=1;if(n.d)for(c=new Ww(n.c.i.j);c.a<c.c.c.length;)r+=uG(N3(c),12).g.c.length;else r=1;return(e+t)/2+.4*t0(gq(r-i))*(e-t)}function zRn(n){var t,e;if(gPn(),n.Hc((KQn(),FRt)))throw hv(new vM("Port sides must not contain UNDEFINED"));switch(n.gc()){case 1:return wdt;case 2:return t=n.Hc(kRt)&&n.Hc(_Rt),e=n.Hc(yRt)&&n.Hc(KRt),t||e?pdt:gdt;case 3:return ddt;case 4:return bdt;default:return null}}function VRn(n,t,e){return l_n(),(!qun(n,t)||!qun(n,e))&&(RWn(new MO(n.c,n.d),new MO(n.c+n.b,n.d),t,e)||RWn(new MO(n.c+n.b,n.d),new MO(n.c+n.b,n.d+n.a),t,e)||RWn(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a),t,e)||RWn(new MO(n.c,n.d+n.a),new MO(n.c,n.d),t,e))}function WRn(n,t){var e,i,r,c;if(!n.dc())for(e=0,i=n.gc();e<i;++e)if(null==(c=mK(n.Xb(e)))?null==t:m_(c.substr(0,3),"!##")?null!=t&&(r=t.length,!m_(c.substr(c.length-r,r),t)||c.length!=t.length+3)&&!m_(lct,t):m_(c,bct)&&!m_(lct,t)||m_(c,t))return!0;return!1}function QRn(n,t,e,i){var r,c,a,o,u,s;for(a=n.j.c.length,u=Inn(_st,X2n,314,a,0,1),o=0;o<a;o++)(c=uG(zq(n.j,o),12)).p=o,u[o]=r$n(bDn(c),e,i);for(BKn(n,u,e,t,i),s=new Ym,r=0;r<u.length;r++)u[r]&&vJ(s,uG(zq(n.j,r),12),u[r]);s.f.c+s.i.c!=0&&(kfn(n,(GYn(),$pt),s),dOn(n,u))}function JRn(n,t){var e,i,r;for(t.Ug("Partition postprocessing",1),e=new Ww(n.b);e.a<e.c.c.length;)for(i=new Ww(uG(N3(e),30).a);i.a<i.c.c.length;)for(r=new Ww(uG(N3(i),10).j);r.a<r.c.c.length;)oM(gK(oIn(uG(N3(r),12),(GYn(),fmt))))&&tW(r);t.Vg()}function YRn(n,t,e){var i,r;for(i=new Ww(n.a.b);i.a<i.c.c.length;)if((r=z4(uG(N3(i),60)))&&r.k==(zIn(),lbt))switch(uG(oIn(r,(GYn(),Fpt)),64).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 ZRn(n,t,e){var i,r,c;for(e.Ug("Processor determine the height for each level",1),n.a=0==t.b.b?1:t.b.b,r=null,i=Fkn(t.b,0);!r&&i.b!=i.d.c;)oM(gK(oIn(c=uG(I6(i),40),(OQn(),UPt))))&&(r=c);r&&dqn(n,n7(Uhn(cT(lPt,1),z9n,40,0,[r])),e,uG(oIn(t,(QGn(),cCt)),88)),e.Vg()}function nKn(n){var t,e,i,r;for(gj(),aKn(i=new Bk,n),e=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));e.e!=e.i.gc();)t=uG(Zkn(e),27),GRn(r=new Bk,i),vN(r,t.g,t.f),Gan(r,t.k),kN(r,t.i,t.j),ttn((!i.a&&(i.a=new fV(bFt,i,10,11)),i.a),r),aKn(r,t);return i}function tKn(n,t,e){var i,r,c;if(!(r=uG(zDn(t,(lIn(),XNt)),17))&&(r=xwn(0)),!(c=uG(zDn(e,XNt),17))&&(c=xwn(0)),r.a>c.a)return-1;if(r.a<c.a)return 1;if(n.a){if(0!=(i=ugn(t.j,e.j)))return i;if(0!=(i=ugn(t.i,e.i)))return i}return ugn(t.g*t.f,e.g*e.f)}function eKn(n,t){var e,i,r,c,a,o,u,s,h,f;if(++n.e,t>(u=null==n.d?0:n.d.length)){for(h=n.d,n.d=Inn(IFt,qit,66,2*u+4,0,1),c=0;c<u;++c)if(s=h[c])for(i=s.g,f=s.i,o=0;o<f;++o)a=iF(n,(r=uG(i[o],136)).Bi()),!(e=n.d[a])&&(e=n.d[a]=n.dk()),e.Fc(r);return!0}return!1}function iKn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk()))throw hv(new vM(dct));$dn(n,t,e)}function rKn(n,t){var e,i,r,c,a,o;for(e=uG(oIn(t,(GYn(),xpt)),21),a=uG(Y9((aYn(),Jlt),e),21),o=uG(Y9(rbt,e),21),c=a.Kc();c.Ob();)if(i=uG(c.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;for(r=o.Kc();r.Ob();)if(i=uG(r.Pb(),21),!uG(Y9(n.b,i),15).dc())return!1;return!0}function cKn(n,t){var e,i,r,c,a,o,u;if(1==n.a.c.length)return EOn(uG(zq(n.a,0),172),t);for(r=Swn(n),a=0,o=n.d,i=r,u=n.d,c=(o-i)/2+i;i+1<o;){for(a=0,e=new Ww(n.a);e.a<e.c.c.length;)a+=uXn(uG(N3(e),172),c,!1).a;a<t?(u=c,o=c):i=c,c=(o-i)/2+i}return u}function aKn(n,t){var e,i,r,c,a;if(!t)return n;if(F$(t,342))for(r=uG(t,342),!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),c=n.o,i=r.gh().c.Kc();i.e!=i.i.gc();)a=(e=uG(i.Yj(),44)).md(),rSn(c,uG(e.ld(),149),a);else!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),hon(n.o,t.nf());return n}function oKn(n){var t,e,i,r;return isNaN(n)?(tin(),not):n<-0x8000000000000000?(tin(),Yat):n>=0x8000000000000000?(tin(),Jat):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=d0n&&(n-=(e=t0(n/d0n))*d0n),t=0,n>=w0n&&(n-=(t=t0(n/w0n))*w0n),r=p$(t0(n),t,e),i&&Yfn(r),r)}function uKn(n){var t,e,i,r,c;if(c=new Zm,Prn(n.b,new Ed(c)),n.b.c.length=0,0!=c.c.length){for(u3(0,c.c.length),t=uG(c.c[0],82),e=1,i=c.c.length;e<i;++e)u3(e,c.c.length),(r=uG(c.c[e],82))!=t&&OCn(t,r);if(F$(t,63))throw hv(uG(t,63));if(F$(t,296))throw hv(uG(t,296))}}function sKn(n,t){var e,i,r,c;for(e=!t||!n.u.Hc((eNn(),wRt)),c=0,r=new Ww(n.e.Xf());r.a<r.c.c.length;){if((i=uG(N3(r),852)).ag()==(KQn(),FRt))throw hv(new vM("Label and node size calculator can only be used with ports that have port sides assigned."));i.Qf(c++),wwn(n,i,e)}}function hKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),316)).j=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),60)).b),(!t.j||i.d.c<t.j.d.c)&&(t.j=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),60)).b.a=i.d.c-t.j.d.c,i.b.b=i.d.d-t.j.d.d}return n}function fKn(n){var t,e,i,r,c;for(e=new Ww(n.a.a);e.a<e.c.c.length;){for((t=uG(N3(e),194)).f=null,c=t.a.a.ec().Kc();c.Ob();)dL((i=uG(c.Pb(),86)).e),(!t.f||i.g.c<t.f.g.c)&&(t.f=i);for(r=t.a.a.ec().Kc();r.Ob();)(i=uG(r.Pb(),86)).e.a=i.g.c-t.f.g.c,i.e.b=i.g.d-t.f.g.d}return n}function lKn(n){var t,i,r;return i=uG(n.a,17).a,r=uG(n.b,17).a,i<(t=e.Math.max(e.Math.abs(i),e.Math.abs(r)))&&r==-t?new WO(xwn(i+1),xwn(r)):i==t&&r<t?new WO(xwn(i),xwn(r+1)):i>=-t&&r==t?new WO(xwn(i-1),xwn(r)):new WO(xwn(i),xwn(r-1))}function bKn(){return zYn(),Uhn(cT(Vwt,1),p1n,81,0,[qbt,Hbt,Xbt,uwt,Pwt,lwt,Nwt,pwt,Ewt,iwt,ywt,gwt,Swt,Zbt,Dwt,xbt,kwt,Iwt,swt,Cwt,Rwt,Twt,Rbt,jwt,Kwt,Awt,xwt,hwt,Qbt,fwt,owt,$wt,_bt,Vbt,wwt,Fbt,dwt,cwt,nwt,mwt,ewt,Ubt,Bbt,awt,twt,vwt,Lwt,Kbt,Mwt,rwt,bwt,Jbt,Wbt,Owt,zbt,Ybt,Gbt])}function wKn(n,t,e){n.d=0,n.b=0,t.k==(zIn(),gbt)&&e.k==gbt&&uG(oIn(t,(GYn(),rmt)),10)==uG(oIn(e,rmt),10)&&(jen(t).j==(KQn(),yRt)?Rxn(n,t,e):Rxn(n,e,t)),t.k==gbt&&e.k==wbt?jen(t).j==(KQn(),yRt)?n.d=1:n.b=1:e.k==gbt&&t.k==wbt&&(jen(e).j==(KQn(),yRt)?n.b=1:n.d=1),GMn(n,t,e)}function dKn(n){var t,e,i,r,c;return c=gCn(n),null!=n.a&&ZG(c,"category",n.a),!pE(new Lw(n.d))&&(nrn(c,"knownOptions",i=new Ib),t=new Mm(i),z8(new Lw(n.d),t)),!pE(n.g)&&(nrn(c,"supportedFeatures",r=new Ib),e=new Tm(r),z8(n.g,e)),c}function gKn(n){var t,e,i,r,c,a,o,u;for(t=336,e=0,r=new UF(n.length),o=0,u=(a=n).length;o<u;++o)vgn(c=a[o]),GQ(c),i=c.a,kD(r.a,WW(i)),t&=i.yd(),e=cbn(e,i.zd());return uG(uG(bW(new fX(null,ICn(new h3((ZW(),Emn(r.a)),16),new g,t,e)),new jb(n)),687),848)}function pKn(n,t){var e;n.d&&(t.c!=n.e.c||iun(n.e.b,t.b))&&(kD(n.f,n.d),n.a=n.d.c+n.d.b,n.d=null,n.e=null),HL(t.b)?n.c=t:n.b=t,(t.b==(Xhn(),Flt)&&!t.a||t.b==_lt&&t.a||t.b==Blt&&t.a||t.b==Hlt&&!t.a)&&n.c&&n.b&&(e=new gY(n.a,n.c.d,t.c-n.a,n.b.d-n.c.d),n.d=e,n.e=t)}function mKn(n){var t;if(ly.call(this),this.i=new su,this.g=n,this.f=uG(n.e&&n.e(),9).length,0==this.f)throw hv(new vM("There must be at least one phase in the phase enumeration."));this.c=new nB(t=uG(Mj(this.g),9),uG(MF(t,t.length),9),0),this.a=new wJ,this.b=new Ym}function vKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=7&&t){if(eEn(n,t))throw hv(new vM(net+zOn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Vjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,1,iFt,i)),(i=dz(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,7,t,t))}function kKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+fdn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Yjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,0,uFt,i)),(i=gz(n,t,i))&&i.oj()}else 4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function yKn(n,t){var e,i,r,c,a,o,u,s,h;return b_n(),t.d>n.d&&(o=n,n=t,t=o),t.d<63?KFn(n,t):(s=$9(n,a=(-2&n.d)<<4),h=$9(t,a),i=mXn(n,D9(s,a)),r=mXn(t,D9(h,a)),u=yKn(s,h),e=yKn(i,r),c=D9(c=Zzn(Zzn(c=yKn(mXn(s,i),mXn(r,h)),u),e),a),Zzn(Zzn(u=D9(u,a<<1),c),e))}function MKn(){MKn=E,rjt=new fI(v9n,0),tjt=new fI("LONGEST_PATH",1),ejt=new fI("LONGEST_PATH_SOURCE",2),YTt=new fI("COFFMAN_GRAHAM",3),njt=new fI(D6n,4),cjt=new fI("STRETCH_WIDTH",5),ijt=new fI("MIN_WIDTH",6),JTt=new fI("BF_MODEL_ORDER",7),ZTt=new fI("DF_MODEL_ORDER",8)}function TKn(n,t,e){var i,r,c,a,o;for(a=Vwn(n,e),o=Inn(pbt,e6n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)oM(gK(oIn(r=uG(c.Pb(),12),(GYn(),qpt))))&&(o[i++]=uG(oIn(r,lmt),10));if(i<t.length)throw hv(new kM("Expected "+t.length+" hierarchical ports, but found only "+i+"."));return o}function jKn(n,t){var e,i,r,c,a,o;if(!n.tb){for(!n.rb&&(n.rb=new vV(n,s_t,n)),o=new sS((c=n.rb).i),r=new DD(c);r.e!=r.i.gc();)i=uG(Zkn(r),142),(e=uG(null==(a=i.xe())?VAn(o.f,null,i):kgn(o.i,a,i),142))&&(null==a?VAn(o.f,null,e):kgn(o.i,a,e));n.tb=o}return uG(U1(n.tb,t),142)}function EKn(n,t){var e,i,r,c,a;if((null==n.i&&eqn(n),n.i).length,!n.p){for(a=new sS(1+(3*n.g.i/2|0)),r=new nR(n.g);r.e!=r.i.gc();)i=uG(nyn(r),179),(e=uG(null==(c=i.xe())?VAn(a.f,null,i):kgn(a.i,c,i),179))&&(null==c?VAn(a.f,null,e):kgn(a.i,c,e));n.p=a}return uG(U1(n.p,t),179)}function SKn(n,t,e,i,r){var c,a,o,u;for(Xvn(i+i1(e,e.ie()),r),mQ(t,Rpn(e)),(c=e.f)&&SKn(n,t,c,"Caused by: ",!1),null==e.k&&(e.k=Inn(xat,zZn,82,0,0,1)),o=0,u=(a=e.k).length;o<u;++o)SKn(n,t,a[o],"Suppressed: ",!1);null!=console.groupEnd&&console.groupEnd.call(console)}function PKn(n,t,e,i){var r,c,a,o;for(a=(o=t.e).length,c=t.q.ug(o,e?0:a-1,e),c|=wBn(n,o[e?0:a-1],e,i),r=e?1:a-2;e?r<a:r>=0;r+=e?1:-1)c|=t.c.lg(o,r,e,i&&!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,(GYn(),mmt))))),c|=t.q.ug(o,r,e),c|=wBn(n,o[r],e,i);return FV(n.c,t),c}function CKn(n,t,e){var i,r,c,a,o,u,s,h;for(s=0,h=(u=s6(n.j)).length;s<h;++s){if(o=u[s],e==(can(),Vjt)||e==Qjt)for(c=0,a=(r=x4(o.g)).length;c<a;++c)wOn(t,i=r[c])&&pqn(i,!0);if(e==Wjt||e==Qjt)for(c=0,a=(r=x4(o.e)).length;c<a;++c)bOn(t,i=r[c])&&pqn(i,!0)}}function IKn(n){var t,e;switch(t=null,e=null,FSn(n).g){case 1:KQn(),t=kRt,e=_Rt;break;case 2:KQn(),t=KRt,e=yRt;break;case 3:KQn(),t=_Rt,e=kRt;break;case 4:KQn(),t=yRt,e=KRt}qb(n,uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)),Gb(n,uG(yx(Wz(uG(Y9(n.k,e),15).Oc(),Fdt)),113))}function OKn(n){var t,e,i,r,c,a;if((r=uG(zq(n.j,0),12)).e.c.length+r.g.c.length==0)n.n.a=0;else{for(a=0,i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(r),new Wd(r)])));hDn(i);)a+=(e=uG(N9(i),12)).i.n.a+e.n.a+e.a.a;c=(t=uG(oIn(n,(jYn(),WMt)),8))?t.a:0,n.n.a=a/(r.e.c.length+r.g.c.length)-c}}function AKn(n,t){var e,i,r;for(i=new Ww(t.a);i.a<i.c.c.length;)e=uG(N3(i),225),JX(uG(e.b,68),YF(D$(uG(t.b,68).c),uG(t.b,68).a)),(r=oGn(uG(t.b,68).b,uG(e.b,68).b))>1&&(n.a=!0),YX(uG(e.b,68),JF(D$(uG(t.b,68).c),vD(YF(D$(uG(e.b,68).a),uG(t.b,68).a),r))),f2(n,t),AKn(n,e)}function LKn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a<r.c.c.length;)(e=uG(N3(r),194)).e=0,e.d.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),194)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),86).f.Kc();a.Ob();)(c=uG(a.Pb(),86)).d!=e&&(FV(e.d,c),++c.d.e)}function NKn(n){var t,e,i,r,c,a,o,u;for(e=0,t=u=n.j.c.length,r=2*u,o=new Ww(n.j);o.a<o.c.c.length;)switch((a=uG(N3(o),12)).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++}hZ(),f$(n.j,new bi)}function $Kn(n){var t,e;e=null,t=uG(zq(n.g,0),18);do{if(vR(e=t.d.i,(GYn(),nmt)))return uG(oIn(e,nmt),12).i;if(e.k!=(zIn(),dbt)&&hDn(new Fz(ix(Xgn(e).a.Kc(),new h))))t=uG(N9(new Fz(ix(Xgn(e).a.Kc(),new h))),18);else if(e.k!=dbt)return null}while(e&&e.k!=(zIn(),dbt));return e}function DKn(n,t){var e,i,r,c,a,o,u,s,h;for(o=t.j,a=t.g,u=uG(zq(o,o.c.length-1),113),u3(0,o.c.length),s=xTn(n,a,u,h=uG(o.c[0],113)),c=1;c<o.c.length;c++)u3(c-1,o.c.length),e=uG(o.c[c-1],113),u3(c,o.c.length),(i=xTn(n,a,e,r=uG(o.c[c],113)))>s&&(u=e,h=r,s=i);t.a=h,t.c=u}function xKn(n,t,e){var i,r,c,a,o,u,s;for(s=new Hj(new ip(n)),o=0,u=(a=Uhn(cT(Abt,1),i6n,12,0,[t,e])).length;o<u;++o)for(c=a[o],s.a.zc(c,(qx(),tot)),r=new w7(c.b);l$(r.a)||l$(r.b);)(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==i.d||_V(s,c==i.c?i.d:i.c);return WW(s),new Z_(s)}function RKn(n){if(!n.a.d||!n.a.e)throw hv(new kM((vK(Mst),Mst.k+" must have a source and target "+(vK(Tst),Tst.k+" specified."))));if(n.a.d==n.a.e)throw hv(new kM("Network simplex does not support self-loops: "+n.a+" "+n.a.d+" "+n.a.e));return Sx(n.a.d.g,n.a),Sx(n.a.e.b,n.a),n.a}function KKn(n,t){var e,i,r,c,a,o;for(t.Ug("Constraints Postprocessor",1),c=0,r=new Ww(n.b);r.a<r.c.c.length;){for(o=0,a=!1,i=new Ww(uG(N3(r),30).a);i.a<i.c.c.length;)(e=uG(N3(i),10)).k==(zIn(),dbt)&&(a=!0,kfn(e,(jYn(),pMt),xwn(c)),kfn(e,xyt,xwn(o)),++o);a&&++c}t.Vg()}function FKn(n,t,e){var i,r,c,a,o,u;if(i=0,0!=t.b&&0!=e.b){c=Fkn(t,0),a=Fkn(e,0),o=uM(pK(I6(c))),u=uM(pK(I6(a))),r=!0;do{if(o>u-n.b&&o<u+n.b)return-1;o>u-n.a&&o<u+n.a&&++i,o<=u&&c.b!=c.d.c?o=uM(pK(I6(c))):u<=o&&a.b!=a.d.c?u=uM(pK(I6(a))):r=!1}while(r)}return i}function _Kn(n,t){var e;return _J(n.a),JV(n.a,(pon(),VCt),VCt),JV(n.a,WCt,WCt),Aq(e=new wJ,WCt,(zPn(),tIt)),xA(zDn(t,(jOn(),LIt)))!==xA((vbn(),sIt))&&Aq(e,WCt,YCt),oM(gK(zDn(t,UIt)))&&Aq(e,WCt,eIt),Aq(e,WCt,ZCt),oM(gK(zDn(t,qIt)))&&wz(e,WCt,nIt),ZL(n.a,e),Qzn(n.a,t)}function BKn(n,t,e,i,r){var c,a,o,u;for(u=new nB(c=uG(Mj(YRt),9),uG(MF(c,c.length),9),0),o=new Ww(n.j);o.a<o.c.c.length;)t[(a=uG(N3(o),12)).p]&&(aJn(a,t[a.p],i),Mon(u,a.j));r?(CPn(n,t,(KQn(),kRt),2*e,i),CPn(n,t,_Rt,2*e,i)):(CPn(n,t,(KQn(),yRt),2*e,i),CPn(n,t,KRt,2*e,i))}function HKn(n){var t;for(t=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).d.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(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 UKn(n,t,e){var i,r,c,a;for(e.Ug("Longest path layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Ixn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function GKn(n,t,i,r){var c,a,o,u,s,f,l;for(u=0,s=new Ww(n.a);s.a<s.c.c.length;){for(o=0,a=new Fz(ix(qgn(uG(N3(s),10)).a.Kc(),new h));hDn(a);)f=n3((c=uG(N9(a),18)).c).b,l=n3(c.d).b,o=e.Math.max(o,e.Math.abs(l-f));u=e.Math.max(u,o)}return r*e.Math.min(1,t/i)*u}function qKn(n,t){var e,i,r,c,a;for(a=uG(oIn(t,(QGn(),MCt)),433),c=Fkn(t.b,0);c.b!=c.d.c;)if(r=uG(I6(c),40),0==n.b[r.g]){switch(a.g){case 0:vMn(n,r);break;case 1:ADn(n,r)}n.b[r.g]=2}for(i=Fkn(n.a,0);i.b!=i.d.c;)Wpn((e=uG(I6(i),65)).b.d,e,!0),Wpn(e.c.b,e,!0);kfn(t,(OQn(),_Pt),n.a)}function XKn(n){var t;return t=new VM,256&n&&(t.a+="F"),128&n&&(t.a+="H"),512&n&&(t.a+="X"),2&n&&(t.a+="i"),8&n&&(t.a+="m"),4&n&&(t.a+="s"),32&n&&(t.a+="u"),64&n&&(t.a+="w"),16&n&&(t.a+="x"),n&w1n&&(t.a+=","),lM(t.a)}function zKn(n,t){var i,r,c,a,o;t.Ug(snt,1),c=uG(zDn(n,(S_n(),hAt)),107),!n.a&&(n.a=new fV(bFt,n,10,11)),a=Ijn(n.a),o=e.Math.max(a.a,uM(pK(zDn(n,(lBn(),EOt))))-(c.b+c.c)),i=(r=e.Math.max(a.b,uM(pK(zDn(n,MOt)))-(c.d+c.a)))-a.b,Myn(n,pOt,i),Myn(n,vOt,o),Myn(n,mOt,r+i),t.Vg()}function VKn(n,t){var e,i,r,c;return PP(),t?t==(uVn(),cHt)||(t==BBt||t==FBt||t==_Bt)&&n!=KBt?new yQn(n,t):((e=(i=uG(t,692)).$k())||(BJ(Nen((gAn(),kBt),t)),e=i.$k()),!e.i&&(e.i=new Ym),!(r=uG(DA(FX((c=e.i).f,n)),2041))&&vJ(c,n,r=new yQn(n,t)),r):PBt}function WKn(n,t){var e;if(!_V(n.b,t.b))throw hv(new kM("Invalid hitboxes for scanline constraint calculation."));(Ihn(t.b,uG(MS(n.b,t.b),60))||Ihn(t.b,uG(yS(n.b,t.b),60)))&&(bS(),String.fromCharCode(10)),n.a[t.b.f]=uG(jS(n.b,t.b),60),(e=uG(TS(n.b,t.b),60))&&(n.a[e.f]=t.b)}function QKn(n,t,e){var i,r,c;for(zsn(c=new pDn(vYn(COn(JFn(t,!1,!1)),uM(pK(zDn(t,(ryn(),Jht))))+n.a)),t),vJ(n.b,t,c),mv(e.c,c),!t.n&&(t.n=new fV(lFt,t,1,7)),r=new DD(t.n);r.e!=r.i.gc();)i=nHn(n,uG(Zkn(r),135),!0,0,0),mv(e.c,i);return c}function JKn(n,t){var e,i,r,c,a,o;for(r=new Zm,e=0;e<=n.j;e++)(i=new bQ(t)).p=n.j-e,mv(r.c,i);for(o=new Ww(n.p);o.a<o.c.c.length;)a2(a=uG(N3(o),10),uG(zq(r,n.j-n.g[a.p]),30));for(c=new Ww(r);c.a<c.c.c.length;)0==uG(N3(c),30).a.c.length&&tW(c);t.b.c.length=0,Ohn(t.b,r)}function YKn(n,t){var e,i,r,c,a,o,u,s;for(o=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).a,s=n.i.n.b,r=0,c=(i=x4(n.e)).length;r<c;++r)u2(e=i[r],o),cL(e.a,new MO(u,s)),t&&((a=uG(oIn(e,(jYn(),bMt)),75))||(a=new Uk,kfn(e,bMt,a)),aq(a,new MO(u,s)))}function ZKn(n,t){var e,i,r,c,a,o,u,s;for(i=uG(oIn(n,(GYn(),rmt)),12),u=Gfn(Uhn(cT(PNt,1),zZn,8,0,[i.i.n,i.n,i.a])).a,s=n.i.n.b,a=0,o=(c=x4(n.g)).length;a<o;++a)c2(r=c[a],i),aL(r.a,new MO(u,s)),t&&((e=uG(oIn(r,(jYn(),bMt)),75))||(e=new Uk,kfn(r,bMt,e)),aq(e,new MO(u,s)))}function nFn(n){var t,e,i,r,c,a,o;if(r=(i=n.b).e,c=L_(uG(oIn(i,(jYn(),JMt)),101)),e=!!r&&uG(oIn(r,(GYn(),Hpt)),21).Hc((r_n(),tpt)),!c&&!e)for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(a=uG(t.md(),113)).a&&(o2(a.d,null),a.c=!0,n.a=!0)}function tFn(n,t){var e,i;for(t.Ug("Semi-Interactive Crossing Minimization Processor",1),e=!1,i=new Ww(n.b);i.a<i.c.c.length;)e|=null!=cdn(krn(JJ(JJ(new fX(null,new h3(uG(N3(i),30).a,16)),new Qi),new Ji),new Yi),new Zi).a;e&&kfn(n,(GYn(),Wpt),(qx(),!0)),t.Vg()}function eFn(n,t){var e,i,r,c,a;for(n.b=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234),n.e=X3(n.d),c=new lS,r=n7(Uhn(cT(sbt,1),V4n,36,0,[t])),a=0;a<r.c.length;)u3(a,r.c.length),(i=uG(r.c[a],36)).p=a++,Ohn(r,(e=new KVn(i,n.a,n.b)).b),kD(n.b,e),e.s&&lW(Fkn(c,0),e);return n.c=new ek,c}function iFn(n,t){var e,i,r,c,a,o;for(a=uG(uG(Y9(n.r,t),21),87).Kc();a.Ob();)(e=(c=uG(a.Pb(),117)).c?rq(c.c):0)>0?c.a?e>(o=c.b.Mf().a)&&(r=(e-o)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:cV(n.u)&&((i=ECn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.Mf().a&&(c.d.c=i.c+i.b-c.b.Mf().a))}function rFn(n,t){var e,i,r,c,a;a=new Zm,e=t;do{(c=uG(cQ(n.b,e),131)).B=e.c,c.D=e.d,mv(a.c,c),e=uG(cQ(n.k,e),18)}while(e);return u3(0,a.c.length),(i=uG(a.c[0],131)).j=!0,i.A=uG(i.d.a.ec().Kc().Pb(),18).c.i,(r=uG(zq(a,a.c.length-1),131)).q=!0,r.C=uG(r.d.a.ec().Kc().Pb(),18).d.i,a}function cFn(n){var t,i;if(t=uG(n.a,17).a,i=uG(n.b,17).a,t>=0){if(t==i)return new WO(xwn(-t-1),xwn(-t-1));if(t==-i)return new WO(xwn(-t),xwn(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new WO(xwn(-t),xwn(t<0?i:i+1)):new WO(xwn(t+1),xwn(i))}function aFn(n){var t,e;e=uG(oIn(n,(jYn(),gMt)),171),t=uG(oIn(n,(GYn(),Xpt)),311),e==(Gpn(),Imt)?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),ppt))):e==Amt?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),dpt))):t==(Zen(),ppt)?(kfn(n,gMt,Imt),kfn(n,Xpt,gpt)):t==dpt&&(kfn(n,gMt,Amt),kfn(n,Xpt,gpt))}function oFn(){oFn=E,LSt=new oa,CSt=Aq(new wJ,(uIn(),Elt),(zYn(),swt)),ASt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),NSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),ISt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),OSt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function uFn(){uFn=E,KSt=Aq(wz(new wJ,(uIn(),Plt),(zYn(),Jbt)),Elt,swt),HSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),FSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),BSt=Aq(Aq(new wJ,Elt,Twt),Plt,Mwt),_St=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function sFn(n,t,e,i,r){var c,a;(v9(t)||t.c.i.c!=t.d.i.c)&&uon(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])),e)||v9(t)||(t.c==r?sR(t.a,0,new eN(e)):aq(t.a,new eN(e)),i&&!cS(n.a,e)&&((a=uG(oIn(t,(jYn(),bMt)),75))||(a=new Uk,kfn(t,bMt,a)),s8(a,c=new eN(e),a.c.b,a.c),FV(n.a,c)))}function hFn(n,t){var e,i,r,c;for(e=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&xQ(i.i,t))return r?r.a=i.a:n.b[e]=i.a,RM(uG(nJ(i.c),604),uG(nJ(i.f),604)),Tv(uG(nJ(i.b),227),uG(nJ(i.e),227)),--n.f,++n.e,!0;return!1}function fFn(n){var t;for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).c.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(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 lFn(n,t,e){var i,r,c,a,o,u;if(0==(r=Cdn(254&n.Db)))n.Eb=e;else{if(1==r)a=Inn(dat,EZn,1,2,5,1),0==jTn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=Inn(dat,EZn,1,r+1,5,1),c=Kcn(n.Eb),i=2,o=0,u=0;i<=128;i<<=1)i==t?a[u++]=e:n.Db&i&&(a[u++]=c[o++]);n.Eb=a}n.Db|=t}function bFn(n,t,i){var r,c,a,o;for(this.b=new Zm,c=0,r=0,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),176),i&&Jqn(a),kD(this.b,a),c+=a.o,r+=a.p;this.b.c.length>0&&(c+=(a=uG(zq(this.b,0),176)).o,r+=a.p),c*=2,r*=2,t>1?c=t0(e.Math.ceil(c*t)):r=t0(e.Math.ceil(r/t)),this.a=new smn(c,r)}function wFn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=uG(cQ(n.f,t.A),60)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=uG(cQ(n.f,i.C),60)).d.c,++f):s=i.a.c,w=d+(u=(s-d)/e.Math.max(2,f-h)),l=h;l<f;++l)g=(o=uG(a.Xb(l),131)).a.b,o.a.c=w-g/2,w+=u}function dFn(n,t){var e,i,r,c,a,o,u,s;r=t?new bc:new wc,c=!1;do{for(c=!1,a=(t?Spn(n.b):n.b).Kc();a.Ob();)for(s=T3(uG(a.Pb(),30).a),t||Spn(s),u=new Ww(s);u.a<u.c.c.length;)o=uG(N3(u),10),r.Mb(o)&&(i=o,e=uG(oIn(o,(GYn(),Spt)),313),c=Q_n(i,t?e.b:e.k,t,!1))}while(c)}function gFn(n,t,e,i,r,c){var a,o,u,s,h,f;for(s=e.c.length,c&&(n.c=Inn(YHt,W1n,28,t.length,15,1)),a=r?0:t.length-1;r?a<t.length:a>=0;a+=r?1:-1){for(o=t[a],u=i==(KQn(),kRt)?r?Dgn(o,i):Spn(Dgn(o,i)):r?Spn(Dgn(o,i)):Dgn(o,i),c&&(n.c[o.p]=u.gc()),f=u.Kc();f.Ob();)h=uG(f.Pb(),12),n.d[h.p]=s++;Ohn(e,u)}}function pFn(n,t,e){var i,r,c,a,o,u,s,h;for(c=uM(pK(n.b.Kc().Pb())),s=uM(pK(whn(t.b))),i=vD(D$(n.a),s-e),r=vD(D$(t.a),e-c),vD(h=JF(i,r),1/(s-c)),this.a=h,this.b=new Zm,o=!0,(a=n.b.Kc()).Pb();a.Ob();)u=uM(pK(a.Pb())),o&&u-e>$9n&&(this.b.Fc(e),o=!1),this.b.Fc(u);o&&this.b.Fc(e)}function mFn(n){var t,e,i,r;if(wHn(n,n.n),n.d.c.length>0){for(AM(n.c);fDn(n,uG(N3(new Ww(n.e.a)),125))<n.e.a.c.length;){for(r=(t=kjn(n)).e.e-t.d.e-t.a,t.e.j&&(r=-r),i=new Ww(n.e.a);i.a<i.c.c.length;)(e=uG(N3(i),125)).j&&(e.e+=r);AM(n.c)}AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}}function vFn(n,t){var e,i;if(Whn(),e=C9(aan(),t.Pg())){if(i=e.j,F$(n,207))return I0(uG(n,27))?$x(i,(Rkn(),sNt))||$x(i,hNt):$x(i,(Rkn(),sNt));if(F$(n,326))return $x(i,(Rkn(),oNt));if(F$(n,193))return $x(i,(Rkn(),fNt));if(F$(n,366))return $x(i,(Rkn(),uNt))}return!0}function kFn(n,t,e){var i,r,c,a,o,u;if(c=(r=e).Lk(),EFn(n.e,c)){if(c.Si())for(i=uG(n.g,124),a=0;a<n.i;++a)if(udn(o=i[a],r)&&a!=t)throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),c),i=uG(n.g,124),a=0;a<n.i;++a)if(o=i[a],u.am(o.Lk())&&a!=t)throw hv(new vM(dct));return uG(Uyn(n,t,e),76)}function yFn(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.he();return n&&n.fe()}},suppressed:{get:function(){return e.ge()}}})}catch(i){}}function MFn(n,t){var e,i,r,c,a;if(i=t>>5,t&=31,i>=n.d)return n.e<0?(cHn(),Dot):(cHn(),_ot);if(c=n.d-i,ROn(r=Inn(YHt,W1n,28,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){for(e=0;e<c&&-1==r[e];e++)r[e]=0;e==c&&++c,++r[e]}}return K4(a=new VV(n.e,c,r)),a}function TFn(n){var t,e,i,r;return e=new xd(r=h0(n)),i=new Rd(r),Ohn(t=new Zm,(!n.d&&(n.d=new f_(aFt,n,8,5)),n.d)),Ohn(t,(!n.e&&(n.e=new f_(aFt,n,7,4)),n.e)),uG(l8(YJ(JJ(new fX(null,new h3(t,16)),e),i),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21)}function jFn(n,t){var e;switch(e=uG(oIn(n,(jYn(),zyt)),283),t.Ug("Label side selection ("+e+")",1),e.g){case 0:mDn(n,(Ajn(),$xt));break;case 1:mDn(n,(Ajn(),Dxt));break;case 2:Eqn(n,(Ajn(),$xt));break;case 3:Eqn(n,(Ajn(),Dxt));break;case 4:YFn(n,(Ajn(),$xt));break;case 5:YFn(n,(Ajn(),Dxt))}t.Vg()}function EFn(n,t){var e,i,r;return PP(),!!t.Jk()||-2==t.Ik()&&(t==(m$n(),NBt)||t==OBt||t==ABt||t==LBt||!(emn(r=n.Dh(),t)>=0)&&(!(e=iVn((gAn(),kBt),r,t))||((i=e.Ik())>1||-1==i)&&3!=sJ(Nen(kBt,e))))}function SFn(n,t,e,i){var r,c,a,o,u;return o=lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84)),R0(o)==R0(u)||Ern(u,o)?null:(a=s0(t))==e?i:(c=uG(cQ(n.a,a),10))&&(r=c.e)?r:null}function PFn(n,t,e){var i,r,c,a;for(e.Ug("Longest path to source layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a<c.c.c.length;)uG(N3(c),10).p=i,n.b[i]=-1,++i;for(r=new Ww(a);r.a<r.c.c.length;)Oxn(n,uG(N3(r),10));a.c.length=0,n.a=null,n.b=null,e.Vg()}function CFn(n,t,e){var i,r,c,a,o;if((c=n[LT(e,n.length)])[r=AT(e,c.length)].k==(zIn(),lbt))for(o=t.j,i=0;i<o.c.length;i++)u3(i,o.c.length),a=uG(o.c[i],12),(e?a.j==(KQn(),kRt):a.j==(KQn(),_Rt))&&oM(gK(oIn(a,(GYn(),qpt))))&&(Y8(o,i,uG(oIn(c[r],(GYn(),rmt)),12)),r+=e?1:-1)}function IFn(n,t){var e,i,r,c,a,o,u;t.Ug("Greedy Width Approximator",1),e=uM(pK(zDn(n,(S_n(),VOt)))),o=uG(zDn(n,hAt),107),r=uG(zDn(n,pAt),394),c=oM(gK(zDn(n,gAt))),a=uM(pK(zDn(n,bAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),Non(u=n.a),i=lHn(new AU(e,r,c),u,a,o),Myn(n,(lBn(),POt),i.c),t.Vg()}function OFn(n){if(null==n.g)switch(n.p){case 0:n.g=L0(n)?(qx(),eot):(qx(),tot);break;case 1:n.g=Ben(k5(n));break;case 2:n.g=Hsn(A3(n));break;case 3:n.g=iJ(n);break;case 4:n.g=new Rw(eJ(n));break;case 6:n.g=Hvn(aJ(n));break;case 5:n.g=xwn(L1(n));break;case 7:n.g=Rwn(T5(n))}return n.g}function AFn(n){if(null==n.n)switch(n.p){case 0:n.n=N0(n)?(qx(),eot):(qx(),tot);break;case 1:n.n=Ben(y5(n));break;case 2:n.n=Hsn(L3(n));break;case 3:n.n=rJ(n);break;case 4:n.n=new Rw(cJ(n));break;case 6:n.n=Hvn(oJ(n));break;case 5:n.n=xwn(N1(n));break;case 7:n.n=Rwn(M5(n))}return n.n}function LFn(n,t,e,i){var r,c,a,o,u;if(PP(),o=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,i,F$(t,102)&&!!(uG(t,19).Bb&P0n)))throw hv(new vM(Xet))}else for(u=VKn(n.e.Dh(),t),r=uG(n.g,124),a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk()))throw hv(new vM(dct));$dn(n,sAn(n,t,e),o?uG(i,76):R5(t,i))}function NFn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a<r.c.c.length;)(e=uG(N3(r),316)).g=0,e.i=0,e.e.a.$b();for(i=new Ww(n.a.a);i.a<i.c.c.length;)for(t=(e=uG(N3(i),316)).a.a.ec().Kc();t.Ob();)for(a=uG(t.Pb(),60).c.Kc();a.Ob();)(c=uG(a.Pb(),60)).a!=e&&(FV(e.e,c),++c.a.g,++c.a.i)}function $Fn(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((aUn(),eKt))&&(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)),aXn(n,i,t)}function DFn(n,t){var e,i,r;t.a?(_V(n.b,t.b),n.a[t.b.i]=uG(jS(n.b,t.b),86),(e=uG(TS(n.b,t.b),86))&&(n.a[e.i]=t.b)):(!!(i=uG(jS(n.b,t.b),86))&&i==n.a[t.b.i]&&!!i.d&&i.d!=t.b.d&&i.f.Fc(t.b),!!(r=uG(TS(n.b,t.b),86))&&n.a[r.i]==t.b&&!!r.d&&r.d!=t.b.d&&t.b.f.Fc(r),sD(n.b,t.b))}function xFn(n,t){var i,r,c,a,o,u;return a=n.d,(u=uM(pK(oIn(n,(jYn(),tMt)))))<0&&kfn(n,tMt,u=0),t.o.b=u,o=e.Math.floor(u/2),NLn(r=new lOn,(KQn(),_Rt)),o2(r,t),r.n.b=o,NLn(c=new lOn,kRt),o2(c,t),c.n.b=o,u2(n,r),zsn(i=new UZ,n),kfn(i,bMt,null),c2(i,c),u2(i,a),CGn(t,n,i),ZAn(n,i),i}function RFn(n){var t,e;return e=uG(oIn(n,(GYn(),Hpt)),21),t=new wJ,e.Hc((r_n(),ept))&&(gsn(t,TSt),gsn(t,ESt)),(e.Hc(rpt)||oM(gK(oIn(n,(jYn(),eMt)))))&&(gsn(t,ESt),e.Hc(cpt)&&gsn(t,SSt)),e.Hc(tpt)&&gsn(t,MSt),e.Hc(opt)&&gsn(t,PSt),e.Hc(ipt)&&gsn(t,jSt),e.Hc(Ygt)&&gsn(t,kSt),e.Hc(npt)&&gsn(t,ySt),t}function KFn(n,t){var e,i,r,c,a,o,u,s,h;return c=(e=n.d)+(i=t.d),a=n.e!=t.e?-1:1,2==c?(h=pz(u=Ngn(E3(n.a[0],L0n),E3(t.a[0],L0n))),0==(s=pz(Dz(u,32)))?new Z5(a,h):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[h,s]))):(jwn(n.a,e,t.a,i,r=Inn(YHt,W1n,28,c,15,1)),K4(o=new VV(a,c,r)),o)}function FFn(n,t,e,i){var r,c;return t?0==(r=n.a.Ne(e.d,t.d))?(i.d=wF(t,e.e),i.b=!0,t):(c=r<0?0:1,t.a[c]=FFn(n,t.a[c],e,i),NM(t.a[c])&&(NM(t.a[1-c])?(t.b=!0,t.a[0].b=!1,t.a[1].b=!1):NM(t.a[c].a[c])?t=Ton(t,1-c):NM(t.a[c].a[1-c])&&(t=P4(t,1-c))),t):e}function _Fn(n,t,i){var r,c,a,o;c=n.i,r=n.n,Q9(n,(Yrn(),jst),c.c+r.b,i),Q9(n,Sst,c.c+c.b-r.c-i[2],i),o=c.b-r.b-r.c,i[0]>0&&(i[0]+=n.d,o-=i[0]),i[2]>0&&(i[2]+=n.d,o-=i[2]),a=e.Math.max(0,o),i[1]=e.Math.max(i[1],o),Q9(n,Est,c.c+r.b+i[0]-(i[1]-o)/2,i),t==Est&&(n.c.b=a,n.c.c=c.c+r.b+(a-o)/2)}function BFn(){this.c=Inn(eUt,I0n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),this.a=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),KP(this.c,M0n),KP(this.b,T0n),KP(this.a,T0n)}function HFn(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=Inn(YHt,W1n,28,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=Inn(YHt,W1n,28,i+2,15,1),qGn(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||pxn(n)}}function UFn(n,t,e){var i,r,c,a,o,u,s;for(s=t.d,n.a=new R7(s.c.length),n.c=new Ym,o=new Ww(s);o.a<o.c.c.length;)a=uG(N3(o),105),c=new nhn(null),kD(n.a,c),vJ(n.c,a,c);for(n.b=new Ym,cLn(n,t),i=0;i<s.c.length-1;i++)for(u=uG(zq(t.d,i),105),r=i+1;r<s.c.length;r++)KRn(n,u,uG(zq(t.d,r),105),e)}function GFn(n){var t,e,i,r,c;for(r=new Zm,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||mv(r.c,c));return r}function qFn(n,t,e){var i,r,c;if(n.e=e,n.d=0,n.b=0,n.f=1,n.i=t,!(16&~n.e)&&(n.i=jHn(n.i)),n.j=n.i.length,EYn(n),c=Evn(n),n.d!=n.j)throw hv(new CM(rZn((t$(),nit))));if(n.g){for(i=0;i<n.g.a.c.length;i++)if(r=uG(DQ(n.g,i),592),n.f<=r.a)throw hv(new CM(rZn((t$(),tit))));n.g.a.c.length=0}return c}function XFn(n,t){var i,r,c,a,o,u,s;for(i=T0n,zIn(),u=dbt,c=new Ww(t.a);c.a<c.c.c.length;)(a=(r=uG(N3(c),10)).k)!=dbt&&(null==(o=pK(oIn(r,(GYn(),amt))))?(i=e.Math.max(i,0),r.n.b=i+Bx(n.a,a,u)):r.n.b=(tJ(o),o)),s=Bx(n.a,a,u),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,u=a}function zFn(n,t,e,i,r){var c,a,o;if(n.d&&n.d.Gg(r),kMn(n,e,uG(r.Xb(0),27),!1))return!0;if(kMn(n,i,uG(r.Xb(r.gc()-1),27),!0))return!0;if(kIn(n,r))return!0;for(o=r.Kc();o.Ob();)for(a=uG(o.Pb(),27),c=t.Kc();c.Ob();)if(p_n(n,a,uG(c.Pb(),27)))return!0;return!1}function VFn(n,t,e){var i,r,c,a,o,u,s,h,f;f=t.c.length;n:for(c=uG((s=n.Ih(e))>=0?n.Lh(s,!1,!0):YNn(n,e,!1),61).Kc();c.Ob();){for(r=uG(c.Pb(),58),h=0;h<f;++h)if(u3(h,t.c.length),u=(a=uG(t.c[h],76)).md(),o=a.Lk(),i=r.Nh(o,!1),null==u?null!=i:!udn(u,i))continue n;return r}return null}function WFn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Comment post-processing",1),c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),i=new Zm,o=new Ww(r.a);o.a<o.c.c.length;)a=uG(N3(o),10),u=uG(oIn(a,(GYn(),Pmt)),15),e=uG(oIn(a,Ept),15),(u||e)&&(dQn(a,u,e),u&&Ohn(i,u),e&&Ohn(i,e));Ohn(r.a,i)}t.Vg()}function QFn(n,t,e,i){var r,c,a,o;for(r=uG(yOn(t,(KQn(),_Rt)).Kc().Pb(),12),c=uG(yOn(t,kRt).Kc().Pb(),12),o=new Ww(n.j);o.a<o.c.c.length;){for(a=uG(N3(o),12);0!=a.e.c.length;)u2(uG(zq(a.e,0),18),r);for(;0!=a.g.c.length;)c2(uG(zq(a.g,0),18),c)}e||kfn(t,(GYn(),Zpt),null),i||kfn(t,(GYn(),nmt),null)}function JFn(n,t,e){var i,r;if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)return Qhn(n);if(i=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),t&&(Czn((!i.a&&(i.a=new MD(eFt,i,5)),i.a)),Tcn(i,0),Ecn(i,0),mcn(i,0),jcn(i,0)),e)for(!n.a&&(n.a=new fV(oFt,n,6,6)),r=n.a;r.i>1;)e_n(r,r.i-1);return i}function YFn(n,t){var e,i,r,c,a,o;for(e=new ND,r=new Ww(n.b);r.a<r.c.c.length;){for(o=!0,i=0,a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)switch((c=uG(N3(a),10)).k.g){case 4:++i;case 1:O6(e,c);break;case 0:YAn(c,t);default:e.b==e.c||TUn(e,i,o,!1,t),o=!1,i=0}e.b==e.c||TUn(e,i,o,!0,t)}}function ZFn(n,t){var e,i,r,c,a,o;for(e=0,o=new Ww(t);o.a<o.c.c.length;){for(a=uG(N3(o),12),fbn(n.b,n.d[a.p]),r=new w7(a.b);l$(r.a)||l$(r.b);)(c=Yj(n,a==(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c?i.d:i.c))>n.d[a.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function n_n(n){var t,e,i,r,c,a,o;for(n.a=new xF,o=0,r=0,i=new Ww(n.i.b);i.a<i.c.c.length;){for((t=uG(N3(i),30)).p=r,a=new Ww(t.a);a.a<a.c.c.length;)uG(N3(a),10).p=o,++o;++r}for(c=n.r==(THn(),Pjt)?Jwt:Qwt,e=new Ww(n.i.b);e.a<e.c.c.length;)f$((t=uG(N3(e),30)).a,c),Zin(n.a,xwn(t.p),t.a)}function t_n(n,t,e){var i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)0==(!(i=uG(Zkn(r),27)).a&&(i.a=new fV(bFt,i,10,11)),i.a).i||(c+=t_n(n,i,!1));if(e)for(a=R0(t);a;)c+=(!a.a&&(a.a=new fV(bFt,a,10,11)),a.a).i,a=R0(a);return c}function e_n(n,t){var e,i,r,c;return n.Pj()?(i=null,r=n.Qj(),n.Tj()&&(i=n.Vj(n.$i(t),null)),e=n.Ij(4,c=gjn(n,t),null,t,r),n.Mj()&&null!=c?(i=n.Oj(c,i))?(i.nj(e),i.oj()):n.Jj(e):i?(i.nj(e),i.oj()):n.Jj(e),c):(c=gjn(n,t),n.Mj()&&null!=c&&(i=n.Oj(c,null))&&i.oj(),c)}function i_n(n){var t,i,r,c,a,o,u,s,h,f;for(h=n.a,t=new ek,s=0,r=new Ww(n.d);r.a<r.c.c.length;){for(f=0,Lon((i=uG(N3(r),226)).b,new Nn),o=Fkn(i.b,0);o.b!=o.d.c;)a=uG(I6(o),226),t.a._b(a)&&(c=i.c,f<(u=a.c).d+u.a+h&&f+c.a+h>u.d&&(f=u.d+u.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 r_n(){r_n=E,Zgt=new aI("COMMENTS",0),tpt=new aI("EXTERNAL_PORTS",1),ept=new aI("HYPEREDGES",2),ipt=new aI("HYPERNODES",3),rpt=new aI("NON_FREE_PORTS",4),cpt=new aI("NORTH_SOUTH_PORTS",5),opt=new aI(F6n,6),Ygt=new aI("CENTER_LABELS",7),npt=new aI("END_LABELS",8),apt=new aI("PARTITIONS",9)}function c_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function a_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function o_n(n,t,e,i,r,c){var a,o,u;if(o=32,i<0){if(t[0]>=n.length)return!1;if(43!=(o=VJ(n,t[0]))&&45!=o)return!1;if(++t[0],(i=RNn(n,t))<0)return!1;45==o&&(i=-i)}return 32==o&&t[0]-e==2&&2==r.b&&(a=(u=(new QE).q.getFullYear()-V1n+V1n-80)%100,c.a=i==a,i+=100*(u/100|0)+(i<a?100:0)),c.p=i,!0}function u_n(n,t){var i,r,c;R0(n)&&(c=uG(oIn(t,(jYn(),DMt)),181),xA(zDn(n,JMt))===xA(($Pn(),sRt))&&Myn(n,JMt,uRt),vP(),r=uQn(new Vy(R0(n)),new Wx(R0(n)?new Vy(R0(n)):null,n),!1,!0),Mon(c,(Qmn(),VRt)),(i=uG(oIn(t,RMt),8)).a=e.Math.max(r.a,i.a),i.b=e.Math.max(r.b,i.b))}function s_n(n,t,e){var i,r,c,a,o,u;for(a=uG(oIn(n,(GYn(),Upt)),15).Kc();a.Ob();){switch(c=uG(a.Pb(),10),uG(oIn(c,(jYn(),gMt)),171).g){case 2:a2(c,t);break;case 4:a2(c,e)}for(r=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c&&i.d||(o=!i.d,u=uG(oIn(i,umt),12),o?u2(i,u):c2(i,u))}}function h_n(){h_n=E,Odt=new yY(o3n,0,(KQn(),yRt),yRt),Ndt=new yY(s3n,1,KRt,KRt),Idt=new yY(u3n,2,kRt,kRt),xdt=new yY(h3n,3,_Rt,_Rt),Ldt=new yY("NORTH_WEST_CORNER",4,_Rt,yRt),Adt=new yY("NORTH_EAST_CORNER",5,yRt,kRt),Ddt=new yY("SOUTH_WEST_CORNER",6,KRt,_Rt),$dt=new yY("SOUTH_EAST_CORNER",7,kRt,KRt)}function f_n(n){var t,e,i,r,c;for(r=new ek,t=new oX((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(c=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),t.a._b(c)||r.a.zc(c,r));return r}function l_n(){l_n=E,ENt=Uhn(cT(nUt,1),E0n,28,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 b_n(){var n,t;for(b_n=E,Got=Inn(Xot,zZn,92,32,0,1),qot=Inn(Xot,zZn,92,32,0,1),n=1,t=0;t<=18;t++)Got[t]=(cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))),qot[t]=BA(Nz(n,t),0)?Rmn(Nz(n,t)):hW(Rmn(Men(Nz(n,t)))),n=Ngn(n,5);for(;t<qot.length;t++)Got[t]=j5(Got[t-1],Got[1]),qot[t]=j5(qot[t-1],(cHn(),Kot))}function w_n(n,t){var e,i,r,c,a;if(0==n.c.length)return new WO(xwn(0),xwn(0));for(e=(u3(0,n.c.length),uG(n.c[0],12)).j,a=0,c=t.g,i=t.g+1;a<n.c.length-1&&e.g<c;)e=(u3(++a,n.c.length),uG(n.c[a],12)).j;for(r=a;r<n.c.length-1&&e.g<i;)++r,e=(u3(a,n.c.length),uG(n.c[a],12)).j;return new WO(xwn(a),xwn(r))}function d_n(n,t,e,i){var r,c,a,o,u;o=Dgn(t,e),(e==(KQn(),KRt)||e==_Rt)&&(o=Spn(o)),a=!1;do{for(r=!1,c=0;c<o.gc()-1;c++)SIn(n,uG(o.Xb(c),12),uG(o.Xb(c+1),12),i)&&(a=!0,Z3(n.a,uG(o.Xb(c),12),uG(o.Xb(c+1),12)),u=uG(o.Xb(c+1),12),o.hd(c+1,uG(o.Xb(c),12)),o.hd(c,u),r=!0)}while(r);return a}function g_n(n,t,e){var i,r,c;for(e.Ug(X9n,1),o$n(n,uG(l8(JJ(new fX(null,new h3(t.b,16)),new qa),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),0),c=Fkn(t.b,0);c.b!=c.d.c;)r=uG(I6(c),40),i=null!=cQ(n.a,xwn(r.g))?uG(cQ(n.a,xwn(r.g)),17).a:0,kfn(r,(QGn(),ACt),xwn(i));e.Vg()}function p_n(n,t,e){var i,r,c,a,o,u,s,h;return o=t.i-n.g/2,u=e.i-n.g/2,s=t.j-n.g/2,h=e.j-n.g/2,c=t.g+n.g,a=e.g+n.g,i=t.f+n.g,r=e.f+n.g,o<u+a&&u<o&&s<h+r&&h<s||u<o+c&&o<u&&h<s+i&&s<h||o<u+a&&u<o&&s<h&&h<s+i||u<o+c&&o<u&&s<h+r&&h<s}function m_n(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=t.c.length,u3(i,t.c.length),u=(o=uG(t.c[i],293)).a.o.a,l=o.c,b=0,h=o.c;h<=o.f;h++){if(u<=n.a[h])return h;for(f=n.a[h],s=null,c=i+1;c<a;c++)u3(c,t.c.length),(r=uG(t.c[c],293)).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 v_n(n){var t,e,i,r,c,a,o;for(c=new Hj(uG(WW(new Dn),50)),o=T0n,e=new Ww(n.d);e.a<e.c.c.length;){for(o=(t=uG(N3(e),226)).c.c;0!=c.a.gc()&&(a=uG(c.a.Tc(),226)).c.c+a.c.b<o;)c.a.Bc(a);for(r=c.a.ec().Kc();r.Ob();)aq((i=uG(r.Pb(),226)).b,t),aq(t.b,i);c.a.zc(t,(qx(),tot))}}function k_n(n,t,e){var i,r,c,a,o;if(!P6(t)){for((o=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),a=new za,c=null,r=t.Kc();r.Ob();)i=uG(r.Pb(),40),a=zcn(Uhn(cT(vat,1),EZn,20,0,[a,new Mp(i)])),c&&(kfn(c,(OQn(),BPt),i),kfn(i,APt,c),M7(i)==M7(c)&&(kfn(c,HPt,i),kfn(i,LPt,c))),c=i;o.Vg(),k_n(n,a,e)}}function y_n(n,t){var e,i,r;if(null==t){for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(null==(null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e}else for(!n.a&&(n.a=new fV(d_t,n,9,5)),i=new DD(n.a);i.e!=i.i.gc();)if(m_(t,null==(r=(e=uG(Zkn(i),694)).c)?e.zb:r))return e;return null}function M_n(n,t){var e;switch(e=null,t.g){case 1:n.e.pf((XYn(),rDt))&&(e=uG(n.e.of(rDt),256));break;case 3:n.e.pf((XYn(),cDt))&&(e=uG(n.e.of(cDt),256));break;case 2:n.e.pf((XYn(),iDt))&&(e=uG(n.e.of(iDt),256));break;case 4:n.e.pf((XYn(),aDt))&&(e=uG(n.e.of(aDt),256))}return!e&&(e=uG(n.e.of((XYn(),tDt)),256)),e}function T_n(n,t,i){var r,c,a,o,u,s;for(c=i,a=0,u=new Ww(t);u.a<u.c.c.length;)Myn(o=uG(N3(u),27),(jOn(),FIt),xwn(c++)),s=GFn(o),r=e.Math.atan2(o.j+o.f/2,o.i+o.g/2),(r+=r<0?f7n:0)<.7853981633974483||r>F7n?f$(s,n.b):r<=F7n&&r>_7n?f$(s,n.d):r<=_7n&&r>B7n?f$(s,n.c):r<=B7n&&f$(s,n.a),a=T_n(n,s,a);return c}function j_n(n,t,e,i){var r,c,a,o,u;for(r=(i.c+i.a)/2,BY(t.j),aq(t.j,r),BY(e.e),aq(e.e,r),u=new hj,a=new Ww(n.f);a.a<a.c.c.length;)kSn(u,t,o=uG(N3(a),132).a),kSn(u,e,o);for(c=new Ww(n.k);c.a<c.c.c.length;)kSn(u,t,o=uG(N3(c),132).b),kSn(u,e,o);return u.b+=2,u.a+=tZ(t,n.q),u.a+=tZ(n.q,e),u}function E_n(n,t,e){var i;e.Ug("Processor arrange node",1),oM(gK(oIn(t,(QGn(),rCt)))),i=uG(yx(lln(JJ(new fX(null,new h3(t.b,16)),new bo))),40),n.a=uG(oIn(t,LCt),353),n.a==(mbn(),DCt)||n.a==$Ct?fQn(n,new IM(Uhn(cT(lPt,1),z9n,40,0,[i])),e.eh(1)):n.a==NCt&&mYn(n,new IM(Uhn(cT(lPt,1),z9n,40,0,[i])),e.eh(1)),e.Vg()}function S_n(){S_n=E,VOt=new _N((XYn(),c$t),1.3),iAt=new _N(H$t,(qx(),!1)),fAt=new CN(15),hAt=new _N(W$t,fAt),bAt=new _N(DDt,15),WOt=l$t,eAt=_$t,rAt=U$t,cAt=q$t,tAt=K$t,aAt=V$t,lAt=bDt,IHn(),pAt=UOt,gAt=HOt,vAt=zOt,mAt=qOt,sAt=KOt,uAt=ROt,oAt=xOt,dAt=BOt,YOt=O$t,ZOt=A$t,JOt=$Ot,QOt=NOt,nAt=DOt,wAt=_Ot}function P_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.d,n.f==(Yen(),Kst)?o+=(e.a-n.e.b)/2:n.f==Rst&&(o+=e.a-n.e.b),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).b=o,o+=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.Of(c)}}function C_n(n){var t,e,i,r,c,a,o;for(e=n.i,t=n.n,o=e.c,n.b==(Ktn(),Ost)?o+=(e.b-n.e.a)/2:n.b==Lst&&(o+=e.b-n.e.a),r=new Ww(n.d);r.a<r.c.c.length;){switch(a=(i=uG(N3(r),187)).Mf(),(c=new sj).a=o,o+=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.Of(c)}}function I_n(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),468)).f,b=c.a,o=new MO(s,l),h=new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function O_n(n,t,e){var i,r;for(t<n.d.b.c.length?(n.b=uG(zq(n.d.b,t),30),n.a=uG(zq(n.d.b,t-1),30),n.c=t):(n.a=new bQ(n.d),n.a.p=t-1,kD(n.d.b,n.a),n.b=new bQ(n.d),n.b.p=t,kD(n.d.b,n.b),n.c=t),a2(e,n.b),r=new Fz(ix(qgn(e).a.Kc(),new h));hDn(r);)!(i=uG(N9(r),18)).c.i.c&&i.c.i.k==(zIn(),bbt)&&a2(i.c.i,n.a)}function A_n(n){hP(n,new hCn(FT(DT(KT(RT(new bu,jtt),"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 Fu))),U4(n,jtt,K3n,qRt),U4(n,jtt,o4n,15),U4(n,jtt,s4n,xwn(0)),U4(n,jtt,R3n,r4n)}function L_n(){var n,t,e,i,r,c;for(L_n=E,pHt=Inn(tUt,ret,28,255,15,1),mHt=Inn(JHt,N1n,28,16,15,1),t=0;t<255;t++)pHt[t]=-1;for(e=57;e>=48;e--)pHt[e]=e-48<<24>>24;for(i=70;i>=65;i--)pHt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)pHt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)mHt[c]=48+c&D1n;for(n=10;n<=15;n++)mHt[n]=65+n-10&D1n}function N_n(n,t){t.Ug("Process graph bounds",1),kfn(n,(OQn(),PPt),$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Ka)))),kfn(n,IPt,$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Fa)))),kfn(n,SPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new _a)))),kfn(n,CPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new Ba)))),t.Vg()}function $_n(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((aUn(),eKt))&&(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)),oM(gK(oIn(n,xMt)))||cXn(n,i,t)}function D_n(n,t){var e,i,r,c;for(c=Dgn(t,(KQn(),KRt)).Kc();c.Ob();)i=uG(c.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=Dgn(t,yRt).Kc();r.Ob();)i=uG(r.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[e.p].d),n.i[t.p].a))}function x_n(n){var t,e,i,r,c;if(!n.c){if(c=new ks,null==(t=V_t).a.zc(n,t)){for(i=new DD(z5(n));i.e!=i.i.gc();)F$(r=MGn(e=uG(Zkn(i),89)),90)&&CW(c,x_n(uG(r,29))),ttn(c,e);t.a.Bc(n),t.a.gc()}imn(c),lbn(c),n.c=new vL((uG(zrn(gZ((tQ(),M_t).o),15),19),c.i),c.g),y9(n).b&=-33}return n.c}function R_n(n){var t;if(10!=n.c)throw hv(new CM(rZn((t$(),eit))));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 hv(new CM(rZn((t$(),Lit))))}return t}function K_n(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==b0n&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19)return"-"+K_n(gfn(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Yzn(e,_9(g0n),!0),t=""+Tj(Qat),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 F_n(n){var t,e,i,r,c,a,o;for(t=!1,e=0,r=new Ww(n.d.b);r.a<r.c.c.length;)for((i=uG(N3(r),30)).p=e++,a=new Ww(i.a);a.a<a.c.c.length;)c=uG(N3(a),10),!t&&!P6(Ggn(c))&&(t=!0);o=WX((xdn(),ZDt),Uhn(cT(axt,1),p1n,88,0,[JDt,YDt])),t||(Mon(o,nxt),Mon(o,QDt)),n.a=new Qin(o),$V(n.f),$V(n.b),$V(n.e),$V(n.g)}function __n(){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 B_n(n,t,e){var i,r,c,a,o,u,s,h,f;for(i=e.c,r=e.d,o=n3(t.c),u=n3(t.d),i==t.c?(o=nRn(n,o,r),u=VCn(t.d)):(o=VCn(t.c),u=nRn(n,u,r)),s8(s=new tj(t.a),o,s.a,s.a.a),s8(s,u,s.c.b,s.c),a=t.c==i,f=new wk,c=0;c<s.b-1;++c)h=new WO(uG(hyn(s,c),8),uG(hyn(s,c+1),8)),a&&0==c||!a&&c==s.b-2?f.b=h:kD(f.a,h);return f}function H_n(n,t){var e,i,r,c;if(0!=(c=n.j.g-t.j.g))return c;if(e=uG(oIn(n,(jYn(),YMt)),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function U_n(n,t,i,r){var c,a,o,u;if(x5((HB(),new Fz(ix(Ggn(t).a.Kc(),new h))))>=n.a)return-1;if(!_Pn(t,i))return-1;if(P6(uG(r.Kb(t),20)))return 1;for(c=0,o=uG(r.Kb(t),20).Kc();o.Ob();){if(-1==(u=U_n(n,(a=uG(o.Pb(),18)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,u))>n.c-1)return-1}return c+1}function G_n(n,t){var e,i,r,c,a,o;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),o=n.gc(),i.gc()!=o)return!1;if(a=i.Kc(),n.Yi()){for(e=0;e<o;++e)if(r=n.Vi(e),c=a.Pb(),null==r?null!=c:!udn(r,c))return!1}else for(e=0;e<o;++e)if(r=n.Vi(e),c=a.Pb(),xA(r)!==xA(c))return!1;return!0}function q_n(n,t){var e,i,r,c,a,o;if(n.f>0)if(n._j(),null!=t){for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(udn(t,(r=i[a]).md()))return!0}else for(c=0;c<n.d.length;++c)if(e=n.d[c])for(i=uG(e.g,379),o=e.i,a=0;a<o;++a)if(r=i[a],xA(t)===xA(r.md()))return!0;return!1}function X_n(n,t){var e,i,r;return(e=t.qi(n.a))&&null!=(r=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"affiliation")))?-1==(i=ax(r,$Cn(35)))?Adn(n,jz(n,Hrn(t.qk())),r):0==i?Adn(n,null,(s3(1,r.length+1),r.substr(1))):Adn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))):null}function z_n(n,t,e){var i,r,c,a;e.Ug("Orthogonally routing hierarchical port edges",1),n.a=0,XVn(t,i=azn(t)),dVn(n,t,i),jQn(t),r=uG(oIn(t,(jYn(),JMt)),101),JWn((u3(0,(c=t.b).c.length),uG(c.c[0],30)),r,t),JWn(uG(zq(c,c.c.length-1),30),r,t),Bqn((u3(0,(a=t.b).c.length),uG(a.c[0],30))),Bqn(uG(zq(a,a.c.length-1),30)),e.Vg()}function V_n(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 hv(new ZM("Invalid hexadecimal"))}}function W_n(){W_n=E,pst=new rC("SPIRAL",0),lst=new rC("LINE_BY_LINE",1),bst=new rC("MANHATTAN",2),fst=new rC("JITTER",3),dst=new rC("QUADRANTS_LINE_BY_LINE",4),gst=new rC("QUADRANTS_MANHATTAN",5),wst=new rC("QUADRANTS_JITTER",6),hst=new rC("COMBINE_LINE_BY_LINE_MANHATTAN",7),sst=new rC("COMBINE_JITTER_MANHATTAN",8)}function Q_n(n,t,e,i){var r,c,a,o,u,s;for(u=pSn(n,e),s=pSn(t,e),r=!1;u&&s&&(i||ejn(u,s,e));)a=pSn(u,e),o=pSn(s,e),Ien(t),Ien(n),c=u.c,pVn(u,!1),pVn(s,!1),e?($jn(t,s.p,c),t.p=s.p,$jn(n,u.p+1,c),n.p=u.p):($jn(n,u.p,c),n.p=u.p,$jn(t,s.p+1,c),t.p=s.p),a2(u,null),a2(s,null),u=a,s=o,r=!0;return r}function J_n(n){switch(n.g){case 0:return new ul;case 1:return new al;case 3:return new iP;case 4:return new Sc;case 5:return new RF;case 6:return new ol;case 2:return new cl;case 7:return new Zf;case 8:return new tl;default:throw hv(new vM("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function Y_n(n,t,e,i){var r,c,a,o,u;for(r=!1,c=!1,o=new Ww(i.j);o.a<o.c.c.length;)xA(oIn(a=uG(N3(o),12),(GYn(),rmt)))===xA(e)&&(0==a.g.c.length?0==a.e.c.length||(r=!0):c=!0);return u=0,r&&r^c?u=e.j==(KQn(),yRt)?-n.e[i.c.p][i.p]:t-n.e[i.c.p][i.p]:c&&r^c?u=n.e[i.c.p][i.p]+1:r&&c&&(u=e.j==(KQn(),yRt)?0:t/2),u}function Z_n(n,t,e,i,r,c,a,o){var u,s,h;for(u=0,null!=t&&(u^=pln(t.toLowerCase())),null!=e&&(u^=pln(e)),null!=i&&(u^=pln(i)),null!=a&&(u^=pln(a)),null!=o&&(u^=pln(o)),s=0,h=c.length;s<h;s++)u^=pln(c[s]);n?u|=256:u&=-257,r?u|=16:u&=-17,this.f=u,this.i=null==t?null:(tJ(t),t),this.a=e,this.d=i,this.j=c,this.g=a,this.e=o}function nBn(n,t,e){var i,r;switch(r=null,t.g){case 1:Lun(),r=ybt;break;case 2:Lun(),r=Tbt}switch(i=null,e.g){case 1:Lun(),i=Mbt;break;case 2:Lun(),i=kbt;break;case 3:Lun(),i=jbt;break;case 4:Lun(),i=Ebt}return r&&i?YU(n.j,new Hl(new IM(Uhn(cT(pat,1),EZn,178,0,[uG(WW(r),178),uG(WW(i),178)])))):(hZ(),hZ(),zot)}function tBn(n){var t,e,i;switch(t=uG(oIn(n,(jYn(),RMt)),8),kfn(n,RMt,new MO(t.b,t.a)),uG(oIn(n,byt),255).g){case 1:kfn(n,byt,(nMn(),NNt));break;case 2:kfn(n,byt,(nMn(),INt));break;case 3:kfn(n,byt,(nMn(),ANt));break;case 4:kfn(n,byt,(nMn(),LNt))}(n.q?n.q:(hZ(),hZ(),Vot))._b(rTt)&&(i=(e=uG(oIn(n,rTt),8)).a,e.a=e.b,e.b=i)}function eBn(n,t,e,i,r,c){if(this.b=e,this.d=r,n>=t.length)throw hv(new dM("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new R_(i),Aon(this.e,this.c,(KQn(),_Rt)),this.i=new R_(i),Aon(this.i,this.c,kRt),this.f=new sX(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(zIn(),lbt),this.a&&rAn(this,n,t.length)}function iBn(n,t){var e,i,r,c,a,o;c=!n.B.Hc((aUn(),nKt)),a=n.B.Hc(iKt),n.a=new umn(a,c,n.c),n.n&&WY(n.a.n,n.n),nM(n.g,(Yrn(),Est),n.a),t||((i=new tkn(1,c,n.c)).n.a=n.k,UV(n.p,(KQn(),yRt),i),(r=new tkn(1,c,n.c)).n.d=n.k,UV(n.p,KRt,r),(o=new tkn(0,c,n.c)).n.c=n.k,UV(n.p,_Rt,o),(e=new tkn(0,c,n.c)).n.b=n.k,UV(n.p,kRt,e))}function rBn(n){var t,e,i;switch((t=uG(oIn(n.d,(jYn(),Vyt)),223)).g){case 2:e=UJn(n);break;case 3:i=new Zm,kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Or),new Ar),new Lr),new pr),new Ng(i)),e=i;break;default:throw hv(new kM("Compaction not supported for "+t+" edges."))}xzn(n,e),z8(new Lw(n.g),new Ag(n))}function cBn(n,t){var e,i,r,c,a,o,u;if(t.Ug("Process directions",1),(e=uG(oIn(n,(QGn(),cCt)),88))!=(xdn(),QDt))for(r=Fkn(n.b,0);r.b!=r.d.c;){switch(i=uG(I6(r),40),o=uG(oIn(i,(OQn(),GPt)),17).a,u=uG(oIn(i,qPt),17).a,e.g){case 4:u*=-1;break;case 1:c=o,o=u,u=c;break;case 2:a=o,o=-u,u=a}kfn(i,GPt,xwn(o)),kfn(i,qPt,xwn(u))}t.Vg()}function aBn(n,t){var e;return e=new Yn,t&&zsn(e,uG(cQ(n.a,iFt),96)),F$(t,422)&&zsn(e,uG(cQ(n.a,rFt),96)),F$(t,366)?(zsn(e,uG(cQ(n.a,lFt),96)),e):(F$(t,84)&&zsn(e,uG(cQ(n.a,cFt),96)),F$(t,207)?(zsn(e,uG(cQ(n.a,bFt),96)),e):F$(t,193)?(zsn(e,uG(cQ(n.a,wFt),96)),e):(F$(t,326)&&zsn(e,uG(cQ(n.a,aFt),96)),e))}function oBn(n){var t,e,i,r,c,a,o;for(o=new c9,a=new Ww(n.a);a.a<a.c.c.length;)if((c=uG(N3(a),10)).k!=(zIn(),lbt))for(LDn(o,c,new sj),r=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(r);)if((i=uG(N9(r),18)).c.i.k!=lbt&&i.d.i.k!=lbt)for(e=Fkn(i.a,0);e.b!=e.d.c;)CEn(o,new FC((t=uG(I6(e),8)).a,t.b));return o}function uBn(){uBn=E,RLt=new Cm(gnt),eP(),DLt=new mL(ynt,xLt=GLt),Vhn(),NLt=new mL(pnt,$Lt=VLt),pOn(),ALt=new mL(mnt,LLt=rLt),PLt=new mL(vnt,null),B7(),ILt=new mL(knt,OLt=ZAt),nP(),MLt=new mL(Mnt,TLt=zAt),jLt=new mL(Tnt,(qx(),!1)),ELt=new mL(jnt,xwn(64)),SLt=new mL(Ent,!0),CLt=nLt}function sBn(n,t){var e,i,r,c,a,o,u;for(n.p=1,i=n.c,u=new XL,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)for(e=new Ww(uG(o.Pb(),12).g);e.a<e.c.c.length;)n!=(a=uG(N3(e),18).d.i)&&a.c.p<=i.p&&((r=i.p+1)==t.b.c.length?((c=new bQ(t)).p=r,kD(t.b,c),a2(a,c)):a2(a,c=uG(zq(t.b,r),30)),u.a.zc(a,u));return u}function hBn(n,t){var e,i;if(!(e=uG(oIn(n,(OQn(),yPt)),15))||e.gc()<1)return null;if(1==e.gc())return uG(e.Xb(0),40);switch(i=null,t.g){case 2:i=uG(yx(Qz(e.Oc(),new Da)),40);break;case 1:i=uG(yx(Wz(e.Oc(),new Aa)),40);break;case 4:i=uG(yx(Qz(e.Oc(),new La)),40);break;case 3:i=uG(yx(Wz(e.Oc(),new Na)),40)}return i}function fBn(n){var t,e,i,r,c;if(null==n.a)if(n.a=Inn(ZHt,B2n,28,n.c.b.c.length,16,1),n.a[0]=!1,vR(n.c,(jYn(),XTt)))for(e=uG(oIn(n.c,XTt),15).Kc();e.Ob();)(t=uG(e.Pb(),17).a)>0&&t<n.a.length&&(n.a[t]=!1);else for((c=new Ww(n.c.b)).a<c.c.c.length&&N3(c),i=1;c.a<c.c.c.length;)r=uG(N3(c),30),n.a[i++]=_xn(r)}function lBn(){lBn=E,pOt=new Cm("additionalHeight"),mOt=new Cm("drawingHeight"),vOt=new Cm("drawingWidth"),MOt=new Cm("minHeight"),EOt=new Cm("minWidth"),SOt=new Cm("rows"),POt=new Cm("targetWidth"),jOt=new uF("minRowIncrease",0),yOt=new uF("maxRowIncrease",0),TOt=new uF("minRowDecrease",0),kOt=new uF("maxRowDecrease",0)}function bBn(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 DD(n.c);e.e!=e.i.gc();)yLn(y9(uG(Zkn(e),482)),t)}function wBn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;for(r=!1,o=0,u=(a=t).length;o<u;++o)c=a[o],oM((qx(),!!c.e))&&!uG(zq(n.b,c.e.p),219).s&&(r|=(s=c.e,(f=(h=uG(zq(n.b,s.p),219)).e)[l=AT(e,f.length)][0].k==(zIn(),lbt)?f[l]=TKn(c,f[l],e?(KQn(),_Rt):(KQn(),kRt)):h.c.mg(f,e),b=PKn(n,h,e,i),CFn(h.e,h.o,e),b));return r}function dBn(n,t){var e,i,r,c,a;for(c=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)xA(zDn(i=uG(Zkn(r),27),(XYn(),E$t)))!==xA((Own(),Axt))&&((a=uG(zDn(t,yDt),143))==(e=uG(zDn(i,yDt),143))||a&&k9(a,e))&&0!=(!i.a&&(i.a=new fV(bFt,i,10,11)),i.a).i&&(c+=dBn(n,i));return c}function gBn(n){var t,e,i,r,c,a,o;for(i=0,o=0,a=new Ww(n.d);a.a<a.c.c.length;)c=uG(N3(a),105),r=uG(l8(JJ(new fX(null,new h3(c.j,16)),new Zr),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=null,i<=o?(KQn(),e=yRt,i+=r.gc()):o<i&&(KQn(),e=KRt,o+=r.gc()),t=e,kS(YJ(r.Oc(),new Jr),new xg(t))}function pBn(n){var t,e,i,r,c;for(c=new R7(n.a.c.length),r=new Ww(n.a);r.a<r.c.c.length;){switch(i=uG(N3(r),10),t=null,(e=uG(oIn(i,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),t=ygt;break;case 3:case 4:Pfn(),t=vgt}t?(kfn(i,(GYn(),Npt),(Pfn(),ygt)),t==vgt?CKn(i,e,(can(),Vjt)):t==ygt&&CKn(i,e,(can(),Wjt))):mv(c.c,i)}return c}function mBn(n){var t,e,i,r,c,a,o,u;for(n.b=new f$n(new IM((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]))),new IM((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))),o=0,u=(a=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;o<u;++o)for(c=a[o],i=0,r=(e=Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])).length;i<r;++i)t=e[i],LSn(n.b,c,t,new Zm)}function vBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),s=n.u.Hc(pRt),f=n.B.Hc((aUn(),uKt)),h=!e&&!i&&(s||2==a.gc()),iFn(n,t),r=null,u=null,o){for(u=r=uG((c=a.Kc()).Pb(),117);c.Ob();)u=uG(c.Pb(),117);r.d.b=0,u.d.c=0,h&&!r.a&&(r.d.c=0)}f&&(yCn(a),o&&(r.d.b=0,u.d.c=0))}function kBn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=uG(uG(Y9(n.r,t),21),87),o=n.u.Hc((eNn(),gRt)),e=n.u.Hc(bRt),i=n.u.Hc(lRt),u=n.u.Hc(pRt),f=n.B.Hc((aUn(),uKt)),s=!e&&!i&&(u||2==a.gc()),iGn(n,t),h=null,r=null,o){for(r=h=uG((c=a.Kc()).Pb(),117);c.Ob();)r=uG(c.Pb(),117);h.d.d=0,r.d.a=0,s&&!h.a&&(h.d.a=0)}f&&(MCn(a),o&&(h.d.d=0,r.d.a=0))}function yBn(n,t,e){var i,r,c,a,o;if(i=t.k,t.p>=0)return!1;if(t.p=e.b,kD(e.e,t),i==(zIn(),wbt)||i==gbt)for(r=new Ww(t.j);r.a<r.c.c.length;)for(o=new Qd(new Ww(new Wd(uG(N3(r),12)).a.g));l$(o.a);)if(a=(c=uG(N3(o.a),18).d.i).k,t.c!=c.c&&(a==wbt||a==gbt)&&yBn(n,c,e))return!0;return!0}function MBn(n){var t;return 64&n.Db?L$n(n):((t=new fx(L$n(n))).a+=" (changeable: ",Lj(t,!!(n.Bb&w1n)),t.a+=", volatile: ",Lj(t,!!(n.Bb&frt)),t.a+=", transient: ",Lj(t,!!(n.Bb&j0n)),t.a+=", defaultValueLiteral: ",VA(t,n.j),t.a+=", unsettable: ",Lj(t,!!(n.Bb&hrt)),t.a+=", derived: ",Lj(t,!!(n.Bb&VZn)),t.a+=")",t.a)}function TBn(n,t){var e,i,r,c;return(i=t.qi(n.a))&&(!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),null!=(e=mK(Lmn(i.b,Krt)))&&F$(c=-1==(r=e.lastIndexOf("#"))?hK(n,t.jk(),e):0==r?gtn(n,null,(s3(1,e.length+1),e.substr(1))):gtn(n,(Knn(0,r,e.length),e.substr(0,r)),(s3(r+1,e.length+1),e.substr(r+1))),156))?uG(c,156):null}function jBn(n,t){var e,i,r,c;return(e=t.qi(n.a))&&(!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),null!=(r=mK(Lmn(e.b,oct)))&&F$(c=-1==(i=r.lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156))?uG(c,156):null}function EBn(n){var t,e,i,r,c,a,o,u,s,h;for(e=TRn(n.d),c=(r=uG(oIn(n.b,(ryn(),Yht)),107)).b+r.c,a=r.d+r.a,u=e.d.a*n.e+c,o=e.b.a*n.f+a,$b(n.b,new MO(u,o)),h=new Ww(n.g);h.a<h.c.c.length;)t=JF(FR(new MO((s=uG(N3(h),568)).g-e.a.a,s.i-e.c.a),s.a,s.b),vD(HR(D$(ON(s.e)),s.d*s.a,s.c*s.b),-.5)),i=AN(s.e),PT(s.e,YF(t,i))}function SBn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Restoring reversed edges",1),a=new Ww(n.b);a.a<a.c.c.length;)for(o=new Ww(uG(N3(a),30).a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(r=0,c=(i=x4(uG(N3(u),12).g)).length;r<c;++r)oM(gK(oIn(e=i[r],(GYn(),pmt))))&&pqn(e,!1);t.Vg()}function PBn(n,t,e,i){var r,c,a,o,u;for(u=Inn(eUt,zZn,109,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,0,2),a=0,o=(c=Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length;a<o;++a)u[(r=c[a]).g]=Inn(eUt,I0n,28,n.c[r.g],15,1);return jEn(u,n,yRt),jEn(u,n,KRt),MTn(u,n,yRt,t,e,i),MTn(u,n,kRt,t,e,i),MTn(u,n,KRt,t,e,i),MTn(u,n,_Rt,t,e,i),u}function CBn(n,t,e){if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.b,t)){if(cS(uG(cQ(n.b,t),49),e))return-1}else vJ(n.b,t,new ek);if(PV(n.b,e)){if(cS(uG(cQ(n.b,e),49),t))return 1}else vJ(n.b,e,new ek);return 0}function IBn(n){var t,i,r,c,a,o;n.q!=($Pn(),aRt)&&n.q!=cRt&&(c=n.f.n.d+eq(uG(AJ(n.b,(KQn(),yRt)),127))+n.c,t=n.f.n.a+eq(uG(AJ(n.b,KRt),127))+n.c,r=uG(AJ(n.b,kRt),127),o=uG(AJ(n.b,_Rt),127),a=e.Math.max(0,r.n.d-c),a=e.Math.max(a,o.n.d-c),i=e.Math.max(0,r.n.a-t),i=e.Math.max(i,o.n.a-t),r.n.d=a,o.n.d=a,r.n.a=i,o.n.a=i)}function OBn(n,t,e,i){var r,c,a,o,u,s;if(null==e)for(r=uG(n.g,124),o=0;o<n.i;++o)if((a=r[o]).Lk()==t)return Nyn(n,a,i);return PP(),c=uG(t,69).xk()?uG(e,76):R5(t,e),uN(n.e)?(s=!kmn(n,t),i=Nmn(n,c,i),u=t.Jk()?VZ(n,3,t,null,e,Dqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n)),s):VZ(n,1,t,t.ik(),e,-1,s),i?i.nj(u):i=u):i=Nmn(n,c,i),i}function ABn(){this.b=new u8,this.d=new u8,this.e=new u8,this.c=new u8,this.a=new Ym,this.f=new Ym,E0(PNt,new lu,new pu),E0($Nt,new Cu,new Iu),E0(hbt,new Ou,new Au),E0(Sbt,new Lu,new Nu),E0(AKt,new $u,new Du),E0(eut,new mu,new vu),E0(lut,new ku,new yu),E0(cut,new Mu,new Tu),E0(aut,new ju,new Eu),E0(jut,new Su,new Pu)}function LBn(n,t){var e,i,r,c,a;for(n=null==n?IZn:(tJ(n),n),r=0;r<t.length;r++)t[r]=DRn(t[r]);for(e=new QM,a=0,i=0;i<t.length&&-1!=(c=n.indexOf("%s",a));)e.a+=""+r1(null==n?IZn:(tJ(n),n),a,c),QA(e,t[i++]),a=c+2;if(L4(e,n,a,n.length),i<t.length){for(e.a+=" [",QA(e,t[i++]);i<t.length;)e.a+=TZn,QA(e,t[i++]);e.a+="]"}return e.a}function NBn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Ww(t);u.a<u.c.c.length;){for(o=uG(N3(u),12),fbn(n.b,n.d[o.p]),a=0,r=new w7(o.b);l$(r.a)||l$(r.b);)zQ(i=uG(l$(r.a)?N3(r.a):N3(r.b),18))?(c=Yj(n,o==i.c?i.d:i.c))>n.d[o.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c))):++a;for(e+=n.b.d*a;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function $Bn(n){var t,e,i,r,c,a;return c=0,(t=bEn(n)).kk()&&(c|=4),n.Bb&hrt&&(c|=2),F$(n,102)?(r=lMn(e=uG(n,19)),e.Bb&Qtt&&(c|=32),r&&(iQ(K0(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),r.Bb&Qtt&&(c|=64)),e.Bb&P0n&&(c|=frt),c|=w1n):F$(t,469)?c|=512:(i=t.kk())&&1&i.i&&(c|=256),512&n.Bb&&(c|=128),c}function DBn(n,t){var e;return n.f==CBt?(e=sJ(Nen((gAn(),kBt),t)),n.e?4==e&&t!=(m$n(),NBt)&&t!=(m$n(),OBt)&&t!=(m$n(),ABt)&&t!=(m$n(),LBt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(_3(Nen((gAn(),kBt),t)))||n.d.Hc(iVn((gAn(),kBt),n.b,t))))||!(!n.f||!WRn((gAn(),n.f),HJ(Nen(kBt,t))))&&(e=sJ(Nen(kBt,t)),n.e?4==e:2==e)}function xBn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(f=-1,l=0,s=0,h=(u=n).length;s<h;++s){for(a=0,o=(c=u[s]).length;a<o;++a)for(r=c[a],t=new j6(-1==f?n[0]:n[f],uG(oIn(HQ(r),(jYn(),Syt)),284),qjn(r),oM(gK(oIn(HQ(r),Eyt)))),e=0;e<r.j.c.length;e++)for(i=e+1;i<r.j.c.length;i++)Jz(t,uG(zq(r.j,e),12),uG(zq(r.j,i),12))>0&&++l;++f}return l}function RBn(n,t,i,r){var c,a,o,u,s,h,f,l;return s=(o=uG(zDn(i,(XYn(),mDt)),8)).a,f=o.b+n,(c=e.Math.atan2(f,s))<0&&(c+=f7n),(c+=t)>f7n&&(c-=f7n),h=(u=uG(zDn(r,mDt),8)).a,l=u.b+n,(a=e.Math.atan2(l,h))<0&&(a+=f7n),(a+=t)>f7n&&(a-=f7n),YN(),oan(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:c<a?-1:c>a?1:KL(isNaN(c),isNaN(a))}function KBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a<i.c.c.length;)vJ(o,t=uG(N3(i),60),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),60)).i=T0n,a=t.c.Kc();a.Ob();)c=uG(a.Pb(),60),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),60)).c.$b(),t.c=uG(DA(FX(o.f,t)),15);NFn(n)}function FBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a<i.c.c.length;)vJ(o,t=uG(N3(i),86),new Zm);for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((t=uG(N3(r),86)).o=T0n,a=t.f.Kc();a.Ob();)c=uG(a.Pb(),86),uG(DA(FX(o.f,c)),15).Fc(t);for(e=new Ww(n.a.b);e.a<e.c.c.length;)(t=uG(N3(e),86)).f.$b(),t.f=uG(DA(FX(o.f,t)),15);LKn(n)}function _Bn(n,t,e,i){var r,c;for(PEn(n,t,e,i),xb(t,n.j-t.j+e),Rb(t,n.k-t.k+i),c=new Ww(t.f);c.a<c.c.c.length;)switch((r=uG(N3(c),334)).a.g){case 0:wfn(n,t.g+r.b.a,0,t.g+r.c.a,t.i-1);break;case 1:wfn(n,t.g+t.o,t.i+r.b.a,n.o-1,t.i+r.c.a);break;case 2:wfn(n,t.g+r.b.a,t.i+t.p,t.g+r.c.a,n.p-1);break;default:wfn(n,0,t.i+r.b.a,t.g-1,t.i+r.c.a)}}function BBn(n,t){var e,i,r,c,a,o;for(r=new Zm,t.b.c.length=0,i=uG(l8(f3(new fX(null,new h3(new Lw(n.a.b),1))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();i.Ob();)if(e=uG(i.Pb(),17),0!=(c=W6(n.a,e)).b)for(a=new bQ(t),mv(r.c,a),a.p=e.a,o=Fkn(c,0);o.b!=o.d.c;)a2(uG(I6(o),10),a);Ohn(t.b,r)}function HBn(n,t,e,i,r){var c,a;try{if(t>=n.o)throw hv(new Ik);a=t>>5,c=Nz(1,pz(Nz(31&t,1))),n.n[e][a]=r?S3(n.n[e][a],c):E3(n.n[e][a],CG(c)),c=Nz(c,1),n.n[e][a]=i?S3(n.n[e][a],c):E3(n.n[e][a],CG(c))}catch(o){throw F$(o=Ehn(o),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(o)}}function UBn(n,t,e,i){var r,c,a,o,u,s,h,f;for(f=new Hj(new ep(n)),o=0,u=(a=Uhn(cT(pbt,1),e6n,10,0,[t,e])).length;o<u;++o)for(h=Vwn(a[o],i).Kc();h.Ob();)for(c=new w7((s=uG(h.Pb(),12)).b);l$(c.a)||l$(c.b);)v9(r=uG(l$(c.a)?N3(c.a):N3(c.b),18))||(f.a.zc(s,(qx(),tot)),zQ(r)&&_V(f,s==r.c?r.d:r.c));return WW(f),new Z_(f)}function GBn(n,t,i,r){var c,a;t&&(c=uM(pK(oIn(t,(OQn(),FPt))))+r,a=i+uM(pK(oIn(t,NPt)))/2,kfn(t,GPt,xwn(pz(Bsn(e.Math.round(c))))),kfn(t,qPt,xwn(pz(Bsn(e.Math.round(a))))),0==t.d.b||GBn(n,uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),40),i+uM(pK(oIn(t,NPt)))+n.b,r+uM(pK(oIn(t,xPt)))),null!=oIn(t,HPt)&&GBn(n,uG(oIn(t,HPt),40),i,r))}function qBn(n,t){var i,r,c,a,o,u,s,h,f,l,b;for(c=2*uM(pK(oIn(s=HQ(t.a),(jYn(),vTt)))),f=uM(pK(oIn(s,STt))),h=e.Math.max(c,f),a=Inn(eUt,I0n,28,t.f-t.c+1,15,1),r=-h,i=0,u=t.b.Kc();u.Ob();)o=uG(u.Pb(),10),r+=n.a[o.c.p]+h,a[i++]=r;for(r+=n.a[t.a.c.p]+h,a[i++]=r,b=new Ww(t.e);b.a<b.c.c.length;)l=uG(N3(b),10),r+=n.a[l.c.p]+h,a[i++]=r;return a}function XBn(n,t){var e,i,r,c;if(0!=(c=uG(zDn(n,(XYn(),gDt)),64).g-uG(zDn(t,gDt),64).g))return c;if(e=uG(zDn(n,fDt),17),i=uG(zDn(t,fDt),17),e&&i&&0!=(r=e.a-i.a))return r;switch(uG(zDn(n,gDt),64).g){case 1:return ugn(n.i,t.i);case 2:return ugn(n.j,t.j);case 3:return ugn(t.i,n.i);case 4:return ugn(t.j,n.j);default:throw hv(new kM(n6n))}}function zBn(n){var t,e,i;return 64&n.Db?rOn(n):(t=new lx(_tt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VBn(n){var t,e,i;return 64&n.Db?rOn(n):(t=new lx(Btt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function WBn(n,t){var e,i,r,c,a;for(t==(Sln(),rEt)&&_An(uG(Y9(n.a,(gPn(),wdt)),15)),r=uG(Y9(n.a,(gPn(),wdt)),15).Kc();r.Ob();)switch(i=uG(r.Pb(),105),e=uG(zq(i.j,0),113).d.j,f$(c=new Z_(i.j),new Fr),t.g){case 2:TCn(n,c,e,(gon(),Edt),1);break;case 1:case 0:TCn(n,new C2(c,0,a=IRn(c)),e,(gon(),Edt),0),TCn(n,new C2(c,a,c.c.length),e,Edt,1)}}function QBn(n,t){var e,i,r,c,a,o;if(null==t||0==t.length)return null;if(!(r=uG(U1(n.a,t),143))){for(i=new _w(new Fw(n.b).a.vc().Kc());i.a.Ob();)if(c=uG(i.a.Pb(),44),a=(e=uG(c.md(),143)).c,o=t.length,m_(a.substr(a.length-o,o),t)&&(t.length==a.length||46==VJ(a,a.length-t.length-1))){if(r)return null;r=e}r&&r2(n.a,t,r)}return r}function JBn(n,t){var e,i,r;return e=new Bn,(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())<(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?-1:i==r?0:1}function YBn(n){var t,e,i;vR(n,(jYn(),PMt))&&((i=uG(oIn(n,PMt),21)).dc()||(e=new nB(t=uG(Mj(eRt),9),uG(MF(t,t.length),9),0),i.Hc((VDn(),Gxt))?Mon(e,Gxt):Mon(e,qxt),i.Hc(Hxt)||Mon(e,Hxt),i.Hc(Bxt)?Mon(e,Vxt):i.Hc(_xt)?Mon(e,zxt):i.Hc(Uxt)&&Mon(e,Xxt),i.Hc(Vxt)?Mon(e,Bxt):i.Hc(zxt)?Mon(e,_xt):i.Hc(Xxt)&&Mon(e,Uxt),kfn(n,PMt,e)))}function ZBn(n){var t,e,i,r,c,a,o;for(r=uG(oIn(n,(GYn(),zpt)),10),u3(0,(i=n.j).c.length),e=uG(i.c[0],12),a=new Ww(r.j);a.a<a.c.c.length;)if(xA(c=uG(N3(a),12))===xA(oIn(e,rmt))){c.j==(KQn(),yRt)&&n.p>r.p?(NLn(c,KRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=o-t)):c.j==KRt&&r.p>n.p&&(NLn(c,yRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=-(o-t)));break}return r}function nHn(n,t,e,i,r){var c,a,o,u,s,h,f;if(!(F$(t,207)||F$(t,366)||F$(t,193)))throw hv(new vM("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,u=t.i+i-a,h=t.j+r-a,s=u+t.g+n.a,f=h+t.f+n.a,aq(c=new Uk,new MO(u,h)),aq(c,new MO(u,f)),aq(c,new MO(s,f)),aq(c,new MO(s,h)),zsn(o=new pDn(c),t),e&&vJ(n.b,t,o),o}function tHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function eHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a<s.c.c.length;)for(JF((u=uG(N3(s),10)).n,c),h=new Ww(u.j);h.a<h.c.c.length;)for(r=new Ww(uG(N3(h),12).g);r.a<r.c.c.length;)for(Xun((i=uG(N3(r),18)).a,c),(a=uG(oIn(i,(jYn(),bMt)),75))&&Xun(a,c),o=new Ww(i.b);o.a<o.c.c.length;)JF(uG(N3(o),72).n,c)}function iHn(n){if(0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i)throw hv(new EM("Edges must have a source."));if(0==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i)throw hv(new EM("Edges must have a target."));if(!n.b&&(n.b=new f_(cFt,n,4,7)),!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)))throw hv(new EM("Hyperedges are not supported."))}function rHn(n,t){var e,i,r,c,a,o,u,s,h,f;for(f=0,A6(c=new ND,t);c.b!=c.c;)for(u=uG(xV(c),219),s=0,h=uG(oIn(t.j,(jYn(),Syt)),284),a=uM(pK(oIn(t.j,yyt))),o=uM(pK(oIn(t.j,Myt))),h!=(yvn(),Fjt)&&(s+=a*mxn(u.e,h),s+=o*xBn(u.e)),f+=XTn(u.d,u.e)+s,r=new Ww(u.b);r.a<r.c.c.length;)i=uG(N3(r),36),(e=uG(zq(n.b,i.p),219)).s||(f+=BAn(n,e));return f}function cHn(){var n;for(cHn=E,xot=new Z5(1,1),Kot=new Z5(1,10),_ot=new Z5(0,0),Dot=new Z5(-1,1),Rot=Uhn(cT(Xot,1),zZn,92,0,[_ot,xot,new Z5(1,2),new Z5(1,3),new Z5(1,4),new Z5(1,5),new Z5(1,6),new Z5(1,7),new Z5(1,8),new Z5(1,9),Kot]),Fot=Inn(Xot,zZn,92,32,0,1),n=0;n<Fot.length;n++)Fot[n]=BA(Nz(1,n),0)?Rmn(Nz(1,n)):hW(Rmn(Men(Nz(1,n))))}function aHn(n,t,e,i,r,c,a){if(n.c=i.Lf().a,n.d=i.Lf().b,r&&(n.c+=r.Lf().a,n.d+=r.Lf().b),n.b=t.Mf().a,n.a=t.Mf().b,r)switch(r.ag().g){case 0:case 2:n.c+=r.Mf().a+a+c.a+a;break;case 4:n.c-=a+c.a+a+t.Mf().a;break;case 1:n.c+=r.Mf().a+a,n.d-=a+c.b+a+t.Mf().b;break;case 3:n.c+=r.Mf().a+a,n.d+=r.Mf().b+a+c.b+a}else e?n.c-=a+t.Mf().a:n.c+=i.Mf().a+a}function oHn(n,t){var e,i;for(this.b=new Zm,this.e=new Zm,this.a=n,this.d=t,Syn(this),Hmn(this),this.b.dc()?this.c=n.c.p:this.c=uG(this.b.Xb(0),10).c.p,0==this.e.c.length?this.f=n.c.p:this.f=uG(zq(this.e,this.e.c.length-1),10).c.p,i=uG(oIn(n,(GYn(),gmt)),15).Kc();i.Ob();)if(vR(e=uG(i.Pb(),72),(jYn(),Gyt))){this.d=uG(oIn(e,Gyt),232);break}}function uHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.e,t),49),a=uG(cQ(n.e,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.e,s),49),t),Qon(uG(cQ(n.e,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function sHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.b,t),49),a=uG(cQ(n.b,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),10),i.a.zc(s,i),FV(uG(cQ(n.b,s),49),t),Qon(uG(cQ(n.b,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function hHn(n,t,e){var i,r,c,a,o,u,s,h;for(i=uG(cQ(n.a,t),49),c=uG(cQ(n.a,e),49),r=uG(cQ(n.d,t),49),a=uG(cQ(n.d,e),49),i.a.zc(e,i),a.a.zc(t,a),h=c.a.ec().Kc();h.Ob();)s=uG(h.Pb(),12),i.a.zc(s,i),FV(uG(cQ(n.d,s),49),t),Qon(uG(cQ(n.d,s),49),r);for(u=r.a.ec().Kc();u.Ob();)o=uG(u.Pb(),12),a.a.zc(o,a),FV(uG(cQ(n.a,o),49),e),Qon(uG(cQ(n.a,o),49),c)}function fHn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w;if(c=e,e<i)for(b=new nhn(n.p),w=new nhn(n.p),Qon(b.e,n.e),b.q=n.q,b.r=w,eQ(b),Qon(w.j,n.j),w.r=b,eQ(w),f=uG((l=new WO(b,w)).a,118),h=uG(l.b,118),u3(c,t.c.length),a=j_n(n,f,h,r=uG(t.c[c],339)),s=e+1;s<=i;s++)u3(s,t.c.length),jyn(o=uG(t.c[s],339),u=j_n(n,f,h,o),r,a)&&(r=o,a=u,c=s);return c}function lHn(n,t,e,i){var r,c,a,o,u,s,h;for(ycn(a=uG(zrn(t,0),27),0),Mcn(a,0),mv((u=new Zm).c,a),o=a,c=new jq(n.a,a.g,a.f,(_Rn(),FAt)),s=1;s<t.i;s++)ycn(h=uG(zrn(t,s),27),(r=jzn(n,lXn(n,xAt,h,o,c,u,e),lXn(n,DAt,h,o,c,u,e),lXn(n,KAt,h,o,c,u,e),lXn(n,RAt,h,o,c,u,e),h,o,i)).d),Mcn(h,r.e),ow(r,FAt),c=r,o=h,mv(u.c,h);return c}function bHn(n,t,e){var i,r,c,a,o,u,s;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),a=p6(s,vet),_Ln((i=new YO(n,u)).a,i.b,a),o=p6(s,ket),BLn((r=new ZO(n,u)).a,r.b,o),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),AJn(n,s,u),qfn(n,s,u)}function wHn(n,t){var i,r,c,a,o,u,s;for(c=Inn(YHt,W1n,28,n.e.a.c.length,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)c[(a=uG(N3(o),125)).d]+=a.b.a.c.length;for(u=oG(t);0!=u.b;)for(r=jtn(new Ww((a=uG(0==u.b?null:(MK(0!=u.b),Lrn(u,u.a.a)),125)).g.a));r.Ob();)(s=(i=uG(r.Pb(),218)).e).e=e.Math.max(s.e,a.e+i.a),--c[s.d],0==c[s.d]&&s8(u,s,u.c.b,u.c)}function dHn(n){var t,i,r,c,a,o,u,s,h,f,l;for(i=j1n,c=vZn,u=new Ww(n.e.a);u.a<u.c.c.length;)a=uG(N3(u),125),c=e.Math.min(c,a.e),i=e.Math.max(i,a.e);for(t=Inn(YHt,W1n,28,i-c+1,15,1),o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).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 gHn(n,t){var e,i,r,c,a,o;if(t.Ug("Edge routing",1),(r=uG(oIn(n,(QGn(),uCt)),392))==(Pln(),dPt))stn(n);else if(r==wPt)for(uG(yx(lln(JJ(new fX(null,new h3(n.b,16)),new Pa))),40),c=uM(pK(oIn(n,jCt))),a=uM(pK(oIn(n,oCt))),$Jn(n,o=uG(oIn(n,cCt),88),c),_Yn(n,o,c,a),qYn(n,o,c,a),i=Fkn(n.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).a.b<2&&hNn(e);t.Vg()}function pHn(n){switch(n.d){case 9:case 8:return!0;case 3:case 5:case 4:case 6:return!1;case 7:return uG(AFn(n),17).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 _A(n.k,n.f);case 3:case 4:return n.j==n.e;default:return null==n.n?null==n.g:udn(n.n,n.g)}default:return!1}}function mHn(n,t){var e,i,r;switch(t.Ug("Breaking Point Insertion",1),i=new dDn(n),uG(oIn(n,(jYn(),BTt)),351).g){case 2:r=new kc;break;case 0:r=new hc;break;default:r=new yc}if(e=r.og(n,i),oM(gK(oIn(n,UTt)))&&(e=Jzn(n,e)),!r.pg()&&vR(n,zTt))switch(uG(oIn(n,zTt),352).g){case 2:e=KLn(i,e);break;case 1:e=pPn(i,e)}e.dc()||HJn(n,e),t.Vg()}function vHn(n,t,e){var i,r,c,a,o,u,s,h,f;for(c=new R7(t.c.length),s=new Ww(t);s.a<s.c.c.length;)a=uG(N3(s),10),kD(c,n.b[a.c.p][a.p]);for(Uzn(n,c,e),f=null;f=hWn(c);)lqn(n,uG(f.a,239),uG(f.b,239),c);for(t.c.length=0,r=new Ww(c);r.a<r.c.c.length;)for(u=0,h=(o=(i=uG(N3(r),239)).d).length;u<h;++u)a=o[u],mv(t.c,a),n.a[a.c.p][a.p].a=oD(i.g,i.d[0]).a}function kHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Ttt),"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 Ku))),U4(n,Ttt,K3n,Pxt),U4(n,Ttt,b9n,Jkn(Cxt)),U4(n,Ttt,Qnt,Jkn(Mxt)),U4(n,Ttt,p4n,Jkn(Txt)),U4(n,Ttt,x4n,Jkn(Ext)),U4(n,Ttt,d4n,Jkn(jxt))}function yHn(n,t,e){var i,r,c,a;if(i=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),a=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),(c=lun(n,t,i))&&a==c.f&&xQ(e,c.i))return e;if(bun(n,e,a))throw hv(new vM("value already present: "+e));return r=new fJ(t,i,e,a),c?(yRn(n,c),HLn(n,r,c),c.e=null,c.c=null,c.i):(HLn(n,r,null),SEn(n),null)}function MHn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;s=e.a.c,a=e.a.c+e.a.b,l=(c=uG(cQ(e.c,t),468)).f,b=c.a,o=c.b?new MO(a,l):new MO(s,l),h=c.c?new MO(s,b):new MO(a,b),r=s,e.p||(r+=n.c),u=new MO(r+=e.F+e.v*n.b,l),f=new MO(r,b),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[o,u])),e.d.a.gc()>1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function THn(){THn=E,$jt=new dI(q4n,0),Ijt=new dI("NIKOLOV",1),Ljt=new dI("NIKOLOV_PIXEL",2),Ojt=new dI("NIKOLOV_IMPROVED",3),Ajt=new dI("NIKOLOV_IMPROVED_PIXEL",4),Sjt=new dI("DUMMYNODE_PERCENTAGE",5),Njt=new dI("NODECOUNT_PERCENTAGE",6),Djt=new dI("NO_BOUNDARY",7),Pjt=new dI("MODEL_ORDER_LEFT_TO_RIGHT",8),Cjt=new dI("MODEL_ORDER_RIGHT_TO_LEFT",9)}function jHn(n){var t,e,i,r,c;for(i=n.length,t=new VM,c=0;c<i;)if(9!=(e=VJ(n,c++))&&10!=e&&12!=e&&13!=e&&32!=e)if(35!=e)92==e&&c<i?35==(s3(c,n.length),r=n.charCodeAt(c))||9==r||10==r||12==r||13==r||32==r?(TQ(t,r&D1n),++c):(t.a+="\\",TQ(t,r&D1n),++c):TQ(t,e&D1n);else for(;c<i&&13!=(e=VJ(n,c++))&&10!=e;);return t.a}function EHn(){EHn=E,wIt=new mL(M7n,(qx(),!1)),kIt=new mL(T7n,xwn(0)),yIt=new mL(j7n,0),MIt=new mL(E7n,!1),vbn(),gIt=new mL(S7n,pIt=sIt),xwn(0),dIt=new mL(P7n,xwn(1)),esn(),SIt=new mL(C7n,PIt=iOt),Ptn(),CIt=new mL(I7n,IIt=aIt),dTn(),mIt=new mL(O7n,vIt=ZIt),EIt=new mL(A7n,0),TIt=new mL(L7n,!1),jIt=new mL(N7n,!1)}function SHn(n,t){var e,i,r;for(i=new Ww(t);i.a<i.c.c.length;)if(e=uG(N3(i),27),UNn(n.a,e,e),UNn(n.b,e,e),0!=(r=GFn(e)).c.length)for(n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27));0!=Jhn(r).c.length;)r=Jhn(r),n.d&&n.d.Gg(r),UNn(n.a,e,(u3(0,r.c.length),uG(r.c[0],27))),UNn(n.b,e,uG(zq(r,r.c.length-1),27))}function PHn(n,t,e){var i,r,c,a,o,u;if(t){if(e<=-1){if(F$(i=ern(t.Dh(),-1-e),102))return uG(i,19);for(o=0,u=(a=uG(t.Mh(i),160)).gc();o<u;++o)if(xA(a.Ul(o))===xA(n)&&F$(r=a.Tl(o),102)&&(c=uG(r,19)).Bb&Qtt)return c;throw hv(new kM("The containment feature could not be located"))}return lMn(uG(ern(n.Dh(),e),19))}return null}function CHn(n){var t,e,i,r,c,a,o,u,s,h;for(e=0,o=new Ww(n.d);o.a<o.c.c.length;)(a=uG(N3(o),105)).i&&(a.i.c=e++);for(t=Jq(ZHt,[zZn,B2n],[183,28],16,[e,e],2),h=n.d,r=0;r<h.c.length;r++)if(u3(r,h.c.length),(u=uG(h.c[r],105)).i)for(c=r+1;c<h.c.length;c++)u3(c,h.c.length),(s=uG(h.c[c],105)).i&&(i=HCn(u,s),t[u.i.c][s.i.c]=i,t[s.i.c][u.i.c]=i);return t}function IHn(){IHn=E,_Ot=new mL(q7n,(qx(),!1)),xwn(-1),NOt=new mL(X7n,xwn(-1)),xwn(-1),$Ot=new mL(z7n,xwn(-1)),DOt=new mL(V7n,!1),a9(),qOt=new mL(W7n,XOt=yAt),zOt=new mL(Q7n,-1),Bgn(),UOt=new mL(J7n,GOt=OOt),HOt=new mL(Y7n,!0),den(),KOt=new mL(Z7n,FOt=EAt),ROt=new mL(nnt,!1),xwn(1),xOt=new mL(tnt,xwn(1)),BOt=new Cm(ent)}function OHn(){OHn=E,fPt=new VI("ROOT_PROC",0),rPt=new VI("FAN_PROC",1),uPt=new VI("LEVEL_PROC",2),sPt=new VI("NEIGHBORS_PROC",3),oPt=new VI("LEVEL_HEIGHT",4),iPt=new VI("DIRECTION_PROC",5),hPt=new VI("NODE_POSITION_PROC",6),tPt=new VI("COMPACTION_PROC",7),aPt=new VI("LEVEL_COORDS",8),cPt=new VI("GRAPH_BOUNDS_PROC",9),ePt=new VI("DETREEIFYING_PROC",10)}function AHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,r=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=AHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(r||(r=!0,o=new $X(o)),o.Gc(e)):o=e);return(i=ALn(n,t)).dc()?o||(hZ(),hZ(),zot):o?(r||(o=new $X(o)),o.Gc(i),o):i}function LHn(n,t){var e,i,r,c,a,o,u,s;for(o=null,i=!1,c=0,u=z5((s=n1(t)).a).i;c<u;++c)(e=LHn(n,uG(yVn(s,c,F$(a=uG(zrn(z5(s.a),c),89).c,90)?uG(a,29):(YYn(),x_t)),29))).dc()||(o?(i||(i=!0,o=new $X(o)),o.Gc(e)):o=e);return(r=n$n(n,t)).dc()?o||(hZ(),hZ(),zot):o?(i||(o=new $X(o)),o.Gc(r),o):r}function NHn(n,t,e){var i,r,c,a,o,u;if(F$(t,76))return Nyn(n,t,e);for(o=null,c=null,i=uG(n.g,124),a=0;a<n.i;++a)if(udn(t,(r=i[a]).md())&&F$(c=r.Lk(),102)&&uG(c,19).Bb&Qtt){o=r;break}return o&&(uN(n.e)&&(u=c.Jk()?VZ(n,4,c,t,null,Dqn(n,c,t,F$(c,102)&&!!(uG(c,19).Bb&P0n)),!0):VZ(n,c.tk()?2:1,c,t,c.ik(),-1,!0),e?e.nj(u):e=u),e=NHn(n,o,e)),e}function $Hn(n,t,e){var i,r,c,a;if(a=VKn(n.e.Dh(),t),i=uG(n.g,124),PP(),uG(t,69).xk()){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(r,e))return e_n(n,c),!0}else if(null!=e){for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&udn(e,r.md()))return e_n(n,c),!0}else for(c=0;c<n.i;++c)if(r=i[c],a.am(r.Lk())&&null==r.md())return e_n(n,c),!0;return!1}function DHn(n,t){var e,i,r,c;if(t.Ug("Node and Port Label Placement and Node Sizing",1),zN((zS(),new mY(n,!0,!0,new We))),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt)))for(i=(r=uG(oIn(n,(jYn(),nTt)),21)).Hc((eNn(),dRt)),c=oM(gK(oIn(n,tTt))),e=new Ww(n.b);e.a<e.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(e),30).a,16)),new Qe),new KB(r,i,c));t.Vg()}function xHn(n,t){var e,i,r,c,a;for(null==n.c||n.c.length<t.c.length?n.c=Inn(ZHt,B2n,28,t.c.length,16,1):AM(n.c),n.a=new Zm,i=0,a=new Ww(t);a.a<a.c.c.length;)(r=uG(N3(a),10)).p=i++;for(e=new lS,c=new Ww(t);c.a<c.c.c.length;)r=uG(N3(c),10),n.c[r.p]||(nNn(n,r),0==e.b||(MK(0!=e.b),uG(e.a.a.c,15)).gc()<n.a.c.length?aL(e,n.a):cL(e,n.a),n.a=new Zm);return e}function RHn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,Cnt),"ELK SPOrE Overlap Removal"),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Zo))),U4(n,Cnt,gnt,Jkn(ULt)),U4(n,Cnt,K3n,BLt),U4(n,Cnt,o4n,8),U4(n,Cnt,ynt,Jkn(HLt)),U4(n,Cnt,jnt,Jkn(FLt)),U4(n,Cnt,Ent,Jkn(_Lt)),U4(n,Cnt,q8n,(qx(),!1))}function KHn(n,t){var e,i,r,c,a,o,u;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),fct)))){for(i=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)m_(r=c[a],"##other")?kD(i,"!##"+jz(n,Hrn(t.qk()))):m_(r,"##local")?i.c.push(null):m_(r,sct)?kD(i,jz(n,Hrn(t.qk()))):mv(i.c,r);return i}return hZ(),hZ(),zot}function FHn(n,t,e,i){var r,c,a,o,u,s,h,f;for(a=KR(t.c,e,i),h=new Ww(t.a);h.a<h.c.c.length;){for(JF((s=uG(N3(h),10)).n,a),f=new Ww(s.j);f.a<f.c.c.length;)for(c=new Ww(uG(N3(f),12).g);c.a<c.c.c.length;)for(Xun((r=uG(N3(c),18)).a,a),(o=uG(oIn(r,(jYn(),bMt)),75))&&Xun(o,a),u=new Ww(r.b);u.a<u.c.c.length;)JF(uG(N3(u),72).n,a);kD(n.a,s),s.a=n}}function _Hn(n){var t,e,i,r,c;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));for(n.c==(xdn(),ZDt)&&qWn(n,JDt),t=new Ww(n.a.a);t.a<t.c.c.length;)uG(N3(t),194).e=0;for(r=new Ww(n.a.b);r.a<r.c.c.length;)for((i=uG(N3(r),86)).o=T0n,e=i.f.Kc();e.Ob();)++uG(e.Pb(),86).d.e;for(sQn(n),c=new Ww(n.a.b);c.a<c.c.c.length;)uG(N3(c),86).k=!0;return n}function BHn(n,t){var e,i,r,c,a,o,u,s;for(o=new cAn(n),s8(e=new lS,t,e.c.b,e.c);0!=e.b;){for((i=uG(0==e.b?null:(MK(0!=e.b),Lrn(e,e.a.a)),113)).d.p=1,a=new Ww(i.e);a.a<a.c.c.length;)uCn(o,r=uG(N3(a),340)),0==(s=r.d).d.p&&s8(e,s,e.c.b,e.c);for(c=new Ww(i.b);c.a<c.c.c.length;)uCn(o,r=uG(N3(c),340)),0==(u=r.c).d.p&&s8(e,u,e.c.b,e.c)}return o}function HHn(n){var t,e,i,r,c;if(1!=(i=uM(pK(zDn(n,(XYn(),MDt))))))for(vN(n,i*n.g,i*n.f),e=EL(ZU((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),new Vu)),c=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.c&&(n.c=new fV(wFt,n,9,9)),n.c),e])));hDn(c);)(r=uG(N9(c),422)).qh(i*r.nh(),i*r.oh()),r.ph(i*r.mh(),i*r.lh()),(t=uG(r.of(oDt),8))&&(t.a*=i,t.b*=i)}function UHn(n,t,e){var i,r,c,a,o;if(PP(),a=uG(t,69).xk(),EFn(n.e,t)){if(t.Si()&&aqn(n,t,e,F$(t,102)&&!!(uG(t,19).Bb&P0n)))return!1}else for(o=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c<n.i;++c)if(r=i[c],o.am(r.Lk()))return!(a?udn(r,e):null==e?null==r.md():udn(e,r.md()))&&(uG(Uyn(n,c,a?uG(e,76):R5(t,e)),76),!0);return ttn(n,a?uG(e,76):R5(t,e))}function GHn(n,t,e,i,r){var c,a,o,u,s,h;for(c=new Ww(n.b);c.a<c.c.c.length;)for(s=0,h=(u=D4(uG(N3(c),30).a)).length;s<h;++s)switch(uG(oIn(o=u[s],(jYn(),gMt)),171).g){case 1:fFn(o),a2(o,t),Vyn(o,!0,i);break;case 3:HKn(o),a2(o,e),Vyn(o,!1,r)}for(a=new N4(n.b,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a)}function qHn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=b=t.length,s3(0,t.length),45==t.charCodeAt(0)?(f=-1,l=1,--b):(f=1,l=0),r=b/(c=(pXn(),Uot)[10])|0,0!=(g=b%c)&&++r,o=Inn(YHt,W1n,28,r,15,1),e=Hot[8],a=0,w=l+(0==g?c:g),d=l;d<u;w=(d=w)+c)i=mUn((Knn(d,w,t.length),t.substr(d,w-d)),j1n,vZn),b_n(),s=tMn(o,o,a,e),s+=vmn(o,a,i),o[a++]=s;h=a,n.e=f,n.d=h,n.a=o,K4(n)}function XHn(n,t){var e,i,r;return e=new Xn,(i=1==(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())?1:0)<(r=1==(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?1:0)?-1:i==r?0:1}function zHn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(r=oM(gK(oIn(o=n.i,(jYn(),sMt)))),h=0,i=0,s=new Ww(n.g);s.a<s.c.c.length;)c=(a=v9(u=uG(N3(s),18)))&&r&&oM(gK(oIn(u,hMt))),l=u.d.i,a&&c?++i:a&&!c?++h:HQ(l).e==o?++i:++h;for(e=new Ww(n.e);e.a<e.c.c.length;)c=(a=v9(t=uG(N3(e),18)))&&r&&oM(gK(oIn(t,hMt))),f=t.c.i,a&&c?++h:a&&!c?++i:HQ(f).e==o?++h:++i;return h-i}function VHn(n,t,e,i){this.e=n,this.k=uG(oIn(n,(GYn(),kmt)),312),this.g=Inn(pbt,e6n,10,t,0,1),this.b=Inn(fot,zZn,345,t,7,1),this.a=Inn(pbt,e6n,10,t,0,1),this.d=Inn(fot,zZn,345,t,7,1),this.j=Inn(pbt,e6n,10,t,0,1),this.i=Inn(fot,zZn,345,t,7,1),this.p=Inn(fot,zZn,345,t,7,1),this.n=Inn(cot,zZn,485,t,8,1),FP(this.n,(qx(),!1)),this.f=Inn(cot,zZn,485,t,8,1),FP(this.f,!0),this.o=e,this.c=i}function WHn(n,t){var e,i,r;if(!t.dc())if(uG(t.Xb(0),293).d==(vAn(),Udt))dEn(n,t);else for(i=t.Kc();i.Ob();){switch((e=uG(i.Pb(),293)).d.g){case 5:YOn(n,e,gpn(n,e));break;case 0:YOn(n,e,(r=(e.f-e.c+1-1)/2|0,e.c+r));break;case 4:YOn(n,e,Ain(n,e));break;case 2:fmn(e),YOn(n,e,dPn(e)?e.c:e.f);break;case 1:fmn(e),YOn(n,e,dPn(e)?e.f:e.c)}WCn(e.a)}}function QHn(n,t,e,i){var r,c,a;return a=new KE(t,e),n.a?i?(++(r=uG(nJ(uG(cQ(n.b,t),260)),260)).a,a.d=i.d,a.e=i.e,a.b=i,a.c=i,i.e?i.e.c=a:r.b=a,i.d?i.d.b=a:n.a=a,i.d=a,i.e=a):(uG(nJ(n.e),511).b=a,a.d=n.e,n.e=a,(r=uG(cQ(n.b,t),260))?(++r.a,(c=r.c).c=a,a.e=c,r.c=a):(vJ(n.b,t,r=new TZ(a)),++n.c)):(n.a=n.e=a,vJ(n.b,t,new TZ(a)),++n.c),++n.d,a}function JHn(n,t){var e,i,r,c;if(t.Ug("Network simplex",1),n.e.a.c.length<1)t.Vg();else{for(r=new Ww(n.e.a);r.a<r.c.c.length;)uG(N3(r),125).e=0;for((c=n.e.a.c.length>=40)&&IGn(n),izn(n),mFn(n),e=ign(n),i=0;e&&i<n.f;)uUn(n,e,WDn(n,e)),e=ign(n),++i;c&&FPn(n),n.a?oxn(n,dHn(n)):dHn(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,t.Vg()}}function YHn(n,t){var e,i,r,c,a;if(!t.e){for(t.e=!0,i=t.d.a.ec().Kc();i.Ob();)e=uG(i.Pb(),18),t.o&&t.d.a.gc()<=1?(a=new MO((c=t.a.c)+(t.a.c+t.a.b-c)/2,t.b),aq(uG(t.d.a.ec().Kc().Pb(),18).a,a)):(r=uG(cQ(t.c,e),468)).b||r.c?MHn(n,e,t):n.d==(kbn(),fEt)&&(r.d||r.e)&&I$n(n,t)&&t.d.a.gc()<=1?NWn(e,t):I_n(n,e,t);t.k&&z8(t.d,new je)}}function ZHn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g,p,m,v;for(u=(r+c)/2+a,g=i*e.Math.cos(u),p=i*e.Math.sin(u),m=g-t.g/2,v=p-t.f/2,ycn(t,m),Mcn(t,v),l=n.a.Eg(t),(d=2*e.Math.acos(i/i+n.c))<c-r?(b=d/l,o=(r+c-d)/2):(b=(c-r)/l,o=r),w=GFn(t),n.e&&(n.e.Fg(n.d),n.e.Gg(w)),h=new Ww(w);h.a<h.c.c.length;)s=uG(N3(h),27),f=n.a.Eg(s),ZHn(n,s,i+n.c,o,o+b*f,a),o+=b*f}function nUn(n,t,e){var i;switch(i=e.q.getMonth(),t){case 5:JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[i]);break;case 4:JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[i]);break;case 3:JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[i]);break;default:Fen(n,i+1,t)}}function tUn(n,t,e,i){var r,c,a,o,u,s,h,f;for(YF(o=new MO(e,i),uG(oIn(t,(mon(),Vft)),8)),f=new Ww(t.e);f.a<f.c.c.length;)JF((h=uG(N3(f),153)).d,o),kD(n.e,h);for(a=new Ww(t.c);a.a<a.c.c.length;){for(r=new Ww((c=uG(N3(a),290)).a);r.a<r.c.c.length;)JF(uG(N3(r),250).d,o);kD(n.c,c)}for(s=new Ww(t.d);s.a<s.c.c.length;)JF((u=uG(N3(s),454)).d,o),kD(n.d,u)}function eUn(n,t){var e,i,r,c,a,o,u,s;for(u=new Ww(t.j);u.a<u.c.c.length;)for(r=new w7((o=uG(N3(u),12)).b);l$(r.a)||l$(r.b);)t!=(c=(e=(i=uG(l$(r.a)?N3(r.a):N3(r.b),18)).c==o?i.d:i.c).i)&&((s=uG(oIn(i,(jYn(),aTt)),17).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&&aq(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&aq(n.e,c))))}function iUn(n,t,e,i){var r,c,a,o,u,s,h;for(YF(u=new MO(e,i),uG(oIn(t,(OQn(),kPt)),8)),h=Fkn(t.b,0);h.b!=h.d.c;)JF((s=uG(I6(h),40)).e,u),aq(n.b,s);for(o=uG(l8(_0(new fX(null,new h3(t.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();o.Ob();){for(c=Fkn((a=uG(o.Pb(),65)).a,0);c.b!=c.d.c;)(r=uG(I6(c),8)).a+=u.a,r.b+=u.b;aq(n.a,a)}}function rUn(n,t){var e,i,r,c;if(0<(F$(n,16)?uG(n,16).gc():x5(n.Kc()))){if(1<(r=t)){for(--r,c=new Ea,i=n.Kc();i.Ob();)e=uG(i.Pb(),40),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));return rUn(c,r)}if(r<0){for(c=new Sa,i=n.Kc();i.Ob();)e=uG(i.Pb(),40),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));if(0<(F$(c,16)?uG(c,16).gc():x5(c.Kc())))return rUn(c,r)}}return uG(B$(n.Kc()),40)}function cUn(n,t,e){var i,r,c,a;for(e.Ug("Processor order nodes",2),n.b=uM(pK(oIn(t,(QGn(),ECt)))),n.a=uG(oIn(t,cCt),88),n.a==(xdn(),ZDt)&&(n.a=QDt,kfn(t,cCt,n.a)),r=new lS,a=Fkn(t.b,0);a.b!=a.d.c;)oM(gK(oIn(c=uG(I6(a),40),(OQn(),UPt))))&&s8(r,c,r.c.b,r.c);MK(0!=r.b),ezn(n,i=uG(r.a.a.c,40)),e.fh(1),GBn(n,i,0-uM(pK(oIn(i,(OQn(),NPt))))/2,0),e.fh(1),e.Vg()}function aUn(){aUn=E,eKt=new FO("DEFAULT_MINIMUM_SIZE",0),rKt=new FO("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),tKt=new FO("COMPUTE_PADDING",2),cKt=new FO("OUTSIDE_NODE_LABELS_OVERHANG",3),aKt=new FO("PORTS_OVERHANG",4),uKt=new FO("UNIFORM_PORT_SPACING",5),oKt=new FO("SPACE_EFFICIENT_PORT_LABELS",6),iKt=new FO("FORCE_TABULAR_NODE_LABELS",7),nKt=new FO("ASYMMETRICAL",8)}function oUn(n,t){var e,i,r,c,a,o,u,s;if(t){if(e=(c=t.Dh())?Hrn(c).wi().si(c):null){for(Akn(n,t,e),u=0,s=(null==(r=t.Dh()).i&&eqn(r),r.i).length;u<s;++u)null==r.i&&eqn(r),i=r.i,(o=u>=0&&u<i.length?i[u]:null).rk()&&!o.sk()&&(F$(o,331)?$yn(n,uG(o,35),t,e):(a=uG(o,19)).Bb&Qtt&&XSn(n,a,t,e));t.Vh()&&uG(e,54).ei(uG(t,54)._h())}return e}return null}function uUn(n,t,e){var i,r,c;if(!t.f)throw hv(new vM("Given leave edge is no tree edge."));if(e.f)throw hv(new vM("Given enter edge is a tree edge already."));for(t.f=!1,Q$(n.p,t),e.f=!0,FV(n.p,e),i=e.e.e-e.d.e-e.a,ILn(n,e.e,t)||(i=-i),c=new Ww(n.e.a);c.a<c.c.c.length;)ILn(n,r=uG(N3(c),125),t)||(r.e+=i);n.j=1,AM(n.c),oNn(n,uG(N3(new Ww(n.e.a)),125)),MVn(n)}function sUn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b;if(Krn(n,t,e),c=t[e],b=i?(KQn(),_Rt):(KQn(),kRt),gD(t.length,e,i)){for(v7(n,r=t[i?e-1:e+1],i?(can(),Wjt):(can(),Vjt)),h=0,l=(u=c).length;h<l;++h)NMn(n,a=u[h],b);for(v7(n,c,i?(can(),Vjt):(can(),Wjt)),s=0,f=(o=r).length;s<f;++s)(a=o[s]).e||NMn(n,a,Gdn(b))}else for(s=0,f=(o=c).length;s<f;++s)NMn(n,a=o[s],b);return!1}function hUn(n,t,e,i,r){var c,a,o,u,s,h,f;for(hZ(),f$(n,new Uu),o=new N4(n,0),f=new Zm,c=0;o.b<o.d.gc();)MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),163),0!=f.c.length&&EX(a)*jX(a)>2*c?(h=new Jrn(f),s=EX(a)/jX(a),u=KJn(h,t,new Dk,e,i,r,s),JF(dL(h.e),u),f.c.length=0,c=0,mv(f.c,h),mv(f.c,a),c=EX(h)*jX(h)+EX(a)*jX(a)):(mv(f.c,a),c+=EX(a)*jX(a));return f}function fUn(n,t){var e,i,r,c,a,o;if((o=uG(oIn(t,(jYn(),JMt)),101))==($Pn(),aRt)||o==cRt)for(r=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((e=uG(oIn(c,(GYn(),Fpt)),64))!=(KQn(),kRt)&&e!=_Rt||(i=uM(pK(oIn(c,bmt))),o==aRt&&(i*=r),c.n.b=i-uG(oIn(c,WMt),8).b,fhn(c,!1,!0)))}function lUn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uN(n.e))return uG(HNn(n,t,e),76);if(t!=e&&(a=(b=(r=uG(n.g,124))[e]).Lk(),EFn(n.e,a))){for(w=VKn(n.e.Dh(),a),u=-1,o=-1,i=0,s=0,f=t>e?t:e;s<=f;++s)s==e?o=i++:(c=r[s],h=w.am(c.Lk()),s==t&&(u=s!=f||h?i:i-1),h&&++i);return l=uG(zdn(n,t,e),76),o!=u&&Yv(n,new wtn(n.e,7,a,xwn(o),b.md(),u)),l}return uG(zdn(n,t,e),76)}function bUn(n,t){var e,i,r,c,a,o;for(t.Ug("Port order processing",1),o=uG(oIn(n,(jYn(),iTt)),430),e=new Ww(n.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)i=uG(N3(r),10),c=uG(oIn(i,JMt),101),a=i.j,c==($Pn(),rRt)||c==aRt||c==cRt?(hZ(),f$(a,Ywt)):c!=uRt&&c!=sRt&&(hZ(),f$(a,ndt),pMn(a),o==(nin(),qjt)&&f$(a,Zwt)),i.i=!0,qLn(i);t.Vg()}function wUn(n){var t,i,r,c,a,o,u,s;for(s=new Ym,t=new ak,o=n.Kc();o.Ob();)c=uG(o.Pb(),10),u=jx(KS(new sk,c),t),VAn(s.f,c,u);for(a=n.Kc();a.Ob();)for(r=new Fz(ix(Xgn(c=uG(a.Pb(),10)).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||RKn(xS(DS($S(RS(new uk,e.Math.max(1,uG(oIn(i,(jYn(),oTt)),17).a)),1),uG(cQ(s,i.c.i),125)),uG(cQ(s,i.d.i),125)));return t}function dUn(){dUn=E,TSt=Aq(new wJ,(uIn(),Slt),(zYn(),cwt)),ESt=Aq(new wJ,Elt,swt),SSt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),MSt=wz(Aq(Aq(new wJ,Elt,Zbt),Slt,nwt),Plt,twt),PSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),jSt=wz(new wJ,Plt,awt),kSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),ySt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function gUn(n,t,e,i,r,c){var a,o,u,s,h,f;for(a=JIn(t,u=Kfn(t)-Kfn(n)),o=p$(0,0,0);u>=0&&(!fjn(n,a)||(u<22?o.l|=1<<u:u<44?o.m|=1<<u-22:o.h|=1<<u-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,--u;return e&&Yfn(o),c&&(i?(Qat=gfn(n),r&&(Qat=Thn(Qat,(tin(),Zat)))):Qat=p$(n.l,n.m,n.h)),o}function pUn(n,t){var e,i,r,c,a,o,u,s,h,f;for(s=n.e[t.c.p][t.p]+1,u=t.c.a.c.length+1,o=new Ww(n.a);o.a<o.c.c.length;){for(a=uG(N3(o),12),f=0,c=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(a),new Wd(a)])));hDn(r);)(i=uG(N9(r),12)).i.c==t.c&&(f+=cD(n,i.i)+1,++c);e=f/c,(h=a.j)==(KQn(),kRt)?n.f[a.p]=e<s?n.c-e:n.b+(u-e):h==_Rt&&(n.f[a.p]=e<s?n.b+e:n.c-(u-e))}}function mUn(n,t,e){var i,r,c,a;if(null==n)throw hv(new ZM(IZn));for(i=(c=n.length)>0&&(s3(0,n.length),45==n.charCodeAt(0)||(s3(0,n.length),43==n.charCodeAt(0)))?1:0;i<c;i++)if(-1==Cvn((s3(i,n.length),n.charCodeAt(i))))throw hv(new ZM(y0n+n+'"'));if(r=(a=parseInt(n,10))<t,isNaN(a))throw hv(new ZM(y0n+n+'"'));if(r||a>e)throw hv(new ZM(y0n+n+'"'));return a}function vUn(n){var t,i,r,c,a,o;for(a=new lS,c=new Ww(n.a);c.a<c.c.c.length;)Qb(r=uG(N3(c),118),r.f.c.length),Jb(r,r.k.c.length),0==r.i&&(r.o=0,s8(a,r,a.c.b,a.c));for(;0!=a.b;)for(i=(r=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),118)).o+1,t=new Ww(r.f);t.a<t.c.c.length;)Yb(o=uG(N3(t),132).a,e.Math.max(o.o,i)),Jb(o,o.i-1),0==o.i&&s8(a,o,a.c.b,a.c)}function kUn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n);a.a<a.c.c.length;){for(c=uG(N3(a),74),o=(i=lCn(uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84))).i,u=i.j,MN(r=uG(zrn((!c.a&&(c.a=new fV(oFt,c,6,6)),c.a),0),166),r.j+o,r.k+u),yN(r,r.b+o,r.c+u),e=new DD((!r.a&&(r.a=new MD(eFt,r,5)),r.a));e.e!=e.i.gc();)mN(t=uG(Zkn(e),377),t.a+o,t.b+u);fun(uG(zDn(c,(XYn(),L$t)),75),o,u)}}function yUn(n){switch(n){case 100:return tZn(Wct,!0);case 68:return tZn(Wct,!1);case 119:return tZn(Qct,!0);case 87:return tZn(Qct,!1);case 115:return tZn(Jct,!0);case 83:return tZn(Jct,!1);case 99:return tZn(Yct,!0);case 67:return tZn(Yct,!1);case 105:return tZn(Zct,!0);case 73:return tZn(Zct,!1);default:throw hv(new Ky(Vct+n.toString(16)))}}function MUn(n){var t,i,r,c,a;switch(c=uG(zq(n.a,0),10),t=new gMn(n),kD(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,uG(oIn(c,(GYn(),Fpt)),64).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 o2(r=new lOn,t),c2(i=new UZ,a=uG(zq(c.j,0),12)),u2(i,r),JF(dL(r.n),a.n),JF(dL(r.a),a.a),t}function TUn(n,t,e,i,r){e&&(!i||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.b],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.b],10),(Ajn(),$xt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.c-1&n.a.length-1],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.c-1&n.a.length-1],10),(Ajn(),Dxt)):2==(n.c-n.b&n.a.length-1)?(Gqn(uG(Rfn(n),10),(Ajn(),$xt)),Gqn(uG(Rfn(n),10),Dxt)):Pxn(n,r),q5(n)}function jUn(n,t,i){var r,c,a,o,u;for(a=0,c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)o="",0==(!(r=uG(Zkn(c),27)).n&&(r.n=new fV(lFt,r,1,7)),r.n).i||(o=uG(zrn((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n),0),135).a),zsn(u=new wln(a++,t,o),r),kfn(u,(OQn(),RPt),r),u.e.b=r.j+r.f/2,u.f.a=e.Math.max(r.g,1),u.e.a=r.i+r.g/2,u.f.b=e.Math.max(r.f,1),aq(t.b,u),VAn(i.f,r,u)}function EUn(n){var t,e,i,r,c;i=uG(oIn(n,(GYn(),rmt)),27),c=uG(zDn(i,(jYn(),DMt)),181).Hc((Qmn(),JRt)),n.e||(r=uG(oIn(n,Hpt),21),t=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((r_n(),tpt))?(Myn(i,JMt,($Pn(),cRt)),ZQn(i,t.a,t.b,!1,!0)):oM(gK(zDn(i,xMt)))||ZQn(i,t.a,t.b,!0,!0)),Myn(i,DMt,c?ggn(JRt):new nB(e=uG(Mj(sKt),9),uG(MF(e,e.length),9),0))}function SUn(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(VJ(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=RNn(n,t))&&t[0]==c)return!1;if(t[0]<n.length&&58==VJ(n,t[0])){if(i=60*a,++t[0],c=t[0],0==(a=RNn(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 PUn(n){var t,e,i,r,c,a,o;for(r=new Zm,i=new Fz(ix(Xgn(n.b).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))&&kD(r,new m7(e,htn(n,e.c),htn(n,e.d)));for(o=new _w(new Fw(n.e).a.vc().Kc());o.a.Ob();)t=uG(o.a.Pb(),44),(c=uG(t.md(),113)).d.p=0;for(a=new _w(new Fw(n.e).a.vc().Kc());a.a.Ob();)t=uG(a.a.Pb(),44),0==(c=uG(t.md(),113)).d.p&&kD(n.d,BHn(n,c))}function CUn(n){var t,e,i,r,c;for(c=h0(n),r=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));r.e!=r.i.gc();)if(i=uG(Zkn(r),74),!Ern(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84)),c))return!0;for(e=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));e.e!=e.i.gc();)if(t=uG(Zkn(e),74),!Ern(lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),c))return!0;return!1}function IUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(qgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.c.i,e)));hZ(),f$(s,n.c),GX(n.b,o.p,s)}}function OUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.a<c.c.c.length;)for(u=new Ww(uG(N3(c),30).a);u.a<u.c.c.length;){for(o=uG(N3(u),10),s=new Zm,a=0,i=new Fz(ix(Xgn(o).a.Kc(),new h));hDn(i);)v9(e=uG(N9(i),18))||!v9(e)&&e.c.i.c==e.d.i.c||((r=uG(oIn(e,(jYn(),uTt)),17).a)>a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.d.i,e)));hZ(),f$(s,n.c),GX(n.f,o.p,s)}}function AUn(n,t){var e,i,r,c,a,o,u;if(null==(u=gK(oIn(t,(QGn(),TCt))))||(tJ(u),u)){for(E$n(n,t),r=new Zm,o=Fkn(t.b,0);o.b!=o.d.c;)(e=yAn(n,uG(I6(o),40),null))&&(zsn(e,t),mv(r.c,e));if(n.a=null,n.b=null,r.c.length>1)for(i=new Ww(r);i.a<i.c.c.length;)for(c=0,a=Fkn((e=uG(N3(i),121)).b,0);a.b!=a.d.c;)uG(I6(a),40).g=c++;return r}return n7(Uhn(cT(nPt,1),U3n,121,0,[t]))}function LUn(n){var t,i,r,c,a,o,u,s;for(s=new Uk,u=null,i=uG(I6(t=Fkn(n,0)),8),c=uG(I6(t),8);t.b!=t.d.c;)u=i,i=c,c=uG(I6(t),8),a=Mrn(YF(new MO(u.a,u.b),i)),o=Mrn(YF(new MO(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(o.a+o.b)/2),a.a=gq(a.a)*r,a.b=gq(a.b)*r,o.a=gq(o.a)*r,o.b=gq(o.b)*r,aq(s,JF(a,i)),aq(s,JF(o,i));return s}function NUn(n,t,e){var i,r,c,a,o;e.Ug("Minimize Crossings "+n.a,1),i=0==t.b.c.length||!Qj(JJ(new fX(null,new h3(t.b,16)),new hd(new Ic))).Bd((vS(),Kut)),o=1==t.b.c.length&&1==uG(zq(t.b,0),30).a.c.length,c=xA(oIn(t,(jYn(),rMt)))===xA((Own(),Ixt)),i||o&&!c||(Bln(r=eFn(n,t),(a=uG(hyn(r,0),219)).c.kg()?a.c.eg()?new Jg(n):new Yg(n):new Qg(n)),Pwn(n)),e.Vg()}function $Un(n,t,e,i){var r,c,a,o,u;return a=n.Ph(),r=null,(u=n.Jh())?!t||PHn(n,t,e).Bb&P0n?u=null:(i=Nyn(u.El(),n,i),n.di(null),r=t.Qh()):(a&&(u=a.Qh()),t&&(r=t.Qh())),u!=r&&u&&u.Il(n),o=n.Fh(),n.Bh(t,e),u!=r&&r&&r.Hl(n),n.vh()&&n.wh()&&(a&&o>=0&&o!=e&&(c=new lV(n,1,o,a,null),i?i.nj(c):i=c),e>=0&&(c=new lV(n,1,e,o==e?a:null,t),i?i.nj(c):i=c)),i}function DUn(n){var t,e,i;if(null==n.b){if(i=new zM,null!=n.i&&(VA(i,n.i),i.a+=":"),256&n.f){for(256&n.f&&null!=n.a&&(aY(n.i)||(i.a+="//"),VA(i,n.a)),null!=n.d&&(i.a+="/",VA(i,n.d)),16&n.f&&(i.a+="/"),t=0,e=n.j.length;t<e;t++)0!=t&&(i.a+="/"),VA(i,n.j[t]);null!=n.g&&(i.a+="?",VA(i,n.g))}else VA(i,n.a);null!=n.e&&(i.a+="#",VA(i,n.e)),n.b=i.a}return n.b}function xUn(n,t){var e,i,r,c,a,o;for(r=new Ww(t.a);r.a<r.c.c.length;)F$(c=oIn(i=uG(N3(r),10),(GYn(),rmt)),12)&&(o=SGn(t,i,(a=uG(c,12)).o.a,a.o.b),a.n.a=o.a,a.n.b=o.b,NLn(a,uG(oIn(i,Fpt),64)));e=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a),uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))?(kfn(n,(jYn(),JMt),($Pn(),cRt)),uG(oIn(HQ(n),Hpt),21).Fc(rpt),AVn(n,e,!1)):AVn(n,e,!0)}function RUn(n,t,e,i,r){var c,a,o,u;Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),kfn(c,(GYn(),rmt),t.c.i),kfn(a=new lOn,rmt,t.c),NLn(a,r),o2(a,c),kfn(t.c,lmt,c),Hb(o=new gMn(n),gbt),kfn(o,JMt,cRt),kfn(o,rmt,t.d.i),kfn(u=new lOn,rmt,t.d),NLn(u,r),o2(u,o),kfn(t.d,lmt,o),c2(t,a),u2(t,u),o3(0,e.c.length),pC(e.c,0,c),mv(i.c,o),kfn(c,Opt,xwn(1)),kfn(o,Opt,xwn(1))}function KUn(n,t,e,i){var r,c,a,o;if(o=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))),r=pz(Ngn(h1n,PJ(pz(Ngn(null==e?0:Hon(e),f1n)),15))),a=bun(n,t,o),c=lun(n,e,r),a&&r==a.a&&xQ(e,a.g))return e;if(c&&!i)throw hv(new vM("key already present: "+e));return a&&yRn(n,a),c&&yRn(n,c),HLn(n,new fJ(e,r,t,o),c),c&&(c.e=null,c.c=null),a&&(a.e=null,a.c=null),SEn(n),a?a.g:null}function FUn(n,t,e){var i,r,c,a,o;for(c=0;c<t;c++){for(i=0,o=c+1;o<t;o++)i=Lgn(Lgn(Ngn(E3(n[c],L0n),E3(n[o],L0n)),E3(e[c+o],L0n)),E3(pz(i),L0n)),e[c+o]=pz(i),i=Dz(i,32);e[c+t]=pz(i)}for(wun(e,e,t<<1),i=0,r=0,a=0;r<t;++r,a++)i=Lgn(Lgn(Ngn(E3(n[r],L0n),E3(n[r],L0n)),E3(e[a],L0n)),E3(pz(i),L0n)),e[a]=pz(i),i=Lgn(i=Dz(i,32),E3(e[++a],L0n)),e[a]=pz(i),i=Dz(i,32);return e}function _Un(n,t,i){var r,c,a,o,u,s,h,f;if(!P6(t)){for(s=uM(pK(Omn(i.c,(jYn(),ITt)))),!(h=uG(Omn(i.c,CTt),140))&&(h=new Nk),r=i.a,c=null,u=t.Kc();u.Ob();)o=uG(u.Pb(),12),f=0,c?(f=s,f+=c.o.b):f=h.d,a=jx(KS(new sk,o),n.f),vJ(n.k,o,a),RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(f))),r),a)),c=o,r=a;RKn(xS(DS($S(RS(new uk,0),t0(e.Math.ceil(h.a+c.o.b))),r),i.d))}}function BUn(n,t,e,i,r,c,a,o){var u,s,h;return h=!1,s=c-e.s,u=e.t-t.f+uXn(e,s,!1).a,!(i.g+o>s)&&(u+o+uXn(i,s,!1).a<=t.b&&(dtn(e,c-e.s),e.c=!0,dtn(i,c-e.s),oMn(i,e.s,e.t+e.d+o),i.k=!0,Gun(e.q,i),h=!0,r&&(fan(t,i),i.j=t,n.c.length>a&&(uEn((u3(a,n.c.length),uG(n.c[a],186)),i),0==(u3(a,n.c.length),uG(n.c[a],186)).a.c.length&&i7(n,a)))),h)}function HUn(n,t){var e,i,r,c,a;if(t.Ug("Partition midprocessing",1),r=new K1,kS(JJ(new fX(null,new h3(n.a,16)),new di),new kg(r)),0!=r.d){for(a=uG(l8(f3(new fX(null,(r.i||(r.i=new RD(r,r.c))).Nc())),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=uG((i=a.Kc()).Pb(),17);i.Ob();)c=uG(i.Pb(),17),RRn(uG(Y9(r,e),21),uG(Y9(r,c),21)),e=c;t.Vg()}}function UUn(n,t,e){var i,r,c,a,o;if(0==t.p){for(t.p=1,(r=e)||(r=new WO(new Zm,new nB(i=uG(Mj(YRt),9),uG(MF(i,i.length),9),0))),uG(r.a,15).Fc(t),t.k==(zIn(),lbt)&&uG(r.b,21).Fc(uG(oIn(t,(GYn(),Fpt)),64)),a=new Ww(t.j);a.a<a.c.c.length;)for(c=uG(N3(a),12),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(c),new Wd(c)])));hDn(o);)UUn(n,uG(N9(o),12).i,r);return r}return null}function GUn(n,t){var e,i,r,c,a;if(n.Ab)if(n.Ab){if((a=n.Ab.i)>0)if(r=uG(n.Ab.g,2033),null==t){for(c=0;c<a;++c)if(null==(e=r[c]).d)return e}else for(c=0;c<a;++c)if(m_(t,(e=r[c]).d))return e}else if(null==t){for(i=new DD(n.Ab);i.e!=i.i.gc();)if(null==(e=uG(Zkn(i),598)).d)return e}else for(i=new DD(n.Ab);i.e!=i.i.gc();)if(m_(t,(e=uG(Zkn(i),598)).d))return e;return null}function qUn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;fon(b=w5(n,Qhn(t),r),k6(r,Iet)),d=m6(w=r,Let),GIn(new Zp(b).a,d),g=m6(w,"endPoint"),UIn(new im(b).a,g),p=p6(w,Met),fPn(new am(b).a,p),f=k6(r,jet),t_((c=new nA(n,b)).a,c.b,f),l=k6(r,Tet),e_((a=new tA(n,b)).a,a.b,l),s=p6(r,Set),Tjn((o=new eA(e,b)).b,o.a,s),h=p6(r,Eet),jjn((u=new iA(i,b)).b,u.a,h)}function XUn(n,t,e){var i,r,c,a,o;switch(o=null,t.g){case 1:for(r=new Ww(n.j);r.a<r.c.c.length;)if(oM(gK(oIn(i=uG(N3(r),12),(GYn(),Gpt)))))return i;kfn(o=new lOn,(GYn(),Gpt),(qx(),!0));break;case 2:for(a=new Ww(n.j);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),12),(GYn(),hmt)))))return c;kfn(o=new lOn,(GYn(),hmt),(qx(),!0))}return o&&(o2(o,n),NLn(o,e),rMn(o.n,n.o,e)),o}function zUn(n,t){var i,r,c,a,o,u;for(u=-1,o=new lS,r=new w7(n.b);l$(r.a)||l$(r.b);){for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),u=e.Math.max(u,uM(pK(oIn(i,(jYn(),tMt))))),i.c==n?kS(JJ(new fX(null,new h3(i.b,16)),new fe),new cg(o)):kS(JJ(new fX(null,new h3(i.b,16)),new le),new ag(o)),a=Fkn(o,0);a.b!=a.d.c;)vR(c=uG(I6(a),72),(GYn(),Dpt))||kfn(c,Dpt,i);Ohn(t,o),BY(o)}return u}function VUn(n,t,i,r,c){var a,o,u,s,h;u=c?r.b:r.a,cS(n.a,r)||(h=u>i.s&&u<i.c,s=!1,0!=i.e.b&&0!=i.j.b&&(s|=e.Math.abs(u-uM(pK(gR(i.e))))<t4n&&e.Math.abs(u-uM(pK(gR(i.j))))<t4n,s|=e.Math.abs(u-uM(pK(pR(i.e))))<t4n&&e.Math.abs(u-uM(pK(pR(i.j))))<t4n),(h||s)&&((o=uG(oIn(t,(jYn(),bMt)),75))||(o=new Uk,kfn(t,bMt,o)),s8(o,a=new eN(r),o.c.b,o.c),FV(n.a,a)))}function WUn(n,t,e,i){var r,c,a,o,u,s,h;if(FNn(n,t,e,i))return!0;for(a=new Ww(t.f);a.a<a.c.c.length;){switch(c=uG(N3(a),334),o=!1,s=(u=n.j-t.j+e)+t.o,r=(h=n.k-t.k+i)+t.p,c.a.g){case 0:o=Gln(n,u+c.b.a,0,u+c.c.a,h-1);break;case 1:o=Gln(n,s,h+c.b.a,n.o-1,h+c.c.a);break;case 2:o=Gln(n,u+c.b.a,r,u+c.c.a,n.p-1);break;default:o=Gln(n,0,h+c.b.a,u-1,h+c.c.a)}if(o)return!0}return!1}function QUn(n,t,e){var i,r,c,a,o,u,s,h,f;for(e.Ug("Processor set coordinates",1),n.a=0==t.b.b?1:t.b.b,s=null,i=Fkn(t.b,0);!s&&i.b!=i.d.c;)oM(gK(oIn(f=uG(I6(i),40),(OQn(),UPt))))&&(s=f,(u=f.e).a=uG(oIn(f,GPt),17).a,u.b=uG(oIn(f,qPt),17).a);o=Lhn(s),h=1;do{h=(o=$In((r=o,e.eh(h),r))).b/n.a|0}while(0!=o.b);for(a=Fkn(t.b,0);a.b!=a.d.c;)YF((c=uG(I6(a),40)).e,new MO(c.f.a/2,c.f.b/2));e.Vg()}function JUn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(X9n,1),$V(n.b),$V(n.a),o=null,c=Fkn(t.b,0);!o&&c.b!=c.d.c;)oM(gK(oIn(s=uG(I6(c),40),(OQn(),UPt))))&&(o=s);for(s8(u=new lS,o,u.c.b,u.c),_Qn(n,u),h=Fkn(t.b,0);h.b!=h.d.c;)a=mK(oIn(s=uG(I6(h),40),(OQn(),OPt))),r=null!=U1(n.b,a)?uG(U1(n.b,a),17).a:0,kfn(s,EPt,xwn(r)),i=1+(null!=U1(n.a,a)?uG(U1(n.a,a),17).a:0),kfn(s,TPt,xwn(i));e.Vg()}function YUn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,qnt),"ELK Box"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges."),new Ru))),U4(n,qnt,K3n,qNt),U4(n,qnt,o4n,15),U4(n,qnt,a4n,xwn(0)),U4(n,qnt,Xnt,Jkn(FNt)),U4(n,qnt,p4n,Jkn(BNt)),U4(n,qnt,g4n,Jkn(UNt)),U4(n,qnt,R3n,Gnt),U4(n,qnt,f4n,Jkn(_Nt)),U4(n,qnt,x4n,Jkn(HNt)),U4(n,qnt,znt,Jkn(RNt)),U4(n,qnt,r9n,Jkn(KNt))}function ZUn(n,t){var e,i,r,c,a,o,u,s,h;if(a=(r=n.i).o.a,c=r.o.b,a<=0&&c<=0)return KQn(),FRt;switch(s=n.n.a,h=n.n.b,o=n.o.a,e=n.o.b,t.g){case 2:case 1:if(s<0)return KQn(),_Rt;if(s+o>a)return KQn(),kRt;break;case 4:case 3:if(h<0)return KQn(),yRt;if(h+e>c)return KQn(),KRt}return(u=(s+o/2)/a)+(i=(h+e/2)/c)<=1&&u-i<=0?(KQn(),_Rt):u+i>=1&&u-i>=0?(KQn(),kRt):i<.5?(KQn(),yRt):(KQn(),KRt)}function nGn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(e=!1,u=uM(pK(oIn(t,(jYn(),ETt)))),l=T1n*u,r=new Ww(t.b);r.a<r.c.c.length;)for(i=uG(N3(r),30),c=uG(N3(o=new Ww(i.a)),10),s=uV(n.a[c.p]);o.a<o.c.c.length;)a=uG(N3(o),10),s!=(h=uV(n.a[a.p]))&&(f=y$(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 tGn(n,t,e,i,r,c,a){var o,u,s,h,f;for(f=new cN,u=t.Kc();u.Ob();)for(h=new Ww(uG(u.Pb(),853).Rf());h.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),cxt))&&(aHn(f,s,!1,i,r,c,a),bAn(n,f));for(o=e.Kc();o.Ob();)for(h=new Ww(uG(o.Pb(),853).Rf());h.a<h.c.c.length;)xA((s=uG(N3(h),187)).of((XYn(),m$t)))===xA((Zrn(),rxt))&&(aHn(f,s,!0,i,r,c,a),bAn(n,f))}function eGn(n,t,e){var i,r,c,a,o,u,s;for(a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)for(r=new Fz(ix(eRn(c=uG(Zkn(a),27)).a.Kc(),new h));hDn(r);)z$n(i=uG(N9(r),74))||z$n(i)||BNn(i)||(u=uG(DA(FX(e.f,c)),40),s=uG(cQ(e,lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))),40),u&&s&&(kfn(o=new uZ(u,s),(OQn(),RPt),i),zsn(o,i),aq(u.d,o),aq(s.b,o),aq(t.a,o)))}function iGn(n,t){var i,r,c,a,o,u,s;for(u=uG(uG(Y9(n.r,t),21),87).Kc();u.Ob();)(r=(o=uG(u.Pb(),117)).c?iq(o.c):0)>0?o.a?r>(s=o.b.Mf().b)&&(n.v||1==o.c.d.c.length?(a=(r-s)/2,o.d.d=a,o.d.a=a):(i=(uG(zq(o.c.d,0),187).Mf().b-s)/2,o.d.d=e.Math.max(0,i),o.d.a=r-i-s)):o.d.a=n.t+r:cV(n.u)&&((c=ECn(o.b)).d<0&&(o.d.d=-c.d),c.d+c.a>o.b.Mf().b&&(o.d.a=c.d+c.a-o.b.Mf().b))}function rGn(){rGn=E,$ft=new _N((XYn(),vDt),xwn(1)),_ft=new _N(DDt,80),Fft=new _N(CDt,5),kft=new _N(c$t,r4n),Dft=new _N(kDt,xwn(1)),Kft=new _N(TDt,(qx(),!0)),Aft=new CN(50),Oft=new _N(W$t,Aft),Mft=O$t,Lft=sDt,yft=new _N(p$t,!1),Ift=V$t,Pft=H$t,Cft=q$t,Sft=_$t,Eft=K$t,Nft=bDt,oOn(),jft=sft,Bft=wft,Tft=uft,xft=fft,Rft=bft,Gft=HDt,Xft=XDt,Uft=BDt,Hft=_Dt,Iwn(),new _N(UDt,qft=fKt)}function cGn(n,t){var e;switch(Min(n)){case 6:return RA(t);case 7:return FA(t);case 8:return KA(t);case 3:return Array.isArray(t)&&!((e=Min(t))>=14&&e<=16);case 11:return null!=t&&typeof t===mZn;case 12:return null!=t&&(typeof t===wZn||typeof t==mZn);case 0:return Eyn(t,n.__elementTypeId$);case 2:return NV(t)&&!(t.Tm===j);case 1:return NV(t)&&!(t.Tm===j)||Eyn(t,n.__elementTypeId$);default:return!0}}function aGn(n){var t,i,r,c;r=n.o,VK(),n.A.dc()||udn(n.A,lht)?c=r.a:(c=n.D?e.Math.max(r.a,gNn(n.f)):gNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((aUn(),cKt))&&(c=e.Math.max(c,gNn(uG(AJ(n.p,(KQn(),yRt)),252))),c=e.Math.max(c,gNn(uG(AJ(n.p,KRt),252)))),(t=fsn(n))&&(c=e.Math.max(c,t.a))),oM(gK(n.e.Tf().of((XYn(),H$t))))?r.a=e.Math.max(r.a,c):r.a=c,(i=n.f.i).c=0,i.b=c,YGn(n.f)}function oGn(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 uGn(n,t){var e,i,r,c,a,o,u;for(c=0,o=0,u=0,r=new Ww(n.f.e);r.a<r.c.c.length;)t!=(i=uG(N3(r),153))&&(c+=a=n.i[t.a][i.a],(e=atn(t.d,i.d))>0&&n.d!=(Jen(),plt)&&(o+=a*(i.d.a+n.a[t.a][i.a]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(Jen(),dlt)&&(u+=a*(i.d.b+n.a[t.a][i.a]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new MO(o/c,t.d.b);case 2:return new MO(t.d.a,u/c);default:return new MO(o/c,u/c)}}function sGn(n){var t,e,i,r,c;for(kD(c=new R7((!n.a&&(n.a=new MD(eFt,n,5)),n.a).i+2),new MO(n.j,n.k)),kS(new fX(null,(!n.a&&(n.a=new MD(eFt,n,5)),new h3(n.a,16))),new Vp(c)),kD(c,new MO(n.b,n.c)),t=1;t<c.c.length-1;)u3(t-1,c.c.length),e=uG(c.c[t-1],8),u3(t,c.c.length),i=uG(c.c[t],8),u3(t+1,c.c.length),r=uG(c.c[t+1],8),e.a==i.a&&i.a==r.a||e.b==i.b&&i.b==r.b?i7(c,t):++t;return c}function hGn(n,t){var e,i,r,c;if(Cln(),c=uG(oIn(n.i,(jYn(),JMt)),101),0!=n.j.g-t.j.g||c!=($Pn(),rRt)&&c!=aRt&&c!=cRt)return 0;if(c==($Pn(),rRt)&&(e=uG(oIn(n,YMt),17),i=uG(oIn(t,YMt),17),e&&i&&0!=(r=e.a-i.a)))return r;switch(n.j.g){case 1:return ugn(n.n.a,t.n.a);case 2:return ugn(n.n.b,t.n.b);case 3:return ugn(t.n.a,n.n.a);case 4:return ugn(t.n.b,n.n.b);default:throw hv(new kM(n6n))}}function fGn(n,t){var e,i,r,c,a,o,u;for(e=Tx(NS(AS(LS(new lk,t),new qZ(t.e)),cdt),n.a),0==t.j.c.length||een(uG(zq(t.j,0),60).a,e),u=new nv,vJ(n.e,e,u),a=new ek,o=new ek,c=new Ww(t.k);c.a<c.c.c.length;)FV(a,(r=uG(N3(c),18)).c),FV(o,r.d);(i=a.a.gc()-o.a.gc())<0?(hfn(u,!0,(xdn(),JDt)),hfn(u,!1,YDt)):i>0&&(hfn(u,!1,(xdn(),JDt)),hfn(u,!0,YDt)),Prn(t.g,new UC(n,e)),vJ(n.g,t,e)}function lGn(){var n;for(lGn=E,pot=Uhn(cT(YHt,1),W1n,28,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]),mot=Inn(YHt,W1n,28,37,15,1),vot=Uhn(cT(YHt,1),W1n,28,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]),kot=Inn(nUt,E0n,28,37,14,1),n=2;n<=36;n++)mot[n]=t0(e.Math.pow(n,pot[n])),kot[n]=bSn(YZn,mot[n])}function bGn(n){var t;if(1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));return t=new Uk,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),!1)),Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),!0)),t}function wGn(n,t){var e,i,r;for(r=!1,i=new Fz(ix((t.d?n.a.c==(b0(),fSt)?qgn(t.b):Xgn(t.b):n.a.c==(b0(),hSt)?qgn(t.b):Xgn(t.b)).a.Kc(),new h));hDn(i);)if(e=uG(N9(i),18),(oM(n.a.f[n.a.g[t.b.p].p])||v9(e)||e.c.i.c!=e.d.i.c)&&!oM(n.a.n[n.a.g[t.b.p].p])&&!oM(n.a.n[n.a.g[t.b.p].p])&&(r=!0,cS(n.b,n.a.g[vTn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function dGn(n,t,e){var i,r,c,a,o,u,s;if(0==(i=e.gc()))return!1;if(n.Pj())if(u=n.Qj(),nmn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,u):n.Ij(5,null,e,t,u),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)s=n.xj(r),o=n.Nj(s,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(nmn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)o=n.Nj(n.xj(r),o);o&&o.oj()}return!0}function gGn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=n.Dj(t,n.Zi(t,e)),e,t,c),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))?(a&&(r=n.Oj(a,r)),(r=n.Nj(e,r))?(r.nj(i),r.oj()):n.Jj(i)):r?(r.nj(i),r.oj()):n.Jj(i),a):(a=n.Dj(t,n.Zi(t,e)),n.Mj()&&!(n.Yi()&&a?udn(a,e):xA(a)===xA(e))&&(r=null,a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function pGn(n,t){var i,r,c,a,o,u,s,h;if(n.e=t,n.f=uG(oIn(t,(mon(),Qft)),234),LCn(t),n.d=e.Math.max(16*t.e.c.length+t.c.c.length,256),!oM(gK(oIn(t,(rGn(),Mft)))))for(h=n.e.e.c.length,u=new Ww(t.e);u.a<u.c.c.length;)(s=uG(N3(u),153).d).a=BX(n.f)*h,s.b=BX(n.f)*h;for(i=t.b,a=new Ww(t.c);a.a<a.c.c.length;)if(c=uG(N3(a),290),(r=uG(oIn(c,Rft),17).a)>0){for(o=0;o<r;o++)kD(i,new $W(c));CNn(c)}}function mGn(n,t,e,i){var r,c,a,o,u,s,h,f,l;if(f=new QW(n.Zg()),nrn(t,Bet,f),e&&!n.Xg().a.dc())for(nrn(t,"logs",s=new Ib),o=0,l=new Gw(n.Xg().b.Kc());l.b.Ob();)h=new QW(mK(l.b.Pb())),uin(s,o),W5(s,o,h),++o;if(i&&nrn(t,"executionTime",new Pb(n.Wg())),!n.Yg().a.dc())for(a=new Ib,nrn(t,pet,a),o=0,c=new Gw(n.Yg().b.Kc());c.b.Ob();)r=uG(c.b.Pb(),871),u=new _y,uin(a,o),W5(a,o,u),mGn(r,u,e,i),++o}function vGn(){vGn=E,SP(),qHt=new Df,Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Act)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE(Nct)]),Uhn(cT(Y_t,1),uat,600,0,[new dE(Lct)])]),new PN("-1"),Uhn(cT(Y_t,2),zZn,381,0,[Uhn(cT(Y_t,1),uat,600,0,[new dE("\\c+")])]),new PN("0"),new PN("0"),new PN("1"),new PN("0"),new PN(Uct)}function kGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hypernodes processing",1),i=new Ww(n.b);i.a<i.c.c.length;)for(a=new Ww(uG(N3(i),30).a);a.a<a.c.c.length;)if(oM(gK(oIn(c=uG(N3(a),10),(jYn(),uMt))))&&c.j.c.length<=2){for(s=0,u=0,e=0,r=0,o=new Ww(c.j);o.a<o.c.c.length;)switch(uG(N3(o),12).j.g){case 1:++s;break;case 2:++u;break;case 3:++e;break;case 4:++r}0==s&&0==e&&NJn(n,c,r<=u)}t.Vg()}function yGn(n,t,e,i,r){var c,a,o,u,s,h,f;for(a=new Ww(t);a.a<a.c.c.length;){if(u=(c=uG(N3(a),18)).c,e.a._b(u))l0(),s=USt;else{if(!i.a._b(u))throw hv(new vM("Source port must be in one of the port sets."));l0(),s=GSt}if(h=c.d,e.a._b(h))l0(),f=USt;else{if(!i.a._b(h))throw hv(new vM("Target port must be in one of the port sets."));l0(),f=GSt}o=new UAn(c,s,f),vJ(n.b,c,o),mv(r.c,o)}}function MGn(n){var t,e;return n.c&&n.c.Vh()&&(e=uG(n.c,54),n.c=uG(mwn(n,e),142),n.c!=e&&(4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,9,2,e,n.c)),F$(n.Cb,411)?n.Db>>16==-15&&n.Cb.Yh()&&Cen(new btn(n.Cb,9,13,e,n.c,Hyn(Aen(uG(n.Cb,62)),n))):F$(n.Cb,90)&&n.Db>>16==-23&&n.Cb.Yh()&&(F$(t=n.c,90)||(YYn(),t=x_t),F$(e,90)||(YYn(),e=x_t),Cen(new btn(n.Cb,9,10,e,t,Hyn(z5(uG(n.Cb,29)),n)))))),n.c}function TGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Hyperedge merging",1),CDn(n,t),o=new N4(t.b,0);o.b<o.d.gc();)if(MK(o.b<o.d.gc()),0!=(s=uG(o.d.Xb(o.c=o.b++),30).a).c.length)for(i=null,r=null,c=null,a=null,u=0;u<s.c.length;u++)u3(u,s.c.length),(r=(i=uG(s.c[u],10)).k)==(zIn(),wbt)&&a==wbt&&(h=jXn(i,c)).a&&(QFn(i,c,h.b,h.c),u3(u,s.c.length),nE(s.c,u,1),--u,i=c,r=a),c=i,a=r;e.Vg()}function jGn(n,t,e){var i,r,c,a,o,u,s;if(t==e)return!0;if(t=uDn(n,t),e=uDn(n,e),i=PMn(t)){if((u=PMn(e))!=i)return!!u&&(a=i.mk())==u.mk()&&null!=a;if(!t.d&&(t.d=new MD(g_t,t,1)),r=(c=t.d).i,!e.d&&(e.d=new MD(g_t,e,1)),r==(s=e.d).i)for(o=0;o<r;++o)if(!jGn(n,uG(zrn(c,o),89),uG(zrn(s,o),89)))return!1;return!0}return t.e==e.e}function EGn(n,t,e,i){var r,c,a,o,u,s,h,f;if(EFn(n.e,t)){for(f=VKn(n.e.Dh(),t),c=uG(n.g,124),h=null,u=-1,o=-1,r=0,s=0;s<n.i;++s)a=c[s],f.am(a.Lk())&&(r==e&&(u=s),r==i&&(o=s,h=a.md()),++r);if(-1==u)throw hv(new dM(zet+e+Vet+r));if(-1==o)throw hv(new dM(Wet+i+Vet+r));return zdn(n,u,o),uN(n.e)&&Yv(n,VZ(n,7,t,xwn(i),h,e,!0)),h}throw hv(new vM("The feature must be many-valued to support move"))}function SGn(n,t,e,i){var r,c,a,o,u;switch((u=new eN(t.n)).a+=t.o.a/2,u.b+=t.o.b/2,o=uM(pK(oIn(t,(jYn(),QMt)))),c=n.f,a=n.d,r=n.c,uG(oIn(t,(GYn(),Fpt)),64).g){case 1:u.a+=a.b+r.a-e/2,u.b=-i-o,t.n.b=-(a.d+o+r.b);break;case 2:u.a=c.a+a.b+a.c+o,u.b+=a.d+r.b-i/2,t.n.a=c.a+a.c+o-r.a;break;case 3:u.a+=a.b+r.a-e/2,u.b=c.b+a.d+a.a+o,t.n.b=c.b+a.a+o-r.b;break;case 4:u.a=-e-o,u.b+=a.d+r.b-i/2,t.n.a=-(a.b+o+r.a)}return u}function PGn(n){var t,e,i,r,c,a;return zsn(i=new Dan,n),xA(oIn(i,(jYn(),Byt)))===xA((xdn(),ZDt))&&kfn(i,Byt,pgn(i)),null==oIn(i,(K7(),jNt))&&(a=uG(mIn(n),167),kfn(i,jNt,XA(a.of(jNt)))),kfn(i,(GYn(),rmt),n),kfn(i,Hpt,new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),r=QWn((R0(n)&&(vP(),new Vy(R0(n))),vP(),new Wx(R0(n)?new Vy(R0(n)):null,n)),YDt),c=uG(oIn(i,_Mt),107),p0(e=i.d,c),p0(e,r),i}function CGn(n,t,e){var i,r;i=t.c.i,r=e.d.i,i.k==(zIn(),wbt)?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,gK(oIn(i,Ypt)))):i.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(i,Zpt),12)),kfn(n,nmt,uG(oIn(i,nmt),12)),kfn(n,Ypt,(qx(),!0))):r.k==bbt?(kfn(n,(GYn(),Zpt),uG(oIn(r,Zpt),12)),kfn(n,nmt,uG(oIn(r,nmt),12)),kfn(n,Ypt,(qx(),!0))):(kfn(n,(GYn(),Zpt),t.c),kfn(n,nmt,e.d))}function IGn(n){var t,e,i,r,c,a,o;for(n.o=new ND,i=new lS,a=new Ww(n.e.a);a.a<a.c.c.length;)1==Ebn(c=uG(N3(a),125)).c.length&&s8(i,c,i.c.b,i.c);for(;0!=i.b;)0!=Ebn(c=uG(0==i.b?null:(MK(0!=i.b),Lrn(i,i.a.a)),125)).c.length&&(t=uG(zq(Ebn(c),0),218),e=c.g.a.c.length>0,o=hpn(t,c),Px(e?o.b:o.g,t),1==Ebn(o).c.length&&s8(i,o,i.c.b,i.c),r=new WO(c,t),A6(n.o,r),men(n.e.a,c))}function OGn(n,t){var i,r,c,a;return r=e.Math.abs(AV(n.b).a-AV(t.b).a),a=e.Math.abs(AV(n.b).b-AV(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 AGn(n){var t,e,i;for(wQn(n,n.e,n.f,(l0(),USt),!0,n.c,n.i),wQn(n,n.e,n.f,USt,!1,n.c,n.i),wQn(n,n.e,n.f,GSt,!0,n.c,n.i),wQn(n,n.e,n.f,GSt,!1,n.c,n.i),yGn(n,n.c,n.e,n.f,n.i),e=new N4(n.i,0);e.b<e.d.gc();)for(MK(e.b<e.d.gc()),t=uG(e.d.Xb(e.c=e.b++),131),i=new N4(n.i,e.b);i.b<i.d.gc();)MK(i.b<i.d.gc()),nVn(t,uG(i.d.Xb(i.c=i.b++),131));XJn(n.i,uG(oIn(n.d,(GYn(),dmt)),234)),aWn(n.i)}function LGn(n,t){var e,i;if(null!=t)if(i=_Tn(n)){if(!(1&i.i))return TP(),!(e=uG(cQ(_Ft,i),57))||e.fk(t);if(i==ZHt)return KA(t);if(i==YHt)return F$(t,17);if(i==iUt)return F$(t,161);if(i==tUt)return F$(t,222);if(i==JHt)return F$(t,180);if(i==eUt)return FA(t);if(i==rUt)return F$(t,191);if(i==nUt)return F$(t,168)}else if(F$(t,58))return n.dl(uG(t,58));return!1}function NGn(){var n,t,e,i,r,c,a,o,u;for(NGn=E,dHt=Inn(tUt,ret,28,255,15,1),gHt=Inn(JHt,N1n,28,64,15,1),t=0;t<255;t++)dHt[t]=-1;for(e=90;e>=65;e--)dHt[e]=e-65<<24>>24;for(i=122;i>=97;i--)dHt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)dHt[r]=r-48+52<<24>>24;for(dHt[43]=62,dHt[47]=63,c=0;c<=25;c++)gHt[c]=65+c&D1n;for(a=26,u=0;a<=51;++a,u++)gHt[a]=97+u&D1n;for(n=52,o=0;n<=61;++n,o++)gHt[n]=48+o&D1n;gHt[62]=43,gHt[63]=47}function $Gn(n,t){var i,r,c,a,o,u;return(c=nun(n))==(u=nun(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)*A0n)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*A0n)+1))>r+1?c:i<r-1?-c:(!n.c&&(n.c=j2(Bsn(n.f))),a=n.c,!t.c&&(t.c=j2(Bsn(t.f))),o=t.c,r<0?a=j5(a,_qn(-r)):r>0&&(o=j5(o,_qn(r))),Pvn(a,o))):c<u?-1:1}function DGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug(W3n,1),n.vf(t),c=0;n.xf(c)&&!e.$g();){for(n.wf(),h=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(h);)for(u=uG(N9(h),309),o=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(o);)(a=uG(N9(o),309))!=u&&(r=n.uf(a,u))&&JF(u.c,r);for(s=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[t.e,t.d,t.b])));hDn(s);)DOn(i=(u=uG(N9(s),309)).c,-n.d,-n.d,n.d,n.d),JF(u.d,i),i.a=0,i.b=0;++c}e.Vg()}function xGn(n,t){var i,r,c,a,o,u,s,h,f,l,b;if(n.dc())return new sj;for(s=0,f=0,r=n.Kc();r.Ob();)c=uG(r.Pb(),36).f,s=e.Math.max(s,c.a),f+=c.a*c.b;for(s=e.Math.max(s,e.Math.sqrt(f)*uM(pK(oIn(uG(n.Kc().Pb(),36),(jYn(),dyt))))),l=0,b=0,u=0,i=t,o=n.Kc();o.Ob();)l+(h=(a=uG(o.Pb(),36)).f).a>s&&(l=0,b+=u+t,u=0),tHn(a,l,b),i=e.Math.max(i,l+h.a),u=e.Math.max(u,h.b),l+=h.a+t;return new MO(i+t,b+u+t)}function RGn(n,t){var e,i,r,c,a,o,u;if(!h0(n))throw hv(new kM(Stt));if(c=(i=h0(n)).g,r=i.f,c<=0&&r<=0)return KQn(),FRt;switch(o=n.i,u=n.j,t.g){case 2:case 1:if(o<0)return KQn(),_Rt;if(o+n.g>c)return KQn(),kRt;break;case 4:case 3:if(u<0)return KQn(),yRt;if(u+n.f>r)return KQn(),KRt}return(a=(o+n.g/2)/c)+(e=(u+n.f/2)/r)<=1&&a-e<=0?(KQn(),_Rt):a+e>=1&&a-e>=0?(KQn(),kRt):e<.5?(KQn(),yRt):(KQn(),KRt)}function KGn(n,t,e,i,r){var c,a;if(c=Lgn(E3(t[0],L0n),E3(i[0],L0n)),n[0]=pz(c),c=$z(c,32),e>=r){for(a=1;a<r;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<e;a++)c=Lgn(c,E3(t[a],L0n)),n[a]=pz(c),c=$z(c,32)}else{for(a=1;a<e;a++)c=Lgn(c,Lgn(E3(t[a],L0n),E3(i[a],L0n))),n[a]=pz(c),c=$z(c,32);for(;a<r;a++)c=Lgn(c,E3(i[a],L0n)),n[a]=pz(c),c=$z(c,32)}0!=dwn(c,0)&&(n[a]=pz(c))}function FGn(n){var t,e,i,r,c,a;if(QYn(),4!=n.e&&5!=n.e)throw hv(new vM("Token#complementRanges(): must be RANGE: "+n.e));for(pxn(c=n),uzn(c),i=c.b.length+2,0==c.b[0]&&(i-=2),(e=c.b[c.b.length-1])==zct&&(i-=2),(r=new K3(4)).b=Inn(YHt,W1n,28,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!=zct&&(r.b[a++]=e+1,r.b[a]=zct),r.a=!0,r}function _Gn(n,t){var e,i,r,c,a,o,u,s,h;for(t.Ug("Layer constraint edge reversal",1),a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),h=-1,e=new Zm,s=D4(c.a),r=0;r<s.length;r++)i=uG(oIn(s[r],(GYn(),Xpt)),311),-1==h?i!=(Zen(),ppt)&&(h=r):i==(Zen(),ppt)&&(a2(s[r],null),$jn(s[r],h++,c)),i==(Zen(),dpt)&&mv(e.c,s[r]);for(u=new Ww(e);u.a<u.c.c.length;)a2(o=uG(N3(u),10),null),a2(o,c)}t.Vg()}function BGn(n,t,e){var i,r,c,a,o,u,s,h;if(0==(i=e.gc()))return!1;if(n.Pj())if(s=n.Qj(),PCn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,s):n.Ij(5,null,e,t,s),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)h=n.g[r],o=n.Nj(h,o),o=n.Uj(h,o);o?(o.nj(a),o.oj()):n.Jj(a)}else n.Jj(a);else if(PCn(n,t,e),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r<c;++r)u=n.g[r],o=n.Nj(u,o);o&&o.oj()}return!0}function HGn(n,t){var e,i,r,c,a,o,u,s;for(t.Ug("Hierarchical port dummy size processing",1),o=new Zm,s=new Zm,e=2*uM(pK(oIn(n,(jYn(),gTt)))),r=new Ww(n.b);r.a<r.c.c.length;){for(i=uG(N3(r),30),o.c.length=0,s.c.length=0,a=new Ww(i.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((u=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt)?mv(o.c,c):u==KRt&&mv(s.c,c));x$n(o,!0,e),x$n(s,!1,e)}t.Vg()}function UGn(n,t,e,i){var r,c,a,o,u;for(a=new Ww(n.k);a.a<a.c.c.length;)r=uG(N3(a),132),i&&r.c!=(_7(),$St)||(u=r.b).g<0&&r.d>0&&(Qb(u,u.d-r.d),r.c==(_7(),$St)&&Vb(u,u.a-r.d),u.d<=0&&u.i>0&&s8(t,u,t.c.b,t.c));for(c=new Ww(n.f);c.a<c.c.c.length;)r=uG(N3(c),132),i&&r.c!=(_7(),$St)||(o=r.a).g<0&&r.d>0&&(Jb(o,o.i-r.d),r.c==(_7(),$St)&&Wb(o,o.b-r.d),o.i<=0&&o.d>0&&s8(e,o,e.c.b,e.c))}function GGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(hZ(),f$(n,new Bu),a=oG(n),b=new Zm,l=new Zm,o=null,u=0;0!=a.b;)c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),163),!o||EX(o)*jX(o)/2<EX(c)*jX(c)?(o=c,mv(b.c,c)):(u+=EX(c)*jX(c),mv(l.c,c),l.c.length>1&&(u>EX(o)*jX(o)/2||0==a.b)&&(f=new Jrn(l),h=EX(o)/jX(o),s=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),s),o=f,mv(b.c,f),u=0,l.c.length=0));return Ohn(b,l),b}function qGn(n,t,e,i,r){var c,a,o,u,s,h,f;if(bS(),aW(n,"src"),aW(e,"dest"),f=Tbn(n),u=Tbn(e),yG(!!(4&f.i),"srcType is not an array"),yG(!!(4&u.i),"destType is not an array"),h=f.c,a=u.c,yG(1&h.i?h==a:!(1&a.i),"Array types don't match"),$fn(n,t,e,i,r),1&h.i||f==u)b$n(n,t,e,i,r,!0);else if(s=Kcn(n),c=Kcn(e),xA(n)===xA(e)&&t<i)for(t+=r,o=i+r;o-- >i;)uQ(c,o,s[--t]);else for(o=i+r;i<o;)uQ(c,i++,s[t++])}function XGn(n,t){var e,i,r,c,a,o,u,s,h;t.Ug("Box layout",2),r=sM(pK(zDn(n,(lIn(),zNt)))),c=uG(zDn(n,GNt),107),e=oM(gK(zDn(n,FNt))),i=oM(gK(zDn(n,_Nt))),0===uG(zDn(n,RNt),320).g?(h=new Z_((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),hZ(),f$(h,new qp(i)),a=h,o=xAn(n),(null==(u=pK(zDn(n,xNt)))||(tJ(u),u<=0))&&(u=1.3),ZQn(n,(s=sJn(a,r,c,o.a,o.b,e,(tJ(u),u))).a,s.b,!1,!0)):Kzn(n,r,c,e),t.Vg()}function zGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(f=iPn(n,e),o=0;o<t;o++){for(pF(r,e),l=new Zm,MK(i.b<i.d.gc()),b=uG(i.d.Xb(i.c=i.b++),418),s=f+o;s<n.b;s++)a=b,MK(i.b<i.d.gc()),kD(l,new pFn(a,b=uG(i.d.Xb(i.c=i.b++),418),e));for(h=f+o;h<n.b;h++)MK(i.b>0),i.a.Xb(i.c=--i.b),h>f+o&&LQ(i);for(c=new Ww(l);c.a<c.c.c.length;)pF(i,uG(N3(c),418));if(o<t-1)for(u=f+o;u<n.b;u++)MK(i.b>0),i.a.Xb(i.c=--i.b)}}function VGn(){var n,t,e,i,r,c;if(QYn(),WHt)return WHt;for(TXn(n=new K3(4),kJn(iat,!0)),lWn(n,kJn("M",!0)),lWn(n,kJn("C",!0)),c=new K3(4),i=0;i<11;i++)HFn(c,i,i);return TXn(t=new K3(4),kJn("M",!0)),HFn(t,4448,4607),HFn(t,65438,65439),vzn(r=new QN(2),n),vzn(r,OHt),(e=new QN(2)).Jm(CX(c,kJn("L",!0))),e.Jm(t),e=new n8(3,e),e=new eW(r,e),WHt=e}function WGn(n,t){var e,i,r,c,a,o,u,s;for(e=new RegExp(t,"g"),u=Inn($ot,zZn,2,0,6,1),i=0,s=n,c=null;;){if(null==(o=e.exec(s))||""==s){u[i]=s;break}a=o.index,u[i]=(Knn(0,a,s.length),s.substr(0,a)),s=r1(s,a+o[0].length,s.length),e.lastIndex=0,c==s&&(u[i]=(Knn(0,1,s.length),s.substr(0,1)),s3(1,s.length+1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=u.length;r>0&&""==u[r-1];)--r;r<u.length&&(u.length=r)}return u}function QGn(){QGn=E,mCt=new CN(20),pCt=new _N((XYn(),W$t),mCt),ECt=new _N(DDt,20),jCt=new _N(IDt,3),eCt=new _N(c$t,r4n),yCt=new _N(vDt,xwn(1)),TCt=new _N(TDt,(qx(),!0)),rCt=w$t,xdn(),cCt=new _N(d$t,aCt=ZDt),sCt=O$t,hCt=A$t,lCt=_$t,bCt=H$t,wCt=U$t,dCt=q$t,fCt=K$t,gCt=V$t,vCt=bDt,eDn(),LCt=nCt,MCt=JPt,CCt=HDt,OCt=XDt,PCt=BDt,SCt=_Dt,Iwn(),new _N(UDt,ICt=fKt),kCt=QPt,uCt=VPt,ACt=ZPt,iCt=XPt,oCt=zPt}function JGn(n){var t,e;if(!hsn(t=mK(zDn(n,(XYn(),e$t))),n)&&!vnn(n,yDt)&&(0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i||oM(gK(zDn(n,C$t))))){if(null!=t&&0!=KAn(t).length)throw XWn(n,e=JA(JA(new lx("Layout algorithm '"),t),"' not found for ")),hv(new jM(e.a));if(!hsn(S0n,n))throw XWn(n,e=JA(JA(new lx("Unable to load default layout algorithm "),S0n)," for unconfigured node ")),hv(new jM(e.a))}}function YGn(n){var t,i,r,c,a,o,u,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=(o=n.a).length;s<f;++s)qX(c=o[s],w,b);else r=LMn(n,!1),qX(n.a[0],i.c+t.b,r[0]),qX(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),qX(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(u=0,h=(a=n.a).length;u<h;++u)F$(c=a[u],336)&&uG(c,336).lf()}function ZGn(n){var t,e,i,r,c,a,o,u,s,h,f;for((f=new ra).d=0,a=new Ww(n.b);a.a<a.c.c.length;)c=uG(N3(a),30),f.d+=c.a.c.length;for(i=0,r=0,f.a=Inn(YHt,W1n,28,n.b.c.length,15,1),s=0,h=0,f.e=Inn(YHt,W1n,28,f.d,15,1),e=new Ww(n.b);e.a<e.c.c.length;)for((t=uG(N3(e),30)).p=i++,f.a[t.p]=r++,h=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p=s++,f.e[o.p]=h++;return f.c=new gp(f),f.b=iR(f.d),IUn(f,n),f.f=iR(f.d),OUn(f,n),f}function nqn(n,t){var i,r,c;for(c=uG(zq(n.n,n.n.c.length-1),209).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 Ww(n.n);i.a<i.c.c.length;)r+=uG(N3(i),209).a;n.d=r,n.a=n.e/n.b.c.length-n.i*((n.b.c.length-1)/n.b.c.length),ijn(n.j)}function tqn(n,t){var e,i,r,c,a,o,u,s,h;if(null==(s=gK(oIn(t,(rGn(),Kft))))||(tJ(s),s)){for(h=Inn(ZHt,B2n,28,t.e.c.length,16,1),a=d$n(t),r=new lS,u=new Ww(t.e);u.a<u.c.c.length;)(e=Gxn(n,uG(N3(u),153),null,null,h,a))&&(zsn(e,t),s8(r,e,r.c.b,r.c));if(r.b>1)for(i=Fkn(r,0);i.b!=i.d.c;)for(c=0,o=new Ww((e=uG(I6(i),235)).e);o.a<o.c.c.length;)uG(N3(o),153).a=c++;return r}return n7(Uhn(cT(mft,1),U3n,235,0,[t]))}function eqn(n){var t,e,i,r,c;if(!n.g){if(c=new ys,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,eqn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(i=c.i,!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();++i)hw(uG(Zkn(r),462),i);CW(c,(!n.s&&(n.s=new fV(o_t,n,21,17)),n.s)),lbn(c),n.g=new Afn(n,c),n.i=uG(c.g,254),null==n.i&&(n.i=Q_t),n.p=null,y9(n).b&=-5}return n.g}function iqn(n,t){var e,i,r,c,a,o,u,s,h;if((e=t.qi(n.a))&&null!=(u=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),"memberTypes")))){for(s=new Zm,a=0,o=(c=WGn(u,"\\w")).length;a<o;++a)F$(h=-1==(i=(r=c[a]).lastIndexOf("#"))?hK(n,t.jk(),r):0==i?gtn(n,null,(s3(1,r.length+1),r.substr(1))):gtn(n,(Knn(0,i,r.length),r.substr(0,i)),(s3(i+1,r.length+1),r.substr(i+1))),156)&&kD(s,uG(h,156));return s}return hZ(),hZ(),zot}function rqn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;if(r=n.i,i=n.n,0==n.b)t=AMn(n,!1),XX(n.a[0],r.d+i.d,t[0]),XX(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),XX(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=(o=n.a).length;s<f;++s)XX(c=o[s],w,b);for(u=0,h=(a=n.a).length;u<h;++u)F$(c=a[u],336)&&uG(c,336).mf()}function cqn(n){var t,e,i,r,c,a,o,u,s;for(s=Inn(YHt,W1n,28,n.b.c.length+1,15,1),u=new ek,i=0,c=new Ww(n.b);c.a<c.c.c.length;){for(r=uG(N3(c),30),s[i++]=u.a.gc(),o=new Ww(r.a);o.a<o.c.c.length;)for(e=new Fz(ix(Xgn(uG(N3(o),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.zc(t,u);for(a=new Ww(r.a);a.a<a.c.c.length;)for(e=new Fz(ix(qgn(uG(N3(a),10)).a.Kc(),new h));hDn(e);)t=uG(N9(e),18),u.a.Bc(t)}return s}function aqn(n,t,e,i){var r,c,a,o,u;if(u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&udn(c,e))return!0}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],u.am(c.Lk())&&udn(e,c.md()))return!0;if(i)for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&xA(e)===xA(fK(n,uG(c.md(),58))))return!0}else for(a=0;a<n.i;++a)if(c=r[a],u.am(c.Lk())&&null==c.md())return!1;return!1}function oqn(n,t){var e,i,r,c,a,o;if((e=t.qi(n.a))&&null!=(o=mK(Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),_et))))switch(r=ax(o,$Cn(35)),i=t.qk(),-1==r?(a=jz(n,Hrn(i)),c=o):0==r?(a=null,s3(1,o.length+1),c=o.substr(1)):(Knn(0,r,o.length),a=o.substr(0,r),s3(r+1,o.length+1),c=o.substr(r+1)),sJ(Nen(n,t))){case 2:case 3:return Xfn(n,i,a,c);case 0:case 4:case 5:case 6:return zfn(n,i,a,c)}return null}function uqn(n,t,i,r){var c,a,o,u;for(u=i,o=new Ww(t.a);o.a<o.c.c.length;){if(a=uG(N3(o),225),c=uG(a.b,68),Fgn(n.b.c,c.b.c+c.b.b)<=0&&Fgn(c.b.c,n.b.c+n.b.b)<=0&&Fgn(n.b.d,c.b.d+c.b.a)<=0&&Fgn(c.b.d,n.b.d+n.b.a)<=0){if(0==Fgn(c.b.c,n.b.c+n.b.b)&&r.a<0||0==Fgn(c.b.c+c.b.b,n.b.c)&&r.a>0||0==Fgn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Fgn(c.b.d+c.b.a,n.b.d)&&r.b>0){u=0;break}}else u=e.Math.min(u,LLn(n,c,r));u=e.Math.min(u,uqn(n,a,u,r))}return u}function sqn(n,t){var e,i,r,c,a,o;if(n.b<2)throw hv(new vM("The vector chain must contain at least a source and a target point."));for(MK(0!=n.b),MN(t,(i=uG(n.a.a.c,8)).a,i.b),o=new Zx((!t.a&&(t.a=new MD(eFt,t,5)),t.a)),c=Fkn(n,1);c.a<n.b-1;)a=uG(I6(c),8),o.e!=o.i.gc()?e=uG(Zkn(o),377):(gj(),Smn(o,e=new ns)),mN(e,a.a,a.b);for(;o.e!=o.i.gc();)Zkn(o),$Sn(o);MK(0!=n.b),yN(t,(r=uG(n.c.b.c,8)).a,r.b)}function hqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),a=uG(n.g,124),EFn(n.e,t)){if(t.Si()&&(c=Dqn(n,t,i,F$(t,102)&&!!(uG(t,19).Bb&P0n)))>=0&&c!=e)throw hv(new vM(Xet));for(r=0,u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk())){if(r==e)return uG(Uyn(n,u,(PP(),uG(t,69).xk()?uG(i,76):R5(t,i))),76);++r}throw hv(new dM(Hit+e+Vet+r))}for(u=0;u<n.i;++u)if(o=a[u],s.am(o.Lk()))return PP(),uG(t,69).xk()?o:o.md();return null}function fqn(n,t){var e,i,r,c,a,o,u,s;for(e=0,i=new Ww((u3(0,n.c.length),uG(n.c[0],105)).g.b.j);i.a<i.c.c.length;)uG(N3(i),12).p=e++;for(t==(KQn(),yRt)?f$(n,new nc):f$(n,new tc),a=0,s=n.c.length-1;a<s;)u3(a,n.c.length),c=uG(n.c[a],105),u3(s,n.c.length),u=uG(n.c[s],105),r=t==yRt?c.c:c.a,o=t==yRt?u.a:u.c,hV(c,t,(qhn(),sdt),r),hV(u,t,udt,o),++a,--s;a==s&&hV((u3(a,n.c.length),uG(n.c[a],105)),t,(qhn(),odt),null)}function lqn(n,t,e,i){var r,c,a,o,u,s;for(a=new SVn(n,t,e),u=new N4(i,0),r=!1;u.b<u.d.gc();)MK(u.b<u.d.gc()),(o=uG(u.d.Xb(u.c=u.b++),239))==t||o==e?LQ(u):!r&&uM(oD(o.g,o.d[0]).a)>uM(oD(a.g,a.d[0]).a)?(MK(u.b>0),u.a.Xb(u.c=--u.b),pF(u,a),r=!0):o.e&&o.e.gc()>0&&(c=(!o.e&&(o.e=new Zm),o.e).Mc(t),s=(!o.e&&(o.e=new Zm),o.e).Mc(e),(c||s)&&((!o.e&&(o.e=new Zm),o.e).Fc(a),++a.c));r||mv(i.c,a)}function bqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new MO(t.i+t.g/2,t.j+t.f/2),(u=uG(zDn(t,(XYn(),mDt)),8)).a=u.a+h,u.b=u.b+f,r=(a.b-u.b)/(a.a-u.a),i=a.b-r*a.a,o=new MO(e.i+e.g/2,e.j+e.f/2),(s=uG(zDn(e,mDt),8)).a=s.a+h,s.b=s.b+f,c=(o.b-s.b)/(o.a-s.a),l=(i-(o.b-c*o.a))/(c-r),!(u.a<l&&a.a<l||l<u.a&&l<a.a||s.a<l&&o.a<l||l<s.a&&l<o.a)}function wqn(n,t){var e,i,r,c,a,o;if(!(a=uG(cQ(n.c,t),190)))throw hv(new SM("Edge did not exist in input."));return i=jvn(a),!pE((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a))&&(e=new DU(n,i,o=new Ib),NA((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),e),nrn(a,yet,o)),vnn(t,(XYn(),L$t))&&!(!(r=uG(zDn(t,L$t),75))||FQ(r))&&(z8(r,new gm(c=new Ib)),nrn(a,"junctionPoints",c)),ZG(a,"container",s0(t).k),null}function dqn(n,t,e,i){var r,c,a,o,u,s;if(!P6(t)){if((s=e.eh((F$(t,16)?uG(t,16).gc():x5(t.Kc()))/n.a|0)).Ug(V9n,1),u=new Ga,o=0,i==(xdn(),JDt)||i==YDt)for(a=t.Kc();a.Ob();)r=uG(a.Pb(),40),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.a&&(o=r.f.a);else for(a=t.Kc();a.Ob();)r=uG(a.Pb(),40),u=zcn(Uhn(cT(vat,1),EZn,20,0,[u,new Mp(r)])),o<r.f.b&&(o=r.f.b);for(c=t.Kc();c.Ob();)kfn(r=uG(c.Pb(),40),(OQn(),NPt),o);s.Vg(),dqn(n,u,e,i)}}function gqn(n,t,e){var i,r,c,a,o,u;this.a=n,this.b=t,this.c=e,this.e=n7(Uhn(cT(But,1),EZn,177,0,[new ZP(n,t),new ZP(t,e),new ZP(e,n)])),this.f=n7(Uhn(cT(PNt,1),zZn,8,0,[n,t,e])),this.d=(i=YF(D$(this.b),this.a),r=YF(D$(this.c),this.a),c=YF(D$(this.c),this.b),a=i.a*(this.a.a+this.b.a)+i.b*(this.a.b+this.b.b),o=r.a*(this.a.a+this.c.a)+r.b*(this.a.b+this.c.b),u=2*(i.a*c.b-i.b*c.a),new MO((r.b*a-i.b*o)/u,(i.a*o-r.a*a)/u))}function pqn(n,t){var e,i,r,c,a,o;for(c=n.c,a=n.d,c2(n,null),u2(n,null),t&&oM(gK(oIn(a,(GYn(),Gpt))))?c2(n,XUn(a.i,(can(),Wjt),(KQn(),kRt))):c2(n,a),t&&oM(gK(oIn(c,(GYn(),hmt))))?u2(n,XUn(c.i,(can(),Vjt),(KQn(),_Rt))):u2(n,c),i=new Ww(n.b);i.a<i.c.c.length;)e=uG(N3(i),72),(r=uG(oIn(e,(jYn(),Xyt)),278))==(Zrn(),cxt)?kfn(e,Xyt,rxt):r==rxt&&kfn(e,Xyt,cxt);o=oM(gK(oIn(n,(GYn(),pmt)))),kfn(n,pmt,(qx(),!o)),n.a=fln(n.a)}function mqn(n,t){var e,i,r,c;return e=$kn(uG(oIn(t,(QGn(),cCt)),88)),0==n.b.b?null:(c=uG(l8(YJ(new fX(null,new h3(n.b,16)),new Ia),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),i=pK(yx(Wz(YJ((r=uG(l8(JJ(new fX(null,new h3(t.b,16)),new mp(c)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Oc(),new vp(e)),(sZ(),sZ(),Yot)))),uG(yx(lln(JJ(r.Oc(),new UI(e,i)))),40))}function vqn(n,t){var i,r,c,a,o,u,s,h,f,l,b;i=jx(new sk,n.f),u=n.i[t.c.i.p],l=n.i[t.d.i.p],o=t.c,f=t.d,a=o.a.b,h=f.a.b,u.b||(a+=o.n.b),l.b||(h+=f.n.b),s=t0(e.Math.max(0,a-h)),c=t0(e.Math.max(0,h-a)),b=e.Math.max(1,uG(oIn(t,(jYn(),uTt)),17).a)*B5(t.c.i.k,t.d.i.k),r=new PI(RKn(xS(DS($S(RS(new uk,b),c),i),uG(cQ(n.k,t.c),125))),RKn(xS(DS($S(RS(new uk,b),s),i),uG(cQ(n.k,t.d),125)))),n.c[t.p]=r}function kqn(n,t,i){var r,c,a,o,u;for(r=0,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)o="",0==(!(c=uG(Zkn(a),27)).n&&(c.n=new fV(lFt,c,1,7)),c.n).i||(o=uG(zrn((!c.n&&(c.n=new fV(lFt,c,1,7)),c.n),0),135).a),zsn(u=new E$(o),c),kfn(u,(mon(),Wft),c),u.a=r++,u.d.a=c.i+c.g/2,u.d.b=c.j+c.f/2,u.e.a=e.Math.max(c.g,1),u.e.b=e.Math.max(c.f,1),kD(t.e,u),VAn(i.f,c,u),uG(zDn(c,(rGn(),Lft)),101),$Pn()}function yqn(n,t){var e,i,r,c,a;t.Ug("Layer constraint postprocessing",1),0!=(a=n.b).c.length&&(u3(0,a.c.length),GHn(n,uG(a.c[0],30),uG(zq(a,a.c.length-1),30),e=new bQ(n),r=new bQ(n)),0==e.a.c.length||(o3(0,a.c.length),pC(a.c,0,e)),0==r.a.c.length||mv(a.c,r)),vR(n,(GYn(),Upt))&&(s_n(n,i=new bQ(n),c=new bQ(n)),0==i.a.c.length||(o3(0,a.c.length),pC(a.c,0,i)),0==c.a.c.length||mv(a.c,c)),t.Vg()}function Mqn(n){var t,e;switch(n){case 91:case 93:case 45:case 94:case 44:case 92:e="\\"+String.fromCharCode(n&D1n);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"+r1(t="0"+(n>>>0).toString(16),t.length-2,t.length):n>=P0n?"\\v"+r1(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&D1n)}return e}function Tqn(n){var t,e,i;if(sN(uG(oIn(n,(jYn(),JMt)),101)))for(e=new Ww(n.j);e.a<e.c.c.length;)(t=uG(N3(e),12)).j==(KQn(),FRt)&&((i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,kRt):NLn(t,_Rt));else{for(e=new Ww(n.j);e.a<e.c.c.length;)t=uG(N3(e),12),(i=uG(oIn(t,(GYn(),lmt)),10))?NLn(t,uG(oIn(i,Fpt),64)):t.e.c.length-t.g.c.length<0?NLn(t,(KQn(),kRt)):NLn(t,(KQn(),_Rt));kfn(n,JMt,($Pn(),oRt))}}function jqn(n){var t,e,i,r,c,a;for(this.e=new Zm,this.a=new Zm,e=n.b-1;e<3;e++)sR(n,0,uG(hyn(n,0),8));if(n.b<4)throw hv(new vM("At (least dimension + 1) control points are necessary!"));for(this.b=3,this.d=!0,this.c=!1,yxn(this,n.b+this.b-1),a=new Zm,c=new Ww(this.e),t=0;t<this.b-1;t++)kD(a,pK(N3(c)));for(r=Fkn(n,0);r.b!=r.d.c;)i=uG(I6(r),8),kD(a,pK(N3(c))),kD(this.a,new R1(i,a)),u3(0,a.c.length),a.c.splice(0,1)}function Eqn(n,t){var e,i,r,c,a,o,u;for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)for((c=uG(N3(a),10)).k==(zIn(),bbt)&&(o=uG(N9(new Fz(ix(qgn(c).a.Kc(),new h))),18),u=uG(N9(new Fz(ix(Xgn(c).a.Kc(),new h))),18),Gqn(c,oM(gK(oIn(o,(GYn(),pmt))))&&oM(gK(oIn(u,pmt)))?ufn(t):t)),i=new Fz(ix(Xgn(c).a.Kc(),new h));hDn(i);)Nhn(e=uG(N9(i),18),oM(gK(oIn(e,(GYn(),pmt))))?ufn(t):t)}function Sqn(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=uG(zq(t.n,t.n.c.length-1),209)).e+c.d+e.g+r<=i&&(uG(zq(t.n,t.n.c.length-1),209).f-n.f+e.f<=n.b||1==n.a.c.length))return ipn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return kD(t.b,e),a=uG(zq(t.n,t.n.c.length-1),209),kD(t.n,new c0(t.s,a.f+a.a+t.i,t.i)),zMn(uG(zq(t.n,t.n.c.length-1),209),e),nqn(t,e),!0}return!1}function Pqn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=iin(n,t,e),e,t,c),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))?(null!=a&&(r=n.Oj(a,r)),r=n.Nj(e,r),n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):(n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)),a):(a=iin(n,t,e),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))&&(r=null,null!=a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function Cqn(n,t){var e,i,r,c;if(t.Ug("Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new dDn(n)).i&&(r.i=aun(r,new pc)),e=uM(r.i)*r.f/(null==r.i&&(r.i=aun(r,new pc)),uM(r.i)),r.b>e)t.Vg();else{switch(uG(oIn(n,(jYn(),BTt)),351).g){case 2:c=new kc;break;case 0:c=new hc;break;default:c=new yc}if(i=c.og(n,r),!c.pg())switch(uG(oIn(n,zTt),352).g){case 2:i=KLn(r,i);break;case 1:i=pPn(r,i)}kzn(n,r,i),t.Vg()}else t.Vg()}function Iqn(n,t){var i,r,c,a,o,u,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(o=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(u=o/60|0,s=o%60,r=n.q.getDate(),n.q.getHours()+u>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+u,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 Oqn(n,t){var e,i,r,c;if(a3(n.d,n.e),n.c.a.$b(),0!=uM(pK(oIn(t.j,(jYn(),yyt))))||0!=uM(pK(oIn(t.j,yyt))))for(e=B3n,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r<c&&!((i=eXn(n,t))<e&&(e=i,Uon(n),0==e));r++);else for(e=vZn,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r<c&&!((i=iXn(n,t))<e&&(e=i,Uon(n),0==e));r++);}function Aqn(n,t){var e,i,r,c,a,o;for(r=new Zm,c=0,e=0,a=0;c<t.c.length-1&&e<n.gc();){for(i=uG(n.Xb(e),17).a+a;(u3(c+1,t.c.length),uG(t.c[c+1],17)).a<i;)++c;for(o=0,i-(u3(c,t.c.length),uG(t.c[c],17)).a>(u3(c+1,t.c.length),uG(t.c[c+1],17)).a-i&&++o,kD(r,(u3(c+o,t.c.length),uG(t.c[c+o],17))),a+=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a-i,++e;e<n.gc()&&uG(n.Xb(e),17).a+a<=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a;)++e;c+=1+o}return r}function Lqn(n,t){var e,i,r,c,a;for(a=new Fz(ix(qgn(t).a.Kc(),new h));hDn(a);)if(c=uG(N9(a),18),0==n.f.b?(r=c.c.i.k==(zIn(),dbt)&&!!c.c.i.c&&c.c.i.c.p==n.c,hDn(new Fz(ix(qgn(c.c.i).a.Kc(),new h)))?(e=uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c,i=c.c.i.k==bbt&&!!e&&e.p==n.c):i=!1):(r=c.c.i.k==(zIn(),dbt)&&c.c.i.p==n.c,i=c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.p==n.c),r||i)return!0;return!1}function Nqn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(l=new Zm,p=g8(r),g=t*n.a,w=0,a=new ek,o=new ek,u=new Zm,m=0,v=0,b=0,d=0,h=0,f=0;0!=p.a.gc();)(s=ygn(p,c,o))&&(p.a.Bc(s),mv(u.c,s),a.a.zc(s,a),w=n.f[s.p],m+=n.e[s.p]-w*n.b,v+=n.c[s.p]*n.b,f+=w*n.b,d+=n.e[s.p]),(!s||0==p.a.gc()||m>=g&&n.e[s.p]>w*n.b||v>=i*g)&&(mv(l.c,u),u=new Zm,Qon(o,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=v,m=v,v=0,f=0,d=0);return new WO(b,l)}function $qn(n){var t,e,i,r,c;if(!n.d){if(c=new js,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,$qn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new fV(p_t,n,11,10)),i=new DD(n.q);i.e!=i.i.gc();++r)uG(Zkn(i),411);CW(c,(!n.q&&(n.q=new fV(p_t,n,11,10)),n.q)),lbn(c),n.d=new vL((uG(zrn(gZ((tQ(),M_t).o),9),19),c.i),c.g),n.e=uG(c.g,688),null==n.e&&(n.e=W_t),y9(n).b&=-17}return n.d}function Dqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),u=0,r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(udn(c,e))return u;++u}}else if(null!=e){for(o=0;o<n.i;++o)if(c=r[o],s.am(c.Lk())){if(udn(e,c.md()))return u;++u}if(i)for(u=0,a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(xA(e)===xA(fK(n,uG(c.md(),58))))return u;++u}}else for(a=0;a<n.i;++a)if(c=r[a],s.am(c.Lk())){if(null==c.md())return u;++u}return-1}function xqn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(e.Xh(t)&&(h=(b=t)?uG(i,54).gi(b):null))if(d=e.Nh(t,n.a),(w=t.t)>1||-1==w)if(f=uG(d,71),l=uG(h,71),f.dc())l.$b();else for(a=!!lMn(t),c=0,o=n.a?f.Kc():f.Ii();o.Ob();)s=uG(o.Pb(),58),(r=uG(ain(n,s),58))?(a?-1==(u=l.dd(r))?l.Gi(c,r):c!=u&&l.Ui(c,r):l.Gi(c,r),++c):n.b&&!a&&(l.Gi(c,s),++c);else null==d?h.Wb(null):null==(r=ain(n,d))?n.b&&!lMn(t)&&h.Wb(d):h.Wb(r)}function Rqn(n,t){var i,r,c,a,o,u,s,f;for(i=new Ne,c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&_Pn(u=r.c.i,$bt)){if(-1==(f=U_n(n,u,$bt,Nbt)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Zm),kD(i.a,u)}for(o=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(o);)if(!v9(a=uG(N9(o),18))&&_Pn(s=a.d.i,Nbt)){if(-1==(f=U_n(n,s,Nbt,$bt)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Zm),kD(i.c,s)}return i}function Kqn(n,t,e,i){var r,c,a,o,u,s,h;if(e.d.i!=t.i){for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),h=e.d,u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,h),s=new N4(e.b,0);s.b<s.d.gc();)MK(s.b<s.d.gc()),xA(oIn(u=uG(s.d.Xb(s.c=s.b++),72),Xyt))===xA((Zrn(),rxt))&&(kfn(u,Dpt,e),LQ(s),kD(c.b,u));wDn(r,a,o)}}function Fqn(n,t,e,i){var r,c,a,o,u,s;if(e.c.i!=t.i)for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,t),wDn(r,a,o),s=new N4(e.b,0);s.b<s.d.gc();)MK(s.b<s.d.gc()),u=uG(s.d.Xb(s.c=s.b++),72),uG(oIn(u,Xyt),278)==(Zrn(),rxt)&&(vR(u,Dpt)||kfn(u,Dpt,e),LQ(s),kD(c.b,u))}function _qn(n){var t,e,i,r;if(b_n(),t=t0(n),n<qot.length)return qot[t];if(n<=50)return t$n((cHn(),Kot),t);if(n<=$1n)return D9(t$n(Got[1],t),t);if(n>1e6)throw hv(new wM("power of ten too big"));if(n<=vZn)return D9(t$n(Got[1],t),t);for(r=i=t$n(Got[1],vZn),e=Bsn(n-vZn),t=t0(n%vZn);dwn(e,vZn)>0;)r=j5(r,i),e=$gn(e,vZn);for(r=D9(r=j5(r,t$n(Got[1],t)),vZn),e=Bsn(n-vZn);dwn(e,vZn)>0;)r=D9(r,vZn),e=$gn(e,vZn);return r=D9(r,t)}function Bqn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n.a);a.a<a.c.c.length;)if((c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),kRt)||r==_Rt))for(i=new Fz(ix(Ggn(c).a.Kc(),new h));hDn(i);)0!=(t=(e=uG(N9(i),18)).a).b&&((o=e.c).i==c&&(MK(0!=t.b),uG(t.a.a.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o.i.n,o.n,o.a])).b),(u=e.d).i==c&&(MK(0!=t.b),uG(t.c.b.c,8).b=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).b))}function Hqn(n,t,i,r){var c,a,o;if(this.j=new Zm,this.k=new Zm,this.b=new Zm,this.c=new Zm,this.e=new cN,this.i=new Uk,this.f=new nv,this.d=new Zm,this.g=new Zm,kD(this.b,n),kD(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=uG(oIn(r,(jYn(),bMt)),75))for(o=Fkn(c,0);o.b!=o.d.c;)gcn((a=uG(I6(o),8)).a,n.a)&&aq(this.i,a);i&&kD(this.j,i),kD(this.k,r)}function Uqn(n,t,e,i){var r,c,a,o,u,s,h;for(o=-1,h=new Ww(n);h.a<h.c.c.length;)(s=uG(N3(h),118)).g=o--,a=r=pz(t6(nY(JJ(new fX(null,new h3(s.f,16)),new ua),new sa)).d),u=c=pz(t6(nY(JJ(new fX(null,new h3(s.k,16)),new ha),new fa)).d),i||(a=pz(t6(nY(new fX(null,new h3(s.f,16)),new la)).d),u=pz(t6(nY(new fX(null,new h3(s.k,16)),new aa)).d)),s.d=a,s.a=r,s.i=u,s.b=c,0==u?s8(e,s,e.c.b,e.c):0==a&&s8(t,s,t.c.b,t.c)}function Gqn(n,t){var i,r,c,a,o;if(n.k==(zIn(),bbt)&&(i=n.k!=bbt||Qj(JJ(uG(oIn(n,(GYn(),gmt)),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?t:(Ajn(),xxt),kfn(n,(GYn(),Qpt),i),i!=(Ajn(),Dxt)))for(r=uG(oIn(n,rmt),18),o=uM(pK(oIn(r,(jYn(),tMt)))),a=0,i==$xt?a=n.o.b-e.Math.ceil(o/2):i==xxt&&(a=e.Math.ceil(n.o.b-uM(pK(oIn(HQ(n),pTt)))-o)/2,n.o.b-=uM(pK(oIn(HQ(n),pTt))),n.o.b-=o),c=new Ww(n.j);c.a<c.c.c.length;)uG(N3(c),12).n.b=a}function qqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(r=!0,a=new Ww(n.b);a.a<a.c.c.length;){for(c=uG(N3(a),30),s=T0n,h=null,u=new Ww(c.a);u.a<u.c.c.length;){if(o=uG(N3(u),10),f=uM(t.p[o.p])+uM(t.d[o.p])-o.d.d,i=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a,!(f>s&&i>s)){r=!1,e._g()&&e.bh("bk node placement breaks on "+o+" which should have been after "+h);break}h=o,s=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a}if(!r)break}return e._g()&&e.bh(t+" is feasible: "+r),r}function Xqn(n,t,e,i){var r,c,a,o,u,s,h;if(Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),r=0,t){for(kfn(a=new lOn,(GYn(),rmt),t),kfn(c,rmt,t.i),NLn(a,(KQn(),_Rt)),o2(a,c),s=0,h=(u=x4(t.e)).length;s<h;++s)u2(u[s],a);kfn(t,lmt,c),++r}if(e){for(o=new lOn,kfn(c,(GYn(),rmt),e.i),kfn(o,rmt,e),NLn(o,(KQn(),kRt)),o2(o,c),s=0,h=(u=x4(e.g)).length;s<h;++s)c2(u[s],o);kfn(e,lmt,c),++r}return kfn(c,(GYn(),Opt),xwn(r)),mv(i.c,c),c}function zqn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(e=new _w(new Fw(n.c.b).a.vc().Kc());e.a.Ob();)o=uG(e.a.Pb(),44),null==(r=(t=uG(o.md(),143)).a)&&(r=""),!(i=UK(n.c,r))&&0==r.length&&(i=Qwn(n)),i&&!Wpn(i.c,t,!1)&&aq(i.c,t);for(a=Fkn(n.a,0);a.b!=a.d.c;)c=uG(I6(a),487),s=C9(n.c,c.a),l=C9(n.c,c.b),s&&l&&aq(s.c,new WO(l,c.c));for(BY(n.a),f=Fkn(n.b,0);f.b!=f.d.c;)h=uG(I6(f),487),t=HK(n.c,h.a),u=C9(n.c,h.b),t&&u&&cP(t,u,h.c);BY(n.b)}function Vqn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;c=new Cb(n),n9((a=new Zjn).g),n9(a.j),$V(a.b),n9(a.d),n9(a.i),$V(a.k),$V(a.c),$V(a.e),b=iNn(a,c,null),Mxn(a,c),r=b,t&&(o=wXn(s=new Cb(t)),iOn(r,Uhn(cT(nNt,1),EZn,536,0,[o]))),l=!1,f=!1,e&&(s=new Cb(e),Yet in s.a&&(l=v0(s,Yet).qe().a),Zet in s.a&&(f=v0(s,Zet).qe().a)),h=lj(xcn(new fy,l),f),SOn(new au,r,h),Yet in c.a&&nrn(c,Yet,null),(l||f)&&(mGn(h,u=new _y,l,f),nrn(c,Yet,u)),i=new bm(a),sln(new jN(r),i)}function Wqn(n,t,e){var i,r,c,a,o,u,s,h,f;for(a=new DEn,s=Uhn(cT(YHt,1),W1n,28,15,[0]),r=-1,c=0,i=0,u=0;u<n.b.c.length;++u){if(!((h=uG(zq(n.b,u),443)).b>0)){if(r=-1,32==VJ(h.c,0)){if(f=s[0],win(t,s),s[0]>f)continue}else if(WZ(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=u,c=s[0],i=0),r>=0){if(o=h.b,u==r&&0==(o-=i++))return 0;if(!rJn(t,s,h,o,a)){u=r-1,s[0]=c;continue}}else if(r=-1,!rJn(t,s,h,0,a))return 0}return LQn(a,e)?s[0]:0}function Qqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(h=new Kz(new Fd(e)),zV(o=Inn(ZHt,B2n,28,n.f.e.c.length,16,1),o.length),e[t.a]=0,s=new Ww(n.f.e);s.a<s.c.c.length;)(u=uG(N3(s),153)).a!=t.a&&(e[u.a]=vZn),kG(_Cn(h,u),D0n);for(;0!=h.b.c.length;)for(o[(f=uG(hin(h),153)).a]=!0,c=rx(new RE(n.b,f),0);c.c;)o[(l=mTn(r=uG(Ein(c),290),f)).a]||(a=vR(r,(Bjn(),ilt))?uM(pK(oIn(r,ilt))):n.c,(i=e[f.a]+a)<e[l.a]&&(e[l.a]=i,yon(h,l),kG(_Cn(h,l),D0n)))}function Jqn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(a=n.o,i=Inn(YHt,W1n,28,a,15,1),r=Inn(YHt,W1n,28,a,15,1),e=n.p,t=Inn(YHt,W1n,28,e,15,1),c=Inn(YHt,W1n,28,e,15,1),s=0;s<a;s++){for(f=0;f<e&&!eTn(n,s,f);)++f;i[s]=f}for(h=0;h<a;h++){for(f=e-1;f>=0&&!eTn(n,h,f);)--f;r[h]=f}for(b=0;b<e;b++){for(o=0;o<a&&!eTn(n,o,b);)++o;t[b]=o}for(w=0;w<e;w++){for(o=a-1;o>=0&&!eTn(n,o,w);)--o;c[w]=o}for(u=0;u<a;u++)for(l=0;l<e;l++)u<c[l]&&u>t[l]&&l<r[u]&&l>i[u]&&HBn(n,u,l,!1,!0)}function Yqn(n){var t,e,i,r,c,a,o,u;e=oM(gK(oIn(n,(rGn(),yft)))),c=n.a.c.d,o=n.a.d.d,e?(a=vD(YF(new MO(o.a,o.b),c),.5),u=vD(D$(n.e),.5),t=YF(JF(new MO(c.a,c.b),a),u),_R(n.d,t)):(r=uM(pK(oIn(n.a,Fft))),i=n.d,c.a>=o.a?c.b>=o.b?(i.a=o.a+(c.a-o.a)/2+r,i.b=o.b+(c.b-o.b)/2-r-n.e.b):(i.a=o.a+(c.a-o.a)/2+r,i.b=c.b+(o.b-c.b)/2+r):c.b>=o.b?(i.a=c.a+(o.a-c.a)/2+r,i.b=o.b+(c.b-o.b)/2+r):(i.a=c.a+(o.a-c.a)/2+r,i.b=c.b+(o.b-c.b)/2-r-n.e.b))}function Zqn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Ms,c=new Ms,null==(t=V_t).a.zc(n,t)){for(r=new DD(n1(n));r.e!=r.i.gc();)CW(a,Zqn(uG(Zkn(r),29)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),i=new DD(n.s);i.e!=i.i.gc();)F$(e=uG(Zkn(i),179),102)&&ttn(c,uG(e,19));lbn(c),n.r=new JG(n,(uG(zrn(gZ((tQ(),M_t).o),6),19),c.i),c.g),CW(a,n.r),lbn(a),n.f=new vL((uG(zrn(gZ(M_t.o),5),19),a.i),a.g),y9(n).b&=-3}return n.f}function nXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,$3n),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new ct))),U4(n,$3n,D3n,Jkn(ift)),U4(n,$3n,x3n,Jkn(Jht)),U4(n,$3n,R3n,Jkn(Xht)),U4(n,$3n,K3n,Jkn(Yht)),U4(n,$3n,D2n,Jkn(tft)),U4(n,$3n,x2n,Jkn(nft)),U4(n,$3n,$2n,Jkn(eft)),U4(n,$3n,R2n,Jkn(Zht)),U4(n,$3n,I3n,Jkn(Vht)),U4(n,$3n,O3n,Jkn(zht)),U4(n,$3n,A3n,Jkn(Wht)),U4(n,$3n,L3n,Jkn(Qht))}function tXn(){tXn=E,JKt=Uhn(cT(JHt,1),N1n,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),YKt=new RegExp("[ \t\n\r\f]+");try{QKt=Uhn(cT(iBt,1),EZn,2114,0,[new Km((wL(),Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",bF((qy(),qy(),Hat))))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm",bF(Hat))),new Km(Cmn("yyyy-MM-dd",bF(Hat)))])}catch(n){if(!F$(n=Ehn(n),82))throw hv(n)}}function eXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==rHn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=rHn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=rHn(n,t)}while(r>e);return r}function iXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==BAn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=BAn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=BAn(n,t)}while(r>e);return r}function rXn(n,t,i,r){var c,a,o,u,s,h,f,l,b;return h=(s=YF(new MO(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=atn(n,c=JF(new MO(i.a,i.b),vD(new MO(r.a,r.b),.5))),o=atn(JF(new MO(n.a,n.b),t),c),u=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a<o&&a<=u?new MO(n.a,n.b):o<=u?JF(new MO(n.a,n.b),t):null):null:l>=0&&l<=1&&b>=0&&b<=1?JF(new MO(n.a,n.b),vD(new MO(t.a,t.b),l)):null}function cXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(o=new Ww(n.a);o.a<o.c.c.length;)(a=uG(N3(o),10)).k==(zIn(),lbt)&&((r=uG(oIn(a,Fpt),64))==(KQn(),kRt)?a.n.a+=e.a-t.a:r==KRt&&(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 aXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(a=new Ww(n.a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&((r=uG(oIn(c,Fpt),64))==(KQn(),kRt)?c.n.a+=e.a-t.a:r==KRt&&(c.n.b+=e.b-t.b));o=n.d,n.f.a=e.a-o.b-o.c,n.f.b=e.b-o.d-o.a}function oXn(n){var t,i,r,c,a,o,u,s,h,f;for(s=new Kw(new Lw(O$n(n)).a.vc().Kc());s.a.Ob();){for(r=uG(s.a.Pb(),44),h=0,f=0,h=(u=uG(r.ld(),10)).d.d,f=u.o.b+u.d.a,n.d[u.p]=0,t=u;(c=n.a[t.p])!=u;)i=rkn(t,c),o=0,o=n.c==(b0(),hSt)?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=uM(n.d[t.p])+o,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=u;do{n.d[t.p]=uM(n.d[t.p])+h,t=n.a[t.p]}while(t!=u);n.b[u.p]=h+f}}function uXn(n,t,i){var r,c,a,o,u,s,h,f,l,b;for(a=0,o=n.t,c=0,r=0,s=0,b=0,l=0,i&&(n.n.c.length=0,kD(n.n,new c0(n.s,n.t,n.i))),u=0,f=new Ww(n.b);f.a<f.c.c.length;)a+(h=uG(N3(f),27)).g+(u>0?n.i:0)>t&&s>0&&(a=0,o+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,kD(n.n,new c0(n.s,o,n.i))),u=0),b+=h.g+(u>0?n.i:0),s=e.Math.max(s,h.f),i&&zMn(uG(zq(n.n,l),209),h),a+=h.g+(u>0?n.i:0),++u;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,ijn(n.j)),new gY(n.s,n.t,c,r)}function sXn(n){var t,i,r,c,a,o,u,s,h,f,l;for(n.b=!1,f=M0n,u=T0n,l=M0n,s=T0n,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=uG(i.Pb(),272)).a,f=e.Math.min(f,r.c),u=e.Math.max(u,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Ww(t.c);a.a<a.c.c.length;)(c=uG(N3(a),407)).a.a?(o=(h=r.d+c.b.b)+c.c,l=e.Math.min(l,h),s=e.Math.max(s,o)):(o=(h=r.c+c.b.a)+c.c,f=e.Math.min(f,h),u=e.Math.max(u,o));n.a=new MO(u-f,s-l),n.c=new MO(f+n.d.a,l+n.d.b)}function hXn(n){var t,e,i,r,c,a;if(!n.a){if(n.o=null,a=new Dm(n),t=new Ts,null==(e=V_t).a.zc(n,e)){for(c=new DD(n1(n));c.e!=c.i.gc();)CW(a,hXn(uG(Zkn(c),29)));e.a.Bc(n),e.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),r=new DD(n.s);r.e!=r.i.gc();)F$(i=uG(Zkn(r),179),331)&&ttn(t,uG(i,35));lbn(t),n.k=new YG(n,(uG(zrn(gZ((tQ(),M_t).o),7),19),t.i),t.g),CW(a,n.k),lbn(a),n.a=new vL((uG(zrn(gZ(M_t.o),4),19),a.i),a.g),y9(n).b&=-2}return n.a}function fXn(n,t,e,i){var r,c,a,o,u,s,h;if(h=VKn(n.e.Dh(),t),r=0,c=uG(n.g,124),u=null,PP(),uG(t,69).xk()){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(a,e)){u=a;break}++r}}else if(null!=e){for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(udn(e,a.md())){u=a;break}++r}}else for(o=0;o<n.i;++o)if(a=c[o],h.am(a.Lk())){if(null==a.md()){u=a;break}++r}return u&&(uN(n.e)&&(s=t.Jk()?new i8(n.e,4,t,e,null,r,!0):VZ(n,t.tk()?2:1,t,e,t.ik(),-1,!0),i?i.nj(s):i=s),i=NHn(n,u,i)),i}function lXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d;switch(w=0,d=0,s=c.c,u=c.b,f=i.f,b=i.g,t.g){case 0:w=r.i+r.g+o,d=n.c?eCn(w,a,r,o):r.j,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 1:d=r.j+r.f+o,w=n.c?tCn(d,a,r,o):r.i,l=e.Math.max(s,w+b),h=e.Math.max(u,d+f);break;case 2:w=s+o,d=0,l=s+o+b,h=e.Math.max(u,f);break;case 3:w=0,d=u+o,l=e.Math.max(s,b),h=u+o+f;break;default:throw hv(new vM("IllegalPlacementOption."))}return new Mvn(n.a,l,h,t,w,d)}function bXn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if(u=n.d,l=uG(oIn(n,(GYn(),Pmt)),15),t=uG(oIn(n,Ept),15),l||t){if(a=uM(pK(Omn(n,(jYn(),lTt)))),o=uM(pK(Omn(n,bTt))),b=0,l){for(h=0,c=l.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),b+=r.o.a;b+=a*(l.gc()-1),u.d+=h+o}if(i=0,t){for(h=0,c=t.Kc();c.Ob();)r=uG(c.Pb(),10),h=e.Math.max(h,r.o.b),i+=r.o.a;i+=a*(t.gc()-1),u.a+=h+o}(s=e.Math.max(b,i))>n.o.a&&(f=(s-n.o.a)/2,u.b=e.Math.max(u.b,f),u.c=e.Math.max(u.c,f))}}function wXn(n){var t,e,i,r,c,a;for(YL(r=new r4,(Whn(),YLt)),i=new Jw(new IM(new JE(n,Yon(n,Inn($ot,zZn,2,0,6,1))).b));i.b<i.d.gc();)MK(i.b<i.d.gc()),e=mK(i.d.Xb(i.c=i.b++)),(c=DVn(NFt,e))&&null!=(a=vVn(c,(t=v0(n,e)).te()?t.te().a:t.qe()?""+t.qe().a:t.re()?""+t.re().a:t.Ib()))&&(($x(c.j,(Rkn(),sNt))||$x(c.j,hNt))&&vfn(trn(r,bFt),c,a),$x(c.j,oNt)&&vfn(trn(r,aFt),c,a),$x(c.j,fNt)&&vfn(trn(r,wFt),c,a),$x(c.j,uNt)&&vfn(trn(r,lFt),c,a));return r}function dXn(n,t,e){var i,r,c,a,o,u,s,h;if(r=uG(n.g,124),EFn(n.e,t))return PP(),uG(t,69).xk()?new Cq(t,n):new OA(t,n);for(s=VKn(n.e.Dh(),t),i=0,o=0;o<n.i;++o){if(a=(c=r[o]).Lk(),s.am(a)){if(PP(),uG(t,69).xk())return c;if(a==(m$n(),NBt)||a==OBt){for(u=new lx(cpn(c.md()));++o<n.i;)((a=(c=r[o]).Lk())==NBt||a==OBt)&&JA(u,cpn(c.md()));return g_(uG(t.Hk(),156),u.a)}return null!=(h=c.md())&&e&&F$(t,102)&&uG(t,19).Bb&P0n&&(h=ONn(n,t,o,i,h)),h}++i}return t.ik()}function gXn(n,t,e,i){var r,c,a,o,u,s;if(u=VKn(n.e.Dh(),t),c=uG(n.g,124),EFn(n.e,t)){for(r=0,o=0;o<n.i;++o)if(a=c[o],u.am(a.Lk())){if(r==e)return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&uG(t,19).Bb&P0n&&(s=ONn(n,t,o,r,s)),s);++r}throw hv(new dM(Hit+e+Vet+r))}for(r=0,o=0;o<n.i;++o){if(a=c[o],u.am(a.Lk()))return PP(),uG(t,69).xk()?a:(null!=(s=a.md())&&i&&F$(t,102)&&uG(t,19).Bb&P0n&&(s=ONn(n,t,o,r,s)),s);++r}return t.ik()}function pXn(){pXn=E,Hot=Uhn(cT(YHt,1),W1n,28,15,[j1n,1162261467,d1n,1220703125,362797056,1977326743,d1n,387420489,g0n,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,d1n,1291467969,1544804416,1838265625,60466176]),Uot=Uhn(cT(YHt,1),W1n,28,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 mXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(a=n.e,0==(u=t.e))return n;if(0==a)return 0==t.e?t:new VV(-t.e,t.d,t.a);if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a<0&&(e=Men(e)),u<0&&(i=Men(i)),cHn(),BA($gn(e,i),0)?Rmn($gn(e,i)):hW(Rmn(Men($gn(e,i))));if(-1==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))f=-u,h=a==u?t7(t.a,o,n.a,c):Cnn(t.a,o,n.a,c);else if(f=a,a==u){if(0==r)return cHn(),_ot;h=t7(n.a,c,t.a,o)}else h=Cnn(n.a,c,t.a,o);return K4(s=new VV(f,h.length,h)),s}function vXn(n,t){var e,i,r;if(r=PGn(t),!t.c&&(t.c=new fV(wFt,t,9,9)),kS(new fX(null,(!t.c&&(t.c=new fV(wFt,t,9,9)),new h3(t.c,16))),new Jd(r)),CWn(t,i=uG(oIn(r,(GYn(),Hpt)),21)),i.Hc((r_n(),tpt)))for(e=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));e.e!=e.i.gc();)pQn(n,t,r,uG(Zkn(e),123));return 0!=uG(zDn(t,(jYn(),DMt)),181).gc()&&u_n(t,r),oM(gK(oIn(r,HMt)))&&i.Fc(apt),vR(r,fTt)&&iM(new omn(uM(pK(oIn(r,fTt)))),r),xA(zDn(t,rMt))===xA((Own(),Ixt))?UYn(n,t,r):dYn(n,t,r),r}function kXn(n){var t,e,i,r,c,a,o;for(i=new Ww(n.b);i.a<i.c.c.length;)for(c=new Ww(T3(uG(N3(i),30).a));c.a<c.c.c.length;)if(Nin(r=uG(N3(c),10))&&!(e=uG(oIn(r,(GYn(),Spt)),313)).g&&e.d)for(t=e,o=e.d;o;)Q_n(o.i,o.k,!1,!0),Ien(t.a),Ien(o.i),Ien(o.k),Ien(o.b),u2(o.c,t.c.d),u2(t.c,null),a2(t.a,null),a2(o.i,null),a2(o.k,null),a2(o.b,null),(a=new O5(t.i,o.a,t.e,o.j,o.f)).k=t.k,a.n=t.n,a.b=t.b,a.c=o.c,a.g=t.g,a.d=o.d,kfn(t.i,Spt,a),kfn(o.a,Spt,a),o=o.d,t=a}function yXn(n,t){var e,i,r,c,a,o,u;if(null==n)return null;if(0==(c=n.length))return"";for(u=Inn(JHt,N1n,28,c,15,1),Knn(0,c,n.length),Knn(0,c,u.length),gW(n,0,c,u,0),e=null,o=t,r=0,a=0;r<c;r++)i=u[r],aZn(),i<=32&&2&vHt[i]?o?(!e&&(e=new fx(n)),mR(e,r-a++)):(o=t,32!=i&&(!e&&(e=new fx(n)),psn(e,r-a,r-a+1,String.fromCharCode(32)))):o=!1;return o?e?(c=e.a.length)>0?r1(e.a,0,c-1):"":(Knn(0,c-1,n.length),n.substr(0,c-1)):e?e.a:n}function MXn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Sort By Input Model "+oIn(n,(jYn(),Syt)),1),r=0,i=new Ww(n.b);i.a<i.c.c.length;){for(e=uG(N3(i),30),u=0==r?0:r-1,o=uG(zq(n.b,u),30),a=new Ww(e.a);a.a<a.c.c.length;)xA(oIn(c=uG(N3(a),10),JMt))!==xA(($Pn(),rRt))&&xA(oIn(c,JMt))!==xA(cRt)&&(hZ(),f$(c.j,new Gbn(o,uG(oIn(n,Syt),284),qjn(c),oM(gK(oIn(n,Eyt))))),t.bh("Node "+c+" ports: "+c.j));hZ(),f$(e.a,new xon(o,uG(oIn(n,Syt),284),uG(oIn(n,Tyt),390))),t.bh("Layer "+r+": "+e),++r}t.Vg()}function TXn(n,t){var e,i,r,c,a;if(a=uG(t,138),pxn(n),pxn(a),null!=a.b){if(n.c=!0,null==n.b)return n.b=Inn(YHt,W1n,28,a.b.length,15,1),void qGn(a.b,0,n.b,0,a.b.length);for(c=Inn(YHt,W1n,28,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 jXn(n,t){var e,i,r,c,a,o,u,s,h,f;return e=oM(gK(oIn(n,(GYn(),Ypt)))),o=oM(gK(oIn(t,Ypt))),i=uG(oIn(n,Zpt),12),u=uG(oIn(t,Zpt),12),r=uG(oIn(n,nmt),12),s=uG(oIn(t,nmt),12),h=!!i&&i==u,f=!!r&&r==s,e||o?(c=(!oM(gK(oIn(n,Ypt)))||oM(gK(oIn(n,Jpt))))&&(!oM(gK(oIn(t,Ypt)))||oM(gK(oIn(t,Jpt)))),a=!(oM(gK(oIn(n,Ypt)))&&oM(gK(oIn(n,Jpt)))||oM(gK(oIn(t,Ypt)))&&oM(gK(oIn(t,Jpt)))),new xB(h&&c||f&&a,h,f)):new xB(uG(N3(new Ww(n.j)),12).p==uG(N3(new Ww(t.j)),12).p,h,f)}function EXn(n){var t,i,r,c,a,o,u,s;for(r=0,i=0,s=new lS,t=0,u=new Ww(n.n);u.a<u.c.c.length;)0==(o=uG(N3(u),209)).c.c.length?s8(s,o,s.c.b,s.c):(r=e.Math.max(r,o.d),i+=o.a+(t>0?n.i:0)),++t;for(dgn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=M0n,n.p=M0n,a=new Ww(n.b);a.a<a.c.c.length;)c=uG(N3(a),27),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),ijn(n.j)}function SXn(n){var t,e,i,r;return 64&n.Db?Egn(n):(t=new lx(Dtt),(i=n.k)?JA(JA((t.a+=' "',t),i),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(r=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new f_(cFt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",JA(t,KD(new FM,new DD(n.b))),e&&(t.a+="]"),t.a+=Y4n,e&&(t.a+="["),JA(t,KD(new FM,new DD(n.c))),e&&(t.a+="]"),t.a)}function PXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(k=n.c,y=t.c,e=Ten(k.a,n,0),i=Ten(y.a,t,0),m=uG(jmn(n,(can(),Vjt)).Kc().Pb(),12),j=uG(jmn(n,Wjt).Kc().Pb(),12),v=uG(jmn(t,Vjt).Kc().Pb(),12),E=uG(jmn(t,Wjt).Kc().Pb(),12),g=x4(m.e),M=x4(j.g),p=x4(v.e),T=x4(E.g),$jn(n,i,y),s=0,b=(c=p).length;s<b;++s)u2(c[s],m);for(h=0,w=(a=T).length;h<w;++h)c2(a[h],j);for($jn(t,e,k),f=0,d=(o=g).length;f<d;++f)u2(o[f],v);for(u=0,l=(r=M).length;u<l;++u)c2(r[u],E)}function CXn(n){var t,i,r,c,a,o,u;for(r=new DD((!(o=uG(zDn(n,(SK(),zCt)),27)).e&&(o.e=new f_(aFt,o,7,4)),o.e));r.e!=r.i.gc();)i=uG(Zkn(r),74),u=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).j,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).k),a=new MO(uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).b,uG(zrn((!i.a&&(i.a=new fV(oFt,i,6,6)),i.a),0),166).c),c=new MO(a.a-u.a,a.b-u.b),t=e.Math.atan2(c.b,c.a),uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84).qf((jOn(),XIt),t)}function IXn(n,t){var i,r,c,a,o,u,s,h,f;for(t.Ug("Interactive Node Reorderer",1),!n.a&&(n.a=new fV(bFt,n,10,11)),f=n.a,u=new Zm,c=new DD(f);c.e!=c.i.gc();)vnn(i=uG(Zkn(c),27),(S_n(),JOt))&&mv(u.c,i);for(a=new Ww(u);a.a<a.c.c.length;)rin(f,i=uG(N3(a),27));for(hZ(),f$(u,new Ro),o=new Ww(u);o.a<o.c.c.length;)i=uG(N3(o),27),h=uG(zDn(i,(S_n(),JOt)),17).a,$dn(f,h=e.Math.min(h,f.i),i);for(s=0,r=new DD(f);r.e!=r.i.gc();)Myn(i=uG(Zkn(r),27),(S_n(),QOt),xwn(s)),++s;t.Vg()}function OXn(n,t,i){var r,c,a,o,u,s,h;return e.Math.abs(t.s-t.c)<t4n||e.Math.abs(i.s-i.c)<t4n?0:(r=FKn(n,t.j,i.e),c=FKn(n,i.j,t.e),a=0,-1==r||-1==c?(-1==r&&(new A2((_7(),$St),i,t,1),++a),-1==c&&(new A2((_7(),$St),t,i,1),++a)):(o=Hwn(t.j,i.s,i.c),o+=Hwn(i.e,t.s,t.c),u=Hwn(i.j,t.s,t.c),(s=r+16*o)<(h=c+16*(u+=Hwn(t.e,i.s,i.c)))?new A2((_7(),DSt),t,i,h-s):s>h?new A2((_7(),DSt),i,t,s-h):s>0&&h>0&&(new A2((_7(),DSt),t,i,0),new A2(DSt,i,t,0))),a)}function AXn(n,t,e){var i,r,c;for(n.a=new Zm,c=Fkn(t.b,0);c.b!=c.d.c;){for(r=uG(I6(c),40);uG(oIn(r,(QGn(),ACt)),17).a>n.a.c.length-1;)kD(n.a,new WO(B3n,G9n));i=uG(oIn(r,ACt),17).a,e==(xdn(),JDt)||e==YDt?(r.e.a<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.a),r.e.a+r.f.a>uM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.a+r.f.a)):(r.e.b<uM(pK(uG(zq(n.a,i),42).a))&&uw(uG(zq(n.a,i),42),r.e.b),r.e.b+r.f.b>uM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.b+r.f.b))}}function LXn(n,t,e,i){var r,c,a,o,u,s;if(c=pgn(i),!oM(gK(oIn(i,(jYn(),jMt))))&&!oM(gK(oIn(n,uMt)))||sN(uG(oIn(n,JMt),101)))switch(o2(o=new lOn,n),t?((s=o.n).a=t.a-n.n.a,s.b=t.b-n.n.b,DOn(s,0,0,n.o.a,n.o.b),NLn(o,ZUn(o,c))):(r=Ipn(c),NLn(o,e==(can(),Wjt)?r:Gdn(r))),a=uG(oIn(i,(GYn(),Hpt)),21),u=o.j,c.g){case 2:case 1:(u==(KQn(),yRt)||u==KRt)&&a.Fc((r_n(),cpt));break;case 4:case 3:(u==(KQn(),kRt)||u==_Rt)&&a.Fc((r_n(),cpt))}else r=Ipn(c),o=XUn(n,e,e==(can(),Wjt)?r:Gdn(r));return o}function NXn(n,t){var i,r,c,a,o;for(o=new bsn(new Nw(n.f.b).a);o.b;){if(c=uG((a=von(o)).ld(),602),1==t){if(c.Af()!=(xdn(),nxt)&&c.Af()!=QDt)continue}else if(c.Af()!=(xdn(),JDt)&&c.Af()!=YDt)continue;switch(r=uG(uG(a.md(),42).b,86),i=uG(uG(a.md(),42).a,194).c,c.Af().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 $Xn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=Inn(YHt,W1n,28,t.b.c.length,15,1),h=Inn(vbt,p1n,273,t.b.c.length,0,1),s=Inn(pbt,e6n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b<w;++b){for(g=0,o=new Ww((f=l[b]).e);o.a<o.c.c.length;)++u[r=GL((c=uG(N3(o),10)).c)],d=uM(pK(oIn(t,(jYn(),dTt)))),u[r]>0&&s[r]&&(d=y$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Ww(f.e);a.a<a.c.c.length;)(c=uG(N3(a),10)).n.b=g+c.d.d,(i=c.c).c.b=g+c.d.d+c.o.b+c.d.a,h[Ten(i.b.b,i,0)]=c.k,s[Ten(i.b.b,i,0)]=c}}function DXn(n,t){var e,i,r,c,a,o,u,s,f,l,b;for(i=new Fz(ix(eRn(t).a.Kc(),new h));hDn(i);)F$(zrn((!(e=uG(N9(i),74)).b&&(e.b=new f_(cFt,e,4,7)),e.b),0),193)||(u=lCn(uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84)),z$n(e)||(a=t.i+t.g/2,o=t.j+t.f/2,f=u.i+u.g/2,l=u.j+u.f/2,(b=new sj).a=f-a,b.b=l-o,OEn(c=new MO(b.a,b.b),t.g,t.f),b.a-=c.a,b.b-=c.b,a=f-b.a,o=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.f),b.a-=s.a,b.b-=s.b,f=a+b.a,l=o+b.b,Tcn(r=JFn(e,!0,!0),a),Ecn(r,o),mcn(r,f),jcn(r,l),DXn(n,u)))}function xXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,dnt),"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 Yo))),U4(n,dnt,gnt,Jkn(yLt)),U4(n,dnt,pnt,Jkn(mLt)),U4(n,dnt,mnt,Jkn(pLt)),U4(n,dnt,vnt,Jkn(dLt)),U4(n,dnt,knt,Jkn(gLt)),U4(n,dnt,K3n,wLt),U4(n,dnt,o4n,8),U4(n,dnt,ynt,Jkn(kLt)),U4(n,dnt,Mnt,Jkn(hLt)),U4(n,dnt,Tnt,Jkn(fLt)),U4(n,dnt,q8n,(qx(),!1))}function RXn(n,t){var i,r,c,a,o,u,s,h,f,l;for(t.Ug("Simple node placement",1),l=uG(oIn(n,(GYn(),kmt)),312),u=0,a=new Ww(n.b);a.a<a.c.c.length;){for((o=(r=uG(N3(a),30)).c).b=0,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(o.b+=avn(s,i,l.c)),o.b+=s.d.d+s.o.b+s.d.a,i=s;u=e.Math.max(u,o.b)}for(c=new Ww(n.b);c.a<c.c.c.length;)for(f=(u-(o=(r=uG(N3(c),30)).c).b)/2,i=null,h=new Ww(r.a);h.a<h.c.c.length;)s=uG(N3(h),10),i&&(f+=avn(s,i,l.c)),f+=s.d.d,s.n.b=f,f+=s.o.b+s.d.a,i=s;t.Vg()}function KXn(n,t){var e,i,r,c;for(Frn(t.b.j),kS(YJ(new fX(null,new h3(t.d,16)),new cc),new ac),c=new Ww(t.d);c.a<c.c.c.length;){switch((r=uG(N3(c),105)).e.g){case 0:e=uG(zq(r.j,0),113).d.j,qb(r,uG(yx(Qz(uG(Y9(r.k,e),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,e),15).Oc(),Fdt)),113));break;case 1:i=Ejn(r),qb(r,uG(yx(Qz(uG(Y9(r.k,i[0]),15).Oc(),Fdt)),113)),Gb(r,uG(yx(Wz(uG(Y9(r.k,i[1]),15).Oc(),Fdt)),113));break;case 2:FAn(n,r);break;case 3:IKn(r);break;case 4:DKn(n,r)}_rn(r)}n.a=null}function FXn(n,t,e){var i,r,c,a,o,u,s,h;return i=n.a.o==(w0(),dSt)?M0n:T0n,!(o=wGn(n,new _I(t,e))).a&&o.c?(aq(n.d,o),i):o.a?(r=o.a.c,u=o.a.d,e?(s=n.a.c==(b0(),fSt)?u:r,c=n.a.c==fSt?r:u,a=n.a.g[c.i.p],h=uM(n.a.p[a.p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b):(s=n.a.c==(b0(),hSt)?u:r,c=n.a.c==hSt?r:u,h=uM(n.a.p[n.a.g[c.i.p].p])+uM(n.a.d[c.i.p])+c.n.b+c.a.b-uM(n.a.d[s.i.p])-s.n.b-s.a.b),n.a.n[n.a.g[r.i.p].p]=(qx(),!0),n.a.n[n.a.g[u.i.p].p]=!0,h):i}function _Xn(n,t,e,i){var r,c,a,o,u,s,h,f;if(0==i.gc())return!1;if(PP(),a=(u=uG(t,69).xk())?i:new Drn(i.gc()),EFn(n.e,t)){if(t.Si())for(h=i.Kc();h.Ob();)aqn(n,t,s=h.Pb(),F$(t,102)&&!!(uG(t,19).Bb&P0n))||(c=R5(t,s),a.Fc(c));else if(!u)for(h=i.Kc();h.Ob();)c=R5(t,s=h.Pb()),a.Fc(c)}else{for(f=VKn(n.e.Dh(),t),r=uG(n.g,124),o=0;o<n.i;++o)if(c=r[o],f.am(c.Lk()))throw hv(new vM(dct));if(i.gc()>1)throw hv(new vM(dct));u||(c=R5(t,i.Kc().Pb()),a.Fc(c))}return bfn(n,sAn(n,t,e),a)}function BXn(n,t,e){var i,r,c,a,o,u,s;if(EFn(n.e,t))PP(),C$n((o=uG(t,69).xk()?new Cq(t,n):new OA(t,n)).c,o.b),K$(o,uG(e,16));else{for(s=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c<n.i;++c)if(r=i[c].Lk(),s.am(r)){if(r==(m$n(),NBt)||r==OBt){for(a=c,(u=wMn(n,t,e))?e_n(n,c):++c;c<n.i;)(r=i[c].Lk())==NBt||r==OBt?e_n(n,c):++c;u||uG(Uyn(n,a,R5(t,e)),76)}else wMn(n,t,e)?e_n(n,c):uG(Uyn(n,c,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e))),76);return}wMn(n,t,e)||ttn(n,(PP(),uG(t,69).xk()?uG(e,76):R5(t,e)))}}function HXn(n,t,e){var i,r,c,a,o,u,s,h;return udn(e,n.b)||(n.b=e,c=new Jn,a=uG(l8(YJ(new fX(null,new h3(e.f,16)),c),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21),n.e=!0,n.f=!0,n.c=!0,n.d=!0,r=a.Hc((vyn(),yht)),i=a.Hc(Mht),r&&!i&&(n.f=!1),!r&&i&&(n.d=!1),r=a.Hc(kht),i=a.Hc(Tht),r&&!i&&(n.c=!1),!r&&i&&(n.e=!1)),h=uG(n.a.Ve(t,e),42),u=uG(h.a,17).a,s=uG(h.b,17).a,o=!1,u<0?n.c||(o=!0):n.e||(o=!0),s<0?n.d||(o=!0):n.f||(o=!0),o?HXn(n,h,e):h}function UXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(h=0;h<t.length;h++){for(a=n.Kc();a.Ob();)uG(a.Pb(),230).hg(h,t);for(f=0;f<t[h].length;f++){for(o=n.Kc();o.Ob();)uG(o.Pb(),230).ig(h,f,t);for(b=t[h][f].j,l=0;l<b.c.length;l++){for(u=n.Kc();u.Ob();)uG(u.Pb(),230).jg(h,f,l,t);for(u3(l,b.c.length),e=0,r=new w7(uG(b.c[l],12).b);l$(r.a)||l$(r.b);)for(i=uG(l$(r.a)?N3(r.a):N3(r.b),18),s=n.Kc();s.Ob();)uG(s.Pb(),230).gg(h,f,l,e++,i,t)}}}for(c=n.Kc();c.Ob();)uG(c.Pb(),230).fg()}function GXn(n,t){var e,i,r,c,a;for(n.b=uM(pK(oIn(t,(jYn(),gTt)))),n.c=uM(pK(oIn(t,vTt))),n.d=uG(oIn(t,Zyt),350),n.a=uG(oIn(t,vyt),282),aTn(t),r=(c=uG(l8(JJ(JJ(sin(sin(new fX(null,new h3(t.b,16)),new ke),new ye),new Me),new Te),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Kc();r.Ob();)e=uG(r.Pb(),18),uG(oIn(e,(GYn(),Tmt)),15).Jc(new og(n)),kfn(e,Tmt,null);for(i=c.Kc();i.Ob();)e=uG(i.Pb(),18),a=uG(oIn(e,(GYn(),jmt)),18),hYn(n,uG(oIn(e,ymt),15),a),kfn(e,ymt,null)}function qXn(n,t){var e,i,r,c,a,o,u;if(n.a){if(u=null,null!=(o=n.a.xe())?t.a+=""+o:null!=(a=n.a.mk())&&(-1!=(c=xL(a,$Cn(91)))?(s3(c,a.length+1),u=a.substr(c),t.a+=""+r1(null==a?IZn:(tJ(a),a),0,c)):t.a+=""+a),n.d&&0!=n.d.i){for(r=!0,t.a+="<",i=new DD(n.d);i.e!=i.i.gc();)e=uG(Zkn(i),89),r?r=!1:t.a+=TZn,qXn(e,t);t.a+=">"}null!=u&&(t.a+=""+u)}else n.e?null!=(o=n.e.zb)&&(t.a+=""+o):(t.a+="?",n.b?(t.a+=" super ",qXn(n.b,t)):n.f&&(t.a+=" extends ",qXn(n.f,t)))}function XXn(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 zXn(n){var t,i,r,c;if(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=nun(n)<0?1:0,i=n.e,r.length,e.Math.abs(t0(n.e)),c=new QM,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>Pot.length;i-=Pot.length)Xq(c,Pot);lF(c,Pot,t0(i)),JA(c,(s3(t,r.length+1),r.substr(t)))}else JA(c,r1(r,t,t0(i=t-i))),c.a+=".",JA(c,sQ(r,t0(i)));else{for(JA(c,(s3(t,r.length+1),r.substr(t)));i<-Pot.length;i+=Pot.length)Xq(c,Pot);lF(c,Pot,t0(-i))}return c.a}function VXn(n){var t,e,i,r,c;if(n.k!=(zIn(),dbt))return!1;if(n.j.c.length<=1)return!1;if(uG(oIn(n,(jYn(),JMt)),101)==($Pn(),cRt))return!1;if(Yyn(),(i=(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))==djt)return!1;if(i!=wjt&&i!=bjt){if(r=uM(pK(Omn(n,ITt))),!(t=uG(oIn(n,CTt),140))&&(t=new OF(r,r,r,r)),c=Dgn(n,(KQn(),_Rt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=Dgn(n,kRt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function WXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;t.Ug("Orthogonal edge routing",1),s=uM(pK(oIn(n,(jYn(),STt)))),e=uM(pK(oIn(n,gTt))),i=uM(pK(oIn(n,vTt))),l=new NW(0,e),d=0,a=new N4(n.b,0),o=null,h=null,u=null,f=null;do{f=(h=a.b<a.d.gc()?(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)):null)?h.a:null,o&&(Vzn(o,d),d+=o.c.a),w=YVn(l,n,u,f,o?d+i:d),r=!o||UA(u,(oFn(),LSt)),c=!h||UA(f,(oFn(),LSt)),w>0?(b=(w-1)*e,o&&(b+=i),h&&(b+=i),b<s&&!r&&!c&&(b=s),d+=b):!r&&!c&&(d+=s),o=h,u=f}while(h);n.f.a=d,t.Vg()}function QXn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=null,n.d&&(h=uG(U1(n.d,t),142)),!h){if(f=(c=n.a.vi()).i,!n.d||oS(n.d)!=f){for(u=new Ym,n.d&&xun(u,n.d),o=s=u.f.c+u.i.c;o<f;++o)i=uG(zrn(c,o),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));if(u.f.c+u.i.c!=f)for(a=0;a<s;++a)i=uG(zrn(c,a),142),(e=uG(null==(r=tdn(n.e,i).xe())?VAn(u.f,null,i):kgn(u.i,r,i),142))&&e!=i&&(null==r?VAn(u.f,null,e):kgn(u.i,r,e));n.d=u}h=uG(U1(n.d,t),142)}return h}function JXn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w;return l=oM(gK(oIn(t,(jYn(),EMt)))),b=null,a==(can(),Vjt)&&r.c.i==i?b=r.c:a==Wjt&&r.d.i==i&&(b=r.d),(h=o)&&l&&!b?(kD(h.e,r),w=e.Math.max(uM(pK(oIn(h.d,tMt))),uM(pK(oIn(r,tMt)))),kfn(h.d,tMt,w)):(KQn(),f=FRt,b?f=b.j:sN(uG(oIn(i,JMt),101))&&(f=a==Vjt?_Rt:kRt),s=ZXn(n,t,i,a,f,r),u=K9((HQ(i),r)),a==Vjt?(c2(u,uG(zq(s.j,0),12)),u2(u,c)):(c2(u,c),u2(u,uG(zq(s.j,0),12))),h=new Sdn(r,u,s,uG(oIn(s,(GYn(),rmt)),12),a,!b)),UNn(n.a,r,new $B(h.d,t,a)),h}function YXn(){var n;YXn=E,GFt=new Xk,HFt=Inn($ot,zZn,2,0,6,1),zFt=S3(Zhn(33,58),Zhn(1,26)),VFt=S3(Zhn(97,122),Zhn(65,90)),WFt=Zhn(48,57),qFt=S3(zFt,0),XFt=S3(VFt,WFt),QFt=S3(S3(0,Zhn(1,6)),Zhn(33,38)),JFt=S3(S3(WFt,Zhn(65,70)),Zhn(97,102)),e_t=S3(qFt,tyn("-_.!~*'()")),i_t=S3(XFt,mmn("-_.!~*'()")),tyn(zit),mmn(zit),S3(e_t,tyn(";:@&=+$,")),S3(i_t,mmn(";:@&=+$,")),YFt=tyn(":/?#"),ZFt=mmn(":/?#"),n_t=tyn("/?#"),t_t=mmn("/?#"),(n=new ek).a.zc("jar",n),n.a.zc("zip",n),n.a.zc("archive",n),hZ(),UFt=new nT(n)}function ZXn(n,t,e,i,r,c){var a,o,u,s,h,f;return a=null,s=i==(can(),Vjt)?c.c:c.d,u=pgn(t),s.i==e?(a=uG(cQ(n.b,s),10))||(kfn(a=DJn(s,uG(oIn(e,(jYn(),JMt)),101),r,zHn(s),null,s.n,s.o,u,t),(GYn(),rmt),s),vJ(n.b,s,a)):(o=wPn(a=DJn((h=new Yn,f=uM(pK(oIn(t,(jYn(),dTt))))/2,vfn(h,QMt,f),h),uG(oIn(e,JMt),101),r,i==Vjt?-1:1,null,new sj,new MO(0,0),u,t),e,i),kfn(a,(GYn(),rmt),o),vJ(n.b,o,a)),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)),sN(uG(oIn(t,(jYn(),JMt)),101))?kfn(t,JMt,($Pn(),oRt)):kfn(t,JMt,($Pn(),uRt)),a}function nzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;o=0,b=0,u=q1(n.g,n.g.length),c=n.e,a=n.j,i=n.b,r=n.c;do{for(l=0,s=new Ww(n.q);s.a<s.c.c.length;)f=QVn(n,uG(N3(s),10)),e=!0,(n.r==(THn(),Ijt)||n.r==Ljt)&&(e=oM(gK(f.b))),uG(f.a,17).a<0&&e?(++l,u=q1(n.g,n.g.length),n.e=n.e+uG(f.a,17).a,b+=c-n.e,c=n.e+uG(f.a,17).a,a=n.j,i=T3(n.b),r=T3(n.c)):(n.g=q1(u,u.length),n.e=c,n.b=(WW(i),i?new Z_(i):rG(new Ww(i))),n.c=(WW(r),r?new Z_(r):rG(new Ww(r))),n.j=a);++o,h=0!=l&&oM(gK(t.Kb(new WO(xwn(b),xwn(o)))))}while(h)}function tzn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return a=n.f,l=t.f,o=a==(_Rn(),DAt)||a==RAt,u=a==xAt||a==KAt,b=l==xAt||l==KAt,s=a==xAt||a==DAt,w=l==xAt||l==DAt,!o||l!=DAt&&l!=RAt?u&&b?n.f==KAt?n:t:s&&w?(a==xAt?(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,m=i.i+i.g,v=h.d+r.g,c<=(e.Math.max(m,v)-e.Math.min(i.i,h.d))*(h.e+r.f-i.j)?n.f==xAt?n:t:n.f==DAt?n:t):n:n.f==RAt?n:t}function ezn(n,t){var e,i,r,c,a;if(kfn(t,(OQn(),xPt),0),r=uG(oIn(t,LPt),40),0==t.d.b)r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a)):kfn(t,FPt,0);else{for(e=new Tp(Fkn(new Mp(t).a.d,0));Jj(e.a);)ezn(n,uG(I6(e.a),65).c);i=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),40),c=(uM(pK(oIn(uG(hx(new Tp(Fkn(new Mp(t).a.d,0))),40),FPt)))+uM(pK(oIn(i,FPt))))/2,r?(a=uM(pK(oIn(r,FPt)))+n.b+Mgn(n,r,t),kfn(t,FPt,a),kfn(t,xPt,uM(pK(oIn(t,FPt)))-c),ZVn(n,t)):kfn(t,FPt,c)}}function izn(n){var t,e,i,r,c,a,o,u,s,h;for(s=n.e.a.c.length,c=new Ww(n.e.a);c.a<c.c.c.length;)uG(N3(c),125).j=!1;for(n.i=Inn(YHt,W1n,28,s,15,1),n.g=Inn(YHt,W1n,28,s,15,1),n.n=new Zm,r=0,h=new Zm,o=new Ww(n.e.a);o.a<o.c.c.length;)(a=uG(N3(o),125)).d=r++,0==a.b.a.c.length&&kD(n.n,a),Ohn(h,a.g);for(t=0,i=new Ww(h);i.a<i.c.c.length;)(e=uG(N3(i),218)).c=t++,e.f=!1;u=h.c.length,null==n.b||n.b.length<u?(n.b=Inn(eUt,I0n,28,u,15,1),n.c=Inn(ZHt,B2n,28,u,16,1)):AM(n.c),n.d=h,n.p=new dx(orn(n.d.c.length)),n.j=1}function rzn(n,t){var e,i,r,c,a,o,u,s,h;if(!(t.e.c.length<=1)){for(n.f=t,n.d=uG(oIn(n.f,(Bjn(),rlt)),391),n.g=uG(oIn(n.f,ult),17).a,n.e=uM(pK(oIn(n.f,clt))),n.c=uM(pK(oIn(n.f,ilt))),nW(n.b),r=new Ww(n.f.c);r.a<r.c.c.length;)i=uG(N3(r),290),QHn(n.b,i.c,i,null),QHn(n.b,i.d,i,null);for(o=n.f.e.c.length,n.a=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),s=new Ww(n.f.e);s.a<s.c.c.length;)Qqn(n,u=uG(N3(s),153),n.a[u.a]);for(n.i=Jq(eUt,[zZn,I0n],[109,28],15,[o,o],2),c=0;c<o;++c)for(a=0;a<o;++a)h=1/((e=n.a[c][a])*e),n.i[c][a]=h}}function czn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if((o=t.ah())||t.Ug(W3n,1),a=1/(e=uG(oIn(n,(GYn(),wmt)),15)).gc(),t._g())for(t.bh("ELK Layered uses the following "+e.gc()+" modules:"),l=0,f=e.Kc();f.Ob();)s=uG(f.Pb(),47),i=(l<10?"0":"")+l++,t.bh(" Slot "+i+": "+Ij(Tbn(s)));for(h=e.Kc();h.Ob();){if(s=uG(h.Pb(),47),t.$g())return;s.Kf(n,t.eh(a))}for(c=new Ww(n.b);c.a<c.c.c.length;)r=uG(N3(c),30),Ohn(n.a,r.a),r.a.c.length=0;for(u=new Ww(n.a);u.a<u.c.c.length;)a2(uG(N3(u),10),null);n.b.c.length=0,o||t.Vg()}function azn(n){var t,e,i,r,c,a,o,u,s,h,f;if(u=new Zm,!vR(n,(GYn(),Rpt)))return u;for(i=uG(oIn(n,Rpt),15).Kc();i.Ob();)Dzn(t=uG(i.Pb(),10),n),mv(u.c,t);for(r=new Ww(n.b);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),30).a);a.a<a.c.c.length;)(c=uG(N3(a),10)).k==(zIn(),lbt)&&(o=uG(oIn(c,Kpt),10))&&(o2(s=new lOn,c),NLn(s,uG(oIn(c,Fpt),64)),h=uG(zq(o.j,0),12),c2(f=new UZ,s),u2(f,h));for(e=new Ww(u);e.a<e.c.c.length;)a2(t=uG(N3(e),10),uG(zq(n.b,n.b.c.length-1),30));return u}function ozn(n,t,e){var i,r,c,a,o,u,s,h;for(h=new Zm,c=0,fan(s=new e4(0,e),new dln(0,0,s,e)),r=0,u=new DD(n);u.e!=u.i.gc();)o=uG(Zkn(u),27),i=uG(zq(s.a,s.a.c.length-1),172),(r+o.g+(0==uG(zq(s.a,0),172).b.c.length?0:e)>t||oM(gK(zDn(o,(S_n(),nAt)))))&&(r=0,c+=s.b+e,mv(h.c,s),fan(s=new e4(c,e),i=new dln(0,s.f,s,e)),r=0),0==i.b.c.length||!oM(gK(zDn(R0(o),(S_n(),uAt))))&&(o.f>=i.o&&o.f<=i.f||.5*i.a<=o.f&&1.5*i.a>=o.f)?ipn(i,o):(fan(s,a=new dln(i.s+i.r+e,s.f,s,e)),ipn(a,o)),r=o.i+o.g;return mv(h.c,s),h}function uzn(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 hv(new Ky("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=Inn(YHt,W1n,28,t,15,1),qGn(n.b,0,i,0,t),n.b=i),n.a=!0}}function szn(n,t){var e,i,r,c,a,o,u;for(a=kz(n.a).Kc();a.Ob();){if((c=uG(a.Pb(),18)).b.c.length>0)for(i=new Z_(uG(Y9(n.a,c),21)),hZ(),f$(i,new Gd(t)),r=new N4(c.b,0);r.b<r.d.gc();){switch(MK(r.b<r.d.gc()),e=uG(r.d.Xb(r.c=r.b++),72),o=-1,uG(oIn(e,(jYn(),Xyt)),278).g){case 1:o=i.c.length-1;break;case 0:o=DSn(i);break;case 2:o=0}-1!=o&&(u3(o,i.c.length),kD((u=uG(i.c[o],249)).b.b,e),uG(oIn(HQ(u.b.c.i),(GYn(),Hpt)),21).Fc((r_n(),npt)),uG(oIn(HQ(u.b.c.i),Hpt),21).Fc(Ygt),LQ(r),kfn(e,omt,c))}c2(c,null),u2(c,null)}}function hzn(n,t){var e,i,r,c;return e=new Rn,1==(r=2==(r=(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21)).gc())?1:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Kn),tsn(Hvn(0),new tn)),168).a,2),0)&&(r=0),1==(c=2==(c=(i=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21)).gc())?1:0)&&_A(Kmn(uG(l8(JJ(i.Lc(),new Fn),tsn(Hvn(0),new tn)),168).a,2),0)&&(c=0),r<c?-1:r==c?0:1}function fzn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(c=oM(gK(zDn(t=h0(n),(jYn(),sMt)))),h=0,r=0,s=new DD((!n.e&&(n.e=new f_(aFt,n,7,4)),n.e));s.e!=s.i.gc();)a=(o=BNn(u=uG(Zkn(s),74)))&&c&&oM(gK(zDn(u,hMt))),l=lCn(uG(zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0),84)),o&&a?++r:o&&!a?++h:R0(l)==t||l==t?++r:++h;for(i=new DD((!n.d&&(n.d=new f_(aFt,n,8,5)),n.d));i.e!=i.i.gc();)a=(o=BNn(e=uG(Zkn(i),74)))&&c&&oM(gK(zDn(e,hMt))),f=lCn(uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),o&&a?++h:o&&!a?++r:R0(f)==t||f==t?++h:++r;return h-r}function lzn(n,t){var e,i,r,c,a,o,u,s,h;if(t.Ug("Edge splitting",1),n.b.c.length<=2)t.Vg();else{for(MK((c=new N4(n.b,0)).b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30);c.b<c.d.gc();)for(r=a,MK(c.b<c.d.gc()),a=uG(c.d.Xb(c.c=c.b++),30),o=new Ww(r.a);o.a<o.c.c.length;)for(u=new Ww(uG(N3(o),10).j);u.a<u.c.c.length;)for(i=new Ww(uG(N3(u),12).g);i.a<i.c.c.length;)(s=(e=uG(N3(i),18)).d.i.c)!=r&&s!=a&&xFn(e,(Hb(h=new gMn(n),(zIn(),wbt)),kfn(h,(GYn(),rmt),e),kfn(h,(jYn(),JMt),($Pn(),cRt)),a2(h,a),h));t.Vg()}}function bzn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=new Zm,l=new ek,a=t.b,r=0;r<a.c.length;r++){for(s=(u3(r,a.c.length),uG(a.c[r],30)).a,h.c.length=0,c=0;c<s.c.length;c++)(o=n.a[r][c]).p=c,o.k==(zIn(),gbt)&&mv(h.c,o),Y8(uG(zq(t.b,r),30).a,c,o),o.j.c.length=0,Ohn(o.j,uG(uG(zq(n.b,r),15).Xb(c),16)),L_(uG(oIn(o,(jYn(),JMt)),101))||kfn(o,JMt,($Pn(),rRt));for(i=new Ww(h);i.a<i.c.c.length;)f=ZBn(e=uG(N3(i),10)),l.a.zc(f,l),l.a.zc(e,l)}for(u=l.a.ec().Kc();u.Ob();)o=uG(u.Pb(),10),hZ(),f$(o.j,(Cln(),Ywt)),o.i=!0,qLn(o)}function wzn(n){var t,e,i,r,c;return null!=n.g?n.g:n.a<32?(n.g=YQn(Bsn(n.f),t0(n.e)),n.g):(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e?r:(t=(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e<0?2:1,e=r.length,i=-n.e+e-t,(c=new WM).a+=""+r,n.e>0&&i>=-6?i>=0?Ex(c,e-t0(n.e),String.fromCharCode(46)):(psn(c,t-1,t-1,"0."),Ex(c,t+1,mvn(Pot,0,-t0(i)-1))):(e-t>=1&&(Ex(c,t,String.fromCharCode(46)),++e),Ex(c,e,String.fromCharCode(69)),i>0&&Ex(c,++e,String.fromCharCode(43)),Ex(c,++e,""+oV(Bsn(i)))),n.g=c.a,n.g))}function dzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;r=uM(pK(oIn(t,(jYn(),AMt)))),l=4,c=3,M=20/(y=uG(oIn(t,OTt),17).a),b=!1,s=0,o=vZn;do{for(a=1!=s,f=0!=s,T=0,m=0,k=(g=n.a).length;m<k;++m)(w=g[m]).f=null,aQn(n,w,a,f,r),T+=e.Math.abs(w.a);do{u=nGn(n,t)}while(u);for(p=0,v=(d=n.a).length;p<v;++p)if(0!=(i=uV(w=d[p]).a))for(h=new Ww(w.e);h.a<h.c.c.length;)uG(N3(h),10).n.b+=i;0==s||1==s?--l<=0&&(T<o||-l>y)?(s=2,o=vZn):0==s?(s=1,o=T):(s=0,o=T):(b=T>=o||o-T<M,o=T,b&&--c)}while(!(b&&c<=0))}function gzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(w=new Ym,c=n.a.ec().Kc();c.Ob();)vJ(w,i=uG(c.Pb(),177),e.af(i));for(WW(n),f$(a=n?new Z_(n):rG(n.a.ec().Kc()),new Cd(w)),o=g8(a),u=new C$(t),VAn((b=new Ym).f,t,u);0!=o.a.gc();){for(s=null,h=null,f=null,r=o.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),177),uM(pK(DA(FX(w.f,i))))<=M0n){if(PV(b,i.a)&&!PV(b,i.b)){h=i.b,f=i.a,s=i;break}if(PV(b,i.b)&&!PV(b,i.a)){h=i.a,f=i.b,s=i;break}}if(!s)break;l=new C$(h),kD(uG(DA(FX(b.f,f)),225).a,l),VAn(b.f,h,l),o.a.Bc(s)}return u}function pzn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Depth-first cycle removal",1),u=(s=t.a).c.length,n.c=new Zm,n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,u,16,1),n.b=new Zm,c=0,o=new Ww(s);o.a<o.c.c.length;)(a=uG(N3(o),10)).p=c,P6(qgn(a))&&kD(n.c,a),++c;for(h=new Ww(n.c);h.a<h.c.c.length;)LAn(n,uG(N3(h),10));for(r=0;r<u;r++)n.d[r]||(u3(r,s.c.length),LAn(n,uG(s.c[r],10)));for(i=new Ww(n.b);i.a<i.c.c.length;)pqn(uG(N3(i),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));n.c=null,n.d=null,n.a=null,n.b=null,e.Vg()}function mzn(n,t){var i,r,c,a,o,u;return l_n(),a=t.c-(n.c+n.b),c=n.c-(t.c+t.b),o=n.d-(t.d+t.a),i=t.d-(n.d+n.a),r=e.Math.max(c,a),u=e.Math.max(o,i),YN(),oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>=0^(oan(I9n),(e.Math.abs(u)<=I9n||0==u||isNaN(u)&&isNaN(0)?0:u<0?-1:u>0?1:KL(isNaN(u),isNaN(0)))>=0)?e.Math.max(u,r):(oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>0?e.Math.sqrt(u*u+r*r):-e.Math.sqrt(u*u+r*r))}function vzn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new ck),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=uG(DQ(n.a,a-1),122)).e&&10!=c.e||0!=t.e&&10!=t.e?zv(n.a,t):(0==t.e||t.Mm().length,0==c.e?(e=new VM,(i=c.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n),c=new F1(10,null,0),GV(n.a,c,a-1)):(c.Mm().length,VA(e=new VM,c.Mm())),0==t.e?(i=t.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n):VA(e,t.Mm()),uG(c,530).b=e.a):zv(n.a,t);else for(r=0;r<t.Pm();r++)vzn(n,t.Lm(r));else zv(n.a,t)}function kzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!e.dc()){for(a=0,h=0,l=uG((i=e.Kc()).Pb(),17).a;a<t.f;){if(a==l&&(h=0,l=i.Ob()?uG(i.Pb(),17).a:t.f+1),a!=h)for(b=uG(zq(n.b,a),30),f=uG(zq(n.b,h),30),s=new Ww(T3(b.a));s.a<s.c.c.length;)if($jn(u=uG(N3(s),10),f.a.c.length,f),0==h)for(c=new Ww(T3(qgn(u)));c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),gVn(n,r,1);++h,++a}for(o=new N4(n.b,0);o.b<o.d.gc();)MK(o.b<o.d.gc()),0==uG(o.d.Xb(o.c=o.b++),30).a.c.length&&LQ(o)}}function yzn(n,t,e){var i,r,c;if((r=uG(oIn(t,(jYn(),vyt)),282))!=(RIn(),Vgt)){switch(e.Ug("Horizontal Compaction",1),n.a=t,vT(i=new w$n(((c=new Sen).d=t,c.c=uG(oIn(c.d,Vyt),223),F_n(c),VVn(c),rBn(c),c.a)),n.b),1===uG(oIn(t,myt),431).g?pT(i,new Kon(n.a)):pT(i,(fZ(),qut)),r.g){case 1:kxn(i);break;case 2:kxn(GWn(i,(xdn(),YDt)));break;case 3:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new gr));break;case 4:kxn(mT(GWn(kxn(i),(xdn(),YDt)),new Sg(c)));break;case 5:kxn(gT(i,idt))}GWn(i,(xdn(),JDt)),i.e=!0,UWn(c),e.Vg()}}function Mzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=(a=t.b).o,u=a.d,i=uM(pK(eyn(a,(jYn(),dTt)))),r=uM(pK(eyn(a,pTt))),s=uM(pK(eyn(a,PTt))),pG(o=new $k,u.d,u.c,u.a,u.b),l=PBn(t,i,r,s),p=new Ww(t.d);p.a<p.c.c.length;){for(w=(g=uG(N3(p),105)).f.a.ec().Kc();w.Ob();)c=(b=uG(w.Pb(),340)).a,f=sCn(b),m=new Uk,ZPn(b,b.c,l,m),EIn(b,f,l,m),ZPn(b,b.d,l,m),e=m,e=n.ng(b,f,e),BY(c.a),Qon(c.a,e),kS(new fX(null,new h3(e,16)),new GC(h,o));(d=g.i)&&(qPn(g,d,l,r),Jvn(h,o,v=new eN(d.g)),JF(v,d.j),Jvn(h,o,v))}pG(u,o.d,o.c,o.a,o.b)}function Tzn(n){var t,i,r,c;c=n.o,VK(),n.A.dc()||udn(n.A,lht)?t=c.b:(t=n.D?e.Math.max(c.b,dNn(n.f)):dNn(n.f),n.A.Hc((Qmn(),WRt))&&!n.B.Hc((aUn(),cKt))&&(t=e.Math.max(t,dNn(uG(AJ(n.p,(KQn(),kRt)),252))),t=e.Math.max(t,dNn(uG(AJ(n.p,_Rt),252)))),(i=fsn(n))&&(t=e.Math.max(t,i.b)),n.A.Hc(QRt)&&(n.q!=($Pn(),aRt)&&n.q!=cRt||(t=e.Math.max(t,eq(uG(AJ(n.b,(KQn(),kRt)),127))),t=e.Math.max(t,eq(uG(AJ(n.b,_Rt),127)))))),oM(gK(n.e.Tf().of((XYn(),H$t))))?c.b=e.Math.max(c.b,t):c.b=t,(r=n.f.i).d=0,r.a=t,rqn(n.f)}function jzn(n,t,e,i,r,c,a,o){var u,s,h,f;switch(u=n7(Uhn(cT(_At,1),EZn,238,0,[t,e,i,r])),f=null,n.b.g){case 1:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Go,new Bo,new Ho]));break;case 0:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Ho,new Bo,new Go]));break;case 2:f=n7(Uhn(cT(TAt,1),EZn,535,0,[new Bo,new Go,new Ho]))}for(h=new Ww(f);h.a<h.c.c.length;)s=uG(N3(h),535),u.c.length>1&&(u=s.Hg(u,n.a,o));return 1==u.c.length?uG(zq(u,u.c.length-1),238):2==u.c.length?tzn((u3(0,u.c.length),uG(u.c[0],238)),(u3(1,u.c.length),uG(u.c[1],238)),a,c):null}function Ezn(n,t,e){var i,r,c,a,o,u,s;for(e.Ug("Find roots",1),n.a.c.length=0,r=Fkn(t.b,0);r.b!=r.d.c;)0==(i=uG(I6(r),40)).b.b&&(kfn(i,(OQn(),UPt),(qx(),!0)),kD(n.a,i));switch(n.a.c.length){case 0:kfn(c=new wln(0,t,"DUMMY_ROOT"),(OQn(),UPt),(qx(),!0)),kfn(c,jPt,!0),aq(t.b,c);break;case 1:break;default:for(a=new wln(0,t,H9n),u=new Ww(n.a);u.a<u.c.c.length;)kfn(s=new uZ(a,o=uG(N3(u),40)),(OQn(),jPt),(qx(),!0)),aq(a.a.a,s),aq(a.d,s),aq(o.b,s),kfn(o,UPt,!1);kfn(a,(OQn(),UPt),(qx(),!0)),kfn(a,jPt,!0),aq(t.b,a)}e.Vg()}function Szn(n){var t,i,r,c,a,o;for(Prn(n.a,new Zn),i=new Ww(n.a);i.a<i.c.c.length;)t=uG(N3(i),225),r=YF(D$(uG(n.b,68).c),uG(t.b,68).c),xht?(o=uG(n.b,68).b,a=uG(t.b,68).b,e.Math.abs(r.a)>=e.Math.abs(r.b)?(r.b=0,a.d+a.a>o.d&&a.d<o.d+o.a&&RG(r,e.Math.max(o.c-(a.c+a.b),a.c-(o.c+o.b)))):(r.a=0,a.c+a.b>o.c&&a.c<o.c+o.b&&RG(r,e.Math.max(o.d-(a.d+a.a),a.d-(o.d+o.a))))):RG(r,OGn(uG(n.b,68),uG(t.b,68))),c=e.Math.sqrt(r.a*r.a+r.b*r.b),RG(r,c=EPn(Cht,t,c,r)),JX(uG(t.b,68),r),Prn(t.a,new Dd(r)),uG(Cht.b,68),Rnn(Cht,Iht,t)}function Pzn(n){var t,i,r,c,a,o,u,s,f,l,b,w;for(n.f=new ak,u=0,r=0,c=new Ww(n.e.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;){for((a=uG(N3(o),10)).p=u++,i=new Fz(ix(Xgn(a).a.Kc(),new h));hDn(i);)uG(N9(i),18).p=r++;for(t=VXn(a),l=new Ww(a.j);l.a<l.c.c.length;)f=uG(N3(l),12),t&&(w=f.a.b)!=e.Math.floor(w)&&(s=w-W4(Bsn(e.Math.round(w))),f.a.b-=s),(b=f.n.b+f.a.b)!=e.Math.floor(b)&&(s=b-W4(Bsn(e.Math.round(b))),f.n.b-=s)}n.g=u,n.b=r,n.i=Inn(lSt,EZn,412,u,0,1),n.c=Inn(uSt,EZn,655,r,0,1),n.d.a.$b()}function Czn(n){var t,e,i,r,c,a,o,u,s;if(n.Pj())if(u=n.Qj(),n.i>0){if(t=new AA(n.i,n.g),c=(e=n.i)<100?null:new cj(e),n.Tj())for(i=0;i<n.i;++i)a=n.g[i],c=n.Vj(a,c);if(V9(n),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new nR(t);i.e!=i.i.gc();)c=n.Oj(nyn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r)}else V9(n),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if(n.i>0){for(o=n.g,s=n.i,V9(n),c=s<100?null:new cj(s),i=0;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else V9(n);else V9(n)}function Izn(n,t,i){var r,c,a,o,u,s,h,f,l;for(thn(this),i==(l0(),USt)?FV(this.r,n):FV(this.w,n),f=M0n,h=T0n,o=t.a.ec().Kc();o.Ob();)c=uG(o.Pb(),42),u=uG(c.a,465),(s=(r=uG(c.b,18)).c)==n&&(s=r.d),FV(u==USt?this.r:this.w,s),l=(KQn(),LRt).Hc(s.j)?uM(pK(oIn(s,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,f=e.Math.min(f,l),h=e.Math.max(h,l);for(NIn(this,(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b,f,h),a=t.a.ec().Kc();a.Ob();)c=uG(a.Pb(),42),HOn(this,uG(c.b,18));this.o=!1}function Ozn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;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*(o=8191&t.l),p=r*o,m=c*o,v=a*o,0!=(u=t.l>>13|(15&t.m)<<9)&&(g+=e*u,p+=i*u,m+=r*u,v+=c*u),0!=(s=t.m>>4&8191)&&(p+=e*s,m+=i*s,v+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(m+=e*h,v+=i*h),0!=(f=(1048320&t.h)>>8)&&(v+=e*f),b=((d=e*o)>>22)+(g>>9)+((262143&p)<<4)+((31&m)<<17),w=(p>>18)+(m>>5)+((4095&v)<<8),w+=(b+=(l=(d&f0n)+((511&g)<<13))>>22)>>22,p$(l&=f0n,b&=f0n,w&=l0n)}function Azn(n){var t,i,r,c,a,o,u;if(0!=(u=uG(zq(n.j,0),12)).g.c.length&&0!=u.e.c.length)throw hv(new kM("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=u.g.c.length){for(a=M0n,i=new Ww(u.g);i.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.d.i,(jYn(),TMt)),140),a=e.Math.min(a,o.n.a-r.b);return new Ul(WW(a))}if(0!=u.e.c.length){for(c=T0n,i=new Ww(u.e);i.a<i.c.c.length;)t=uG(N3(i),18),r=uG(oIn(o=t.c.i,(jYn(),TMt)),140),c=e.Math.max(c,o.n.a+o.o.a+r.c);return new Ul(WW(c))}return gy(),gy(),wat}function Lzn(n,t){var e,i,r,c,a,o;if(n.ol()){if(n.i>4){if(!n.fk(t))return!1;if(n.al()){if(o=(e=(i=uG(t,54)).Eh())==n.e&&(n.ml()?i.yh(i.Fh(),n.il())==n.jl():-1-i.Fh()==n.Lj()),n.nl()&&!o&&!e&&i.Jh())for(r=0;r<n.i;++r)if(xA(n.pl(uG(n.g[r],58)))===xA(t))return!0;return o}if(n.ml()&&!n.ll()){if(xA(c=uG(t,58).Mh(lMn(uG(n.Lk(),19))))===xA(n.e))return!0;if(null==c||!uG(c,58).Vh())return!1}}if(a=sSn(n,t),n.nl()&&!a)for(r=0;r<n.i;++r)if(xA(i=n.pl(uG(n.g[r],58)))===xA(t))return!0;return a}return sSn(n,t)}function Nzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Interactive cycle breaking",1),h=new Zm,l=new Ww(t.a);l.a<l.c.c.length;)for((f=uG(N3(l),10)).p=1,b=jSn(f).a,s=jmn(f,(can(),Wjt)).Kc();s.Ob();)for(c=new Ww(uG(s.Pb(),12).g);c.a<c.c.c.length;)(w=(i=uG(N3(c),18)).d.i)!=f&&jSn(w).a<b&&mv(h.c,i);for(a=new Ww(h);a.a<a.c.c.length;)pqn(i=uG(N3(a),18),!0);for(h.c.length=0,u=new Ww(t.a);u.a<u.c.c.length;)(o=uG(N3(u),10)).p>0&&nAn(n,o,h);for(r=new Ww(h);r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0);h.c.length=0,e.Vg()}function $zn(n,t){var e,i,r,c,a,o,u;for(e=0,u=new Zm,c=new Ww(t);c.a<c.c.c.length;){switch(r=uG(N3(c),12),fbn(n.b,n.d[r.p]),u.c.length=0,r.i.k.g){case 0:Prn(uG(oIn(r,(GYn(),lmt)),10).j,new rp(u));break;case 1:m$(lln(JJ(new fX(null,new h3(r.i.j,16)),new cp(r))),new ap(u));break;case 3:kD(u,new WO(uG(oIn(r,(GYn(),rmt)),12),xwn(r.e.c.length+r.g.c.length)))}for(o=new Ww(u);o.a<o.c.c.length;)a=uG(N3(o),42),(i=Yj(n,uG(a.a,12)))>n.d[r.p]&&(e+=J8(n.b,i)*uG(a.b,17).a,A6(n.a,xwn(i)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function Dzn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=uG(oIn(n,(GYn(),Fpt)),64),i=uG(zq(n.j,0),12),h==(KQn(),yRt)?NLn(i,KRt):h==KRt&&NLn(i,yRt),uG(oIn(t,(jYn(),DMt)),181).Hc((Qmn(),JRt))){if(u=uM(pK(oIn(n,TTt))),s=uM(pK(oIn(n,jTt))),a=uM(pK(oIn(n,yTt))),(o=uG(oIn(t,nTt),21)).Hc((eNn(),wRt)))for(e=s,f=n.o.a/2-i.n.a,c=new Ww(i.f);c.a<c.c.c.length;)(r=uG(N3(c),72)).n.b=e,r.n.a=f-r.o.a/2,e+=r.o.b+a;else if(o.Hc(gRt))for(c=new Ww(i.f);c.a<c.c.c.length;)(r=uG(N3(c),72)).n.a=u+n.o.a-i.n.a;D3(new Ad((zS(),new mY(t,!1,!1,new Ft))),new RB(null,n,!1))}}function xzn(n,t){var i,r,c,a,o,u,s;if(0!=t.c.length){for(hZ(),UX(t.c,t.c.length,null),r=uG(N3(c=new Ww(t)),154);c.a<c.c.c.length;)i=uG(N3(c),154),!gcn(r.e.c,i.e.c)||svn(qK(r.e).b,i.e.d)||svn(qK(i.e).b,r.e.d)?(fGn(n,r),r=i):(Ohn(r.k,i.k),Ohn(r.b,i.b),Ohn(r.c,i.c),Qon(r.i,i.i),Ohn(r.d,i.d),Ohn(r.j,i.j),a=e.Math.min(r.e.c,i.e.c),o=e.Math.min(r.e.d,i.e.d),u=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)-o,LG(r.e,a,o,u,s),$3(r.f,i.f),!r.a&&(r.a=i.a),Ohn(r.g,i.g),kD(r.g,i));fGn(n,r)}}function Rzn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(o=new Zm,r=new Ww(t.a);r.a<r.c.c.length;)for(a=new Ww(uG(N3(r),10).j);a.a<a.c.c.length;){for(s=null,v=0,k=(m=x4((c=uG(N3(a),12)).g)).length;v<k;++v)jsn((p=m[v]).d.i,e)||((g=JXn(n,t,e,p,p.c,(can(),Wjt),s))!=s&&mv(o.c,g),g.c&&(s=g));for(u=null,w=0,d=(b=x4(c.e)).length;w<d;++w)jsn((l=b[w]).c.i,e)||((g=JXn(n,t,e,l,l.d,(can(),Vjt),u))!=u&&mv(o.c,g),g.c&&(u=g))}for(f=new Ww(o);f.a<f.c.c.length;)h=uG(N3(f),453),-1!=Ten(t.a,h.a,0)||kD(t.a,h.a),h.c&&mv(i.c,h)}function Kzn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for((f=new eN(uG(zDn(n,(lIn(),HNt)),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=pK(zDn(n,xNt)))||(tJ(c),c<=0))&&(c=1.3),o=new Zm,l=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));l.e!=l.i.gc();)a=new nK(uG(Zkn(l),27)),mv(o.c,a);switch(uG(zDn(n,RNt),320).g){case 3:w=hUn(o,t,f.a,f.b,(s=r,tJ(c),s));break;case 1:w=GGn(o,t,f.a,f.b,(h=r,tJ(c),h));break;default:w=Bzn(o,t,f.a,f.b,(u=r,tJ(c),u))}ZQn(n,(b=KJn(new Jrn(w),t,i,f.a,f.b,r,(tJ(c),c))).a,b.b,!1,!0)}function Fzn(n,t,e,i){var r,c,a,o,u,s;if((o=n.j)==(KQn(),FRt)&&t!=($Pn(),uRt)&&t!=($Pn(),sRt)&&(NLn(n,o=ZUn(n,e)),!(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),QMt))&&o!=FRt&&(0!=n.n.a||0!=n.n.b)&&kfn(n,QMt,aEn(n,o))),t==($Pn(),aRt)){switch(s=0,o.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)}kfn(n,(GYn(),bmt),s)}if(u=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=uRt&&t!=sRt&&o!=FRt)switch(o.g){case 1:a.a=u.a/2;break;case 2:a.a=u.a,a.b=u.b/2;break;case 3:a.a=u.a/2,a.b=u.b;break;case 4:a.b=u.b/2}else a.a=u.a/2,a.b=u.b/2}function _zn(n){var t,e,i,r,c,a,o,u,s,h;if(n.Pj())if(h=n.Ej(),u=n.Qj(),h>0)if(t=new Hun(n.pj()),c=(e=h)<100?null:new cj(e),QK(n,e,t.g),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new DD(t);i.e!=i.i.gc();)c=n.Oj(Zkn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r);else QK(n,n.Ej(),n.Fj()),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if((h=n.Ej())>0){for(o=n.Fj(),s=h,QK(n,h,o),c=s<100?null:new cj(s),i=0;i<s;++i)a=o[i],c=n.Oj(a,c);c&&c.oj()}else QK(n,n.Ej(),n.Fj());else QK(n,n.Ej(),n.Fj())}function Bzn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(o=Inn(eUt,I0n,28,n.c.length,15,1),_jn(l=new Kz(new Hu),n),s=0,b=new Zm;0!=l.b.c.length;)if(a=uG(0==l.b.c.length?null:zq(l.b,0),163),s>1&&EX(a)*jX(a)/2>o[0]){for(c=0;c<b.c.length-1&&EX(a)*jX(a)/2>o[c];)++c;f=new Jrn(new C2(b,0,c+1)),h=EX(a)/jX(a),u=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),u),kG(_Cn(l,f),D0n),_jn(l,new C2(b,c+1,b.c.length)),b.c.length=0,s=0,zX(o,o.length,0)}else null!=(0==l.b.c.length?null:zq(l.b,0))&&Con(l,0),s>0&&(o[s]=o[s-1]),o[s]+=EX(a)*jX(a),++s,mv(b.c,a);return b}function Hzn(n,t){var e,i,r,c;c=new Z_((e=t.b).j),r=0,(i=e.j).c.length=0,mW(uG(ssn(n.b,(KQn(),yRt),(gon(),Sdt)),15),e),r=cMn(c,r,new Br,i),mW(uG(ssn(n.b,yRt,Edt),15),e),r=cMn(c,r,new $r,i),mW(uG(ssn(n.b,yRt,jdt),15),e),mW(uG(ssn(n.b,kRt,Sdt),15),e),mW(uG(ssn(n.b,kRt,Edt),15),e),r=cMn(c,r,new Hr,i),mW(uG(ssn(n.b,kRt,jdt),15),e),mW(uG(ssn(n.b,KRt,Sdt),15),e),r=cMn(c,r,new Ur,i),mW(uG(ssn(n.b,KRt,Edt),15),e),r=cMn(c,r,new Gr,i),mW(uG(ssn(n.b,KRt,jdt),15),e),mW(uG(ssn(n.b,_Rt,Sdt),15),e),r=cMn(c,r,new Rr,i),mW(uG(ssn(n.b,_Rt,Edt),15),e),mW(uG(ssn(n.b,_Rt,jdt),15),e)}function Uzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(o=new Ww(t);o.a<o.c.c.length;)(c=uG(N3(o),239)).e=null,c.c=0;for(u=null,a=new Ww(t);a.a<a.c.c.length;)if(f=(c=uG(N3(a),239)).d[0],!e||f.k==(zIn(),dbt)){for(b=uG(oIn(f,(GYn(),Vpt)),15).Kc();b.Ob();)l=uG(b.Pb(),10),e&&l.k!=(zIn(),dbt)||((!c.e&&(c.e=new Zm),c.e).Fc(n.b[l.c.p][l.p]),++n.b[l.c.p][l.p].c);if(!e&&f.k==(zIn(),dbt)){if(u)for(h=uG(Y9(n.d,u),21).Kc();h.Ob();)for(s=uG(h.Pb(),10),r=uG(Y9(n.d,f),21).Kc();r.Ob();)i=uG(r.Pb(),10),IU(n.b[s.c.p][s.p]).Fc(n.b[i.c.p][i.p]),++n.b[i.c.p][i.p].c;u=f}}}function Gzn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w;for(i.Ug("Model order cycle breaking",1),n.a=0,n.b=0,l=new Zm,h=t.a.c.length,s=new Ww(t.a);s.a<s.c.c.length;)vR(u=uG(N3(s),10),(GYn(),imt))&&(h=e.Math.max(h,uG(oIn(u,imt),17).a+1));for(w=new Ww(t.a);w.a<w.c.c.length;)for(o=NAn(n,b=uG(N3(w),10),h),f=jmn(b,(can(),Wjt)).Kc();f.Ob();)for(a=new Ww(uG(f.Pb(),12).g);a.a<a.c.c.length;)NAn(n,(r=uG(N3(a),18)).d.i,h)<o&&mv(l.c,r);for(c=new Ww(l);c.a<c.c.c.length;)pqn(r=uG(N3(c),18),!0),kfn(t,(GYn(),Lpt),(qx(),!0));l.c.length=0,i.Vg()}function qzn(n,t,i){var r,c,a,o,u,s,h,f;for(c=t.d,a=i.d;c.a-a.a==0&&c.b-a.b==0;)o=!1,F$(t,250)&&F$(i,250)&&!o?(r=2,JF(c,new MO((s=YF(new eN(Wcn(u=uG(t,250).a)),Vcn(u))).a/e.Math.sqrt(s.a*s.a+s.b*s.b)*r,-s.b/e.Math.sqrt(s.a*s.a+s.b*s.b)*r)),r=s==(f=YF(new eN(Wcn(h=uG(i,250).a)),Vcn(h)))?-2:2,JF(c,new MO(f.a/e.Math.sqrt(f.a*f.a+f.b*f.b)*r,-f.b/e.Math.sqrt(f.a*f.a+f.b*f.b)*r)),o=!0):(c.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,c.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.a+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5,a.b+=uRn(n,26)*G0n+uRn(n,27)*q0n-.5)}function Xzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(z8(u=kOn(t),new _d(uG(oIn(t,(jYn(),Kyt)),322))),z8(u,new Bd(uG(oIn(t,Oyt),299))),b=0,s=new Zm,r=new XJ(u);r.a!=r.b;)i=uG(rwn(r),36),JVn(n.c,i),b+=(f=uG(oIn(i,(GYn(),wmt)),15)).gc(),kD(s,new WO(i,f.Kc()));for(e.Ug("Recursive hierarchical layout",b),l=uG(uG(zq(s,s.c.length-1),42).b,51);l.Ob();)for(o=new Ww(s);o.a<o.c.c.length;)for(a=uG(N3(o),42),f=uG(a.b,51),c=uG(a.a,36);f.Ob();){if(F$(h=uG(f.Pb(),47),514)){if(c.e)break;h.Kf(c,e.eh(1));break}h.Kf(c,e.eh(1))}e.Vg()}function zzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Layer size calculation",1),f=M0n,h=T0n,c=!1,u=new Ww(n.b);u.a<u.c.c.length;)if((s=(o=uG(N3(u),30)).c).a=0,s.b=0,0!=o.a.c.length){for(c=!0,b=new Ww(o.a);b.a<b.c.c.length;)d=(l=uG(N3(b),10)).o,w=l.d,s.a=e.Math.max(s.a,d.a+w.b+w.c);g=(r=uG(zq(o.a,0),10)).n.b-r.d.d,r.k==(zIn(),lbt)&&(g-=uG(oIn(n,(jYn(),CTt)),140).d),i=(a=uG(zq(o.a,o.a.c.length-1),10)).n.b+a.o.b+a.d.a,a.k==lbt&&(i+=uG(oIn(n,(jYn(),CTt)),140).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,t.Vg()}function Vzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(c=0,a=0,s=new Ww(n.a);s.a<s.c.c.length;)o=uG(N3(s),10),c=e.Math.max(c,o.d.b),a=e.Math.max(a,o.d.c);for(u=new Ww(n.a);u.a<u.c.c.length;){switch(o=uG(N3(u),10),uG(oIn(o,(jYn(),byt)),255).g){case 1:w=0;break;case 2:w=1;break;case 5:w=.5;break;default:for(i=0,f=0,b=new Ww(o.j);b.a<b.c.c.length;)0==(l=uG(N3(b),12)).e.c.length||++i,0==l.g.c.length||++f;w=i+f==0?.5:f/(i+f)}g=n.c,h=o.o.a,p=(g.a-h)*w,w>.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=o.d.b)&&(p=r),d=o.d.c,p>g.a-d-h&&(p=g.a-d-h),o.n.a=t+p}}function Wzn(n){var t,e,i;if((e=uG(oIn(n,(jYn(),gMt)),171))==(Gpn(),Imt)){for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(!F9(uG(N9(t),18)))throw hv(new jM(y6n+ZTn(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==Amt)for(i=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(i);)if(!F9(uG(N9(i),18)))throw hv(new jM(y6n+ZTn(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 Qzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(n.e&&n.c.c<n.f)throw hv(new kM("Expected "+n.f+" phases to be configured; only found "+n.c.c));for(h=uG(Mj(n.g),9),b=iR(n.f),o=0,s=(c=h).length;o<s;++o)(f=uG(xen(n,(i=c[o]).g),188))?kD(b,uG(xpn(n,f),106)):b.c.push(null);for(w=new wJ,kS(JJ(YJ(JJ(new fX(null,new h3(b,16)),new ou),new Hp(t)),new uu),new Up(w)),gsn(w,n.a),e=new Zm,a=0,u=(r=h).length;a<u;++a)Ohn(e,Fhn(n,PZ(uG(xen(w,(i=r[a]).g),20)))),(l=uG(zq(b,i.g),106))&&mv(e.c,l);return Ohn(e,Fhn(n,PZ(uG(xen(w,h[h.length-1].g+1),20)))),e}function Jzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(l=new Zm,c=new Zm,d=null,o=t.Kc();o.Ob();)a=new Vg(uG(o.Pb(),17).a),mv(c.c,a),d&&(a.d=d,d.e=a),d=a;for(v=cqn(n),h=0;h<c.c.length;++h){for(b=null,g=T7((u3(0,c.c.length),uG(c.c[0],661))),i=null,r=M0n,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,u=w):(s=g,u=p),k=uM(pK(oIn(n,(jYn(),HTt)))),(m=v[f]+e.Math.pow(u,k))<r&&(r=m,(i=s).c=f),g&&f==g.b&&(b=g,g=aV(g));i&&(kD(l,xwn(i.c)),i.a=!0,ngn(i))}return hZ(),UX(l.c,l.c.length,null),l}function Yzn(n,t,e){var i,r,c,a,o,u;if(0==t.l&&0==t.m&&0==t.h)throw hv(new wM("divide by zero"));if(0==n.l&&0==n.m&&0==n.h)return e&&(Qat=p$(0,0,0)),p$(0,0,0);if(t.h==b0n&&0==t.m&&0==t.l)return apn(n,e);if(u=!1,t.h>>19&&(t=gfn(t),u=!u),a=kRn(t),c=!1,r=!1,i=!1,n.h==b0n&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return o=gDn(n,a),u&&Yfn(o),e&&(Qat=p$(0,0,0)),o;n=LL((tin(),Jat)),i=!0,u=!u}else n.h>>19&&(c=!0,n=gfn(n),i=!0,u=!u);return-1!=a?nln(n,a,u,c,e):yEn(n,t)<0?(e&&(Qat=c?gfn(n):p$(n.l,n.m,n.h)),p$(0,0,0)):gUn(i?n:p$(n.l,n.m,n.h),t,u,c,r,e)}function Zzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(a=n.e,u=t.e,0==a)return t;if(0==u)return n;if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a==u?(w=pz(h=Lgn(e,i)),0==(b=pz(Dz(h,32)))?new Z5(a,w):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[w,b]))):(cHn(),BA(a<0?$gn(i,e):$gn(e,i),0)?Rmn(a<0?$gn(i,e):$gn(e,i)):hW(Rmn(Men(a<0?$gn(i,e):$gn(e,i)))));if(a==u)l=a,f=c>=o?Cnn(n.a,c,t.a,o):Cnn(t.a,o,n.a,c);else{if(0==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))return cHn(),_ot;1==r?(l=a,f=t7(n.a,c,t.a,o)):(l=u,f=t7(t.a,o,n.a,c))}return K4(s=new VV(l,f.length,f)),s}function nVn(n,t){var e,i,r,c,a,o,u;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=uG(a.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(o=n.r.a.ec().Kc();o.Ob();)r=uG(o.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(u=t.w.a.ec().Kc();u.Ob();)r=uG(u.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,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=uG(c.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e<i?new O7(n,t,i-e):i<e?new O7(t,n,e-i):(new O7(t,n,0),new O7(n,t,0))}}function tVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(s=t.c,r=AN(n.e),f=vD(HR(D$(ON(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,u=new Ww(s);u.a<u.c.c.length;){switch(b=e+(l=(o=uG(N3(u),407)).b).a,g=i+l.b,w=t0(b/n.a),p=t0(g/n.b),(c=o.a).g){case 0:vyn(),h=yht;break;case 1:vyn(),h=kht;break;case 2:vyn(),h=Mht;break;default:vyn(),h=Tht}c.a?(m=t0((g+o.c)/n.b),kD(n.f,new LB(h,xwn(p),xwn(m))),c==(myn(),Dht)?wfn(n,0,p,w,m):wfn(n,w,p,n.d-1,m)):(d=t0((b+o.c)/n.a),kD(n.f,new LB(h,xwn(w),xwn(d))),c==(myn(),Nht)?wfn(n,w,0,d,p):wfn(n,w,p,d,n.c-1))}}function eVn(n){var t,e,i,r,c,a,o,u,s,h;for(t=new ys,e=new ys,s=m_(jrt,(r=GUn(n.b,Ert))?mK(Lmn((!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),r.b),Srt)):null),u=0;u<n.i;++u)F$(o=uG(n.g[u],179),102)?(a=uG(o,19)).Bb&Qtt?(!(a.Bb&VZn)||!s&&null==((c=GUn(a,Ert))?mK(Lmn((!c.b&&(c.b=new XR((YYn(),H_t),wBt,c)),c.b),_et)):null))&&ttn(t,a):(h=lMn(a))&&h.Bb&Qtt||(!(a.Bb&VZn)||!s&&null==((i=GUn(a,Ert))?mK(Lmn((!i.b&&(i.b=new XR((YYn(),H_t),wBt,i)),i.b),_et)):null))&&ttn(e,a):(PP(),uG(o,69).xk()&&(o.sk()||(ttn(t,o),ttn(e,o))));lbn(t),lbn(e),n.a=uG(t.g,254),uG(e.g,254)}function iVn(n,t,e){var i,r,c,a,o,u,s;if(emn(t,e)>=0)return e;switch(sJ(Nen(n,e))){case 2:if(m_("",tdn(n,e.qk()).xe())){if(u=hxn(n,t,o=HJ(Nen(n,e)),BJ(Nen(n,e))))return u;for(a=0,s=(r=AHn(n,t)).gc();a<s;++a)if(WRn(ZV(Nen(n,u=uG(r.Xb(a),179))),o))return u}return null;case 4:if(m_("",tdn(n,e.qk()).xe())){for(i=e;i;i=F3(Nen(n,i)))if(u=fxn(n,t,HJ(Nen(n,i)),BJ(Nen(n,i))))return u;if(o=HJ(Nen(n,e)),m_(lct,o))return cSn(n,t);for(a=0,s=(c=LHn(n,t)).gc();a<s;++a)if(WRn(ZV(Nen(n,u=uG(c.Xb(a),179))),o))return u}return null;default:return null}}function rVn(n,t,e){var i,r,c,a,o,u,s,h;if(0==e.gc())return!1;if(PP(),c=(o=uG(t,69).xk())?e:new Drn(e.gc()),EFn(n.e,t)){if(t.Si())for(s=e.Kc();s.Ob();)aqn(n,t,u=s.Pb(),F$(t,102)&&!!(uG(t,19).Bb&P0n))||(r=R5(t,u),c.Hc(r)||c.Fc(r));else if(!o)for(s=e.Kc();s.Ob();)r=R5(t,u=s.Pb()),c.Fc(r)}else{if(e.gc()>1)throw hv(new vM(dct));for(h=VKn(n.e.Dh(),t),i=uG(n.g,124),a=0;a<n.i;++a)if(r=i[a],h.am(r.Lk())){if(e.Hc(o?r:r.md()))return!1;for(s=e.Kc();s.Ob();)u=s.Pb(),uG(Uyn(n,a,o?uG(u,76):R5(t,u)),76);return!0}o||(r=R5(t,e.Kc().Pb()),c.Fc(r))}return CW(n,c)}function cVn(n,t){var i,r,c,a,o,u,s;for(s=new lS,u=new _w(new Fw(n.c).a.vc().Kc());u.a.Ob();)c=uG(u.a.Pb(),44),0==(a=uG(c.md(),467)).b&&s8(s,a,s.c.b,s.c);for(;0!=s.b;)for(null==(a=uG(0==s.b?null:(MK(0!=s.b),Lrn(s,s.a.a)),467)).a&&(a.a=0),r=new Ww(a.d);r.a<r.c.c.length;)null==(i=uG(N3(r),663)).b.a?i.b.a=uM(a.a)+i.a:t.o==(w0(),wSt)?i.b.a=e.Math.min(uM(i.b.a),uM(a.a)+i.a):i.b.a=e.Math.max(uM(i.b.a),uM(a.a)+i.a),--i.b.b,0==i.b.b&&aq(s,i.b);for(o=new _w(new Fw(n.c).a.vc().Kc());o.a.Ob();)c=uG(o.a.Pb(),44),a=uG(c.md(),467),t.i[a.c.p]=a.a}function aVn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(f=i+t.c.c.a,w=new Ww(t.j);w.a<w.c.c.length;){if(b=uG(N3(w),12),c=Gfn(Uhn(cT(PNt,1),zZn,8,0,[b.i.n,b.n,b.a])),t.k==(zIn(),gbt)&&(u=uG(oIn(b,(GYn(),rmt)),12),c.a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[u.i.n,u.n,u.a])).a,t.n.a=c.a),o=new MO(0,c.b),b.j==(KQn(),kRt))o.a=f;else{if(b.j!=_Rt)continue;o.a=i}if(!(e.Math.abs(c.a-o.a)<=r)||mEn(t))for(a=b.g.c.length+b.e.c.length>1,h=new w7(b.b);l$(h.a)||l$(h.b);)l=(s=uG(l$(h.a)?N3(h.a):N3(h.b),18)).c==b?s.d:s.c,e.Math.abs(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).b-o.b)>1&&sFn(n,s,o,a,b)}}function oVn(n){var t,i,r,c,a,o;if(c=new N4(n.e,0),r=new N4(n.a,0),n.d)for(i=0;i<n.b;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++);else for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);for(t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++))));n.f-t>$9n;){for(a=t,o=0;e.Math.abs(t-a)<$9n;)++o,t=uM((MK(c.b<c.d.gc()),pK(c.d.Xb(c.c=c.b++)))),MK(r.b<r.d.gc()),r.d.Xb(r.c=r.b++);o<n.b&&(MK(c.b>0),c.a.Xb(c.c=--c.b),zGn(n,n.b-o,a,r,c),MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++)),MK(r.b>0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i<n.b-1;i++)MK(c.b<c.d.gc()),c.d.Xb(c.c=c.b++),LQ(c);n.d=!0,n.c=!0}function uVn(){uVn=E,KBt=(yj(),RBt).b,BBt=uG(zrn(gZ(RBt.b),0),35),FBt=uG(zrn(gZ(RBt.b),1),35),_Bt=uG(zrn(gZ(RBt.b),2),35),JBt=RBt.bb,uG(zrn(gZ(RBt.bb),0),35),uG(zrn(gZ(RBt.bb),1),35),ZBt=RBt.fb,nHt=uG(zrn(gZ(RBt.fb),0),35),uG(zrn(gZ(RBt.fb),1),35),uG(zrn(gZ(RBt.fb),2),19),eHt=RBt.qb,cHt=uG(zrn(gZ(RBt.qb),0),35),uG(zrn(gZ(RBt.qb),1),19),uG(zrn(gZ(RBt.qb),2),19),iHt=uG(zrn(gZ(RBt.qb),3),35),rHt=uG(zrn(gZ(RBt.qb),4),35),oHt=uG(zrn(gZ(RBt.qb),6),35),aHt=uG(zrn(gZ(RBt.qb),5),19),HBt=RBt.j,UBt=RBt.k,GBt=RBt.q,qBt=RBt.w,XBt=RBt.B,zBt=RBt.A,VBt=RBt.C,WBt=RBt.D,QBt=RBt._,YBt=RBt.cb,tHt=RBt.hb}function sVn(n,t,i){var r,c,a,o,u,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,o=(s=uG(h.Pb(),12)).j==(KQn(),yRt)||s.j==KRt){if(!(f=uG(oIn(s,(GYn(),lmt)),10)))continue;l+=Y_n(n,r,s,f)}else{for(u=new Ww(s.g);u.a<u.c.c.length;){if((c=uG(N3(u),18).d).i.c==t.c){kD(n.a,s);continue n}l+=n.g[c.p]}for(a=new Ww(s.e);a.a<a.c.c.length;){if((c=uG(N3(a),18).c).i.c==t.c){kD(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])):o&&(n.f[s.p]=l)}}function hVn(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 fVn(n,t,e){var i,r;for(e.Ug("Graph transformation ("+n.a+")",1),r=T3(t.a),i=new Ww(t.b);i.a<i.c.c.length;)Ohn(r,uG(N3(i),30).a);if(uG(oIn(t,(jYn(),Hyt)),428)==(Vin(),dgt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r);break;case 3:Fmn(t,r);break;case 4:n.a==(Aun(),Obt)?(Fmn(t,r),b6(t,r)):(b6(t,r),Fmn(t,r))}else if(n.a==(Aun(),Obt))switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:Fmn(t,r),l6(t,r);break;case 4:l6(t,r),Fmn(t,r)}else switch(uG(oIn(t,Byt),88).g){case 2:l6(t,r),b6(t,r);break;case 3:l6(t,r),Fmn(t,r);break;case 4:Fmn(t,r),l6(t,r)}e.Vg()}function lVn(n){var t,i,r,c,a,o,u,s;for(a=new Ww(n.a.b);a.a<a.c.c.length;)(c=uG(N3(a),86)).b.c=c.g.c,c.b.d=c.g.d;for(s=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a<r.c.c.length;)i=uG(N3(r),86),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(u=KW(n.c).a.nc();u.Ob();)o=uG(u.Pb(),42),i=uG(o.b,86),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=BR(new MO(s.a,s.b)),n.e=YF(new MO(t.a,t.b),s),n.a.a.c.length=0,n.a.b.c.length=0}function bVn(n){var t,e,i,r,c,a,o;for(Win(),o=new dk,e=new Ww(n);e.a<e.c.c.length;)t=uG(N3(e),148),(!o.b||t.c>=o.b.c)&&(o.b=t),(!o.c||t.c<=o.c.c)&&(o.d=o.c,o.c=t),(!o.e||t.d>=o.e.d)&&(o.e=t),(!o.f||t.d<=o.f.d)&&(o.f=t);return i=new cyn((Xhn(),Flt)),O4(n,Vlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[i]))),a=new cyn(Hlt),O4(n,zlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[a]))),r=new cyn(_lt),O4(n,Xlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[r]))),c=new cyn(Blt),O4(n,qlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[c]))),jRn(i.c,Flt),jRn(r.c,_lt),jRn(c.c,Blt),jRn(a.c,Hlt),o.a.c.length=0,Ohn(o.a,i.c),Ohn(o.a,Spn(r.c)),Ohn(o.a,c.c),Ohn(o.a,Spn(a.c)),o}function wVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(t.Ug(snt,1),w=uM(pK(zDn(n,(lBn(),POt)))),o=uM(pK(zDn(n,(S_n(),bAt)))),u=uG(zDn(n,hAt),107),Non((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),f=ozn((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),w,o),!n.a&&(n.a=new fV(bFt,n,10,11)),h=new Ww(f);h.a<h.c.c.length;)for(c=new Ww((s=uG(N3(h),186)).a);c.a<c.c.c.length;)Gun(b=new r0((r=uG(N3(c),172)).s,r.t,uM(pK(zDn(n,bAt)))),r),kD(s.d,b);l=Xjn(f,o),d=e.Math.max(l.a,uM(pK(zDn(n,EOt)))-(u.b+u.c)),i=(a=e.Math.max(l.b,uM(pK(zDn(n,MOt)))-(u.d+u.a)))-l.b,Myn(n,pOt,i),Myn(n,vOt,d),Myn(n,mOt,a+i),Myn(n,SOt,f),t.Vg()}function dVn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w;for(u=new XL,s=new XL,b=new XL,w=new XL,o=uM(pK(oIn(t,(jYn(),ETt)))),r=uM(pK(oIn(t,dTt))),a=new Ww(e);a.a<a.c.c.length;)if(c=uG(N3(a),10),(f=uG(oIn(c,(GYn(),Fpt)),64))==(KQn(),yRt))for(s.a.zc(c,s),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(u,uG(N9(i),18).c.i);else if(f==KRt)for(w.a.zc(c,w),i=new Fz(ix(qgn(c).a.Kc(),new h));hDn(i);)FV(b,uG(N9(i),18).c.i);0!=u.a.gc()&&(l=YVn(new NW(2,r),t,u,s,-o-t.c.b))>0&&(n.a=o+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=YVn(new NW(1,r),t,b,w,t.f.b+o-t.c.b))>0&&(t.f.b+=o+(l-1)*r)}function gVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(f=uM(pK(oIn(n,(jYn(),mTt)))),r=uM(pK(oIn(n,RTt))),kfn(b=new Qu,mTt,f+r),m=(h=t).d,g=h.c.i,v=h.d.i,p=GL(g.c),k=GL(v.c),c=new Zm,l=p;l<=k;l++)Hb(u=new gMn(n),(zIn(),wbt)),kfn(u,(GYn(),rmt),h),kfn(u,JMt,($Pn(),cRt)),kfn(u,kTt,b),w=uG(zq(n.b,l),30),l==p?$jn(u,w.a.c.length-i,w):a2(u,w),(y=uM(pK(oIn(h,tMt))))<0&&kfn(h,tMt,y=0),u.o.b=y,d=e.Math.floor(y/2),NLn(o=new lOn,(KQn(),_Rt)),o2(o,u),o.n.b=d,NLn(s=new lOn,kRt),o2(s,u),s.n.b=d,u2(h,o),zsn(a=new UZ,h),kfn(a,bMt,null),c2(a,s),u2(a,m),IEn(u,h,a),mv(c.c,a),h=a;return c}function pVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(o=uG(yOn(n,(KQn(),_Rt)).Kc().Pb(),12).e,f=uG(yOn(n,kRt).Kc().Pb(),12).g,a=o.c.length,g=n3(uG(zq(n.j,0),12));a-- >0;){for(u3(0,o.c.length),b=uG(o.c[0],18),u3(0,f.c.length),r=Ten((i=uG(f.c[0],18)).d.e,i,0),w6(b,i.d,r),c2(i,null),u2(i,null),l=b.a,t&&aq(l,new eN(g)),e=Fkn(i.a,0);e.b!=e.d.c;)aq(l,new eN(uG(I6(e),8)));for(d=b.b,h=new Ww(i.b);h.a<h.c.c.length;)s=uG(N3(h),72),mv(d.c,s);if(w=uG(oIn(b,(jYn(),bMt)),75),c=uG(oIn(i,bMt),75))for(w||(w=new Uk,kfn(b,bMt,w)),u=Fkn(c,0);u.b!=u.d.c;)aq(w,new eN(uG(I6(u),8)))}}function mVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(!((d=t.b.c.length)<3)){for(b=Inn(YHt,W1n,28,d,15,1),f=0,h=new Ww(t.b);h.a<h.c.c.length;)s=uG(N3(h),30),b[f++]=s.a.c.length;for(l=new N4(t.b,2),i=1;i<d-1;i++)for(MK(l.b<l.d.gc()),w=new Ww((e=uG(l.d.Xb(l.c=l.b++),30)).a),c=0,o=0,u=0;u<b[i+1];u++)if(v=uG(N3(w),10),u==b[i+1]-1||KOn(n,v,i+1,i)){for(a=b[i]-1,KOn(n,v,i+1,i)&&(a=n.c.e[uG(uG(uG(zq(n.c.b,v.p),15).Xb(0),42).a,10).p]);o<=u;){if(!KOn(n,m=uG(zq(e.a,o),10),i+1,i))for(p=uG(zq(n.c.b,m.p),15).Kc();p.Ob();)g=uG(p.Pb(),42),((r=n.c.e[uG(g.a,10).p])<c||r>a)&&FV(n.b,uG(g.b,18));++o}c=a}}}function vVn(n,t){var e;if(null==t||m_(t,IZn))return null;if(0==t.length&&n.k!=(lAn(),pNt))return null;switch(n.k.g){case 1:return Bvn(t,Fnt)?(qx(),eot):Bvn(t,_nt)?(qx(),tot):null;case 2:try{return xwn(mUn(t,j1n,vZn))}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 4:try{return YIn(t)}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 3:return t;case 5:return wbn(n),NNn(n,t);case 6:return wbn(n),Lxn(n,n.a,t);case 7:try{return(e=Q$n(n)).cg(t),e}catch(i){if(F$(i=Ehn(i),33))return null;throw hv(i)}default:throw hv(new kM("Invalid type set for this layout option."))}}function kVn(n){var t;switch(n.d){case 1:if(n.Sj())return-2!=n.o;break;case 2:if(n.Sj())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.Rj(),n.p){case 0:return null!=t&&oM(gK(t))!=HA(n.k,0);case 1:return null!=t&&uG(t,222).a!=pz(n.k)<<24>>24;case 2:return null!=t&&uG(t,180).a!=(pz(n.k)&D1n);case 6:return null!=t&&HA(uG(t,168).a,n.k);case 5:return null!=t&&uG(t,17).a!=pz(n.k);case 7:return null!=t&&uG(t,191).a!=pz(n.k)<<16>>16;case 3:return null!=t&&uM(pK(t))!=n.j;case 4:return null!=t&&uG(t,161).a!=n.j;default:return null==t?null!=n.n:!udn(t,n.n)}}function yVn(n,t,e){var i,r,c,a;return n.ol()&&n.nl()&&xA(a=CV(n,uG(e,58)))!==xA(e)?(n.xj(t),n.Dj(t,Atn(n,t,a)),n.al()&&(r=uG(e,54),c=n.ml()?n.kl()?r.Th(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),null):r.Th(n.b,emn(r.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,null):r.Th(n.b,-1-n.Lj(),null,null),!uG(a,54).Ph()&&(i=uG(a,54),c=n.ml()?n.kl()?i.Rh(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),c):i.Rh(n.b,emn(i.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,c):i.Rh(n.b,-1-n.Lj(),null,c)),c&&c.oj()),uN(n.b)&&n.Jj(n.Ij(9,e,a,t,!1)),a):e}function MVn(n){var t,e,i,r,c,a,o,u,s,h;for(i=new Zm,a=new Ww(n.e.a);a.a<a.c.c.length;){for(h=0,(r=uG(N3(a),125)).k.c.length=0,e=new Ww(Ebn(r));e.a<e.c.c.length;)(t=uG(N3(e),218)).f&&(kD(r.k,t),++h);1==h&&mv(i.c,r)}for(c=new Ww(i);c.a<c.c.c.length;)for(r=uG(N3(c),125);1==r.k.c.length;){for(s=uG(N3(new Ww(r.k)),218),n.b[s.c]=s.g,o=s.d,u=s.e,e=new Ww(Ebn(r));e.a<e.c.c.length;)udn(t=uG(N3(e),218),s)||(t.f?o==t.d||u==t.e?n.b[s.c]-=n.b[t.c]-t.g:n.b[s.c]+=n.b[t.c]-t.g:r==o?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);men(o.k,s),men(u.k,s),r=o==r?s.e:s.d}}function TVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.b=0,void(i.n.c=0);for(h=n.u.Hc((eNn(),wRt)),o=0,u=s.Kc(),f=null,l=0,b=0;u.Ob();)c=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),a=r.b.Mf().a,n.A.Hc((Qmn(),JRt))&&vBn(n,t),f?(w=b+f.d.c+n.w+r.d.b,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-c)<=Z2n||l==c||isNaN(l)&&isNaN(c)?0:w/(c-l)))):n.C&&n.C.b>0&&(o=e.Math.max(o,run(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),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-1)<=Z2n||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=o}function jVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((eNn(),wRt)),o=0,n.A.Hc((Qmn(),JRt))&&kBn(n,t),u=s.Kc(),f=null,b=0,l=0;u.Ob();)a=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),c=r.b.Mf().b,f?(w=l+f.d.a+n.w+r.d.d,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-a)<=Z2n||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(o=e.Math.max(o,run(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),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-1)<=Z2n||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=o}function EVn(n,t,e,i,r,c,a,o){var u,s,h,f,l,b,w,d;if(b=!1,u=cKn(e.q,t.f+t.b-e.q.f),l=i.f>t.b&&o,h=uXn(i,d=r-(e.q.e+u-a),!1).a,l&&h>i.f)return!1;if(l){for(f=0,w=new Ww(t.d);w.a<w.c.c.length;)f+=cKn(uG(N3(w),315),i.f)+a;d=r-f}return!(d<i.g)&&(s=c==n.c.length-1&&d>=(u3(c,n.c.length),uG(n.c[c],186)).e,!(!l&&h>t.b&&!s)&&((s||l||h<=t.b)&&(s&&h>t.b?(e.d=h,dtn(e,EOn(e,h))):(USn(e.q,u),e.c=!0),dtn(i,r-(e.s+e.r)),oMn(i,e.q.e+e.q.d,t.f),fan(t,i),n.c.length>c&&(uEn((u3(c,n.c.length),uG(n.c[c],186)),i),0==(u3(c,n.c.length),uG(n.c[c],186)).a.c.length&&i7(n,c)),b=!0),b))}function SVn(n,t,e){var i,r,c,a,o,u;for(this.g=n,o=t.d.length,u=e.d.length,this.d=Inn(pbt,e6n,10,o+u,0,1),a=0;a<o;a++)this.d[a]=t.d[a];for(c=0;c<u;c++)this.d[o+c]=e.d[c];if(t.e){if(this.e=oG(t.e),this.e.Mc(e),e.e)for(r=e.e.Kc();r.Ob();)(i=uG(r.Pb(),239))!=t&&(this.e.Hc(i)?--i.c:this.e.Fc(i))}else e.e&&(this.e=oG(e.e),this.e.Mc(t));this.f=t.f+e.f,this.a=t.a+e.a,this.a>0?Rrn(this,this.f/this.a):null!=oD(t.g,t.d[0]).a&&null!=oD(e.g,e.d[0]).a?Rrn(this,(uM(oD(t.g,t.d[0]).a)+uM(oD(e.g,e.d[0]).a))/2):null!=oD(t.g,t.d[0]).a?Rrn(this,oD(t.g,t.d[0]).a):null!=oD(e.g,e.d[0]).a&&Rrn(this,oD(e.g,e.d[0]).a)}function PVn(n,t){var e,i,r,c,a,o,u,s,h;for(n.a=new wQ(efn(axt)),i=new Ww(t.a);i.a<i.c.c.length;){for(e=uG(N3(i),855),a=new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),kD(n.a.a,a),u=new Ww(e.d);u.a<u.c.c.length;)rWn(s=new Jx(n,o=uG(N3(u),116)),uG(oIn(e.c,(GYn(),xpt)),21)),PV(n.g,e)||(vJ(n.g,e,new MO(o.c,o.d)),vJ(n.f,e,s)),kD(n.a.b,s),t4(a,s);for(c=new Ww(e.b);c.a<c.c.c.length;)s=new Jx(n,(r=uG(N3(c),602)).Df()),vJ(n.b,r,new WO(a,s)),rWn(s,uG(oIn(e.c,(GYn(),xpt)),21)),r.Bf()&&(rWn(h=new Yvn(n,r.Bf(),1),uG(oIn(e.c,xpt),21)),t4(new Zvn(Uhn(cT(xlt,1),EZn,86,0,[])),h),UNn(n.c,r.Af(),new WO(a,h)))}return n.a}function CVn(n){var t;this.a=n,t=(zIn(),Uhn(cT(vbt,1),p1n,273,0,[dbt,wbt,lbt,gbt,bbt,fbt])).length,this.b=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),this.c=Jq(lNt,[zZn,m9n],[601,149],0,[t,t],2),DZ(this,dbt,(jYn(),ETt),STt),Jsn(this,dbt,wbt,mTt,vTt),$Z(this,dbt,gbt,mTt),$Z(this,dbt,lbt,mTt),Jsn(this,dbt,bbt,ETt,STt),DZ(this,wbt,dTt,gTt),$Z(this,wbt,gbt,dTt),$Z(this,wbt,lbt,dTt),Jsn(this,wbt,bbt,mTt,vTt),GN(this,gbt,dTt),$Z(this,gbt,lbt,dTt),$Z(this,gbt,bbt,MTt),GN(this,lbt,ITt),Jsn(this,lbt,bbt,jTt,TTt),DZ(this,bbt,dTt,dTt),DZ(this,fbt,dTt,gTt),Jsn(this,fbt,dbt,mTt,vTt),Jsn(this,fbt,bbt,mTt,vTt),Jsn(this,fbt,wbt,mTt,vTt)}function IVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(F$(a=e.Lk(),102)&&uG(a,19).Bb&P0n&&(l=uG(e.md(),54),(d=mwn(n.e,l))!=l)){if(yD(n,t,WPn(n,t,h=R5(a,d))),f=null,uN(n.e)&&(i=iVn((gAn(),kBt),n.e.Dh(),a))!=ern(n.e.Dh(),n.c)){for(g=VKn(n.e.Dh(),a),o=0,c=uG(n.g,124),u=0;u<t;++u)r=c[u],g.am(r.Lk())&&++o;(f=new i8(n.e,9,i,l,d,o,!1)).nj(new Ken(n.e,9,n.c,e,h,t,!1))}return(b=lMn(w=uG(a,19)))?(f=l.Th(n.e,emn(l.Dh(),b),null,f),f=uG(d,54).Rh(n.e,emn(d.Dh(),b),null,f)):w.Bb&Qtt&&(s=-1-emn(n.e.Dh(),w),f=l.Th(n.e,s,null,null),!uG(d,54).Ph()&&(f=uG(d,54).Rh(n.e,s,null,f))),f&&f.oj(),h}return e}function OVn(n){var t,e,i;for(Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Dl])),e=new Eb(n),i=0;i<e.a.length;++i)m_(t=uin(e,i).te().a,"layered")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new fl])):m_(t,"force")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Gf])):m_(t,"stress")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Xf])):m_(t,"mrtree")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new vl])):m_(t,"radial")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new El])):m_(t,"disco")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Bf,new Hf])):m_(t,"sporeOverlap")||m_(t,"sporeCompaction")?Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Ol])):m_(t,"rectpacking")&&Oln(NFt,Uhn(cT(vst,1),EZn,134,0,[new Pl]))}function AVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=new eN(n.o),p=t.a/l.a,o=t.b/l.b,d=t.a-l.a,c=t.b-l.b,e)for(r=xA(oIn(n,(jYn(),JMt)))===xA(($Pn(),cRt)),w=new Ww(n.j);w.a<w.c.c.length;)switch((b=uG(N3(w),12)).j.g){case 1:r||(b.n.a*=p);break;case 2:b.n.a+=d,r||(b.n.b*=o);break;case 3:r||(b.n.a*=p),b.n.b+=c;break;case 4:r||(b.n.b*=o)}for(s=new Ww(n.b);s.a<s.c.c.length;)h=(u=uG(N3(s),72)).n.a+u.o.a/2,f=u.n.b+u.o.b/2,(g=h/l.a)+(a=f/l.b)>=1&&(g-a>0&&f>=0?(u.n.a+=d,u.n.b+=c*a):g-a<0&&h>=0&&(u.n.a+=d*g,u.n.b+=c));n.o.a=t.a,n.o.b=t.b,kfn(n,(jYn(),DMt),(Qmn(),new nB(i=uG(Mj(sKt),9),uG(MF(i,i.length),9),0)))}function LVn(n,t,e,i,r,c){if(null!=t&&mpn(t,YFt,ZFt))throw hv(new vM("invalid scheme: "+t));if(!(n||null!=e&&-1==xL(e,$Cn(35))&&e.length>0&&(s3(0,e.length),47!=e.charCodeAt(0))))throw hv(new vM("invalid opaquePart: "+e));if(n&&(null==t||!ZE(UFt,t.toLowerCase()))&&null!=e&&mpn(e,n_t,t_t))throw hv(new vM(Vit+e));if(n&&null!=t&&ZE(UFt,t.toLowerCase())&&!bPn(e))throw hv(new vM(Vit+e));if(!Ppn(i))throw hv(new vM("invalid device: "+i));if(!Jbn(r))throw hv(new vM(null==r?"invalid segments: null":"invalid segment: "+Lbn(r)));if(null!=c&&-1!=xL(c,$Cn(35)))throw hv(new vM("invalid query: "+c))}function NVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(i.Ug("Network simplex layering",1),n.b=t,p=4*uG(oIn(t,(jYn(),OTt)),17).a,(g=n.b.a).c.length<1)i.Vg();else{for(d=null,c=Fkn(a=xHn(n,g),0);c.b!=c.d.c;){for(r=uG(I6(c),15),u=p*t0(e.Math.sqrt(r.gc())),JHn(kT(MT(yT(_B(o=wUn(r)),u),d),!0),i.eh(1)),l=n.b.b,w=new Ww(o.a);w.a<w.c.c.length;){for(b=uG(N3(w),125);l.c.length<=b.e;)GX(l,l.c.length,new bQ(n.b));a2(uG(b.f,10),uG(zq(l,b.e),30))}if(a.b>1)for(d=Inn(YHt,W1n,28,n.b.b.c.length,15,1),f=0,h=new Ww(n.b.b);h.a<h.c.c.length;)s=uG(N3(h),30),d[f++]=s.a.c.length}g.c.length=0,n.a=null,n.b=null,n.c=null,i.Vg()}}function $Vn(n,t){var e,i,r,c,a,o,u,s,h,f;for(h=new Zm,f=new ND,c=null,r=0,i=0;i<t.length;++i)switch(Yln(c,e=t[i])&&(r=kpn(n,f,h,VEt,r)),vR(e,(GYn(),zpt))&&(c=uG(oIn(e,zpt),10)),e.k.g){case 0:for(u=gN(YU(Dgn(e,(KQn(),yRt)),new Nc));oon(u);)a=uG(yen(u),12),n.d[a.p]=r++,mv(h.c,a);for(r=kpn(n,f,h,VEt,r),s=gN(YU(Dgn(e,KRt),new Nc));oon(s);)a=uG(yen(s),12),n.d[a.p]=r++,mv(h.c,a);break;case 3:Dgn(e,zEt).dc()||(a=uG(Dgn(e,zEt).Xb(0),12),n.d[a.p]=r++,mv(h.c,a)),Dgn(e,VEt).dc()||A6(f,e);break;case 1:for(o=Dgn(e,(KQn(),_Rt)).Kc();o.Ob();)a=uG(o.Pb(),12),n.d[a.p]=r++,mv(h.c,a);Dgn(e,kRt).Jc(new EI(f,e))}return kpn(n,f,h,VEt,r),h}function DVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(null==t||0==t.length)return null;if(!(c=uG(U1(n.f,t),23))){for(r=new _w(new Fw(n.d).a.vc().Kc());r.a.Ob();)if(a=uG(r.a.Pb(),44),o=(e=uG(a.md(),23)).f,l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}if(!c)for(i=new _w(new Fw(n.d).a.vc().Kc());i.a.Ob();)if(a=uG(i.a.Pb(),44),null!=(f=(e=uG(a.md(),23)).g))for(s=0,h=(u=f).length;s<h;++s)if(o=u[s],l=t.length,m_(o.substr(o.length-l,l),t)&&(t.length==o.length||46==VJ(o,o.length-t.length-1))){if(c)return null;c=e}c&&r2(n.f,t,c)}return c}function xVn(n,t){var e,i,r,c,a;for(e=new QM,a=!1,c=0;c<t.length;c++)if(s3(c,t.length),32!=(i=t.charCodeAt(c)))a?39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+=String.fromCharCode(i),++c):a=!1:e.a+=String.fromCharCode(i):xL("GyMLdkHmsSEcDahKzZv",$Cn(i))>0?(Ikn(n,e,0),e.a+=String.fromCharCode(i),Ikn(n,e,r=qvn(t,c)),c+=r-1):39==i?c+1<t.length&&(s3(c+1,t.length),39==t.charCodeAt(c+1))?(e.a+="'",++c):a=!0:e.a+=String.fromCharCode(i);else for(Ikn(n,e,0),e.a+=" ",Ikn(n,e,0);c+1<t.length&&(s3(c+1,t.length),32==t.charCodeAt(c+1));)++c;Ikn(n,e,0),iCn(n)}function RVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(v=aG(n),u=new Zm,s=(c=n.c.length)-1,h=c+1;0!=v.a.gc();){for(;0!=e.b;)MK(0!=e.b),p=uG(Lrn(e,e.a.a),118),v.a.Bc(p),p.g=s--,UGn(p,t,e,i);for(;0!=t.b;)MK(0!=t.b),m=uG(Lrn(t,t.a.a),118),v.a.Bc(m),m.g=h++,UGn(m,t,e,i);for(o=j1n,d=v.a.ec().Kc();d.Ob();){if(w=uG(d.Pb(),118),!i&&w.b>0&&w.a<=0){u.c.length=0,mv(u.c,w);break}(b=w.i-w.d)>=o&&(b>o&&(u.c.length=0,o=b),mv(u.c,w))}0!=u.c.length&&(a=uG(zq(u,iMn(r,u.c.length)),118),v.a.Bc(a),a.g=h++,UGn(a,t,e,i),u.c.length=0)}for(g=n.c.length+1,l=new Ww(n);l.a<l.c.c.length;)(f=uG(N3(l),118)).g<c&&(f.g=f.g+g)}function KVn(n,t,e){var i,r,c,a;this.j=n,this.e=SPn(n),this.o=this.j.e,this.i=!!this.o,this.p=this.i?uG(zq(e,HQ(this.o).p),219):null,r=uG(oIn(n,(GYn(),Hpt)),21),this.g=r.Hc((r_n(),tpt)),this.b=new Zm,this.d=new Umn(this.e),a=uG(oIn(this.j,dmt),234),this.q=ysn(t,a,this.e),this.k=new z0(this),c=n7(Uhn(cT(fdt,1),EZn,230,0,[this,this.d,this.k,this.q])),t!=(ean(),_Et)||oM(gK(oIn(n,(jYn(),Cyt))))?t==_Et&&oM(gK(oIn(n,(jYn(),Cyt))))?(i=new APn(this.e),mv(c.c,i),this.c=new Ron(i,a,uG(this.q,413))):this.c=new qC(t,this):(i=new APn(this.e),mv(c.c,i),this.c=new M6(i,a,uG(this.q,413))),kD(c,this.c),UXn(c,this.e),this.s=OJn(this.k)}function FVn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(c=new Zm,s=new Ww(i);s.a<s.c.c.length;)if(a=null,(o=uG(N3(s),453)).f==(can(),Wjt))for(w=new Ww(o.e);w.a<w.c.c.length;)HQ(g=(b=uG(N3(w),18)).d.i)==t?Crn(n,t,o,b,o.b,b.d):!e||jsn(g,e)?IIn(n,t,o,i,b):((l=JXn(n,t,e,b,o.b,Wjt,a))!=a&&mv(c.c,l),l.c&&(a=l));else for(f=new Ww(o.e);f.a<f.c.c.length;)if(HQ(d=(h=uG(N3(f),18)).c.i)==t)Crn(n,t,o,h,h.c,o.b);else{if(!e||jsn(d,e))continue;(l=JXn(n,t,e,h,o.b,Vjt,a))!=a&&mv(c.c,l),l.c&&(a=l)}for(u=new Ww(c);u.a<u.c.c.length;)o=uG(N3(u),453),-1!=Ten(t.a,o.a,0)||kD(t.a,o.a),o.c&&mv(r.c,o)}function _Vn(n){var t,i,r,c,a,o,u;for(t=0,a=new Ww(n.b.a);a.a<a.c.c.length;)(r=uG(N3(a),194)).b=0,r.c=0;for(ZIn(n,0),Npn(n,n.g),fKn(n.c),OM(n.c),xdn(),i=JDt,_Hn(DI(qWn(_Hn(DI(qWn(_Hn(qWn(n.c,i)),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.g),nIn(n,0),NXn(n,0),wxn(n,1),ZIn(n,1),Npn(n,n.d),fKn(n.c),o=new Ww(n.b.a);o.a<o.c.c.length;)r=uG(N3(o),194),t+=e.Math.abs(r.c);for(u=new Ww(n.b.a);u.a<u.c.c.length;)(r=uG(N3(u),194)).b=0,r.c=0;for(i=nxt,_Hn(DI(qWn(_Hn(DI(qWn(_Hn(OM(qWn(n.c,i))),Bdn(i)))),i))),qWn(n.c,JDt),agn(n,n.d),nIn(n,1),NXn(n,1),wxn(n,0),OM(n.c),c=new Ww(n.b.a);c.a<c.c.c.length;)r=uG(N3(c),194),t+=e.Math.abs(r.c);return t}function BVn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(oM(gK(oIn(e,(jYn(),sMt)))))for(r=new Ww(e.j);r.a<r.c.c.length;)for(o=0,u=(a=x4(uG(N3(r),12).g)).length;o<u;++o)(c=a[o]).d.i==e&&oM(gK(oIn(c,hMt)))&&(h=c.c,(s=uG(cQ(n.b,h),10))||(kfn(s=DJn(h,($Pn(),uRt),h.j,-1,null,null,h.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),h),vJ(n.b,h,s),kD(t.a,s)),l=c.d,(f=uG(cQ(n.b,l),10))||(kfn(f=DJn(l,($Pn(),uRt),l.j,1,null,null,l.o,uG(oIn(t,Byt),88),t),(GYn(),rmt),l),vJ(n.b,l,f),kD(t.a,f)),c2(i=K9(c),uG(zq(s.j,0),12)),u2(i,uG(zq(f.j,0),12)),UNn(n.a,c,new $B(i,t,(can(),Wjt))),uG(oIn(t,(GYn(),Hpt)),21).Fc((r_n(),tpt)))}function HVn(n,t){var e,i,r,c,a,o,u,s,h,f;for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(o=new Ww(uG(N3(i),30).a);o.a<o.c.c.length;)a=uG(N3(o),10),t.j[a.p]=a,t.i[a.p]=t.o==(w0(),dSt)?T0n:M0n;for($V(n.c),c=n.a.b,t.c==(b0(),hSt)&&(c=Spn(c)),_4(n.e,t,n.b),FP(t.p,null),r=c.Kc();r.Ob();)for(u=uG(r.Pb(),30).a,t.o==(w0(),dSt)&&(u=Spn(u)),f=u.Kc();f.Ob();)h=uG(f.Pb(),10),t.g[h.p]==h&&IJn(n,h,t);for(cVn(n,t),e=c.Kc();e.Ob();)for(f=new Ww(uG(e.Pb(),30).a);f.a<f.c.c.length;)h=uG(N3(f),10),t.p[h.p]=t.p[t.g[h.p].p],h==t.g[h.p]&&(s=uM(t.i[t.j[h.p].p]),(t.o==(w0(),dSt)&&s>T0n||t.o==wSt&&s<M0n)&&(t.p[h.p]=uM(t.p[h.p])+s));n.e.xg()}function UVn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w;for(e.Ug("Label dummy switching",1),i=uG(oIn(t,(jYn(),Gyt)),232),zun(t),r=dxn(t,i),n.a=Inn(eUt,I0n,28,t.b.c.length,15,1),vAn(),h=0,b=(o=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;h<b;++h)if(((c=o[h])==qdt||c==_dt||c==Udt)&&!uG($x(r.a,c)?r.b[c.g]:null,15).dc()){dsn(n,t);break}for(f=0,w=(u=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;f<w;++f)(c=u[f])==qdt||c==_dt||c==Udt||WHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));for(s=0,l=(a=Uhn(cT(Qdt,1),p1n,232,0,[Hdt,Gdt,Bdt,Udt,qdt,_dt])).length;s<l;++s)((c=a[s])==qdt||c==_dt||c==Udt)&&WHn(n,uG($x(r.a,c)?r.b[c.g]:null,15));n.a=null,e.Vg()}function GVn(n,t){var e,i,r,c,a,o,u,s,h;if(null!=(s=t).b&&null!=n.b){for(pxn(n),uzn(n),pxn(s),uzn(s),e=Inn(YHt,W1n,28,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],o=s.b[a],u=s.b[a+1],c<o)i+=2;else if(c>=o&&r<=u)o<=r&&c<=u?(e[h++]=r,e[h++]=c,i+=2):o<=r?(e[h++]=r,e[h++]=u,n.b[i]=u+1,a+=2):c<=u?(e[h++]=o,e[h++]=c,i+=2):(e[h++]=o,e[h++]=u,n.b[i]=u+1);else{if(!(u<r))throw hv(new Ky("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=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}function qVn(n){var t,i,r,c,a,o,u;for(t=new Zm,n.g=new Zm,n.d=new Zm,o=new bsn(new Nw(n.f.b).a);o.b;)kD(t,uG(uG((a=von(o)).md(),42).b,86)),hN(uG(a.ld(),602).Af())?kD(n.d,uG(a.md(),42)):kD(n.g,uG(a.md(),42));for(Npn(n,n.d),Npn(n,n.g),n.c=new i$n(n.b),ST(n.c,(HS(),Olt)),agn(n,n.d),agn(n,n.g),Ohn(t,n.c.a.b),n.e=new MO(M0n,M0n),n.a=new MO(T0n,T0n),r=new Ww(t);r.a<r.c.c.length;)i=uG(N3(r),86),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);ET(n.c,new kt),u=0;do{c=_Vn(n),++u}while((u<2||c>T1n)&&u<10);ET(n.c,new yt),_Vn(n),YV(n.c),lVn(n.f)}function XVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(i=uG(oIn(n,(jYn(),JMt)),101),o=n.f,a=n.d,u=o.a+a.b+a.c,s=0-a.d-n.c.b,f=o.b+a.d+a.a-n.c.b,h=new Zm,l=new Zm,c=new Ww(t);c.a<c.c.c.length;){switch(r=uG(N3(c),10),i.g){case 1:case 2:case 3:OKn(r);break;case 4:w=(b=uG(oIn(r,WMt),8))?b.a:0,r.n.a=u*uM(pK(oIn(r,(GYn(),bmt))))-w,fhn(r,!0,!1);break;case 5:g=(d=uG(oIn(r,WMt),8))?d.a:0,r.n.a=uM(pK(oIn(r,(GYn(),bmt))))-g,fhn(r,!0,!1),o.a=e.Math.max(o.a,r.n.a+r.o.a/2)}switch(uG(oIn(r,(GYn(),Fpt)),64).g){case 1:r.n.b=s,mv(h.c,r);break;case 3:r.n.b=f,mv(l.c,r)}}switch(i.g){case 1:case 2:adn(h,n),adn(l,n);break;case 3:odn(h,n),odn(l,n)}}function zVn(n,t){var e,i,r,c,a,o,u,s,h,f,l;switch(n.k.g){case 1:if(i=uG(oIn(n,(GYn(),rmt)),18),(e=uG(oIn(i,cmt),75))?oM(gK(oIn(i,pmt)))&&(e=fln(e)):e=new Uk,s=uG(oIn(n,Zpt),12)){if(t<=(h=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a]))).a)return h.b;s8(e,h,e.a,e.a.a)}if(f=uG(oIn(n,nmt),12)){if((l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))).a<=t)return l.b;s8(e,l,e.c.b,e.c)}if(e.b>=2){for(a=uG(I6(u=Fkn(e,0)),8),o=uG(I6(u),8);o.a<t&&u.b!=u.d.c;)a=o,o=uG(I6(u),8);return a.b+(t-a.a)/(o.a-a.a)*(o.b-a.b)}break;case 3:switch(r=(c=uG(oIn(uG(zq(n.j,0),12),(GYn(),rmt)),12)).i,c.j.g){case 1:return r.n.b;case 3:return r.n.b+r.o.b}}return jSn(n).b}function VVn(n){var t,e,i,r,c,a,o,u,s,f;for(c=new Ww(n.d.b);c.a<c.c.c.length;)for(o=new Ww(uG(N3(c),30).a);o.a<o.c.c.length;)!oM(gK(oIn(a=uG(N3(o),10),(jYn(),gyt))))||P6(Ggn(a))?(r=new gY(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=Tx(NS(AS(LS(new lk,a),r),rdt),n.a),Mx(OS(Xcn(new fk,Uhn(cT(zut,1),EZn,60,0,[t])),t),n.a),u=new nv,vJ(n.e,t,u),(e=x5(new Fz(ix(qgn(a).a.Kc(),new h)))-x5(new Fz(ix(Xgn(a).a.Kc(),new h))))<0?hfn(u,!0,(xdn(),JDt)):e>0&&hfn(u,!0,(xdn(),YDt)),a.k==(zIn(),lbt)&&XQ(u),vJ(n.f,a,t)):((s=(i=uG(pZ(Ggn(a)),18)).c.i)==a&&(s=i.d.i),f=new WO(s,YF(D$(a.n),s.n)),vJ(n.b,a,f))}function WVn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(i=uG(oIn(n,(OQn(),RPt)),27),u=vZn,s=vZn,a=j1n,o=j1n,m=Fkn(n.b,0);m.b!=m.d.c;)l=(g=uG(I6(m),40)).e,b=g.f,u=e.Math.min(u,l.a-b.a/2),s=e.Math.min(s,l.b-b.b/2),a=e.Math.max(a,l.a+b.a/2),o=e.Math.max(o,l.b+b.b/2);for(f=uG(zDn(i,(QGn(),pCt)),107),p=Fkn(n.b,0);p.b!=p.d.c;)F$(h=oIn(g=uG(I6(p),40),RPt),207)&&(kN(r=uG(h,27),g.e.a,g.e.b),aKn(r,g));for(d=Fkn(n.a,0);d.b!=d.d.c;)w=uG(I6(d),65),(t=uG(oIn(w,RPt),74))&&sqn(w.a,JFn(t,!0,!0));v=a-u+(f.b+f.c),c=o-s+(f.d+f.a),oM(gK(zDn(i,(XYn(),H$t))))||ZQn(i,v,c,!1,!1),Myn(i,h$t,v-(f.b+f.c)),Myn(i,s$t,c-(f.d+f.a))}function QVn(n,t){var e,i,r,c,a,o,u,s,f;for(o=!0,r=0,u=n.g[t.p],s=t.o.b+n.o,e=n.d[t.p][2],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a-1+e)),Y8(n.c,u,uM(pK(zq(n.c,u)))-s+e*n.f),++u>=n.j?(++n.j,kD(n.b,xwn(1)),kD(n.c,s)):(i=n.d[t.p][1],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a+1-i)),Y8(n.c,u,uM(pK(zq(n.c,u)))+s-i*n.f)),(n.r==(THn(),Ijt)&&(uG(zq(n.b,u),17).a>n.k||uG(zq(n.b,u-1),17).a>n.k)||n.r==Ljt&&(uM(pK(zq(n.c,u)))>n.n||uM(pK(zq(n.c,u-1)))>n.n))&&(o=!1),c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)a=uG(N9(c),18).c.i,n.g[a.p]==u&&(r+=uG((f=QVn(n,a)).a,17).a,o=o&&oM(gK(f.b)));return n.g[t.p]=u,new WO(xwn(r+=n.d[t.p][0]),(qx(),!!o))}function JVn(n,t){var e,i;uM(pK(oIn(t,(jYn(),dTt))))<2&&kfn(t,dTt,2),uG(oIn(t,Byt),88)==(xdn(),ZDt)&&kfn(t,Byt,pgn(t)),0==(e=uG(oIn(t,sTt),17)).a?kfn(t,(GYn(),dmt),new Upn):kfn(t,(GYn(),dmt),new v8(e.a)),null==gK(oIn(t,OMt))&&kfn(t,OMt,(qx(),xA(oIn(t,Vyt))===xA((_gn(),uxt)))),kS(new fX(null,new h3(t.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(t.b,16)),new dt),new Ud(n)),i=new CVn(t),kfn(t,(GYn(),kmt),i),_J(n.a),JV(n.a,(uIn(),Tlt),uG(oIn(t,Fyt),188)),JV(n.a,jlt,uG(oIn(t,MMt),188)),JV(n.a,Elt,uG(oIn(t,Kyt),188)),JV(n.a,Slt,uG(oIn(t,$Mt),188)),JV(n.a,Plt,Rsn(uG(oIn(t,Vyt),223))),ZL(n.a,iYn(t)),kfn(t,wmt,Qzn(n.a,t))}function YVn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=new Ym,o=new Zm,HAn(n,i,n.d.Ag(),o,l),HAn(n,r,n.d.Bg(),o,l),n.b=.2*(g=DDn(sin(new fX(null,new h3(o,16)),new pa)),p=DDn(sin(new fX(null,new h3(o,16)),new ma)),e.Math.min(g,p)),a=0,u=0;u<o.c.length-1;u++)for(u3(u,o.c.length),s=uG(o.c[u],118),d=u+1;d<o.c.length;d++)a+=OXn(n,s,(u3(d,o.c.length),uG(o.c[d],118)));for(b=uG(oIn(t,(GYn(),dmt)),234),a>=2&&(m=sRn(o,!0,b),!n.e&&(n.e=new pp(n)),xvn(n.e,m,o,n.b)),BPn(o,b),oWn(o),w=-1,f=new Ww(o);f.a<f.c.c.length;)h=uG(N3(f),118),e.Math.abs(h.s-h.c)<t4n||(w=e.Math.max(w,h.o),n.d.yg(h,c,n.c));return n.d.a.a.$b(),w+1}function ZVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=(s=uG(B$(new Tp(Fkn(new Mp(t).a.d,0))),40))?uG(oIn(s,(OQn(),APt)),40):null,r=1;s&&l;){for(a=0,m=0,e=s,i=l,c=0;c<r;c++)e=M7(e),i=M7(i),m+=uM(pK(oIn(e,(OQn(),xPt)))),a+=uM(pK(oIn(i,xPt)));if(p=uM(pK(oIn(l,(OQn(),FPt)))),g=uM(pK(oIn(s,FPt))),h=Mgn(n,s,l),0<(f=p+a+n.b+h-g-m)){for(o=t,u=0;o&&o!=i;)++u,o=uG(oIn(o,LPt),40);if(!o)return;for(d=f/u,o=t;o!=i;)w=uM(pK(oIn(o,FPt)))+f,kfn(o,FPt,w),b=uM(pK(oIn(o,xPt)))+f,kfn(o,xPt,b),f-=d,o=uG(oIn(o,LPt),40)}++r,l=(s=0==s.d.b?rUn(new Mp(t),r):uG(B$(new Tp(Fkn(new Mp(s).a.d,0))),40))?uG(oIn(s,APt),40):null}}function nWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;return l=n.c[t],b=n.c[e],!((w=uG(oIn(l,(GYn(),Vpt)),15))&&0!=w.gc()&&w.Hc(b)||(d=l.k!=(zIn(),wbt)&&b.k!=wbt,m=(g=uG(oIn(l,zpt),10))!=(p=uG(oIn(b,zpt),10)),v=!!g&&g!=l||!!p&&p!=b,k=qMn(l,(KQn(),yRt)),y=qMn(b,KRt),v|=qMn(l,KRt)||qMn(b,yRt),d&&(v&&m||k||y))||l.k==(zIn(),gbt)&&b.k==dbt||b.k==(zIn(),gbt)&&l.k==dbt)&&(h=n.c[t],c=n.c[e],r=YEn(n.e,h,c,(KQn(),_Rt)),u=YEn(n.i,h,c,kRt),wKn(n.f,h,c),s=Jln(n.b,h,c)+uG(r.a,17).a+uG(u.a,17).a+n.f.d,o=Jln(n.b,c,h)+uG(r.b,17).a+uG(u.b,17).a+n.f.b,n.a&&(f=uG(oIn(h,rmt),12),a=uG(oIn(c,rmt),12),s+=uG((i=Sjn(n.g,f,a)).a,17).a,o+=uG(i.b,17).a),s>o)}function tWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=M0n,f=M0n,u=T0n,s=T0n,b=new Ww(t.i);b.a<b.c.c.length;)l=uG(N3(b),68),kN(c=uG(uG(cQ(n.g,l.a),42).b,27),l.b.c,l.b.d),h=e.Math.min(h,c.i),f=e.Math.min(f,c.j),u=e.Math.max(u,c.i+c.g),s=e.Math.max(s,c.j+c.f);for(w=uG(zDn(n.c,(fIn(),bLt)),107),ZQn(n.c,u-h+(w.b+w.c),s-f+(w.d+w.a),!0,!0),JCn(n.c,-h+w.b,-f+w.d),r=new DD(xY(n.c));r.e!=r.i.gc();)o=JFn(i=uG(Zkn(r),74),!0,!0),d=bIn(i),p=gIn(i),g=new MO(d.i+d.g/2,d.j+d.f/2),a=new MO(p.i+p.g/2,p.j+p.f/2),OEn(m=YF(new MO(a.a,a.b),g),d.g,d.f),JF(g,m),OEn(v=YF(new MO(g.a,g.b),a),p.g,p.f),JF(a,v),MN(o,g.a,g.b),yN(o,a.a,a.b)}function eWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(t.Ug("Label dummy removal",1),i=uM(pK(oIn(n,(jYn(),pTt)))),r=uM(pK(oIn(n,yTt))),u=uG(oIn(n,Byt),88),o=new Ww(n.b);o.a<o.c.c.length;)for(h=new N4(uG(N3(o),30).a,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),(s=uG(h.d.Xb(h.c=h.b++),10)).k==(zIn(),bbt)&&(f=uG(oIn(s,(GYn(),rmt)),18),b=uM(pK(oIn(f,tMt))),a=xA(oIn(s,Qpt))===xA((Ajn(),Dxt)),e=new eN(s.n),a&&(e.b+=b+i),c=new MO(s.o.a,s.o.b+(s.k!=bbt||Qj(JJ(uG(oIn(s,gmt),15).Oc(),new hd(new _t))).Bd((vS(),Kut))?-b-i:0)),l=uG(oIn(s,gmt),15),u==(xdn(),nxt)||u==QDt?KDn(l,e,r,c,a,u):bwn(l,e,r,c),Ohn(f.b,l),pVn(s,xA(oIn(n,Vyt))===xA((_gn(),sxt))),LQ(h));t.Vg()}function iWn(n){n.q||(n.q=!0,n.p=Nsn(n,0),n.a=Nsn(n,1),Won(n.a,0),n.f=Nsn(n,2),Won(n.f,1),Von(n.f,2),n.n=Nsn(n,3),Von(n.n,3),Von(n.n,4),Von(n.n,5),Von(n.n,6),n.g=Nsn(n,4),Won(n.g,7),Von(n.g,8),n.c=Nsn(n,5),Won(n.c,7),Won(n.c,8),n.i=Nsn(n,6),Won(n.i,9),Won(n.i,10),Won(n.i,11),Won(n.i,12),Von(n.i,13),n.j=Nsn(n,7),Won(n.j,9),n.d=Nsn(n,8),Won(n.d,3),Won(n.d,4),Won(n.d,5),Won(n.d,6),Von(n.d,7),Von(n.d,8),Von(n.d,9),Von(n.d,10),n.b=Nsn(n,9),Von(n.b,0),Von(n.b,1),n.e=Nsn(n,10),Von(n.e,1),Von(n.e,2),Von(n.e,3),Von(n.e,4),Won(n.e,5),Won(n.e,6),Won(n.e,7),Won(n.e,8),Won(n.e,9),Won(n.e,10),Von(n.e,11),n.k=Nsn(n,11),Von(n.k,0),Von(n.k,1),n.o=$sn(n,12),n.s=$sn(n,13))}function rWn(n,t){t.dc()&&gG(n.j,!0,!0,!0,!0),udn(t,(KQn(),PRt))&&gG(n.j,!0,!0,!0,!1),udn(t,MRt)&&gG(n.j,!1,!0,!0,!0),udn(t,DRt)&&gG(n.j,!0,!0,!1,!0),udn(t,RRt)&&gG(n.j,!0,!1,!0,!0),udn(t,CRt)&&gG(n.j,!1,!0,!0,!1),udn(t,TRt)&&gG(n.j,!1,!0,!1,!0),udn(t,xRt)&&gG(n.j,!0,!1,!1,!0),udn(t,$Rt)&&gG(n.j,!0,!1,!0,!1),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ERt)&&gG(n.j,!0,!0,!0,!0),udn(t,LRt)&&gG(n.j,!0,!0,!0,!0),udn(t,jRt)&&gG(n.j,!0,!0,!0,!0),udn(t,NRt)&&gG(n.j,!0,!0,!0,!0),udn(t,ARt)&&gG(n.j,!0,!0,!0,!0),udn(t,ORt)&&gG(n.j,!0,!0,!0,!0)}function cWn(n,t,e){var i,r,c,a,o,u,s,h,f;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(i=tdn((gAn(),kBt),t).Jl())return i.jk().wi().ri(i,e);if(a=tdn(kBt,t).Ll()){if(null==e)return null;if((o=uG(e,15)).dc())return"";for(f=new zM,c=o.Kc();c.Ob();)r=c.Pb(),VA(f,a.jk().wi().ri(a,r)),f.a+=" ";return CL(f,f.a.length-1)}if(!(h=tdn(kBt,t).Ml()).dc()){for(s=h.Kc();s.Ob();)if((u=uG(s.Pb(),156)).fk(e))try{if(null!=(f=u.jk().wi().ri(u,e)))return f}catch(l){if(!F$(l=Ehn(l),103))throw hv(l)}throw hv(new vM("Invalid value: '"+e+"' for datatype :"+t.xe()))}return uG(t,847).ok(),null==e?null:F$(e,180)?""+uG(e,180).a:Tbn(e)==iot?N$(QKt[0],uG(e,206)):cpn(e)}function aWn(n){var t,i,r,c,a,o,u,s,h;for(s=new lS,o=new lS,c=new Ww(n);c.a<c.c.c.length;)(i=uG(N3(c),131)).v=0,i.n=i.i.c.length,i.u=i.t.c.length,0==i.n&&s8(s,i,s.c.b,s.c),0==i.u&&0==i.r.a.gc()&&s8(o,i,o.c.b,o.c);for(a=-1;0!=s.b;)for(t=new Ww((i=uG(Kjn(s,0),131)).t);t.a<t.c.c.length;)(h=uG(N3(t),274).b).v=e.Math.max(h.v,i.v+1),a=e.Math.max(a,h.v),--h.n,0==h.n&&s8(s,h,s.c.b,s.c);if(a>-1){for(r=Fkn(o,0);r.b!=r.d.c;)(i=uG(I6(r),131)).v=a;for(;0!=o.b;)for(t=new Ww((i=uG(Kjn(o,0),131)).i);t.a<t.c.c.length;)0==(u=uG(N3(t),274).a).r.a.gc()&&(u.v=e.Math.min(u.v,i.v-1),--u.u,0==u.u&&s8(o,u,o.c.b,o.c))}}function oWn(n){var t,i,r,c,a,o,u,s,h;for(s=new Zm,o=new Zm,a=new Ww(n);a.a<a.c.c.length;)Qb(r=uG(N3(a),118),r.f.c.length),Jb(r,r.k.c.length),0==r.d&&mv(s.c,r),0==r.i&&0==r.e.b&&mv(o.c,r);for(i=-1;0!=s.c.length;)for(t=new Ww((r=uG(i7(s,0),118)).k);t.a<t.c.c.length;)Yb(h=uG(N3(t),132).b,e.Math.max(h.o,r.o+1)),i=e.Math.max(i,h.o),Qb(h,h.d-1),0==h.d&&mv(s.c,h);if(i>-1){for(c=new Ww(o);c.a<c.c.c.length;)(r=uG(N3(c),118)).o=i;for(;0!=o.c.length;)for(t=new Ww((r=uG(i7(o,0),118)).f);t.a<t.c.c.length;)(u=uG(N3(t),132).a).e.b>0||(Yb(u,e.Math.min(u.o,r.o-1)),Jb(u,u.i-1),0==u.i&&mv(o.c,u))}}function uWn(n,t,i,r,c){var a,o,u,s;return s=M0n,o=!1,a=!!(u=rXn(n,YF(new MO(t.a,t.b),n),JF(new MO(i.a,i.b),c),YF(new MO(r.a,r.b),i)))&&!(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt||e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt),(u=rXn(n,YF(new MO(t.a,t.b),n),i,c))&&((e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a?s=e.Math.min(s,NQ(YF(u,i))):o=!0),(u=rXn(n,YF(new MO(t.a,t.b),n),r,c))&&(o||(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a)&&(s=e.Math.min(s,NQ(YF(u,r)))),s}function sWn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,$4n),D4n),"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),c4n))),U4(n,$4n,f4n,Jkn(olt)),U4(n,$4n,b4n,(qx(),!0)),U4(n,$4n,p4n,Jkn(hlt)),U4(n,$4n,x4n,Jkn(flt)),U4(n,$4n,g4n,Jkn(llt)),U4(n,$4n,m4n,Jkn(slt)),U4(n,$4n,w4n,Jkn(blt)),U4(n,$4n,v4n,Jkn(wlt)),U4(n,$4n,I4n,Jkn(alt)),U4(n,$4n,A4n,Jkn(rlt)),U4(n,$4n,L4n,Jkn(clt)),U4(n,$4n,N4n,Jkn(ult)),U4(n,$4n,O4n,Jkn(ilt))}function hWn(n){var t,e,i,r,c,a,o,u;for(t=null,i=new Ww(n);i.a<i.c.c.length;)uM(oD((e=uG(N3(i),239)).g,e.d[0]).a),e.b=null,e.e&&e.e.gc()>0&&0==e.c&&(!t&&(t=new Zm),mv(t.c,e));if(t)for(;0!=t.c.length;){if((e=uG(i7(t,0),239)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Zm),c=new Ww(e.b);c.a<c.c.c.length;)if(sM(oD((r=uG(N3(c),239)).g,r.d[0]).a)==sM(oD(e.g,e.d[0]).a)){if(Ten(n,r,0)>Ten(n,e,0))return new WO(r,e)}else if(uM(oD(r.g,r.d[0]).a)>uM(oD(e.g,e.d[0]).a))return new WO(r,e);for(o=(!e.e&&(e.e=new Zm),e.e).Kc();o.Ob();)!(a=uG(o.Pb(),239)).b&&(a.b=new Zm),o3(0,(u=a.b).c.length),pC(u.c,0,e),a.c==u.c.length&&mv(t.c,a)}return null}function fWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Interactive crossing minimization",1),a=0,c=new Ww(n.b);c.a<c.c.c.length;)(i=uG(N3(c),30)).p=a++;for(d=new rj((l=SPn(n)).length),UXn(new IM(Uhn(cT(fdt,1),EZn,230,0,[d])),l),w=0,a=0,r=new Ww(n.b);r.a<r.c.c.length;){for(e=0,f=0,h=new Ww((i=uG(N3(r),30)).a);h.a<h.c.c.length;)for((u=uG(N3(h),10)).n.a>0&&(e+=u.n.a+u.o.a/2,++f),b=new Ww(u.j);b.a<b.c.c.length;)uG(N3(b),12).p=w++;for(f>0&&(e/=f),g=Inn(eUt,I0n,28,i.a.c.length,15,1),o=0,s=new Ww(i.a);s.a<s.c.c.length;)(u=uG(N3(s),10)).p=o++,g[u.p]=zVn(u,e),u.k==(zIn(),wbt)&&kfn(u,(GYn(),amt),g[u.p]);hZ(),f$(i.a,new Wg(g)),sUn(d,l,a,!0),++a}t.Vg()}function lWn(n,t){var e,i,r,c,a,o,u,s,h;if(5!=t.e){if(null!=(s=t).b&&null!=n.b){for(pxn(n),uzn(n),pxn(s),uzn(s),e=Inn(YHt,W1n,28,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],o=s.b[a],u=s.b[a+1],c<o)e[h++]=n.b[i++],e[h++]=n.b[i++];else if(c>=o&&r<=u)o<=r&&c<=u?i+=2:o<=r?(n.b[i]=u+1,a+=2):c<=u?(e[h++]=r,e[h++]=o-1,i+=2):(e[h++]=r,e[h++]=o-1,n.b[i]=u+1,a+=2);else{if(!(u<r))throw hv(new Ky("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=Inn(YHt,W1n,28,h,15,1),qGn(e,0,n.b,0,h)}}else GVn(n,t)}function bWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;for(w=COn(JFn(t,!1,!1)),r&&(w=fln(w)),g=uM(pK(zDn(t,(ryn(),Jht)))),MK(0!=w.b),b=uG(w.a.a.c,8),h=uG(hyn(w,1),8),w.b>2?(Ohn(s=new Zm,new C2(w,1,w.b)),zsn(d=new pDn(vYn(s,g+n.a)),t),mv(i.c,d)):d=uG(cQ(n.b,r?bIn(t):gIn(t)),272),o=bIn(t),r&&(o=gIn(t)),a=GOn(b,o),u=g+n.a,a.a?(u+=e.Math.abs(b.b-h.b),l=new MO(h.a,(h.b+b.b)/2)):(u+=e.Math.abs(b.a-h.a),l=new MO((h.a+b.a)/2,h.b)),vJ(r?n.d:n.c,t,new bTn(d,a,l,u)),vJ(n.b,t,d),!t.n&&(t.n=new fV(lFt,t,1,7)),f=new DD(t.n);f.e!=f.i.gc();)c=nHn(n,uG(Zkn(f),135),!0,0,0),mv(i.c,c)}function wWn(n){var t,e,i,r,c,a,o;if(!n.A.dc()){if(n.A.Hc((Qmn(),QRt))&&(uG(AJ(n.b,(KQn(),yRt)),127).k=!0,uG(AJ(n.b,KRt),127).k=!0,t=n.q!=($Pn(),aRt)&&n.q!=cRt,Db(uG(AJ(n.b,kRt),127),t),Db(uG(AJ(n.b,_Rt),127),t),Db(n.g,t),n.A.Hc(JRt)&&(uG(AJ(n.b,yRt),127).j=!0,uG(AJ(n.b,KRt),127).j=!0,uG(AJ(n.b,kRt),127).k=!0,uG(AJ(n.b,_Rt),127).k=!0,n.g.k=!0)),n.A.Hc(WRt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,o=n.B.Hc((aUn(),cKt)),c=0,a=(r=Nkn()).length;c<a;++c)i=r[c],(e=uG(AJ(n.i,i),314))&&(vvn(i)?(e.j=!0,e.k=!0):(e.j=!o,e.k=!o));n.A.Hc(VRt)&&n.B.Hc((aUn(),rKt))&&(n.g.j=!0,n.g.j=!0,n.a.j||(n.a.j=!0,n.a.k=!0,n.a.e=!0))}}function dWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;for(e=new Ww(n.e.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),u=(f=n.i[i.p]).a.e,o=f.d.e,i.n.b=u,d=o-u-i.o.b,t=VXn(i),Yyn(),h=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203),t&&(h==wjt||h==bjt)&&(i.o.b+=d),t&&(h==gjt||h==wjt||h==bjt)){for(b=new Ww(i.j);b.a<b.c.c.length;)l=uG(N3(b),12),(KQn(),ERt).Hc(l.j)&&(s=uG(cQ(n.k,l),125),l.n.b=s.e-u);for(a=new Ww(i.b);a.a<a.c.c.length;)c=uG(N3(a),72),(w=uG(oIn(i,PMt),21)).Hc((VDn(),Xxt))?c.n.b+=d:w.Hc(zxt)&&(c.n.b+=d/2);(h==wjt||h==bjt)&&Dgn(i,(KQn(),KRt)).Jc(new fp(d))}}function gWn(n,t,e){var i,r,c,a,o,u,s,h;for(u=new Zm,o=new Ww(t.a);o.a<o.c.c.length;)for(h=Dgn(uG(N3(o),10),(KQn(),kRt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).g);r.a<r.c.c.length;)!v9(i=uG(N3(r),18))&&i.c.i.c==i.d.i.c||v9(i)||i.d.i.c!=e||mv(u.c,i);for(a=Spn(e.a).Kc();a.Ob();)for(h=Dgn(uG(a.Pb(),10),(KQn(),_Rt)).Kc();h.Ob();)for(r=new Ww(uG(h.Pb(),12).e);r.a<r.c.c.length;)if((v9(i=uG(N3(r),18))||i.c.i.c!=i.d.i.c)&&!v9(i)&&i.c.i.c==t&&0!=u.c.length){for(MK((s=new N4(u,u.c.length)).b>0),c=uG(s.a.Xb(s.c=--s.b),18);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,MK(s.b>0),c=uG(s.a.Xb(s.c=--s.b),18);s.b>0&&LQ(s)}}function pWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(u=new _nn(null,null)).a[1]=n.b,f=u;f.a[r];)s=r,o=l,l=f,f=f.a[r],r=(i=n.a.Ne(t,f.d))<0?0:1,0==i&&(!e.c||OJ(f.e,e.d))&&(a=f),f&&f.b||NM(f.a[r])||(NM(f.a[1-r])?l=l.a[s]=Ton(f,r):NM(f.a[1-r])||(b=l.a[1-s])&&(NM(b.a[1-s])||NM(b.a[s])?(c=o.a[1]==l?1:0,NM(b.a[s])?o.a[c]=P4(l,s):NM(b.a[1-s])&&(o.a[c]=Ton(l,s)),f.b=o.a[c].b=!0,o.a[c].a[0].b=!1,o.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&&(YCn(n,u,a,h=new _nn(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=u.a[1],n.b&&(n.b.b=!1),e.b}function mWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;for(c=new Ww(n.a.a.b);c.a<c.c.c.length;)for(s=(r=uG(N3(c),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),r.a!=u.a&&(l=hN(n.a.d)?n.a.g.ff(r,u):n.a.g.gf(r,u),a=r.b.a+r.d.b+l-u.b.a,a=e.Math.ceil(a),a=e.Math.max(0,a),$en(r,u)?(o=jx(new sk,n.d),t=(h=t0(e.Math.ceil(u.b.a-r.b.a)))-(u.b.a-r.b.a),i=r,(f=Q6(r).a)||(f=Q6(u).a,t=-t,i=u),f&&(i.b.a-=t,f.n.a-=t),RKn(xS(DS(RS($S(new uk,e.Math.max(0,h)),1),o),n.c[r.a.d])),RKn(xS(DS(RS($S(new uk,e.Math.max(0,-h)),1),o),n.c[u.a.d]))):(b=1,(F$(r.g,154)&&F$(u.g,10)||F$(u.g,154)&&F$(r.g,10))&&(b=2),RKn(xS(DS(RS($S(new uk,t0(a)),b),n.c[r.a.d]),n.c[u.a.d]))))}function vWn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(i)for(r=-1,f=new N4(t,0);f.b<f.d.gc();){if(MK(f.b<f.d.gc()),u=uG(f.d.Xb(f.c=f.b++),10),null==(l=n.c[u.c.p][u.p].a)){for(o=r+1,a=new N4(t,f.b);a.b<a.d.gc();)if(null!=(b=aD(n,(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),10))).a)){tJ(b),o=b;break}l=(r+o)/2,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=(tJ(l),l),n.c[u.c.p][u.p].b=1}tJ(l),r=l}else{for(c=0,h=new Ww(t);h.a<h.c.c.length;)u=uG(N3(h),10),null!=n.c[u.c.p][u.p].a&&(c=e.Math.max(c,uM(n.c[u.c.p][u.p].a)));for(c+=2,s=new Ww(t);s.a<s.c.c.length;)u=uG(N3(s),10),null==n.c[u.c.p][u.p].a&&(l=uRn(n.i,24)*z0n*c-1,n.c[u.c.p][u.p].a=l,n.c[u.c.p][u.p].d=l,n.c[u.c.p][u.p].b=1)}}function kWn(n,t,e){var i,r,c,a,o,u,s,h,f;for(!e&&(e=cfn(t.q.getTimezoneOffset())),r=6e4*(t.q.getTimezoneOffset()-e.a),u=o=new DK(Lgn(Bsn(t.q.getTime()),r)),o.q.getTimezoneOffset()!=t.q.getTimezoneOffset()&&(r>0?r-=864e5:r+=864e5,u=new DK(Lgn(Bsn(t.q.getTime()),r))),h=new QM,s=n.a.length,c=0;c<s;)if((i=VJ(n.a,c))>=97&&i<=122||i>=65&&i<=90){for(a=c+1;a<s&&VJ(n.a,a)==i;++a);KYn(h,i,a-c,o,u,e),c=a}else if(39==i){if(++c<s&&39==VJ(n.a,c)){h.a+="'",++c;continue}for(f=!1;!f;){for(a=c;a<s&&39!=VJ(n.a,a);)++a;if(a>=s)throw hv(new vM("Missing trailing '"));a+1<s&&39==VJ(n.a,a+1)?++a:f=!0,JA(h,r1(n.a,c,a)),c=a+1}}else h.a+=String.fromCharCode(i),++c;return h.a}function yWn(){ML(u_t,new Ys),ML(c_t,new sh),ML(h_t,new kh),ML(s_t,new Sh),ML(f_t,new Ph),ML(w_t,new Ch),ML(d_t,new Ih),ML(sFt,new Oh),ML(uFt,new Hs),ML(hFt,new Us),ML(nFt,new Gs),ML(p_t,new qs),ML(fFt,new Xs),ML(m_t,new zs),ML(v_t,new Vs),ML(o_t,new Ws),ML(a_t,new Qs),ML(wBt,new Js),ML(g_t,new Zs),ML(J_t,new nh),ML(cot,new th),ML(cT(tUt,1),new eh),ML(uot,new ih),ML(hot,new rh),ML(iot,new ch),ML(aUt,new ah),ML(fot,new oh),ML(CFt,new uh),ML(BFt,new hh),ML(IBt,new fh),ML(Z_t,new lh),ML(lot,new bh),ML(dot,new wh),ML(gat,new dh),ML(yot,new gh),ML(mat,new ph),ML(jBt,new mh),ML(oUt,new vh),ML(Tot,new yh),ML($ot,new Mh),ML(OFt,new Th),ML(uUt,new jh)}function MWn(n,t){var e,i,r,c,a,o;if(null==n)return IZn;if(null!=t.a.zc(n,t))return"[...]";for(e=new Ysn(TZn,"[","]"),c=0,a=(r=n).length;c<a;++c)null!=(i=r[c])&&4&Tbn(i).i?!Array.isArray(i)||(o=Min(i))>=14&&o<=16?F$(i,183)?o7(e,PLn(uG(i,183))):F$(i,195)?o7(e,xPn(uG(i,195))):F$(i,201)?o7(e,aOn(uG(i,201))):F$(i,2111)?o7(e,RPn(uG(i,2111))):F$(i,53)?o7(e,SLn(uG(i,53))):F$(i,376)?o7(e,aNn(uG(i,376))):F$(i,846)?o7(e,ELn(uG(i,846))):F$(i,109)&&o7(e,jLn(uG(i,109))):t.a._b(i)?(e.a?JA(e.a,e.b):e.a=new lx(e.d),WA(e.a,"[...]")):o7(e,MWn(Kcn(i),new oX(t))):o7(e,null==i?IZn:cpn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function TWn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,sbn(n,null)):(n.F=(tJ(t),t),-1!=(i=xL(t,$Cn(60)))?(Knn(0,i,t.length),r=t.substr(0,i),-1==xL(t,$Cn(46))&&!m_(r,dZn)&&!m_(r,lrt)&&!m_(r,brt)&&!m_(r,wrt)&&!m_(r,drt)&&!m_(r,grt)&&!m_(r,prt)&&!m_(r,mrt)&&(r=vrt),-1!=(e=ax(t,$Cn(62)))&&(r+=""+(s3(e+1,t.length+1),t.substr(e+1))),sbn(n,r)):(r=t,-1==xL(t,$Cn(46))&&(-1!=(i=xL(t,$Cn(91)))&&(Knn(0,i,t.length),r=t.substr(0,i)),m_(r,dZn)||m_(r,lrt)||m_(r,brt)||m_(r,wrt)||m_(r,drt)||m_(r,grt)||m_(r,prt)||m_(r,mrt)?r=t:(r=vrt,-1!=i&&(r+=""+(s3(i,t.length+1),t.substr(i))))),sbn(n,r),r==t&&(n.F=n.D))),4&n.Db&&!(1&n.Db)&&Msn(n,new lV(n,1,5,c,t))}function jWn(n,t){var e,i,r,c,a,o,u,s;if(s3(o=t.length-1,t.length),93==(a=t.charCodeAt(o))){if((c=xL(t,$Cn(91)))>=0)return r=fpn(n,(Knn(1,c,t.length),t.substr(1,c-1))),Knn(c+1,o,t.length),GJn(n,t.substr(c+1,o-(c+1)),r)}else{if(e=-1,null==oot&&(oot=new RegExp("\\d")),oot.test(String.fromCharCode(a))&&(e=T_(t,$Cn(46),o-1))>=0){i=uG(U9(n,jrn(n,(Knn(1,e,t.length),t.substr(1,e-1))),!1),61),u=0;try{u=mUn((s3(e+1,t.length+1),t.substr(e+1)),j1n,vZn)}catch(h){throw F$(h=Ehn(h),130)?hv(new Pen(h)):hv(h)}if(u<i.gc())return F$(s=i.Xb(u),76)&&(s=uG(s,76).md()),uG(s,58)}if(e<0)return uG(U9(n,jrn(n,(s3(1,t.length+1),t.substr(1))),!1),58)}return null}function EWn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g;for(t.Ug("Label dummy insertions",1),b=new Zm,o=uM(pK(oIn(n,(jYn(),pTt)))),f=uM(pK(oIn(n,yTt))),l=uG(oIn(n,Byt),88),w=new Ww(n.a);w.a<w.c.c.length;)for(a=new Fz(ix(Xgn(uG(N3(w),10)).a.Kc(),new h));hDn(a);)if((c=uG(N9(a),18)).c.i!=c.d.i&&_$(c.b,Bwt)){for(i=Jxn(n,c,g=grn(c),d=iR(c.b.c.length)),mv(b.c,i),r=i.o,u=new N4(c.b,0);u.b<u.d.gc();)MK(u.b<u.d.gc()),xA(oIn(s=uG(u.d.Xb(u.c=u.b++),72),Xyt))===xA((Zrn(),ixt))&&(l==(xdn(),nxt)||l==QDt?(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),mv(d.c,s),LQ(u));l==(xdn(),nxt)||l==QDt?(r.a-=f,r.b+=o+g):r.b+=o-f+g}Ohn(n.a,b),t.Vg()}function SWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;if(n.c=n.e,l=null==(b=gK(oIn(t,(jYn(),hTt))))||(tJ(b),b),c=uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt)),e=!((r=uG(oIn(t,JMt),101))==($Pn(),rRt)||r==aRt||r==cRt),!l||!e&&c)f=new IM(Uhn(cT(sbt,1),V4n,36,0,[t]));else{for(h=new Ww(t.a);h.a<h.c.c.length;)uG(N3(h),10).p=0;for(f=new Zm,s=new Ww(t.a);s.a<s.c.c.length;)if(i=UUn(n,uG(N3(s),10),null)){for(zsn(u=new Dan,t),kfn(u,xpt,uG(i.b,21)),WY(u.d,t.d),kfn(u,RMt,null),o=uG(i.a,15).Kc();o.Ob();)a=uG(o.Pb(),10),kD(u.a,a),a.a=u;f.Fc(u)}c&&(xA(oIn(t,kyt))===xA((Uvn(),Ylt))?n.c=n.b:xA(oIn(t,kyt))===xA(nbt)?n.c=n.d:n.c=n.a)}return xA(oIn(t,kyt))!==xA((Uvn(),tbt))&&(hZ(),f.jd(new $t)),f}function PWn(n,t,e){var i,r,c,a,o;if(o=n.c,!t&&(t=nBt),n.c=t,4&n.Db&&!(1&n.Db)&&(a=new lV(n,1,2,o,n.c),e?e.nj(a):e=a),o!=t)if(F$(n.Cb,292))n.Db>>16==-10?e=uG(n.Cb,292).Yk(t,e):n.Db>>16==-15&&(!t&&(YYn(),t=N_t),!o&&(YYn(),o=N_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,13,o,t,Hyn(Aen(uG(n.Cb,62)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,90))n.Db>>16==-23&&(F$(t,90)||(YYn(),t=x_t),F$(o,90)||(YYn(),o=x_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,10,o,t,Hyn(z5(uG(n.Cb,29)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,457))for(!(c=uG(n.Cb,850)).b&&(c.b=new Um(new ty)),r=new Gm(new bsn(new Nw(c.b.a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,c),e);return e}function CWn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(a=oM(gK(zDn(n,(jYn(),sMt)))),l=uG(zDn(n,nTt),21),u=!1,s=!1,f=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));!(f.e==f.i.gc()||u&&s);){for(c=uG(Zkn(f),123),o=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!c.d&&(c.d=new f_(aFt,c,8,5)),c.d),(!c.e&&(c.e=new f_(aFt,c,7,4)),c.e)])));hDn(r)&&(i=uG(N9(r),74),h=a&&BNn(i)&&oM(gK(zDn(i,hMt))),e=Lzn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),c)?n==R0(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))):n==R0(lCn(uG(zrn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),0),84))),!((h||e)&&++o>1)););(o>0||l.Hc((eNn(),wRt))&&(!c.n&&(c.n=new fV(lFt,c,1,7)),c.n).i>0)&&(u=!0),o>1&&(s=!0)}u&&t.Fc((r_n(),tpt)),s&&t.Fc((r_n(),ept))}function IWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if((b=uG(zDn(n,(XYn(),_$t)),21)).dc())return null;if(u=0,o=0,b.Hc((Qmn(),QRt))){for(f=uG(zDn(n,sDt),101),r=2,i=2,c=2,a=2,t=R0(n)?uG(zDn(R0(n),d$t),88):uG(zDn(n,d$t),88),h=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=uG(Zkn(h),123),(l=uG(zDn(s,gDt),64))==(KQn(),FRt)&&(l=RGn(s,t),Myn(s,gDt,l)),f==($Pn(),cRt))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}u=e.Math.max(r,c),o=e.Math.max(i,a)}return ZQn(n,u,o,!0,!0)}function OWn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(v=uG(l8(krn(JJ(new fX(null,new h3(t.d,16)),new Rg(i)),new Kg(i)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),l=vZn,f=j1n,s=new Ww(t.b.j);s.a<s.c.c.length;)(u=uG(N3(s),12)).j==i&&(l=e.Math.min(l,u.p),f=e.Math.max(f,u.p));if(l==vZn)for(o=0;o<v.gc();o++)ctn(uG(v.Xb(o),105),i,o);else for(VX(k=Inn(YHt,W1n,28,c.length,15,1),k.length),m=v.Kc();m.Ob();){for(p=uG(m.Pb(),105),a=uG(cQ(n.b,p),183),h=0,g=l;g<=f;g++)a[g]&&(h=e.Math.max(h,r[g]));if(p.i){for(w=p.i.c,y=new ek,b=0;b<c.length;b++)c[w][b]&&FV(y,xwn(k[b]));for(;cS(y,xwn(h));)++h}for(ctn(p,i,h),d=l;d<=f;d++)a[d]&&(r[d]=h+1);p.i&&(k[p.i.c]=h)}}function AWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(c=null,r=new Ww(t.a);r.a<r.c.c.length;)VXn(i=uG(N3(r),10))?(h=new wY(i,!0,u=jx(KS(new sk,i),n.f),s=jx(KS(new sk,i),n.f)),f=i.o.b,Yyn(),b=1e4,(l=(i.q?i.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(i,LMt),203):uG(oIn(HQ(i),NMt),203))==bjt&&(b=1),w=RKn(xS(DS($S(RS(new uk,b),t0(e.Math.ceil(f))),u),s)),l==wjt&&FV(n.d,w),_Un(n,Spn(Dgn(i,(KQn(),_Rt))),h),_Un(n,Dgn(i,kRt),h),a=h):(d=jx(KS(new sk,i),n.f),kS(JJ(new fX(null,new h3(i.j,16)),new Fc),new CI(n,d)),a=new wY(i,!1,d,d)),n.i[i.p]=a,c&&(o=c.c.d.a+y$(n.n,c.c,i)+i.d.d,c.b||(o+=c.c.o.b),RKn(xS(DS(RS($S(new uk,t0(e.Math.ceil(o))),0),c.d),a.a))),c=a}function LWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(l=B_n(n,t,a=new s$n(t)),w=e.Math.max(uM(pK(oIn(t,(jYn(),tMt)))),1),f=new Ww(l.a);f.a<f.c.c.length;)h=uG(N3(f),42),s=mkn(uG(h.a,8),uG(h.b,8),w),hq(i,new MO(s.c,s.d)),hq(i,KR(new MO(s.c,s.d),s.b,0)),hq(i,KR(new MO(s.c,s.d),0,s.a)),hq(i,KR(new MO(s.c,s.d),s.b,s.a));switch(b=a.d,u=mkn(uG(l.b.a,8),uG(l.b.b,8),w),b==(KQn(),_Rt)||b==kRt?(r.c[b.g]=e.Math.min(r.c[b.g],u.d),r.b[b.g]=e.Math.max(r.b[b.g],u.d+u.a)):(r.c[b.g]=e.Math.min(r.c[b.g],u.c),r.b[b.g]=e.Math.max(r.b[b.g],u.c+u.b)),c=T0n,o=a.c.i.d,b.g){case 4:c=o.c;break;case 2:c=o.b;break;case 1:c=o.a;break;case 3:c=o.d}return r.a[b.g]=e.Math.max(r.a[b.g],c),a}function NWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;o=uG(cQ(t.c,n),468),g=t.a.c,u=t.a.c+t.a.b,a=(T=o.f)<(j=o.a),b=new MO(g,T),p=new MO(u,j),w=new MO(r=(g+u)/2,T),m=new MO(r,j),c=XRn(n,T,j),k=n3(t.B),y=new MO(r,c),M=n3(t.D),e=dfn(Uhn(cT(PNt,1),zZn,8,0,[k,y,M])),f=!1,(d=t.B.i)&&d.c&&o.d&&((s=a&&d.p<d.c.a.c.length-1||!a&&d.p>0)?s&&(h=d.p,a?++h:--h,f=!(VRn(i=afn(uG(zq(d.c.a,h),10)),k,e[0])||rV(i,k,e[0]))):f=!0),l=!1,(v=t.D.i)&&v.c&&o.e&&(a&&v.p>0||!a&&v.p<v.c.a.c.length-1?(h=v.p,a?--h:++h,l=!(VRn(i=afn(uG(zq(v.c.a,h),10)),e[0],M)||rV(i,e[0],M))):l=!0),f&&l&&aq(n.a,y),f||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[b,w])),l||dan(n.a,Uhn(cT(PNt,1),zZn,8,0,[m,p]))}function $Wn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(b=t.c.length,l=0,f=new Ww(n.b);f.a<f.c.c.length;)if(0!=(p=(h=uG(N3(f),30)).a).c.length){for(s=0,m=null,r=uG(N3(g=new Ww(p)),10),c=null;r;){if((c=uG(zq(t,r.p),261)).c>=0){for(u=null,o=new N4(h.a,s+1);o.b<o.d.gc()&&(MK(o.b<o.d.gc()),a=uG(o.d.Xb(o.c=o.b++),10),!((u=uG(zq(t,a.p),261)).d==c.d&&u.c<c.c));)u=null;u&&(m&&(Y8(i,r.p,xwn(uG(zq(i,r.p),17).a-1)),uG(zq(e,m.p),15).Mc(c)),c=nCn(c,r,b++),mv(t.c,c),kD(e,new Zm),m?(uG(zq(e,m.p),15).Fc(c),kD(i,xwn(1))):kD(i,xwn(0)))}w=null,g.a<g.c.c.length&&(w=uG(N3(g),10),d=uG(zq(t,w.p),261),uG(zq(e,r.p),15).Fc(d),Y8(i,w.p,xwn(uG(zq(i,w.p),17).a+1))),c.d=l,c.c=s++,m=r,r=w}++l}}function DWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(c=uG(oIn(n,(GYn(),rmt)),74)){for(i=n.a,JF(r=new eN(e),dSn(n)),jsn(n.d.i,n.c.i)?(l=n.c,YF(f=Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.n,l.a])),e)):f=n3(n.c),s8(i,f,i.a,i.a.a),b=n3(n.d),null!=oIn(n,Smt)&&JF(b,uG(oIn(n,Smt),8)),s8(i,b,i.c.b,i.c),Xun(i,r),Xan(a=JFn(c,!0,!0),uG(zrn((!c.b&&(c.b=new f_(cFt,c,4,7)),c.b),0),84)),zan(a,uG(zrn((!c.c&&(c.c=new f_(cFt,c,5,8)),c.c),0),84)),sqn(i,a),h=new Ww(n.b);h.a<h.c.c.length;)s=uG(N3(h),72),kcn(o=uG(oIn(s,rmt),135),s.o.a),vcn(o,s.o.b),kN(o,s.n.a+r.a,s.n.b+r.b),Myn(o,(Pun(),Hwt),gK(oIn(s,Hwt)));(u=uG(oIn(n,(jYn(),bMt)),75))?(Xun(u,r),Myn(c,bMt,u)):Myn(c,bMt,null),t==(_gn(),hxt)?Myn(c,Vyt,hxt):Myn(c,Vyt,null)}}function xWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;if(0!=i.c.length){for(d=new Zm,w=new Ww(i);w.a<w.c.c.length;)kD(d,new MO((b=uG(N3(w),27)).i,b.j));for(r.dh(t,"Before removing overlaps");kIn(n,i);)gxn(n,i,!1);if(r.dh(t,"After removing overlaps"),u=0,s=0,c=null,0!=i.c.length&&(u3(0,i.c.length),u=(c=uG(i.c[0],27)).i-(u3(0,d.c.length),uG(d.c[0],8)).a,s=c.j-(u3(0,d.c.length),uG(d.c[0],8)).b),o=e.Math.sqrt(u*u+s*s),a=1,0!=(l=hwn(i)).a.gc()){for(f=l.a.ec().Kc();f.Ob();)h=uG(f.Pb(),27),p=(g=n.f).i+g.g/2,m=g.j+g.f/2,v=h.i+h.g/2,y=h.j+h.f/2-m,T=(k=v-p)/(M=e.Math.sqrt(k*k+y*y)),j=y/M,ycn(h,h.i+T*o),Mcn(h,h.j+j*o);r.dh(t,"Child movement "+a),++a}n.a&&n.a.Gg(new Z_(l)),xWn(n,t,new Z_(l),r)}}function RWn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;return u=n,h=YF(new MO(t.a,t.b),n),s=i,f=YF(new MO(r.a,r.b),i),l=u.a,g=u.b,w=s.a,m=s.b,b=h.a,p=h.b,c=(d=f.a)*p-b*(v=f.b),YN(),oan(I9n),!(e.Math.abs(0-c)<=I9n||0==c||isNaN(0)&&isNaN(c))&&(a=1/c*((l-w)*p-(g-m)*b),o=1/c*-(-(l-w)*v+(g-m)*d),oan(I9n),(e.Math.abs(0-a)<=I9n||0==a||isNaN(0)&&isNaN(a)?0:0<a?-1:0>a?1:KL(isNaN(0),isNaN(a)))<0&&(oan(I9n),(e.Math.abs(a-1)<=I9n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:KL(isNaN(a),isNaN(1)))<0)&&(oan(I9n),(e.Math.abs(0-o)<=I9n||0==o||isNaN(0)&&isNaN(o)?0:0<o?-1:0>o?1:KL(isNaN(0),isNaN(o)))<0)&&(oan(I9n),(e.Math.abs(o-1)<=I9n||1==o||isNaN(o)&&isNaN(1)?0:o<1?-1:o>1?1:KL(isNaN(o),isNaN(1)))<0))}function KWn(n){var t,e,i,r;if(-1!=(t=xL(e=null!=n.D?n.D:n.B,$Cn(91)))){Knn(0,t,e.length),i=e.substr(0,t),r=new zM;do{r.a+="["}while(-1!=(t=aR(e,91,++t)));m_(i,dZn)?r.a+="Z":m_(i,lrt)?r.a+="B":m_(i,brt)?r.a+="C":m_(i,wrt)?r.a+="D":m_(i,drt)?r.a+="F":m_(i,grt)?r.a+="I":m_(i,prt)?r.a+="J":m_(i,mrt)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}}else if(-1==xL(e,$Cn(46))){if(m_(e,dZn))return ZHt;if(m_(e,lrt))return tUt;if(m_(e,brt))return JHt;if(m_(e,wrt))return eUt;if(m_(e,drt))return iUt;if(m_(e,grt))return YHt;if(m_(e,prt))return nUt;if(m_(e,mrt))return rUt}return null}function FWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(n.e=t,o=qNn(t),v=new Zm,i=new Ww(o);i.a<i.c.c.length;){for(e=uG(N3(i),15),k=new Zm,mv(v.c,k),u=new ek,l=e.Kc();l.Ob();){for(c=nHn(n,f=uG(l.Pb(),27),!0,0,0),mv(k.c,c),new MO(b=f.i,w=f.j),!f.n&&(f.n=new fV(lFt,f,1,7)),h=new DD(f.n);h.e!=h.i.gc();)r=nHn(n,uG(Zkn(h),135),!1,b,w),mv(k.c,r);for(!f.c&&(f.c=new fV(wFt,f,9,9)),g=new DD(f.c);g.e!=g.i.gc();)for(a=nHn(n,d=uG(Zkn(g),123),!1,b,w),mv(k.c,a),p=d.i+b,m=d.j+w,!d.n&&(d.n=new fV(lFt,d,1,7)),s=new DD(d.n);s.e!=s.i.gc();)r=nHn(n,uG(Zkn(s),135),!1,p,m),mv(k.c,r);Qon(u,PZ(zcn(Uhn(cT(vat,1),EZn,20,0,[eRn(f),tRn(f)]))))}xRn(n,u,k)}return n.f=new ej(v),zsn(n.f,t),n.f}function _Wn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M;for(f=new fQ(new ad(n));f.c!=f.d.a.d;)for(o=uG((h=Hen(f)).d,58),t=uG(h.e,58),d=0,k=(null==(a=o.Dh()).i&&eqn(a),a.i).length;d<k;++d)if(null==a.i&&eqn(a),c=a.i,(s=d>=0&&d<c.length?c[d]:null).rk()&&!s.sk())if(F$(s,102))!((u=uG(s,19)).Bb&Qtt)&&!((M=lMn(u))&&M.Bb&Qtt)&&xqn(n,u,o,t);else if(PP(),uG(s,69).xk()&&(e=uG((y=s)?uG(t,54).gi(y):null,160)))for(b=uG(o.Mh(s),160),i=e.gc(),g=0,w=b.gc();g<w;++g)if(F$(l=b.Tl(g),102)){if(null==(r=ain(n,v=b.Ul(g)))&&null!=v){if(m=uG(l,19),!n.b||m.Bb&Qtt||lMn(m))continue;r=v}if(!e.Ol(l,r))for(p=0;p<i;++p)if(e.Tl(p)==l&&xA(e.Ul(p))===xA(r)){e.Ti(e.gc()-1,p),--i;break}}else e.Ol(b.Tl(g),b.Ul(g))}function BWn(n,t,i){var r;if(i.Ug("StretchWidth layering",1),0!=t.a.c.length){for(n.c=t,n.t=0,n.u=0,n.i=M0n,n.g=T0n,n.d=uM(pK(oIn(t,(jYn(),dTt)))),Ayn(n),yDn(n),kDn(n),mSn(n),Gmn(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=TMn(n),r=new bQ(n.c),kD(n.c.b,r),n.r=T3(n.p),n.n=q1(n.k,n.k.length);0!=n.r.c.length;)n.o=fwn(n),!n.o||Mfn(n)&&0!=n.b.a.gc()?(mPn(n,r),r=new bQ(n.c),kD(n.c.b,r),Qon(n.a,n.b),n.b.a.$b(),n.t=n.u,n.u=0):Mfn(n)?(n.c.b.c.length=0,r=new bQ(n.c),kD(n.c.b,r),n.t=0,n.u=0,n.b.a.$b(),n.a.a.$b(),++n.f,n.r=T3(n.p),n.n=q1(n.k,n.k.length)):(a2(n.o,r),men(n.r,n.o),FV(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.length=0,_An(t.b),i.Vg()}else i.Vg()}function HWn(n){var t,i,r,c,a,o,u,s,h,f;for(n.j=Inn(YHt,W1n,28,n.g,15,1),n.o=new Zm,kS(sin(new fX(null,new h3(n.e.b,16)),new Xc),new lp(n)),n.a=Inn(ZHt,B2n,28,n.b,16,1),cdn(new fX(null,new h3(n.e.b,16)),new wp(n)),f=new Zm,kS(JJ(sin(new fX(null,new h3(n.e.b,16)),new Vc),new bp(n)),new II(n,f)),u=new Ww(f);u.a<u.c.c.length;)if(!((o=uG(N3(u),515)).c.length<=1))if(2!=o.c.length){if(!LPn(o)&&!TAn(o,new zc))for(s=new Ww(o),r=null;s.a<s.c.c.length;)t=uG(N3(s),18),i=n.c[t.p],h=!r||s.a>=s.c.c.length?B5((zIn(),dbt),wbt):B5((zIn(),wbt),wbt),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 pNn(o),VXn((u3(0,o.c.length),uG(o.c[0],18)).d.i)||kD(n.o,o)}function UWn(n){var t,i,r,c;for(kS(JJ(new fX(null,new h3(n.a.b,16)),new kr),new yr),QSn(n),kS(JJ(new fX(null,new h3(n.a.b,16)),new Mr),new Tr),n.c==(_gn(),hxt)&&(kS(JJ(sin(new fX(null,new h3(new Lw(n.f),1)),new jr),new Er),new Og(n)),kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Lg(n))),c=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a<r.c.c.length;)i=uG(N3(r),60),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);JF(dL(n.d.c),BR(new MO(c.a,c.b))),JF(dL(n.d.f),YF(new MO(t.a,t.b),c)),YRn(n,c,t),$V(n.f),$V(n.b),$V(n.g),$V(n.e),n.a.a.c.length=0,n.a.b.c.length=0,n.a=null,n.d=null}function GWn(n,t){var e;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));if(!TC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.d)return n;switch(e=n.d,n.d=t,e.g){case 0:switch(t.g){case 2:CTn(n);break;case 1:_fn(n),CTn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 2:switch(t.g){case 1:_fn(n),KBn(n);break;case 4:RSn(n),CTn(n);break;case 3:RSn(n),_fn(n),CTn(n)}break;case 1:switch(t.g){case 2:_fn(n),KBn(n);break;case 4:_fn(n),RSn(n),CTn(n);break;case 3:_fn(n),RSn(n),_fn(n),CTn(n)}break;case 4:switch(t.g){case 2:RSn(n),CTn(n);break;case 1:RSn(n),_fn(n),CTn(n);break;case 3:_fn(n),KBn(n)}break;case 3:switch(t.g){case 2:_fn(n),RSn(n),CTn(n);break;case 1:_fn(n),RSn(n),_fn(n),CTn(n);break;case 4:_fn(n),KBn(n)}}return n}function qWn(n,t){var e;if(n.d)throw hv(new kM((vK(Rlt),v2n+Rlt.k+k2n)));if(!MC(n.a,t))throw hv(new Ky(y2n+t+M2n));if(t==n.c)return n;switch(e=n.c,n.c=t,e.g){case 0:switch(t.g){case 2:hln(n);break;case 1:Bfn(n),hln(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 2:switch(t.g){case 1:Bfn(n),FBn(n);break;case 4:KSn(n),hln(n);break;case 3:KSn(n),Bfn(n),hln(n)}break;case 1:switch(t.g){case 2:Bfn(n),FBn(n);break;case 4:Bfn(n),KSn(n),hln(n);break;case 3:Bfn(n),KSn(n),Bfn(n),hln(n)}break;case 4:switch(t.g){case 2:KSn(n),hln(n);break;case 1:KSn(n),Bfn(n),hln(n);break;case 3:Bfn(n),FBn(n)}break;case 3:switch(t.g){case 2:Bfn(n),KSn(n),hln(n);break;case 1:Bfn(n),KSn(n),Bfn(n),hln(n);break;case 4:Bfn(n),FBn(n)}}return n}function XWn(n,t){var e,i,r,c,a,o,u;if(F$(n.Eh(),167)?(XWn(uG(n.Eh(),167),t),t.a+=" > "):t.a+="Root ",m_((e=n.Dh().zb).substr(0,3),"Elk")?JA(t,(s3(3,e.length+1),e.substr(3))):t.a+=""+e,r=n.jh())JA((t.a+=" ",t),r);else if(F$(n,366)&&(u=uG(n,135).a))JA((t.a+=" ",t),u);else{for(c=new DD(n.kh());c.e!=c.i.gc();)if(u=uG(Zkn(c),135).a)return void JA((t.a+=" ",t),u);if(F$(n,326)&&(!(i=uG(n,74)).b&&(i.b=new f_(cFt,i,4,7)),0!=i.b.i&&(!i.c&&(i.c=new f_(cFt,i,5,8)),0!=i.c.i))){for(t.a+=" (",a=new Zx((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b));a.e!=a.i.gc();)a.e>0&&(t.a+=TZn),XWn(uG(Zkn(a),167),t);for(t.a+=Y4n,o=new Zx((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c));o.e!=o.i.gc();)o.e>0&&(t.a+=TZn),XWn(uG(Zkn(o),167),t);t.a+=")"}}}function zWn(n,t,i){var r,c,a,o,u,s,f,l;for(s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new Fz(ix(eRn(u=uG(Zkn(s),27)).a.Kc(),new h));hDn(c);){if(!(r=uG(N9(c),74)).b&&(r.b=new f_(cFt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new f_(cFt,r,5,8)),r.c.i<=1)))throw hv(new EM("Graph must not contain hyperedges."));if(!z$n(r)&&u!=lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84)))for(zsn(f=new $F,r),kfn(f,(mon(),Wft),r),Kb(f,uG(DA(FX(i.f,u)),153)),Bb(f,uG(cQ(i,lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84))),153)),kD(t.c,f),o=new DD((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n));o.e!=o.i.gc();)zsn(l=new A5(f,(a=uG(Zkn(o),135)).a),a),kfn(l,Wft,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),Yqn(l),kD(t.d,l)}}function VWn(n,t,i){var r,c,a,o,u,s,h,f;switch(i.Ug("Node promotion heuristic",1),n.i=t,n.r=uG(oIn(t,(jYn(),yMt)),243),n.r!=(THn(),Pjt)&&n.r!=Cjt?RQn(n):n_n(n),f=uG(oIn(n.i,kMt),17).a,a=new hi,n.r.g){case 2:case 1:default:nzn(n,a);break;case 3:for(n.r=Djt,nzn(n,a),s=0,u=new Ww(n.b);u.a<u.c.c.length;)o=uG(N3(u),17),s=e.Math.max(s,o.a);s>n.k&&(n.r=Ijt,nzn(n,a));break;case 4:for(n.r=Djt,nzn(n,a),h=0,c=new Ww(n.c);c.a<c.c.c.length;)r=pK(N3(c)),h=e.Math.max(h,(tJ(r),r));h>n.n&&(n.r=Ljt,nzn(n,a));break;case 6:nzn(n,new mg(t0(e.Math.ceil(n.g.length*f/100))));break;case 5:nzn(n,new vg(t0(e.Math.ceil(n.e*f/100))));break;case 8:IYn(n,!0);break;case 9:IYn(n,!1)}n.r!=Pjt&&n.r!=Cjt?JKn(n,t):BBn(n,t),i.Vg()}function WWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(pF(u=new N4(s=n.b,0),new bQ(n)),g=!1,c=1;u.b<u.d.gc();){for(MK(u.b<u.d.gc()),o=uG(u.d.Xb(u.c=u.b++),30),u3(c,s.c.length),b=uG(s.c[c],30),d=(w=T3(o.a)).c.length,l=new Ww(w);l.a<l.c.c.length;)a2(h=uG(N3(l),10),b);if(g){for(f=Spn(w).Kc();f.Ob();)for(r=new Ww(T3(qgn(h=uG(f.Pb(),10))));r.a<r.c.c.length;)pqn(i=uG(N3(r),18),!0),kfn(n,(GYn(),Lpt),(qx(),!0)),e=gVn(n,i,d),t=uG(oIn(h,Spt),313),p=uG(zq(e,e.c.length-1),18),t.k=p.c.i,t.n=p,t.b=i.d.i,t.c=i;g=!1}else 0!=w.c.length&&(u3(0,w.c.length),uG(w.c[0],10).k==(zIn(),fbt)&&(g=!0,c=-1));++c}for(a=new N4(n.b,0);a.b<a.d.gc();)MK(a.b<a.d.gc()),0==uG(a.d.Xb(a.c=a.b++),30).a.c.length&&LQ(a)}function QWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(Y1(l=new EQn(n),!(t==(xdn(),nxt)||t==QDt)),f=l.a,b=new Dk,Yrn(),o=0,s=(c=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;o<s;++o)i=c[o],(h=rD(f,jst,i))&&(b.d=e.Math.max(b.d,h.jf()));for(a=0,u=(r=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;a<u;++a)i=r[a],(h=rD(f,Sst,i))&&(b.a=e.Math.max(b.a,h.jf()));for(p=0,v=(d=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;p<v;++p)(h=rD(f,d[p],jst))&&(b.b=e.Math.max(b.b,h.kf()));for(g=0,m=(w=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;g<m;++g)(h=rD(f,w[g],Sst))&&(b.c=e.Math.max(b.c,h.kf()));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 JWn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(b=i.d,l=i.c,o=(a=new MO(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Ww(n.a);h.a<h.c.c.length;)if((u=uG(N3(h),10)).k==(zIn(),lbt)){switch(r=uG(oIn(u,(GYn(),Fpt)),64),c=uG(oIn(u,_pt),8),f=u.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==($Pn(),aRt)?(w=uM(pK(oIn(u,bmt))),f.b=a.b*w-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0)):t==cRt&&(f.b=uM(pK(oIn(u,bmt)))-uG(oIn(u,(jYn(),WMt)),8).b,d=f.b+c.b,fhn(u,!1,!0))}o=e.Math.max(o,d)}for(i.f.b+=o-a.b,s=new Ww(n.a);s.a<s.c.c.length;)if((u=uG(N3(s),10)).k==(zIn(),lbt))switch(r=uG(oIn(u,(GYn(),Fpt)),64),f=u.n,r.g){case 1:f.b=-l.b-b.d;break;case 3:f.b=i.f.b+b.a-l.b}}function YWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=uG(uG(Y9(n.r,t),21),87)).gc()<=2||t==(KQn(),kRt)||t==(KQn(),_Rt))MJn(n,t);else{for(g=n.u.Hc((eNn(),pRt)),i=t==(KQn(),yRt)?(ehn(),pht):(ehn(),wht),m=t==yRt?(Yen(),Rst):(Yen(),Fst),r=TT(BB(i),n.s),p=t==yRt?M0n:T0n,h=f.Kc();h.Ob();)!(u=uG(h.Pb(),117)).c||u.c.d.c.length<=0||(d=u.b.Mf(),w=u.e,(b=(l=u.c).i).b=(a=l.n,l.e.a+a.b+a.c),b.a=(o=l.n,l.e.b+o.d+o.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,ZZ(m,W2n),l.f=m,etn(l,(Ktn(),Lst)),kD(r.d,new ZX(b,Hdn(r,b))),p=t==yRt?e.Math.min(p,w.b):e.Math.max(p,w.b+u.b.Mf().b));for(p+=t==yRt?-n.t:n.t,cmn((r.e=p,r)),s=f.Kc();s.Ob();)!(u=uG(s.Pb(),117)).c||u.c.d.c.length<=0||((b=u.c.i).c-=u.e.a,b.d-=u.e.b)}}function ZWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(i=new Zm,w=new Ww(t.a);w.a<w.c.c.length;)if((l=(b=uG(N3(w),10)).e)&&(Ohn(i,ZWn(n,l,b)),BVn(n,l,b),uG(oIn(l,(GYn(),Hpt)),21).Hc((r_n(),tpt))))for(p=uG(oIn(b,(jYn(),JMt)),101),f=uG(oIn(b,nTt),181).Hc((eNn(),wRt)),g=new Ww(b.j);g.a<g.c.c.length;)for(d=uG(N3(g),12),(r=uG(cQ(n.b,d),10))||(kfn(r=DJn(d,p,d.j,-(d.e.c.length-d.g.c.length),null,new sj,d.o,uG(oIn(l,Byt),88),l),rmt,d),vJ(n.b,d,r),kD(l.a,r)),c=uG(zq(r.j,0),12),s=new Ww(d.f);s.a<s.c.c.length;)u=uG(N3(s),72),(a=new uj).o.a=u.o.a,a.o.b=u.o.b,kD(c.f,a),f||(m=d.j,h=0,cV(uG(oIn(b,nTt),21))&&(h=jNn(u.n,u.o,d.o,0,m)),p==($Pn(),uRt)||(KQn(),ERt).Hc(m)?a.o.a=h:a.o.b=h);return FVn(n,t,e,i,o=new Zm),e&&Rzn(n,t,e,o),o}function nQn(n,t,e){var i,r,c,a,o,u,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 Ww(t.j);h.a<h.c.c.length;)for(s=uG(N3(h),12),u=(e?new zd(s):new Wd(s)).Kc();u.Ob();)(a=(o=uG(u.Pb(),12)).i).c==t.c?a!=t&&(nQn(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[o.p],++n.c[t.c.p][t.p].b);if(c=uG(oIn(t,(GYn(),jpt)),15))for(r=c.Kc();r.Ob();)i=uG(r.Pb(),10),t.c==i.c&&(nQn(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+=uRn(n.i,24)*z0n*.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 tQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(l=new Ww(n);l.a<l.c.c.length;){for(Xx((f=uG(N3(l),10)).n),Xx(f.o),ynn(f.f),YBn(f),tBn(f),w=new Ww(f.j);w.a<w.c.c.length;){for(Xx((b=uG(N3(w),12)).n),Xx(b.a),Xx(b.o),NLn(b,UMn(b.j)),(r=uG(oIn(b,(jYn(),YMt)),17))&&kfn(b,YMt,xwn(-r.a)),i=new Ww(b.g);i.a<i.c.c.length;){for(t=Fkn((e=uG(N3(i),18)).a,0);t.b!=t.d.c;)Xx(uG(I6(t),8));if(a=uG(oIn(e,bMt),75))for(c=Fkn(a,0);c.b!=c.d.c;)Xx(uG(I6(c),8));for(s=new Ww(e.b);s.a<s.c.c.length;)Xx((o=uG(N3(s),72)).n),Xx(o.o)}for(h=new Ww(b.f);h.a<h.c.c.length;)Xx((o=uG(N3(h),72)).n),Xx(o.o)}for(f.k==(zIn(),lbt)&&(kfn(f,(GYn(),Fpt),UMn(uG(oIn(f,Fpt),64))),aFn(f)),u=new Ww(f.b);u.a<u.c.c.length;)YBn(o=uG(N3(u),72)),Xx(o.o),Xx(o.n)}}function eQn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g;null==(w=cQ(n.e,i))&&(s=uG(w=new _y,190),u=new QW(t+"_s"+r),nrn(s,Iet,u)),pQ(e,b=uG(w,190)),vZ(g=new _y,"x",i.j),vZ(g,"y",i.k),nrn(b,Let,g),vZ(f=new _y,"x",i.b),vZ(f,"y",i.c),nrn(b,"endPoint",f),!pE((!i.a&&(i.a=new MD(eFt,i,5)),i.a))&&(c=new wm(h=new Ib),z8((!i.a&&(i.a=new MD(eFt,i,5)),i.a),c),nrn(b,Met,h)),!!hMn(i)&&GCn(n.a,b,jet,jAn(n,hMn(i))),!!fMn(i)&&GCn(n.a,b,Tet,jAn(n,fMn(i))),!(0==(!i.e&&(i.e=new f_(oFt,i,10,9)),i.e).i)&&(a=new sA(n,l=new Ib),z8((!i.e&&(i.e=new f_(oFt,i,10,9)),i.e),a),nrn(b,Set,l)),0!=(!i.g&&(i.g=new f_(oFt,i,9,10)),i.g).i&&(o=new hA(n,d=new Ib),z8((!i.g&&(i.g=new f_(oFt,i,9,10)),i.g),o),nrn(b,Eet,d))}function iQn(n){var t,i,r,c,a,o,u;for(VK(),r=n.f.n,o=FW(n.r).a.nc();o.Ob();){if(c=0,(a=uG(o.Pb(),117)).b.pf((XYn(),uDt))&&(c=uM(pK(a.b.of(uDt))))<0)switch(a.b.ag().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(cV(n.u))switch(t=Wun(a.b,c),u=!uG(n.e.of(q$t),181).Hc((aUn(),nKt)),i=!1,a.b.ag().g){case 1:i=t>r.d,r.d=e.Math.max(r.d,t),u&&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),u&&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),u&&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),u&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function rQn(n,t){var e,i,r,c,a,o,u,s,h;return s="",0==t.length?n.ne(L1n,O1n,-1,-1):(m_((h=KAn(t)).substr(0,3),"at ")&&(s3(3,h.length+1),h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=KAn((s3(a+1,h.length+1),h.substr(a+1))),h=KAn((Knn(0,a,h.length),h.substr(0,a)))):(Knn(a+1,e=h.indexOf(")",a),h.length),s=h.substr(a+1,e-(a+1)),h=KAn((Knn(0,a,h.length),h.substr(0,a)))),-1!=(a=xL(h,$Cn(46)))&&(s3(a+1,h.length+1),h=h.substr(a+1)),(0==h.length||m_(h,"Anonymous function"))&&(h=O1n),o=ax(s,$Cn(58)),r=T_(s,$Cn(58),o-1),u=-1,i=-1,c=L1n,-1!=o&&-1!=r&&(Knn(0,r,s.length),c=s.substr(0,r),u=rR((Knn(r+1,o,s.length),s.substr(r+1,o-(r+1)))),i=rR((s3(o+1,s.length+1),s.substr(o+1)))),n.ne(c,h,u,i))}function cQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(s=new Ww(n);s.a<s.c.c.length;){switch(u=uG(N3(s),10),c=null,(a=uG(oIn(u,(jYn(),gMt)),171)).g){case 1:case 2:Pfn(),c=ygt;break;case 3:case 4:Pfn(),c=vgt}if(c)kfn(u,(GYn(),Npt),(Pfn(),ygt)),c==vgt?CKn(u,a,(can(),Vjt)):c==ygt&&CKn(u,a,(can(),Wjt));else if(sN(uG(oIn(u,JMt),101))&&0!=u.j.c.length){for(t=!0,f=new Ww(u.j);f.a<f.c.c.length;){if(!((h=uG(N3(f),12)).j==(KQn(),kRt)&&h.e.c.length-h.g.c.length>0||h.j==_Rt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Ww(h.g);r.a<r.c.c.length;)if(e=uG(N3(r),18),(o=uG(oIn(e.d.i,gMt),171))==(Gpn(),Omt)||o==Amt){t=!1;break}for(i=new Ww(h.e);i.a<i.c.c.length;)if(e=uG(N3(i),18),(o=uG(oIn(e.c.i,gMt),171))==(Gpn(),Cmt)||o==Imt){t=!1;break}}t&&CKn(u,a,(can(),Qjt))}}}function aQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(T=0,w=0,l=new Ww(t.e);l.a<l.c.c.length;){for(f=uG(N3(l),10),b=0,u=0,s=i?uG(oIn(f,iSt),17).a:j1n,m=r?uG(oIn(f,rSt),17).a:j1n,h=e.Math.max(s,m),k=new Ww(f.j);k.a<k.c.c.length;){if(v=uG(N3(k),12),y=f.n.b+v.n.b+v.a.b,r)for(o=new Ww(v.g);o.a<o.c.c.length;)d=(g=(a=uG(N3(o),18)).d).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).a)>=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u));if(i)for(o=new Ww(v.e);o.a<o.c.c.length;)d=(g=(a=uG(N3(o),18)).c).i,t!=n.a[d.p]&&(p=e.Math.max(uG(oIn(d,iSt),17).a,uG(oIn(d,rSt),17).a),(M=uG(oIn(a,(jYn(),uTt)),17).a)>=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u))}u>0&&(T+=b/u,++w)}w>0?(t.a=c*T/w,t.g=w):(t.a=0,t.g=0)}function oQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,vN(n.e,c.a,c.b),M=l/w,T=h/b,s=new DD(xJ(n.e));s.e!=s.i.gc();)ycn(u=uG(Zkn(s),135),u.i*M),Mcn(u,u.j*T);for(m=new DD(RJ(n.e));m.e!=m.i.gc();)k=(p=uG(Zkn(m),123)).i,y=p.j,k>0&&ycn(p,k*M),y>0&&Mcn(p,y*T);for(Yun(n.b,new ft),t=new Zm,o=new bsn(new Nw(n.c).a);o.b;)i=uG((a=von(o)).ld(),74),e=uG(a.md(),407).a,r=JFn(i,!1,!1),sqn(f=YPn(bIn(i),COn(r),e),r),(v=wIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.a.a.c,8)),e));for(g=new bsn(new Nw(n.d).a);g.b;)i=uG((d=von(g)).ld(),74),e=uG(d.md(),407).a,r=JFn(i,!1,!1),f=YPn(gIn(i),fln(COn(r)),e),sqn(f=fln(f),r),(v=dIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.c.b.c,8)),e))}function uQn(n,t,e,i){var r,c,a,o,u;return sKn(o=new EQn(t),i),r=!0,n&&n.pf((XYn(),d$t))&&(r=(c=uG(n.of((XYn(),d$t)),88))==(xdn(),ZDt)||c==JDt||c==YDt),iBn(o,!1),Prn(o.e.Rf(),new DB(o,!1,r)),W1(o,o.f,(Yrn(),jst),(KQn(),yRt)),W1(o,o.f,Sst,KRt),W1(o,o.g,jst,_Rt),W1(o,o.g,Sst,kRt),gyn(o,yRt),gyn(o,KRt),IJ(o,kRt),IJ(o,_Rt),VK(),(a=o.A.Hc((Qmn(),VRt))&&o.B.Hc((aUn(),rKt))?xmn(o):null)&&dT(o.a,a),iQn(o),BTn(o),HTn(o),wWn(o),aGn(o),iEn(o),dkn(o,yRt),dkn(o,KRt),IBn(o),Tzn(o),e?(wpn(o),rEn(o),dkn(o,kRt),dkn(o,_Rt),u=o.B.Hc((aUn(),cKt)),dLn(o,u,yRt),dLn(o,u,KRt),gLn(o,u,kRt),gLn(o,u,_Rt),kS(new fX(null,new h3(new Fw(o.i),0)),new Cn),kS(JJ(new fX(null,FW(o.r).a.oc()),new In),new On),jPn(o),o.e.Pf(o.o),kS(new fX(null,FW(o.r).a.oc()),new An),o.o):o.o}function sQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a<r.c.c.length;)t=uG(N3(r),86),h=e.Math.min(h,t.d.f.g.c+t.e.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),194)).i=h,0==a.e&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),194)).f.g.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),86),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==(xdn(),YDt)||n.c==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),86)).f.Kc();s.Ob();)u=uG(s.Pb(),86),d=hN(n.c)?n.f.yf(f,u):n.f.zf(f,u),u.d.i=e.Math.max(u.d.i,f.o+f.g.b+d-u.e.a),u.k||(u.d.i=e.Math.max(u.d.i,u.g.c-u.e.a)),--u.d.e,0==u.d.e&&aq(w,u.d)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),86)).g.c=t.o}function hQn(n){var t,e,i,r,c,a,o,u;switch(o=n.b,t=n.a,0===uG(oIn(n,(MEn(),cst)),435).g?f$(o,new Zw(new Un)):f$(o,new Zw(new Gn)),1===uG(oIn(n,ist),436).g?(f$(o,new Hn),f$(o,new qn),f$(o,new xn)):(f$(o,new Hn),f$(o,new _n)),uG(oIn(n,ost),257).g){case 0:u=new Qn;break;case 1:u=new Vn;break;case 2:u=new Wn;break;case 3:u=new zn;break;case 5:u=new $d(new Wn);break;case 4:u=new $d(new Vn);break;case 7:u=new sC(new $d(new Vn),new $d(new Wn));break;case 8:u=new sC(new $d(new zn),new $d(new Wn));break;default:u=new $d(new zn)}for(a=new Ww(o);a.a<a.c.c.length;){for(c=uG(N3(a),176),r=0,e=new WO(xwn(i=0),xwn(r));WUn(t,c,i,r);)e=uG(u.Ve(e,c),42),i=uG(e.a,17).a,r=uG(e.b,17).a;_Bn(t,c,i,r)}}function fQn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(e.Ug(o7n,1),OQn(),l=EPt,n.a==(mbn(),$Ct)&&(l=TPt),h=0,hZ(),t.jd(new Sm(l)),c=t.gc(),o=t.fd(t.gc()),s=!0;s&&o.Sb();)p=uG(o.Ub(),40),0==uG(oIn(p,l),17).a?--c:s=!1;if(a=new Y_(t.kd(0,c)),u=new Y_(t.kd(c,t.gc())),0==a.b)for(w=Fkn(u,0);w.b!=w.d.c;)kfn(uG(I6(w),40),KPt,xwn(h++));else for(f=a.b,k=Fkn(a,0);k.b!=k.d.c;){for(kfn(v=uG(I6(k),40),KPt,xwn(h++)),fQn(n,i=Lhn(v),e.eh(1/f|0)),Lon(i,kJ(new Sm(KPt))),b=new lS,m=Fkn(i,0);m.b!=m.d.c;)for(p=uG(I6(m),40),g=Fkn(v.d,0);g.b!=g.d.c;)(d=uG(I6(g),65)).c==p&&s8(b,d,b.c.b,b.c);for(BY(v.d),Qon(v.d,b),o=Fkn(u,u.b),r=v.d.b,s=!0;0<r&&s&&o.Sb();)p=uG(o.Ub(),40),0==uG(oIn(p,l),17).a?(kfn(p,KPt,xwn(h++)),--r,o.Qb()):s=!1}e.Vg()}function lQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w;for(l=uM(pK(zDn(n,(jOn(),XIt)))),oM(gK(zDn(n,GIt)))&&(f=uG(zDn(n,(SK(),zCt)),27),a=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),(!f.e&&(f.e=new f_(aFt,f,7,4)),f.e).i-1),74)),0),27),r=uG(zrn(KJ(uG(zrn((!f.e&&(f.e=new f_(aFt,f,7,4)),f.e),0),74)),0),27),o=new MO(a.i+a.g/2,a.j+a.f/2),c=new MO(r.i+r.g/2,r.j+r.f/2),(i=l)<=0&&(i+=f7n),(b=e.Math.acos((o.a*c.a+o.b*c.b)/(e.Math.sqrt(o.a*o.a+o.b*o.b)*e.Math.sqrt(c.a*c.a+c.b*c.b))))<=0&&(b+=f7n),(t=e.Math.atan2(o.b,o.a))<=0&&(t+=f7n),l=F9n-(t-i+b/2)),s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)w=(h=new MO((u=uG(Zkn(s),27)).i+u.g/2,u.j+u.f/2)).a*e.Math.cos(l)-h.b*e.Math.sin(l),h.b=h.a*e.Math.sin(l)+h.b*e.Math.cos(l),h.a=w,kN(u,h.a-u.g/2,h.b-u.f/2)}function bQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Inverted port preprocessing",1),o=new N4(n.b,0),e=null,g=new Zm;o.b<o.d.gc();){for(d=e,MK(o.b<o.d.gc()),e=uG(o.d.Xb(o.c=o.b++),30),h=new Ww(g);h.a<h.c.c.length;)a2(u=uG(N3(h),10),d);for(g.c.length=0,f=new Ww(e.a);f.a<f.c.c.length;)if((u=uG(N3(f),10)).k==(zIn(),dbt)&&sN(uG(oIn(u,(jYn(),JMt)),101))){for(w=nBn(u,(can(),Vjt),(KQn(),kRt)).Kc();w.Ob();)for(l=uG(w.Pb(),12),r=0,c=(i=uG(Ekn(a=l.e,Inn(obt,t6n,18,a.c.length,0,1)),483)).length;r<c;++r)Fqn(n,l,i[r],g);for(b=nBn(u,Wjt,_Rt).Kc();b.Ob();)for(l=uG(b.Pb(),12),r=0,c=(i=uG(Ekn(a=l.g,Inn(obt,t6n,18,a.c.length,0,1)),483)).length;r<c;++r)Kqn(n,l,i[r],g)}}for(s=new Ww(g);s.a<s.c.c.length;)a2(u=uG(N3(s),10),e);t.Vg()}function wQn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v;for(l=null,r==(l0(),USt)?l=t:r==GSt&&(l=i),d=l.a.ec().Kc();d.Ob();){for(w=uG(d.Pb(),12),g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[w.i.n,w.n,w.a])).b,v=new ek,u=new ek,h=new w7(w.b);l$(h.a)||l$(h.b);)if(oM(gK(oIn(s=uG(l$(h.a)?N3(h.a):N3(h.b),18),(GYn(),pmt))))==c&&-1!=Ten(a,s,0)){if(p=s.d==w?s.c:s.d,m=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).b,e.Math.abs(m-g)<.2)continue;m<g?t.a._b(p)?FV(v,new WO(USt,s)):FV(v,new WO(GSt,s)):t.a._b(p)?FV(u,new WO(USt,s)):FV(u,new WO(GSt,s))}if(v.a.gc()>1)for(z8(v,new BI(n,b=new Izn(w,v,r))),mv(o.c,b),f=v.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b);if(u.a.gc()>1)for(z8(u,new HI(n,b=new Izn(w,u,r))),mv(o.c,b),f=u.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b)}}function dQn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(g=n.n,p=n.o,b=n.d,l=uM(pK(Omn(n,(jYn(),lTt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),u=t.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a-o.o.b,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=o.o.b,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,o2(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),u=i.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=0,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,o2(d,n)),c+=r}}function gQn(n,t){var i,r,c,a,o,u;if(uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))){for(u=new Ww(t.a);u.a<u.c.c.length;)(a=uG(N3(u),10)).k==(zIn(),dbt)&&(c=uG(oIn(a,(jYn(),TMt)),140),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(o=new Ww(t.a);o.a<o.c.c.length;)if((a=uG(N3(o),10)).k!=(zIn(),dbt))switch(a.k.g){case 2:if((r=uG(oIn(a,(jYn(),gMt)),171))==(Gpn(),Imt)){a.n.a=n.c-10,Djn(a,new Ge).Jb(new sg(a));break}if(r==Amt){a.n.a=n.a+10,Djn(a,new qe).Jb(new hg(a));break}if((i=uG(oIn(a,Xpt),311))==(Zen(),ppt)){Azn(a).Jb(new fg(a)),a.n.b=n.d-10;break}if(i==dpt){Azn(a).Jb(new lg(a)),a.n.b=n.b+10;break}break;default:throw hv(new vM("The node type "+a.k+" is not supported by the "+Fwt))}}}function pQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(u=new MO(i.i+i.g/2,i.j+i.f/2),l=fzn(i),b=uG(zDn(t,(jYn(),JMt)),101),d=uG(zDn(i,eTt),64),dA(Qkn(i),QMt)||(w=0==i.i&&0==i.j?0:KCn(i,d),Myn(i,QMt,w)),kfn(r=DJn(i,b,d,l,new MO(t.g,t.f),u,new MO(i.g,i.f),uG(oIn(e,Byt),88),e),(GYn(),rmt),i),Ub(c=uG(zq(r.j,0),12),CUn(i)),kfn(r,nTt,(eNn(),ggn(gRt))),h=uG(zDn(t,nTt),181).Hc(wRt),o=new DD((!i.n&&(i.n=new fV(lFt,i,1,7)),i.n));o.e!=o.i.gc();)if(!oM(gK(zDn(a=uG(Zkn(o),135),FMt)))&&a.a&&(f=own(a),kD(c.f,f),!h))switch(s=0,cV(uG(zDn(t,nTt),21))&&(s=jNn(new MO(a.i,a.j),new MO(a.g,a.f),new MO(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}kfn(r,TTt,pK(zDn(R0(t),TTt))),kfn(r,jTt,pK(zDn(R0(t),jTt))),kfn(r,yTt,pK(zDn(R0(t),yTt))),kD(e.a,r),vJ(n.a,i,r)}function mQn(n,t,e,i,r,c){var a,o,u,s,h,f;for(zsn(s=new lOn,t),NLn(s,uG(zDn(t,(jYn(),eTt)),64)),kfn(s,(GYn(),rmt),t),o2(s,e),(f=s.o).a=t.g,f.b=t.f,(h=s.n).a=t.i,h.b=t.j,vJ(n.a,t,s),(a=o9(YJ(sin(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Wt),new zt),new Zd(t)))||(a=o9(YJ(sin(new fX(null,(!t.d&&(t.d=new f_(aFt,t,8,5)),new h3(t.d,16))),new Qt),new Vt),new ng(t))),a||(a=o9(new fX(null,(!t.e&&(t.e=new f_(aFt,t,7,4)),new h3(t.e,16))),new Jt)),kfn(s,qpt,(qx(),!!a)),Fzn(s,c,r,uG(zDn(t,WMt),8)),u=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));u.e!=u.i.gc();)!oM(gK(zDn(o=uG(Zkn(u),135),FMt)))&&o.a&&kD(s.f,own(o));switch(r.g){case 2:case 1:(s.j==(KQn(),yRt)||s.j==KRt)&&i.Fc((r_n(),cpt));break;case 4:case 3:(s.j==(KQn(),kRt)||s.j==_Rt)&&i.Fc((r_n(),cpt))}return s}function vQn(n,t,i,r,c){var a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,g=0,d=0,w=1,v=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));v.e!=v.i.gc();)w+=x5(new Fz(ix(eRn(p=uG(Zkn(v),27)).a.Kc(),new h))),j=p.g,g=e.Math.max(g,j),b=p.f,d=e.Math.max(d,b),k+=j*b;for(o=k+2*r*r*w*(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i,a=e.Math.sqrt(o),s=e.Math.max(a*i,g),u=e.Math.max(a/i,d),m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();)p=uG(Zkn(m),27),E=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(s-p.g),S=c.b+(uRn(t,26)*G0n+uRn(t,27)*q0n)*(u-p.f),ycn(p,E),Mcn(p,S);for(T=s+(c.b+c.c),M=u+(c.d+c.a),y=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));y.e!=y.i.gc();)for(l=new Fz(ix(eRn(uG(Zkn(y),27)).a.Kc(),new h));hDn(l);)z$n(f=uG(N9(l),74))||fYn(f,t,T,M);ZQn(n,T+=c.b+c.c,M+=c.d+c.a,!1,!0)}function kQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Comment pre-processing",1),e=0,u=new Ww(n.a);u.a<u.c.c.length;)if(oM(gK(oIn(o=uG(N3(u),10),(jYn(),gyt))))){for(++e,r=0,i=null,s=null,w=new Ww(o.j);w.a<w.c.c.length;)r+=(l=uG(N3(w),12)).e.c.length+l.g.c.length,1==l.e.c.length&&(s=(i=uG(zq(l.e,0),18)).c),1==l.g.c.length&&(s=(i=uG(zq(l.g,0),18)).d);if(1!=r||s.e.c.length+s.g.c.length!=1||oM(gK(oIn(s.i,gyt)))){for(g=new Zm,b=new Ww(o.j);b.a<b.c.c.length;){for(f=new Ww((l=uG(N3(b),12)).g);f.a<f.c.c.length;)0==(h=uG(N3(f),18)).d.g.c.length||mv(g.c,h);for(a=new Ww(l.e);a.a<a.c.c.length;)0==(c=uG(N3(a),18)).c.e.c.length||mv(g.c,c)}for(d=new Ww(g);d.a<d.c.c.length;)pqn(uG(N3(d),18),!0)}else TJn(o,i,s,s.i),tW(u)}t._g()&&t.bh("Found "+e+" comment boxes"),t.Vg()}function yQn(n,t){var e,i,r,c,a,o,u;if(GG(),this.a=new U$(this),this.b=n,this.c=t,this.f=ZV(Nen((gAn(),kBt),t)),this.f.dc())if((o=cSn(kBt,n))==t)for(this.e=!0,this.d=new Zm,this.f=new us,this.f.Fc(lct),uG(QXn(Len(kBt,Hrn(n)),""),29)==n&&this.f.Fc(jz(kBt,Hrn(n))),r=LHn(kBt,n).Kc();r.Ob();)switch(i=uG(r.Pb(),179),sJ(Nen(kBt,i))){case 4:this.d.Fc(i);break;case 5:this.f.Gc(ZV(Nen(kBt,i)))}else if(PP(),uG(t,69).xk())for(this.e=!0,this.f=null,this.d=new Zm,a=0,u=(null==n.i&&eqn(n),n.i).length;a<u;++a)for(null==n.i&&eqn(n),e=n.i,i=a>=0&&a<e.length?e[a]:null,c=_3(Nen(kBt,i));c;c=_3(Nen(kBt,c)))c==t&&this.d.Fc(i);else 1==sJ(Nen(kBt,t))&&o?(this.f=null,this.d=(m$n(),$Bt)):(this.f=null,this.e=!0,this.d=(hZ(),new Xw(t)));else this.e=5==sJ(Nen(kBt,t)),this.f.Fb(CBt)&&(this.f=CBt)}function MQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(i=0,r=fTn(n,t),b=n.s,w=n.t,h=uG(uG(Y9(n.r,t),21),87).Kc();h.Ob();)if((s=uG(h.Pb(),117)).c&&!(s.c.d.c.length<=0)){switch(d=s.b.Mf(),u=s.b.pf((XYn(),uDt))?uM(pK(s.b.of(uDt))):0,(l=(f=s.c).i).b=(o=f.n,f.e.a+o.b+o.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+u+r,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Fst));break;case 3:l.c=s.a?(d.a-l.b)/2:d.a+b,l.d=-u-r-l.a,etn(f,(Ktn(),Ost)),eF(f,(Yen(),Rst));break;case 2:l.c=-u-r-l.b,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Lst)),eF(f,(Yen(),Kst));break;case 4:l.c=d.a+u+r,s.a?(c=n.v?l.a:uG(zq(f.d,0),187).Mf().b,l.d=(d.b-c)/2):l.d=d.b+w,etn(f,(Ktn(),Ast)),eF(f,(Yen(),Kst))}(t==(KQn(),yRt)||t==KRt)&&(i=e.Math.max(i,l.a))}i>0&&(uG(AJ(n.b,t),127).a.b=i)}function TQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(l=uM(pK(oIn(n,(jYn(),TTt)))),b=uM(pK(oIn(n,jTt))),f=uM(pK(oIn(n,yTt))),o=n.o,a=(c=uG(zq(n.j,0),12)).n,d=hAn(c,f)){if(t.Hc((eNn(),wRt)))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:d.c=(o.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(o.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:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.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:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=l}else if(t.Hc(gRt))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Ww(c.f);s.a<s.c.c.length;)(w=(u=uG(N3(s),72)).n).a=d.c,w.b=r,r+=u.o.b+f}}function jQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(v=new Zm,f=new Ww(n.b);f.a<f.c.c.length;)for(w=new Ww(uG(N3(f),30).a);w.a<w.c.c.length;)if((l=uG(N3(w),10)).k==(zIn(),lbt)&&vR(l,(GYn(),Kpt))){for(d=null,p=null,g=null,M=new Ww(l.j);M.a<M.c.c.length;)switch((y=uG(N3(M),12)).j.g){case 4:d=y;break;case 2:p=y;break;default:g=y}for(s=new tj((m=uG(zq(g.g,0),18)).a),JF(u=new eN(g.n),l.n),lW(Fkn(s,0),u),k=fln(m.a),JF(h=new eN(g.n),l.n),s8(k,h,k.c.b,k.c),T=uG(oIn(l,Kpt),10),j=uG(zq(T.j,0),12),c=0,o=(i=uG(Ekn(d.e,Inn(obt,t6n,18,0,0,1)),483)).length;c<o;++c)u2(t=i[c],j),rbn(t.a,t.a.b,s);for(r=0,a=(e=x4(p.g)).length;r<a;++r)c2(t=e[r],j),rbn(t.a,0,k);c2(m,null),u2(m,null),mv(v.c,l)}for(b=new Ww(v);b.a<b.c.c.length;)a2(l=uG(N3(b),10),null)}function EQn(n){var t;if(this.r=tY(new Sn,new Pn),this.b=new rpn(uG(WW(YRt),297)),this.p=new rpn(uG(WW(YRt),297)),this.i=new rpn(uG(WW(mht),297)),this.e=n,this.o=new eN(n.Mf()),this.D=oM(gK(n.of((XYn(),HDt)))),this.F=n.Yf()||oM(gK(n.of(C$t))),this.A=uG(n.of(_$t),21),this.B=uG(n.of(q$t),21),this.q=uG(n.of(sDt),101),this.u=uG(n.of(bDt),21),!eIn(this.u))throw hv(new jM("Invalid port label placement: "+this.u));if(this.v=oM(gK(n.of(dDt))),this.j=uG(n.of(K$t),21),!zxn(this.j))throw hv(new jM("Invalid node label placement: "+this.j));this.n=uG(Rjn(n,x$t),107),this.k=uM(pK(Rjn(n,LDt))),this.d=uM(pK(Rjn(n,ADt))),this.w=uM(pK(Rjn(n,FDt))),this.s=uM(pK(Rjn(n,NDt))),this.t=uM(pK(Rjn(n,$Dt))),this.C=uG(Rjn(n,RDt),140),this.c=2*this.d,t=!this.B.Hc((aUn(),nKt)),this.f=new tkn(0,t,0),this.g=new tkn(1,t,0),nM(this.f,(Yrn(),Est),this.g)}function SQn(){ML(DBt,new Xh),ML(lHt,new rf),ML(bHt,new df),ML(wHt,new Sf),ML($ot,new Of),ML(cT(tUt,1),new Af),ML(cot,new Lf),ML(uot,new Nf),ML($ot,new Dh),ML($ot,new xh),ML($ot,new Rh),ML(fot,new Kh),ML($ot,new Fh),ML(yat,new _h),ML(yat,new Bh),ML($ot,new Hh),ML(lot,new Gh),ML($ot,new qh),ML($ot,new zh),ML($ot,new Vh),ML($ot,new Wh),ML($ot,new Qh),ML(cT(tUt,1),new Jh),ML($ot,new Yh),ML($ot,new Zh),ML(yat,new nf),ML(yat,new tf),ML($ot,new ef),ML(dot,new cf),ML($ot,new af),ML(yot,new of),ML($ot,new uf),ML($ot,new sf),ML($ot,new hf),ML($ot,new ff),ML(yat,new lf),ML(yat,new bf),ML($ot,new wf),ML($ot,new gf),ML($ot,new pf),ML($ot,new mf),ML($ot,new vf),ML($ot,new kf),ML(Tot,new yf),ML($ot,new Mf),ML($ot,new Tf),ML($ot,new jf),ML(Tot,new Ef),ML(yot,new Pf),ML($ot,new Cf),ML(dot,new If)}function PQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;switch(h=new Uk,n.a.g){case 3:l=uG(oIn(t.e,(GYn(),Tmt)),15),b=uG(oIn(t.j,Tmt),15),w=uG(oIn(t.f,Tmt),15),e=uG(oIn(t.e,ymt),15),i=uG(oIn(t.j,ymt),15),r=uG(oIn(t.f,ymt),15),Ohn(a=new Zm,l),b.Jc(new gc),Ohn(a,Spn(b)),Ohn(a,w),Ohn(c=new Zm,e),Ohn(c,Spn(i)),Ohn(c,r),kfn(t.f,Tmt,a),kfn(t.f,ymt,c),kfn(t.f,jmt,t.f),kfn(t.e,Tmt,null),kfn(t.e,ymt,null),kfn(t.j,Tmt,null),kfn(t.j,ymt,null);break;case 1:Qon(h,t.e.a),aq(h,t.i.n),Qon(h,Spn(t.j.a)),aq(h,t.a.n),Qon(h,t.f.a);break;default:Qon(h,t.e.a),Qon(h,Spn(t.j.a)),Qon(h,t.f.a)}BY(t.f.a),Qon(t.f.a,h),c2(t.f,t.e.c),o=uG(oIn(t.e,(jYn(),bMt)),75),s=uG(oIn(t.j,bMt),75),u=uG(oIn(t.f,bMt),75),(o||s||u)&&(uW(f=new Uk,u),uW(f,s),uW(f,o),kfn(t.f,bMt,f)),c2(t.j,null),u2(t.j,null),c2(t.e,null),u2(t.e,null),a2(t.a,null),a2(t.i,null),t.g&&PQn(n,t.g)}function CQn(){var n,t,e;for(CQn=E,new Edn(1,0),new Edn(10,0),new Edn(0,0),Sot=Inn(Bot,zZn,247,11,0,1),Pot=Inn(JHt,N1n,28,100,15,1),Cot=Uhn(cT(eUt,1),I0n,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),Iot=Inn(YHt,W1n,28,Cot.length,15,1),Oot=Uhn(cT(eUt,1),I0n,28,15,[1,10,100,$1n,1e4,O0n,1e6,1e7,1e8,g0n,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),Aot=Inn(YHt,W1n,28,Oot.length,15,1),Lot=Inn(Bot,zZn,247,11,0,1),n=0;n<Lot.length;n++)Sot[n]=new Edn(n,0),Lot[n]=new Edn(0,n),Pot[n]=48;for(;n<Pot.length;n++)Pot[n]=48;for(e=0;e<Iot.length;e++)Iot[e]=VLn(Cot[e]);for(t=0;t<Aot.length;t++)Aot[t]=VLn(Oot[t]);b_n()}function IQn(){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[U0n]=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}}}},__n()||(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[U0n]=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 OQn(){OQn=E,RPt=new Cm(E4n),new Cm(S4n),new uF("DEPTH",xwn(0)),EPt=new uF("FAN",xwn(0)),TPt=new uF(Q9n,xwn(0)),UPt=new uF("ROOT",(qx(),!1)),APt=new uF("LEFTNEIGHBOR",null),BPt=new uF("RIGHTNEIGHBOR",null),LPt=new uF("LEFTSIBLING",null),HPt=new uF("RIGHTSIBLING",null),jPt=new uF("DUMMY",!1),new uF("LEVEL",xwn(0)),_Pt=new uF("REMOVABLE_EDGES",new lS),GPt=new uF("XCOOR",xwn(0)),qPt=new uF("YCOOR",xwn(0)),NPt=new uF("LEVELHEIGHT",0),DPt=new uF("LEVELMIN",0),$Pt=new uF("LEVELMAX",0),PPt=new uF("GRAPH_XMIN",0),IPt=new uF("GRAPH_YMIN",0),SPt=new uF("GRAPH_XMAX",0),CPt=new uF("GRAPH_YMAX",0),MPt=new uF("COMPACT_LEVEL_ASCENSION",!1),yPt=new uF("COMPACT_CONSTRAINTS",new Zm),OPt=new uF("ID",""),KPt=new uF("POSITION",xwn(0)),FPt=new uF("PRELIM",0),xPt=new uF("MODIFIER",0),kPt=new Cm(P4n),vPt=new Cm(C4n)}function AQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(NGn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=Inn(JHt,N1n,28,4*(0!=(o=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,u=0;u<l;u++)t=n[r++],h=(15&(e=n[r++]))<<24>>24,s=(3&t)<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,w=-128&e?(e>>4^240)<<24>>24:e>>4<<24>>24,d=-128&(i=n[r++])?(i>>6^252)<<24>>24:i>>6<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2|d],c[a++]=gHt[63&i];return 8==o?(s=(3&(t=n[r]))<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,c[a++]=gHt[b],c[a++]=gHt[s<<4],c[a++]=61,c[a++]=61):16==o&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=-128&t?(t>>2^192)<<24>>24:t>>2<<24>>24,w=-128&e?(e>>4^240)<<24>>24:e>>4<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2],c[a++]=61),mvn(c,0,c.length)}function LQn(n,t){var i,r,c,a,o,u;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>j1n&&F5(t,n.p-V1n),o=t.q.getDate(),k0(t,1),n.k>=0&&H0(t,n.k),n.c>=0?k0(t,n.c):n.k>=0?(r=35-new Lfn(t.q.getFullYear()-V1n,t.q.getMonth(),35).q.getDate(),k0(t,e.Math.min(r,o))):k0(t,o),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),tD(t,24==n.f&&n.g?0:n.f),n.j>=0&&y7(t,n.j),n.n>=0&&Nnn(t,n.n),n.i>=0&&TL(t,Lgn(Ngn(bSn(Bsn(t.q.getTime()),$1n),$1n),n.i)),n.a&&(F5(c=new QE,c.q.getFullYear()-V1n-80),$P(Bsn(t.q.getTime()),Bsn(c.q.getTime()))&&F5(t,c.q.getFullYear()-V1n+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),u=t.q.getMonth(),k0(t,t.q.getDate()+i),t.q.getMonth()!=u&&k0(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>j1n&&(a=t.q.getTimezoneOffset(),TL(t,Lgn(Bsn(t.q.getTime()),60*(n.o-a)*$1n))),!0}function NQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(F$(r=oIn(t,(GYn(),rmt)),207)){for(b=uG(r,27),w=t.e,f=new eN(t.c),c=t.d,f.a+=c.b,f.b+=c.d,$x(uG(zDn(b,(jYn(),KMt)),181),(aUn(),tKt))&&(Ab(l=uG(zDn(b,_Mt),107),c.a),_b(l,c.d),Lb(l,c.b),Fb(l,c.c)),e=new Zm,s=new Ww(t.a);s.a<s.c.c.length;)for(F$(oIn(o=uG(N3(s),10),rmt),207)?UQn(o,f):F$(oIn(o,rmt),193)&&!w&&kN(i=uG(oIn(o,rmt),123),(g=SGn(t,o,i.g,i.f)).a,g.b),d=new Ww(o.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new tg(o)),new eg(e));if(w)for(d=new Ww(w.j);d.a<d.c.c.length;)kS(JJ(new fX(null,new h3(uG(N3(d),12).g,16)),new ig(w)),new rg(e));for(p=uG(zDn(b,Vyt),223),a=new Ww(e);a.a<a.c.c.length;)DWn(uG(N3(a),18),p,f);for(EUn(t),u=new Ww(t.a);u.a<u.c.c.length;)(h=(o=uG(N3(u),10)).e)&&NQn(n,h)}}function $Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,f=M_n(n,t),r=s.b-u.b-u.c,c=o.a.a,a=s.c+u.b,w=n.w,f!=(Vkn(),Zxt)&&f!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=f==Zxt?c-2*n.w:c,f=Yxt),r<c&&!n.B.Hc((aUn(),aKt)))f==Zxt?a+=w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):w+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=f==Zxt?c-2*n.w:c,f=Yxt),f.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=w+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),w+=e.Math.max(0,i)}for(b=uG(uG(Y9(n.r,t),21),87).Kc();b.Ob();)(l=uG(b.Pb(),117)).e.a=a+l.d.b,l.e.b=(h=l.b).pf((XYn(),uDt))?h.ag()==(KQn(),yRt)?-h.Mf().b-uM(pK(h.of(uDt))):uM(pK(h.of(uDt))):h.ag()==(KQn(),yRt)?-h.Mf().b:0,a+=l.d.b+l.b.Mf().a+l.d.c+w}}function DQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(!uG(uG(Y9(n.r,t),21),87).dc()){if(s=(o=uG(AJ(n.b,t),127)).i,u=o.n,l=M_n(n,t),r=s.a-u.d-u.a,c=o.a.b,a=s.d+u.d,d=n.w,h=n.o.a,l!=(Vkn(),Zxt)&&l!=tRt||1!=uG(uG(Y9(n.r,t),21),87).gc()||(c=l==Zxt?c-2*n.w:c,l=Yxt),r<c&&!n.B.Hc((aUn(),aKt)))l==Zxt?a+=d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1):d+=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1);else switch(r<c&&(c=l==Zxt?c-2*n.w:c,l=Yxt),l.g){case 3:a+=(r-c)/2;break;case 4:a+=r-c;break;case 0:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()+1),a+=d+=e.Math.max(0,i);break;case 1:i=(r-c)/(uG(uG(Y9(n.r,t),21),87).gc()-1),d+=e.Math.max(0,i)}for(w=uG(uG(Y9(n.r,t),21),87).Kc();w.Ob();)(b=uG(w.Pb(),117)).e.a=(f=b.b).pf((XYn(),uDt))?f.ag()==(KQn(),_Rt)?-f.Mf().a-uM(pK(f.of(uDt))):h+uM(pK(f.of(uDt))):f.ag()==(KQn(),_Rt)?-f.Mf().a:h,b.e.b=a+b.d.d,a+=b.d.d+b.b.Mf().b+b.d.a+d}}function xQn(n,t){var e,i,r,c,a;for(t.Ug("Processor determine the coords for each level",1),i=new Zm,a=Fkn(n.b,0);a.b!=a.d.c;){for(r=uG(I6(a),40);uG(oIn(r,(QGn(),ACt)),17).a>i.c.length-1;)kD(i,new WO(B3n,G9n));e=uG(oIn(r,ACt),17).a,hN(uG(oIn(n,cCt),88))?(r.e.a<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a),r.e.a+r.f.a>uM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a+r.f.a)):(r.e.b<uM(pK((u3(e,i.c.length),uG(i.c[e],42)).a))&&uw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b),r.e.b+r.f.b>uM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b+r.f.b))}for(c=Fkn(n.b,0);c.b!=c.d.c;)r=uG(I6(c),40),e=uG(oIn(r,(QGn(),ACt)),17).a,kfn(r,(OQn(),DPt),pK((u3(e,i.c.length),uG(i.c[e],42)).a)),kfn(r,$Pt,pK((u3(e,i.c.length),uG(i.c[e],42)).b));t.Vg()}function RQn(n){var t,i,r,c,a,o,u,s,f,l,b,w,d,g,p;for(n.o=uM(pK(oIn(n.i,(jYn(),ETt)))),n.f=uM(pK(oIn(n.i,vTt))),n.j=n.i.b.c.length,u=n.j-1,w=0,n.k=0,n.n=0,n.b=n7(Inn(dot,zZn,17,n.j,0,1)),n.c=n7(Inn(fot,zZn,345,n.j,7,1)),o=new Ww(n.i.b);o.a<o.c.c.length;){for((c=uG(N3(o),30)).p=u,b=new Ww(c.a);b.a<b.c.c.length;)(l=uG(N3(b),10)).p=w,++w;--u}for(n.g=Inn(YHt,W1n,28,w,15,1),n.d=Jq(YHt,[zZn,W1n],[53,28],15,[w,3],2),n.p=new Zm,n.q=new Zm,t=0,n.e=0,a=new Ww(n.i.b);a.a<a.c.c.length;){for(u=(c=uG(N3(a),30)).p,r=0,p=0,s=c.a.c.length,f=0,b=new Ww(c.a);b.a<b.c.c.length;)w=(l=uG(N3(b),10)).p,n.g[w]=l.c.p,f+=l.o.b+n.o,i=x5(new Fz(ix(qgn(l).a.Kc(),new h))),g=x5(new Fz(ix(Xgn(l).a.Kc(),new h))),n.d[w][0]=g-i,n.d[w][1]=i,n.d[w][2]=g,r+=i,p+=g,i>0&&kD(n.q,l),kD(n.p,l);d=s+(t-=r),f+=t*n.f,Y8(n.b,u,xwn(d)),Y8(n.c,u,f),n.k=e.Math.max(n.k,d),n.n=e.Math.max(n.n,f),n.e+=t,t+=p}}function KQn(){var n;KQn=E,FRt=new RO(Y2n,0),yRt=new RO(o3n,1),kRt=new RO(u3n,2),KRt=new RO(s3n,3),_Rt=new RO(h3n,4),hZ(),SRt=new nT(new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),PRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[]))),MRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[]))),DRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[]))),RRt=Nwn(WX(_Rt,Uhn(cT(YRt,1),z4n,64,0,[]))),LRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ERt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),$Rt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),CRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt]))),xRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),TRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ARt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,_Rt]))),jRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),NRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),IRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt]))),ORt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt])))}function FQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(t.Ug(j6n,1),w=new Zm,k=new Zm,s=new Ww(n.b);s.a<s.c.c.length;)for(g=-1,l=0,b=(f=D4((u=uG(N3(s),30)).a)).length;l<b;++l)if(++g,(h=f[l]).k==(zIn(),dbt)&&sN(uG(oIn(h,(jYn(),JMt)),101))){for(L_(uG(oIn(h,(jYn(),JMt)),101))||NKn(h),kfn(h,(GYn(),zpt),h),w.c.length=0,k.c.length=0,e=new Zm,Fon(m=new lS,yOn(h,(KQn(),yRt))),zJn(n,m,w,k,e),o=g,y=h,c=new Ww(w);c.a<c.c.c.length;)$jn(i=uG(N3(c),10),o,u),++g,kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(i,Vpt),15).Fc(y);for(BY(m),p=yOn(h,KRt).Kc();p.Ob();)s8(m,uG(p.Pb(),12),m.a,m.a.a);for(zJn(n,m,k,null,e),v=h,r=new Ww(k);r.a<r.c.c.length;)$jn(i=uG(N3(r),10),++g,u),kfn(i,zpt,h),a=uG(zq(i.j,0),12),d=uG(oIn(a,rmt),12),oM(gK(oIn(d,wyt)))||uG(oIn(v,Vpt),15).Fc(i);0==e.c.length||kfn(h,jpt,e)}t.Vg()}function _Qn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(0!=t.b){for(l=new lS,a=null,b=null,i=t0(e.Math.floor(e.Math.log(t.b)*e.Math.LOG10E)+1),o=0,m=Fkn(t,0);m.b!=m.d.c;)for(g=uG(I6(m),40),xA(b)!==xA(oIn(g,(OQn(),OPt)))&&(b=mK(oIn(g,OPt)),o=0),a=null!=b?b+W3(o++,i):W3(o++,i),kfn(g,OPt,a),d=new Tp(Fkn(new Mp(g).a.d,0));Jj(d.a);)s8(l,w=uG(I6(d.a),65).c,l.c.b,l.c),kfn(w,OPt,a);for(f=new Ym,c=0;c<a.length-i;c++)for(p=Fkn(t,0);p.b!=p.d.c;)r2(f,u=r1(mK(oIn(g=uG(I6(p),40),(OQn(),OPt))),0,c+1),xwn(null!=(null==u?DA(FX(f.f,null)):_P(f.i,u))?uG(null==u?DA(FX(f.f,null)):_P(f.i,u),17).a+1:1));for(h=new bsn(new Nw(f).a);h.b;)s=von(h),r=xwn(null!=cQ(n.a,s.ld())?uG(cQ(n.a,s.ld()),17).a:0),r2(n.a,mK(s.ld()),xwn(uG(s.md(),17).a+r.a)),(!(r=uG(cQ(n.b,s.ld()),17))||r.a<uG(s.md(),17).a)&&r2(n.b,mK(s.ld()),uG(s.md(),17));_Qn(n,l)}}function BQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(e=null,o=null,(r=uG(oIn(n.b,(jYn(),Yyt)),349))==(Sln(),cEt)&&(e=new Zm,o=new Zm),a=new Ww(n.d);a.a<a.c.c.length;)if((c=uG(N3(a),105)).i)switch(c.e.g){case 0:t=uG(X5(new fS(c.b)),64),r==cEt&&t==(KQn(),yRt)?mv(e.c,c):r==cEt&&t==(KQn(),KRt)?mv(o.c,c):yTn(c,t);break;case 1:u=c.a.d.j,s=c.c.d.j,u==(KQn(),yRt)?hV(c,yRt,(qhn(),udt),c.a):s==yRt?hV(c,yRt,(qhn(),sdt),c.c):u==KRt?hV(c,KRt,(qhn(),sdt),c.a):s==KRt&&hV(c,KRt,(qhn(),udt),c.c);break;case 2:case 3:$x(i=c.b,(KQn(),yRt))?$x(i,KRt)?$x(i,_Rt)?$x(i,kRt)||hV(c,yRt,(qhn(),sdt),c.c):hV(c,yRt,(qhn(),udt),c.a):hV(c,yRt,(qhn(),odt),null):hV(c,KRt,(qhn(),odt),null);break;case 4:h=c.a.d.j,f=c.a.d.j,h==(KQn(),yRt)||f==yRt?hV(c,KRt,(qhn(),odt),null):hV(c,yRt,(qhn(),odt),null)}e&&(0==e.c.length||fqn(e,(KQn(),yRt)),0==o.c.length||fqn(o,(KQn(),KRt)))}function HQn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(e.Ug("Breadth first model order layering",1),n.a=t,p=new Zm,g=new Ww(n.a.a);g.a<g.c.c.length;)(w=uG(N3(g),10)).k==(zIn(),dbt)&&mv(p.c,w);for(hZ(),f$(p,new jc),u=!0,r=new bQ(n.a),i=null,kD(n.a.b,r),d=new Ww(p);d.a<d.c.c.length;)if(w=uG(N3(d),10),u)a2(w,r),u=!1;else{for(o=new Fz(ix(qgn(w).a.Kc(),new h));hDn(o);)((c=uG(N9(o),18)).c.i.k==(zIn(),dbt)&&c.c.i.c==r||c.c.i.k==bbt&&uG(N9(new Fz(ix(qgn(c.c.i).a.Kc(),new h))),18).c.i.c==r)&&(i=new bQ(n.a),kD(n.a.b,i),r=new bQ(n.a),kD(n.a.b,r));for(a=new Fz(ix(qgn(w).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.k==(zIn(),bbt)&&!c.c.i.c&&a2(c.c.i,i);a2(w,r)}for(n.a.a.c.length=0,m=new Zm,l=new Ww(n.a.b);l.a<l.c.c.length;)0==(s=uG(N3(l),30)).a.c.length&&mv(m.c,s);for(dgn(n.a.b,m),b=0,f=new Ww(n.a.b);f.a<f.c.c.length;)(s=uG(N3(f),30)).p=b,++b;e.Vg()}function UQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;for(i=uG(oIn(n,(GYn(),rmt)),27),b=uG(oIn(n,(jYn(),xyt)),17).a,c=uG(oIn(n,pMt),17).a,Myn(i,xyt,xwn(b)),Myn(i,pMt,xwn(c)),ycn(i,n.n.a+t.a),Mcn(i,n.n.b+t.b),(0!=uG(zDn(i,DMt),181).gc()||n.e||xA(oIn(HQ(n),$Mt))===xA((pyn(),Mjt))&&lN((Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))))&&(kcn(i,n.o.a),vcn(i,n.o.b)),f=new Ww(n.j);f.a<f.c.c.length;)F$(w=oIn(s=uG(N3(f),12),rmt),193)&&(kN(r=uG(w,123),s.n.a,s.n.b),Myn(r,eTt,s.j));for(l=0!=uG(oIn(n,PMt),181).gc(),u=new Ww(n.b);u.a<u.c.c.length;)a=uG(N3(u),72),(l||0!=uG(oIn(a,PMt),181).gc())&&(vN(e=uG(oIn(a,rmt),135),a.o.a,a.o.b),kN(e,a.n.a,a.n.b));if(!cV(uG(oIn(n,nTt),21)))for(h=new Ww(n.j);h.a<h.c.c.length;)for(o=new Ww((s=uG(N3(h),12)).f);o.a<o.c.c.length;)a=uG(N3(o),72),kcn(e=uG(oIn(a,rmt),135),a.o.a),vcn(e,a.o.b),kN(e,a.n.a,a.n.b)}function GQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(t.Ug("Calculate Graph Size",1),t.dh(n,l7n),l=B3n,b=B3n,h=b7n,f=b7n,g=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));g.e!=g.i.gc();)v=(w=uG(Zkn(g),27)).i,k=w.j,S=w.g,u=w.f,s=uG(zDn(w,(XYn(),$$t)),140),l=e.Math.min(l,v-s.b),b=e.Math.min(b,k-s.d),h=e.Math.max(h,v+S+s.c),f=e.Math.max(f,k+u+s.a);for(p=new MO(l-(m=uG(zDn(n,(XYn(),W$t)),107)).b,b-m.d),E=h-l+(m.b+m.c),o=f-b+(m.d+m.a),oM(gK(zDn(n,(jOn(),OIt))))&&(y=uG(zDn(n,(SK(),zCt)),27),M=uG(zDn(y,$$t),140),T=y.i+y.g/2+(M.b+M.c)/2-p.a,a=o-(j=y.j+y.f/2+(M.d+M.a)/2-p.b),(c=E-T)<E/2?(E+=i=c-T,p.a-=i):E+=i=T-c,a<o/2?(o+=r=a-j,p.b-=r):o+=r=j-a),d=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));d.e!=d.i.gc();)ycn(w=uG(Zkn(d),27),w.i-p.a),Mcn(w,w.j-p.b);oM(gK(zDn(n,H$t)))||(kcn(n,E),vcn(n,o)),Myn(n,h$t,E-(m.b+m.c)),Myn(n,s$t,o-(m.d+m.a)),t.dh(n,w7n)}function qQn(n,t,e){var i,r,c,a,o,u,s,h,f,l;if(n.e.a.$b(),n.f.a.$b(),n.c.c.length=0,n.i.c.length=0,n.g.a.$b(),t)for(a=new Ww(t.a);a.a<a.c.c.length;)for(h=yOn(c=uG(N3(a),10),(KQn(),kRt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.e,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i));if(e)for(a=new Ww(e.a);a.a<a.c.c.length;){for(u=new Ww((c=uG(N3(a),10)).j);u.a<u.c.c.length;)for(r=new Ww(uG(N3(u),12).g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))&&FV(n.g,i);for(h=yOn(c,(KQn(),_Rt)).Kc();h.Ob();)for(s=uG(h.Pb(),12),FV(n.f,s),r=new Ww(s.g);r.a<r.c.c.length;)v9(i=uG(N3(r),18))||(kD(n.c,i),Ukn(n,i),((o=i.c.i.k)==(zIn(),dbt)||o==gbt||o==lbt||o==fbt)&&kD(n.j,i),(f=(l=i.d).i.c)==e?FV(n.f,l):f==t?FV(n.e,l):men(n.c,i))}}function XQn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;for(i.Ug("Polyline edge routing",1),m=uM(pK(oIn(t,(jYn(),Qyt)))),d=uM(pK(oIn(t,STt))),c=uM(pK(oIn(t,gTt))),r=e.Math.min(1,c/d),y=0,s=0,0!=t.b.c.length&&(y=.4*r*(M=Yxn(uG(zq(t.b,0),30)))),u=new N4(t.b,0);u.b<u.d.gc();){for(MK(u.b<u.d.gc()),(a=UA(o=uG(u.d.Xb(u.c=u.b++),30),LSt))&&y>0&&(y-=d),Vzn(o,y),l=0,w=new Ww(o.a);w.a<w.c.c.length;){for(f=0,p=new Fz(ix(Xgn(b=uG(N3(w),10)).a.Kc(),new h));hDn(p);)v=n3((g=uG(N9(p),18)).c).b,k=n3(g.d).b,o!=g.d.i.c||v9(g)||(_Nn(g,y,.4*r*e.Math.abs(v-k)),g.c.j==(KQn(),_Rt)&&(v=0,k=0)),f=e.Math.max(f,e.Math.abs(k-v));switch(b.k.g){case 0:case 4:case 1:case 3:case 5:aVn(n,b,y,m)}l=e.Math.max(l,f)}u.b<u.d.gc()&&(M=Yxn((MK(u.b<u.d.gc()),uG(u.d.Xb(u.c=u.b++),30))),l=e.Math.max(l,M),MK(u.b>0),u.a.Xb(u.c=--u.b)),s=.4*r*l,!a&&u.b<u.d.gc()&&(s+=d),y+=o.c.a+s}n.a.a.$b(),t.f.a=y,i.Vg()}function zQn(n){var t,e,i,r,c;switch(ZZ(n,Uet),(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i+(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){case 0:throw hv(new vM("The edge must have at least one source or target."));case 1:return 0==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i?R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))):R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))}if(1==(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b).i&&1==(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c).i){if(r=lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),c=lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),R0(r)==R0(c))return R0(r);if(r==R0(c))return r;if(c==R0(r))return c}for(t=lCn(uG(N9(i=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c)])))),84));hDn(i);)if((e=lCn(uG(N9(i),84)))!=t&&!Ern(e,t))if(R0(e)==R0(t))t=R0(e);else if(!(t=xxn(t,e)))return null;return t}function VQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if((f=t.length)>0&&(s3(0,t.length),64!=(o=t.charCodeAt(0)))){if(37==o&&(u=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(s3(h+1,t.length),u=46==t.charCodeAt(h+1))))){if(Knn(1,h,t.length),m=m_("%",a=t.substr(1,h-1))?null:eJn(a),i=0,u)try{i=mUn((s3(h+2,t.length+1),t.substr(h+2)),j1n,vZn)}catch(v){throw F$(v=Ehn(v),130)?hv(new Pen(v)):hv(v)}for(d=kon(n.Gh());d.Ob();)if(F$(b=Ksn(d),519)&&(p=(r=uG(b,598)).d,(null==m?null==p:m_(m,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:(Knn(0,s,t.length),t.substr(0,s)),e=0,-1!=s)try{e=mUn((s3(s+1,t.length+1),t.substr(s+1)),j1n,vZn)}catch(v){if(!F$(v=Ehn(v),130))throw hv(v);l=t}for(l=m_("%",l)?null:eJn(l),w=kon(n.Gh());w.Ob();)if(F$(b=Ksn(w),197)&&(g=(c=uG(b,197)).xe(),(null==l?null==g:m_(l,g))&&0==e--))return c;return null}return jWn(n,t)}function WQn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(s=new Ym,o=new K1,i=new Ww(n.a.a.b);i.a<i.c.c.length;)if(u=z4(t=uG(N3(i),60)))VAn(s.f,u,t);else if(m=Q6(t))for(r=new Ww(m.k);r.a<r.c.c.length;)UNn(o,uG(N3(r),18),t);for(e=new Ww(n.a.a.b);e.a<e.c.c.length;)if(u=z4(t=uG(N3(e),60)))for(a=new Fz(ix(Xgn(u).a.Kc(),new h));hDn(a);)if(!v9(c=uG(N9(a),18))&&(w=c.c,p=c.d,!(KQn(),LRt).Hc(c.c.j)||!LRt.Hc(c.d.j))){if(d=uG(cQ(s,c.d.i),60),RKn(xS(DS(RS($S(new uk,0),100),n.c[t.a.d]),n.c[d.a.d])),w.j==_Rt&&Yz((Lun(),w)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c<t.d.c){if((b=n.c[f.a.d])==(g=n.c[t.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}if(p.j==kRt&&Zz((Lun(),p)))for(l=uG(Y9(o,c),21).Kc();l.Ob();)if((f=uG(l.Pb(),60)).d.c>t.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}}}function QQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(b=uG(uG(Y9(n.r,t),21),87),t!=(KQn(),kRt)&&t!=_Rt){for(a=t==yRt?(ehn(),wht):(ehn(),pht),y=t==yRt?(Yen(),Fst):(Yen(),Rst),c=(r=(i=uG(AJ(n.b,t),127)).i).c+Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.b,n.C.b,n.k])),m=r.c+r.b-Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.c,n.C.c,n.k])),o=TT(BB(a),n.t),v=t==yRt?T0n:M0n,l=b.Kc();l.Ob();)!(h=uG(l.Pb(),117)).c||h.c.d.c.length<=0||(p=h.b.Mf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(u=w.n,w.e.b+u.d+u.a),ZZ(y,W2n),w.f=y,etn(w,(Ktn(),Lst)),d.c=g.a-(d.b-p.a)/2,M=e.Math.min(c,g.a),T=e.Math.max(m,g.a+p.a),d.c<M?d.c=M:d.c+d.b>T&&(d.c=T-d.b),kD(o.d,new ZX(d,Hdn(o,d))),v=t==yRt?e.Math.max(v,g.b+h.b.Mf().b):e.Math.min(v,g.b));for(v+=t==yRt?n.t:-n.t,(k=cmn((o.e=v,o)))>0&&(uG(AJ(n.b,t),127).a.b=k),f=b.Kc();f.Ob();)!(h=uG(f.Pb(),117)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else MQn(n,t)}function JQn(n){var t,e,i,r,c,a,o,u,s,f;for(t=new Ym,a=new DD(n);a.e!=a.i.gc();){for(c=uG(Zkn(a),27),e=new ek,vJ(cft,c,e),f=new at,i=uG(l8(new fX(null,new LW(new Fz(ix(tRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)])))),85),Ycn(e,uG(i.xc((qx(),!0)),16),new ot),r=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ut),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();r.Ob();)(s=wIn(uG(r.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o));for(i=uG(l8(new fX(null,new LW(new Fz(ix(eRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut])))),85),Ycn(e,uG(i.xc(!0),16),new st),u=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ht),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();u.Ob();)(s=dIn(uG(u.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o))}}function YQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(pXn(),(u=dwn(n,0)<0)&&(n=Men(n)),0==dwn(n,0))switch(t){case 0:return"0";case 1:return N0n;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 WM).a+=t<0?"0E+":"0E",b.a+=t==j1n?"2147483648":""+-t,b.a}f=Inn(JHt,N1n,28,1+(h=18),15,1),e=h,d=n;do{s=d,d=bSn(d,10),f[--e]=pz(Lgn(48,$gn(s,Ngn(d,10))))&D1n}while(0!=dwn(d,0));if(r=$gn($gn($gn(h,e),t),1),0==t)return u&&(f[--e]=45),mvn(f,e,h-e);if(t>0&&dwn(r,-6)>=0){if(dwn(r,0)>=0){for(c=e+pz(r),o=h-1;o>=c;o--)f[o+1]=f[o];return f[++c]=46,u&&(f[--e]=45),mvn(f,e,h-e+1)}for(a=2;$P(a,Lgn(Men(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,u&&(f[--e]=45),mvn(f,e,h-e)}return w=e+1,i=h,l=new QM,u&&(l.a+="-"),i-w>=1?(jQ(l,f[e]),l.a+=".",l.a+=mvn(f,e+1,h-e-1)):l.a+=mvn(f,e,h-e),l.a+="E",dwn(r,0)>0&&(l.a+="+"),l.a+=""+oV(r),l.a}function ZQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(p=new MO(n.g,n.f),(g=xAn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),T=g.a/p.a,f=g.b/p.b,y=g.a-p.a,s=g.b-p.b,r)for(o=R0(n)?uG(zDn(R0(n),(XYn(),d$t)),88):uG(zDn(n,(XYn(),d$t)),88),u=xA(zDn(n,(XYn(),sDt)))===xA(($Pn(),cRt)),v=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));v.e!=v.i.gc();)switch(m=uG(Zkn(v),123),(k=uG(zDn(m,gDt),64))==(KQn(),FRt)&&(k=RGn(m,o),Myn(m,gDt,k)),k.g){case 1:u||ycn(m,m.i*T);break;case 2:ycn(m,m.i+y),u||Mcn(m,m.j*f);break;case 3:u||ycn(m,m.i*T),Mcn(m,m.j+s);break;case 4:u||Mcn(m,m.j*f)}if(vN(n,g.a,g.b),c)for(b=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=uG(Zkn(b),135)).i+l.g/2,d=l.j+l.f/2,(M=w/p.a)+(h=d/p.b)>=1&&(M-h>0&&d>=0?(ycn(l,l.i+y),Mcn(l,l.j+s*h)):M-h<0&&w>=0&&(ycn(l,l.i+y*M),Mcn(l,l.j+s)));return Myn(n,(XYn(),_$t),(Qmn(),new nB(a=uG(Mj(sKt),9),uG(MF(a,a.length),9),0))),new MO(T,f)}function nJn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,x7n),"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 Oo),x7n))),U4(n,x7n,b9n,Jkn(BIt)),U4(n,x7n,o4n,Jkn(VIt)),U4(n,x7n,p4n,Jkn($It)),U4(n,x7n,x4n,Jkn(DIt)),U4(n,x7n,g4n,Jkn(xIt)),U4(n,x7n,m4n,Jkn(NIt)),U4(n,x7n,w4n,Jkn(RIt)),U4(n,x7n,v4n,Jkn(_It)),U4(n,x7n,P7n,Jkn(AIt)),U4(n,x7n,S7n,Jkn(LIt)),U4(n,x7n,E7n,Jkn(UIt)),U4(n,x7n,A7n,Jkn(XIt)),U4(n,x7n,L7n,Jkn(GIt)),U4(n,x7n,N7n,Jkn(qIt)),U4(n,x7n,O7n,Jkn(KIt)),U4(n,x7n,T7n,Jkn(FIt)),U4(n,x7n,j7n,Jkn(HIt)),U4(n,x7n,C7n,Jkn(zIt)),U4(n,x7n,I7n,Jkn(WIt)),U4(n,x7n,M7n,Jkn(OIt))}function tJn(n){var t,e,i,r,c,a,o,u,s,h,f;if(null==n)throw hv(new ZM(IZn));if(s=n,u=!1,(c=n.length)>0&&(s3(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(s3(1,n.length+1),n=n.substr(1),--c,u=45==t)),0==c)throw hv(new ZM(y0n+s+'"'));for(;n.length>0&&(s3(0,n.length),48==n.charCodeAt(0));)s3(1,n.length+1),n=n.substr(1),--c;if(c>(lGn(),vot)[10])throw hv(new ZM(y0n+s+'"'));for(r=0;r<c;r++)if(-1==Cvn((s3(r,n.length),n.charCodeAt(r))))throw hv(new ZM(y0n+s+'"'));for(f=0,a=pot[10],h=mot[10],o=Men(kot[10]),e=!0,(i=c%a)>0&&(f=-parseInt((Knn(0,i,n.length),n.substr(0,i)),10),s3(i,n.length+1),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt((Knn(0,a,n.length),n.substr(0,a)),10),s3(a,n.length+1),n=n.substr(a),c-=a,e)e=!1;else{if(dwn(f,o)<0)throw hv(new ZM(y0n+s+'"'));f=Ngn(f,h)}f=$gn(f,i)}if(dwn(f,0)>0)throw hv(new ZM(y0n+s+'"'));if(!u&&dwn(f=Men(f),0)<0)throw hv(new ZM(y0n+s+'"'));return f}function eJn(n){var t,e,i,r,c,a,o,u;if(YXn(),null==n)return null;if((r=xL(n,$Cn(37)))<0)return n;for(u=new lx((Knn(0,r,n.length),n.substr(0,r))),t=Inn(tUt,ret,28,4,15,1),o=0,i=0,a=n.length;r<a;r++)if(s3(r,n.length),37==n.charCodeAt(r)&&n.length>r+2&&mfn((s3(r+1,n.length),n.charCodeAt(r+1)),QFt,JFt)&&mfn((s3(r+2,n.length),n.charCodeAt(r+2)),QFt,JFt))if(e=AG((s3(r+1,n.length),n.charCodeAt(r+1)),(s3(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[o++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[o++]=e<<24>>24,i=2):224==(240&e)?(t[o++]=e<<24>>24,i=3):240==(248&e)&&(t[o++]=e<<24>>24,i=4)),i>0){if(o==i){switch(o){case 2:jQ(u,((31&t[0])<<6|63&t[1])&D1n);break;case 3:jQ(u,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&D1n)}o=0,i=0}}else{for(c=0;c<o;++c)jQ(u,t[c]&D1n);o=0,u.a+=String.fromCharCode(e)}else{for(c=0;c<o;++c)jQ(u,t[c]&D1n);o=0,jQ(u,(s3(r,n.length),n.charCodeAt(r)))}return u.a}function iJn(n){var t,i,r,c,a,o,u,s,h,f,l;if(f=R0(lCn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)))==R0(lCn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))),o=new sj,(t=uG(zDn(n,(Iln(),Mxt)),75))&&t.b>=2){if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),i=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(l=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));l.e!=l.i.gc();)$Sn(l);sqn(t,uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166))}if(f)for(r=new DD((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new DD((!(i=uG(Zkn(r),166)).a&&(i.a=new MD(eFt,i,5)),i.a));s.e!=s.i.gc();)u=uG(Zkn(s),377),o.a=e.Math.max(o.a,u.a),o.b=e.Math.max(o.b,u.b);for(a=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));a.e!=a.i.gc();)c=uG(Zkn(a),135),(h=uG(zDn(c,Cxt),8))&&kN(c,h.a,h.b),f&&(o.a=e.Math.max(o.a,c.i+c.g),o.b=e.Math.max(o.b,c.j+c.f));return o}function rJn(n,t,e,i,r){var c,a,o;if(win(n,t),a=t[0],c=VJ(e.c,0),o=-1,Jfn(e))if(i>0){if(a+i>n.length)return!1;o=RNn((Knn(0,a+i,n.length),n.substr(0,a+i)),t)}else o=RNn(n,t);switch(c){case 71:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n]),t),r.e=o,!0;case 77:return c_n(n,t,r,o,a);case 76:return a_n(n,t,r,o,a);case 69:return XAn(n,t,a,r);case 99:return zAn(n,t,a,r);case 97:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,["AM","PM"]),t),r.b=o,!0;case 121:return o_n(n,t,a,o,e,r);case 100:return!(o<=0||(r.c=o,0));case 83:return!(o<0)&&tmn(o,a,t[0],r);case 104:12==o&&(o=0);case 75:case 72:return!(o<0||(r.f=o,r.g=!1,0));case 107:return!(o<0||(r.f=o,r.g=!0,0));case 109:return!(o<0||(r.j=o,0));case 115:return!(o<0||(r.n=o,0));case 90:if(a<n.length&&(s3(a,n.length),90==n.charCodeAt(a)))return++t[0],r.o=0,!0;case 122:case 118:return bCn(n,a,t,r);default:return!1}}function cJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(m=t.c.length,c=new VHn(n.a,i,null,null),T=Inn(eUt,I0n,28,m,15,1),w=Inn(eUt,I0n,28,m,15,1),b=Inn(eUt,I0n,28,m,15,1),d=0,u=0;u<m;u++)w[u]=vZn,b[u]=j1n;for(s=0;s<m;s++)for(u3(s,t.c.length),r=uG(t.c[s],185),T[s]=uxn(r),T[d]>T[s]&&(d=s),f=new Ww(n.a.b);f.a<f.c.c.length;)for(p=new Ww(uG(N3(f),30).a);p.a<p.c.c.length;)g=uG(N3(p),10),y=uM(r.p[g.p])+uM(r.d[g.p]),w[s]=e.Math.min(w[s],y),b[s]=e.Math.max(b[s],y+g.o.b);for(M=Inn(eUt,I0n,28,m,15,1),h=0;h<m;h++)(u3(h,t.c.length),uG(t.c[h],185)).o==(w0(),wSt)?M[h]=w[d]-w[h]:M[h]=b[d]-b[h];for(a=Inn(eUt,I0n,28,m,15,1),l=new Ww(n.a.b);l.a<l.c.c.length;)for(k=new Ww(uG(N3(l),30).a);k.a<k.c.c.length;){for(v=uG(N3(k),10),o=0;o<m;o++)a[o]=uM((u3(o,t.c.length),uG(t.c[o],185)).p[v.p])+uM((u3(o,t.c.length),uG(t.c[o],185)).d[v.p])+M[o];vv(a,qrn(P.prototype.Me,P,[])),c.p[v.p]=(a[1]+a[2])/2,c.d[v.p]=0}return c}function aJn(n,t,e){var i,r,c,a,o;switch(i=t.i,c=n.i.o,r=n.i.d,o=n.n,a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[o,n.a])),n.j.g){case 1:eF(t,(Yen(),Rst)),i.d=-r.d-e-i.a,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),291)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 2:etn(t,(Ktn(),Ast)),i.c=c.a+r.c+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),291)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e);break;case 3:eF(t,(Yen(),Fst)),i.d=c.b+r.a+e,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),291)==(Ajn(),$xt)?(etn(t,(Ktn(),Lst)),i.c=a.a-uM(pK(oIn(n,emt)))-e-i.b):(etn(t,(Ktn(),Ast)),i.c=a.a+uM(pK(oIn(n,emt)))+e);break;case 4:etn(t,(Ktn(),Lst)),i.c=-r.b-e-i.b,uG(uG(zq(t.d,0),187).of((GYn(),Qpt)),291)==(Ajn(),$xt)?(eF(t,(Yen(),Rst)),i.d=a.b-uM(pK(oIn(n,emt)))-e-i.a):(eF(t,(Yen(),Fst)),i.d=a.b+uM(pK(oIn(n,emt)))+e)}}function oJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;for(i.Ug($7n,1),!t.a&&(t.a=new fV(bFt,t,10,11)),r=uM(pK(zDn(t,(S_n(),VOt)))),f=uM(pK(zDn(t,bAt))),b=uG(zDn(t,hAt),107),a=kYn(w=new vO(r,f),t,b),Irn(t,w),u=uG(zDn(t,oAt),17).a;u>1;){if(c=nKn(t),l=a.g,d=uG(zDn(t,hAt),107),g=uM(pK(zDn(t,VOt))),(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),jOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))<g?Myn(c,(lBn(),POt),uM(pK(zDn(t,POt)))+uM(pK(zDn(t,jOt)))):(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),TOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))>g&&Myn(c,(lBn(),POt),e.Math.max(uM(pK(zDn(t,EOt))),uM(pK(zDn(c,POt)))-uM(pK(zDn(t,TOt))))),(h=(s=kYn(w=new vO(r,f),c,b)).g)>=l&&h==h){for(o=0;o<(!c.a&&(c.a=new fV(bFt,c,10,11)),c.a).i;o++)mNn(n,uG(zrn((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a),o),27),uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),o),27));Irn(t,w),x1(a,s.c),D1(a,s.b)}--u}Myn(t,(lBn(),mOt),a.b),Myn(t,vOt,a.c),i.Vg()}function uJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug("Interactive node layering",1),i=new Zm,b=new Ww(n.a);b.a<b.c.c.length;){for(u=(s=(f=uG(N3(b),10)).n.a)+f.o.a,u=e.Math.max(s+1,u),v=new N4(i,0),r=null;v.b<v.d.gc();){if(MK(v.b<v.d.gc()),(p=uG(v.d.Xb(v.c=v.b++),578)).c>=u){MK(v.b>0),v.a.Xb(v.c=--v.b);break}p.a>s&&(r?(Ohn(r.b,p.b),r.a=e.Math.max(r.a,p.a),LQ(v)):(kD(p.b,f),p.c=e.Math.min(p.c,s),p.a=e.Math.max(p.a,u),r=p))}r||((r=new Mk).c=s,r.a=u,pF(v,r),kD(r.b,f))}for(o=n.b,h=0,m=new Ww(i);m.a<m.c.c.length;)for(p=uG(N3(m),578),(c=new bQ(n)).p=h++,mv(o.c,c),w=new Ww(p.b);w.a<w.c.c.length;)a2(f=uG(N3(w),10),c),f.p=0;for(l=new Ww(n.a);l.a<l.c.c.length;)if(0==(f=uG(N3(l),10)).p)for(g=sBn(f,n);0!=g.a.gc();)d=uG(g.a.ec().Kc().Pb(),10),g.a.Bc(d),Qon(g,sBn(d,n));for(a=new N4(o,0);a.b<a.d.gc();)0==(MK(a.b<a.d.gc()),uG(a.d.Xb(a.c=a.b++),30)).a.c.length&&LQ(a);n.a.c.length=0,t.Vg()}function sJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O;for(w=0,S=0,s=new Ww(n);s.a<s.c.c.length;)IWn(u=uG(N3(s),27)),w=e.Math.max(w,u.g),S+=u.g*u.f;for(E=Ojn(n,S/n.c.length),S+=n.c.length*E,w=e.Math.max(w,e.Math.sqrt(S*o))+i.b,I=i.b,O=i.d,b=0,f=i.b+i.c,aq(j=new lS,xwn(0)),M=new lS,h=new N4(n,0);h.b<h.d.gc();)MK(h.b<h.d.gc()),C=(u=uG(h.d.Xb(h.c=h.b++),27)).g,l=u.f,I+C>w&&(a&&(cL(M,b),cL(j,xwn(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),ycn(u,I),Mcn(u,O),f=e.Math.max(f,I+C+i.c),b=e.Math.max(b,l),I+=C+t;if(f=e.Math.max(f,r),(P=O+b+i.a)<c&&(b+=c-P,P=c),a)for(I=i.b,h=new N4(n,0),cL(j,xwn(n.c.length)),p=uG(I6(T=Fkn(j,0)),17).a,cL(M,b),y=Fkn(M,0),k=0;h.b<h.d.gc();)h.b==p&&(I=i.b,k=uM(pK(I6(y))),p=uG(I6(T),17).a),MK(h.b<h.d.gc()),m=(u=uG(h.d.Xb(h.c=h.b++),27)).f,vcn(u,k),d=k,h.b==p&&(g=f-I-i.c,v=u.g,kcn(u,g),tLn(u,new MO(g,d),new MO(v,m))),I+=u.g+t;return new MO(f,P)}function hJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(t.Ug("Compound graph postprocessor",1),i=oM(gK(oIn(n,(jYn(),xTt)))),u=uG(oIn(n,(GYn(),Apt)),229),f=new ek,m=u.ec().Kc();m.Ob();){for(p=uG(m.Pb(),18),o=new Z_(u.cc(p)),hZ(),f$(o,new Gd(n)),M=vun((u3(0,o.c.length),uG(o.c[0],249))),j=kun(uG(zq(o,o.c.length-1),249)),k=M.i,v=jsn(j.i,k)?k.e:HQ(k),l=iyn(p,o),BY(p.a),b=null,a=new Ww(o);a.a<a.c.c.length;)c=uG(N3(a),249),pAn(g=new sj,c.a,v),w=c.b,rbn(r=new Uk,0,w.a),Xun(r,g),y=new eN(n3(w.c)),T=new eN(n3(w.d)),JF(y,g),JF(T,g),b&&(0==r.b?d=T:(MK(0!=r.b),d=uG(r.a.a.c,8)),E=e.Math.abs(b.a-d.a)>t4n,S=e.Math.abs(b.b-d.b)>t4n,(!i&&E&&S||i&&(E||S))&&aq(p.a,y)),Qon(p.a,r),0==r.b?b=y:(MK(0!=r.b),b=uG(r.c.b.c,8)),hhn(w,l,g),kun(c)==j&&(HQ(j.i)!=c.a&&pAn(g=new sj,HQ(j.i),v),kfn(p,Smt,g)),sOn(w,p,v),f.a.zc(w,f);c2(p,M),u2(p,j)}for(h=f.a.ec().Kc();h.Ob();)c2(s=uG(h.Pb(),18),null),u2(s,null);t.Vg()}function fJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=(r=uG(oIn(n,(QGn(),cCt)),88))==(xdn(),JDt)||r==YDt?QDt:YDt,e=uG(l8(JJ(new fX(null,new h3(n.b,16)),new $a),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),(u=uG(l8(YJ(e.Oc(),new Pp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Gc(uG(l8(YJ(e.Oc(),new Cp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),16)),u.jd(new Ip(h)),l=new Hj(new Op(r)),i=new Ym,o=u.Kc();o.Ob();)a=uG(o.Pb(),240),s=uG(a.a,40),oM(gK(a.c))?(l.a.zc(s,(qx(),tot)),new od(l.a.Zc(s,!1)).a.gc()>0&&vJ(i,s,uG(new od(l.a.Zc(s,!1)).a.Vc(),40)),new od(l.a.ad(s,!0)).a.gc()>1&&vJ(i,wmn(l,s),s)):(new od(l.a.Zc(s,!1)).a.gc()>0&&xA(c=uG(new od(l.a.Zc(s,!1)).a.Vc(),40))===xA(DA(FX(i.f,s)))&&uG(oIn(s,(OQn(),yPt)),15).Fc(c),new od(l.a.ad(s,!0)).a.gc()>1&&(f=wmn(l,s),xA(DA(FX(i.f,f)))===xA(s)&&uG(oIn(f,(OQn(),yPt)),15).Fc(s)),l.a.Bc(s))}function lJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(1==n.gc())return uG(n.Xb(0),235);if(n.gc()<=0)return new d7;for(c=n.Kc();c.Ob();){for(i=uG(c.Pb(),235),d=0,f=vZn,l=vZn,s=j1n,h=j1n,w=new Ww(i.e);w.a<w.c.c.length;)b=uG(N3(w),153),d+=uG(oIn(b,(rGn(),$ft)),17).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);kfn(i,(rGn(),$ft),xwn(d)),kfn(i,(mon(),Vft),new MO(f,l)),kfn(i,zft,new MO(s,h))}for(hZ(),n.jd(new bt),zsn(g=new d7,uG(n.Xb(0),96)),u=0,v=0,a=n.Kc();a.Ob();)i=uG(a.Pb(),235),p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8)),u=e.Math.max(u,p.a),v+=p.a*p.b;for(u=e.Math.max(u,e.Math.sqrt(v)*uM(pK(oIn(g,(rGn(),kft))))),k=0,y=0,o=0,t=m=uM(pK(oIn(g,_ft))),r=n.Kc();r.Ob();)i=uG(r.Pb(),235),k+(p=YF(D$(uG(oIn(i,(mon(),zft)),8)),uG(oIn(i,Vft),8))).a>u&&(k=0,y+=o+m,o=0),tUn(g,i,k,y),t=e.Math.max(t,k+p.a),o=e.Math.max(o,p.b),k+=p.a+m;return g}function bJn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(NGn(),null==n)return null;if((w=hgn(c=_en(n)))%4!=0)return null;if(0==(d=w/4|0))return Inn(tUt,ret,28,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,o=0,u=0,s=0,b=0,l=0,h=0,f=Inn(tUt,ret,28,3*d,15,1);b<d-1;b++){if(!(mE(a=c[h++])&&mE(o=c[h++])&&mE(u=c[h++])&&mE(s=c[h++])))return null;t=dHt[a],e=dHt[o],i=dHt[u],r=dHt[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 mE(a=c[h++])&&mE(o=c[h++])?(t=dHt[a],e=dHt[o],u=c[h++],s=c[h++],-1==dHt[u]||-1==dHt[s]?61==u&&61==s?15&e?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=u&&61==s?3&(i=dHt[u])?null:(qGn(f,0,g=Inn(tUt,ret,28,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=dHt[u],r=dHt[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 wJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug(j6n,1),l=uG(oIn(n,(jYn(),Vyt)),223),i=new Ww(n.b);i.a<i.c.c.length;)for(a=0,o=(c=D4(uG(N3(i),30).a)).length;a<o;++a)if((r=c[a]).k==(zIn(),gbt)){if(l==(_gn(),hxt))for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||ekn(u),0==u.g.c.length||ikn(u);else if(F$(oIn(r,(GYn(),rmt)),18))w=uG(oIn(r,rmt),18),d=uG(yOn(r,(KQn(),_Rt)).Kc().Pb(),12),g=uG(yOn(r,kRt).Kc().Pb(),12),p=uG(oIn(d,rmt),12),c2(w,m=uG(oIn(g,rmt),12)),u2(w,p),(v=new eN(g.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[m.i.n,m.n,m.a])).a,aq(w.a,v),(v=new eN(d.i.n)).a=Gfn(Uhn(cT(PNt,1),zZn,8,0,[p.i.n,p.n,p.a])).a,aq(w.a,v);else{if(r.j.c.length>=2){for(b=!0,e=uG(N3(h=new Ww(r.j)),12),f=null;h.a<h.c.c.length;)if(f=e,e=uG(N3(h),12),!udn(oIn(f,rmt),oIn(e,rmt))){b=!1;break}}else b=!1;for(s=new Ww(r.j);s.a<s.c.c.length;)0==(u=uG(N3(s),12)).e.c.length||YKn(u,b),0==u.g.c.length||ZKn(u,b)}a2(r,null)}t.Vg()}function dJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(o=new Ww(n.a.b);o.a<o.c.c.length;)for(v=new Ww(uG(N3(o),30).a);v.a<v.c.c.length;)m=uG(N3(v),10),t.g[m.p]=m,t.a[m.p]=m,t.d[m.p]=0;for(u=n.a.b,t.c==(b0(),hSt)&&(u=Spn(u)),a=u.Kc();a.Ob();)for(b=-1,l=uG(a.Pb(),30).a,t.o==(w0(),dSt)&&(b=vZn,l=Spn(l)),y=l.Kc();y.Ob();)if(k=uG(y.Pb(),10),f=null,(f=t.c==hSt?uG(zq(n.b.f,k.p),15):uG(zq(n.b.b,k.p),15)).gc()>0)if(r=f.gc(),s=t0(e.Math.floor((r+1)/2))-1,c=t0(e.Math.ceil((r+1)/2))-1,t.o==dSt)for(h=c;h>=s;h--)t.a[k.p]==k&&(d=uG(f.Xb(h),42),w=uG(d.a,10),!cS(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=k,t.g[k.p]=t.g[w.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[k.p]==k&&(p=uG(f.Xb(h),42),g=uG(p.a,10),!cS(i,p.b)&&b<n.b.e[g.p]&&(t.a[g.p]=k,t.g[k.p]=t.g[g.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[g.p]))}function gJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;return k=n.c[(u3(0,t.c.length),uG(t.c[0],18)).p],j=n.c[(u3(1,t.c.length),uG(t.c[1],18)).p],!(k.a.e.e-k.a.a-(k.b.e.e-k.b.a)==0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)==0||!F$(m=k.b.e.f,10)||(p=uG(m,10),M=n.i[p.p],T=p.c?Ten(p.c.a,p,0):-1,a=M0n,T>0&&(c=uG(zq(p.c.a,T-1),10),o=n.i[c.p],E=e.Math.ceil(y$(n.n,c,p)),a=M.a.e-p.d.d-(o.a.e+c.o.b+c.d.a)-E),h=M0n,T<p.c.a.c.length-1&&(s=uG(zq(p.c.a,T+1),10),f=n.i[s.p],E=e.Math.ceil(y$(n.n,s,p)),h=f.a.e-s.d.d-(M.a.e+p.o.b+p.d.a)-E),!(i&&(YN(),oan(I9n),e.Math.abs(a-h)<=I9n||a==h||isNaN(a)&&isNaN(h)))&&(r=yW(k.a),u=-yW(k.b),l=-yW(j.a),v=yW(j.b),g=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)>0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)<0,d=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)<0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)>0,w=k.a.e.e+k.b.a<j.b.e.e+j.a.a,b=k.a.e.e+k.b.a>j.b.e.e+j.a.a,y=0,!g&&!d&&(b?a+l>0?y=l:h-r>0&&(y=r):w&&(a+u>0?y=u:h-v>0&&(y=v))),M.a.e+=y,M.b&&(M.d.e+=y),1)))}function pJn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(r=new gY(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),c=new cN,n.c)for(o=new Ww(t.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+t.Lf().a,c.d=a.Lf().b+t.Lf().b,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);for(h=new Ww(t.Xf());h.a<h.c.c.length;){if(f=(s=uG(N3(h),852)).Lf().a+t.Lf().a,l=s.Lf().b+t.Lf().b,n.e&&(c.c=f,c.d=l,c.b=s.Mf().a,c.a=s.Mf().b,bAn(r,c)),n.d)for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),c.c=a.Lf().a+f,c.d=a.Lf().b+l,c.b=a.Mf().a,c.a=a.Mf().b,bAn(r,c);if(n.b){if(b=new MO(-i,-i),uG(t.of((XYn(),bDt)),181).Hc((eNn(),gRt)))for(o=new Ww(s.Rf());o.a<o.c.c.length;)a=uG(N3(o),187),b.a+=a.Mf().a+i,b.b+=a.Mf().b+i;b.a=e.Math.max(b.a,0),b.b=e.Math.max(b.b,0),tGn(r,s.Wf(),s.Uf(),t,s,b,i)}}n.b&&tGn(r,t.Wf(),t.Uf(),t,null,null,i),(u=new zU(t.Vf())).d=e.Math.max(0,t.Lf().b-r.d),u.a=e.Math.max(0,r.d+r.a-(t.Lf().b+t.Mf().b)),u.b=e.Math.max(0,t.Lf().a-r.c),u.c=e.Math.max(0,r.c+r.b-(t.Lf().a+t.Mf().a)),t.Zf(u)}function mJn(){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 vJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c4n),"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 mt),c4n),WX((rDn(),MFt),Uhn(cT(PFt,1),p1n,245,0,[kFt]))))),U4(n,c4n,a4n,xwn(1)),U4(n,c4n,o4n,80),U4(n,c4n,u4n,5),U4(n,c4n,R3n,r4n),U4(n,c4n,s4n,xwn(1)),U4(n,c4n,h4n,(qx(),!0)),U4(n,c4n,K3n,Aft),U4(n,c4n,f4n,Jkn(Mft)),U4(n,c4n,l4n,Jkn(Lft)),U4(n,c4n,b4n,!1),U4(n,c4n,w4n,Jkn(Ift)),U4(n,c4n,d4n,Jkn(Pft)),U4(n,c4n,g4n,Jkn(Cft)),U4(n,c4n,p4n,Jkn(Sft)),U4(n,c4n,m4n,Jkn(Eft)),U4(n,c4n,v4n,Jkn(Nft)),U4(n,c4n,J3n,Jkn(jft)),U4(n,c4n,n4n,Jkn(Bft)),U4(n,c4n,Y3n,Jkn(Tft)),U4(n,c4n,e4n,Jkn(xft)),U4(n,c4n,Z3n,Jkn(Rft)),U4(n,c4n,k4n,Jkn(Gft)),U4(n,c4n,y4n,Jkn(Xft)),U4(n,c4n,M4n,Jkn(Uft)),U4(n,c4n,T4n,Jkn(Hft)),U4(n,c4n,j4n,qft)}function kJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;if(QYn(),0==oS(jHt)){for(f=Inn(QHt,zZn,122,SHt.length,0,1),a=0;a<f.length;a++)f[a]=new K3(4);for(i=new VM,c=0;c<THt.length;c++){if(h=new K3(4),c<84?(s3(o=2*c,rat.length),l=rat.charCodeAt(o),s3(o+1,rat.length),HFn(h,l,rat.charCodeAt(o+1))):HFn(h,PHt[o=2*(c-84)],PHt[o+1]),m_(u=THt[c],"Specials")&&HFn(h,65520,65533),m_(u,eat)&&(HFn(h,983040,1048573),HFn(h,1048576,1114109)),r2(jHt,u,h),r2(EHt,u,FGn(h)),0<(s=i.a.length)?i.a=r1(i.a,0,0):0>s&&(i.a+=V$(Inn(JHt,N1n,28,-s,15,1))),i.a+="Is",xL(u,$Cn(32))>=0)for(r=0;r<u.length;r++)s3(r,u.length),32!=u.charCodeAt(r)&&TQ(i,(s3(r,u.length),u.charCodeAt(r)));else i.a+=""+u;ivn(i.a,u,!0)}ivn(iat,"Cn",!1),ivn(cat,"Cn",!0),HFn(e=new K3(4),0,zct),r2(jHt,"ALL",e),r2(EHt,"ALL",FGn(e)),!zHt&&(zHt=new Ym),r2(zHt,iat,iat),!zHt&&(zHt=new Ym),r2(zHt,cat,cat),!zHt&&(zHt=new Ym),r2(zHt,"ALL","ALL")}return uG(U1(t?jHt:EHt,n),138)}function yJn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,c7n),"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 Qa),a7n),ggn((rDn(),vFt))))),U4(n,c7n,K3n,mCt),U4(n,c7n,o4n,20),U4(n,c7n,$8n,3),U4(n,c7n,R3n,r4n),U4(n,c7n,a4n,xwn(1)),U4(n,c7n,h4n,(qx(),!0)),U4(n,c7n,q8n,Jkn(rCt)),U4(n,c7n,W8n,aCt),U4(n,c7n,f4n,Jkn(sCt)),U4(n,c7n,g9n,Jkn(hCt)),U4(n,c7n,p4n,Jkn(lCt)),U4(n,c7n,d4n,Jkn(bCt)),U4(n,c7n,x4n,Jkn(wCt)),U4(n,c7n,g4n,Jkn(dCt)),U4(n,c7n,m4n,Jkn(fCt)),U4(n,c7n,w4n,Jkn(gCt)),U4(n,c7n,v4n,Jkn(vCt)),U4(n,c7n,t7n,Jkn(LCt)),U4(n,c7n,i7n,Jkn(MCt)),U4(n,c7n,k4n,Jkn(CCt)),U4(n,c7n,y4n,Jkn(OCt)),U4(n,c7n,M4n,Jkn(PCt)),U4(n,c7n,T4n,Jkn(SCt)),U4(n,c7n,j4n,ICt),U4(n,c7n,n7n,Jkn(kCt)),U4(n,c7n,e7n,Jkn(uCt)),U4(n,c7n,Z9n,Jkn(ACt)),U4(n,c7n,J9n,Jkn(iCt)),U4(n,c7n,Y9n,Jkn(oCt))}function MJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(s=uG(uG(Y9(n.r,t),21),87),a=DCn(n,t),e=n.u.Hc((eNn(),lRt)),u=s.Kc();u.Ob();)if((o=uG(u.Pb(),117)).c&&!(o.c.d.c.length<=0)){switch(l=o.b.Mf(),(f=(h=o.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:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=-f.a-n.t,eF(h,(Yen(),Rst));break;case 3:o.a?(f.c=(l.a-f.b)/2,etn(h,(Ktn(),Ost))):a||e?(f.c=-f.b-n.s,etn(h,(Ktn(),Lst))):(f.c=l.a+n.s,etn(h,(Ktn(),Ast))),f.d=l.b+n.t,eF(h,(Yen(),Fst));break;case 2:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=l.a+n.s,etn(h,(Ktn(),Ast));break;case 4:o.a?(i=n.v?f.a:uG(zq(h.d,0),187).Mf().b,f.d=(l.b-i)/2,eF(h,(Yen(),Kst))):a||e?(f.d=-f.a-n.t,eF(h,(Yen(),Rst))):(f.d=l.b+n.t,eF(h,(Yen(),Fst))),f.c=-f.b-n.s,etn(h,(Ktn(),Lst))}a=!1}}function TJn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(l=!1,f=!1,sN(uG(oIn(i,(jYn(),JMt)),101))){a=!1,o=!1;n:for(w=new Ww(i.j);w.a<w.c.c.length;)for(b=uG(N3(w),12),d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[new zd(b),new Wd(b)])));hDn(d);)if(!oM(gK(oIn(uG(N9(d),12).i,gyt)))){if(b.j==(KQn(),yRt)){a=!0;break n}if(b.j==KRt){o=!0;break n}}l=o&&!a,f=a&&!o}if(l||f||0==i.b.c.length)p=!f;else{for(h=0,s=new Ww(i.b);s.a<s.c.c.length;)h+=(u=uG(N3(s),72)).n.b+u.o.b/2;p=(h/=i.b.c.length)>=i.o.b/2}p?(g=uG(oIn(i,(GYn(),Pmt)),15))?l?c=g:(r=uG(oIn(i,Ept),15))?c=g.gc()<=r.gc()?g:r:(c=new Zm,kfn(i,Ept,c)):(c=new Zm,kfn(i,Pmt,c)):(r=uG(oIn(i,(GYn(),Ept)),15))?f?c=r:(g=uG(oIn(i,Pmt),15))?c=r.gc()<=g.gc()?r:g:(c=new Zm,kfn(i,Pmt,c)):(c=new Zm,kfn(i,Ept,c)),c.Fc(n),kfn(n,(GYn(),Ppt),e),t.d==e?(u2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null),Nln(e)):(c2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null)),BY(t.a)}function jJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(i.Ug("MinWidth layering",1),w=t.b,j=t.a,A=uG(oIn(t,(jYn(),mMt)),17).a,u=uG(oIn(t,vMt),17).a,n.b=uM(pK(oIn(t,dTt))),n.d=M0n,y=new Ww(j);y.a<y.c.c.length;)(v=uG(N3(y),10)).k==(zIn(),dbt)&&(P=v.o.b,n.d=e.Math.min(n.d,P));for(n.d=e.Math.max(1,n.d),E=j.c.length,n.c=Inn(YHt,W1n,28,E,15,1),n.f=Inn(YHt,W1n,28,E,15,1),n.e=Inn(eUt,I0n,28,E,15,1),h=0,n.a=0,M=new Ww(j);M.a<M.c.c.length;)(v=uG(N3(M),10)).p=h++,n.c[v.p]=xbn(qgn(v)),n.f[v.p]=xbn(Xgn(v)),n.e[v.p]=v.o.b/n.d,n.a+=n.e[v.p];for(n.b/=n.d,n.a/=E,T=LNn(j),f$(j,kJ(new Ug(n))),g=M0n,d=vZn,o=null,O=A,I=A,a=u,c=u,A<0&&(O=uG($Et.a.Id(),17).a,I=uG($Et.b.Id(),17).a),u<0&&(a=uG(NEt.a.Id(),17).a,c=uG(NEt.b.Id(),17).a),C=O;C<=I;C++)for(r=a;r<=c;r++)m=uM(pK((S=Nqn(n,C,r,j,T)).a)),p=(b=uG(S.b,15)).gc(),(m<g||m==g&&p<d)&&(g=m,d=p,o=b);for(l=o.Kc();l.Ob();){for(f=uG(l.Pb(),15),s=new bQ(t),k=f.Kc();k.Ob();)a2(v=uG(k.Pb(),10),s);mv(w.c,s)}_An(w),j.c.length=0,i.Vg()}function EJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(i.Ug("Spline edge routing",1),0==t.b.c.length)return t.f.a=0,void i.Vg();m=uM(pK(oIn(t,(jYn(),STt)))),u=uM(pK(oIn(t,vTt))),o=uM(pK(oIn(t,gTt))),j=uG(oIn(t,Zyt),350)==(kbn(),fEt),T=uM(pK(oIn(t,nMt))),n.d=t,n.j.c.length=0,n.a.c.length=0,$V(n.k),f=UA((s=uG(zq(t.b,0),30)).a,(oFn(),LSt)),l=UA((d=uG(zq(t.b,t.b.c.length-1),30)).a,LSt),g=new Ww(t.b),p=null,C=0;do{for(qQn(n,p,v=g.a<g.c.c.length?uG(N3(g),30):null),AGn(n),P=0,k=C,b=!p||f&&p==s,w=!v||l&&v==d,(E=lT(yun(nY(JJ(new fX(null,new h3(n.i,16)),new va),new ka))))>0?(h=0,p&&(h+=u),h+=(E-1)*o,v&&(h+=u),j&&v&&(h=e.Math.max(h,GKn(v,o,m,T))),h<m&&!b&&!w&&(P=(m-h)/2,h=m),k+=h):!b&&!w&&(k+=m),v&&Vzn(v,k),M=new Ww(n.i);M.a<M.c.c.length;)(y=uG(N3(M),131)).a.c=C,y.a.b=k-C,y.F=P,y.p=!p;Ohn(n.a,n.i),C=k,v&&(C+=v.c.a),p=v,b=w}while(v);for(c=new Ww(n.j);c.a<c.c.c.length;)a=Oon(n,r=uG(N3(c),18)),kfn(r,(GYn(),ymt),a),S=rFn(n,r),kfn(r,Tmt,S);t.f.a=C,n.d=null,i.Vg()}function SJn(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(n.b=t,n.a=uG(oIn(t,(jYn(),cMt)),17).a,n.c=uG(oIn(t,oMt),17).a,0==n.c&&(n.c=vZn),g=new N4(t.b,0);g.b<g.d.gc();){for(MK(g.b<g.d.gc()),d=uG(g.d.Xb(g.c=g.b++),30),u=new Zm,l=-1,k=-1,v=new Ww(d.a);v.a<v.c.c.length;)m=uG(N3(v),10),x5((HB(),new Fz(ix(Ggn(m).a.Kc(),new h))))>=n.a&&(r=Rqn(n,m),l=e.Math.max(l,r.b),k=e.Math.max(k,r.d),kD(u,new WO(m,r)));for(T=new Zm,f=0;f<l;++f)GX(T,0,(MK(g.b>0),g.a.Xb(g.c=--g.b),pF(g,j=new bQ(n.b)),MK(g.b<g.d.gc()),g.d.Xb(g.c=g.b++),j));for(o=new Ww(u);o.a<o.c.c.length;)if(c=uG(N3(o),42),w=uG(c.b,580).a)for(b=new Ww(w);b.a<b.c.c.length;)Gjn(n,uG(N3(b),10),Nbt,T);for(i=new Zm,s=0;s<k;++s)kD(i,(pF(g,E=new bQ(n.b)),E));for(a=new Ww(u);a.a<a.c.c.length;)if(c=uG(N3(a),42),M=uG(c.b,580).c)for(y=new Ww(M);y.a<y.c.c.length;)Gjn(n,uG(N3(y),10),$bt,i)}for(p=new N4(t.b,0);p.b<p.d.gc();)MK(p.b<p.d.gc()),0==uG(p.d.Xb(p.c=p.b++),30).a.c.length&&LQ(p)}function PJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(d=0!=n.i,m=!1,g=null,uN(n.e)){if((h=t.gc())>0){for(l=h<100?null:new cj(h),w=(s=new Hun(t)).g,g=Inn(YHt,W1n,28,h,15,1),i=0,v=new Drn(h),r=0;r<n.i;++r){b=o=n.g[r];n:for(p=0;p<2;++p){for(u=h;--u>=0;)if(null!=b?udn(b,w[u]):xA(b)===xA(w[u])){g.length<=i&&qGn(g,0,g=Inn(YHt,W1n,28,2*g.length,15,1),0,i),g[i++]=r,ttn(v,w[u]);break n}if(xA(b)===xA(o))break}}if(s=v,w=v.g,h=i,i>g.length&&qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i),i>0){for(m=!0,c=0;c<i;++c)l=V_(n,uG(b=w[c],76),l);for(a=i;--a>=0;)gjn(n,g[a]);if(i!=h){for(r=h;--r>=i;)gjn(s,r);qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i)}t=s}}}else for(t=cjn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(gjn(n,r),m=!0);if(m){if(null!=g){for(f=1==(e=t.gc())?i2(n,4,t.Kc().Pb(),null,g[0],d):i2(n,6,t,g,g[0],d),l=e<100?null:new cj(e),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l?(l.nj(f),l.oj()):Msn(n.e,f)}else{for(l=qF(t.gc()),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l&&l.oj()}return!0}return!1}function CJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v;for((e=new qyn(t)).a||MUn(t),s=oBn(t),u=new K1,g=new BFn,d=new Ww(t.a);d.a<d.c.c.length;)for(r=new Fz(ix(Xgn(uG(N3(d),10)).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.k!=(zIn(),lbt)&&i.d.i.k!=lbt||UNn(u,Dkn((f=LWn(n,i,s,g)).d),f.a);for(a=new Zm,v=uG(oIn(e.c,(GYn(),xpt)),21).Kc();v.Ob();){switch(m=uG(v.Pb(),64),w=g.c[m.g],b=g.b[m.g],o=g.a[m.g],c=null,p=null,m.g){case 4:c=new gY(n.d.a,w,s.b.a-n.d.a,b-w),p=new gY(n.d.a,w,o,b-w),hq(s,new MO(c.c+c.b,c.d)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 2:c=new gY(s.a.a,w,n.c.a-s.a.a,b-w),p=new gY(n.c.a-o,w,o,b-w),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c,c.d+c.a));break;case 1:c=new gY(w,n.d.b,b-w,s.b.b-n.d.b),p=new gY(w,n.d.b,b-w,o),hq(s,new MO(c.c,c.d+c.a)),hq(s,new MO(c.c+c.b,c.d+c.a));break;case 3:c=new gY(w,s.a.b,b-w,n.c.b-s.a.b),p=new gY(w,n.c.b-o,b-w,o),hq(s,new MO(c.c,c.d)),hq(s,new MO(c.c+c.b,c.d))}c&&((l=new vk).d=m,l.b=c,l.c=p,l.a=PZ(uG(Y9(u,Dkn(m)),21)),mv(a.c,l))}return Ohn(e.b,a),e.d=Bbn(bVn(s)),e}function IJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(null==i.p[t.p]){u=!0,i.p[t.p]=0,o=t,d=i.o==(w0(),wSt)?T0n:M0n;do{c=n.b.e[o.p],a=o.c.a.c.length,i.o==wSt&&c>0||i.o==dSt&&c<a-1?(s=null,h=null,s=i.o==dSt?uG(zq(o.c.a,c+1),10):uG(zq(o.c.a,c-1),10),IJn(n,h=i.g[s.p],i),d=n.e.wg(d,t,o),i.j[t.p]==t&&(i.j[t.p]=i.j[h.p]),i.j[t.p]==i.j[h.p]?(w=y$(n.d,o,s),i.o==dSt?(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])-s.d.d-w-o.d.a-o.o.b-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.min(l,d)):i.p[t.p]=e.Math.min(r,e.Math.min(l,d))):(r=uM(i.p[t.p]),l=uM(i.p[h.p])+uM(i.d[s.p])+s.o.b+s.d.a+w+o.d.d-uM(i.d[o.p]),u?(u=!1,i.p[t.p]=e.Math.max(l,d)):i.p[t.p]=e.Math.max(r,e.Math.max(l,d)))):(w=uM(pK(oIn(n.a,(jYn(),ETt)))),b=Ion(n,i.j[t.p]),f=Ion(n,i.j[h.p]),i.o==dSt?r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])+o.o.b+o.d.a+w-(uM(i.p[h.p])+uM(i.d[s.p])-s.d.d)):r3(b,f,uM(i.p[t.p])+uM(i.d[o.p])-o.d.d-uM(i.p[h.p])-uM(i.d[s.p])-s.o.b-s.d.a-w))):d=n.e.wg(d,t,o),o=i.a[o.p]}while(o!=t);Wv(n.e,t)}}function OJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T;if((e=uM(pK(oIn(n.a.j,(jYn(),Lyt)))))<-1||!n.a.i||L_(uG(oIn(n.a.o,JMt),101))||Dgn(n.a.o,(KQn(),kRt)).gc()<2&&Dgn(n.a.o,_Rt).gc()<2)return!0;if(n.a.c.kg())return!1;for(k=0,v=0,m=new Zm,u=0,s=(o=n.a.e).length;u<s;++u){for(b=0,d=(l=o[u]).length;b<d;++b)if((f=l[b]).k!=(zIn(),gbt)){for(i=n.b[f.c.p][f.p],f.k==lbt?(i.b=1,uG(oIn(f,(GYn(),rmt)),12).j==(KQn(),kRt)&&(v+=i.a)):(T=Dgn(f,(KQn(),_Rt))).dc()||!_$(T,new Lc)?i.c=1:((r=Dgn(f,kRt)).dc()||!_$(r,new Ac))&&(k+=i.a),a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);for(M=new Fz(new YD((g=zcn(Uhn(cT(vat,1),EZn,20,0,[Dgn(f,(KQn(),yRt)),Dgn(f,KRt)]))).a.length,g.a));hDn(M);)y=uG(N9(M),12),(p=uG(oIn(y,(GYn(),lmt)),10))&&(k+=i.c,v+=i.b,rtn(n,i,p))}else mv(m.c,f);for(w=new Ww(m);w.a<w.c.c.length;)for(f=uG(N3(w),10),i=n.b[f.c.p][f.p],a=new Fz(ix(Xgn(f).a.Kc(),new h));hDn(a);)c=uG(N9(a),18),k+=i.c,v+=i.b,rtn(n,i,c.d.i);m.c.length=0}return(0==(t=k+v)?M0n:(k-v)/t)>=e}function AJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(f=t,h=new K1,l=new K1,c=p6(f,yet),IOn((i=new SY(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new RD(h,h.c))).Kc();d.Ob();)for(w=uG(d.Pb(),166),o=uG(Y9(h,w),21).Kc();o.Ob();){if(a=o.Pb(),!(b=uG(dcn(n.d,a),166)))throw r=k6(f,Iet),hv(new SM(Det+a+xet+r+$et));!w.e&&(w.e=new f_(oFt,w,10,9)),ttn(w.e,b)}for(p=(l.i||(l.i=new RD(l,l.c))).Kc();p.Ob();)for(g=uG(p.Pb(),166),s=uG(Y9(l,g),21).Kc();s.Ob();){if(u=s.Pb(),!(b=uG(dcn(n.d,u),166)))throw r=k6(f,Iet),hv(new SM(Det+u+xet+r+$et));!g.g&&(g.g=new f_(oFt,g,9,10)),ttn(g.g,b)}!e.b&&(e.b=new f_(cFt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new f_(cFt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new f_(cFt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new f_(cFt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new fV(oFt,e,6,6)),e.a).i&&(hMn(m=uG(zrn((!e.a&&(e.a=new fV(oFt,e,6,6)),e.a),0),166))||fMn(m)||(Xan(m,uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),zan(m,uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84))))}function LJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,y=(v=n.a).length;k<y;++k){for(m=v[k],s=vZn,h=vZn,w=new Ww(m.e);w.a<w.c.c.length;)(a=(l=uG(N3(w),10)).c?Ten(l.c.a,l,0):-1)>0?(f=uG(zq(l.c.a,a-1),10),j=y$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+j)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a<l.c.a.c.length-1?(f=uG(zq(l.c.a,a+1),10),j=y$(n.b,l,f),p=f.n.b-f.d.d-(l.n.b+l.o.b+l.d.a+j)):p=2*l.n.b,h=e.Math.min(p,h);for(u=vZn,c=!1,S=new Ww((r=uG(zq(m.e,0),10)).j);S.a<S.c.c.length;)for(E=uG(N3(S),12),d=r.n.b+E.n.b+E.a.b,i=new Ww(E.e);i.a<i.c.c.length;)t=(M=uG(N3(i),18).c).i.n.b+M.n.b+M.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);for(T=new Ww((o=uG(zq(m.e,m.e.c.length-1),10)).j);T.a<T.c.c.length;)for(M=uG(N3(T),12),d=o.n.b+M.n.b+M.a.b,i=new Ww(M.g);i.a<i.c.c.length;)t=(E=uG(N3(i),18).d).i.n.b+E.n.b+E.a.b-d,e.Math.abs(t)<e.Math.abs(u)&&e.Math.abs(t)<(t<0?s:h)&&(u=t,c=!0);if(c&&0!=u)for(b=new Ww(m.e);b.a<b.c.c.length;)(l=uG(N3(b),10)).n.b+=u}}function NJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(r=new Zm,c=vZn,a=vZn,o=vZn,i)for(c=n.f.a,d=new Ww(t.j);d.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).g);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((f=uG(gR(u.a),8)).a<c&&(a=c-f.a,o=vZn,r.c.length=0,c=f.a),f.a<=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,1),8).b-f.b)))));else for(d=new Ww(t.j);d.a<d.c.c.length;)for(s=new Ww(uG(N3(d),12).e);s.a<s.c.c.length;)0!=(u=uG(N3(s),18)).a.b&&((b=uG(pR(u.a),8)).a>c&&(a=b.a-c,o=vZn,r.c.length=0,c=b.a),b.a>=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,u.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&o>t.o.b/2){for(o2(w=new lOn,t),NLn(w,(KQn(),yRt)),w.n.a=t.o.a/2,o2(g=new lOn,t),NLn(g,KRt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Ww(r);s.a<s.c.c.length;)u=uG(N3(s),18),i?(h=uG(tG(u.a),8),(0==u.a.b?n3(u.d):uG(gR(u.a),8)).b>=h.b?c2(u,g):c2(u,w)):(h=uG(eG(u.a),8),(0==u.a.b?n3(u.c):uG(pR(u.a),8)).b>=h.b?u2(u,g):u2(u,w)),(l=uG(oIn(u,(jYn(),bMt)),75))&&Wpn(l,h,!0);t.n.a=c-t.o.a/2}}function $Jn(n,t,i){var r,c,a,o,u,s,h,f,l;for(u=Fkn(n.b,0);u.b!=u.d.c;)if(!m_((o=uG(I6(u),40)).c,H9n))for(h=xDn(o,n),t==(xdn(),JDt)||t==YDt?f$(h,new co):f$(h,new ao),s=h.c.length,r=0;r<s;r++)m_((u3(r,h.c.length),uG(h.c[r],65)).c.c,"n11"),oM(gK(oIn(o,(OQn(),MPt))))&&!uln((u3(r,h.c.length),uG(h.c[r],65)),n)||(c=1==s?.5:(r+1)/(s+1),t==JDt?(a=uM(pK(oIn(o,DPt))),l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(e.Math.min(a,o.e.a-i),l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a,l))):t==YDt?(a=uM(pK(oIn(o,$Pt)))+i,l=o.e.b+o.f.b*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(a,l)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(o.e.a+o.f.a,l))):t==nxt?(a=uM(pK(oIn(o,DPt))),f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,e.Math.min(o.e.b-i,a))),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b))):(a=uM(pK(oIn(o,$Pt)))+i,f=o.e.a+o.f.a*c,aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,a)),aL((u3(r,h.c.length),uG(h.c[r],65)).a,new MO(f,o.e.b+o.f.b))))}function DJn(n,t,e,i,r,c,a,o,u){var s,h,f,l,b,w,d;switch(b=e,Hb(h=new gMn(u),(zIn(),lbt)),kfn(h,(GYn(),_pt),a),kfn(h,(jYn(),JMt),($Pn(),cRt)),d=uM(pK(n.of(QMt))),kfn(h,QMt,d),o2(f=new lOn,h),t!=uRt&&t!=sRt||(b=i>=0?Ipn(o):Gdn(Ipn(o)),n.qf(eTt,b)),s=new sj,l=!1,n.pf(WMt)?(_R(s,uG(n.of(WMt),8)),l=!0):mD(s,a.a/2,a.b/2),b.g){case 4:kfn(h,gMt,(Gpn(),Imt)),kfn(h,Npt,(Pfn(),ygt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),kRt)),l||(s.a=a.a),s.a-=a.a;break;case 2:kfn(h,gMt,(Gpn(),Amt)),kfn(h,Npt,(Pfn(),vgt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),_Rt)),l||(s.a=0);break;case 1:kfn(h,Xpt,(Zen(),ppt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),KRt)),l||(s.b=a.b),s.b-=a.b;break;case 3:kfn(h,Xpt,(Zen(),dpt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),yRt)),l||(s.b=0)}if(_R(f.n,s),kfn(h,WMt,s),t==rRt||t==aRt||t==cRt){if(w=0,t==rRt&&n.pf(YMt))switch(b.g){case 1:case 2:w=uG(n.of(YMt),17).a;break;case 3:case 4:w=-uG(n.of(YMt),17).a}else switch(b.g){case 4:case 2:w=c.b,t==aRt&&(w/=r.b);break;case 1:case 3:w=c.a,t==aRt&&(w/=r.a)}kfn(h,bmt,w)}return kfn(h,Fpt,b),h}function xJn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=rmn((hZ(),new qw(new Fw(NFt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=rmn((hZ(),new qw(new Fw(NFt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=rmn((hZ(),new qw(new Fw(NFt.d))));n.postMessage({id:e.id,data:c});break;case"register":OVn(e.algorithms),n.postMessage({id:e.id});break;case"layout":Vqn(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(mj(),typeof document===r2n&&typeof self!==r2n){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==r2n&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function RJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(zsn(h=new gMn(e),t),kfn(h,(GYn(),rmt),t),h.o.a=t.g,h.o.b=t.f,h.n.a=t.i,h.n.b=t.j,kD(e.a,h),vJ(n.a,t,h),(0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i||oM(gK(zDn(t,(jYn(),sMt)))))&&kfn(h,Cpt,(qx(),!0)),s=uG(oIn(e,Hpt),21),(f=uG(oIn(h,(jYn(),JMt)),101))==($Pn(),sRt)?kfn(h,JMt,uRt):f!=uRt&&s.Fc((r_n(),rpt)),l=0,i=uG(oIn(e,Byt),88),u=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));u.e!=u.i.gc();)o=uG(Zkn(u),123),(xA(zDn(r=R0(t),Syt))!==xA((yvn(),Fjt))||xA(zDn(r,Fyt))===xA((kvn(),lgt))||xA(zDn(r,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(r,Cyt)))||xA(zDn(r,kyt))!==xA((Uvn(),tbt))||xA(zDn(r,yMt))===xA((THn(),Pjt))||xA(zDn(r,yMt))===xA((THn(),Cjt))||xA(zDn(r,MMt))===xA((MKn(),JTt))||xA(zDn(r,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(t,jyt)))&&Myn(o,imt,xwn(l++)),oM(gK(zDn(o,FMt)))||mQn(n,o,h,s,i,f);for(a=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));a.e!=a.i.gc();)!oM(gK(zDn(c=uG(Zkn(a),135),FMt)))&&c.a&&kD(h.b,own(c));return oM(gK(oIn(h,gyt)))&&s.Fc((r_n(),Zgt)),oM(gK(oIn(h,uMt)))&&(s.Fc((r_n(),ipt)),s.Fc(ept),kfn(h,JMt,uRt)),h}function KJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(g=0,P=0,h=new Ww(n.b);h.a<h.c.c.length;)(s=uG(N3(h),163)).c&&IWn(s.c),g=e.Math.max(g,EX(s)),P+=EX(s)*jX(s);for(p=P/n.b.c.length,S=WEn(n.b,p),P+=n.b.c.length*S,g=e.Math.max(g,e.Math.sqrt(P*o))+i.b,O=i.b,A=i.d,w=0,l=i.b+i.c,aq(E=new lS,xwn(0)),T=new lS,f=new N4(n.b,0),d=null,u=new Zm;f.b<f.d.gc();)MK(f.b<f.d.gc()),I=EX(s=uG(f.d.Xb(f.c=f.b++),163)),b=jX(s),O+I>g&&(a&&(cL(T,w),cL(E,xwn(f.b-1)),kD(n.d,d),u.c.length=0),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),mv(u.c,s),uyn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(Ohn(n.a,u),kD(n.d,uG(zq(u,u.c.length-1),163)),l=e.Math.max(l,r),(C=A+w+i.a)<c&&(w+=c-C,C=c),a)for(O=i.b,f=new N4(n.b,0),cL(E,xwn(n.b.c.length)),v=uG(I6(j=Fkn(E,0)),17).a,cL(T,w),M=Fkn(T,0),y=0;f.b<f.d.gc();)f.b==v&&(O=i.b,y=uM(pK(I6(M))),v=uG(I6(j),17).a),MK(f.b<f.d.gc()),gvn(s=uG(f.d.Xb(f.c=f.b++),163),y),f.b==v&&(m=l-O-i.c,k=EX(s),pvn(s,m),bgn(s,(m-k)/2,0)),O+=EX(s)+t;return new MO(l,C)}function FJn(n){n.N||(n.N=!0,n.b=Nsn(n,0),Von(n.b,0),Von(n.b,1),Von(n.b,2),n.bb=Nsn(n,1),Von(n.bb,0),Von(n.bb,1),n.fb=Nsn(n,2),Von(n.fb,3),Von(n.fb,4),Won(n.fb,5),n.qb=Nsn(n,3),Von(n.qb,0),Won(n.qb,1),Won(n.qb,2),Von(n.qb,3),Von(n.qb,4),Won(n.qb,5),Von(n.qb,6),n.a=$sn(n,4),n.c=$sn(n,5),n.d=$sn(n,6),n.e=$sn(n,7),n.f=$sn(n,8),n.g=$sn(n,9),n.i=$sn(n,10),n.j=$sn(n,11),n.k=$sn(n,12),n.n=$sn(n,13),n.o=$sn(n,14),n.p=$sn(n,15),n.q=$sn(n,16),n.s=$sn(n,17),n.r=$sn(n,18),n.t=$sn(n,19),n.u=$sn(n,20),n.v=$sn(n,21),n.w=$sn(n,22),n.B=$sn(n,23),n.A=$sn(n,24),n.C=$sn(n,25),n.D=$sn(n,26),n.F=$sn(n,27),n.G=$sn(n,28),n.H=$sn(n,29),n.J=$sn(n,30),n.I=$sn(n,31),n.K=$sn(n,32),n.M=$sn(n,33),n.L=$sn(n,34),n.P=$sn(n,35),n.Q=$sn(n,36),n.R=$sn(n,37),n.S=$sn(n,38),n.T=$sn(n,39),n.U=$sn(n,40),n.V=$sn(n,41),n.X=$sn(n,42),n.W=$sn(n,43),n.Y=$sn(n,44),n.Z=$sn(n,45),n.$=$sn(n,46),n._=$sn(n,47),n.ab=$sn(n,48),n.cb=$sn(n,49),n.db=$sn(n,50),n.eb=$sn(n,51),n.gb=$sn(n,52),n.hb=$sn(n,53),n.ib=$sn(n,54),n.jb=$sn(n,55),n.kb=$sn(n,56),n.lb=$sn(n,57),n.mb=$sn(n,58),n.nb=$sn(n,59),n.ob=$sn(n,60),n.pb=$sn(n,61))}function _Jn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.a)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.a+d.o.a+d.d.c);else v=t.f.a-t.c.a;for(v-=t.c.a,g=new Ww(n);g.a<g.c.c.length;){switch(pv((d=uG(N3(g),10)).n,v-d.o.a),NG(d.f),$Tn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&pv(uG(oIn(d,rTt),8),v-d.o.a),uG(oIn(d,byt),255).g){case 1:kfn(d,byt,(nMn(),LNt));break;case 2:kfn(d,byt,(nMn(),ANt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(pv((k=uG(N3(y),12)).n,m.a-k.o.a),pv(k.a,k.o.a),NLn(k,jun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a=v-i.a;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).a=v-u.a;for(b=new Ww(c.b);b.a<b.c.c.length;)pv((f=uG(N3(b),72)).n,v-f.o.a)}for(w=new Ww(k.f);w.a<w.c.c.length;)pv((f=uG(N3(w),72)).n,k.o.a-f.o.a)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),jun(uG(oIn(d,Fpt),64))),DIn(d)),l=new Ww(d.b);l.a<l.c.c.length;)$Tn(f=uG(N3(l),72)),pv(f.n,m.a-f.o.a)}}function BJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(v=0,0==t.f.b)for(p=new Ww(n);p.a<p.c.c.length;)d=uG(N3(p),10),v=e.Math.max(v,d.n.b+d.o.b+d.d.a);else v=t.f.b-t.c.b;for(v-=t.c.b,g=new Ww(n);g.a<g.c.c.length;){switch(gv((d=uG(N3(g),10)).n,v-d.o.b),$G(d.f),DTn(d),(d.q?d.q:(hZ(),hZ(),Vot))._b((jYn(),rTt))&&gv(uG(oIn(d,rTt),8),v-d.o.b),uG(oIn(d,byt),255).g){case 3:kfn(d,byt,(nMn(),INt));break;case 4:kfn(d,byt,(nMn(),NNt))}for(m=d.o,y=new Ww(d.j);y.a<y.c.c.length;){for(gv((k=uG(N3(y),12)).n,m.b-k.o.b),gv(k.a,k.o.b),NLn(k,Eun(k.j)),(o=uG(oIn(k,YMt),17))&&kfn(k,YMt,xwn(-o.a)),a=new Ww(k.g);a.a<a.c.c.length;){for(r=Fkn((c=uG(N3(a),18)).a,0);r.b!=r.d.c;)(i=uG(I6(r),8)).b=v-i.b;if(h=uG(oIn(c,bMt),75))for(s=Fkn(h,0);s.b!=s.d.c;)(u=uG(I6(s),8)).b=v-u.b;for(b=new Ww(c.b);b.a<b.c.c.length;)gv((f=uG(N3(b),72)).n,v-f.o.b)}for(w=new Ww(k.f);w.a<w.c.c.length;)gv((f=uG(N3(w),72)).n,k.o.b-f.o.b)}for(d.k==(zIn(),lbt)&&(kfn(d,(GYn(),Fpt),Eun(uG(oIn(d,Fpt),64))),Fdn(d)),l=new Ww(d.b);l.a<l.c.c.length;)DTn(f=uG(N3(l),72)),gv(f.n,m.b-f.o.b)}}function HJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(m=new N4(n.b,0),d=0,s=uG((f=t.Kc()).Pb(),17).a,y=0,e=new ek,T=new XL;m.b<m.d.gc();){for(MK(m.b<m.d.gc()),k=new Ww(uG(m.d.Xb(m.c=m.b++),30).a);k.a<k.c.c.length;){for(w=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(w);)l=uG(N9(w),18),T.a.zc(l,T);for(b=new Fz(ix(qgn(v).a.Kc(),new h));hDn(b);)l=uG(N9(b),18),T.a.Bc(l)}if(d+1==s){for(pF(m,r=new bQ(n)),pF(m,c=new bQ(n)),E=T.a.ec().Kc();E.Ob();)j=uG(E.Pb(),18),e.a._b(j)||(++y,e.a.zc(j,e)),kfn(a=new gMn(n),(jYn(),JMt),($Pn(),oRt)),a2(a,r),Hb(a,(zIn(),fbt)),o2(g=new lOn,a),NLn(g,(KQn(),_Rt)),o2(S=new lOn,a),NLn(S,kRt),kfn(i=new gMn(n),JMt,oRt),a2(i,c),Hb(i,fbt),o2(p=new lOn,i),NLn(p,_Rt),o2(P=new lOn,i),NLn(P,kRt),c2(M=new UZ,j.c),u2(M,g),kfn(M,(GYn(),imt),uG(oIn(j,imt),17)),c2(I=new UZ,S),u2(I,p),kfn(I,imt,uG(oIn(j,imt),17)),c2(j,P),o=new O5(a,i,M,I,j),kfn(a,Spt,o),kfn(i,Spt,o),(C=M.c.i).k==fbt&&((u=uG(oIn(C,Spt),313)).d=o,o.g=u);if(!f.Ob())break;s=uG(f.Pb(),17).a}++d}return xwn(y)}function UJn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g;for(d=new Zm,l=new Ww(n.d.b);l.a<l.c.c.length;)for(w=new Ww(uG(N3(l),30).a);w.a<w.c.c.length;){for(b=uG(N3(w),10),r=uG(cQ(n.f,b),60),u=new Fz(ix(Xgn(b).a.Kc(),new h));hDn(u);)if(s=!0,f=null,(i=Fkn((a=uG(N9(u),18)).a,0)).b!=i.d.c){for(t=uG(I6(i),8),e=null,a.c.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.c,mv(d.c,g)),a.c.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.c,mv(d.c,g));i.b!=i.d.c;)e=uG(I6(i),8),gcn(t.b,e.b)||(f=new Hqn(t,e,null,a),mv(d.c,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=uG(cQ(n.f,a.d.i),60),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(o=new Fz(ix(qgn(b).a.Kc(),new h));hDn(o);)0!=(a=uG(N9(o),18)).a.b&&(t=uG(pR(a.a),8),a.d.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,mv(d.c,g)),a.d.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,mv(d.c,g)))}return d}function GJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(u=new Zm,f=t.length,a=Ffn(e),s=0;s<f;++s){switch(c=(r=khn(i=Ndn(a,(Knn(s,h=cx(t,$Cn(61),s),t.length),t.substr(s,h-s))))).jk().wi(),VJ(t,++h)){case 39:o=aR(t,39,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 34:o=aR(t,34,++h),kD(u,new TA(i,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r))),s=o+1;break;case 91:kD(u,new TA(i,l=new Zm));n:for(;;){switch(VJ(t,++h)){case 39:o=aR(t,39,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 34:o=aR(t,34,++h),kD(l,LY((Knn(h,o,t.length),t.substr(h,o-h)),c,r)),h=o+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));l.c.push(null),h+=3}if(!(h<f))break;switch(s3(h,t.length),t.charCodeAt(h)){case 44:break;case 93:break n;default:throw hv(new Ky("Expecting , or ]"))}}s=h+1;break;case 110:if(++h,t.indexOf("ull",h)!=h)throw hv(new Ky(Xtt));kD(u,new TA(i,null)),s=h+3}if(!(s<f))break;if(s3(s,t.length),44!=t.charCodeAt(s))throw hv(new Ky("Expecting ,"))}return VFn(n,u,e)}function qJn(n){var t,e,i,r;switch(r=null,n.c){case 6:return n.Em();case 13:return n.Fm();case 23:return n.wm();case 22:return n.Bm();case 18:return n.ym();case 8:EYn(n),QYn(),r=IHt;break;case 9:return n.em(!0);case 19:return n.fm();case 10:switch(n.a){case 100:case 68:case 119:case 87:case 115:case 83:return r=n.dm(n.a),EYn(n),r;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:(t=n.cm())<P0n?(QYn(),QYn(),r=new IX(0,t)):r=mz(Ogn(t));break;case 99:return n.om();case 67:return n.jm();case 105:return n.rm();case 73:return n.km();case 103:return n.pm();case 88:return n.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n.gm();case 80:case 112:if(!(r=PNn(n,n.a)))throw hv(new CM(rZn((t$(),git))));break;default:r=UG(n.a)}EYn(n);break;case 0:if(93==n.a||123==n.a||125==n.a)throw hv(new CM(rZn((t$(),dit))));r=UG(n.a),e=n.a,EYn(n),(64512&e)==C0n&&0==n.c&&56320==(64512&n.a)&&((i=Inn(JHt,N1n,28,2,15,1))[0]=e&D1n,i[1]=n.a&D1n,r=EV(mz(mvn(i,0,i.length)),0),EYn(n));break;default:throw hv(new CM(rZn((t$(),dit))))}return r}function XJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P;for(E=new lS,M=new lS,g=-1,u=new Ww(n);u.a<u.c.c.length;){for((a=uG(N3(u),131)).s=g--,h=0,v=0,c=new Ww(a.t);c.a<c.c.c.length;)v+=(i=uG(N3(c),274)).c;for(r=new Ww(a.i);r.a<r.c.c.length;)h+=(i=uG(N3(r),274)).c;a.n=h,a.u=v,0==v?s8(M,a,M.c.b,M.c):0==h&&s8(E,a,E.c.b,E.c)}for(P=g8(n),d=(f=n.c.length)+1,p=f-1,b=new Zm;0!=P.a.gc();){for(;0!=M.b;)MK(0!=M.b),y=uG(Lrn(M,M.a.a),131),P.a.Bc(y),y.s=p--,Vxn(y,E,M);for(;0!=E.b;)MK(0!=E.b),T=uG(Lrn(E,E.a.a),131),P.a.Bc(T),T.s=d++,Vxn(T,E,M);for(w=j1n,s=P.a.ec().Kc();s.Ob();)(m=(a=uG(s.Pb(),131)).u-a.n)>=w&&(m>w&&(b.c.length=0,w=m),mv(b.c,a));0!=b.c.length&&(l=uG(zq(b,iMn(t,b.c.length)),131),P.a.Bc(l),l.s=d++,Vxn(l,E,M),b.c.length=0)}for(k=n.c.length+1,o=new Ww(n);o.a<o.c.c.length;)(a=uG(N3(o),131)).s<f&&(a.s+=k);for(j=new Ww(n);j.a<j.c.c.length;)for(e=new N4((T=uG(N3(j),131)).t,0);e.b<e.d.gc();)MK(e.b<e.d.gc()),S=(i=uG(e.d.Xb(e.c=e.b++),274)).b,T.s>S.s&&(LQ(e),men(S.i,i),i.c>0&&(i.a=S,kD(S.t,i),i.b=T,kD(T.i,i)))}function zJn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(w=new R7(t.b),m=new R7(t.b),l=new R7(t.b),M=new R7(t.b),d=new R7(t.b),y=Fkn(t,0);y.b!=y.d.c;)for(o=new Ww((v=uG(I6(y),12)).g);o.a<o.c.c.length;)if((c=uG(N3(o),18)).c.i==c.d.i){if(v.j==c.d.j){mv(M.c,c);continue}if(v.j==(KQn(),yRt)&&c.d.j==KRt){mv(d.c,c);continue}}for(u=new Ww(d);u.a<u.c.c.length;)RUn(n,c=uG(N3(u),18),e,i,(KQn(),kRt));for(a=new Ww(M);a.a<a.c.c.length;)c=uG(N3(a),18),Hb(T=new gMn(n),(zIn(),gbt)),kfn(T,(jYn(),JMt),($Pn(),cRt)),kfn(T,(GYn(),rmt),c),kfn(j=new lOn,rmt,c.d),NLn(j,(KQn(),_Rt)),o2(j,T),kfn(E=new lOn,rmt,c.c),NLn(E,kRt),o2(E,T),kfn(c.c,lmt,T),kfn(c.d,lmt,T),c2(c,null),u2(c,null),mv(e.c,T),kfn(T,Opt,xwn(2));for(k=Fkn(t,0);k.b!=k.d.c;)s=(v=uG(I6(k),12)).e.c.length>0,g=v.g.c.length>0,s&&g?mv(l.c,v):s?mv(w.c,v):g&&mv(m.c,v);for(b=new Ww(w);b.a<b.c.c.length;)kD(r,Xqn(n,uG(N3(b),12),null,e));for(p=new Ww(m);p.a<p.c.c.length;)kD(r,Xqn(n,null,uG(N3(p),12),e));for(f=new Ww(l);f.a<f.c.c.length;)kD(r,Xqn(n,h=uG(N3(f),12),h,e))}function VJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(b=M0n,w=M0n,f=0,l=0,s=new Zm,u=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));u.e!=u.i.gc();)a=uG(Zkn(u),74),s=zcn(Uhn(cT(vat,1),EZn,20,0,[s,(!a.n&&(a.n=new fV(lFt,a,1,7)),a.n)]));for(k=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n),(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),s])));hDn(k);)v=uG(N9(k),422),h=uG(v.of((XYn(),$$t)),140),b>v.nh()-h.b&&(b=v.nh()-h.b),w>v.oh()-h.d&&(w=v.oh()-h.d),f<v.nh()+v.mh()+h.c&&(f=v.nh()+v.mh()+h.c),l<v.oh()+v.lh()+h.a&&(l=v.oh()+v.lh()+h.a);for(o=new DD((!n.b&&(n.b=new fV(aFt,n,12,3)),n.b));o.e!=o.i.gc();)for(m=new DD((!(a=uG(Zkn(o),74)).a&&(a.a=new fV(oFt,a,6,6)),a.a));m.e!=m.i.gc();)for(d=(p=uG(Zkn(m),166)).j,r=p.b,g=p.k,c=p.c,b=e.Math.min(b,d),b=e.Math.min(b,r),f=e.Math.max(f,d),f=e.Math.max(f,r),w=e.Math.min(w,g),w=e.Math.min(w,c),l=e.Math.max(l,g),l=e.Math.max(l,c),i=new DD((!p.a&&(p.a=new MD(eFt,p,5)),p.a));i.e!=i.i.gc();)t=uG(Zkn(i),377),b=e.Math.min(b,t.a),f=e.Math.max(f,t.a),w=e.Math.min(w,t.b),l=e.Math.max(l,t.b);Myn(n,(XYn(),h$t),f-b),Myn(n,s$t,l-w)}function WJn(n,t,e){var i,r,c,a,o,u,s;if(e.Ug("Network simplex node placement",1),n.e=t,n.n=uG(oIn(t,(GYn(),kmt)),312),Pzn(n),vPn(n),kS(sin(new fX(null,new h3(n.e.b,16)),new _c),new hp(n)),kS(JJ(sin(JJ(sin(new fX(null,new h3(n.e.b,16)),new Zc),new na),new ta),new ea),new sp(n)),oM(gK(oIn(n.e,(jYn(),OMt))))&&((c=e.eh(1)).Ug("Straight Edges Pre-Processing",1),HWn(n),c.Vg()),uMn(n.f),r=uG(oIn(t,OTt),17).a*n.f.a.c.length,JHn(kT(yT(_B(n.f),r),!1),e.eh(1)),0!=n.d.a.gc()){for((c=e.eh(1)).Ug("Flexible Where Space Processing",1),a=uG(yx(Qz(YJ(new fX(null,new h3(n.f.a,16)),new Bc),new $c)),17).a,o=uG(yx(Wz(YJ(new fX(null,new h3(n.f.a,16)),new Hc),new Dc)),17).a-a,u=jx(new sk,n.f),s=jx(new sk,n.f),RKn(xS(DS($S(RS(new uk,2e4),o),u),s)),kS(JJ(JJ(BV(n.i),new Uc),new Gc),new dY(a,u,o,s)),i=n.d.a.ec().Kc();i.Ob();)uG(i.Pb(),218).g=1;JHn(kT(yT(_B(n.f),r),!1),c.eh(1)),c.Vg()}oM(gK(oIn(t,OMt)))&&((c=e.eh(1)).Ug("Straight Edges Post-Processing",1),fAn(n),c.Vg()),dWn(n),n.e=null,n.f=null,n.i=null,n.c=null,$V(n.k),n.j=null,n.a=null,n.o=null,n.d.a.$b(),e.Vg()}function QJn(n,t,i){var r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;for(i.Ug("Depth first model order layering",1),n.d=t,m=new Zm,p=new Ww(n.d.a);p.a<p.c.c.length;)(d=uG(N3(p),10)).k==(zIn(),dbt)&&mv(m.c,d);for(hZ(),f$(m,new Ec),o=!0,n.b=new bQ(n.d),n.a=null,kD(n.d.b,n.b),n.b.p=0,n.c=0,n.f=new lS,g=new Ww(m);g.a<g.c.c.length;)if(d=uG(N3(g),10),o)a2(d,n.b),o=!1;else if(Lqn(n,d))if(r=(w=Pyn(w=n.c,d))+2,l=w-n.c,0==n.f.b)O_n(n,r,d);else if(l>0){for(k=Fkn(n.f,0);k.b!=k.d.c;)uG(I6(k),10).p+=w-n.e;kAn(n),BY(n.f),O_n(n,r,d)}else{for(aq(n.f,d),d.p=r,n.e=e.Math.max(n.e,r),a=new Fz(ix(qgn(d).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.c||c.c.i.k!=(zIn(),bbt)||(aq(n.f,c.c.i),c.c.i.p=r-1);n.c=r}else kAn(n),BY(n.f),r=0,hDn(new Fz(ix(qgn(d).a.Kc(),new h)))?O_n(n,r=(w=Pyn(w=0,d))+2,d):(aq(n.f,d),d.p=0,n.e=e.Math.max(n.e,0),n.b=uG(zq(n.d.b,0),30),n.c=0);for(0==n.f.b||kAn(n),n.d.a.c.length=0,v=new Zm,f=new Ww(n.d.b);f.a<f.c.c.length;)0==(u=uG(N3(f),30)).a.c.length&&mv(v.c,u);for(dgn(n.d.b,v),b=0,s=new Ww(n.d.b);s.a<s.c.c.length;)(u=uG(N3(s),30)).p=b,++b;i.Vg()}function JJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(s=t,Gan(u=D5(n,d5(e),s),k6(s,Iet)),h=uG(dcn(n.g,fNn(v0(s,set))),27),i=null,(a=v0(s,"sourcePort"))&&(i=fNn(a)),f=uG(dcn(n.j,i),123),!h)throw hv(new SM("An edge must have a source node (edge id: '"+jvn(s)+$et));if(f&&!xQ(h0(f),h))throw hv(new SM("The source port of an edge must be a port of the edge's source node (edge id: '"+k6(s,Iet)+$et));if(!u.b&&(u.b=new f_(cFt,u,4,7)),ttn(u.b,f||h),l=uG(dcn(n.g,fNn(v0(s,Ret))),27),r=null,(o=v0(s,"targetPort"))&&(r=fNn(o)),b=uG(dcn(n.j,r),123),!l)throw hv(new SM("An edge must have a target node (edge id: '"+jvn(s)+$et));if(b&&!xQ(h0(b),l))throw hv(new SM("The target port of an edge must be a port of the edge's target node (edge id: '"+k6(s,Iet)+$et));if(!u.c&&(u.c=new f_(cFt,u,5,8)),ttn(u.c,b||l),0==(!u.b&&(u.b=new f_(cFt,u,4,7)),u.b).i||0==(!u.c&&(u.c=new f_(cFt,u,5,8)),u.c).i)throw c=k6(s,Iet),hv(new SM(Net+c+$et));return fCn(s,u),ZDn(s,u),qfn(n,s,u)}function YJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(b=uG(oIn(n,(mon(),Wft)),27),m=vZn,v=vZn,g=j1n,p=j1n,y=new Ww(n.e);y.a<y.c.c.length;)S=(k=uG(N3(y),153)).d,P=k.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(i=new Ww(n.b);i.a<i.c.c.length;)S=(t=uG(N3(i),250)).d,P=t.e,m=e.Math.min(m,S.a-P.a/2),v=e.Math.min(v,S.b-P.b/2),g=e.Math.max(g,S.a+P.a/2),p=e.Math.max(p,S.b+P.b/2);for(j=new MO((E=uG(zDn(b,(rGn(),Oft)),107)).b-m,E.d-v),h=new Ww(n.e);h.a<h.c.c.length;)F$(T=oIn(s=uG(N3(h),153),Wft),207)&&kN(w=uG(T,27),(M=JF(new eN(s.d),j)).a-w.g/2,M.b-w.f/2);for(a=new Ww(n.c);a.a<a.c.c.length;)c=uG(N3(a),290),l=JFn(uG(oIn(c,Wft),74),!0,!0),JF(C=new eN(Vcn(c)),j),MN(l,C.a,C.b),Prn(c.a,new bC(j,l)),JF(r=new eN(Wcn(c)),j),yN(l,r.a,r.b);for(u=new Ww(n.d);u.a<u.c.c.length;)o=uG(N3(u),454),kN(uG(oIn(o,Wft),135),(d=JF(new eN(o.d),j)).a,d.b);I=g-m+(E.b+E.c),f=p-v+(E.d+E.a),oM(gK(zDn(b,(XYn(),H$t))))||ZQn(b,I,f,!1,!0),Myn(b,h$t,I-(E.b+E.c)),Myn(b,s$t,f-(E.d+E.a))}function ZJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;return f=xGn(Ax(n,(KQn(),SRt)),t),w=UTn(Ax(n,PRt),t),k=UTn(Ax(n,DRt),t),j=GTn(Ax(n,RRt),t),l=GTn(Ax(n,MRt),t),m=UTn(Ax(n,$Rt),t),d=UTn(Ax(n,CRt),t),M=UTn(Ax(n,xRt),t),y=UTn(Ax(n,TRt),t),E=GTn(Ax(n,ERt),t),p=UTn(Ax(n,LRt),t),v=UTn(Ax(n,ARt),t),T=UTn(Ax(n,jRt),t),S=GTn(Ax(n,NRt),t),b=GTn(Ax(n,IRt),t),g=UTn(Ax(n,ORt),t),e=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.a,j.a,M.a,S.a])),i=Trn(Uhn(cT(eUt,1),I0n,28,15,[w.a,f.a,k.a,g.a])),r=p.a,c=Trn(Uhn(cT(eUt,1),I0n,28,15,[d.a,l.a,y.a,b.a])),s=Trn(Uhn(cT(eUt,1),I0n,28,15,[m.b,w.b,d.b,v.b])),u=Trn(Uhn(cT(eUt,1),I0n,28,15,[j.b,f.b,l.b,g.b])),h=E.b,o=Trn(Uhn(cT(eUt,1),I0n,28,15,[M.b,k.b,y.b,T.b])),utn(Ax(n,SRt),e+r,s+h),utn(Ax(n,ORt),e+r,s+h),utn(Ax(n,PRt),e+r,0),utn(Ax(n,DRt),e+r,s+h+u),utn(Ax(n,RRt),0,s+h),utn(Ax(n,MRt),e+r+i,s+h),utn(Ax(n,CRt),e+r+i,0),utn(Ax(n,xRt),0,s+h+u),utn(Ax(n,TRt),e+r+i,s+h+u),utn(Ax(n,ERt),0,s),utn(Ax(n,LRt),e,0),utn(Ax(n,jRt),0,s+h+u),utn(Ax(n,IRt),e+r+i,0),(a=new sj).a=Trn(Uhn(cT(eUt,1),I0n,28,15,[e+i+r+c,E.a,v.a,T.a])),a.b=Trn(Uhn(cT(eUt,1),I0n,28,15,[s+u+h+o,p.b,S.b,b.b])),a}function nYn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(d=new MO(M0n,M0n),t=new MO(T0n,T0n),y=new Ww(n);y.a<y.c.c.length;)k=uG(N3(y),8),d.a=e.Math.min(d.a,k.a),d.b=e.Math.min(d.b,k.b),t.a=e.Math.max(t.a,k.a),t.b=e.Math.max(t.b,k.b);for(s=new MO(t.a-d.a,t.b-d.b),h=new gqn(new MO(d.a-50,d.b-s.a-50),new MO(d.a-50,t.b+s.a+50),new MO(t.a+s.b/2+50,d.b+s.b/2)),v=new ek,c=new Zm,i=new Zm,v.a.zc(h,v),T=new Ww(n);T.a<T.c.c.length;){for(M=uG(N3(T),8),c.c.length=0,m=v.a.ec().Kc();m.Ob();)atn((g=uG(m.Pb(),317)).d,g.a),Fgn(atn(g.d,M),atn(g.d,g.a))<0&&mv(c.c,g);for(i.c.length=0,p=new Ww(c);p.a<p.c.c.length;)for(b=new Ww((g=uG(N3(p),317)).e);b.a<b.c.c.length;){for(f=uG(N3(b),177),a=!0,u=new Ww(c);u.a<u.c.c.length;)(o=uG(N3(u),317))!=g&&(OJ(f,zq(o.e,0))||OJ(f,zq(o.e,1))||OJ(f,zq(o.e,2)))&&(a=!1);a&&mv(i.c,f)}for(zCn(v,c),z8(v,new ln),l=new Ww(i);l.a<l.c.c.length;)FV(v,new gqn(M,(f=uG(N3(l),177)).a,f.b))}for(z8(v,new Pd(w=new ek)),r=w.a.ec().Kc();r.Ob();)(Den(h,(f=uG(r.Pb(),177)).a)||Den(h,f.b))&&r.Qb();return z8(w,new bn),w}function tYn(){tYn=E,pj(),VKt=RKt.a,uG(zrn(gZ(RKt.a),0),19),HKt=RKt.f,uG(zrn(gZ(RKt.f),0),19),uG(zrn(gZ(RKt.f),1),35),zKt=RKt.n,uG(zrn(gZ(RKt.n),0),35),uG(zrn(gZ(RKt.n),1),35),uG(zrn(gZ(RKt.n),2),35),uG(zrn(gZ(RKt.n),3),35),UKt=RKt.g,uG(zrn(gZ(RKt.g),0),19),uG(zrn(gZ(RKt.g),1),35),FKt=RKt.c,uG(zrn(gZ(RKt.c),0),19),uG(zrn(gZ(RKt.c),1),19),GKt=RKt.i,uG(zrn(gZ(RKt.i),0),19),uG(zrn(gZ(RKt.i),1),19),uG(zrn(gZ(RKt.i),2),19),uG(zrn(gZ(RKt.i),3),19),uG(zrn(gZ(RKt.i),4),35),qKt=RKt.j,uG(zrn(gZ(RKt.j),0),19),_Kt=RKt.d,uG(zrn(gZ(RKt.d),0),19),uG(zrn(gZ(RKt.d),1),19),uG(zrn(gZ(RKt.d),2),19),uG(zrn(gZ(RKt.d),3),19),uG(zrn(gZ(RKt.d),4),35),uG(zrn(gZ(RKt.d),5),35),uG(zrn(gZ(RKt.d),6),35),uG(zrn(gZ(RKt.d),7),35),KKt=RKt.b,uG(zrn(gZ(RKt.b),0),35),uG(zrn(gZ(RKt.b),1),35),BKt=RKt.e,uG(zrn(gZ(RKt.e),0),35),uG(zrn(gZ(RKt.e),1),35),uG(zrn(gZ(RKt.e),2),35),uG(zrn(gZ(RKt.e),3),35),uG(zrn(gZ(RKt.e),4),19),uG(zrn(gZ(RKt.e),5),19),uG(zrn(gZ(RKt.e),6),19),uG(zrn(gZ(RKt.e),7),19),uG(zrn(gZ(RKt.e),8),19),uG(zrn(gZ(RKt.e),9),19),uG(zrn(gZ(RKt.e),10),35),XKt=RKt.k,uG(zrn(gZ(RKt.k),0),35),uG(zrn(gZ(RKt.k),1),35)}function eYn(n){var t,e,i,r,c;switch(t=n.c){case 11:return n.vm();case 12:return n.xm();case 14:return n.zm();case 15:return n.Cm();case 16:return n.Am();case 17:return n.Dm();case 21:return EYn(n),QYn(),QYn(),OHt;case 10:switch(n.a){case 65:return n.hm();case 90:return n.mm();case 122:return n.tm();case 98:return n.nm();case 66:return n.im();case 60:return n.sm();case 62:return n.qm()}}switch(c=qJn(n),t=n.c){case 3:return n.Im(c);case 4:return n.Gm(c);case 5:return n.Hm(c);case 0:if(123==n.a&&n.d<n.j){if(r=n.d,i=0,e=-1,!((t=VJ(n.i,r++))>=48&&t<=57))throw hv(new CM(rZn((t$(),Nit))));for(i=t-48;r<n.j&&(t=VJ(n.i,r++))>=48&&t<=57;)if((i=10*i+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(e=i,44==t){if(r>=n.j)throw hv(new CM(rZn((t$(),Dit))));if((t=VJ(n.i,r++))>=48&&t<=57){for(e=t-48;r<n.j&&(t=VJ(n.i,r++))>=48&&t<=57;)if((e=10*e+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(i>e)throw hv(new CM(rZn((t$(),xit))))}else e=-1}if(125!=t)throw hv(new CM(rZn((t$(),$it))));n.bm(r)?(QYn(),QYn(),c=new n8(9,c),n.d=r+1):(QYn(),QYn(),c=new n8(3,c),n.d=r),c.Om(i),c.Nm(e),EYn(n)}}return c}function iYn(n){var t,e,i;switch(e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(klt),uG(oIn(n,(jYn(),rMt)),346)==(Own(),Ixt)&&gsn(t,ylt),oM(gK(oIn(n,eMt)))?Aq(t,(uIn(),Tlt),(zYn(),Iwt)):Aq(t,(uIn(),Elt),(zYn(),Iwt)),null!=oIn(n,(K7(),jNt))&&gsn(t,Mlt),(oM(gK(oIn(n,fMt)))||oM(gK(oIn(n,iMt))))&&wz(t,(uIn(),Plt),(zYn(),Ubt)),uG(oIn(n,Byt),88).g){case 2:case 3:case 4:wz(Aq(t,(uIn(),Tlt),(zYn(),qbt)),Plt,Gbt)}switch(e.Hc((r_n(),Zgt))&&wz(Aq(Aq(t,(uIn(),Tlt),(zYn(),Hbt)),Slt,_bt),Plt,Bbt),xA(oIn(n,yMt))!==xA((THn(),$jt))&&Aq(t,(uIn(),Elt),(zYn(),ywt)),e.Hc(apt)&&(Aq(t,(uIn(),Tlt),(zYn(),Pwt)),Aq(t,jlt,Ewt),Aq(t,Elt,Swt)),xA(oIn(n,vyt))!==xA((RIn(),Vgt))&&xA(oIn(n,Vyt))!==xA((_gn(),sxt))&&wz(t,(uIn(),Plt),(zYn(),rwt)),oM(gK(oIn(n,aMt)))&&Aq(t,(uIn(),Elt),(zYn(),iwt)),oM(gK(oIn(n,Ryt)))&&Aq(t,(uIn(),Elt),(zYn(),Dwt)),CRn(n)&&(i=(xA(oIn(n,rMt))===xA(Ixt)?uG(oIn(n,Oyt),299):uG(oIn(n,Ayt),299))==(ihn(),fpt)?(zYn(),jwt):(zYn(),Kwt),Aq(t,(uIn(),Slt),i)),uG(oIn(n,qTt),388).g){case 1:Aq(t,(uIn(),Slt),(zYn(),xwt));break;case 2:wz(Aq(Aq(t,(uIn(),Elt),(zYn(),xbt)),Slt,Rbt),Plt,Kbt)}return xA(oIn(n,Syt))!==xA((yvn(),Fjt))&&Aq(t,(uIn(),Elt),(zYn(),Rwt)),t}function rYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.e,t)){if(cS(uG(cQ(n.e,t),49),e))return-1}else vJ(n.e,t,new ek);if(PV(n.e,e)){if(cS(uG(cQ(n.a,e),49),t))return 1}else vJ(n.e,e,new ek);if(n.c==(yvn(),_jt)||!vR(t,(GYn(),imt))||!vR(e,(GYn(),imt))){for(f=null,s=new Ww(t.j);s.a<s.c.c.length;)0==(o=uG(N3(s),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=t.c&&(f=uG(zq(o.e,0),18).c);for(b=null,u=new Ww(e.j);u.a<u.c.c.length;)0==(o=uG(N3(u),12)).e.c.length||uG(zq(o.e,0),18).c.i.c!=e.c&&(b=uG(zq(o.e,0),18).c);if(f&&b){if(h=f.i,l=b.i,h&&h==l){for(d=new Ww(h.j);d.a<d.c.c.length;){if((w=uG(N3(d),12))==f)return uHn(n,e,t),-1;if(w==b)return uHn(n,t,e),1}return d$(_Sn(n,t),_Sn(n,e))}for(m=0,v=(p=n.d).length;m<v;++m){if((g=p[m])==h)return uHn(n,e,t),-1;if(g==l)return uHn(n,t,e),1}}if(!vR(t,(GYn(),imt))||!vR(e,imt))return(r=_Sn(n,t))>(a=_Sn(n,e))?uHn(n,t,e):uHn(n,e,t),r<a?-1:r>a?1:0}return(i=uG(oIn(t,(GYn(),imt)),17).a)>(c=uG(oIn(e,imt),17).a)?uHn(n,t,e):uHn(n,e,t),i<c?-1:i>c?1:0}function cYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(F$(t,469)){if(!(d=y_n(uG(t,685),e)))throw hv(new vM(iet+e+"' is not a valid enumerator of '"+t.xe()+"'"));return d}switch(tdn((gAn(),kBt),t).Nl()){case 2:e=yXn(e,!1);break;case 3:e=yXn(e,!0)}if(i=tdn(kBt,t).Jl())return i.jk().wi().ti(i,e);if(f=tdn(kBt,t).Ll()){for(d=new Zm,s=0,h=(u=Fln(e)).length;s<h;++s)o=u[s],kD(d,f.jk().wi().ti(f,o));return d}if(!(w=tdn(kBt,t).Ml()).dc()){for(b=w.Kc();b.Ob();){l=uG(b.Pb(),156);try{if(null!=(d=l.jk().wi().ti(l,e)))return d}catch(g){if(!F$(g=Ehn(g),63))throw hv(g)}}throw hv(new vM(iet+e+"' does not match any member types of the union datatype '"+t.xe()+"'"))}if(uG(t,847).ok(),!(r=jbn(t.kk())))return null;if(r==hot){c=0;try{c=mUn(e,j1n,vZn)&D1n}catch(g){if(!F$(g=Ehn(g),130))throw hv(g);c=_en(e)[0]}return Hsn(c)}if(r==iot){for(a=0;a<QKt.length;++a)try{return dP(QKt[a],e)}catch(g){if(!F$(g=Ehn(g),33))throw hv(g)}throw hv(new vM(iet+e+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw hv(new vM(iet+e+"' is invalid. "))}function aYn(){aYn=E,UNn(Jlt=new K1,(KQn(),SRt),ORt),UNn(Jlt,RRt,ORt),UNn(Jlt,RRt,NRt),UNn(Jlt,MRt,IRt),UNn(Jlt,MRt,ORt),UNn(Jlt,PRt,ORt),UNn(Jlt,PRt,ARt),UNn(Jlt,DRt,jRt),UNn(Jlt,DRt,ORt),UNn(Jlt,LRt,ERt),UNn(Jlt,LRt,ORt),UNn(Jlt,LRt,ARt),UNn(Jlt,LRt,jRt),UNn(Jlt,ERt,LRt),UNn(Jlt,ERt,NRt),UNn(Jlt,ERt,IRt),UNn(Jlt,ERt,ORt),UNn(Jlt,$Rt,$Rt),UNn(Jlt,$Rt,ARt),UNn(Jlt,$Rt,NRt),UNn(Jlt,CRt,CRt),UNn(Jlt,CRt,ARt),UNn(Jlt,CRt,IRt),UNn(Jlt,xRt,xRt),UNn(Jlt,xRt,jRt),UNn(Jlt,xRt,NRt),UNn(Jlt,TRt,TRt),UNn(Jlt,TRt,jRt),UNn(Jlt,TRt,IRt),UNn(Jlt,ARt,PRt),UNn(Jlt,ARt,LRt),UNn(Jlt,ARt,$Rt),UNn(Jlt,ARt,CRt),UNn(Jlt,ARt,ORt),UNn(Jlt,ARt,ARt),UNn(Jlt,ARt,NRt),UNn(Jlt,ARt,IRt),UNn(Jlt,jRt,DRt),UNn(Jlt,jRt,LRt),UNn(Jlt,jRt,xRt),UNn(Jlt,jRt,TRt),UNn(Jlt,jRt,jRt),UNn(Jlt,jRt,NRt),UNn(Jlt,jRt,IRt),UNn(Jlt,jRt,ORt),UNn(Jlt,NRt,RRt),UNn(Jlt,NRt,ERt),UNn(Jlt,NRt,$Rt),UNn(Jlt,NRt,xRt),UNn(Jlt,NRt,ARt),UNn(Jlt,NRt,jRt),UNn(Jlt,NRt,NRt),UNn(Jlt,NRt,ORt),UNn(Jlt,IRt,MRt),UNn(Jlt,IRt,ERt),UNn(Jlt,IRt,CRt),UNn(Jlt,IRt,TRt),UNn(Jlt,IRt,ARt),UNn(Jlt,IRt,jRt),UNn(Jlt,IRt,IRt),UNn(Jlt,IRt,ORt),UNn(Jlt,ORt,SRt),UNn(Jlt,ORt,RRt),UNn(Jlt,ORt,MRt),UNn(Jlt,ORt,PRt),UNn(Jlt,ORt,DRt),UNn(Jlt,ORt,LRt),UNn(Jlt,ORt,ERt),UNn(Jlt,ORt,ARt),UNn(Jlt,ORt,jRt),UNn(Jlt,ORt,NRt),UNn(Jlt,ORt,IRt),UNn(Jlt,ORt,ORt)}function oYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(n.d=new MO(M0n,M0n),n.c=new MO(T0n,T0n),l=t.Kc();l.Ob();)for(v=new Ww(uG(l.Pb(),36).a);v.a<v.c.c.length;)m=uG(N3(v),10),n.d.a=e.Math.min(n.d.a,m.n.a-m.d.b),n.d.b=e.Math.min(n.d.b,m.n.b-m.d.d),n.c.a=e.Math.max(n.c.a,m.n.a+m.o.a+m.d.c),n.c.b=e.Math.max(n.c.b,m.n.b+m.o.b+m.d.a);for(u=new bk,f=t.Kc();f.Ob();)r=CJn(n,uG(f.Pb(),36)),kD(u.a,r),r.a=r.a|!uG(oIn(r.c,(GYn(),xpt)),21).dc();for(n.b=(Mbn(),(j=new vt).f=new $an(i),j.b=PVn(j.f,u),j),qVn((w=n.b,new fy,w)),n.e=new sj,n.a=n.b.f.e,o=new Ww(u.a);o.a<o.c.c.length;)for(c=uG(N3(o),855),k=Q1(n.b,c),eHn(c.c,k.a,k.b),g=new Ww(c.c.a);g.a<g.c.c.length;)(d=uG(N3(g),10)).k==(zIn(),lbt)&&(p=nRn(n,d.n,uG(oIn(d,(GYn(),Fpt)),64)),JF(dL(d.n),p));for(a=new Ww(u.a);a.a<a.c.c.length;)for(h=new Ww(cgn(c=uG(N3(a),855)));h.a<h.c.c.length;)for(sR(T=new tj((s=uG(N3(h),18)).a),0,n3(s.c)),aq(T,n3(s.d)),b=null,M=Fkn(T,0);M.b!=M.d.c;)y=uG(I6(M),8),b?(xrn(b.a,y.a)?(n.e.a=e.Math.min(n.e.a,b.a),n.a.a=e.Math.max(n.a.a,b.a)):xrn(b.b,y.b)&&(n.e.b=e.Math.min(n.e.b,b.b),n.a.b=e.Math.max(n.a.b,b.b)),b=y):b=y;BR(n.e),JF(n.a,n.e)}function uYn(n,t){var e,i,r,c,a,o,u,s;if(e=0,a=0,c=t.length,o=null,s=new QM,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&(++e,++a<c&&(s3(a,t.length),43==t.charCodeAt(a)||(s3(a,t.length),45==t.charCodeAt(a)))))throw hv(new ZM(y0n+t+'"'));for(;a<c&&(s3(a,t.length),46!=t.charCodeAt(a))&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;if(s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a),a<c&&(s3(a,t.length),46==t.charCodeAt(a))){for(e=++a;a<c&&(s3(a,t.length),101!=t.charCodeAt(a))&&(s3(a,t.length),69!=t.charCodeAt(a));)++a;n.e=a-e,s.a+=""+r1(null==t?IZn:(tJ(t),t),e,a)}else n.e=0;if(a<c&&(s3(a,t.length),101==t.charCodeAt(a)||(s3(a,t.length),69==t.charCodeAt(a)))&&(e=++a,a<c&&(s3(a,t.length),43==t.charCodeAt(a))&&++a<c&&(s3(a,t.length),45!=t.charCodeAt(a))&&++e,Knn(e,c,t.length),o=t.substr(e,c-e),n.e=n.e-mUn(o,j1n,vZn),n.e!=t0(n.e)))throw hv(new ZM("Scale out of range."));if((u=s.a).length<16){if(n.f=(null==Not&&(Not=new RegExp("^[+-]?\\d*$","i")),Not.test(u)?parseInt(u,10):NaN),isNaN(n.f))throw hv(new ZM(y0n+t+'"'));n.a=VLn(n.f)}else rdn(n,new PN(u));for(n.d=s.a.length,r=0;r<s.a.length&&(45==(i=VJ(s.a,r))||48==i);++r)--n.d;0==n.d&&(n.d=1)}function sYn(n){Hxn(n.b,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentTransient"])),Hxn(n.a,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedSourceURI"])),Hxn(n.o,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures"])),Hxn(n.p,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedInstanceTypeName UniqueTypeParameterNames"])),Hxn(n.v,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueEnumeratorNames UniqueEnumeratorLiterals"])),Hxn(n.R,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedName"])),Hxn(n.T,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid"])),Hxn(n.U,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs"])),Hxn(n.W,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer"])),Hxn(n.bb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidDefaultValueLiteral"])),Hxn(n.eb,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ValidLowerBound ValidUpperBound ConsistentBounds ValidType"])),Hxn(n.H,Drt,Uhn(cT($ot,1),zZn,2,6,[Rrt,"ConsistentType ConsistentBounds ConsistentArguments"]))}function hYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(!t.dc()){if(r=new Uk,f=(a=e||uG(t.Xb(0),18)).c,uFn(),(s=f.i.k)!=(zIn(),dbt)&&s!=gbt&&s!=lbt&&s!=fbt)throw hv(new vM("The target node of the edge must be a normal node or a northSouthPort."));for(cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a]))),(KQn(),LRt).Hc(f.j)&&(b=uM(pK(oIn(f,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[f.i.n,f.n,f.a])).a,b),r.c.b,r.c)),u=null,i=!1,o=t.Kc();o.Ob();)0!=(c=uG(o.Pb(),18).a).b&&(i?(s8(r,vD(JF(u,(MK(0!=c.b),uG(c.a.a.c,8))),.5),r.c.b,r.c),i=!1):i=!0,u=D$((MK(0!=c.b),uG(c.c.b.c,8))),Qon(r,c),BY(c));l=a.d,LRt.Hc(l.j)&&(b=uM(pK(oIn(l,(GYn(),Mmt)))),s8(r,new MO(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).a,b),r.c.b,r.c)),cL(r,Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a]))),n.d==(kbn(),sEt)&&(MK(0!=r.b),w=uG(r.a.a.c,8),d=uG(hyn(r,1),8),(g=new O2(Tln(f.j))).a*=5,g.b*=5,p=YF(new MO(d.a,d.b),w),JF(m=new MO(C0(g.a,p.a),C0(g.b,p.b)),w),lW(Fkn(r,1),m),MK(0!=r.b),v=uG(r.c.b.c,8),k=uG(hyn(r,r.b-2),8),(g=new O2(Tln(l.j))).a*=5,g.b*=5,p=YF(new MO(k.a,k.b),v),JF(y=new MO(C0(g.a,p.a),C0(g.b,p.b)),v),sR(r,r.b-1,y)),h=new jqn(r),Qon(a.a,$Mn(h))}}function fYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D;if(k=(m=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),y=m.oh(),v=m.mh()/2,w=m.lh()/2,F$(m,193)&&(k+=h0(p=uG(m,123)).i,k+=h0(p).i),k+=v,y+=w,C=(S=uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)).nh(),I=S.oh(),P=S.mh()/2,M=S.lh()/2,F$(S,193)&&(C+=h0(E=uG(S,123)).i,C+=h0(E).i),C+=P,I+=M,0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),u=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),u);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(b=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));b.e!=b.i.gc();)$Sn(b);for(d=C,C>k+v?d=k+v:C<k-v&&(d=k-v),g=I,I>y+w?g=y+w:I<y-w&&(g=y-w),d>k-v&&d<k+v&&g>y-w&&g<y+w&&(d=k+v),Tcn(o=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),d),Ecn(o,g),T=k,k>C+P?T=C+P:k<C-P&&(T=C-P),j=y,y>I+M?j=I+M:y<I-M&&(j=I-M),T>C-P&&T<C+P&&j>I-M&&j<I+M&&(j=I+M),mcn(o,T),jcn(o,j),Czn((!o.a&&(o.a=new MD(eFt,o,5)),o.a)),a=iMn(t,5),m==S&&++a,A=T-d,$=j-g,h=.20000000298023224*e.Math.sqrt(A*A+$*$),L=A/(a+1),D=$/(a+1),O=d,N=g,s=0;s<a;s++)N+=D,(f=(O+=L)+uRn(t,24)*z0n*h-h/2)<0?f=1:f>i&&(f=i-1),(l=N+uRn(t,24)*z0n*h-h/2)<0?l=1:l>r&&(l=r-1),gj(),Scn(c=new ns,f),pcn(c,l),ttn((!o.a&&(o.a=new MD(eFt,o,5)),o.a),c)}function lYn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,ant),"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 _o))),U4(n,ant,R3n,1.3),U4(n,ant,d4n,(qx(),!1)),U4(n,ant,K3n,fAt),U4(n,ant,o4n,15),U4(n,ant,r9n,Jkn(WOt)),U4(n,ant,p4n,Jkn(eAt)),U4(n,ant,x4n,Jkn(rAt)),U4(n,ant,g4n,Jkn(cAt)),U4(n,ant,m4n,Jkn(tAt)),U4(n,ant,w4n,Jkn(aAt)),U4(n,ant,v4n,Jkn(lAt)),U4(n,ant,J7n,Jkn(pAt)),U4(n,ant,Y7n,Jkn(gAt)),U4(n,ant,Q7n,Jkn(vAt)),U4(n,ant,W7n,Jkn(mAt)),U4(n,ant,Z7n,Jkn(sAt)),U4(n,ant,nnt,Jkn(uAt)),U4(n,ant,tnt,Jkn(oAt)),U4(n,ant,ent,Jkn(dAt)),U4(n,ant,f4n,Jkn(YOt)),U4(n,ant,g9n,Jkn(ZOt)),U4(n,ant,z7n,Jkn(JOt)),U4(n,ant,X7n,Jkn(QOt)),U4(n,ant,V7n,Jkn(nAt)),U4(n,ant,q7n,Jkn(wAt))}function bYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(pXn(),j=n.e,w=n.d,r=n.a,0==j)switch(t){case 0:return"0";case 1:return N0n;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(M=new WM).a+=t<0?"0E+":"0E",M.a+=-t,M.a}if(k=Inn(JHt,N1n,28,1+(v=10*w+1+7),15,1),e=v,1==w)if((o=r[0])<0){C=E3(o,L0n);do{d=C,C=bSn(C,10),k[--e]=48+pz($gn(d,Ngn(C,10)))&D1n}while(0!=dwn(C,0))}else{C=o;do{d=C,C=C/10|0,k[--e]=d-10*C+48&D1n}while(0!=C)}else{qGn(r,0,S=Inn(YHt,W1n,28,w,15,1),0,P=w);n:for(;;){for(T=0,s=P-1;s>=0;s--)p=JPn(Lgn(Nz(T,32),E3(S[s],L0n))),S[s]=pz(p),T=pz($z(p,32));m=pz(T),g=e;do{k[--e]=48+m%10&D1n}while(0!=(m=m/10|0)&&0!=e);for(i=9-g+e,u=0;u<i&&e>0;u++)k[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==k[e];)++e}if(b=j<0,a=v-e-t-1,0==t)return b&&(k[--e]=45),mvn(k,e,v-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=v-1;l>=h;l--)k[l+1]=k[l];return k[++h]=46,b&&(k[--e]=45),mvn(k,e,v-e+1)}for(f=2;f<1-a;f++)k[--e]=48;return k[--e]=46,k[--e]=48,b&&(k[--e]=45),mvn(k,e,v-e)}return E=e+1,c=v,y=new QM,b&&(y.a+="-"),c-E>=1?(jQ(y,k[e]),y.a+=".",y.a+=mvn(k,e+1,v-e-1)):y.a+=mvn(k,e,v-e),y.a+="E",a>0&&(y.a+="+"),y.a+=""+a,y.a}function wYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(n.c=t,n.g=new Ym,vP(),Apn(new Ad(new Vy(n.c))),m=mK(zDn(n.c,(fIn(),dLt))),o=uG(zDn(n.c,pLt),324),k=uG(zDn(n.c,mLt),437),c=uG(zDn(n.c,hLt),490),v=uG(zDn(n.c,gLt),438),n.j=uM(pK(zDn(n.c,vLt))),a=n.a,o.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 hv(new vM(lnt+(null!=o.f?o.f:""+o.g)))}if(n.d=new i0(a,k,c),kfn(n.d,(rsn(),Oht),gK(zDn(n.c,lLt))),n.d.c=oM(gK(zDn(n.c,fLt))),0==wZ(n.c).i)return n.d;for(h=new DD(wZ(n.c));h.e!=h.i.gc();){for(l=(s=uG(Zkn(h),27)).g/2,f=s.f/2,y=new MO(s.i+l,s.j+f);PV(n.g,y);)KR(y,(e.Math.random()-.5)*t4n,(e.Math.random()-.5)*t4n);w=uG(zDn(s,(XYn(),$$t)),140),d=new G0(y,new gY(y.a-l-n.j/2-w.b,y.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),kD(n.d.i,d),vJ(n.g,y,new WO(d,s))}switch(v.g){case 0:if(null==m)n.d.d=uG(zq(n.d.i,0),68);else for(p=new Ww(n.d.i);p.a<p.c.c.length;)d=uG(N3(p),68),null!=(b=uG(uG(cQ(n.g,d.a),42).b,27).jh())&&m_(b,m)&&(n.d.d=d);break;case 1:for((i=new MO(n.c.g,n.c.f)).a*=.5,i.b*=.5,KR(i,n.c.i,n.c.j),r=M0n,g=new Ww(n.d.i);g.a<g.c.c.length;)(u=atn((d=uG(N3(g),68)).a,i))<r&&(r=u,n.d.d=d);break;default:throw hv(new vM(lnt+(null!=v.f?v.f:""+v.g)))}return n.d}function dYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(l=0,r=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));r.e!=r.i.gc();)oM(gK(zDn(i=uG(Zkn(r),27),(jYn(),FMt))))||(xA(zDn(h=R0(i),Syt))===xA((yvn(),Fjt))&&xA(zDn(h,Fyt))!==xA((kvn(),lgt))&&xA(zDn(h,Fyt))!==xA((kvn(),hgt))&&!oM(gK(zDn(h,Cyt)))&&xA(zDn(h,kyt))===xA((Uvn(),tbt))&&xA(zDn(h,yMt))!==xA((THn(),Pjt))&&xA(zDn(h,yMt))!==xA((THn(),Cjt))&&xA(zDn(h,MMt))!==xA((MKn(),JTt))&&xA(zDn(h,MMt))!==xA((MKn(),ZTt))||oM(gK(zDn(i,jyt)))||(Myn(i,(GYn(),imt),xwn(l)),++l),RJn(n,i,e));for(l=0,s=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));s.e!=s.i.gc();)o=uG(Zkn(s),74),(xA(zDn(t,(jYn(),Syt)))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&(Myn(o,(GYn(),imt),xwn(l)),++l),d=bIn(o),g=gIn(o),f=oM(gK(zDn(d,sMt))),w=!oM(gK(zDn(o,FMt))),b=f&&BNn(o)&&oM(gK(zDn(o,hMt))),c=R0(d)==t&&R0(d)==R0(g),a=(R0(d)==t&&g==t)^(R0(g)==t&&d==t),w&&!b&&(a||c)&&FYn(n,o,t,e);if(R0(t))for(u=new DD(xY(R0(t)));u.e!=u.i.gc();)(d=bIn(o=uG(Zkn(u),74)))==t&&BNn(o)&&(b=oM(gK(zDn(d,(jYn(),sMt))))&&oM(gK(zDn(o,hMt))))&&FYn(n,o,t,e)}function gYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(e.Ug("Greedy cycle removal",1),A=(v=t.a).c.length,n.a=Inn(YHt,W1n,28,A,15,1),n.c=Inn(YHt,W1n,28,A,15,1),n.b=Inn(YHt,W1n,28,A,15,1),s=0,p=new Ww(v);p.a<p.c.c.length;){for((d=uG(N3(p),10)).p=s,j=new Ww(d.j);j.a<j.c.c.length;){for(o=new Ww((y=uG(N3(j),12)).e);o.a<o.c.c.length;)(i=uG(N3(o),18)).c.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.a[s]+=S>0?S+1:1);for(a=new Ww(y.g);a.a<a.c.c.length;)(i=uG(N3(a),18)).d.i!=d&&(S=uG(oIn(i,(jYn(),aTt)),17).a,n.c[s]+=S>0?S+1:1)}0==n.c[s]?aq(n.e,d):0==n.a[s]&&aq(n.f,d),++s}for(w=-1,b=1,f=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234);A>0;){for(;0!=n.e.b;)C=uG(tG(n.e),10),n.b[C.p]=w--,eUn(n,C),--A;for(;0!=n.f.b;)I=uG(tG(n.f),10),n.b[I.p]=b++,eUn(n,I),--A;if(A>0){for(l=j1n,m=new Ww(v);m.a<m.c.c.length;)d=uG(N3(m),10),0==n.b[d.p]&&(k=n.c[d.p]-n.a[d.p])>=l&&(k>l&&(f.c.length=0,l=k),mv(f.c,d));h=n.sg(f),n.b[h.p]=b++,eUn(n,h),--A}}for(P=v.c.length+1,s=0;s<v.c.length;s++)n.b[s]<0&&(n.b[s]+=P);for(g=new Ww(v);g.a<g.c.c.length;)for(T=0,E=(M=s6((d=uG(N3(g),10)).j)).length;T<E;++T)for(c=0,u=(r=x4((y=M[T]).g)).length;c<u;++c)O=(i=r[c]).d.i.p,n.b[d.p]>n.b[O]&&(pqn(i,!0),kfn(t,Lpt,(qx(),!0)));n.a=null,n.c=null,n.b=null,BY(n.f),BY(n.e),e.Vg()}function pYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(M=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),f=new Uk,y=new Ym,T=sGn(M),VAn(y.f,M,T),b=new Ym,r=new lS,d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!t.d&&(t.d=new f_(aFt,t,8,5)),t.d),(!t.e&&(t.e=new f_(aFt,t,7,4)),t.e)])));hDn(d);){if(w=uG(N9(d),74),1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));w!=n&&(s8(r,p=uG(zrn((!w.a&&(w.a=new fV(oFt,w,6,6)),w.a),0),166),r.c.b,r.c),(g=uG(DA(FX(y.f,p)),13))||(g=sGn(p),VAn(y.f,p,g)),l=i?YF(new eN(uG(zq(T,T.c.length-1),8)),uG(zq(g,g.c.length-1),8)):YF(new eN((u3(0,T.c.length),uG(T.c[0],8))),(u3(0,g.c.length),uG(g.c[0],8))),VAn(b.f,p,l))}if(0!=r.b)for(m=uG(zq(T,i?T.c.length-1:0),8),h=1;h<T.c.length;h++){for(v=uG(zq(T,i?T.c.length-1-h:h),8),c=Fkn(r,0);c.b!=c.d.c;)p=uG(I6(c),166),(g=uG(DA(FX(y.f,p)),13)).c.length<=h?yrn(c):(k=JF(new eN(uG(zq(g,i?g.c.length-1-h:h),8)),uG(DA(FX(b.f,p)),8)),v.a==k.a&&v.b==k.b||(a=v.a-m.a,u=v.b-m.b,(o=k.a-m.a)*u==(s=k.b-m.b)*a&&(0==a||isNaN(a)?a:a<0?-1:1)==(0==o||isNaN(o)?o:o<0?-1:1)&&(0==u||isNaN(u)?u:u<0?-1:1)==(0==s||isNaN(s)?s:s<0?-1:1)?(e.Math.abs(a)<e.Math.abs(o)||e.Math.abs(u)<e.Math.abs(s))&&s8(f,v,f.c.b,f.c):h>1&&s8(f,m,f.c.b,f.c),yrn(c)));m=v}return f}function mYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(e.Ug(o7n,1),S=uG(l8(JJ(new fX(null,new h3(t,16)),new wo),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),h=uG(l8(JJ(new fX(null,new h3(t,16)),new Lp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),w=uG(l8(JJ(new fX(null,new h3(t,16)),new Ap(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),d=Inn(lPt,z9n,40,t.gc(),0,1),a=0;a<h.gc();a++)r=uG(h.Xb(a),40),(E=uG(oIn(r,(QGn(),kCt)),17).a)>=0&&E<h.gc()&&!d[E]&&(d[E]=r,h.gd(a),--a);for(o=0;o<h.gc();o++)for(r=uG(h.Xb(o),40),E=uG(oIn(r,(QGn(),kCt)),17).a,l=0;;l++){if((b=E+l)<d.length&&b>=0&&!d[b]){d[b]=r,h.gd(o),--o;break}if((b=E-l)<d.length&&b>=0&&!d[b]){d[b]=r,h.gd(o),--o;break}}for(w.jd(new go),u=d.length-1;u>=0;u--)d[u]||w.dc()||(d[u]=uG(w.Xb(0),40),w.gd(0));for(s=0;s<d.length;s++)d[s]||S.dc()||(d[s]=uG(S.Xb(0),40),S.gd(0));for(c=0;c<d.length;c++)kfn(d[c],(OQn(),KPt),xwn(c));for(T=0,j=(M=f=uG(bmn(JJ(new fX(null,new h3(t,16)),new po),new lo),534)).length;T<j;++T){for(mYn(n,i=Lhn(y=M[T]),e.eh(1/f.length|0)),hZ(),Lon(i,new Sm((OQn(),KPt))),g=new lS,k=Fkn(i,0);k.b!=k.d.c;)for(v=uG(I6(k),40),m=Fkn(y.d,0);m.b!=m.d.c;)(p=uG(I6(m),65)).c==v&&s8(g,p,g.c.b,g.c);BY(y.d),Qon(y.d,g)}e.Vg()}function vYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(i=new Zm,o=new Zm,g=t/2,b=n.gc(),r=uG(n.Xb(0),8),p=uG(n.Xb(1),8),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8))),s=2;s<b;s++)d=r,r=p,p=uG(n.Xb(s),8),kD(i,(u3(1,(w=UDn(r.a,r.b,d.a,d.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),kD(i,(u3(0,(w=UDn(r.a,r.b,p.a,p.b,g)).c.length),uG(w.c[0],8))),kD(o,(u3(1,w.c.length),uG(w.c[1],8)));for(kD(i,(u3(1,(w=UDn(p.a,p.b,r.a,r.b,g)).c.length),uG(w.c[1],8))),kD(o,(u3(0,w.c.length),uG(w.c[0],8))),e=new Uk,a=new Zm,aq(e,(u3(0,i.c.length),uG(i.c[0],8))),h=1;h<i.c.length-2;h+=2)u3(h,i.c.length),c=uG(i.c[h],8),l=OAn((u3(h-1,i.c.length),uG(i.c[h-1],8)),c,(u3(h+1,i.c.length),uG(i.c[h+1],8)),(u3(h+2,i.c.length),uG(i.c[h+2],8))),isFinite(l.a)&&isFinite(l.b)?s8(e,l,e.c.b,e.c):s8(e,c,e.c.b,e.c);for(aq(e,uG(zq(i,i.c.length-1),8)),kD(a,(u3(0,o.c.length),uG(o.c[0],8))),f=1;f<o.c.length-2;f+=2)u3(f,o.c.length),c=uG(o.c[f],8),l=OAn((u3(f-1,o.c.length),uG(o.c[f-1],8)),c,(u3(f+1,o.c.length),uG(o.c[f+1],8)),(u3(f+2,o.c.length),uG(o.c[f+2],8))),isFinite(l.a)&&isFinite(l.b)?mv(a.c,l):mv(a.c,c);for(kD(a,uG(zq(o,o.c.length-1),8)),u=a.c.length-1;u>=0;u--)aq(e,(u3(u,a.c.length),uG(a.c[u],8)));return e}function kYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(v=uM(pK(zDn(t,(lBn(),POt)))),b=uM(pK(zDn(t,EOt))),l=uM(pK(zDn(t,MOt))),Non((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a)),p=ozn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),v,n.b),g=0;g<p.c.length;g++)if(u3(g,p.c.length),s=uG(p.c[g],186),0!=g&&(u3(g-1,p.c.length),Rbn(s,(w=uG(p.c[g-1],186)).f+w.b+n.b)),d=TYn(g,p,v,n.b,oM(gK(zDn(t,(S_n(),uAt))))),oM(gK(d.b))){for(a=new Ww(s.a);a.a<a.c.c.length;)(c=uG(N3(a),172)).c=!1,c.k=!1,EXn(c);s.d=new Zm,s.e=v,--g}else if(EEn(n,s),g+1<p.c.length&&(n.e=e.Math.max(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.c),n.f=e.Math.min(s.e+n.b+uG(zq((u3(g+1,p.c.length),uG(p.c[g+1],186)).a,0),172).r-v,n.d),0!=s.d.c.length&&(n.c=e.Math.max(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)),n.d=e.Math.min(n.c,uG(zq(s.d,s.d.c.length-1),315).d+(s.d.c.length<=1?0:n.b)))),1==p.c.length)for(f=uG(zq(s.d,s.d.c.length-1),315),u=new Ww((h=uG(zq(f.a,f.a.c.length-1),172)).n);u.a<u.c.c.length;)o=uG(N3(u),209),n.c=e.Math.max(n.c,h.r-o.d),n.d=e.Math.min(n.d,h.r-o.d),n.e=e.Math.max(n.e,o.d+n.b),n.f=e.Math.min(n.f,o.d+n.b);return m=Xjn(p,n.b),k=e.Math.max(m.a,b-(i.b+i.c)),r=e.Math.max(m.b,l-(i.d+i.a))-m.b,Myn(t,pOt,r),Myn(t,SOt,p),new jq(n.a,k,m.b+r,(_Rn(),FAt))}function yYn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P;if((M=uG(oIn(n,(jYn(),JMt)),101))!=($Pn(),uRt)&&M!=sRt){for(s=new R7((man((b=(w=n.b).c.length)+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),d=new R7((man(b+2,v1n),arn(Lgn(Lgn(5,b+2),(b+2)/10|0)))),kD(s,new Ym),kD(s,new Ym),kD(d,new Zm),kD(d,new Zm),y=new Zm,t=0;t<b;t++)for(u3(t,w.c.length),e=uG(w.c[t],30),u3(t,s.c.length),T=uG(s.c[t],85),g=new Ym,mv(s.c,g),u3(t,d.c.length),E=uG(d.c[t],15),m=new Zm,mv(d.c,m),r=new Ww(e.a);r.a<r.c.c.length;)if(Tdn(i=uG(N3(r),10)))mv(y.c,i);else{for(u=new Fz(ix(qgn(i).a.Kc(),new h));hDn(u);)Tdn(S=(a=uG(N9(u),18)).c.i)&&((j=uG(T.xc(oIn(S,(GYn(),rmt))),10))||(j=YLn(n,S),T.zc(oIn(S,rmt),j),E.Fc(j)),c2(a,uG(zq(j.j,1),12)));for(o=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(o);)Tdn(P=(a=uG(N9(o),18)).d.i)&&((p=uG(cQ(g,oIn(P,(GYn(),rmt))),10))||(p=YLn(n,P),vJ(g,oIn(P,rmt),p),mv(m.c,p)),u2(a,uG(zq(p.j,0),12)))}for(f=0;f<d.c.length;f++)if(u3(f,d.c.length),!(v=uG(d.c[f],15)).dc())for(l=null,0==f?(l=new bQ(n),o3(0,w.c.length),pC(w.c,0,l)):f==s.c.length-1?(l=new bQ(n),mv(w.c,l)):(u3(f-1,w.c.length),l=uG(w.c[f-1],30)),c=v.Kc();c.Ob();)a2(uG(c.Pb(),10),l);for(k=new Ww(y);k.a<k.c.c.length;)a2(uG(N3(k),10),null);kfn(n,(GYn(),Rpt),y)}}function MYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L;for(O=new Zm,w=new Ww(t.b);w.a<w.c.c.length;)for(y=new Ww(uG(N3(w),30).a);y.a<y.c.c.length;){for((k=uG(N3(y),10)).p=-1,l=j1n,j=j1n,S=new Ww(k.j);S.a<S.c.c.length;){for(c=new Ww((E=uG(N3(S),12)).e);c.a<c.c.c.length;)i=uG(N3(c),18),P=uG(oIn(i,(jYn(),uTt)),17).a,l=e.Math.max(l,P);for(r=new Ww(E.g);r.a<r.c.c.length;)i=uG(N3(r),18),P=uG(oIn(i,(jYn(),uTt)),17).a,j=e.Math.max(j,P)}kfn(k,iSt,xwn(l)),kfn(k,rSt,xwn(j))}for(p=0,b=new Ww(t.b);b.a<b.c.c.length;)for(y=new Ww(uG(N3(b),30).a);y.a<y.c.c.length;)(k=uG(N3(y),10)).p<0&&((I=new Tk).b=p++,yBn(n,k,I),mv(O.c,I));for(T=iR(O.c.length),f=iR(O.c.length),o=0;o<O.c.length;o++)kD(T,new Zm),kD(f,xwn(0));for($Wn(t,O,T,f),A=uG(Ekn(O,Inn(oSt,C9n,261,O.c.length,0,1)),854),M=uG(Ekn(T,Inn(yat,H3n,15,T.c.length,0,1)),198),h=Inn(YHt,W1n,28,f.c.length,15,1),u=0;u<h.length;u++)h[u]=(u3(u,f.c.length),uG(f.c[u],17)).a;for(m=0,v=new Zm,s=0;s<A.length;s++)0==h[s]&&mv(v.c,A[s]);for(g=Inn(YHt,W1n,28,A.length,15,1);0!=v.c.length;)for(g[(I=uG(i7(v,0),261)).b]=m++;!M[I.b].dc();)--h[(L=uG(M[I.b].gd(0),261)).b],0==h[L.b]&&mv(v.c,L);for(n.a=Inn(oSt,C9n,261,A.length,0,1),a=0;a<A.length;a++)for(d=A[a],C=g[a],n.a[C]=d,d.b=C,y=new Ww(d.e);y.a<y.c.c.length;)(k=uG(N3(y),10)).p=C;return n.a}function TYn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p;for(d=!1,u=!1,l=n+1,u3(n,t.c.length),o=(w=uG(t.c[n],186)).a,s=null,a=0;a<w.a.c.length;a++)if(u3(a,o.c.length),!(c=uG(o.c[a],172)).c)if(0!=c.b.c.length){if(c.k||(s&&OTn(s),oMn(c,(s=new r0(s?s.e+s.d+i:0,w.f,i)).e+s.d,w.f),kD(w.d,s),Gun(s,c),c.k=!0),h=null,p=null,a<w.a.c.length-1?p=uG(zq(w.a,a+1),172):l<t.c.length&&0!=(u3(l,t.c.length),uG(t.c[l],186)).a.c.length&&(p=uG(zq((u3(l,t.c.length),uG(t.c[l],186)).a,0),172)),g=!1,(h=p)&&(g=!udn(h.j,w)),h){if(0==h.b.c.length||oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))){uEn(w,h);break}if(dtn(c,e-c.s),OTn(c.q),d|=FIn(w,c,h,e,i),0==h.b.c.length)for(t.c.length>l&&uEn((u3(l,t.c.length),uG(t.c[l],186)),h),h=null;t.c.length>l&&0==(u3(l,t.c.length),uG(t.c[l],186)).a.c.length;)men(t,(u3(l,t.c.length),t.c[l]));if(!h){--a;continue}if(!oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))&&BUn(t,w,c,h,g,e,l,i)){d=!0;continue}if(g){if(b=w.b,f=h.f,!oM(gK(uG(zq(h.b,0),27).of(nAt)))&&EVn(t,w,c,h,e,l,i,r)){if(d=!0,b<f){u=!0,h.j=w;break}continue}if(Ybn(w,c)){c.c=!0,d=!0;continue}}else if(Ybn(w,c)){c.c=!0,d=!0;continue}if(d)continue}Ybn(w,c)?(c.c=!0,d=!0,h&&(h.k=!1)):OTn(c.q)}else bS(),String.fromCharCode(10),uEn(w,c),--a,d=!0;return new WO((qx(),!!d),!!u)}function jYn(){jYn=E,XYn(),lTt=jDt,bTt=EDt,wTt=SDt,dTt=PDt,pTt=CDt,mTt=IDt,yTt=ADt,TTt=NDt,jTt=$Dt,MTt=LDt,ETt=DDt,PTt=xDt,ITt=FDt,kTt=ODt,VYn(),fTt=Akt,gTt=Lkt,vTt=Nkt,STt=$kt,cTt=new _N(vDt,xwn(0)),aTt=Ckt,oTt=Ikt,uTt=Okt,qTt=ryt,RTt=Rkt,KTt=_kt,BTt=Vkt,FTt=Ukt,_Tt=qkt,zTt=syt,XTt=ayt,UTt=nyt,HTt=Ykt,GTt=eyt,LMt=vkt,NMt=kkt,Zyt=Ovt,nMt=Nvt,NTt=HDt,DTt=XDt,LTt=BDt,ATt=_Dt,Iwn(),new _N(UDt,$Tt=fKt),BMt=new CN(12),_Mt=new _N(W$t,BMt),_gn(),Vyt=new _N(k$t,Wyt=uxt),QMt=new _N(uDt,0),sTt=new _N(kDt,xwn(1)),dyt=new _N(c$t,r4n),FMt=z$t,JMt=sDt,eTt=gDt,_yt=w$t,byt=i$t,rMt=E$t,hTt=new _N(TDt,(qx(),!0)),sMt=C$t,hMt=I$t,DMt=_$t,KMt=q$t,xMt=H$t,xdn(),Byt=new _N(d$t,Uyt=ZDt),PMt=K$t,SMt=x$t,nTt=bDt,ZMt=lDt,tTt=dDt,Vkn(),new _N(tDt,GMt=tRt),XMt=rDt,zMt=cDt,VMt=aDt,qMt=iDt,xTt=xkt,MMt=rkt,yMt=ekt,OTt=Dkt,gMt=Vvt,Fyt=gvt,Kyt=wvt,Cyt=Jmt,Iyt=Ymt,Ayt=ivt,Oyt=Zmt,Ryt=lvt,jMt=akt,EMt=okt,lMt=Bvt,$Mt=jkt,IMt=fkt,eMt=xvt,AMt=pkt,Jyt=Svt,Yyt=Cvt,Pyt=l$t,CMt=ukt,vyt=Fmt,myt=Rmt,pyt=xmt,aMt=Fvt,cMt=Kvt,oMt=_vt,RMt=U$t,bMt=L$t,tMt=M$t,Xyt=m$t,qyt=p$t,Lyt=avt,YMt=fDt,gyt=f$t,uMt=P$t,WMt=oDt,HMt=J$t,UMt=Z$t,mMt=Jvt,vMt=Zvt,rTt=mDt,wyt=Dmt,kMt=tkt,zyt=Mvt,Gyt=kvt,TMt=$$t,wMt=qvt,OMt=wkt,CTt=RDt,Hyt=mvt,iTt=Skt,Qyt=jvt,Nyt=uvt,$yt=svt,dMt=zvt,Dyt=hvt,fMt=A$t,pMt=Qvt,xyt=fvt,Syt=Wmt,Tyt=qmt,yyt=Umt,Myt=Gmt,jyt=zmt,kyt=Bmt,Eyt=Vmt,iMt=Rvt}function EYn(n){var t,e,i;if(n.d>=n.j)return n.a=-1,void(n.c=1);if(t=VJ(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!=VJ(n.i,n.d))break;if(++n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));switch(t=VJ(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 hv(new CM(rZn((t$(),iit))));if(61==(t=VJ(n.i,n.d++)))i=16;else{if(33!=t)throw hv(new CM(rZn((t$(),rit))));i=17}break;case 35:for(;n.d<n.j&&41!=(t=VJ(n.i,n.d++)););if(41!=t)throw hv(new CM(rZn((t$(),cit))));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 hv(new CM(rZn((t$(),iit))))}break;case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;case 45:!(512&~n.e)&&n.d<n.j&&91==VJ(n.i,n.d)?(++n.d,i=24):i=0;break;case 91:if(512&~n.e&&n.d<n.j&&58==VJ(n.i,n.d)){++n.d,i=20;break}default:(64512&t)==C0n&&n.d<n.j&&56320==(64512&(e=VJ(n.i,n.d)))&&(n.a=P0n+(t-C0n<<10)+e-56320,++n.d),i=0}n.c=i}}function SYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(e.Ug("Process compaction",1),oM(gK(oIn(t,(QGn(),iCt))))){for(r=uG(oIn(t,cCt),88),b=uM(pK(oIn(t,ECt))),AXn(n,t,r),fJn(t,b/2/2),Lon(w=t.b,new jp(r)),s=Fkn(w,0);s.b!=s.d.c;)if(!oM(gK(oIn(u=uG(I6(s),40),(OQn(),UPt))))){if(i=hBn(u,r),d=mqn(u,t),f=0,l=0,i)switch(g=i.e,r.g){case 2:f=g.a-b-u.f.a,d.e.a-b-u.f.a<f&&(f=d.e.a-b-u.f.a),l=f+u.f.a;break;case 1:f=g.a+i.f.a+b,d.e.a+b>f&&(f=d.e.a+d.f.a+b),l=f+u.f.a;break;case 4:f=g.b-b-u.f.b,d.e.b-b-u.f.b<f&&(f=d.e.b-b-u.f.b),l=f+u.f.b;break;case 3:f=g.b+i.f.b+b,d.e.b+b>f&&(f=d.e.b+d.f.b+b),l=f+u.f.b}else if(d)switch(r.g){case 2:l=(f=d.e.a-b-u.f.a)+u.f.a;break;case 1:l=(f=d.e.a+d.f.a+b)+u.f.a;break;case 4:l=(f=d.e.b-b-u.f.b)+u.f.b;break;case 3:l=(f=d.e.b+d.f.b+b)+u.f.b}xA(oIn(t,uCt))===xA((Pln(),wPt))?(c=f,a=l,null!=(o=lln(JJ(new fX(null,new h3(n.a,16)),new GI(c,a)))).a?r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f:null!=(o=r==(xdn(),JDt)||r==nxt?lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Ep(c))):lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Sp(c)))).a&&(r==JDt||r==YDt?u.e.a=uM(pK((MK(null!=o.a),uG(o.a,42)).a)):u.e.b=uM(pK((MK(null!=o.a),uG(o.a,42)).a))),null!=o.a&&(h=Ten(n.a,(MK(null!=o.a),o.a),0))>0&&h!=uG(oIn(u,ACt),17).a&&(kfn(u,MPt,(qx(),!0)),kfn(u,ACt,xwn(h)))):r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f}e.Vg()}}function PYn(n){var t,e,i,r,c,a,o,u;for(n.b=1,EYn(n),t=null,0==n.c&&94==n.a?(EYn(n),QYn(),QYn(),HFn(t=new K3(4),0,zct),a=new K3(4)):(QYn(),QYn(),a=new K3(4)),r=!0;1!=(u=n.c);){if(0==u&&93==n.a&&!r){t&&(lWn(t,a),a=t);break}if(e=n.a,i=!1,10==u)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(a,yUn(e)),i=!0;break;case 105:case 73:case 99:case 67:TXn(a,yUn(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(o=PNn(n,e)))throw hv(new CM(rZn((t$(),git))));TXn(a,o),i=!0;break;default:e=R_n(n)}else if(24==u&&!r){if(t&&(lWn(t,a),a=t),lWn(a,PYn(n)),0!=n.c||93!=n.a)throw hv(new CM(rZn((t$(),kit))));break}if(EYn(n),!i){if(0==u){if(91==e)throw hv(new CM(rZn((t$(),yit))));if(93==e)throw hv(new CM(rZn((t$(),Mit))));if(45==e&&!r&&93!=n.a)throw hv(new CM(rZn((t$(),Tit))))}if(0!=n.c||45!=n.a||45==e&&r)HFn(a,e,e);else{if(EYn(n),1==(u=n.c))throw hv(new CM(rZn((t$(),mit))));if(0==u&&93==n.a)HFn(a,e,e),HFn(a,45,45);else{if(0==u&&93==n.a||24==u)throw hv(new CM(rZn((t$(),Tit))));if(c=n.a,0==u){if(91==c)throw hv(new CM(rZn((t$(),yit))));if(93==c)throw hv(new CM(rZn((t$(),Mit))));if(45==c)throw hv(new CM(rZn((t$(),Tit))))}else 10==u&&(c=R_n(n));if(EYn(n),e>c)throw hv(new CM(rZn((t$(),Sit))));HFn(a,e,c)}}}r=!1}if(1==n.c)throw hv(new CM(rZn((t$(),mit))));return pxn(a),uzn(a),n.b=0,EYn(n),a}function CYn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;if(e.Ug("Coffman-Graham Layering",1),0!=t.a.c.length){for(M=uG(oIn(t,(jYn(),wMt)),17).a,u=0,a=0,b=new Ww(t.a);b.a<b.c.c.length;)for((l=uG(N3(b),10)).p=u++,c=new Fz(ix(Xgn(l).a.Kc(),new h));hDn(c);)(r=uG(N9(c),18)).p=a++;for(n.d=Inn(ZHt,B2n,28,u,16,1),n.a=Inn(ZHt,B2n,28,a,16,1),n.b=Inn(YHt,W1n,28,u,15,1),n.e=Inn(YHt,W1n,28,u,15,1),n.f=Inn(YHt,W1n,28,u,15,1),ban(n.c),BSn(n,t),d=new Kz(new Bg(n)),y=new Ww(t.a);y.a<y.c.c.length;){for(c=new Fz(ix(qgn(v=uG(N3(y),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.b[v.p];0==n.b[v.p]&&kG(_Cn(d,v),D0n)}for(o=0;0!=d.b.c.length;)for(v=uG(hin(d),10),n.f[v.p]=o++,c=new Fz(ix(Xgn(v).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(p=r.d.i,--n.b[p.p],UNn(n.c,p,xwn(n.f[v.p])),0==n.b[p.p]&&kG(_Cn(d,p),D0n));for(w=new Kz(new Hg(n)),k=new Ww(t.a);k.a<k.c.c.length;){for(c=new Fz(ix(Xgn(v=uG(N3(k),10)).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||++n.e[v.p];0==n.e[v.p]&&kG(_Cn(w,v),D0n)}for(i=CJ(t,f=new Zm);0!=w.b.c.length;)for(m=uG(hin(w),10),(i.a.c.length>=M||!cvn(m,i))&&(i=CJ(t,f)),a2(m,i),c=new Fz(ix(qgn(m).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&kG(_Cn(w,g),D0n));for(s=f.c.length-1;s>=0;--s)kD(t.b,(u3(s,f.c.length),uG(f.c[s],30)));t.a.c.length=0,e.Vg()}else e.Vg()}function IYn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;k=!1;do{for(k=!1,c=t?new Lw(n.a.b).a.gc()-2:1;t?c>=0:c<new Lw(n.a.b).a.gc();c+=t?-1:1)for(r=W6(n.a,xwn(c)),b=0;b<r.b;b++)if(vR(f=uG(hyn(r,b),10),(GYn(),imt))&&!(VSn(n.a,xwn(c))&&n.r==(THn(),Pjt)||WSn(n.a,xwn(c))&&n.r==(THn(),Cjt))){for(v=!0,p=0;p<r.b;p++)vR(g=uG(hyn(r,p),10),imt)&&(t&&uG(oIn(f,imt),17).a<uG(oIn(g,imt),17).a||!t&&uG(oIn(f,imt),17).a>uG(oIn(g,imt),17).a)&&(v=!1);if(v){for(o=t?c+1:c-1,a=!1,m=!0,i=!1,s=Fkn(W6(n.a,xwn(o)),0);s.b!=s.d.c;)vR(u=uG(I6(s),10),imt)?u.p!=f.p&&(a|=t?uG(oIn(u,imt),17).a<uG(oIn(f,imt),17).a:uG(oIn(u,imt),17).a>uG(oIn(f,imt),17).a,m=!1):!a&&m&&u.k==(zIn(),bbt)&&(i=!0,(l=t?uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i:uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i)==f&&(e=t?uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,l),17).a:uG(ER(n.a,l),17).a-uG(ER(n.a,e),17).a)<=2&&(m=!1)));if(i&&m&&(e=t?uG(N9(new Fz(ix(Xgn(f).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(f).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,f),17).a:uG(ER(n.a,f),17).a-uG(ER(n.a,e),17).a)<=2&&e.k==(zIn(),dbt)&&(m=!1)),a||m){for(d=SRn(n,f,t);0!=d.a.gc();)w=uG(d.a.ec().Kc().Pb(),10),d.a.Bc(w),Qon(d,SRn(n,w,t));--b,k=!0}}}}while(k)}function OYn(n){Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#decimal"])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#integer"])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#boolean"])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EBoolean",Bet,"EBoolean:Object"])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#byte"])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EByte",Bet,"EByte:Object"])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EChar",Bet,"EChar:Object"])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#double"])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EDouble",Bet,"EDouble:Object"])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#float"])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EFloat",Bet,"EFloat:Object"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#int"])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EInt",Bet,"EInt:Object"])),Hxn(n.N,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#long"])),Hxn(n.O,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"ELong",Bet,"ELong:Object"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#short"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EShort",Bet,"EShort:Object"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#string"]))}function AYn(n,t,e,i,r,c,a){var o,u,s,h,f,l,b,w;return l=uG(i.a,17).a,b=uG(i.b,17).a,f=n.b,w=n.c,o=0,h=0,t==(xdn(),JDt)||t==YDt?(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new mo),new Ya))),f.e.b+f.f.b/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new pO(r,s)),new Za))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new mO(r,u)),new no)))))):(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new ro),new Ja))),f.e.a+f.f.a/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new dO(r,s)),new to))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new gO(r,u)),new eo)))))),t==JDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),DPt))))-r,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a+w.f.a,w.e.b+w.f.b/2))):t==YDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),$Pt))))+r,f.e.b+f.f.b/2)),cL(n.a,new MO(f.e.a+f.f.a+r,o)),cL(n.a,new MO(w.e.a-r-c,o)),cL(n.a,new MO(w.e.a-r-c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a,w.e.b+w.f.b/2))):t==nxt?(cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),DPt))))-r)),cL(n.a,new MO(o,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r))):(0==n.a.b||(uG(pR(n.a),8).b=uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a),cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a)),cL(n.a,new MO(o,w.e.b-r*uG(a.a,17).a-c))),new WO(xwn(l),xwn(b))}function LYn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=HFt,s=null,c=null,(u=jkn(n,o=0,YFt,ZFt))<n.length&&(s3(u,n.length),58==n.charCodeAt(u))&&(Knn(o,u,n.length),f=n.substr(o,u-o),o=u+1),e=null!=f&&ZE(UFt,f.toLowerCase())){if(-1==(u=n.lastIndexOf("!/")))throw hv(new vM("no archive separator"));a=!0,i=r1(n,o,++u),o=u}else o>=0&&m_(n.substr(o,2),"//")?(Knn(o+=2,u=jkn(n,o,n_t,t_t),n.length),i=n.substr(o,u-o),o=u):null==f||o!=n.length&&(s3(o,n.length),47==n.charCodeAt(o))||(a=!1,-1==(u=cx(n,$Cn(35),o))&&(u=n.length),Knn(o,u,n.length),i=n.substr(o,u-o),o=u);if(!e&&o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Knn(o+1,u=jkn(n,o+1,n_t,t_t),n.length),(h=n.substr(o+1,u-(o+1))).length>0&&58==VJ(h,h.length-1)&&(r=h,o=u)),o<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(++o,t=!0),o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o))){for(l=new Zm;o<n.length&&(s3(o,n.length),63!=n.charCodeAt(o))&&(s3(o,n.length),35!=n.charCodeAt(o));)kD(l,(Knn(o,u=jkn(n,o,n_t,t_t),n.length),n.substr(o,u-o))),(o=u)<n.length&&(s3(o,n.length),47==n.charCodeAt(o))&&(Ubn(n,++o)||l.c.push(""));Ekn(l,b=Inn($ot,zZn,2,l.c.length,6,1))}return o<n.length&&(s3(o,n.length),63==n.charCodeAt(o))&&(-1==(u=aR(n,35,++o))&&(u=n.length),Knn(o,u,n.length),s=n.substr(o,u-o),o=u),o<n.length&&(c=sQ(n,++o)),LVn(a,f,i,r,b,s),new Z_n(a,f,i,r,t,b,s,c)}function NYn(){NYn=E,aYn(),UNn(rbt=new K1,(KQn(),PRt),SRt),UNn(rbt,RRt,SRt),UNn(rbt,CRt,SRt),UNn(rbt,$Rt,SRt),UNn(rbt,NRt,SRt),UNn(rbt,ARt,SRt),UNn(rbt,$Rt,PRt),UNn(rbt,SRt,MRt),UNn(rbt,PRt,MRt),UNn(rbt,RRt,MRt),UNn(rbt,CRt,MRt),UNn(rbt,LRt,MRt),UNn(rbt,$Rt,MRt),UNn(rbt,NRt,MRt),UNn(rbt,ARt,MRt),UNn(rbt,ERt,MRt),UNn(rbt,SRt,DRt),UNn(rbt,PRt,DRt),UNn(rbt,MRt,DRt),UNn(rbt,RRt,DRt),UNn(rbt,CRt,DRt),UNn(rbt,LRt,DRt),UNn(rbt,$Rt,DRt),UNn(rbt,ERt,DRt),UNn(rbt,xRt,DRt),UNn(rbt,NRt,DRt),UNn(rbt,IRt,DRt),UNn(rbt,ARt,DRt),UNn(rbt,PRt,RRt),UNn(rbt,CRt,RRt),UNn(rbt,$Rt,RRt),UNn(rbt,ARt,RRt),UNn(rbt,PRt,CRt),UNn(rbt,RRt,CRt),UNn(rbt,$Rt,CRt),UNn(rbt,CRt,CRt),UNn(rbt,NRt,CRt),UNn(rbt,SRt,TRt),UNn(rbt,PRt,TRt),UNn(rbt,MRt,TRt),UNn(rbt,DRt,TRt),UNn(rbt,RRt,TRt),UNn(rbt,CRt,TRt),UNn(rbt,LRt,TRt),UNn(rbt,$Rt,TRt),UNn(rbt,xRt,TRt),UNn(rbt,ERt,TRt),UNn(rbt,ARt,TRt),UNn(rbt,NRt,TRt),UNn(rbt,ORt,TRt),UNn(rbt,SRt,xRt),UNn(rbt,PRt,xRt),UNn(rbt,MRt,xRt),UNn(rbt,RRt,xRt),UNn(rbt,CRt,xRt),UNn(rbt,LRt,xRt),UNn(rbt,$Rt,xRt),UNn(rbt,ERt,xRt),UNn(rbt,ARt,xRt),UNn(rbt,IRt,xRt),UNn(rbt,ORt,xRt),UNn(rbt,PRt,ERt),UNn(rbt,RRt,ERt),UNn(rbt,CRt,ERt),UNn(rbt,$Rt,ERt),UNn(rbt,xRt,ERt),UNn(rbt,ARt,ERt),UNn(rbt,NRt,ERt),UNn(rbt,SRt,jRt),UNn(rbt,PRt,jRt),UNn(rbt,MRt,jRt),UNn(rbt,RRt,jRt),UNn(rbt,CRt,jRt),UNn(rbt,LRt,jRt),UNn(rbt,$Rt,jRt),UNn(rbt,ERt,jRt),UNn(rbt,ARt,jRt),UNn(rbt,PRt,NRt),UNn(rbt,MRt,NRt),UNn(rbt,DRt,NRt),UNn(rbt,CRt,NRt),UNn(rbt,SRt,IRt),UNn(rbt,PRt,IRt),UNn(rbt,DRt,IRt),UNn(rbt,RRt,IRt),UNn(rbt,CRt,IRt),UNn(rbt,LRt,IRt),UNn(rbt,$Rt,IRt),UNn(rbt,$Rt,ORt),UNn(rbt,CRt,ORt),UNn(rbt,ERt,SRt),UNn(rbt,ERt,RRt),UNn(rbt,ERt,MRt),UNn(rbt,LRt,SRt),UNn(rbt,LRt,PRt),UNn(rbt,LRt,DRt)}function $Yn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(e.Ug("Brandes & Koepf node placement",1),n.a=t,n.c=ZGn(t),i=uG(oIn(t,(jYn(),IMt)),281),b=oM(gK(oIn(t,OMt))),n.d=i==(ESn(),Fgt)&&!b||i==xgt,mVn(n,t),k=null,y=null,g=null,p=null,man(4,g1n),d=new R7(4),uG(oIn(t,IMt),281).g){case 3:g=new VHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),mv(d.c,g);break;case 1:p=new VHn(t,n.c.d,(w0(),dSt),(b0(),hSt)),mv(d.c,p);break;case 4:k=new VHn(t,n.c.d,(w0(),wSt),(b0(),fSt)),mv(d.c,k);break;case 2:y=new VHn(t,n.c.d,(w0(),dSt),(b0(),fSt)),mv(d.c,y);break;default:g=new VHn(t,n.c.d,(w0(),wSt),(b0(),hSt)),p=new VHn(t,n.c.d,dSt,hSt),k=new VHn(t,n.c.d,wSt,fSt),y=new VHn(t,n.c.d,dSt,fSt),mv(d.c,k),mv(d.c,y),mv(d.c,g),mv(d.c,p)}for(r=new LI(t,n.c),o=new Ww(d);o.a<o.c.c.length;)dJn(r,c=uG(N3(o),185),n.b),oXn(c);for(l=new xjn(t,n.c),u=new Ww(d);u.a<u.c.c.length;)HVn(l,c=uG(N3(u),185));if(e._g())for(s=new Ww(d);s.a<s.c.c.length;)c=uG(N3(s),185),e.bh(c+" size is "+uxn(c));if(f=null,n.d&&qqn(t,h=cJn(n,d,n.c.d),e)&&(f=h),!f)for(s=new Ww(d);s.a<s.c.c.length;)qqn(t,c=uG(N3(s),185),e)&&(!f||uxn(f)>uxn(c))&&(f=c);for(!f&&(u3(0,d.c.length),f=uG(d.c[0],185)),w=new Ww(t.b);w.a<w.c.c.length;)for(v=new Ww(uG(N3(w),30).a);v.a<v.c.c.length;)(m=uG(N3(v),10)).n.b=uM(f.p[m.p])+uM(f.d[m.p]);for(e._g()&&(e.bh("Chosen node placement: "+f),e.bh("Blocks: "+O$n(f)),e.bh("Classes: "+$Dn(f,e)),e.bh("Marked edges: "+n.b)),a=new Ww(d);a.a<a.c.c.length;)(c=uG(N3(a),185)).g=null,c.b=null,c.a=null,c.d=null,c.j=null,c.i=null,c.p=null;J6(n.c),n.b.a.$b(),e.Vg()}function DYn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(1==n.c.length)return ySn((u3(0,n.c.length),uG(n.c[0],121))),u3(0,n.c.length),uG(n.c[0],121);if(n.c.length<=0)return new L7;for(s=new Ww(n);s.a<s.c.c.length;){for(o=uG(N3(s),121),v=0,d=vZn,g=vZn,b=j1n,w=j1n,m=Fkn(o.b,0);m.b!=m.d.c;)p=uG(I6(m),40),v+=uG(oIn(p,(QGn(),yCt)),17).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);kfn(o,(QGn(),yCt),xwn(v)),kfn(o,(OQn(),kPt),new MO(d,g)),kfn(o,vPt,new MO(b,w))}for(hZ(),f$(n,new Ta),zsn(y=new L7,(u3(0,n.c.length),uG(n.c[0],96))),l=0,S=0,h=new Ww(n);h.a<h.c.c.length;)o=uG(N3(h),121),M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8)),l=e.Math.max(l,M.a),S+=M.a*M.b;for(l=e.Math.max(l,e.Math.sqrt(S)*uM(pK(oIn(y,(QGn(),eCt))))),P=0,C=0,f=0,t=T=uM(pK(oIn(y,ECt))),u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),121),P+(M=YF(D$(uG(oIn(o,(OQn(),vPt)),8)),uG(oIn(o,kPt),8))).a>l&&(P=0,C+=f+T,f=0),iUn(y,o,P,C),t=e.Math.max(t,P+M.a),f=e.Math.max(f,M.b),P+=M.a+T;for(k=new Ym,i=new Ym,E=new Ww(n);E.a<E.c.c.length;)for(r=oM(gK(oIn(j=uG(N3(E),121),(XYn(),w$t)))),a=(j.q?j.q:Vot).vc().Kc();a.Ob();)PV(k,(c=uG(a.Pb(),44)).ld())?xA(uG(c.ld(),149).Sg())!==xA(c.md())&&(r&&PV(i,c.ld())?(bS(),uG(c.ld(),149).Pg(),String.fromCharCode(10)):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()),r&&vJ(i,uG(c.ld(),149),c.md()))):(vJ(k,uG(c.ld(),149),c.md()),kfn(y,uG(c.ld(),149),c.md()));return ySn(y),y}function xYn(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 yZ(n.b,n.a,t,n.c);case 1:return new TD(n.a,t,emn(t.Dh(),n.c));case 43:return new CD(n.a,t,emn(t.Dh(),n.c));case 3:return new MD(n.a,t,emn(t.Dh(),n.c));case 45:return new PD(n.a,t,emn(t.Dh(),n.c));case 41:return new ltn(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 50:return new xan(uG(bEn(n.c),29),n.a,t,emn(t.Dh(),n.c));case 5:return new r_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 47:return new c_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 7:return new fV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 49:return new i_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 9:return new SD(n.a,t,emn(t.Dh(),n.c));case 11:return new ED(n.a,t,emn(t.Dh(),n.c));case 13:return new jD(n.a,t,emn(t.Dh(),n.c));case 15:return new _G(n.a,t,emn(t.Dh(),n.c));case 17:return new AD(n.a,t,emn(t.Dh(),n.c));case 19:return new OD(n.a,t,emn(t.Dh(),n.c));case 21:return new ID(n.a,t,emn(t.Dh(),n.c));case 23:return new FG(n.a,t,emn(t.Dh(),n.c));case 25:return new l_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 27:return new f_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 29:return new s_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 31:return new a_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 33:return new h_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 35:return new u_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 37:return new o_(n.a,t,emn(t.Dh(),n.c),n.d.n);case 39:return new wV(n.a,t,emn(t.Dh(),n.c),n.d.n);case 40:return new wsn(t,emn(t.Dh(),n.c));default:throw hv(new Ky("Unknown feature style: "+n.e))}}function RYn(n){var t,e,i,r,c,a,o,u;for(c=0,r=n.a.b,u=Fkn(n.a,0);u.b!=u.d.c;){if(o=uG(I6(u),240),a=(c+1)/(r+1),!n.c&&!n.d)return;n.c&&!n.d?(n.g=!0,n.b==(xdn(),JDt)?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.c.e.b+n.c.f.b+n.e*(c+1),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.c.e.a+n.c.f.a+n.e*(c+1),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e))):n.c&&n.d?n.b==(xdn(),JDt)?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.c,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b*a+(n.c.e.b+n.c.f.b)*(1-a),t=new MO(uM(pK(oIn(n.c,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.c,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.c,DPt)))-n.e)):(t=new MO(i=n.d.e.a*a+(n.c.e.a+n.c.f.a)*(1-a),uM(pK(oIn(n.c,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.c,$Pt)))+n.e)):(n.f=!0,n.b==(xdn(),JDt)?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e,i),e=new MO(uM(pK(oIn(n.d,DPt)))-n.e,i)):n.b==YDt?(i=n.d.e.b-n.e*(c+1),t=new MO(uM(pK(oIn(n.d,(OQn(),DPt))))-n.e,i),e=new MO(uM(pK(oIn(n.d,$Pt)))+n.e,i)):n.b==nxt?(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),$Pt))))+n.e),e=new MO(i,uM(pK(oIn(n.d,DPt)))-n.e)):(t=new MO(i=n.d.e.a-n.e*(c+1),uM(pK(oIn(n.d,(OQn(),DPt))))-n.e),e=new MO(i,uM(pK(oIn(n.d,$Pt)))+n.e))),uG(o.a,8).a=t.a,uG(o.a,8).b=t.b,o.b.a=e.a,o.b.b=e.b,++c}}function KYn(n,t,e,i,r,c){var a,o,u,s,h,f,l;switch(t){case 71:a=i.q.getFullYear()-V1n>=-1900?1:0,JA(n,e>=4?Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n])[a]:Uhn(cT($ot,1),zZn,2,6,["BC","AD"])[a]);break;case 121:Kkn(n,e,i);break;case 77:nUn(n,e,i);break;case 107:Fen(n,0==(o=r.q.getHours())?24:o,e);break;case 83:PRn(n,e,r);break;case 69:u=i.q.getDay(),JA(n,5==e?Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[u]:4==e?Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[u]:Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[u]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[1]):JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[0]);break;case 104:Fen(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Fen(n,r.q.getHours()%12,e);break;case 72:Fen(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[h]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Fen(n,h,1);break;case 76:f=i.q.getMonth(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[f]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Fen(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,JA(n,e<4?Uhn(cT($ot,1),zZn,2,6,["Q1","Q2","Q3","Q4"])[l]:Uhn(cT($ot,1),zZn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Fen(n,i.q.getDate(),e);break;case 109:Fen(n,r.q.getMinutes(),e);break;case 115:Fen(n,r.q.getSeconds(),e);break;case 122:JA(n,e<4?c.c[0]:c.c[1]);break;case 118:JA(n,c.b);break;case 90:JA(n,e<3?GLn(c):3==e?rNn(c):cNn(c.a));break;default:return!1}return!0}function FYn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(iHn(t),u=uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84),h=uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84),o=lCn(u),s=lCn(h),a=0==(!t.a&&(t.a=new fV(oFt,t,6,6)),t.a).i?null:uG(zrn((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),0),166),M=uG(cQ(n.a,o),10),S=uG(cQ(n.a,s),10),T=null,P=null,F$(u,193)&&(F$(y=uG(cQ(n.a,u),305),12)?T=uG(y,12):F$(y,10)&&(M=uG(y,10),T=uG(zq(M.j,0),12))),F$(h,193)&&(F$(E=uG(cQ(n.a,h),305),12)?P=uG(E,12):F$(E,10)&&(S=uG(E,10),P=uG(zq(S.j,0),12))),!M||!S)throw hv(new EM("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(zsn(d=new UZ,t),kfn(d,(GYn(),rmt),t),kfn(d,(jYn(),bMt),null),b=uG(oIn(i,Hpt),21),M==S&&b.Fc((r_n(),opt)),T||(can(),k=Wjt,j=null,a&&sN(uG(oIn(M,JMt),101))&&($5(j=new MO(a.j,a.k),s0(t)),Q8(j,e),Ern(s,o)&&(k=Vjt,JF(j,M.n))),T=LXn(M,j,k,i)),P||(can(),k=Vjt,C=null,a&&sN(uG(oIn(S,JMt),101))&&($5(C=new MO(a.b,a.c),s0(t)),Q8(C,e)),P=LXn(S,C,k,HQ(S))),c2(d,T),u2(d,P),(T.e.c.length>1||T.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((r_n(),ept)),l=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));l.e!=l.i.gc();)if(!oM(gK(zDn(f=uG(Zkn(l),135),FMt)))&&f.a)switch(g=own(f),kD(d.b,g),uG(oIn(g,Xyt),278).g){case 1:case 2:b.Fc((r_n(),npt));break;case 0:b.Fc((r_n(),Ygt)),kfn(g,Xyt,(Zrn(),ixt))}if(c=uG(oIn(i,Kyt),322),p=uG(oIn(i,$Mt),323),r=c==(jan(),Ydt)||p==(pyn(),kjt),a&&0!=(!a.a&&(a.a=new MD(eFt,a,5)),a.a).i&&r){for(m=COn(a),w=new Uk,v=Fkn(m,0);v.b!=v.d.c;)aq(w,new eN(uG(I6(v),8)));kfn(d,cmt,w)}return d}function _Yn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(j=0,E=0,M=new Ym,k=uG(yx(Wz(YJ(new fX(null,new h3(n.b,16)),new io),new fo)),17).a+1,T=Inn(YHt,W1n,28,k,15,1),d=Inn(YHt,W1n,28,k,15,1),w=0;w<k;w++)T[w]=0,d[w]=0;for(s=uG(l8(_0(new fX(null,new h3(n.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();s.Ob();)if(u=uG(s.Pb(),65),P=uG(oIn(u.b,(QGn(),ACt)),17).a,(v=(I=uG(oIn(u.c,ACt),17).a)-P)>1)for(o=P+1;o<I;o++){if(h=o,y=uG(l8(JJ(new fX(null,new h3(n.b,16)),new Np(h)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),b=0,t==(xdn(),JDt)||t==YDt){for(y.jd(new so),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),40).e.b>u.b.e.b*(1-g)+u.c.e.b*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),40).e),uG(y.Xb(y.gc()-1),40).f),f=JF(D$(uG(y.Xb(0),40).e),uG(y.Xb(0),40).f),b>=y.gc()-1&&C.b>m.b&&u.c.e.b>m.b)continue;if(b<=0&&C.b<f.a&&u.c.e.b<f.b)continue}}else{for(y.jd(new ho),b=0;b<y.gc()&&(g=(o-P)/(I-P),!(uG(y.Xb(b),40).e.a>u.b.e.a*(1-g)+u.c.e.a*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),40).e),uG(y.Xb(y.gc()-1),40).f),f=JF(D$(uG(y.Xb(0),40).e),uG(y.Xb(0),40).f),b>=y.gc()-1&&C.a>m.a&&u.c.e.a>m.a)continue;if(b<=0&&C.a<f.a&&u.c.e.a<f.a)continue}}r=new sj,c=new sj,aq(u.a,r),aq(u.a,c),a=new LU(r,c,u),PV(M,Hvn(p=S3(Nz(o,32),E3(b,L0n))))?(aq((l=uG(cQ(M,Hvn(p)),675)).a,a),hN(l.b)?Lon(l.a,new vo):Lon(l.a,new ko),RYn(l)):(l=new wTn(0==b?null:uG(y.Xb(b-1),40),b==y.gc()?null:uG(y.Xb(b),40),a,n),vJ(M,Hvn(p),l)),t==JDt||t==YDt?(l.f&&l.d.e.b<=uM(pK(oIn(n,(OQn(),IPt))))&&++j,l.g&&l.c.e.b+l.c.f.b>=uM(pK(oIn(n,(OQn(),CPt))))&&++E):(l.f&&l.d.e.a<=uM(pK(oIn(n,(OQn(),PPt))))&&++j,l.g&&l.c.e.a+l.c.f.a>=uM(pK(oIn(n,(OQn(),SPt))))&&++E)}else 0==v?hNn(u):v<0&&(++T[P],++d[I],j=uG((S=AYn(u,t,n,new WO(xwn(j),xwn(E)),e,i,new WO(xwn(d[I]),xwn(T[P])))).a,17).a,E=uG(S.b,17).a)}function BYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(i=t,u=e,n.b&&i.j==(KQn(),_Rt)&&u.j==(KQn(),_Rt)&&(m=i,i=u,u=m),PV(n.a,i)){if(cS(uG(cQ(n.a,i),49),u))return 1}else vJ(n.a,i,new ek);if(PV(n.a,u)){if(cS(uG(cQ(n.a,u),49),i))return-1}else vJ(n.a,u,new ek);if(PV(n.d,i)){if(cS(uG(cQ(n.d,i),49),u))return-1}else vJ(n.d,i,new ek);if(PV(n.d,u)){if(cS(uG(cQ(n.a,u),49),i))return 1}else vJ(n.d,u,new ek);if(i.j!=u.j)return-1==(p=bN(i.j,u.j))?hHn(n,u,i):hHn(n,i,u),p;if(0!=i.e.c.length&&0!=u.e.c.length){if(n.b&&0!=(p=Dbn(i,u)))return-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p;if((c=uG(zq(i.e,0),18).c.i)==(h=uG(zq(u.e,0),18).c.i))return(r=uG(oIn(uG(zq(i.e,0),18),(GYn(),imt)),17).a)>(s=uG(oIn(uG(zq(u.e,0),18),imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0;for(d=0,g=(w=n.c).length;d<g;++d){if((b=w[d])==c)return hHn(n,i,u),1;if(b==h)return hHn(n,u,i),-1}}return 0!=i.g.c.length&&0!=u.g.c.length?(o=uG(oIn(i,(GYn(),tmt)),10),l=uG(oIn(u,tmt),10),n.e==(yvn(),Bjt)&&o&&l&&vR(o,imt)&&vR(l,imt)?((r=uG(oIn(o,imt),17).a)>(s=uG(oIn(l,imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0):n.b&&0!=(p=Dbn(i,u))?(-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p):(a=0,f=0,vR(uG(zq(i.g,0),18),imt)&&(a=uG(oIn(uG(zq(i.g,0),18),imt),17).a),vR(uG(zq(u.g,0),18),imt)&&(f=uG(oIn(uG(zq(i.g,0),18),imt),17).a),o&&o==l?oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&!oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,i,u),1):!oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,u,i),-1):(a>f?hHn(n,i,u):hHn(n,u,i),a<f?-1:a>f?1:0):(n.f&&(n.f._b(o)&&(a=uG(n.f.xc(o),17).a),n.f._b(l)&&(f=uG(n.f.xc(l),17).a)),a>f?hHn(n,i,u):hHn(n,u,i),a<f?-1:a>f?1:0))):0!=i.e.c.length&&0!=u.g.c.length?(hHn(n,i,u),1):0!=i.g.c.length&&0!=u.e.c.length?(hHn(n,u,i),-1):vR(i,(GYn(),imt))&&vR(u,imt)?((r=uG(oIn(i,imt),17).a)>(s=uG(oIn(u,imt),17).a)?hHn(n,i,u):hHn(n,u,i),r<s?-1:r>s?1:0):(hHn(n,u,i),-1)}function HYn(n){n.gb||(n.gb=!0,n.b=Nsn(n,0),Von(n.b,18),Won(n.b,19),n.a=Nsn(n,1),Von(n.a,1),Won(n.a,2),Won(n.a,3),Won(n.a,4),Won(n.a,5),n.o=Nsn(n,2),Von(n.o,8),Von(n.o,9),Won(n.o,10),Won(n.o,11),Won(n.o,12),Won(n.o,13),Won(n.o,14),Won(n.o,15),Won(n.o,16),Won(n.o,17),Won(n.o,18),Won(n.o,19),Won(n.o,20),Won(n.o,21),Won(n.o,22),Won(n.o,23),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),n.p=Nsn(n,3),Von(n.p,2),Von(n.p,3),Von(n.p,4),Von(n.p,5),Won(n.p,6),Won(n.p,7),rrn(n.p),rrn(n.p),n.q=Nsn(n,4),Von(n.q,8),n.v=Nsn(n,5),Won(n.v,9),rrn(n.v),rrn(n.v),rrn(n.v),n.w=Nsn(n,6),Von(n.w,2),Von(n.w,3),Von(n.w,4),Won(n.w,5),n.B=Nsn(n,7),Won(n.B,1),rrn(n.B),rrn(n.B),rrn(n.B),n.Q=Nsn(n,8),Won(n.Q,0),rrn(n.Q),n.R=Nsn(n,9),Von(n.R,1),n.S=Nsn(n,10),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),n.T=Nsn(n,11),Won(n.T,10),Won(n.T,11),Won(n.T,12),Won(n.T,13),Won(n.T,14),rrn(n.T),rrn(n.T),n.U=Nsn(n,12),Von(n.U,2),Von(n.U,3),Won(n.U,4),Won(n.U,5),Won(n.U,6),Won(n.U,7),rrn(n.U),n.V=Nsn(n,13),Won(n.V,10),n.W=Nsn(n,14),Von(n.W,18),Von(n.W,19),Von(n.W,20),Won(n.W,21),Won(n.W,22),Won(n.W,23),n.bb=Nsn(n,15),Von(n.bb,10),Von(n.bb,11),Von(n.bb,12),Von(n.bb,13),Von(n.bb,14),Von(n.bb,15),Von(n.bb,16),Won(n.bb,17),rrn(n.bb),rrn(n.bb),n.eb=Nsn(n,16),Von(n.eb,2),Von(n.eb,3),Von(n.eb,4),Von(n.eb,5),Von(n.eb,6),Von(n.eb,7),Won(n.eb,8),Won(n.eb,9),n.ab=Nsn(n,17),Von(n.ab,0),Von(n.ab,1),n.H=Nsn(n,18),Won(n.H,0),Won(n.H,1),Won(n.H,2),Won(n.H,3),Won(n.H,4),Won(n.H,5),rrn(n.H),n.db=Nsn(n,19),Won(n.db,2),n.c=$sn(n,20),n.d=$sn(n,21),n.e=$sn(n,22),n.f=$sn(n,23),n.i=$sn(n,24),n.g=$sn(n,25),n.j=$sn(n,26),n.k=$sn(n,27),n.n=$sn(n,28),n.r=$sn(n,29),n.s=$sn(n,30),n.t=$sn(n,31),n.u=$sn(n,32),n.fb=$sn(n,33),n.A=$sn(n,34),n.C=$sn(n,35),n.D=$sn(n,36),n.F=$sn(n,37),n.G=$sn(n,38),n.I=$sn(n,39),n.J=$sn(n,40),n.L=$sn(n,41),n.M=$sn(n,42),n.N=$sn(n,43),n.O=$sn(n,44),n.P=$sn(n,45),n.X=$sn(n,46),n.Y=$sn(n,47),n.Z=$sn(n,48),n.$=$sn(n,49),n._=$sn(n,50),n.cb=$sn(n,51),n.K=$sn(n,52))}function UYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(a=new lS,v=uG(oIn(e,(jYn(),Byt)),88),d=0,Qon(a,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=a.b;)(xA(zDn(s=R0(h=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)),Syt))!==xA((yvn(),Fjt))||xA(zDn(s,Fyt))===xA((kvn(),lgt))||xA(zDn(s,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(s,Cyt)))||xA(zDn(s,kyt))!==xA((Uvn(),tbt))||xA(zDn(s,yMt))===xA((THn(),Pjt))||xA(zDn(s,yMt))===xA((THn(),Cjt))||xA(zDn(s,MMt))===xA((MKn(),JTt))||xA(zDn(s,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(h,jyt)))&&Myn(h,(GYn(),imt),xwn(d++)),!oM(gK(zDn(h,FMt)))&&(l=0!=(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a).i,w=oCn(h),b=xA(zDn(h,rMt))===xA((Own(),Ixt)),p=null,(E=!vnn(h,(XYn(),e$t))||L9(mK(zDn(h,e$t))))&&b&&(l||w)&&(kfn(p=PGn(h),Byt,v),vR(p,fTt)&&iM(new omn(uM(pK(oIn(p,fTt)))),p),0!=uG(zDn(h,DMt),181).gc()&&(f=p,kS(new fX(null,(!h.c&&(h.c=new fV(wFt,h,9,9)),new h3(h.c,16))),new Yd(f)),u_n(h,p))),k=e,(y=uG(cQ(n.a,R0(h)),10))&&(k=y.e),g=RJn(n,h,k),p&&(g.e=p,p.e=g,Qon(a,(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a))));for(d=0,s8(a,t,a.c.b,a.c);0!=a.b;){for(u=new DD((!(c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)).b&&(c.b=new fV(aFt,c,12,3)),c.b));u.e!=u.i.gc();)iHn(o=uG(Zkn(u),74)),(xA(zDn(t,Syt))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&Myn(o,(GYn(),imt),xwn(d++)),T=lCn(uG(zrn((!o.b&&(o.b=new f_(cFt,o,4,7)),o.b),0),84)),j=lCn(uG(zrn((!o.c&&(o.c=new f_(cFt,o,5,8)),o.c),0),84)),oM(gK(zDn(o,FMt)))||oM(gK(zDn(T,FMt)))||oM(gK(zDn(j,FMt)))||(m=c,BNn(o)&&oM(gK(zDn(T,sMt)))&&oM(gK(zDn(o,hMt)))||Ern(j,T)?m=T:Ern(T,j)&&(m=j),k=e,(y=uG(cQ(n.a,m),10))&&(k=y.e),kfn(FYn(n,o,m,k),(GYn(),Ipt),SFn(n,o,t,e)));if(b=xA(zDn(c,rMt))===xA((Own(),Ixt)))for(r=new DD((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a));r.e!=r.i.gc();)E=!vnn(i=uG(Zkn(r),27),(XYn(),e$t))||L9(mK(zDn(i,e$t))),M=xA(zDn(i,rMt))===xA(Ixt),E&&M&&s8(a,i,a.c.b,a.c)}}function GYn(){var n,t;GYn=E,rmt=new Cm(E4n),Ipt=new Cm("coordinateOrigin"),wmt=new Cm("processors"),Cpt=new uF("compoundNode",(qx(),!1)),qpt=new uF("insideConnections",!1),cmt=new Cm("originalBendpoints"),amt=new Cm("originalDummyNodePosition"),omt=new Cm("originalLabelEdge"),gmt=new Cm("representedLabels"),$pt=new Cm("endLabels"),Dpt=new Cm("endLabel.origin"),Qpt=new uF("labelSide",(Ajn(),Rxt)),emt=new uF("maxEdgeThickness",0),pmt=new uF("reversed",!1),dmt=new Cm(S4n),Zpt=new uF("longEdgeSource",null),nmt=new uF("longEdgeTarget",null),Ypt=new uF("longEdgeHasLabelDummies",!1),Jpt=new uF("longEdgeBeforeLabelDummy",!1),Npt=new uF("edgeConstraint",(Pfn(),kgt)),zpt=new Cm("inLayerLayoutUnit"),Xpt=new uF("inLayerConstraint",(Zen(),gpt)),Vpt=new uF("inLayerSuccessorConstraint",new Zm),Wpt=new uF("inLayerSuccessorConstraintBetweenNonDummies",!1),lmt=new Cm("portDummy"),Opt=new uF("crossingHint",xwn(0)),Hpt=new uF("graphProperties",new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),Fpt=new uF("externalPortSide",(KQn(),FRt)),_pt=new uF("externalPortSize",new sj),Rpt=new Cm("externalPortReplacedDummies"),Kpt=new Cm("externalPortReplacedDummy"),xpt=new uF("externalPortConnections",new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),bmt=new uF(i3n,0),jpt=new Cm("barycenterAssociates"),Pmt=new Cm("TopSideComments"),Ept=new Cm("BottomSideComments"),Ppt=new Cm("CommentConnectionPort"),Gpt=new uF("inputCollect",!1),hmt=new uF("outputCollect",!1),Lpt=new uF("cyclic",!1),Apt=new Cm("crossHierarchyMap"),Smt=new Cm("targetOffset"),new uF("splineLabelSize",new sj),kmt=new Cm("spacings"),fmt=new uF("partitionConstraint",!1),Spt=new Cm("breakingPoint.info"),jmt=new Cm("splines.survivingEdge"),Tmt=new Cm("splines.route.start"),ymt=new Cm("splines.edgeChain"),smt=new Cm("originalPortConstraints"),vmt=new Cm("selfLoopHolder"),Mmt=new Cm("splines.nsPortY"),imt=new Cm("modelOrder"),tmt=new Cm("longEdgeTargetNode"),Bpt=new uF(_6n,!1),mmt=new uF(_6n,!1),Upt=new Cm("layerConstraints.hiddenNodes"),umt=new Cm("layerConstraints.opposidePort"),Emt=new Cm("targetNode.modelOrder")}function qYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d;for(l=Fkn(n.b,0);l.b!=l.d.c;)if(!m_((f=uG(I6(l),40)).c,H9n))for(a=uG(l8(new fX(null,new h3(zNn(f,n),16)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),t==(xdn(),JDt)||t==YDt?a.jd(new oo):a.jd(new uo),d=a.gc(),c=0;c<d;c++)o=1==d?.5:(1+c)/(d+1),t==JDt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.a+f.f.a+r<h?cL(uG(a.Xb(c),65).a,new MO(h+i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a+r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a,f.e.b+f.f.b*o))):t==YDt?(h=uM(pK(oIn(f,(OQn(),DPt)))),f.e.a-r>h?cL(uG(a.Xb(c),65).a,new MO(h-i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a-r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a,f.e.b+f.f.b*o))):t==nxt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.b+f.f.b+r<h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h+i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b+r/5.3+f.f.b))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b+f.f.b))):(h=uM(pK(oIn(f,(OQn(),DPt)))),uln(uG(a.Xb(c),65),n)?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,uG(pR(uG(a.Xb(c),65).a),8).b)):f.e.b-r>h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h-i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b-r/5.3))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b)))}function XYn(){var n,t;XYn=E,e$t=new Cm(Vnt),yDt=new Cm(Wnt),nMn(),i$t=new mL(X8n,r$t=CNt),new Jm,c$t=new mL(R3n,null),a$t=new Cm(Qnt),ZSn(),b$t=WX(ZNt,Uhn(cT(txt,1),p1n,298,0,[WNt])),l$t=new mL(r9n,b$t),w$t=new mL(q8n,(qx(),!1)),xdn(),d$t=new mL(W8n,g$t=ZDt),_gn(),k$t=new mL(m8n,y$t=fxt),j$t=new mL(Xnt,!1),Own(),E$t=new mL(b8n,S$t=Oxt),Q$t=new CN(12),W$t=new mL(K3n,Q$t),O$t=new mL(f4n,!1),A$t=new mL(g9n,!1),V$t=new mL(w4n,!1),$Pn(),sDt=new mL(l4n,hDt=sRt),mDt=new Cm(b9n),vDt=new Cm(a4n),kDt=new Cm(s4n),TDt=new Cm(h4n),N$t=new Uk,L$t=new mL(c9n,N$t),f$t=new mL(u9n,!1),P$t=new mL(s9n,!1),new Cm(Jnt),D$t=new Nk,$$t=new mL(w9n,D$t),z$t=new mL(U8n,!1),new Jm,MDt=new mL(Ynt,1),h$t=new Cm(Znt),s$t=new Cm(ntt),HDt=new mL(k4n,!1),new mL(ttt,!0),xwn(0),new mL(ett,xwn(100)),new mL(itt,!1),xwn(0),new mL(rtt,xwn(4e3)),xwn(0),new mL(ctt,xwn(400)),new mL(att,!1),new mL(ott,!1),new mL(utt,!0),new mL(stt,!1),qpn(),o$t=new mL(znt,u$t=TKt),jDt=new mL(A8n,10),EDt=new mL(L8n,10),SDt=new mL(D3n,20),PDt=new mL(N8n,10),CDt=new mL(u4n,2),IDt=new mL($8n,10),ADt=new mL(D8n,0),LDt=new mL(K8n,5),NDt=new mL(x8n,1),$Dt=new mL(R8n,1),DDt=new mL(o4n,20),xDt=new mL(F8n,10),FDt=new mL(_8n,10),ODt=new Cm(B8n),KDt=new qL,RDt=new mL(d9n,KDt),Z$t=new Cm(l9n),J$t=new mL(f9n,Y$t=!1),R$t=new CN(5),x$t=new mL(Q8n,R$t),VDn(),t=uG(Mj(eRt),9),F$t=new nB(t,uG(MF(t,t.length),9),0),K$t=new mL(m4n,F$t),Vkn(),tDt=new mL(Z8n,eDt=Zxt),rDt=new Cm(n9n),cDt=new Cm(t9n),aDt=new Cm(e9n),iDt=new Cm(i9n),n=uG(Mj(sKt),9),B$t=new nB(n,uG(MF(n,n.length),9),0),_$t=new mL(p4n,B$t),X$t=ggn((aUn(),eKt)),q$t=new mL(g4n,X$t),G$t=new MO(0,0),U$t=new mL(x4n,G$t),H$t=new mL(d4n,!1),Zrn(),m$t=new mL(a9n,v$t=ixt),p$t=new mL(b4n,!1),new Cm(htt),xwn(1),new mL(ftt,null),oDt=new Cm(h9n),fDt=new Cm(o9n),KQn(),gDt=new mL(G8n,pDt=FRt),uDt=new Cm(H8n),eNn(),wDt=ggn(gRt),bDt=new mL(v4n,wDt),lDt=new mL(J8n,!1),dDt=new mL(Y8n,!0),new Jm,XDt=new mL(y4n,1),VDt=new mL(ltt,null),BDt=new mL(M4n,150),_Dt=new mL(T4n,1.414),UDt=new mL(j4n,null),GDt=new mL(btt,1),C$t=new mL(z8n,!1),I$t=new mL(V8n,!1),M$t=new mL(x3n,1),RCn(),new mL(wtt,T$t=mxt),nDt=!0,Iwn(),zDt=fKt,WDt=fKt,qDt=fKt}function zYn(){zYn=E,qbt=new CC("DIRECTION_PREPROCESSOR",0),Hbt=new CC("COMMENT_PREPROCESSOR",1),Xbt=new CC("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),uwt=new CC("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Pwt=new CC("PARTITION_PREPROCESSOR",4),lwt=new CC("LABEL_DUMMY_INSERTER",5),Nwt=new CC("SELF_LOOP_PREPROCESSOR",6),pwt=new CC("LAYER_CONSTRAINT_PREPROCESSOR",7),Ewt=new CC("PARTITION_MIDPROCESSOR",8),iwt=new CC("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),ywt=new CC("NODE_PROMOTION",10),gwt=new CC("LAYER_CONSTRAINT_POSTPROCESSOR",11),Swt=new CC("PARTITION_POSTPROCESSOR",12),Zbt=new CC("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Dwt=new CC("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),xbt=new CC("BREAKING_POINT_INSERTER",15),kwt=new CC("LONG_EDGE_SPLITTER",16),Iwt=new CC("PORT_SIDE_PROCESSOR",17),swt=new CC("INVERTED_PORT_PROCESSOR",18),Cwt=new CC("PORT_LIST_SORTER",19),Rwt=new CC("SORT_BY_INPUT_ORDER_OF_MODEL",20),Twt=new CC("NORTH_SOUTH_PORT_PREPROCESSOR",21),Rbt=new CC("BREAKING_POINT_PROCESSOR",22),jwt=new CC(p6n,23),Kwt=new CC(m6n,24),Awt=new CC("SELF_LOOP_PORT_RESTORER",25),xwt=new CC("SINGLE_EDGE_GRAPH_WRAPPER",26),hwt=new CC("IN_LAYER_CONSTRAINT_PROCESSOR",27),Qbt=new CC("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),fwt=new CC("LABEL_AND_NODE_SIZE_PROCESSOR",29),owt=new CC("INNERMOST_NODE_MARGIN_CALCULATOR",30),$wt=new CC("SELF_LOOP_ROUTER",31),_bt=new CC("COMMENT_NODE_MARGIN_CALCULATOR",32),Vbt=new CC("END_LABEL_PREPROCESSOR",33),wwt=new CC("LABEL_DUMMY_SWITCHER",34),Fbt=new CC("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),dwt=new CC("LABEL_SIDE_SELECTOR",36),cwt=new CC("HYPEREDGE_DUMMY_MERGER",37),nwt=new CC("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),mwt=new CC("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),ewt=new CC("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),Ubt=new CC("CONSTRAINTS_POSTPROCESSOR",41),Bbt=new CC("COMMENT_POSTPROCESSOR",42),awt=new CC("HYPERNODE_PROCESSOR",43),twt=new CC("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vwt=new CC("LONG_EDGE_JOINER",45),Lwt=new CC("SELF_LOOP_POSTPROCESSOR",46),Kbt=new CC("BREAKING_POINT_REMOVER",47),Mwt=new CC("NORTH_SOUTH_PORT_POSTPROCESSOR",48),rwt=new CC("HORIZONTAL_COMPACTOR",49),bwt=new CC("LABEL_DUMMY_REMOVER",50),Jbt=new CC("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),Wbt=new CC("END_LABEL_SORTER",52),Owt=new CC("REVERSED_EDGE_RESTORER",53),zbt=new CC("END_LABEL_POSTPROCESSOR",54),Ybt=new CC("HIERARCHICAL_NODE_RESIZER",55),Gbt=new CC("DIRECTION_POSTPROCESSOR",56)}function VYn(){VYn=E,Vin(),mvt=new mL(B6n,vvt=dgt),xvt=new mL(H6n,(qx(),!1)),Y6(),Bvt=new mL(U6n,Hvt=kpt),akt=new mL(G6n,!1),okt=new mL(q6n,!0),Dmt=new mL(X6n,!1),nin(),Skt=new mL(z6n,Pkt=Gjt),xwn(1),Dkt=new mL(V6n,xwn(7)),xkt=new mL(W6n,!1),Rvt=new mL(Q6n,!1),kvn(),gvt=new mL(J6n,pvt=sgt),MKn(),rkt=new mL(Y6n,ckt=rjt),Gpn(),Vvt=new mL(Z6n,Wvt=Lmt),xwn(-1),zvt=new mL(n5n,null),xwn(-1),Qvt=new mL(t5n,xwn(-1)),xwn(-1),Jvt=new mL(e5n,xwn(4)),xwn(-1),Zvt=new mL(i5n,xwn(2)),THn(),ekt=new mL(r5n,ikt=$jt),xwn(0),tkt=new mL(c5n,xwn(0)),qvt=new mL(a5n,xwn(vZn)),jan(),wvt=new mL(o5n,dvt=Zdt),Jmt=new mL(u5n,!1),avt=new mL(s5n,.1),lvt=new mL(h5n,!1),uvt=new mL(f5n,null),svt=new mL(l5n,null),xwn(-1),hvt=new mL(b5n,null),xwn(-1),fvt=new mL(w5n,xwn(-1)),xwn(0),Ymt=new mL(d5n,xwn(40)),ihn(),ivt=new mL(g5n,rvt=lpt),Zmt=new mL(p5n,nvt=hpt),pyn(),jkt=new mL(m5n,Ekt=vjt),wkt=new Cm(v5n),Wtn(),ukt=new mL(k5n,skt=Lgt),ESn(),fkt=new mL(y5n,lkt=Fgt),new Jm,pkt=new mL(M5n,.3),vkt=new Cm(T5n),Yyn(),kkt=new mL(j5n,ykt=djt),isn(),Svt=new mL(E5n,Pvt=nEt),Sln(),Cvt=new mL(S5n,Ivt=aEt),kbn(),Ovt=new mL(P5n,Avt=fEt),Nvt=new mL(C5n,.2),jvt=new mL(I5n,2),Akt=new mL(O5n,null),Nkt=new mL(A5n,10),Lkt=new mL(L5n,10),$kt=new mL(N5n,20),xwn(0),Ckt=new mL($5n,xwn(0)),xwn(0),Ikt=new mL(D5n,xwn(0)),xwn(0),Okt=new mL(x5n,xwn(0)),xmt=new mL(R5n,!1),RIn(),Fmt=new mL(K5n,_mt=Vgt),H7(),Rmt=new mL(F5n,Kmt=Wdt),Fvt=new mL(_5n,!1),xwn(0),Kvt=new mL(B5n,xwn(16)),xwn(0),_vt=new mL(H5n,xwn(5)),zhn(),ryt=new mL(U5n,cyt=kEt),Rkt=new mL(G5n,10),_kt=new mL(q5n,1),ran(),Vkt=new mL(X5n,Wkt=cgt),Ukt=new Cm(z5n),Xkt=xwn(1),xwn(0),qkt=new mL(V5n,Xkt),ian(),syt=new mL(W5n,hyt=wEt),ayt=new Cm(Q5n),nyt=new mL(J5n,!0),Ykt=new mL(Y5n,2),eyt=new mL(Z5n,!0),tOn(),Mvt=new mL(n8n,Tvt=Cgt),vAn(),kvt=new mL(t8n,yvt=Hdt),yvn(),Wmt=new mL(e8n,Qmt=Fjt),Vmt=new mL(i8n,!1),zmt=new mL(r8n,!1),Uvn(),Bmt=new mL(c8n,Hmt=tbt),Cwn(),qmt=new mL(a8n,Xmt=ujt),Umt=new mL(o8n,0),Gmt=new mL(u8n,0),Gvt=fgt,Uvt=Ydt,Yvt=ijt,nkt=ijt,Xvt=YTt,Own(),ovt=Ixt,bvt=Zdt,cvt=Zdt,tvt=Zdt,evt=Ixt,dkt=Mjt,gkt=vjt,hkt=vjt,bkt=vjt,mkt=yjt,Tkt=Mjt,Mkt=Mjt,_gn(),Lvt=hxt,$vt=hxt,Dvt=fEt,Evt=sxt,Kkt=yEt,Fkt=vEt,Bkt=yEt,Hkt=vEt,Qkt=yEt,Jkt=vEt,Gkt=rgt,zkt=cgt,fyt=yEt,lyt=vEt,oyt=yEt,uyt=vEt,tyt=vEt,Zkt=vEt,iyt=vEt}function WYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X,z,V,W,Q,J,Y,Z,nn,tn,en,rn,cn,an,on,un;for(Y=0,N=0,x=(O=t).length;N<x;++N)for(G=new Ww((C=O[N]).j);G.a<G.c.c.length;){for(X=0,u=new Ww((U=uG(N3(G),12)).g);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.d.i.c&&++X;X>0&&(n.a[U.p]=Y++)}for(rn=0,$=0,R=(A=i).length;$<R;++$){for(K=0,G=new Ww((C=A[$]).j);G.a<G.c.c.length&&(U=uG(N3(G),12)).j==(KQn(),yRt);)for(u=new Ww(U.e);u.a<u.c.c.length;)if(o=uG(N3(u),18),C.c!=o.c.i.c){++K;break}for(_=0,z=new N4(C.j,C.j.c.length);z.b>0;){for(MK(z.b>0),X=0,u=new Ww((U=uG(z.a.Xb(z.c=--z.b),12)).e);u.a<u.c.c.length;)o=uG(N3(u),18),C.c!=o.c.i.c&&++X;X>0&&(U.j==(KQn(),yRt)?(n.a[U.p]=rn,++rn):(n.a[U.p]=rn+K+_,++_))}rn+=_}for(q=new Ym,d=new XL,L=0,D=(I=t).length;L<D;++L)for(tn=new Ww((C=I[L]).j);tn.a<tn.c.c.length;)for(u=new Ww((nn=uG(N3(tn),12)).g);u.a<u.c.c.length;)if(an=(o=uG(N3(u),18)).d,C.c!=an.i.c)if(Z=uG(DA(FX(q.f,nn)),478),cn=uG(DA(FX(q.f,an)),478),Z||cn)if(Z)if(cn)if(Z==cn)kD(Z.a,o);else{for(kD(Z.a,o),H=new Ww(cn.d);H.a<H.c.c.length;)B=uG(N3(H),12),VAn(q.f,B,Z);Ohn(Z.a,cn.a),Ohn(Z.d,cn.d),d.a.Bc(cn)}else kD(Z.a,o),kD(Z.d,an),VAn(q.f,an,Z);else kD(cn.a,o),kD(cn.d,nn),VAn(q.f,nn,cn);else w=new BF,d.a.zc(w,d),kD(w.a,o),kD(w.d,nn),VAn(q.f,nn,w),kD(w.d,an),VAn(q.f,an,w);for(g=uG(oTn(d,Inn(QEt,{3:1,4:1,5:1,2045:1},478,d.a.gc(),0,1)),2045),P=t[0].c,J=i[0].c,l=0,b=(f=g).length;l<b;++l)for((h=f[l]).e=Y,h.f=rn,G=new Ww(h.d);G.a<G.c.c.length;)U=uG(N3(G),12),V=n.a[U.p],U.i.c==P?(V<h.e&&(h.e=V),V>h.b&&(h.b=V)):U.i.c==J&&(V<h.f&&(h.f=V),V>h.c&&(h.c=V));for(Ntn(g,0,g.length,null),en=Inn(YHt,W1n,28,g.length,15,1),r=Inn(YHt,W1n,28,rn+1,15,1),m=0;m<g.length;m++)en[m]=g[m].f,r[en[m]]=1;for(a=0,v=0;v<r.length;v++)1==r[v]?r[v]=a:--a;for(W=0,k=0;k<en.length;k++)en[k]+=r[en[k]],W=e.Math.max(W,en[k]+1);for(s=1;s<W;)s*=2;for(un=2*s-1,s-=1,on=Inn(YHt,W1n,28,un,15,1),c=0,E=0;E<en.length;E++)for(++on[j=en[E]+s];j>0;)j%2>0&&(c+=on[j+1]),++on[j=(j-1)/2|0];for(S=Inn(ZEt,EZn,374,2*g.length,0,1),y=0;y<g.length;y++)S[2*y]=new bY(g[y],g[y].e,g[y].b,(Z6(),YEt)),S[2*y+1]=new bY(g[y],g[y].b,g[y].e,JEt);for(Ntn(S,0,S.length,null),F=0,M=0;M<S.length;M++)switch(S[M].d.g){case 0:++F;break;case 1:c+=--F}for(Q=Inn(ZEt,EZn,374,2*g.length,0,1),T=0;T<g.length;T++)Q[2*T]=new bY(g[T],g[T].f,g[T].c,(Z6(),YEt)),Q[2*T+1]=new bY(g[T],g[T].c,g[T].f,JEt);for(Ntn(Q,0,Q.length,null),F=0,p=0;p<Q.length;p++)switch(Q[p].d.g){case 0:++F;break;case 1:c+=--F}return c}function QYn(){QYn=E,OHt=new Qm(7),AHt=new IX(8,94),new IX(8,64),LHt=new IX(8,36),KHt=new IX(8,65),FHt=new IX(8,122),_Ht=new IX(8,90),UHt=new IX(8,98),xHt=new IX(8,66),BHt=new IX(8,60),GHt=new IX(8,62),IHt=new Qm(11),HFn(CHt=new K3(4),48,57),HFn(HHt=new K3(4),48,57),HFn(HHt,65,90),HFn(HHt,95,95),HFn(HHt,97,122),HFn(RHt=new K3(4),9,9),HFn(RHt,10,10),HFn(RHt,12,12),HFn(RHt,13,13),HFn(RHt,32,32),NHt=FGn(CHt),DHt=FGn(HHt),$Ht=FGn(RHt),jHt=new Ym,EHt=new Ym,SHt=Uhn(cT($ot,1),zZn,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"]),THt=Uhn(cT($ot,1),zZn,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",eat,"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"]),PHt=Uhn(cT(YHt,1),W1n,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])}function JYn(){JYn=E,oht=new pun("OUT_T_L",0,(Ktn(),Ast),(Yen(),Rst),(Yrn(),jst),jst,Uhn(cT(kat,1),EZn,21,0,[WX((VDn(),qxt),Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt]))])),aht=new pun("OUT_T_C",1,Ost,Rst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),uht=new pun("OUT_T_R",2,Lst,Rst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt]))])),Yst=new pun("OUT_B_L",3,Ast,Fst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt]))])),Jst=new pun("OUT_B_C",4,Ost,Fst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Zst=new pun("OUT_B_R",5,Lst,Fst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt]))])),eht=new pun("OUT_L_T",6,Lst,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Vxt,Hxt]))])),tht=new pun("OUT_L_C",7,Lst,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,zxt,Hxt]))])),nht=new pun("OUT_L_B",8,Lst,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Bxt,Xxt,Hxt]))])),cht=new pun("OUT_R_T",9,Ast,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Vxt,Hxt]))])),rht=new pun("OUT_R_C",10,Ast,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt])),WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,zxt,Hxt]))])),iht=new pun("OUT_R_B",11,Ast,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(qxt,Uhn(cT(eRt,1),p1n,95,0,[Uxt,Xxt,Hxt]))])),Wst=new pun("IN_T_L",12,Ast,Fst,jst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Bxt,Hxt]))])),Vst=new pun("IN_T_C",13,Ost,Fst,jst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,_xt,Hxt]))])),Qst=new pun("IN_T_R",14,Lst,Fst,jst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Vxt,Uxt,Hxt]))])),Xst=new pun("IN_C_L",15,Ast,Kst,Est,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Bxt,Hxt]))])),qst=new pun("IN_C_C",16,Ost,Kst,Est,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,_xt,Hxt]))])),zst=new pun("IN_C_R",17,Lst,Kst,Est,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Uxt,Hxt]))])),Ust=new pun("IN_B_L",18,Ast,Rst,Sst,jst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Bxt,Hxt]))])),Hst=new pun("IN_B_C",19,Ost,Rst,Sst,Est,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,_xt,Hxt]))])),Gst=new pun("IN_B_R",20,Lst,Rst,Sst,Sst,Uhn(cT(kat,1),EZn,21,0,[WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt])),WX(Gxt,Uhn(cT(eRt,1),p1n,95,0,[Xxt,Uxt,Hxt]))])),sht=new pun(Y2n,21,null,null,null,null,Uhn(cT(kat,1),EZn,21,0,[]))}function YYn(){YYn=E,j_t=(tQ(),M_t).b,uG(zrn(gZ(M_t.b),0),35),uG(zrn(gZ(M_t.b),1),19),T_t=M_t.a,uG(zrn(gZ(M_t.a),0),35),uG(zrn(gZ(M_t.a),1),19),uG(zrn(gZ(M_t.a),2),19),uG(zrn(gZ(M_t.a),3),19),uG(zrn(gZ(M_t.a),4),19),E_t=M_t.o,uG(zrn(gZ(M_t.o),0),35),uG(zrn(gZ(M_t.o),1),35),P_t=uG(zrn(gZ(M_t.o),2),19),uG(zrn(gZ(M_t.o),3),19),uG(zrn(gZ(M_t.o),4),19),uG(zrn(gZ(M_t.o),5),19),uG(zrn(gZ(M_t.o),6),19),uG(zrn(gZ(M_t.o),7),19),uG(zrn(gZ(M_t.o),8),19),uG(zrn(gZ(M_t.o),9),19),uG(zrn(gZ(M_t.o),10),19),uG(zrn(gZ(M_t.o),11),19),uG(zrn(gZ(M_t.o),12),19),uG(zrn(gZ(M_t.o),13),19),uG(zrn(gZ(M_t.o),14),19),uG(zrn(gZ(M_t.o),15),19),uG(zrn(dZ(M_t.o),0),62),uG(zrn(dZ(M_t.o),1),62),uG(zrn(dZ(M_t.o),2),62),uG(zrn(dZ(M_t.o),3),62),uG(zrn(dZ(M_t.o),4),62),uG(zrn(dZ(M_t.o),5),62),uG(zrn(dZ(M_t.o),6),62),uG(zrn(dZ(M_t.o),7),62),uG(zrn(dZ(M_t.o),8),62),uG(zrn(dZ(M_t.o),9),62),S_t=M_t.p,uG(zrn(gZ(M_t.p),0),35),uG(zrn(gZ(M_t.p),1),35),uG(zrn(gZ(M_t.p),2),35),uG(zrn(gZ(M_t.p),3),35),uG(zrn(gZ(M_t.p),4),19),uG(zrn(gZ(M_t.p),5),19),uG(zrn(dZ(M_t.p),0),62),uG(zrn(dZ(M_t.p),1),62),C_t=M_t.q,uG(zrn(gZ(M_t.q),0),35),I_t=M_t.v,uG(zrn(gZ(M_t.v),0),19),uG(zrn(dZ(M_t.v),0),62),uG(zrn(dZ(M_t.v),1),62),uG(zrn(dZ(M_t.v),2),62),O_t=M_t.w,uG(zrn(gZ(M_t.w),0),35),uG(zrn(gZ(M_t.w),1),35),uG(zrn(gZ(M_t.w),2),35),uG(zrn(gZ(M_t.w),3),19),A_t=M_t.B,uG(zrn(gZ(M_t.B),0),19),uG(zrn(dZ(M_t.B),0),62),uG(zrn(dZ(M_t.B),1),62),uG(zrn(dZ(M_t.B),2),62),$_t=M_t.Q,uG(zrn(gZ(M_t.Q),0),19),uG(zrn(dZ(M_t.Q),0),62),D_t=M_t.R,uG(zrn(gZ(M_t.R),0),35),x_t=M_t.S,uG(zrn(dZ(M_t.S),0),62),uG(zrn(dZ(M_t.S),1),62),uG(zrn(dZ(M_t.S),2),62),uG(zrn(dZ(M_t.S),3),62),uG(zrn(dZ(M_t.S),4),62),uG(zrn(dZ(M_t.S),5),62),uG(zrn(dZ(M_t.S),6),62),uG(zrn(dZ(M_t.S),7),62),uG(zrn(dZ(M_t.S),8),62),uG(zrn(dZ(M_t.S),9),62),uG(zrn(dZ(M_t.S),10),62),uG(zrn(dZ(M_t.S),11),62),uG(zrn(dZ(M_t.S),12),62),uG(zrn(dZ(M_t.S),13),62),uG(zrn(dZ(M_t.S),14),62),R_t=M_t.T,uG(zrn(gZ(M_t.T),0),19),uG(zrn(gZ(M_t.T),2),19),K_t=uG(zrn(gZ(M_t.T),3),19),uG(zrn(gZ(M_t.T),4),19),uG(zrn(dZ(M_t.T),0),62),uG(zrn(dZ(M_t.T),1),62),uG(zrn(gZ(M_t.T),1),19),F_t=M_t.U,uG(zrn(gZ(M_t.U),0),35),uG(zrn(gZ(M_t.U),1),35),uG(zrn(gZ(M_t.U),2),19),uG(zrn(gZ(M_t.U),3),19),uG(zrn(gZ(M_t.U),4),19),uG(zrn(gZ(M_t.U),5),19),uG(zrn(dZ(M_t.U),0),62),__t=M_t.V,uG(zrn(gZ(M_t.V),0),19),B_t=M_t.W,uG(zrn(gZ(M_t.W),0),35),uG(zrn(gZ(M_t.W),1),35),uG(zrn(gZ(M_t.W),2),35),uG(zrn(gZ(M_t.W),3),19),uG(zrn(gZ(M_t.W),4),19),uG(zrn(gZ(M_t.W),5),19),U_t=M_t.bb,uG(zrn(gZ(M_t.bb),0),35),uG(zrn(gZ(M_t.bb),1),35),uG(zrn(gZ(M_t.bb),2),35),uG(zrn(gZ(M_t.bb),3),35),uG(zrn(gZ(M_t.bb),4),35),uG(zrn(gZ(M_t.bb),5),35),uG(zrn(gZ(M_t.bb),6),35),uG(zrn(gZ(M_t.bb),7),19),uG(zrn(dZ(M_t.bb),0),62),uG(zrn(dZ(M_t.bb),1),62),G_t=M_t.eb,uG(zrn(gZ(M_t.eb),0),35),uG(zrn(gZ(M_t.eb),1),35),uG(zrn(gZ(M_t.eb),2),35),uG(zrn(gZ(M_t.eb),3),35),uG(zrn(gZ(M_t.eb),4),35),uG(zrn(gZ(M_t.eb),5),35),uG(zrn(gZ(M_t.eb),6),19),uG(zrn(gZ(M_t.eb),7),19),H_t=M_t.ab,uG(zrn(gZ(M_t.ab),0),35),uG(zrn(gZ(M_t.ab),1),35),L_t=M_t.H,uG(zrn(gZ(M_t.H),0),19),uG(zrn(gZ(M_t.H),1),19),uG(zrn(gZ(M_t.H),2),19),uG(zrn(gZ(M_t.H),3),19),uG(zrn(gZ(M_t.H),4),19),uG(zrn(gZ(M_t.H),5),19),uG(zrn(dZ(M_t.H),0),62),q_t=M_t.db,uG(zrn(gZ(M_t.db),0),19),N_t=M_t.M}function ZYn(n){var t;n.O||(n.O=!0,qon(n,"type"),Xon(n,"ecore.xml.type"),zon(n,lct),t=uG(jxn((MP(),l_t),lct),2044),ttn(n1(n.fb),n.b),A4(n.b,DBt,"AnyType",!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.D,jrt,null,0,-1,DBt,!1,!1,!0,!1,!1,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.D,"any",null,0,-1,DBt,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.b),2),35),n.wb.D,"anyAttribute",null,0,-1,DBt,!1,!1,!0,!1,!1,!1),A4(n.bb,lHt,pct,!1,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.gb,"data",null,0,1,lHt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.gb,Ret,null,1,1,lHt,!1,!1,!0,!1,!0,!1),A4(n.fb,bHt,mct,!1,!1,!0),mun(uG(zrn(gZ(n.fb),0),35),t.gb,"rawValue",null,0,1,bHt,!0,!0,!0,!1,!0,!0),mun(uG(zrn(gZ(n.fb),1),35),t.a,uet,null,0,1,bHt,!0,!0,!0,!1,!0,!0),ujn(uG(zrn(gZ(n.fb),2),19),n.wb.q,null,"instanceType",1,1,bHt,!1,!1,!0,!1,!1,!1,!1),A4(n.qb,wHt,vct,!1,!1,!0),mun(uG(zrn(gZ(n.qb),0),35),n.wb.D,jrt,null,0,-1,null,!1,!1,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),1),19),n.wb.ab,null,"xMLNSPrefixMap",0,-1,null,!0,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.qb),2),19),n.wb.ab,null,"xSISchemaLocation",0,-1,null,!0,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.qb),3),35),n.gb,"cDATA",null,0,-2,null,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),4),35),n.gb,"comment",null,0,-2,null,!0,!0,!0,!1,!1,!0),ujn(uG(zrn(gZ(n.qb),5),19),n.bb,null,qct,0,-2,null,!0,!0,!0,!0,!1,!1,!0),mun(uG(zrn(gZ(n.qb),6),35),n.gb,get,null,0,-2,null,!0,!0,!0,!1,!1,!0),UJ(n.a,dat,"AnySimpleType",!0),UJ(n.c,$ot,"AnyURI",!0),UJ(n.d,cT(tUt,1),"Base64Binary",!0),UJ(n.e,ZHt,"Boolean",!0),UJ(n.f,cot,"BooleanObject",!0),UJ(n.g,tUt,"Byte",!0),UJ(n.i,uot,"ByteObject",!0),UJ(n.j,$ot,"Date",!0),UJ(n.k,$ot,"DateTime",!0),UJ(n.n,Bot,"Decimal",!0),UJ(n.o,eUt,"Double",!0),UJ(n.p,fot,"DoubleObject",!0),UJ(n.q,$ot,"Duration",!0),UJ(n.s,yat,"ENTITIES",!0),UJ(n.r,yat,"ENTITIESBase",!0),UJ(n.t,$ot,Ect,!0),UJ(n.u,iUt,"Float",!0),UJ(n.v,lot,"FloatObject",!0),UJ(n.w,$ot,"GDay",!0),UJ(n.B,$ot,"GMonth",!0),UJ(n.A,$ot,"GMonthDay",!0),UJ(n.C,$ot,"GYear",!0),UJ(n.D,$ot,"GYearMonth",!0),UJ(n.F,cT(tUt,1),"HexBinary",!0),UJ(n.G,$ot,"ID",!0),UJ(n.H,$ot,"IDREF",!0),UJ(n.J,yat,"IDREFS",!0),UJ(n.I,yat,"IDREFSBase",!0),UJ(n.K,YHt,"Int",!0),UJ(n.M,Xot,"Integer",!0),UJ(n.L,dot,"IntObject",!0),UJ(n.P,$ot,"Language",!0),UJ(n.Q,nUt,"Long",!0),UJ(n.R,yot,"LongObject",!0),UJ(n.S,$ot,"Name",!0),UJ(n.T,$ot,Sct,!0),UJ(n.U,Xot,"NegativeInteger",!0),UJ(n.V,$ot,xct,!0),UJ(n.X,yat,"NMTOKENS",!0),UJ(n.W,yat,"NMTOKENSBase",!0),UJ(n.Y,Xot,"NonNegativeInteger",!0),UJ(n.Z,Xot,"NonPositiveInteger",!0),UJ(n.$,$ot,"NormalizedString",!0),UJ(n._,$ot,"NOTATION",!0),UJ(n.ab,$ot,"PositiveInteger",!0),UJ(n.cb,$ot,"QName",!0),UJ(n.db,rUt,"Short",!0),UJ(n.eb,Tot,"ShortObject",!0),UJ(n.gb,$ot,C1n,!0),UJ(n.hb,$ot,"Time",!0),UJ(n.ib,$ot,"Token",!0),UJ(n.jb,rUt,"UnsignedByte",!0),UJ(n.kb,Tot,"UnsignedByteObject",!0),UJ(n.lb,nUt,"UnsignedInt",!0),UJ(n.mb,yot,"UnsignedIntObject",!0),UJ(n.nb,Xot,"UnsignedLong",!0),UJ(n.ob,YHt,"UnsignedShort",!0),UJ(n.pb,dot,"UnsignedShortObject",!0),nwn(n,lct),iZn(n))}function nZn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X;if(r.$g())return hZ(),hZ(),zot;if(oM(gK(zDn(t,(XYn(),z$t)))))return hZ(),hZ(),zot;if(M=0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,T=!(j=bLn(t)).dc(),M||T){if(!(c=uG(zDn(t,yDt),143)))throw hv(new jM("Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout."));if(U=bA(c,(rDn(),yFt)),gkn(t),!M&&T&&!U)return hZ(),hZ(),zot;if(m=new Zm,xA(zDn(t,E$t))===xA((Own(),Ixt))&&(bA(c,mFt)||bA(c,pFt))){if(oM(gK(zDn(t,HDt))))throw hv(new jM("Topdown layout cannot be used together with hierarchy handling."));for(N=dBn(n,t),Qon($=new lS,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=$.b;)gkn(A=uG(0==$.b?null:(MK(0!=$.b),Lrn($,$.a.a)),27)),xA(zDn(A,E$t))===xA(Axt)||vnn(A,e$t)&&!k9(c,zDn(A,yDt))?(Ohn(m,nZn(n,A,i,r)),Myn(A,E$t,Axt),HHn(A)):Qon($,(!A.a&&(A.a=new fV(bFt,A,10,11)),A.a))}else{if(N=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i,oM(gK(zDn(t,HDt)))){if((G=r.eh(1)).Ug(Lnt,1),null==zDn(t,UDt))throw hv(new jM(t.k+" has not been assigned a top-down node type."));if(uG(zDn(t,UDt),280)==(Iwn(),fKt)||uG(zDn(t,UDt),280)==bKt)for(p=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));p.e!=p.i.gc();)if(g=uG(Zkn(p),27),O=uG(zDn(g,yDt),143),(!g.a&&(g.a=new fV(bFt,g,10,11)),g.a).i>0&&(A1(O.f),0)){if(uG(zDn(g,UDt),280)==fKt)throw hv(new jM("Topdown Layout Providers should only be used on parallel nodes."));XA(A1(O.f)),null.Um(),vN(g,e.Math.max(g.g,null.Vm),e.Math.max(g.f,null.Vm))}else null!=zDn(g,VDt)&&(H=uG(zDn(g,VDt),347).Tg(g),vN(g,e.Math.max(g.g,H.a),e.Math.max(g.f,H.b)));if(D=uG(zDn(t,W$t),107),b=t.g-(D.b+D.c),l=t.f-(D.d+D.a),G.bh("Available Child Area: ("+b+"|"+l+")"),Myn(t,c$t,b/l),Mkn(t,c,r.eh(N)),uG(zDn(t,UDt),280)==bKt&&(VJn(t),vN(t,D.b+uM(pK(zDn(t,h$t)))+D.c,D.d+uM(pK(zDn(t,s$t)))+D.a)),G.bh("Executed layout algorithm: "+mK(zDn(t,e$t))+" on node "+t.k),uG(zDn(t,UDt),280)==fKt){if(b<0||l<0)throw hv(new jM("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(vnn(t,h$t)||vnn(t,s$t)||VJn(t),d=uM(pK(zDn(t,h$t))),w=uM(pK(zDn(t,s$t))),G.bh("Desired Child Area: ("+d+"|"+w+")"),R=b/d,K=l/w,x=e.Math.min(R,e.Math.min(K,uM(pK(zDn(t,GDt))))),Myn(t,XDt,x),G.bh(t.k+" -- Local Scale Factor (X|Y): ("+R+"|"+K+")"),v=uG(zDn(t,l$t),21),a=0,o=0,x<R&&(v.Hc((ZSn(),VNt))?a=(b/2-d*x/2)/x:v.Hc(QNt)&&(a=(b-d*x)/x)),x<K&&(v.Hc((ZSn(),YNt))?o=(l/2-w*x/2)/x:v.Hc(JNt)&&(o=(l-w*x)/x)),q=a+(D.b/x-D.b),X=o+(D.d/x-D.d),G.bh("Shift: ("+q+"|"+X+")"),L=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));L.e!=L.i.gc();)ycn(A=uG(Zkn(L),27),A.i+q),Mcn(A,A.j+X);for(y=new DD((!t.b&&(t.b=new fV(aFt,t,12,3)),t.b));y.e!=y.i.gc();){for(_=new DD((!(k=uG(Zkn(y),74)).a&&(k.a=new fV(oFt,k,6,6)),k.a));_.e!=_.i.gc();)for(MN(F=uG(Zkn(_),166),F.j+q,F.k+X),yN(F,F.b+q,F.c+X),s=new DD((!F.a&&(F.a=new MD(eFt,F,5)),F.a));s.e!=s.i.gc();)mN(u=uG(Zkn(s),377),u.a+q,u.b+X);for(I=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));I.e!=I.i.gc();)kN(C=uG(Zkn(I),135),C.i+q,C.j+X);for(S=Fkn(P=uG(zDn(k,L$t),75),0);S.b!=S.d.c;)(E=uG(I6(S),8)).a+=q,E.b+=X;Myn(k,L$t,P)}}G.Vg()}for(f=new DD((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));f.e!=f.i.gc();)Ohn(m,nZn(n,h=uG(Zkn(f),27),i,r)),HHn(h)}if(r.$g())return hZ(),hZ(),zot;for(B=new Ww(m);B.a<B.c.c.length;)Myn(uG(N3(B),74),z$t,(qx(),!0));return oM(gK(zDn(t,HDt)))||Mkn(t,c,r.eh(N)),kUn(m),T&&U?j:(hZ(),hZ(),zot)}return hZ(),hZ(),zot}function tZn(n,t){var e;return yHt||(yHt=new Ym,MHt=new Ym,QYn(),QYn(),zmn(e=new K3(4),"\t\n\r\r "),r2(yHt,Jct,e),r2(MHt,Jct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),nat),r2(yHt,Wct,e),r2(MHt,Wct,FGn(e)),zmn(e=new K3(4),tat),TXn(e,uG(U1(yHt,Wct),122)),r2(yHt,Qct,e),r2(MHt,Qct,FGn(e)),zmn(e=new K3(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"),r2(yHt,Yct,e),r2(MHt,Yct,FGn(e)),zmn(e=new K3(4),tat),HFn(e,95,95),HFn(e,58,58),r2(yHt,Zct,e),r2(MHt,Zct,FGn(e))),uG(U1(t?yHt:MHt,n),138)}function eZn(n){hP(n,new hCn(_T(xT(FT(DT(KT(RT(new bu,S0n),"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 Tc),S0n),WX((rDn(),jFt),Uhn(cT(PFt,1),p1n,245,0,[yFt,MFt,kFt,TFt,mFt,pFt]))))),U4(n,S0n,A8n,Jkn(lTt)),U4(n,S0n,L8n,Jkn(bTt)),U4(n,S0n,D3n,Jkn(wTt)),U4(n,S0n,N8n,Jkn(dTt)),U4(n,S0n,u4n,Jkn(pTt)),U4(n,S0n,$8n,Jkn(mTt)),U4(n,S0n,D8n,Jkn(yTt)),U4(n,S0n,x8n,Jkn(TTt)),U4(n,S0n,R8n,Jkn(jTt)),U4(n,S0n,K8n,Jkn(MTt)),U4(n,S0n,o4n,Jkn(ETt)),U4(n,S0n,F8n,Jkn(PTt)),U4(n,S0n,_8n,Jkn(ITt)),U4(n,S0n,B8n,Jkn(kTt)),U4(n,S0n,O5n,Jkn(fTt)),U4(n,S0n,L5n,Jkn(gTt)),U4(n,S0n,A5n,Jkn(vTt)),U4(n,S0n,N5n,Jkn(STt)),U4(n,S0n,a4n,xwn(0)),U4(n,S0n,$5n,Jkn(aTt)),U4(n,S0n,D5n,Jkn(oTt)),U4(n,S0n,x5n,Jkn(uTt)),U4(n,S0n,U5n,Jkn(qTt)),U4(n,S0n,G5n,Jkn(RTt)),U4(n,S0n,q5n,Jkn(KTt)),U4(n,S0n,X5n,Jkn(BTt)),U4(n,S0n,z5n,Jkn(FTt)),U4(n,S0n,V5n,Jkn(_Tt)),U4(n,S0n,W5n,Jkn(zTt)),U4(n,S0n,Q5n,Jkn(XTt)),U4(n,S0n,J5n,Jkn(UTt)),U4(n,S0n,Y5n,Jkn(HTt)),U4(n,S0n,Z5n,Jkn(GTt)),U4(n,S0n,T5n,Jkn(LMt)),U4(n,S0n,j5n,Jkn(NMt)),U4(n,S0n,P5n,Jkn(Zyt)),U4(n,S0n,C5n,Jkn(nMt)),U4(n,S0n,k4n,Jkn(NTt)),U4(n,S0n,y4n,Jkn(DTt)),U4(n,S0n,M4n,Jkn(LTt)),U4(n,S0n,T4n,Jkn(ATt)),U4(n,S0n,j4n,$Tt),U4(n,S0n,K3n,BMt),U4(n,S0n,m8n,Wyt),U4(n,S0n,H8n,0),U4(n,S0n,s4n,xwn(1)),U4(n,S0n,R3n,r4n),U4(n,S0n,U8n,Jkn(FMt)),U4(n,S0n,l4n,Jkn(JMt)),U4(n,S0n,G8n,Jkn(eTt)),U4(n,S0n,q8n,Jkn(_yt)),U4(n,S0n,X8n,Jkn(byt)),U4(n,S0n,b8n,Jkn(rMt)),U4(n,S0n,h4n,(qx(),!0)),U4(n,S0n,z8n,Jkn(sMt)),U4(n,S0n,V8n,Jkn(hMt)),U4(n,S0n,p4n,Jkn(DMt)),U4(n,S0n,g4n,Jkn(KMt)),U4(n,S0n,d4n,Jkn(xMt)),U4(n,S0n,W8n,Uyt),U4(n,S0n,m4n,Jkn(PMt)),U4(n,S0n,Q8n,Jkn(SMt)),U4(n,S0n,v4n,Jkn(nTt)),U4(n,S0n,J8n,Jkn(ZMt)),U4(n,S0n,Y8n,Jkn(tTt)),U4(n,S0n,Z8n,GMt),U4(n,S0n,n9n,Jkn(XMt)),U4(n,S0n,t9n,Jkn(zMt)),U4(n,S0n,e9n,Jkn(VMt)),U4(n,S0n,i9n,Jkn(qMt)),U4(n,S0n,W6n,Jkn(xTt)),U4(n,S0n,Y6n,Jkn(MMt)),U4(n,S0n,r5n,Jkn(yMt)),U4(n,S0n,V6n,Jkn(OTt)),U4(n,S0n,Z6n,Jkn(gMt)),U4(n,S0n,J6n,Jkn(Fyt)),U4(n,S0n,o5n,Jkn(Kyt)),U4(n,S0n,u5n,Jkn(Cyt)),U4(n,S0n,d5n,Jkn(Iyt)),U4(n,S0n,g5n,Jkn(Ayt)),U4(n,S0n,p5n,Jkn(Oyt)),U4(n,S0n,h5n,Jkn(Ryt)),U4(n,S0n,G6n,Jkn(jMt)),U4(n,S0n,q6n,Jkn(EMt)),U4(n,S0n,U6n,Jkn(lMt)),U4(n,S0n,m5n,Jkn($Mt)),U4(n,S0n,y5n,Jkn(IMt)),U4(n,S0n,H6n,Jkn(eMt)),U4(n,S0n,M5n,Jkn(AMt)),U4(n,S0n,E5n,Jkn(Jyt)),U4(n,S0n,S5n,Jkn(Yyt)),U4(n,S0n,r9n,Jkn(Pyt)),U4(n,S0n,k5n,Jkn(CMt)),U4(n,S0n,K5n,Jkn(vyt)),U4(n,S0n,F5n,Jkn(myt)),U4(n,S0n,R5n,Jkn(pyt)),U4(n,S0n,_5n,Jkn(aMt)),U4(n,S0n,B5n,Jkn(cMt)),U4(n,S0n,H5n,Jkn(oMt)),U4(n,S0n,x4n,Jkn(RMt)),U4(n,S0n,c9n,Jkn(bMt)),U4(n,S0n,x3n,Jkn(tMt)),U4(n,S0n,a9n,Jkn(Xyt)),U4(n,S0n,b4n,Jkn(qyt)),U4(n,S0n,s5n,Jkn(Lyt)),U4(n,S0n,o9n,Jkn(YMt)),U4(n,S0n,u9n,Jkn(gyt)),U4(n,S0n,s9n,Jkn(uMt)),U4(n,S0n,h9n,Jkn(WMt)),U4(n,S0n,f9n,Jkn(HMt)),U4(n,S0n,l9n,Jkn(UMt)),U4(n,S0n,e5n,Jkn(mMt)),U4(n,S0n,i5n,Jkn(vMt)),U4(n,S0n,b9n,Jkn(rTt)),U4(n,S0n,X6n,Jkn(wyt)),U4(n,S0n,c5n,Jkn(kMt)),U4(n,S0n,n8n,Jkn(zyt)),U4(n,S0n,t8n,Jkn(Gyt)),U4(n,S0n,w9n,Jkn(TMt)),U4(n,S0n,a5n,Jkn(wMt)),U4(n,S0n,v5n,Jkn(OMt)),U4(n,S0n,d9n,Jkn(CTt)),U4(n,S0n,B6n,Jkn(Hyt)),U4(n,S0n,z6n,Jkn(iTt)),U4(n,S0n,I5n,Jkn(Qyt)),U4(n,S0n,f5n,Jkn(Nyt)),U4(n,S0n,l5n,Jkn($yt)),U4(n,S0n,n5n,Jkn(dMt)),U4(n,S0n,b5n,Jkn(Dyt)),U4(n,S0n,g9n,Jkn(fMt)),U4(n,S0n,t5n,Jkn(pMt)),U4(n,S0n,w5n,Jkn(xyt)),U4(n,S0n,e8n,Jkn(Syt)),U4(n,S0n,a8n,Jkn(Tyt)),U4(n,S0n,o8n,Jkn(yyt)),U4(n,S0n,u8n,Jkn(Myt)),U4(n,S0n,r8n,Jkn(jyt)),U4(n,S0n,c8n,Jkn(kyt)),U4(n,S0n,i8n,Jkn(Eyt)),U4(n,S0n,Q6n,Jkn(iMt))}function iZn(n){Hxn(n.a,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anySimpleType"])),Hxn(n.b,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyType",Srt,jrt])),Hxn(uG(zrn(gZ(n.b),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.b),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,fct,bct,Bet,":1",Mct,"lax"])),Hxn(uG(zrn(gZ(n.b),2),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ict,fct,bct,Bet,":2",Mct,"lax"])),Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"anyURI",hct,act])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"base64Binary",hct,act])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,dZn,hct,act])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"boolean:Object",Krt,dZn])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,lrt])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"byte:Object",Krt,lrt])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"date",hct,act])),Hxn(n.k,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"dateTime",hct,act])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"decimal",hct,act])),Hxn(n.o,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,wrt,hct,act])),Hxn(n.p,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"double:Object",Krt,wrt])),Hxn(n.q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"duration",hct,act])),Hxn(n.s,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ENTITIES",Krt,Tct,jct,"1"])),Hxn(n.r,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Tct,oct,Ect])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ect,Krt,Sct])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,drt,hct,act])),Hxn(n.v,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"float:Object",Krt,drt])),Hxn(n.w,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gDay",hct,act])),Hxn(n.B,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonth",hct,act])),Hxn(n.A,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gMonthDay",hct,act])),Hxn(n.C,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYear",hct,act])),Hxn(n.D,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"gYearMonth",hct,act])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"hexBinary",hct,act])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"ID",Krt,Sct])),Hxn(n.H,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREF",Krt,Sct])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"IDREFS",Krt,Pct,jct,"1"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Pct,oct,"IDREF"])),Hxn(n.K,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,grt])),Hxn(n.M,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Cct])),Hxn(n.L,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"int:Object",Krt,grt])),Hxn(n.P,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"language",Krt,Ict,Oct,Act])),Hxn(n.Q,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,prt])),Hxn(n.R,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"long:Object",Krt,prt])),Hxn(n.S,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"Name",Krt,Ict,Oct,Lct])),Hxn(n.T,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Sct,Krt,"Name",Oct,Nct])),Hxn(n.U,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"negativeInteger",Krt,$ct,Dct,"-1"])),Hxn(n.V,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,xct,Krt,Ict,Oct,"\\c+"])),Hxn(n.X,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NMTOKENS",Krt,Rct,jct,"1"])),Hxn(n.W,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Rct,oct,xct])),Hxn(n.Y,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Kct,Krt,Cct,Fct,"0"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,$ct,Krt,Cct,Dct,"0"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,_ct,Krt,pZn,hct,"replace"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"NOTATION",hct,act])),Hxn(n.ab,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"positiveInteger",Krt,Kct,Fct,"1"])),Hxn(n.bb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"processingInstruction_._type",Srt,"empty"])),Hxn(uG(zrn(gZ(n.bb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"data"])),Hxn(uG(zrn(gZ(n.bb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,Ret])),Hxn(n.cb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"QName",hct,act])),Hxn(n.db,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,mrt])),Hxn(n.eb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"short:Object",Krt,mrt])),Hxn(n.fb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"simpleAnyType",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":3",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),1),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":4",Srt,tct])),Hxn(uG(zrn(gZ(n.fb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,":5",Srt,tct])),Hxn(n.gb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,pZn,hct,"preserve"])),Hxn(n.hb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"time",hct,act])),Hxn(n.ib,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Ict,Krt,_ct,hct,act])),Hxn(n.jb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Bct,Dct,"255",Fct,"0"])),Hxn(n.kb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedByte:Object",Krt,Bct])),Hxn(n.lb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Hct,Dct,"4294967295",Fct,"0"])),Hxn(n.mb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedInt:Object",Krt,Hct])),Hxn(n.nb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedLong",Krt,Kct,Dct,Uct,Fct,"0"])),Hxn(n.ob,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,Gct,Dct,"65535",Fct,"0"])),Hxn(n.pb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"unsignedShort:Object",Krt,Gct])),Hxn(n.qb,Ert,Uhn(cT($ot,1),zZn,2,6,[Bet,"",Srt,jrt])),Hxn(uG(zrn(gZ(n.qb),0),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,cct,Bet,":mixed"])),Hxn(uG(zrn(gZ(n.qb),1),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xmlns:prefix"])),Hxn(uG(zrn(gZ(n.qb),2),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,ect,Bet,"xsi:schemaLocation"])),Hxn(uG(zrn(gZ(n.qb),3),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"cDATA",uct,sct])),Hxn(uG(zrn(gZ(n.qb),4),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,"comment",uct,sct])),Hxn(uG(zrn(gZ(n.qb),5),19),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,qct,uct,sct])),Hxn(uG(zrn(gZ(n.qb),6),35),Ert,Uhn(cT($ot,1),zZn,2,6,[Srt,rct,Bet,get,uct,sct]))}function rZn(n){return m_("_UI_EMFDiagnostic_marker",n)?"EMF Problem":m_("_UI_CircularContainment_diagnostic",n)?"An object may not circularly contain itself":m_(nit,n)?"Wrong character.":m_(tit,n)?"Invalid reference number.":m_(eit,n)?"A character is required after \\.":m_(iit,n)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":m_(rit,n)?"'(?<' or '(?<!' is expected.":m_(cit,n)?"A comment is not terminated.":m_(ait,n)?"')' is expected.":m_(oit,n)?"Unexpected end of the pattern in a modifier group.":m_(uit,n)?"':' is expected.":m_(sit,n)?"Unexpected end of the pattern in a conditional group.":m_(hit,n)?"A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.":m_(fit,n)?"There are more than three choices in a conditional group.":m_(lit,n)?"A character in U+0040-U+005f must follow \\c.":m_(bit,n)?"A '{' is required before a character category.":m_(wit,n)?"A property name is not closed by '}'.":m_(dit,n)?"Unexpected meta character.":m_(git,n)?"Unknown property.":m_(pit,n)?"A POSIX character class must be closed by ':]'.":m_(mit,n)?"Unexpected end of the pattern in a character class.":m_(vit,n)?"Unknown name for a POSIX character class.":m_("parser.cc.4",n)?"'-' is invalid here.":m_(kit,n)?"']' is expected.":m_(yit,n)?"'[' is invalid in a character class. Write '\\['.":m_(Mit,n)?"']' is invalid in a character class. Write '\\]'.":m_(Tit,n)?"'-' is an invalid character range. Write '\\-'.":m_(jit,n)?"'[' is expected.":m_(Eit,n)?"')' or '-[' or '+[' or '&[' is expected.":m_(Sit,n)?"The range end code point is less than the start code point.":m_(Pit,n)?"Invalid Unicode hex notation.":m_(Cit,n)?"Overflow in a hex notation.":m_(Iit,n)?"'\\x{' must be closed by '}'.":m_(Oit,n)?"Invalid Unicode code point.":m_(Ait,n)?"An anchor must not be here.":m_(Lit,n)?"This expression is not supported in the current option setting.":m_(Nit,n)?"Invalid quantifier. A digit is expected.":m_($it,n)?"Invalid quantifier. Invalid quantity or a '}' is missing.":m_(Dit,n)?"Invalid quantifier. A digit or '}' is expected.":m_(xit,n)?"Invalid quantifier. A min quantity must be <= a max quantity.":m_(Rit,n)?"Invalid quantifier. A quantity value overflow.":m_("_UI_PackageRegistry_extensionpoint",n)?"Ecore Package Registry for Generated Packages":m_("_UI_DynamicPackageRegistry_extensionpoint",n)?"Ecore Package Registry for Dynamic Packages":m_("_UI_FactoryRegistry_extensionpoint",n)?"Ecore Factory Override Registry":m_("_UI_URIExtensionParserRegistry_extensionpoint",n)?"URI Extension Parser Registry":m_("_UI_URIProtocolParserRegistry_extensionpoint",n)?"URI Protocol Parser Registry":m_("_UI_URIContentParserRegistry_extensionpoint",n)?"URI Content Parser Registry":m_("_UI_ContentHandlerRegistry_extensionpoint",n)?"Content Handler Registry":m_("_UI_URIMappingRegistry_extensionpoint",n)?"URI Converter Mapping Registry":m_("_UI_PackageRegistryImplementation_extensionpoint",n)?"Ecore Package Registry Implementation":m_("_UI_ValidationDelegateRegistry_extensionpoint",n)?"Validation Delegate Registry":m_("_UI_SettingDelegateRegistry_extensionpoint",n)?"Feature Setting Delegate Factory Registry":m_("_UI_InvocationDelegateRegistry_extensionpoint",n)?"Operation Invocation Delegate Factory Registry":m_("_UI_EClassInterfaceNotAbstract_diagnostic",n)?"A class that is an interface must also be abstract":m_("_UI_EClassNoCircularSuperTypes_diagnostic",n)?"A class may not be a super type of itself":m_("_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic",n)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":m_("_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic",n)?"The opposite of the opposite may not be a reference different from this one":m_("_UI_EReferenceOppositeNotFeatureOfType_diagnostic",n)?"The opposite must be a feature of the reference's type":m_("_UI_EReferenceTransientOppositeNotTransient_diagnostic",n)?"The opposite of a transient reference must be transient if it is proxy resolving":m_("_UI_EReferenceOppositeBothContainment_diagnostic",n)?"The opposite of a containment reference must not be a containment reference":m_("_UI_EReferenceConsistentUnique_diagnostic",n)?"A containment or bidirectional reference must be unique if its upper bound is different from 1":m_("_UI_ETypedElementNoType_diagnostic",n)?"The typed element must have a type":m_("_UI_EAttributeNoDataType_diagnostic",n)?"The generic attribute type must not refer to a class":m_("_UI_EReferenceNoClass_diagnostic",n)?"The generic reference type must not refer to a data type":m_("_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic",n)?"A generic type can't refer to both a type parameter and a classifier":m_("_UI_EGenericTypeNoClass_diagnostic",n)?"A generic super type must refer to a class":m_("_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic",n)?"A generic type in this context must refer to a classifier or a type parameter":m_("_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic",n)?"A generic type may have bounds only when used as a type argument":m_("_UI_EGenericTypeNoUpperAndLowerBound_diagnostic",n)?"A generic type must not have both a lower and an upper bound":m_("_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic",n)?"A generic type with bounds must not also refer to a type parameter or classifier":m_("_UI_EGenericTypeNoArguments_diagnostic",n)?"A generic type may have arguments only if it refers to a classifier":m_("_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic",n)?"A generic type may only refer to a type parameter that is in scope":n}function cZn(n){var t,e,i,r,c,a,o;n.r||(n.r=!0,qon(n,"graph"),Xon(n,"graph"),zon(n,aet),mhn(n.o,"T"),ttn(n1(n.a),n.p),ttn(n1(n.f),n.a),ttn(n1(n.n),n.f),ttn(n1(n.g),n.n),ttn(n1(n.c),n.n),ttn(n1(n.i),n.c),ttn(n1(n.j),n.c),ttn(n1(n.d),n.f),ttn(n1(n.e),n.a),A4(n.p,Pht,m3n,!0,!0,!1),o=_hn(a=Kln(n.p,n.p,"setProperty")),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),rPn(e,i=$Y(o)),OSn(a,t,oet),OSn(a,t=$Y(o),uet),o=_hn(a=Kln(n.p,null,"getProperty")),t=NY(n.o),e=$Y(o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),(c=CCn(a,t=$Y(o),null))&&c.oj(),a=Kln(n.p,n.wb.e,"hasProperty"),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(a,t,oet),djn(a=Kln(n.p,n.p,"copyProperties"),n.p,set),a=Kln(n.p,null,"getAllProperties"),t=NY(n.wb.P),e=NY(n.o),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),i=new ev,ttn((!e.d&&(e.d=new MD(g_t,e,1)),e.d),i),e=NY(n.wb.M),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(a,t,null))&&r.oj(),A4(n.a,tFt,Att,!0,!1,!0),ujn(uG(zrn(gZ(n.a),0),19),n.k,null,het,0,-1,tFt,!1,!1,!0,!0,!1,!1,!1),A4(n.f,iFt,Ntt,!0,!1,!0),ujn(uG(zrn(gZ(n.f),0),19),n.g,uG(zrn(gZ(n.g),0),19),"labels",0,-1,iFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.f),1),35),n.wb._,fet,null,0,1,iFt,!1,!1,!0,!1,!0,!1),A4(n.n,rFt,"ElkShape",!0,!1,!0),mun(uG(zrn(gZ(n.n),0),35),n.wb.t,bet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),1),35),n.wb.t,wet,N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),2),35),n.wb.t,"x",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.n),3),35),n.wb.t,"y",N0n,1,1,rFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.n,null,"setDimensions"),n.wb.t,wet),djn(a,n.wb.t,bet),djn(a=Kln(n.n,null,"setLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.g,lFt,Ftt,!1,!1,!0),ujn(uG(zrn(gZ(n.g),0),19),n.f,uG(zrn(gZ(n.f),0),19),det,0,1,lFt,!1,!1,!0,!1,!1,!1,!1),mun(uG(zrn(gZ(n.g),1),35),n.wb._,get,"",0,1,lFt,!1,!1,!0,!1,!0,!1),A4(n.c,cFt,$tt,!0,!1,!0),ujn(uG(zrn(gZ(n.c),0),19),n.d,uG(zrn(gZ(n.d),1),19),"outgoingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.c),1),19),n.d,uG(zrn(gZ(n.d),2),19),"incomingEdges",0,-1,cFt,!1,!1,!0,!1,!0,!1,!1),A4(n.i,bFt,_tt,!1,!1,!0),ujn(uG(zrn(gZ(n.i),0),19),n.j,uG(zrn(gZ(n.j),0),19),"ports",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),1),19),n.i,uG(zrn(gZ(n.i),2),19),pet,0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.i),2),19),n.i,uG(zrn(gZ(n.i),1),19),det,0,1,bFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.i),3),19),n.d,uG(zrn(gZ(n.d),0),19),"containedEdges",0,-1,bFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.i),4),35),n.wb.e,met,null,0,1,bFt,!0,!0,!1,!1,!0,!0),A4(n.j,wFt,Btt,!1,!1,!0),ujn(uG(zrn(gZ(n.j),0),19),n.i,uG(zrn(gZ(n.i),0),19),det,0,1,wFt,!1,!1,!0,!1,!1,!1,!1),A4(n.d,aFt,Dtt,!1,!1,!0),ujn(uG(zrn(gZ(n.d),0),19),n.i,uG(zrn(gZ(n.i),3),19),"containingNode",0,1,aFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.d),1),19),n.c,uG(zrn(gZ(n.c),0),19),vet,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),2),19),n.c,uG(zrn(gZ(n.c),1),19),ket,0,-1,aFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.d),3),19),n.e,uG(zrn(gZ(n.e),5),19),yet,0,-1,aFt,!1,!1,!0,!0,!1,!1,!1),mun(uG(zrn(gZ(n.d),4),35),n.wb.e,"hyperedge",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),5),35),n.wb.e,met,null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),6),35),n.wb.e,"selfloop",null,0,1,aFt,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.d),7),35),n.wb.e,"connected",null,0,1,aFt,!0,!0,!1,!1,!0,!0),A4(n.b,eFt,Ltt,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.wb.t,"x",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.b),1),35),n.wb.t,"y",N0n,1,1,eFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.b,null,"set"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.e,oFt,xtt,!1,!1,!0),mun(uG(zrn(gZ(n.e),0),35),n.wb.t,"startX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),1),35),n.wb.t,"startY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),2),35),n.wb.t,"endX",null,0,1,oFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.e),3),35),n.wb.t,"endY",null,0,1,oFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.e),4),19),n.b,null,Met,0,-1,oFt,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.e),5),19),n.d,uG(zrn(gZ(n.d),3),19),det,0,1,oFt,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.e),6),19),n.c,null,Tet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),7),19),n.c,null,jet,0,1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),8),19),n.e,uG(zrn(gZ(n.e),9),19),Eet,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.e),9),19),n.e,uG(zrn(gZ(n.e),8),19),Set,0,-1,oFt,!1,!1,!0,!1,!0,!1,!1),mun(uG(zrn(gZ(n.e),10),35),n.wb._,fet,null,0,1,oFt,!1,!1,!0,!1,!0,!1),djn(a=Kln(n.e,null,"setStartLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),djn(a=Kln(n.e,null,"setEndLocation"),n.wb.t,"x"),djn(a,n.wb.t,"y"),A4(n.k,Sat,"ElkPropertyToValueMapEntry",!1,!1,!1),t=NY(n.o),e=new ev,ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.k),0),35),t,"key",Sat,!1,!1,!0,!1),mun(uG(zrn(gZ(n.k),1),35),n.s,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),UJ(n.o,lNt,"IProperty",!0),UJ(n.s,dat,"PropertyValue",!0),nwn(n,aet))}function aZn(){aZn=E,(vHt=Inn(tUt,ret,28,P0n,15,1))[9]=35,vHt[10]=19,vHt[13]=19,vHt[32]=51,vHt[33]=49,vHt[34]=33,qV(vHt,35,38,49),vHt[38]=1,qV(vHt,39,45,49),qV(vHt,45,47,-71),vHt[47]=49,qV(vHt,48,58,-71),vHt[58]=61,vHt[59]=49,vHt[60]=1,vHt[61]=49,vHt[62]=33,qV(vHt,63,65,49),qV(vHt,65,91,-3),qV(vHt,91,93,33),vHt[93]=1,vHt[94]=33,vHt[95]=-3,vHt[96]=33,qV(vHt,97,123,-3),qV(vHt,123,183,33),vHt[183]=-87,qV(vHt,184,192,33),qV(vHt,192,215,-19),vHt[215]=33,qV(vHt,216,247,-19),vHt[247]=33,qV(vHt,248,306,-19),qV(vHt,306,308,33),qV(vHt,308,319,-19),qV(vHt,319,321,33),qV(vHt,321,329,-19),vHt[329]=33,qV(vHt,330,383,-19),vHt[383]=33,qV(vHt,384,452,-19),qV(vHt,452,461,33),qV(vHt,461,497,-19),qV(vHt,497,500,33),qV(vHt,500,502,-19),qV(vHt,502,506,33),qV(vHt,506,536,-19),qV(vHt,536,592,33),qV(vHt,592,681,-19),qV(vHt,681,699,33),qV(vHt,699,706,-19),qV(vHt,706,720,33),qV(vHt,720,722,-87),qV(vHt,722,768,33),qV(vHt,768,838,-87),qV(vHt,838,864,33),qV(vHt,864,866,-87),qV(vHt,866,902,33),vHt[902]=-19,vHt[903]=-87,qV(vHt,904,907,-19),vHt[907]=33,vHt[908]=-19,vHt[909]=33,qV(vHt,910,930,-19),vHt[930]=33,qV(vHt,931,975,-19),vHt[975]=33,qV(vHt,976,983,-19),qV(vHt,983,986,33),vHt[986]=-19,vHt[987]=33,vHt[988]=-19,vHt[989]=33,vHt[990]=-19,vHt[991]=33,vHt[992]=-19,vHt[993]=33,qV(vHt,994,1012,-19),qV(vHt,1012,1025,33),qV(vHt,1025,1037,-19),vHt[1037]=33,qV(vHt,1038,1104,-19),vHt[1104]=33,qV(vHt,1105,1117,-19),vHt[1117]=33,qV(vHt,1118,1154,-19),vHt[1154]=33,qV(vHt,1155,1159,-87),qV(vHt,1159,1168,33),qV(vHt,1168,1221,-19),qV(vHt,1221,1223,33),qV(vHt,1223,1225,-19),qV(vHt,1225,1227,33),qV(vHt,1227,1229,-19),qV(vHt,1229,1232,33),qV(vHt,1232,1260,-19),qV(vHt,1260,1262,33),qV(vHt,1262,1270,-19),qV(vHt,1270,1272,33),qV(vHt,1272,1274,-19),qV(vHt,1274,1329,33),qV(vHt,1329,1367,-19),qV(vHt,1367,1369,33),vHt[1369]=-19,qV(vHt,1370,1377,33),qV(vHt,1377,1415,-19),qV(vHt,1415,1425,33),qV(vHt,1425,1442,-87),vHt[1442]=33,qV(vHt,1443,1466,-87),vHt[1466]=33,qV(vHt,1467,1470,-87),vHt[1470]=33,vHt[1471]=-87,vHt[1472]=33,qV(vHt,1473,1475,-87),vHt[1475]=33,vHt[1476]=-87,qV(vHt,1477,1488,33),qV(vHt,1488,1515,-19),qV(vHt,1515,1520,33),qV(vHt,1520,1523,-19),qV(vHt,1523,1569,33),qV(vHt,1569,1595,-19),qV(vHt,1595,1600,33),vHt[1600]=-87,qV(vHt,1601,1611,-19),qV(vHt,1611,1619,-87),qV(vHt,1619,1632,33),qV(vHt,1632,1642,-87),qV(vHt,1642,1648,33),vHt[1648]=-87,qV(vHt,1649,1720,-19),qV(vHt,1720,1722,33),qV(vHt,1722,1727,-19),vHt[1727]=33,qV(vHt,1728,1743,-19),vHt[1743]=33,qV(vHt,1744,1748,-19),vHt[1748]=33,vHt[1749]=-19,qV(vHt,1750,1765,-87),qV(vHt,1765,1767,-19),qV(vHt,1767,1769,-87),vHt[1769]=33,qV(vHt,1770,1774,-87),qV(vHt,1774,1776,33),qV(vHt,1776,1786,-87),qV(vHt,1786,2305,33),qV(vHt,2305,2308,-87),vHt[2308]=33,qV(vHt,2309,2362,-19),qV(vHt,2362,2364,33),vHt[2364]=-87,vHt[2365]=-19,qV(vHt,2366,2382,-87),qV(vHt,2382,2385,33),qV(vHt,2385,2389,-87),qV(vHt,2389,2392,33),qV(vHt,2392,2402,-19),qV(vHt,2402,2404,-87),qV(vHt,2404,2406,33),qV(vHt,2406,2416,-87),qV(vHt,2416,2433,33),qV(vHt,2433,2436,-87),vHt[2436]=33,qV(vHt,2437,2445,-19),qV(vHt,2445,2447,33),qV(vHt,2447,2449,-19),qV(vHt,2449,2451,33),qV(vHt,2451,2473,-19),vHt[2473]=33,qV(vHt,2474,2481,-19),vHt[2481]=33,vHt[2482]=-19,qV(vHt,2483,2486,33),qV(vHt,2486,2490,-19),qV(vHt,2490,2492,33),vHt[2492]=-87,vHt[2493]=33,qV(vHt,2494,2501,-87),qV(vHt,2501,2503,33),qV(vHt,2503,2505,-87),qV(vHt,2505,2507,33),qV(vHt,2507,2510,-87),qV(vHt,2510,2519,33),vHt[2519]=-87,qV(vHt,2520,2524,33),qV(vHt,2524,2526,-19),vHt[2526]=33,qV(vHt,2527,2530,-19),qV(vHt,2530,2532,-87),qV(vHt,2532,2534,33),qV(vHt,2534,2544,-87),qV(vHt,2544,2546,-19),qV(vHt,2546,2562,33),vHt[2562]=-87,qV(vHt,2563,2565,33),qV(vHt,2565,2571,-19),qV(vHt,2571,2575,33),qV(vHt,2575,2577,-19),qV(vHt,2577,2579,33),qV(vHt,2579,2601,-19),vHt[2601]=33,qV(vHt,2602,2609,-19),vHt[2609]=33,qV(vHt,2610,2612,-19),vHt[2612]=33,qV(vHt,2613,2615,-19),vHt[2615]=33,qV(vHt,2616,2618,-19),qV(vHt,2618,2620,33),vHt[2620]=-87,vHt[2621]=33,qV(vHt,2622,2627,-87),qV(vHt,2627,2631,33),qV(vHt,2631,2633,-87),qV(vHt,2633,2635,33),qV(vHt,2635,2638,-87),qV(vHt,2638,2649,33),qV(vHt,2649,2653,-19),vHt[2653]=33,vHt[2654]=-19,qV(vHt,2655,2662,33),qV(vHt,2662,2674,-87),qV(vHt,2674,2677,-19),qV(vHt,2677,2689,33),qV(vHt,2689,2692,-87),vHt[2692]=33,qV(vHt,2693,2700,-19),vHt[2700]=33,vHt[2701]=-19,vHt[2702]=33,qV(vHt,2703,2706,-19),vHt[2706]=33,qV(vHt,2707,2729,-19),vHt[2729]=33,qV(vHt,2730,2737,-19),vHt[2737]=33,qV(vHt,2738,2740,-19),vHt[2740]=33,qV(vHt,2741,2746,-19),qV(vHt,2746,2748,33),vHt[2748]=-87,vHt[2749]=-19,qV(vHt,2750,2758,-87),vHt[2758]=33,qV(vHt,2759,2762,-87),vHt[2762]=33,qV(vHt,2763,2766,-87),qV(vHt,2766,2784,33),vHt[2784]=-19,qV(vHt,2785,2790,33),qV(vHt,2790,2800,-87),qV(vHt,2800,2817,33),qV(vHt,2817,2820,-87),vHt[2820]=33,qV(vHt,2821,2829,-19),qV(vHt,2829,2831,33),qV(vHt,2831,2833,-19),qV(vHt,2833,2835,33),qV(vHt,2835,2857,-19),vHt[2857]=33,qV(vHt,2858,2865,-19),vHt[2865]=33,qV(vHt,2866,2868,-19),qV(vHt,2868,2870,33),qV(vHt,2870,2874,-19),qV(vHt,2874,2876,33),vHt[2876]=-87,vHt[2877]=-19,qV(vHt,2878,2884,-87),qV(vHt,2884,2887,33),qV(vHt,2887,2889,-87),qV(vHt,2889,2891,33),qV(vHt,2891,2894,-87),qV(vHt,2894,2902,33),qV(vHt,2902,2904,-87),qV(vHt,2904,2908,33),qV(vHt,2908,2910,-19),vHt[2910]=33,qV(vHt,2911,2914,-19),qV(vHt,2914,2918,33),qV(vHt,2918,2928,-87),qV(vHt,2928,2946,33),qV(vHt,2946,2948,-87),vHt[2948]=33,qV(vHt,2949,2955,-19),qV(vHt,2955,2958,33),qV(vHt,2958,2961,-19),vHt[2961]=33,qV(vHt,2962,2966,-19),qV(vHt,2966,2969,33),qV(vHt,2969,2971,-19),vHt[2971]=33,vHt[2972]=-19,vHt[2973]=33,qV(vHt,2974,2976,-19),qV(vHt,2976,2979,33),qV(vHt,2979,2981,-19),qV(vHt,2981,2984,33),qV(vHt,2984,2987,-19),qV(vHt,2987,2990,33),qV(vHt,2990,2998,-19),vHt[2998]=33,qV(vHt,2999,3002,-19),qV(vHt,3002,3006,33),qV(vHt,3006,3011,-87),qV(vHt,3011,3014,33),qV(vHt,3014,3017,-87),vHt[3017]=33,qV(vHt,3018,3022,-87),qV(vHt,3022,3031,33),vHt[3031]=-87,qV(vHt,3032,3047,33),qV(vHt,3047,3056,-87),qV(vHt,3056,3073,33),qV(vHt,3073,3076,-87),vHt[3076]=33,qV(vHt,3077,3085,-19),vHt[3085]=33,qV(vHt,3086,3089,-19),vHt[3089]=33,qV(vHt,3090,3113,-19),vHt[3113]=33,qV(vHt,3114,3124,-19),vHt[3124]=33,qV(vHt,3125,3130,-19),qV(vHt,3130,3134,33),qV(vHt,3134,3141,-87),vHt[3141]=33,qV(vHt,3142,3145,-87),vHt[3145]=33,qV(vHt,3146,3150,-87),qV(vHt,3150,3157,33),qV(vHt,3157,3159,-87),qV(vHt,3159,3168,33),qV(vHt,3168,3170,-19),qV(vHt,3170,3174,33),qV(vHt,3174,3184,-87),qV(vHt,3184,3202,33),qV(vHt,3202,3204,-87),vHt[3204]=33,qV(vHt,3205,3213,-19),vHt[3213]=33,qV(vHt,3214,3217,-19),vHt[3217]=33,qV(vHt,3218,3241,-19),vHt[3241]=33,qV(vHt,3242,3252,-19),vHt[3252]=33,qV(vHt,3253,3258,-19),qV(vHt,3258,3262,33),qV(vHt,3262,3269,-87),vHt[3269]=33,qV(vHt,3270,3273,-87),vHt[3273]=33,qV(vHt,3274,3278,-87),qV(vHt,3278,3285,33),qV(vHt,3285,3287,-87),qV(vHt,3287,3294,33),vHt[3294]=-19,vHt[3295]=33,qV(vHt,3296,3298,-19),qV(vHt,3298,3302,33),qV(vHt,3302,3312,-87),qV(vHt,3312,3330,33),qV(vHt,3330,3332,-87),vHt[3332]=33,qV(vHt,3333,3341,-19),vHt[3341]=33,qV(vHt,3342,3345,-19),vHt[3345]=33,qV(vHt,3346,3369,-19),vHt[3369]=33,qV(vHt,3370,3386,-19),qV(vHt,3386,3390,33),qV(vHt,3390,3396,-87),qV(vHt,3396,3398,33),qV(vHt,3398,3401,-87),vHt[3401]=33,qV(vHt,3402,3406,-87),qV(vHt,3406,3415,33),vHt[3415]=-87,qV(vHt,3416,3424,33),qV(vHt,3424,3426,-19),qV(vHt,3426,3430,33),qV(vHt,3430,3440,-87),qV(vHt,3440,3585,33),qV(vHt,3585,3631,-19),vHt[3631]=33,vHt[3632]=-19,vHt[3633]=-87,qV(vHt,3634,3636,-19),qV(vHt,3636,3643,-87),qV(vHt,3643,3648,33),qV(vHt,3648,3654,-19),qV(vHt,3654,3663,-87),vHt[3663]=33,qV(vHt,3664,3674,-87),qV(vHt,3674,3713,33),qV(vHt,3713,3715,-19),vHt[3715]=33,vHt[3716]=-19,qV(vHt,3717,3719,33),qV(vHt,3719,3721,-19),vHt[3721]=33,vHt[3722]=-19,qV(vHt,3723,3725,33),vHt[3725]=-19,qV(vHt,3726,3732,33),qV(vHt,3732,3736,-19),vHt[3736]=33,qV(vHt,3737,3744,-19),vHt[3744]=33,qV(vHt,3745,3748,-19),vHt[3748]=33,vHt[3749]=-19,vHt[3750]=33,vHt[3751]=-19,qV(vHt,3752,3754,33),qV(vHt,3754,3756,-19),vHt[3756]=33,qV(vHt,3757,3759,-19),vHt[3759]=33,vHt[3760]=-19,vHt[3761]=-87,qV(vHt,3762,3764,-19),qV(vHt,3764,3770,-87),vHt[3770]=33,qV(vHt,3771,3773,-87),vHt[3773]=-19,qV(vHt,3774,3776,33),qV(vHt,3776,3781,-19),vHt[3781]=33,vHt[3782]=-87,vHt[3783]=33,qV(vHt,3784,3790,-87),qV(vHt,3790,3792,33),qV(vHt,3792,3802,-87),qV(vHt,3802,3864,33),qV(vHt,3864,3866,-87),qV(vHt,3866,3872,33),qV(vHt,3872,3882,-87),qV(vHt,3882,3893,33),vHt[3893]=-87,vHt[3894]=33,vHt[3895]=-87,vHt[3896]=33,vHt[3897]=-87,qV(vHt,3898,3902,33),qV(vHt,3902,3904,-87),qV(vHt,3904,3912,-19),vHt[3912]=33,qV(vHt,3913,3946,-19),qV(vHt,3946,3953,33),qV(vHt,3953,3973,-87),vHt[3973]=33,qV(vHt,3974,3980,-87),qV(vHt,3980,3984,33),qV(vHt,3984,3990,-87),vHt[3990]=33,vHt[3991]=-87,vHt[3992]=33,qV(vHt,3993,4014,-87),qV(vHt,4014,4017,33),qV(vHt,4017,4024,-87),vHt[4024]=33,vHt[4025]=-87,qV(vHt,4026,4256,33),qV(vHt,4256,4294,-19),qV(vHt,4294,4304,33),qV(vHt,4304,4343,-19),qV(vHt,4343,4352,33),vHt[4352]=-19,vHt[4353]=33,qV(vHt,4354,4356,-19),vHt[4356]=33,qV(vHt,4357,4360,-19),vHt[4360]=33,vHt[4361]=-19,vHt[4362]=33,qV(vHt,4363,4365,-19),vHt[4365]=33,qV(vHt,4366,4371,-19),qV(vHt,4371,4412,33),vHt[4412]=-19,vHt[4413]=33,vHt[4414]=-19,vHt[4415]=33,vHt[4416]=-19,qV(vHt,4417,4428,33),vHt[4428]=-19,vHt[4429]=33,vHt[4430]=-19,vHt[4431]=33,vHt[4432]=-19,qV(vHt,4433,4436,33),qV(vHt,4436,4438,-19),qV(vHt,4438,4441,33),vHt[4441]=-19,qV(vHt,4442,4447,33),qV(vHt,4447,4450,-19),vHt[4450]=33,vHt[4451]=-19,vHt[4452]=33,vHt[4453]=-19,vHt[4454]=33,vHt[4455]=-19,vHt[4456]=33,vHt[4457]=-19,qV(vHt,4458,4461,33),qV(vHt,4461,4463,-19),qV(vHt,4463,4466,33),qV(vHt,4466,4468,-19),vHt[4468]=33,vHt[4469]=-19,qV(vHt,4470,4510,33),vHt[4510]=-19,qV(vHt,4511,4520,33),vHt[4520]=-19,qV(vHt,4521,4523,33),vHt[4523]=-19,qV(vHt,4524,4526,33),qV(vHt,4526,4528,-19),qV(vHt,4528,4535,33),qV(vHt,4535,4537,-19),vHt[4537]=33,vHt[4538]=-19,vHt[4539]=33,qV(vHt,4540,4547,-19),qV(vHt,4547,4587,33),vHt[4587]=-19,qV(vHt,4588,4592,33),vHt[4592]=-19,qV(vHt,4593,4601,33),vHt[4601]=-19,qV(vHt,4602,7680,33),qV(vHt,7680,7836,-19),qV(vHt,7836,7840,33),qV(vHt,7840,7930,-19),qV(vHt,7930,7936,33),qV(vHt,7936,7958,-19),qV(vHt,7958,7960,33),qV(vHt,7960,7966,-19),qV(vHt,7966,7968,33),qV(vHt,7968,8006,-19),qV(vHt,8006,8008,33),qV(vHt,8008,8014,-19),qV(vHt,8014,8016,33),qV(vHt,8016,8024,-19),vHt[8024]=33,vHt[8025]=-19,vHt[8026]=33,vHt[8027]=-19,vHt[8028]=33,vHt[8029]=-19,vHt[8030]=33,qV(vHt,8031,8062,-19),qV(vHt,8062,8064,33),qV(vHt,8064,8117,-19),vHt[8117]=33,qV(vHt,8118,8125,-19),vHt[8125]=33,vHt[8126]=-19,qV(vHt,8127,8130,33),qV(vHt,8130,8133,-19),vHt[8133]=33,qV(vHt,8134,8141,-19),qV(vHt,8141,8144,33),qV(vHt,8144,8148,-19),qV(vHt,8148,8150,33),qV(vHt,8150,8156,-19),qV(vHt,8156,8160,33),qV(vHt,8160,8173,-19),qV(vHt,8173,8178,33),qV(vHt,8178,8181,-19),vHt[8181]=33,qV(vHt,8182,8189,-19),qV(vHt,8189,8400,33),qV(vHt,8400,8413,-87),qV(vHt,8413,8417,33),vHt[8417]=-87,qV(vHt,8418,8486,33),vHt[8486]=-19,qV(vHt,8487,8490,33),qV(vHt,8490,8492,-19),qV(vHt,8492,8494,33),vHt[8494]=-19,qV(vHt,8495,8576,33),qV(vHt,8576,8579,-19),qV(vHt,8579,12293,33),vHt[12293]=-87,vHt[12294]=33,vHt[12295]=-19,qV(vHt,12296,12321,33),qV(vHt,12321,12330,-19),qV(vHt,12330,12336,-87),vHt[12336]=33,qV(vHt,12337,12342,-87),qV(vHt,12342,12353,33),qV(vHt,12353,12437,-19),qV(vHt,12437,12441,33),qV(vHt,12441,12443,-87),qV(vHt,12443,12445,33),qV(vHt,12445,12447,-87),qV(vHt,12447,12449,33),qV(vHt,12449,12539,-19),vHt[12539]=33,qV(vHt,12540,12543,-87),qV(vHt,12543,12549,33),qV(vHt,12549,12589,-19),qV(vHt,12589,19968,33),qV(vHt,19968,40870,-19),qV(vHt,40870,44032,33),qV(vHt,44032,55204,-19),qV(vHt,55204,C0n,33),qV(vHt,57344,65534,33)}function oZn(n){var t,e,i,r,c,a,o;n.hb||(n.hb=!0,qon(n,"ecore"),Xon(n,"ecore"),zon(n,Drt),mhn(n.fb,"E"),mhn(n.L,"T"),mhn(n.P,"K"),mhn(n.P,"V"),mhn(n.cb,"E"),ttn(n1(n.b),n.bb),ttn(n1(n.a),n.Q),ttn(n1(n.o),n.p),ttn(n1(n.p),n.R),ttn(n1(n.q),n.p),ttn(n1(n.v),n.q),ttn(n1(n.w),n.R),ttn(n1(n.B),n.Q),ttn(n1(n.R),n.Q),ttn(n1(n.T),n.eb),ttn(n1(n.U),n.R),ttn(n1(n.V),n.eb),ttn(n1(n.W),n.bb),ttn(n1(n.bb),n.eb),ttn(n1(n.eb),n.R),ttn(n1(n.db),n.R),A4(n.b,u_t,Yit,!1,!1,!0),mun(uG(zrn(gZ(n.b),0),35),n.e,"iD",null,0,1,u_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.b),1),19),n.q,null,"eAttributeType",1,1,u_t,!0,!0,!1,!1,!0,!1,!0),A4(n.a,c_t,Wit,!1,!1,!0),mun(uG(zrn(gZ(n.a),0),35),n._,set,null,0,1,c_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.a),1),19),n.ab,null,"details",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),2),19),n.Q,uG(zrn(gZ(n.Q),0),19),"eModelElement",0,1,c_t,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.a),3),19),n.S,null,"contents",0,-1,c_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.a),4),19),n.S,null,"references",0,-1,c_t,!1,!1,!0,!1,!0,!1,!1),A4(n.o,h_t,"EClass",!1,!1,!0),mun(uG(zrn(gZ(n.o),0),35),n.e,"abstract",null,0,1,h_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.o),1),35),n.e,"interface",null,0,1,h_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),2),19),n.o,null,"eSuperTypes",0,-1,h_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.o),3),19),n.T,uG(zrn(gZ(n.T),0),19),"eOperations",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),4),19),n.b,null,"eAllAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),5),19),n.W,null,"eAllReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),6),19),n.W,null,"eReferences",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),7),19),n.b,null,"eAttributes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),8),19),n.W,null,"eAllContainments",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),9),19),n.T,null,"eAllOperations",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),10),19),n.bb,null,"eAllStructuralFeatures",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),11),19),n.o,null,"eAllSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.o),12),19),n.b,null,"eIDAttribute",0,1,h_t,!0,!0,!1,!1,!1,!1,!0),ujn(uG(zrn(gZ(n.o),13),19),n.bb,uG(zrn(gZ(n.bb),7),19),"eStructuralFeatures",0,-1,h_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.o),14),19),n.H,null,"eGenericSuperTypes",0,-1,h_t,!1,!1,!0,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.o),15),19),n.H,null,"eAllGenericSuperTypes",0,-1,h_t,!0,!0,!1,!1,!0,!1,!0),djn(o=san(uG(zrn(dZ(n.o),0),62),n.e,"isSuperTypeOf"),n.o,"someClass"),san(uG(zrn(dZ(n.o),1),62),n.I,"getFeatureCount"),djn(o=san(uG(zrn(dZ(n.o),2),62),n.bb,Frt),n.I,"featureID"),djn(o=san(uG(zrn(dZ(n.o),3),62),n.I,_rt),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.o),4),62),n.bb,Frt),n._,"featureName"),san(uG(zrn(dZ(n.o),5),62),n.I,"getOperationCount"),djn(o=san(uG(zrn(dZ(n.o),6),62),n.T,"getEOperation"),n.I,"operationID"),djn(o=san(uG(zrn(dZ(n.o),7),62),n.I,Hrt),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),8),62),n.T,"getOverride"),n.T,Urt),djn(o=san(uG(zrn(dZ(n.o),9),62),n.H,"getFeatureType"),n.bb,Brt),A4(n.p,s_t,Zit,!0,!1,!0),mun(uG(zrn(gZ(n.p),0),35),n._,"instanceClassName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),N$n(uG(zrn(gZ(n.p),1),35),t,"instanceClass",s_t,!0,!0,!1,!0),mun(uG(zrn(gZ(n.p),2),35),n.M,Grt,null,0,1,s_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.p),3),35),n._,"instanceTypeName",null,0,1,s_t,!1,!0,!0,!0,!0,!1),ujn(uG(zrn(gZ(n.p),4),19),n.U,uG(zrn(gZ(n.U),3),19),"ePackage",0,1,s_t,!0,!1,!1,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.p),5),19),n.db,null,qrt,0,-1,s_t,!1,!1,!0,!0,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.p),0),62),n.e,Xrt),n.M,wZn),san(uG(zrn(dZ(n.p),1),62),n.I,"getClassifierID"),A4(n.q,f_t,"EDataType",!1,!1,!0),mun(uG(zrn(gZ(n.q),0),35),n.e,"serializable",Fnt,0,1,f_t,!1,!1,!0,!1,!0,!1),A4(n.v,w_t,"EEnum",!1,!1,!0),ujn(uG(zrn(gZ(n.v),0),19),n.w,uG(zrn(gZ(n.w),3),19),"eLiterals",0,-1,w_t,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.v),0),62),n.w,zrt),n._,Bet),djn(o=san(uG(zrn(dZ(n.v),1),62),n.w,zrt),n.I,uet),djn(o=san(uG(zrn(dZ(n.v),2),62),n.w,"getEEnumLiteralByLiteral"),n._,"literal"),A4(n.w,d_t,nrt,!1,!1,!0),mun(uG(zrn(gZ(n.w),0),35),n.I,uet,null,0,1,d_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),1),35),n.A,"instance",null,0,1,d_t,!0,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.w),2),35),n._,"literal",null,0,1,d_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.w),3),19),n.v,uG(zrn(gZ(n.v),0),19),"eEnum",0,1,d_t,!0,!1,!1,!1,!1,!1,!1),A4(n.B,sFt,"EFactory",!1,!1,!0),ujn(uG(zrn(gZ(n.B),0),19),n.U,uG(zrn(gZ(n.U),2),19),"ePackage",1,1,sFt,!0,!1,!0,!1,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.B),0),62),n.S,"create"),n.o,"eClass"),djn(o=san(uG(zrn(dZ(n.B),1),62),n.M,"createFromString"),n.q,"eDataType"),djn(o,n._,"literalValue"),djn(o=san(uG(zrn(dZ(n.B),2),62),n._,"convertToString"),n.q,"eDataType"),djn(o,n.M,"instanceValue"),A4(n.Q,uFt,Rtt,!0,!1,!0),ujn(uG(zrn(gZ(n.Q),0),19),n.a,uG(zrn(gZ(n.a),2),19),"eAnnotations",0,-1,uFt,!1,!1,!0,!0,!1,!1,!1),djn(o=san(uG(zrn(dZ(n.Q),0),62),n.a,"getEAnnotation"),n._,set),A4(n.R,hFt,Ktt,!0,!1,!0),mun(uG(zrn(gZ(n.R),0),35),n._,Bet,null,0,1,hFt,!1,!1,!0,!1,!0,!1),A4(n.S,nFt,"EObject",!1,!1,!0),san(uG(zrn(dZ(n.S),0),62),n.o,"eClass"),san(uG(zrn(dZ(n.S),1),62),n.e,"eIsProxy"),san(uG(zrn(dZ(n.S),2),62),n.X,"eResource"),san(uG(zrn(dZ(n.S),3),62),n.S,"eContainer"),san(uG(zrn(dZ(n.S),4),62),n.bb,"eContainingFeature"),san(uG(zrn(dZ(n.S),5),62),n.W,"eContainmentFeature"),o=san(uG(zrn(dZ(n.S),6),62),null,"eContents"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(r=CCn(o,t,null))&&r.oj(),o=san(uG(zrn(dZ(n.S),7),62),null,"eAllContents"),t=NY(n.cb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(c=CCn(o,t,null))&&c.oj(),o=san(uG(zrn(dZ(n.S),8),62),null,"eCrossReferences"),t=NY(n.fb),e=NY(n.S),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(a=CCn(o,t,null))&&a.oj(),djn(o=san(uG(zrn(dZ(n.S),9),62),n.M,"eGet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),10),62),n.M,"eGet"),n.bb,Brt),djn(o,n.e,"resolve"),djn(o=san(uG(zrn(dZ(n.S),11),62),null,"eSet"),n.bb,Brt),djn(o,n.M,"newValue"),djn(o=san(uG(zrn(dZ(n.S),12),62),n.e,"eIsSet"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),13),62),null,"eUnset"),n.bb,Brt),djn(o=san(uG(zrn(dZ(n.S),14),62),n.M,"eInvoke"),n.T,Urt),t=NY(n.fb),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),OSn(o,t,"arguments"),QQ(o,n.K),A4(n.T,p_t,ert,!1,!1,!0),ujn(uG(zrn(gZ(n.T),0),19),n.o,uG(zrn(gZ(n.o),3),19),Vrt,0,1,p_t,!0,!1,!1,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.T),1),19),n.db,null,qrt,0,-1,p_t,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.T),2),19),n.V,uG(zrn(gZ(n.V),0),19),"eParameters",0,-1,p_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.T),3),19),n.p,null,"eExceptions",0,-1,p_t,!1,!1,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.T),4),19),n.H,null,"eGenericExceptions",0,-1,p_t,!1,!1,!0,!0,!1,!0,!1),san(uG(zrn(dZ(n.T),0),62),n.I,Hrt),djn(o=san(uG(zrn(dZ(n.T),1),62),n.e,"isOverrideOf"),n.T,"someOperation"),A4(n.U,fFt,"EPackage",!1,!1,!0),mun(uG(zrn(gZ(n.U),0),35),n._,"nsURI",null,0,1,fFt,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.U),1),35),n._,"nsPrefix",null,0,1,fFt,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.U),2),19),n.B,uG(zrn(gZ(n.B),0),19),"eFactoryInstance",1,1,fFt,!0,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.U),3),19),n.p,uG(zrn(gZ(n.p),4),19),"eClassifiers",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),4),19),n.U,uG(zrn(gZ(n.U),5),19),"eSubpackages",0,-1,fFt,!1,!1,!0,!0,!0,!1,!1),ujn(uG(zrn(gZ(n.U),5),19),n.U,uG(zrn(gZ(n.U),4),19),"eSuperPackage",0,1,fFt,!0,!1,!1,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.U),0),62),n.p,"getEClassifier"),n._,Bet),A4(n.V,m_t,irt,!1,!1,!0),ujn(uG(zrn(gZ(n.V),0),19),n.T,uG(zrn(gZ(n.T),2),19),"eOperation",0,1,m_t,!0,!1,!1,!1,!1,!1,!1),A4(n.W,v_t,rrt,!1,!1,!0),mun(uG(zrn(gZ(n.W),0),35),n.e,"containment",null,0,1,v_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.W),1),35),n.e,"container",null,0,1,v_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.W),2),35),n.e,"resolveProxies",Fnt,0,1,v_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.W),3),19),n.W,null,"eOpposite",0,1,v_t,!1,!1,!0,!1,!0,!1,!1),ujn(uG(zrn(gZ(n.W),4),19),n.o,null,"eReferenceType",1,1,v_t,!0,!0,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.W),5),19),n.b,null,"eKeys",0,-1,v_t,!1,!1,!0,!1,!0,!1,!1),A4(n.bb,o_t,Jit,!0,!1,!0),mun(uG(zrn(gZ(n.bb),0),35),n.e,"changeable",Fnt,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),1),35),n.e,"volatile",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),2),35),n.e,"transient",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),3),35),n._,"defaultValueLiteral",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),4),35),n.M,Grt,null,0,1,o_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.bb),5),35),n.e,"unsettable",null,0,1,o_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.bb),6),35),n.e,"derived",null,0,1,o_t,!1,!1,!0,!1,!0,!1),ujn(uG(zrn(gZ(n.bb),7),19),n.o,uG(zrn(gZ(n.o),13),19),Vrt,0,1,o_t,!0,!1,!1,!1,!1,!1,!1),san(uG(zrn(dZ(n.bb),0),62),n.I,_rt),o=san(uG(zrn(dZ(n.bb),1),62),null,"getContainerClass"),t=NY(n.L),e=n6(),ttn((!t.d&&(t.d=new MD(g_t,t,1)),t.d),e),(i=CCn(o,t,null))&&i.oj(),A4(n.eb,a_t,Qit,!0,!1,!0),mun(uG(zrn(gZ(n.eb),0),35),n.e,"ordered",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),1),35),n.e,"unique",Fnt,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),2),35),n.I,"lowerBound",null,0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),3),35),n.I,"upperBound","1",0,1,a_t,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.eb),4),35),n.e,"many",null,0,1,a_t,!0,!0,!1,!1,!0,!0),mun(uG(zrn(gZ(n.eb),5),35),n.e,"required",null,0,1,a_t,!0,!0,!1,!1,!0,!0),ujn(uG(zrn(gZ(n.eb),6),19),n.p,null,"eType",0,1,a_t,!1,!0,!0,!1,!0,!0,!1),ujn(uG(zrn(gZ(n.eb),7),19),n.H,null,"eGenericType",0,1,a_t,!1,!0,!0,!0,!1,!0,!1),A4(n.ab,Sat,"EStringToStringMapEntry",!1,!1,!1),mun(uG(zrn(gZ(n.ab),0),35),n._,"key",null,0,1,Sat,!1,!1,!0,!1,!0,!1),mun(uG(zrn(gZ(n.ab),1),35),n._,uet,null,0,1,Sat,!1,!1,!0,!1,!0,!1),A4(n.H,g_t,trt,!1,!1,!0),ujn(uG(zrn(gZ(n.H),0),19),n.H,null,"eUpperBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),1),19),n.H,null,"eTypeArguments",0,-1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),2),19),n.p,null,"eRawType",1,1,g_t,!0,!1,!1,!1,!0,!1,!0),ujn(uG(zrn(gZ(n.H),3),19),n.H,null,"eLowerBound",0,1,g_t,!1,!1,!0,!0,!1,!1,!1),ujn(uG(zrn(gZ(n.H),4),19),n.db,null,"eTypeParameter",0,1,g_t,!1,!1,!0,!1,!1,!1,!1),ujn(uG(zrn(gZ(n.H),5),19),n.p,null,"eClassifier",0,1,g_t,!1,!1,!0,!1,!0,!1,!1),djn(o=san(uG(zrn(dZ(n.H),0),62),n.e,Xrt),n.M,wZn),A4(n.db,J_t,crt,!1,!1,!0),ujn(uG(zrn(gZ(n.db),0),19),n.H,null,"eBounds",0,-1,J_t,!1,!1,!0,!0,!1,!1,!1),UJ(n.c,Bot,"EBigDecimal",!0),UJ(n.d,Xot,"EBigInteger",!0),UJ(n.e,ZHt,"EBoolean",!0),UJ(n.f,cot,"EBooleanObject",!0),UJ(n.i,tUt,"EByte",!0),UJ(n.g,cT(tUt,1),"EByteArray",!0),UJ(n.j,uot,"EByteObject",!0),UJ(n.k,JHt,"EChar",!0),UJ(n.n,hot,"ECharacterObject",!0),UJ(n.r,iot,"EDate",!0),UJ(n.s,aUt,"EDiagnosticChain",!1),UJ(n.t,eUt,"EDouble",!0),UJ(n.u,fot,"EDoubleObject",!0),UJ(n.fb,CFt,"EEList",!1),UJ(n.A,BFt,"EEnumerator",!1),UJ(n.C,IBt,"EFeatureMap",!1),UJ(n.D,Z_t,"EFeatureMapEntry",!1),UJ(n.F,iUt,"EFloat",!0),UJ(n.G,lot,"EFloatObject",!0),UJ(n.I,YHt,"EInt",!0),UJ(n.J,dot,"EIntegerObject",!0),UJ(n.L,gat,"EJavaClass",!0),UJ(n.M,dat,"EJavaObject",!0),UJ(n.N,nUt,"ELong",!0),UJ(n.O,yot,"ELongObject",!0),UJ(n.P,mat,"EMap",!1),UJ(n.X,jBt,"EResource",!1),UJ(n.Y,oUt,"EResourceSet",!1),UJ(n.Z,rUt,"EShort",!0),UJ(n.$,Tot,"EShortObject",!0),UJ(n._,$ot,"EString",!0),UJ(n.cb,OFt,"ETreeIterator",!1),UJ(n.K,uUt,"EInvocationTargetException",!1),nwn(n,Drt))}"undefined"!=typeof window?e=window:void 0!==n?e=n:"undefined"!=typeof self&&(e=self);var uZn,sZn,hZn,fZn,lZn,bZn,wZn="object",dZn="boolean",gZn="number",pZn="string",mZn="function",vZn=2147483647,kZn="java.lang",yZn={3:1},MZn="com.google.common.base",TZn=", ",jZn="%s (%s) must not be negative",EZn={3:1,4:1,5:1},SZn="negative size: ",PZn="no calls to next() since the last call to remove()",CZn="Optional.of(",IZn="null",OZn={204:1,51:1},AZn="com.google.common.collect",LZn={204:1,51:1,128:1},NZn={229:1,3:1},$Zn={51:1},DZn="java.util",xZn={85:1},RZn={20:1,31:1,16:1},KZn=2063,FZn={20:1,31:1,16:1,21:1},_Zn={85:1,139:1,133:1},BZn={20:1,31:1,16:1,21:1,87:1},HZn={20:1,31:1,16:1,277:1,21:1,87:1},UZn={51:1,128:1},GZn={358:1,44:1},qZn="AbstractMapEntry",XZn="expectedValuesPerKey",zZn={3:1,6:1,4:1,5:1},VZn=16384,WZn={159:1},QZn={41:1},JZn={202:1},YZn={l:4194303,m:4194303,h:524287},ZZn={253:1,3:1,34:1},n1n="range unbounded on this side",t1n={20:1},e1n={20:1,16:1},i1n={3:1,20:1,31:1,16:1},r1n={307:1,3:1,20:1,31:1,16:1,15:1,59:1},c1n={3:1,4:1,5:1,173:1},a1n={3:1,85:1},o1n={20:1,16:1,21:1},u1n={3:1,20:1,31:1,16:1,21:1},s1n={20:1,16:1,21:1,87:1},h1n=461845907,f1n=-862048943,l1n={3:1,6:1,4:1,5:1,173:1},b1n="expectedSize",w1n=1024,d1n=1073741824,g1n="initialArraySize",p1n={3:1,6:1,4:1,9:1,5:1},m1n={20:1,31:1,56:1,16:1,15:1},v1n="arraySize",k1n={20:1,31:1,56:1,16:1,15:1,59:1},y1n={46:1},M1n={380:1},T1n=1e-4,j1n=-2147483648,E1n="__noinit__",S1n={3:1,103:1,63:1,82:1},P1n="com.google.gwt.core.client.impl",C1n="String",I1n="com.google.gwt.core.client",O1n="anonymous",A1n="fnStack",L1n="Unknown",N1n={201:1,3:1,4:1},$1n=1e3,D1n=65535,x1n="January",R1n="February",K1n="March",F1n="April",_1n="May",B1n="June",H1n="July",U1n="August",G1n="September",q1n="October",X1n="November",z1n="December",V1n=1900,W1n={53:1,3:1,4:1},Q1n="Before Christ",J1n="Anno Domini",Y1n="Sunday",Z1n="Monday",n0n="Tuesday",t0n="Wednesday",e0n="Thursday",i0n="Friday",r0n="Saturday",c0n="com.google.gwt.i18n.shared",a0n="DateTimeFormat",o0n="com.google.gwt.i18n.client",u0n="DefaultDateTimeFormatInfo",s0n={3:1,4:1,34:1,206:1},h0n="com.google.gwt.json.client",f0n=4194303,l0n=1048575,b0n=524288,w0n=4194304,d0n=17592186044416,g0n=1e9,p0n=-17592186044416,m0n="java.io",v0n={3:1,103:1,77:1,63:1,82:1},k0n={3:1,296:1,82:1},y0n='For input string: "',M0n=1/0,T0n=-1/0,j0n=4096,E0n={3:1,4:1,376:1},S0n="org.eclipse.elk.layered",P0n=65536,C0n=55296,I0n={109:1,3:1,4:1},O0n=1e5,A0n=.3010299956639812,L0n=4294967295,N0n="0.0",$0n={44:1},D0n="Unable to add element to queue",x0n={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},R0n={3:1,20:1,31:1,56:1,16:1,15:1,59:1},K0n={20:1,16:1,15:1},F0n={3:1,50:1},_0n={189:1},B0n={3:1,4:1,85:1},H0n={3:1,4:1,20:1,31:1,16:1,49:1,21:1},U0n="delete",G0n=1.4901161193847656e-8,q0n=11102230246251565e-32,X0n=15525485,z0n=5.960464477539063e-8,V0n=16777216,W0n=16777215,Q0n=", length: ",J0n={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Y0n="subMap: ",Z0n=" less than ",n2n={3:1,34:1,22:1,304:1},t2n="java.util.function",e2n="java.util.logging",i2n={3:1,4:1,5:1,856:1},r2n="undefined",c2n="java.util.stream",a2n={533:1,687:1},o2n="fromIndex: ",u2n=" > toIndex: ",s2n=", toIndex: ",h2n="Index: ",f2n=", Size: ",l2n="org.eclipse.elk.alg.common",b2n={50:1},w2n="org.eclipse.elk.alg.common.compaction",d2n="Scanline/EventHandler",g2n="org.eclipse.elk.alg.common.compaction.oned",p2n="CNode belongs to another CGroup.",m2n="ISpacingsHandler/1",v2n="The ",k2n=" instance has been finished already.",y2n="The direction ",M2n=" is not supported by the CGraph instance.",T2n="OneDimensionalCompactor",j2n="OneDimensionalCompactor/lambda$0$Type",E2n="Quadruplet",S2n="ScanlineConstraintCalculator",P2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler",C2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",I2n="ScanlineConstraintCalculator/Timestamp",O2n="ScanlineConstraintCalculator/lambda$0$Type",A2n={178:1,46:1},L2n="org.eclipse.elk.alg.common.compaction.options",N2n="org.eclipse.elk.core.data",$2n="org.eclipse.elk.polyomino.traversalStrategy",D2n="org.eclipse.elk.polyomino.lowLevelSort",x2n="org.eclipse.elk.polyomino.highLevelSort",R2n="org.eclipse.elk.polyomino.fill",K2n={134:1},F2n="polyomino",_2n="org.eclipse.elk.alg.common.networksimplex",B2n={183:1,3:1,4:1},H2n="org.eclipse.elk.alg.common.nodespacing",U2n="org.eclipse.elk.alg.common.nodespacing.cellsystem",G2n="CENTER",q2n={217:1,336:1},X2n={3:1,4:1,5:1,603:1},z2n="LEFT",V2n="RIGHT",W2n="Vertical alignment cannot be null",Q2n="BOTTOM",J2n="org.eclipse.elk.alg.common.nodespacing.internal",Y2n="UNDEFINED",Z2n=.01,n3n="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",t3n="LabelPlacer/lambda$0$Type",e3n="LabelPlacer/lambda$1$Type",i3n="portRatioOrPosition",r3n="org.eclipse.elk.alg.common.overlaps",c3n="DOWN",a3n="org.eclipse.elk.alg.common.polyomino",o3n="NORTH",u3n="EAST",s3n="SOUTH",h3n="WEST",f3n="org.eclipse.elk.alg.common.polyomino.structures",l3n="Direction",b3n="Grid is only of size ",w3n=". Requested point (",d3n=") is out of bounds.",g3n=" Given center based coordinates were (",p3n="org.eclipse.elk.graph.properties",m3n="IPropertyHolder",v3n={3:1,96:1,137:1},k3n="org.eclipse.elk.alg.common.spore",y3n="org.eclipse.elk.alg.common.utils",M3n={205:1},T3n="org.eclipse.elk.core",j3n="Connected Components Compaction",E3n="org.eclipse.elk.alg.disco",S3n="org.eclipse.elk.alg.disco.graph",P3n="org.eclipse.elk.alg.disco.options",C3n="CompactionStrategy",I3n="org.eclipse.elk.disco.componentCompaction.strategy",O3n="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",A3n="org.eclipse.elk.disco.debug.discoGraph",L3n="org.eclipse.elk.disco.debug.discoPolys",N3n="componentCompaction",$3n="org.eclipse.elk.disco",D3n="org.eclipse.elk.spacing.componentComponent",x3n="org.eclipse.elk.edge.thickness",R3n="org.eclipse.elk.aspectRatio",K3n="org.eclipse.elk.padding",F3n="org.eclipse.elk.alg.disco.transform",_3n=1.5707963267948966,B3n=17976931348623157e292,H3n={3:1,4:1,5:1,198:1},U3n={3:1,6:1,4:1,5:1,100:1,115:1},G3n="org.eclipse.elk.alg.force",q3n="ComponentsProcessor",X3n="ComponentsProcessor/1",z3n="ElkGraphImporter/lambda$0$Type",V3n="org.eclipse.elk.alg.force.graph",W3n="Component Layout",Q3n="org.eclipse.elk.alg.force.model",J3n="org.eclipse.elk.force.model",Y3n="org.eclipse.elk.force.iterations",Z3n="org.eclipse.elk.force.repulsivePower",n4n="org.eclipse.elk.force.temperature",t4n=.001,e4n="org.eclipse.elk.force.repulsion",i4n="org.eclipse.elk.alg.force.options",r4n=1.600000023841858,c4n="org.eclipse.elk.force",a4n="org.eclipse.elk.priority",o4n="org.eclipse.elk.spacing.nodeNode",u4n="org.eclipse.elk.spacing.edgeLabel",s4n="org.eclipse.elk.randomSeed",h4n="org.eclipse.elk.separateConnectedComponents",f4n="org.eclipse.elk.interactive",l4n="org.eclipse.elk.portConstraints",b4n="org.eclipse.elk.edgeLabels.inline",w4n="org.eclipse.elk.omitNodeMicroLayout",d4n="org.eclipse.elk.nodeSize.fixedGraphSize",g4n="org.eclipse.elk.nodeSize.options",p4n="org.eclipse.elk.nodeSize.constraints",m4n="org.eclipse.elk.nodeLabels.placement",v4n="org.eclipse.elk.portLabels.placement",k4n="org.eclipse.elk.topdownLayout",y4n="org.eclipse.elk.topdown.scaleFactor",M4n="org.eclipse.elk.topdown.hierarchicalNodeWidth",T4n="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",j4n="org.eclipse.elk.topdown.nodeType",E4n="origin",S4n="random",P4n="boundingBox.upLeft",C4n="boundingBox.lowRight",I4n="org.eclipse.elk.stress.fixed",O4n="org.eclipse.elk.stress.desiredEdgeLength",A4n="org.eclipse.elk.stress.dimension",L4n="org.eclipse.elk.stress.epsilon",N4n="org.eclipse.elk.stress.iterationLimit",$4n="org.eclipse.elk.stress",D4n="ELK Stress",x4n="org.eclipse.elk.nodeSize.minimum",R4n="org.eclipse.elk.alg.force.stress",K4n="Layered layout",F4n="org.eclipse.elk.alg.layered",_4n="org.eclipse.elk.alg.layered.compaction.components",B4n="org.eclipse.elk.alg.layered.compaction.oned",H4n="org.eclipse.elk.alg.layered.compaction.oned.algs",U4n="org.eclipse.elk.alg.layered.compaction.recthull",G4n="org.eclipse.elk.alg.layered.components",q4n="NONE",X4n="MODEL_ORDER",z4n={3:1,6:1,4:1,9:1,5:1,126:1},V4n={3:1,6:1,4:1,5:1,150:1,100:1,115:1},W4n="org.eclipse.elk.alg.layered.compound",Q4n={47:1},J4n="org.eclipse.elk.alg.layered.graph",Y4n=" -> ",Z4n="Not supported by LGraph",n6n="Port side is undefined",t6n={3:1,6:1,4:1,5:1,483:1,150:1,100:1,115:1},e6n={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},i6n={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},r6n="([{\"' \t\r\n",c6n=")]}\"' \t\r\n",a6n="The given string contains parts that cannot be parsed as numbers.",o6n="org.eclipse.elk.core.math",u6n={3:1,4:1,140:1,214:1,423:1},s6n={3:1,4:1,107:1,214:1,423:1},h6n="org.eclipse.elk.alg.layered.graph.transform",f6n="ElkGraphImporter",l6n="ElkGraphImporter/lambda$1$Type",b6n="ElkGraphImporter/lambda$2$Type",w6n="ElkGraphImporter/lambda$4$Type",d6n="org.eclipse.elk.alg.layered.intermediate",g6n="Node margin calculation",p6n="ONE_SIDED_GREEDY_SWITCH",m6n="TWO_SIDED_GREEDY_SWITCH",v6n="No implementation is available for the layout processor ",k6n="IntermediateProcessorStrategy",y6n="Node '",M6n="FIRST_SEPARATE",T6n="LAST_SEPARATE",j6n="Odd port side processing",E6n="org.eclipse.elk.alg.layered.intermediate.compaction",S6n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",P6n="org.eclipse.elk.alg.layered.p3order.counting",C6n={230:1},I6n="org.eclipse.elk.alg.layered.intermediate.loops",O6n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",A6n="org.eclipse.elk.alg.layered.intermediate.loops.routing",L6n="org.eclipse.elk.alg.layered.intermediate.preserveorder",N6n="org.eclipse.elk.alg.layered.intermediate.wrapping",$6n="org.eclipse.elk.alg.layered.options",D6n="INTERACTIVE",x6n="GREEDY",R6n="DEPTH_FIRST",K6n="EDGE_LENGTH",F6n="SELF_LOOPS",_6n="firstTryWithInitialOrder",B6n="org.eclipse.elk.layered.directionCongruency",H6n="org.eclipse.elk.layered.feedbackEdges",U6n="org.eclipse.elk.layered.interactiveReferencePoint",G6n="org.eclipse.elk.layered.mergeEdges",q6n="org.eclipse.elk.layered.mergeHierarchyEdges",X6n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",z6n="org.eclipse.elk.layered.portSortingStrategy",V6n="org.eclipse.elk.layered.thoroughness",W6n="org.eclipse.elk.layered.unnecessaryBendpoints",Q6n="org.eclipse.elk.layered.generatePositionAndLayerIds",J6n="org.eclipse.elk.layered.cycleBreaking.strategy",Y6n="org.eclipse.elk.layered.layering.strategy",Z6n="org.eclipse.elk.layered.layering.layerConstraint",n5n="org.eclipse.elk.layered.layering.layerChoiceConstraint",t5n="org.eclipse.elk.layered.layering.layerId",e5n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",i5n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",r5n="org.eclipse.elk.layered.layering.nodePromotion.strategy",c5n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",a5n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",o5n="org.eclipse.elk.layered.crossingMinimization.strategy",u5n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",s5n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",h5n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",f5n="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",l5n="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",b5n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",w5n="org.eclipse.elk.layered.crossingMinimization.positionId",d5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",g5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",p5n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",m5n="org.eclipse.elk.layered.nodePlacement.strategy",v5n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",k5n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",y5n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M5n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",T5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",j5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",E5n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",S5n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",P5n="org.eclipse.elk.layered.edgeRouting.splines.mode",C5n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",I5n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",O5n="org.eclipse.elk.layered.spacing.baseValue",A5n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",L5n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",N5n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$5n="org.eclipse.elk.layered.priority.direction",D5n="org.eclipse.elk.layered.priority.shortness",x5n="org.eclipse.elk.layered.priority.straightness",R5n="org.eclipse.elk.layered.compaction.connectedComponents",K5n="org.eclipse.elk.layered.compaction.postCompaction.strategy",F5n="org.eclipse.elk.layered.compaction.postCompaction.constraints",_5n="org.eclipse.elk.layered.highDegreeNodes.treatment",B5n="org.eclipse.elk.layered.highDegreeNodes.threshold",H5n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U5n="org.eclipse.elk.layered.wrapping.strategy",G5n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",q5n="org.eclipse.elk.layered.wrapping.correctionFactor",X5n="org.eclipse.elk.layered.wrapping.cutting.strategy",z5n="org.eclipse.elk.layered.wrapping.cutting.cuts",V5n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",W5n="org.eclipse.elk.layered.wrapping.validify.strategy",Q5n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",J5n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",Y5n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",Z5n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",n8n="org.eclipse.elk.layered.edgeLabels.sideSelection",t8n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",e8n="org.eclipse.elk.layered.considerModelOrder.strategy",i8n="org.eclipse.elk.layered.considerModelOrder.portModelOrder",r8n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",c8n="org.eclipse.elk.layered.considerModelOrder.components",a8n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",o8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",u8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",s8n="layering",h8n="layering.minWidth",f8n="layering.nodePromotion",l8n="crossingMinimization",b8n="org.eclipse.elk.hierarchyHandling",w8n="crossingMinimization.greedySwitch",d8n="nodePlacement",g8n="nodePlacement.bk",p8n="edgeRouting",m8n="org.eclipse.elk.edgeRouting",v8n="spacing",k8n="priority",y8n="compaction",M8n="compaction.postCompaction",T8n="Specifies whether and how post-process compaction is applied.",j8n="highDegreeNodes",E8n="wrapping",S8n="wrapping.cutting",P8n="wrapping.validify",C8n="wrapping.multiEdge",I8n="edgeLabels",O8n="considerModelOrder",A8n="org.eclipse.elk.spacing.commentComment",L8n="org.eclipse.elk.spacing.commentNode",N8n="org.eclipse.elk.spacing.edgeEdge",$8n="org.eclipse.elk.spacing.edgeNode",D8n="org.eclipse.elk.spacing.labelLabel",x8n="org.eclipse.elk.spacing.labelPortHorizontal",R8n="org.eclipse.elk.spacing.labelPortVertical",K8n="org.eclipse.elk.spacing.labelNode",F8n="org.eclipse.elk.spacing.nodeSelfLoop",_8n="org.eclipse.elk.spacing.portPort",B8n="org.eclipse.elk.spacing.individual",H8n="org.eclipse.elk.port.borderOffset",U8n="org.eclipse.elk.noLayout",G8n="org.eclipse.elk.port.side",q8n="org.eclipse.elk.debugMode",X8n="org.eclipse.elk.alignment",z8n="org.eclipse.elk.insideSelfLoops.activate",V8n="org.eclipse.elk.insideSelfLoops.yo",W8n="org.eclipse.elk.direction",Q8n="org.eclipse.elk.nodeLabels.padding",J8n="org.eclipse.elk.portLabels.nextToPortIfPossible",Y8n="org.eclipse.elk.portLabels.treatAsGroup",Z8n="org.eclipse.elk.portAlignment.default",n9n="org.eclipse.elk.portAlignment.north",t9n="org.eclipse.elk.portAlignment.south",e9n="org.eclipse.elk.portAlignment.west",i9n="org.eclipse.elk.portAlignment.east",r9n="org.eclipse.elk.contentAlignment",c9n="org.eclipse.elk.junctionPoints",a9n="org.eclipse.elk.edgeLabels.placement",o9n="org.eclipse.elk.port.index",u9n="org.eclipse.elk.commentBox",s9n="org.eclipse.elk.hypernode",h9n="org.eclipse.elk.port.anchor",f9n="org.eclipse.elk.partitioning.activate",l9n="org.eclipse.elk.partitioning.partition",b9n="org.eclipse.elk.position",w9n="org.eclipse.elk.margins",d9n="org.eclipse.elk.spacing.portsSurrounding",g9n="org.eclipse.elk.interactiveLayout",p9n="org.eclipse.elk.core.util",m9n={3:1,4:1,5:1,601:1},v9n="NETWORK_SIMPLEX",k9n="SIMPLE",y9n={106:1,47:1},M9n="org.eclipse.elk.alg.layered.p1cycles",T9n="org.eclipse.elk.alg.layered.p2layers",j9n={413:1,230:1},E9n={846:1,3:1,4:1},S9n="org.eclipse.elk.alg.layered.p3order",P9n="org.eclipse.elk.alg.layered.p4nodes",C9n={3:1,4:1,5:1,854:1},I9n=1e-5,O9n="org.eclipse.elk.alg.layered.p4nodes.bk",A9n="org.eclipse.elk.alg.layered.p5edges",L9n="org.eclipse.elk.alg.layered.p5edges.orthogonal",N9n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",$9n=1e-6,D9n="org.eclipse.elk.alg.layered.p5edges.splines",x9n=.09999999999999998,R9n=1e-8,K9n=4.71238898038469,F9n=3.141592653589793,_9n="org.eclipse.elk.alg.mrtree",B9n=.10000000149011612,H9n="SUPER_ROOT",U9n="org.eclipse.elk.alg.mrtree.graph",G9n=-17976931348623157e292,q9n="org.eclipse.elk.alg.mrtree.intermediate",X9n="Processor compute fanout",z9n={3:1,6:1,4:1,5:1,534:1,100:1,115:1},V9n="Set neighbors in level",W9n="org.eclipse.elk.alg.mrtree.options",Q9n="DESCENDANTS",J9n="org.eclipse.elk.mrtree.compaction",Y9n="org.eclipse.elk.mrtree.edgeEndTextureLength",Z9n="org.eclipse.elk.mrtree.treeLevel",n7n="org.eclipse.elk.mrtree.positionConstraint",t7n="org.eclipse.elk.mrtree.weighting",e7n="org.eclipse.elk.mrtree.edgeRoutingMode",i7n="org.eclipse.elk.mrtree.searchOrder",r7n="Position Constraint",c7n="org.eclipse.elk.mrtree",a7n="org.eclipse.elk.tree",o7n="Processor arrange level",u7n="org.eclipse.elk.alg.mrtree.p2order",s7n="org.eclipse.elk.alg.mrtree.p4route",h7n="org.eclipse.elk.alg.radial",f7n=6.283185307179586,l7n="Before",b7n=5e-324,w7n="After",d7n="org.eclipse.elk.alg.radial.intermediate",g7n="COMPACTION",p7n="org.eclipse.elk.alg.radial.intermediate.compaction",m7n={3:1,4:1,5:1,100:1},v7n="org.eclipse.elk.alg.radial.intermediate.optimization",k7n="No implementation is available for the layout option ",y7n="org.eclipse.elk.alg.radial.options",M7n="org.eclipse.elk.radial.centerOnRoot",T7n="org.eclipse.elk.radial.orderId",j7n="org.eclipse.elk.radial.radius",E7n="org.eclipse.elk.radial.rotate",S7n="org.eclipse.elk.radial.compactor",P7n="org.eclipse.elk.radial.compactionStepSize",C7n="org.eclipse.elk.radial.sorter",I7n="org.eclipse.elk.radial.wedgeCriteria",O7n="org.eclipse.elk.radial.optimizationCriteria",A7n="org.eclipse.elk.radial.rotation.targetAngle",L7n="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",N7n="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",$7n="Compaction",D7n="rotation",x7n="org.eclipse.elk.radial",R7n="org.eclipse.elk.alg.radial.p1position.wedge",K7n="org.eclipse.elk.alg.radial.sorting",F7n=5.497787143782138,_7n=3.9269908169872414,B7n=2.356194490192345,H7n="org.eclipse.elk.alg.rectpacking",U7n="org.eclipse.elk.alg.rectpacking.intermediate",G7n="org.eclipse.elk.alg.rectpacking.options",q7n="org.eclipse.elk.rectpacking.trybox",X7n="org.eclipse.elk.rectpacking.currentPosition",z7n="org.eclipse.elk.rectpacking.desiredPosition",V7n="org.eclipse.elk.rectpacking.inNewRow",W7n="org.eclipse.elk.rectpacking.widthApproximation.strategy",Q7n="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",J7n="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",Y7n="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",Z7n="org.eclipse.elk.rectpacking.packing.strategy",nnt="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",tnt="org.eclipse.elk.rectpacking.packing.compaction.iterations",ent="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",int="widthApproximation",rnt="Compaction Strategy",cnt="packing.compaction",ant="org.eclipse.elk.rectpacking",ont="org.eclipse.elk.alg.rectpacking.p1widthapproximation",unt="org.eclipse.elk.alg.rectpacking.p2packing",snt="No Compaction",hnt="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",fnt="org.eclipse.elk.alg.rectpacking.util",lnt="No implementation available for ",bnt="org.eclipse.elk.alg.spore",wnt="org.eclipse.elk.alg.spore.options",dnt="org.eclipse.elk.sporeCompaction",gnt="org.eclipse.elk.underlyingLayoutAlgorithm",pnt="org.eclipse.elk.processingOrder.treeConstruction",mnt="org.eclipse.elk.processingOrder.spanningTreeCostFunction",vnt="org.eclipse.elk.processingOrder.preferredRoot",knt="org.eclipse.elk.processingOrder.rootSelection",ynt="org.eclipse.elk.structure.structureExtractionStrategy",Mnt="org.eclipse.elk.compaction.compactionStrategy",Tnt="org.eclipse.elk.compaction.orthogonal",jnt="org.eclipse.elk.overlapRemoval.maxIterations",Ent="org.eclipse.elk.overlapRemoval.runScanline",Snt="processingOrder",Pnt="overlapRemoval",Cnt="org.eclipse.elk.sporeOverlap",Int="org.eclipse.elk.alg.spore.p1structure",Ont="org.eclipse.elk.alg.spore.p2processingorder",Ant="org.eclipse.elk.alg.spore.p3execution",Lnt="Topdown Layout",Nnt="Invalid index: ",$nt="org.eclipse.elk.core.alg",Dnt={341:1},xnt={295:1},Rnt="Make sure its type is registered with the ",Knt=" utility class.",Fnt="true",_nt="false",Bnt="Couldn't clone property '",Hnt=.05,Unt="org.eclipse.elk.core.options",Gnt=1.2999999523162842,qnt="org.eclipse.elk.box",Xnt="org.eclipse.elk.expandNodes",znt="org.eclipse.elk.box.packingMode",Vnt="org.eclipse.elk.algorithm",Wnt="org.eclipse.elk.resolvedAlgorithm",Qnt="org.eclipse.elk.bendPoints",Jnt="org.eclipse.elk.labelManager",Ynt="org.eclipse.elk.scaleFactor",Znt="org.eclipse.elk.childAreaWidth",ntt="org.eclipse.elk.childAreaHeight",ttt="org.eclipse.elk.animate",ett="org.eclipse.elk.animTimeFactor",itt="org.eclipse.elk.layoutAncestors",rtt="org.eclipse.elk.maxAnimTime",ctt="org.eclipse.elk.minAnimTime",att="org.eclipse.elk.progressBar",ott="org.eclipse.elk.validateGraph",utt="org.eclipse.elk.validateOptions",stt="org.eclipse.elk.zoomToFit",htt="org.eclipse.elk.font.name",ftt="org.eclipse.elk.font.size",ltt="org.eclipse.elk.topdown.sizeApproximator",btt="org.eclipse.elk.topdown.scaleCap",wtt="org.eclipse.elk.edge.type",dtt="partitioning",gtt="nodeLabels",ptt="portAlignment",mtt="nodeSize",vtt="port",ktt="portLabels",ytt="topdown",Mtt="insideSelfLoops",Ttt="org.eclipse.elk.fixed",jtt="org.eclipse.elk.random",Ett={3:1,34:1,22:1,347:1},Stt="port must have a parent node to calculate the port side",Ptt="The edge needs to have exactly one edge section. Found: ",Ctt="org.eclipse.elk.core.util.adapters",Itt="org.eclipse.emf.ecore",Ott="org.eclipse.elk.graph",Att="EMapPropertyHolder",Ltt="ElkBendPoint",Ntt="ElkGraphElement",$tt="ElkConnectableShape",Dtt="ElkEdge",xtt="ElkEdgeSection",Rtt="EModelElement",Ktt="ENamedElement",Ftt="ElkLabel",_tt="ElkNode",Btt="ElkPort",Htt={94:1,93:1},Utt="org.eclipse.emf.common.notify.impl",Gtt="The feature '",qtt="' is not a valid changeable feature",Xtt="Expecting null",ztt="' is not a valid feature",Vtt="The feature ID",Wtt=" is not a valid feature ID",Qtt=32768,Jtt={110:1,94:1,93:1,58:1,54:1,99:1},Ytt="org.eclipse.emf.ecore.impl",Ztt="org.eclipse.elk.graph.impl",net="Recursive containment not allowed for ",tet="The datatype '",eet="' is not a valid classifier",iet="The value '",ret={195:1,3:1,4:1},cet="The class '",aet="http://www.eclipse.org/elk/ElkGraph",oet="property",uet="value",set="source",het="properties",fet="identifier",bet="height",wet="width",det="parent",get="text",pet="children",met="hierarchical",vet="sources",ket="targets",yet="sections",Met="bendPoints",Tet="outgoingShape",jet="incomingShape",Eet="outgoingSections",Set="incomingSections",Pet="org.eclipse.emf.common.util",Cet="Severe implementation error in the Json to ElkGraph importer.",Iet="id",Oet="org.eclipse.elk.graph.json",Aet="Unhandled parameter types: ",Let="startPoint",Net="An edge must have at least one source and one target (edge id: '",$et="').",Det="Referenced edge section does not exist: ",xet=" (edge id: '",Ret="target",Ket="sourcePoint",Fet="targetPoint",_et="group",Bet="name",Het="connectableShape cannot be null",Uet="edge cannot be null",Get="Passed edge is not 'simple'.",qet="org.eclipse.elk.graph.util",Xet="The 'no duplicates' constraint is violated",zet="targetIndex=",Vet=", size=",Wet="sourceIndex=",Qet={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Jet={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},Yet="logging",Zet="measureExecutionTime",nit="parser.parse.1",tit="parser.parse.2",eit="parser.next.1",iit="parser.next.2",rit="parser.next.3",cit="parser.next.4",ait="parser.factor.1",oit="parser.factor.2",uit="parser.factor.3",sit="parser.factor.4",hit="parser.factor.5",fit="parser.factor.6",lit="parser.atom.1",bit="parser.atom.2",wit="parser.atom.3",dit="parser.atom.4",git="parser.atom.5",pit="parser.cc.1",mit="parser.cc.2",vit="parser.cc.3",kit="parser.cc.5",yit="parser.cc.6",Mit="parser.cc.7",Tit="parser.cc.8",jit="parser.ope.1",Eit="parser.ope.2",Sit="parser.ope.3",Pit="parser.descape.1",Cit="parser.descape.2",Iit="parser.descape.3",Oit="parser.descape.4",Ait="parser.descape.5",Lit="parser.process.1",Nit="parser.quantifier.1",$it="parser.quantifier.2",Dit="parser.quantifier.3",xit="parser.quantifier.4",Rit="parser.quantifier.5",Kit="org.eclipse.emf.common.notify",Fit={424:1,686:1},_it={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},Bit={378:1,152:1},Hit="index=",Uit={3:1,4:1,5:1,129:1},Git={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},qit={3:1,6:1,4:1,5:1,198:1},Xit={3:1,4:1,5:1,173:1,379:1},zit=";/?:@&=+$,",Vit="invalid authority: ",Wit="EAnnotation",Qit="ETypedElement",Jit="EStructuralFeature",Yit="EAttribute",Zit="EClassifier",nrt="EEnumLiteral",trt="EGenericType",ert="EOperation",irt="EParameter",rrt="EReference",crt="ETypeParameter",art="org.eclipse.emf.ecore.util",ort={79:1},urt={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},srt="org.eclipse.emf.ecore.util.FeatureMap$Entry",hrt=8192,frt=2048,lrt="byte",brt="char",wrt="double",drt="float",grt="int",prt="long",mrt="short",vrt="java.lang.Object",krt={3:1,4:1,5:1,254:1},yrt={3:1,4:1,5:1,688:1},Mrt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},Trt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},jrt="mixed",Ert="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Srt="kind",Prt={3:1,4:1,5:1,689:1},Crt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},Irt={20:1,31:1,56:1,16:1,15:1,61:1,71:1},Ort={51:1,128:1,287:1},Art={76:1,343:1},Lrt="The value of type '",Nrt="' must be of type '",$rt=1352,Drt="http://www.eclipse.org/emf/2002/Ecore",xrt=-32768,Rrt="constraints",Krt="baseType",Frt="getEStructuralFeature",_rt="getFeatureID",Brt="feature",Hrt="getOperationID",Urt="operation",Grt="defaultValue",qrt="eTypeParameters",Xrt="isInstance",zrt="getEEnumLiteral",Vrt="eContainingClass",Wrt={57:1},Qrt={3:1,4:1,5:1,124:1},Jrt="org.eclipse.emf.ecore.resource",Yrt={94:1,93:1,599:1,2034:1},Zrt="org.eclipse.emf.ecore.resource.impl",nct="unspecified",tct="simple",ect="attribute",ict="attributeWildcard",rct="element",cct="elementWildcard",act="collapse",oct="itemType",uct="namespace",sct="##targetNamespace",hct="whiteSpace",fct="wildcards",lct="http://www.eclipse.org/emf/2003/XMLType",bct="##any",wct="uninitialized",dct="The multiplicity constraint is violated",gct="org.eclipse.emf.ecore.xml.type",pct="ProcessingInstruction",mct="SimpleAnyType",vct="XMLTypeDocumentRoot",kct="org.eclipse.emf.ecore.xml.type.impl",yct="INF",Mct="processing",Tct="ENTITIES_._base",jct="minLength",Ect="ENTITY",Sct="NCName",Pct="IDREFS_._base",Cct="integer",Ict="token",Oct="pattern",Act="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",Lct="\\i\\c*",Nct="[\\i-[:]][\\c-[:]]*",$ct="nonPositiveInteger",Dct="maxInclusive",xct="NMTOKEN",Rct="NMTOKENS_._base",Kct="nonNegativeInteger",Fct="minInclusive",_ct="normalizedString",Bct="unsignedByte",Hct="unsignedInt",Uct="18446744073709551615",Gct="unsignedShort",qct="processingInstruction",Xct="org.eclipse.emf.ecore.xml.type.internal",zct=1114111,Vct="Internal Error: shorthands: \\u",Wct="xml:isDigit",Qct="xml:isWord",Jct="xml:isSpace",Yct="xml:isNameChar",Zct="xml:isInitialNameChar",nat="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",tat="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",eat="Private Use",iat="ASSIGNED",rat="\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",cat="UNASSIGNED",aat={3:1,122:1},oat="org.eclipse.emf.ecore.xml.type.util",uat={3:1,4:1,5:1,381:1},sat="org.eclipse.xtext.xbase.lib",hat="Cannot add elements to a Range",fat="Cannot set elements in a Range",lat="Cannot remove elements from a Range",bat="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,sZn={},sDn(1,null,{},r),uZn.Fb=function(n){return SL(this,n)},uZn.Gb=function(){return this.Rm},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return Ij(Tbn(this))+"@"+(Hon(this)>>>0).toString(16)},uZn.equals=function(n){return this.Fb(n)},uZn.hashCode=function(){return this.Hb()},uZn.toString=function(){return this.Ib()},sDn(297,1,{297:1,2124:1},Ifn),uZn.ve=function(n){var t;return(t=new Ifn).i=4,t.c=n>1?B0(this,n-1):this,t},uZn.we=function(){return vK(this),this.b},uZn.xe=function(){return Ij(this)},uZn.ye=function(){return vK(this),this.k},uZn.ze=function(){return!!(4&this.i)},uZn.Ae=function(){return!!(1&this.i)},uZn.Ib=function(){return crn(this)},uZn.i=0;var wat,dat=zW(kZn,"Object",1),gat=zW(kZn,"Class",297);sDn(2096,1,yZn),zW(MZn,"Optional",2096),sDn(1191,2096,yZn,c),uZn.Fb=function(n){return n===this},uZn.Hb=function(){return 2040732332},uZn.Ib=function(){return"Optional.absent()"},uZn.Jb=function(n){return WW(n),gy(),wat},zW(MZn,"Absent",1191),sDn(636,1,{},FM),zW(MZn,"Joiner",636);var pat=Iq(MZn,"Predicate");sDn(589,1,{178:1,589:1,3:1,46:1},Hl),uZn.Mb=function(n){return Wfn(this,n)},uZn.Lb=function(n){return Wfn(this,n)},uZn.Fb=function(n){var t;return!!F$(n,589)&&(t=uG(n,589),PDn(this.a,t.a))},uZn.Hb=function(){return Zfn(this.a)+306654252},uZn.Ib=function(){return eAn(this.a)},zW(MZn,"Predicates/AndPredicate",589),sDn(419,2096,{419:1,3:1},Ul),uZn.Fb=function(n){var t;return!!F$(n,419)&&(t=uG(n,419),udn(this.a,t.a))},uZn.Hb=function(){return 1502476572+Hon(this.a)},uZn.Ib=function(){return CZn+this.a+")"},uZn.Jb=function(n){return new Ul(bZ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},zW(MZn,"Present",419),sDn(204,1,OZn),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){_M()},zW(AZn,"UnmodifiableIterator",204),sDn(2076,204,LZn),uZn.Qb=function(){_M()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(AZn,"UnmodifiableListIterator",2076),sDn(399,2076,LZn),uZn.Ob=function(){return this.c<this.d},uZn.Sb=function(){return this.c>0},uZn.Pb=function(){if(this.c>=this.d)throw hv(new Bv);return this.Xb(this.c++)},uZn.Tb=function(){return this.c},uZn.Ub=function(){if(this.c<=0)throw hv(new Bv);return this.Xb(--this.c)},uZn.Vb=function(){return this.c-1},uZn.c=0,uZn.d=0,zW(AZn,"AbstractIndexedListIterator",399),sDn(713,204,OZn),uZn.Ob=function(){return oon(this)},uZn.Pb=function(){return yen(this)},uZn.e=1,zW(AZn,"AbstractIterator",713),sDn(2084,1,{229:1}),uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.Fb=function(n){return Aln(this,n)},uZn.Hb=function(){return Hon(this.Zb())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return kz(this)},uZn.Ib=function(){return cpn(this.Zb())},zW(AZn,"AbstractMultimap",2084),sDn(742,2084,NZn),uZn.$b=function(){ban(this)},uZn._b=function(n){return jj(this,n)},uZn.ac=function(){return new OE(this,this.c)},uZn.ic=function(n){return this.hc()},uZn.bc=function(){return new RD(this,this.c)},uZn.jc=function(){return this.mc(this.hc())},uZn.kc=function(){return new My(this)},uZn.lc=function(){return ICn(this.c.vc().Nc(),new o,64,this.d)},uZn.cc=function(n){return Y9(this,n)},uZn.fc=function(n){return twn(this,n)},uZn.gc=function(){return this.d},uZn.mc=function(n){return hZ(),new qw(n)},uZn.nc=function(){return new yy(this)},uZn.oc=function(){return ICn(this.c.Cc().Nc(),new a,64,this.d)},uZn.pc=function(n,t){return new A7(this,n,t,null)},uZn.d=0,zW(AZn,"AbstractMapBasedMultimap",742),sDn(1696,742,NZn),uZn.hc=function(){return new R7(this.a)},uZn.jc=function(){return hZ(),hZ(),zot},uZn.cc=function(n){return uG(Y9(this,n),15)},uZn.fc=function(n){return uG(twn(this,n),15)},uZn.Zb=function(){return nZ(this)},uZn.Fb=function(n){return Aln(this,n)},uZn.qc=function(n){return uG(Y9(this,n),15)},uZn.rc=function(n){return uG(twn(this,n),15)},uZn.mc=function(n){return SZ(uG(n,15))},uZn.pc=function(n,t){return S6(this,n,uG(t,15),null)},zW(AZn,"AbstractListMultimap",1696),sDn(748,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()||this.e.Ob()},uZn.Pb=function(){var n;return this.e.Ob()||(n=uG(this.c.Pb(),44),this.b=n.ld(),this.a=uG(n.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},uZn.Qb=function(){this.e.Qb(),uG(nJ(this.a),16).dc()&&this.c.Qb(),--this.d.d},zW(AZn,"AbstractMapBasedMultimap/Itr",748),sDn(1129,748,$Zn,yy),uZn.sc=function(n,t){return t},zW(AZn,"AbstractMapBasedMultimap/1",1129),sDn(1130,1,{},a),uZn.Kb=function(n){return uG(n,16).Nc()},zW(AZn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),sDn(1131,748,$Zn,My),uZn.sc=function(n,t){return new FE(n,t)},zW(AZn,"AbstractMapBasedMultimap/2",1131);var mat=Iq(DZn,"Map");sDn(2065,1,xZn),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.vc().$b()},uZn.tc=function(n){return sTn(this,n)},uZn._b=function(n){return!!TPn(this,n,!1)},uZn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=uG(t.Pb(),44).md(),xA(n)===xA(e)||null!=n&&udn(n,e))return!0;return!1},uZn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!F$(n,85))return!1;if(i=uG(n,85),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=uG(e.Pb(),44),!this.tc(t))return!1;return!0},uZn.xc=function(n){return DA(TPn(this,n,!1))},uZn.Hb=function(){return tfn(this.vc())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return new Lw(this)},uZn.zc=function(n,t){throw hv(new TM("Put not supported on this map"))},uZn.Ac=function(n){xun(this,n)},uZn.Bc=function(n){return DA(TPn(this,n,!0))},uZn.gc=function(){return this.vc().gc()},uZn.Ib=function(){return KPn(this)},uZn.Cc=function(){return new Fw(this)},zW(DZn,"AbstractMap",2065),sDn(2085,2065,xZn),uZn.bc=function(){return new VE(this)},uZn.vc=function(){return vz(this)},uZn.ec=function(){return this.g||(this.g=this.bc())},uZn.Cc=function(){return this.i||(this.i=new zE(this))},zW(AZn,"Maps/ViewCachingAbstractMap",2085),sDn(402,2085,xZn,OE),uZn.xc=function(n){return srn(this,n)},uZn.Bc=function(n){return abn(this,n)},uZn.$b=function(){this.d==this.e.c?this.e.$b():Hq(new Gq(this))},uZn._b=function(n){return Uwn(this.d,n)},uZn.Ec=function(){return new Gl(this)},uZn.Dc=function(){return this.Ec()},uZn.Fb=function(n){return this===n||udn(this.d,n)},uZn.Hb=function(){return Hon(this.d)},uZn.ec=function(){return this.e.ec()},uZn.gc=function(){return this.d.gc()},uZn.Ib=function(){return cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/AsMap",402);var vat=Iq(kZn,"Iterable");sDn(31,1,RZn),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){throw hv(new TM("Add not supported on this collection"))},uZn.Gc=function(n){return Qon(this,n)},uZn.$b=function(){oY(this)},uZn.Hc=function(n){return Wpn(this,n,!1)},uZn.Ic=function(n){return yhn(this,n)},uZn.dc=function(){return 0==this.gc()},uZn.Mc=function(n){return Wpn(this,n,!0)},uZn.Pc=function(){return Sz(this)},uZn.Qc=function(n){return oTn(this,n)},uZn.Ib=function(){return vIn(this)},zW(DZn,"AbstractCollection",31);var kat=Iq(DZn,"Set");sDn(KZn,31,FZn),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return Fvn(this,n)},uZn.Hb=function(){return tfn(this)},zW(DZn,"AbstractSet",KZn),sDn(2068,KZn,FZn),zW(AZn,"Sets/ImprovedAbstractSet",2068),sDn(2069,2068,FZn),uZn.$b=function(){this.Rc().$b()},uZn.Hc=function(n){return Amn(this,n)},uZn.dc=function(){return this.Rc().dc()},uZn.Mc=function(n){var t;return!(!this.Hc(n)||!F$(n,44))&&(t=uG(n,44),this.Rc().ec().Mc(t.ld()))},uZn.gc=function(){return this.Rc().gc()},zW(AZn,"Maps/EntrySet",2069),sDn(1127,2069,FZn,Gl),uZn.Hc=function(n){return Gwn(this.a.d.vc(),n)},uZn.Kc=function(){return new Gq(this.a)},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Gwn(this.a.d.vc(),n)&&(t=uG(nJ(uG(n,44)),44),H9(this.a.e,t.ld()),!0)},uZn.Nc=function(){return JU(this.a.d.vc().Nc(),new ql(this.a))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),sDn(1128,1,{},ql),uZn.Kb=function(n){return O9(this.a,uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),sDn(746,1,$Zn,Gq),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){var n;return n=uG(this.b.Pb(),44),this.a=uG(n.md(),16),O9(this.c,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Qb=function(){IB(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),sDn(542,2068,FZn,VE),uZn.$b=function(){this.b.$b()},uZn.Hc=function(n){return this.b._b(n)},uZn.Jc=function(n){WW(n),this.b.wc(new db(n))},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Ny(this.b.vc().Kc())},uZn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},uZn.gc=function(){return this.b.gc()},zW(AZn,"Maps/KeySet",542),sDn(327,542,FZn,RD),uZn.$b=function(){Hq(new AE(this,this.b.vc().Kc()))},uZn.Ic=function(n){return this.b.ec().Ic(n)},uZn.Fb=function(n){return this===n||udn(this.b.ec(),n)},uZn.Hb=function(){return Hon(this.b.ec())},uZn.Kc=function(){return new AE(this,this.b.vc().Kc())},uZn.Mc=function(n){var t,e;return e=0,(t=uG(this.b.Bc(n),16))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/KeySet",327),sDn(747,1,$Zn,AE),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()},uZn.Pb=function(){return this.a=uG(this.c.Pb(),44),this.a.ld()},uZn.Qb=function(){var n;IB(!!this.a),n=uG(this.a.md(),16),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/KeySet/1",747),sDn(503,402,{85:1,133:1},NK),uZn.bc=function(){return this.Sc()},uZn.ec=function(){return this.Uc()},uZn.Sc=function(){return new yE(this.c,this.Wc())},uZn.Tc=function(){return this.Wc().Tc()},uZn.Uc=function(){return this.b||(this.b=this.Sc())},uZn.Vc=function(){return this.Wc().Vc()},uZn.Wc=function(){return uG(this.d,133)},zW(AZn,"AbstractMapBasedMultimap/SortedAsMap",503),sDn(446,503,_Zn,$K),uZn.bc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.Sc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.ec=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Uc=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Wc=function(){return uG(uG(this.d,133),139)},uZn.Xc=function(n){return uG(uG(this.d,133),139).Xc(n)},uZn.Yc=function(n){return uG(uG(this.d,133),139).Yc(n)},uZn.Zc=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).Zc(n,t))},uZn.$c=function(n){return uG(uG(this.d,133),139).$c(n)},uZn._c=function(n){return uG(uG(this.d,133),139)._c(n)},uZn.ad=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).ad(n,t))},zW(AZn,"AbstractMapBasedMultimap/NavigableAsMap",446),sDn(502,327,BZn,yE),uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/SortedKeySet",502),sDn(401,502,HZn,ME),zW(AZn,"AbstractMapBasedMultimap/NavigableKeySet",401),sDn(551,31,RZn,A7),uZn.Fc=function(n){var t,e;return bpn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&mF(this)),t},uZn.Gc=function(n){var t,e,i;return!n.dc()&&(bpn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&mF(this)),t)},uZn.$b=function(){var n;bpn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,DX(this))},uZn.Hc=function(n){return bpn(this),this.d.Hc(n)},uZn.Ic=function(n){return bpn(this),this.d.Ic(n)},uZn.Fb=function(n){return n===this||(bpn(this),udn(this.d,n))},uZn.Hb=function(){return bpn(this),Hon(this.d)},uZn.Kc=function(){return bpn(this),new WU(this)},uZn.Mc=function(n){var t;return bpn(this),(t=this.d.Mc(n))&&(--this.f.d,DX(this)),t},uZn.gc=function(){return qA(this)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.Ib=function(){return bpn(this),cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection",551);var yat=Iq(DZn,"List");sDn(744,551,{20:1,31:1,16:1,15:1},qz),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.bd=function(n,t){var e;bpn(this),e=this.d.dc(),uG(this.d,15).bd(n,t),++this.a.d,e&&mF(this)},uZn.cd=function(n,t){var e,i,r;return!t.dc()&&(bpn(this),r=this.d.gc(),(e=uG(this.d,15).cd(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&mF(this)),e)},uZn.Xb=function(n){return bpn(this),uG(this.d,15).Xb(n)},uZn.dd=function(n){return bpn(this),uG(this.d,15).dd(n)},uZn.ed=function(){return bpn(this),new JN(this)},uZn.fd=function(n){return bpn(this),new UY(this,n)},uZn.gd=function(n){var t;return bpn(this),t=uG(this.d,15).gd(n),--this.a.d,DX(this),t},uZn.hd=function(n,t){return bpn(this),uG(this.d,15).hd(n,t)},uZn.kd=function(n,t){return bpn(this),S6(this.a,this.e,uG(this.d,15).kd(n,t),this.b?this.b:this)},zW(AZn,"AbstractMapBasedMultimap/WrappedList",744),sDn(1126,744,{20:1,31:1,16:1,15:1,59:1},Yx),zW(AZn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),sDn(628,1,$Zn,WU),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return FY(this),this.b.Ob()},uZn.Pb=function(){return FY(this),this.b.Pb()},uZn.Qb=function(){zD(this)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),sDn(745,628,UZn,JN,UY),uZn.Qb=function(){zD(this)},uZn.Rb=function(n){var t;t=0==qA(this.a),(FY(this),uG(this.b,128)).Rb(n),++this.a.a.d,t&&mF(this.a)},uZn.Sb=function(){return(FY(this),uG(this.b,128)).Sb()},uZn.Tb=function(){return(FY(this),uG(this.b,128)).Tb()},uZn.Ub=function(){return(FY(this),uG(this.b,128)).Ub()},uZn.Vb=function(){return(FY(this),uG(this.b,128)).Vb()},uZn.Wb=function(n){(FY(this),uG(this.b,128)).Wb(n)},zW(AZn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),sDn(743,551,BZn,AK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSortedSet",743),sDn(1125,743,HZn,TN),zW(AZn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),sDn(1124,551,FZn,LK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSet",1124),sDn(1133,1,{},o),uZn.Kb=function(n){return P7(uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/lambda$1$Type",1133),sDn(1132,1,{},Wl),uZn.Kb=function(n){return new FE(this.a,n)},zW(AZn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var Mat,Tat,jat,Eat,Sat=Iq(DZn,"Map/Entry");sDn(358,1,GZn),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),xQ(this.ld(),t.ld())&&xQ(this.md(),t.md()))},uZn.Hb=function(){var n,t;return n=this.ld(),t=this.md(),(null==n?0:Hon(n))^(null==t?0:Hon(t))},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(AZn,qZn,358),sDn(2086,31,RZn),uZn.$b=function(){this.od().$b()},uZn.Hc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),E4(this.od(),t.ld(),t.md()))},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),S4(this.od(),t.ld(),t.md()))},uZn.gc=function(){return this.od().d},zW(AZn,"Multimaps/Entries",2086),sDn(749,2086,RZn,Ql),uZn.Kc=function(){return this.a.kc()},uZn.od=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"AbstractMultimap/Entries",749),sDn(750,749,FZn,Ty),uZn.Nc=function(){return this.a.lc()},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"AbstractMultimap/EntrySet",750),sDn(751,31,RZn,Jl),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return qln(this.a,n)},uZn.Kc=function(){return this.a.nc()},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return this.a.oc()},zW(AZn,"AbstractMultimap/Values",751),sDn(2087,31,{849:1,20:1,31:1,16:1}),uZn.Jc=function(n){WW(n),uY(this).Jc(new yb(n))},uZn.Nc=function(){var n;return ICn(n=uY(this).Nc(),new d,64|1296&n.yd(),this.a.d)},uZn.Fc=function(n){return HM(),!0},uZn.Gc=function(n){return WW(this),WW(n),F$(n,552)?V4(uG(n,849)):!n.dc()&&cin(this,n.Kc())},uZn.Hc=function(n){var t;return((t=uG(Xwn(nZ(this.a),n),16))?t.gc():0)>0},uZn.Fb=function(n){return nxn(this,n)},uZn.Hb=function(){return Hon(uY(this))},uZn.dc=function(){return uY(this).dc()},uZn.Mc=function(n){return bNn(this,n,1)>0},uZn.Ib=function(){return cpn(uY(this))},zW(AZn,"AbstractMultiset",2087),sDn(2089,2068,FZn),uZn.$b=function(){ban(this.a.a)},uZn.Hc=function(n){var t;return!(!F$(n,504)||(t=uG(n,425),uG(t.a.md(),16).gc()<=0||S2(this.a,t.a.ld())!=uG(t.a.md(),16).gc()))},uZn.Mc=function(n){var t,e,i;return!(!F$(n,504)||(t=(e=uG(n,425)).a.ld(),0==(i=uG(e.a.md(),16).gc())))&&wNn(this.a,t,i)},zW(AZn,"Multisets/EntrySet",2089),sDn(1139,2089,FZn,Yl),uZn.Kc=function(){return new Dy(vz(nZ(this.a.a)).Kc())},uZn.gc=function(){return nZ(this.a.a).gc()},zW(AZn,"AbstractMultiset/EntrySet",1139),sDn(627,742,NZn),uZn.hc=function(){return this.pd()},uZn.jc=function(){return this.qd()},uZn.cc=function(n){return this.rd(n)},uZn.fc=function(n){return this.sd(n)},uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.qd=function(){return hZ(),hZ(),Wot},uZn.Fb=function(n){return Aln(this,n)},uZn.rd=function(n){return uG(Y9(this,n),21)},uZn.sd=function(n){return uG(twn(this,n),21)},uZn.mc=function(n){return hZ(),new nT(uG(n,21))},uZn.pc=function(n,t){return new LK(this,n,uG(t,21))},zW(AZn,"AbstractSetMultimap",627),sDn(1723,627,NZn),uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.jc=function(){return UQ(new Hj(this.b))},uZn.qd=function(){return UQ(new Hj(this.b))},uZn.cc=function(n){return uG(uG(Y9(this,n),21),87)},uZn.rd=function(n){return uG(uG(Y9(this,n),21),87)},uZn.fc=function(n){return uG(uG(twn(this,n),21),87)},uZn.sd=function(n){return uG(uG(twn(this,n),21),87)},uZn.mc=function(n){return F$(n,277)?UQ(uG(n,277)):(hZ(),new mx(uG(n,87)))},uZn.Zb=function(){return this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c))},uZn.pc=function(n,t){return F$(t,277)?new TN(this,n,uG(t,277)):new AK(this,n,uG(t,87))},zW(AZn,"AbstractSortedSetMultimap",1723),sDn(1724,1723,NZn),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.bc=function(){return F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)},zW(AZn,"AbstractSortedKeySortedSetMultimap",1724),sDn(2109,1,{2046:1}),uZn.Fb=function(n){return fSn(this,n)},uZn.Hb=function(){return tfn(this.g||(this.g=new nb(this)))},uZn.Ib=function(){return KPn(this.f||(this.f=new VD(this)))},zW(AZn,"AbstractTable",2109),sDn(679,KZn,FZn,nb),uZn.$b=function(){UM()},uZn.Hc=function(n){var t,e;return!!F$(n,479)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&Gwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.Kc=function(){return CZ(this.a)},uZn.Mc=function(n){var t,e;return!!F$(n,479)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&qwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return u6(this.a)},zW(AZn,"AbstractTable/CellSet",679),sDn(2025,31,RZn,tb),uZn.$b=function(){UM()},uZn.Hc=function(n){return QPn(this.a,n)},uZn.Kc=function(){return IZ(this.a)},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return y4(this.a)},zW(AZn,"AbstractTable/Values",2025),sDn(1697,1696,NZn),zW(AZn,"ArrayListMultimapGwtSerializationDependencies",1697),sDn(520,1697,NZn,rT,L2),uZn.hc=function(){return new R7(this.a)},uZn.a=0,zW(AZn,"ArrayListMultimap",520),sDn(678,2109,{678:1,2046:1,3:1},f$n),zW(AZn,"ArrayTable",678),sDn(2021,399,LZn,WD),uZn.Xb=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1",2021),sDn(2022,1,{},Xl),uZn.td=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1methodref$getCell$Type",2022),sDn(2110,1,{697:1}),uZn.Fb=function(n){var t;return n===this||!!F$(n,479)&&(t=uG(n,697),xQ(GA(this.c.e,this.b),GA(t.c.e,t.b))&&xQ(GA(this.c.c,this.a),GA(t.c.c,t.a))&&xQ(I7(this.c,this.b,this.a),I7(t.c,t.b,t.a)))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[GA(this.c.e,this.b),GA(this.c.c,this.a),I7(this.c,this.b,this.a)]))},uZn.Ib=function(){return"("+GA(this.c.e,this.b)+","+GA(this.c.c,this.a)+")="+I7(this.c,this.b,this.a)},zW(AZn,"Tables/AbstractCell",2110),sDn(479,2110,{479:1,697:1},Ofn),uZn.a=0,uZn.b=0,uZn.d=0,zW(AZn,"ArrayTable/2",479),sDn(2024,1,{},zl),uZn.td=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/2methodref$getValue$Type",2024),sDn(2023,399,LZn,QD),uZn.Xb=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/3",2023),sDn(2077,2065,xZn),uZn.$b=function(){Hq(this.kc())},uZn.vc=function(){return new wb(this)},uZn.lc=function(){return new MY(this.kc(),this.gc())},zW(AZn,"Maps/IteratorBasedAbstractMap",2077),sDn(842,2077,xZn),uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return Ej(this.c,n)},uZn.kc=function(){return new JD(this,this.c.b.c.gc())},uZn.lc=function(){return Dq(this.c.b.c.gc(),16,new Vl(this))},uZn.xc=function(n){var t;return(t=uG(W_(this.c,n),17))?this.vd(t.a):null},uZn.dc=function(){return this.c.b.c.dc()},uZn.ec=function(){return Tz(this.c)},uZn.zc=function(n,t){var e;if(!(e=uG(W_(this.c,n),17)))throw hv(new vM(this.ud()+" "+n+" not in "+Tz(this.c)));return this.wd(e.a,t)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.b.c.gc()},zW(AZn,"ArrayTable/ArrayMap",842),sDn(2020,1,{},Vl),uZn.td=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),sDn(2018,358,GZn,TE),uZn.ld=function(){return uR(this.a,this.b)},uZn.md=function(){return this.a.vd(this.b)},uZn.nd=function(n){return this.a.wd(this.b,n)},uZn.b=0,zW(AZn,"ArrayTable/ArrayMap/1",2018),sDn(2019,399,LZn,JD),uZn.Xb=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/2",2019),sDn(2017,842,xZn,yV),uZn.ud=function(){return"Column"},uZn.vd=function(n){return I7(this.b,this.a,n)},uZn.wd=function(n,t){return Hhn(this.b,this.a,n,t)},uZn.a=0,zW(AZn,"ArrayTable/Row",2017),sDn(843,842,xZn,VD),uZn.vd=function(n){return new yV(this.a,n)},uZn.zc=function(n,t){return uG(t,85),GM()},uZn.wd=function(n,t){return uG(t,85),qM()},uZn.ud=function(){return"Row"},zW(AZn,"ArrayTable/RowMap",843),sDn(1157,1,WZn,jE),uZn.Ad=function(n){return!!(-262&this.a.yd()&n)},uZn.yd=function(){return-262&this.a.yd()},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Nb(new SE(n,this.b))},uZn.Bd=function(n){return this.a.Bd(new EE(n,this.b))},zW(AZn,"CollectSpliterators/1",1157),sDn(1158,1,QZn,EE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$0$Type",1158),sDn(1159,1,QZn,SE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$1$Type",1159),sDn(1154,1,WZn,x_),uZn.Ad=function(n){return!!((16464|this.b)&n)},uZn.yd=function(){return 16464|this.b},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Qe(new CE(n,this.c))},uZn.Bd=function(n){return this.a.Re(new PE(n,this.c))},uZn.b=0,zW(AZn,"CollectSpliterators/1WithCharacteristics",1154),sDn(1155,1,JZn,PE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),sDn(1156,1,JZn,CE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),sDn(1150,1,WZn),uZn.Ad=function(n){return!!(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return this.e&&(this.b=g$(this.b,this.e.zd())),g$(this.b,0)},uZn.Nb=function(n){this.e&&(this.e.Nb(n),this.e=null),this.c.Nb(new IE(this,n)),this.b=0},uZn.Bd=function(n){for(;;){if(this.e&&this.e.Bd(n))return HA(this.b,YZn)&&(this.b=$gn(this.b,1)),!0;if(this.e=null,!this.c.Bd(new eb(this)))return!1}},uZn.a=0,uZn.b=0,zW(AZn,"CollectSpliterators/FlatMapSpliterator",1150),sDn(1152,1,QZn,eb),uZn.Cd=function(n){M_(this.a,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),sDn(1153,1,QZn,IE),uZn.Cd=function(n){fY(this.a,this.b,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),sDn(1151,1150,WZn,T6),zW(AZn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),sDn(253,1,ZZn),uZn.Fd=function(n){return this.Ed(uG(n,253))},uZn.Ed=function(n){var t;return n==(my(),Tat)?1:n==(py(),Mat)?-1:(qG(),0!=(t=Dun(this.a,n.a))?t:F$(this,526)==F$(n,526)?0:F$(this,526)?1:-1)},uZn.Id=function(){return this.a},uZn.Fb=function(n){return pTn(this,n)},zW(AZn,"Cut",253),sDn(1823,253,ZZn,ky),uZn.Ed=function(n){return n==this?0:1},uZn.Gd=function(n){throw hv(new Av)},uZn.Hd=function(n){n.a+="+\u221e)"},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!1},uZn.Ib=function(){return"+\u221e"},zW(AZn,"Cut/AboveAll",1823),sDn(526,253,{253:1,526:1,3:1,34:1},bx),uZn.Gd=function(n){QA((n.a+="(",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),93)},uZn.Hb=function(){return~Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<0},uZn.Ib=function(){return"/"+this.a+"\\"},zW(AZn,"Cut/AboveValue",526),sDn(1822,253,ZZn,vy),uZn.Ed=function(n){return n==this?0:-1},uZn.Gd=function(n){n.a+="(-\u221e"},uZn.Hd=function(n){throw hv(new Av)},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!0},uZn.Ib=function(){return"-\u221e"},zW(AZn,"Cut/BelowAll",1822),sDn(1824,253,ZZn,wx),uZn.Gd=function(n){QA((n.a+="[",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),41)},uZn.Hb=function(){return Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<=0},uZn.Ib=function(){return"\\"+this.a+"/"},zW(AZn,"Cut/BelowValue",1824),sDn(547,1,t1n),uZn.Jc=function(n){z8(this,n)},uZn.Ib=function(){return rgn(uG(bZ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},zW(AZn,"FluentIterable",547),sDn(442,547,t1n,iN),uZn.Kc=function(){return new Fz(ix(this.a.Kc(),new h))},zW(AZn,"FluentIterable/2",442),sDn(1059,547,t1n,rN),uZn.Kc=function(){return OV(this)},zW(AZn,"FluentIterable/3",1059),sDn(724,399,LZn,YD),uZn.Xb=function(n){return this.a[n].Kc()},zW(AZn,"FluentIterable/3/1",724),sDn(2070,1,{}),uZn.Ib=function(){return cpn(this.Kd().b)},zW(AZn,"ForwardingObject",2070),sDn(2071,2070,e1n),uZn.Kd=function(){return this.Ld()},uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return this.Ld(),Rj()},uZn.Gc=function(n){return this.Ld(),Kj()},uZn.$b=function(){this.Ld(),Fj()},uZn.Hc=function(n){return this.Ld().Hc(n)},uZn.Ic=function(n){return this.Ld().Ic(n)},uZn.dc=function(){return this.Ld().b.dc()},uZn.Kc=function(){return this.Ld().Kc()},uZn.Mc=function(n){return this.Ld(),_j()},uZn.gc=function(){return this.Ld().b.gc()},uZn.Pc=function(){return this.Ld().Pc()},uZn.Qc=function(n){return this.Ld().Qc(n)},zW(AZn,"ForwardingCollection",2071),sDn(2078,31,i1n),uZn.Kc=function(){return this.Od()},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.Md=function(){return this.c||(this.c=this.Nd())},uZn.$b=function(){throw hv(new Kv)},uZn.Hc=function(n){return null!=n&&Wpn(this,n,!1)},uZn.Nd=function(){switch(this.gc()){case 0:return ZW(),ZW(),jat;case 1:return ZW(),new Uq(WW(this.Od().Pb()));default:return new TV(this,this.Pc())}},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"ImmutableCollection",2078),sDn(727,2078,i1n,jv),uZn.Kc=function(){return jtn(this.a.Kc())},uZn.Hc=function(n){return null!=n&&this.a.Hc(n)},uZn.Ic=function(n){return this.a.Ic(n)},uZn.dc=function(){return this.a.dc()},uZn.Od=function(){return jtn(this.a.Kc())},uZn.gc=function(){return this.a.gc()},uZn.Pc=function(){return this.a.Pc()},uZn.Qc=function(n){return this.a.Qc(n)},uZn.Ib=function(){return cpn(this.a)},zW(AZn,"ForwardingImmutableCollection",727),sDn(307,2078,r1n),uZn.Kc=function(){return this.Od()},uZn.ed=function(){return this.Pd(0)},uZn.fd=function(n){return this.Pd(n)},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.kd=function(n,t){return this.Qd(n,t)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Md=function(){return this},uZn.Fb=function(n){return RDn(this,n)},uZn.Hb=function(){return Xsn(this)},uZn.dd=function(n){return null==n?-1:uTn(this,n)},uZn.Od=function(){return this.Pd(0)},uZn.Pd=function(n){return oR(this,n)},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.Qd=function(n,t){return Dwn(new C2(new qE(this),n,t))},zW(AZn,"ImmutableList",307),sDn(2105,307,r1n),uZn.Kc=function(){return jtn(this.Rd().Kc())},uZn.kd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Hc=function(n){return null!=n&&this.Rd().Hc(n)},uZn.Ic=function(n){return this.Rd().Ic(n)},uZn.Fb=function(n){return udn(this.Rd(),n)},uZn.Xb=function(n){return GA(this,n)},uZn.Hb=function(){return Hon(this.Rd())},uZn.dd=function(n){return this.Rd().dd(n)},uZn.dc=function(){return this.Rd().dc()},uZn.Od=function(){return jtn(this.Rd().Kc())},uZn.gc=function(){return this.Rd().gc()},uZn.Qd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Pc=function(){return this.Rd().Qc(Inn(dat,EZn,1,this.Rd().gc(),5,1))},uZn.Qc=function(n){return this.Rd().Qc(n)},uZn.Ib=function(){return cpn(this.Rd())},zW(AZn,"ForwardingImmutableList",2105),sDn(729,1,a1n),uZn.vc=function(){return Mz(this)},uZn.wc=function(n){Yun(this,n)},uZn.ec=function(){return Tz(this)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.Cc=function(){return this.Vd()},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return null!=this.xc(n)},uZn.uc=function(n){return this.Vd().Hc(n)},uZn.Td=function(){return new Ev(this)},uZn.Ud=function(){return new Sv(this)},uZn.Fb=function(n){return Wln(this,n)},uZn.Hb=function(){return Mz(this).Hb()},uZn.dc=function(){return 0==this.gc()},uZn.zc=function(n,t){return BM()},uZn.Bc=function(n){throw hv(new Kv)},uZn.Ib=function(){return QIn(this)},uZn.Vd=function(){return this.e?this.e:this.e=this.Ud()},uZn.c=null,uZn.d=null,uZn.e=null,zW(AZn,"ImmutableMap",729),sDn(730,729,a1n),uZn._b=function(n){return Ej(this,n)},uZn.uc=function(n){return iS(this.b,n)},uZn.Sd=function(){return $wn(new Zl(this))},uZn.Td=function(){return $wn(SJ(this.b))},uZn.Ud=function(){return sB(),new jv(jJ(this.b))},uZn.Fb=function(n){return rS(this.b,n)},uZn.xc=function(n){return W_(this,n)},uZn.Hb=function(){return Hon(this.b.c)},uZn.dc=function(){return this.b.c.dc()},uZn.gc=function(){return this.b.c.gc()},uZn.Ib=function(){return cpn(this.b.c)},zW(AZn,"ForwardingImmutableMap",730),sDn(2072,2071,o1n),uZn.Kd=function(){return this.Wd()},uZn.Ld=function(){return this.Wd()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return n===this||this.Wd().Fb(n)},uZn.Hb=function(){return this.Wd().Hb()},zW(AZn,"ForwardingSet",2072),sDn(1085,2072,o1n,Zl),uZn.Kd=function(){return EJ(this.a.b)},uZn.Ld=function(){return EJ(this.a.b)},uZn.Hc=function(n){if(F$(n,44)&&null==uG(n,44).ld())return!1;try{return eS(EJ(this.a.b),n)}catch(t){if(F$(t=Ehn(t),212))return!1;throw hv(t)}},uZn.Wd=function(){return EJ(this.a.b)},uZn.Qc=function(n){var t;return t=YZ(EJ(this.a.b),n),EJ(this.a.b).b.gc()<t.length&&uQ(t,EJ(this.a.b).b.gc(),null),t},zW(AZn,"ForwardingImmutableMap/1",1085),sDn(2079,2078,u1n),uZn.Kc=function(){return this.Od()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"ImmutableSet",2079),sDn(719,2079,u1n),uZn.Kc=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.Hc=function(n){return null!=n&&ZE(this.a,n)},uZn.Ic=function(n){return nS(this.a,n)},uZn.Hb=function(){return Hon(this.a.b)},uZn.dc=function(){return this.a.b.dc()},uZn.Od=function(){return jtn(new Gw(this.a.b.Kc()))},uZn.gc=function(){return this.a.b.gc()},uZn.Pc=function(){return this.a.b.Pc()},uZn.Qc=function(n){return tS(this.a,n)},uZn.Ib=function(){return cpn(this.a.b)},zW(AZn,"ForwardingImmutableSet",719),sDn(2073,2072,s1n),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Nc=function(){return new GP(this)},zW(AZn,"ForwardingSortedSet",2073),sDn(543,2077,a1n,dMn),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.$b=function(){n9(this)},uZn._b=function(n){return!!lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))},uZn.uc=function(n){return lrn(this,n)},uZn.kc=function(){return new ZD(this,this)},uZn.wc=function(n){T0(this,n)},uZn.xc=function(n){return dcn(this,n)},uZn.ec=function(){return new u$(this)},uZn.zc=function(n,t){return yHn(this,n,t)},uZn.Bc=function(n){var t;return(t=lun(this,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this,t),t.e=null,t.c=null,t.i):null},uZn.gc=function(){return this.i},uZn.xd=function(){return new o$(this.d||(this.d=new rb(this)))},uZn.f=0,uZn.g=0,uZn.i=0,zW(AZn,"HashBiMap",543),sDn(544,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return C6(this)},uZn.Pb=function(){var n;if(!C6(this))throw hv(new Bv);return n=uG(nJ(this.c),303),this.c=n.c,this.f=n,--this.d,this.Xd(n)},uZn.Qb=function(){if(this.e.g!=this.b)throw hv(new Fv);if(!this.f)throw hv(new kM(PZn));yRn(this.e,this.f),this.b=this.e.g,this.f=null},uZn.b=0,uZn.d=0,uZn.f=null,zW(AZn,"HashBiMap/Itr",544),sDn(1023,544,$Zn,ZD),uZn.Xd=function(n){return new LE(this,n)},zW(AZn,"HashBiMap/1",1023),sDn(w1n,358,GZn,LE),uZn.ld=function(){return this.a.g},uZn.md=function(){return this.a.i},uZn.nd=function(n){var t,e,i;return e=this.a.i,(i=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.f&&(xA(n)===xA(e)||null!=n&&udn(n,e))?n:(Dhn(!bun(this.b.a,n,i),n),yRn(this.b.a,this.a),t=new fJ(this.a.g,this.a.a,n,i),HLn(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)},zW(AZn,"HashBiMap/1/MapEntry",w1n),sDn(246,358,{358:1,246:1,3:1,44:1},FE),uZn.ld=function(){return this.g},uZn.md=function(){return this.i},uZn.nd=function(n){throw hv(new Kv)},zW(AZn,"ImmutableEntry",246),sDn(303,246,{358:1,303:1,246:1,3:1,44:1},fJ),uZn.a=0,uZn.f=0;var Pat,Cat=zW(AZn,"HashBiMap/BiEntry",303);sDn(619,2077,a1n,rb),uZn.Ac=function(n){xun(this,n)},uZn.Cc=function(){return new u$(this.a)},uZn.$b=function(){n9(this.a)},uZn._b=function(n){return lrn(this.a,n)},uZn.kc=function(){return new nx(this,this.a)},uZn.wc=function(n){WW(n),T0(this.a,new cb(n))},uZn.xc=function(n){return kan(this,n)},uZn.ec=function(){return new o$(this)},uZn.zc=function(n,t){return KUn(this.a,n,t,!1)},uZn.Bc=function(n){var t;return(t=bun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))?(yRn(this.a,t),t.e=null,t.c=null,t.g):null},uZn.gc=function(){return this.a.i},uZn.xd=function(){return new u$(this.a)},zW(AZn,"HashBiMap/Inverse",619),sDn(1020,544,$Zn,nx),uZn.Xd=function(n){return new NE(this,n)},zW(AZn,"HashBiMap/Inverse/1",1020),sDn(1021,358,GZn,NE),uZn.ld=function(){return this.a.i},uZn.md=function(){return this.a.g},uZn.nd=function(n){var t,e,i;return i=this.a.g,(t=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))==this.a.a&&(xA(n)===xA(i)||null!=n&&udn(n,i))?n:(Dhn(!lun(this.b.a.a,n,t),n),yRn(this.b.a.a,this.a),e=new fJ(n,t,this.a.i,this.a.f),this.a=e,HLn(this.b.a.a,e,null),this.b.b=this.b.a.a.g,i)},zW(AZn,"HashBiMap/Inverse/1/InverseEntry",1021),sDn(620,542,FZn,o$),uZn.Kc=function(){return new Iy(this.a.a)},uZn.Mc=function(n){var t;return!!(t=bun(this.a.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a.a,t),!0)},zW(AZn,"HashBiMap/Inverse/InverseKeySet",620),sDn(1019,544,$Zn,Iy),uZn.Xd=function(n){return n.i},zW(AZn,"HashBiMap/Inverse/InverseKeySet/1",1019),sDn(1022,1,{},cb),uZn.Yd=function(n,t){Mv(this.a,n,t)},zW(AZn,"HashBiMap/Inverse/lambda$0$Type",1022),sDn(618,542,FZn,u$),uZn.Kc=function(){return new Oy(this.a)},uZn.Mc=function(n){var t;return!!(t=lun(this.a,n,pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15)))))&&(yRn(this.a,t),t.e=null,t.c=null,!0)},zW(AZn,"HashBiMap/KeySet",618),sDn(1018,544,$Zn,Oy),uZn.Xd=function(n){return n.g},zW(AZn,"HashBiMap/KeySet/1",1018),sDn(1123,627,NZn),zW(AZn,"HashMultimapGwtSerializationDependencies",1123),sDn(271,1123,NZn,K1),uZn.hc=function(){return new Dj(orn(this.a))},uZn.pd=function(){return new Dj(orn(this.a))},uZn.a=2,zW(AZn,"HashMultimap",271),sDn(2097,307,r1n),uZn.Hc=function(n){return this.Zd().Hc(n)},uZn.dc=function(){return this.Zd().dc()},uZn.gc=function(){return this.Zd().gc()},zW(AZn,"ImmutableAsList",2097),sDn(2030,730,a1n),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"ImmutableBiMap",2030),sDn(2075,1,{}),zW(AZn,"ImmutableCollection/Builder",2075),sDn(1035,719,u1n,Ay),zW(AZn,"ImmutableEnumSet",1035),sDn(980,399,LZn,$_),uZn.Xb=function(n){return this.a.Xb(n)},zW(AZn,"ImmutableList/1",980),sDn(979,2075,{},UF),zW(AZn,"ImmutableList/Builder",979),sDn(623,204,OZn,ab),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},zW(AZn,"ImmutableMap/1",623),sDn(1054,1,{},u),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"ImmutableMap/2methodref$getKey$Type",1054),sDn(1053,1,{},GF),zW(AZn,"ImmutableMap/Builder",1053),sDn(2098,2079,u1n),uZn.Md=function(){return this.b||(this.b=new Pv(this))},uZn.Nd=function(){return new TV(this,oTn(this,Inn(dat,EZn,1,this.gc(),5,1)))},zW(AZn,"ImmutableSet/CachingAsList",2098),sDn(2099,2098,u1n),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Nd=function(){return new Pv(this)},uZn.Jc=function(n){var t,e;for(WW(n),e=this.gc(),t=0;t<e;t++)n.Cd(uG(Mz(this.a).Md().Xb(t),44).ld())},uZn.Od=function(){return oR(this.b||(this.b=new Pv(this)),0)},uZn.Nc=function(){return Dq(this.gc(),1296,new ub(this))},zW(AZn,"IndexedImmutableSet",2099),sDn(1230,2099,u1n,Ev),uZn.Kc=function(){return new ab(Mz(this.a).Od())},uZn.Hc=function(n){return this.a._b(n)},uZn.Jc=function(n){WW(n),Yun(this.a,new ob(n))},uZn.Od=function(){return new ab(Mz(this.a).Od())},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new u)},zW(AZn,"ImmutableMapKeySet",1230),sDn(1231,1,{},ob),uZn.Yd=function(n,t){sB(),this.a.Cd(n)},zW(AZn,"ImmutableMapKeySet/lambda$0$Type",1231),sDn(1227,2078,i1n,Sv),uZn.Kc=function(){return new VG(this)},uZn.Md=function(){return new s$(this,Mz(this.a).Md())},uZn.Hc=function(n){return null!=n&&hSn(new VG(this),n)},uZn.Od=function(){return new VG(this)},uZn.gc=function(){return this.a.gc()},uZn.Nc=function(){return JU(Mz(this.a).Nc(),new s)},zW(AZn,"ImmutableMapValues",1227),sDn(1228,1,{},s),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"ImmutableMapValues/0methodref$getValue$Type",1228),sDn(637,204,OZn,VG),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},zW(AZn,"ImmutableMapValues/1",637),sDn(1229,2097,r1n,s$),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return uG(this.b.Xb(n),44).md()},zW(AZn,"ImmutableMapValues/2",1229),sDn(1232,1,{},ub),uZn.td=function(n){return rQ(this.a,n)},zW(AZn,"IndexedImmutableSet/0methodref$get$Type",1232),sDn(638,2097,r1n,Pv),uZn.Zd=function(){return this.a},uZn.Xb=function(n){return rQ(this.a,n)},uZn.gc=function(){return this.a.a.gc()},zW(AZn,"IndexedImmutableSet/1",638),sDn(43,1,{},h),uZn.Kb=function(n){return uG(n,20).Kc()},uZn.Fb=function(n){return this===n},zW(AZn,"Iterables/10",43),sDn(1055,547,t1n,WG),uZn.Jc=function(n){WW(n),this.b.Jc(new $E(this.a,n))},uZn.Kc=function(){return gN(this)},zW(AZn,"Iterables/4",1055),sDn(1056,1,QZn,$E),uZn.Cd=function(n){mC(this.b,this.a,n)},zW(AZn,"Iterables/4/lambda$0$Type",1056),sDn(1057,547,t1n,QG),uZn.Jc=function(n){WW(n),z8(this.a,new xE(n,this.b))},uZn.Kc=function(){return ix(new DD(this.a),this.b)},zW(AZn,"Iterables/5",1057),sDn(1058,1,QZn,xE),uZn.Cd=function(n){this.a.Cd(oN(n))},zW(AZn,"Iterables/5/lambda$0$Type",1058),sDn(1087,204,OZn,sb),uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return this.a.Pb()},zW(AZn,"Iterators/1",1087),sDn(1088,713,OZn,DE),uZn.Yb=function(){for(var n;this.b.Ob();)if(n=this.b.Pb(),this.a.Lb(n))return n;return this.e=2,null},zW(AZn,"Iterators/5",1088),sDn(497,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.$d(this.b.Pb())},uZn.Qb=function(){this.b.Qb()},zW(AZn,"TransformedIterator",497),sDn(1089,497,$Zn,tx),uZn.$d=function(n){return this.a.Kb(n)},zW(AZn,"Iterators/6",1089),sDn(732,204,OZn,hb),uZn.Ob=function(){return!this.a},uZn.Pb=function(){if(this.a)throw hv(new Bv);return this.a=!0,this.b},uZn.a=!1,zW(AZn,"Iterators/9",732),sDn(1086,399,LZn,NX),uZn.Xb=function(n){return this.a[this.b+n]},uZn.b=0,zW(AZn,"Iterators/ArrayItr",1086),sDn(38,1,{38:1,51:1},Fz),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return hDn(this)},uZn.Pb=function(){return N9(this)},uZn.Qb=function(){if(!this.c)throw hv(new kM(PZn));this.c.Qb(),this.c=null},zW(AZn,"Iterators/ConcatenatedIterator",38),sDn(22,1,{3:1,34:1,22:1}),uZn.Fd=function(n){return cM(this,uG(n,22))},uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return MR(this)},uZn.g=0;var Iat,Oat=zW(kZn,"Enum",22);sDn(549,22,{549:1,3:1,34:1,22:1,51:1},X$),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Qb=function(){IB(!1)};var Aat,Lat=_cn(AZn,"Iterators/EmptyModifiableIterator",549,Oat,sW,cR);sDn(1907,627,NZn),zW(AZn,"LinkedHashMultimapGwtSerializationDependencies",1907),sDn(1908,1907,NZn,zbn),uZn.hc=function(){return new dx(orn(this.b))},uZn.$b=function(){ban(this),Tv(this.a,this.a)},uZn.pd=function(){return new dx(orn(this.b))},uZn.ic=function(n){return new Uln(this,n,this.b)},uZn.kc=function(){return new YW(this)},uZn.lc=function(){return new h3(uG(this.g||(this.g=new Ty(this)),21),17)},uZn.ec=function(){return this.i||(this.i=new RD(this,this.c))},uZn.nc=function(){return new $y(new YW(this))},uZn.oc=function(){return JU(new h3(uG(this.g||(this.g=new Ty(this)),21),17),new f)},uZn.b=2,zW(AZn,"LinkedHashMultimap",1908),sDn(1911,1,{},f),uZn.Kb=function(n){return uG(n,44).md()},zW(AZn,"LinkedHashMultimap/0methodref$getValue$Type",1911),sDn(834,1,$Zn,YW),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Asn(this)},uZn.Ob=function(){return this.a!=this.b.a},uZn.Qb=function(){IB(!!this.c),S4(this.b,this.c.g,this.c.i),this.c=null},zW(AZn,"LinkedHashMultimap/1",834),sDn(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},lJ),uZn._d=function(){return uG(nJ(this.f),604)},uZn.ae=function(n){this.c=n},uZn.be=function(n){this.f=n},uZn.d=0;var Nat,$at=zW(AZn,"LinkedHashMultimap/ValueEntry",227);sDn(1909,2068,{604:1,20:1,31:1,16:1,21:1},Uln),uZn.Fc=function(n){var t,e,i,r,c;for(t=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))))&this.b.length-1,e=r=this.b[t];e;e=e.a)if(e.d==c&&xQ(e.i,n))return!1;return i=new lJ(this.c,n,c,r),RM(this.d,i),i.f=this,this.d=i,Tv(uG(nJ(this.g.a.b),227),i),Tv(i,this.g.a),this.b[t]=i,++this.f,++this.e,aSn(this),!0},uZn.$b=function(){var n,t;for(FP(this.b,null),this.f=0,n=this.a;n!=this;n=n._d())t=uG(n,227),Tv(uG(nJ(t.b),227),uG(nJ(t.e),227));this.a=this,this.d=this,++this.e},uZn.Hc=function(n){var t,e;for(e=pz(Ngn(h1n,PJ(pz(Ngn(null==n?0:Hon(n),f1n)),15))),t=this.b[e&this.b.length-1];t;t=t.a)if(t.d==e&&xQ(t.i,n))return!0;return!1},uZn.Jc=function(n){var t;for(WW(n),t=this.a;t!=this;t=t._d())n.Cd(uG(t,227).i)},uZn._d=function(){return this.a},uZn.Kc=function(){return new IQ(this)},uZn.Mc=function(n){return hFn(this,n)},uZn.ae=function(n){this.d=n},uZn.be=function(n){this.a=n},uZn.gc=function(){return this.f},uZn.e=0,uZn.f=0,zW(AZn,"LinkedHashMultimap/ValueSet",1909),sDn(1910,1,$Zn,IQ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return _q(this),this.b!=this.c},uZn.Pb=function(){var n,t;if(_q(this),this.b==this.c)throw hv(new Bv);return t=(n=uG(this.b,227)).i,this.d=n,this.b=uG(nJ(n.f),604),t},uZn.Qb=function(){_q(this),IB(!!this.d),hFn(this.c,this.d.i),this.a=this.c.e,this.d=null},uZn.a=0,zW(AZn,"LinkedHashMultimap/ValueSet/1",1910),sDn(780,2084,NZn,hL),uZn.Zb=function(){return this.f||(this.f=new UP(this))},uZn.Fb=function(n){return Aln(this,n)},uZn.cc=function(n){return new RE(this,n)},uZn.fc=function(n){return $nn(this,n)},uZn.$b=function(){nW(this)},uZn._b=function(n){return YE(this,n)},uZn.ac=function(){return new UP(this)},uZn.bc=function(){return new lb(this)},uZn.qc=function(n){return new RE(this,n)},uZn.dc=function(){return!this.a},uZn.rc=function(n){return $nn(this,n)},uZn.gc=function(){return this.d},uZn.c=0,uZn.d=0,zW(AZn,"LinkedListMultimap",780),sDn(56,31,m1n),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new TM("Add not supported on this list"))},uZn.Fc=function(n){return this.bd(this.gc(),n),!0},uZn.cd=function(n,t){var e,i,r;for(tJ(t),e=!1,r=t.Kc();r.Ob();)i=r.Pb(),this.bd(n++,i),e=!0;return e},uZn.$b=function(){this.ce(0,this.gc())},uZn.Fb=function(n){return PDn(this,n)},uZn.Hb=function(){return Zfn(this)},uZn.dd=function(n){return gan(this,n)},uZn.Kc=function(){return new Jw(this)},uZn.ed=function(){return this.fd(0)},uZn.fd=function(n){return new N4(this,n)},uZn.gd=function(n){throw hv(new TM("Remove not supported on this list"))},uZn.ce=function(n,t){var e,i;for(i=this.fd(n),e=n;e<t;++e)i.Pb(),i.Qb()},uZn.hd=function(n,t){throw hv(new TM("Set not supported on this list"))},uZn.kd=function(n,t){return new C2(this,n,t)},uZn.j=0,zW(DZn,"AbstractList",56),sDn(2062,56,m1n),uZn.bd=function(n,t){sR(this,n,t)},uZn.cd=function(n,t){return Xln(this,n,t)},uZn.Xb=function(n){return hyn(this,n)},uZn.Kc=function(){return this.fd(0)},uZn.gd=function(n){return Kjn(this,n)},uZn.hd=function(n,t){var e,i;e=this.fd(n);try{return i=e.Pb(),e.Wb(t),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't set element "+n)):hv(r)}},zW(DZn,"AbstractSequentialList",2062),sDn(646,2062,m1n,RE),uZn.fd=function(n){return rx(this,n)},uZn.gc=function(){var n;return(n=uG(cQ(this.a.b,this.b),260))?n.a:0},zW(AZn,"LinkedListMultimap/1",646),sDn(1316,2068,FZn,lb),uZn.Hc=function(n){return YE(this.a,n)},uZn.Kc=function(){return new $on(this.a)},uZn.Mc=function(n){return!$nn(this.a,n).a.dc()},uZn.gc=function(){return oS(this.a.b)},zW(AZn,"LinkedListMultimap/1KeySetImpl",1316),sDn(1315,1,$Zn,$on),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Bq(this),!!this.c},uZn.Pb=function(){if(Bq(this),!this.c)throw hv(new Bv);this.a=this.c,FV(this.d,this.a.a);do{this.c=this.c.b}while(this.c&&!FV(this.d,this.c.a));return this.a.a},uZn.Qb=function(){Bq(this),IB(!!this.a),Hq(new Een(this.e,this.a.a)),this.a=null,this.b=this.e.c},uZn.b=0,zW(AZn,"LinkedListMultimap/DistinctKeyIterator",1315),sDn(260,1,{260:1},TZ),uZn.a=0,zW(AZn,"LinkedListMultimap/KeyList",260),sDn(511,358,{358:1,511:1,44:1},KE),uZn.ld=function(){return this.a},uZn.md=function(){return this.f},uZn.nd=function(n){var t;return t=this.f,this.f=n,t},zW(AZn,"LinkedListMultimap/Node",511),sDn(566,1,UZn,Een,EAn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.e=QHn(this.f,this.b,n,this.c),++this.d,this.a=null},uZn.Ob=function(){return!!this.c},uZn.Sb=function(){return!!this.e},uZn.Pb=function(){return Ein(this)},uZn.Tb=function(){return this.d},uZn.Ub=function(){return jin(this)},uZn.Vb=function(){return this.d-1},uZn.Qb=function(){IB(!!this.a),this.a!=this.c?(this.e=this.a.e,--this.d):this.c=this.a.c,MRn(this.f,this.a),this.a=null},uZn.Wb=function(n){_D(!!this.a),this.a.f=n},uZn.d=0,zW(AZn,"LinkedListMultimap/ValueForKeyIterator",566),sDn(1031,56,m1n),uZn.bd=function(n,t){this.a.bd(n,t)},uZn.cd=function(n,t){return this.a.cd(n,t)},uZn.Hc=function(n){return this.a.Hc(n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.gd=function(n){return this.a.gd(n)},uZn.hd=function(n,t){return this.a.hd(n,t)},uZn.gc=function(){return this.a.gc()},zW(AZn,"Lists/AbstractListWrapper",1031),sDn(1032,1031,k1n),zW(AZn,"Lists/RandomAccessListWrapper",1032),sDn(1034,1032,k1n,qE),uZn.fd=function(n){return this.a.fd(n)},zW(AZn,"Lists/1",1034),sDn(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},XE),uZn.bd=function(n,t){this.a.bd(KV(this,n),t)},uZn.$b=function(){this.a.$b()},uZn.Xb=function(n){return this.a.Xb(XW(this,n))},uZn.Kc=function(){return I3(this,0)},uZn.fd=function(n){return I3(this,n)},uZn.gd=function(n){return this.a.gd(XW(this,n))},uZn.ce=function(n,t){(G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))).$b()},uZn.hd=function(n,t){return this.a.hd(XW(this,n),t)},uZn.gc=function(){return this.a.gc()},uZn.kd=function(n,t){return G4(n,t,this.a.gc()),Spn(this.a.kd(KV(this,t),KV(this,n)))},zW(AZn,"Lists/ReverseList",441),sDn(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Ly),zW(AZn,"Lists/RandomAccessReverseList",1030),sDn(1033,1,UZn,BE),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){this.c.Rb(n),this.c.Ub(),this.a=!1},uZn.Ob=function(){return this.c.Sb()},uZn.Sb=function(){return this.c.Ob()},uZn.Pb=function(){if(!this.c.Sb())throw hv(new Bv);return this.a=!0,this.c.Ub()},uZn.Tb=function(){return KV(this.b,this.c.Tb())},uZn.Ub=function(){if(!this.c.Ob())throw hv(new Bv);return this.a=!0,this.c.Pb()},uZn.Vb=function(){return KV(this.b,this.c.Tb())-1},uZn.Qb=function(){IB(this.a),this.c.Qb(),this.a=!1},uZn.Wb=function(n){_D(this.a),this.c.Wb(n)},uZn.a=!1,zW(AZn,"Lists/ReverseList/1",1033),sDn(440,497,$Zn,Ny),uZn.$d=function(n){return OP(n)},zW(AZn,"Maps/1",440),sDn(712,497,$Zn,$y),uZn.$d=function(n){return uG(n,44).md()},zW(AZn,"Maps/2",712),sDn(975,497,$Zn,ex),uZn.$d=function(n){return new FE(n,PL(this.a,n))},zW(AZn,"Maps/3",975),sDn(972,2069,FZn,wb),uZn.Jc=function(n){nk(this.a,n)},uZn.Kc=function(){return this.a.kc()},uZn.Rc=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"Maps/IteratorBasedAbstractMap/1",972),sDn(973,1,{},db),uZn.Yd=function(n,t){this.a.Cd(n)},zW(AZn,"Maps/KeySet/lambda$0$Type",973),sDn(971,31,RZn,zE),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Jc=function(n){WW(n),this.a.wc(new bb(n))},uZn.dc=function(){return this.a.dc()},uZn.Kc=function(){return new $y(this.a.vc().Kc())},uZn.Mc=function(n){var t,e;try{return Wpn(this,n,!0)}catch(i){if(F$(i=Ehn(i),48)){for(e=this.a.vc().Kc();e.Ob();)if(xQ(n,(t=uG(e.Pb(),44)).md()))return this.a.Bc(t.ld()),!0;return!1}throw hv(i)}},uZn.gc=function(){return this.a.gc()},zW(AZn,"Maps/Values",971),sDn(974,1,{},bb),uZn.Yd=function(n,t){this.a.Cd(t)},zW(AZn,"Maps/Values/lambda$0$Type",974),sDn(752,2085,xZn,UP),uZn.xc=function(n){return this.a._b(n)?this.a.cc(n):null},uZn.Bc=function(n){return this.a._b(n)?this.a.fc(n):null},uZn.$b=function(){this.a.$b()},uZn._b=function(n){return this.a._b(n)},uZn.Ec=function(){return new gb(this)},uZn.Dc=function(){return this.Ec()},uZn.dc=function(){return this.a.dc()},uZn.ec=function(){return this.a.ec()},uZn.gc=function(){return this.a.ec().gc()},zW(AZn,"Multimaps/AsMap",752),sDn(1134,2069,FZn,gb),uZn.Kc=function(){return W$(this.a.a.ec(),new pb(this))},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Amn(this,n)&&(t=uG(nJ(uG(n,44)),44),rM(this.a,t.ld()),!0)},zW(AZn,"Multimaps/AsMap/EntrySet",1134),sDn(1138,1,{},pb),uZn.Kb=function(n){return PL(this,n)},uZn.Fb=function(n){return this===n},zW(AZn,"Multimaps/AsMap/EntrySet/1",1138),sDn(552,2087,{552:1,849:1,20:1,31:1,16:1},mb),uZn.$b=function(){ban(this.a)},uZn.Hc=function(n){return jj(this.a,n)},uZn.Jc=function(n){WW(n),z8(RW(this.a),new kb(n))},uZn.Kc=function(){return new Ny(RW(this.a).a.kc())},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return JU(RW(this.a).Nc(),new l)},zW(AZn,"Multimaps/Keys",552),sDn(1136,1,{},l),uZn.Kb=function(n){return uG(n,44).ld()},zW(AZn,"Multimaps/Keys/0methodref$getKey$Type",1136),sDn(1135,497,$Zn,Dy),uZn.$d=function(n){return new vb(uG(n,44))},zW(AZn,"Multimaps/Keys/1",1135),sDn(2088,1,{425:1}),uZn.Fb=function(n){var t;return!!F$(n,504)&&(t=uG(n,425),uG(this.a.md(),16).gc()==uG(t.a.md(),16).gc()&&xQ(this.a.ld(),t.a.ld()))},uZn.Hb=function(){var n;return(null==(n=this.a.ld())?0:Hon(n))^uG(this.a.md(),16).gc()},uZn.Ib=function(){var n,t;return t=ox(this.a.ld()),1==(n=uG(this.a.md(),16).gc())?t:t+" x "+n},zW(AZn,"Multisets/AbstractEntry",2088),sDn(504,2088,{504:1,425:1},vb),zW(AZn,"Multimaps/Keys/1/1",504),sDn(1137,1,QZn,kb),uZn.Cd=function(n){this.a.Cd(uG(n,44).ld())},zW(AZn,"Multimaps/Keys/lambda$1$Type",1137),sDn(1140,1,QZn,b),uZn.Cd=function(n){qq(uG(n,425))},zW(AZn,"Multiset/lambda$0$Type",1140),sDn(753,1,QZn,yb),uZn.Cd=function(n){Srn(this.a,uG(n,425))},zW(AZn,"Multiset/lambda$1$Type",753),sDn(1141,1,{},w),zW(AZn,"Multisets/0methodref$add$Type",1141),sDn(754,1,{},d),uZn.Kb=function(n){return N6(uG(n,425))},zW(AZn,"Multisets/lambda$1$Type",754),sDn(2106,1,yZn),zW(AZn,"RangeGwtSerializationDependencies",2106),sDn(521,2106,{178:1,521:1,3:1,46:1},Gyn),uZn.Lb=function(n){return Iz(this,uG(n,34))},uZn.Mb=function(n){return Iz(this,uG(n,34))},uZn.Fb=function(n){var t;return!!F$(n,521)&&(t=uG(n,521),pTn(this.a,t.a)&&pTn(this.b,t.b))},uZn.Hb=function(){return 31*this.a.Hb()+this.b.Hb()},uZn.Ib=function(){return N5(this.a,this.b)},zW(AZn,"Range",521),sDn(654,2097,r1n,TV),uZn.fd=function(n){return oR(this.b,n)},uZn.Zd=function(){return this.a},uZn.Xb=function(n){return GA(this.b,n)},uZn.Pd=function(n){return oR(this.b,n)},zW(AZn,"RegularImmutableAsList",654),sDn(656,2105,r1n,t1),uZn.Rd=function(){return this.a},zW(AZn,"RegularImmutableList",656),sDn(548,730,a1n,xy,Ry),zW(AZn,"RegularImmutableMap",548),sDn(731,719,u1n,RP),zW(AZn,"RegularImmutableSet",731),sDn(2074,KZn,FZn),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"Sets/SetView",2074),sDn(976,2074,FZn,GE),uZn.Kc=function(){return new zJ(this.a,this.b)},uZn.Hc=function(n){return RX(this.a,n)&&this.b.Hc(n)},uZn.Ic=function(n){return yhn(this.a,n)&&this.b.Ic(n)},uZn.dc=function(){return Tyn(this.b,this.a)},uZn.Lc=function(){return JJ(new fX(null,new h3(this.a,1)),new Tb(this.b))},uZn.gc=function(){return qsn(this)},uZn.Oc=function(){return JJ(new fX(null,new h3(this.a,1)),new Mb(this.b))},zW(AZn,"Sets/2",976),sDn(977,1,y1n,Mb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/0methodref$contains$Type",977),sDn(714,713,OZn,zJ),uZn.Yb=function(){for(var n;b$(this.a);)if(n=X5(this.a),this.c.Hc(n))return n;return this.e=2,null},zW(AZn,"Sets/2/1",714),sDn(978,1,y1n,Tb),uZn.Mb=function(n){return this.a.Hc(n)},zW(AZn,"Sets/2/1methodref$contains$Type",978),sDn(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},e0),uZn.Kd=function(){return this.b},uZn.Ld=function(){return this.b},uZn.Wd=function(){return this.b},uZn.Jc=function(n){this.a.Jc(n)},uZn.Lc=function(){return this.a.Lc()},uZn.Oc=function(){return this.a.Oc()},zW(AZn,"Sets/UnmodifiableNavigableSet",616),sDn(2031,2030,a1n,bJ),uZn.Vd=function(){return sB(),new KM(this.a)},uZn.Cc=function(){return sB(),new KM(this.a)},uZn.xd=function(){return sB(),new KM(this.a)},zW(AZn,"SingletonImmutableBiMap",2031),sDn(657,2105,r1n,Uq),uZn.Rd=function(){return this.a},zW(AZn,"SingletonImmutableList",657),sDn(363,2079,u1n,KM),uZn.Kc=function(){return new hb(this.a)},uZn.Hc=function(n){return udn(this.a,n)},uZn.Od=function(){return new hb(this.a)},uZn.gc=function(){return 1},zW(AZn,"SingletonImmutableSet",363),sDn(1148,1,{},g),uZn.Kb=function(n){return uG(n,159)},zW(AZn,"Streams/lambda$0$Type",1148),sDn(1149,1,M1n,jb),uZn.de=function(){B9(this.a)},zW(AZn,"Streams/lambda$1$Type",1149),sDn(1725,1724,NZn,MZ),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.ac=function(){return F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)},uZn.ic=function(n){return null==n&&this.a.Ne(n,n),new Hj(this.b)},zW(AZn,"TreeMultimap",1725),sDn(82,1,{3:1,82:1}),uZn.ee=function(n){return new Error(n)},uZn.fe=function(){return this.e},uZn.ge=function(){var n,t,e;for(null==this.k&&(this.k=Inn(xat,zZn,82,0,0,1)),e=this.k,t=Inn(dat,EZn,1,e.length,5,1),n=0;n<e.length;n++)t[n]=e[n].e;return t},uZn.he=function(){return this.f},uZn.ie=function(){return this.g},uZn.je=function(){Yy(this,X4(this.ee(i1(this,this.g)))),Cv(this)},uZn.Ib=function(){return i1(this,this.ie())},uZn.e=E1n,uZn.i=!1,uZn.n=!0;var Dat,xat=zW(kZn,"Throwable",82);sDn(103,82,{3:1,103:1,82:1}),zW(kZn,"Exception",103),sDn(63,103,S1n,Ov,Ky),zW(kZn,"RuntimeException",63),sDn(607,63,S1n),zW(kZn,"JsException",607),sDn(875,607,S1n),zW(P1n,"JavaScriptExceptionBase",875),sDn(486,875,{486:1,3:1,103:1,63:1,82:1},qbn),uZn.ie=function(){return tPn(this),this.c},uZn.ke=function(){return xA(this.b)===xA(Dat)?null:this.b},zW(I1n,"JavaScriptException",486);var Rat,Kat=zW(I1n,"JavaScriptObject$",0);sDn(2047,1,{}),zW(I1n,"Scheduler",2047);var Fat,_at,Bat,Hat,Uat=0,Gat=0,qat=-1;sDn(902,2047,{},p),zW(P1n,"SchedulerImpl",902),sDn(2058,1,{}),zW(P1n,"StackTraceCreator/Collector",2058),sDn(876,2058,{},m),uZn.le=function(n){var t={},e=[];n[A1n]=e;for(var i=arguments.callee.caller;i;){var r=(EZ(),i.name||(i.name=Qcn(i.toString())));e.push(r);var c,a,o=":"+r,u=t[o];if(u)for(c=0,a=u.length;c<a;c++)if(u[c]===i)return;(u||(t[o]=[])).push(i),i=i.caller}},uZn.me=function(n){var t,e,i,r;for(EZ(),e=(i=n&&n[A1n]?n[A1n]:[]).length,r=Inn(jot,zZn,319,e,0,1),t=0;t<e;t++)r[t]=new kY(i[t],null,-1);return r},zW(P1n,"StackTraceCreator/CollectorLegacy",876),sDn(2059,2058,{}),uZn.le=function(n){},uZn.ne=function(n,t,e,i){return new kY(t,n+"@"+i,e<0?-1:e)},uZn.me=function(n){var t,e,i,r,c,a;if(r=WTn(n),c=Inn(jot,zZn,319,0,0,1),t=0,0==(i=r.length))return c;for(m_((a=rQn(this,r[0])).d,O1n)||(c[t++]=a),e=1;e<i;e++)c[t++]=rQn(this,r[e]);return c},zW(P1n,"StackTraceCreator/CollectorModern",2059),sDn(877,2059,{},v),uZn.ne=function(n,t,e,i){return new kY(t,n,-1)},zW(P1n,"StackTraceCreator/CollectorModernNoSourceMap",877),sDn(1064,1,{}),zW(c0n,a0n,1064),sDn(624,1064,{624:1},JW),zW(o0n,a0n,624),sDn(2101,1,{}),zW(c0n,u0n,2101),sDn(2102,2101,{}),zW(o0n,u0n,2102),sDn(1120,1,{},k),zW(o0n,"LocaleInfo",1120),sDn(2027,1,{},y),uZn.a=0,zW(o0n,"TimeZone",2027),sDn(1293,2102,{},M),zW("com.google.gwt.i18n.client.impl.cldr","DateTimeFormatInfoImpl",1293),sDn(443,1,{443:1},hG),uZn.a=!1,uZn.b=0,zW(c0n,"DateTimeFormat/PatternPart",443),sDn(206,1,s0n,QE,Lfn,DK),uZn.Fd=function(n){return k4(this,uG(n,206))},uZn.Fb=function(n){return F$(n,206)&&_A(Bsn(this.q.getTime()),Bsn(uG(n,206).q.getTime()))},uZn.Hb=function(){var n;return pz(P3(n=Bsn(this.q.getTime()),Dz(n,32)))},uZn.Ib=function(){var n,t,i;return n=((i=-this.q.getTimezoneOffset())>=0?"+":"")+(i/60|0),t=FL(e.Math.abs(i)%60),(cIn(),nut)[this.q.getDay()]+" "+tut[this.q.getMonth()]+" "+FL(this.q.getDate())+" "+FL(this.q.getHours())+":"+FL(this.q.getMinutes())+":"+FL(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var Xat,zat,Vat,Wat,Qat,Jat,Yat,Zat,not,tot,eot,iot=zW(DZn,"Date",206);sDn(2015,206,s0n,DEn),uZn.a=!1,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=!1,uZn.i=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,uZn.p=0,zW("com.google.gwt.i18n.shared.impl","DateRecord",2015),sDn(2064,1,{}),uZn.pe=function(){return null},uZn.qe=function(){return null},uZn.re=function(){return null},uZn.se=function(){return null},uZn.te=function(){return null},zW(h0n,"JSONValue",2064),sDn(221,2064,{221:1},Ib,Eb),uZn.Fb=function(n){return!!F$(n,221)&&j3(this.a,uG(n,221).a)},uZn.oe=function(){return uv},uZn.Hb=function(){return OZ(this.a)},uZn.pe=function(){return this},uZn.Ib=function(){var n,t,e;for(e=new lx("["),t=0,n=this.a.length;t<n;t++)t>0&&(e.a+=","),QA(e,uin(this,t));return e.a+="]",e.a},zW(h0n,"JSONArray",221),sDn(493,2064,{493:1},Sb),uZn.oe=function(){return sv},uZn.qe=function(){return this},uZn.Ib=function(){return qx(),""+this.a},uZn.a=!1,zW(h0n,"JSONBoolean",493),sDn(997,63,S1n,Fy),zW(h0n,"JSONException",997),sDn(1036,2064,{},T),uZn.oe=function(){return fv},uZn.Ib=function(){return IZn},zW(h0n,"JSONNull",1036),sDn(263,2064,{263:1},Pb),uZn.Fb=function(n){return!!F$(n,263)&&this.a==uG(n,263).a},uZn.oe=function(){return av},uZn.Hb=function(){return OL(this.a)},uZn.re=function(){return this},uZn.Ib=function(){return this.a+""},uZn.a=0,zW(h0n,"JSONNumber",263),sDn(190,2064,{190:1},_y,Cb),uZn.Fb=function(n){return!!F$(n,190)&&j3(this.a,uG(n,190).a)},uZn.oe=function(){return ov},uZn.Hb=function(){return OZ(this.a)},uZn.se=function(){return this},uZn.Ib=function(){var n,t,e,i,r,c;for(c=new lx("{"),n=!0,i=0,r=(e=Yon(this,Inn($ot,zZn,2,0,6,1))).length;i<r;++i)t=e[i],n?n=!1:c.a+=TZn,JA(c,l$n(t)),c.a+=":",QA(c,v0(this,t));return c.a+="}",c.a},zW(h0n,"JSONObject",190),sDn(605,KZn,FZn,JE),uZn.Hc=function(n){return RA(n)&&hT(this.a,mK(n))},uZn.Kc=function(){return new Jw(new IM(this.b))},uZn.gc=function(){return this.b.length},zW(h0n,"JSONObject/1",605),sDn(211,2064,{211:1},QW),uZn.Fb=function(n){return!!F$(n,211)&&m_(this.a,uG(n,211).a)},uZn.oe=function(){return cv},uZn.Hb=function(){return pln(this.a)},uZn.te=function(){return this},uZn.Ib=function(){return l$n(this.a)},zW(h0n,"JSONString",211),sDn(2060,1,{533:1}),zW(m0n,"OutputStream",2060),sDn(2061,2060,{533:1}),zW(m0n,"FilterOutputStream",2061),sDn(878,2061,{533:1},S),zW(m0n,"PrintStream",878),sDn(427,1,{484:1}),uZn.Ib=function(){return this.a},zW(kZn,"AbstractStringBuilder",427),sDn(538,63,S1n,wM),zW(kZn,"ArithmeticException",538),sDn(77,63,v0n,Lv,dM),zW(kZn,"IndexOutOfBoundsException",77),sDn(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},Ik,YM),zW(kZn,"ArrayIndexOutOfBoundsException",333),sDn(537,63,S1n,Nv,gM),zW(kZn,"ArrayStoreException",537),sDn(296,82,k0n,pM),zW(kZn,"Error",296),sDn(200,296,k0n,Av,x9),zW(kZn,"AssertionError",200),fZn={3:1,485:1,34:1};var rot,cot=zW(kZn,"Boolean",485);sDn(242,1,{3:1,242:1}),zW(kZn,"Number",242),sDn(222,242,{3:1,222:1,34:1,242:1},Dw),uZn.Fd=function(n){return oT(this,uG(n,222))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,222)&&uG(n,222).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var aot,oot,uot=zW(kZn,"Byte",222);sDn(180,1,{3:1,180:1,34:1},xw),uZn.Fd=function(n){return uT(this,uG(n,180))},uZn.Fb=function(n){return F$(n,180)&&uG(n,180).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return String.fromCharCode(this.a)},uZn.a=0;var sot,hot=zW(kZn,"Character",180);sDn(212,63,{3:1,212:1,103:1,63:1,82:1},$v,mM),zW(kZn,"ClassCastException",212),lZn={3:1,34:1,345:1,242:1};var fot=zW(kZn,"Double",345);sDn(161,242,{3:1,34:1,161:1,242:1},Rw,tk),uZn.Fd=function(n){return DL(this,uG(n,161))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,161)&&p_(this.a,uG(n,161).a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return""+this.a},uZn.a=0;var lot=zW(kZn,"Float",161);sDn(33,63,{3:1,103:1,33:1,63:1,82:1},Dv,vM,tbn),zW(kZn,"IllegalArgumentException",33),sDn(73,63,S1n,xv,kM),zW(kZn,"IllegalStateException",73),sDn(17,242,{3:1,34:1,17:1,242:1},Iw),uZn.Fd=function(n){return NL(this,uG(n,17))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,17)&&uG(n,17).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var bot,wot,dot=zW(kZn,"Integer",17);sDn(168,242,{3:1,34:1,168:1,242:1},Ow),uZn.Fd=function(n){return $L(this,uG(n,168))},uZn.ue=function(){return W4(this.a)},uZn.Fb=function(n){return F$(n,168)&&_A(uG(n,168).a,this.a)},uZn.Hb=function(){return TF(this.a)},uZn.Ib=function(){return""+oV(this.a)},uZn.a=0;var got,pot,mot,vot,kot,yot=zW(kZn,"Long",168);sDn(2140,1,{}),sDn(1904,63,S1n,yM),zW(kZn,"NegativeArraySizeException",1904),sDn(169,607,{3:1,103:1,169:1,63:1,82:1},Rv,MM),uZn.ee=function(n){return new TypeError(n)},zW(kZn,"NullPointerException",169),sDn(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},ZM),zW(kZn,"NumberFormatException",130),sDn(191,242,{3:1,34:1,242:1,191:1},Aw),uZn.Fd=function(n){return sT(this,uG(n,191))},uZn.ue=function(){return this.a},uZn.Fb=function(n){return F$(n,191)&&uG(n,191).a==this.a},uZn.Hb=function(){return this.a},uZn.Ib=function(){return""+this.a},uZn.a=0;var Mot,Tot=zW(kZn,"Short",191);sDn(319,1,{3:1,319:1},kY),uZn.Fb=function(n){var t;return!!F$(n,319)&&(t=uG(n,319),this.c==t.c&&this.d==t.d&&this.a==t.a&&this.b==t.b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[xwn(this.c),this.a,this.d,this.b]))},uZn.Ib=function(){return this.a+"."+this.d+"("+(null!=this.b?this.b:"Unknown Source")+(this.c>=0?":"+this.c:"")+")"},uZn.c=0;var jot=zW(kZn,"StackTraceElement",319);bZn={3:1,484:1,34:1,2:1};var Eot,Sot,Pot,Cot,Iot,Oot,Aot,Lot,Not,$ot=zW(kZn,C1n,2);sDn(111,427,{484:1},zM,VM,fx),zW(kZn,"StringBuffer",111),sDn(104,427,{484:1},WM,QM,lx),zW(kZn,"StringBuilder",104),sDn(702,77,v0n,JM),zW(kZn,"StringIndexOutOfBoundsException",702),sDn(2145,1,{}),sDn(48,63,{3:1,103:1,63:1,82:1,48:1},Kv,TM),zW(kZn,"UnsupportedOperationException",48),sDn(247,242,{3:1,34:1,242:1,247:1},Edn,Wj),uZn.Fd=function(n){return $Gn(this,uG(n,247))},uZn.ue=function(){return YIn(wzn(this))},uZn.Fb=function(n){var t;return this===n||!!F$(n,247)&&(t=uG(n,247),this.e==t.e&&0==$Gn(this,t))},uZn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=Bsn(this.f),this.b=pz(E3(n,-1)),this.b=33*this.b+pz(E3($z(n,32),-1)),this.b=17*this.b+t0(this.e),this.b):(this.b=17*cwn(this.c)+t0(this.e),this.b)},uZn.Ib=function(){return wzn(this)},uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0;var Dot,xot,Rot,Kot,Fot,_ot,Bot=zW("java.math","BigDecimal",247);sDn(92,242,{3:1,34:1,242:1,92:1},Z5,x3,VV,nkn,PN),uZn.Fd=function(n){return Pvn(this,uG(n,92))},uZn.ue=function(){return YIn(bYn(this,0))},uZn.Fb=function(n){return Cpn(this,n)},uZn.Hb=function(){return cwn(this)},uZn.Ib=function(){return bYn(this,0)},uZn.b=-2,uZn.c=0,uZn.d=0,uZn.e=0;var Hot,Uot,Got,qot,Xot=zW("java.math","BigInteger",92);sDn(498,2065,xZn),uZn.$b=function(){$V(this)},uZn._b=function(n){return PV(this,n)},uZn.uc=function(n){return Qln(this,n,this.i)||Qln(this,n,this.f)},uZn.vc=function(){return new Nw(this)},uZn.xc=function(n){return cQ(this,n)},uZn.zc=function(n,t){return vJ(this,n,t)},uZn.Bc=function(n){return u7(this,n)},uZn.gc=function(){return oS(this)},uZn.g=0,zW(DZn,"AbstractHashMap",498),sDn(267,KZn,FZn,Nw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return Q4(this,n)},uZn.Kc=function(){return new bsn(this.a)},uZn.Mc=function(n){var t;return!!Q4(this,n)&&(t=uG(n,44).ld(),this.a.Bc(t),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractHashMap/EntrySet",267),sDn(268,1,$Zn,bsn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return von(this)},uZn.Ob=function(){return this.b},uZn.Qb=function(){Oen(this)},uZn.b=!1,uZn.d=0,zW(DZn,"AbstractHashMap/EntrySetIterator",268),sDn(426,1,$Zn,Jw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this)},uZn.Pb=function(){return _Y(this)},uZn.Qb=function(){LQ(this)},uZn.b=0,uZn.c=-1,zW(DZn,"AbstractList/IteratorImpl",426),sDn(98,426,UZn,N4),uZn.Qb=function(){LQ(this)},uZn.Rb=function(n){pF(this,n)},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Ub=function(){return MK(this.b>0),this.a.Xb(this.c=--this.b)},uZn.Vb=function(){return this.b-1},uZn.Wb=function(n){TK(-1!=this.c),this.a.hd(this.c,n)},zW(DZn,"AbstractList/ListIteratorImpl",98),sDn(244,56,m1n,C2),uZn.bd=function(n,t){o3(n,this.b),this.c.bd(this.a+n,t),++this.b},uZn.Xb=function(n){return u3(n,this.b),this.c.Xb(this.a+n)},uZn.gd=function(n){var t;return u3(n,this.b),t=this.c.gd(this.a+n),--this.b,t},uZn.hd=function(n,t){return u3(n,this.b),this.c.hd(this.a+n,t)},uZn.gc=function(){return this.b},uZn.a=0,uZn.b=0,zW(DZn,"AbstractList/SubList",244),sDn(266,KZn,FZn,Lw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return new Kw(this.a.vc().Kc())},uZn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/1",266),sDn(541,1,$Zn,Kw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/1/1",541),sDn(231,31,RZn,Fw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Kc=function(){return new _w(this.a.vc().Kc())},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/2",231),sDn(301,1,$Zn,_w),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/2/1",301),sDn(494,1,{494:1,44:1}),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.d,t.ld())&&OJ(this.e,t.md()))},uZn.ld=function(){return this.d},uZn.md=function(){return this.e},uZn.Hb=function(){return VN(this.d)^VN(this.e)},uZn.nd=function(n){return wF(this,n)},uZn.Ib=function(){return this.d+"="+this.e},zW(DZn,"AbstractMap/AbstractEntry",494),sDn(397,494,{494:1,397:1,44:1},VP),zW(DZn,"AbstractMap/SimpleEntry",397),sDn(2082,1,$0n),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.ld(),t.ld())&&OJ(this.md(),t.md()))},uZn.Hb=function(){return VN(this.ld())^VN(this.md())},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(DZn,qZn,2082),sDn(2090,2065,_Zn),uZn.Xc=function(n){return Sj(this.Ee(n))},uZn.tc=function(n){return I9(this,n)},uZn._b=function(n){return dF(this,n)},uZn.vc=function(){return new Uw(this)},uZn.Tc=function(){return DV(this.Ge())},uZn.Yc=function(n){return Sj(this.He(n))},uZn.xc=function(n){var t;return t=n,DA(this.Fe(t))},uZn.$c=function(n){return Sj(this.Ie(n))},uZn.ec=function(){return new Bw(this)},uZn.Vc=function(){return DV(this.Je())},uZn._c=function(n){return Sj(this.Ke(n))},zW(DZn,"AbstractNavigableMap",2090),sDn(629,KZn,FZn,Uw),uZn.Hc=function(n){return F$(n,44)&&I9(this.b,uG(n,44))},uZn.Kc=function(){return this.b.De()},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),this.b.Le(t))},uZn.gc=function(){return this.b.gc()},zW(DZn,"AbstractNavigableMap/EntrySet",629),sDn(1146,KZn,HZn,Bw),uZn.Nc=function(){return new GP(this)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return dF(this.a,n)},uZn.Kc=function(){return new Hw(this.a.vc().b.De())},uZn.Mc=function(n){return!!dF(this.a,n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractNavigableMap/NavigableKeySet",1146),sDn(1147,1,$Zn,Hw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this.a.a)},uZn.Pb=function(){return kR(this.a).ld()},uZn.Qb=function(){rB(this.a)},zW(DZn,"AbstractNavigableMap/NavigableKeySet/1",1147),sDn(2103,31,RZn),uZn.Fc=function(n){return kG(_Cn(this,n),D0n),!0},uZn.Gc=function(n){return tJ(n),vG(n!=this,"Can't add a queue to itself"),Qon(this,n)},uZn.$b=function(){for(;null!=hin(this););},zW(DZn,"AbstractQueue",2103),sDn(310,31,{4:1,20:1,31:1,16:1},ND,$4),uZn.Fc=function(n){return O6(this,n),!0},uZn.$b=function(){q5(this)},uZn.Hc=function(n){return Chn(new XJ(this),n)},uZn.dc=function(){return LM(this)},uZn.Kc=function(){return new XJ(this)},uZn.Mc=function(n){return m0(new XJ(this),n)},uZn.gc=function(){return this.c-this.b&this.a.length-1},uZn.Nc=function(){return new h3(this,272)},uZn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.length<t&&(n=aT(new Array(t),n)),Pon(this,n,t),n.length>t&&uQ(n,t,null),n},uZn.b=0,uZn.c=0,zW(DZn,"ArrayDeque",310),sDn(459,1,$Zn,XJ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a!=this.b},uZn.Pb=function(){return rwn(this)},uZn.Qb=function(){lan(this)},uZn.a=0,uZn.b=0,uZn.c=-1,zW(DZn,"ArrayDeque/IteratorImpl",459),sDn(13,56,x0n,Zm,R7,Z_),uZn.bd=function(n,t){GX(this,n,t)},uZn.Fc=function(n){return kD(this,n)},uZn.cd=function(n,t){return Cbn(this,n,t)},uZn.Gc=function(n){return Ohn(this,n)},uZn.$b=function(){Xv(this.c,0)},uZn.Hc=function(n){return-1!=Ten(this,n,0)},uZn.Jc=function(n){Prn(this,n)},uZn.Xb=function(n){return zq(this,n)},uZn.dd=function(n){return Ten(this,n,0)},uZn.dc=function(){return 0==this.c.length},uZn.Kc=function(){return new Ww(this)},uZn.gd=function(n){return i7(this,n)},uZn.Mc=function(n){return men(this,n)},uZn.ce=function(n,t){P2(this,n,t)},uZn.hd=function(n,t){return Y8(this,n,t)},uZn.gc=function(){return this.c.length},uZn.jd=function(n){f$(this,n)},uZn.Pc=function(){return tq(this.c)},uZn.Qc=function(n){return Ekn(this,n)};var zot,Vot,Wot,Qot,Jot,Yot,Zot,nut,tut,eut=zW(DZn,"ArrayList",13);sDn(7,1,$Zn,Ww),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return l$(this)},uZn.Pb=function(){return N3(this)},uZn.Qb=function(){tW(this)},uZn.a=0,uZn.b=-1,zW(DZn,"ArrayList/1",7),sDn(2112,e.Function,{},P),uZn.Me=function(n,t){return ugn(n,t)},sDn(151,56,R0n,IM),uZn.Hc=function(n){return-1!=gan(this,n)},uZn.Jc=function(n){var t,e,i,r;for(tJ(n),i=0,r=(e=this.a).length;i<r;++i)t=e[i],n.Cd(t)},uZn.Xb=function(n){return Vq(this,n)},uZn.hd=function(n,t){var e;return u3(n,this.a.length),e=this.a[n],uQ(this.a,n,t),e},uZn.gc=function(){return this.a.length},uZn.jd=function(n){UX(this.a,this.a.length,n)},uZn.Pc=function(){return Skn(this,Inn(dat,EZn,1,this.a.length,5,1))},uZn.Qc=function(n){return Skn(this,n)},zW(DZn,"Arrays/ArrayList",151),sDn(953,56,R0n,C),uZn.Hc=function(n){return!1},uZn.Xb=function(n){return oL(n)},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.ed=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptyList",953),sDn(954,1,UZn,I),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new xv)},uZn.Wb=function(n){throw hv(new xv)},zW(DZn,"Collections/EmptyListIterator",954),sDn(956,2065,a1n,O),uZn._b=function(n){return!1},uZn.uc=function(n){return!1},uZn.vc=function(){return hZ(),Wot},uZn.xc=function(n){return null},uZn.ec=function(){return hZ(),Wot},uZn.gc=function(){return 0},uZn.Cc=function(){return hZ(),zot},zW(DZn,"Collections/EmptyMap",956),sDn(955,KZn,u1n,A),uZn.Hc=function(n){return!1},uZn.Kc=function(){return hZ(),wS(),Qot},uZn.gc=function(){return 0},zW(DZn,"Collections/EmptySet",955),sDn(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},Xw),uZn.Hc=function(n){return OJ(this.a,n)},uZn.Xb=function(n){return u3(n,1),this.a},uZn.gc=function(){return 1},zW(DZn,"Collections/SingletonList",608),sDn(384,1,e1n,qw),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,this.Nc())},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return Rj()},uZn.Gc=function(n){return Kj()},uZn.$b=function(){Fj()},uZn.Hc=function(n){return ZE(this,n)},uZn.Ic=function(n){return nS(this,n)},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Gw(this.b.Kc())},uZn.Mc=function(n){return _j()},uZn.gc=function(){return this.b.gc()},uZn.Pc=function(){return this.b.Pc()},uZn.Qc=function(n){return tS(this,n)},uZn.Ib=function(){return cpn(this.b)},zW(DZn,"Collections/UnmodifiableCollection",384),sDn(383,1,$Zn,Gw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Pb=function(){return this.b.Pb()},uZn.Qb=function(){Bj()},zW(DZn,"Collections/UnmodifiableCollectionIterator",383),sDn(540,384,K0n,gx),uZn.Nc=function(){return new h3(this,16)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Xb=function(n){return this.a.Xb(n)},uZn.Hb=function(){return Hon(this.a)},uZn.dd=function(n){return this.a.dd(n)},uZn.dc=function(){return this.a.dc()},uZn.ed=function(){return new px(this.a.fd(0))},uZn.fd=function(n){return new px(this.a.fd(n))},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.jd=function(n){throw hv(new Kv)},uZn.kd=function(n,t){return new gx(this.a.kd(n,t))},zW(DZn,"Collections/UnmodifiableList",540),sDn(705,383,UZn,px),uZn.Qb=function(){Bj()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Sb=function(){return this.a.Sb()},uZn.Tb=function(){return this.a.Tb()},uZn.Ub=function(){return this.a.Ub()},uZn.Vb=function(){return this.a.Vb()},uZn.Wb=function(n){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableListIterator",705),sDn(609,1,xZn,Vw),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return this.c._b(n)},uZn.uc=function(n){return iS(this,n)},uZn.vc=function(){return EJ(this)},uZn.Fb=function(n){return rS(this,n)},uZn.xc=function(n){return this.c.xc(n)},uZn.Hb=function(){return Hon(this.c)},uZn.dc=function(){return this.c.dc()},uZn.ec=function(){return SJ(this)},uZn.zc=function(n,t){throw hv(new Kv)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.gc()},uZn.Ib=function(){return cpn(this.c)},uZn.Cc=function(){return jJ(this)},zW(DZn,"Collections/UnmodifiableMap",609),sDn(396,384,o1n,nT),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return udn(this.b,n)},uZn.Hb=function(){return Hon(this.b)},zW(DZn,"Collections/UnmodifiableSet",396),sDn(957,396,o1n,tT),uZn.Hc=function(n){return eS(this,n)},uZn.Ic=function(n){return this.b.Ic(n)},uZn.Kc=function(){return new zw(this.b.Kc())},uZn.Pc=function(){var n;return w8(n=this.b.Pc(),n.length),n},uZn.Qc=function(n){return YZ(this,n)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet",957),sDn(958,1,$Zn,zw),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return new Yw(uG(this.a.Pb(),44))},uZn.Ob=function(){return this.a.Ob()},uZn.Qb=function(){throw hv(new Kv)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/1",958),sDn(703,1,$0n,Yw),uZn.Fb=function(n){return this.a.Fb(n)},uZn.ld=function(){return this.a.ld()},uZn.md=function(){return this.a.md()},uZn.Hb=function(){return this.a.Hb()},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return cpn(this.a)},zW(DZn,"Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry",703),sDn(610,540,{20:1,16:1,15:1,59:1},eT),zW(DZn,"Collections/UnmodifiableRandomAccessList",610),sDn(704,396,s1n,mx),uZn.Nc=function(){return new GP(this)},uZn.Fb=function(n){return udn(this.a,n)},uZn.Hb=function(){return Hon(this.a)},zW(DZn,"Collections/UnmodifiableSortedSet",704),sDn(858,1,F0n,L),uZn.Ne=function(n,t){var e;return 0!=(e=Q5(uG(n,12),uG(t,12)))?e:hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(DZn,"Comparator/lambda$0$Type",858),sDn(769,1,F0n,N),uZn.Ne=function(n,t){return Qq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Zot},zW(DZn,"Comparators/NaturalOrderComparator",769),sDn(1226,1,F0n,$),uZn.Ne=function(n,t){return Wq(uG(n,34),uG(t,34))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return sZ(),Yot},zW(DZn,"Comparators/ReverseNaturalOrderComparator",1226),sDn(52,1,F0n,Zw),uZn.Fb=function(n){return this===n},uZn.Ne=function(n,t){return this.a.Ne(t,n)},uZn.Oe=function(){return this.a},zW(DZn,"Comparators/ReversedComparator",52),sDn(175,63,S1n,Fv),zW(DZn,"ConcurrentModificationException",175),sDn(1948,1,_0n,D),uZn.Pe=function(n){Mmn(this,n)},uZn.Ib=function(){return"DoubleSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?c7(this)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+c7(this)+"]"},uZn.a=0,uZn.b=T0n,uZn.c=M0n,uZn.d=0,uZn.e=0,uZn.f=0,zW(DZn,"DoubleSummaryStatistics",1948),sDn(1868,63,S1n,_v),zW(DZn,"EmptyStackException",1868),sDn(461,2065,xZn,rpn),uZn.zc=function(n,t){return yF(this,n,t)},uZn.$b=function(){AQ(this)},uZn._b=function(n){return DP(this,n)},uZn.uc=function(n){var t,e;for(e=new fS(this.a);e.a<e.c.a.length;)if(t=X5(e),OJ(n,this.b[t.g]))return!0;return!1},uZn.vc=function(){return new nd(this)},uZn.xc=function(n){return AJ(this,n)},uZn.Bc=function(n){return q3(this,n)},uZn.gc=function(){return this.a.c},zW(DZn,"EnumMap",461),sDn(1340,KZn,FZn,nd),uZn.$b=function(){AQ(this.a)},uZn.Hc=function(n){return J4(this,n)},uZn.Kc=function(){return new uX(this.a)},uZn.Mc=function(n){var t;return!!J4(this,n)&&(t=uG(n,44).ld(),q3(this.a,t),!0)},uZn.gc=function(){return this.a.a.c},zW(DZn,"EnumMap/EntrySet",1340),sDn(1341,1,$Zn,uX),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.b=X5(this.a),new zP(this.c,this.b)},uZn.Ob=function(){return b$(this.a)},uZn.Qb=function(){TK(!!this.b),q3(this.c,this.b),this.b=null},zW(DZn,"EnumMap/EntrySetIterator",1341),sDn(1342,2082,$0n,zP),uZn.ld=function(){return this.a},uZn.md=function(){return this.b.b[this.a.g]},uZn.nd=function(n){return nq(this.b.b,this.a.g,n)},zW(DZn,"EnumMap/MapEntry",1342),sDn(181,KZn,{20:1,31:1,16:1,181:1,21:1});var iut=zW(DZn,"EnumSet",181);sDn(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},nB),uZn.Fc=function(n){return Mon(this,uG(n,22))},uZn.Hc=function(n){return RX(this,n)},uZn.Kc=function(){return new fS(this)},uZn.Mc=function(n){return KX(this,n)},uZn.gc=function(){return this.c},uZn.c=0,zW(DZn,"EnumSet/EnumSetImpl",162),sDn(356,1,$Zn,fS),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return X5(this)},uZn.Ob=function(){return b$(this)},uZn.Qb=function(){TK(-1!=this.b),uQ(this.c.b,this.b,null),--this.c.c,this.b=-1},uZn.a=-1,uZn.b=-1,zW(DZn,"EnumSet/EnumSetImpl/IteratorImpl",356),sDn(45,498,B0n,Ym,sS,nL),uZn.Be=function(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)},uZn.Ce=function(n){return null==n?0:0|Hon(n)},zW(DZn,"HashMap",45),sDn(49,KZn,H0n,ek,Dj,oX),uZn.Fc=function(n){return FV(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return cS(this,n)},uZn.dc=function(){return 0==this.a.gc()},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return Q$(this,n)},uZn.gc=function(){return this.a.gc()};var rut,cut=zW(DZn,"HashSet",49);sDn(1897,1,JZn,x),uZn.Dd=function(n){msn(this,n)},uZn.Ib=function(){return"IntSummaryStatistics[count = "+oV(this.a)+", avg = "+(NP(this.a,0)?W4(this.d)/W4(this.a):0)+", min = "+this.c+", max = "+this.b+", sum = "+oV(this.d)+"]"},uZn.a=0,uZn.b=j1n,uZn.c=vZn,uZn.d=0,zW(DZn,"IntSummaryStatistics",1897),sDn(1062,1,t1n,nN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Hnn(this)},uZn.c=0,zW(DZn,"InternalHashCodeMap",1062),sDn(726,1,$Zn,Hnn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.d=this.a[this.c++],this.d},uZn.Ob=function(){var n;return this.c<this.a.length||!(n=this.b.next()).done&&(this.a=n.value[1],this.c=0,!0)},uZn.Qb=function(){Y$n(this.e,this.d.ld()),0!=this.c&&--this.c},uZn.c=0,uZn.d=null,zW(DZn,"InternalHashCodeMap/1",726),sDn(1060,1,t1n,tN),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new a8(this)},uZn.c=0,uZn.d=0,zW(DZn,"InternalStringMap",1060),sDn(725,1,$Zn,a8),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return this.c=this.a,this.a=this.b.next(),new tB(this.d,this.c,this.d.d)},uZn.Ob=function(){return!this.a.done},uZn.Qb=function(){Vsn(this.d,this.c.value[0])},zW(DZn,"InternalStringMap/1",725),sDn(1061,2082,$0n,tB),uZn.ld=function(){return this.b.value[0]},uZn.md=function(){return this.a.d!=this.c?_P(this.a,this.b.value[0]):this.b.value[1]},uZn.nd=function(n){return kgn(this.a,this.b.value[0],n)},uZn.c=0,zW(DZn,"InternalStringMap/2",1061),sDn(215,45,B0n,u8,Bnn),uZn.$b=function(){vF(this)},uZn._b=function(n){return BP(this,n)},uZn.uc=function(n){var t;for(t=this.d.a;t!=this.d;){if(OJ(t.e,n))return!0;t=t.a}return!1},uZn.vc=function(){return new ad(this)},uZn.xc=function(n){return ain(this,n)},uZn.zc=function(n,t){return Akn(this,n,t)},uZn.Bc=function(n){return pen(this,n)},uZn.gc=function(){return oS(this.e)},uZn.c=!1,zW(DZn,"LinkedHashMap",215),sDn(400,397,{494:1,397:1,400:1,44:1},bR,bG),zW(DZn,"LinkedHashMap/ChainEntry",400),sDn(715,KZn,FZn,ad),uZn.$b=function(){vF(this.a)},uZn.Hc=function(n){return Y4(this,n)},uZn.Kc=function(){return new fQ(this)},uZn.Mc=function(n){var t;return!!Y4(this,n)&&(t=uG(n,44).ld(),pen(this.a,t),!0)},uZn.gc=function(){return oS(this.a.e)},zW(DZn,"LinkedHashMap/EntrySet",715),sDn(716,1,$Zn,fQ),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Hen(this)},uZn.Ob=function(){return this.c!=this.d.a.d},uZn.Qb=function(){TK(!!this.a),OB(this.d.a.e.g,this.b),cq(this.a),u7(this.d.a.e,this.a.d),this.b=this.d.a.e.g,this.a=null},uZn.b=0,zW(DZn,"LinkedHashMap/EntrySet/EntryIterator",716),sDn(174,49,H0n,XL,dx,aX);var aut=zW(DZn,"LinkedHashSet",174);sDn(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},lS,Y_),uZn.Fc=function(n){return aq(this,n)},uZn.$b=function(){BY(this)},uZn.fd=function(n){return Fkn(this,n)},uZn.gc=function(){return this.b},uZn.b=0;var out,uut,sut,hut,fut,lut=zW(DZn,"LinkedList",67);sDn(981,1,UZn,eB),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){lW(this,n)},uZn.Ob=function(){return Jj(this)},uZn.Sb=function(){return this.b.b!=this.d.a},uZn.Pb=function(){return I6(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){return F4(this)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){yrn(this)},uZn.Wb=function(n){TK(!!this.c),this.c.c=n},uZn.a=0,uZn.c=null,zW(DZn,"LinkedList/ListIteratorImpl",981),sDn(617,1,{},R),zW(DZn,"LinkedList/Node",617),sDn(2057,1,{}),zW(DZn,"Locale",2057),sDn(873,2057,{},K),uZn.Ib=function(){return""},zW(DZn,"Locale/1",873),sDn(874,2057,{},F),uZn.Ib=function(){return"unknown"},zW(DZn,"Locale/4",874),sDn(112,63,{3:1,103:1,63:1,82:1,112:1},Bv,EY),zW(DZn,"NoSuchElementException",112),sDn(475,1,{475:1},Xy),uZn.Fb=function(n){var t;return n===this||!!F$(n,475)&&(t=uG(n,475),OJ(this.a,t.a))},uZn.Hb=function(){return VN(this.a)},uZn.Ib=function(){return null!=this.a?CZn+ox(this.a)+")":"Optional.empty()"},zW(DZn,"Optional",475),sDn(414,1,{414:1},uL,wR),uZn.Fb=function(n){var t;return n===this||!!F$(n,414)&&(t=uG(n,414),this.a==t.a&&0==ugn(this.b,t.b))},uZn.Hb=function(){return this.a?t0(this.b):0},uZn.Ib=function(){return this.a?"OptionalDouble.of("+this.b+")":"OptionalDouble.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalDouble",414),sDn(524,1,{524:1},sL,dR),uZn.Fb=function(n){var t;return n===this||!!F$(n,524)&&(t=uG(n,524),this.a==t.a&&0==d$(this.b,t.b))},uZn.Hb=function(){return this.a?this.b:0},uZn.Ib=function(){return this.a?"OptionalInt.of("+this.b+")":"OptionalInt.empty()"},uZn.a=!1,uZn.b=0,zW(DZn,"OptionalInt",524),sDn(510,2103,RZn,Kz),uZn.Gc=function(n){return _jn(this,n)},uZn.$b=function(){Xv(this.b.c,0)},uZn.Hc=function(n){return-1!=(null==n?-1:Ten(this.b,n,0))},uZn.Kc=function(){return new Qw(this)},uZn.Mc=function(n){return yon(this,n)},uZn.gc=function(){return this.b.c.length},uZn.Nc=function(){return new h3(this,256)},uZn.Pc=function(){return tq(this.b.c)},uZn.Qc=function(n){return Ekn(this.b,n)},zW(DZn,"PriorityQueue",510),sDn(1296,1,$Zn,Qw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a<this.c.b.c.length},uZn.Pb=function(){return MK(this.a<this.c.b.c.length),this.b=this.a++,zq(this.c.b,this.b)},uZn.Qb=function(){TK(-1!=this.b),Con(this.c,this.a=this.b),this.b=-1},uZn.a=0,uZn.b=-1,zW(DZn,"PriorityQueue/1",1296),sDn(234,1,{234:1},Upn,v8),uZn.a=0,uZn.b=0;var but,wut,dut,gut=0;zW(DZn,"Random",234),sDn(25,1,WZn,h3,LW,MY),uZn.Ad=function(n){return!!(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return zz(this),this.c},uZn.Nb=function(n){zz(this),this.d.Nb(n)},uZn.Bd=function(n){return urn(this,n)},uZn.a=0,uZn.c=0,zW(DZn,"Spliterators/IteratorSpliterator",25),sDn(495,25,WZn,GP),zW(DZn,"SortedSet/1",495),sDn(611,1,_0n,id),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/0methodref$accept$Type",611),sDn(612,1,_0n,ed),uZn.Pe=function(n){this.a.Cd(n)},zW(DZn,"Spliterator/OfDouble/1methodref$accept$Type",612),sDn(613,1,JZn,rd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/2methodref$accept$Type",613),sDn(614,1,JZn,cd),uZn.Dd=function(n){this.a.Cd(xwn(n))},zW(DZn,"Spliterator/OfInt/3methodref$accept$Type",614),sDn(625,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return!!(this.d&n)},uZn.yd=function(){return this.d},uZn.zd=function(){return this.e},uZn.d=0,uZn.e=0,zW(DZn,"Spliterators/BaseSpliterator",625),sDn(736,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,189)?tE(this,uG(n,189)):tE(this,new ed(n))},uZn.Bd=function(n){return F$(n,189)?this.Re(uG(n,189)):this.Re(new id(n))},zW(DZn,"Spliterators/AbstractDoubleSpliterator",736),sDn(735,625,WZn),uZn.Qe=function(n){tE(this,n)},uZn.Nb=function(n){F$(n,202)?tE(this,uG(n,202)):tE(this,new cd(n))},uZn.Bd=function(n){return F$(n,202)?this.Re(uG(n,202)):this.Re(new rd(n))},zW(DZn,"Spliterators/AbstractIntSpliterator",735),sDn(500,625,WZn),zW(DZn,"Spliterators/AbstractSpliterator",500),sDn(706,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return!!(this.b&n)},uZn.yd=function(){return this.b},uZn.zd=function(){return this.d-this.c},uZn.b=0,uZn.c=0,uZn.d=0,zW(DZn,"Spliterators/BaseArraySpliterator",706),sDn(960,706,WZn,Sq),uZn.Se=function(n,t){bT(this,uG(n,41),t)},uZn.Nb=function(n){hQ(this,n)},uZn.Bd=function(n){return x7(this,n)},zW(DZn,"Spliterators/ArraySpliterator",960),sDn(707,706,WZn,__),uZn.Se=function(n,t){wT(this,uG(n,189),t)},uZn.Qe=function(n){hQ(this,n)},uZn.Nb=function(n){F$(n,189)?hQ(this,uG(n,189)):hQ(this,new ed(n))},uZn.Re=function(n){return x7(this,n)},uZn.Bd=function(n){return F$(n,189)?x7(this,uG(n,189)):x7(this,new id(n))},zW(DZn,"Spliterators/DoubleArraySpliterator",707),sDn(2066,1,WZn),uZn.Nb=function(n){$j(this,n)},uZn.Ad=function(n){return!!(16448&n)},uZn.yd=function(){return 16448},uZn.zd=function(){return 0},zW(DZn,"Spliterators/EmptySpliterator",2066),sDn(959,2066,WZn,_),uZn.Qe=function(n){Bl(n)},uZn.Nb=function(n){F$(n,202)?Bl(uG(n,202)):Bl(new cd(n))},uZn.Re=function(n){return HP(n)},uZn.Bd=function(n){return F$(n,202)?HP(uG(n,202)):HP(new rd(n))},zW(DZn,"Spliterators/EmptySpliterator/OfInt",959),sDn(588,56,J0n,ck),uZn.bd=function(n,t){Vz(n,this.a.c.length+1),GX(this.a,n,t)},uZn.Fc=function(n){return kD(this.a,n)},uZn.cd=function(n,t){return Vz(n,this.a.c.length+1),Cbn(this.a,n,t)},uZn.Gc=function(n){return Ohn(this.a,n)},uZn.$b=function(){Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Jc=function(n){Prn(this.a,n)},uZn.Xb=function(n){return Vz(n,this.a.c.length),zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return new Ww(this.a)},uZn.gd=function(n){return Vz(n,this.a.c.length),i7(this.a,n)},uZn.ce=function(n,t){P2(this.a,n,t)},uZn.hd=function(n,t){return Vz(n,this.a.c.length),Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.jd=function(n){f$(this.a,n)},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.Ib=function(){return vIn(this.a)},zW(DZn,"Vector",588),sDn(824,588,J0n,Ok),zW(DZn,"Stack",824),sDn(213,1,{213:1},Ysn),uZn.Ib=function(){return R4(this)},zW(DZn,"StringJoiner",213),sDn(553,2090,{3:1,85:1,139:1,133:1},hS,Hz),uZn.$b=function(){Jy(this)},uZn.De=function(){return new i6(this)},uZn.vc=function(){return new kx(this)},uZn.Ee=function(n){return Zmn(this,n,!0)},uZn.Fe=function(n){return mln(this,n)},uZn.Ge=function(){return Ytn(this)},uZn.He=function(n){return nvn(this,n,!0)},uZn.Ie=function(n){return Zmn(this,n,!1)},uZn.Je=function(){return Ztn(this)},uZn.Ke=function(n){return nvn(this,n,!1)},uZn.Zc=function(n,t){return N2(this,n,t)},uZn.zc=function(n,t){return xfn(this,n,t)},uZn.Bc=function(n){return V1(this,n)},uZn.Le=function(n){return Lnn(this,n)},uZn.gc=function(){return this.c},uZn.ad=function(n,t){return $2(this,n,t)},uZn.c=0,zW(DZn,"TreeMap",553),sDn(554,1,$Zn,i6,dun),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return kR(this)},uZn.Ob=function(){return AP(this.a)},uZn.Qb=function(){rB(this)},zW(DZn,"TreeMap/EntryIterator",554),sDn(1142,629,FZn,kx),uZn.$b=function(){Jy(this.a)},zW(DZn,"TreeMap/EntrySet",1142),sDn(447,397,{494:1,397:1,44:1,447:1},_nn),uZn.b=!1;var put,mut,vut,kut,yut=zW(DZn,"TreeMap/Node",447);sDn(630,1,{},B),uZn.Ib=function(){return"State: mv="+this.c+" value="+this.d+" done="+this.a+" found="+this.b},uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(DZn,"TreeMap/State",630),sDn(631,2090,_Zn,AOn),uZn.De=function(){return new dun(this.c,this.f,this.b,this.a,this.e,this.d)},uZn.vc=function(){return new Uw(this)},uZn.Ee=function(n){return SG(this,Zmn(this.c,n,!0))},uZn.Fe=function(n){return SG(this,mln(this.c,n))},uZn.Ge=function(){var n;return(n=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,n.d)?n:null},uZn.He=function(n){return SG(this,nvn(this.c,n,!0))},uZn.Ie=function(n){return SG(this,Zmn(this.c,n,!1))},uZn.Je=function(){var n;return(n=this.f.Ue()?this.d?nvn(this.c,this.e,!0):nvn(this.c,this.e,!1):Ztn(this.c))&&$Q(this,n.d)?n:null},uZn.Ke=function(n){return SG(this,nvn(this.c,n,!1))},uZn.Zc=function(n,t){if(this.f.Ue()&&this.c.a.Ne(n,this.e)>0)throw hv(new vM(Y0n+n+" greater than "+this.e));return this.f.Te()?G1(this.c,this.b,this.a,n,t):N2(this.c,n,t)},uZn.zc=function(n,t){if(!ljn(this.c,this.f,n,this.b,this.a,this.e,this.d))throw hv(new vM(n+" outside the range "+this.b+" to "+this.e));return xfn(this.c,n,t)},uZn.Bc=function(n){var t;return t=n,ljn(this.c,this.f,t,this.b,this.a,this.e,this.d)?V1(this.c,t):null},uZn.Le=function(n){return $Q(this,n.ld())&&Lnn(this.c,n)},uZn.gc=function(){var n,t,e;if(!((t=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,t.d)&&t))return 0;for(n=0,e=new dun(this.c,this.f,this.b,this.a,this.e,this.d);AP(e.a);e.b=uG(_Y(e.a),44))++n;return n},uZn.ad=function(n,t){if(this.f.Te()&&this.c.a.Ne(n,this.b)<0)throw hv(new vM(Y0n+n+Z0n+this.b));return this.f.Ue()?G1(this.c,n,t,this.e,this.d):$2(this.c,n,t)},uZn.a=!1,uZn.d=!1,zW(DZn,"TreeMap/SubMap",631),sDn(304,22,n2n,qP),uZn.Te=function(){return!1},uZn.Ue=function(){return!1};var Mut,Tut=_cn(DZn,"TreeMap/SubMapType",304,Oat,K6,hB);sDn(1143,304,n2n,SN),uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/1",1143,Tut,null,null),sDn(1144,304,n2n,P$),uZn.Te=function(){return!0},uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/2",1144,Tut,null,null),sDn(1145,304,n2n,EN),uZn.Te=function(){return!0},_cn(DZn,"TreeMap/SubMapType/3",1145,Tut,null,null),sDn(157,KZn,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},rk,Hj,od),uZn.Nc=function(){return new GP(this)},uZn.Fc=function(n){return _V(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return sD(this,n)},uZn.gc=function(){return this.a.gc()};var jut=zW(DZn,"TreeSet",157);sDn(1082,1,{},ud),uZn.Ve=function(n,t){return _K(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$0$Type",1082),sDn(1083,1,{},sd),uZn.Ve=function(n,t){return BK(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$1$Type",1083),sDn(952,1,{},H),uZn.Kb=function(n){return n},zW(t2n,"Function/lambda$0$Type",952),sDn(395,1,y1n,hd),uZn.Mb=function(n){return!this.a.Mb(n)},zW(t2n,"Predicate/lambda$2$Type",395),sDn(581,1,{581:1});var Eut,Sut,Put=zW(e2n,"Handler",581);sDn(2107,1,yZn),uZn.xe=function(){return"DUMMY"},uZn.Ib=function(){return this.xe()},zW(e2n,"Level",2107),sDn(1706,2107,yZn,U),uZn.xe=function(){return"INFO"},zW(e2n,"Level/LevelInfo",1706),sDn(1843,1,{},ik),zW(e2n,"LogManager",1843),sDn(1896,1,yZn,iB),uZn.b=null,zW(e2n,"LogRecord",1896),sDn(525,1,{525:1},e9),uZn.e=!1;var Cut,Iut,Out,Aut=!1,Lut=!1,Nut=!1,$ut=!1,Dut=!1;zW(e2n,"Logger",525),sDn(835,581,{581:1},G),zW(e2n,"SimpleConsoleLogHandler",835),sDn(108,22,{3:1,34:1,22:1,108:1},XP);var xut,Rut=_cn(c2n,"Collector/Characteristics",108,Oat,D2,fB);sDn(758,1,{},WV),zW(c2n,"CollectorImpl",758),sDn(1074,1,{},q),uZn.Ve=function(n,t){return idn(uG(n,213),uG(t,213))},zW(c2n,"Collectors/10methodref$merge$Type",1074),sDn(1075,1,{},X),uZn.Kb=function(n){return R4(uG(n,213))},zW(c2n,"Collectors/11methodref$toString$Type",1075),sDn(1076,1,{},fd),uZn.Kb=function(n){return qx(),!!IL(n)},zW(c2n,"Collectors/12methodref$test$Type",1076),sDn(144,1,{},z),uZn.Yd=function(n,t){uG(n,16).Fc(t)},zW(c2n,"Collectors/20methodref$add$Type",144),sDn(146,1,{},V),uZn.Xe=function(){return new Zm},zW(c2n,"Collectors/21methodref$ctor$Type",146),sDn(359,1,{},W),uZn.Xe=function(){return new ek},zW(c2n,"Collectors/23methodref$ctor$Type",359),sDn(360,1,{},Q),uZn.Yd=function(n,t){FV(uG(n,49),t)},zW(c2n,"Collectors/24methodref$add$Type",360),sDn(1069,1,{},J),uZn.Ve=function(n,t){return IS(uG(n,15),uG(t,16))},zW(c2n,"Collectors/4methodref$addAll$Type",1069),sDn(1073,1,{},Y),uZn.Yd=function(n,t){o7(uG(n,213),uG(t,484))},zW(c2n,"Collectors/9methodref$add$Type",1073),sDn(1072,1,{},fG),uZn.Xe=function(){return new Ysn(this.a,this.b,this.c)},zW(c2n,"Collectors/lambda$15$Type",1072),sDn(1077,1,{},Z),uZn.Xe=function(){var n;return Akn(n=new u8,(qx(),!1),new Zm),Akn(n,!0,new Zm),n},zW(c2n,"Collectors/lambda$22$Type",1077),sDn(1078,1,{},ld),uZn.Xe=function(){return Uhn(cT(dat,1),EZn,1,5,[this.a])},zW(c2n,"Collectors/lambda$25$Type",1078),sDn(1079,1,{},bd),uZn.Yd=function(n,t){Yq(this.a,Kcn(n))},zW(c2n,"Collectors/lambda$26$Type",1079),sDn(1080,1,{},wd),uZn.Ve=function(n,t){return sV(this.a,Kcn(n),Kcn(t))},zW(c2n,"Collectors/lambda$27$Type",1080),sDn(1081,1,{},nn),uZn.Kb=function(n){return Kcn(n)[0]},zW(c2n,"Collectors/lambda$28$Type",1081),sDn(728,1,{},tn),uZn.Ve=function(n,t){return nX(n,t)},zW(c2n,"Collectors/lambda$4$Type",728),sDn(145,1,{},en),uZn.Ve=function(n,t){return ES(uG(n,16),uG(t,16))},zW(c2n,"Collectors/lambda$42$Type",145),sDn(361,1,{},rn),uZn.Ve=function(n,t){return SS(uG(n,49),uG(t,49))},zW(c2n,"Collectors/lambda$50$Type",361),sDn(362,1,{},cn),uZn.Kb=function(n){return uG(n,49)},zW(c2n,"Collectors/lambda$51$Type",362),sDn(1068,1,{},dd),uZn.Yd=function(n,t){vln(this.a,uG(n,85),t)},zW(c2n,"Collectors/lambda$7$Type",1068),sDn(1070,1,{},an),uZn.Ve=function(n,t){return Ahn(uG(n,85),uG(t,85),new J)},zW(c2n,"Collectors/lambda$8$Type",1070),sDn(1071,1,{},gd),uZn.Kb=function(n){return zgn(this.a,uG(n,85))},zW(c2n,"Collectors/lambda$9$Type",1071),sDn(550,1,{}),uZn.$e=function(){qQ(this)},uZn.d=!1,zW(c2n,"TerminatableStream",550),sDn(827,550,a2n,IK),uZn.$e=function(){qQ(this)},zW(c2n,"DoubleStreamImpl",827),sDn(1847,736,WZn,lG),uZn.Re=function(n){return FMn(this,uG(n,189))},uZn.a=null,zW(c2n,"DoubleStreamImpl/2",1847),sDn(1848,1,_0n,pd),uZn.Pe=function(n){$N(this.a,n)},zW(c2n,"DoubleStreamImpl/2/lambda$0$Type",1848),sDn(1845,1,_0n,md),uZn.Pe=function(n){NN(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$0$Type",1845),sDn(1846,1,_0n,vd),uZn.Pe=function(n){Mmn(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$2$Type",1846),sDn(1397,735,WZn,i9),uZn.Re=function(n){return e6(this,uG(n,202))},uZn.a=0,uZn.b=0,uZn.c=0,zW(c2n,"IntStream/5",1397),sDn(806,550,a2n,OK),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),this.a},zW(c2n,"IntStreamImpl",806),sDn(807,550,a2n,mS),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),BD(),dut},zW(c2n,"IntStreamImpl/Empty",807),sDn(1687,1,JZn,kd),uZn.Dd=function(n){msn(this.a,n)},zW(c2n,"IntStreamImpl/lambda$4$Type",1687);var Kut,Fut=Iq(c2n,"Stream");sDn(26,550,{533:1,687:1,848:1},fX),uZn.$e=function(){qQ(this)},zW(c2n,"StreamImpl",26),sDn(1102,500,WZn,D_),uZn.Bd=function(n){for(;Ttn(this);){if(this.a.Bd(n))return!0;qQ(this.b),this.b=null,this.a=null}return!1},zW(c2n,"StreamImpl/1",1102),sDn(1103,1,QZn,yd),uZn.Cd=function(n){mG(this.a,uG(n,848))},zW(c2n,"StreamImpl/1/lambda$0$Type",1103),sDn(1104,1,y1n,Md),uZn.Mb=function(n){return FV(this.a,n)},zW(c2n,"StreamImpl/1methodref$add$Type",1104),sDn(1105,500,WZn,QY),uZn.Bd=function(n){var t;return this.a||(t=new Zm,this.b.a.Nb(new Td(t)),hZ(),f$(t,this.c),this.a=new h3(t,16)),urn(this.a,n)},uZn.a=null,zW(c2n,"StreamImpl/5",1105),sDn(1106,1,QZn,Td),uZn.Cd=function(n){kD(this.a,n)},zW(c2n,"StreamImpl/5/2methodref$add$Type",1106),sDn(737,500,WZn,ien),uZn.Bd=function(n){for(this.b=!1;!this.b&&this.c.Bd(new WP(this,n)););return this.b},uZn.b=!1,zW(c2n,"StreamImpl/FilterSpliterator",737),sDn(1096,1,QZn,WP),uZn.Cd=function(n){Xz(this.a,this.b,n)},zW(c2n,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),sDn(1091,736,WZn,s7),uZn.Re=function(n){return v_(this,uG(n,189))},zW(c2n,"StreamImpl/MapToDoubleSpliterator",1091),sDn(1095,1,QZn,QP),uZn.Cd=function(n){vC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),sDn(1090,735,WZn,h7),uZn.Re=function(n){return k_(this,uG(n,202))},zW(c2n,"StreamImpl/MapToIntSpliterator",1090),sDn(1094,1,QZn,JP),uZn.Cd=function(n){kC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),sDn(734,500,WZn,f7),uZn.Bd=function(n){return y_(this,n)},zW(c2n,"StreamImpl/MapToObjSpliterator",734),sDn(1093,1,QZn,YP),uZn.Cd=function(n){yC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),sDn(1092,500,WZn,Fan),uZn.Bd=function(n){for(;NP(this.b,0);){if(!this.a.Bd(new on))return!1;this.b=$gn(this.b,1)}return this.a.Bd(n)},uZn.b=0,zW(c2n,"StreamImpl/SkipSpliterator",1092),sDn(1097,1,QZn,on),uZn.Cd=function(n){},zW(c2n,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),sDn(626,1,QZn,un),uZn.Cd=function(n){Ob(this,n)},zW(c2n,"StreamImpl/ValueConsumer",626),sDn(1098,1,QZn,sn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$0$Type",1098),sDn(1099,1,QZn,hn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$1$Type",1099),sDn(1100,1,{},jd),uZn.Ve=function(n,t){return FB(this.a,n,t)},zW(c2n,"StreamImpl/lambda$4$Type",1100),sDn(1101,1,QZn,nC),uZn.Cd=function(n){kF(this.b,this.a,n)},zW(c2n,"StreamImpl/lambda$5$Type",1101),sDn(1107,1,QZn,Ed),uZn.Cd=function(n){Usn(this.a,uG(n,380))},zW(c2n,"TerminatableStream/lambda$0$Type",1107),sDn(2142,1,{}),sDn(2014,1,{},fn),zW("javaemul.internal","ConsoleLogger",2014);var _ut=0;sDn(2134,1,{}),sDn(1830,1,QZn,ln),uZn.Cd=function(n){uG(n,317)},zW(l2n,"BowyerWatsonTriangulation/lambda$0$Type",1830),sDn(1831,1,QZn,Pd),uZn.Cd=function(n){Qon(this.a,uG(n,317).e)},zW(l2n,"BowyerWatsonTriangulation/lambda$1$Type",1831),sDn(1832,1,QZn,bn),uZn.Cd=function(n){uG(n,177)},zW(l2n,"BowyerWatsonTriangulation/lambda$2$Type",1832),sDn(1827,1,b2n,Cd),uZn.Ne=function(n,t){return S5(this.a,uG(n,177),uG(t,177))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(l2n,"NaiveMinST/lambda$0$Type",1827),sDn(449,1,{},Sd),zW(l2n,"NodeMicroLayout",449),sDn(177,1,{177:1},ZP),uZn.Fb=function(n){var t;return!!F$(n,177)&&(t=uG(n,177),OJ(this.a,t.a)&&OJ(this.b,t.b)||OJ(this.a,t.b)&&OJ(this.b,t.a))},uZn.Hb=function(){return VN(this.a)+VN(this.b)};var But=zW(l2n,"TEdge",177);sDn(317,1,{317:1},gqn),uZn.Fb=function(n){var t;return!!F$(n,317)&&Den(this,(t=uG(n,317)).a)&&Den(this,t.b)&&Den(this,t.c)},uZn.Hb=function(){return VN(this.a)+VN(this.b)+VN(this.c)},zW(l2n,"TTriangle",317),sDn(225,1,{225:1},C$),zW(l2n,"Tree",225),sDn(1218,1,{},q0),zW(w2n,"Scanline",1218);var Hut=Iq(w2n,d2n);sDn(1758,1,{},Qin),zW(g2n,"CGraph",1758),sDn(316,1,{316:1},V0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.g=0,uZn.i=0,uZn.k=T0n,zW(g2n,"CGroup",316),sDn(830,1,{},fk),zW(g2n,"CGroup/CGroupBuilder",830),sDn(60,1,{60:1},NF),uZn.Ib=function(){return this.j?mK(this.j.Kb(this)):(vK(zut),zut.o+"@"+(xx(this)>>>0).toString(16))},uZn.f=0,uZn.i=T0n;var Uut,Gut,qut,Xut,zut=zW(g2n,"CNode",60);sDn(829,1,{},lk),zW(g2n,"CNode/CNodeBuilder",829),sDn(1590,1,{},wn),uZn.ff=function(n,t){return 0},uZn.gf=function(n,t){return 0},zW(g2n,m2n,1590),sDn(1853,1,{},dn),uZn.cf=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a<r.c.c.length;)t=uG(N3(r),60),h=e.Math.min(h,t.a.j.d.c+t.b.a);for(w=new lS,o=new Ww(n.a.a);o.a<o.c.c.length;)(a=uG(N3(o),316)).k=h,0==a.g&&s8(w,a,w.c.b,w.c);for(;0!=w.b;){for(c=(a=uG(0==w.b?null:(MK(0!=w.b),Lrn(w,w.a.a)),316)).j.d.c,b=a.a.a.ec().Kc();b.Ob();)f=uG(b.Pb(),60),g=a.k+f.b.a,!lwn(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==(xdn(),YDt)||n.d==QDt?a.c+=c:a.c-=c,l=a.a.a.ec().Kc();l.Ob();)for(s=(f=uG(l.Pb(),60)).c.Kc();s.Ob();)u=uG(s.Pb(),60),d=hN(n.d)?n.g.ff(f,u):n.g.gf(f,u),u.a.k=e.Math.max(u.a.k,f.i+f.d.b+d-u.b.a),NZ(n,u,n.d)&&(u.a.k=e.Math.max(u.a.k,u.d.c-u.b.a)),--u.a.g,0==u.a.g&&aq(w,u.a)}for(i=new Ww(n.a.b);i.a<i.c.c.length;)(t=uG(N3(i),60)).d.c=t.i},zW(g2n,"LongestPathCompaction",1853),sDn(1756,1,{},w$n),uZn.e=!1;var Vut,Wut,Qut=zW(g2n,T2n,1756);sDn(1757,1,QZn,Id),uZn.Cd=function(n){Khn(this.a,uG(n,42))},zW(g2n,j2n,1757),sDn(1854,1,{},gn),uZn.df=function(n){var t,e,i,r,c,a;for(t=new Ww(n.a.b);t.a<t.c.c.length;)uG(N3(t),60).c.$b();for(i=new Ww(n.a.b);i.a<i.c.c.length;)for(e=uG(N3(i),60),c=new Ww(n.a.b);c.a<c.c.c.length;)e!=(r=uG(N3(c),60))&&(e.a&&e.a==r.a||(a=hN(n.d)?n.g.gf(e,r):n.g.ff(e,r),(r.d.c>e.d.c||e.d.c==r.d.c&&e.d.b<r.d.b)&&uvn(r.d.d+r.d.a+a,e.d.d)&&svn(r.d.d,e.d.d+e.d.a+a)&&e.c.Fc(r)))},zW(g2n,"QuadraticConstraintCalculation",1854),sDn(529,1,{529:1},nv),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(g2n,E2n,529),sDn(817,1,{},tz),uZn.df=function(n){this.c=n,QAn(this,new vn)},zW(g2n,S2n,817),sDn(1784,1,{693:1},KZ),uZn.bf=function(n){SAn(this,uG(n,473))},zW(g2n,P2n,1784),sDn(1785,1,b2n,pn),uZn.Ne=function(n,t){return eY(uG(n,60),uG(t,60))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,C2n,1785),sDn(473,1,{473:1},tC),uZn.a=!1,zW(g2n,I2n,473),sDn(1786,1,b2n,mn),uZn.Ne=function(n,t){return xEn(uG(n,473),uG(t,473))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(g2n,O2n,1786),sDn(1787,1,A2n,vn),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(g2n,"ScanlineConstraintCalculator/lambda$1$Type",1787),sDn(436,22,{3:1,34:1,22:1,436:1},eC);var Jut,Yut,Zut,nst=_cn(L2n,"HighLevelSortingCriterion",436,Oat,u1,lB);sDn(435,22,{3:1,34:1,22:1,435:1},iC);var tst,est,ist,rst,cst,ast,ost,ust,sst,hst,fst,lst,bst,wst,dst,gst,pst,mst=_cn(L2n,"LowLevelSortingCriterion",435,Oat,s1,bB),vst=Iq(N2n,"ILayoutMetaDataProvider");sDn(864,1,K2n,Bf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$2n),F2n),"Polyomino Traversal Strategy"),"Traversal strategy for trying different candidate positions for polyominoes."),ust),(lAn(),gNt)),yst),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D2n),F2n),"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."),ast),gNt),mst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x2n),F2n),"Polyomino Primary Sorting Criterion"),"Possible primary sorting criteria for the processing order of polyominoes."),rst),gNt),nst),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R2n),F2n),"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."),(qx(),!0)),wNt),cot),ggn(hNt))))},zW(L2n,"PolyominoOptions",864),sDn(257,22,{3:1,34:1,22:1,257:1},rC);var kst,yst=_cn(L2n,"TraversalStrategy",257,Oat,nan,wB);sDn(218,1,{218:1},kn),uZn.Ib=function(){return"NEdge[id="+this.b+" w="+this.g+" d="+this.a+"]"},uZn.a=1,uZn.b=0,uZn.c=0,uZn.f=!1,uZn.g=0;var Mst=zW(_2n,"NEdge",218);sDn(182,1,{},uk),zW(_2n,"NEdge/NEdgeBuilder",182),sDn(662,1,{},ak),zW(_2n,"NGraph",662),sDn(125,1,{125:1},g7),uZn.c=-1,uZn.d=0,uZn.e=0,uZn.i=-1,uZn.j=!1;var Tst=zW(_2n,"NNode",125);sDn(808,1,K0n,ok),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.bd=function(n,t){++this.b,GX(this.a,n,t)},uZn.Fc=function(n){return Sx(this,n)},uZn.cd=function(n,t){return++this.b,Cbn(this.a,n,t)},uZn.Gc=function(n){return++this.b,Ohn(this.a,n)},uZn.$b=function(){++this.b,Xv(this.a.c,0)},uZn.Hc=function(n){return-1!=Ten(this.a,n,0)},uZn.Ic=function(n){return yhn(this.a,n)},uZn.Xb=function(n){return zq(this.a,n)},uZn.dd=function(n){return Ten(this.a,n,0)},uZn.dc=function(){return 0==this.a.c.length},uZn.Kc=function(){return jtn(new Ww(this.a))},uZn.ed=function(){throw hv(new Kv)},uZn.fd=function(n){throw hv(new Kv)},uZn.gd=function(n){return++this.b,i7(this.a,n)},uZn.Mc=function(n){return Px(this,n)},uZn.hd=function(n,t){return++this.b,Y8(this.a,n,t)},uZn.gc=function(){return this.a.c.length},uZn.kd=function(n,t){return new C2(this.a,n,t)},uZn.Pc=function(){return tq(this.a.c)},uZn.Qc=function(n){return Ekn(this.a,n)},uZn.b=0,zW(_2n,"NNode/ChangeAwareArrayList",808),sDn(275,1,{},sk),zW(_2n,"NNode/NNodeBuilder",275),sDn(1695,1,{},yn),uZn.a=!1,uZn.f=vZn,uZn.j=0,zW(_2n,"NetworkSimplex",1695),sDn(1314,1,QZn,Od),uZn.Cd=function(n){uQn(this.a,uG(n,695),!0,!1)},zW(H2n,"NodeLabelAndSizeCalculator/lambda$0$Type",1314),sDn(565,1,{},Ad),uZn.b=!0,uZn.c=!0,uZn.d=!0,uZn.e=!0,zW(H2n,"NodeMarginCalculator",565),sDn(217,1,{217:1}),uZn.j=!1,uZn.k=!1;var jst,Est,Sst,Pst=zW(U2n,"Cell",217);sDn(127,217,{127:1,217:1},AF),uZn.jf=function(){return eq(this)},uZn.kf=function(){var n;return n=this.n,this.a.a+n.b+n.c},zW(U2n,"AtomicCell",127),sDn(237,22,{3:1,34:1,22:1,237:1},cC);var Cst,Ist=_cn(U2n,"ContainerArea",237,Oat,K2,dB);sDn(336,217,q2n),zW(U2n,"ContainerCell",336),sDn(1538,336,q2n,umn),uZn.jf=function(){var n;return n=0,this.e?this.b?n=this.b.b:this.a[1][1]&&(n=this.a[1][1].jf()):n=ypn(this,ATn(this,!0)),n>0?n+this.n.d+this.n.a:0},uZn.kf=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].kf());else if(this.g)c=ypn(this,wEn(this,null,!0));else for(Yrn(),i=0,r=(t=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)n=t[i],c=e.Math.max(c,ypn(this,wEn(this,n,!0)));return c>0?c+this.n.b+this.n.c:0},uZn.lf=function(){var n,t,e,i,r;if(this.g)for(n=wEn(this,null,!1),Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)_Fn(this,t=e[i],n);else for(Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i<r;++i)_Fn(this,t=e[i],n=wEn(this,t,!1))},uZn.mf=function(){var n,t,i,r;t=this.i,n=this.n,r=ATn(this,!1),J9(this,(Yrn(),jst),t.d+n.d,r),J9(this,Sst,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),J9(this,Est,t.d+n.d+r[0]-(r[1]-i)/2,r)},uZn.b=null,uZn.d=0,uZn.e=!1,uZn.f=!1,uZn.g=!1;var Ost,Ast,Lst,Nst=0,$st=0;zW(U2n,"GridContainerCell",1538),sDn(471,22,{3:1,34:1,22:1,471:1},aC);var Dst,xst=_cn(U2n,"HorizontalLabelAlignment",471,Oat,R2,gB);sDn(314,217,{217:1,314:1},a0,Yin,c1),uZn.jf=function(){return iq(this)},uZn.kf=function(){return rq(this)},uZn.a=0,uZn.c=!1;var Rst,Kst,Fst,_st=zW(U2n,"LabelCell",314);sDn(252,336,{217:1,336:1,252:1},tkn),uZn.jf=function(){return dNn(this)},uZn.kf=function(){return gNn(this)},uZn.lf=function(){YGn(this)},uZn.mf=function(){rqn(this)},uZn.b=0,uZn.c=0,uZn.d=!1,zW(U2n,"StripContainerCell",252),sDn(1691,1,y1n,Mn),uZn.Mb=function(n){return $M(uG(n,217))},zW(U2n,"StripContainerCell/lambda$0$Type",1691),sDn(1692,1,{},Tn),uZn.Ye=function(n){return uG(n,217).kf()},zW(U2n,"StripContainerCell/lambda$1$Type",1692),sDn(1693,1,y1n,jn),uZn.Mb=function(n){return DM(uG(n,217))},zW(U2n,"StripContainerCell/lambda$2$Type",1693),sDn(1694,1,{},En),uZn.Ye=function(n){return uG(n,217).jf()},zW(U2n,"StripContainerCell/lambda$3$Type",1694),sDn(472,22,{3:1,34:1,22:1,472:1},oC);var Bst,Hst,Ust,Gst,qst,Xst,zst,Vst,Wst,Qst,Jst,Yst,Zst,nht,tht,eht,iht,rht,cht,aht,oht,uht,sht,hht=_cn(U2n,"VerticalLabelAlignment",472,Oat,x2,pB);sDn(800,1,{},EQn),uZn.c=0,uZn.d=0,uZn.k=0,uZn.s=0,uZn.t=0,uZn.v=!1,uZn.w=0,uZn.D=!1,uZn.F=!1,zW(J2n,"NodeContext",800),sDn(1536,1,b2n,Sn),uZn.Ne=function(n,t){return UL(uG(n,64),uG(t,64))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/0methodref$comparePortSides$Type",1536),sDn(1537,1,b2n,Pn),uZn.Ne=function(n,t){return ACn(uG(n,117),uG(t,117))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/1methodref$comparePortContexts$Type",1537),sDn(164,22,{3:1,34:1,22:1,164:1},pun);var fht,lht,bht,wht,dht,ght,pht,mht=_cn(J2n,"NodeLabelLocation",164,Oat,Nkn,mB);sDn(117,1,{117:1},v$n),uZn.a=!1,zW(J2n,"PortContext",117),sDn(1541,1,QZn,Cn),uZn.Cd=function(n){eE(uG(n,314))},zW(n3n,t3n,1541),sDn(1542,1,y1n,In),uZn.Mb=function(n){return!!uG(n,117).c},zW(n3n,e3n,1542),sDn(1543,1,QZn,On),uZn.Cd=function(n){eE(uG(n,117).c)},zW(n3n,"LabelPlacer/lambda$2$Type",1543),sDn(1540,1,QZn,An),uZn.Cd=function(n){VK(),wv(uG(n,117))},zW(n3n,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),sDn(801,1,QZn,DB),uZn.Cd=function(n){aP(this.b,this.c,this.a,uG(n,187))},uZn.a=!1,uZn.c=!1,zW(n3n,"NodeLabelCellCreator/lambda$0$Type",801),sDn(1539,1,QZn,Ld),uZn.Cd=function(n){Vv(this.a,uG(n,187))},zW(n3n,"PortContextCreator/lambda$0$Type",1539),sDn(1902,1,{},Ln),zW(r3n,"GreedyRectangleStripOverlapRemover",1902),sDn(1903,1,b2n,Nn),uZn.Ne=function(n,t){return Cx(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),sDn(1849,1,{},pk),uZn.a=5,uZn.e=0,zW(r3n,"RectangleStripOverlapRemover",1849),sDn(1850,1,b2n,$n),uZn.Ne=function(n,t){return Ix(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),sDn(1852,1,b2n,Dn),uZn.Ne=function(n,t){return fW(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),sDn(417,22,{3:1,34:1,22:1,417:1},uC);var vht,kht,yht,Mht,Tht,jht=_cn(r3n,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Oat,B6,vB);sDn(226,1,{226:1},ZX),zW(r3n,"RectangleStripOverlapRemover/RectangleNode",226),sDn(1851,1,QZn,Nd),uZn.Cd=function(n){lTn(this.a,uG(n,226))},zW(r3n,"RectangleStripOverlapRemover/lambda$1$Type",1851),sDn(1323,1,b2n,xn),uZn.Ne=function(n,t){return hzn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),sDn(1326,1,{},Rn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),sDn(1327,1,y1n,Kn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),sDn(1328,1,y1n,Fn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),sDn(1321,1,b2n,_n),uZn.Ne=function(n,t){return JBn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),sDn(1324,1,{},Bn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),sDn(781,1,b2n,Hn),uZn.Ne=function(n,t){return lhn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionsComparator",781),sDn(1319,1,b2n,Un),uZn.Ne=function(n,t){return ron(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparator",1319),sDn(1320,1,b2n,Gn),uZn.Ne=function(n,t){return Byn(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),sDn(1322,1,b2n,qn),uZn.Ne=function(n,t){return XHn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),sDn(1325,1,{},Xn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),sDn(782,1,{},sC),uZn.Ve=function(n,t){return d6(this,uG(n,42),uG(t,176))},zW(a3n,"SuccessorCombination",782),sDn(649,1,{},zn),uZn.Ve=function(n,t){var e;return KNn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorJitter",649),sDn(648,1,{},Vn),uZn.Ve=function(n,t){var e;return cFn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorLineByLine",648),sDn(573,1,{},Wn),uZn.Ve=function(n,t){var e;return txn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorManhattan",573),sDn(1344,1,{},Qn),uZn.Ve=function(n,t){var e;return lKn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorMaxNormWindingInMathPosSense",1344),sDn(409,1,{},$d),uZn.Ve=function(n,t){return HV(this,n,t)},uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=!1,zW(a3n,"SuccessorQuadrantsGeneric",409),sDn(1345,1,{},Jn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),sDn(332,22,{3:1,34:1,22:1,332:1},hC),uZn.a=!1;var Eht,Sht=_cn(f3n,l3n,332,Oat,F6,kB);sDn(1317,1,{}),uZn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=xwn(0),r=0;r<this.o;r++)e+=""+n.a,n=xwn(xK(n.a));for(e+="\n",n=xwn(0),c=0;c<this.p;c++){for(e+=""+n.a,n=xwn(xK(n.a)),i=0;i<this.o;i++)0==dwn(t=Son(this,i,c),0)?e+="_":0==dwn(t,1)?e+="X":e+="0";e+="\n"}return r1(e,0,e.length-1)},uZn.o=0,uZn.p=0,zW(f3n,"TwoBitGrid",1317),sDn(330,1317,{330:1},smn),uZn.j=0,uZn.k=0,zW(f3n,"PlanarGrid",330),sDn(176,330,{330:1,176:1}),uZn.g=0,uZn.i=0,zW(f3n,"Polyomino",176);var Pht=Iq(p3n,m3n);sDn(137,1,v3n,Yn),uZn.qf=function(n,t){return vfn(this,n,t)},uZn.nf=function(){return MX(this)},uZn.of=function(n){return oIn(this,n)},uZn.pf=function(n){return vR(this,n)},zW(p3n,"MapPropertyHolder",137),sDn(1318,137,v3n,bFn),zW(f3n,"Polyominoes",1318);var Cht,Iht,Oht,Aht,Lht,Nht,$ht,Dht,xht=!1;sDn(1828,1,QZn,Zn),uZn.Cd=function(n){Szn(uG(n,225))},zW(k3n,"DepthFirstCompaction/0methodref$compactTree$Type",1828),sDn(825,1,QZn,Dd),uZn.Cd=function(n){JQ(this.a,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$1$Type",825),sDn(1829,1,QZn,AB),uZn.Cd=function(n){zvn(this.a,this.b,this.c,uG(n,225))},zW(k3n,"DepthFirstCompaction/lambda$2$Type",1829),sDn(68,1,{68:1},G0),zW(k3n,"Node",68),sDn(1214,1,{},I$),zW(k3n,"ScanlineOverlapCheck",1214),sDn(1215,1,{693:1},_Z),uZn.bf=function(n){WK(this,uG(n,451))},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler",1215),sDn(1216,1,b2n,nt),uZn.Ne=function(n,t){return ogn(uG(n,68),uG(t,68))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1216),sDn(451,1,{451:1},fC),uZn.a=!1,zW(k3n,"ScanlineOverlapCheck/Timestamp",451),sDn(1217,1,b2n,tt),uZn.Ne=function(n,t){return REn(uG(n,451),uG(t,451))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(k3n,"ScanlineOverlapCheck/lambda$0$Type",1217),sDn(557,1,{},et),zW(y3n,"SVGImage",557),sDn(334,1,{334:1},LB),uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(y3n,"UniqueTriple",334),sDn(205,1,M3n),zW(T3n,"AbstractLayoutProvider",205),sDn(1114,205,M3n,it),uZn.rf=function(n,t){var e,i,r;t.Ug(j3n,1),this.a=uM(pK(zDn(n,(ryn(),ift)))),vnn(n,zht)&&(i=mK(zDn(n,zht)),(e=QBn(aan(),i))&&uG(A1(e.f),205).rf(n,t.eh(1))),r=new L5(this.a),this.b=FWn(r,n),0===uG(zDn(n,(pbn(),Hht)),489).g?(D$n(new rt,this.b),Myn(n,Qht,oIn(this.b,Qht))):(bS(),String.fromCharCode(10)),oQn(r),Myn(n,Wht,this.b),t.Vg()},uZn.a=0,zW(E3n,"DisCoLayoutProvider",1114),sDn(1208,1,{},rt),uZn.c=!1,uZn.e=0,uZn.f=0,zW(E3n,"DisCoPolyominoCompactor",1208),sDn(567,1,{567:1},hX),uZn.b=!0,zW(S3n,"DCComponent",567),sDn(406,22,{3:1,34:1,22:1,406:1},lC),uZn.a=!1;var Rht,Kht,Fht=_cn(S3n,"DCDirection",406,Oat,_6,yB);sDn(272,137,{3:1,272:1,96:1,137:1},pDn),zW(S3n,"DCElement",272),sDn(407,1,{407:1},bTn),uZn.c=0,zW(S3n,"DCExtension",407),sDn(762,137,v3n,ej),zW(S3n,"DCGraph",762),sDn(489,22,{3:1,34:1,22:1,489:1},qR);var _ht,Bht,Hht,Uht,Ght,qht,Xht,zht,Vht,Wht,Qht,Jht,Yht,Zht,nft,tft,eft,ift,rft,cft,aft,oft=_cn(P3n,C3n,489,Oat,LJ,MB);sDn(865,1,K2n,Hf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I3n),N3n),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),Uht),(lAn(),gNt)),oft),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O3n),N3n),"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."),kNt),$ot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,A3n),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),vNt),dat),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,L3n),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),vNt),dat),ggn(hNt)))),nXn((new Uf,n))},zW(P3n,"DisCoMetaDataProvider",865),sDn(1010,1,K2n,Uf),uZn.hf=function(n){nXn(n)},zW(P3n,"DisCoOptions",1010),sDn(1011,1,{},ct),uZn.sf=function(){return new it},uZn.tf=function(n){},zW(P3n,"DisCoOptions/DiscoFactory",1011),sDn(568,176,{330:1,176:1,568:1},Uxn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW("org.eclipse.elk.alg.disco.structures","DCPolyomino",568),sDn(1286,1,y1n,at),uZn.Mb=function(n){return IL(n)},zW(F3n,"ElkGraphComponentsProcessor/lambda$0$Type",1286),sDn(1287,1,{},ot),uZn.Kb=function(n){return lZ(),bIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$1$Type",1287),sDn(1288,1,y1n,ut),uZn.Mb=function(n){return uq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$2$Type",1288),sDn(1289,1,{},st),uZn.Kb=function(n){return lZ(),gIn(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$3$Type",1289),sDn(1290,1,y1n,ht),uZn.Mb=function(n){return sq(uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$4$Type",1290),sDn(1291,1,y1n,xd),uZn.Mb=function(n){return Z1(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$5$Type",1291),sDn(1292,1,{},Rd),uZn.Kb=function(n){return aQ(this.a,uG(n,74))},zW(F3n,"ElkGraphComponentsProcessor/lambda$6$Type",1292),sDn(1205,1,{},L5),uZn.a=0,zW(F3n,"ElkGraphTransformer",1205),sDn(1206,1,{},ft),uZn.Yd=function(n,t){XNn(this,uG(n,167),uG(t,272))},zW(F3n,"ElkGraphTransformer/OffsetApplier",1206),sDn(1207,1,QZn,Kd),uZn.Cd=function(n){eD(this,uG(n,8))},zW(F3n,"ElkGraphTransformer/OffsetApplier/OffSetToChainApplier",1207),sDn(760,1,{},lt),zW(G3n,q3n,760),sDn(1195,1,b2n,bt),uZn.Ne=function(n,t){return kNn(uG(n,235),uG(t,235))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G3n,X3n,1195),sDn(1196,1,QZn,bC),uZn.Cd=function(n){c3(this.b,this.a,uG(n,250))},zW(G3n,z3n,1196),sDn(738,205,M3n,hk),uZn.rf=function(n,t){Zxn(this,n,t)},zW(G3n,"ForceLayoutProvider",738),sDn(309,137,{3:1,309:1,96:1,137:1}),zW(V3n,"FParticle",309),sDn(250,309,{3:1,250:1,309:1,96:1,137:1},$W),uZn.Ib=function(){var n;return this.a?(n=Ten(this.a.a,this,0))>=0?"b"+n+"["+X8(this.a)+"]":"b["+X8(this.a)+"]":"b_"+xx(this)},zW(V3n,"FBendpoint",250),sDn(290,137,{3:1,290:1,96:1,137:1},$F),uZn.Ib=function(){return X8(this)},zW(V3n,"FEdge",290),sDn(235,137,{3:1,235:1,96:1,137:1},d7);var uft,sft,hft,fft,lft,bft,wft,dft,gft,pft,mft=zW(V3n,"FGraph",235);sDn(454,309,{3:1,454:1,309:1,96:1,137:1},A5),uZn.Ib=function(){return null==this.b||0==this.b.length?"l["+X8(this.a)+"]":"l_"+this.b},zW(V3n,"FLabel",454),sDn(153,309,{3:1,153:1,309:1,96:1,137:1},E$),uZn.Ib=function(){return z3(this)},uZn.a=0,zW(V3n,"FNode",153),sDn(2100,1,{}),uZn.vf=function(n){pGn(this,n)},uZn.wf=function(){ITn(this)},uZn.d=0,zW(Q3n,"AbstractForceModel",2100),sDn(641,2100,{641:1},lsn),uZn.uf=function(n,t){var i,r,c,a;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-NQ(n.e)/2-NQ(t.e)/2),vD(c,((i=VNn(this.e,n,t))>0?-iW(r,this.c)*i:TR(r,this.b)*uG(oIn(n,(rGn(),$ft)),17).a)/a),c},uZn.vf=function(n){pGn(this,n),this.a=uG(oIn(n,(rGn(),Tft)),17).a,this.c=uM(pK(oIn(n,_ft))),this.b=uM(pK(oIn(n,xft)))},uZn.xf=function(n){return n<this.a},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"EadesModel",641),sDn(642,2100,{642:1},zG),uZn.uf=function(n,t){var i,r,c,a,o;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),o=e.Math.sqrt(c.a*c.a+c.b*c.b),a=jR(r=e.Math.max(0,o-NQ(n.e)/2-NQ(t.e)/2),this.a)*uG(oIn(n,(rGn(),$ft)),17).a,(i=VNn(this.e,n,t))>0&&(a-=aM(r,this.a)*i),vD(c,a*this.b/o),c},uZn.vf=function(n){var t,i,r,c,a,o,u;for(pGn(this,n),this.b=uM(pK(oIn(n,(rGn(),Bft)))),this.c=this.b/uG(oIn(n,Tft),17).a,r=n.e.c.length,a=0,c=0,u=new Ww(n.e);u.a<u.c.c.length;)a+=(o=uG(N3(u),153)).e.a,c+=o.e.b;t=a*c,i=uM(pK(oIn(n,_ft)))*Z2n,this.a=e.Math.sqrt(t/(2*r))*i},uZn.wf=function(){ITn(this),this.b-=this.c},uZn.xf=function(n){return this.b>0},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"FruchtermanReingoldModel",642),sDn(860,1,K2n,Gf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J3n),""),"Force Model"),"Determines the model for force calculation."),hft),(lAn(),gNt)),mlt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y3n),""),"Iterations"),"The number of iterations on the force model."),xwn(300)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z3n),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n4n),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),t4n),dNt),fot),ggn(hNt)))),H4(n,n4n,J3n,dft),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e4n),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dNt),fot),ggn(hNt)))),H4(n,e4n,J3n,lft),vJn((new qf,n))},zW(i4n,"ForceMetaDataProvider",860),sDn(432,22,{3:1,34:1,22:1,432:1},wC);var vft,kft,yft,Mft,Tft,jft,Eft,Sft,Pft,Cft,Ift,Oft,Aft,Lft,Nft,$ft,Dft,xft,Rft,Kft,Fft,_ft,Bft,Hft,Uft,Gft,qft,Xft,zft,Vft,Wft,Qft,Jft,Yft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,olt,ult,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,mlt=_cn(i4n,"ForceModelStrategy",432,Oat,h1,TB);sDn($1n,1,K2n,qf),uZn.hf=function(n){vJn(n)},zW(i4n,"ForceOptions",$1n),sDn(1001,1,{},mt),uZn.sf=function(){return new hk},uZn.tf=function(n){},zW(i4n,"ForceOptions/ForceFactory",1001),sDn(861,1,K2n,Xf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I4n),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),sNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O4n),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A4n),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),Zft),gNt),Clt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L4n),""),"Stress Epsilon"),"Termination criterion for the iterative process."),t4n),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N4n),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),xwn(vZn)),mNt),dot),ggn(hNt)))),sWn((new zf,n))},zW(i4n,"StressMetaDataProvider",861),sDn(1004,1,K2n,zf),uZn.hf=function(n){sWn(n)},zW(i4n,"StressOptions",1004),sDn(1005,1,{},gt),uZn.sf=function(){return new DF},uZn.tf=function(n){},zW(i4n,"StressOptions/StressFactory",1005),sDn(1110,205,M3n,DF),uZn.rf=function(n,t){var e,i,r,c;for(t.Ug(D4n,1),oM(gK(zDn(n,(Bjn(),olt))))?oM(gK(zDn(n,blt)))||J1(new Sd((vP(),new Vy(n)))):Zxn(new hk,n,t.eh(1)),i=yfn(n),c=(e=tqn(this.a,i)).Kc();c.Ob();)(r=uG(c.Pb(),235)).e.c.length<=1||(rzn(this.b,r),QDn(this.b),Prn(r.d,new pt));YJn(i=lJn(e)),t.Vg()},zW(R4n,"StressLayoutProvider",1110),sDn(1111,1,QZn,pt),uZn.Cd=function(n){Yqn(uG(n,454))},zW(R4n,"StressLayoutProvider/lambda$0$Type",1111),sDn(1002,1,{},qv),uZn.c=0,uZn.e=0,uZn.g=0,zW(R4n,"StressMajorization",1002),sDn(391,22,{3:1,34:1,22:1,391:1},dC);var vlt,klt,ylt,Mlt,Tlt,jlt,Elt,Slt,Plt,Clt=_cn(R4n,"StressMajorization/Dimension",391,Oat,F2,jB);sDn(1003,1,b2n,Fd),uZn.Ne=function(n,t){return j_(this.a,uG(n,153),uG(t,153))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(R4n,"StressMajorization/lambda$0$Type",1003),sDn(1192,1,{},i4),zW(F4n,"ElkLayered",1192),sDn(1193,1,QZn,_d),uZn.Cd=function(n){OLn(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$0$Type",1193),sDn(1194,1,QZn,Bd),uZn.Cd=function(n){E_(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$1$Type",1194),sDn(1281,1,{},z$),zW(F4n,"GraphConfigurator",1281),sDn(770,1,QZn,Hd),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$0$Type",770),sDn(771,1,{},dt),uZn.Kb=function(n){return FEn(),new fX(null,new h3(uG(n,30).a,16))},zW(F4n,"GraphConfigurator/lambda$1$Type",771),sDn(772,1,QZn,Ud),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$2$Type",772),sDn(1109,205,M3n,mk),uZn.rf=function(n,t){var e;e=vXn(new kk,n),xA(zDn(n,(jYn(),rMt)))===xA((Own(),Ixt))?Tgn(this.a,e,t):BDn(this.a,e,t),t.$g()||NQn(new Vf,e)},zW(F4n,"LayeredLayoutProvider",1109),sDn(367,22,{3:1,34:1,22:1,367:1},gC);var Ilt,Olt,Alt,Llt=_cn(F4n,"LayeredPhases",367,Oat,u9,EB);sDn(1717,1,{},$an),uZn.i=0,zW(_4n,"ComponentsToCGraphTransformer",1717),sDn(1718,1,{},wt),uZn.yf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(_4n,"ComponentsToCGraphTransformer/1",1718),sDn(86,1,{86:1}),uZn.i=0,uZn.k=!0,uZn.o=T0n;var Nlt,$lt,Dlt,xlt=zW(B4n,"CNode",86);sDn(470,86,{470:1,86:1},Jx,Yvn),uZn.Ib=function(){return""},zW(_4n,"ComponentsToCGraphTransformer/CRectNode",470),sDn(1688,1,{},vt),zW(_4n,"OneDimensionalComponentsCompaction",1688),sDn(1689,1,{},kt),uZn.Kb=function(n){return w2(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),sDn(1690,1,{},yt),uZn.Kb=function(n){return xgn(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),sDn(1720,1,{},wQ),zW(B4n,"CGraph",1720),sDn(194,1,{194:1},Zvn),uZn.b=0,uZn.c=0,uZn.e=0,uZn.g=!0,uZn.i=T0n,zW(B4n,"CGroup",194),sDn(1719,1,{},Mt),uZn.yf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(B4n,m2n,1719),sDn(1721,1,{},i$n),uZn.d=!1;var Rlt=zW(B4n,T2n,1721);sDn(1722,1,{},Tt),uZn.Kb=function(n){return GS(),qx(),0!=uG(uG(n,42).a,86).d.e},uZn.Fb=function(n){return this===n},zW(B4n,j2n,1722),sDn(833,1,{},cX),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(B4n,E2n,833),sDn(1898,1,{},nz),zW(H4n,S2n,1898);var Klt=Iq(U4n,d2n);sDn(1899,1,{382:1},FZ),uZn.bf=function(n){DFn(this,uG(n,476))},zW(H4n,P2n,1899),sDn(V1n,1,b2n,jt),uZn.Ne=function(n,t){return rY(uG(n,86),uG(t,86))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,C2n,V1n),sDn(476,1,{476:1},KC),uZn.a=!1,zW(H4n,I2n,476),sDn(1901,1,b2n,Et),uZn.Ne=function(n,t){return KEn(uG(n,476),uG(t,476))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,O2n,1901),sDn(148,1,{148:1},FC,wG),uZn.Fb=function(n){var t;return null!=n&&Ult==Tbn(n)&&(t=uG(n,148),OJ(this.c,t.c)&&OJ(this.d,t.d))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d]))},uZn.Ib=function(){return"("+this.c+TZn+this.d+(this.a?"cx":"")+this.b+")"},uZn.a=!0,uZn.c=0,uZn.d=0;var Flt,_lt,Blt,Hlt,Ult=zW(U4n,"Point",148);sDn(416,22,{3:1,34:1,22:1,416:1},jC);var Glt,qlt,Xlt,zlt,Vlt,Wlt,Qlt,Jlt,Ylt,Zlt,nbt,tbt,ebt=_cn(U4n,"Point/Quadrant",416,Oat,H6,SB);sDn(1708,1,{},dk),uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,uZn.f=null,zW(U4n,"RectilinearConvexHull",1708),sDn(583,1,{382:1},cyn),uZn.bf=function(n){Itn(this,uG(n,148))},uZn.b=0,zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler",583),sDn(1710,1,b2n,St),uZn.Ne=function(n,t){return cY(pK(n),pK(t))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),sDn(1709,1,{382:1},Jin),uZn.bf=function(n){pKn(this,uG(n,148))},uZn.a=0,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(U4n,"RectilinearConvexHull/RectangleEventHandler",1709),sDn(1711,1,b2n,Pt),uZn.Ne=function(n,t){return H3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$0$Type",1711),sDn(1712,1,b2n,At),uZn.Ne=function(n,t){return U3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$1$Type",1712),sDn(1713,1,b2n,Lt),uZn.Ne=function(n,t){return B3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$2$Type",1713),sDn(1714,1,b2n,Ot),uZn.Ne=function(n,t){return G3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$3$Type",1714),sDn(1715,1,b2n,Nt),uZn.Ne=function(n,t){return sIn(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$4$Type",1715),sDn(1716,1,{},X0),zW(U4n,"Scanline",1716),sDn(2104,1,{}),zW(G4n,"AbstractGraphPlacer",2104),sDn(335,1,{335:1},DR),uZn.Ff=function(n){return!!this.Gf(n)&&(UNn(this.b,uG(oIn(n,(GYn(),xpt)),21),n),!0)},uZn.Gf=function(n){var t,e,i;for(t=uG(oIn(n,(GYn(),xpt)),21),i=uG(Y9(Jlt,t),21).Kc();i.Ob();)if(e=uG(i.Pb(),21),!uG(Y9(this.b,e),15).dc())return!1;return!0},zW(G4n,"ComponentGroup",335),sDn(779,2104,{},gk),uZn.Hf=function(n){var t;for(t=new Ww(this.a);t.a<t.c.c.length;)if(uG(N3(t),335).Ff(n))return;kD(this.a,new DR(n))},uZn.Ef=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)i=uG(r.Pb(),36),this.Hf(i);for(w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;)h=ZJn(o=uG(N3(s),335),c),utn(KW(o.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,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(e=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),e.e);JF(dL(t.f),e.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupGraphPlacer",779),sDn(1312,779,{},Lk),uZn.Hf=function(n){Kwn(this,n)},uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(this.a.c.length=0,t.a.c.length=0,n.dc())return t.f.a=0,void(t.f.b=0);for(zsn(t,a=uG(n.Xb(0),36)),r=n.Kc();r.Ob();)Kwn(this,uG(r.Pb(),36));for(m=new sj,p=new sj,d=new sj,w=new sj,c=uM(pK(oIn(a,(jYn(),wTt)))),s=new Ww(this.a);s.a<s.c.c.length;){if(o=uG(N3(s),335),hN(uG(oIn(t,(XYn(),d$t)),88))){for(d.a=m.a,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),yRt))){d.a=p.a;break}}else if(fN(uG(oIn(t,d$t),88)))for(d.b=m.b,g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),_Rt))){d.b=p.b;break}if(h=ZJn(uG(o,579),c),utn(KW(o.b),d.a,d.b),hN(uG(oIn(t,d$t),88))){for(p.a=d.a+h.a,w.a=e.Math.max(w.a,p.a),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),KRt))){m.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(fN(uG(oIn(t,d$t),88))){for(p.b=d.b+h.b,w.b=e.Math.max(w.b,p.b),g=new Ny(RW(HW(o.b).a).a.kc());g.b.Ob();)if(uG(OP(g.b.Pb()),21).Hc((KQn(),kRt))){m.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,oM(gK(oIn(a,pyt)))&&xA(oIn(a,Vyt))===xA((_gn(),uxt))){for(b=n.Kc();b.Ob();)tHn(f=uG(b.Pb(),36),f.c.a,f.c.b);for(oYn(i=new It,n,c),l=n.Kc();l.Ob();)JF(dL((f=uG(l.Pb(),36)).c),i.e);JF(dL(t.f),i.a)}for(u=new Ww(this.a);u.a<u.c.c.length;)otn(t,KW((o=uG(N3(u),335)).b))},zW(G4n,"ComponentGroupModelOrderGraphPlacer",1312),sDn(389,22,{3:1,34:1,22:1,389:1},EC);var ibt,rbt,cbt,abt=_cn(G4n,"ComponentOrderingStrategy",389,Oat,R6,PB);sDn(659,1,{},It),zW(G4n,"ComponentsCompactor",659),sDn(1533,13,x0n,c9),uZn.Fc=function(n){return CEn(this,uG(n,148))},zW(G4n,"ComponentsCompactor/Hullpoints",1533),sDn(1530,1,{855:1},qyn),uZn.a=!1,zW(G4n,"ComponentsCompactor/InternalComponent",1530),sDn(1529,1,t1n,bk),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},zW(G4n,"ComponentsCompactor/InternalConnectedComponents",1529),sDn(1532,1,{602:1},s$n),uZn.Bf=function(){return null},uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalExternalExtension",1532),sDn(1531,1,{602:1},vk),uZn.Cf=function(){return this.a},uZn.Af=function(){return Dkn(this.d)},uZn.Bf=function(){return this.c},uZn.Df=function(){return this.b},zW(G4n,"ComponentsCompactor/InternalUnionExternalExtension",1531),sDn(1535,1,{},BFn),zW(G4n,"ComponentsCompactor/OuterSegments",1535),sDn(1534,1,{},wk),zW(G4n,"ComponentsCompactor/Segments",1534),sDn(1282,1,{},p7),zW(G4n,q3n,1282),sDn(1283,1,b2n,$t),uZn.Ne=function(n,t){return J3(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"ComponentsProcessor/lambda$0$Type",1283),sDn(579,335,{335:1,579:1},r9),uZn.Ff=function(n){return Lln(this,n)},uZn.Gf=function(n){return rKn(this,n)},zW(G4n,"ModelOrderComponentGroup",579),sDn(1310,2104,{},Dt),uZn.Ef=function(n,t){var i,r,c,a,o,u,s,h,f;if(1!=n.gc()){if(n.dc())return t.a.c.length=0,t.f.a=0,void(t.f.b=0);for(this.Jf(n,t),c=uG(n.Xb(0),36),t.a.c.length=0,zsn(t,c),u=0,f=0,a=n.Kc();a.Ob();)s=uG(a.Pb(),36).f,u=e.Math.max(u,s.a),f+=s.a*s.b;if(u=e.Math.max(u,e.Math.sqrt(f)*uM(pK(oIn(t,(jYn(),dyt))))),r=uM(pK(oIn(t,wTt))),this.If(n,t,u,r),oM(gK(oIn(c,pyt)))){for(oYn(i=new It,n,r),o=n.Kc();o.Ob();)JF(dL(uG(o.Pb(),36).c),i.e);JF(dL(t.f),i.a)}otn(t,n)}else(h=uG(n.Xb(0),36))!=t&&(t.a.c.length=0,FHn(t,h,0,0),zsn(t,h),WY(t.d,h.d),t.f.a=h.f.a,t.f.b=h.f.b)},uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l;for(f=0,l=0,u=0,c=r,o=n.Kc();o.Ob();)f+(h=(a=uG(o.Pb(),36)).f).a>i&&(f=0,l+=u+r,u=0),tHn(a,f+(s=a.c).a,l+s.b),dL(s),c=e.Math.max(c,f+h.a),u=e.Math.max(u,h.b),f+=h.a+r;t.f.a=c,t.f.b=l+u},uZn.Jf=function(n,t){var e,i,r,c,a;if(xA(oIn(t,(jYn(),kyt)))===xA((Uvn(),tbt))){for(i=n.Kc();i.Ob();){for(a=0,c=new Ww((e=uG(i.Pb(),36)).a);c.a<c.c.c.length;)r=uG(N3(c),10),a+=uG(oIn(r,cTt),17).a;e.p=a}hZ(),n.jd(new xt)}},zW(G4n,"SimpleRowGraphPlacer",1310),sDn(1313,1310,{},Ct),uZn.If=function(n,t,i,r){var c,a,o,u,s,h,f,l,b,w;for(b=0,w=0,u=0,c=r,s=null,l=0,o=n.Kc();o.Ob();)(b+(f=(a=uG(o.Pb(),36)).f).a>i&&!uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))||s&&uG(oIn(s,(GYn(),xpt)),21).Hc((KQn(),kRt))||uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),_Rt)))&&(b=l,w+=u+r,u=0),h=a.c,uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))&&(b=c+r),tHn(a,b+h.a,w+h.b),c=e.Math.max(c,b+f.a),uG(oIn(a,xpt),21).Hc(KRt)&&(l=e.Math.max(l,b+f.a+r)),dL(h),u=e.Math.max(u,f.b),b+=f.a+r,s=a;t.f.a=c,t.f.b=w+u},uZn.Jf=function(n,t){},zW(G4n,"ModelOrderRowGraphPlacer",1313),sDn(1311,1,b2n,xt),uZn.Ne=function(n,t){return Wsn(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"SimpleRowGraphPlacer/1",1311),sDn(1280,1,A2n,Rt),uZn.Lb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},zW(W4n,"CompoundGraphPostprocessor/1",1280),sDn(1279,1,Q4n,yk),uZn.Kf=function(n,t){zyn(this,uG(n,36),t)},zW(W4n,"CompoundGraphPreprocessor",1279),sDn(453,1,{453:1},Sdn),uZn.c=!1,zW(W4n,"CompoundGraphPreprocessor/ExternalPort",453),sDn(249,1,{249:1},$B),uZn.Ib=function(){return MR(this.c)+":"+MNn(this.b)},zW(W4n,"CrossHierarchyEdge",249),sDn(777,1,b2n,Gd),uZn.Ne=function(n,t){return Njn(this,uG(n,249),uG(t,249))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(W4n,"CrossHierarchyEdgeComparator",777),sDn(305,137,{3:1,305:1,96:1,137:1}),uZn.p=0,zW(J4n,"LGraphElement",305),sDn(18,305,{3:1,18:1,305:1,96:1,137:1},UZ),uZn.Ib=function(){return MNn(this)};var obt=zW(J4n,"LEdge",18);sDn(36,305,{3:1,20:1,36:1,305:1,96:1,137:1},Dan),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.b)},uZn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+vIn(this.a):0==this.a.c.length?"G-layered"+vIn(this.b):"G[layerless"+vIn(this.a)+", layers"+vIn(this.b)+"]"};var ubt,sbt=zW(J4n,"LGraph",36);sDn(666,1,{}),uZn.Lf=function(){return this.e.n},uZn.of=function(n){return oIn(this.e,n)},uZn.Mf=function(){return this.e.o},uZn.Nf=function(){return this.e.p},uZn.pf=function(n){return vR(this.e,n)},uZn.Of=function(n){this.e.n.a=n.a,this.e.n.b=n.b},uZn.Pf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},uZn.Qf=function(n){this.e.p=n},zW(J4n,"LGraphAdapters/AbstractLShapeAdapter",666),sDn(474,1,{853:1},qd),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(this.a.b.c.length),t=new Ww(this.a.b);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.b=null,zW(J4n,"LGraphAdapters/LEdgeAdapter",474),sDn(665,1,{},mY),uZn.Sf=function(){var n,t,e,i,r;if(!this.b)for(this.b=new Zm,e=new Ww(this.a.b);e.a<e.c.c.length;)for(r=new Ww(uG(N3(e),30).a);r.a<r.c.c.length;)if(i=uG(N3(r),10),this.c.Mb(i)&&(kD(this.b,new RB(this,i,this.e)),this.d)){if(vR(i,(GYn(),Pmt)))for(t=uG(oIn(i,Pmt),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1));if(vR(i,Ept))for(t=uG(oIn(i,Ept),15).Kc();t.Ob();)n=uG(t.Pb(),10),kD(this.b,new RB(this,n,!1))}return this.b},uZn.Lf=function(){throw hv(new TM(Z4n))},uZn.of=function(n){return oIn(this.a,n)},uZn.Mf=function(){return this.a.f},uZn.Nf=function(){return this.a.p},uZn.pf=function(n){return vR(this.a,n)},uZn.Of=function(n){throw hv(new TM(Z4n))},uZn.Pf=function(n){this.a.f.a=n.a,this.a.f.b=n.b},uZn.Qf=function(n){this.a.p=n},uZn.b=null,uZn.d=!1,uZn.e=!1,zW(J4n,"LGraphAdapters/LGraphAdapter",665),sDn(585,666,{187:1},Xd),zW(J4n,"LGraphAdapters/LLabelAdapter",585),sDn(584,666,{695:1},RB),uZn.Tf=function(){return this.b},uZn.Uf=function(){return hZ(),hZ(),zot},uZn.Rf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.e,10).b.c.length),t=new Ww(uG(this.e,10).b);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.a,new Xd(n));return this.a},uZn.Vf=function(){var n;return new OF((n=uG(this.e,10).d).d,n.c,n.a,n.b)},uZn.Wf=function(){return hZ(),hZ(),zot},uZn.Xf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.e,10).j.c.length),t=new Ww(uG(this.e,10).j);t.a<t.c.c.length;)n=uG(N3(t),12),kD(this.c,new _C(n,this.d));return this.c},uZn.Yf=function(){return oM(gK(oIn(uG(this.e,10),(GYn(),Cpt))))},uZn.Zf=function(n){uG(this.e,10).d.b=n.b,uG(this.e,10).d.d=n.d,uG(this.e,10).d.c=n.c,uG(this.e,10).d.a=n.a},uZn.$f=function(n){uG(this.e,10).f.b=n.b,uG(this.e,10).f.d=n.d,uG(this.e,10).f.c=n.c,uG(this.e,10).f.a=n.a},uZn._f=function(){Zcn(this,(zS(),ubt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LNodeAdapter",584),sDn(1788,666,{852:1},_C),uZn.Uf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.a){for(this.a=new Zm,e=new Ww(uG(this.e,12).e);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.a,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(qgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.a,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.b);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.a,new qd(r.a))}return this.a},uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(uG(this.e,12).f.c.length),t=new Ww(uG(this.e,12).f);t.a<t.c.c.length;)n=uG(N3(t),72),kD(this.b,new Xd(n));return this.b},uZn.Wf=function(){var n,t,e,i,r,c,a,o;if(this.d&&uG(this.e,12).i.k==(zIn(),gbt))return hZ(),hZ(),zot;if(!this.c){for(this.c=new Zm,e=new Ww(uG(this.e,12).g);e.a<e.c.c.length;)n=uG(N3(e),18),kD(this.c,new qd(n));if(this.d&&(i=uG(oIn(uG(this.e,12),(GYn(),lmt)),10)))for(t=new Fz(ix(Xgn(i).a.Kc(),new h));hDn(t);)n=uG(N9(t),18),kD(this.c,new qd(n));if(vR(uG(this.e,12).i,(GYn(),vmt))&&(a=uG(oIn(uG(this.e,12).i,vmt),337),o=uG(ain(a.e,this.e),113)))for(c=new Ww(o.e);c.a<c.c.c.length;)r=uG(N3(c),340),kD(this.c,new qd(r.a))}return this.c},uZn.ag=function(){return uG(this.e,12).j},uZn.bg=function(){return oM(gK(oIn(uG(this.e,12),(GYn(),qpt))))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=!1,zW(J4n,"LGraphAdapters/LPortAdapter",1788),sDn(1789,1,b2n,Kt),uZn.Ne=function(n,t){return H_n(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J4n,"LGraphAdapters/PortComparator",1789),sDn(818,1,y1n,Ft),uZn.Mb=function(n){return uG(n,10),zS(),!0},zW(J4n,"LGraphAdapters/lambda$0$Type",818),sDn(404,305,{3:1,305:1,404:1,96:1,137:1}),zW(J4n,"LShape",404),sDn(72,404,{3:1,305:1,72:1,404:1,96:1,137:1},uj,S$),uZn.Ib=function(){var n;return null==(n=oq(this))?"label":"l_"+n},zW(J4n,"LLabel",72),sDn(214,1,{3:1,4:1,214:1,423:1}),uZn.Fb=function(n){var t;return!!F$(n,214)&&(t=uG(n,214),this.d==t.d&&this.a==t.a&&this.b==t.b&&this.c==t.c)},uZn.Hb=function(){var n,t;return n=OL(this.b)<<16,n|=OL(this.a)&D1n,t=OL(this.c)<<16,n^(t|=OL(this.d)&D1n)},uZn.cg=function(n){var t,e,i,r,c,a,o,u,s;for(r=0;r<n.length&&Hbn((s3(r,n.length),n.charCodeAt(r)),r6n);)++r;for(t=n.length;t>0&&Hbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(r<t){u=WGn((Knn(r,t,n.length),n.substr(r,t-r)),",|;");try{for(a=0,o=(c=u).length;a<o;++a){if(2!=(i=WGn(c[a],"=")).length)throw hv(new vM("Expecting a list of key-value pairs."));e=KAn(i[0]),s=YIn(KAn(i[1])),m_(e,"top")?this.d=s:m_(e,"left")?this.b=s:m_(e,"bottom")?this.a=s:m_(e,"right")&&(this.c=s)}}catch(h){throw F$(h=Ehn(h),130)?hv(new vM(a6n+h)):hv(h)}}},uZn.Ib=function(){return"[top="+this.d+",left="+this.b+",bottom="+this.a+",right="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"Spacing",214),sDn(140,214,u6n,Nk,qL,OF,zU);var hbt=zW(o6n,"ElkMargin",140);sDn(660,140,u6n,$k),zW(J4n,"LMargin",660),sDn(10,404,{3:1,305:1,10:1,404:1,96:1,137:1},gMn),uZn.Ib=function(){return byn(this)},uZn.i=!1;var fbt,lbt,bbt,wbt,dbt,gbt,pbt=zW(J4n,"LNode",10);sDn(273,22,{3:1,34:1,22:1,273:1},SC);var mbt,vbt=_cn(J4n,"LNode/NodeType",273,Oat,Vnn,VH);sDn(775,1,y1n,_t),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(J4n,"LNode/lambda$0$Type",775),sDn(107,214,s6n,Dk,CN,VU);var kbt,ybt,Mbt,Tbt,jbt,Ebt,Sbt=zW(o6n,"ElkPadding",107);sDn(778,107,s6n,xk),zW(J4n,"LPadding",778),sDn(12,404,{3:1,305:1,12:1,404:1,96:1,137:1},lOn),uZn.Ib=function(){var n,t,e;return JA(((n=new WM).a+="p_",n),njn(this)),this.i&&JA(QA((n.a+="[",n),this.i),"]"),1==this.e.c.length&&0==this.g.c.length&&uG(zq(this.e,0),18).c!=this&&(t=uG(zq(this.e,0),18).c,JA((n.a+=" << ",n),njn(t)),JA(QA((n.a+="[",n),t.i),"]")),0==this.e.c.length&&1==this.g.c.length&&uG(zq(this.g,0),18).d!=this&&(e=uG(zq(this.g,0),18).d,JA((n.a+=" >> ",n),njn(e)),JA(QA((n.a+="[",n),e.i),"]")),n.a},uZn.c=!0,uZn.d=!1;var Pbt,Cbt,Ibt,Obt,Abt=zW(J4n,"LPort",12);sDn(408,1,t1n,zd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Vd(new Ww(this.a.e))},zW(J4n,"LPort/1",408),sDn(1309,1,$Zn,Vd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).c},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/1/1",1309),sDn(369,1,t1n,Wd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Qd(new Ww(this.a.g))},zW(J4n,"LPort/2",369),sDn(776,1,$Zn,Qd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).d},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/2/1",776),sDn(1302,1,t1n,LC),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new w7(this)},zW(J4n,"LPort/CombineIter",1302),sDn(208,1,$Zn,w7),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){xj()},uZn.Ob=function(){return Dx(this)},uZn.Pb=function(){return l$(this.a)?N3(this.a):N3(this.b)},zW(J4n,"LPort/CombineIter/1",208),sDn(1303,1,A2n,Bt),uZn.Lb=function(n){return Yz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).g.c.length},zW(J4n,"LPort/lambda$0$Type",1303),sDn(1304,1,A2n,Ht),uZn.Lb=function(n){return Zz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).e.c.length},zW(J4n,"LPort/lambda$1$Type",1304),sDn(1305,1,A2n,Ut),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},zW(J4n,"LPort/lambda$2$Type",1305),sDn(1306,1,A2n,Gt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},zW(J4n,"LPort/lambda$3$Type",1306),sDn(1307,1,A2n,qt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},zW(J4n,"LPort/lambda$4$Type",1307),sDn(1308,1,A2n,Xt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},zW(J4n,"LPort/lambda$5$Type",1308),sDn(30,305,{3:1,20:1,305:1,30:1,96:1,137:1},bQ),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},uZn.Ib=function(){return"L_"+Ten(this.b.b,this,0)+vIn(this.a)},zW(J4n,"Layer",30),sDn(1330,1,{},kk),zW(h6n,f6n,1330),sDn(1334,1,{},zt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),sDn(1337,1,{},Vt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),sDn(1331,1,QZn,Jd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,z3n,1331),sDn(1332,1,QZn,Yd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,l6n,1332),sDn(1333,1,{},Wt),uZn.Kb=function(n){return new fX(null,new h3(KJ(uG(n,74)),16))},zW(h6n,b6n,1333),sDn(1335,1,y1n,Zd),uZn.Mb=function(n){return DN(this.a,uG(n,27))},zW(h6n,w6n,1335),sDn(1336,1,{},Qt),uZn.Kb=function(n){return new fX(null,new h3(FJ(uG(n,74)),16))},zW(h6n,"ElkGraphImporter/lambda$5$Type",1336),sDn(1338,1,y1n,ng),uZn.Mb=function(n){return xN(this.a,uG(n,27))},zW(h6n,"ElkGraphImporter/lambda$7$Type",1338),sDn(1339,1,y1n,Jt),uZn.Mb=function(n){return XY(uG(n,74))},zW(h6n,"ElkGraphImporter/lambda$8$Type",1339),sDn(1297,1,{},Vf),zW(h6n,"ElkGraphLayoutTransferrer",1297),sDn(1298,1,y1n,tg),uZn.Mb=function(n){return IF(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),sDn(1299,1,QZn,eg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),sDn(1300,1,y1n,ig),uZn.Mb=function(n){return KK(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),sDn(1301,1,QZn,rg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),sDn(819,1,{},xF),zW(d6n,"BiLinkedHashMultiMap",819),sDn(1550,1,Q4n,Yt),uZn.Kf=function(n,t){Bon(uG(n,36),t)},zW(d6n,"CommentNodeMarginCalculator",1550),sDn(1551,1,{},Zt),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"CommentNodeMarginCalculator/lambda$0$Type",1551),sDn(1552,1,QZn,ne),uZn.Cd=function(n){bXn(uG(n,10))},zW(d6n,"CommentNodeMarginCalculator/lambda$1$Type",1552),sDn(1553,1,Q4n,te),uZn.Kf=function(n,t){WFn(uG(n,36),t)},zW(d6n,"CommentPostprocessor",1553),sDn(1554,1,Q4n,ee),uZn.Kf=function(n,t){kQn(uG(n,36),t)},zW(d6n,"CommentPreprocessor",1554),sDn(1555,1,Q4n,ie),uZn.Kf=function(n,t){KKn(uG(n,36),t)},zW(d6n,"ConstraintsPostprocessor",1555),sDn(1556,1,Q4n,re),uZn.Kf=function(n,t){Csn(uG(n,36),t)},zW(d6n,"EdgeAndLayerConstraintEdgeReverser",1556),sDn(1557,1,Q4n,ce),uZn.Kf=function(n,t){amn(uG(n,36),t)},zW(d6n,"EndLabelPostprocessor",1557),sDn(1558,1,{},ae),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPostprocessor/lambda$0$Type",1558),sDn(1559,1,y1n,oe),uZn.Mb=function(n){return q8(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$1$Type",1559),sDn(1560,1,QZn,ue),uZn.Cd=function(n){_En(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$2$Type",1560),sDn(1561,1,Q4n,se),uZn.Kf=function(n,t){AAn(uG(n,36),t)},zW(d6n,"EndLabelPreprocessor",1561),sDn(1562,1,{},he),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPreprocessor/lambda$0$Type",1562),sDn(1563,1,QZn,NB),uZn.Cd=function(n){oP(this.a,this.b,this.c,uG(n,10))},uZn.a=0,uZn.b=0,uZn.c=!1,zW(d6n,"EndLabelPreprocessor/lambda$1$Type",1563),sDn(1564,1,y1n,fe),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelPreprocessor/lambda$2$Type",1564),sDn(1565,1,QZn,cg),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$3$Type",1565),sDn(1566,1,y1n,le),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelPreprocessor/lambda$4$Type",1566),sDn(1567,1,QZn,ag),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$5$Type",1567),sDn(1615,1,Q4n,_f),uZn.Kf=function(n,t){Ddn(uG(n,36),t)},zW(d6n,"EndLabelSorter",1615),sDn(1616,1,b2n,be),uZn.Ne=function(n,t){return okn(uG(n,466),uG(t,466))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"EndLabelSorter/1",1616),sDn(466,1,{466:1},oZ),zW(d6n,"EndLabelSorter/LabelGroup",466),sDn(1617,1,{},we),uZn.Kb=function(n){return VS(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelSorter/lambda$0$Type",1617),sDn(1618,1,y1n,de),uZn.Mb=function(n){return VS(),uG(n,10).k==(zIn(),dbt)},zW(d6n,"EndLabelSorter/lambda$1$Type",1618),sDn(1619,1,QZn,ge),uZn.Cd=function(n){VIn(uG(n,10))},zW(d6n,"EndLabelSorter/lambda$2$Type",1619),sDn(1620,1,y1n,pe),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelSorter/lambda$3$Type",1620),sDn(1621,1,y1n,me),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelSorter/lambda$4$Type",1621),sDn(1568,1,Q4n,ve),uZn.Kf=function(n,t){GXn(this,uG(n,36))},uZn.b=0,uZn.c=0,zW(d6n,"FinalSplineBendpointsCalculator",1568),sDn(1569,1,{},ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),sDn(1570,1,{},ye),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),sDn(1571,1,y1n,Me),uZn.Mb=function(n){return!v9(uG(n,18))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),sDn(1572,1,y1n,Te),uZn.Mb=function(n){return vR(uG(n,18),(GYn(),Tmt))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),sDn(1573,1,QZn,og),uZn.Cd=function(n){YHn(this.a,uG(n,131))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),sDn(1574,1,QZn,je),uZn.Cd=function(n){_An(uG(n,18).a)},zW(d6n,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),sDn(803,1,Q4n,ug),uZn.Kf=function(n,t){fVn(this,uG(n,36),t)},zW(d6n,"GraphTransformer",803),sDn(517,22,{3:1,34:1,22:1,517:1},PC);var Lbt,Nbt,$bt,Dbt=_cn(d6n,"GraphTransformer/Mode",517,Oat,f1,zH);sDn(1575,1,Q4n,Ee),uZn.Kf=function(n,t){wRn(uG(n,36),t)},zW(d6n,"HierarchicalNodeResizingProcessor",1575),sDn(1576,1,Q4n,Se),uZn.Kf=function(n,t){don(uG(n,36),t)},zW(d6n,"HierarchicalPortConstraintProcessor",1576),sDn(1577,1,b2n,Pe),uZn.Ne=function(n,t){return wyn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortConstraintProcessor/NodeComparator",1577),sDn(1578,1,Q4n,Ce),uZn.Kf=function(n,t){HGn(uG(n,36),t)},zW(d6n,"HierarchicalPortDummySizeProcessor",1578),sDn(1579,1,Q4n,Ie),uZn.Kf=function(n,t){z_n(this,uG(n,36),t)},uZn.a=0,zW(d6n,"HierarchicalPortOrthogonalEdgeRouter",1579),sDn(1580,1,b2n,Oe),uZn.Ne=function(n,t){return Ox(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/1",1580),sDn(1581,1,b2n,Ae),uZn.Ne=function(n,t){return Dtn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/2",1581),sDn(1582,1,Q4n,Le),uZn.Kf=function(n,t){tIn(uG(n,36),t)},zW(d6n,"HierarchicalPortPositionProcessor",1582),sDn(1583,1,Q4n,Wf),uZn.Kf=function(n,t){SJn(this,uG(n,36))},uZn.a=0,uZn.c=0,zW(d6n,"HighDegreeNodeLayeringProcessor",1583),sDn(580,1,{580:1},Ne),uZn.b=-1,uZn.d=-1,zW(d6n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),sDn(1584,1,{},$e),uZn.Kb=function(n){return HB(),qgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),sDn(1585,1,{},De),uZn.Kb=function(n){return HB(),Xgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),sDn(1591,1,Q4n,xe),uZn.Kf=function(n,t){TGn(this,uG(n,36),t)},zW(d6n,"HyperedgeDummyMerger",1591),sDn(804,1,{},xB),uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(d6n,"HyperedgeDummyMerger/MergeState",804),sDn(1592,1,{},Re),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"HyperedgeDummyMerger/lambda$0$Type",1592),sDn(1593,1,{},Ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,10).j,16))},zW(d6n,"HyperedgeDummyMerger/lambda$1$Type",1593),sDn(1594,1,QZn,Fe),uZn.Cd=function(n){uG(n,12).p=-1},zW(d6n,"HyperedgeDummyMerger/lambda$2$Type",1594),sDn(1595,1,Q4n,_e),uZn.Kf=function(n,t){kGn(uG(n,36),t)},zW(d6n,"HypernodesProcessor",1595),sDn(1596,1,Q4n,Be),uZn.Kf=function(n,t){_Gn(uG(n,36),t)},zW(d6n,"InLayerConstraintProcessor",1596),sDn(1597,1,Q4n,He),uZn.Kf=function(n,t){Nun(uG(n,36),t)},zW(d6n,"InnermostNodeMarginCalculator",1597),sDn(1598,1,Q4n,Ue),uZn.Kf=function(n,t){gQn(this,uG(n,36))},uZn.a=T0n,uZn.b=T0n,uZn.c=M0n,uZn.d=M0n;var xbt,Rbt,Kbt,Fbt,_bt,Bbt,Hbt,Ubt,Gbt,qbt,Xbt,zbt,Vbt,Wbt,Qbt,Jbt,Ybt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,owt,uwt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,mwt,vwt,kwt,ywt,Mwt,Twt,jwt,Ewt,Swt,Pwt,Cwt,Iwt,Owt,Awt,Lwt,Nwt,$wt,Dwt,xwt,Rwt,Kwt,Fwt=zW(d6n,"InteractiveExternalPortPositioner",1598);sDn(1599,1,{},Ge),uZn.Kb=function(n){return uG(n,18).d.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$0$Type",1599),sDn(1600,1,{},sg),uZn.Kb=function(n){return Lx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$1$Type",1600),sDn(1601,1,{},qe),uZn.Kb=function(n){return uG(n,18).c.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$2$Type",1601),sDn(1602,1,{},hg),uZn.Kb=function(n){return Nx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$3$Type",1602),sDn(1603,1,{},fg),uZn.Kb=function(n){return XF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$4$Type",1603),sDn(1604,1,{},lg),uZn.Kb=function(n){return zF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$5$Type",1604),sDn(81,22,{3:1,34:1,22:1,81:1,196:1},CC),uZn.dg=function(){switch(this.g){case 15:return new fc;case 22:return new lc;case 47:return new dc;case 28:case 35:return new ei;case 32:return new Yt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new ug((Aun(),Obt));case 0:return new ug((Aun(),Ibt));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new ve;case 55:return new Ee;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new Le;case 9:return new Wf;case 49:return new Ux;case 37:return new xe;case 43:return new _e;case 27:return new Be;case 30:return new He;case 3:return new Ue;case 18:return new ze;case 29:return new Ve;case 5:return new Qf;case 50:return new Xe;case 34:return new Jf;case 36:return new ii;case 52:return new _f;case 11:return new ri;case 7:return new Yf;case 39:return new ci;case 45:return new ai;case 16:return new oi;case 10:return new RI;case 48:return new fi;case 21:return new li;case 23:return new zy((ean(),BEt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new rl;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new jk;case 46:return new $i;case 31:return new _F;case 14:return new Wi;case 26:return new Mc;case 20:return new nr;case 24:return new zy((ean(),HEt));default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var _wt,Bwt,Hwt,Uwt,Gwt,qwt,Xwt,zwt,Vwt=_cn(d6n,k6n,81,Oat,bKn,XB);sDn(1605,1,Q4n,ze),uZn.Kf=function(n,t){bQn(uG(n,36),t)},zW(d6n,"InvertedPortProcessor",1605),sDn(1606,1,Q4n,Ve),uZn.Kf=function(n,t){DHn(uG(n,36),t)},zW(d6n,"LabelAndNodeSizeProcessor",1606),sDn(1607,1,y1n,We),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),sDn(1608,1,y1n,Qe),uZn.Mb=function(n){return uG(n,10).k==(zIn(),lbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),sDn(1609,1,QZn,KB),uZn.Cd=function(n){uP(this.b,this.a,this.c,uG(n,10))},uZn.a=!1,uZn.c=!1,zW(d6n,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),sDn(1610,1,Q4n,Qf),uZn.Kf=function(n,t){EWn(uG(n,36),t)},zW(d6n,"LabelDummyInserter",1610),sDn(1611,1,A2n,Je),uZn.Lb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},zW(d6n,"LabelDummyInserter/1",1611),sDn(1612,1,Q4n,Xe),uZn.Kf=function(n,t){eWn(uG(n,36),t)},zW(d6n,"LabelDummyRemover",1612),sDn(1613,1,y1n,Ye),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(d6n,"LabelDummyRemover/lambda$0$Type",1613),sDn(1378,1,Q4n,Jf),uZn.Kf=function(n,t){UVn(this,uG(n,36),t)},uZn.a=null,zW(d6n,"LabelDummySwitcher",1378),sDn(293,1,{293:1},oHn),uZn.c=0,uZn.d=null,uZn.f=0,zW(d6n,"LabelDummySwitcher/LabelDummyInfo",293),sDn(1379,1,{},Ze),uZn.Kb=function(n){return Pun(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"LabelDummySwitcher/lambda$0$Type",1379),sDn(1380,1,y1n,ni),uZn.Mb=function(n){return Pun(),uG(n,10).k==(zIn(),bbt)},zW(d6n,"LabelDummySwitcher/lambda$1$Type",1380),sDn(1381,1,{},bg),uZn.Kb=function(n){return FK(this.a,uG(n,10))},zW(d6n,"LabelDummySwitcher/lambda$2$Type",1381),sDn(1382,1,QZn,wg),uZn.Cd=function(n){gQ(this.a,uG(n,293))},zW(d6n,"LabelDummySwitcher/lambda$3$Type",1382),sDn(1383,1,b2n,ti),uZn.Ne=function(n,t){return nV(uG(n,293),uG(t,293))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"LabelDummySwitcher/lambda$4$Type",1383),sDn(802,1,Q4n,ei),uZn.Kf=function(n,t){Dnn(uG(n,36),t)},zW(d6n,"LabelManagementProcessor",802),sDn(1614,1,Q4n,ii),uZn.Kf=function(n,t){jFn(uG(n,36),t)},zW(d6n,"LabelSideSelector",1614),sDn(1622,1,Q4n,ri),uZn.Kf=function(n,t){yqn(uG(n,36),t)},zW(d6n,"LayerConstraintPostprocessor",1622),sDn(1623,1,Q4n,Yf),uZn.Kf=function(n,t){vDn(uG(n,36),t)},zW(d6n,"LayerConstraintPreprocessor",1623),sDn(371,22,{3:1,34:1,22:1,371:1},IC);var Wwt,Qwt,Jwt,Ywt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt=_cn(d6n,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Oat,G6,zB);sDn(1624,1,Q4n,ci),uZn.Kf=function(n,t){zzn(uG(n,36),t)},zW(d6n,"LayerSizeAndGraphHeightCalculator",1624),sDn(1625,1,Q4n,ai),uZn.Kf=function(n,t){dRn(uG(n,36),t)},zW(d6n,"LongEdgeJoiner",1625),sDn(1626,1,Q4n,oi),uZn.Kf=function(n,t){lzn(uG(n,36),t)},zW(d6n,"LongEdgeSplitter",1626),sDn(1627,1,Q4n,RI),uZn.Kf=function(n,t){VWn(this,uG(n,36),t)},uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,zW(d6n,"NodePromotion",1627),sDn(1628,1,b2n,ui),uZn.Ne=function(n,t){return $ln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/1",1628),sDn(1629,1,b2n,si),uZn.Ne=function(n,t){return Dln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/2",1629),sDn(1630,1,{},hi),uZn.Kb=function(n){return uG(n,42),UB(),qx(),!0},uZn.Fb=function(n){return this===n},zW(d6n,"NodePromotion/lambda$0$Type",1630),sDn(1631,1,{},mg),uZn.Kb=function(n){return P0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$1$Type",1631),sDn(1632,1,{},vg),uZn.Kb=function(n){return S0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$2$Type",1632),sDn(1633,1,Q4n,fi),uZn.Kf=function(n,t){wJn(uG(n,36),t)},zW(d6n,"NorthSouthPortPostprocessor",1633),sDn(1634,1,Q4n,li),uZn.Kf=function(n,t){FQn(uG(n,36),t)},zW(d6n,"NorthSouthPortPreprocessor",1634),sDn(1635,1,b2n,bi),uZn.Ne=function(n,t){return Qsn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NorthSouthPortPreprocessor/lambda$0$Type",1635),sDn(1636,1,Q4n,wi),uZn.Kf=function(n,t){HUn(uG(n,36),t)},zW(d6n,"PartitionMidprocessor",1636),sDn(1637,1,y1n,di),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionMidprocessor/lambda$0$Type",1637),sDn(1638,1,QZn,kg),uZn.Cd=function(n){zY(this.a,uG(n,10))},zW(d6n,"PartitionMidprocessor/lambda$1$Type",1638),sDn(1639,1,Q4n,gi),uZn.Kf=function(n,t){JRn(uG(n,36),t)},zW(d6n,"PartitionPostprocessor",1639),sDn(1640,1,Q4n,pi),uZn.Kf=function(n,t){M$n(uG(n,36),t)},zW(d6n,"PartitionPreprocessor",1640),sDn(1641,1,y1n,mi),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionPreprocessor/lambda$0$Type",1641),sDn(1642,1,{},vi),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"PartitionPreprocessor/lambda$1$Type",1642),sDn(1643,1,y1n,ki),uZn.Mb=function(n){return pkn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$2$Type",1643),sDn(1644,1,QZn,yi),uZn.Cd=function(n){rfn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$3$Type",1644),sDn(1645,1,Q4n,rl),uZn.Kf=function(n,t){bUn(uG(n,36),t)},zW(d6n,"PortListSorter",1645),sDn(1648,1,b2n,Mi),uZn.Ne=function(n,t){return Q5(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$0$Type",1648),sDn(1650,1,b2n,Ti),uZn.Ne=function(n,t){return hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$1$Type",1650),sDn(1646,1,{},ji),uZn.Kb=function(n){return Cln(),uG(n,12).e},zW(d6n,"PortListSorter/lambda$2$Type",1646),sDn(1647,1,{},Ei),uZn.Kb=function(n){return Cln(),uG(n,12).g},zW(d6n,"PortListSorter/lambda$3$Type",1647),sDn(1649,1,b2n,Si),uZn.Ne=function(n,t){return bjn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$4$Type",1649),sDn(1651,1,Q4n,Pi),uZn.Kf=function(n,t){FDn(uG(n,36),t)},zW(d6n,"PortSideProcessor",1651),sDn(1652,1,Q4n,Ci),uZn.Kf=function(n,t){SBn(uG(n,36),t)},zW(d6n,"ReversedEdgeRestorer",1652),sDn(1657,1,Q4n,jk),uZn.Kf=function(n,t){kTn(this,uG(n,36),t)},zW(d6n,"SelfLoopPortRestorer",1657),sDn(1658,1,{},Ii),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPortRestorer/lambda$0$Type",1658),sDn(1659,1,y1n,Oi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPortRestorer/lambda$1$Type",1659),sDn(1660,1,y1n,Ai),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPortRestorer/lambda$2$Type",1660),sDn(1661,1,{},Li),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopPortRestorer/lambda$3$Type",1661),sDn(1662,1,QZn,gg),uZn.Cd=function(n){gOn(this.a,uG(n,337))},zW(d6n,"SelfLoopPortRestorer/lambda$4$Type",1662),sDn(805,1,QZn,Ni),uZn.Cd=function(n){BOn(uG(n,105))},zW(d6n,"SelfLoopPortRestorer/lambda$5$Type",805),sDn(1663,1,Q4n,$i),uZn.Kf=function(n,t){oyn(uG(n,36),t)},zW(d6n,"SelfLoopPostProcessor",1663),sDn(1664,1,{},Di),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPostProcessor/lambda$0$Type",1664),sDn(1665,1,y1n,xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPostProcessor/lambda$1$Type",1665),sDn(1666,1,y1n,Ri),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPostProcessor/lambda$2$Type",1666),sDn(1667,1,QZn,Ki),uZn.Cd=function(n){gSn(uG(n,10))},zW(d6n,"SelfLoopPostProcessor/lambda$3$Type",1667),sDn(1668,1,{},Fi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPostProcessor/lambda$4$Type",1668),sDn(1669,1,QZn,dg),uZn.Cd=function(n){V6(this.a,uG(n,340))},zW(d6n,"SelfLoopPostProcessor/lambda$5$Type",1669),sDn(1670,1,y1n,_i),uZn.Mb=function(n){return!!uG(n,105).i},zW(d6n,"SelfLoopPostProcessor/lambda$6$Type",1670),sDn(1671,1,QZn,pg),uZn.Cd=function(n){eM(this.a,uG(n,105))},zW(d6n,"SelfLoopPostProcessor/lambda$7$Type",1671),sDn(1653,1,Q4n,Bi),uZn.Kf=function(n,t){Fxn(uG(n,36),t)},zW(d6n,"SelfLoopPreProcessor",1653),sDn(1654,1,{},Hi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPreProcessor/lambda$0$Type",1654),sDn(1655,1,{},Ui),uZn.Kb=function(n){return uG(n,340).a},zW(d6n,"SelfLoopPreProcessor/lambda$1$Type",1655),sDn(1656,1,QZn,Gi),uZn.Cd=function(n){v$(uG(n,18))},zW(d6n,"SelfLoopPreProcessor/lambda$2$Type",1656),sDn(1672,1,Q4n,_F),uZn.Kf=function(n,t){xIn(this,uG(n,36),t)},zW(d6n,"SelfLoopRouter",1672),sDn(1673,1,{},qi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopRouter/lambda$0$Type",1673),sDn(1674,1,y1n,Xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopRouter/lambda$1$Type",1674),sDn(1675,1,y1n,zi),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopRouter/lambda$2$Type",1675),sDn(1676,1,{},Vi),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopRouter/lambda$3$Type",1676),sDn(1677,1,QZn,OC),uZn.Cd=function(n){lY(this.a,this.b,uG(n,337))},zW(d6n,"SelfLoopRouter/lambda$4$Type",1677),sDn(1678,1,Q4n,Wi),uZn.Kf=function(n,t){tFn(uG(n,36),t)},zW(d6n,"SemiInteractiveCrossMinProcessor",1678),sDn(1679,1,y1n,Qi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),sDn(1680,1,y1n,Ji),uZn.Mb=function(n){return MX(uG(n,10))._b((jYn(),rTt))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),sDn(1681,1,b2n,Yi),uZn.Ne=function(n,t){return Eon(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),sDn(1682,1,{},Zi),uZn.Ve=function(n,t){return VY(uG(n,10),uG(t,10))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),sDn(1684,1,Q4n,nr),uZn.Kf=function(n,t){MXn(uG(n,36),t)},zW(d6n,"SortByInputModelProcessor",1684),sDn(1685,1,y1n,tr),uZn.Mb=function(n){return 0!=uG(n,12).g.c.length},zW(d6n,"SortByInputModelProcessor/lambda$0$Type",1685),sDn(1686,1,QZn,yg),uZn.Cd=function(n){ZOn(this.a,uG(n,12))},zW(d6n,"SortByInputModelProcessor/lambda$1$Type",1686),sDn(1759,817,{},Kon),uZn.df=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Zm,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new dr),new BC(this,t)),QAn(this,new ir),Prn(t,new rr),t.c.length=0,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new cr),new Tg(t)),QAn(this,new ar),Prn(t,new or),t.c.length=0,e=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new jg(this))),new ur),kS(new fX(null,new h3(this.c.a.a,16)),new NC(e,t)),QAn(this,new hr),Prn(t,new fr),t.c.length=0;break;case 3:i=new Zm,QAn(this,new er),r=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new Mg(this))),new sr),kS(JJ(new fX(null,new h3(this.c.a.b,16)),new lr),new DC(r,i)),QAn(this,new br),Prn(i,new wr),i.c.length=0;break;default:throw hv(new Hv)}},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation",1759),sDn(1760,1,A2n,er),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),sDn(1761,1,{},Mg),uZn.Ye=function(n){return $Ln(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),sDn(1769,1,M1n,AC),uZn.de=function(){TEn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),sDn(1771,1,A2n,ir),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),sDn(1772,1,QZn,rr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),sDn(1773,1,y1n,cr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),sDn(1775,1,QZn,Tg),uZn.Cd=function(n){tpn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),sDn(1774,1,M1n,xC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),sDn(1776,1,A2n,ar),uZn.Lb=function(n){return F$(uG(n,60).g,10)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),sDn(1777,1,QZn,or),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),sDn(1778,1,{},jg),uZn.Ye=function(n){return DLn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),sDn(1779,1,{},ur),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),sDn(1762,1,{},sr),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),sDn(1781,1,QZn,NC),uZn.Cd=function(n){uz(this.a,this.b,uG(n,316))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),sDn(1780,1,M1n,$C),uZn.de=function(){HDn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),sDn(1782,1,A2n,hr),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),sDn(1783,1,QZn,fr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),sDn(1763,1,y1n,lr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),sDn(1765,1,QZn,DC),uZn.Cd=function(n){sz(this.a,this.b,uG(n,60))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),sDn(1764,1,M1n,RC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),sDn(1766,1,A2n,br),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),sDn(1767,1,QZn,wr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),sDn(1768,1,y1n,dr),uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),sDn(1770,1,QZn,BC),uZn.Cd=function(n){mrn(this.a,this.b,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),sDn(1586,1,Q4n,Ux),uZn.Kf=function(n,t){yzn(this,uG(n,36),t)},zW(E6n,"HorizontalGraphCompactor",1586),sDn(1587,1,{},Eg),uZn.ff=function(n,t){var e,i;return $en(n,t)?0:(e=z4(n),i=z4(t),e&&e.k==(zIn(),lbt)||i&&i.k==(zIn(),lbt)?0:_x(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},uZn.gf=function(n,t){var e,i;return $en(n,t)?1:(e=z4(n),i=z4(t),Bx(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},zW(E6n,"HorizontalGraphCompactor/1",1587),sDn(1588,1,{},gr),uZn.ef=function(n,t){return JS(),0==n.a.i},zW(E6n,"HorizontalGraphCompactor/lambda$0$Type",1588),sDn(1589,1,{},Sg),uZn.ef=function(n,t){return ZY(this.a,n,t)},zW(E6n,"HorizontalGraphCompactor/lambda$1$Type",1589),sDn(1730,1,{},Sen),zW(E6n,"LGraphToCGraphTransformer",1730),sDn(1738,1,y1n,pr),uZn.Mb=function(n){return null!=n},zW(E6n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),sDn(1731,1,{},mr),uZn.Kb=function(n){return GB(),cpn(oIn(uG(uG(n,60).g,10),(GYn(),rmt)))},zW(E6n,"LGraphToCGraphTransformer/lambda$0$Type",1731),sDn(1732,1,{},vr),uZn.Kb=function(n){return GB(),_wn(uG(uG(n,60).g,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$1$Type",1732),sDn(1741,1,y1n,kr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,10)},zW(E6n,"LGraphToCGraphTransformer/lambda$10$Type",1741),sDn(1742,1,QZn,yr),uZn.Cd=function(n){jZ(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$11$Type",1742),sDn(1743,1,y1n,Mr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,154)},zW(E6n,"LGraphToCGraphTransformer/lambda$12$Type",1743),sDn(1747,1,QZn,Tr),uZn.Cd=function(n){Fwn(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$13$Type",1747),sDn(1744,1,QZn,Pg),uZn.Cd=function(n){WL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$14$Type",1744),sDn(1745,1,QZn,Cg),uZn.Cd=function(n){JL(this.a,uG(n,116))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$15$Type",1745),sDn(1746,1,QZn,Ig),uZn.Cd=function(n){QL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$16$Type",1746),sDn(1748,1,{},jr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$17$Type",1748),sDn(1749,1,y1n,Er),uZn.Mb=function(n){return GB(),v9(uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$18$Type",1749),sDn(1750,1,QZn,Og),uZn.Cd=function(n){fin(this.a,uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$19$Type",1750),sDn(1734,1,QZn,Ag),uZn.Cd=function(n){Q3(this.a,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$2$Type",1734),sDn(1751,1,{},Sr),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$20$Type",1751),sDn(1752,1,{},Pr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$21$Type",1752),sDn(1753,1,{},Cr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$22$Type",1753),sDn(1754,1,y1n,Ir),uZn.Mb=function(n){return Hx(uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$23$Type",1754),sDn(1755,1,QZn,Lg),uZn.Cd=function(n){pLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$24$Type",1755),sDn(1733,1,QZn,HC),uZn.Cd=function(n){P5(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$3$Type",1733),sDn(1735,1,{},Or),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$4$Type",1735),sDn(1736,1,{},Ar),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$5$Type",1736),sDn(1737,1,{},Lr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$6$Type",1737),sDn(1739,1,QZn,Ng),uZn.Cd=function(n){xLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$8$Type",1739),sDn(1740,1,QZn,UC),uZn.Cd=function(n){k$(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$9$Type",1740),sDn(1729,1,{},Nr),uZn.cf=function(n){var t,e,i,r,c;for(this.a=n,this.d=new ak,this.c=Inn(Tst,EZn,125,this.a.a.a.c.length,0,1),this.b=0,e=new Ww(this.a.a.a);e.a<e.c.c.length;)(t=uG(N3(e),316)).d=this.b,c=jx(KS(new sk,t),this.d),this.c[this.b]=c,++this.b;for(mWn(this),WQn(this),HRn(this),JHn(_B(this.d),new fy),r=new Ww(this.a.a.b);r.a<r.c.c.length;)(i=uG(N3(r),60)).d.c=this.c[i.a.d].e+i.b.a},uZn.b=0,zW(E6n,"NetworkSimplexCompaction",1729),sDn(154,1,{34:1,154:1},Hqn),uZn.Fd=function(n){return Oin(this,uG(n,154))},uZn.Ib=function(){return _wn(this)},zW(E6n,"VerticalSegment",154),sDn(841,1,{},IPn),uZn.c=0,uZn.e=0,uZn.i=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter",841),sDn(677,1,{677:1},Uun),uZn.Ib=function(){return"AdjacencyList [node="+this.d+", adjacencies= "+this.a+"]"},uZn.b=0,uZn.c=0,uZn.f=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList",677),sDn(294,1,{34:1,294:1},$R),uZn.Fd=function(n){return lq(this,uG(n,294))},uZn.Ib=function(){return"Adjacency [position="+this.c+", cardinality="+this.a+", currentCardinality="+this.b+"]"},uZn.a=0,uZn.b=0,uZn.c=0,zW(S6n,"BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency",294),sDn(2026,1,{},_On),uZn.b=0,uZn.e=!1,zW(S6n,"CrossingMatrixFiller",2026);var odt,udt,sdt,hdt,fdt=Iq(P6n,"IInitializable");sDn(1867,1,C6n,qC),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.eg=function(){return this.c!=(ean(),BEt)},uZn.fg=function(){this.e=Inn(YHt,W1n,28,this.d,15,1)},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.jg=function(n,t,e,i){++this.d},uZn.kg=function(){return!0},uZn.lg=function(n,t,e,i){return iwn(this,n,t,e),p8(this,t)},uZn.mg=function(n,t){var e;return iwn(this,n,e=OT(t,n.length),t),Tfn(this,e)},uZn.d=0,zW(S6n,"GreedySwitchHeuristic",1867),sDn(2029,1,{},sX),uZn.b=0,uZn.d=0,zW(S6n,"NorthSouthEdgeNeighbouringNodeCrossingsCounter",2029),sDn(2016,1,{},eBn),uZn.a=!1,zW(S6n,"SwitchDecider",2016),sDn(105,1,{105:1},cAn),uZn.a=null,uZn.c=null,uZn.i=null,zW(I6n,"SelfHyperLoop",105),sDn(2013,1,{},vkn),uZn.c=0,uZn.e=0,zW(I6n,"SelfHyperLoopLabels",2013),sDn(421,22,{3:1,34:1,22:1,421:1},XC);var ldt,bdt,wdt,ddt,gdt,pdt,mdt=_cn(I6n,"SelfHyperLoopLabels/Alignment",421,Oat,U6,VB);sDn(340,1,{340:1},m7),zW(I6n,"SelfLoopEdge",340),sDn(337,1,{337:1},kkn),uZn.a=!1,zW(I6n,"SelfLoopHolder",337),sDn(1790,1,y1n,qr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopHolder/lambda$0$Type",1790),sDn(113,1,{113:1},Bkn),uZn.a=!1,uZn.c=!1,zW(I6n,"SelfLoopPort",113),sDn(1855,1,y1n,Xr),uZn.Mb=function(n){return v9(uG(n,18))},zW(I6n,"SelfLoopPort/lambda$0$Type",1855),sDn(375,22,{3:1,34:1,22:1,375:1},zC);var vdt,kdt,ydt,Mdt,Tdt,jdt,Edt,Sdt,Pdt=_cn(I6n,"SelfLoopType",375,Oat,s9,WB);sDn(1798,1,{},sl),zW(O6n,"PortRestorer",1798),sDn(372,22,{3:1,34:1,22:1,372:1},VC);var Cdt,Idt,Odt,Adt,Ldt,Ndt,$dt,Ddt,xdt,Rdt=_cn(O6n,"PortRestorer/PortSideArea",372,Oat,_2,qB);sDn(1799,1,{},Dr),uZn.Kb=function(n){return jIn(),uG(n,15).Oc()},zW(O6n,"PortRestorer/lambda$0$Type",1799),sDn(1800,1,QZn,xr),uZn.Cd=function(n){jIn(),uG(n,113).c=!1},zW(O6n,"PortRestorer/lambda$1$Type",1800),sDn(1809,1,y1n,Rr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),_Rt)},zW(O6n,"PortRestorer/lambda$10$Type",1809),sDn(1810,1,{},Kr),uZn.Kb=function(n){return jIn(),uG(n,113).d},zW(O6n,"PortRestorer/lambda$11$Type",1810),sDn(1811,1,QZn,$g),uZn.Cd=function(n){ZT(this.a,uG(n,12))},zW(O6n,"PortRestorer/lambda$12$Type",1811),sDn(1801,1,QZn,Dg),uZn.Cd=function(n){SR(this.a,uG(n,105))},zW(O6n,"PortRestorer/lambda$2$Type",1801),sDn(1802,1,b2n,Fr),uZn.Ne=function(n,t){return wcn(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortRestorer/lambda$3$Type",1802),sDn(1803,1,y1n,_r),uZn.Mb=function(n){return jIn(),uG(n,113).c},zW(O6n,"PortRestorer/lambda$4$Type",1803),sDn(1804,1,y1n,Br),uZn.Mb=function(n){return Vun(uG(n,12))},zW(O6n,"PortRestorer/lambda$5$Type",1804),sDn(1805,1,y1n,$r),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),yRt)},zW(O6n,"PortRestorer/lambda$6$Type",1805),sDn(1806,1,y1n,Hr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),kRt)},zW(O6n,"PortRestorer/lambda$7$Type",1806),sDn(1807,1,y1n,Ur),uZn.Mb=function(n){return z6(uG(n,12))},zW(O6n,"PortRestorer/lambda$8$Type",1807),sDn(1808,1,y1n,Gr),uZn.Mb=function(n){return jIn(),uG(n,12).j==(KQn(),KRt)},zW(O6n,"PortRestorer/lambda$9$Type",1808),sDn(276,22,{3:1,34:1,22:1,276:1},yY);var Kdt,Fdt,_dt,Bdt,Hdt,Udt,Gdt,qdt,Xdt=_cn(O6n,"PortSideAssigner/Target",276,Oat,drn,QB);sDn(1791,1,{},Vr),uZn.Kb=function(n){return JJ(new fX(null,new h3(uG(n,105).j,16)),new Zr)},zW(O6n,"PortSideAssigner/lambda$1$Type",1791),sDn(1792,1,{},Wr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$2$Type",1792),sDn(1793,1,QZn,Qr),uZn.Cd=function(n){NLn(uG(n,12),(KQn(),yRt))},zW(O6n,"PortSideAssigner/lambda$3$Type",1793),sDn(1794,1,{},Jr),uZn.Kb=function(n){return uG(n,113).d},zW(O6n,"PortSideAssigner/lambda$4$Type",1794),sDn(1795,1,QZn,xg),uZn.Cd=function(n){yv(this.a,uG(n,12))},zW(O6n,"PortSideAssigner/lambda$5$Type",1795),sDn(1796,1,b2n,zr),uZn.Ne=function(n,t){return YQ(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$6$Type",1796),sDn(1797,1,b2n,Yr),uZn.Ne=function(n,t){return EG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O6n,"PortSideAssigner/lambda$7$Type",1797),sDn(820,1,y1n,Zr),uZn.Mb=function(n){return uG(n,113).c},zW(O6n,"PortSideAssigner/lambda$8$Type",820),sDn(2108,1,{}),zW(A6n,"AbstractSelfLoopRouter",2108),sDn(1816,1,b2n,nc),uZn.Ne=function(n,t){return P_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,t3n,1816),sDn(1817,1,b2n,tc),uZn.Ne=function(n,t){return S_(uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,e3n,1817),sDn(1856,2108,{},ec),uZn.ng=function(n,t,e){return e},zW(A6n,"OrthogonalSelfLoopRouter",1856),sDn(1858,1,QZn,GC),uZn.Cd=function(n){Jvn(this.b,this.a,uG(n,8))},zW(A6n,"OrthogonalSelfLoopRouter/lambda$0$Type",1858),sDn(1857,1856,{},ic),uZn.ng=function(n,t,e){var i,r;return sR(e,0,JF(D$((i=n.c.d).n),i.a)),aq(e,JF(D$((r=n.d.d).n),r.a)),LUn(e)},zW(A6n,"PolylineSelfLoopRouter",1857),sDn(1812,1,{},hl),uZn.a=null,zW(A6n,"RoutingDirector",1812),sDn(1813,1,b2n,rc),uZn.Ne=function(n,t){return MG(uG(n,113),uG(t,113))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingDirector/lambda$0$Type",1813),sDn(1814,1,{},cc),uZn.Kb=function(n){return YS(),uG(n,105).j},zW(A6n,"RoutingDirector/lambda$1$Type",1814),sDn(1815,1,QZn,ac),uZn.Cd=function(n){YS(),uG(n,15).jd(Fdt)},zW(A6n,"RoutingDirector/lambda$2$Type",1815),sDn(1818,1,{},oc),zW(A6n,"RoutingSlotAssigner",1818),sDn(1819,1,y1n,Rg),uZn.Mb=function(n){return wA(this.a,uG(n,105))},zW(A6n,"RoutingSlotAssigner/lambda$0$Type",1819),sDn(1820,1,b2n,Kg),uZn.Ne=function(n,t){return bX(this.a,uG(n,105),uG(t,105))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(A6n,"RoutingSlotAssigner/lambda$1$Type",1820),sDn(1859,1856,{},uc),uZn.ng=function(n,t,e){var i,r,c,a;return i=uM(pK(eyn(n.b.g.b,(jYn(),pTt)))),Xxn(n,t,e,a=new UR(Uhn(cT(PNt,1),zZn,8,0,[(c=n.c.d,JF(new eN(c.n),c.a))])),i),aq(a,JF(new eN((r=n.d.d).n),r.a)),$Mn(new jqn(a))},zW(A6n,"SplineSelfLoopRouter",1859),sDn(586,1,b2n,xon,KG),uZn.Ne=function(n,t){return rYn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L6n,"ModelOrderNodeComparator",586),sDn(1821,1,y1n,sc),uZn.Mb=function(n){return 0!=uG(n,12).e.c.length},zW(L6n,"ModelOrderNodeComparator/lambda$0$Type",1821),sDn(821,1,b2n,Gbn,j6),uZn.Ne=function(n,t){return Jz(this,n,t)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.b=!1,zW(L6n,"ModelOrderPortComparator",821),sDn(815,1,{},hc),uZn.og=function(n,t){var i,r,c,a;for(c=hOn(t),i=new Zm,a=t.f/c,r=1;r<c;++r)kD(i,xwn(pz(Bsn(e.Math.round(r*a)))));return i},uZn.pg=function(){return!1},zW(N6n,"ARDCutIndexHeuristic",815),sDn(1544,1,Q4n,fc),uZn.Kf=function(n,t){mHn(uG(n,36),t)},zW(N6n,"BreakingPointInserter",1544),sDn(313,1,{313:1},O5),uZn.Ib=function(){var n;return(n=new WM).a+="BPInfo[",n.a+="\n\tstart=",QA(n,this.i),n.a+="\n\tend=",QA(n,this.a),n.a+="\n\tnodeStartEdge=",QA(n,this.e),n.a+="\n\tstartEndEdge=",QA(n,this.j),n.a+="\n\toriginalEdge=",QA(n,this.f),n.a+="\n\tstartInLayerDummy=",QA(n,this.k),n.a+="\n\tstartInLayerEdge=",QA(n,this.n),n.a+="\n\tendInLayerDummy=",QA(n,this.b),n.a+="\n\tendInLayerEdge=",QA(n,this.c),n.a},zW(N6n,"BreakingPointInserter/BPInfo",313),sDn(661,1,{661:1},Vg),uZn.a=!1,uZn.b=0,uZn.c=0,zW(N6n,"BreakingPointInserter/Cut",661),sDn(1545,1,Q4n,lc),uZn.Kf=function(n,t){rRn(uG(n,36),t)},zW(N6n,"BreakingPointProcessor",1545),sDn(1546,1,y1n,bc),uZn.Mb=function(n){return Lin(uG(n,10))},zW(N6n,"BreakingPointProcessor/0methodref$isEnd$Type",1546),sDn(1547,1,y1n,wc),uZn.Mb=function(n){return Nin(uG(n,10))},zW(N6n,"BreakingPointProcessor/1methodref$isStart$Type",1547),sDn(1548,1,Q4n,dc),uZn.Kf=function(n,t){URn(this,uG(n,36),t)},zW(N6n,"BreakingPointRemover",1548),sDn(1549,1,QZn,gc),uZn.Cd=function(n){uG(n,131).k=!0},zW(N6n,"BreakingPointRemover/lambda$0$Type",1549),sDn(811,1,{},dDn),uZn.b=0,uZn.e=0,uZn.f=0,uZn.j=0,zW(N6n,"GraphStats",811),sDn(812,1,{},pc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/0methodref$max$Type",812),sDn(813,1,{},mc),uZn.Ve=function(n,t){return e.Math.max(uM(pK(n)),uM(pK(t)))},zW(N6n,"GraphStats/2methodref$max$Type",813),sDn(1726,1,{},vc),uZn.Ve=function(n,t){return TU(pK(n),pK(t))},zW(N6n,"GraphStats/lambda$1$Type",1726),sDn(1727,1,{},Fg),uZn.Kb=function(n){return Hkn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$2$Type",1727),sDn(1728,1,{},_g),uZn.Kb=function(n){return FRn(this.a,uG(n,30))},zW(N6n,"GraphStats/lambda$6$Type",1728),sDn(814,1,{},kc),uZn.og=function(n,t){return uG(oIn(n,(jYn(),FTt)),15)||(hZ(),hZ(),zot)},uZn.pg=function(){return!1},zW(N6n,"ICutIndexCalculator/ManualCutIndexCalculator",814),sDn(816,1,{},yc),uZn.og=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(null==t.n&&TTn(t),y=t.n,null==t.d&&TTn(t),s=t.d,(k=Inn(eUt,I0n,28,y.length,15,1))[0]=y[0],m=y[0],h=1;h<y.length;h++)k[h]=k[h-1]+y[h],m+=y[h];for(c=hOn(t)-1,o=uG(oIn(n,(jYn(),_Tt)),17).a,r=T0n,i=new Zm,b=e.Math.max(0,c-o);b<=e.Math.min(t.f-1,c+o);b++){if(g=m/(b+1),p=0,f=1,a=new Zm,v=T0n,l=0,u=0,d=s[0],0==b)v=m,null==t.g&&(t.g=cun(t,new mc)),u=uM(t.g);else{for(;f<t.f;)k[f-1]-p>=g&&(kD(a,xwn(f)),v=e.Math.max(v,k[f-1]-l),u+=d,p+=k[f-1]-p,l=k[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;u+=d}(w=e.Math.min(1/v,1/t.b/u))>r&&(r=w,i=a)}return i},uZn.pg=function(){return!1},zW(N6n,"MSDCutIndexHeuristic",816),sDn(1683,1,Q4n,Mc),uZn.Kf=function(n,t){Cqn(uG(n,36),t)},zW(N6n,"SingleEdgeGraphWrapper",1683),sDn(232,22,{3:1,34:1,22:1,232:1},QC);var zdt,Vdt,Wdt,Qdt=_cn($6n,"CenterEdgeLabelPlacementStrategy",232,Oat,znn,JB);sDn(431,22,{3:1,34:1,22:1,431:1},WC);var Jdt,Ydt,Zdt,ngt,tgt=_cn($6n,"ConstraintCalculationStrategy",431,Oat,w1,YB);sDn(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},JC),uZn.dg=function(){return ZLn(this)},uZn.qg=function(){return ZLn(this)};var egt,igt,rgt,cgt,agt=_cn($6n,"CrossingMinimizationStrategy",322,Oat,B2,ZB);sDn(351,22,{3:1,34:1,22:1,351:1},YC);var ogt,ugt,sgt,hgt,fgt,lgt,bgt=_cn($6n,"CuttingStrategy",351,Oat,H2,nH);sDn(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},ZC),uZn.dg=function(){return ODn(this)},uZn.qg=function(){return ODn(this)};var wgt,dgt,ggt,pgt=_cn($6n,"CycleBreakingStrategy",348,Oat,h9,tH);sDn(428,22,{3:1,34:1,22:1,428:1},nI);var mgt,vgt,kgt,ygt,Mgt=_cn($6n,"DirectionCongruency",428,Oat,b1,eH);sDn(460,22,{3:1,34:1,22:1,460:1},tI);var Tgt,jgt,Egt,Sgt,Pgt,Cgt,Igt,Ogt=_cn($6n,"EdgeConstraint",460,Oat,U2,sH);sDn(283,22,{3:1,34:1,22:1,283:1},eI);var Agt,Lgt,Ngt,$gt=_cn($6n,"EdgeLabelSideSelection",283,Oat,Gnn,hH);sDn(488,22,{3:1,34:1,22:1,488:1},iI);var Dgt,xgt,Rgt,Kgt,Fgt,_gt,Bgt,Hgt=_cn($6n,"EdgeStraighteningStrategy",488,Oat,y1,fH);sDn(281,22,{3:1,34:1,22:1,281:1},rI);var Ugt,Ggt,qgt,Xgt,zgt,Vgt,Wgt,Qgt=_cn($6n,"FixedAlignment",281,Oat,qnn,uH);sDn(282,22,{3:1,34:1,22:1,282:1},cI);var Jgt,Ygt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,opt,upt=_cn($6n,"GraphCompactionStrategy",282,Oat,Xnn,iH);sDn(259,22,{3:1,34:1,22:1,259:1},aI);var spt,hpt,fpt,lpt,bpt=_cn($6n,"GraphProperties",259,Oat,oun,rH);sDn(299,22,{3:1,34:1,22:1,299:1},oI);var wpt,dpt,gpt,ppt,mpt=_cn($6n,"GreedySwitchType",299,Oat,G2,cH);sDn(311,22,{3:1,34:1,22:1,311:1},uI);var vpt,kpt,ypt,Mpt=_cn($6n,"InLayerConstraint",311,Oat,q2,aH);sDn(429,22,{3:1,34:1,22:1,429:1},sI);var Tpt,jpt,Ept,Spt,Ppt,Cpt,Ipt,Opt,Apt,Lpt,Npt,$pt,Dpt,xpt,Rpt,Kpt,Fpt,_pt,Bpt,Hpt,Upt,Gpt,qpt,Xpt,zpt,Vpt,Wpt,Qpt,Jpt,Ypt,Zpt,nmt,tmt,emt,imt,rmt,cmt,amt,omt,umt,smt,hmt,fmt,lmt,bmt,wmt,dmt,gmt,pmt,mmt,vmt,kmt,ymt,Mmt,Tmt,jmt,Emt,Smt,Pmt,Cmt,Imt,Omt,Amt,Lmt,Nmt=_cn($6n,"InteractiveReferencePoint",429,Oat,l1,oH);sDn(171,22,{3:1,34:1,22:1,171:1},hI);var $mt,Dmt,xmt,Rmt,Kmt,Fmt,_mt,Bmt,Hmt,Umt,Gmt,qmt,Xmt,zmt,Vmt,Wmt,Qmt,Jmt,Ymt,Zmt,nvt,tvt,evt,ivt,rvt,cvt,avt,ovt,uvt,svt,hvt,fvt,lvt,bvt,wvt,dvt,gvt,pvt,mvt,vvt,kvt,yvt,Mvt,Tvt,jvt,Evt,Svt,Pvt,Cvt,Ivt,Ovt,Avt,Lvt,Nvt,$vt,Dvt,xvt,Rvt,Kvt,Fvt,_vt,Bvt,Hvt,Uvt,Gvt,qvt,Xvt,zvt,Vvt,Wvt,Qvt,Jvt,Yvt,Zvt,nkt,tkt,ekt,ikt,rkt,ckt,akt,okt,ukt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,mkt,vkt,kkt,ykt,Mkt,Tkt,jkt,Ekt,Skt,Pkt,Ckt,Ikt,Okt,Akt,Lkt,Nkt,$kt,Dkt,xkt,Rkt,Kkt,Fkt,_kt,Bkt,Hkt,Ukt,Gkt,qkt,Xkt,zkt,Vkt,Wkt,Qkt,Jkt,Ykt,Zkt,nyt,tyt,eyt,iyt,ryt,cyt,ayt,oyt,uyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,myt,vyt,kyt,yyt,Myt,Tyt,jyt,Eyt,Syt,Pyt,Cyt,Iyt,Oyt,Ayt,Lyt,Nyt,$yt,Dyt,xyt,Ryt,Kyt,Fyt,_yt,Byt,Hyt,Uyt,Gyt,qyt,Xyt,zyt,Vyt,Wyt,Qyt,Jyt,Yyt,Zyt,nMt,tMt,eMt,iMt,rMt,cMt,aMt,oMt,uMt,sMt,hMt,fMt,lMt,bMt,wMt,dMt,gMt,pMt,mMt,vMt,kMt,yMt,MMt,TMt,jMt,EMt,SMt,PMt,CMt,IMt,OMt,AMt,LMt,NMt,$Mt,DMt,xMt,RMt,KMt,FMt,_Mt,BMt,HMt,UMt,GMt,qMt,XMt,zMt,VMt,WMt,QMt,JMt,YMt,ZMt,nTt,tTt,eTt,iTt,rTt,cTt,aTt,oTt,uTt,sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,mTt,vTt,kTt,yTt,MTt,TTt,jTt,ETt,STt,PTt,CTt,ITt,OTt,ATt,LTt,NTt,$Tt,DTt,xTt,RTt,KTt,FTt,_Tt,BTt,HTt,UTt,GTt,qTt,XTt,zTt,VTt,WTt,QTt,JTt,YTt,ZTt,njt,tjt,ejt,ijt,rjt,cjt,ajt=_cn($6n,"LayerConstraint",171,Oat,l9,lH);sDn(859,1,K2n,fl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B6n),""),"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."),vvt),(lAn(),gNt)),Mgt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H6n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U6n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Hvt),gNt),Nmt),ggn(hNt)))),H4(n,U6n,J6n,Gvt),H4(n,U6n,o5n,Uvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G6n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q6n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(VT(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X6n),""),"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),wNt),cot),ggn(fNt)),Uhn(cT($ot,1),zZn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z6n),""),"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."),Pkt),gNt),Jjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V6n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),xwn(7)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W6n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q6n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J6n),"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)."),pvt),gNt),pgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y6n),s8n),"Node Layering Strategy"),"Strategy for node layering."),ckt),gNt),fjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z6n),s8n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),Wvt),gNt),ajt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n5n),s8n),"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."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t5n),s8n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e5n),h8n),"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."),xwn(4)),mNt),dot),ggn(hNt)))),H4(n,e5n,Y6n,Yvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i5n),h8n),"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."),xwn(2)),mNt),dot),ggn(hNt)))),H4(n,i5n,Y6n,nkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r5n),f8n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),ikt),gNt),Hjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c5n),f8n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),xwn(0)),mNt),dot),ggn(hNt)))),H4(n,c5n,r5n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a5n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),xwn(vZn)),mNt),dot),ggn(hNt)))),H4(n,a5n,Y6n,Xvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o5n),l8n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),dvt),gNt),agt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u5n),l8n),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s5n),l8n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dNt),fot),ggn(hNt)))),H4(n,s5n,b8n,ovt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,h5n),l8n),"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),wNt),cot),ggn(hNt)))),H4(n,h5n,o5n,bvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f5n),l8n),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l5n),l8n),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b5n),l8n),"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."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w5n),l8n),"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."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d5n),w8n),"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."),xwn(40)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g5n),w8n),"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."),rvt),gNt),mpt),ggn(hNt)))),H4(n,g5n,o5n,cvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p5n),"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."),nvt),gNt),mpt),ggn(hNt)))),H4(n,p5n,o5n,tvt),H4(n,p5n,b8n,evt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m5n),d8n),"Node Placement Strategy"),"Strategy for node placement."),Ekt),gNt),xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,v5n),d8n),"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."),wNt),cot),ggn(hNt)))),H4(n,v5n,m5n,dkt),H4(n,v5n,m5n,gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k5n),g8n),"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."),skt),gNt),Hgt),ggn(hNt)))),H4(n,k5n,m5n,hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y5n),g8n),"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."),lkt),gNt),Qgt),ggn(hNt)))),H4(n,y5n,m5n,bkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M5n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dNt),fot),ggn(hNt)))),H4(n,M5n,m5n,mkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,T5n),"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."),gNt),jjt),ggn(sNt)))),H4(n,T5n,m5n,Tkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j5n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),ykt),gNt),jjt),ggn(hNt)))),H4(n,j5n,m5n,Mkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E5n),p8n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),Pvt),gNt),oEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S5n),p8n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Ivt),gNt),lEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P5n),"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."),Avt),gNt),pEt),ggn(hNt)))),H4(n,P5n,m8n,Lvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C5n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dNt),fot),ggn(hNt)))),H4(n,C5n,m8n,$vt),H4(n,C5n,P5n,Dvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I5n),"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),dNt),fot),ggn(hNt)))),H4(n,I5n,m8n,Evt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O5n),v8n),"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."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A5n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L5n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N5n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$5n),k8n),"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."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D5n),k8n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x5n),k8n),"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."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R5n),y8n),j3n),"Tries to further compact components (disconnected sub-graphs)."),!1),wNt),cot),ggn(hNt)))),H4(n,R5n,h4n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K5n),M8n),"Post Compaction Strategy"),T8n),_mt),gNt),upt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F5n),M8n),"Post Compaction Constraint Calculation"),T8n),Kmt),gNt),tgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_5n),j8n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B5n),j8n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),xwn(16)),mNt),dot),ggn(hNt)))),H4(n,B5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H5n),j8n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),xwn(5)),mNt),dot),ggn(hNt)))),H4(n,H5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U5n),E8n),"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'."),cyt),gNt),xEt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G5n),E8n),"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),dNt),fot),ggn(hNt)))),H4(n,G5n,U5n,Kkt),H4(n,G5n,U5n,Fkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q5n),E8n),"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),dNt),fot),ggn(hNt)))),H4(n,q5n,U5n,Bkt),H4(n,q5n,U5n,Hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X5n),S8n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),Wkt),gNt),bgt),ggn(hNt)))),H4(n,X5n,U5n,Qkt),H4(n,X5n,U5n,Jkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,z5n),S8n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),vNt),yat),ggn(hNt)))),H4(n,z5n,X5n,Gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V5n),"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."),Xkt),mNt),dot),ggn(hNt)))),H4(n,V5n,X5n,zkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W5n),P8n),"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."),hyt),gNt),MEt),ggn(hNt)))),H4(n,W5n,U5n,fyt),H4(n,W5n,U5n,lyt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Q5n),P8n),"Valid Indices for Wrapping"),null),vNt),yat),ggn(hNt)))),H4(n,Q5n,U5n,oyt),H4(n,Q5n,U5n,uyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J5n),C8n),"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),wNt),cot),ggn(hNt)))),H4(n,J5n,U5n,tyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y5n),C8n),"Distance Penalty When Improving Cuts"),null),2),dNt),fot),ggn(hNt)))),H4(n,Y5n,U5n,Zkt),H4(n,Y5n,J5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z5n),C8n),"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),wNt),cot),ggn(hNt)))),H4(n,Z5n,U5n,iyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n8n),I8n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Tvt),gNt),$gt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t8n),I8n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),yvt),gNt),Qdt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e8n),O8n),"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."),Qmt),gNt),Xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i8n),O8n),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r8n),O8n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c8n),O8n),"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."),Hmt),gNt),abt),ggn(hNt)))),H4(n,c8n,h4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a8n),O8n),"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."),Xmt),gNt),pjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o8n),O8n),"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),dNt),fot),ggn(hNt)))),H4(n,o8n,e8n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u8n),O8n),"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),dNt),fot),ggn(hNt)))),H4(n,u8n,e8n,null),eZn((new ll,n))},zW($6n,"LayeredMetaDataProvider",859),sDn(998,1,K2n,ll),uZn.hf=function(n){eZn(n)},zW($6n,"LayeredOptions",998),sDn(999,1,{},Tc),uZn.sf=function(){return new mk},uZn.tf=function(n){},zW($6n,"LayeredOptions/LayeredFactory",999),sDn(1391,1,{}),uZn.a=0,zW(p9n,"ElkSpacings/AbstractSpacingsBuilder",1391),sDn(792,1391,{},omn),zW($6n,"LayeredSpacings/LayeredSpacingsBuilder",792),sDn(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},fI),uZn.dg=function(){return J_n(this)},uZn.qg=function(){return J_n(this)};var ojt,ujt,sjt,hjt,fjt=_cn($6n,"LayeringStrategy",265,Oat,tan,bH);sDn(390,22,{3:1,34:1,22:1,390:1},lI);var ljt,bjt,wjt,djt,gjt,pjt=_cn($6n,"LongEdgeOrderingStrategy",390,Oat,X2,wH);sDn(203,22,{3:1,34:1,22:1,203:1},bI);var mjt,vjt,kjt,yjt,Mjt,Tjt,jjt=_cn($6n,"NodeFlexibility",203,Oat,q6,dH);sDn(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},wI),uZn.dg=function(){return IDn(this)},uZn.qg=function(){return IDn(this)};var Ejt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,Ljt,Njt,$jt,Djt,xjt=_cn($6n,"NodePlacementStrategy",323,Oat,f9,gH);sDn(243,22,{3:1,34:1,22:1,243:1},dI);var Rjt,Kjt,Fjt,_jt,Bjt,Hjt=_cn($6n,"NodePromotionStrategy",243,Oat,uun,pH);sDn(284,22,{3:1,34:1,22:1,284:1},gI);var Ujt,Gjt,qjt,Xjt=_cn($6n,"OrderingStrategy",284,Oat,X6,mH);sDn(430,22,{3:1,34:1,22:1,430:1},pI);var zjt,Vjt,Wjt,Qjt,Jjt=_cn($6n,"PortSortingStrategy",430,Oat,d1,vH);sDn(463,22,{3:1,34:1,22:1,463:1},mI);var Yjt,Zjt,nEt,tEt,eEt=_cn($6n,"PortType",463,Oat,z2,kH);sDn(387,22,{3:1,34:1,22:1,387:1},vI);var iEt,rEt,cEt,aEt,oEt=_cn($6n,"SelfLoopDistributionStrategy",387,Oat,V2,yH);sDn(349,22,{3:1,34:1,22:1,349:1},kI);var uEt,sEt,hEt,fEt,lEt=_cn($6n,"SelfLoopOrderingStrategy",349,Oat,W2,MH);sDn(312,1,{312:1},CVn),zW($6n,"Spacings",312),sDn(350,22,{3:1,34:1,22:1,350:1},yI);var bEt,wEt,dEt,gEt,pEt=_cn($6n,"SplineRoutingMode",350,Oat,Q2,TH);sDn(352,22,{3:1,34:1,22:1,352:1},MI);var mEt,vEt,kEt,yEt,MEt=_cn($6n,"ValidifyStrategy",352,Oat,J2,jH);sDn(388,22,{3:1,34:1,22:1,388:1},TI);var TEt,jEt,EEt,SEt,PEt,CEt,IEt,OEt,AEt,LEt,NEt,$Et,DEt,xEt=_cn($6n,"WrappingStrategy",388,Oat,Y2,EH);sDn(1398,1,y9n,il),uZn.rg=function(n){return uG(n,36),jEt},uZn.Kf=function(n,t){pzn(this,uG(n,36),t)},zW(M9n,"DepthFirstCycleBreaker",1398),sDn(793,1,y9n,ez),uZn.rg=function(n){return uG(n,36),EEt},uZn.Kf=function(n,t){gYn(this,uG(n,36),t)},uZn.sg=function(n){return uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyCycleBreaker",793),sDn(1401,793,y9n,tL),uZn.sg=function(n){var t,e,i,r;for(r=null,t=vZn,i=new Ww(n);i.a<i.c.c.length;)vR(e=uG(N3(i),10),(GYn(),imt))&&uG(oIn(e,imt),17).a<t&&(t=uG(oIn(e,imt),17).a,r=e);return r||uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyModelOrderCycleBreaker",1401),sDn(1399,1,y9n,el),uZn.rg=function(n){return uG(n,36),SEt},uZn.Kf=function(n,t){Nzn(this,uG(n,36),t)},zW(M9n,"InteractiveCycleBreaker",1399),sDn(1400,1,y9n,nl),uZn.rg=function(n){return uG(n,36),PEt},uZn.Kf=function(n,t){Gzn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,zW(M9n,"ModelOrderCycleBreaker",1400),sDn(1413,1,y9n,Zf),uZn.rg=function(n){return uG(n,36),CEt},uZn.Kf=function(n,t){HQn(this,uG(n,36),t)},zW(T9n,"BreadthFirstModelOrderLayerer",1413),sDn(1414,1,b2n,jc),uZn.Ne=function(n,t){return aLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"BreadthFirstModelOrderLayerer/lambda$0$Type",1414),sDn(1404,1,y9n,iP),uZn.rg=function(n){return uG(n,36),IEt},uZn.Kf=function(n,t){CYn(this,uG(n,36),t)},zW(T9n,"CoffmanGrahamLayerer",1404),sDn(1405,1,b2n,Bg),uZn.Ne=function(n,t){return ANn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type",1405),sDn(1406,1,b2n,Hg),uZn.Ne=function(n,t){return oz(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"CoffmanGrahamLayerer/lambda$1$Type",1406),sDn(1415,1,y9n,tl),uZn.rg=function(n){return uG(n,36),OEt},uZn.Kf=function(n,t){QJn(this,uG(n,36),t)},uZn.c=0,uZn.e=0,zW(T9n,"DepthFirstModelOrderLayerer",1415),sDn(1416,1,b2n,Ec),uZn.Ne=function(n,t){return oLn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"DepthFirstModelOrderLayerer/lambda$0$Type",1416),sDn(1407,1,y9n,Sc),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),uwt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){uJn(uG(n,36),t)},zW(T9n,"InteractiveLayerer",1407),sDn(578,1,{578:1},Mk),uZn.a=0,uZn.c=0,zW(T9n,"InteractiveLayerer/LayerSpan",578),sDn(1403,1,y9n,al),uZn.rg=function(n){return uG(n,36),AEt},uZn.Kf=function(n,t){UKn(this,uG(n,36),t)},zW(T9n,"LongestPathLayerer",1403),sDn(1412,1,y9n,cl),uZn.rg=function(n){return uG(n,36),LEt},uZn.Kf=function(n,t){PFn(this,uG(n,36),t)},zW(T9n,"LongestPathSourceLayerer",1412),sDn(1410,1,y9n,ol),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){jJn(this,uG(n,36),t)},uZn.a=0,uZn.b=0,uZn.d=0,zW(T9n,"MinWidthLayerer",1410),sDn(1411,1,b2n,Ug),uZn.Ne=function(n,t){return Ssn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"MinWidthLayerer/MinOutgoingEdgesComparator",1411),sDn(1402,1,y9n,ul),uZn.rg=function(n){return uG(n,36),DEt},uZn.Kf=function(n,t){NVn(this,uG(n,36),t)},zW(T9n,"NetworkSimplexLayerer",1402),sDn(1408,1,y9n,RF),uZn.rg=function(n){return uG(n,36),Aq(Aq(Aq(new wJ,(uIn(),Tlt),(zYn(),Xbt)),jlt,pwt),Elt,gwt)},uZn.Kf=function(n,t){BWn(this,uG(n,36),t)},uZn.d=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.s=0,uZn.t=0,uZn.u=0,zW(T9n,"StretchWidthLayerer",1408),sDn(1409,1,b2n,Pc),uZn.Ne=function(n,t){return j7(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(T9n,"StretchWidthLayerer/1",1409),sDn(413,1,j9n),uZn.gg=function(n,t,e,i,r,c){},uZn.ug=function(n,t,e){return sUn(this,n,t,e)},uZn.fg=function(){this.g=Inn(iUt,E9n,28,this.d,15,1),this.f=Inn(iUt,E9n,28,this.d,15,1)},uZn.hg=function(n,t){this.e[n]=Inn(YHt,W1n,28,t[n].length,15,1)},uZn.ig=function(n,t,e){e[n][t].p=t,this.e[n][t]=t},uZn.jg=function(n,t,e,i){uG(zq(i[n][t].j,e),12).p=this.d++},uZn.b=0,uZn.c=0,uZn.d=0,zW(S9n,"AbstractBarycenterPortDistributor",413),sDn(1698,1,b2n,Gg),uZn.Ne=function(n,t){return lkn(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"AbstractBarycenterPortDistributor/lambda$0$Type",1698),sDn(832,1,C6n,M6),uZn.gg=function(n,t,e,i,r,c){},uZn.ig=function(n,t,e){},uZn.jg=function(n,t,e,i){},uZn.eg=function(){return!1},uZn.fg=function(){this.c=this.e.a,this.g=this.f.g},uZn.hg=function(n,t){t[n][0].c.p=n},uZn.kg=function(){return!1},uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,uG(this,669)):(hZ(),f$(n,this.d)),xsn(this.e,n))},uZn.lg=function(n,t,e,i){var r,c,a,o,u,s,h;for(t!=vX(e,n.length)&&(c=n[t-(e?1:-1)],v7(this.f,c,e?(can(),Wjt):(can(),Vjt))),r=n[t][0],h=!i||r.k==(zIn(),lbt),s=n7(n[t]),this.vg(s,h,!1,e),a=0,u=new Ww(s);u.a<u.c.c.length;)o=uG(N3(u),10),n[t][a++]=o;return!1},uZn.mg=function(n,t){var e,i,r,c,a;for(c=n7(n[a=vX(t,n.length)]),this.vg(c,!1,!0,t),e=0,r=new Ww(c);r.a<r.c.c.length;)i=uG(N3(r),10),n[a][e++]=i;return!1},zW(S9n,"BarycenterHeuristic",832),sDn(667,1,{667:1},zg),uZn.Ib=function(){return"BarycenterState [node="+this.c+", summedWeight="+this.d+", degree="+this.b+", barycenter="+this.a+", visited="+this.e+"]"},uZn.b=0,uZn.d=0,uZn.e=!1;var REt=zW(S9n,"BarycenterHeuristic/BarycenterState",667);sDn(1865,1,b2n,qg),uZn.Ne=function(n,t){return sPn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"BarycenterHeuristic/lambda$0$Type",1865),sDn(831,1,C6n,APn),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){this.a[n]=Inn(REt,{3:1,4:1,5:1,2117:1},667,t[n].length,0,1),this.b[n]=Inn(UEt,{3:1,4:1,5:1,2118:1},239,t[n].length,0,1)},uZn.ig=function(n,t,e){fkn(this,e[n][t],!0)},uZn.c=!1,zW(S9n,"ForsterConstraintResolver",831),sDn(239,1,{239:1},RZ,SVn),uZn.Ib=function(){var n,t;for((t=new WM).a+="[",n=0;n<this.d.length;n++)JA(t,byn(this.d[n])),null!=oD(this.g,this.d[0]).a&&JA(JA((t.a+="<",t),ZA(oD(this.g,this.d[0]).a)),">"),n<this.d.length-1&&(t.a+=TZn);return(t.a+="]",t).a},uZn.a=0,uZn.c=0,uZn.f=0;var KEt,FEt,_Et,BEt,HEt,UEt=zW(S9n,"ForsterConstraintResolver/ConstraintGroup",239);sDn(1860,1,QZn,Xg),uZn.Cd=function(n){fkn(this.a,uG(n,10),!1)},zW(S9n,"ForsterConstraintResolver/lambda$0$Type",1860),sDn(219,1,{219:1,230:1},KVn),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.fg=function(){this.r=Inn(YHt,W1n,28,this.n,15,1)},uZn.ig=function(n,t,e){var i;(i=e[n][t].e)&&kD(this.b,i)},uZn.jg=function(n,t,e,i){++this.n},uZn.Ib=function(){return MWn(this.e,new ek)},uZn.g=!1,uZn.i=!1,uZn.n=0,uZn.s=!1,zW(S9n,"GraphInfoHolder",219),sDn(1905,1,C6n,Cc),uZn.gg=function(n,t,e,i,r,c){},uZn.hg=function(n,t){},uZn.jg=function(n,t,e,i){},uZn.ug=function(n,t,e){return e&&t>0?j0(this.a,n[t-1],n[t]):!e&&t<n.length-1?j0(this.a,n[t],n[t+1]):Aon(this.a,n[t],e?(KQn(),_Rt):(KQn(),kRt)),cRn(this,n,t,e)},uZn.fg=function(){this.d=Inn(YHt,W1n,28,this.c,15,1),this.a=new R_(this.d)},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c+=i.j.c.length},uZn.c=0,zW(S9n,"GreedyPortDistributor",1905),sDn(1421,1,y9n,bl),uZn.rg=function(n){return swn(uG(n,36))},uZn.Kf=function(n,t){fWn(uG(n,36),t)},zW(S9n,"InteractiveCrossingMinimizer",1421),sDn(1422,1,b2n,Wg),uZn.Ne=function(n,t){return SSn(this,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"InteractiveCrossingMinimizer/1",1422),sDn(514,1,{514:1,106:1,47:1},zy),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(FEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){NUn(this,uG(n,36),t)},uZn.e=0,zW(S9n,"LayerSweepCrossingMinimizer",514),sDn(1418,1,QZn,Qg),uZn.Cd=function(n){Oqn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type",1418),sDn(1419,1,QZn,Jg),uZn.Cd=function(n){ewn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type",1419),sDn(1420,1,QZn,Yg),uZn.Cd=function(n){iXn(this.a,uG(n,219))},zW(S9n,"LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type",1420),sDn(464,22,{3:1,34:1,22:1,464:1},jI);var GEt,qEt=_cn(S9n,"LayerSweepCrossingMinimizer/CrossMinType",464,Oat,Z2,SH);sDn(1417,1,y1n,Ic),uZn.Mb=function(n){return Cun(),0==uG(n,30).a.c.length},zW(S9n,"LayerSweepCrossingMinimizer/lambda$0$Type",1417),sDn(1862,1,C6n,z0),uZn.fg=function(){},uZn.gg=function(n,t,e,i,r,c){},uZn.jg=function(n,t,e,i){},uZn.hg=function(n,t){t[n][0].c.p=n,this.b[n]=Inn(WEt,{3:1,4:1,5:1,2043:1},668,t[n].length,0,1)},uZn.ig=function(n,t,e){e[n][t].p=t,uQ(this.b[n],t,new Oc)},zW(S9n,"LayerSweepTypeDecider",1862),sDn(668,1,{668:1},Oc),uZn.Ib=function(){return"NodeInfo [connectedEdges="+this.a+", hierarchicalInfluence="+this.b+", randomInfluence="+this.c+"]"},uZn.a=0,uZn.b=0,uZn.c=0;var XEt,zEt,VEt,WEt=zW(S9n,"LayerSweepTypeDecider/NodeInfo",668);sDn(1863,1,A2n,Ac),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$0$Type",1863),sDn(1864,1,A2n,Lc),uZn.Lb=function(n){return Dx(new w7(uG(n,12).b))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Dx(new w7(uG(n,12).b))},zW(S9n,"LayerSweepTypeDecider/lambda$1$Type",1864),sDn(1906,413,j9n,ij),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f;switch(s=this.g,e.g){case 1:for(i=0,r=0,u=new Ww(n.j);u.a<u.c.c.length;)0!=(a=uG(N3(u),12)).e.c.length&&(++i,a.j==(KQn(),yRt)&&++r);for(c=t+r,f=t+i,o=jmn(n,(can(),Vjt)).Kc();o.Ob();)(a=uG(o.Pb(),12)).j==(KQn(),yRt)?(s[a.p]=c,--c):(s[a.p]=f,--f);return i;case 2:for(h=0,o=jmn(n,(can(),Wjt)).Kc();o.Ob();)++h,s[(a=uG(o.Pb(),12)).p]=t+h;return h;default:throw hv(new Dv)}},zW(S9n,"LayerTotalPortDistributor",1906),sDn(669,832,{669:1,230:1},Ron),uZn.vg=function(n,t,e,i){e?VEn(this,n):(vSn(this,n,i),vWn(this,n,t)),n.c.length>1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,this):(hZ(),f$(n,this.d)),oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),Cyt)))||xsn(this.e,n))},zW(S9n,"ModelOrderBarycenterHeuristic",669),sDn(1866,1,b2n,Zg),uZn.Ne=function(n,t){return TOn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),sDn(1423,1,y9n,wl),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(XEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){jY((uG(n,36),t))},zW(S9n,"NoCrossingMinimizer",1423),sDn(809,413,j9n,rj),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Ww(n.j);h.a<h.c.c.length;)0!=(u=uG(N3(h),12)).e.c.length&&(++r,u.j==(KQn(),yRt)&&++c);for(a=t+c*(i=1/(r+1)),b=t+1-i,s=jmn(n,(can(),Vjt)).Kc();s.Ob();)(u=uG(s.Pb(),12)).j==(KQn(),yRt)?(f[u.p]=a,a-=i):(f[u.p]=b,b-=i);break;case 2:for(o=0,h=new Ww(n.j);h.a<h.c.c.length;)0==(u=uG(N3(h),12)).g.c.length||++o;for(l=t+(i=1/(o+1)),s=jmn(n,(can(),Wjt)).Kc();s.Ob();)f[(u=uG(s.Pb(),12)).p]=l,l+=i;break;default:throw hv(new vM("Port type is undefined"))}return 1},zW(S9n,"NodeRelativePortDistributor",809),sDn(822,1,{},MV,PIn),zW(S9n,"SweepCopy",822),sDn(1861,1,C6n,Umn),uZn.hg=function(n,t){},uZn.fg=function(){var n;n=Inn(YHt,W1n,28,this.f,15,1),this.d=new op(n),this.a=new R_(n)},uZn.gg=function(n,t,e,i,r,c){var a;a=uG(zq(c[n][t].j,e),12),r.c==a&&r.c.i.c==r.d.i.c&&++this.e[n]},uZn.ig=function(n,t,e){var i;i=e[n][t],this.c[n]=this.c[n]|i.k==(zIn(),gbt)},uZn.jg=function(n,t,e,i){var r;(r=uG(zq(i[n][t].j,e),12)).p=this.f++,r.g.c.length+r.e.c.length>1&&(r.j==(KQn(),kRt)?this.b[n]=!0:r.j==_Rt&&n>0&&(this.b[n-1]=!0))},uZn.f=0,zW(P6n,"AllCrossingsCounter",1861),sDn(595,1,{},Don),uZn.b=0,uZn.d=0,zW(P6n,"BinaryIndexedTree",595),sDn(532,1,{},R_),zW(P6n,"CrossingsCounter",532),sDn(1950,1,b2n,np),uZn.Ne=function(n,t){return wX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$0$Type",1950),sDn(1951,1,b2n,tp),uZn.Ne=function(n,t){return dX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$1$Type",1951),sDn(1952,1,b2n,ep),uZn.Ne=function(n,t){return gX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$2$Type",1952),sDn(1953,1,b2n,ip),uZn.Ne=function(n,t){return pX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$3$Type",1953),sDn(1954,1,QZn,rp),uZn.Cd=function(n){cen(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$4$Type",1954),sDn(1955,1,y1n,cp),uZn.Mb=function(n){return NI(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$5$Type",1955),sDn(1956,1,QZn,ap),uZn.Cd=function(n){MA(this,n)},zW(P6n,"CrossingsCounter/lambda$6$Type",1956),sDn(1957,1,QZn,EI),uZn.Cd=function(n){var t;PU(),A6(this.b,(t=this.a,uG(n,12),t))},zW(P6n,"CrossingsCounter/lambda$7$Type",1957),sDn(839,1,A2n,Nc),uZn.Lb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},zW(P6n,"CrossingsCounter/lambda$8$Type",839),sDn(1949,1,{},op),zW(P6n,"HyperedgeCrossingsCounter",1949),sDn(478,1,{34:1,478:1},BF),uZn.Fd=function(n){return _vn(this,uG(n,478))},uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0;var QEt=zW(P6n,"HyperedgeCrossingsCounter/Hyperedge",478);sDn(374,1,{34:1,374:1},bY),uZn.Fd=function(n){return exn(this,uG(n,374))},uZn.b=0,uZn.c=0;var JEt,YEt,ZEt=zW(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner",374);sDn(531,22,{3:1,34:1,22:1,531:1},SI);var nSt,tSt,eSt,iSt,rSt,cSt=_cn(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Oat,g1,PH);sDn(1425,1,y9n,dl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?tSt:null},uZn.Kf=function(n,t){HEn(this,uG(n,36),t)},zW(P9n,"InteractiveNodePlacer",1425),sDn(1426,1,y9n,gl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?eSt:null},uZn.Kf=function(n,t){XMn(this,uG(n,36),t)},zW(P9n,"LinearSegmentsNodePlacer",1426),sDn(261,1,{34:1,261:1},Tk),uZn.Fd=function(n){return CT(this,uG(n,261))},uZn.Fb=function(n){var t;return!!F$(n,261)&&(t=uG(n,261),this.b==t.b)},uZn.Hb=function(){return this.b},uZn.Ib=function(){return"ls"+vIn(this.e)},uZn.a=0,uZn.b=0,uZn.c=-1,uZn.d=-1,uZn.g=0;var aSt,oSt=zW(P9n,"LinearSegmentsNodePlacer/LinearSegment",261);sDn(1428,1,y9n,iz),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?aSt:null},uZn.Kf=function(n,t){WJn(this,uG(n,36),t)},uZn.b=0,uZn.g=0,zW(P9n,"NetworkSimplexPlacer",1428),sDn(1447,1,b2n,$c),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/0methodref$compare$Type",1447),sDn(1449,1,b2n,Dc),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/1methodref$compare$Type",1449),sDn(655,1,{655:1},PI);var uSt=zW(P9n,"NetworkSimplexPlacer/EdgeRep",655);sDn(412,1,{412:1},wY),uZn.b=!1;var sSt,hSt,fSt,lSt=zW(P9n,"NetworkSimplexPlacer/NodeRep",412);sDn(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},Ck),zW(P9n,"NetworkSimplexPlacer/Path",515),sDn(1429,1,{},xc),uZn.Kb=function(n){return uG(n,18).d.i.k},zW(P9n,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),sDn(1430,1,y1n,Rc),uZn.Mb=function(n){return uG(n,273)==(zIn(),wbt)},zW(P9n,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),sDn(1431,1,{},Kc),uZn.Kb=function(n){return uG(n,18).d.i},zW(P9n,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),sDn(1432,1,y1n,up),uZn.Mb=function(n){return zK(Imn(uG(n,10)))},zW(P9n,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),sDn(1433,1,y1n,Fc),uZn.Mb=function(n){return mq(uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$0$Type",1433),sDn(1434,1,QZn,CI),uZn.Cd=function(n){M$(this.a,this.b,uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$1$Type",1434),sDn(1443,1,QZn,sp),uZn.Cd=function(n){FLn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$10$Type",1443),sDn(1444,1,{},_c),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$11$Type",1444),sDn(1445,1,QZn,hp),uZn.Cd=function(n){D_n(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$12$Type",1445),sDn(1446,1,{},Bc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$13$Type",1446),sDn(1448,1,{},Hc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$15$Type",1448),sDn(1450,1,y1n,Uc),uZn.Mb=function(n){return n2(),uG(n,412).c.k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$17$Type",1450),sDn(1451,1,y1n,Gc),uZn.Mb=function(n){return n2(),uG(n,412).c.j.c.length>1},zW(P9n,"NetworkSimplexPlacer/lambda$18$Type",1451),sDn(1452,1,QZn,dY),uZn.Cd=function(n){Dpn(this.c,this.b,this.d,this.a,uG(n,412))},uZn.c=0,uZn.d=0,zW(P9n,"NetworkSimplexPlacer/lambda$19$Type",1452),sDn(1435,1,{},qc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$2$Type",1435),sDn(1453,1,QZn,fp),uZn.Cd=function(n){j$(this.a,uG(n,12))},uZn.a=0,zW(P9n,"NetworkSimplexPlacer/lambda$20$Type",1453),sDn(1454,1,{},Xc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$21$Type",1454),sDn(1455,1,QZn,lp),uZn.Cd=function(n){uD(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$22$Type",1455),sDn(1456,1,y1n,zc),uZn.Mb=function(n){return zK(n)},zW(P9n,"NetworkSimplexPlacer/lambda$23$Type",1456),sDn(1457,1,{},Vc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$24$Type",1457),sDn(1458,1,y1n,bp),uZn.Mb=function(n){return RL(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$25$Type",1458),sDn(1459,1,QZn,II),uZn.Cd=function(n){$On(this.a,this.b,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$26$Type",1459),sDn(1460,1,y1n,Wc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$27$Type",1460),sDn(1461,1,y1n,Qc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$28$Type",1461),sDn(1462,1,{},wp),uZn.Ve=function(n,t){return T$(this.a,uG(n,30),uG(t,30))},zW(P9n,"NetworkSimplexPlacer/lambda$29$Type",1462),sDn(1436,1,{},Jc),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$3$Type",1436),sDn(1437,1,y1n,Yc),uZn.Mb=function(n){return n2(),h6(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$4$Type",1437),sDn(1438,1,QZn,dp),uZn.Cd=function(n){vqn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$5$Type",1438),sDn(1439,1,{},Zc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$6$Type",1439),sDn(1440,1,y1n,na),uZn.Mb=function(n){return n2(),uG(n,10).k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$7$Type",1440),sDn(1441,1,{},ta),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Ggn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$8$Type",1441),sDn(1442,1,y1n,ea),uZn.Mb=function(n){return n2(),pq(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$9$Type",1442),sDn(1424,1,y9n,pl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?sSt:null},uZn.Kf=function(n,t){RXn(uG(n,36),t)},zW(P9n,"SimpleNodePlacer",1424),sDn(185,1,{185:1},VHn),uZn.Ib=function(){var n;return n="",this.c==(b0(),fSt)?n+=V2n:this.c==hSt&&(n+=z2n),this.o==(w0(),wSt)?n+=c3n:this.o==dSt?n+="UP":n+="BALANCED",n},zW(O9n,"BKAlignedLayout",185),sDn(523,22,{3:1,34:1,22:1,523:1},OI);var bSt,wSt,dSt,gSt=_cn(O9n,"BKAlignedLayout/HDirection",523,Oat,m1,CH);sDn(522,22,{3:1,34:1,22:1,522:1},AI);var pSt,mSt,vSt,kSt,ySt,MSt,TSt,jSt,ESt,SSt,PSt,CSt,ISt,OSt,ASt,LSt,NSt,$St,DSt,xSt=_cn(O9n,"BKAlignedLayout/VDirection",522,Oat,v1,IH);sDn(1699,1,{},LI),zW(O9n,"BKAligner",1699),sDn(1702,1,{},xjn),zW(O9n,"BKCompactor",1702),sDn(663,1,{663:1},ia),uZn.a=0,zW(O9n,"BKCompactor/ClassEdge",663),sDn(467,1,{467:1},Ek),uZn.a=null,uZn.b=0,zW(O9n,"BKCompactor/ClassNode",467),sDn(1427,1,y9n,FI),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?mSt:null},uZn.Kf=function(n,t){$Yn(this,uG(n,36),t)},uZn.d=!1,zW(O9n,"BKNodePlacer",1427),sDn(1700,1,{},ra),uZn.d=0,zW(O9n,"NeighborhoodInformation",1700),sDn(1701,1,b2n,gp),uZn.Ne=function(n,t){return vrn(this,uG(n,42),uG(t,42))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O9n,"NeighborhoodInformation/NeighborComparator",1701),sDn(823,1,{}),zW(O9n,"ThresholdStrategy",823),sDn(1825,823,{},Sk),uZn.wg=function(n,t,e){return this.a.o==(w0(),dSt)?M0n:T0n},uZn.xg=function(){},zW(O9n,"ThresholdStrategy/NullThresholdStrategy",1825),sDn(587,1,{587:1},_I),uZn.c=!1,uZn.d=!1,zW(O9n,"ThresholdStrategy/Postprocessable",587),sDn(1826,823,{},Pk),uZn.wg=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,b0(),r&&(c=FXn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=FXn(this,e,!1)),c):n},uZn.xg=function(){for(var n,t,e;0!=this.d.b;)(t=wGn(this,e=uG(H1(this.d),587))).a&&(n=t.a,(oM(this.a.f[this.a.g[e.b.p].p])||v9(n)||n.c.i.c!=n.d.i.c)&&(ixn(this,e)||VL(this.e,e)));for(;0!=this.e.a.c.length;)ixn(this,uG(obn(this.e),587))},zW(O9n,"ThresholdStrategy/SimpleThresholdStrategy",1826),sDn(645,1,{645:1,188:1,196:1},ca),uZn.dg=function(){return Fsn(this)},uZn.qg=function(){return Fsn(this)},zW(A9n,"EdgeRouterFactory",645),sDn(1485,1,y9n,ml),uZn.rg=function(n){return RFn(uG(n,36))},uZn.Kf=function(n,t){WXn(uG(n,36),t)},zW(A9n,"OrthogonalEdgeRouter",1485),sDn(1478,1,y9n,KI),uZn.rg=function(n){return oSn(uG(n,36))},uZn.Kf=function(n,t){XQn(this,uG(n,36),t)},zW(A9n,"PolylineEdgeRouter",1478),sDn(1479,1,A2n,oa),uZn.Lb=function(n){return shn(uG(n,10))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return shn(uG(n,10))},zW(A9n,"PolylineEdgeRouter/1",1479),sDn(1872,1,y1n,ua),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$0$Type",1872),sDn(1873,1,{},sa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$1$Type",1873),sDn(1874,1,y1n,ha),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$2$Type",1874),sDn(1875,1,{},fa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$3$Type",1875),sDn(1876,1,{},la),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$4$Type",1876),sDn(1877,1,{},aa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$5$Type",1877),sDn(118,1,{34:1,118:1},nhn),uZn.Fd=function(n){return IT(this,uG(n,118))},uZn.Fb=function(n){var t;return!!F$(n,118)&&(t=uG(n,118),this.g==t.g)},uZn.Hb=function(){return this.g},uZn.Ib=function(){var n,t,e,i;for(n=new lx("{"),i=new Ww(this.n);i.a<i.c.c.length;)null==(t=ZTn((e=uG(N3(i),12)).i))&&(t="n"+A_(e.i)),n.a+=""+t,i.a<i.c.c.length&&(n.a+=",");return n.a+="}",n.a},uZn.a=0,uZn.b=0,uZn.c=NaN,uZn.d=0,uZn.g=0,uZn.i=0,uZn.o=0,uZn.s=NaN,zW(L9n,"HyperEdgeSegment",118),sDn(132,1,{132:1},A2),uZn.Ib=function(){return this.a+"->"+this.b+" ("+yR(this.c)+")"},uZn.d=0,zW(L9n,"HyperEdgeSegmentDependency",132),sDn(528,22,{3:1,34:1,22:1,528:1},qI);var RSt,KSt,FSt,_St,BSt,HSt,USt,GSt,qSt=_cn(L9n,"HyperEdgeSegmentDependency/DependencyType",528,Oat,k1,OH);sDn(1878,1,{},pp),zW(L9n,"HyperEdgeSegmentSplitter",1878),sDn(1879,1,{},hj),uZn.a=0,uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/AreaRating",1879),sDn(339,1,{339:1},OU),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"HyperEdgeSegmentSplitter/FreeArea",339),sDn(1880,1,b2n,ba),uZn.Ne=function(n,t){return C_(uG(n,118),uG(t,118))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L9n,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),sDn(1881,1,QZn,pY),uZn.Cd=function(n){I5(this.a,this.d,this.c,this.b,uG(n,118))},uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),sDn(1882,1,{},wa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),sDn(1883,1,{},da),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),sDn(1884,1,{},ga),uZn.Ye=function(n){return uM(pK(n))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),sDn(664,1,{},NW),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"OrthogonalRoutingGenerator",664),sDn(1703,1,{},pa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$0$Type",1703),sDn(1704,1,{},ma),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$1$Type",1704),sDn(670,1,{}),zW(N9n,"BaseRoutingDirectionStrategy",670),sDn(1870,670,{},Rk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),VUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),VUn(this,o,c,r,!1),c=b,r=new MO(w,a=t+b.o*i),aq(o.a,r),VUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),VUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),KRt},uZn.Bg=function(){return KQn(),yRt},zW(N9n,"NorthToSouthRoutingStrategy",1870),sDn(1871,670,{},Kk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).a,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).a,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),VUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),VUn(this,o,c,r,!1),c=b,r=new MO(w,a=t-b.o*i),aq(o.a,r),VUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),VUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),yRt},uZn.Bg=function(){return KQn(),KRt},zW(N9n,"SouthToNorthRoutingStrategy",1871),sDn(1869,670,{},Fk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.a<h.c.c.length;)for(s=uG(N3(h),12),l=Gfn(Uhn(cT(PNt,1),zZn,8,0,[s.i.n,s.n,s.a])).b,u=new Ww(s.g);u.a<u.c.c.length;)v9(o=uG(N3(u),18))||(d=o.d,g=Gfn(Uhn(cT(PNt,1),zZn,8,0,[d.i.n,d.n,d.a])).b,e.Math.abs(l-g)>t4n&&(c=n,r=new MO(a=f,l),aq(o.a,r),VUn(this,o,c,r,!0),(b=n.r)&&(r=new MO(a,w=uM(pK(hyn(b.e,0)))),aq(o.a,r),VUn(this,o,c,r,!0),c=b,r=new MO(a=t+b.o*i,w),aq(o.a,r),VUn(this,o,c,r,!0)),r=new MO(a,g),aq(o.a,r),VUn(this,o,c,r,!0)))},uZn.zg=function(n){return n.i.n.b+n.n.b+n.a.b},uZn.Ag=function(){return KQn(),kRt},uZn.Bg=function(){return KQn(),_Rt},zW(N9n,"WestToEastRoutingStrategy",1869),sDn(828,1,{},jqn),uZn.Ib=function(){return vIn(this.a)},uZn.b=0,uZn.c=!1,uZn.d=!1,uZn.f=0,zW(D9n,"NubSpline",828),sDn(418,1,{418:1},pFn,R1),zW(D9n,"NubSpline/PolarCP",418),sDn(1480,1,y9n,zTn),uZn.rg=function(n){return HPn(uG(n,36))},uZn.Kf=function(n,t){EJn(this,uG(n,36),t)},zW(D9n,"SplineEdgeRouter",1480),sDn(274,1,{274:1},O7),uZn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},uZn.c=0,zW(D9n,"SplineEdgeRouter/Dependency",274),sDn(465,22,{3:1,34:1,22:1,465:1},XI);var XSt,zSt,VSt,WSt,QSt,JSt=_cn(D9n,"SplineEdgeRouter/SideToProcess",465,Oat,S1,AH);sDn(1481,1,y1n,va),uZn.Mb=function(n){return uFn(),!uG(n,131).o},zW(D9n,"SplineEdgeRouter/lambda$0$Type",1481),sDn(1482,1,{},ka),uZn.Ze=function(n){return uFn(),uG(n,131).v+1},zW(D9n,"SplineEdgeRouter/lambda$1$Type",1482),sDn(1483,1,QZn,BI),uZn.Cd=function(n){yq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$2$Type",1483),sDn(1484,1,QZn,HI),uZn.Cd=function(n){Mq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$3$Type",1484),sDn(131,1,{34:1,131:1},UAn,Izn),uZn.Fd=function(n){return NT(this,uG(n,131))},uZn.b=0,uZn.e=!1,uZn.f=0,uZn.g=0,uZn.j=!1,uZn.k=!1,uZn.n=0,uZn.o=!1,uZn.p=!1,uZn.q=!1,uZn.s=0,uZn.u=0,uZn.v=0,uZn.F=0,zW(D9n,"SplineSegment",131),sDn(468,1,{468:1},ya),uZn.a=0,uZn.b=!1,uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=0,zW(D9n,"SplineSegment/EdgeInformation",468),sDn(1198,1,{},Ma),zW(_9n,q3n,1198),sDn(1199,1,b2n,Ta),uZn.Ne=function(n,t){return yNn(uG(n,121),uG(t,121))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,X3n,1199),sDn(1197,1,{},Gj),zW(_9n,"MrTree",1197),sDn(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},zI),uZn.dg=function(){return TNn(this)},uZn.qg=function(){return TNn(this)};var YSt,ZSt=_cn(_9n,"TreeLayoutPhases",405,Oat,i5,LH);sDn(1112,205,M3n,FF),uZn.rf=function(n,t){var e,i,r,c,a,o,u;for(oM(gK(zDn(n,(QGn(),gCt))))||J1(new Sd((vP(),new Vy(n)))),(c=t.eh(B9n)).Ug("build tGraph",1),zsn(o=new L7,n),kfn(o,(OQn(),RPt),n),jUn(n,o,u=new Ym),eGn(n,o,u),a=o,c.Vg(),(c=t.eh(B9n)).Ug("Split graph",1),r=AUn(this.a,a),c.Vg(),i=new Ww(r);i.a<i.c.c.length;)e=uG(N3(i),121),hPn(this.b,e,t.eh(.5999999940395355/r.c.length));(c=t.eh(B9n)).Ug("Pack components",1),a=DYn(r),c.Vg(),(c=t.eh(B9n)).Ug("Apply layout results",1),WVn(a),c.Vg()},zW(_9n,"TreeLayoutProvider",1112),sDn(1894,1,t1n,Ea),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/1",1894),sDn(1895,1,t1n,Sa),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(_9n,"TreeUtil/2",1895),sDn(1885,1,y1n,Pa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,40),(OQn(),UPt))))},zW(_9n,"TreeUtil/lambda$0$Type",1885),sDn(1891,1,y1n,mp),uZn.Mb=function(n){return this.a.Hc(uG(n,40))},zW(_9n,"TreeUtil/lambda$10$Type",1891),sDn(1892,1,{},vp),uZn.Kb=function(n){return n5(this.a,uG(n,40))},zW(_9n,"TreeUtil/lambda$11$Type",1892),sDn(1893,1,y1n,UI),uZn.Mb=function(n){return vin(this.a,this.b,uG(n,40))},zW(_9n,"TreeUtil/lambda$12$Type",1893),sDn(1886,1,y1n,kp),uZn.Mb=function(n){return Rgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$3$Type",1886),sDn(1887,1,b2n,ja),uZn.Ne=function(n,t){return I_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$4$Type",1887),sDn(1888,1,y1n,yp),uZn.Mb=function(n){return Kgn(this.a,uG(n,65))},zW(_9n,"TreeUtil/lambda$7$Type",1888),sDn(1889,1,b2n,Ca),uZn.Ne=function(n,t){return O_(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,"TreeUtil/lambda$8$Type",1889),sDn(1890,1,{},Ia),uZn.Kb=function(n){return uG(n,65).b},zW(_9n,"TreeUtil/lambda$9$Type",1890),sDn(508,137,{3:1,508:1,96:1,137:1}),uZn.g=0,zW(U9n,"TGraphElement",508),sDn(65,508,{3:1,65:1,508:1,96:1,137:1},uZ),uZn.Ib=function(){return this.b&&this.c?V3(this.b)+"->"+V3(this.c):"e_"+Hon(this)},zW(U9n,"TEdge",65),sDn(121,137,{3:1,121:1,96:1,137:1},L7),uZn.Ib=function(){var n,t,e,i,r;for(r=null,i=Fkn(this.b,0);i.b!=i.d.c;)r+=(null==(e=uG(I6(i),40)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=Fkn(this.a,0);t.b!=t.d.c;)r+=((n=uG(I6(t),65)).b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))+"\n";return r};var nPt=zW(U9n,"TGraph",121);sDn(643,508,{3:1,508:1,643:1,96:1,137:1}),zW(U9n,"TShape",643),sDn(40,643,{3:1,508:1,40:1,643:1,96:1,137:1},wln),uZn.Ib=function(){return V3(this)};var tPt,ePt,iPt,rPt,cPt,aPt,oPt,uPt,sPt,hPt,fPt,lPt=zW(U9n,"TNode",40);sDn(236,1,t1n,Mp),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Tp(Fkn(this.a.d,0))},zW(U9n,"TNode/2",236),sDn(329,1,$Zn,Tp),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(I6(this.a),65).c},uZn.Ob=function(){return Jj(this.a)},uZn.Qb=function(){yrn(this.a)},zW(U9n,"TNode/2/1",329),sDn(1923,1,Q4n,Oa),uZn.Kf=function(n,t){SYn(this,uG(n,121),t)},zW(q9n,"CompactionProcessor",1923),sDn(1924,1,b2n,jp),uZn.Ne=function(n,t){return ksn(this.a,uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$0$Type",1924),sDn(1925,1,y1n,GI),uZn.Mb=function(n){return xZ(this.b,this.a,uG(n,42))},uZn.a=0,uZn.b=0,zW(q9n,"CompactionProcessor/lambda$1$Type",1925),sDn(1934,1,b2n,Aa),uZn.Ne=function(n,t){return vW(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$10$Type",1934),sDn(1935,1,b2n,La),uZn.Ne=function(n,t){return Kx(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$11$Type",1935),sDn(1936,1,b2n,Na),uZn.Ne=function(n,t){return kW(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$12$Type",1936),sDn(1926,1,y1n,Ep),uZn.Mb=function(n){return hD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$2$Type",1926),sDn(1927,1,y1n,Sp),uZn.Mb=function(n){return fD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$3$Type",1927),sDn(1928,1,y1n,$a),uZn.Mb=function(n){return-1==uG(n,40).c.indexOf(H9n)},zW(q9n,"CompactionProcessor/lambda$4$Type",1928),sDn(1929,1,{},Pp),uZn.Kb=function(n){return a6(this.a,uG(n,40))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$5$Type",1929),sDn(1930,1,{},Cp),uZn.Kb=function(n){return ren(this.a,uG(n,40))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$6$Type",1930),sDn(1931,1,b2n,Ip),uZn.Ne=function(n,t){return G9(this.a,uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$7$Type",1931),sDn(1932,1,b2n,Op),uZn.Ne=function(n,t){return q9(this.a,uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$8$Type",1932),sDn(1933,1,b2n,Da),uZn.Ne=function(n,t){return Fx(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$9$Type",1933),sDn(1921,1,Q4n,xa),uZn.Kf=function(n,t){cBn(uG(n,121),t)},zW(q9n,"DirectionProcessor",1921),sDn(1913,1,Q4n,KF),uZn.Kf=function(n,t){JUn(this,uG(n,121),t)},zW(q9n,"FanProcessor",1913),sDn(1937,1,Q4n,Ra),uZn.Kf=function(n,t){N_n(uG(n,121),t)},zW(q9n,"GraphBoundsProcessor",1937),sDn(1938,1,{},Ka),uZn.Ye=function(n){return uG(n,40).e.a},zW(q9n,"GraphBoundsProcessor/lambda$0$Type",1938),sDn(1939,1,{},Fa),uZn.Ye=function(n){return uG(n,40).e.b},zW(q9n,"GraphBoundsProcessor/lambda$1$Type",1939),sDn(1940,1,{},_a),uZn.Ye=function(n){return lP(uG(n,40))},zW(q9n,"GraphBoundsProcessor/lambda$2$Type",1940),sDn(1941,1,{},Ba),uZn.Ye=function(n){return fP(uG(n,40))},zW(q9n,"GraphBoundsProcessor/lambda$3$Type",1941),sDn(262,22,{3:1,34:1,22:1,262:1,196:1},VI),uZn.dg=function(){switch(this.g){case 0:return new sy;case 1:return new KF;case 2:return new uy;case 3:return new Xa;case 4:return new Ua;case 8:return new Ha;case 5:return new xa;case 6:return new Va;case 7:return new Oa;case 9:return new Ra;case 10:return new Wa;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var bPt,wPt,dPt,gPt,pPt=_cn(q9n,k6n,262,Oat,usn,NH);sDn(1920,1,Q4n,Ha),uZn.Kf=function(n,t){xQn(uG(n,121),t)},zW(q9n,"LevelCoordinatesProcessor",1920),sDn(1918,1,Q4n,Ua),uZn.Kf=function(n,t){ZRn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"LevelHeightProcessor",1918),sDn(1919,1,t1n,Ga),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"LevelHeightProcessor/1",1919),sDn(1914,1,Q4n,uy),uZn.Kf=function(n,t){g_n(this,uG(n,121),t)},zW(q9n,"LevelProcessor",1914),sDn(1915,1,y1n,qa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,40),(OQn(),UPt))))},zW(q9n,"LevelProcessor/lambda$0$Type",1915),sDn(1916,1,Q4n,Xa),uZn.Kf=function(n,t){DAn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NeighborsProcessor",1916),sDn(1917,1,t1n,za),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"NeighborsProcessor/1",1917),sDn(1922,1,Q4n,Va),uZn.Kf=function(n,t){QUn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NodePositionProcessor",1922),sDn(1912,1,Q4n,sy),uZn.Kf=function(n,t){Ezn(this,uG(n,121),t)},zW(q9n,"RootProcessor",1912),sDn(1942,1,Q4n,Wa),uZn.Kf=function(n,t){Wyn(uG(n,121),t)},zW(q9n,"Untreeifyer",1942),sDn(392,22,{3:1,34:1,22:1,392:1},WI);var mPt,vPt,kPt,yPt,MPt,TPt,jPt,EPt,SPt,PPt,CPt,IPt,OPt,APt,LPt,NPt,$Pt,DPt,xPt,RPt,KPt,FPt,_Pt,BPt,HPt,UPt,GPt,qPt,XPt,zPt,VPt,WPt,QPt,JPt,YPt,ZPt,nCt,tCt,eCt,iCt,rCt,cCt,aCt,oCt,uCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,mCt,vCt,kCt,yCt,MCt,TCt,jCt,ECt,SCt,PCt,CCt,ICt,OCt,ACt,LCt,NCt,$Ct,DCt,xCt,RCt=_cn(W9n,"EdgeRoutingMode",392,Oat,t3,$H);sDn(862,1,K2n,vl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J9n),""),r7n),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y9n),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z9n),""),"Tree Level"),"The index for the tree level the node is in"),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n7n),""),r7n),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t7n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),tCt),gNt),BCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e7n),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),WPt),gNt),RCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i7n),""),"Search Order"),"Which search order to use when computing a spanning tree."),YPt),gNt),QCt),ggn(hNt)))),yJn((new Ml,n))},zW(W9n,"MrTreeMetaDataProvider",862),sDn(1006,1,K2n,Ml),uZn.hf=function(n){yJn(n)},zW(W9n,"MrTreeOptions",1006),sDn(1007,1,{},Qa),uZn.sf=function(){return new FF},uZn.tf=function(n){},zW(W9n,"MrTreeOptions/MrtreeFactory",1007),sDn(353,22,{3:1,34:1,22:1,353:1},QI);var KCt,FCt,_Ct,BCt=_cn(W9n,"OrderWeighting",353,Oat,r5,DH);sDn(433,22,{3:1,34:1,22:1,433:1},JI);var HCt,UCt,GCt,qCt,XCt,zCt,VCt,WCt,QCt=_cn(W9n,"TreeifyingOrder",433,Oat,j1,xH);sDn(1486,1,y9n,Tl),uZn.rg=function(n){return uG(n,121),UCt},uZn.Kf=function(n,t){$un(this,uG(n,121),t)},zW("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),sDn(1487,1,y9n,jl),uZn.rg=function(n){return uG(n,121),GCt},uZn.Kf=function(n,t){E_n(this,uG(n,121),t)},zW(u7n,"NodeOrderer",1487),sDn(1494,1,{},lo),uZn.td=function(n){return Nq(n)},zW(u7n,"NodeOrderer/0methodref$lambda$6$Type",1494),sDn(1488,1,y1n,bo),uZn.Mb=function(n){return ncn(),oM(gK(oIn(uG(n,40),(OQn(),UPt))))},zW(u7n,"NodeOrderer/lambda$0$Type",1488),sDn(1489,1,y1n,wo),uZn.Mb=function(n){return ncn(),uG(oIn(uG(n,40),(QGn(),kCt)),17).a<0},zW(u7n,"NodeOrderer/lambda$1$Type",1489),sDn(1490,1,y1n,Lp),uZn.Mb=function(n){return _an(this.a,uG(n,40))},zW(u7n,"NodeOrderer/lambda$2$Type",1490),sDn(1491,1,y1n,Ap),uZn.Mb=function(n){return f6(this.a,uG(n,40))},zW(u7n,"NodeOrderer/lambda$3$Type",1491),sDn(1492,1,b2n,go),uZn.Ne=function(n,t){return frn(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(u7n,"NodeOrderer/lambda$4$Type",1492),sDn(1493,1,y1n,po),uZn.Mb=function(n){return ncn(),0!=uG(oIn(uG(n,40),(OQn(),EPt)),17).a},zW(u7n,"NodeOrderer/lambda$5$Type",1493),sDn(1495,1,y9n,yl),uZn.rg=function(n){return uG(n,121),qCt},uZn.Kf=function(n,t){cUn(this,uG(n,121),t)},uZn.b=0,zW("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),sDn(1496,1,y9n,kl),uZn.rg=function(n){return uG(n,121),XCt},uZn.Kf=function(n,t){gHn(uG(n,121),t)},zW(s7n,"EdgeRouter",1496),sDn(1498,1,b2n,fo),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/0methodref$compare$Type",1498),sDn(1503,1,{},Ya),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/1methodref$doubleValue$Type",1503),sDn(1505,1,b2n,Za),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/2methodref$compare$Type",1505),sDn(1507,1,b2n,no),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/3methodref$compare$Type",1507),sDn(1509,1,{},Ja),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/4methodref$doubleValue$Type",1509),sDn(1511,1,b2n,to),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/5methodref$compare$Type",1511),sDn(1513,1,b2n,eo),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/6methodref$compare$Type",1513),sDn(1497,1,{},io),uZn.Kb=function(n){return tcn(),uG(oIn(uG(n,40),(QGn(),ACt)),17)},zW(s7n,"EdgeRouter/lambda$0$Type",1497),sDn(1508,1,{},ro),uZn.Kb=function(n){return CR(uG(n,40))},zW(s7n,"EdgeRouter/lambda$11$Type",1508),sDn(1510,1,{},dO),uZn.Kb=function(n){return vq(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$13$Type",1510),sDn(1512,1,{},gO),uZn.Kb=function(n){return IR(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$15$Type",1512),sDn(1514,1,b2n,co),uZn.Ne=function(n,t){return Gkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$17$Type",1514),sDn(1515,1,b2n,ao),uZn.Ne=function(n,t){return qkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$18$Type",1515),sDn(1516,1,b2n,oo),uZn.Ne=function(n,t){return zkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$19$Type",1516),sDn(1499,1,y1n,Np),uZn.Mb=function(n){return n0(this.a,uG(n,40))},uZn.a=0,zW(s7n,"EdgeRouter/lambda$2$Type",1499),sDn(1517,1,b2n,uo),uZn.Ne=function(n,t){return Xkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$20$Type",1517),sDn(1500,1,b2n,so),uZn.Ne=function(n,t){return TG(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$3$Type",1500),sDn(1501,1,b2n,ho),uZn.Ne=function(n,t){return jG(uG(n,40),uG(t,40))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$4$Type",1501),sDn(1502,1,{},mo),uZn.Kb=function(n){return OR(uG(n,40))},zW(s7n,"EdgeRouter/lambda$5$Type",1502),sDn(1504,1,{},pO),uZn.Kb=function(n){return kq(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$7$Type",1504),sDn(1506,1,{},mO),uZn.Kb=function(n){return AR(this.b,this.a,uG(n,40))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$9$Type",1506),sDn(675,1,{675:1},wTn),uZn.e=0,uZn.f=!1,uZn.g=!1,zW(s7n,"MultiLevelEdgeNodeNodeGap",675),sDn(1943,1,b2n,vo),uZn.Ne=function(n,t){return l2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),sDn(1944,1,b2n,ko),uZn.Ne=function(n,t){return b2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944),sDn(501,22,{3:1,34:1,22:1,501:1,188:1,196:1},YI),uZn.dg=function(){return Fpn(this)},uZn.qg=function(){return Fpn(this)};var JCt,YCt,ZCt,nIt,tIt,eIt,iIt=_cn(h7n,"RadialLayoutPhases",501,Oat,p1,RH);sDn(1113,205,M3n,Uj),uZn.rf=function(n,t){var e,i,r,c;if(e=_Kn(this,n),t.Ug("Radial layout",e.c.length),oM(gK(zDn(n,(jOn(),RIt))))||J1(new Sd((vP(),new Vy(n)))),c=XPn(n),Myn(n,(SK(),zCt),c),!c)throw hv(new vM("The given graph is not a tree!"));for(0==(i=uM(pK(zDn(n,HIt))))&&(i=tNn(n)),Myn(n,HIt,i),r=new Ww(_Kn(this,n));r.a<r.c.c.length;)uG(N3(r),47).Kf(n,t.eh(1));t.Vg()},zW(h7n,"RadialLayoutProvider",1113),sDn(556,1,b2n,Vj),uZn.Ne=function(n,t){return RBn(this.a,this.b,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=0,uZn.b=0,zW(h7n,"RadialUtil/lambda$0$Type",556),sDn(1395,1,Q4n,yo),uZn.Kf=function(n,t){GQn(uG(n,27),t)},zW(d7n,"CalculateGraphSize",1395),sDn(1396,1,Q4n,Mo),uZn.Kf=function(n,t){CXn(uG(n,27))},zW(d7n,"EdgeAngleCalculator",1396),sDn(368,22,{3:1,34:1,22:1,368:1,196:1},ZI),uZn.dg=function(){switch(this.g){case 0:return new Co;case 1:return new To;case 2:return new Io;case 3:return new yo;case 4:return new Mo;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var rIt,cIt,aIt,oIt=_cn(d7n,k6n,368,Oat,b9,KH);sDn(653,1,{}),uZn.e=1,uZn.g=0,zW(p7n,"AbstractRadiusExtensionCompaction",653),sDn(1834,653,{},NR),uZn.Cg=function(n){var t,e,i,r,c,a,o,u,s;for(this.c=uG(zDn(n,(SK(),zCt)),27),iw(this,this.c),this.d=aMn(uG(zDn(n,(jOn(),zIt)),300)),(u=uG(zDn(n,AIt),17))&&ew(this,u.a),rw(this,(tJ(o=pK(zDn(n,(XYn(),DDt)))),o)),s=GFn(this.c),this.d&&this.d.Gg(s),SHn(this,s),a=new IM(Uhn(cT(bFt,1),m7n,27,0,[this.c])),e=0;e<2;e++)for(t=0;t<s.c.length;t++)r=new IM(Uhn(cT(bFt,1),m7n,27,0,[(u3(t,s.c.length),uG(s.c[t],27))])),c=t<s.c.length-1?(u3(t+1,s.c.length),uG(s.c[t+1],27)):(u3(0,s.c.length),uG(s.c[0],27)),i=0==t?uG(zq(s,s.c.length-1),27):(u3(t-1,s.c.length),uG(s.c[t-1],27)),xCn(this,(u3(t,s.c.length),uG(s.c[t],27),a),i,c,r)},zW(p7n,"AnnulusWedgeCompaction",1834),sDn(1393,1,Q4n,To),uZn.Kf=function(n,t){sun(uG(n,27),t)},zW(p7n,"GeneralCompactor",1393),sDn(1833,653,{},jo),uZn.Cg=function(n){var t,e,i,r;e=uG(zDn(n,(SK(),zCt)),27),this.f=e,this.b=aMn(uG(zDn(n,(jOn(),zIt)),300)),(r=uG(zDn(n,AIt),17))&&ew(this,r.a),rw(this,(tJ(i=pK(zDn(n,(XYn(),DDt)))),i)),t=GFn(e),this.b&&this.b.Gg(t),aAn(this,t)},uZn.a=0,zW(p7n,"RadialCompaction",1833),sDn(1842,1,{},Eo),uZn.Dg=function(n){var t,e,i,r,c,a;for(this.a=n,t=0,i=0,c=new Ww(a=GFn(n));c.a<c.c.c.length;)for(r=uG(N3(c),27),e=++i;e<a.c.length;e++)bqn(this,r,(u3(e,a.c.length),uG(a.c[e],27)))&&(t+=1);return t},zW(v7n,"CrossingMinimizationPosition",1842),sDn(1840,1,{},So),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f,l,b,w,d;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),f=(u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+u.g/2,l=u.j+u.f/2,c=n.i+n.g/2,a=n.j+n.f/2,(b=new sj).a=f-c,b.b=l-a,OEn(o=new MO(b.a,b.b),n.g,n.f),b.a-=o.a,b.b-=o.b,c=f-b.a,a=l-b.b,OEn(s=new MO(b.a,b.b),u.g,u.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},zW(v7n,"EdgeLengthOptimization",1840),sDn(1841,1,{},Po),uZn.Dg=function(n){var t,i,r,c,a,o,u,s,f;for(r=0,i=new Fz(ix(eRn(n).a.Kc(),new h));hDn(i);)t=uG(N9(i),74),o=(a=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84))).i+a.g/2,u=a.j+a.f/2,c=uG(zDn(a,(XYn(),mDt)),8),s=o-(n.i+c.a+n.g/2),f=u-(n.j+c.b+n.f),r+=e.Math.sqrt(s*s+f*f);return r},zW(v7n,"EdgeLengthPositionOptimization",1841),sDn(1392,653,Q4n,Co),uZn.Kf=function(n,t){lLn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.overlaps","RadiusExtensionOverlapRemoval",1392),sDn(1394,1,Q4n,Io),uZn.Kf=function(n,t){eV(uG(n,27),t)},zW("org.eclipse.elk.alg.radial.intermediate.rotation","GeneralRotator",1394),sDn(434,22,{3:1,34:1,22:1,434:1},nO);var uIt,sIt,hIt,fIt,lIt=_cn(y7n,"AnnulusWedgeCriteria",434,Oat,E1,_H);sDn(393,22,{3:1,34:1,22:1,393:1},tO);var bIt,wIt,dIt,gIt,pIt,mIt,vIt,kIt,yIt,MIt,TIt,jIt,EIt,SIt,PIt,CIt,IIt,OIt,AIt,LIt,NIt,$It,DIt,xIt,RIt,KIt,FIt,_It,BIt,HIt,UIt,GIt,qIt,XIt,zIt,VIt,WIt,QIt,JIt,YIt,ZIt,nOt=_cn(y7n,C3n,393,Oat,p3,FH);sDn(863,1,K2n,El),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M7n),""),"Center On Root"),"Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T7n),""),"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."),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j7n),""),"Radius"),"The radius option can be used to set the initial radius for the radial layouter."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E7n),""),"Rotate"),"The rotate option determines whether a rotation of the layout should be performed."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S7n),""),$7n),"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."),pIt),gNt),nOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P7n),""),"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."),xwn(1)),mNt),dot),ggn(hNt)))),H4(n,P7n,S7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C7n),""),"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."),PIt),gNt),hOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I7n),""),"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."),IIt),gNt),lIt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O7n),""),"Translation Optimization"),"Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized."),vIt),gNt),cOt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A7n),D7n),"Target Angle"),"The angle in radians that the layout should be rotated to after layout."),0),dNt),fot),ggn(hNt)))),H4(n,A7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L7n),D7n),"Additional Wedge Space"),"If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),H4(n,L7n,E7n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N7n),D7n),"Outgoing Edge Angles"),"Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout."),!1),wNt),cot),ggn(hNt)))),nJn((new Sl,n))},zW(y7n,"RadialMetaDataProvider",863),sDn(1008,1,K2n,Sl),uZn.hf=function(n){nJn(n)},zW(y7n,"RadialOptions",1008),sDn(1009,1,{},Oo),uZn.sf=function(){return new Uj},uZn.tf=function(n){},zW(y7n,"RadialOptions/RadialFactory",1009),sDn(354,22,{3:1,34:1,22:1,354:1},eO);var tOt,eOt,iOt,rOt,cOt=_cn(y7n,"RadialTranslationStrategy",354,Oat,c5,BH);sDn(300,22,{3:1,34:1,22:1,300:1},iO);var aOt,oOt,uOt,sOt,hOt=_cn(y7n,"SortingStrategy",300,Oat,m3,HH);sDn(1476,1,y9n,Ao),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){QLn(this,uG(n,27),t)},uZn.c=0,zW("org.eclipse.elk.alg.radial.p1position","EadesRadial",1476),sDn(1838,1,{},Lo),uZn.Eg=function(n){return Oyn(n)},zW(R7n,"AnnulusWedgeByLeafs",1838),sDn(1839,1,{},No),uZn.Eg=function(n){return NPn(this,n)},zW(R7n,"AnnulusWedgeByNodeSpace",1839),sDn(1477,1,y9n,$o),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){epn(this,uG(n,27),t)},zW("org.eclipse.elk.alg.radial.p2routing","StraightLineEdgeRouter",1477),sDn(826,1,{},dy),uZn.Fg=function(n){},uZn.Gg=function(n){kv(this,n)},zW(K7n,"IDSorter",826),sDn(1837,1,b2n,Do),uZn.Ne=function(n,t){return hun(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(K7n,"IDSorter/lambda$0$Type",1837),sDn(1836,1,{},gun),uZn.Fg=function(n){B4(this,n)},uZn.Gg=function(n){n.dc()||(this.e||B4(this,PX(uG(n.Xb(0),27))),kv(this.e,n))},zW(K7n,"PolarCoordinateSorter",1836),sDn(445,22,{3:1,34:1,22:1,445:1},rO);var fOt,lOt,bOt,wOt,dOt=_cn(H7n,"RectPackingLayoutPhases",445,Oat,d3,UH);sDn(1118,205,M3n,qj),uZn.rf=function(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(t.Ug("Rectangle Packing",1),s=uG(zDn(n,(S_n(),hAt)),107),a=oM(gK(zDn(n,iAt))),u=uM(pK(zDn(n,bAt))),M=oM(gK(zDn(n,wAt))),!n.a&&(n.a=new fV(bFt,n,10,11)),p=n.a,oM(gK(zDn(n,aAt)))||J1(new Sd((vP(),new Vy(n)))),y=!1,M&&p.i>=3)for(v=uG(zrn(p,0),27),k=uG(zrn(p,1),27),r=0;r+2<p.i;){if(m=v,v=k,k=uG(zrn(p,r+2),27),m.f>=v.f+k.f+u||k.f>=m.f+v.f+u){y=!0;break}++r}else y=!0;if(!y){for(h=p.i,c=new DD(p);c.e!=c.i.gc();)Myn(uG(Zkn(c),27),(XYn(),vDt),xwn(h)),--h;return XGn(n,new fy),void t.Vg()}for(_J(this.a),JV(this.a,(Jmn(),oOt),uG(zDn(n,mAt),188)),JV(this.a,uOt,uG(zDn(n,sAt),188)),JV(this.a,sOt,uG(zDn(n,dAt),188)),ZL(this.a,(Aq(T=new wJ,oOt,(Zyn(),wOt)),Aq(T,uOt,bOt),oM(gK(zDn(n,YOt)))&&Aq(T,oOt,lOt),T)),o=1/(i=Qzn(this.a,n)).c.length,l=new Ww(i);l.a<l.c.c.length;){if(f=uG(N3(l),47),t.$g())return;f.Kf(n,t.eh(o))}for(w=0,b=0,g=new DD(p);g.e!=g.i.gc();)d=uG(Zkn(g),27),w=e.Math.max(w,d.i+d.g),b=e.Math.max(b,d.j+d.f);tLn(n,new MO(uM(pK(zDn(n,(lBn(),vOt)))),uM(pK(zDn(n,mOt)))),new MO(w,b)),Isn(p,s),a||ZQn(n,uM(pK(zDn(n,vOt)))+(s.b+s.c),uM(pK(zDn(n,mOt)))+(s.d+s.a),!1,!0),oM(gK(zDn(n,aAt)))||J1(new Sd((vP(),new Vy(n)))),t.Vg()},zW(H7n,"RectPackingLayoutProvider",1118),sDn(1518,1,Q4n,xo),uZn.Kf=function(n,t){IXn(uG(n,27),t)},zW(U7n,"InteractiveNodeReorderer",1518),sDn(1519,1,b2n,Ro),uZn.Ne=function(n,t){return kln(uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U7n,"InteractiveNodeReorderer/lambda$0$Type",1519),sDn(456,22,{3:1,34:1,22:1,456:1,196:1},cO),uZn.dg=function(){switch(this.g){case 0:return new xo;case 1:return new Fo;case 2:return new Ko}return null};var gOt,pOt,mOt,vOt,kOt,yOt,MOt,TOt,jOt,EOt,SOt,POt,COt,IOt,OOt,AOt=_cn(U7n,k6n,456,Oat,g3,GH);sDn(1521,1,Q4n,Ko),uZn.Kf=function(n,t){Vmn(uG(n,27),t)},zW(U7n,"MinSizePostProcessor",1521),sDn(1520,1,Q4n,Fo),uZn.Kf=function(n,t){ebn(uG(n,27),t)},zW(U7n,"MinSizePreProcessor",1520),sDn(394,22,{3:1,34:1,22:1,394:1},aO);var LOt,NOt,$Ot,DOt,xOt,ROt,KOt,FOt,_Ot,BOt,HOt,UOt,GOt,qOt,XOt,zOt,VOt,WOt,QOt,JOt,YOt,ZOt,nAt,tAt,eAt,iAt,rAt,cAt,aAt,oAt,uAt,sAt,hAt,fAt,lAt,bAt,wAt,dAt,gAt,pAt,mAt,vAt,kAt=_cn(G7n,"OptimizationGoal",394,Oat,w3,qH);sDn(867,1,K2n,Pl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q7n),""),"Try box layout first"),"Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X7n),""),"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."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z7n),""),"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."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V7n),""),"In new Row"),"If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W7n),int),"Width Approximation Strategy"),"Strategy for finding an initial width of the drawing."),XOt),gNt),CAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q7n),int),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J7n),int),"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."),GOt),gNt),kAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y7n),int),"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."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z7n),"packing"),rnt),"Strategy for finding an initial placement on nodes."),FOt),gNt),LAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,nnt),cnt),"Row Height Reevaluation"),"During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,tnt),cnt),"Compaction iterations"),"Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure."),xwn(1)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ent),"whiteSpaceElimination"),"White Space Approximation Strategy"),"Strategy for expanding nodes such that whitespace in the parent is eliminated."),gNt),$At),ggn(hNt)))),lYn((new Cl,n))},zW(G7n,"RectPackingMetaDataProvider",867),sDn(1016,1,K2n,Cl),uZn.hf=function(n){lYn(n)},zW(G7n,"RectPackingOptions",1016),sDn(1017,1,{},_o),uZn.sf=function(){return new qj},uZn.tf=function(n){},zW(G7n,"RectPackingOptions/RectpackingFactory",1017),sDn(1705,1,{},AU),uZn.a=0,uZn.c=!1,zW(ont,"AreaApproximation",1705);var yAt,MAt,TAt=Iq(ont,"BestCandidateFilter");sDn(673,1,{535:1},Bo),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=M0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.min(a,(o.c+(i.b+i.c))*(o.b+(i.d+i.a)));for(c=new Ww(n);c.a<c.c.c.length;)((r=uG(N3(c),238)).c+(i.b+i.c))*(r.b+(i.d+i.a))==a&&mv(s.c,r);return s},zW(ont,"AreaFilter",673),sDn(674,1,{535:1},Ho),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(u=new Zm,s=M0n,o=new Ww(n);o.a<o.c.c.length;)a=uG(N3(o),238),s=e.Math.min(s,e.Math.abs((a.c+(i.b+i.c))/(a.b+(i.d+i.a))-t));for(c=new Ww(n);c.a<c.c.c.length;)r=uG(N3(c),238),e.Math.abs((r.c+(i.b+i.c))/(r.b+(i.d+i.a))-t)==s&&mv(u.c,r);return u},zW(ont,"AspectRatioFilter",674),sDn(1469,1,y9n,Uo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){IFn(uG(n,27),t)},zW(ont,"GreedyWidthApproximator",1469),sDn(672,1,{535:1},Go),uZn.Hg=function(n,t,i){var r,c,a,o,u,s;for(s=new Zm,a=T0n,u=new Ww(n);u.a<u.c.c.length;)o=uG(N3(u),238),a=e.Math.max(a,mX(o.c+(i.b+i.c),o.b+(i.d+i.a),o.a));for(c=new Ww(n);c.a<c.c.c.length;)mX((r=uG(N3(c),238)).c+(i.b+i.c),r.b+(i.d+i.a),r.a)==a&&mv(s.c,r);return s},zW(ont,"ScaleMeasureFilter",672),sDn(1470,1,y9n,qo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){JLn(uG(n,27),t)},zW(ont,"TargetWidthWidthApproximator",1470),sDn(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},oO),uZn.dg=function(){return UCn(this)},uZn.qg=function(){return UCn(this)};var jAt,EAt,SAt,PAt,CAt=_cn(ont,"WidthApproximationStrategy",491,Oat,M1,XH);sDn(1471,1,y9n,Xo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){oJn(this,uG(n,27),t)},zW(unt,"Compactor",1471),sDn(1473,1,y9n,zo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){zKn(uG(n,27),t)},zW(unt,"NoPlacement",1473),sDn(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},uO),uZn.dg=function(){return Lwn(this)},uZn.qg=function(){return Lwn(this)};var IAt,OAt,AAt,LAt=_cn(unt,"PackingStrategy",439,Oat,b3,WH);sDn(810,1,{},vO),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=M0n,uZn.e=0,uZn.f=M0n,zW(unt,"RowFillingAndCompaction",810),sDn(1472,1,y9n,Vo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){wVn(uG(n,27),t)},zW(unt,"SimplePlacement",1472),sDn(1474,1,y9n,Wo),uZn.rg=function(n){return uG(n,27),null},uZn.Kf=function(n,t){this.Ig(uG(n,27),t)},uZn.Ig=function(n,t){XDn(n,t)},zW(hnt,"EqualWhitespaceEliminator",1474),sDn(1475,1474,y9n,Qo),uZn.Ig=function(n,t){var e,i,r,c;t.Ug("To Aspect Ratio Whitesapce Eliminator",1),c=uM(pK(zDn(n,(lBn(),vOt)))),r=uM(pK(zDn(n,mOt))),i=uM(pK(zDn(n,(S_n(),VOt)))),e=uM(pK(zDn(n,pOt))),c/r<i?Myn(n,vOt,c=r*i):(Myn(n,pOt,e+=c/i-r),Myn(n,mOt,r+e)),XDn(n,t),t.Vg()},zW(hnt,"ToAspectratioNodeExpander",1475),sDn(492,22,{3:1,34:1,22:1,492:1,188:1,196:1},sO),uZn.dg=function(){return Sun(this)},uZn.qg=function(){return Sun(this)};var NAt,$At=_cn(hnt,"WhiteSpaceEliminationStrategy",492,Oat,T1,QH);sDn(172,1,{172:1},dln),uZn.a=0,uZn.c=!1,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=0,uZn.i=0,uZn.k=!1,uZn.o=M0n,uZn.p=M0n,uZn.r=0,uZn.s=0,uZn.t=0,zW(fnt,"Block",172),sDn(209,1,{209:1},c0),uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockRow",209),sDn(315,1,{315:1},r0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,zW(fnt,"BlockStack",315),sDn(238,1,{238:1},jq,Mvn),uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.g=0;var DAt,xAt,RAt,KAt,FAt,_At=zW(fnt,"DrawingData",238);sDn(373,22,{3:1,34:1,22:1,373:1},hO);var BAt,HAt,UAt,GAt,qAt=_cn(fnt,"DrawingDataDescriptor",373,Oat,w9,JH);sDn(186,1,{186:1},e4),uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0,zW(fnt,"RectRow",186),sDn(763,1,{},Xbn),uZn.j=0,zW(bnt,f6n,763),sDn(1209,1,{},Jo),uZn.af=function(n){return atn(n.a,n.b)},zW(bnt,z3n,1209),sDn(1210,1,{},$p),uZn.af=function(n){return X9(this.a,n)},zW(bnt,l6n,1210),sDn(1211,1,{},Dp),uZn.af=function(n){return dyn(this.a,n)},zW(bnt,b6n,1211),sDn(1212,1,{},xp),uZn.af=function(n){return lfn(this.a,n)},zW(bnt,"ElkGraphImporter/lambda$3$Type",1212),sDn(1213,1,{},Rp),uZn.af=function(n){return QNn(this.a,n)},zW(bnt,w6n,1213),sDn(1115,205,M3n,Xj),uZn.rf=function(n,t){var e,i,r,c,a,o,u,s,h,f;for(vnn(n,(fIn(),yLt))&&(f=mK(zDn(n,(jMn(),ULt))),(c=QBn(aan(),f))&&uG(A1(c.f),205).rf(n,t.eh(1))),Myn(n,gLt,(B7(),ZAt)),Myn(n,pLt,(pOn(),cLt)),Myn(n,mLt,(Vhn(),VLt)),a=uG(zDn(n,(jMn(),FLt)),17).a,t.Ug("Overlap removal",1),oM(gK(zDn(n,KLt))),u=new Kp(o=new ek),e=wYn(i=new Xbn,n),s=!0,r=0;r<a&&s;){if(oM(gK(zDn(n,_Lt)))){if(o.a.$b(),IAn(new I$(u),e.i),0==o.a.gc())break;e.e=o}for(_J(this.b),JV(this.b,(Rdn(),HAt),(eP(),GLt)),JV(this.b,UAt,e.g),JV(this.b,GAt,(tP(),QAt)),this.a=Qzn(this.b,e),h=new Ww(this.a);h.a<h.c.c.length;)uG(N3(h),47).Kf(e,t.eh(1));GEn(i,e),s=oM(gK(oIn(e,(rsn(),Aht)))),++r}tWn(i,e),t.Vg()},zW(bnt,"OverlapRemovalLayoutProvider",1115),sDn(1116,1,{},Kp),zW(bnt,"OverlapRemovalLayoutProvider/lambda$0$Type",1116),sDn(444,22,{3:1,34:1,22:1,444:1},fO);var XAt,zAt,VAt=_cn(bnt,"SPOrEPhases",444,Oat,k3,ZH);sDn(1219,1,{},zj),zW(bnt,"ShrinkTree",1219),sDn(1117,205,M3n,by),uZn.rf=function(n,t){var e,i,r,c;vnn(n,(fIn(),yLt))&&(c=mK(zDn(n,yLt)),(r=QBn(aan(),c))&&uG(A1(r.f),205).rf(n,t.eh(1))),e=wYn(i=new Xbn,n),fRn(this.a,e,t.eh(1)),tWn(i,e)},zW(bnt,"ShrinkTreeLayoutProvider",1117),sDn(306,137,{3:1,306:1,96:1,137:1},i0),uZn.c=!1,zW("org.eclipse.elk.alg.spore.graph","Graph",306),sDn(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},rP),uZn.dg=function(){return cln(this)},uZn.qg=function(){return cln(this)};var WAt,QAt,JAt=_cn(wnt,C3n,490,Oat,NJ,YH);sDn(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},GR),uZn.dg=function(){return new tu},uZn.qg=function(){return new tu};var YAt,ZAt,nLt,tLt=_cn(wnt,"OverlapRemovalStrategy",558,Oat,$J,nU);sDn(438,22,{3:1,34:1,22:1,438:1},lO);var eLt,iLt,rLt,cLt,aLt,oLt,uLt=_cn(wnt,"RootSelection",438,Oat,P1,tU);sDn(324,22,{3:1,34:1,22:1,324:1},bO);var sLt,hLt,fLt,lLt,bLt,wLt,dLt,gLt,pLt,mLt,vLt,kLt,yLt,MLt,TLt,jLt,ELt,SLt,PLt,CLt,ILt,OLt,ALt,LLt,NLt,$Lt,DLt,xLt,RLt,KLt,FLt,_Lt,BLt,HLt,ULt,GLt,qLt=_cn(wnt,"SpanningTreeCostFunction",324,Oat,d9,eU);sDn(1014,1,K2n,Il),uZn.hf=function(n){xXn(n)},zW(wnt,"SporeCompactionOptions",1014),sDn(1015,1,{},Yo),uZn.sf=function(){return new by},uZn.tf=function(n){},zW(wnt,"SporeCompactionOptions/SporeCompactionFactory",1015),sDn(866,1,K2n,Ol),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,gnt),""),"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."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ynt),"structure"),"Structure Extraction Strategy"),"This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices."),xLt),gNt),WLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,pnt),Snt),"Tree Construction Strategy"),"Whether a minimum spanning tree or a maximum spanning tree should be constructed."),$Lt),gNt),JLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,mnt),Snt),"Cost Function for Spanning Tree"),"The cost function is used in the creation of the spanning tree."),LLt),gNt),qLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,vnt),Snt),"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),kNt),$ot),ggn(hNt)))),H4(n,vnt,knt,CLt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,knt),Snt),"Root selection for spanning tree"),"This sets the method used to select a root node for the construction of a spanning tree"),OLt),gNt),uLt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Mnt),y8n),rnt),"This option defines how the compaction is applied."),TLt),gNt),JAt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Tnt),y8n),"Orthogonal Compaction"),"Restricts the translation of nodes to orthogonal directions in the compaction phase."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,jnt),Pnt),"Upper limit for iterations of overlap removal"),null),xwn(64)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ent),Pnt),"Whether to run a supplementary scanline overlap check."),null),!0),wNt),cot),ggn(hNt)))),RHn((new Al,n)),xXn((new Il,n))},zW(wnt,"SporeMetaDataProvider",866),sDn(1012,1,K2n,Al),uZn.hf=function(n){RHn(n)},zW(wnt,"SporeOverlapRemovalOptions",1012),sDn(1013,1,{},Zo),uZn.sf=function(){return new Xj},uZn.tf=function(n){},zW(wnt,"SporeOverlapRemovalOptions/SporeOverlapFactory",1013),sDn(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},pJ),uZn.dg=function(){return aln(this)},uZn.qg=function(){return aln(this)};var XLt,zLt,VLt,WLt=_cn(wnt,"StructureExtractionStrategy",539,Oat,DJ,iU);sDn(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},wO),uZn.dg=function(){return Hpn(this)},uZn.qg=function(){return Hpn(this)};var QLt,JLt=_cn(wnt,"TreeConstructionStrategy",437,Oat,C1,rU);sDn(1463,1,y9n,nu),uZn.rg=function(n){return uG(n,306),new wJ},uZn.Kf=function(n,t){ZEn(uG(n,306),t)},zW(Int,"DelaunayTriangulationPhase",1463),sDn(1464,1,QZn,Fp),uZn.Cd=function(n){kD(this.a,uG(n,68).a)},zW(Int,"DelaunayTriangulationPhase/lambda$0$Type",1464),sDn(794,1,y9n,hy),uZn.rg=function(n){return uG(n,306),new wJ},uZn.Kf=function(n,t){this.Jg(uG(n,306),t)},uZn.Jg=function(n,t){var e;t.Ug("Minimum spanning tree construction",1),e=n.d?n.d.a:uG(zq(n.i,0),68).a,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),gzn(n.e,e,n.b)),n),t.Vg()},zW(Ont,"MinSTPhase",794),sDn(1466,794,y9n,_k),uZn.Jg=function(n,t){var e,i;t.Ug("Maximum spanning tree construction",1),e=new _p(n),i=n.d?n.d.c:uG(zq(n.i,0),68).c,ifn(this,(oM(gK(oIn(n,(rsn(),Oht)))),gzn(n.e,i,e)),n),t.Vg()},zW(Ont,"MaxSTPhase",1466),sDn(1467,1,{},_p),uZn.af=function(n){return gA(this.a,n)},zW(Ont,"MaxSTPhase/lambda$0$Type",1467),sDn(1465,1,QZn,Bp),uZn.Cd=function(n){$$(this.a,uG(n,68))},zW(Ont,"MinSTPhase/lambda$0$Type",1465),sDn(796,1,y9n,tu),uZn.rg=function(n){return uG(n,306),new wJ},uZn.Kf=function(n,t){jCn(this,uG(n,306),t)},uZn.a=!1,zW(Ant,"GrowTreePhase",796),sDn(797,1,QZn,NU),uZn.Cd=function(n){Rhn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"GrowTreePhase/lambda$0$Type",797),sDn(1468,1,y9n,eu),uZn.rg=function(n){return uG(n,306),new wJ},uZn.Kf=function(n,t){EMn(this,uG(n,306),t)},zW(Ant,"ShrinkTreeCompactionPhase",1468),sDn(795,1,QZn,$U),uZn.Cd=function(n){oDn(this.a,this.b,this.c,uG(n,225))},zW(Ant,"ShrinkTreeCompactionPhase/lambda$0$Type",795);var YLt,ZLt,nNt=Iq(p9n,"IGraphElementVisitor");sDn(872,1,{536:1},r4),uZn.Kg=function(n){var t;zsn(t=aBn(this,n),uG(cQ(this.b,n),96)),hRn(this,n,t)},zW(T3n,"LayoutConfigurator",872);var tNt,eNt,iNt,rNt=Iq(T3n,"LayoutConfigurator/IPropertyHolderOptionFilter");sDn(944,1,{2032:1},iu),uZn.Lg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$0$Type",944),sDn(943,1,{845:1},ru),uZn.Mg=function(n,t){return Whn(),!n.pf(t)},zW(T3n,"LayoutConfigurator/lambda$1$Type",943),sDn(945,1,{2032:1},cu),uZn.Lg=function(n,t){return Zj(n,t)},zW(T3n,"LayoutConfigurator/lambda$2$Type",945),sDn(946,1,y1n,kO),uZn.Mb=function(n){return ZQ(this.a,this.b,uG(n,2032))},zW(T3n,"LayoutConfigurator/lambda$3$Type",946),sDn(869,1,{},au),zW(T3n,"RecursiveGraphLayoutEngine",869),sDn(224,63,S1n,Hv,jM),zW(T3n,"UnsupportedConfigurationException",224),sDn(370,63,S1n,EM),zW(T3n,"UnsupportedGraphException",370),sDn(761,1,{}),zW(p9n,"AbstractRandomListAccessor",761),sDn(450,761,{},mKn),uZn.Ng=function(){return null},uZn.d=!0,uZn.e=!0,uZn.f=0,zW($nt,"AlgorithmAssembler",450),sDn(1200,1,y1n,ou),uZn.Mb=function(n){return!!uG(n,106)},zW($nt,"AlgorithmAssembler/lambda$0$Type",1200),sDn(1201,1,{},Hp),uZn.Kb=function(n){return $T(this.a,uG(n,106))},zW($nt,"AlgorithmAssembler/lambda$1$Type",1201),sDn(1202,1,y1n,uu),uZn.Mb=function(n){return!!uG(n,80)},zW($nt,"AlgorithmAssembler/lambda$2$Type",1202),sDn(1203,1,QZn,Up),uZn.Cd=function(n){gsn(this.a,uG(n,80))},zW($nt,"AlgorithmAssembler/lambda$3$Type",1203),sDn(1204,1,QZn,yO),uZn.Cd=function(n){RR(this.a,this.b,uG(n,196))},zW($nt,"AlgorithmAssembler/lambda$4$Type",1204),sDn(1343,1,b2n,su),uZn.Ne=function(n,t){return mZ(uG(n,196),uG(t,196))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW($nt,"EnumBasedFactoryComparator",1343),sDn(80,761,{80:1},wJ),uZn.Ng=function(){return new ek},uZn.a=0,zW($nt,"LayoutProcessorConfiguration",80),sDn(1025,1,{536:1},Nl),uZn.Kg=function(n){Yun(eNt,new Gp(n))},zW(N2n,"DeprecatedLayoutOptionReplacer",1025),sDn(1026,1,QZn,hu),uZn.Cd=function(n){Etn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$0$Type",1026),sDn(1027,1,QZn,fu),uZn.Cd=function(n){hmn(uG(n,167))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$1$Type",1027),sDn(1028,1,{},Gp),uZn.Yd=function(n,t){xR(this.a,uG(n,149),uG(t,41))},zW(N2n,"DeprecatedLayoutOptionReplacer/lambda$2$Type",1028),sDn(143,1,{701:1,143:1},hCn),uZn.Fb=function(n){return k9(this,n)},uZn.Og=function(){return this.b},uZn.Pg=function(){return this.c},uZn.xe=function(){return this.e},uZn.Hb=function(){return pln(this.c)},uZn.Ib=function(){return"Layout Algorithm: "+this.c};var cNt,aNt=zW(N2n,"LayoutAlgorithmData",143);sDn(269,1,{},bu),zW(N2n,"LayoutAlgorithmData/Builder",269),sDn(1029,1,{536:1},wu),uZn.Kg=function(n){F$(n,207)&&!oM(gK(n.of((XYn(),z$t))))&&JGn(uG(n,27))},zW(N2n,"LayoutAlgorithmResolver",1029),sDn(233,1,{701:1,233:1},I2),uZn.Fb=function(n){return!!F$(n,233)&&m_(this.b,uG(n,233).b)},uZn.Og=function(){return this.a},uZn.Pg=function(){return this.b},uZn.xe=function(){return this.d},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return"Layout Type: "+this.b},zW(N2n,"LayoutCategoryData",233),sDn(357,1,{},du),zW(N2n,"LayoutCategoryData/Builder",357),sDn(879,1,{},ABn),zW(N2n,"LayoutMetaDataService",879),sDn(880,1,{},lQ),zW(N2n,"LayoutMetaDataService/Registry",880),sDn(487,1,{487:1},gu),zW(N2n,"LayoutMetaDataService/Registry/Triple",487),sDn(881,1,Dnt,lu),uZn.Qg=function(){return new sj},zW(N2n,"LayoutMetaDataService/lambda$0$Type",881),sDn(882,1,xnt,pu),uZn.Rg=function(n){return D$(uG(n,8))},zW(N2n,"LayoutMetaDataService/lambda$1$Type",882),sDn(891,1,Dnt,mu),uZn.Qg=function(){return new Zm},zW(N2n,"LayoutMetaDataService/lambda$10$Type",891),sDn(892,1,xnt,vu),uZn.Rg=function(n){return new Z_(uG(n,13))},zW(N2n,"LayoutMetaDataService/lambda$11$Type",892),sDn(893,1,Dnt,ku),uZn.Qg=function(){return new lS},zW(N2n,"LayoutMetaDataService/lambda$12$Type",893),sDn(894,1,xnt,yu),uZn.Rg=function(n){return oG(uG(n,67))},zW(N2n,"LayoutMetaDataService/lambda$13$Type",894),sDn(895,1,Dnt,Mu),uZn.Qg=function(){return new ek},zW(N2n,"LayoutMetaDataService/lambda$14$Type",895),sDn(896,1,xnt,Tu),uZn.Rg=function(n){return PZ(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$15$Type",896),sDn(897,1,Dnt,ju),uZn.Qg=function(){return new XL},zW(N2n,"LayoutMetaDataService/lambda$16$Type",897),sDn(898,1,xnt,Eu),uZn.Rg=function(n){return g8(uG(n,49))},zW(N2n,"LayoutMetaDataService/lambda$17$Type",898),sDn(899,1,Dnt,Su),uZn.Qg=function(){return new rk},zW(N2n,"LayoutMetaDataService/lambda$18$Type",899),sDn(900,1,xnt,Pu),uZn.Rg=function(n){return aG(uG(n,157))},zW(N2n,"LayoutMetaDataService/lambda$19$Type",900),sDn(883,1,Dnt,Cu),uZn.Qg=function(){return new Uk},zW(N2n,"LayoutMetaDataService/lambda$2$Type",883),sDn(884,1,xnt,Iu),uZn.Rg=function(n){return new tj(uG(n,75))},zW(N2n,"LayoutMetaDataService/lambda$3$Type",884),sDn(885,1,Dnt,Ou),uZn.Qg=function(){return new Nk},zW(N2n,"LayoutMetaDataService/lambda$4$Type",885),sDn(886,1,xnt,Au),uZn.Rg=function(n){return new zU(uG(n,140))},zW(N2n,"LayoutMetaDataService/lambda$5$Type",886),sDn(887,1,Dnt,Lu),uZn.Qg=function(){return new Dk},zW(N2n,"LayoutMetaDataService/lambda$6$Type",887),sDn(888,1,xnt,Nu),uZn.Rg=function(n){return new VU(uG(n,107))},zW(N2n,"LayoutMetaDataService/lambda$7$Type",888),sDn(889,1,Dnt,$u),uZn.Qg=function(){return new Qu},zW(N2n,"LayoutMetaDataService/lambda$8$Type",889),sDn(890,1,xnt,Du),uZn.Rg=function(n){return new qen(uG(n,385))},zW(N2n,"LayoutMetaDataService/lambda$9$Type",890);var oNt,uNt,sNt,hNt,fNt,lNt=Iq(p3n,"IProperty");sDn(23,1,{34:1,701:1,23:1,149:1},tAn),uZn.Fd=function(n){return lD(this,uG(n,149))},uZn.Fb=function(n){return F$(n,23)?m_(this.f,uG(n,23).f):F$(n,149)&&m_(this.f,uG(n,149).Pg())},uZn.Sg=function(){var n;if(F$(this.b,4)){if(null==(n=Nvn(this.b)))throw hv(new kM(Bnt+this.f+"'. Make sure it's type is registered with the "+(vK($Ft),$Ft.k)+Knt));return n}return this.b},uZn.Og=function(){return this.d},uZn.Pg=function(){return this.f},uZn.xe=function(){return this.i},uZn.Hb=function(){return pln(this.f)},uZn.Ib=function(){return"Layout Option: "+this.f},zW(N2n,"LayoutOptionData",23),sDn(24,1,{},xu),zW(N2n,"LayoutOptionData/Builder",24),sDn(170,22,{3:1,34:1,22:1,170:1},jO);var bNt,wNt,dNt,gNt,pNt,mNt,vNt,kNt,yNt,MNt=_cn(N2n,"LayoutOptionData/Target",170,Oat,g9,cU);sDn(285,22,{3:1,34:1,22:1,285:1},EO);var TNt,jNt,ENt,SNt=_cn(N2n,"LayoutOptionData/Type",285,Oat,wrn,aU);sDn(116,1,{116:1},cN,gY,qZ),uZn.Fb=function(n){var t;return!(null==n||!F$(n,116))&&(t=uG(n,116),OJ(this.c,t.c)&&OJ(this.d,t.d)&&OJ(this.b,t.b)&&OJ(this.a,t.a))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d,this.b,this.a]))},uZn.Ib=function(){return"Rect[x="+this.c+",y="+this.d+",w="+this.b+",h="+this.a+"]"},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,zW(o6n,"ElkRectangle",116),sDn(8,1,{3:1,4:1,8:1,423:1},sj,O2,MO,eN),uZn.Fb=function(n){return uon(this,n)},uZn.Hb=function(){return OL(this.a)+QTn(OL(this.b))},uZn.cg=function(n){var t,e,i;for(e=0;e<n.length&&Qbn((s3(e,n.length),n.charCodeAt(e)),r6n);)++e;for(t=n.length;t>0&&Qbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(e>=t)throw hv(new vM("The given string does not contain any numbers."));if(2!=(i=WGn((Knn(e,t,n.length),n.substr(e,t-e)),",|;|\r|\n")).length)throw hv(new vM("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=YIn(KAn(i[0])),this.b=YIn(KAn(i[1]))}catch(r){throw F$(r=Ehn(r),130)?hv(new vM(a6n+r)):hv(r)}},uZn.Ib=function(){return"("+this.a+","+this.b+")"},uZn.a=0,uZn.b=0;var PNt=zW(o6n,"KVector",8);sDn(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Uk,tj,UR),uZn.Pc=function(){return ibn(this)},uZn.cg=function(n){var t,e,i,r,c;e=WGn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),BY(this);try{for(t=0,r=0,i=0,c=0;t<e.length;)null!=e[t]&&KAn(e[t]).length>0&&(r%2==0?i=YIn(e[t]):c=YIn(e[t]),r>0&&r%2!=0&&aq(this,new MO(i,c)),++r),++t}catch(a){throw F$(a=Ehn(a),130)?hv(new vM("The given string does not match the expected format for vectors."+a)):hv(a)}},uZn.Ib=function(){var n,t,e;for(n=new lx("("),t=Fkn(this,0);t.b!=t.d.c;)JA(n,(e=uG(I6(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CNt,INt,ONt,ANt,LNt,NNt,$Nt=zW(o6n,"KVectorChain",75);sDn(255,22,{3:1,34:1,22:1,255:1},TO);var DNt,xNt,RNt,KNt,FNt,_Nt,BNt,HNt,UNt,GNt,qNt,XNt,zNt,VNt,WNt,QNt,JNt,YNt,ZNt,n$t=_cn(Unt,"Alignment",255,Oat,Ynn,oU);sDn(991,1,K2n,$l),uZn.hf=function(n){YUn(n)},zW(Unt,"BoxLayouterOptions",991),sDn(992,1,{},Ru),uZn.sf=function(){return new _u},uZn.tf=function(n){},zW(Unt,"BoxLayouterOptions/BoxFactory",992),sDn(298,22,{3:1,34:1,22:1,298:1},SO);var t$t,e$t,i$t,r$t,c$t,a$t,o$t,u$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,m$t,v$t,k$t,y$t,M$t,T$t,j$t,E$t,S$t,P$t,C$t,I$t,O$t,A$t,L$t,N$t,$$t,D$t,x$t,R$t,K$t,F$t,_$t,B$t,H$t,U$t,G$t,q$t,X$t,z$t,V$t,W$t,Q$t,J$t,Y$t,Z$t,nDt,tDt,eDt,iDt,rDt,cDt,aDt,oDt,uDt,sDt,hDt,fDt,lDt,bDt,wDt,dDt,gDt,pDt,mDt,vDt,kDt,yDt,MDt,TDt,jDt,EDt,SDt,PDt,CDt,IDt,ODt,ADt,LDt,NDt,$Dt,DDt,xDt,RDt,KDt,FDt,_Dt,BDt,HDt,UDt,GDt,qDt,XDt,zDt,VDt,WDt,QDt,JDt,YDt,ZDt,nxt,txt=_cn(Unt,"ContentAlignment",298,Oat,Znn,uU);sDn(699,1,K2n,Dl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Vnt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Wnt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),vNt),aNt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X8n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),r$t),gNt),n$t),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,R3n),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Qnt),""),"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."),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r9n),""),"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."),b$t),pNt),txt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q8n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W8n),""),l3n),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),g$t),gNt),axt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m8n),""),"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."),y$t),gNt),kxt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Xnt),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b8n),""),"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`."),S$t),gNt),Kxt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K3n),""),"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."),Q$t),vNt),Sbt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f4n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g9n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w4n),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l4n),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),hDt),gNt),mRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,b9n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),vNt),PNt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,a4n),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),mNt),dot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,s4n),""),"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)."),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h4n),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c9n),""),"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."),N$t),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u9n),""),"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),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s9n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Jnt),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),vNt),cUt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w9n),""),"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."),D$t),vNt),hbt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U8n),""),"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),wNt),cot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ynt),""),"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),dNt),fot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Znt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ntt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k4n),""),Lnt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),wNt),cot),ggn(hNt)))),H4(n,k4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ttt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ett),""),"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'."),xwn(100)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,itt),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,rtt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),xwn(4e3)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ctt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),xwn(400)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,att),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ott),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,utt),""),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,stt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,znt),"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."),u$t),gNt),SKt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D3n),v8n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u4n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$8n),v8n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D8n),v8n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R8n),v8n),"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),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o4n),v8n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F8n),v8n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_8n),v8n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,B8n),v8n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),vNt),AKt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d9n),v8n),"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."),KDt),vNt),hbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,l9n),dtt),"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)."),mNt),dot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,l9n,f9n,nDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f9n),dtt),"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."),Y$t),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q8n),gtt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),R$t),vNt),Sbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m4n),gtt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),F$t),pNt),eRt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z8n),ptt),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),eDt),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,n9n),ptt),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,t9n),ptt),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,e9n),ptt),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,i9n),ptt),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p4n),mtt),"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."),B$t),pNt),sKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g4n),mtt),"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."),X$t),pNt),wKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x4n),mtt),"Node Size Minimum"),"The minimal size to which a node can be reduced."),G$t),vNt),PNt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d4n),mtt),"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),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a9n),I8n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),v$t),gNt),lxt),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b4n),I8n),"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),wNt),cot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,htt),"font"),"Font Name"),"Font name used for a label."),kNt),$ot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ftt),"font"),"Font Size"),"Font size used for a label."),mNt),dot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h9n),vtt),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),vNt),PNt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,o9n),vtt),"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."),mNt),dot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G8n),vtt),"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."),pDt),gNt),YRt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,H8n),vtt),"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."),dNt),fot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,v4n),ktt),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),wDt),pNt),BRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J8n),ktt),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y8n),ktt),"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),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y4n),ytt),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),dNt),fot),ggn(hNt)))),H4(n,y4n,j4n,zDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ltt),ytt),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),gNt),jKt),ggn(sNt)))),H4(n,ltt,j4n,WDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M4n),ytt),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,M4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T4n),ytt),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,T4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j4n),ytt),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),gNt),mKt),ggn(sNt)))),H4(n,j4n,d4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,btt),ytt),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),dNt),fot),ggn(hNt)))),H4(n,btt,j4n,qDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z8n),Mtt),"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),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V8n),Mtt),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wNt),cot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x3n),"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),dNt),fot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,wtt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),T$t),gNt),Lxt),ggn(oNt)))),sP(n,new I2(BT(UT(HT(new du,S0n),"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.'))),sP(n,new I2(BT(UT(HT(new du,"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.'))),sP(n,new I2(BT(UT(HT(new du,c4n),"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."))),sP(n,new I2(BT(UT(HT(new du,"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."))),sP(n,new I2(BT(UT(HT(new du,a7n),"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."))),sP(n,new I2(BT(UT(HT(new du,"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."))),sP(n,new I2(BT(UT(HT(new du,x7n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),kHn((new xl,n)),YUn((new $l,n)),A_n((new Rl,n))},zW(Unt,"CoreOptions",699),sDn(88,22,{3:1,34:1,22:1,88:1},PO);var ext,ixt,rxt,cxt,axt=_cn(Unt,l3n,88,Oat,H8,sU);sDn(278,22,{3:1,34:1,22:1,278:1},CO);var oxt,uxt,sxt,hxt,fxt,lxt=_cn(Unt,"EdgeLabelPlacement",278,Oat,y3,hU);sDn(223,22,{3:1,34:1,22:1,223:1},IO);var bxt,wxt,dxt,gxt,pxt,mxt,vxt,kxt=_cn(Unt,"EdgeRouting",223,Oat,u5,fU);sDn(321,22,{3:1,34:1,22:1,321:1},OO);var yxt,Mxt,Txt,jxt,Ext,Sxt,Pxt,Cxt,Ixt,Oxt,Axt,Lxt=_cn(Unt,"EdgeType",321,Oat,Jnn,lU);sDn(989,1,K2n,xl),uZn.hf=function(n){kHn(n)},zW(Unt,"FixedLayouterOptions",989),sDn(990,1,{},Ku),uZn.sf=function(){return new Wu},uZn.tf=function(n){},zW(Unt,"FixedLayouterOptions/FixedFactory",990),sDn(346,22,{3:1,34:1,22:1,346:1},AO);var Nxt,$xt,Dxt,xxt,Rxt,Kxt=_cn(Unt,"HierarchyHandling",346,Oat,v3,bU);sDn(291,22,{3:1,34:1,22:1,291:1},LO);var Fxt,_xt,Bxt,Hxt,Uxt,Gxt,qxt,Xxt,zxt,Vxt,Wxt=_cn(Unt,"LabelSide",291,Oat,o5,wU);sDn(95,22,{3:1,34:1,22:1,95:1},NO);var Qxt,Jxt,Yxt,Zxt,nRt,tRt,eRt=_cn(Unt,"NodeLabelPlacement",95,Oat,bcn,dU);sDn(256,22,{3:1,34:1,22:1,256:1},$O);var iRt,rRt,cRt,aRt,oRt,uRt,sRt,hRt=_cn(Unt,"PortAlignment",256,Oat,p9,gU);sDn(101,22,{3:1,34:1,22:1,101:1},DO);var fRt,lRt,bRt,wRt,dRt,gRt,pRt,mRt=_cn(Unt,"PortConstraints",101,Oat,Qnn,pU);sDn(279,22,{3:1,34:1,22:1,279:1},xO);var vRt,kRt,yRt,MRt,TRt,jRt,ERt,SRt,PRt,CRt,IRt,ORt,ARt,LRt,NRt,$Rt,DRt,xRt,RRt,KRt,FRt,_Rt,BRt=_cn(Unt,"PortLabelPlacement",279,Oat,Wnn,mU);sDn(64,22,{3:1,34:1,22:1,64:1},RO);var HRt,URt,GRt,qRt,XRt,zRt,VRt,WRt,QRt,JRt,YRt=_cn(Unt,"PortSide",64,Oat,U8,vU);sDn(993,1,K2n,Rl),uZn.hf=function(n){A_n(n)},zW(Unt,"RandomLayouterOptions",993),sDn(994,1,{},Fu),uZn.sf=function(){return new Xu},uZn.tf=function(n){},zW(Unt,"RandomLayouterOptions/RandomFactory",994),sDn(386,22,{3:1,34:1,22:1,386:1},KO);var ZRt,nKt,tKt,eKt,iKt,rKt,cKt,aKt,oKt,uKt,sKt=_cn(Unt,"SizeConstraint",386,Oat,a5,kU);sDn(264,22,{3:1,34:1,22:1,264:1},FO);var hKt,fKt,lKt,bKt,wKt=_cn(Unt,"SizeOptions",264,Oat,Man,yU);sDn(280,22,{3:1,34:1,22:1,280:1},_O);var dKt,gKt,pKt,mKt=_cn(Unt,"TopdownNodeTypes",280,Oat,M3,MU);sDn(347,22,Ett);var vKt,kKt,yKt,MKt,TKt,jKt=_cn(Unt,"TopdownSizeApproximator",347,Oat,I1,jU);sDn(987,347,Ett,Pq),uZn.Tg=function(n){return sMn(n)},_cn(Unt,"TopdownSizeApproximator/1",987,jKt,null,null),sDn(988,347,Ett,gV),uZn.Tg=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(t=uG(zDn(n,(XYn(),yDt)),143),gj(),aKn(p=new Bk,n),m=new Ym,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)r=uG(Zkn(a),27),GRn(b=new Bk,p),aKn(b,r),k=sMn(r),vN(b,e.Math.max(r.g,k.a),e.Math.max(r.f,k.b)),VAn(m.f,r,b);for(c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)for(s=new DD((!(r=uG(Zkn(c),27)).e&&(r.e=new f_(aFt,r,7,4)),r.e));s.e!=s.i.gc();)u=uG(Zkn(s),74),d=uG(DA(FX(m.f,r)),27),g=uG(cQ(m,zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0)),27),ttn((!(w=new es).b&&(w.b=new f_(cFt,w,4,7)),w.b),d),ttn((!w.c&&(w.c=new f_(cFt,w,5,8)),w.c),g),ARn(w,R0(d)),aKn(w,u);h=uG(A1(t.f),205);try{h.rf(p,new Zu),WQ(t.f,h)}catch(y){throw F$(y=Ehn(y),103),hv(y)}return vnn(p,h$t)||vnn(p,s$t)||VJn(p),o=uM(pK(zDn(p,h$t)))/uM(pK(zDn(p,s$t))),i=uM(pK(zDn(p,BDt)))*e.Math.sqrt((!p.a&&(p.a=new fV(bFt,p,10,11)),p.a).i),l=(v=uG(zDn(p,W$t),107)).b+v.c+1,f=v.d+v.a+1,new MO(e.Math.max(l,i),e.Math.max(f,i/o))},_cn(Unt,"TopdownSizeApproximator/2",988,jKt,null,null),sDn(344,1,{871:1},fy),uZn.Ug=function(n,t){return dCn(this,n,t)},uZn.Vg=function(){POn(this)},uZn.Wg=function(){return this.q},uZn.Xg=function(){return this.f?SZ(this.f):null},uZn.Yg=function(){return SZ(this.a)},uZn.Zg=function(){return this.p},uZn.$g=function(){return!1},uZn._g=function(){return this.n},uZn.ah=function(){return null!=this.p&&!this.b},uZn.bh=function(n){var t;this.n&&(t=n,kD(this.f,t))},uZn.dh=function(n,t){var e,i;this.n&&n&&n4(this,(i=oUn(e=new DW,n),_Wn(e),i),(Eln(),CKt))},uZn.eh=function(n){var t;return this.b?null:(t=irn(this,this.g),aq(this.a,t),t.i=this,this.d=n,t)},uZn.fh=function(n){n>0&&!this.b&&Ban(this,n)},uZn.b=!1,uZn.c=0,uZn.d=-1,uZn.e=null,uZn.f=null,uZn.g=-1,uZn.j=!1,uZn.k=!1,uZn.n=!1,uZn.o=0,uZn.q=0,uZn.r=0,zW(p9n,"BasicProgressMonitor",344),sDn(717,205,M3n,_u),uZn.rf=function(n,t){XGn(n,t)},zW(p9n,"BoxLayoutProvider",717),sDn(983,1,b2n,qp),uZn.Ne=function(n,t){return tKn(this,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=!1,zW(p9n,"BoxLayoutProvider/1",983),sDn(163,1,{163:1},Jrn,nK),uZn.Ib=function(){return this.c?zBn(this.c):vIn(this.b)},zW(p9n,"BoxLayoutProvider/Group",163),sDn(320,22,{3:1,34:1,22:1,320:1},HO);var EKt,SKt=_cn(p9n,"BoxLayoutProvider/PackingMode",320,Oat,s5,EU);sDn(984,1,b2n,Bu),uZn.Ne=function(n,t){return rZ(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$0$Type",984),sDn(985,1,b2n,Hu),uZn.Ne=function(n,t){return GY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$1$Type",985),sDn(986,1,b2n,Uu),uZn.Ne=function(n,t){return qY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$2$Type",986),sDn(1384,1,{845:1},Gu),uZn.Mg=function(n,t){return ZS(),!F$(t,167)||Zj((Whn(),uG(n,167)),t)},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),sDn(1385,1,QZn,Xp),uZn.Cd=function(n){hbn(this.a,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),sDn(1386,1,QZn,zu),uZn.Cd=function(n){uG(n,96),ZS()},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),sDn(1390,1,QZn,zp),uZn.Cd=function(n){_on(this.a,uG(n,96))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),sDn(1388,1,y1n,UO),uZn.Mb=function(n){return oln(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),sDn(1387,1,y1n,GO),uZn.Mb=function(n){return PR(this.a,this.b,uG(n,845))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),sDn(1389,1,QZn,qO),uZn.Cd=function(n){iV(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),sDn(947,1,{},Vu),uZn.Kb=function(n){return oN(n)},uZn.Fb=function(n){return this===n},zW(p9n,"ElkUtil/lambda$0$Type",947),sDn(948,1,QZn,XO),uZn.Cd=function(n){JNn(this.a,this.b,uG(n,74))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$1$Type",948),sDn(949,1,QZn,zO),uZn.Cd=function(n){tM(this.a,this.b,uG(n,166))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$2$Type",949),sDn(950,1,QZn,VO),uZn.Cd=function(n){UN(this.a,this.b,uG(n,135))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$3$Type",950),sDn(951,1,QZn,Vp),uZn.Cd=function(n){Lq(this.a,uG(n,377))},zW(p9n,"ElkUtil/lambda$4$Type",951),sDn(325,1,{34:1,325:1},Jm),uZn.Fd=function(n){return wD(this,uG(n,242))},uZn.Fb=function(n){var t;return!!F$(n,325)&&(t=uG(n,325),this.a==t.a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return this.a+" (exclusive)"},uZn.a=0,zW(p9n,"ExclusiveBounds/ExclusiveLowerBound",325),sDn(1119,205,M3n,Wu),uZn.rf=function(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(t.Ug("Fixed Layout",1),a=uG(zDn(n,(XYn(),k$t)),223),b=0,w=0,m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();){for(g=uG(Zkn(m),27),(j=uG(zDn(g,(Iln(),Cxt)),8))&&(kN(g,j.a,j.b),uG(zDn(g,Txt),181).Hc((Qmn(),VRt))&&(d=uG(zDn(g,Ext),8)).a>0&&d.b>0&&ZQn(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 DD((!g.n&&(g.n=new fV(lFt,g,1,7)),g.n));f.e!=f.i.gc();)u=uG(Zkn(f),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,g.i+u.i+u.g),w=e.Math.max(w,g.j+u.j+u.f);for(y=new DD((!g.c&&(g.c=new fV(wFt,g,9,9)),g.c));y.e!=y.i.gc();)for(k=uG(Zkn(y),123),(j=uG(zDn(k,Cxt),8))&&kN(k,j.a,j.b),M=g.i+k.i,T=g.j+k.j,b=e.Math.max(b,M+k.g),w=e.Math.max(w,T+k.f),s=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));s.e!=s.i.gc();)u=uG(Zkn(s),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,M+u.i+u.g),w=e.Math.max(w,T+u.j+u.f);for(c=new Fz(ix(eRn(g).a.Kc(),new h));hDn(c);)l=iJn(i=uG(N9(c),74)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new Fz(ix(tRn(g).a.Kc(),new h));hDn(r);)R0(bIn(i=uG(N9(r),74)))!=n&&(l=iJn(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(_gn(),uxt))for(p=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new Fz(ix(eRn(g=uG(Zkn(p),27)).a.Kc(),new h));hDn(r);)0==(o=bGn(i=uG(N9(r),74))).b?Myn(i,L$t,null):Myn(i,L$t,o);oM(gK(zDn(n,(Iln(),jxt))))||ZQn(n,b+(v=uG(zDn(n,Sxt),107)).b+v.c,w+v.d+v.a,!0,!0),t.Vg()},zW(p9n,"FixedLayoutProvider",1119),sDn(385,137,{3:1,423:1,385:1,96:1,137:1},Qu,qen),uZn.cg=function(n){var t,e,i,r,c,a,o;if(n)try{for(a=WGn(n,";,;"),r=0,c=(i=a).length;r<c;++r){if(t=WGn(i[r],"\\:"),!(e=DVn(aan(),t[0])))throw hv(new vM("Invalid option id: "+t[0]));if(null==(o=vVn(e,t[1])))throw hv(new vM("Invalid option value: "+t[1]));null==o?(!this.q&&(this.q=new Ym),u7(this.q,e)):(!this.q&&(this.q=new Ym),vJ(this.q,e,o))}}catch(u){throw F$(u=Ehn(u),103)?hv(new tbn(u)):hv(u)}},uZn.Ib=function(){return mK(l8(YJ((this.q?this.q:(hZ(),hZ(),Vot)).vc().Oc(),new Ju),gen(new fG,new Y,new q,new X,Uhn(cT(Rut,1),p1n,108,0,[]))))};var PKt,CKt,IKt,OKt,AKt=zW(p9n,"IndividualSpacings",385);sDn(982,1,{},Ju),uZn.Kb=function(n){return cZ(uG(n,44))},zW(p9n,"IndividualSpacings/lambda$0$Type",982),sDn(718,1,{},LX),uZn.c=0,zW(p9n,"InstancePool",718),sDn(1835,1,{},Yu),zW(p9n,"LoggedGraph",1835),sDn(415,22,{3:1,34:1,22:1,415:1},uA);var LKt,NKt,$Kt,DKt=_cn(p9n,"LoggedGraph/Type",415,Oat,h5,SU);sDn(1063,1,{871:1},Zu),uZn.Ug=function(n,t){return!1},uZn.Vg=function(){},uZn.Wg=function(){return 0},uZn.Xg=function(){return null},uZn.Yg=function(){return null},uZn.Zg=function(){return null},uZn.$g=function(){return!1},uZn._g=function(){return!1},uZn.ah=function(){return!1},uZn.bh=function(n){},uZn.dh=function(n,t){},uZn.eh=function(n){return this},uZn.fh=function(n){},zW(p9n,"NullElkProgressMonitor",1063),sDn(42,1,{20:1,42:1},WO),uZn.Jc=function(n){z8(this,n)},uZn.Fb=function(n){var t,e,i;return!!F$(n,42)&&(e=uG(n,42),t=null==this.a?null==e.a:udn(this.a,e.a),i=null==this.b?null==e.b:udn(this.b,e.b),t&&i)},uZn.Hb=function(){var n,t,e;return n=-65536&(t=null==this.a?0:Hon(this.a)),t&D1n^(-65536&(e=null==this.b?0:Hon(this.b)))>>16&D1n|n^(e&D1n)<<16},uZn.Kc=function(){return new Wp(this)},uZn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+cpn(this.b)+")":null==this.b?"pair("+cpn(this.a)+",null)":"pair("+cpn(this.a)+","+cpn(this.b)+")"},zW(p9n,"Pair",42),sDn(995,1,$Zn,Wp),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},uZn.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 hv(new Bv)},uZn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),hv(new xv)},uZn.b=!1,uZn.c=!1,zW(p9n,"Pair/1",995),sDn(455,1,{455:1},vY),uZn.Fb=function(n){return OJ(this.a,uG(n,455).a)&&OJ(this.c,uG(n,455).c)&&OJ(this.d,uG(n,455).d)&&OJ(this.b,uG(n,455).b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.c,this.d,this.b]))},uZn.Ib=function(){return"("+this.a+TZn+this.c+TZn+this.d+TZn+this.b+")"},zW(p9n,"Quadruple",455),sDn(1108,205,M3n,Xu),uZn.rf=function(n,t){var e;t.Ug("Random Layout",1),0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i?(vQn(n,(e=uG(zDn(n,(Wmn(),XRt)),17))&&0!=e.a?new v8(e.a):new Upn,sM(pK(zDn(n,URt))),sM(pK(zDn(n,zRt))),uG(zDn(n,GRt),107)),t.Vg()):t.Vg()},zW(p9n,"RandomLayoutProvider",1108),sDn(240,1,{240:1},LU),uZn.Fb=function(n){return OJ(this.a,uG(n,240).a)&&OJ(this.b,uG(n,240).b)&&OJ(this.c,uG(n,240).c)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.b,this.c]))},uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(p9n,"Triple",240),sDn(562,1,{}),uZn.Lf=function(){return new MO(this.f.i,this.f.j)},uZn.of=function(n){return QZ(n,(XYn(),uDt))?zDn(this.f,$Kt):zDn(this.f,n)},uZn.Mf=function(){return new MO(this.f.g,this.f.f)},uZn.Nf=function(){return this.g},uZn.pf=function(n){return vnn(this.f,n)},uZn.Of=function(n){ycn(this.f,n.a),Mcn(this.f,n.b)},uZn.Pf=function(n){kcn(this.f,n.a),vcn(this.f,n.b)},uZn.Qf=function(n){this.g=n},uZn.g=0,zW(Ctt,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),sDn(563,1,{853:1},Qp),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=o6(xJ(this.a).i),t=new DD(xJ(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),135),kD(this.b,new Wy(n));return this.b},uZn.b=null,zW(Ctt,"ElkGraphAdapters/ElkEdgeAdapter",563),sDn(289,562,{},Vy),uZn.Sf=function(){return FTn(this)},uZn.a=null,zW(Ctt,"ElkGraphAdapters/ElkGraphAdapter",289),sDn(640,562,{187:1},Wy),zW(Ctt,"ElkGraphAdapters/ElkLabelAdapter",640),sDn(639,562,{695:1},Wx),uZn.Rf=function(){return RTn(this)},uZn.Vf=function(){var n;return!(n=uG(zDn(this.f,(XYn(),$$t)),140))&&(n=new Nk),n},uZn.Xf=function(){return KTn(this)},uZn.Zf=function(n){var t;t=new zU(n),Myn(this.f,(XYn(),$$t),t)},uZn.$f=function(n){Myn(this.f,(XYn(),W$t),new VU(n))},uZn.Tf=function(){return this.d},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=new Zm,t=new Fz(ix(tRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=new Zm,t=new Fz(ix(eRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.c,new Qp(n));return this.c},uZn.Yf=function(){return 0!=wZ(uG(this.f,27)).i||oM(gK(uG(this.f,27).of((XYn(),C$t))))},uZn._f=function(){Xen(this,(vP(),NKt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(Ctt,"ElkGraphAdapters/ElkNodeAdapter",639),sDn(1284,562,{852:1},Jp),uZn.Rf=function(){return rjn(this)},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.f,123).hh().i),t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.f,123).ih().i),t=new DD(uG(this.f,123).ih());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.c,new Qp(n));return this.c},uZn.ag=function(){return uG(uG(this.f,123).of((XYn(),gDt)),64)},uZn.bg=function(){var n,t,e,i,r,c,a;for(i=h0(uG(this.f,123)),e=new DD(uG(this.f,123).ih());e.e!=e.i.gc();)for(a=new DD((!(n=uG(Zkn(e),74)).c&&(n.c=new f_(cFt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ern(lCn(c=uG(Zkn(a),84)),i))return!0;if(lCn(c)==i&&oM(gK(zDn(n,(XYn(),I$t)))))return!0}for(t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)for(r=new DD((!(n=uG(Zkn(t),74)).b&&(n.b=new f_(cFt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ern(lCn(uG(Zkn(r),84)),i))return!0;return!1},uZn.a=null,uZn.b=null,uZn.c=null,zW(Ctt,"ElkGraphAdapters/ElkPortAdapter",1284),sDn(1285,1,b2n,qu),uZn.Ne=function(n,t){return XBn(uG(n,123),uG(t,123))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(Ctt,"ElkGraphAdapters/PortComparator",1285);var xKt,RKt,KKt,FKt,_Kt,BKt,HKt,UKt,GKt,qKt,XKt,zKt,VKt,WKt,QKt,JKt,YKt,ZKt,nFt=Iq(Itt,"EObject"),tFt=Iq(Ott,Att),eFt=Iq(Ott,Ltt),iFt=Iq(Ott,Ntt),rFt=Iq(Ott,"ElkShape"),cFt=Iq(Ott,$tt),aFt=Iq(Ott,Dtt),oFt=Iq(Ott,xtt),uFt=Iq(Itt,Rtt),sFt=Iq(Itt,"EFactory"),hFt=Iq(Itt,Ktt),fFt=Iq(Itt,"EPackage"),lFt=Iq(Ott,Ftt),bFt=Iq(Ott,_tt),wFt=Iq(Ott,Btt);sDn(93,1,Htt),uZn.th=function(){return this.uh(),null},uZn.uh=function(){return null},uZn.vh=function(){return this.uh(),!1},uZn.wh=function(){return!1},uZn.xh=function(n){Msn(this,n)},zW(Utt,"BasicNotifierImpl",93),sDn(99,93,Jtt),uZn.Yh=function(){return uN(this)},uZn.yh=function(n,t){return n},uZn.zh=function(){throw hv(new Kv)},uZn.Ah=function(n){var t;return t=lMn(uG(ern(this.Dh(),this.Fh()),19)),this.Ph().Th(this,t.n,t.f,n)},uZn.Bh=function(n,t){throw hv(new Kv)},uZn.Ch=function(n,t,e){return $Un(this,n,t,e)},uZn.Dh=function(){var n;return this.zh()&&(n=this.zh().Nk())?n:this.ii()},uZn.Eh=function(){return J$n(this)},uZn.Fh=function(){throw hv(new Kv)},uZn.Gh=function(){var n,t;return!(t=this.$h().Ok())&&this.zh().Tk((jP(),t=null==(n=$1(eqn(this.Dh())))?tBt:new zx(this,n))),t},uZn.Hh=function(n,t){return n},uZn.Ih=function(n){return n.pk()?n.Lj():emn(this.Dh(),n)},uZn.Jh=function(){var n;return(n=this.zh())?n.Qk():null},uZn.Kh=function(){return this.zh()?this.zh().Nk():null},uZn.Lh=function(n,t,e){return Dyn(this,n,t,e)},uZn.Mh=function(n){return vtn(this,n)},uZn.Nh=function(n,t){return U9(this,n,t)},uZn.Oh=function(){var n;return!!(n=this.zh())&&n.Rk()},uZn.Ph=function(){throw hv(new Kv)},uZn.Qh=function(){return Kvn(this)},uZn.Rh=function(n,t,e,i){return kyn(this,n,t,i)},uZn.Sh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().zk(this,this.hi(),t-this.ji(),n,e)},uZn.Th=function(n,t,e,i){return O1(this,n,t,i)},uZn.Uh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().Ak(this,this.hi(),t-this.ji(),n,e)},uZn.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},uZn.Wh=function(n){return Wkn(this,n)},uZn.Xh=function(n){return M0(this,n)},uZn.Zh=function(n){return jWn(this,n)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return this.zh()?this.zh().Pk():null},uZn.ai=function(){return Kvn(this)},uZn.bi=function(n,t){sLn(this,n,t)},uZn.ci=function(n){this.$h().Sk(n)},uZn.di=function(n){this.$h().Vk(n)},uZn.ei=function(n){this.$h().Uk(n)},uZn.fi=function(n,t){var e,i,r,c;return(c=this.Jh())&&n&&(t=Nyn(c.El(),this,t),c.Il(this)),(i=this.Ph())&&(PHn(this,this.Ph(),this.Fh()).Bb&P0n?(r=i.Qh())&&(n?!c&&r.Il(this):r.Hl(this)):(t=(e=this.Fh())>=0?this.Ah(t):this.Ph().Th(this,-1-e,null,t),t=this.Ch(null,-1,t))),this.di(n),t},uZn.gi=function(n){var t,e,i,r,c,a,o;if((c=emn(e=this.Dh(),n))>=(t=this.ji()))return uG(n,69).wk().Dk(this,this.hi(),c-t);if(c<=-1){if(!(a=iVn((gAn(),kBt),e,n)))throw hv(new vM(Gtt+n.xe()+ztt));if(PP(),uG(a,69).xk()||(a=_3(Nen(kBt,a))),r=uG((i=this.Ih(a))>=0?this.Lh(i,!0,!0):YNn(this,a,!0),160),(o=a.Ik())>1||-1==o)return uG(uG(r,220).Sl(n,!1),79)}else if(n.Jk())return uG((i=this.Ih(n))>=0?this.Lh(i,!1,!0):YNn(this,n,!1),79);return new jA(this,n)},uZn.hi=function(){return Wen(this)},uZn.ii=function(){return(tQ(),M_t).S},uZn.ji=function(){return iQ(this.ii())},uZn.ki=function(n){oAn(this,n)},uZn.Ib=function(){return vxn(this)},zW(Ytt,"BasicEObjectImpl",99),sDn(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),uZn.li=function(n){return Ven(this)[n]},uZn.mi=function(n,t){uQ(Ven(this),n,t)},uZn.ni=function(n){uQ(Ven(this),n,null)},uZn.th=function(){return uG(Lsn(this,4),129)},uZn.uh=function(){throw hv(new Kv)},uZn.vh=function(){return!!(4&this.Db)},uZn.zh=function(){throw hv(new Kv)},uZn.oi=function(n){Dvn(this,2,n)},uZn.Bh=function(n,t){this.Db=t<<16|255&this.Db,this.oi(n)},uZn.Dh=function(){return e1(this)},uZn.Fh=function(){return this.Db>>16},uZn.Gh=function(){var n;return jP(),null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?tBt:new zx(this,n)},uZn.wh=function(){return!(1&this.Db)},uZn.Jh=function(){return uG(Lsn(this,128),2034)},uZn.Kh=function(){return uG(Lsn(this,16),29)},uZn.Oh=function(){return!!(32&this.Db)},uZn.Ph=function(){return uG(Lsn(this,2),54)},uZn.Vh=function(){return!!(64&this.Db)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return uG(Lsn(this,64),288)},uZn.ci=function(n){Dvn(this,16,n)},uZn.di=function(n){Dvn(this,128,n)},uZn.ei=function(n){Dvn(this,64,n)},uZn.hi=function(){return $vn(this)},uZn.Db=0,zW(Ytt,"MinimalEObjectImpl",119),sDn(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.oi=function(n){this.Cb=n},uZn.Ph=function(){return this.Cb},zW(Ytt,"MinimalEObjectImpl/Container",120),sDn(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return ajn(this,n,t,e)},uZn.Uh=function(n,t,e){return BIn(this,n,t,e)},uZn.Wh=function(n){return j4(this,n)},uZn.bi=function(n,t){bln(this,n,t)},uZn.ii=function(){return tYn(),VKt},uZn.ki=function(n){ffn(this,n)},uZn.nf=function(){return Qkn(this)},uZn.gh=function(){return!this.o&&(this.o=new ltn((tYn(),XKt),EFt,this,0)),this.o},uZn.of=function(n){return zDn(this,n)},uZn.pf=function(n){return vnn(this,n)},uZn.qf=function(n,t){return Myn(this,n,t)},zW(Ztt,"EMapPropertyHolderImpl",2083),sDn(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ns),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Scn(this,uM(pK(t)));case 1:return void pcn(this,uM(pK(t)))}sLn(this,n,t)},uZn.ii=function(){return tYn(),KKt},uZn.ki=function(n){switch(n){case 0:return void Scn(this,0);case 1:return void pcn(this,0)}oAn(this,n)},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):((n=new fx(vxn(this))).a+=" (x: ",Oj(n,this.a),n.a+=", y: ",Oj(n,this.b),n.a+=")",n.a)},uZn.a=0,uZn.b=0,zW(Ztt,"ElkBendPointImpl",572),sDn(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return phn(this,n,t,e)},uZn.Wh=function(n){return _sn(this,n)},uZn.bi=function(n,t){CSn(this,n,t)},uZn.ii=function(){return tYn(),HKt},uZn.ki=function(n){Awn(this,n)},uZn.jh=function(){return this.k},uZn.kh=function(){return xJ(this)},uZn.Ib=function(){return Egn(this)},uZn.k=null,zW(Ztt,"ElkGraphElementImpl",739),sDn(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return spn(this,n,t,e)},uZn.Wh=function(n){return Kpn(this,n)},uZn.bi=function(n,t){ISn(this,n,t)},uZn.ii=function(){return tYn(),zKt},uZn.ki=function(n){Tmn(this,n)},uZn.lh=function(){return this.f},uZn.mh=function(){return this.g},uZn.nh=function(){return this.i},uZn.oh=function(){return this.j},uZn.ph=function(n,t){vN(this,n,t)},uZn.qh=function(n,t){kN(this,n,t)},uZn.rh=function(n){ycn(this,n)},uZn.sh=function(n){Mcn(this,n)},uZn.Ib=function(){return rOn(this)},uZn.f=0,uZn.g=0,uZn.i=0,uZn.j=0,zW(Ztt,"ElkShapeImpl",740),sDn(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return eSn(this,n,t,e)},uZn.Wh=function(n){return iln(this,n)},uZn.bi=function(n,t){SDn(this,n,t)},uZn.ii=function(){return tYn(),FKt},uZn.ki=function(n){yyn(this,n)},uZn.hh=function(){return!this.d&&(this.d=new f_(aFt,this,8,5)),this.d},uZn.ih=function(){return!this.e&&(this.e=new f_(aFt,this,7,4)),this.e},zW(Ztt,"ElkConnectableShapeImpl",741),sDn(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},es),uZn.Ah=function(n){return sEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 3:return s0(this);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),this.a;case 7:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return qx(),!!z$n(this);case 9:return qx(),!!BNn(this);case 10:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?sEn(this,e):this.Cb.Th(this,-1-i,null,e)),nF(this,uG(n,27),e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nmn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nmn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nmn(this.a,n,e)}return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 3:return nF(this,null,e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nyn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nyn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nyn(this.a,n,e)}return phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 3:return!!s0(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 f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return z$n(this);case 9:return BNn(this);case 10:return!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return _sn(this,n)},uZn.bi=function(n,t){switch(n){case 3:return void ARn(this,uG(t,27));case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Czn(this.b),!this.b&&(this.b=new f_(cFt,this,4,7)),void CW(this.b,uG(t,16));case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Czn(this.c),!this.c&&(this.c=new f_(cFt,this,5,8)),void CW(this.c,uG(t,16));case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Czn(this.a),!this.a&&(this.a=new fV(oFt,this,6,6)),void CW(this.a,uG(t,16))}CSn(this,n,t)},uZn.ii=function(){return tYn(),_Kt},uZn.ki=function(n){switch(n){case 3:return void ARn(this,null);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),void Czn(this.b);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),void Czn(this.c);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),void Czn(this.a)}Awn(this,n)},uZn.Ib=function(){return SXn(this)},zW(Ztt,"ElkEdgeImpl",326),sDn(452,2083,{110:1,342:1,166:1,452:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},is),uZn.Ah=function(n){return zjn(this,n)},uZn.Lh=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 MD(eFt,this,5)),this.a;case 6:return f0(this);case 7:return t?fMn(this):this.i;case 8:return t?hMn(this):this.f;case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),this.e;case 11:return this.d}return ajn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?zjn(this,e):this.Cb.Th(this,-1-i,null,e)),ZK(this,uG(n,74),e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nmn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nmn(this.e,n,e)}return uG(ern(uG(Lsn(this,16),29)||(tYn(),BKt),t),69).wk().zk(this,$vn(this),t-iQ((tYn(),BKt)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Nyn(this.a,n,e);case 6:return ZK(this,null,e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nyn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nyn(this.e,n,e)}return BIn(this,n,t,e)},uZn.Wh=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!!f0(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 j4(this,n)},uZn.bi=function(n,t){switch(n){case 1:return void Tcn(this,uM(pK(t)));case 2:return void Ecn(this,uM(pK(t)));case 3:return void mcn(this,uM(pK(t)));case 4:return void jcn(this,uM(pK(t)));case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Czn(this.a),!this.a&&(this.a=new MD(eFt,this,5)),void CW(this.a,uG(t,16));case 6:return void ORn(this,uG(t,74));case 7:return void zan(this,uG(t,84));case 8:return void Xan(this,uG(t,84));case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Czn(this.g),!this.g&&(this.g=new f_(oFt,this,9,10)),void CW(this.g,uG(t,16));case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Czn(this.e),!this.e&&(this.e=new f_(oFt,this,10,9)),void CW(this.e,uG(t,16));case 11:return void fon(this,mK(t))}bln(this,n,t)},uZn.ii=function(){return tYn(),BKt},uZn.ki=function(n){switch(n){case 1:return void Tcn(this,0);case 2:return void Ecn(this,0);case 3:return void mcn(this,0);case 4:return void jcn(this,0);case 5:return!this.a&&(this.a=new MD(eFt,this,5)),void Czn(this.a);case 6:return void ORn(this,null);case 7:return void zan(this,null);case 8:return void Xan(this,null);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),void Czn(this.g);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),void Czn(this.e);case 11:return void fon(this,null)}ffn(this,n)},uZn.Ib=function(){return A$n(this)},uZn.b=0,uZn.c=0,uZn.d=null,uZn.j=0,uZn.k=0,zW(Ztt,"ElkEdgeSectionImpl",452),sDn(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Lh=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab):$tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.Zh=function(n){return VQn(this,n)},uZn.bi=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.di=function(n){Dvn(this,128,n)},uZn.ii=function(){return YYn(),$_t},uZn.ki=function(n){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){this.Bb|=1},uZn.qi=function(n){return GUn(this,n)},uZn.Bb=0,zW(Ytt,"EModelElementImpl",158),sDn(720,158,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},Fl),uZn.ri=function(n,t){return cWn(this,n,t)},uZn.si=function(n){var t,e,i,r;if(this.a!=Hrn(n)||256&n.Bb)throw hv(new vM(cet+n.zb+eet));for(e=n1(n);0!=z5(e.a).i;){if(_Tn(t=uG(yVn(e,0,F$(r=uG(zrn(z5(e.a),0),89).c,90)?uG(r,29):(YYn(),x_t)),29)))return uG(i=Hrn(t).wi().si(t),54).ci(n),i;e=n1(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new Eq(n):new BG(n)},uZn.ti=function(n,t){return cYn(this,n,t)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.a}return $tn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t,e)},uZn.Sh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 1:return this.a&&(e=uG(this.a,54).Th(this,4,fFt,e)),ywn(this,uG(n,241),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 1:return ywn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return l5(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void yIn(this,uG(t,241))}lpn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t)},uZn.ii=function(){return YYn(),A_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void yIn(this,null)}sdn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},zW(Ytt,"EFactoryImpl",720),sDn(1037,720,{110:1,2113:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},rs),uZn.ri=function(n,t){switch(n.hk()){case 12:return uG(t,149).Pg();case 13:return cpn(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 4:return new cs;case 6:return new Bk;case 7:return new Hk;case 8:return new es;case 9:return new ns;case 10:return new is;case 11:return new as;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 13:case 12:return null;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ztt,"ElkGraphFactoryImpl",1037),sDn(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Gh=function(){var n;return null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?(jP(),jP(),tBt):new VR(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.xe()}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),D_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.xe=function(){return this.zb},uZn.ui=function(n){qon(this,n)},uZn.Ib=function(){return Wwn(this)},uZn.zb=null,zW(Ytt,"ENamedElementImpl",448),sDn(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},aZ),uZn.Ah=function(n){return Jjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,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 vV(this,s_t,this)),this.rb;case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?uG(this.Cb,241):null:$0(this)}return $tn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 4:return this.sb&&(e=uG(this.sb,54).Th(this,1,sFt,e)),Jwn(this,uG(n,480),e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nmn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nmn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?Jjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 4:return Jwn(this,null,e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nyn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nyn(this.vb,n,e);case 7:return $Un(this,null,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Wh=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!!$0(this)}return l5(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.Zh=function(n){return jKn(this,n)||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void zon(this,mK(t));case 3:return void Xon(this,mK(t));case 4:return void HIn(this,uG(t,480));case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Czn(this.rb),!this.rb&&(this.rb=new vV(this,s_t,this)),void CW(this.rb,uG(t,16));case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Czn(this.vb),!this.vb&&(this.vb=new i_(fFt,this,6,7)),void CW(this.vb,uG(t,16))}lpn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t)},uZn.ei=function(n){var t,e;if(n&&this.rb)for(e=new DD(this.rb);e.e!=e.i.gc();)F$(t=Zkn(e),364)&&(uG(t,364).w=null);Dvn(this,64,n)},uZn.ii=function(){return YYn(),F_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void zon(this,null);case 3:return void Xon(this,null);case 4:return void HIn(this,null);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),void Czn(this.rb);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),void Czn(this.vb)}sdn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.pi=function(){ojn(this)},uZn.vi=function(){return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb},uZn.wi=function(){return this.sb},uZn.xi=function(){return this.ub},uZn.yi=function(){return this.xb},uZn.zi=function(){return this.yb},uZn.Ai=function(n){this.ub=n},uZn.Ib=function(){var n;return 64&this.Db?Wwn(this):((n=new fx(Wwn(this))).a+=" (nsURI: ",VA(n,this.yb),n.a+=", nsPrefix: ",VA(n,this.xb),n.a+=")",n.a)},uZn.xb=null,uZn.yb=null,zW(Ytt,"EPackageImpl",184),sDn(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},iDn),uZn.q=!1,uZn.r=!1;var dFt=!1;zW(Ztt,"ElkGraphPackageImpl",569),sDn(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},cs),uZn.Ah=function(n){return Vjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 7:return x0(this);case 8:return this.a}return spn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Vjn(this,e):this.Cb.Th(this,-1-i,null,e)),dz(this,uG(n,167),e)):SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return 7==t?dz(this,null,e):phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 7:return!!x0(this);case 8:return!m_("",this.a)}return Kpn(this,n)},uZn.bi=function(n,t){switch(n){case 7:return void vKn(this,uG(t,167));case 8:return void Van(this,mK(t))}ISn(this,n,t)},uZn.ii=function(){return tYn(),UKt},uZn.ki=function(n){switch(n){case 7:return void vKn(this,null);case 8:return void Van(this,"")}Tmn(this,n)},uZn.Ib=function(){return zOn(this)},uZn.a="",zW(Ztt,"ElkLabelImpl",366),sDn(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Bk),uZn.Ah=function(n){return hEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a;case 11:return R0(this);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),this.b;case 13:return qx(),!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nmn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nmn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?hEn(this,e):this.Cb.Th(this,-1-i,null,e)),n_(this,uG(n,27),e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nmn(this.b,n,e)}return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nyn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nyn(this.a,n,e);case 11:return n_(this,null,e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nyn(this.b,n,e)}return eSn(this,n,t,e)},uZn.Wh=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!!R0(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return iln(this,n)},uZn.bi=function(n,t){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Czn(this.c),!this.c&&(this.c=new fV(wFt,this,9,9)),void CW(this.c,uG(t,16));case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Czn(this.a),!this.a&&(this.a=new fV(bFt,this,10,11)),void CW(this.a,uG(t,16));case 11:return void GRn(this,uG(t,27));case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Czn(this.b),!this.b&&(this.b=new fV(aFt,this,12,3)),void CW(this.b,uG(t,16))}SDn(this,n,t)},uZn.ii=function(){return tYn(),GKt},uZn.ki=function(n){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),void Czn(this.c);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),void Czn(this.a);case 11:return void GRn(this,null);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),void Czn(this.b)}yyn(this,n)},uZn.Ib=function(){return zBn(this)},zW(Ztt,"ElkNodeImpl",207),sDn(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Hk),uZn.Ah=function(n){return Wjn(this,n)},uZn.Lh=function(n,t,e){return 9==n?h0(this):SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Wjn(this,e):this.Cb.Th(this,-1-i,null,e)),tF(this,uG(n,27),e)):tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return 9==t?tF(this,null,e):eSn(this,n,t,e)},uZn.Wh=function(n){return 9==n?!!h0(this):iln(this,n)},uZn.bi=function(n,t){9!==n?SDn(this,n,t):LRn(this,uG(t,27))},uZn.ii=function(){return tYn(),qKt},uZn.ki=function(n){9!==n?yyn(this,n):LRn(this,null)},uZn.Ib=function(){return VBn(this)},zW(Ztt,"ElkPortImpl",193);var gFt=Iq(Pet,"BasicEMap/Entry");sDn(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},as),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Wan(this,uG(n,149))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Wan(this,uG(t,149));case 1:return void Han(this,t)}sLn(this,n,t)},uZn.ii=function(){return tYn(),XKt},uZn.ki=function(n){switch(n){case 0:return void Wan(this,null);case 1:return void Han(this,null)}oAn(this,n)},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=n?Hon(n):0),this.a},uZn.md=function(){return this.c},uZn.Ci=function(n){this.a=n},uZn.nd=function(n){var t;return t=this.c,Han(this,n),t},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):(JA(JA(JA(n=new WM,this.b?this.b.Pg():IZn),Y4n),ox(this.c)),n.a)},uZn.a=-1,uZn.c=null;var pFt,mFt,vFt,kFt,yFt,MFt,TFt,jFt,EFt=zW(Ztt,"ElkPropertyToValueMapEntryImpl",1122);sDn(996,1,{},ss),zW(Oet,"JsonAdapter",996),sDn(216,63,S1n,SM),zW(Oet,"JsonImportException",216),sDn(868,1,{},Zjn),zW(Oet,"JsonImporter",868),sDn(903,1,{},QO),zW(Oet,"JsonImporter/lambda$0$Type",903),sDn(904,1,{},JO),zW(Oet,"JsonImporter/lambda$1$Type",904),sDn(912,1,{},Yp),zW(Oet,"JsonImporter/lambda$10$Type",912),sDn(914,1,{},YO),zW(Oet,"JsonImporter/lambda$11$Type",914),sDn(915,1,{},ZO),zW(Oet,"JsonImporter/lambda$12$Type",915),sDn(921,1,{},SY),zW(Oet,"JsonImporter/lambda$13$Type",921),sDn(920,1,{},PY),zW(Oet,"JsonImporter/lambda$14$Type",920),sDn(916,1,{},nA),zW(Oet,"JsonImporter/lambda$15$Type",916),sDn(917,1,{},tA),zW(Oet,"JsonImporter/lambda$16$Type",917),sDn(918,1,{},eA),zW(Oet,"JsonImporter/lambda$17$Type",918),sDn(919,1,{},iA),zW(Oet,"JsonImporter/lambda$18$Type",919),sDn(924,1,{},Zp),zW(Oet,"JsonImporter/lambda$19$Type",924),sDn(905,1,{},nm),zW(Oet,"JsonImporter/lambda$2$Type",905),sDn(922,1,{},tm),zW(Oet,"JsonImporter/lambda$20$Type",922),sDn(923,1,{},em),zW(Oet,"JsonImporter/lambda$21$Type",923),sDn(927,1,{},im),zW(Oet,"JsonImporter/lambda$22$Type",927),sDn(925,1,{},rm),zW(Oet,"JsonImporter/lambda$23$Type",925),sDn(926,1,{},cm),zW(Oet,"JsonImporter/lambda$24$Type",926),sDn(929,1,{},am),zW(Oet,"JsonImporter/lambda$25$Type",929),sDn(928,1,{},om),zW(Oet,"JsonImporter/lambda$26$Type",928),sDn(930,1,QZn,rA),uZn.Cd=function(n){ptn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$27$Type",930),sDn(931,1,QZn,cA),uZn.Cd=function(n){mtn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$28$Type",931),sDn(932,1,{},aA),zW(Oet,"JsonImporter/lambda$29$Type",932),sDn(908,1,{},um),zW(Oet,"JsonImporter/lambda$3$Type",908),sDn(933,1,{},oA),zW(Oet,"JsonImporter/lambda$30$Type",933),sDn(934,1,{},sm),zW(Oet,"JsonImporter/lambda$31$Type",934),sDn(935,1,{},hm),zW(Oet,"JsonImporter/lambda$32$Type",935),sDn(936,1,{},fm),zW(Oet,"JsonImporter/lambda$33$Type",936),sDn(937,1,{},lm),zW(Oet,"JsonImporter/lambda$34$Type",937),sDn(870,1,{},bm),zW(Oet,"JsonImporter/lambda$35$Type",870),sDn(941,1,{},DU),zW(Oet,"JsonImporter/lambda$36$Type",941),sDn(938,1,QZn,wm),uZn.Cd=function(n){V8(this.a,uG(n,377))},zW(Oet,"JsonImporter/lambda$37$Type",938),sDn(939,1,QZn,sA),uZn.Cd=function(n){vA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$38$Type",939),sDn(940,1,QZn,hA),uZn.Cd=function(n){kA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$39$Type",940),sDn(906,1,{},dm),zW(Oet,"JsonImporter/lambda$4$Type",906),sDn(942,1,QZn,gm),uZn.Cd=function(n){W8(this.a,uG(n,8))},zW(Oet,"JsonImporter/lambda$40$Type",942),sDn(907,1,{},pm),zW(Oet,"JsonImporter/lambda$5$Type",907),sDn(911,1,{},mm),zW(Oet,"JsonImporter/lambda$6$Type",911),sDn(909,1,{},vm),zW(Oet,"JsonImporter/lambda$7$Type",909),sDn(910,1,{},km),zW(Oet,"JsonImporter/lambda$8$Type",910),sDn(913,1,{},ym),zW(Oet,"JsonImporter/lambda$9$Type",913),sDn(961,1,QZn,Mm),uZn.Cd=function(n){pQ(this.a,new QW(mK(n)))},zW(Oet,"JsonMetaDataConverter/lambda$0$Type",961),sDn(962,1,QZn,Tm),uZn.Cd=function(n){SW(this.a,uG(n,245))},zW(Oet,"JsonMetaDataConverter/lambda$1$Type",962),sDn(963,1,QZn,jm),uZn.Cd=function(n){m2(this.a,uG(n,143))},zW(Oet,"JsonMetaDataConverter/lambda$2$Type",963),sDn(964,1,QZn,Em),uZn.Cd=function(n){PW(this.a,uG(n,170))},zW(Oet,"JsonMetaDataConverter/lambda$3$Type",964),sDn(245,22,{3:1,34:1,22:1,245:1},fA);var SFt,PFt=_cn(p3n,"GraphFeature",245,Oat,brn,QU);sDn(11,1,{34:1,149:1},Cm,uF,mL,_N),uZn.Fd=function(n){return dD(this,uG(n,149))},uZn.Fb=function(n){return QZ(this,n)},uZn.Sg=function(){return Jkn(this)},uZn.Pg=function(){return this.b},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return this.b},zW(p3n,"Property",11),sDn(671,1,b2n,Sm),uZn.Ne=function(n,t){return wgn(this,uG(n,96),uG(t,96))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p3n,"PropertyHolderComparator",671),sDn(709,1,$Zn,Pm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Mtn(this)},uZn.Qb=function(){xj()},uZn.Ob=function(){return!!this.a},zW(qet,"ElkGraphUtil/AncestorIterator",709);var CFt=Iq(Pet,"EList");sDn(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),uZn.bd=function(n,t){$dn(this,n,t)},uZn.Fc=function(n){return ttn(this,n)},uZn.cd=function(n,t){return bfn(this,n,t)},uZn.Gc=function(n){return CW(this,n)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Li=function(){return!0},uZn.Mi=function(n,t){},uZn.Ni=function(){},uZn.Oi=function(n,t){Ann(this,n,t)},uZn.Pi=function(n,t,e){},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Fb=function(n){return G_n(this,n)},uZn.Hb=function(){return Bhn(this)},uZn.Si=function(){return!1},uZn.Kc=function(){return new DD(this)},uZn.ed=function(){return new Zx(this)},uZn.fd=function(n){var t;if(t=this.gc(),n<0||n>t)throw hv(new w_(n,t));return new QV(this,n)},uZn.Ui=function(n,t){this.Ti(n,this.dd(t))},uZn.Mc=function(n){return rin(this,n)},uZn.Wi=function(n,t){return t},uZn.hd=function(n,t){return Uyn(this,n,t)},uZn.Ib=function(){return Tpn(this)},uZn.Yi=function(){return!0},uZn.Zi=function(n,t){return gln(this,t)},zW(Pet,"AbstractEList",70),sDn(66,70,Qet,ls,Drn,Hun),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.$b=function(){V9(this)},uZn.Hc=function(n){return sSn(this,n)},uZn.Xb=function(n){return zrn(this,n)},uZn._i=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.aj(t),null!=i&&qGn(i,0,this.g,0,this.i))},uZn.dd=function(n){return Ljn(this,n)},uZn.dc=function(){return 0==this.i},uZn.Ti=function(n,t){return HNn(this,n,t)},uZn.aj=function(n){return Inn(dat,EZn,1,n,5,1)},uZn.Vi=function(n){return this.g[n]},uZn.gd=function(n){return gjn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.gc=function(){return this.i},uZn.Pc=function(){return g5(this)},uZn.Qc=function(n){return gmn(this,n)},uZn.i=0;var IFt=zW(Pet,"BasicEList",66),OFt=Iq(Pet,"TreeIterator");sDn(708,66,Jet),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return null!=this.g||this.c?null==this.g||0!=this.i&&uG(this.g[this.i-1],51).Ob():O0(this)},uZn.Pb=function(){return Wxn(this)},uZn.Qb=function(){if(!this.e)throw hv(new kM("There is no valid object to remove."));this.e.Qb()},uZn.c=!1,zW(Pet,"AbstractTreeIterator",708),sDn(700,708,Jet,jN),uZn.bj=function(n){var t;return F$(t=uG(n,58).Gh().Kc(),287)&&uG(t,287).wl(new hs),t},zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator",700),sDn(965,1,{},hs),zW(qet,"ElkGraphUtil/PropertiesSkippingTreeIterator/1",965);var AFt,LFt,NFt,$Ft=zW(qet,"ElkReflect",null);sDn(901,1,xnt,fs),uZn.Rg=function(n){return W0(),E2(uG(n,181))},zW(qet,"ElkReflect/lambda$0$Type",901),Iq(Pet,"ResourceLocator"),sDn(1065,1,{}),zW(Pet,"DelegatingResourceLocator",1065),sDn(1066,1065,{}),zW("org.eclipse.emf.common","EMFPlugin",1066);var DFt,xFt=Iq(Kit,"Adapter"),RFt=Iq(Kit,"Notification");sDn(1174,1,Fit),uZn.cj=function(){return this.d},uZn.dj=function(n){},uZn.ej=function(n){this.d=n},uZn.fj=function(n){this.d==n&&(this.d=null)},uZn.d=null,zW(Utt,"AdapterImpl",1174),sDn(2093,70,_it),uZn.Ei=function(n,t){return nmn(this,n,t)},uZn.Fi=function(n){var t,e,i;if(++this.j,n.dc())return!1;for(t=this.Ej(),i=n.Kc();i.Ob();)e=i.Pb(),this.rj(this.Zi(t,e)),++t;return!0},uZn.Gi=function(n,t){JK(this,n,t)},uZn.Hi=function(n){vQ(this,n)},uZn.pj=function(){return this.sj()},uZn.$b=function(){QK(this,this.Ej(),this.Fj())},uZn.Hc=function(n){return this.uj(n)},uZn.Ic=function(n){return this.vj(n)},uZn.qj=function(n,t){this.Bj().Um()},uZn.rj=function(n){this.Bj().Um()},uZn.sj=function(){return this.Bj()},uZn.tj=function(){this.Bj().Um()},uZn.uj=function(n){return this.Bj().Um()},uZn.vj=function(n){return this.Bj().Um()},uZn.wj=function(n){return this.Bj().Um()},uZn.xj=function(n){return this.Bj().Um()},uZn.yj=function(){return this.Bj().Um()},uZn.zj=function(n){return this.Bj().Um()},uZn.Aj=function(){return this.Bj().Um()},uZn.Cj=function(n){return this.Bj().Um()},uZn.Dj=function(n,t){return this.Bj().Um()},uZn.Ej=function(){return this.Bj().Um()},uZn.Fj=function(){return this.Bj().Um()},uZn.Gj=function(n){return this.Bj().Um()},uZn.Hj=function(){return this.Bj().Um()},uZn.Fb=function(n){return this.wj(n)},uZn.Xb=function(n){return this.Wi(n,this.xj(n))},uZn.Hb=function(){return this.yj()},uZn.dd=function(n){return this.zj(n)},uZn.dc=function(){return this.Aj()},uZn.Ti=function(n,t){return pIn(this,n,t)},uZn.Vi=function(n){return this.xj(n)},uZn.gd=function(n){return Oq(this,n)},uZn.Mc=function(n){var t;return(t=this.dd(n))>=0&&(this.gd(t),!0)},uZn.Xi=function(n,t){return this.Dj(n,this.Zi(n,t))},uZn.gc=function(){return this.Ej()},uZn.Pc=function(){return this.Fj()},uZn.Qc=function(n){return this.Gj(n)},uZn.Ib=function(){return this.Hj()},zW(Pet,"DelegatingEList",2093),sDn(2094,2093,_it),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){_zn(this)},uZn.Ij=function(n,t,e,i,r){return new zZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return!this.Aj()},uZn.Ti=function(n,t){var e,i;return this.Pj()?(i=this.Qj(),e=pIn(this,n,t),this.Jj(this.Ij(7,xwn(t),e,n,i)),e):pIn(this,n,t)},uZn.gd=function(n){var t,e,i,r;return this.Pj()?(e=null,i=this.Qj(),t=this.Ij(4,r=Oq(this,n),null,n,i),this.Mj()&&r?(e=this.Oj(r,e))?(e.nj(t),e.oj()):this.Jj(t):e?(e.nj(t),e.oj()):this.Jj(t),r):(r=Oq(this,n),this.Mj()&&r&&(e=this.Oj(r,null))&&e.oj(),r)},uZn.Xi=function(n,t){return gGn(this,n,t)},zW(Utt,"DelegatingNotifyingListImpl",2094),sDn(152,1,Bit),uZn.nj=function(n){return kPn(this,n)},uZn.oj=function(){Cen(this)},uZn.gj=function(){return this.d},uZn.Kj=function(){return null},uZn.Rj=function(){return null},uZn.hj=function(n){return-1},uZn.ij=function(){return OFn(this)},uZn.jj=function(){return null},uZn.kj=function(){return AFn(this)},uZn.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},uZn.Sj=function(){return!1},uZn.mj=function(n){var t,e,i,r,c,a,o,u;switch(this.d){case 1:case 2:switch(n.gj()){case 1:case 2:if(xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0}case 4:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return a=kVn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.lj(),this.d=6,u=new Drn(2),c<=i?(ttn(u,this.n),ttn(u,n.kj()),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=c,i+1])):(ttn(u,n.kj()),ttn(u,this.n),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=i,c])),this.n=u,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null)){for(a=kVn(this),i=n.lj(),o=uG(this.g,53),e=Inn(YHt,W1n,28,o.length+1,15,1),t=0;t<o.length&&(r=o[t])<=i;)e[t++]=r,++i;for(uG(this.n,15).bd(t,n.kj()),e[t]=i;++t<e.length;)e[t]=o[t-1];return this.g=e,a||(this.o=-2-e[0]),!0}}return!1},uZn.Ib=function(){var n,t,e;switch((e=new fx(Ij(this.Rm)+"@"+(Hon(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:Aj(e,this.d)}if(pHn(this)&&(e.a+=", touch: true"),e.a+=", position: ",Aj(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",zA(e,this.jj()),e.a+=", feature: ",zA(e,this.Kj()),e.a+=", oldValue: ",zA(e,AFn(this)),e.a+=", newValue: ",6==this.d&&F$(this.g,53)){for(t=uG(this.g,53),e.a+="[",n=0;n<t.length;)e.a+=t[n],++n<t.length&&(e.a+=TZn);e.a+="]"}else zA(e,OFn(this));return e.a+=", isTouch: ",Lj(e,pHn(this)),e.a+=", wasSet: ",Lj(e,kVn(this)),e.a+=")",e.a},uZn.d=0,uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.o=0,uZn.p=0,zW(Utt,"NotificationImpl",152),sDn(1188,152,Bit,zZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"DelegatingNotifyingListImpl/1",1188),sDn(251,66,Qet,bs,cj),uZn.Fc=function(n){return Zpn(this,uG(n,378))},uZn.nj=function(n){return Zpn(this,n)},uZn.oj=function(){var n,t,e;for(n=0;n<this.i;++n)null!=(e=(t=uG(this.g[n],378)).jj())&&-1!=t.gj()&&uG(e,94).xh(t)},uZn.aj=function(n){return Inn(RFt,EZn,378,n,0,1)},zW(Utt,"NotificationChainImpl",251),sDn(1524,93,Htt),uZn.uh=function(){return this.e},uZn.wh=function(){return!!(1&this.f)},uZn.f=1,zW(Utt,"NotifierImpl",1524),sDn(2091,66,Qet),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){Czn(this)},uZn.Ij=function(n,t,e,i,r){return new XZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Tj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return 0!=this.i},uZn.Ti=function(n,t){return zdn(this,n,t)},uZn.gd=function(n){return e_n(this,n)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Uj=function(n,t){return t},uZn.Vj=function(n,t){return t},uZn.Wj=function(n,t,e){return e},zW(Utt,"NotifyingListImpl",2091),sDn(1187,152,Bit,XZ),uZn.Kj=function(){return this.a.Kj()},uZn.hj=function(n){return this.a.Lj()},uZn.jj=function(){return this.a.jj()},zW(Utt,"NotifyingListImpl/1",1187),sDn(966,66,Qet,cF),uZn.Hc=function(n){return this.i>10?(this.b&&this.c.j==this.a||(this.b=new oX(this),this.a=this.j),cS(this.b,n)):sSn(this,n)},uZn.Yi=function(){return!0},uZn.a=0,zW(Pet,"AbstractEList/1",966),sDn(302,77,v0n,w_),zW(Pet,"AbstractEList/BasicIndexOutOfBoundsException",302),sDn(37,1,$Zn,DD),uZn.Nb=function(n){SV(this,n)},uZn.Xj=function(){if(this.i.j!=this.f)throw hv(new Fv)},uZn.Yj=function(){return Zkn(this)},uZn.Ob=function(){return this.e!=this.i.gc()},uZn.Pb=function(){return this.Yj()},uZn.Qb=function(){$Sn(this)},uZn.e=0,uZn.f=0,uZn.g=-1,zW(Pet,"AbstractEList/EIterator",37),sDn(286,37,UZn,Zx,QV),uZn.Qb=function(){$Sn(this)},uZn.Rb=function(n){Smn(this,n)},uZn.Zj=function(){var n;try{return n=this.d.Xb(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.$j=function(n){cTn(this,n)},uZn.Sb=function(){return 0!=this.e},uZn.Tb=function(){return this.e},uZn.Ub=function(){return this.Zj()},uZn.Vb=function(){return this.e-1},uZn.Wb=function(n){this.$j(n)},zW(Pet,"AbstractEList/EListIterator",286),sDn(355,37,$Zn,nR),uZn.Yj=function(){return nyn(this)},uZn.Qb=function(){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEIterator",355),sDn(398,286,UZn,tR,N_),uZn.Rb=function(n){throw hv(new Kv)},uZn.Yj=function(){var n;try{return n=this.c.Vi(this.e),this.Xj(),this.g=this.e++,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Zj=function(){var n;try{return n=this.c.Vi(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEListIterator",398),sDn(2080,70,Git),uZn.Ei=function(n,t){var e,i,r,c,a,o,u,s,h;if(0!=(i=t.gc())){for(e=zln(this,(s=null==(u=uG(Lsn(this.a,4),129))?0:u.length)+i),(h=s-n)>0&&qGn(u,n,e,n+i,h),o=t.Kc(),c=0;c<i;++c)XN(e,n+c,gln(this,a=o.Pb()));for(Pkn(this,e),r=0;r<i;++r)a=e[n],this.Mi(n,a),++n;return!0}return++this.j,!1},uZn.Fi=function(n){var t,e,i,r,c,a,o,u,s;if(0!=(i=n.gc())){for(t=zln(this,s=(u=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+i),o=n.Kc(),c=u;c<s;++c)XN(t,c,gln(this,a=o.Pb()));for(Pkn(this,t),r=u;r<s;++r)a=t[r],this.Mi(r,a);return!0}return++this.j,!1},uZn.Gi=function(n,t){var e,i,r,c;e=zln(this,(r=null==(i=uG(Lsn(this.a,4),129))?0:i.length)+1),c=gln(this,t),n!=r&&qGn(i,n,e,n+1,r-n),uQ(e,n,c),Pkn(this,e),this.Mi(n,t)},uZn.Hi=function(n){var t,e,i;XN(t=zln(this,(i=null==(e=uG(Lsn(this.a,4),129))?0:e.length)+1),i,gln(this,n)),Pkn(this,t),this.Mi(i,n)},uZn.Ii=function(){return new T9(this)},uZn.Ji=function(){return new mV(this)},uZn.Ki=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)throw hv(new w_(n,e));return new qJ(this,n)},uZn.$b=function(){var n,t;++this.j,t=null==(n=uG(Lsn(this.a,4),129))?0:n.length,Pkn(this,null),Ann(this,t,n)},uZn.Hc=function(n){var t,e,i,r;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(i=0,r=(e=t).length;i<r;++i)if(udn(n,e[i]))return!0}else for(i=0,r=(e=t).length;i<r;++i)if(xA(e[i])===xA(n))return!0;return!1},uZn.Xb=function(n){var t,e;if(n>=(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length))throw hv(new w_(n,e));return t[n]},uZn.dd=function(n){var t,e,i;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(e=0,i=t.length;e<i;++e)if(udn(n,t[e]))return e}else for(e=0,i=t.length;e<i;++e)if(xA(t[e])===xA(n))return e;return-1},uZn.dc=function(){return null==uG(Lsn(this.a,4),129)},uZn.Kc=function(){return new M9(this)},uZn.ed=function(){return new pV(this)},uZn.fd=function(n){var t,e;if(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length,n<0||n>e)throw hv(new w_(n,e));return new GJ(this,n)},uZn.Ti=function(n,t){var e,i,r;if(n>=(r=null==(e=lvn(this))?0:e.length))throw hv(new dM(zet+n+Vet+r));if(t>=r)throw hv(new dM(Wet+t+Vet+r));return i=e[t],n!=t&&(n<t?qGn(e,n,e,n+1,t-n):qGn(e,t+1,e,t,n-t),uQ(e,n,i),Pkn(this,e)),i},uZn.Vi=function(n){return uG(Lsn(this.a,4),129)[n]},uZn.gd=function(n){return g$n(this,n)},uZn.Xi=function(n,t){var e,i;return i=(e=lvn(this))[n],XN(e,n,gln(this,t)),Pkn(this,e),i},uZn.gc=function(){var n;return null==(n=uG(Lsn(this.a,4),129))?0:n.length},uZn.Pc=function(){var n,t,e;return e=null==(n=uG(Lsn(this.a,4),129))?0:n.length,t=Inn(xFt,Uit,424,e,0,1),e>0&&qGn(n,0,t,0,e),t},uZn.Qc=function(n){var t,e;return(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length)>0&&(n.length<e&&(n=Acn(Tbn(n).c,e)),qGn(t,0,n,0,e)),n.length>e&&uQ(n,e,null),n},zW(Pet,"ArrayDelegatingEList",2080),sDn(1051,37,$Zn,M9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EIterator",1051),sDn(722,286,UZn,pV,GJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.$j=function(n){cTn(this,n),this.a=uG(Lsn(this.b.a,4),129)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EListIterator",722),sDn(1052,355,$Zn,T9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEIterator",1052),sDn(723,398,UZn,mV,qJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEListIterator",723),sDn(615,302,v0n,pL),zW(Pet,"BasicEList/BasicIndexOutOfBoundsException",615),sDn(710,66,Qet,AA),uZn.bd=function(n,t){throw hv(new Kv)},uZn.Fc=function(n){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn._i=function(n){throw hv(new Kv)},uZn.Kc=function(){return this.Ii()},uZn.ed=function(){return this.Ji()},uZn.fd=function(n){return this.Ki(n)},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.gd=function(n){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},zW(Pet,"BasicEList/UnmodifiableEList",710),sDn(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),uZn.bd=function(n,t){Y$(this,n,uG(t,44))},uZn.Fc=function(n){return YR(this,uG(n,44))},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return uG(zrn(this.c,n),136)},uZn.Ti=function(n,t){return uG(this.c.Ti(n,t),44)},uZn.Ui=function(n,t){Z$(this,n,uG(t,44))},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return uG(this.c.gd(n),44)},uZn.hd=function(n,t){return EW(this,n,uG(t,44))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.cd=function(n,t){return this.c.cd(n,t)},uZn.Gc=function(n){return this.c.Gc(n)},uZn.$b=function(){this.c.$b()},uZn.Hc=function(n){return this.c.Hc(n)},uZn.Ic=function(n){return yhn(this.c,n)},uZn._j=function(){var n,t;if(null==this.d){for(this.d=Inn(IFt,qit,66,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)bMn(this,uG(n.Yj(),136));this.e=t}},uZn.Fb=function(n){return H_(this,n)},uZn.Hb=function(){return Bhn(this.c)},uZn.dd=function(n){return this.c.dd(n)},uZn.ak=function(){this.c=new Im(this)},uZn.dc=function(){return 0==this.f},uZn.Kc=function(){return this.c.Kc()},uZn.ed=function(){return this.c.ed()},uZn.fd=function(n){return this.c.fd(n)},uZn.bk=function(){return Tnn(this)},uZn.ck=function(n,t,e){return new xU(n,t,e)},uZn.dk=function(){return new ws},uZn.Mc=function(n){return uan(this,n)},uZn.gc=function(){return this.f},uZn.kd=function(n,t){return new C2(this.c,n,t)},uZn.Pc=function(){return this.c.Pc()},uZn.Qc=function(n){return this.c.Qc(n)},uZn.Ib=function(){return Tpn(this.c)},uZn.e=0,uZn.f=0,zW(Pet,"BasicEMap",721),sDn(1046,66,Qet,Im),uZn.Mi=function(n,t){Qv(this,uG(t,136))},uZn.Pi=function(n,t,e){var i;++(i=this,uG(t,136),i).a.e},uZn.Qi=function(n,t){Jv(this,uG(t,136))},uZn.Ri=function(n,t,e){fR(this,uG(t,136),uG(e,136))},uZn.Oi=function(n,t){Osn(this.a)},zW(Pet,"BasicEMap/1",1046),sDn(1047,66,Qet,ws),uZn.aj=function(n){return Inn(FFt,Xit,621,n,0,1)},zW(Pet,"BasicEMap/2",1047),sDn(1048,KZn,FZn,Om),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return ymn(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new aj(this.a)},uZn.Mc=function(n){var t;return t=this.a.f,Svn(this.a,n),this.a.f!=t},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/3",1048),sDn(1049,31,RZn,Am),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return q_n(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new oj(this.a)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/4",1049),sDn(1050,KZn,FZn,Lm),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){var t,e,i,r,c,a,o,u,s;if(this.a.f>0&&F$(n,44)&&(this.a._j(),r=null==(o=(u=uG(n,44)).ld())?0:Hon(o),c=iF(this.a,r),t=this.a.d[c]))for(e=uG(t.g,379),s=t.i,a=0;a<s;++a)if((i=e[a]).Bi()==r&&i.Fb(u))return!0;return!1},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new HY(this.a)},uZn.Mc=function(n){return MDn(this,n)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/5",1050),sDn(622,1,$Zn,HY),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return-1!=this.b},uZn.Pb=function(){var n;if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.b)throw hv(new Bv);return this.d=this.a,this.e=this.b,XEn(this),n=uG(this.f.d[this.d].g[this.e],136),this.ek(n)},uZn.Qb=function(){if(this.f.e!=this.c)throw hv(new Fv);if(-1==this.e)throw hv(new xv);this.f.c.Mc(zrn(this.f.d[this.d],this.e)),this.c=this.f.e,this.e=-1,this.a==this.d&&-1!=this.b&&--this.b},uZn.ek=function(n){return n},uZn.a=0,uZn.b=-1,uZn.c=0,uZn.d=0,uZn.e=0,zW(Pet,"BasicEMap/BasicEMapIterator",622),sDn(1044,622,$Zn,aj),uZn.ek=function(n){return n.ld()},zW(Pet,"BasicEMap/BasicEMapKeyIterator",1044),sDn(1045,622,$Zn,oj),uZn.ek=function(n){return n.md()},zW(Pet,"BasicEMap/BasicEMapValueIterator",1045),sDn(1043,1,xZn,Nm),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.a.c.$b()},uZn._b=function(n){return dA(this,n)},uZn.uc=function(n){return q_n(this.a,n)},uZn.vc=function(){return Enn(this.a)},uZn.Fb=function(n){return H_(this.a,n)},uZn.xc=function(n){return Lmn(this.a,n)},uZn.Hb=function(){return Bhn(this.a.c)},uZn.dc=function(){return 0==this.a.f},uZn.ec=function(){return Mnn(this.a)},uZn.zc=function(n,t){return rSn(this.a,n,t)},uZn.Bc=function(n){return Svn(this.a,n)},uZn.gc=function(){return this.a.f},uZn.Ib=function(){return Tpn(this.a.c)},uZn.Cc=function(){return jnn(this.a)},zW(Pet,"BasicEMap/DelegatingMap",1043),sDn(621,1,{44:1,136:1,621:1},xU),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),(null!=this.b?udn(this.b,t.ld()):xA(this.b)===xA(t.ld()))&&(null!=this.c?udn(this.c,t.md()):xA(this.c)===xA(t.md())))},uZn.Bi=function(){return this.a},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return this.a^(null==this.c?0:Hon(this.c))},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){throw hv(new Ov)},uZn.nd=function(n){var t;return t=this.c,this.c=n,t},uZn.Ib=function(){return this.b+"->"+this.c},uZn.a=0;var KFt,FFt=zW(Pet,"BasicEMap/EntryImpl",621);sDn(546,1,{},ds),zW(Pet,"BasicEMap/View",546),sDn(783,1,{}),uZn.Fb=function(n){return PDn((hZ(),zot),n)},uZn.Hb=function(){return Zfn((hZ(),zot))},uZn.Ib=function(){return vIn((hZ(),zot))},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList",783),sDn(1348,1,UZn,gs),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList/1",1348),sDn(1346,783,{20:1,16:1,15:1,61:1},Gk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},zW(Pet,"ECollections/EmptyUnmodifiableEList",1346),sDn(1347,783,{20:1,16:1,15:1,61:1,597:1},qk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},uZn.bk=function(){return hZ(),hZ(),Vot},zW(Pet,"ECollections/EmptyUnmodifiableEMap",1347);var _Ft,BFt=Iq(Pet,"Enumerator");sDn(288,1,{288:1},Z_n),uZn.Fb=function(n){var t;return this===n||!!F$(n,288)&&(t=uG(n,288),this.f==t.f&&yX(this.i,t.i)&&kX(this.a,256&this.f?256&t.f?t.a:null:256&t.f?null:t.a)&&kX(this.d,t.d)&&kX(this.g,t.g)&&kX(this.e,t.e)&&Ykn(this,t))},uZn.Hb=function(){return this.f},uZn.Ib=function(){return DUn(this)},uZn.f=0;var HFt,UFt,GFt,qFt=0,XFt=0,zFt=0,VFt=0,WFt=0,QFt=0,JFt=0,YFt=0,ZFt=0,n_t=0,t_t=0,e_t=0,i_t=0;zW(Pet,"URI",288),sDn(1121,45,B0n,Xk),uZn.zc=function(n,t){return uG(r2(this,mK(n),uG(t,288)),288)},zW(Pet,"URI/URICache",1121),sDn(506,66,Qet,us,$X),uZn.Si=function(){return!0},zW(Pet,"UniqueEList",506),sDn(590,63,S1n,Pen),zW(Pet,"WrappedException",590);var r_t,c_t=Iq(Itt,Wit),a_t=Iq(Itt,Qit),o_t=Iq(Itt,Jit),u_t=Iq(Itt,Yit),s_t=Iq(Itt,Zit),h_t=Iq(Itt,"EClass"),f_t=Iq(Itt,"EDataType");sDn(1233,45,B0n,zk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var l_t,b_t,w_t=Iq(Itt,"EEnum"),d_t=Iq(Itt,nrt),g_t=Iq(Itt,trt),p_t=Iq(Itt,ert),m_t=Iq(Itt,irt),v_t=Iq(Itt,rrt);sDn(1042,1,{},os),uZn.Ib=function(){return"NIL"},zW(Itt,"EStructuralFeature/Internal/DynamicValueHolder/1",1042),sDn(1041,45,B0n,Vk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var k_t,y_t,M_t,T_t,j_t,E_t,S_t,P_t,C_t,I_t,O_t,A_t,L_t,N_t,$_t,D_t,x_t,R_t,K_t,F_t,__t,B_t,H_t,U_t,G_t,q_t,X_t,z_t,V_t,W_t,Q_t,J_t=Iq(Itt,crt),Y_t=Iq(Itt,"EValidator/PatternMatcher"),Z_t=Iq(art,"FeatureMap/Entry");sDn(545,1,{76:1},TA),uZn.Lk=function(){return this.a},uZn.md=function(){return this.b},zW(Ytt,"BasicEObjectImpl/1",545),sDn(1040,1,ort,jA),uZn.Fk=function(n){return U9(this.a,this.b,n)},uZn.Qj=function(){return M0(this.a,this.b)},uZn.Wb=function(n){y0(this.a,this.b,n)},uZn.Gk=function(){VQ(this.a,this.b)},zW(Ytt,"BasicEObjectImpl/4",1040),sDn(2081,1,{114:1}),uZn.Mk=function(n){this.e=0==n?X_t:Inn(dat,EZn,1,n,5,1)},uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Nk=function(){return this.c},uZn.Ok=function(){throw hv(new Kv)},uZn.Pk=function(){throw hv(new Kv)},uZn.Qk=function(){return this.d},uZn.Rk=function(){return null!=this.e},uZn.Sk=function(n){this.c=n},uZn.Tk=function(n){throw hv(new Kv)},uZn.Uk=function(n){throw hv(new Kv)},uZn.Vk=function(n){this.d=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),sDn(192,2081,{114:1},Ll),uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderImpl",192),sDn(516,99,Jtt,ps),uZn.uh=function(){return this.f},uZn.zh=function(){return this.k},uZn.Bh=function(n,t){this.g=n,this.i=t},uZn.Dh=function(){return 2&this.j?this.$h().Nk():this.ii()},uZn.Fh=function(){return this.i},uZn.wh=function(){return!!(1&this.j)},uZn.Ph=function(){return this.g},uZn.Vh=function(){return!!(4&this.j)},uZn.$h=function(){return!this.k&&(this.k=new Ll),this.k},uZn.ci=function(n){this.$h().Sk(n),n?this.j|=2:this.j&=-3},uZn.ei=function(n){this.$h().Uk(n),n?this.j|=4:this.j&=-5},uZn.ii=function(){return(tQ(),M_t).S},uZn.i=0,uZn.j=1,zW(Ytt,"EObjectImpl",516),sDn(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},BG),uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Dh=function(){return this.d},uZn.Ih=function(n){return emn(this.d,n)},uZn.Kh=function(){return this.d},uZn.Oh=function(){return null!=this.e},uZn.$h=function(){return!this.k&&(this.k=new ms),this.k},uZn.ci=function(n){this.d=n},uZn.hi=function(){var n;return null==this.e&&(n=iQ(this.d),this.e=0==n?z_t:Inn(dat,EZn,1,n,5,1)),this},uZn.ji=function(){return 0},zW(Ytt,"DynamicEObjectImpl",798),sDn(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Eq),uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.ci=function(n){this.d=n,this.b=EKn(n,"key"),this.c=EKn(n,uet)},uZn.Bi=function(){var n;return-1==this.a&&(n=zen(this,this.b),this.a=null==n?0:Hon(n)),this.a},uZn.ld=function(){return zen(this,this.b)},uZn.md=function(){return zen(this,this.c)},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){y0(this,this.b,n)},uZn.nd=function(n){var t;return t=zen(this,this.c),y0(this,this.c,n),t},uZn.a=0,zW(Ytt,"DynamicEObjectImpl/BasicEMapEntry",1522),sDn(1523,1,{114:1},ms),uZn.Mk=function(n){throw hv(new Kv)},uZn.li=function(n){throw hv(new Kv)},uZn.mi=function(n,t){throw hv(new Kv)},uZn.ni=function(n){throw hv(new Kv)},uZn.Nk=function(){throw hv(new Kv)},uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Qk=function(){return this.c},uZn.Rk=function(){throw hv(new Kv)},uZn.Sk=function(n){throw hv(new Kv)},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},uZn.Vk=function(n){this.c=n},zW(Ytt,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),sDn(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},vs),uZn.Ah=function(n){return Yjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),this.b):(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),Tnn(this.b));case 3:return F0(this);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),this.a;case 5:return!this.c&&(this.c=new OD(nFt,this,5)),this.c}return $tn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Yjn(this,e):this.Cb.Th(this,-1-i,null,e)),gz(this,uG(n,155),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),G_(this.b,n,e);case 3:return gz(this,null,e);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Wh=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!!F0(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return l5(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void xq(this,mK(t));case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void Jun(this.b,t);case 3:return void kKn(this,uG(t,155));case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Czn(this.a),!this.a&&(this.a=new MD(nFt,this,4)),void CW(this.a,uG(t,16));case 5:return!this.c&&(this.c=new OD(nFt,this,5)),Czn(this.c),!this.c&&(this.c=new OD(nFt,this,5)),void CW(this.c,uG(t,16))}lpn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t)},uZn.ii=function(){return YYn(),T_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void Yan(this,null);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void this.b.c.$b();case 3:return void kKn(this,null);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),void Czn(this.a);case 5:return!this.c&&(this.c=new OD(nFt,this,5)),void Czn(this.c)}sdn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.Ib=function(){return fdn(this)},uZn.d=null,zW(Ytt,"EAnnotationImpl",519),sDn(141,721,urt,ltn),uZn.Gi=function(n,t){qN(this,n,uG(t,44))},uZn.Wk=function(n,t){return U_(this,uG(n,44),t)},uZn.$i=function(n){return uG(uG(this.c,71).$i(n),136)},uZn.Ii=function(){return uG(this.c,71).Ii()},uZn.Ji=function(){return uG(this.c,71).Ji()},uZn.Ki=function(n){return uG(this.c,71).Ki(n)},uZn.Xk=function(n,t){return G_(this,n,t)},uZn.Fk=function(n){return uG(this.c,79).Fk(n)},uZn.ak=function(){},uZn.Qj=function(){return uG(this.c,79).Qj()},uZn.ck=function(n,t,e){var i;return(i=uG(Hrn(this.b).wi().si(this.b),136)).Ci(n),i.Di(t),i.nd(e),i},uZn.dk=function(){return new Vm(this)},uZn.Wb=function(n){Jun(this,n)},uZn.Gk=function(){uG(this.c,79).Gk()},zW(art,"EcoreEMap",141),sDn(165,141,urt,XR),uZn._j=function(){var n,t,e,i,r;if(null==this.d){for(r=Inn(IFt,qit,66,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=uG(e.Yj(),136)).Bi()&vZn)%r.length])&&(n=r[i]=new Vm(this)),n.Fc(t);this.d=r}},zW(Ytt,"EAnnotationImpl/1",165),sDn(292,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,481:1,54:1,99:1,158:1,292:1,119:1,120:1}),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj())}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),G_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj())}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){bEn(this),this.Bb|=1},uZn.Hk=function(){return bEn(this)},uZn.Ik=function(){return this.t},uZn.Jk=function(){var n;return(n=this.t)>1||-1==n},uZn.Si=function(){return!!(512&this.Bb)},uZn.Yk=function(n,t){return Ywn(this,n,t)},uZn.Zk=function(n){Ccn(this,n)},uZn.Ib=function(){return L$n(this)},uZn.s=0,uZn.t=1,zW(Ytt,"ETypedElementImpl",292),sDn(462,292,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,462:1,292:1,119:1,120:1,692:1}),uZn.Ah=function(n){return pjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?pjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 17:return $Un(this,null,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),U_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.pk=function(){return this.f},uZn.ik=function(){return NRn(this)},uZn.qk=function(){return K0(this)},uZn.uk=function(){return null},uZn.$k=function(){return this.k},uZn.Lj=function(){return this.n},uZn.vk=function(){return qSn(this)},uZn.wk=function(){var n,t,e,i,r,c,a,o,u;return this.p||((null==(e=K0(this)).i&&eqn(e),e.i).length,(i=this.uk())&&iQ(K0(i)),n=(a=(r=bEn(this)).kk())?1&a.i?a==ZHt?cot:a==YHt?dot:a==iUt?lot:a==eUt?fot:a==nUt?yot:a==rUt?Tot:a==tUt?uot:hot:a:null,t=NRn(this),o=r.ik(),Vgn(this),this.Bb&VZn&&((c=cSn((gAn(),kBt),e))&&c!=this||(c=_3(Nen(kBt,this))))?this.p=new SA(this,c):this.Jk()?this.al()?i?this.Bb&hrt?n?this.bl()?this.p=new CY(47,n,this,i):this.p=new CY(5,n,this,i):this.bl()?this.p=new r8(46,this,i):this.p=new r8(4,this,i):n?this.bl()?this.p=new CY(49,n,this,i):this.p=new CY(7,n,this,i):this.bl()?this.p=new r8(48,this,i):this.p=new r8(6,this,i):this.Bb&hrt?n?n==Sat?this.p=new RU(50,gFt,this):this.bl()?this.p=new RU(43,n,this):this.p=new RU(1,n,this):this.bl()?this.p=new GZ(42,this):this.p=new GZ(0,this):n?n==Sat?this.p=new RU(41,gFt,this):this.bl()?this.p=new RU(45,n,this):this.p=new RU(3,n,this):this.bl()?this.p=new GZ(44,this):this.p=new GZ(2,this):F$(r,156)?n==Z_t?this.p=new GZ(40,this):512&this.Bb?this.Bb&hrt?this.p=n?new RU(9,n,this):new GZ(8,this):this.p=n?new RU(11,n,this):new GZ(10,this):this.Bb&hrt?this.p=n?new RU(13,n,this):new GZ(12,this):this.p=n?new RU(15,n,this):new GZ(14,this):i?(u=i.t)>1||-1==u?this.bl()?this.Bb&hrt?this.p=n?new CY(25,n,this,i):new r8(24,this,i):this.p=n?new CY(27,n,this,i):new r8(26,this,i):this.Bb&hrt?this.p=n?new CY(29,n,this,i):new r8(28,this,i):this.p=n?new CY(31,n,this,i):new r8(30,this,i):this.bl()?this.Bb&hrt?this.p=n?new CY(33,n,this,i):new r8(32,this,i):this.p=n?new CY(35,n,this,i):new r8(34,this,i):this.Bb&hrt?this.p=n?new CY(37,n,this,i):new r8(36,this,i):this.p=n?new CY(39,n,this,i):new r8(38,this,i):this.bl()?this.Bb&hrt?this.p=n?new RU(17,n,this):new GZ(16,this):this.p=n?new RU(19,n,this):new GZ(18,this):this.Bb&hrt?this.p=n?new RU(21,n,this):new GZ(20,this):this.p=n?new RU(23,n,this):new GZ(22,this):this._k()?this.bl()?this.p=new KU(uG(r,29),this,i):this.p=new _1(uG(r,29),this,i):F$(r,156)?n==Z_t?this.p=new GZ(40,this):this.Bb&hrt?this.p=n?new bz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new AY(uG(r,156),t,o,this):this.p=n?new lz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new OY(uG(r,156),t,o,this):this.al()?i?this.Bb&hrt?this.bl()?this.p=new GU(uG(r,29),this,i):this.p=new UU(uG(r,29),this,i):this.bl()?this.p=new HU(uG(r,29),this,i):this.p=new FU(uG(r,29),this,i):this.Bb&hrt?this.bl()?this.p=new cK(uG(r,29),this):this.p=new iK(uG(r,29),this):this.bl()?this.p=new eK(uG(r,29),this):this.p=new tK(uG(r,29),this):this.bl()?i?this.Bb&hrt?this.p=new qU(uG(r,29),this,i):this.p=new _U(uG(r,29),this,i):this.Bb&hrt?this.p=new aK(uG(r,29),this):this.p=new rK(uG(r,29),this):i?this.Bb&hrt?this.p=new XU(uG(r,29),this,i):this.p=new BU(uG(r,29),this,i):this.Bb&hrt?this.p=new oK(uG(r,29),this):this.p=new OX(uG(r,29),this)),this.p},uZn.rk=function(){return!!(this.Bb&w1n)},uZn._k=function(){return!1},uZn.al=function(){return!1},uZn.sk=function(){return!!(this.Bb&VZn)},uZn.xk=function(){return ein(this)},uZn.bl=function(){return!1},uZn.tk=function(){return!!(this.Bb&hrt)},uZn.cl=function(n){this.k=n},uZn.ui=function(n){g2(this,n)},uZn.Ib=function(){return MBn(this)},uZn.e=!1,uZn.n=0,zW(Ytt,"EStructuralFeatureImpl",462),sDn(331,462,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,331:1,158:1,462:1,292:1,119:1,120:1,692:1},Wk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!SNn(this);case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),!!(this.Bb&Qtt);case 19:return t?khn(this):E7(this)}return $tn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return SNn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this);case 18:return!!(this.Bb&Qtt);case 19:return!!E7(this)}return l5(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void fj(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void Sgn(this,oM(gK(t)))}lpn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t)},uZn.ii=function(){return YYn(),j_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return this.b=0,void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return void Sgn(this,!1)}sdn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.pi=function(){khn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.Jk=function(){return SNn(this)},uZn.Yk=function(n,t){return this.b=0,this.a=null,Ywn(this,n,t)},uZn.Zk=function(n){fj(this,n)},uZn.Ib=function(){var n;return 64&this.Db?MBn(this):((n=new fx(MBn(this))).a+=" (iD: ",Lj(n,!!(this.Bb&Qtt)),n.a+=")",n.a)},uZn.b=0,zW(Ytt,"EAttributeImpl",331),sDn(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),uZn.dl=function(n){return n.Dh()==this},uZn.Ah=function(n){return VTn(this,n)},uZn.Bh=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=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!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),S_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.hk=function(){var n;return-1==this.G&&(this.G=(n=Hrn(this))?Hyn(n.vi(),this):-1),this.G},uZn.ik=function(){return null},uZn.jk=function(){return Hrn(this)},uZn.el=function(){return this.v},uZn.kk=function(){return _Tn(this)},uZn.lk=function(){return null!=this.D?this.D:this.B},uZn.mk=function(){return this.F},uZn.fk=function(n){return LGn(this,n)},uZn.fl=function(n){this.v=n},uZn.gl=function(n){tun(this,n)},uZn.hl=function(n){this.C=n},uZn.ui=function(n){d2(this,n)},uZn.Ib=function(){return pmn(this)},uZn.C=null,uZn.D=null,uZn.G=-1,zW(Ytt,"EClassifierImpl",364),sDn(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,482:1,119:1,120:1,691:1},Kl),uZn.dl=function(n){return VF(this,n.Dh())},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return null;case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),!!(256&this.Bb);case 9:return qx(),!!(512&this.Bb);case 10:return n1(this);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),this.q;case 12:return hXn(this);case 13:return Zqn(this);case 14:return Zqn(this),this.r;case 15:return hXn(this),this.k;case 16:return RAn(this);case 17:return $qn(this);case 18:return eqn(this);case 19:return mRn(this);case 20:return hXn(this),this.o;case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),this.s;case 22:return z5(this);case 23:return x_n(this)}return $tn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nmn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nmn(this.s,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nyn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nyn(this.s,n,e);case 22:return Nyn(z5(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Wh=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!!_Tn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return!!(256&this.Bb);case 9:return!!(512&this.Bb);case 10:return!(!this.u||0==z5(this.u.a).i||this.n&&yMn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=hXn(this).i;case 13:return 0!=Zqn(this).i;case 14:return Zqn(this),0!=this.r.i;case 15:return hXn(this),0!=this.k.i;case 16:return 0!=RAn(this).i;case 17:return 0!=$qn(this).i;case 18:return 0!=eqn(this).i;case 19:return 0!=mRn(this).i;case 20:return hXn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&yMn(this.n);case 23:return 0!=x_n(this).i}return l5(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.Zh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:EKn(this,n))||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void gdn(this,oM(gK(t)));case 9:return void vdn(this,oM(gK(t)));case 10:return _zn(n1(this)),void CW(n1(this),uG(t,16));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Czn(this.q),!this.q&&(this.q=new fV(p_t,this,11,10)),void CW(this.q,uG(t,16));case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Czn(this.s),!this.s&&(this.s=new fV(o_t,this,21,17)),void CW(this.s,uG(t,16));case 22:return Czn(z5(this)),void CW(z5(this),uG(t,16))}lpn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t)},uZn.ii=function(){return YYn(),E_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void gdn(this,!1);case 9:return void vdn(this,!1);case 10:return void(this.u&&_zn(this.u));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),void Czn(this.q);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),void Czn(this.s);case 22:return void(this.n&&Czn(this.n))}sdn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.pi=function(){var n,t;if(hXn(this),Zqn(this),RAn(this),$qn(this),eqn(this),mRn(this),x_n(this),V9(iG(y9(this))),this.s)for(n=0,t=this.s.i;n<t;++n)lR(zrn(this.s,n));if(this.q)for(n=0,t=this.q.i;n<t;++n)lR(zrn(this.q,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.Ib=function(){return nPn(this)},uZn.k=null,uZn.r=null,zW(Ytt,"EClassImpl",90),sDn(2092,2091,Mrt),uZn.Ei=function(n,t){return BGn(this,n,t)},uZn.Fi=function(n){return BGn(this,this.i,n)},uZn.Gi=function(n,t){P$n(this,n,t)},uZn.Hi=function(n){V$n(this,n)},uZn.Wk=function(n,t){return Nmn(this,n,t)},uZn.$i=function(n){return Otn(this,n)},uZn.Xk=function(n,t){return Nyn(this,n,t)},uZn.Xi=function(n,t){return Pqn(this,n,t)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"NotifyingInternalEListImpl",2092),sDn(632,2092,Trt),uZn.Hc=function(n){return Lzn(this,n)},uZn.Ij=function(n,t,e,i,r){return i2(this,n,t,e,i,r)},uZn.Jj=function(n){Yv(this,n)},uZn.Fk=function(n){return this},uZn.Lk=function(){return ern(this.e.Dh(),this.Lj())},uZn.Kj=function(){return this.Lk()},uZn.Lj=function(){return emn(this.e.Dh(),this.Lk())},uZn.il=function(){return uG(this.Lk().Hk(),29).kk()},uZn.jl=function(){return lMn(uG(this.Lk(),19)).n},uZn.jj=function(){return this.e},uZn.kl=function(){return!0},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!1},uZn.dd=function(n){return Hyn(this,n)},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.e,this.jl(),this.il(),t):e.Rh(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Rh(this.e,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.e,this.jl(),this.il(),t):e.Th(this.e,emn(e.Dh(),lMn(uG(this.Lk(),19))),null,t):e.Th(this.e,-1-this.Lj(),null,t)},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return v5(this.d,n)},uZn.Pj=function(){return uN(this.e)},uZn.Qj=function(){return 0!=this.i},uZn.aj=function(n){return Acn(this.d,n)},uZn.Wi=function(n,t){return this.ol()&&this.nl()?R$n(this,n,uG(t,58)):t},uZn.pl=function(n){return n.Vh()?mwn(this.e,uG(n,54)):n},uZn.Wb=function(n){J$(this,n)},uZn.Pc=function(){return Jtn(this)},uZn.Qc=function(n){var t;if(this.nl())for(t=this.i-1;t>=0;--t)zrn(this,t);return gmn(this,n)},uZn.Gk=function(){Czn(this)},uZn.Zi=function(n,t){return Dcn(this,n,t)},zW(art,"EcoreEList",632),sDn(505,632,Trt,FG),uZn.Li=function(){return!1},uZn.Lj=function(){return this.c},uZn.Mj=function(){return!1},uZn.ol=function(){return!0},uZn.Si=function(){return!0},uZn.Wi=function(n,t){return t},uZn.Yi=function(){return!1},uZn.c=0,zW(art,"EObjectEList",505),sDn(83,505,Trt,MD),uZn.Mj=function(){return!0},uZn.ml=function(){return!1},uZn.al=function(){return!0},zW(art,"EObjectContainmentEList",83),sDn(555,83,Trt,TD),uZn.Ni=function(){this.b=!0},uZn.Qj=function(){return this.b},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.b,this.b=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.b=!1},uZn.b=!1,zW(art,"EObjectContainmentEList/Unsettable",555),sDn(1161,555,Trt,hz),uZn.Ti=function(n,t){var e,i;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),P_t),xwn(t),F$(i=e.c,90)?uG(i,29):x_t,n)),e},uZn.Uj=function(n,t){return Dmn(this,uG(n,89),t)},uZn.Vj=function(n,t){return $mn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return TSn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return yMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EClassImpl/1",1161),sDn(1175,1174,Fit),uZn.dj=function(n){var t,e,i,r,c,a,o;if(8!=(e=n.gj())){if(0==(i=xkn(n)))switch(e){case 1:case 9:null!=(o=n.kj())&&(!(t=y9(uG(o,482))).c&&(t.c=new Ks),rin(t.c,n.jj())),null!=(a=n.ij())&&(1&(r=uG(a,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29))));break;case 3:null!=(a=n.ij())&&(1&(r=uG(a,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29))));break;case 5:if(null!=(a=n.ij()))for(c=uG(a,16).Kc();c.Ob();)1&(r=uG(c.Pb(),482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 4:null!=(o=n.kj())&&(1&(r=uG(o,482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj())));break;case 6:if(null!=(o=n.kj()))for(c=uG(o,16).Kc();c.Ob();)1&(r=uG(c.Pb(),482)).Bb||(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()))}this.ql(i)}},uZn.ql=function(n){bBn(this,n)},uZn.b=63,zW(Ytt,"ESuperAdapter",1175),sDn(1176,1175,Fit,$m),uZn.ql=function(n){yLn(this,n)},zW(Ytt,"EClassImpl/10",1176),sDn(1165,710,Trt),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.Wk=function(n,t){throw hv(new Kv)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Xk=function(n,t){throw hv(new Kv)},uZn.Fk=function(n){return this},uZn.Qj=function(){return 0!=this.i},uZn.Wb=function(n){throw hv(new Kv)},uZn.Gk=function(){throw hv(new Kv)},zW(art,"EcoreEList/UnmodifiableEList",1165),sDn(328,1165,Trt,vL),uZn.Yi=function(){return!1},zW(art,"EcoreEList/UnmodifiableEList/FastCompare",328),sDn(1168,328,Trt,Afn),uZn.dd=function(n){var t,e;if(F$(n,179)&&-1!=(t=uG(n,179).Lj()))for(e=this.i;t<e;++t)if(xA(this.g[t])===xA(n))return t;return-1},zW(Ytt,"EClassImpl/1EAllStructuralFeaturesList",1168),sDn(1162,506,Qet,ks),uZn.aj=function(n){return Inn(g_t,Prt,89,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EGenericSuperTypeEList",1162),sDn(633,506,Qet,ys),uZn.aj=function(n){return Inn(o_t,krt,179,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1EStructuralFeatureUniqueEList",633),sDn(755,506,Qet,Ms),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/1ReferenceList",755),sDn(1163,506,Qet,Dm),uZn.Mi=function(n,t){tV(this,uG(t,35))},uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/2",1163),sDn(1164,506,Qet,Ts),uZn.aj=function(n){return Inn(u_t,krt,35,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/3",1164),sDn(1166,328,Trt,YG),uZn.Fc=function(n){return J5(this,uG(n,35))},uZn.Hi=function(n){PS(this,uG(n,35))},zW(Ytt,"EClassImpl/4",1166),sDn(1167,328,Trt,JG),uZn.Fc=function(n){return Y5(this,uG(n,19))},uZn.Hi=function(n){CS(this,uG(n,19))},zW(Ytt,"EClassImpl/5",1167),sDn(1169,506,Qet,js),uZn.aj=function(n){return Inn(p_t,yrt,62,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/6",1169),sDn(1170,506,Qet,Es),uZn.aj=function(n){return Inn(v_t,krt,19,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/7",1170),sDn(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1}),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return dGn(this,this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Wk=function(n,t){return JMn(this,n,t)},uZn.Xk=function(n,t){return Lyn(this,n,t)},uZn.Xi=function(n,t){return gGn(this,n,t)},uZn.$i=function(n){return this.xj(n)},uZn.Ii=function(){return new nR(this)},uZn.pj=function(){return this.sj()},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},zW(art,"DelegatingNotifyingInternalEListImpl",2095),sDn(756,2095,Crt),uZn.Li=function(){var n;return F$(n=ern(e1(this.b),this.Lj()).Hk(),156)&&!F$(n,469)&&!(1&n.kk().i)},uZn.Hc=function(n){var t,e,i,r,c,a,o;if(this.ol()){if((o=this.Ej())>4){if(!this.fk(n))return!1;if(this.al()){if(a=(t=(e=uG(n,54)).Eh())==this.b&&(this.ml()?e.yh(e.Fh(),uG(ern(e1(this.b),this.Lj()).Hk(),29).kk())==lMn(uG(ern(e1(this.b),this.Lj()),19)).n:-1-e.Fh()==this.Lj()),this.nl()&&!a&&!t&&e.Jh())for(i=0;i<o;++i)if(xA(CV(this,this.xj(i)))===xA(n))return!0;return a}if(this.ml()&&!this.ll()){if(xA(r=uG(n,58).Mh(lMn(uG(ern(e1(this.b),this.Lj()),19))))===xA(this.b))return!0;if(null==r||!uG(r,58).Vh())return!1}}if(c=this.uj(n),this.nl()&&!c)for(i=0;i<o;++i)if(xA(e=CV(this,this.xj(i)))===xA(n))return!0;return c}return this.uj(n)},uZn.Ij=function(n,t,e,i,r){return new Ken(this.b,n,this.Lj(),t,e,i,r)},uZn.Jj=function(n){Msn(this.b,n)},uZn.Fk=function(n){return this},uZn.Kj=function(){return ern(e1(this.b),this.Lj())},uZn.Lj=function(){return emn(e1(this.b),ern(e1(this.b),this.Lj()))},uZn.jj=function(){return this.b},uZn.kl=function(){return!!ern(e1(this.b),this.Lj()).Hk().kk()},uZn.Mj=function(){var n;return!(!F$(n=ern(e1(this.b),this.Lj()),102)||!(uG(n,19).Bb&Qtt)&&!lMn(uG(n,19)))},uZn.ll=function(){var n,t,e;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(t=lMn(uG(n,19)))&&((e=t.t)>1||-1==e)},uZn.ml=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!lMn(uG(n,19))},uZn.nl=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(uG(n,19).Bb&P0n)},uZn.dd=function(n){var t,e,i;if((e=this.zj(n))>=0)return e;if(this.ol())for(t=0,i=this.Ej();t<i;++t)if(xA(CV(this,this.xj(t)))===xA(n))return t;return-1},uZn.Nj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Rh(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Rh(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Rh(this.b,-1-this.Lj(),null,t)},uZn.Oj=function(n,t){var e;return e=uG(n,54),this.ml()?this.kl()?e.Th(this.b,lMn(uG(ern(e1(this.b),this.Lj()),19)).n,uG(ern(e1(this.b),this.Lj()).Hk(),29).kk(),t):e.Th(this.b,emn(e.Dh(),lMn(uG(ern(e1(this.b),this.Lj()),19))),null,t):e.Th(this.b,-1-this.Lj(),null,t)},uZn.al=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!(uG(n,19).Bb&Qtt)},uZn.ol=function(){return F$(ern(e1(this.b),this.Lj()).Hk(),90)},uZn.fk=function(n){return ern(e1(this.b),this.Lj()).Hk().fk(n)},uZn.Pj=function(){return uN(this.b)},uZn.Qj=function(){return!this.Aj()},uZn.Si=function(){return ern(e1(this.b),this.Lj()).Si()},uZn.Wi=function(n,t){return yVn(this,n,t)},uZn.Wb=function(n){_zn(this),CW(this,uG(n,15))},uZn.Pc=function(){var n;if(this.nl())for(n=this.Ej()-1;n>=0;--n)yVn(this,n,this.xj(n));return this.Fj()},uZn.Qc=function(n){var t;if(this.nl())for(t=this.Ej()-1;t>=0;--t)yVn(this,t,this.xj(t));return this.Gj(n)},uZn.Gk=function(){_zn(this)},uZn.Zi=function(n,t){return Atn(this,n,t)},zW(art,"DelegatingEcoreEList",756),sDn(1171,756,Crt,aF),uZn.qj=function(n,t){zR(this,n,uG(t,29))},uZn.rj=function(n){BN(this,uG(n,29))},uZn.xj=function(n){var t;return F$(t=uG(zrn(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Cj=function(n){var t;return F$(t=uG(e_n(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Dj=function(n,t){return YMn(this,n,uG(t,29))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Rm(this)},uZn.tj=function(){Czn(z5(this.a))},uZn.uj=function(n){return Mdn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Mdn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==z5(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e,i;for(t=1,n=new DD(z5(this.a));n.e!=n.i.gc();)t=31*t+((e=F$(i=uG(Zkn(n),89).c,90)?uG(i,29):(YYn(),x_t))?xx(e):0);return t},uZn.zj=function(n){var t,e,i,r;for(i=0,e=new DD(z5(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(F$(r=t.c,90)?uG(r,29):(YYn(),x_t)))return i;++i}return-1},uZn.Aj=function(){return 0==z5(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return z5(this.a).i},uZn.Fj=function(){var n,t,e,i,r,c;for(c=z5(this.a).i,r=Inn(dat,EZn,1,c,5,1),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),r[e++]=F$(i=n.c,90)?uG(i,29):(YYn(),x_t);return r},uZn.Gj=function(n){var t,e,i,r;for(r=z5(this.a).i,n.length<r&&(n=Acn(Tbn(n).c,r)),n.length>r&&uQ(n,r,null),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)uQ(n,e++,F$(i=uG(Zkn(t),89).c,90)?uG(i,29):(YYn(),x_t));return n},uZn.Hj=function(){var n,t,e,i,r;for((r=new zM).a+="[",n=z5(this.a),t=0,i=z5(this.a).i;t<i;)VA(r,ox(F$(e=uG(zrn(n,t),89).c,90)?uG(e,29):(YYn(),x_t))),++t<i&&(r.a+=TZn);return r.a+="]",r.a},uZn.Jj=function(n){},uZn.Lj=function(){return 10},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,90)},uZn.Qj=function(){return M4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EClassImpl/8",1171),sDn(1172,2062,m1n,Rm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return z5(this.a.a).i},zW(Ytt,"EClassImpl/8/1",1172),sDn(1173,506,Qet,Ss),uZn.aj=function(n){return Inn(s_t,EZn,142,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"EClassImpl/9",1173),sDn(1160,49,H0n,Qk),zW(Ytt,"EClassImpl/MyHashSet",1160),sDn(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},Gv),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),!!(256&this.Bb)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=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!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return!(256&this.Bb)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),C_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ok=function(){var n,t;if(!this.c&&!(n=bxn(Hrn(this))).dc())for(t=n.Kc();t.Ob();)GUn(this,mK(t.Pb()))&&egn(this);return this.b},uZn.ik=function(){var n;if(!this.e){n=null;try{n=_Tn(this)}catch(t){if(!F$(t=Ehn(t),103))throw hv(t)}this.d=null,n&&1&n.i&&(this.d=n==ZHt?(qx(),tot):n==YHt?xwn(0):n==iUt?new Rw(0):n==eUt?0:n==nUt?Hvn(0):n==rUt?Rwn(0):n==tUt?Ben(0):Hsn(0)),this.e=!0}return this.d},uZn.nk=function(){return!!(256&this.Bb)},uZn.rl=function(n){n&&(this.D="org.eclipse.emf.common.util.AbstractEnumerator")},uZn.gl=function(n){tun(this,n),this.rl(n)},uZn.hl=function(n){this.C=n,this.e=!1},uZn.Ib=function(){var n;return 64&this.Db?pmn(this):((n=new fx(pmn(this))).a+=" (serializable: ",Lj(n,!!(256&this.Bb)),n.a+=")",n.a)},uZn.c=!1,uZn.d=null,uZn.e=!1,zW(Ytt,"EDataTypeImpl",577),sDn(469,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,469:1,158:1,119:1,120:1,691:1},Jk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return dbn(this);case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),!!(256&this.Bb);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),this.a}return $tn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,6,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nmn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return $Un(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Wh=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!!_Tn(this);case 4:return!!dbn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return!(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)));case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Czn(this.a),!this.a&&(this.a=new fV(d_t,this,9,5)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t)},uZn.ii=function(){return YYn(),I_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),void Czn(this.a)}sdn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.pi=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n<t;++n)lR(zrn(this.a,n));tdn((gAn(),kBt),this).xe(),this.Bb|=1},uZn.ik=function(){return dbn(this)},uZn.fk=function(n){return null!=n},uZn.rl=function(n){},zW(Ytt,"EEnumImpl",469),sDn(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},Uv),uZn.xe=function(){return this.zb},uZn.Ah=function(n){return Qjn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return xwn(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?uG(this.Cb,685):null}return $tn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?Qjn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 5:return $Un(this,null,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Wh=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||!uG(this.Cb,685))}return l5(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void Icn(this,uG(t,17).a);case 3:return void h$n(this,uG(t,2039));case 4:return void Uan(this,mK(t))}lpn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t)},uZn.ii=function(){return YYn(),O_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void Icn(this,0);case 3:return void h$n(this,null);case 4:return void Uan(this,null)}sdn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},uZn.b=null,uZn.c=null,uZn.d=0,zW(Ytt,"EEnumLiteralImpl",582);var nBt,tBt,eBt,iBt=Iq(Ytt,"EFactoryImpl/InternalEDateTimeFormat");sDn(499,1,{2114:1},Km),zW(Ytt,"EFactoryImpl/1ClientInternalEDateTimeFormat",499),sDn(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},ev),uZn.Ch=function(n,t,e){var i;return e=$Un(this,n,t,e),this.e&&F$(n,179)&&(i=bRn(this,this.e))!=this.c&&(e=PWn(this,i,e)),e},uZn.Lh=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new MD(g_t,this,1)),this.d;case 2:return t?MGn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?PMn(this):this.a}return $tn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return vwn(this,null,e);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Nyn(this.d,n,e);case 3:return kwn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),L_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),L_t)),n,e)},uZn.Wh=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 l5(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void cPn(this,uG(t,89));case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Czn(this.d),!this.d&&(this.d=new MD(g_t,this,1)),void CW(this.d,uG(t,16));case 3:return void rPn(this,uG(t,89));case 4:return void MIn(this,uG(t,850));case 5:return void Urn(this,uG(t,142))}lpn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t)},uZn.ii=function(){return YYn(),L_t},uZn.ki=function(n){switch(n){case 0:return void cPn(this,null);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),void Czn(this.d);case 3:return void rPn(this,null);case 4:return void MIn(this,null);case 5:return void Urn(this,null)}sdn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.Ib=function(){var n;return(n=new lx(vxn(this))).a+=" (expression: ",qXn(this,n),n.a+=")",n.a},zW(Ytt,"EGenericTypeImpl",248),sDn(2067,2062,Irt),uZn.Gi=function(n,t){YK(this,n,t)},uZn.Wk=function(n,t){return YK(this,this.gc(),n),t},uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return this.Ji()},uZn.pj=function(){return new zm(this)},uZn.Ji=function(){return this.Ki(0)},uZn.Ki=function(n){return this.pj().fd(n)},uZn.Xk=function(n,t){return Wpn(this,n,!0),t},uZn.Ti=function(n,t){var e;return e=Kjn(this,t),this.fd(n).Rb(e),e},uZn.Ui=function(n,t){Wpn(this,t,!0),this.fd(n).Rb(t)},zW(art,"AbstractSequentialInternalEList",2067),sDn(496,2067,Irt,zx),uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.pj=function(){return new kL(this.a,this.b)},uZn.Ji=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.Ki=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.sl(),t=0;t<n;++t)Ksn(e);return e},uZn.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.vl()||this.a.Xh(n))if(c=this.a.Nh(n,!1),PP(),uG(n,69).xk()){for(i=0,r=(t=uG(c,160)).gc();i<r;++i)if(RQ(t.Tl(i))&&null!=t.Ul(i))return!1}else if(n.Jk()){if(!uG(c,16).dc())return!1}else if(null!=c)return!1;return!0},uZn.Kc=function(){return kon(this)},uZn.fd=function(n){var t,e;if(null==this.b){if(0!=n)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.ul()?this.tl():this.sl(),t=0;t<n;++t)Ksn(e);return e},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.sl=function(){return new Vx(this.a,this.b)},uZn.tl=function(){return new WR(this.a,this.b)},uZn.ul=function(){return!0},uZn.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.vl()||this.a.Xh(n))if(a=this.a.Nh(n,!1),PP(),uG(n,69).xk())for(i=0,c=(t=uG(a,160)).gc();i<c;++i)RQ(t.Tl(i))&&null!=t.Ul(i)&&++r;else n.Jk()?r+=uG(a,16).gc():null!=a&&++r;return r},uZn.vl=function(){return!0},zW(art,"EContentsEList",496),sDn(1177,496,Irt,VR),uZn.sl=function(){return new JR(this.a,this.b)},uZn.tl=function(){return new QR(this.a,this.b)},uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1",1177),sDn(287,1,Ort,Vx),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.wl=function(n){if(0!=this.g||this.e)throw hv(new kM("Iterator already in use or already filtered"));this.e=n},uZn.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?wAn(this,this.p):p$n(this)))return r=this.p?this.p.Pb():this.j?this.j.$i(this.n++):this.k.Xb(this.n++),this.f?((n=uG(r,76)).Lk(),e=n.md(),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.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.p=null,this.o=this.k.gc(),this.n=0):this.p=this.j?this.j.Ji():this.k.ed(),this.p?wAn(this,this.p):p$n(this))return r=this.p?this.p.Pb():this.j?this.j.$i(this.n++):this.k.Xb(this.n++),this.f?((n=uG(r,76)).Lk(),e=n.md(),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}},uZn.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?dAn(this,this.p):hLn(this)))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),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.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?dAn(this,this.p):hLn(this))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),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}},uZn.Pb=function(){return Ksn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){throw hv(new Kv)},uZn.ul=function(){return!1},uZn.Wb=function(n){throw hv(new Kv)},uZn.vl=function(){return!0},uZn.a=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.n=0,uZn.o=0,zW(art,"EContentsEList/FeatureIteratorImpl",287),sDn(711,287,Ort,WR),uZn.ul=function(){return!0},zW(art,"EContentsEList/ResolvingFeatureIteratorImpl",711),sDn(1178,711,Ort,QR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/1",1178),sDn(1179,287,Ort,JR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/2",1179),sDn(39,152,Bit,t8,e8,lV,btn,Ken,j9,Bcn,o4,Hcn,u4,E9,s4,qcn,h4,S9,f4,Ucn,l4,bV,wtn,kZ,Gcn,b4,P9,w4),uZn.Kj=function(){return ntn(this)},uZn.Rj=function(){var n;return(n=ntn(this))?n.ik():null},uZn.hj=function(n){return-1==this.b&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,n)},uZn.jj=function(){return this.c},uZn.Sj=function(){var n;return!!(n=ntn(this))&&n.tk()},uZn.b=-1,zW(Ytt,"ENotificationImpl",39),sDn(411,292,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,481:1,54:1,99:1,158:1,411:1,292:1,119:1,120:1},Yk),uZn.Ah=function(n){return fEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,29):null;case 11:return!this.d&&(this.d=new PD(J_t,this,11)),this.d;case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oF(this,this)),this.a;case 14:return Aen(this)}return $tn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?fEn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,10,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nmn(this.c,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return $Un(this,null,10,e);case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Nyn(this.d,n,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nyn(this.c,n,e);case 14:return Nyn(Aen(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(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==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,29));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==Aen(this.a.a).i||this.b&&MMn(this.b));case 14:return!!this.b&&MMn(this.b)}return l5(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Czn(this.d),!this.d&&(this.d=new PD(J_t,this,11)),void CW(this.d,uG(t,16));case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Czn(this.c),!this.c&&(this.c=new fV(m_t,this,12,10)),void CW(this.c,uG(t,16));case 13:return!this.a&&(this.a=new oF(this,this)),_zn(this.a),!this.a&&(this.a=new oF(this,this)),void CW(this.a,uG(t,16));case 14:return Czn(Aen(this)),void CW(Aen(this),uG(t,16))}lpn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t)},uZn.ii=function(){return YYn(),R_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),void Czn(this.d);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),void Czn(this.c);case 13:return void(this.a&&_zn(this.a));case 14:return void(this.b&&Czn(this.b))}sdn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.pi=function(){var n,t;if(this.c)for(n=0,t=this.c.i;n<t;++n)lR(zrn(this.c,n));bEn(this),this.Bb|=1},zW(Ytt,"EOperationImpl",411),sDn(513,756,Crt,oF),uZn.qj=function(n,t){ZR(this,n,uG(t,142))},uZn.rj=function(n){HN(this,uG(n,142))},uZn.xj=function(n){return uG(zrn(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Cj=function(n){return uG(e_n(Aen(this.a),n),89).c||(YYn(),N_t)},uZn.Dj=function(n,t){return Qvn(this,n,uG(t,142))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Fm(this)},uZn.tj=function(){Czn(Aen(this.a))},uZn.uj=function(n){return Idn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Idn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==Aen(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e;for(t=1,n=new DD(Aen(this.a));n.e!=n.i.gc();)t=31*t+((e=uG(Zkn(n),89).c||(YYn(),N_t))?Hon(e):0);return t},uZn.zj=function(n){var t,e,i;for(i=0,e=new DD(Aen(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(t.c||(YYn(),N_t)))return i;++i}return-1},uZn.Aj=function(){return 0==Aen(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return Aen(this.a).i},uZn.Fj=function(){var n,t,e,i,r;for(r=Aen(this.a).i,i=Inn(dat,EZn,1,r,5,1),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),i[e++]=n.c||(YYn(),N_t);return i},uZn.Gj=function(n){var t,e,i;for(i=Aen(this.a).i,n.length<i&&(n=Acn(Tbn(n).c,i)),n.length>i&&uQ(n,i,null),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)uQ(n,e++,uG(Zkn(t),89).c||(YYn(),N_t));return n},uZn.Hj=function(){var n,t,e,i;for((i=new zM).a+="[",n=Aen(this.a),t=0,e=Aen(this.a).i;t<e;)VA(i,ox(uG(zrn(n,t),89).c||(YYn(),N_t))),++t<e&&(i.a+=TZn);return i.a+="]",i.a},uZn.Jj=function(n){},uZn.Lj=function(){return 13},uZn.kl=function(){return!0},uZn.Mj=function(){return!1},uZn.ll=function(){return!1},uZn.ml=function(){return!1},uZn.nl=function(){return!0},uZn.al=function(){return!1},uZn.ol=function(){return!0},uZn.fk=function(n){return F$(n,142)},uZn.Qj=function(){return T4(this.a)},uZn.Si=function(){return!0},uZn.Yi=function(){return!0},zW(Ytt,"EOperationImpl/1",513),sDn(1376,2062,m1n,Fm),uZn.fd=function(n){return han(this.a,n)},uZn.gc=function(){return Aen(this.a.a).i},zW(Ytt,"EOperationImpl/1/1",1376),sDn(1377,555,Trt,fz),uZn.Ti=function(n,t){var e;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),K_t),xwn(t),e.c||N_t,n)),e},uZn.Uj=function(n,t){return ndn(this,uG(n,89),t)},uZn.Vj=function(n,t){return Zwn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return Lkn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return MMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EOperationImpl/2",1377),sDn(507,1,{2037:1,507:1},EA),zW(Ytt,"EPackageImpl/1",507),sDn(14,83,Trt,fV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectContainmentWithInverseEList",14),sDn(365,14,Trt,i_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Resolving",365),sDn(308,365,Trt,vV),uZn.Ni=function(){this.a.tb=null},zW(Ytt,"EPackageImpl/2",308),sDn(1278,1,{},Ps),zW(Ytt,"EPackageImpl/3",1278),sDn(733,45,B0n,Zk),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},zW(Ytt,"EPackageRegistryImpl",733),sDn(518,292,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,481:1,54:1,99:1,158:1,518:1,292:1,119:1,120:1},ny),uZn.Ah=function(n){return lEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,62):null}return $tn(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?lEn(this,e):this.Cb.Th(this,-1-i,null,e)),$Un(this,n,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return $Un(this,null,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!(256&this.Bb);case 3:return!(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==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,62))}return l5(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n))},uZn.ii=function(){return YYn(),__t},zW(Ytt,"EParameterImpl",518),sDn(102,462,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,102:1,462:1,292:1,119:1,120:1,692:1},PK),uZn.Lh=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),!!(256&this.Bb);case 3:return qx(),!!(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(r=this.t)>1||-1==r;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),!!(this.Bb&w1n);case 11:return qx(),!!(this.Bb&frt);case 12:return qx(),!!(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),!!(this.Bb&hrt);case 16:return qx(),!!(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),!!(this.Bb&Qtt);case 19:return qx(),!!((i=lMn(this))&&i.Bb&Qtt);case 20:return qx(),!!(this.Bb&P0n);case 21:return t?lMn(this):this.b;case 22:return t?Ffn(this):R9(this);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),this.a}return $tn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t,e)},uZn.Wh=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!(256&this.Bb);case 3:return!(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==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Bb&w1n);case 11:return!!(this.Bb&frt);case 12:return!!(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return!!(this.Bb&hrt);case 16:return!!(this.Bb&VZn);case 17:return!!K0(this);case 18:return!!(this.Bb&Qtt);case 19:return!!(t=lMn(this))&&!!(t.Bb&Qtt);case 20:return!(this.Bb&P0n);case 21:return!!this.b;case 22:return!!R9(this);case 23:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void p2(this,oM(gK(t)));case 20:return void Ign(this,oM(gK(t)));case 21:return void bon(this,uG(t,19));case 23:return!this.a&&(this.a=new OD(u_t,this,23)),Czn(this.a),!this.a&&(this.a=new OD(u_t,this,23)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t)},uZn.ii=function(){return YYn(),B_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return Pgn(this,!1),void(F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),2));case 20:return void Ign(this,!0);case 21:return void bon(this,null);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),void Czn(this.a)}sdn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.pi=function(){Ffn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.uk=function(){return lMn(this)},uZn._k=function(){var n;return!!(n=lMn(this))&&!!(n.Bb&Qtt)},uZn.al=function(){return!!(this.Bb&Qtt)},uZn.bl=function(){return!!(this.Bb&P0n)},uZn.Yk=function(n,t){return this.c=null,Ywn(this,n,t)},uZn.Ib=function(){var n;return 64&this.Db?MBn(this):((n=new fx(MBn(this))).a+=" (containment: ",Lj(n,!!(this.Bb&Qtt)),n.a+=", resolveProxies: ",Lj(n,!!(this.Bb&P0n)),n.a+=")",n.a)},zW(Ytt,"EReferenceImpl",102),sDn(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},Cs),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Rq(this,mK(n))},uZn.nd=function(n){return DG(this,mK(n))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return $tn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return l5(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void Kq(this,mK(t));case 1:return void Jan(this,mK(t))}lpn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t)},uZn.ii=function(){return YYn(),H_t},uZn.ki=function(n){switch(n){case 0:return void Qan(this,null);case 1:return void Jan(this,null)}sdn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:pln(n)),this.a},uZn.Ci=function(n){this.a=n},uZn.Ib=function(){var n;return 64&this.Db?vxn(this):((n=new fx(vxn(this))).a+=" (key: ",VA(n,this.b),n.a+=", value: ",VA(n,this.c),n.a+=")",n.a)},uZn.a=-1,uZn.b=null,uZn.c=null;var rBt,cBt,aBt,oBt,uBt,sBt,hBt,fBt,lBt,bBt,wBt=zW(Ytt,"EStringToStringMapEntryImpl",561),dBt=Iq(art,"FeatureMap/Entry/Internal");sDn(576,1,Art),uZn.xl=function(n){return this.yl(uG(n,54))},uZn.yl=function(n){return this.xl(n)},uZn.Fb=function(n){var t,e;return this===n||!!F$(n,76)&&(t=uG(n,76)).Lk()==this.c&&(null==(e=this.md())?null==t.md():udn(e,t.md()))},uZn.Lk=function(){return this.c},uZn.Hb=function(){var n;return n=this.md(),Hon(this.c)^(null==n?0:Hon(n))},uZn.Ib=function(){var n,t;return t=Hrn((n=this.c).qk()).yi(),n.xe(),(null!=t&&0!=t.length?t+":"+n.xe():n.xe())+"="+this.md()},zW(Ytt,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),sDn(791,576,Art,sF),uZn.yl=function(n){return new sF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return Kun(this,n,this.a,t,e)},uZn.Al=function(n,t,e){return Fun(this,n,this.a,t,e)},zW(Ytt,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),sDn(1350,1,{},SA),uZn.yk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Yl(this.a).Fk(i)},uZn.zk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Pl(this.a,i,r)},uZn.Ak=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Ql(this.a,i,r)},uZn.Bk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a).Qj()},uZn.Ck=function(n,t,e,i){uG(vtn(n,this.b),220).Yl(this.a).Wb(i)},uZn.Dk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a)},uZn.Ek=function(n,t,e){uG(vtn(n,this.b),220).Yl(this.a).Gk()},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),sDn(91,1,{},RU,CY,GZ,r8),uZn.yk=function(n,t,e,i,r){var c;if(null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),!r)switch(this.e){case 50:case 41:return uG(c,597).bk();case 40:return uG(c,220).Vl()}return c},uZn.zk=function(n,t,e,i,r){var c;return null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),uG(c,71).Wk(i,r)},uZn.Ak=function(n,t,e,i,r){var c;return null!=(c=t.li(e))&&(r=uG(c,71).Xk(i,r)),r},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&uG(i,79).Qj()},uZn.Ck=function(n,t,e,i){var r;!(r=uG(t.li(e),79))&&t.mi(e,r=xYn(this,n)),r.Wb(i)},uZn.Dk=function(n,t,e){var i;return null==(i=t.li(e))&&t.mi(e,i=xYn(this,n)),F$(i,79)?uG(i,79):new _m(uG(t.li(e),15))},uZn.Ek=function(n,t,e){var i;!(i=uG(t.li(e),79))&&t.mi(e,i=xYn(this,n)),i.Gk()},uZn.b=0,uZn.e=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),sDn(512,1,{}),uZn.zk=function(n,t,e,i,r){throw hv(new Kv)},uZn.Ak=function(n,t,e,i,r){throw hv(new Kv)},uZn.Dk=function(n,t,e){return new IY(this,n,t,e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),sDn(1367,1,ort,IY),uZn.Fk=function(n){return this.a.yk(this.c,this.d,this.b,n,!0)},uZn.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},uZn.Wb=function(n){this.a.Ck(this.c,this.d,this.b,n)},uZn.Gk=function(){this.a.Ek(this.c,this.d,this.b)},uZn.b=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),sDn(784,512,{},_1),uZn.yk=function(n,t,e,i,r){return PHn(n,n.Ph(),n.Fh())==this.b?this.bl()&&i?J$n(n):n.Ph():null},uZn.zk=function(n,t,e,i,r){var c,a;return n.Ph()&&(r=(c=n.Fh())>=0?n.Ah(r):n.Ph().Th(n,-1-c,null,r)),a=emn(n.Dh(),this.e),n.Ch(i,a,r)},uZn.Ak=function(n,t,e,i,r){var c;return c=emn(n.Dh(),this.e),n.Ch(null,c,r)},uZn.Bk=function(n,t,e){var i;return i=emn(n.Dh(),this.e),!!n.Ph()&&n.Fh()==i},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));if(r=n.Ph(),a=emn(n.Dh(),this.e),xA(i)!==xA(r)||n.Fh()!=a&&null!=i){if(eEn(n,uG(i,58)))throw hv(new vM(net+n.Ib()));u=null,r&&(u=(c=n.Fh())>=0?n.Ah(u):n.Ph().Th(n,-1-c,null,u)),(o=uG(i,54))&&(u=o.Rh(n,emn(o.Dh(),this.b),null,u)),(u=n.Ch(o,a,u))&&u.oj()}else n.vh()&&n.wh()&&Msn(n,new lV(n,1,a,i,i))},uZn.Ek=function(n,t,e){var i,r,c;n.Ph()?(c=(i=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-i,null,null),r=emn(n.Dh(),this.e),(c=n.Ch(null,r,c))&&c.oj()):n.vh()&&n.wh()&&Msn(n,new bV(n,1,this.e,null,null))},uZn.bl=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),sDn(1351,784,{},KU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),sDn(574,512,{}),uZn.yk=function(n,t,e,i,r){var c;return null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&(xA(i)===xA(rBt)||!udn(i,this.b))},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c,null==i?null!=this.c?(t.mi(e,null),i=this.b):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Cl(n,1,this.e,r,i))):null==i?null!=this.c?t.mi(e,null):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=null==(r=t.li(e))?this.b:xA(r)===xA(rBt)?null:r,t.ni(e),Msn(n,this.d.Cl(n,1,this.e,i,this.b))):t.ni(e)},uZn.Bl=function(n){throw hv(new $v)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),sDn($rt,1,{},Is),uZn.Cl=function(n,t,e,i,r){return new bV(n,t,e,i,r)},uZn.Dl=function(n,t,e,i,r,c){return new kZ(n,t,e,i,r,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",$rt),sDn(1368,$rt,{},Os),uZn.Cl=function(n,t,e,i,r){return new P9(n,t,e,oM(gK(i)),oM(gK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new w4(n,t,e,oM(gK(i)),oM(gK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),sDn(1369,$rt,{},As),uZn.Cl=function(n,t,e,i,r){return new Bcn(n,t,e,uG(i,222).a,uG(r,222).a)},uZn.Dl=function(n,t,e,i,r,c){return new o4(n,t,e,uG(i,222).a,uG(r,222).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),sDn(1370,$rt,{},Ls),uZn.Cl=function(n,t,e,i,r){return new Hcn(n,t,e,uG(i,180).a,uG(r,180).a)},uZn.Dl=function(n,t,e,i,r,c){return new u4(n,t,e,uG(i,180).a,uG(r,180).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),sDn(1371,$rt,{},Ns),uZn.Cl=function(n,t,e,i,r){return new E9(n,t,e,uM(pK(i)),uM(pK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new s4(n,t,e,uM(pK(i)),uM(pK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),sDn(1372,$rt,{},$s),uZn.Cl=function(n,t,e,i,r){return new qcn(n,t,e,uG(i,161).a,uG(r,161).a)},uZn.Dl=function(n,t,e,i,r,c){return new h4(n,t,e,uG(i,161).a,uG(r,161).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),sDn(1373,$rt,{},Ds),uZn.Cl=function(n,t,e,i,r){return new S9(n,t,e,uG(i,17).a,uG(r,17).a)},uZn.Dl=function(n,t,e,i,r,c){return new f4(n,t,e,uG(i,17).a,uG(r,17).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),sDn(1374,$rt,{},xs),uZn.Cl=function(n,t,e,i,r){return new Ucn(n,t,e,uG(i,168).a,uG(r,168).a)},uZn.Dl=function(n,t,e,i,r,c){return new l4(n,t,e,uG(i,168).a,uG(r,168).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),sDn(1375,$rt,{},Rs),uZn.Cl=function(n,t,e,i,r){return new Gcn(n,t,e,uG(i,191).a,uG(r,191).a)},uZn.Dl=function(n,t,e,i,r,c){return new b4(n,t,e,uG(i,191).a,uG(r,191).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),sDn(1353,574,{},OY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),sDn(1354,574,{},lz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),sDn(785,574,{}),uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=!0,null==(c=t.li(e))?(r=!1,c=this.b):xA(c)===xA(rBt)&&(c=null),null==i?null!=this.c?(t.mi(e,null),i=this.b):t.mi(e,rBt):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Dl(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.mi(e,null):t.mi(e,rBt):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=!0,null==(r=t.li(e))?(i=!1,r=this.b):xA(r)===xA(rBt)&&(r=null),t.ni(e),Msn(n,this.d.Dl(n,2,this.e,r,this.b,i))):t.ni(e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),sDn(1355,785,{},AY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),sDn(1356,785,{},bz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),sDn(410,512,{},OX),uZn.yk=function(n,t,e,i,r){var c,a,o,u,s;if(s=t.li(e),this.tk()&&xA(s)===xA(rBt))return null;if(this.bl()&&i&&null!=s){if((o=uG(s,54)).Vh()&&o!=(u=mwn(n,o))){if(!LGn(this.a,u))throw hv(new mM(Lrt+Tbn(u)+Nrt+this.a+"'"));t.mi(e,s=u),this.al()&&(c=uG(u,54),a=o.Th(n,this.b?emn(o.Dh(),this.b):-1-emn(n.Dh(),this.e),null,null),!c.Ph()&&(a=c.Rh(n,this.b?emn(c.Dh(),this.b):-1-emn(n.Dh(),this.e),null,a)),a&&a.oj()),n.vh()&&n.wh()&&Msn(n,new bV(n,9,this.e,o,u))}return s}return s},uZn.zk=function(n,t,e,i,r){var c,a;return xA(a=t.li(e))===xA(rBt)&&(a=null),t.mi(e,i),this.Mj()?xA(a)!==xA(i)&&null!=a&&(r=(c=uG(a,54)).Th(n,emn(c.Dh(),this.b),null,r)):this.al()&&null!=a&&(r=uG(a,54).Th(n,-1-emn(n.Dh(),this.e),null,r)),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),r.nj(new bV(n,1,this.e,a,i))),r},uZn.Ak=function(n,t,e,i,r){var c;return xA(c=t.li(e))===xA(rBt)&&(c=null),t.ni(e),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),this.tk()?r.nj(new bV(n,2,this.e,c,null)):r.nj(new bV(n,1,this.e,c,null))),r},uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));o=null!=(u=t.li(e)),this.tk()&&xA(u)===xA(rBt)&&(u=null),a=null,this.Mj()?xA(u)!==xA(i)&&(null!=u&&(a=(r=uG(u,54)).Th(n,emn(r.Dh(),this.b),null,a)),null!=i&&(a=(r=uG(i,54)).Rh(n,emn(r.Dh(),this.b),null,a))):this.al()&&xA(u)!==xA(i)&&(null!=u&&(a=uG(u,54).Th(n,-1-emn(n.Dh(),this.e),null,a)),null!=i&&(a=uG(i,54).Rh(n,-1-emn(n.Dh(),this.e),null,a))),null==i&&this.tk()?t.mi(e,rBt):t.mi(e,i),n.vh()&&n.wh()?(c=new kZ(n,1,this.e,u,i,this.tk()&&!o),a?(a.nj(c),a.oj()):Msn(n,c)):a&&a.oj()},uZn.Ek=function(n,t,e){var i,r,c,a,o;a=null!=(o=t.li(e)),this.tk()&&xA(o)===xA(rBt)&&(o=null),c=null,null!=o&&(this.Mj()?c=(i=uG(o,54)).Th(n,emn(i.Dh(),this.b),null,c):this.al()&&(c=uG(o,54).Th(n,-1-emn(n.Dh(),this.e),null,c))),t.ni(e),n.vh()&&n.wh()?(r=new kZ(n,this.tk()?2:1,this.e,o,null,a),c?(c.nj(r),c.oj()):Msn(n,r)):c&&c.oj()},uZn.Mj=function(){return!1},uZn.al=function(){return!1},uZn.bl=function(){return!1},uZn.tk=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),sDn(575,410,{},tK),uZn.al=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),sDn(1359,575,{},eK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),sDn(787,575,{},iK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),sDn(1361,787,{},cK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),sDn(650,575,{},FU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),sDn(1360,650,{},HU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),sDn(788,650,{},UU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),sDn(1362,788,{},GU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),sDn(651,410,{},rK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),sDn(1363,651,{},aK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),sDn(789,651,{},_U),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),sDn(1364,789,{},qU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),sDn(1357,410,{},oK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),sDn(786,410,{},BU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),sDn(1358,786,{},XU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),sDn(790,576,Art,EQ),uZn.yl=function(n){return new EQ(this.a,this.c,n)},uZn.md=function(){return this.b},uZn.zl=function(n,t,e){return Snn(this,n,this.b,e)},uZn.Al=function(n,t,e){return Pnn(this,n,this.b,e)},zW(Ytt,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),sDn(1365,1,ort,_m),uZn.Fk=function(n){return this.a},uZn.Qj=function(){return F$(this.a,97)?uG(this.a,97).Qj():!this.a.dc()},uZn.Wb=function(n){this.a.$b(),this.a.Gc(uG(n,15))},uZn.Gk=function(){F$(this.a,97)?uG(this.a,97).Gk():this.a.$b()},zW(Ytt,"EStructuralFeatureImpl/SettingMany",1365),sDn(1366,576,Art,o8),uZn.xl=function(n){return new hF((uVn(),oHt),this.b.ri(this.a,n))},uZn.md=function(){return null},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),sDn(652,576,Art,hF),uZn.xl=function(n){return new hF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),sDn(403,506,Qet,Ks),uZn.aj=function(n){return Inn(h_t,EZn,29,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"ESuperAdapter/1",403),sDn(457,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,457:1,119:1,120:1},Fs),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new AX(this,g_t,this)),this.a}return $tn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),q_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),q_t)),n,e)},uZn.Wh=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 l5(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Czn(this.a),!this.a&&(this.a=new AX(this,g_t,this)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t)},uZn.ii=function(){return YYn(),q_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),void Czn(this.a)}sdn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},zW(Ytt,"ETypeParameterImpl",457),sDn(458,83,Trt,AX),uZn.Nj=function(n,t){return mCn(this,uG(n,89),t)},uZn.Oj=function(n,t){return vCn(this,uG(n,89),t)},zW(Ytt,"ETypeParameterImpl/1",458),sDn(647,45,B0n,ty),uZn.ec=function(){return new Um(this)},zW(Ytt,"ETypeParameterImpl/2",647),sDn(570,KZn,FZn,Um),uZn.Fc=function(n){return WF(this,uG(n,89))},uZn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=uG(e.Pb(),89),null==vJ(this.a,t,"")&&(i=!0);return i},uZn.$b=function(){$V(this.a)},uZn.Hc=function(n){return PV(this.a,n)},uZn.Kc=function(){return new Gm(new bsn(new Nw(this.a).a))},uZn.Mc=function(n){return C7(this,n)},uZn.gc=function(){return oS(this.a)},zW(Ytt,"ETypeParameterImpl/2/1",570),sDn(571,1,$Zn,Gm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(von(this.a).ld(),89)},uZn.Ob=function(){return this.a.b},uZn.Qb=function(){Oen(this.a)},zW(Ytt,"ETypeParameterImpl/2/1/1",571),sDn(1329,45,B0n,ey),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},uZn.xc=function(n){var t;return F$(t=RA(n)?U1(this,n):DA(FX(this.f,n)),851)?(t=uG(t,851).Kk(),vJ(this,uG(n,241),t),t):null!=t?t:null==n?(SP(),EBt):null},zW(Ytt,"EValidatorRegistryImpl",1329),sDn(1349,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},_s),uZn.ri=function(n,t){switch(n.hk()){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:cpn(t);case 25:return Xrn(t);case 27:return nen(t);case 28:return ten(t);case 29:return null==t?null:N$(QKt[0],uG(t,206));case 41:return null==t?"":Ij(uG(t,297));case 42:return cpn(t);case 50:return mK(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new Wk;case 1:return new vs;case 2:return new Kl;case 4:return new Gv;case 5:return new Jk;case 6:return new Uv;case 7:return new Fl;case 10:return new ps;case 11:return new Yk;case 12:return new aZ;case 13:return new ny;case 14:return new PK;case 17:return new Cs;case 18:return new ev;case 19:return new Fs;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 20:return null==t?null:new Wj(t);case 21:return null==t?null:new PN(t);case 23:case 22:return null==t?null:Ovn(t);case 26:case 24:return null==t?null:Ben(mUn(t,-128,127)<<24>>24);case 25:return cxn(t);case 27:return sjn(t);case 28:return hjn(t);case 29:return rIn(t);case 32:case 31:return null==t?null:YIn(t);case 38:case 37:return null==t?null:new tk(t);case 40:case 39:return null==t?null:xwn(mUn(t,j1n,vZn));case 41:case 42:return null;case 44:case 43:return null==t?null:Hvn(tJn(t));case 49:case 48:return null==t?null:Rwn(mUn(t,xrt,32767)<<16>>16);case 50:return t;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ytt,"EcoreFactoryImpl",1349),sDn(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},dJ),uZn.gb=!1,uZn.hb=!1;var gBt,pBt=!1;zW(Ytt,"EcorePackageImpl",560),sDn(1234,1,{851:1},Bs),uZn.Kk=function(){return HD(),SBt},zW(Ytt,"EcorePackageImpl/1",1234),sDn(1243,1,Wrt,Hs),uZn.fk=function(n){return F$(n,155)},uZn.gk=function(n){return Inn(uFt,EZn,155,n,0,1)},zW(Ytt,"EcorePackageImpl/10",1243),sDn(1244,1,Wrt,Us),uZn.fk=function(n){return F$(n,197)},uZn.gk=function(n){return Inn(hFt,EZn,197,n,0,1)},zW(Ytt,"EcorePackageImpl/11",1244),sDn(1245,1,Wrt,Gs),uZn.fk=function(n){return F$(n,58)},uZn.gk=function(n){return Inn(nFt,EZn,58,n,0,1)},zW(Ytt,"EcorePackageImpl/12",1245),sDn(1246,1,Wrt,qs),uZn.fk=function(n){return F$(n,411)},uZn.gk=function(n){return Inn(p_t,yrt,62,n,0,1)},zW(Ytt,"EcorePackageImpl/13",1246),sDn(1247,1,Wrt,Xs),uZn.fk=function(n){return F$(n,241)},uZn.gk=function(n){return Inn(fFt,EZn,241,n,0,1)},zW(Ytt,"EcorePackageImpl/14",1247),sDn(1248,1,Wrt,zs),uZn.fk=function(n){return F$(n,518)},uZn.gk=function(n){return Inn(m_t,EZn,2116,n,0,1)},zW(Ytt,"EcorePackageImpl/15",1248),sDn(1249,1,Wrt,Vs),uZn.fk=function(n){return F$(n,102)},uZn.gk=function(n){return Inn(v_t,krt,19,n,0,1)},zW(Ytt,"EcorePackageImpl/16",1249),sDn(1250,1,Wrt,Ws),uZn.fk=function(n){return F$(n,179)},uZn.gk=function(n){return Inn(o_t,krt,179,n,0,1)},zW(Ytt,"EcorePackageImpl/17",1250),sDn(1251,1,Wrt,Qs),uZn.fk=function(n){return F$(n,481)},uZn.gk=function(n){return Inn(a_t,EZn,481,n,0,1)},zW(Ytt,"EcorePackageImpl/18",1251),sDn(1252,1,Wrt,Js),uZn.fk=function(n){return F$(n,561)},uZn.gk=function(n){return Inn(wBt,Xit,561,n,0,1)},zW(Ytt,"EcorePackageImpl/19",1252),sDn(1235,1,Wrt,Ys),uZn.fk=function(n){return F$(n,331)},uZn.gk=function(n){return Inn(u_t,krt,35,n,0,1)},zW(Ytt,"EcorePackageImpl/2",1235),sDn(1253,1,Wrt,Zs),uZn.fk=function(n){return F$(n,248)},uZn.gk=function(n){return Inn(g_t,Prt,89,n,0,1)},zW(Ytt,"EcorePackageImpl/20",1253),sDn(1254,1,Wrt,nh),uZn.fk=function(n){return F$(n,457)},uZn.gk=function(n){return Inn(J_t,EZn,850,n,0,1)},zW(Ytt,"EcorePackageImpl/21",1254),sDn(1255,1,Wrt,th),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,485,n,8,1)},zW(Ytt,"EcorePackageImpl/22",1255),sDn(1256,1,Wrt,eh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(Ytt,"EcorePackageImpl/23",1256),sDn(1257,1,Wrt,ih),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(Ytt,"EcorePackageImpl/24",1257),sDn(1258,1,Wrt,rh),uZn.fk=function(n){return F$(n,180)},uZn.gk=function(n){return Inn(hot,zZn,180,n,0,1)},zW(Ytt,"EcorePackageImpl/25",1258),sDn(1259,1,Wrt,ch),uZn.fk=function(n){return F$(n,206)},uZn.gk=function(n){return Inn(iot,zZn,206,n,0,1)},zW(Ytt,"EcorePackageImpl/26",1259),sDn(1260,1,Wrt,ah),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(aUt,EZn,2215,n,0,1)},zW(Ytt,"EcorePackageImpl/27",1260),sDn(1261,1,Wrt,oh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(Ytt,"EcorePackageImpl/28",1261),sDn(1262,1,Wrt,uh),uZn.fk=function(n){return F$(n,61)},uZn.gk=function(n){return Inn(CFt,H3n,61,n,0,1)},zW(Ytt,"EcorePackageImpl/29",1262),sDn(1236,1,Wrt,sh),uZn.fk=function(n){return F$(n,519)},uZn.gk=function(n){return Inn(c_t,{3:1,4:1,5:1,2033:1},598,n,0,1)},zW(Ytt,"EcorePackageImpl/3",1236),sDn(1263,1,Wrt,hh),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(BFt,EZn,2039,n,0,1)},zW(Ytt,"EcorePackageImpl/30",1263),sDn(1264,1,Wrt,fh),uZn.fk=function(n){return F$(n,160)},uZn.gk=function(n){return Inn(IBt,H3n,160,n,0,1)},zW(Ytt,"EcorePackageImpl/31",1264),sDn(1265,1,Wrt,lh),uZn.fk=function(n){return F$(n,76)},uZn.gk=function(n){return Inn(Z_t,Qrt,76,n,0,1)},zW(Ytt,"EcorePackageImpl/32",1265),sDn(1266,1,Wrt,bh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(Ytt,"EcorePackageImpl/33",1266),sDn(1267,1,Wrt,wh),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(Ytt,"EcorePackageImpl/34",1267),sDn(1268,1,Wrt,dh),uZn.fk=function(n){return F$(n,297)},uZn.gk=function(n){return Inn(gat,EZn,297,n,0,1)},zW(Ytt,"EcorePackageImpl/35",1268),sDn(1269,1,Wrt,gh),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(Ytt,"EcorePackageImpl/36",1269),sDn(1270,1,Wrt,ph),uZn.fk=function(n){return F$(n,85)},uZn.gk=function(n){return Inn(mat,EZn,85,n,0,1)},zW(Ytt,"EcorePackageImpl/37",1270),sDn(1271,1,Wrt,mh),uZn.fk=function(n){return F$(n,599)},uZn.gk=function(n){return Inn(jBt,EZn,599,n,0,1)},zW(Ytt,"EcorePackageImpl/38",1271),sDn(1272,1,Wrt,vh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(oUt,EZn,2216,n,0,1)},zW(Ytt,"EcorePackageImpl/39",1272),sDn(1237,1,Wrt,kh),uZn.fk=function(n){return F$(n,90)},uZn.gk=function(n){return Inn(h_t,EZn,29,n,0,1)},zW(Ytt,"EcorePackageImpl/4",1237),sDn(1273,1,Wrt,yh),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(Ytt,"EcorePackageImpl/40",1273),sDn(1274,1,Wrt,Mh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(Ytt,"EcorePackageImpl/41",1274),sDn(1275,1,Wrt,Th),uZn.fk=function(n){return F$(n,596)},uZn.gk=function(n){return Inn(OFt,EZn,596,n,0,1)},zW(Ytt,"EcorePackageImpl/42",1275),sDn(1276,1,Wrt,jh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(uUt,zZn,2217,n,0,1)},zW(Ytt,"EcorePackageImpl/43",1276),sDn(1277,1,Wrt,Eh),uZn.fk=function(n){return F$(n,44)},uZn.gk=function(n){return Inn(Sat,c1n,44,n,0,1)},zW(Ytt,"EcorePackageImpl/44",1277),sDn(1238,1,Wrt,Sh),uZn.fk=function(n){return F$(n,142)},uZn.gk=function(n){return Inn(s_t,EZn,142,n,0,1)},zW(Ytt,"EcorePackageImpl/5",1238),sDn(1239,1,Wrt,Ph),uZn.fk=function(n){return F$(n,156)},uZn.gk=function(n){return Inn(f_t,EZn,156,n,0,1)},zW(Ytt,"EcorePackageImpl/6",1239),sDn(1240,1,Wrt,Ch),uZn.fk=function(n){return F$(n,469)},uZn.gk=function(n){return Inn(w_t,EZn,685,n,0,1)},zW(Ytt,"EcorePackageImpl/7",1240),sDn(1241,1,Wrt,Ih),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(d_t,EZn,694,n,0,1)},zW(Ytt,"EcorePackageImpl/8",1241),sDn(1242,1,Wrt,Oh),uZn.fk=function(n){return F$(n,480)},uZn.gk=function(n){return Inn(sFt,EZn,480,n,0,1)},zW(Ytt,"EcorePackageImpl/9",1242),sDn(1038,2080,Git,Qy),uZn.Mi=function(n,t){wdn(this,uG(t,424))},uZn.Qi=function(n,t){GAn(this,n,uG(t,424))},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),sDn(1039,152,Bit,SQ),uZn.jj=function(){return this.a.a},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),sDn(1067,1066,{},e$),zW("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var mBt,vBt,kBt,yBt,MBt,TBt,jBt=Iq(Jrt,"Resource");sDn(799,1524,Yrt),uZn.Hl=function(n){},uZn.Il=function(n){},uZn.El=function(){return!this.a&&(this.a=new qm(this)),this.a},uZn.Fl=function(n){var t,e,i,r,c;if((i=n.length)>0){if(s3(0,n.length),47==n.charCodeAt(0)){for(c=new R7(4),r=1,t=1;t<i;++t)s3(t,n.length),47==n.charCodeAt(t)&&(kD(c,r==t?"":(Knn(r,t,n.length),n.substr(r,t-r))),r=t+1);return kD(c,(s3(r,n.length+1),n.substr(r))),zEn(this,c)}s3(i-1,n.length),63==n.charCodeAt(i-1)&&(e=T_(n,$Cn(63),i-2))>0&&(Knn(0,e,n.length),n=n.substr(0,e))}return lNn(this,n)},uZn.Gl=function(){return this.c},uZn.Ib=function(){return Ij(this.Rm)+"@"+(Hon(this)>>>0).toString(16)+" uri='"+this.d+"'"},uZn.b=!1,zW(Zrt,"ResourceImpl",799),sDn(1525,799,Yrt,Xm),zW(Zrt,"BinaryResourceImpl",1525),sDn(1190,708,Jet),uZn.bj=function(n){return F$(n,58)?JZ(this,uG(n,58)):F$(n,599)?new DD(uG(n,599).El()):xA(n)===xA(this.f)?uG(n,16).Kc():(EK(),KFt.a)},uZn.Ob=function(){return u$n(this)},uZn.a=!1,zW(art,"EcoreUtil/ContentTreeIterator",1190),sDn(1526,1190,Jet,dV),uZn.bj=function(n){return xA(n)===xA(this.f)?uG(n,15).Kc():new L6(uG(n,58))},zW(Zrt,"ResourceImpl/5",1526),sDn(658,2092,Mrt,qm),uZn.Hc=function(n){return this.i<=4?sSn(this,n):F$(n,54)&&uG(n,54).Jh()==this.a},uZn.Mi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},uZn.Oi=function(n,t){0==n?this.a.b||(this.a.b=!0):Ann(this,n,t)},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Lj=function(){return 2},uZn.jj=function(){return this.a},uZn.Mj=function(){return!0},uZn.Nj=function(n,t){return t=uG(n,54).fi(this.a,t)},uZn.Oj=function(n,t){return uG(n,54).fi(null,t)},uZn.Pj=function(){return!1},uZn.Si=function(){return!0},uZn.aj=function(n){return Inn(nFt,EZn,58,n,0,1)},uZn.Yi=function(){return!1},zW(Zrt,"ResourceImpl/ContentsEList",658),sDn(970,2062,m1n,zm),uZn.fd=function(n){return this.a.Ki(n)},uZn.gc=function(){return this.a.gc()},zW(art,"AbstractSequentialInternalEList/1",970),sDn(634,1,{},HG),zW(art,"BasicExtendedMetaData",634),sDn(1181,1,{},CA),uZn.Jl=function(){return null},uZn.Kl=function(){return-2==this.a&&fw(this,qCn(this.d,this.b)),this.a},uZn.Ll=function(){return null},uZn.Ml=function(){return hZ(),hZ(),zot},uZn.xe=function(){return this.c==wct&&lw(this,ckn(this.d,this.b)),this.c},uZn.Nl=function(){return 0},uZn.a=-2,uZn.c=wct,zW(art,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),sDn(1182,1,{},g4),uZn.Jl=function(){return this.a==(N7(),MBt)&&dw(this,TBn(this.f,this.b)),this.a},uZn.Kl=function(){return 0},uZn.Ll=function(){return this.c==(N7(),MBt)&&bw(this,jBn(this.f,this.b)),this.c},uZn.Ml=function(){return!this.d&&pw(this,iqn(this.f,this.b)),this.d},uZn.xe=function(){return this.e==wct&&vw(this,ckn(this.f,this.b)),this.e},uZn.Nl=function(){return-2==this.g&&yw(this,DPn(this.f,this.b)),this.g},uZn.e=wct,uZn.g=-2,zW(art,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),sDn(1180,1,{},IA),uZn.b=!1,uZn.c=!1,zW(art,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),sDn(1183,1,{},p4),uZn.c=-2,uZn.e=wct,uZn.f=wct,zW(art,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),sDn(593,632,Trt,_G),uZn.Lj=function(){return this.c},uZn.ol=function(){return!1},uZn.Wi=function(n,t){return t},uZn.c=0,zW(art,"EDataTypeEList",593);var EBt,SBt,PBt,CBt,IBt=Iq(art,"FeatureMap");sDn(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},wsn),uZn.bd=function(n,t){iKn(this,n,uG(t,76))},uZn.Fc=function(n){return Qxn(this,uG(n,76))},uZn.Hi=function(n){OW(this,uG(n,76))},uZn.Nj=function(n,t){return q_(this,uG(n,76),t)},uZn.Oj=function(n,t){return X_(this,uG(n,76),t)},uZn.Ti=function(n,t){return lUn(this,n,t)},uZn.Wi=function(n,t){return IVn(this,n,uG(t,76))},uZn.hd=function(n,t){return kFn(this,n,uG(t,76))},uZn.Uj=function(n,t){return z_(this,uG(n,76),t)},uZn.Vj=function(n,t){return V_(this,uG(n,76),t)},uZn.Wj=function(n,t,e){return aPn(this,uG(n,76),uG(t,76),e)},uZn.Zi=function(n,t){return WPn(this,n,uG(t,76))},uZn.Ol=function(n,t){return UHn(this,n,t)},uZn.cd=function(n,t){var e,i,r,c,a,o,u,s,h;for(s=new Drn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=uG(r.Pb(),76)).Lk(),EFn(this.e,c))(!c.Si()||!H5(this,c,i.md())&&!sSn(s,i))&&ttn(s,i);else{for(h=VKn(this.e.Dh(),c),e=uG(this.g,124),a=!0,o=0;o<this.i;++o)if(u=e[o],h.am(u.Lk())){uG(Uyn(this,o,i),76),a=!1;break}a&&ttn(s,i)}return bfn(this,n,s)},uZn.Gc=function(n){var t,e,i,r,c,a,o,u,s;for(u=new Drn(n.gc()),i=n.Kc();i.Ob();)if(r=(e=uG(i.Pb(),76)).Lk(),EFn(this.e,r))(!r.Si()||!H5(this,r,e.md())&&!sSn(u,e))&&ttn(u,e);else{for(s=VKn(this.e.Dh(),r),t=uG(this.g,124),c=!0,a=0;a<this.i;++a)if(o=t[a],s.am(o.Lk())){uG(Uyn(this,a,e),76),c=!1;break}c&&ttn(u,e)}return CW(this,u)},uZn.Fi=function(n){return this.j=-1,BGn(this,this.i,n)},uZn.Pl=function(n,t,e){return OBn(this,n,t,e)},uZn.Xk=function(n,t){return NHn(this,n,t)},uZn.Ql=function(n,t,e){return fXn(this,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this,n,t)},uZn.Tl=function(n){return uG(zrn(this,n),76).Lk()},uZn.Ul=function(n){return uG(zrn(this,n),76).md()},uZn.Vl=function(){return this.b},uZn.Mj=function(){return!0},uZn.Tj=function(){return!0},uZn.Wl=function(n){return!kmn(this,n)},uZn.aj=function(n){return Inn(dBt,Qrt,343,n,0,1)},uZn.pl=function(n){return fK(this,n)},uZn.Wb=function(n){cW(this,n)},uZn.Xl=function(n,t){BXn(this,n,t)},uZn.Yl=function(n){return non(this,n)},uZn.Zl=function(n){ETn(this,n)},zW(art,"BasicFeatureMap",78),sDn(1960,1,UZn),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{LFn(this.e,this.b,this.a,n),this.d=this.e.j,_yn(this)}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.Ob=function(){return Zln(this)},uZn.Sb=function(){return nbn(this)},uZn.Pb=function(){return _yn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(nbn(this))return yz(this),this.g=--this.a,this.ul()&&(n=ONn(this.e,this.b,this.c,this.a,this.j),this.j=n),this.i=0,this.j;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){if(-1==this.g)throw hv(new xv);yz(this);try{VOn(this.e,this.b,this.g),this.d=this.e.j,this.g<this.a&&(--this.a,--this.c),--this.g}catch(n){throw F$(n=Ehn(n),77)?hv(new Fv):hv(n)}},uZn.ul=function(){return!1},uZn.Wb=function(n){if(-1==this.g)throw hv(new xv);yz(this);try{hqn(this.e,this.b,this.g,n),this.d=this.e.j}catch(t){throw F$(t=Ehn(t),77)?hv(new Fv):hv(t)}},uZn.a=0,uZn.c=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.i=0,zW(art,"FeatureMapUtil/BasicFeatureEIterator",1960),sDn(420,1960,UZn,Zsn),uZn.$l=function(){var n,t,e;for(e=this.e.i,n=uG(this.e.g,124);this.c<e;){if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=2,!0;++this.c}return this.i=1,this.g=-1,!1},uZn._l=function(){var n,t;for(n=uG(this.e.g,124);--this.c>=0;)if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},zW(art,"BasicFeatureMap/FeatureEIterator",420),sDn(676,420,UZn,yL),uZn.ul=function(){return!0},zW(art,"BasicFeatureMap/ResolvingFeatureEIterator",676),sDn(968,496,Irt,G$),uZn.pj=function(){return this},zW(art,"EContentsEList/1",968),sDn(969,496,Irt,kL),uZn.ul=function(){return!1},zW(art,"EContentsEList/2",969),sDn(967,287,Ort,q$),uZn.wl=function(n){},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},zW(art,"EContentsEList/FeatureIteratorImpl/1",967),sDn(840,593,Trt,jD),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EDataTypeEList/Unsettable",840),sDn(1958,593,Trt,ED),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList",1958),sDn(1959,840,Trt,SD),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList/Unsettable",1959),sDn(147,83,Trt,PD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Resolving",147),sDn(1184,555,Trt,CD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Unsettable/Resolving",1184),sDn(766,14,Trt,r_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectContainmentWithInverseEList/Unsettable",766),sDn(1222,766,Trt,c_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),sDn(757,505,Trt,ID),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectEList/Unsettable",757),sDn(338,505,Trt,OD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList",338),sDn(1844,757,Trt,AD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList/Unsettable",1844),sDn(1527,1,{},Ah),zW(art,"EObjectValidator",1527),sDn(559,505,Trt,wV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.Mj=function(){return!0},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectWithInverseEList",559),sDn(1225,559,Trt,a_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/ManyInverse",1225),sDn(635,559,Trt,o_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectWithInverseEList/Unsettable",635),sDn(1224,635,Trt,s_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),sDn(767,559,Trt,u_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList",767),sDn(32,767,Trt,f_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/ManyInverse",32),sDn(768,635,Trt,h_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList/Unsettable",768),sDn(1223,768,Trt,l_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),sDn(1185,632,Trt),uZn.Li=function(){return!(1792&this.b)},uZn.Ni=function(){this.b|=1},uZn.kl=function(){return!!(4&this.b)},uZn.Mj=function(){return!!(40&this.b)},uZn.ll=function(){return!!(16&this.b)},uZn.ml=function(){return!!(8&this.b)},uZn.nl=function(){return!!(this.b&frt)},uZn.al=function(){return!!(32&this.b)},uZn.ol=function(){return!!(this.b&w1n)},uZn.fk=function(n){return this.d?v5(this.d,n):this.Lk().Hk().fk(n)},uZn.Qj=function(){return 2&this.b?!!(1&this.b):0!=this.i},uZn.Si=function(){return!!(128&this.b)},uZn.Gk=function(){var n;Czn(this),2&this.b&&(uN(this.e)?(n=!!(1&this.b),this.b&=-2,Yv(this,new j9(this.e,2,emn(this.e.Dh(),this.Lk()),n,!1))):this.b&=-2)},uZn.Yi=function(){return!(1536&this.b)},uZn.b=0,zW(art,"EcoreEList/Generic",1185),sDn(1186,1185,Trt,yZ),uZn.Lk=function(){return this.a},zW(art,"EcoreEList/Dynamic",1186),sDn(765,66,Qet,Vm),uZn.aj=function(n){return Acn(this.a.a,n)},zW(art,"EcoreEMap/1",765),sDn(764,83,Trt,kV),uZn.Mi=function(n,t){bMn(this.b,uG(t,136))},uZn.Oi=function(n,t){Osn(this.b)},uZn.Pi=function(n,t,e){var i;++(i=this.b,uG(t,136),i).e},uZn.Qi=function(n,t){Vdn(this.b,uG(t,136))},uZn.Ri=function(n,t,e){Vdn(this.b,uG(e,136)),xA(e)===xA(t)&&uG(e,136).Ci(WN(uG(t,136).ld())),bMn(this.b,uG(t,136))},zW(art,"EcoreEMap/DelegateEObjectContainmentEList",764),sDn(1220,141,urt,xan),zW(art,"EcoreEMap/Unsettable",1220),sDn(1221,764,Trt,b_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),sDn(1189,215,B0n,DW),uZn.a=!1,uZn.b=!1,zW(art,"EcoreUtil/Copier",1189),sDn(759,1,$Zn,L6),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Ymn(this)},uZn.Pb=function(){var n;return Ymn(this),n=this.b,this.b=null,n},uZn.Qb=function(){this.a.Qb()},zW(art,"EcoreUtil/ProperContentIterator",759),sDn(1528,1527,{},_l),zW(art,"EcoreValidator",1528),Iq(art,"FeatureMapUtil/Validator"),sDn(1295,1,{2041:1},Lh),uZn.am=function(n){return!0},zW(art,"FeatureMapUtil/1",1295),sDn(773,1,{2041:1},yQn),uZn.am=function(n){var t;return this.c==n||(null==(t=gK(cQ(this.a,n)))?DBn(this,n)?(W9(this.a,n,(qx(),eot)),!0):(W9(this.a,n,(qx(),tot)),!1):t==(qx(),eot))},uZn.e=!1,zW(art,"FeatureMapUtil/BasicValidator",773),sDn(774,45,B0n,U$),zW(art,"FeatureMapUtil/BasicValidator/Cache",774),sDn(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},OA),uZn.bd=function(n,t){LFn(this.c,this.b,n,t)},uZn.Fc=function(n){return UHn(this.c,this.b,n)},uZn.cd=function(n,t){return _Xn(this.c,this.b,n,t)},uZn.Gc=function(n){return K$(this,n)},uZn.Gi=function(n,t){hrn(this.c,this.b,n,t)},uZn.Wk=function(n,t){return OBn(this.c,this.b,n,t)},uZn.$i=function(n){return gXn(this.c,this.b,n,!1)},uZn.Ii=function(){return wN(this.c,this.b)},uZn.Ji=function(){return dN(this.c,this.b)},uZn.Ki=function(n){return Onn(this.c,this.b,n)},uZn.Xk=function(n,t){return rF(this,n,t)},uZn.$b=function(){Zv(this)},uZn.Hc=function(n){return H5(this.c,this.b,n)},uZn.Ic=function(n){return Run(this.c,this.b,n)},uZn.Xb=function(n){return gXn(this.c,this.b,n,!0)},uZn.Fk=function(n){return this},uZn.dd=function(n){return U5(this.c,this.b,n)},uZn.dc=function(){return $A(this)},uZn.Qj=function(){return!kmn(this.c,this.b)},uZn.Kc=function(){return kin(this.c,this.b)},uZn.ed=function(){return yin(this.c,this.b)},uZn.fd=function(n){return lgn(this.c,this.b,n)},uZn.Ti=function(n,t){return EGn(this.c,this.b,n,t)},uZn.Ui=function(n,t){xnn(this.c,this.b,n,t)},uZn.gd=function(n){return VOn(this.c,this.b,n)},uZn.Mc=function(n){return $Hn(this.c,this.b,n)},uZn.hd=function(n,t){return hqn(this.c,this.b,n,t)},uZn.Wb=function(n){C$n(this.c,this.b),K$(this,uG(n,15))},uZn.gc=function(){return fgn(this.c,this.b)},uZn.Pc=function(){return v4(this.c,this.b)},uZn.Qc=function(n){return G5(this.c,this.b,n)},uZn.Ib=function(){var n,t;for((t=new zM).a+="[",n=wN(this.c,this.b);Zln(n);)VA(t,ox(_yn(n))),Zln(n)&&(t.a+=TZn);return t.a+="]",t.a},uZn.Gk=function(){C$n(this.c,this.b)},zW(art,"FeatureMapUtil/FeatureEList",509),sDn(644,39,Bit,i8),uZn.hj=function(n){return ydn(this,n)},uZn.mj=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0;break;case 3:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=5,ttn(t=new Drn(2),this.g),ttn(t,n.ij()),this.g=t,!0;break;case 5:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.g,16).Fc(n.ij()),!0;break;case 4:switch(n.gj()){case 3:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=1,this.g=n.ij(),!0;break;case 4:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=6,ttn(r=new Drn(2),this.n),ttn(r,n.kj()),this.n=r,i=Uhn(cT(YHt,1),W1n,28,15,[this.o,n.lj()]),this.g=i,!0}break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.n,16).Fc(n.kj()),qGn(i=uG(this.g,53),0,e=Inn(YHt,W1n,28,i.length+1,15,1),0,i.length),e[i.length]=n.lj(),this.g=e,!0}return!1},zW(art,"FeatureMapUtil/FeatureENotificationImpl",644),sDn(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Cq),uZn.Ol=function(n,t){return UHn(this.c,n,t)},uZn.Pl=function(n,t,e){return OBn(this.c,n,t,e)},uZn.Ql=function(n,t,e){return fXn(this.c,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this.c,n,t)},uZn.Tl=function(n){return uG(gXn(this.c,this.b,n,!1),76).Lk()},uZn.Ul=function(n){return uG(gXn(this.c,this.b,n,!1),76).md()},uZn.Vl=function(){return this.a},uZn.Wl=function(n){return!kmn(this.c,n)},uZn.Xl=function(n,t){BXn(this.c,n,t)},uZn.Yl=function(n){return non(this.c,n)},uZn.Zl=function(n){ETn(this.c,n)},zW(art,"FeatureMapUtil/FeatureFeatureMap",564),sDn(1294,1,ort,PA),uZn.Fk=function(n){return gXn(this.b,this.a,-1,n)},uZn.Qj=function(){return!kmn(this.b,this.a)},uZn.Wb=function(n){BXn(this.b,this.a,n)},uZn.Gk=function(){C$n(this.b,this.a)},zW(art,"FeatureMapUtil/FeatureValue",1294);var OBt,ABt,LBt,NBt,$Bt,DBt=Iq(gct,"AnyType");sDn(680,63,S1n,PM),zW(gct,"InvalidDatatypeValueException",680);var xBt,RBt,KBt,FBt,_Bt,BBt,HBt,UBt,GBt,qBt,XBt,zBt,VBt,WBt,QBt,JBt,YBt,ZBt,nHt,tHt,eHt,iHt,rHt,cHt,aHt,oHt,uHt,sHt,hHt,fHt,lHt=Iq(gct,pct),bHt=Iq(gct,mct),wHt=Iq(gct,vct);sDn(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},iy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b)}return $tn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new wsn(this,0)),NHn(this.c,n,e);case 1:return(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),71)).Xk(n,e);case 2:return!this.b&&(this.b=new wsn(this,2)),NHn(this.b,n,e)}return uG(ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),t),69).wk().Ak(this,Wen(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i}return l5(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t)}lpn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n),t)},uZn.ii=function(){return uVn(),KBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b)}sdn(this,n-iQ(this.ii()),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():this.ii(),n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.c),n.a+=", anyAttribute: ",zA(n,this.b),n.a+=")",n.a)},zW(kct,"AnyTypeImpl",844),sDn(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},Uh),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return $tn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return l5(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n))},uZn.bi=function(n,t){switch(n){case 0:return void jw(this,mK(t));case 1:return void Sw(this,mK(t))}lpn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n),t)},uZn.ii=function(){return uVn(),JBt},uZn.ki=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}sdn(this,n-iQ((uVn(),JBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():JBt,n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (data: ",VA(n,this.a),n.a+=", target: ",VA(n,this.b),n.a+=")",n.a)},uZn.a=null,uZn.b=null,zW(kct,"ProcessingInstructionImpl",681),sDn(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},ry),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0));case 4:return g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return this.a}return $tn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new wsn(this,0)),null!=mK(dXn(this.c,(uVn(),nHt),!0));case 4:return null!=g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return!!this.a}return l5(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t);case 3:return void m4(this,mK(t));case 4:return void m4(this,d_(this.a,t));case 5:return void Ew(this,uG(t,156))}lpn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n),t)},uZn.ii=function(){return uVn(),ZBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b);case 3:return!this.c&&(this.c=new wsn(this,0)),void BXn(this.c,(uVn(),nHt),null);case 4:return void m4(this,d_(this.a,null));case 5:return void(this.a=null)}sdn(this,n-iQ((uVn(),ZBt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():ZBt,n))},zW(kct,"SimpleAnyTypeImpl",682),sDn(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},cy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new wsn(this,0)),this.a):(!this.a&&(this.a=new wsn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),this.b):(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),Tnn(this.b));case 2:return e?(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),this.c):(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),Tnn(this.c));case 3:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),iHt));case 4:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),rHt));case 5:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),aHt));case 6:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),oHt))}return $tn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new wsn(this,0)),NHn(this.a,n,e);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),G_(this.b,n,e);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),G_(this.c,n,e);case 5:return!this.a&&(this.a=new wsn(this,0)),rF(T2(this.a,(uVn(),aHt)),n,e)}return uG(ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():(uVn(),eHt),t),69).wk().Ak(this,Wen(this),t-iQ((uVn(),eHt)),n,e)},uZn.Wh=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 wsn(this,0)),!$A(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),oHt)))}return l5(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void cW(this.a,t);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void Jun(this.b,t);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void Jun(this.c,t);case 3:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),iHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,iHt),uG(t,16));case 4:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),rHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,rHt),uG(t,16));case 5:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),aHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,aHt),uG(t,16));case 6:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),oHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,oHt),uG(t,16))}lpn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n),t)},uZn.ii=function(){return uVn(),eHt},uZn.ki=function(n){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void Czn(this.a);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),oHt)))}sdn(this,n-iQ((uVn(),eHt)),ern(2&this.j?(!this.k&&(this.k=new Ll),this.k).Nk():eHt,n))},uZn.Ib=function(){var n;return 4&this.j?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.a),n.a+=")",n.a)},zW(kct,"XMLTypeDocumentRootImpl",683),sDn(2028,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},Nh),uZn.ri=function(n,t){switch(n.hk()){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:cpn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return mK(t);case 6:return lK(uG(t,195));case 12:case 47:case 49:case 11:return cWn(this,n,t);case 13:return null==t?null:zXn(uG(t,247));case 15:case 14:return null==t?null:MW(uM(pK(t)));case 17:return oPn((uVn(),t));case 18:return oPn(t);case 21:case 20:return null==t?null:TW(uG(t,161).a);case 27:return bK(uG(t,195));case 30:return STn((uVn(),uG(t,15)));case 31:return STn(uG(t,15));case 40:return dK((uVn(),t));case 42:return uPn((uVn(),t));case 43:return uPn(t);case 59:case 48:return wK((uVn(),t));default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new iy;case 1:return new Uh;case 2:return new ry;case 3:return new cy;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;switch(n.hk()){case 5:case 52:case 4:return t;case 6:return syn(t);case 8:case 7:return null==t?null:MPn(t);case 9:return null==t?null:Ben(mUn((i=yXn(t,!0)).length>0&&(s3(0,i.length),43==i.charCodeAt(0))?(s3(1,i.length+1),i.substr(1)):i,-128,127)<<24>>24);case 10:return null==t?null:Ben(mUn((r=yXn(t,!0)).length>0&&(s3(0,r.length),43==r.charCodeAt(0))?(s3(1,r.length+1),r.substr(1)):r,-128,127)<<24>>24);case 11:return mK(cYn(this,(uVn(),HBt),t));case 12:return mK(cYn(this,(uVn(),UBt),t));case 13:return null==t?null:new Wj(yXn(t,!0));case 15:case 14:return iRn(t);case 16:return mK(cYn(this,(uVn(),GBt),t));case 17:return bvn((uVn(),t));case 18:return bvn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return yXn(t,!0);case 21:case 20:return vRn(t);case 22:return mK(cYn(this,(uVn(),qBt),t));case 23:return mK(cYn(this,(uVn(),XBt),t));case 24:return mK(cYn(this,(uVn(),zBt),t));case 25:return mK(cYn(this,(uVn(),VBt),t));case 26:return mK(cYn(this,(uVn(),WBt),t));case 27:return Ckn(t);case 30:return wvn((uVn(),t));case 31:return wvn(t);case 32:return null==t?null:xwn(mUn((h=yXn(t,!0)).length>0&&(s3(0,h.length),43==h.charCodeAt(0))?(s3(1,h.length+1),h.substr(1)):h,j1n,vZn));case 33:return null==t?null:new PN((f=yXn(t,!0)).length>0&&(s3(0,f.length),43==f.charCodeAt(0))?(s3(1,f.length+1),f.substr(1)):f);case 34:return null==t?null:xwn(mUn((l=yXn(t,!0)).length>0&&(s3(0,l.length),43==l.charCodeAt(0))?(s3(1,l.length+1),l.substr(1)):l,j1n,vZn));case 36:return null==t?null:Hvn(tJn((b=yXn(t,!0)).length>0&&(s3(0,b.length),43==b.charCodeAt(0))?(s3(1,b.length+1),b.substr(1)):b));case 37:return null==t?null:Hvn(tJn((w=yXn(t,!0)).length>0&&(s3(0,w.length),43==w.charCodeAt(0))?(s3(1,w.length+1),w.substr(1)):w));case 40:return nTn((uVn(),t));case 42:return dvn((uVn(),t));case 43:return dvn(t);case 44:return null==t?null:new PN((d=yXn(t,!0)).length>0&&(s3(0,d.length),43==d.charCodeAt(0))?(s3(1,d.length+1),d.substr(1)):d);case 45:return null==t?null:new PN((g=yXn(t,!0)).length>0&&(s3(0,g.length),43==g.charCodeAt(0))?(s3(1,g.length+1),g.substr(1)):g);case 46:return yXn(t,!1);case 47:return mK(cYn(this,(uVn(),QBt),t));case 59:case 48:return ZMn((uVn(),t));case 49:return mK(cYn(this,(uVn(),YBt),t));case 50:return null==t?null:Rwn(mUn((p=yXn(t,!0)).length>0&&(s3(0,p.length),43==p.charCodeAt(0))?(s3(1,p.length+1),p.substr(1)):p,xrt,32767)<<16>>16);case 51:return null==t?null:Rwn(mUn((c=yXn(t,!0)).length>0&&(s3(0,c.length),43==c.charCodeAt(0))?(s3(1,c.length+1),c.substr(1)):c,xrt,32767)<<16>>16);case 53:return mK(cYn(this,(uVn(),tHt),t));case 55:return null==t?null:Rwn(mUn((a=yXn(t,!0)).length>0&&(s3(0,a.length),43==a.charCodeAt(0))?(s3(1,a.length+1),a.substr(1)):a,xrt,32767)<<16>>16);case 56:return null==t?null:Rwn(mUn((o=yXn(t,!0)).length>0&&(s3(0,o.length),43==o.charCodeAt(0))?(s3(1,o.length+1),o.substr(1)):o,xrt,32767)<<16>>16);case 57:return null==t?null:Hvn(tJn((u=yXn(t,!0)).length>0&&(s3(0,u.length),43==u.charCodeAt(0))?(s3(1,u.length+1),u.substr(1)):u));case 58:return null==t?null:Hvn(tJn((s=yXn(t,!0)).length>0&&(s3(0,s.length),43==s.charCodeAt(0))?(s3(1,s.length+1),s.substr(1)):s));case 60:return null==t?null:xwn(mUn((e=yXn(t,!0)).length>0&&(s3(0,e.length),43==e.charCodeAt(0))?(s3(1,e.length+1),e.substr(1)):e,j1n,vZn));case 61:return null==t?null:xwn(mUn(yXn(t,!0),j1n,vZn));default:throw hv(new vM(tet+n.xe()+eet))}},zW(kct,"XMLTypeFactoryImpl",2028),sDn(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},gJ),uZn.N=!1,uZn.O=!1;var dHt,gHt,pHt,mHt,vHt,kHt=!1;zW(kct,"XMLTypePackageImpl",594),sDn(1961,1,{851:1},$h),uZn.Kk=function(){return vGn(),qHt},zW(kct,"XMLTypePackageImpl/1",1961),sDn(1970,1,Wrt,Dh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/10",1970),sDn(1971,1,Wrt,xh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/11",1971),sDn(1972,1,Wrt,Rh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/12",1972),sDn(1973,1,Wrt,Kh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(kct,"XMLTypePackageImpl/13",1973),sDn(1974,1,Wrt,Fh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/14",1974),sDn(1975,1,Wrt,_h),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/15",1975),sDn(1976,1,Wrt,Bh),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/16",1976),sDn(1977,1,Wrt,Hh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/17",1977),sDn(1978,1,Wrt,Gh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(kct,"XMLTypePackageImpl/18",1978),sDn(1979,1,Wrt,qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/19",1979),sDn(1962,1,Wrt,Xh),uZn.fk=function(n){return F$(n,857)},uZn.gk=function(n){return Inn(DBt,EZn,857,n,0,1)},zW(kct,"XMLTypePackageImpl/2",1962),sDn(1980,1,Wrt,zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/20",1980),sDn(1981,1,Wrt,Vh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/21",1981),sDn(1982,1,Wrt,Wh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/22",1982),sDn(1983,1,Wrt,Qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/23",1983),sDn(1984,1,Wrt,Jh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/24",1984),sDn(1985,1,Wrt,Yh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/25",1985),sDn(1986,1,Wrt,Zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/26",1986),sDn(1987,1,Wrt,nf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/27",1987),sDn(1988,1,Wrt,tf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/28",1988),sDn(1989,1,Wrt,ef),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/29",1989),sDn(1963,1,Wrt,rf),uZn.fk=function(n){return F$(n,681)},uZn.gk=function(n){return Inn(lHt,EZn,2119,n,0,1)},zW(kct,"XMLTypePackageImpl/3",1963),sDn(1990,1,Wrt,cf),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/30",1990),sDn(1991,1,Wrt,af),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/31",1991),sDn(1992,1,Wrt,of),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/32",1992),sDn(1993,1,Wrt,uf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/33",1993),sDn(1994,1,Wrt,sf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/34",1994),sDn(1995,1,Wrt,hf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/35",1995),sDn(1996,1,Wrt,ff),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/36",1996),sDn(1997,1,Wrt,lf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/37",1997),sDn(1998,1,Wrt,bf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/38",1998),sDn(1999,1,Wrt,wf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/39",1999),sDn(1964,1,Wrt,df),uZn.fk=function(n){return F$(n,682)},uZn.gk=function(n){return Inn(bHt,EZn,2120,n,0,1)},zW(kct,"XMLTypePackageImpl/4",1964),sDn(2e3,1,Wrt,gf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/40",2e3),sDn(2001,1,Wrt,pf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/41",2001),sDn(2002,1,Wrt,mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/42",2002),sDn(2003,1,Wrt,vf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/43",2003),sDn(2004,1,Wrt,kf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/44",2004),sDn(2005,1,Wrt,yf),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/45",2005),sDn(2006,1,Wrt,Mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/46",2006),sDn(2007,1,Wrt,Tf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/47",2007),sDn(2008,1,Wrt,jf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/48",2008),sDn(2009,1,Wrt,Ef),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/49",2009),sDn(1965,1,Wrt,Sf),uZn.fk=function(n){return F$(n,683)},uZn.gk=function(n){return Inn(wHt,EZn,2121,n,0,1)},zW(kct,"XMLTypePackageImpl/5",1965),sDn(2010,1,Wrt,Pf),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/50",2010),sDn(2011,1,Wrt,Cf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/51",2011),sDn(2012,1,Wrt,If),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/52",2012),sDn(1966,1,Wrt,Of),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/6",1966),sDn(1967,1,Wrt,Af),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/7",1967),sDn(1968,1,Wrt,Lf),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,485,n,8,1)},zW(kct,"XMLTypePackageImpl/8",1968),sDn(1969,1,Wrt,Nf),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(kct,"XMLTypePackageImpl/9",1969),sDn(55,63,S1n,CM),zW(Xct,"RegEx/ParseException",55),sDn(836,1,{},$f),uZn.bm=function(n){return n<this.j&&63==VJ(this.i,n)},uZn.cm=function(){var n,t,e,i,r;if(10!=this.c)throw hv(new CM(rZn((t$(),eit))));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(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if(123==this.a){for(r=0,e=0;;){if(EYn(this),0!=this.c)throw hv(new CM(rZn((t$(),Pit))));if((r=CMn(this.a))<0)break;if(e>16*e)throw hv(new CM(rZn((t$(),Cit))));e=16*e+r}if(125!=this.a)throw hv(new CM(rZn((t$(),Iit))));if(e>zct)throw hv(new CM(rZn((t$(),Oit))));n=e}else{if(r=0,0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(e=r,EYn(this),0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=e=16*e+r}break;case 117:if(i=0,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=t=16*t+i;break;case 118:if(EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if((t=16*t+i)>zct)throw hv(new CM(rZn((t$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw hv(new CM(rZn((t$(),Ait))))}return n},uZn.dm=function(n){var t;switch(n){case 100:t=32&~this.e?(QYn(),CHt):kJn("Nd",!0);break;case 68:t=32&~this.e?(QYn(),NHt):kJn("Nd",!1);break;case 119:t=32&~this.e?(QYn(),HHt):kJn("IsWord",!0);break;case 87:t=32&~this.e?(QYn(),DHt):kJn("IsWord",!1);break;case 115:t=32&~this.e?(QYn(),RHt):kJn("IsSpace",!0);break;case 83:t=32&~this.e?(QYn(),$Ht):kJn("IsSpace",!1);break;default:throw hv(new Ky(Vct+n.toString(16)))}return t},uZn.em=function(n){var t,e,i,r,c,a,o,u,s,h,f;for(this.b=1,EYn(this),t=null,0==this.c&&94==this.a?(EYn(this),n?(QYn(),QYn(),s=new K3(5)):(QYn(),QYn(),HFn(t=new K3(4),0,zct),s=new K3(4))):(QYn(),QYn(),s=new K3(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:TXn(s,this.dm(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.um(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=PNn(this,e)))throw hv(new CM(rZn((t$(),git))));TXn(s,h),i=!0;break;default:e=this.cm()}else if(20==f){if((c=aR(this.i,58,this.d))<0)throw hv(new CM(rZn((t$(),pit))));if(a=!0,94==VJ(this.i,this.d)&&(++this.d,a=!1),!(o=itn(r1(this.i,this.d,c),a,!(512&~this.e))))throw hv(new CM(rZn((t$(),vit))));if(TXn(s,o),i=!0,c+1>=this.j||93!=VJ(this.i,c+1))throw hv(new CM(rZn((t$(),pit))));this.d=c+2}if(EYn(this),!i)if(0!=this.c||45!=this.a)HFn(s,e,e);else{if(EYn(this),1==(f=this.c))throw hv(new CM(rZn((t$(),mit))));0==f&&93==this.a?(HFn(s,e,e),HFn(s,45,45)):(u=this.a,10==f&&(u=this.cm()),EYn(this),HFn(s,e,u))}(this.e&w1n)==w1n&&0==this.c&&44==this.a&&EYn(this)}if(1==this.c)throw hv(new CM(rZn((t$(),mit))));return t&&(lWn(t,s),s=t),pxn(s),uzn(s),this.b=0,EYn(this),s},uZn.fm=function(){var n,t,e,i;for(e=this.em(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw hv(new CM(rZn((t$(),Eit))));if(EYn(this),9!=this.c)throw hv(new CM(rZn((t$(),jit))));if(t=this.em(!1),4==i)TXn(e,t);else if(45==n)lWn(e,t);else{if(38!=n)throw hv(new Ky("ASSERT"));GVn(e,t)}}return EYn(this),e},uZn.gm=function(){var n,t;return n=this.a-48,QYn(),QYn(),t=new F1(12,null,n),!this.g&&(this.g=new ck),zv(this.g,new Wm(n)),EYn(this),t},uZn.hm=function(){return EYn(this),QYn(),KHt},uZn.im=function(){return EYn(this),QYn(),xHt},uZn.jm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.km=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.lm=function(){return EYn(this),jln()},uZn.mm=function(){return EYn(this),QYn(),_Ht},uZn.nm=function(){return EYn(this),QYn(),UHt},uZn.om=function(){var n;if(this.d>=this.j||64!=(65504&(n=VJ(this.i,this.d++))))throw hv(new CM(rZn((t$(),lit))));return EYn(this),QYn(),QYn(),new IX(0,n-64)},uZn.pm=function(){return EYn(this),VGn()},uZn.qm=function(){return EYn(this),QYn(),GHt},uZn.rm=function(){var n;return QYn(),QYn(),n=new IX(0,105),EYn(this),n},uZn.sm=function(){return EYn(this),QYn(),BHt},uZn.tm=function(){return EYn(this),QYn(),FHt},uZn.um=function(n,t){return this.cm()},uZn.vm=function(){return EYn(this),QYn(),AHt},uZn.wm=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw hv(new CM(rZn((t$(),sit))));if(i=-1,t=null,49<=(n=VJ(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new ck),zv(this.g,new Wm(i)),++this.d,41!=VJ(this.i,this.d))throw hv(new CM(rZn((t$(),ait))));++this.d}else switch(63==n&&--this.d,EYn(this),(t=eYn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));break;default:throw hv(new CM(rZn((t$(),hit))))}if(EYn(this),e=null,2==(r=Evn(this)).e){if(2!=r.Pm())throw hv(new CM(rZn((t$(),fit))));e=r.Lm(1),r=r.Lm(0)}if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),QYn(),QYn(),new bin(i,t,r,e)},uZn.xm=function(){return EYn(this),QYn(),LHt},uZn.ym=function(){var n;if(EYn(this),n=jV(24,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.zm=function(){var n;if(EYn(this),n=jV(20,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Am=function(){var n;if(EYn(this),n=jV(22,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Bm=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d<this.j&&0!=(r=U$n(t=VJ(this.i,this.d)));)n|=r,++this.d;if(this.d>=this.j)throw hv(new CM(rZn((t$(),oit))));if(45==t){for(++this.d;this.d<this.j&&0!=(r=U$n(t=VJ(this.i,this.d)));)e|=r,++this.d;if(this.d>=this.j)throw hv(new CM(rZn((t$(),oit))))}if(58==t){if(++this.d,EYn(this),i=GW(Evn(this),n,e),7!=this.c)throw hv(new CM(rZn((t$(),ait))));EYn(this)}else{if(41!=t)throw hv(new CM(rZn((t$(),uit))));++this.d,EYn(this),i=GW(Evn(this),n,e)}return i},uZn.Cm=function(){var n;if(EYn(this),n=jV(21,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Dm=function(){var n;if(EYn(this),n=jV(23,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Em=function(){var n,t;if(EYn(this),n=this.f++,t=EV(Evn(this),n),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),t},uZn.Fm=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Gm=function(n){return EYn(this),5==this.c?(EYn(this),CX(n,(QYn(),QYn(),new n8(9,n)))):CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),t=new QN(2),5==this.c?(EYn(this),vzn(t,OHt),vzn(t,n)):(vzn(t,n),vzn(t,OHt)),t},uZn.Im=function(n){return EYn(this),5==this.c?(EYn(this),QYn(),QYn(),new n8(9,n)):(QYn(),QYn(),new n8(3,n))},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=1,uZn.g=null,uZn.j=0,zW(Xct,"RegEx/RegexParser",836),sDn(1947,836,{},ay),uZn.bm=function(n){return!1},uZn.cm=function(){return R_n(this)},uZn.dm=function(n){return yUn(n)},uZn.em=function(n){return PYn(this)},uZn.fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.gm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.hm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.im=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.jm=function(){return EYn(this),yUn(67)},uZn.km=function(){return EYn(this),yUn(73)},uZn.lm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.mm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.nm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.om=function(){return EYn(this),yUn(99)},uZn.pm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.qm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.rm=function(){return EYn(this),yUn(105)},uZn.sm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.tm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.um=function(n,t){return TXn(n,yUn(t)),-1},uZn.vm=function(){return EYn(this),QYn(),QYn(),new IX(0,94)},uZn.wm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.xm=function(){return EYn(this),QYn(),QYn(),new IX(0,36)},uZn.ym=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.zm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Am=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Bm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Cm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Dm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Em=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Gm=function(n){return EYn(this),CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),vzn(t=new QN(2),n),vzn(t,OHt),t},uZn.Im=function(n){return EYn(this),QYn(),QYn(),new n8(3,n)};var yHt=null,MHt=null;zW(Xct,"RegEx/ParserForXMLSchema",1947),sDn(122,1,aat,Qm),uZn.Jm=function(n){throw hv(new Ky("Not supported."))},uZn.Km=function(){return-1},uZn.Lm=function(n){return null},uZn.Mm=function(){return null},uZn.Nm=function(n){},uZn.Om=function(n){},uZn.Pm=function(){return 0},uZn.Ib=function(){return this.Qm(0)},uZn.Qm=function(n){return 11==this.e?".":""},uZn.e=0;var THt,jHt,EHt,SHt,PHt,CHt,IHt,OHt,AHt,LHt,NHt,$Ht,DHt,xHt,RHt,KHt,FHt,_Ht,BHt,HHt,UHt,GHt,qHt,XHt,zHt=null,VHt=null,WHt=null,QHt=zW(Xct,"RegEx/Token",122);sDn(138,122,{3:1,138:1,122:1},K3),uZn.Qm=function(n){var t,e,i;if(4==this.e)if(this==IHt)e=".";else if(this==CHt)e="\\d";else if(this==HHt)e="\\w";else if(this==RHt)e="\\s";else{for((i=new zM).a+="[",t=0;t<this.b.length;t+=2)n&w1n&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}else if(this==NHt)e="\\D";else if(this==DHt)e="\\W";else if(this==$Ht)e="\\S";else{for((i=new zM).a+="[^",t=0;t<this.b.length;t+=2)n&w1n&&t>0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}return e},uZn.a=!1,uZn.c=!1,zW(Xct,"RegEx/RangeToken",138),sDn(592,1,{592:1},Wm),uZn.a=0,zW(Xct,"RegEx/RegexParser/ReferencePosition",592),sDn(591,1,{3:1,591:1},gE),uZn.Fb=function(n){var t;return null!=n&&!!F$(n,591)&&(t=uG(n,591),m_(this.b,t.b)&&this.a==t.a)},uZn.Hb=function(){return pln(this.b+"/"+XKn(this.a))},uZn.Ib=function(){return this.c.Qm(this.a)},uZn.a=0,zW(Xct,"RegEx/RegularExpression",591),sDn(228,122,aat,IX),uZn.Km=function(){return this.a},uZn.Qm=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="\\"+jF(this.a&D1n);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>=P0n?"\\v"+r1(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+jF(this.a&D1n)}break;case 8:e=this==AHt||this==LHt?""+jF(this.a&D1n):"\\"+jF(this.a&D1n);break;default:e=null}return e},uZn.a=0,zW(Xct,"RegEx/Token/CharToken",228),sDn(318,122,aat,n8),uZn.Lm=function(n){return this.a},uZn.Nm=function(n){this.b=n},uZn.Om=function(n){this.c=n},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): CLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*?";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): NONGREEDYCLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}?"}return t},uZn.b=0,uZn.c=0,zW(Xct,"RegEx/Token/ClosureToken",318),sDn(837,122,aat,eW),uZn.Lm=function(n){return 0==n?this.a:this.b},uZn.Pm=function(){return 2},uZn.Qm=function(n){return 3==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+":9==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+?":this.a.Qm(n)+""+this.b.Qm(n)},zW(Xct,"RegEx/Token/ConcatToken",837),sDn(1945,122,aat,bin),uZn.Lm=function(n){if(0==n)return this.d;if(1==n)return this.b;throw hv(new Ky("Internal Error: "+n))},uZn.Pm=function(){return this.b?2:1},uZn.Qm=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},uZn.c=0,zW(Xct,"RegEx/Token/ConditionToken",1945),sDn(1946,122,aat,R3),uZn.Lm=function(n){return this.b},uZn.Pm=function(){return 1},uZn.Qm=function(n){return"(?"+(0==this.a?"":XKn(this.a))+(0==this.c?"":XKn(this.c))+":"+this.b.Qm(n)+")"},uZn.a=0,uZn.c=0,zW(Xct,"RegEx/Token/ModifierToken",1946),sDn(838,122,aat,PQ),uZn.Lm=function(n){return this.a},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.Qm(n)+")":"("+this.a.Qm(n)+")";break;case 20:t="(?="+this.a.Qm(n)+")";break;case 21:t="(?!"+this.a.Qm(n)+")";break;case 22:t="(?<="+this.a.Qm(n)+")";break;case 23:t="(?<!"+this.a.Qm(n)+")";break;case 24:t="(?>"+this.a.Qm(n)+")"}return t},uZn.b=0,zW(Xct,"RegEx/Token/ParenToken",838),sDn(530,122,{3:1,122:1,530:1},F1),uZn.Mm=function(){return this.b},uZn.Qm=function(n){return 12==this.e?"\\"+this.a:Nxn(this.b)},uZn.a=0,zW(Xct,"RegEx/Token/StringToken",530),sDn(477,122,aat,QN),uZn.Jm=function(n){vzn(this,n)},uZn.Lm=function(n){return uG(DQ(this.a,n),122)},uZn.Pm=function(){return this.a?this.a.a.c.length:0},uZn.Qm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=uG(DQ(this.a,0),122),r=3==(e=uG(DQ(this.a,1),122)).e&&e.Lm(0)==t?t.Qm(n)+"+":9==e.e&&e.Lm(0)==t?t.Qm(n)+"+?":t.Qm(n)+""+e.Qm(n);else{for(c=new zM,i=0;i<this.a.a.c.length;i++)VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r}if(2==this.a.a.c.length&&7==uG(DQ(this.a,1),122).e)r=uG(DQ(this.a,0),122).Qm(n)+"?";else if(2==this.a.a.c.length&&7==uG(DQ(this.a,0),122).e)r=uG(DQ(this.a,1),122).Qm(n)+"??";else{for(VA(c=new zM,uG(DQ(this.a,0),122).Qm(n)),i=1;i<this.a.a.c.length;i++)c.a+="|",VA(c,uG(DQ(this.a,i),122).Qm(n));r=c.a}return r},zW(Xct,"RegEx/Token/UnionToken",477),sDn(527,1,{600:1},dE),uZn.Ib=function(){return this.a.b},zW(oat,"XMLTypeUtil/PatternMatcherImpl",527),sDn(1707,1527,{},Df),zW(oat,"XMLTypeValidator",1707),sDn(270,1,t1n,Gz),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return(this.b-this.a)*this.c<0?XHt:new xD(this)},uZn.a=0,uZn.b=0,uZn.c=0,zW(sat,"ExclusiveRange",270),sDn(1084,1,UZn,xf),uZn.Rb=function(n){uG(n,17),i$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return bE()},uZn.Ub=function(){return wE()},uZn.Wb=function(n){uG(n,17),c$()},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Tb=function(){return-1},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new TM(lat))},zW(sat,"ExclusiveRange/1",1084),sDn(258,1,UZn,xD),uZn.Rb=function(n){uG(n,17),r$()},uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return awn(this)},uZn.Ub=function(){return ytn(this)},uZn.Wb=function(n){uG(n,17),a$()},uZn.Ob=function(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Vb=function(){return this.b-1},uZn.Qb=function(){throw hv(new TM(lat))},uZn.a=0,uZn.b=0,zW(sat,"ExclusiveRange/RangeIterator",258);var JHt=hJ(brt,"C"),YHt=hJ(grt,"I"),ZHt=hJ(dZn,"Z"),nUt=hJ(prt,"J"),tUt=hJ(lrt,"B"),eUt=hJ(wrt,"D"),iUt=hJ(drt,"F"),rUt=hJ(mrt,"S"),cUt=Iq("org.eclipse.elk.core.labels","ILabelManager"),aUt=Iq(Pet,"DiagnosticChain"),oUt=Iq(Jrt,"ResourceSet"),uUt=zW(Pet,"InvocationTargetException",null),sUt=(XM(),m9),hUt=hUt=zSn;Nan(bv),van("permProps",[[["locale","default"],[bat,"gecko1_8"]],[["locale","default"],[bat,"safari"]]]),hUt(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 o=n("web-worker");c.workerFactory=function(n){return new o(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 u=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new u(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)},74741:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>y});var i=e(32548),r=e(26312),c=e(98055),a=e(99702),o=e(62954);e(74353),e(16750),e(42838);const u=new o;let s={};const h={};let f={};const l=(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,i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),i},w=function(n,t,e,i){a.l.info("abc78 edges = ",n);const o=i.insert("g").attr("class","edgeLabels");let u,s,l={},w=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,a.k)(n.defaultStyle);u=t.style,s=t.labelStyle}return n.forEach((function(t){const i="L-"+t.start+"-"+t.end;void 0===l[i]?(l[i]=0,a.l.info("abc78 new entry",i,l[i])):(l[i]++,a.l.info("abc78 new entry",i,l[i]));let d=i+"-"+l[i];a.l.info("abc78 new link id to be used is",i,d,l[i]);const g="LS-"+t.start,p="LE-"+t.end,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 v="",k="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==s&&(k=s),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,a.k)(t.style);v=n.style,k=n.labelStyle}m.style=m.style+=v,m.labelStyle=m.labelStyle+=k,void 0!==t.interpolate?m.curve=(0,a.n)(t.interpolate,r.lUB):void 0!==n.defaultInterpolate?m.curve=(0,a.n)(n.defaultInterpolate,r.lUB):m.curve=(0,a.n)(h.curve,r.lUB),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=d,m.classes="flowchart-link "+g+" "+p;const y=(0,c.f)(o,m),{source:M,target:T,sourceId:j,targetId:E}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=f[e],o=f[i];return a&&o?("diamond"===a.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===o.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,w);a.l.debug("abc78 source and target",M,T),e.edges.push({id:"e"+t.start+t.end,sources:[M],targets:[T],sourceId:j,targetId:E,labelEl:y,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},d=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=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,a,o){const u=d(t.sourceId,t.targetId,a),s=t.sections[0].startPoint,h=t.sections[0].endPoint,f=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+u.x,n.y+u.y])),l=[[s.x+u.x,s.y+u.y],...f,[h.x+u.x,h.y+u.y]],{x:b,y:w}=(0,c.k)(t.edgeData),g=(0,r.n8j)().x(b).y(w).curve(r.lUB),p=n.insert("path").attr("d",g(l)).attr("class","path "+e.classes).attr("fill","none"),m=n.insert("g").attr("class","edgeLabel"),v=(0,r.Ltv)(m.node().appendChild(t.labelEl)),k=v.node().firstChild.getBoundingClientRect();v.attr("width",k.width),v.attr("height",k.height),m.attr("transform",`translate(${t.labels[0].x+u.x}, ${t.labels[0].y+u.y})`),function(n,t,e,i,r){let a="";i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),(0,c.m)(n,t,a,r,e)}(p,e,i.type,i.arrowMarkerAbsolute,o)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},m=(n,t,e,i,r,c,o)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:o,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-"+o%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"),u=(0,a.F)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+u}, ${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,o+1)}))},v={getClasses:function(n,t){return a.l.info("Extracting classes"),t.db.getClasses()},draw:async function(n,t,e,i){var o;i.db.clear(),f={},s={},i.db.setGen("gen-2"),i.parser.parse(n);const h=(0,r.Ltv)("body").append("div").attr("style","height:400px").attr("id","cy");let l={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",u),i.db.getDirection()){case"BT":l.layoutOptions["elk.direction"]="UP";break;case"TB":l.layoutOptions["elk.direction"]="DOWN";break;case"LR":l.layoutOptions["elk.direction"]="RIGHT";break;case"RL":l.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:b,flowchart:d}=(0,a.F)();let v;"sandbox"===b&&(v=(0,r.Ltv)("#i"+t));const k="sandbox"===b?(0,r.Ltv)(v.nodes()[0].contentDocument.body):(0,r.Ltv)("body"),y="sandbox"===b?v.nodes()[0].contentDocument:document,M=k.select(`[id="${t}"]`);(0,c.a)(M,["point","circle","cross"],i.type,t);const T=i.db.getVertices();let j;const E=i.db.getSubGraphs();a.l.info("Subgraphs - ",E);for(let r=E.length-1;r>=0;r--)j=E[r],i.db.addVertex(j.id,{text:j.title,type:j.labelType},"group",void 0,j.classes,j.dir);const S=M.insert("g").attr("class","subgraphs"),P=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);l=await async function(n,t,e,i,r,o,u){const s=e.select(`[id="${t}"]`).insert("g").attr("class","nodes"),h=Object.keys(n);return await Promise.all(h.map((async function(t){const e=n[t];let u="default";e.classes.length>0&&(u=e.classes.join(" ")),u+=" flowchart-label";const h=(0,a.k)(e.styles);let l=void 0!==e.text?e.text:e.id;const b={width:0,height:0},w=[{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 d=0,g="",p={};switch(e.type){case"round":d=5,g="rect";break;case"square":case"group":default:g="rect";break;case"diamond":g="question",p={portConstraints:"FIXED_SIDE"};break;case"hexagon":g="hexagon";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"doublecircle":g="doublecircle"}const m={labelStyle:h.labelStyle,shape:g,labelText:l,labelType:e.labelType,rx:d,ry:d,class:u,style:h.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.F)().flowchart.padding};let v,k;if("group"!==m.type)k=await(0,c.e)(s,m,e.dir),v=k.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=await(0,c.l)(s,m,void 0,!0);b.width=t.width,b.wrappingWidth=(0,a.F)().flowchart.wrappingWidth,b.height=t.height,b.labelNode=n.node(),m.labelData=b}const y={id:e.id,ports:"diamond"===e.type?w:[],layoutOptions:p,labelText:l,labelData:b,domId:r.db.lookUpDomId(e.id),width:null==v?void 0:v.width,height:null==v?void 0:v.height,type:e.type,el:k,parent:o.parentById[e.id]};f[m.id]=y}))),u}(T,t,k,y,i,P,l);const C=M.insert("g").attr("class","edges edgePath"),I=i.db.getEdges();l=w(I,i,l,M);Object.keys(f).forEach((n=>{const t=f[n];t.parent||l.children.push(t),void 0!==P.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)})),p(l.children,P),a.l.info("after layout",JSON.stringify(l,null,2));const O=await u.layout(l);m(0,0,O.children,M,S,i,0),a.l.info("after layout",O),null==(o=O.edges)||o.map((n=>{g(C,n,n.edgeData,i,P,t)})),(0,a.o)({},M,d.diagramPadding,d.useMaxWidth),h.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`,y={db:i.d,renderer:v,parser:i.p,styles:k}}}]); \ No newline at end of file diff --git a/assets/js/489.ecb90ce5.js b/assets/js/489.ecb90ce5.js new file mode 100644 index 00000000000..bbd9700ff3a --- /dev/null +++ b/assets/js/489.ecb90ce5.js @@ -0,0 +1,2 @@ +/*! For license information please see 489.ecb90ce5.js.LICENSE.txt */ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[489],{90489:(t,e,n)=>{"use strict";t.exports=n(810)},2542:(t,e,n)=>{"use strict";var i=n(46573),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},10897:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(46573),a=n(61348),u=n(99272),c=n(2542),l=n(84436);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},21540:(t,e,n)=>{"use strict";var i=n(46573),s=n(61348),r=n(84436),o=n(10897),a=n(2542);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},52324:(t,e,n)=>{"use strict";var i=n(46573),s=n(61348);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},84436:(t,e,n)=>{"use strict";var i=n(90874),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}}},99272: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>'}},49629:(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(46573),r=n(61348),o=n(84436);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},37360:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(46573),r=n(61348),o=n(52324),a=n(49629),u=n(21540),c=n(99272),l=n(2542);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(36353),t.exports=h},61348:t=>{"use strict";t.exports={element:null}},19715: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]]}},46573:(t,e,n)=>{"use strict";var i,s=n(68937),r=n(61348);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)}}},16903:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);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)}},36353:(t,e,n)=>{"use strict";t.exports={hits:n(16903),popularIn:n(46839)}},46839:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);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([])}}))}}},810:(t,e,n)=>{"use strict";var i=n(59539);n(61348).element=i;var s=n(46573);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(37360),a=n(52324);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},92281:t=>{t.exports="0.38.1"},59539: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)},68937: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},90874:(t,e,n)=>{"use strict";var i,s,r,o=[n(45741),n(91856),n(41015),n(16486),n(45723),n(26345)],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())}},16486:(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)}}},41015:(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}}},91856:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},45723:(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}}},26345:(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/489.ecb90ce5.js.LICENSE.txt b/assets/js/489.ecb90ce5.js.LICENSE.txt new file mode 100644 index 00000000000..4f7ccd8a76e --- /dev/null +++ b/assets/js/489.ecb90ce5.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/4943.7a968dfc.js b/assets/js/4943.7a968dfc.js new file mode 100644 index 00000000000..07d6c74d591 --- /dev/null +++ b/assets/js/4943.7a968dfc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4943],{74943:(t,e,r)=>{r.d(e,{diagram:()=>z});var i=r(99702),a=r(26312),n=(r(74353),r(16750),r(42838),function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,3],r=[1,6],i=[1,4],a=[1,5],n=[2,5],c=[1,12],s=[5,7,13,19,21,23,24,26,28,31,37,40,47],o=[7,13,19,21,23,24,26,28,31,37,40],l=[7,12,13,19,21,23,24,26,28,31,37,40],h=[7,13,47],m=[1,42],y=[1,41],u=[7,13,29,32,35,38,47],p=[1,55],g=[1,56],b=[1,57],d=[7,13,32,35,42,47],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT: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,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(t,e,r,i,a,n,c){var s=n.length-1;switch(a){case 2:return n[s];case 3:return n[s-1];case 4:return i.setDirection(n[s-3]),n[s-1];case 6:i.setOptions(n[s-1]),this.$=n[s];break;case 7:n[s-1]+=n[s],this.$=n[s-1];break;case 9:this.$=[];break;case 10:n[s-1].push(n[s]),this.$=n[s-1];break;case 11:this.$=n[s-1];break;case 16:this.$=n[s].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[s].trim(),i.setAccDescription(this.$);break;case 19:i.addSection(n[s].substr(8)),this.$=n[s].substr(8);break;case 21:i.checkout(n[s]);break;case 22:i.branch(n[s]);break;case 23:i.branch(n[s-2],n[s]);break;case 24:i.cherryPick(n[s],"",void 0);break;case 25:i.cherryPick(n[s-2],"",void 0,n[s]);break;case 26:i.cherryPick(n[s-2],"",n[s]);break;case 27:i.cherryPick(n[s-4],"",n[s],n[s-2]);break;case 28:i.cherryPick(n[s-4],"",n[s-2],n[s]);break;case 29:i.cherryPick(n[s],"",n[s-2]);break;case 30:i.cherryPick(n[s],"","");break;case 31:i.cherryPick(n[s-2],"","");break;case 32:i.cherryPick(n[s-4],"","",n[s-2]);break;case 33:i.cherryPick(n[s-4],"","",n[s]);break;case 34:i.cherryPick(n[s-2],"",n[s-4],n[s]);break;case 35:i.cherryPick(n[s-2],"","",n[s]);break;case 36:i.merge(n[s],"","","");break;case 37:i.merge(n[s-2],n[s],"","");break;case 38:i.merge(n[s-2],"",n[s],"");break;case 39:i.merge(n[s-2],"","",n[s]);break;case 40:i.merge(n[s-4],n[s],"",n[s-2]);break;case 41:i.merge(n[s-4],"",n[s],n[s-2]);break;case 42:i.merge(n[s-4],"",n[s-2],n[s]);break;case 43:i.merge(n[s-4],n[s-2],n[s],"");break;case 44:i.merge(n[s-4],n[s-2],"",n[s]);break;case 45:i.merge(n[s-4],n[s],n[s-2],"");break;case 46:i.merge(n[s-6],n[s-4],n[s-2],n[s]);break;case 47:i.merge(n[s-6],n[s],n[s-4],n[s-2]);break;case 48:i.merge(n[s-6],n[s-4],n[s],n[s-2]);break;case 49:i.merge(n[s-6],n[s-2],n[s-4],n[s]);break;case 50:i.merge(n[s-6],n[s],n[s-2],n[s-4]);break;case 51:i.merge(n[s-6],n[s-2],n[s],n[s-4]);break;case 52:i.commit(n[s]);break;case 53:i.commit("","",i.commitType.NORMAL,n[s]);break;case 54:i.commit("","",n[s],"");break;case 55:i.commit("","",n[s],n[s-2]);break;case 56:i.commit("","",n[s-2],n[s]);break;case 57:i.commit("",n[s],i.commitType.NORMAL,"");break;case 58:i.commit("",n[s-2],i.commitType.NORMAL,n[s]);break;case 59:i.commit("",n[s],i.commitType.NORMAL,n[s-2]);break;case 60:i.commit("",n[s-2],n[s],"");break;case 61:i.commit("",n[s],n[s-2],"");break;case 62:i.commit("",n[s-4],n[s-2],n[s]);break;case 63:i.commit("",n[s-4],n[s],n[s-2]);break;case 64:i.commit("",n[s-2],n[s-4],n[s]);break;case 65:i.commit("",n[s],n[s-4],n[s-2]);break;case 66:i.commit("",n[s],n[s-2],n[s-4]);break;case 67:i.commit("",n[s-2],n[s],n[s-4]);break;case 68:i.commit(n[s],"",i.commitType.NORMAL,"");break;case 69:i.commit(n[s],"",i.commitType.NORMAL,n[s-2]);break;case 70:i.commit(n[s-2],"",i.commitType.NORMAL,n[s]);break;case 71:i.commit(n[s-2],"",n[s],"");break;case 72:i.commit(n[s],"",n[s-2],"");break;case 73:i.commit(n[s],n[s-2],i.commitType.NORMAL,"");break;case 74:i.commit(n[s-2],n[s],i.commitType.NORMAL,"");break;case 75:i.commit(n[s-4],"",n[s-2],n[s]);break;case 76:i.commit(n[s-4],"",n[s],n[s-2]);break;case 77:i.commit(n[s-2],"",n[s-4],n[s]);break;case 78:i.commit(n[s],"",n[s-4],n[s-2]);break;case 79:i.commit(n[s],"",n[s-2],n[s-4]);break;case 80:i.commit(n[s-2],"",n[s],n[s-4]);break;case 81:i.commit(n[s-4],n[s],n[s-2],"");break;case 82:i.commit(n[s-4],n[s-2],n[s],"");break;case 83:i.commit(n[s-2],n[s],n[s-4],"");break;case 84:i.commit(n[s],n[s-2],n[s-4],"");break;case 85:i.commit(n[s],n[s-4],n[s-2],"");break;case 86:i.commit(n[s-2],n[s-4],n[s],"");break;case 87:i.commit(n[s-4],n[s],i.commitType.NORMAL,n[s-2]);break;case 88:i.commit(n[s-4],n[s-2],i.commitType.NORMAL,n[s]);break;case 89:i.commit(n[s-2],n[s],i.commitType.NORMAL,n[s-4]);break;case 90:i.commit(n[s],n[s-2],i.commitType.NORMAL,n[s-4]);break;case 91:i.commit(n[s],n[s-4],i.commitType.NORMAL,n[s-2]);break;case 92:i.commit(n[s-2],n[s-4],i.commitType.NORMAL,n[s]);break;case 93:i.commit(n[s-6],n[s-4],n[s-2],n[s]);break;case 94:i.commit(n[s-6],n[s-4],n[s],n[s-2]);break;case 95:i.commit(n[s-6],n[s-2],n[s-4],n[s]);break;case 96:i.commit(n[s-6],n[s],n[s-4],n[s-2]);break;case 97:i.commit(n[s-6],n[s-2],n[s],n[s-4]);break;case 98:i.commit(n[s-6],n[s],n[s-2],n[s-4]);break;case 99:i.commit(n[s-4],n[s-6],n[s-2],n[s]);break;case 100:i.commit(n[s-4],n[s-6],n[s],n[s-2]);break;case 101:i.commit(n[s-2],n[s-6],n[s-4],n[s]);break;case 102:i.commit(n[s],n[s-6],n[s-4],n[s-2]);break;case 103:i.commit(n[s-2],n[s-6],n[s],n[s-4]);break;case 104:i.commit(n[s],n[s-6],n[s-2],n[s-4]);break;case 105:i.commit(n[s],n[s-4],n[s-2],n[s-6]);break;case 106:i.commit(n[s-2],n[s-4],n[s],n[s-6]);break;case 107:i.commit(n[s],n[s-2],n[s-4],n[s-6]);break;case 108:i.commit(n[s-2],n[s],n[s-4],n[s-6]);break;case 109:i.commit(n[s-4],n[s-2],n[s],n[s-6]);break;case 110:i.commit(n[s-4],n[s],n[s-2],n[s-6]);break;case 111:i.commit(n[s-2],n[s-4],n[s-6],n[s]);break;case 112:i.commit(n[s],n[s-4],n[s-6],n[s-2]);break;case 113:i.commit(n[s-2],n[s],n[s-6],n[s-4]);break;case 114:i.commit(n[s],n[s-2],n[s-6],n[s-4]);break;case 115:i.commit(n[s-4],n[s-2],n[s-6],n[s]);break;case 116:i.commit(n[s-4],n[s],n[s-6],n[s-2]);break;case 117:this.$="";break;case 118:this.$=n[s];break;case 119:this.$=i.commitType.NORMAL;break;case 120:this.$=i.commitType.REVERSE;break;case 121:this.$=i.commitType.HIGHLIGHT}},table:[{3:1,4:2,5:e,7:r,13:i,47:a},{1:[3]},{3:7,4:2,5:e,7:r,13:i,47:a},{6:8,7:n,8:[1,9],9:[1,10],10:11,13:c},t(s,[2,124]),t(s,[2,125]),t(s,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:n,10:11,13:c},{8:[1,15]},t(o,[2,9],{11:16,12:[1,17]}),t(l,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:n,10:11,13:c},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},t(l,[2,7]),{1:[2,3]},{7:[1,36]},t(o,[2,10]),{4:37,7:r,13:i,47:a},t(o,[2,12]),t(h,[2,13]),t(h,[2,14]),t(h,[2,15]),{20:[1,38]},{22:[1,39]},t(h,[2,18]),t(h,[2,19]),t(h,[2,20]),{27:40,33:m,46:y},t(h,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:m,46:y},{32:[1,50],35:[1,51]},{27:52,33:m,46:y},{1:[2,4]},t(o,[2,11]),t(h,[2,16]),t(h,[2,17]),t(h,[2,21]),t(u,[2,122]),t(u,[2,123]),t(h,[2,52]),{33:[1,53]},{39:54,43:p,44:g,45:b},{33:[1,58]},{33:[1,59]},t(h,[2,118]),t(h,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},t(h,[2,22],{29:[1,66]}),t(h,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),t(h,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),t(d,[2,119]),t(d,[2,120]),t(d,[2,121]),t(h,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),t(h,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:p,44:g,45:b},{33:[1,81]},t(h,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:p,44:g,45:b},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:p,44:g,45:b},{33:[1,95]},{33:[1,96]},{39:97,43:p,44:g,45:b},{33:[1,98]},t(h,[2,37],{35:[1,100],38:[1,99]}),t(h,[2,38],{32:[1,102],35:[1,101]}),t(h,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},t(h,[2,23]),t(h,[2,55],{32:[1,110],42:[1,111]}),t(h,[2,59],{38:[1,112],42:[1,113]}),t(h,[2,69],{32:[1,115],38:[1,114]}),t(h,[2,56],{32:[1,116],42:[1,117]}),t(h,[2,61],{35:[1,118],42:[1,119]}),t(h,[2,72],{32:[1,121],35:[1,120]}),t(h,[2,58],{38:[1,122],42:[1,123]}),t(h,[2,60],{35:[1,124],42:[1,125]}),t(h,[2,73],{35:[1,127],38:[1,126]}),t(h,[2,70],{32:[1,129],38:[1,128]}),t(h,[2,71],{32:[1,131],35:[1,130]}),t(h,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:p,44:g,45:b},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:p,44:g,45:b},t(h,[2,25],{35:[1,140]}),t(h,[2,26],{34:[1,141]}),t(h,[2,31],{34:[1,142]}),t(h,[2,29],{34:[1,143]}),t(h,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:p,44:g,45:b},{33:[1,148]},{39:149,43:p,44:g,45:b},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:p,44:g,45:b},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:p,44:g,45:b},{33:[1,162]},{39:163,43:p,44:g,45:b},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:p,44:g,45:b},{33:[1,168]},t(h,[2,43],{35:[1,169]}),t(h,[2,44],{38:[1,170]}),t(h,[2,42],{32:[1,171]}),t(h,[2,45],{35:[1,172]}),t(h,[2,40],{38:[1,173]}),t(h,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},t(h,[2,66],{42:[1,181]}),t(h,[2,79],{32:[1,182]}),t(h,[2,67],{42:[1,183]}),t(h,[2,90],{38:[1,184]}),t(h,[2,80],{32:[1,185]}),t(h,[2,89],{38:[1,186]}),t(h,[2,65],{42:[1,187]}),t(h,[2,78],{32:[1,188]}),t(h,[2,64],{42:[1,189]}),t(h,[2,84],{35:[1,190]}),t(h,[2,77],{32:[1,191]}),t(h,[2,83],{35:[1,192]}),t(h,[2,63],{42:[1,193]}),t(h,[2,91],{38:[1,194]}),t(h,[2,62],{42:[1,195]}),t(h,[2,85],{35:[1,196]}),t(h,[2,86],{35:[1,197]}),t(h,[2,92],{38:[1,198]}),t(h,[2,76],{32:[1,199]}),t(h,[2,87],{38:[1,200]}),t(h,[2,75],{32:[1,201]}),t(h,[2,81],{35:[1,202]}),t(h,[2,82],{35:[1,203]}),t(h,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:p,44:g,45:b},{33:[1,207]},{33:[1,208]},{39:209,43:p,44:g,45:b},{33:[1,210]},t(h,[2,27]),t(h,[2,32]),t(h,[2,28]),t(h,[2,33]),t(h,[2,34]),t(h,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:p,44:g,45:b},{33:[1,215]},{39:216,43:p,44:g,45:b},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:p,44:g,45:b},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:p,44:g,45:b},{33:[1,229]},{39:230,43:p,44:g,45:b},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:p,44:g,45:b},t(h,[2,46]),t(h,[2,48]),t(h,[2,47]),t(h,[2,49]),t(h,[2,51]),t(h,[2,50]),t(h,[2,107]),t(h,[2,108]),t(h,[2,105]),t(h,[2,106]),t(h,[2,110]),t(h,[2,109]),t(h,[2,114]),t(h,[2,113]),t(h,[2,112]),t(h,[2,111]),t(h,[2,116]),t(h,[2,115]),t(h,[2,104]),t(h,[2,103]),t(h,[2,102]),t(h,[2,101]),t(h,[2,99]),t(h,[2,100]),t(h,[2,98]),t(h,[2,97]),t(h,[2,96]),t(h,[2,95]),t(h,[2,93]),t(h,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],c=this.table,s="",o=0,l=0,h=n.slice.call(arguments,1),m=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);m.setInput(t,y.yy),y.yy.lexer=m,y.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var p=m.yylloc;n.push(p);var g=m.options&&m.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,d,f,$,k,x,_,T,w,E={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==b&&(w=void 0,"number"!=typeof(w=i.pop()||m.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),b=w),f=c[d]&&c[d][b]),void 0===f||!f.length||!f[0]){var L="";for(k in T=[],c[d])this.terminals_[k]&&k>2&&T.push("'"+this.terminals_[k]+"'");L=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(L,{text:m.match,token:this.terminals_[b]||b,line:m.yylineno,loc:p,expected:T})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+b);switch(f[0]){case 1:r.push(b),a.push(m.yytext),n.push(m.yylloc),r.push(f[1]),b=null,l=m.yyleng,s=m.yytext,o=m.yylineno,p=m.yylloc;break;case 2:if(x=this.productions_[f[1]][1],E.$=a[a.length-x],E._$={first_line:n[n.length-(x||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(x||1)].first_column,last_column:n[n.length-1].last_column},g&&(E._$.range=[n[n.length-(x||1)].range[0],n[n.length-1].range[1]]),void 0!==($=this.performAction.apply(E,[s,l,o,y.yy,f[1],a,n].concat(h))))return $;x&&(r=r.slice(0,-1*x*2),a=a.slice(0,-1*x),n=n.slice(0,-1*x)),r.push(this.productions_[f[1]][0]),a.push(E.$),n.push(E._$),_=c[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},$={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,r=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[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 r,i,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))),(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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[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,r,i){switch(r){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 30:case 34:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?: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,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\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:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};function k(){this.yy={}}return f.lexer=$,k.prototype=f,f.Parser=k,new k}());n.parser=n;const c=n;let s=(0,i.c)().gitGraph.mainBranchName,o=(0,i.c)().gitGraph.mainBranchOrder,l={},h=null,m={};m[s]={name:s,order:o};let y={};y[s]=h;let u=s,p="LR",g=0;function b(){return(0,i.y)({length:7})}let d={};const f=function(t){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0===y[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}{u=t;const e=y[u];h=l[e]}};function $(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function k(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let r="";t.forEach((function(t){r+=t===e?"\t*":"\t|"}));const a=[r,e.id,e.seq];for(let i in y)y[i]===e.id&&a.push(i);if(i.l.debug(a.join(" ")),e.parents&&2==e.parents.length){const r=l[e.parents[0]];$(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];$(t,e,r)}}k(t=function(t,e){const r=Object.create(null);return t.reduce(((t,i)=>{const a=e(i);return r[a]||(r[a]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const x=function(){const t=Object.keys(l).map((function(t){return l[t]}));return t.forEach((function(t){i.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},_={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},T={getConfig:()=>(0,i.c)().gitGraph,setDirection:function(t){p=t},setOptions:function(t){i.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{d=JSON.parse(t)}catch(e){i.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return d},commit:function(t,e,r,a){i.l.debug("Entering commit:",t,e,r,a),e=i.e.sanitizeText(e,(0,i.c)()),t=i.e.sanitizeText(t,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)());const n={id:e||g+"-"+b(),message:t,seq:g++,type:r||_.NORMAL,tag:a||"",parents:null==h?[]:[h.id],branch:u};h=n,l[n.id]=n,y[u]=n.id,i.l.debug("in pushCommit "+n.id)},branch:function(t,e){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0!==y[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}y[t]=null!=h?h.id:null,m[t]={name:t,order:e?parseInt(e,10):null},f(t),i.l.debug("in createBranch")},merge:function(t,e,r,a){t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)());const n=l[y[u]],c=l[y[t]];if(u===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===n||!n){let e=new Error('Incorrect usage of "merge". Current branch ('+u+")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===y[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===c||!c){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(n===c){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!==l[e]){let i=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw i.hash={text:"merge "+t+e+r+a,token:"merge "+t+e+r+a,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+a]},i}const s={id:e||g+"-"+b(),message:"merged branch "+t+" into "+u,seq:g++,parents:[null==h?null:h.id,y[t]],branch:u,type:_.MERGE,customType:r,customId:!!e,tag:a||""};h=s,l[s.id]=s,y[u]=s.id,i.l.debug(y),i.l.debug("in mergeBranch")},cherryPick:function(t,e,r,a){if(i.l.debug("Entering cherryPick:",t,e,r),t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)()),r=i.e.sanitizeText(r,(0,i.c)()),a=i.e.sanitizeText(a,(0,i.c)()),!t||void 0===l[t]){let r=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw r.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"]},r}let n=l[t],c=n.branch;if(a&&(!Array.isArray(n.parents)||!n.parents.includes(a))){throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.")}if(n.type===_.MERGE&&!a){throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.")}if(!e||void 0===l[e]){if(c===u){let r=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw r.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"]},r}const s=l[y[u]];if(void 0===s||!s){let r=new Error('Incorrect usage of "cherry-pick". Current branch ('+u+")has no commits");throw r.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"]},r}const o={id:g+"-"+b(),message:"cherry-picked "+n+" into "+u,seq:g++,parents:[null==h?null:h.id,n.id],branch:u,type:_.CHERRY_PICK,tag:r??`cherry-pick:${n.id}${n.type===_.MERGE?`|parent:${a}`:""}`};h=o,l[o.id]=o,y[u]=o.id,i.l.debug(y),i.l.debug("in cherryPick")}},checkout:f,prettyPrint:function(){i.l.debug(l);k([x()[0]])},clear:function(){l={},h=null;let t=(0,i.c)().gitGraph.mainBranchName,e=(0,i.c)().gitGraph.mainBranchOrder;y={},y[t]=null,m={},m[t]={name:t,order:e},u=t,g=0,(0,i.v)()},getBranchesAsObjArray:function(){return Object.values(m).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 y},getCommits:function(){return l},getCommitsArray:x,getCurrentBranch:function(){return u},getDirection:function(){return p},getHead:function(){return h},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,setDiagramTitle:i.q,getDiagramTitle:i.t,commitType:_};let w={};const E=0,L=1,M=2,v=3,I=4;let A={},R={},O=[],C=0,S="LR";const P=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];r="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const i of r){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=i.trim(),e.appendChild(t)}return e},B=(t,e,r)=>{const a=(0,i.c)().gitGraph,n=t.append("g").attr("class","commit-bullets"),c=t.append("g").attr("class","commit-labels");let s=0;"TB"===S&&(s=30);const o=Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)),l=a.parallelCommits,h=10;o.forEach((t=>{const i=e[t];if(l)if(i.parents.length){const t=(t=>{let e="",r=0;return t.forEach((t=>{const i="TB"===S?R[t].y:R[t].x;i>=r&&(e=t,r=i)})),e||void 0})(i.parents);s="TB"===S?R[t].y+40:R[t].x+40}else s=0,"TB"===S&&(s=30);const o=s+h,m="TB"===S?o:A[i.branch].pos,y="TB"===S?A[i.branch].pos:o;if(r){let t,e=void 0!==i.customType&&""!==i.customType?i.customType:i.type;switch(e){case E:t="commit-normal";break;case L:t="commit-reverse";break;case M:t="commit-highlight";break;case v:t="commit-merge";break;case I:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===M){const e=n.append("rect");e.attr("x",y-10),e.attr("y",m-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${A[i.branch].index%8} ${t}-outer`),n.append("rect").attr("x",y-6).attr("y",m-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${A[i.branch].index%8} ${t}-inner`)}else if(e===I)n.append("circle").attr("cx",y).attr("cy",m).attr("r",10).attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y-3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("circle").attr("cx",y+3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y+3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),n.append("line").attr("x1",y-3).attr("y1",m+1).attr("x2",y).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=n.append("circle");if(r.attr("cx",y),r.attr("cy",m),r.attr("r",i.type===v?9:10),r.attr("class",`commit ${i.id} commit${A[i.branch].index%8}`),e===v){const e=n.append("circle");e.attr("cx",y),e.attr("cy",m),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}if(e===L){n.append("path").attr("d",`M ${y-5},${m-5}L${y+5},${m+5}M${y-5},${m+5}L${y+5},${m-5}`).attr("class",`commit ${t} ${i.id} commit${A[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:y,y:o}:{x:o,y:m},r){const t=4,e=2;if(i.type!==I&&(i.customId&&i.type===v||i.type!==v)&&a.showCommitLabel){const r=c.append("g"),n=r.insert("rect").attr("class","commit-label-bkg"),l=r.append("text").attr("x",s).attr("y",m+25).attr("class","commit-label").text(i.id);let h=l.node().getBBox();if(n.attr("x",o-h.width/2-e).attr("y",m+13.5).attr("width",h.width+2*e).attr("height",h.height+2*e),"TB"===S&&(n.attr("x",y-(h.width+4*t+5)).attr("y",m-12),l.attr("x",y-(h.width+4*t)).attr("y",m+h.height-12)),"TB"!==S&&l.attr("x",o-h.width/2),a.rotateCommitLabel)if("TB"===S)l.attr("transform","rotate(-45, "+y+", "+m+")"),n.attr("transform","rotate(-45, "+y+", "+m+")");else{let t=-7.5-(h.width+10)/25*9.5,e=10+h.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+m+")")}}if(i.tag){const r=c.insert("polygon"),a=c.append("circle"),n=c.append("text").attr("y",m-16).attr("class","tag-label").text(i.tag);let l=n.node().getBBox();n.attr("x",o-l.width/2);const u=l.height/2,p=m-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${p+e}\n ${s-l.width/2-t/2},${p-e}\n ${o-l.width/2-t},${p-u-e}\n ${o+l.width/2+t},${p-u-e}\n ${o+l.width/2+t},${p+u+e}\n ${o-l.width/2-t},${p+u+e}`),a.attr("cx",s-l.width/2+t/2).attr("cy",p).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${y},${s+e}\n ${y},${s-e}\n ${y+h},${s-u-e}\n ${y+h+l.width+t},${s-u-e}\n ${y+h+l.width+t},${s+u+e}\n ${y+h},${s+u+e}`).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),a.attr("cx",y+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+y+","+s+")"),n.attr("x",y+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+y+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r,i,a)=>{const n=("TB"===S?r.x<i.x:r.y<i.y)?e.branch:t.branch;return Object.values(a).some((r=>{return(i=r).seq>t.seq&&i.seq<e.seq&&(t=>t.branch===n)(r);var i}))},G=(t,e,r=0)=>{const i=t+Math.abs(t-e)/2;if(r>5)return i;if(O.every((t=>Math.abs(t-i)>=10)))return O.push(i),i;const a=Math.abs(t-e);return G(t,e-a/5,r+1)},H=(t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{((t,e,r,i)=>{const a=R[e.id],n=R[r.id],c=N(e,r,a,n,i);let s,o="",l="",h=0,m=0,y=A[r.branch].index;if(r.type===v&&e.id!==r.parents[0]&&(y=A[e.branch].index),c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10;const t=a.y<n.y?G(a.y,n.y):G(n.y,a.y),r=a.x<n.x?G(a.x,n.x):G(n.x,a.x);"TB"===S?a.x<n.x?s=`M ${a.x} ${a.y} L ${r-h} ${a.y} ${l} ${r} ${a.y+m} L ${r} ${n.y-h} ${o} ${r+m} ${n.y} L ${n.x} ${n.y}`:(y=A[e.branch].index,s=`M ${a.x} ${a.y} L ${r+h} ${a.y} ${o} ${r} ${a.y+m} L ${r} ${n.y-h} ${l} ${r-m} ${n.y} L ${n.x} ${n.y}`):a.y<n.y?s=`M ${a.x} ${a.y} L ${a.x} ${t-h} ${o} ${a.x+m} ${t} L ${n.x-h} ${t} ${l} ${n.x} ${t+m} L ${n.x} ${n.y}`:(y=A[e.branch].index,s=`M ${a.x} ${a.y} L ${a.x} ${t+h} ${l} ${a.x+m} ${t} L ${n.x-h} ${t} ${o} ${n.x} ${t-m} L ${n.x} ${n.y}`)}else o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,"TB"===S?(a.x<n.x&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.y} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${l} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x>n.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${l} ${a.x-m} ${n.y} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${n.x+h} ${a.y} ${o} ${n.x} ${a.y+m} L ${n.x} ${n.y}`),a.x===n.x&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`)):(a.y<n.y&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${l} ${n.x} ${a.y+m} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${a.x} ${n.y-h} ${o} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y>n.y&&(s=r.type===v&&e.id!==r.parents[0]?`M ${a.x} ${a.y} L ${n.x-h} ${a.y} ${o} ${n.x} ${a.y-m} L ${n.x} ${n.y}`:`M ${a.x} ${a.y} L ${a.x} ${n.y+h} ${l} ${a.x+m} ${n.y} L ${n.x} ${n.y}`),a.y===n.y&&(s=`M ${a.x} ${a.y} L ${n.x} ${n.y}`));t.append("path").attr("d",s).attr("class","arrow arrow"+y%8)})(r,e[t],i,e)}))}))},z={parser:c,db:T,renderer:{draw:function(t,e,r,n){A={},R={},w={},C=0,O=[],S="LR";const c=(0,i.c)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),w=n.db.getCommits();const o=n.db.getBranchesAsObjArray();S=n.db.getDirection();const l=(0,a.Ltv)(`[id="${e}"]`);let h=0;o.forEach(((t,e)=>{const r=P(t.name),i=l.append("g"),a=i.insert("g").attr("class","branchLabel"),n=a.insert("g").attr("class","label branch-label");n.node().appendChild(r);let c=r.getBBox();A[t.name]={pos:h,index:e},h+=50+(s.rotateCommitLabel?40:0)+("TB"===S?c.width/2:0),n.remove(),a.remove(),i.remove()})),B(l,w,!1),s.showBranches&&((t,e)=>{const r=(0,i.c)().gitGraph,a=t.append("g");e.forEach(((t,e)=>{const i=e%8,n=A[t.name].pos,c=a.append("line");c.attr("x1",0),c.attr("y1",n),c.attr("x2",C),c.attr("y2",n),c.attr("class","branch branch"+i),"TB"===S&&(c.attr("y1",30),c.attr("x1",n),c.attr("y2",C),c.attr("x2",n)),O.push(n);let s=t.name;const o=P(s),l=a.insert("rect"),h=a.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);h.node().appendChild(o);let m=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(!0===r.rotateCommitLabel?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),h.attr("transform","translate("+(-m.width-14-(!0===r.rotateCommitLabel?30:0))+", "+(n-m.height/2-1)+")"),"TB"===S&&(l.attr("x",n-m.width/2-10).attr("y",0),h.attr("transform","translate("+(n-m.width/2-5)+", 0)")),"TB"!==S&&l.attr("transform","translate(-19, "+(n-m.height/2)+")")}))})(l,o),H(l,w),B(l,w,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,n.db.getDiagramTitle()),(0,i.z)(void 0,l,s.diagramPadding,s.useMaxWidth??c.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`}}}]); \ No newline at end of file diff --git a/assets/js/4a41aaaf.0fbde342.js b/assets/js/4a41aaaf.0fbde342.js new file mode 100644 index 00000000000..fb733e75aa8 --- /dev/null +++ b/assets/js/4a41aaaf.0fbde342.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6436],{59043:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var s=t(74848),a=t(28453);const r={title:"Deploy a smart contract",sidebar_position:1,description:"deploying smart contracts",tags:["private networks"]},c="Deploy smart contracts to an Ethereum chain",o={id:"private-networks/tutorials/contracts/index",title:"Deploy a smart contract",description:"deploying smart contracts",source:"@site/docs/private-networks/tutorials/contracts/index.md",sourceDirName:"private-networks/tutorials/contracts",slug:"/private-networks/tutorials/contracts/",permalink:"/private-networks/tutorials/contracts/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/contracts/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Deploy a smart contract",sidebar_position:1,description:"deploying smart contracts",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a permissioned network",permalink:"/private-networks/tutorials/permissioning/"},next:{title:"Transfer account funds",permalink:"/private-networks/tutorials/contracts/transfer-funds"}},i={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Use <code>eth_sendSignedTransaction</code>",id:"use-eth_sendsignedtransaction",level:2},{value:"Use <code>eth_sendTransaction</code>",id:"use-eth_sendtransaction",level:2},{value:"Use <code>eea_sendRawTransaction</code> for private contracts with web3js-quorum",id:"use-eea_sendrawtransaction-for-private-contracts-with-web3js-quorum",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deploy-smart-contracts-to-an-ethereum-chain",children:"Deploy smart contracts to an Ethereum chain"})}),"\n",(0,s.jsx)(n.p,{children:"This tutorial shows you how to deploy smart contracts as transactions to a network."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.p,{children:["This tutorial requires a local blockchain network. You can use the ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"})," to rapidly generate one. If deploying a private contract, enable privacy on the network (public contracts can also be deployed on privacy-enabled networks)."]}),"\n",(0,s.jsxs)(n.h2,{id:"use-eth_sendsignedtransaction",children:["Use ",(0,s.jsx)(n.code,{children:"eth_sendSignedTransaction"})]}),"\n",(0,s.jsxs)(n.p,{children:["To deploy a smart contract using ",(0,s.jsx)(n.a,{href:"https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html#sendsignedtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendSignedTransaction"})}),", use an account's private key to sign and serialize the transaction, and send the API request."]}),"\n",(0,s.jsxs)(n.p,{children:["This example uses the ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/web3",children:"web3js"})," library to make the API calls."]}),"\n",(0,s.jsxs)(n.p,{children:["Using the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/common/smart_contracts/privacy/contracts/SimpleStorage.sol",children:(0,s.jsx)(n.code,{children:"SimpleStorage.sol"})})," smart contract as an example, create a new file called ",(0,s.jsx)(n.code,{children:"compile.js"})," with the following content:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'title="compile.js"',children:'const fs = require("fs").promises;\nconst solc = require("solc");\n\nasync function main() {\n // Load the contract source code\n const sourceCode = await fs.readFile("SimpleStorage.sol", "utf8");\n // Compile the source code and retrieve the ABI and bytecode\n const { abi, bytecode } = compile(sourceCode, "SimpleStorage");\n // Store the ABI and bytecode into a JSON file\n const artifact = JSON.stringify({ abi, bytecode }, null, 2);\n await fs.writeFile("SimpleStorage.json", artifact);\n}\n\nfunction compile(sourceCode, contractName) {\n // Create the Solidity Compiler Standard Input and Output JSON\n const input = {\n language: "Solidity",\n sources: { main: { content: sourceCode } },\n settings: { outputSelection: { "*": { "*": ["abi", "evm.bytecode"] } } },\n };\n // Parse the compiler output to retrieve the ABI and bytecode\n const output = solc.compile(JSON.stringify(input));\n const artifact = JSON.parse(output).contracts.main[contractName];\n return {\n abi: artifact.abi,\n bytecode: artifact.evm.bytecode.object,\n };\n}\n\nmain().then(() => process.exit(0));\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"compile.js"})," to get the smart contract's output JSON:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"node compile.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"solc"})," to get the contract's bytecode and ABI:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"solc SimpleStorage.sol --bin --abi\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Once you have the bytecode and ABI, you can rename the output files to make them easier to use; this tutorial refers to them as ",(0,s.jsx)(n.code,{children:"SimpleStorage.bin"})," and ",(0,s.jsx)(n.code,{children:"SimpleStorage.abi"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Create a new file named ",(0,s.jsx)(n.code,{children:"public_tx.js"})," to send the transaction (or run the following commands in a JavaScript console). The Developer Quickstart provides an ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/public_tx.js",children:"example of a public transaction script"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:'titl="public_tx.js"',children:'const web3 = new Web3(host);\n// use an existing account, or make an account\nconst privateKey =\n "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63";\nconst account = web3.eth.accounts.privateKeyToAccount(privateKey);\n\n// read in the contracts\nconst contractJsonPath = path.resolve(__dirname, "SimpleStorage.json");\nconst contractJson = JSON.parse(fs.readFileSync(contractJsonPath));\nconst contractAbi = contractJson.abi;\nconst contractBinPath = path.resolve(__dirname, "SimpleStorage.bin");\nconst contractBin = fs.readFileSync(contractBinPath);\n// initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode\nconst contractConstructorInit =\n "000000000000000000000000000000000000000000000000000000000000002F";\n\n// get txnCount for the nonce value\nconst txnCount = await web3.eth.getTransactionCount(account.address);\n\nconst rawTxOptions = {\n nonce: web3.utils.numberToHex(txnCount),\n from: account.address,\n to: null, //public tx\n value: "0x00",\n data: "0x" + contractBin + contractConstructorInit, // contract binary appended with initialization value\n gasPrice: "0x0", //ETH per unit of gas\n gasLimit: "0x24A22", //max number of gas units the tx is allowed to use\n};\nconsole.log("Creating transaction...");\nconst tx = new Tx(rawTxOptions);\nconsole.log("Signing transaction...");\ntx.sign(privateKey);\nconsole.log("Sending transaction...");\nvar serializedTx = tx.serialize();\nconst pTx = await web3.eth.sendSignedTransaction(\n "0x" + serializedTx.toString("hex").toString("hex"),\n);\nconsole.log("tx transactionHash: " + pTx.transactionHash);\nconsole.log("tx contractAddress: " + pTx.contractAddress);\n'})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"rawTxOptions"})," contains the following fields:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"nonce"})," - the number of transactions sent from an address."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"from"})," - address of the sending account. For example ",(0,s.jsx)(n.code,{children:"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"to"})," - address of the receiver. To deploy a contract, set to ",(0,s.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"gas"})," - amount of gas provided by the sender for the transaction."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"gasPrice"})," - price for each unit of gas the sender is willing to pay."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"data"})," - binary of the contract (in this example there's also a constructor initialization value, so we append that to the binary value)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"value"})," - amount of Ether/Wei transferred from the sender to the recipient."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Run the ",(0,s.jsx)(n.code,{children:"public_tx.js"})," to send the transaction:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"node public_tx.js\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example code creates the transaction ",(0,s.jsx)(n.code,{children:"tx"}),", signs it with the private key of the account, serializes it, then calls ",(0,s.jsx)(n.code,{children:"eth_sendSignedTransaction"})," to deploy the contract."]}),"\n",(0,s.jsxs)(n.h2,{id:"use-eth_sendtransaction",children:["Use ",(0,s.jsx)(n.code,{children:"eth_sendTransaction"})]}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.a,{href:"https://ethereum.github.io/execution-apis/api-documentation",children:(0,s.jsx)(n.code,{children:"eth_sendTransaction"})})," as an alternative to ",(0,s.jsx)(n.code,{children:"eth_sendSignedTransaction"}),". However, Besu does not support the ",(0,s.jsx)(n.code,{children:"eth_sendTransaction"})," API call and keeps account management separate for stronger security. Configure ",(0,s.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," with your Besu node to make the ",(0,s.jsx)(n.code,{children:"eth_sendTransaction"})," API call."]}),"\n",(0,s.jsxs)(n.p,{children:["Pass the following parameters to the ",(0,s.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/reference/api/json-rpc#eth_sendtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendTransaction"})})," call to Web3Signer. Web3Signer converts the request to an ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})})," call that Besu uses:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"to"})," - address of the receiver. To deploy a contract, set to ",(0,s.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"from"})," - address of the sender account. For example ",(0,s.jsx)(n.code,{children:"0x9b790656b9ec0db1936ed84b3bea605873558198"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"gas"})," - amount of gas provided by the sender for the transaction"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"gasPrice"})," - price for each unit of gas the sender is willing to pay"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"data"})," - one of the following:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"For contract deployments (this use case) - compiled code of the contract"}),"\n",(0,s.jsxs)(n.li,{children:["For contract interactions - hash of the invoked method signature and encoded parameters (see ",(0,s.jsx)(n.a,{href:"https://solidity.readthedocs.io/en/develop/abi-spec.html",children:"Ethereum Contract ABI"}),")"]}),"\n",(0,s.jsx)(n.li,{children:"For simple ether transfers - empty"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:"title=\"'eth_sendTransaction' parameters\"",children:'params: {\n "to": null,\n "from": "0x9b790656b9ec0db1936ed84b3bea605873558198",\n "gas": "0x76c0",\n "gasPrice": "0x9184e72a000",\n "data": "0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Make the request using ",(0,s.jsx)(n.code,{children:"eth_sendTransaction"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:"title=\"'eth_sendTransaction' curl HTTP request\"",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0x9b790656b9ec0db1936ed84b3bea605873558198", "to":null, "gas":"0x7600","gasPrice":"0x9184e72a000", "data":"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033"}], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,s.jsxs)(n.h2,{id:"use-eea_sendrawtransaction-for-private-contracts-with-web3js-quorum",children:["Use ",(0,s.jsx)(n.code,{children:"eea_sendRawTransaction"})," for private contracts with web3js-quorum"]}),"\n",(0,s.jsxs)(n.p,{children:["To deploy a private contract to another node or ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy group"})," member, use the ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/web3js-quorum",children:"web3js-quorum"})," library and the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eea_sendrawtransaction",children:(0,s.jsx)(n.code,{children:"eea_sendRawTransaction"})})," API call. You must use this API call instead of ",(0,s.jsx)(n.a,{href:"https://ethereum.github.io/execution-apis/api-documentation",children:(0,s.jsx)(n.code,{children:"eth_sendTransaction"})})," because Besu keeps account management separate for stronger security."]}),"\n",(0,s.jsxs)(n.p,{children:["The Developer Quickstart provides an ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/private_tx.js",children:"example of a private transaction script"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This example uses the ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/web3",children:"web3js"})," library to make the API calls."]}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://consensys.github.io/web3js-quorum/latest/module-priv.html#~generateAndSendRawTransaction",children:(0,s.jsx)(n.code,{children:"web3.priv.generateAndSendRawTransaction"})})," by running the following commands in a JavaScript console, or by including them in a ",(0,s.jsx)(n.code,{children:"private_tx.js"})," file and running ",(0,s.jsx)(n.code,{children:"node private_tx.js"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",metastring:"title=\"'private_tx.js' using 'web3.priv.generateAndSendRawTransaction'\"",children:'const Web3 = require("web3");\nconst Web3Quorum = require("web3js-quorum");\n\nconst bytecode =\n "608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033";\n// initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode\nconst contractConstructorInit =\n "000000000000000000000000000000000000000000000000000000000000002F";\n\nconst chainId = 1337;\nconst web3 = new Web3(clientUrl);\nconst web3quorum = new Web3Quorum(web3, chainId);\n\nconst txOptions = {\n data: "0x" + bytecode + contractConstructorInit,\n privateKey: fromPrivateKey,\n privateFrom: fromPublicKey,\n privateFor: [toPublicKey],\n};\nconsole.log("Creating contract...");\nconst txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions);\nconsole.log("Getting contractAddress from txHash: ", txHash);\n\nconst privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt(\n txHash,\n);\nconsole.log("Private Transaction Receipt: ", privateTxReceipt);\nreturn privateTxReceipt;\n'})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"txOptions"})," contains the following field:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"data"})," - compiled code of the contract (in this example there's also a constructor initialization value, so we append that to the bytecode)."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The deployment process includes creating the client as in the previous examples, but rather than deploying the contract with ",(0,s.jsx)(n.code,{children:"to: null"}),", it instead sends the transaction with ",(0,s.jsx)(n.code,{children:"privateFor: [memberPublicKey/s]"}),". Once you make the API call, you receive a ",(0,s.jsx)(n.code,{children:"transactionHash"}),", which you can use to get a ",(0,s.jsx)(n.code,{children:"transactionReceipt"})," containing the contract's address."]}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsx)(n.p,{children:"This example doesn't use a privacy group and makes a simple node-to-node transaction. To use a privacy group:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Create the privacy group using the public keys of the nodes in the group."}),"\n",(0,s.jsxs)(n.li,{children:["Specify the ",(0,s.jsx)(n.code,{children:"privacyGroupId"})," instead of the ",(0,s.jsx)(n.code,{children:"privateFor"})," option in the txOptions above and then send the transaction."]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Developer Quickstart provides an ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/besu/smart_contracts/privacy/scripts/private_tx_privacy_group.js",children:"example of a private transaction with a privacy group"}),"."]})]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var s=t(96540);const a={},r=s.createContext(a);function c(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4b21c0d5.59ec311d.js b/assets/js/4b21c0d5.59ec311d.js new file mode 100644 index 00000000000..8e56c870d86 --- /dev/null +++ b/assets/js/4b21c0d5.59ec311d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6414],{913:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Concepts","slug":"public-networks/concepts","permalink":"/public-networks/concepts","sidebar":"publicDocSidebar","navigation":{"previous":{"title":"Troubleshoot peering","permalink":"/public-networks/how-to/troubleshoot/peering"},"next":{"title":"Node clients","permalink":"/public-networks/concepts/node-clients"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/4ba08559.41f62f60.js b/assets/js/4ba08559.41f62f60.js new file mode 100644 index 00000000000..9cdc40cd105 --- /dev/null +++ b/assets/js/4ba08559.41f62f60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6410],{74060:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>b,frontMatter:()=>t,metadata:()=>l,toc:()=>u});var r=s(74848),i=s(28453),c=s(11470),a=s(19365);const t={title:"Use RPC Pub/Sub over WS",sidebar_position:2,description:"Using RPC Pub/Sub with Besu WebSockets",tags:["public networks","private networks"]},o="Use RPC Pub/Sub over WebSockets",l={id:"public-networks/how-to/use-besu-api/rpc-pubsub",title:"Use RPC Pub/Sub over WS",description:"Using RPC Pub/Sub with Besu WebSockets",source:"@site/docs/public-networks/how-to/use-besu-api/rpc-pubsub.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/rpc-pubsub",permalink:"/public-networks/how-to/use-besu-api/rpc-pubsub",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/rpc-pubsub.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use RPC Pub/Sub over WS",sidebar_position:2,description:"Using RPC Pub/Sub with Besu WebSockets",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use JSON-RPC over HTTP, WS, and IPC",permalink:"/public-networks/how-to/use-besu-api/json-rpc"},next:{title:"Use GraphQL over HTTP",permalink:"/public-networks/how-to/use-besu-api/graphql"}},d={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Use RPC Pub/Sub",id:"use-rpc-pubsub",level:3},{value:"Subscription ID",id:"subscription-id",level:3},{value:"Notifications when synchronizing",id:"notifications-when-synchronizing",level:3},{value:"Subscribe",id:"subscribe",level:2},{value:"New headers",id:"new-headers",level:3},{value:"Logs",id:"logs",level:3},{value:"Pending transactions",id:"pending-transactions",level:3},{value:"Dropped transactions",id:"dropped-transactions",level:3},{value:"Synchronizing",id:"synchronizing",level:3},{value:"Unsubscribe",id:"unsubscribe",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"use-rpc-pubsub-over-websockets",children:"Use RPC Pub/Sub over WebSockets"})}),"\n",(0,r.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsxs)(n.p,{children:["Subscribe to events by using either RPC Pub/Sub over WebSockets or ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:"filters over HTTP"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Use RPC Pub/Sub over WebSockets to wait for events instead of polling for them. For example, dapps subscribe to logs and receive notifications when a specific event occurs."}),"\n",(0,r.jsx)(n.p,{children:"Methods specific to RPC Pub/Sub are:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"eth_subscribe"})," and ",(0,r.jsx)(n.code,{children:"eth_unsubscribe"})," - create or cancel a subscription for specific events."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"priv_subscribe"})," and ",(0,r.jsx)(n.code,{children:"priv_unsubscribe"})," - create or cancel a subscription for ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private logs"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Unlike other ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/",children:"Besu API methods"}),", you cannot call the RPC Pub/Sub methods over HTTP. Use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-ws-enabled"})})," option to enable the WebSockets JSON-RPC service."]})}),"\n",(0,r.jsx)(n.h3,{id:"use-rpc-pubsub",children:"Use RPC Pub/Sub"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#http-and-websocket-requests",children:"WebSockets"})," supports the RPC Pub/Sub API."]}),"\n",(0,r.jsxs)(n.p,{children:["To create subscriptions, use ",(0,r.jsx)(n.code,{children:"eth_subscribe"})," or ",(0,r.jsx)(n.code,{children:"priv_subscribe"}),". Once subscribed, the API publishes notifications using ",(0,r.jsx)(n.code,{children:"eth_subscription"})," or ",(0,r.jsx)(n.code,{children:"priv_subscription"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Subscriptions couple with connections. If a connection is closed, all subscriptions created over the connection are removed."}),"\n",(0,r.jsx)(n.h3,{id:"subscription-id",children:"Subscription ID"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eth_subscribe"})," and ",(0,r.jsx)(n.code,{children:"priv_subscribe"})," return a subscription ID for each subscription created. Notifications include the subscription ID."]}),"\n",(0,r.jsx)(n.p,{children:"For example, to create a synchronizing subscription:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "id": 1, "method": "eth_subscribe", "params": ["syncing"] }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["The result includes the subscription ID of ",(0,r.jsx)(n.code,{children:'"0x1"'}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["The notifications also include the subscription ID of ",(0,r.jsx)(n.code,{children:'"0x1"'}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x1",\n "result": {\n "startingBlock": "0x0",\n "currentBlock": "0x50",\n "highestBlock": "0x343c19"\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"notifications-when-synchronizing",children:"Notifications when synchronizing"}),"\n",(0,r.jsx)(n.p,{children:"Subscribing to some events (for example, logs) can cause a flood of notifications while the node is synchronizing."}),"\n",(0,r.jsx)(n.h2,{id:"subscribe",children:"Subscribe"}),"\n",(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"eth_subscribe"})," to create subscriptions for the following event types:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#new-headers",children:"New headers"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#logs",children:"Logs"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#pending-transactions",children:"Pending transactions"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#dropped-transactions",children:"Dropped transactions"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#synchronizing",children:"Synchronizing"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.code,{children:"priv_subscribe"})," to ",(0,r.jsx)(n.a,{href:"#logs",children:"create subscriptions for logs on private contracts"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Only logs subscriptions are relevant for private transactions because private transactions are anchored to the public chain rather than having their own private blockchain."})}),"\n",(0,r.jsx)(n.h3,{id:"new-headers",children:"New headers"}),"\n",(0,r.jsxs)(n.p,{children:["To notify you about each block added to the blockchain, use the ",(0,r.jsx)(n.code,{children:"newHeads"})," parameter with ",(0,r.jsx)(n.code,{children:"eth_subscribe"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"If a chain reorganization occurs, the subscription publishes notifications for blocks in the new chain. This means the subscription can publish notifications for multiple blocks at the same height on the blockchain."}),"\n",(0,r.jsxs)(n.p,{children:["The new headers notification returns ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block objects"}),". The second parameter is optional. If specified, the notifications include whole ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction objects"}),", Otherwise, the notifications include transaction hashes."]}),"\n",(0,r.jsx)(n.p,{children:"To subscribe to new header notifications:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "eth_subscribe",\n "params": ["newHeads", { "includeTransactions": true }]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 2, "result": "0x1" }\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Example notification without the ",(0,r.jsx)(n.code,{children:'{"includeTransactions": true}'})," parameter included:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x1",\n "result": {\n "number": "0x40c22",\n "hash": "0x16af2ee1672203c7ac13ff280822008be0f38e1e5bdc675760015ae3192c0e3a",\n "parentHash": "0x1fcf5dadfaf2ab4d985eb05d40eaa23605b0db25d736610c4b87173bfe438f91",\n "nonce": "0x0000000000000000",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "logsBloom": "0x00008000000000080000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000000040000000000000000000000000000000000000400000000010000000000000000100000000000020000000000000000000000000000000000010000000000000000000000000000000000000000000",\n "transactionsRoot": "0x5b2e3c1a49352f1ca9fb5dfe74b7ffbbb6d70e23a12693444e26058d8a8e6296",\n "stateRoot": "0xbe8d3bc58bd982421a3ea8b66753404502df0f464ae78a17661d157c406dd38b",\n "receiptsRoot": "0x81b175ec1f4d44fbbd6ba08f1bd3950663b307b7cb35751c067b535cc0b58f12",\n "miner": "0x0000000000000000000000000000000000000000",\n "difficulty": "0x1",\n "totalDifficulty": "0x7c16e",\n "extraData": "0xd783010600846765746887676f312e372e33856c696e757800000000000000002160f780bb1f61eda045c67cdb1297ba37d8349df8035533cb0cf82a7e45f23f3d72bbec125a9f499b3eb110b7d1918d466cb2ede90b38296cfe2aaf452c513f00",\n "size": "0x3a1",\n "gasLimit": "0x47e7c4",\n "gasUsed": "0x11ac3a",\n "timestamp": "0x592afc24",\n "uncles": [],\n "transactions": [\n "0x419c69d21b14e2e8f911def22bb6d0156c876c0e1c61067de836713043364d6c",\n "0x70a5b2cb2cee6e0b199232a1757fc2a9d6053a4691a7afef8508fd88aeeec703",\n "0x4b3035f1d32339fe1a4f88147dc197a0fe5bbd63d3b9dec2dad96a3b46e4fddd"\n ]\n }\n }\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Example notification with the ",(0,r.jsx)(n.code,{children:'{"includeTransactions": true}'})," parameter included:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n"jsonrpc": "2.0",\n"method": "eth_subscription",\n"params":{\n "subscription":"0x1",\n "result": {\n ....\n "transactions":[\n {\n "blockHash":"0xa30ee4d7c271ae5150aec494131c5f1f34089c7aa8fb58bd8bb916a55275bb90",\n "blockNumber":"0x63",\n "from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas":"0x5208",\n "gasPrice":"0x3b9aca00",\n "hash":"0x11f66c3e96a92e3c14c1c33ad77381221bf8b58a887b4fed6aee456fc6f39b24",\n "input":"0x",\n "nonce":"0x1",\n "to":"0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "transactionIndex":"0x0",\n "value":"0x56bc75e2d63100000",\n "v":"0xfe8",\n "r":"0x4b57d179c74885ef5f9326fd000665ea7fae44095c1e2016a2817fc671beb8cc",\n "s":"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8",\n }\n ],\n },\n }\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"logs",children:"Logs"}),"\n",(0,r.jsxs)(n.p,{children:["To notify you about ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," included in new blocks, use the ",(0,r.jsx)(n.code,{children:"logs"})," parameter with ",(0,r.jsx)(n.code,{children:"eth_subscribe"})," or ",(0,r.jsx)(n.code,{children:"priv_subscribe"}),". Specify a filter object to receive notifications only for logs matching your filter."]}),"\n",(0,r.jsx)(n.p,{children:"Logs subscriptions have a filter object parameter with the following fields:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"address"})," - (optional) Either an address or an array of addresses. Returns only logs created from these addresses."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"topics"})," - (optional) Returns only logs that match the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs#topic-filters",children:"specified topics"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"fromBlock"})," - (optional) The earliest block from which to return logs."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"toBlock"})," - (optional) The last block from which to return logs."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"For private contracts, the privacy group ID must be specified. Only members of a privacy group receive logs for a private contract subscription. If you create a subscription for a privacy group you are not a member of, you will not receive any notifications."}),"\n",(0,r.jsxs)(n.p,{children:["If a chain reorganization occurs, the subscription publishes notifications for logs from the old chain with the ",(0,r.jsx)(n.code,{children:"removed"})," property in the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/objects#log-object",children:"log object"})," set to ",(0,r.jsx)(n.code,{children:"true"}),". This means the subscription can publish notifications for multiple logs for the same transaction."]}),"\n",(0,r.jsxs)(n.p,{children:["The logs subscription returns ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"}),"."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsx)(a.A,{value:"All logs",label:"All logs",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ \n "id": 1, \n "method": "eth_subscribe", \n "params": ["logs", {}]\n}\n'})})}),(0,r.jsx)(a.A,{value:"Specific parameters",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "eth_subscribe",\n "params": [\n "logs",\n {\n "address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",\n "topics": [\n "0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"\n ],\n "fromBlock": "0x0",\n "toBlock": "latest"\n }\n ]\n}\n'})})}),(0,r.jsx)(a.A,{value:"Result",label:"Result",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x2" }\n'})})}),(0,r.jsx)(a.A,{value:"Notification",label:"Notification",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x2",\n "result": {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x2174",\n "blockHash": "0x7bc83837534aa13df55ff7db77784b1d1ba666d4c4bdd223cae9fe09c7c37eba",\n "transactionHash": "0x942179373e413824c6bc7045e92295aff91b679215446549b4aeb084da46495b",\n "transactionIndex": "0x0",\n "address": "0x9b8397f1b0fecd3a1a40cdd5e8221fa461898517",\n "data": "0x",\n "topics": [\n "0x199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca072787",\n "0x0000000000000000000000000000000000000000000000000000000000000005"\n ]\n }\n }\n}\n'})})})]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsx)(a.A,{value:"All logs for privacy group",label:"All logs for privacy group",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "priv_subscribe",\n "params": ["4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=", "logs", {}]\n}\n'})})}),(0,r.jsx)(a.A,{value:"Specific parameters",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "priv_subscribe",\n "params": [\n "4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=",\n "logs",\n {\n "address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",\n "topics": [\n "0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"\n ]\n }\n ]\n}\n'})})}),(0,r.jsx)(a.A,{value:"Result",label:"Result",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }\n'})})}),(0,r.jsx)(a.A,{value:"Notification",label:"Notification",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "priv_subscription",\n "params": {\n "subscription": "0x1",\n "privacyGroupId": "4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=",\n "result": {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x285",\n "blockHash": "0x98490766b16de2a4d044c04d92599d71e626bc96e42f0c74274ef4e03fafd579",\n "transactionHash": "0x40034ef14e3a22946693dd2a11efddf3a8850ddcad46b408198df6c176c53ffb",\n "transactionIndex": "0x0",\n "address": "0x61f96a7ed09877197d4fff0c29b8e523913651a9",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000002"\n ]\n }\n }\n}\n'})})})]}),"\n",(0,r.jsx)(n.h3,{id:"pending-transactions",children:"Pending transactions"}),"\n",(0,r.jsxs)(n.p,{children:["To notify you about pending transactions added to the transaction pool for the node, use the ",(0,r.jsx)(n.code,{children:"newPendingTransactions"})," parameter with ",(0,r.jsx)(n.code,{children:"eth_subscribe"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The pending transactions subscription returns the transaction hashes or transaction details of the pending transactions. If the ",(0,r.jsx)(n.code,{children:"includeTransactions"})," parameter is not included, the default is transaction hashes only."]}),"\n",(0,r.jsx)(n.p,{children:"If a chain reorganization occurs, Besu resubmits transactions for inclusion in the new canonical chain. This means the subscription can publish notifications for the same pending transaction more than once."}),"\n",(0,r.jsx)(n.p,{children:"To subscribe to pending transaction notifications and receive transaction hashes only:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "eth_subscribe",\n "params": ["newPendingTransactions", { "includeTransactions": false }]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example notification:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x1",\n "result": "0x5705bc8bf875ff03e98adb98489428835892dc6ba6a6b139fee1becbc26db0b8"\n }\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"To subscribe to pending transaction notifications and receive transaction details:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "eth_subscribe",\n "params": ["newPendingTransactions", { "includeTransactions": true }]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x2" }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example notification:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x2",\n "result": {\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x5208",\n "gasPrice": "0x2540be400",\n "hash": "0x7a4185f40ee93cb27eb132f301d0a5414c1f871051f166fc8804c376aab3ffec",\n "input": "0x",\n "nonce": "0x13",\n "to": "0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f",\n "value": "0x8ac7230489e80000",\n "v": "0xfe7",\n "r": "0xdd9013c67469d2fe79afdc61777c55bdced33c90fa6f9b83d8f9b7e445085123",\n "s": "0x45823a1ab22ae9c83876ea435dc5ecc4fe3a83c1bfbc340a5f57df2f5a474fa5"\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"dropped-transactions",children:"Dropped transactions"}),"\n",(0,r.jsxs)(n.p,{children:["To notify you about transactions dropped from the transaction pool for the node, use the ",(0,r.jsx)(n.code,{children:"droppedPendingTransactions"})," parameter with ",(0,r.jsx)(n.code,{children:"eth_subscribe"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The dropped transactions subscription returns the transaction hashes of the dropped transactions."}),"\n",(0,r.jsx)(n.p,{children:"Dropped transactions can be re-added to the transaction pool from a variety of sources. For example, receiving a previously dropped transaction from a peer. As a result, it's possible to receive multiple dropped transaction notifications for the same transaction."}),"\n",(0,r.jsx)(n.p,{children:"To subscribe to dropped transaction notifications:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "id": 1, "method": "eth_subscribe", "params": ["droppedPendingTransactions"] }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example notification:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x1",\n "result": "0xf57d6a90a7fb30880cfbdf6b432b487d0e94a3b55b34dc4b45e3b0b237ecab4c"\n }\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"synchronizing",children:"Synchronizing"}),"\n",(0,r.jsxs)(n.p,{children:["To notify you about synchronization progress, use the ",(0,r.jsx)(n.code,{children:"syncing"})," parameter with ",(0,r.jsx)(n.code,{children:"eth_subscribe"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["When behind the chain head, the synchronizing subscription returns an object indicating the synchronization progress. When fully synchronized, returns ",(0,r.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"To subscribe to synchronizing notifications:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "id": 1, "method": "eth_subscribe", "params": ["syncing"] }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": "0x4" }\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example notification while synchronizing:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x4",\n "result": {\n "startingBlock": "0x0",\n "currentBlock": "0x3e80",\n "highestBlock": "0x67b93c"\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example notification when synchronized with chain head:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_subscription",\n "params": {\n "subscription": "0x4",\n "result": false\n }\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"unsubscribe",children:"Unsubscribe"}),"\n",(0,r.jsxs)(n.p,{children:["To cancel a subscription, use the ",(0,r.jsx)(n.a,{href:"#subscription-id",children:"subscription ID"})," with ",(0,r.jsx)(n.code,{children:"eth_unsubscribe"})," or ",(0,r.jsx)(n.code,{children:"priv_unsubscribe"}),". Only the connection that created a subscription can unsubscribe from it."]}),"\n",(0,r.jsx)(n.p,{children:"When cancelling a subscription for private logs, the privacy group ID must be specified."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eth_unsubscribe"})," and ",(0,r.jsx)(n.code,{children:"priv_unsubscribe"})," return ",(0,r.jsx)(n.code,{children:"true"})," if subscription successfully unsubscribed; otherwise, returns an error."]}),"\n",(0,r.jsxs)(n.p,{children:["To unsubscribe from a subscription with subscription ID of ",(0,r.jsx)(n.code,{children:"0x1"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "id": 1, "method": "eth_unsubscribe", "params": ["0x1"] }\n'})}),"\n",(0,r.jsx)(n.p,{children:"To unsubscribe from private logs subscription:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "method": "priv_unsubscribe",\n "params": ["4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=", "0x2"]\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Example result:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "id": 1, "result": true }\n'})})]})}function b(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>a});s(96540);var r=s(18215);const i={tabItem:"tabItem_Ymn6"};var c=s(74848);function a(e){let{children:n,hidden:s,className:a}=e;return(0,c.jsx)("div",{role:"tabpanel",className:(0,r.A)(i.tabItem,a),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>y});var r=s(96540),i=s(18215),c=s(23104),a=s(56347),t=s(205),o=s(57485),l=s(31682),d=s(70679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:s}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:s,attributes:r,default:i}}=e;return{value:n,label:s,attributes:r,default:i}}))}(s);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function b(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:s}=e;const i=(0,a.W6)(),c=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,o.aZ)(c),(0,r.useCallback)((e=>{if(!c)return;const n=new URLSearchParams(i.location.search);n.set(c,e),i.replace({...i.location,search:n.toString()})}),[c,i])]}function f(e){const{defaultValue:n,queryString:s=!1,groupId:i}=e,c=h(e),[a,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!b({value:n,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:c}))),[l,u]=p({queryString:s,groupId:i}),[f,x]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,c]=(0,d.Dv)(s);return[i,(0,r.useCallback)((e=>{s&&c.set(e)}),[s,c])]}({groupId:i}),j=(()=>{const e=l??f;return b({value:e,tabValues:c})?e:null})();(0,t.A)((()=>{j&&o(j)}),[j]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!b({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);o(e),u(e),x(e)}),[u,x,c]),tabValues:c}}var x=s(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(74848);function g(e){let{className:n,block:s,selectedValue:r,selectValue:a,tabValues:t}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,c.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),i=t[s].value;i!==r&&(l(n),a(i))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;n=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;n=o[s]??o[o.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":s},n),children:t.map((e=>{let{value:n,label:s,attributes:c}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:u,onClick:d,...c,className:(0,i.A)("tabs__item",j.tabItem,c?.className,{"tabs__item--active":r===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:c}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===c));return e?(0,r.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==c})))})}function w(e){const n=f(e);return(0,m.jsxs)("div",{className:(0,i.A)("tabs-container",j.tabList),children:[(0,m.jsx)(g,{...n,...e}),(0,m.jsx)(v,{...n,...e})]})}function y(e){const n=(0,x.A)();return(0,m.jsx)(w,{...e,children:u(e.children)},String(n))}},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>t});var r=s(96540);const i={},c=r.createContext(i);function a(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d94bde1.fea2dde3.js b/assets/js/4d94bde1.fea2dde3.js new file mode 100644 index 00000000000..166db8fde57 --- /dev/null +++ b/assets/js/4d94bde1.fea2dde3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7208],{72935:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var n=r(74848),a=r(28453),s=r(11470),o=r(19365);const i={title:"Use the web3js-quorum library",description:"web3js-quorum client library",sidebar_position:8,tags:["private networks"]},u="Use the web3js-quorum client library",l={id:"private-networks/how-to/use-privacy/web3js-quorum",title:"Use the web3js-quorum library",description:"web3js-quorum client library",source:"@site/docs/private-networks/how-to/use-privacy/web3js-quorum.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/web3js-quorum",permalink:"/private-networks/how-to/use-privacy/web3js-quorum",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/web3js-quorum.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:8,frontMatter:{title:"Use the web3js-quorum library",description:"web3js-quorum client library",sidebar_position:8,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Sign privacy marker transactions",permalink:"/private-networks/how-to/use-privacy/sign-pmts"},next:{title:"Performance best practices",permalink:"/private-networks/how-to/use-privacy/performance-best-practices"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Add web3js-quorum to project",id:"add-web3js-quorum-to-project",level:2},{value:"Initialize the web3js-quorum client",id:"initialize-the-web3js-quorum-client",level:2},{value:"Deploy a contract with <code>generateAndSendRawTransaction</code>",id:"deploy-a-contract-with-generateandsendrawtransaction",level:2},{value:"web3js-quorum methods",id:"web3js-quorum-methods",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"use-the-web3js-quorum-client-library",children:"Use the web3js-quorum client library"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/web3js-quorum",children:"web3js-quorum"})," is an Ethereum JavaScript library extending ",(0,n.jsx)(t.a,{href:"https://github.com/ethereum/web3.js/",children:"web3.js"})," that adds support for Besu-specific JSON-RPC APIs and features. Use the library to create and send RLP-encoded transactions using JSON-RPC."]}),"\n",(0,n.jsx)(t.admonition,{title:"important",type:"caution",children:(0,n.jsx)(t.p,{children:"web3js-quorum supports JSON-RPC over HTTP only."})}),"\n",(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsxs)(t.p,{children:["web3js-quorum includes all ",(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum.js",children:"quorum.js"})," and ",(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/web3js-eea",children:"web3js-eea"})," features."]}),(0,n.jsx)(t.p,{children:"If migrating to web3js-quorum, update your JavaScript code as indicated in the following examples."}),(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://consensys.github.io/web3js-quorum/latest/tutorial-Migrate%20from%20web3js-eea.html",children:"Read the migration guide for more information about updating your code."})})]}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Node.js (version > 10)"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/ChainSafe/web3.js#installation",children:"The web3 library must be installed in your project"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"add-web3js-quorum-to-project",children:"Add web3js-quorum to project"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"npm install web3js-quorum\n"})}),"\n",(0,n.jsx)(t.h2,{id:"initialize-the-web3js-quorum-client",children:"Initialize the web3js-quorum client"}),"\n",(0,n.jsxs)(t.p,{children:["Initialize your client where ",(0,n.jsx)(t.code,{children:"<JSON-RPC HTTP endpoint>"})," is the JSON-RPC HTTP endpoint of your\nBesu node.\nSpecified by the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,n.jsx)(t.code,{children:"--rpc-http-host"})}),"\nand ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,n.jsx)(t.code,{children:"--rpc-http-port"})})," command\nline options."]}),"\n",(0,n.jsxs)(s.A,{children:[(0,n.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:'const { Web3 } = require("web3");\nconst Web3Quorum = require("web3js-quorum");\nconst web3 = new Web3Quorum(new Web3("<JSON-RPC HTTP endpoint>"));\n'})})}),(0,n.jsx)(o.A,{value:"Example",label:"Example",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:'const { Web3 } = require("web3");\nconst Web3Quorum = require("web3js-quorum");\nconst web3 = new Web3Quorum(new Web3("http://localhost:8545"));\n'})})})]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["When migrating from web3js-eea to web3js-quorum, use ",(0,n.jsx)(t.code,{children:"Web3Quorum"}),". The constructor doesn't require the chain ID anymore. Chain ID is automatically retrieved from the chain using the specified JSON-RPC HTTP endpoint."]})}),"\n",(0,n.jsxs)(t.h2,{id:"deploy-a-contract-with-generateandsendrawtransaction",children:["Deploy a contract with ",(0,n.jsx)(t.code,{children:"generateAndSendRawTransaction"})]}),"\n",(0,n.jsxs)(t.p,{children:["To deploy a private contract, you need the contract binary. You can use ",(0,n.jsx)(t.a,{href:"https://solidity.readthedocs.io/en/develop/using-the-compiler.html",children:"Solidity"})," to get the contract binary."]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",metastring:"title=\"Deploying a contract with 'web3.priv.generateAndSendRawTransaction'\"",children:'const contractOptions = {\n data: `0x123`, // contract binary\n privateFrom: "tesseraNode1PublicKey",\n privateFor: ["tesseraNode3PublicKey"],\n privateKey: "besuNode1PrivateKey",\n};\nreturn web3.priv.generateAndSendRawTransaction(contractOptions);\n'})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"web3.priv.generateAndSendRawTransaction(contractOptions)"})," returns the transaction hash. To get the private transaction receipt, use ",(0,n.jsx)(t.code,{children:"web3.priv.waitForTransactionReceipt(txHash)"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"web3js-quorum-methods",children:"web3js-quorum methods"}),"\n",(0,n.jsxs)(t.p,{children:["For more information about the web3js-quorum methods, see the ",(0,n.jsx)(t.a,{href:"https://consensys.github.io/web3js-quorum/latest/index.html",children:"web3js-quorum reference documentation"}),"."]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},19365:(e,t,r)=>{r.d(t,{A:()=>o});r(96540);var n=r(18215);const a={tabItem:"tabItem_Ymn6"};var s=r(74848);function o(e){let{children:t,hidden:r,className:o}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,n.A)(a.tabItem,o),hidden:r,children:t})}},11470:(e,t,r)=>{r.d(t,{A:()=>g});var n=r(96540),a=r(18215),s=r(23104),o=r(56347),i=r(205),u=r(57485),l=r(31682),c=r(70679);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,l.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:r}=e;const a=(0,o.W6)(),s=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u.aZ)(s),(0,n.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(a.location.search);t.set(s,e),a.replace({...a.location,search:t.toString()})}),[s,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,s=h(e),[o,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:s}))),[l,d]=b({queryString:r,groupId:a}),[m,j]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,s]=(0,c.Dv)(r);return[a,(0,n.useCallback)((e=>{r&&s.set(e)}),[r,s])]}({groupId:a}),w=(()=>{const e=l??m;return p({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{w&&u(w)}),[w]);return{selectedValue:o,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),j(e)}),[d,j,s]),tabValues:s}}var j=r(92303);const w={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=r(74848);function v(e){let{className:t,block:r,selectedValue:n,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.a_)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=i[r].value;a!==n&&(l(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":r},t),children:i.map((e=>{let{value:t,label:r,attributes:s}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...s,className:(0,a.A)("tabs__item",w.tabItem,s?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function x(e){let{lazy:t,children:r,selectedValue:s}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===s));return e?(0,n.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function y(e){const t=m(e);return(0,f.jsxs)("div",{className:(0,a.A)("tabs-container",w.tabList),children:[(0,f.jsx)(v,{...t,...e}),(0,f.jsx)(x,{...t,...e})]})}function g(e){const t=(0,j.A)();return(0,f.jsx)(y,{...e,children:d(e.children)},String(t))}},28453:(e,t,r)=>{r.d(t,{R:()=>o,x:()=>i});var n=r(96540);const a={},s=n.createContext(a);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4f63be9c.0c0a113e.js b/assets/js/4f63be9c.0c0a113e.js new file mode 100644 index 00000000000..3d24e6f6184 --- /dev/null +++ b/assets/js/4f63be9c.0c0a113e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9779],{74318:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>t,toc:()=>p});var s=i(74848),n=i(28453);const a={title:"Use flexible privacy groups",description:"Use flexible privacy groups",sidebar_position:5,tags:["private networks"]},o="Use flexible privacy groups",t={id:"private-networks/how-to/use-privacy/flexible",title:"Use flexible privacy groups",description:"Use flexible privacy groups",source:"@site/docs/private-networks/how-to/use-privacy/flexible.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/flexible",permalink:"/private-networks/how-to/use-privacy/flexible",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/flexible.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Use flexible privacy groups",description:"Use flexible privacy groups",sidebar_position:5,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create and manage privacy groups",permalink:"/private-networks/how-to/use-privacy/privacy-groups"},next:{title:"Access private and privacy marker transactions",permalink:"/private-networks/how-to/use-privacy/access-private-transactions"}},c={},p=[{value:"Enable flexible privacy groups",id:"enable-flexible-privacy-groups",level:2},{value:"Simple flexible privacy group example",id:"simple-flexible-privacy-group-example",level:2},{value:"Add and remove members",id:"add-and-remove-members",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"use-flexible-privacy-groups",children:"Use flexible privacy groups"})}),"\n",(0,s.jsxs)(r.p,{children:["Use the ",(0,s.jsxs)(r.a,{href:"https://github.com/ConsenSys/web3js-quorum",children:[(0,s.jsx)(r.code,{children:"web3js-quorum"})," library"]})," to create and update membership of ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"flexible privacy groups"}),"."]}),"\n",(0,s.jsx)(r.admonition,{type:"tip",children:(0,s.jsx)(r.p,{children:"Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups."})}),"\n",(0,s.jsxs)(r.admonition,{type:"info",children:[(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"Flexible privacy groups"})," are an early access feature. Don't use in production networks."]}),(0,s.jsx)(r.p,{children:"The flexible privacy group interfaces may change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions."}),(0,s.jsxs)(r.p,{children:["We don't recommend creating flexible privacy groups in a chain with existing ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"offchain privacy groups"}),"."]})]}),"\n",(0,s.jsx)(r.h2,{id:"enable-flexible-privacy-groups",children:"Enable flexible privacy groups"}),"\n",(0,s.jsxs)(r.p,{children:["Use the ",(0,s.jsx)(r.a,{href:"/private-networks/reference/cli/options#privacy-flexible-groups-enabled",children:(0,s.jsx)(r.code,{children:"--privacy-flexible-groups-enabled"})})," command line option to enable ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"flexible privacy groups"}),". When flexible privacy groups are enabled, the ",(0,s.jsx)(r.a,{href:"/private-networks/reference/api/#priv_createprivacygroup",children:(0,s.jsx)(r.code,{children:"priv_createPrivacyGroup"})}),", ",(0,s.jsx)(r.a,{href:"/private-networks/reference/api/#priv_deleteprivacygroup",children:(0,s.jsx)(r.code,{children:"priv_deletePrivacyGroup"})}),", and ",(0,s.jsx)(r.a,{href:"/private-networks/reference/api/#priv_findprivacygroup",children:(0,s.jsx)(r.code,{children:"priv_findPrivacyGroup"})})," methods for ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"offchain privacy groups"})," are disabled."]}),"\n",(0,s.jsx)(r.h2,{id:"simple-flexible-privacy-group-example",children:"Simple flexible privacy group example"}),"\n",(0,s.jsxs)(r.p,{children:["To create and find a ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"flexible privacy group"})," using the ",(0,s.jsxs)(r.a,{href:"https://github.com/ConsenSys/web3js-quorum",children:[(0,s.jsx)(r.code,{children:"web3js-quorum"})," library"]}),":"]}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:["Update the ",(0,s.jsx)(r.code,{children:"example/keys.js"})," file to match your network configuration."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsx)(r.p,{children:"Run:"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-bash",children:"cd example/onchainPrivacy\nnode simpleExample.js\n"})}),"\n",(0,s.jsxs)(r.p,{children:["This script creates the flexible privacy group with two members. ",(0,s.jsx)(r.code,{children:"findPrivacyGroup"})," finds and displays the created privacy group."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.admonition,{type:"tip",children:(0,s.jsxs)(r.p,{children:["The Tessera logs for Tessera 1 and Tessera 2 display ",(0,s.jsx)(r.code,{children:"PrivacyGroupNotFound"})," errors. This is expected behavior because private transactions check offchain and onchain to find the privacy group for a private transaction."]})}),"\n",(0,s.jsx)(r.h2,{id:"add-and-remove-members",children:"Add and remove members"}),"\n",(0,s.jsxs)(r.p,{children:["To add and remove members from a ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"flexible privacy group"}),", use the ",(0,s.jsx)(r.code,{children:"addTo"})," and ",(0,s.jsx)(r.code,{children:"removeFrom"})," methods in the ",(0,s.jsxs)(r.a,{href:"https://github.com/ConsenSys/web3js-quorum",children:[(0,s.jsx)(r.code,{children:"web3js-quorum"})," library"]})," client library."]}),"\n",(0,s.jsx)(r.admonition,{type:"note",children:(0,s.jsx)(r.p,{children:"When adding a member, Besu pushes all existing group transactions to the new member and processes them. If there are a large number of existing transactions, adding the member may take some time."})})]})}function d(e={}){const{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>o,x:()=>t});var s=i(96540);const n={},a=s.createContext(n);function o(e){const r=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function t(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5576e3f0.679fbdc4.js b/assets/js/5576e3f0.679fbdc4.js new file mode 100644 index 00000000000..16462665e2d --- /dev/null +++ b/assets/js/5576e3f0.679fbdc4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[68],{88240:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>a,toc:()=>d});var i=r(74848),s=r(28453);const n={title:"Installation options",description:"Options for getting started with Besu",sidebar_position:1,tags:["private networks"]},o="Installation options",a={id:"private-networks/get-started/install/index",title:"Installation options",description:"Options for getting started with Besu",source:"@site/docs/private-networks/get-started/install/index.md",sourceDirName:"private-networks/get-started/install",slug:"/private-networks/get-started/install/",permalink:"/private-networks/get-started/install/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/get-started/install/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Installation options",description:"Options for getting started with Besu",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"System requirements",permalink:"/private-networks/get-started/system-requirements"},next:{title:"Run Besu from Docker image",permalink:"/private-networks/get-started/install/run-docker-image"}},l={},d=[{value:"Build from source",id:"build-from-source",level:2}];function c(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"installation-options",children:"Installation options"})}),"\n",(0,i.jsxs)(t.p,{children:["Get started with the ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),". Use the quickstart to rapidly generate local blockchain networks."]}),"\n",(0,i.jsx)(t.p,{children:"You can also install the following:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Docker image"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Binaries"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"build-from-source",children:"Build from source"}),"\n",(0,i.jsxs)(t.p,{children:["If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the ",(0,i.jsx)(t.a,{href:"/private-networks/get-started/install/binary-distribution",children:"binary"})," or ",(0,i.jsx)(t.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Docker image"})," for more stable versions."]}),"\n",(0,i.jsxs)(t.p,{children:["View the ",(0,i.jsx)(t.a,{href:"https://wiki.hyperledger.org/display/BESU/Building+from+source",children:"Wiki"})," for instructions to install Besu from source."]})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>o,x:()=>a});var i=r(96540);const s={},n=i.createContext(s);function o(e){const t=i.useContext(n);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/55b6f436.fd934fa0.js b/assets/js/55b6f436.fd934fa0.js new file mode 100644 index 00000000000..616543842de --- /dev/null +++ b/assets/js/55b6f436.fd934fa0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6944],{32912:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var t=s(74848),r=s(28453);const i={title:"Client and server TLS",sidebar_position:1,tags:["private networks"]},o="Configure client and server TLS",l={id:"private-networks/how-to/configure/tls/client-and-server",title:"Client and server TLS",description:"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.",source:"@site/docs/private-networks/how-to/configure/tls/client-and-server.md",sourceDirName:"private-networks/how-to/configure/tls",slug:"/private-networks/how-to/configure/tls/client-and-server",permalink:"/private-networks/how-to/configure/tls/client-and-server",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/tls/client-and-server.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Client and server TLS",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Pre-deploy a contract",permalink:"/private-networks/how-to/configure/contracts"},next:{title:"Peer-to-peer TLS",permalink:"/private-networks/how-to/configure/tls/p2p"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configure client TLS",id:"configure-client-tls",level:2},{value:"Create the known clients file",id:"create-the-known-clients-file",level:3},{value:"Start Besu",id:"start-besu",level:3},{value:"Configure server TLS",id:"configure-server-tls",level:2},{value:"Create the known servers file",id:"create-the-known-servers-file",level:3},{value:"Start Besu",id:"start-besu-1",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"configure-client-and-server-tls",children:"Configure client and server TLS"})}),"\n",(0,t.jsxs)(n.p,{children:["Besu supports TLS for client and server communication. For example, you can configure TLS for communication between ",(0,t.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/concepts/tls",children:"Web3Signer"})," and Besu, and Besu and ",(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/TLS/",children:"Tessera"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The following diagram displays an example client and server TLS configuration."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Besu client and server TLS",src:s(26018).A+"",width:"1512",height:"1184"})}),"\n",(0,t.jsx)(n.p,{children:"Configure TLS communication from the command line."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Besu's password-protected PKCS12 keystore"}),"\n",(0,t.jsx)(n.li,{children:"File containing the keystore password"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configure-client-tls",children:"Configure client TLS"}),"\n",(0,t.jsx)(n.p,{children:"Allow clients (for example a dapp, curl, or Web3Signer) to send and receive secure HTTP JSON-RPCs."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Client prerequisites"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/how-to/configure-tls",children:"Configure the client for TLS"})}),"\n",(0,t.jsx)(n.li,{children:"Client's PKCS12 keystore information"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"create-the-known-clients-file",children:"Create the known clients file"}),"\n",(0,t.jsx)(n.p,{children:"The known clients file allows clients with self-signed certificates or non-public certificates to connect to Besu."}),"\n",(0,t.jsxs)(n.p,{children:["Create a file (in this example, ",(0,t.jsx)(n.code,{children:"knownClients"}),") that lists one or more trusted clients. Use the format",(0,t.jsx)(n.code,{children:"<common_name> <hex-string>"})," where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<common_name>"})," is the Common Name specified in the client certificate."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<hex-string>"})," is the SHA-256 fingerprint of the client certificate."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:"web3signer 8E:E0:85:9F:FC:2E:2F:21:31:46:0B:82:4C:A6:88:AB:30:34:9A:C6:EA:4F:04:31:ED:0F:69:A7:B5:C2:2F:A7\ncurl FC:18:BF:39:45:45:9A:15:46:76:A6:E7:C3:94:64:B8:34:84:A3:8E:B8:EA:67:DC:61:C0:29:E6:38:B8:B7:99\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.a,{href:"https://www.openssl.org/",children:(0,t.jsx)(n.code,{children:"openssl"})})," or ",(0,t.jsx)(n.a,{href:"https://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html",children:(0,t.jsx)(n.code,{children:"keytool"})})," to display the SHA256 fingerprint."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"keytool -list -v -keystore <keystore> -storetype PKCS12 -storepass <MY_PASSWORD>`.\n"})}),"\n",(0,t.jsx)(n.h3,{id:"start-besu",children:"Start Besu"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu --rpc-http-enabled --rpc-http-tls-enabled --rpc-http-tls-client-auth-enabled --rpc-http-tls-keystore-file=/Users/me/my_node/keystore.pfx --rpc-http-tls-keystore-password-file=/Users/me/my_node/keystorePassword --rpc-http-tls-known-clients-file=/Users/me/my_node/knownClients --rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384 --rpc-http-tls-protocol=TLSv1.3,TLSv1.2\n"})}),"\n",(0,t.jsx)(n.p,{children:"The command line:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Enables the HTTP JSON-RPC service using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-enabled"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Enables TLS for the HTTP JSON-RPC service using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-enabled"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Enables TLS client authentication using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-client-auth-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-client-auth-enabled"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Specifies the keystore using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-keystore-file",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-keystore-file"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Specifies the file that contains the password to decrypt the keystore using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-keystore-password-file",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-keystore-password-file"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#create-the-known-clients-file",children:"Specifies the clients"})," allowed to connect to Besu using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-known-clients-file",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-known-clients-file"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["specifies the Java cipher suites using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-cipher-suite",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-cipher-suite"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["specifies the TLS protocol version using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-protocol",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-protocol"})})," option."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Set ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-tls-ca-clients-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-tls-ca-clients-enabled"})})," to ",(0,t.jsx)(n.code,{children:"true"})," to allow access to clients with signed and trusted root CAs."]})}),"\n",(0,t.jsx)(n.h2,{id:"configure-server-tls",children:"Configure server TLS"}),"\n",(0,t.jsx)(n.p,{children:"Allow Besu to securely communicate with the server (Tessera)."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Server prerequisites"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/TLS/",children:"Configure the server to allow TLS communication"})}),"\n",(0,t.jsx)(n.li,{children:"Server's certificate information"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"create-the-known-servers-file",children:"Create the known servers file"}),"\n",(0,t.jsxs)(n.p,{children:["Create a file (in this example, ",(0,t.jsx)(n.code,{children:"knownServers"}),") that lists one or more trusted servers. The file contents use the format ",(0,t.jsx)(n.code,{children:"<hostname>:<port> <hex-string>"})," where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<hostname>"})," is the server hostname"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<port>"})," is the port used for communication"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<hex-string>"})," is the SHA-256 fingerprint of the server's certificate."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:"localhost:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC\n127.0.0.1:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"If you are unsure whether requests use the hostname or an IP address, configure both in the file."})}),"\n",(0,t.jsx)(n.h3,{id:"start-besu-1",children:"Start Besu"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu --privacy-tls-enabled --privacy-tls-keystore-file=/Users/me/my_node/keystore.pfx --privacy-tls-keystore-password-file=/Users/me/my_node/keystorePassword --privacy-tls-known-enclave-file=/Users/me/my_node/knownServers\n"})}),"\n",(0,t.jsx)(n.p,{children:"The command line:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Enables TLS with the server using the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-tls-enabled",children:(0,t.jsx)(n.code,{children:"--privacy-tls-enabled"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Specifies the keystore using the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-tls-keystore-file",children:(0,t.jsx)(n.code,{children:"--privacy-tls-keystore-file"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Specifies the file that contains the password to decrypt the keystore using the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-tls-keystore-password-file",children:(0,t.jsx)(n.code,{children:"--privacy-tls-keystore-password-file"})})," option."]}),"\n",(0,t.jsxs)(n.li,{children:["Specifies the trusted servers using the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-tls-known-enclave-file",children:(0,t.jsx)(n.code,{children:"--privacy-tls-known-enclave-file"})})," option."]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},26018:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/Besu_TLS-ed8bb10233da06f7c5f3d62628dfcb80.png"},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/563e4b8b.e9d64ed4.js b/assets/js/563e4b8b.e9d64ed4.js new file mode 100644 index 00000000000..880b2237f65 --- /dev/null +++ b/assets/js/563e4b8b.e9d64ed4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2554],{64745:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>u});var a=t(74848),s=t(28453),i=t(11470),r=t(19365);const c={title:"Use the Engine API",sidebar_position:2,description:"Use the Engine API to communicate with a consensus client.",tags:["public networks"]},l="Use the Engine API",o={id:"public-networks/how-to/use-engine-api",title:"Use the Engine API",description:"Use the Engine API to communicate with a consensus client.",source:"@site/docs/public-networks/how-to/use-engine-api.md",sourceDirName:"public-networks/how-to",slug:"/public-networks/how-to/use-engine-api",permalink:"/public-networks/how-to/use-engine-api",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-engine-api.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use the Engine API",sidebar_position:2,description:"Use the Engine API to communicate with a consensus client.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Access logs using JSON-RPC",permalink:"/public-networks/how-to/use-besu-api/access-logs"},next:{title:"Create and send transactions",permalink:"/public-networks/how-to/send-transactions"}},d={},u=[{value:"Configure the Engine API",id:"configure-the-engine-api",level:2},{value:"Service ports",id:"service-ports",level:3},{value:"Host allowlist",id:"host-allowlist",level:3},{value:"Authentication",id:"authentication",level:2},{value:"Send a payload using the Engine API",id:"send-a-payload-using-the-engine-api",level:2},{value:"1. Prepare a payload",id:"1-prepare-a-payload",level:3},{value:"2. Get the payload",id:"2-get-the-payload",level:3},{value:"3. Execute the payload",id:"3-execute-the-payload",level:3},{value:"4. Update the fork choice",id:"4-update-the-fork-choice",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"use-the-engine-api",children:"Use the Engine API"})}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-and-consensus-clients",children:"Consensus and execution clients"})," communicate with each other using the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/",children:"Engine API"}),". These API methods are a separate subsection of the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/",children:"JSON-RPC API"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"configure-the-engine-api",children:"Configure the Engine API"}),"\n",(0,a.jsx)(n.p,{children:"The Engine API is enabled by default even if no consensus client configuration exists. You can configure the Engine API to:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Specify the ",(0,a.jsx)(n.a,{href:"#service-ports",children:"service ports"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Specify the ",(0,a.jsx)(n.a,{href:"#host-allowlist",children:"host allowlist"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",metastring:'title="Example Engine API configuration"',children:"besu --engine-rpc-port=8551 --engine-host-allowlist=localhost,127.0.0.1 --engine-jwt-secret=jwt.hex\n"})}),"\n",(0,a.jsx)(n.h3,{id:"service-ports",children:"Service ports"}),"\n",(0,a.jsxs)(n.p,{children:["To specify the port the Engine API service listens on for HTTP and WebSocket, use the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-rpc-port",children:(0,a.jsx)(n.code,{children:"--engine-rpc-port"})})," option. The default is ",(0,a.jsx)(n.code,{children:"8551"}),". This option is useful when you have another execution engine running on port 8551, in which case you can specify Besu to use another port, for example, ",(0,a.jsx)(n.code,{children:"--engine-rpc-port 8552"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"host-allowlist",children:"Host allowlist"}),"\n",(0,a.jsxs)(n.p,{children:["To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-host-allowlist",children:(0,a.jsx)(n.code,{children:"--engine-host-allowlist"})})," option matches the request host headers. By default, Besu accepts requests and connections from ",(0,a.jsx)(n.code,{children:"localhost"})," and ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["This isn't a permissioning feature. To restrict access to the Engine API, we recommend using ",(0,a.jsx)(n.a,{href:"#authentication",children:"authentication"}),"."]})}),"\n",(0,a.jsx)(n.p,{children:"If your application publishes RPC ports, specify the hostnames when starting Besu."}),"\n",(0,a.jsxs)(n.p,{children:["Specify ",(0,a.jsx)(n.code,{children:"*"})," for ",(0,a.jsx)(n.code,{children:"--engine-host-allowlist"})," to effectively disable host protection."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["We don't recommend specifying ",(0,a.jsx)(n.code,{children:"*"})," for ",(0,a.jsx)(n.code,{children:"--engine-host-allowlist"})," in production."]})}),"\n",(0,a.jsx)(n.h2,{id:"authentication",children:"Authentication"}),"\n",(0,a.jsxs)(n.p,{children:["By default, ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"})," for the Engine API is enabled. To disable, set the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-jwt-disabled",children:(0,a.jsx)(n.code,{children:"--engine-jwt-disabled"})})," option to ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsxs)(n.admonition,{type:"caution",children:[(0,a.jsx)(n.p,{children:"Don't disable JWT authentication in production environments."}),(0,a.jsx)(n.p,{children:"Disable only for testing purposes."})]}),"\n",(0,a.jsxs)(n.p,{children:["Set the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#jwt-public-key-authentication",children:"JWT secret"})," by using the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-jwt-secret",children:(0,a.jsx)(n.code,{children:"--engine-jwt-secret"})})," option."]}),"\n",(0,a.jsx)(n.h2,{id:"send-a-payload-using-the-engine-api",children:"Send a payload using the Engine API"}),"\n",(0,a.jsx)(n.h3,{id:"1-prepare-a-payload",children:"1. Prepare a payload"}),"\n",(0,a.jsxs)(n.p,{children:["Prepare to send a payload using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/#engine_forkchoiceupdatedv1",children:(0,a.jsx)(n.code,{children:"engine_forkchoiceUpdatedV1"})}),"."]}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a", "safeBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a", "finalizedBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000"},{"timestamp": "0x5","prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000","suggestedFeeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"}],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,a.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": {\n "payloadStatus": {\n "status": "VALID",\n "latestValidHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "validationError": null\n },\n "payloadId": "0x0000000021f32cc1"\n }\n}\n'})})})]}),"\n",(0,a.jsx)(n.h3,{id:"2-get-the-payload",children:"2. Get the payload"}),"\n",(0,a.jsxs)(n.p,{children:["Get the payload using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/#engine_getpayloadv1",children:(0,a.jsx)(n.code,{children:"engine_getPayloadV1"})})]}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_getPayloadV1","params":["0x1"],"id":1}\' http://127.0.0.1:8550\n'})})}),(0,a.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "blockNumber": "0x1",\n "gasLimit": "0x1c9c380",\n "gasUsed": "0x0",\n "timestamp": "0x5",\n "extraData": "0x",\n "baseFeePerGas": "0x7",\n "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "transactions": []\n }\n}\n'})})})]}),"\n",(0,a.jsx)(n.h3,{id:"3-execute-the-payload",children:"3. Execute the payload"}),"\n",(0,a.jsxs)(n.p,{children:["Execute the payload using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/#engine_newpayloadv1",children:(0,a.jsx)(n.code,{children:"engine_newPayloadV1"})})]}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_newPayloadV1","params":[\n {\n "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "blockNumber": "0x1",\n "gasLimit": "0x1c9c380",\n "gasUsed": "0x0",\n "timestamp": "0x5",\n "extraData": "0x",\n "baseFeePerGas": "0x7",\n "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "transactions": []\n }\n],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,a.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "status": "VALID",\n "latestValidHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "validationError": null\n }\n}\n'})})})]}),"\n",(0,a.jsx)(n.h3,{id:"4-update-the-fork-choice",children:"4. Update the fork choice"}),"\n",(0,a.jsxs)(n.p,{children:["Update the fork choice using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/#engine_forkchoiceupdatedv1",children:(0,a.jsx)(n.code,{children:"engine_forkchoiceUpdatedV1"})})," again."]}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "safeBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "finalizedBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"},null],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,a.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": {\n "payloadStatus": {\n "status": "VALID",\n "latestValidHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "validationError": null\n },\n "payloadId": null\n }\n}\n'})})})]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>r});t(96540);var a=t(18215);const s={tabItem:"tabItem_Ymn6"};var i=t(74848);function r(e){let{children:n,hidden:t,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.A)(s.tabItem,r),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>y});var a=t(96540),s=t(18215),i=t(23104),r=t(56347),c=t(205),l=t(57485),o=t(31682),d=t(70679);function u(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:a,default:s}}=e;return{value:n,label:t,attributes:a,default:s}}))}(t);return function(e){const n=(0,o.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const s=(0,r.W6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(i),(0,a.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function f(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=h(e),[r,l]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=t.find((e=>e.default))??t[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[o,u]=b({queryString:t,groupId:s}),[f,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,d.Dv)(t);return[s,(0,a.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),g=(()=>{const e=o??f;return p({value:e,tabValues:i})?e:null})();(0,c.A)((()=>{g&&l(g)}),[g]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),x(e)}),[u,x,i]),tabValues:i}}var x=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(74848);function m(e){let{className:n,block:t,selectedValue:a,selectValue:r,tabValues:c}=e;const l=[],{blockElementScrollPositionUntilNextRender:o}=(0,i.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),s=c[t].value;s!==a&&(o(n),r(s))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:c.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...i,className:(0,s.A)("tabs__item",g.tabItem,i?.className,{"tabs__item--active":a===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:i}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function w(e){const n=f(e);return(0,j.jsxs)("div",{className:(0,s.A)("tabs-container",g.tabList),children:[(0,j.jsx)(m,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function y(e){const n=(0,x.A)();return(0,j.jsx)(w,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var a=t(96540);const s={},i=a.createContext(s);function r(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5741.f2309677.js b/assets/js/5741.f2309677.js new file mode 100644 index 00000000000..3578f972ee4 --- /dev/null +++ b/assets/js/5741.f2309677.js @@ -0,0 +1 @@ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5741],{45741:()=>{}}]); \ No newline at end of file diff --git a/assets/js/59af61a6.c622703e.js b/assets/js/59af61a6.c622703e.js new file mode 100644 index 00000000000..223392bd1e1 --- /dev/null +++ b/assets/js/59af61a6.c622703e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9174],{5332:e=>{e.exports=JSON.parse('{"tags":[{"label":"private networks","permalink":"/tags/private-networks","count":128},{"label":"public networks","permalink":"/tags/public-networks","count":71}]}')}}]); \ No newline at end of file diff --git a/assets/js/5af5c663.2609a21a.js b/assets/js/5af5c663.2609a21a.js new file mode 100644 index 00000000000..ce8d18da198 --- /dev/null +++ b/assets/js/5af5c663.2609a21a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8620],{1888:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>o,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=s(74848),r=s(28453);const c={title:"Objects",description:"Besu API objects reference",tags:["public networks","private networks"]},i="Besu API objects",d={id:"public-networks/reference/api/objects",title:"Objects",description:"Besu API objects reference",source:"@site/docs/public-networks/reference/api/objects.md",sourceDirName:"public-networks/reference/api",slug:"/public-networks/reference/api/objects",permalink:"/public-networks/reference/api/objects",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/api/objects.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Objects",description:"Besu API objects reference",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Besu API",permalink:"/public-networks/reference/api/"},next:{title:"Engine API",permalink:"/public-networks/reference/engine-api/"}},l={},h=[{value:"Block object",id:"block-object",level:2},{value:"Fee history results object",id:"fee-history-results-object",level:2},{value:"Filter options object",id:"filter-options-object",level:2},{value:"Log object",id:"log-object",level:2},{value:"Miner data object",id:"miner-data-object",level:2},{value:"Pending transaction object",id:"pending-transaction-object",level:2},{value:"Range object",id:"range-object",level:2},{value:"Structured log object",id:"structured-log-object",level:3},{value:"Trace object",id:"trace-object",level:2},{value:"Trace filter options object",id:"trace-filter-options-object",level:2},{value:"Transaction object",id:"transaction-object",level:2},{value:"Transaction call object",id:"transaction-call-object",level:2},{value:"Transaction receipt object",id:"transaction-receipt-object",level:2},{value:"Transaction trace object",id:"transaction-trace-object",level:2}];function a(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"besu-api-objects",children:"Besu API objects"})}),"\n",(0,n.jsx)(t.p,{children:"The following objects are parameters for or returned by Besu API methods."}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["This reference contains API objects that apply to both public and private networks. For private-network-specific API objects, see the ",(0,n.jsx)(t.a,{href:"/private-networks/reference/api/objects",children:"private network API object reference"}),"."]})}),"\n",(0,n.jsx)(t.h2,{id:"block-object",children:"Block object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getblockbyhash",children:(0,n.jsx)(t.code,{children:"eth_getBlockByHash"})})," and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getblockbynumber",children:(0,n.jsx)(t.code,{children:"eth_getBlockByNumber"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"number"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Quantity"}),", Integer"]}),(0,n.jsxs)(t.td,{children:["Block number. ",(0,n.jsx)(t.code,{children:"null"})," when block is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"hash"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 32\xa0bytes"]}),(0,n.jsxs)(t.td,{children:["Hash of the block. ",(0,n.jsx)(t.code,{children:"null"})," when block is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"parentHash"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 32\xa0bytes"]}),(0,n.jsx)(t.td,{children:"Hash of the parent block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"nonce"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 8\xa0bytes"]}),(0,n.jsxs)(t.td,{children:["Hash of the generated proof of work. ",(0,n.jsx)(t.code,{children:"null"})," when block is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"sha3Uncles"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 32\xa0bytes"]}),(0,n.jsx)(t.td,{children:"SHA3 of the uncle's data in the block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"logsBloom"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 256 bytes"]}),(0,n.jsxs)(t.td,{children:["Bloom filter for the block logs. ",(0,n.jsx)(t.code,{children:"null"})," when block is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionsRoot"})}),(0,n.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,n.jsx)(t.em,{children:"Data"}),", 32\xa0bytes"]}),(0,n.jsx)(t.td,{children:"Root of the transaction trie for the block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"stateRoot"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Root of the final state trie for the block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"receiptsRoot"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Root of the receipts trie for the block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"miner"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address to pay mining rewards to."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"difficulty"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Difficulty for this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"totalDifficulty"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Total difficulty of the chain until this block. This value will always be ",(0,n.jsx)(t.code,{children:"0"})," for an uncle block."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"extraData"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsxs)(t.td,{children:["Extra data field for this block. The first 32 bytes is vanity data you can set using the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#miner-extra-data",children:(0,n.jsx)(t.code,{children:"--miner-extra-data"})})," command line option. Stores extra data when used with ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/clique#genesis-file",children:"Clique"})," and ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"IBFT"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"size"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Size of block in bytes."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasLimit"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Maximum gas allowed in this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasUsed"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Total gas used by all transactions in this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"timestamp"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Unix timestamp (milliseconds) for block assembly."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactions"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of ",(0,n.jsx)(t.a,{href:"#transaction-object",children:"transaction objects"}),", or 32 byte transaction hashes depending on the specified boolean parameter."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uncles"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsx)(t.td,{children:"Array of uncle hashes."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"baseFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["The block's ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:"base fee per gas"}),". This field is empty for blocks created before ",(0,n.jsx)(t.a,{href:"https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md",children:"EIP-1559"}),"."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"fee-history-results-object",children:"Fee history results object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_feehistory",children:(0,n.jsx)(t.code,{children:"eth_feeHistory"})})," for the requested block range. If blocks in the specified block range are not available, then only the fee history for available blocks is returned."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"oldestBlock"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Lowest number block of the returned range."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"baseFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of block base fees per gas, including an extra block value. The extra value is the next block after the newest block in the returned range. Returns zeroes for blocks created before ",(0,n.jsx)(t.a,{href:"https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md",children:"EIP-1559"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"baseFeePerBlobGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of base fees per blob gas. Returns zeroes for blocks created before ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-4844",children:"EIP-4844"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasUsedRatio"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of block gas used ratios. These are calculated as the ratio of ",(0,n.jsx)(t.code,{children:"gasUsed"})," and ",(0,n.jsx)(t.code,{children:"gasLimit"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blobGasUsedRatio"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of blob gas used ratios. These are calculated as the ratio of ",(0,n.jsx)(t.code,{children:"blobGasUsed"})," and the max blob gas per block."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"reward"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsx)(t.td,{children:"Array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"filter-options-object",children:"Filter options object"}),"\n",(0,n.jsxs)(t.p,{children:["Parameter for ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,n.jsx)(t.code,{children:"eth_newFilter"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,n.jsx)(t.code,{children:"eth_getLogs"})}),", and ",(0,n.jsx)(t.a,{href:"/private-networks/reference/api/#priv_getlogs",children:(0,n.jsx)(t.code,{children:"priv_getLogs"})}),". Used to ",(0,n.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/access-logs",children:(0,n.jsx)(t.code,{children:"filter logs"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Required/Optional"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"fromBlock"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity | Tag"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Optional"}),(0,n.jsxs)(t.td,{children:["Integer block number or ",(0,n.jsx)(t.code,{children:"latest"}),", ",(0,n.jsx)(t.code,{children:"pending"}),", ",(0,n.jsx)(t.code,{children:"earliest"}),". See ",(0,n.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),". Default is ",(0,n.jsx)(t.code,{children:"latest"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"toBlock"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity | Tag"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Optional"}),(0,n.jsxs)(t.td,{children:["Integer block number or ",(0,n.jsx)(t.code,{children:"latest"}),", ",(0,n.jsx)(t.code,{children:"pending"}),", ",(0,n.jsx)(t.code,{children:"earliest"}),". See ",(0,n.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),". Default is ",(0,n.jsx)(t.code,{children:"latest"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"address"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data | Array"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Optional"}),(0,n.jsxs)(t.td,{children:["Contract address or array of addresses from which ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," originate."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"topics"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array of Data, 32\xa0bytes each"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Optional"}),(0,n.jsxs)(t.td,{children:["Array of topics by which to ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/events-and-logs#topic-filters",children:"filter logs"}),"."]})]})]})]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,n.jsx)(t.code,{children:"eth_getLogs"})})," and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#priv_getlogs",children:(0,n.jsx)(t.code,{children:"priv_getLogs"})})," have an extra key."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Required/Optional"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Optional."}),(0,n.jsxs)(t.td,{children:["Hash of block for which to return logs. If you specify ",(0,n.jsx)(t.code,{children:"blockHash"}),", you cannot specify ",(0,n.jsx)(t.code,{children:"fromBlock"})," and ",(0,n.jsx)(t.code,{children:"toBlock"}),"."]})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"log-object",children:"Log object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,n.jsx)(t.code,{children:"eth_getFilterChanges"})})," and ",(0,n.jsx)(t.a,{href:"/private-networks/reference/api/#priv_getlogs",children:(0,n.jsx)(t.code,{children:"priv_getLogs"})}),". ",(0,n.jsx)(t.a,{href:"#transaction-receipt-object",children:(0,n.jsx)(t.code,{children:"Transaction receipt objects"})})," can contain an array of log objects."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"removed"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Tag"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.code,{children:"true"})," if log removed because of a chain reorganization. ",(0,n.jsx)(t.code,{children:"false"})," if a valid log."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"logIndex"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Log index position in the block. ",(0,n.jsx)(t.code,{children:"null"})," when log is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionIndex"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Index position of the starting transaction for the log. ",(0,n.jsx)(t.code,{children:"null"})," when log is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Hash of the starting transaction for the log. ",(0,n.jsx)(t.code,{children:"null"})," when log is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Hash of the block that includes the log. ",(0,n.jsx)(t.code,{children:"null"})," when log is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockNumber"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["Number of block that includes the log. ",(0,n.jsx)(t.code,{children:"null"})," when log is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"address"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address the log originated from."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"data"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsx)(t.td,{children:"Non-indexed arguments of the log."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"topics"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array of Data, 32\xa0bytes each"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/concepts/events-and-logs#event-signature-hash",children:"Event signature hash"})," and 0 to 3 ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/events-and-logs#event-parameters",children:"indexed log arguments"}),"."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"miner-data-object",children:"Miner data object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getminerdatabyblockhash",children:(0,n.jsx)(t.code,{children:"eth_getMinerDataByBlockHash"})})," and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_getminerdatabyblocknumber",children:(0,n.jsx)(t.code,{children:"eth_getMinerDataByBlockNumber"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"netBlockReward"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["The net block reward, in Wei, is ",(0,n.jsx)(t.code,{children:"staticBlockReward + transactionFee + uncleInclusionReward"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"staticBlockReward"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"The static block reward, in Wei, is preset on a hard fork."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionFee"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["The transaction fee, in Wei, is ",(0,n.jsx)(t.code,{children:"sum of upfront cost - refund amount for all transactions"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uncleInclusionReward"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["The uncle inclusion reward, in Wei, is ",(0,n.jsx)(t.code,{children:"static block reward * number of ommers/32"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uncleRewards"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Map"}),(0,n.jsx)(t.td,{children:"Map of uncle block hashes and uncle miner coinbase addresses."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"coinbase"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Coinbase address."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"extraData"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsxs)(t.td,{children:["Extra data field for this block. The first 32 bytes is vanity data you can set using the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#miner-extra-data",children:(0,n.jsx)(t.code,{children:"--miner-extra-data"})})," command line option."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"difficulty"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Difficulty of this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"totalDifficulty"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Total difficulty of the chain until this block."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"pending-transaction-object",children:"Pending transaction object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#txpool_besupendingtransactions",children:(0,n.jsx)(t.code,{children:"txpool_besuPendingTransactions"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"accessList"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["(Optional) List of addresses and storage keys the transaction plans to access. Used in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#access_list-transactions",children:[(0,n.jsx)(t.code,{children:"ACCESS_LIST"})," transactions"]})," and may be used in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"from"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Gas provided by the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasPrice"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["(Optional) Gas price, in Wei, provided by the sender. Not used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["(Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["(Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"hash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Hash of the transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"input"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsx)(t.td,{children:"Data sent with the transaction to create or invoke a contract."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"nonce"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Number of transactions made by the sender before this one."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"to"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Address of the receiver. ",(0,n.jsx)(t.code,{children:"null"})," if a contract creation transaction."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionType"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types",children:"Transaction type"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"value"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Value transferred, in Wei."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"v"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"ECDSA Recovery ID."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"r"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"ECDSA signature r."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"s"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"ECDSA signature s."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"range-object",children:"Range object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_storagerangeat",children:(0,n.jsx)(t.code,{children:"debug_storageRangeAt"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"storage"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Object"}),(0,n.jsxs)(t.td,{children:["Key hash and value. Pre-image key is ",(0,n.jsx)(t.code,{children:"null"})," if it falls outside the cache."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"nextKey"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Hash"}),(0,n.jsx)(t.td,{children:"Hash of next key if further storage in range. Otherwise, not included."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"structured-log-object",children:"Structured log object"}),"\n",(0,n.jsxs)(t.p,{children:["Log information returned as part of the ",(0,n.jsx)(t.a,{href:"#trace-object",children:"Trace object"}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"pc"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Current program counter."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"op"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsx)(t.td,{children:"Current OpCode."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Gas remaining."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasCost"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Cost in wei of each gas unit."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"depth"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Execution depth."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"exceptionalHaltReasons"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsx)(t.td,{children:"One or more strings representing an error condition causing the EVM execution to terminate. These strings suggest that EVM execution terminated for reasons such as running out of gas or attempting to execute an unknown instruction. Generally a single exceptional halt reason returns but it's possible for more than one to occur at once."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"stack"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array of 32\xa0byte arrays"}),(0,n.jsx)(t.td,{children:"EVM execution stack before executing current operation."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"memory"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array of 32\xa0byte arrays"}),(0,n.jsx)(t.td,{children:"Memory space of the contract before executing current operation."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"storage"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Object"}),(0,n.jsx)(t.td,{children:"Storage entries changed by the current transaction."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"trace-object",children:"Trace object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_traceblock",children:(0,n.jsx)(t.code,{children:"debug_traceBlock"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_traceblockbyhash",children:(0,n.jsx)(t.code,{children:"debug_traceBlockByHash"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_traceblockbynumber",children:(0,n.jsx)(t.code,{children:"debug_traceBlockByNumber"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_tracetransaction",children:(0,n.jsx)(t.code,{children:"debug_traceTransaction"})}),", and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#debug_tracecall",children:(0,n.jsx)(t.code,{children:"debug_traceCall"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Gas used by the transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"failed"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Boolean"}),(0,n.jsx)(t.td,{children:"True if transaction failed, otherwise, false."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"returnValue"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsxs)(t.td,{children:["Bytes returned from transaction execution (without a ",(0,n.jsx)(t.code,{children:"0x"})," prefix)."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"structLogs"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsx)(t.td,{children:"Array of structured log objects."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"trace-filter-options-object",children:"Trace filter options object"}),"\n",(0,n.jsxs)(t.p,{children:["Parameter for ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#trace_filter",children:(0,n.jsx)(t.code,{children:"trace_filter"})}),". All parameters are optional."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"fromBLock"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String | Tag"}),(0,n.jsx)(t.td,{children:"Trace starts at this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"toBlock"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String | Tag"}),(0,n.jsx)(t.td,{children:"Trace stops at this block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"fromAddress"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsx)(t.td,{children:"Include only traces sent from this address."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"toAddress"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsx)(t.td,{children:"Include only traces with this destination address."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"after"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"The offset trace number."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"count"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of traces to display in a batch."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"transaction-object",children:"Transaction object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionbyhash",children:(0,n.jsx)(t.code,{children:"eth_getTransactionByHash"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionbyblockhashandindex",children:(0,n.jsx)(t.code,{children:"eth_getTransactionByBlockHashAndIndex"})}),", and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionbyblocknumberandindex",children:(0,n.jsx)(t.code,{children:"eth_getTransactionByBlockNumberAndIndex"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"accessList"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["(Optional) List of addresses and storage keys the transaction plans to access. Used in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#access_list-transactions",children:[(0,n.jsx)(t.code,{children:"ACCESS_LIST"})," transactions"]})," and may be used in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Hash of the block containing this transaction. ",(0,n.jsx)(t.code,{children:"null"})," when transaction is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockNumber"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["Block number of the block containing this transaction. ",(0,n.jsx)(t.code,{children:"null"})," when transaction is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"chainId"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/concepts/network-and-chain-id",children:"Chain ID"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"from"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Gas provided by the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasPrice"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["(Optional) Gas price, in Wei, provided by the sender. Used only in non-",(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:(0,n.jsx)(t.code,{children:"EIP1559"})})," transactions."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["(Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["(Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"hash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Hash of the transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"input"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsxs)(t.td,{children:["Data sent with the transaction to create or invoke a contract. For ",(0,n.jsx)(t.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"}),", it's a pointer to the transaction location in ",(0,n.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"nonce"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Number of transactions made by the sender before this one."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"to"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Address of the receiver. ",(0,n.jsx)(t.code,{children:"null"})," if a contract creation transaction."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionIndex"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Index position of the transaction in the block. ",(0,n.jsx)(t.code,{children:"null"})," when transaction is pending."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionType"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types",children:"Transaction type"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"value"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Value transferred, in Wei."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"v"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"ECDSA Recovery ID."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"r"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"ECDSA signature r."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"s"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"ECDSA signature s."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"transaction-call-object",children:"Transaction call object"}),"\n",(0,n.jsxs)(t.p,{children:["Parameter for ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_call",children:(0,n.jsx)(t.code,{children:"eth_call"})}),", ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_createaccesslist",children:(0,n.jsx)(t.code,{children:"eth_createAccessList"})}),", and ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_estimategas",children:(0,n.jsx)(t.code,{children:"eth_estimateGas"})}),"."]}),"\n",(0,n.jsx)(t.p,{children:"All transaction call object parameters are optional."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"from"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"to"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the action receiver."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Gas provided by the sender. ",(0,n.jsx)(t.code,{children:"eth_call"})," consumes zero gas, but other executions might need this parameter. ",(0,n.jsx)(t.code,{children:"eth_estimateGas"})," ignores this value."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasPrice"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Gas price, in Wei, provided by the sender. The default is ",(0,n.jsx)(t.code,{children:"0"}),". Used only in non-",(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:(0,n.jsx)(t.code,{children:"EIP1559"})})," transactions."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Can be used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),". If used, must specify ",(0,n.jsx)(t.code,{children:"maxFeePerGas"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxFeePerGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Can be used only in ",(0,n.jsxs)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,n.jsx)(t.code,{children:"EIP1559"})," transactions"]}),". If used, must specify ",(0,n.jsx)(t.code,{children:"maxPriorityFeePerGas"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"maxFeePerBlobGas"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsxs)(t.td,{children:["Maximum fee the sender is willing to pay per blob gas. Only used for blob transactions introduced in ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-4844",children:"EIP-4844"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"value"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Value transferred, in Wei."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"data"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsxs)(t.td,{children:["Hash of the method signature and encoded parameters. For details, see ",(0,n.jsx)(t.a,{href:"https://solidity.readthedocs.io/en/develop/abi-spec.html",children:"Ethereum Contract ABI"}),". Must be equal to ",(0,n.jsx)(t.code,{children:"input"})," if both parameters are provided."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"input"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,n.jsxs)(t.td,{children:["Hash of the method signature and encoded parameters. For details, see ",(0,n.jsx)(t.a,{href:"https://solidity.readthedocs.io/en/develop/abi-spec.html",children:"Ethereum Contract ABI"}),". Must be equal to ",(0,n.jsx)(t.code,{children:"data"})," if both parameters are provided."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"accessList"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["List of addresses and storage keys that the transaction plans to access. Used only in non-",(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#frontier-transactions",children:(0,n.jsx)(t.code,{children:"FRONTIER"})})," transactions."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"strict"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Tag"}),(0,n.jsxs)(t.td,{children:["Determines if the sender account balance is checked. If ",(0,n.jsx)(t.code,{children:"true"}),", the balance is checked. If ",(0,n.jsx)(t.code,{children:"false"}),", the balance is not checked. If not specified, the balance is checked against the gas parameters if supplied."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blobVersionedHashes"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["List of references to blobs introduced in ",(0,n.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-4844",children:"EIP-4844"}),"."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"transaction-receipt-object",children:"Transaction receipt object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#eth_gettransactionreceipt",children:(0,n.jsx)(t.code,{children:"eth_getTransactionReceipt"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Hash of block containing this transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"blockNumber"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Block number of block containing this transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"contractAddress"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsxs)(t.td,{children:["Contract address created, if contract creation transaction, otherwise, ",(0,n.jsx)(t.code,{children:"null"}),". A failed contract creation transaction still produces a contract address value."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"cumulativeGasUsed"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Total amount of gas used by previous transactions in the block and this transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"effectiveGasPrice"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["The ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:"actual value per gas deducted"})," from the sender's account."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"from"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the sender."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"gasUsed"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsx)(t.td,{children:"Amount of gas used by this specific transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"logs"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:["Array of ",(0,n.jsx)(t.a,{href:"#log-object",children:"log objects"})," generated by this transaction."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"logsBloom"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 256\xa0bytes"}),(0,n.jsx)(t.td,{children:"Bloom filter for light clients to quickly retrieve related logs."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"status"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["Either ",(0,n.jsx)(t.code,{children:"0x0"})," (failure), ",(0,n.jsx)(t.code,{children:"0x1"})," (success), or ",(0,n.jsx)(t.code,{children:"0x2"})," (invalid)."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"to"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,n.jsx)(t.td,{children:"Address of the receiver, if sending ether, otherwise, null."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Hash of the transaction."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionIndex"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,n.jsx)(t.td,{children:"Index position of transaction in the block."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionType"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/concepts/transactions/types",children:"Transaction type"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"revertReason"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,n.jsxs)(t.td,{children:["ABI-encoded string that displays the ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"reason for reverting the transaction"}),". Only available if revert reason is ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:"enabled"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"type"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,n.jsxs)(t.td,{children:["Transaction type, ",(0,n.jsx)(t.code,{children:"0x00"})," for legacy transactions, ",(0,n.jsx)(t.code,{children:"0x01"})," for access list types, ",(0,n.jsx)(t.code,{children:"0x02"})," for dynamic fees, and ",(0,n.jsx)(t.code,{children:"0x03"})," for blob transactions."]})]})]})]}),"\n",(0,n.jsxs)(t.admonition,{type:"note",children:[(0,n.jsxs)(t.p,{children:["For pre-Byzantium transactions, the transaction receipt object includes the following instead of ",(0,n.jsx)(t.code,{children:"status"}),":"]}),(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"root"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Post-transaction state root"})]})})]})]}),"\n",(0,n.jsx)(t.h2,{id:"transaction-trace-object",children:"Transaction trace object"}),"\n",(0,n.jsxs)(t.p,{children:["Returned by ",(0,n.jsx)(t.a,{href:"/public-networks/reference/api/#trace_replayblocktransactions",children:(0,n.jsx)(t.code,{children:"trace_replayBlockTransactions"})}),"."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Key"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"output"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Boolean"}),(0,n.jsx)(t.td,{children:"Transaction result. 1 for success and 0 for failure."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"stateDiff"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Object"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/reference/trace-types#statediff",children:"State changes in the requested block"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"trace"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/reference/trace-types#trace",children:"Ordered list of calls to other contracts"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"vmTrace"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Object"}),(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.a,{href:"/public-networks/reference/trace-types#vmtrace",children:"Ordered list of EVM actions"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"transactionHash"})}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,n.jsx)(t.td,{children:"Hash of the replayed transaction."})]})]})]})]})}function o(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>d});var n=s(96540);const r={},c=n.createContext(r);function i(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b178458.4de7b538.js b/assets/js/5b178458.4de7b538.js new file mode 100644 index 00000000000..5b321b43376 --- /dev/null +++ b/assets/js/5b178458.4de7b538.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4717],{47122:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var t=n(74848),s=n(28453);const i={title:"Bootnodes",description:"Configuring bootnodes",sidebar_position:3,tags:["private networks"]},r="Configure bootnodes",d={id:"private-networks/how-to/configure/bootnodes",title:"Bootnodes",description:"Configuring bootnodes",source:"@site/docs/private-networks/how-to/configure/bootnodes.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/bootnodes",permalink:"/private-networks/how-to/configure/bootnodes",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/bootnodes.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Bootnodes",description:"Configuring bootnodes",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Free gas network",permalink:"/private-networks/how-to/configure/free-gas"},next:{title:"Validators",permalink:"/private-networks/how-to/configure/validators"}},c={},a=[{value:"Specify a bootnode",id:"specify-a-bootnode",level:2},{value:"Configure bootnodes in a production network",id:"configure-bootnodes-in-a-production-network",level:2},{value:"Add and remove bootnodes",id:"add-and-remove-bootnodes",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"configure-bootnodes",children:"Configure bootnodes"})}),"\n",(0,t.jsx)(o.p,{children:"You can use bootnodes to initially discover peers. Bootnodes are regular nodes used to discover other nodes."}),"\n",(0,t.jsx)(o.p,{children:"In private networks for development or testing purposes, specify at least one bootnode."}),"\n",(0,t.jsxs)(o.p,{children:["In production networks, ",(0,t.jsx)(o.a,{href:"#configure-bootnodes-in-a-production-network",children:"configure two or more nodes as bootnodes"}),"."]}),"\n",(0,t.jsxs)(o.admonition,{type:"tip",children:[(0,t.jsx)(o.p,{children:"Bootnodes and static nodes are parallel methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes."}),(0,t.jsxs)(o.p,{children:["To find peers, configure one or more bootnodes. To configure a specific set of peer connections, use ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static nodes"}),"."]})]}),"\n",(0,t.jsx)(o.admonition,{title:"Mainnet and public testnets",type:"note",children:(0,t.jsxs)(o.p,{children:["For Mainnet and the Sepolia and Holesky testnets, Besu has an internal list of enode URLs and uses this list automatically when you specify the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#network",children:(0,t.jsx)(o.code,{children:"--network"})})," option."]})}),"\n",(0,t.jsx)(o.h2,{id:"specify-a-bootnode",children:"Specify a bootnode"}),"\n",(0,t.jsxs)(o.p,{children:["To start a node, specify a bootnode ",(0,t.jsx)(o.a,{href:"/public-networks/concepts/node-keys",children:"enode"})," for P2P discovery, using the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(o.code,{children:"--bootnodes"})})," option."]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"besu --genesis-file=privateNetworkGenesis.json --data-path=nodeDataPath --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303\n"})}),"\n",(0,t.jsxs)(o.p,{children:["The default host and port advertised to other peers for P2P discovery is ",(0,t.jsx)(o.code,{children:"127.0.0.1:30303"}),". To specify a different host or port, use the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,t.jsx)(o.code,{children:"--p2p-host"})})," and ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,t.jsx)(o.code,{children:"--p2p-port"})})," options."]}),"\n",(0,t.jsxs)(o.p,{children:["By default, peer discovery listens on all available network interfaces. If the device Besu is running on must bind to a specific network interface, specify the interface using the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#p2p-interface",children:(0,t.jsx)(o.code,{children:"--p2p-interface"})})," option."]}),"\n",(0,t.jsx)(o.h2,{id:"configure-bootnodes-in-a-production-network",children:"Configure bootnodes in a production network"}),"\n",(0,t.jsx)(o.p,{children:"A network must have at least one operating bootnode. To allow for continuity in the event of failure, configure two or more bootnodes in a production network. If you don't configure any bootnodes, Besu uses Mainnet's default bootnodes."}),"\n",(0,t.jsxs)(o.p,{children:["We don't recommend putting bootnodes behind a load balancer because the ",(0,t.jsx)(o.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode"})," relates to the node public key, IP address, and discovery ports. Any changes to a bootnode enode prevents other nodes from being able to establish a connection with the bootnode. This is why we recommend putting more bootnodes on the network itself."]}),"\n",(0,t.jsx)(o.p,{children:"To ensure a bootnode enode doesn't change when recovering from a complete bootnode failure:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:["Create the ",(0,t.jsx)(o.a,{href:"/public-networks/concepts/node-keys",children:"node key pair"})," (that is, the private and public key) before starting the bootnode."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsx)(o.p,{children:"When creating bootnodes in the cloud (for example, AWS and Azure), attempt to assign a static IP address to them. If your network is:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Publicly accessible, assign an elastic IP."}),"\n",(0,t.jsx)(o.li,{children:"Internal only, specify a private IP address when you create the instance and record this IP address."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:"We recommend storing the bootnode configuration under source control."}),"\n",(0,t.jsx)(o.p,{children:"To allow for failure, specify all bootnodes on the command line (even to the bootnodes themselves)."}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsx)(o.p,{children:"Having each bootnode list the other bootnodes increases the speed of discovery. Nodes ignore their own enode in the bootnodes list so it isn't required to specify different bootnode lists to the bootnodes themselves."})}),"\n",(0,t.jsx)(o.h2,{id:"add-and-remove-bootnodes",children:"Add and remove bootnodes"}),"\n",(0,t.jsxs)(o.p,{children:["Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and adding them to the network, update the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(o.code,{children:"--bootnodes"})})," command line option for each node to include the new bootnodes."]}),"\n",(0,t.jsxs)(o.p,{children:["When adding bootnodes, you don't need to restart running nodes. By updating the ",(0,t.jsx)(o.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,t.jsx)(o.code,{children:"--bootnodes"})})," option, the next time you restart the nodes (for example, when ",(0,t.jsx)(o.a,{href:"/public-networks/how-to/upgrade-node",children:"upgrading"}),"), the nodes connect to the new bootnodes."]})]})}function h(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>d});var t=n(96540);const s={},i=t.createContext(s);function r(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c820069.f9a6f71b.js b/assets/js/5c820069.f9a6f71b.js new file mode 100644 index 00000000000..061638b7a04 --- /dev/null +++ b/assets/js/5c820069.f9a6f71b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[510],{41266:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>f,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var a=t(74848),r=t(28453);const i={title:"Use the web3js-quorum multi-node example",sidebar_position:3,description:"web3js-quorum client library multi-node example",tags:["private networks"]},s="Use the multi-node example in the web3js-quorum client library",o={id:"private-networks/tutorials/privacy/web3js-quorum",title:"Use the web3js-quorum multi-node example",description:"web3js-quorum client library multi-node example",source:"@site/docs/private-networks/tutorials/privacy/web3js-quorum.md",sourceDirName:"private-networks/tutorials/privacy",slug:"/private-networks/tutorials/privacy/web3js-quorum",permalink:"/private-networks/tutorials/privacy/web3js-quorum",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/privacy/web3js-quorum.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Use the web3js-quorum multi-node example",sidebar_position:3,description:"web3js-quorum client library multi-node example",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a multi-tenant network",permalink:"/private-networks/tutorials/privacy/multi-tenancy"},next:{title:"Create a privacy-enabled network using the Quorum Developer Quickstart",permalink:"/private-networks/tutorials/privacy/quickstart"}},c={},d=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"use-the-multi-node-example-in-the-web3js-quorum-client-library",children:"Use the multi-node example in the web3js-quorum client library"})}),"\n",(0,a.jsxs)(n.p,{children:["To use the examples provided in the web3js-quorum library with ",(0,a.jsx)(n.a,{href:"/private-networks/tutorials/privacy/",children:"your privacy network"}),":"]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This example uses 3 of the 4 nodes configured in the ",(0,a.jsx)(n.a,{href:"/private-networks/tutorials/privacy/",children:"privacy tutorial"}),"."]})}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Clone the ",(0,a.jsx)(n.strong,{children:"ConsenSys/web3js-quorum"})," repository:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/ConsenSys/web3js-quorum\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"web3js-quorum"})," directory:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"npm install\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"example"})," directory, update the ",(0,a.jsx)(n.code,{children:"keys.js"})," file to include:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"chain ID"}),"\n",(0,a.jsx)(n.li,{children:"Tessera node public keys"}),"\n",(0,a.jsx)(n.li,{children:"Besu node RPC URLs"}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/concepts/node-keys#node-private-key",children:"Besu node private keys"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"example/multiNodeExample"})," directory, deploy the contract:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"node deployContract.js\n"})}),"\n",(0,a.jsx)(n.p,{children:"A private transaction receipt returns."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-text",children:"Transaction Hash 0x23b57ddc3ecf9c9a548e4401a411420ffc0002fd259a86d5656add7c6108beeb\nWaiting for transaction to be mined ...\nPrivate Transaction Receipt\n{ contractAddress: '0xfee84481da8f4b9a998dfacb38091b3145bb01ab',\n from: '0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb',\n to: null,\n output:\n '0x6080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f245811461005b5780636057361d1461008257806367e404ce146100ae575b600080fd5b34801561006757600080fd5b506100706100ec565b60408051918252519081900360200190f35b34801561008e57600080fd5b506100ac600480360360208110156100a557600080fd5b50356100f2565b005b3480156100ba57600080fd5b506100c3610151565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60025490565b604080513381526020810183905281517fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f5929181900390910190a16002556001805473ffffffffffffffffffffffffffffffffffffffff191633179055565b60015473ffffffffffffffffffffffffffffffffffffffff169056fea165627a7a72305820c7f729cb24e05c221f5aa913700793994656f233fe2ce3b9fd9a505ea17e8d8a0029',\n logs: [] }\n"})}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If you receive a ",(0,a.jsx)(n.code,{children:"Method not enabled"})," error, ensure you enabled the appropriate APIs using the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,a.jsx)(n.code,{children:"--rpc-http-api"})})]})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Copy the contract address from the private transaction receipt and set the ",(0,a.jsx)(n.code,{children:"CONTRACT_ADDRESS"})," environment variable:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"export CONTRACT_ADDRESS=<Contract Address from Private Transaction Receipt>\n"})}),"\n",(0,a.jsx)(n.admonition,{title:"example",type:"tip",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"export CONTRACT_ADDRESS=0xfee84481da8f4b9a998dfacb38091b3145bb01ab\n"})})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Store a value in the contract from Node 1:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"node storeValueFromNode1.js\n"})}),"\n",(0,a.jsx)(n.p,{children:"Node 1 stores the value of 1000 (3e8 in hex) and is visible to Node 1 and Node 2."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"Transaction Hash: 0xd9d71cc6f64675e1a48183ded8f08930af317eb883ebae4c4eec66ae68618d85\nWaiting for transaction to be mined ...\nEvent Emited: 0x0000000000000000000000009811ebc35d7b06b3fa8dc5809a1f9c52751e1deb00000000000000000000000000000000000000000000000000000000000003e8\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8545: 0x00000000000000000000000000000000000000000000000000000000000003e8\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8546: 0x00000000000000000000000000000000000000000000000000000000000003e8\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8547: 0x\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Store a value in the contract from Node 2:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"node storeValueFromNode2.js\n"})}),"\n",(0,a.jsx)(n.p,{children:"Node 2 stores the value of 42 (2a in hex) and is visible to Node 1 and Node 2."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-text",children:"Transaction Hash: 0xa025433aec47a71b0230f12f43708812fd38ff7b7c1dc89a715f71dcbd5fbdbf\nWaiting for transaction to be mined ...\nEvent Emited: 0x000000000000000000000000372a70ace72b02cc7f1757183f98c620254f9c8d000000000000000000000000000000000000000000000000000000000000002a\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8545: 0x000000000000000000000000000000000000000000000000000000000000002a\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8546: 0x000000000000000000000000000000000000000000000000000000000000002a\nWaiting for transaction to be mined ...\nGet Value from http://localhost:8547: 0x\n"})}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsx)(n.p,{children:"As expected, log messages indicate that Node 3 Tessera cannot find payloads because Node 3 does not have access to the private transactions between Node 1 and Node 2."})}),"\n"]}),"\n"]})]})}function f(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var a=t(96540);const r={},i=a.createContext(r);function s(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5ec0198e.0b38fe62.js b/assets/js/5ec0198e.0b38fe62.js new file mode 100644 index 00000000000..f903e4c514b --- /dev/null +++ b/assets/js/5ec0198e.0b38fe62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8715],{24211:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>p});var s=i(74848),o=i(28453);const r={title:"Permissioning",sidebar_position:1,description:"Besu permissioning feature",tags:["private networks"]},t="Permissioning",c={id:"private-networks/concepts/permissioning/index",title:"Permissioning",description:"Besu permissioning feature",source:"@site/docs/private-networks/concepts/permissioning/index.md",sourceDirName:"private-networks/concepts/permissioning",slug:"/private-networks/concepts/permissioning/",permalink:"/private-networks/concepts/permissioning/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/permissioning/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Permissioning",sidebar_position:1,description:"Besu permissioning feature",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Privacy plugin",permalink:"/private-networks/concepts/privacy/plugin"},next:{title:"Onchain permissioning",permalink:"/private-networks/concepts/permissioning/onchain"}},a={},p=[{value:"Node permissioning",id:"node-permissioning",level:2},{value:"Account permissioning",id:"account-permissioning",level:2},{value:"Specify permissioning",id:"specify-permissioning",level:2},{value:"Local",id:"local",level:3},{value:"Onchain",id:"onchain",level:3}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"permissioning",children:"Permissioning"})}),"\n",(0,s.jsx)(n.p,{children:"A permissioned network enables node permissioning and account permissioning, allowing only specified nodes and accounts to access the network."}),"\n",(0,s.jsxs)(n.admonition,{title:"Permissioning is not privacy",type:"caution",children:[(0,s.jsx)(n.p,{children:"In peer-to-peer networks, node permissioning enforces rules on nodes you control."}),(0,s.jsx)(n.p,{children:"Permissioning requires a distributed network of trust across the network where participants agree to follow the rules. One bad actor can decide not to follow the rules. Nodes can take action to prevent the bad actor adding to the chain but they cannot prevent the bad actor from allowing access to the chain."}),(0,s.jsxs)(n.p,{children:["Besu also implements ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"privacy"}),"."]})]}),"\n",(0,s.jsx)(n.h2,{id:"node-permissioning",children:"Node permissioning"}),"\n",(0,s.jsx)(n.p,{children:"Use node permissioning to restrict access to known participants only."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Node Permissioning",src:i(20705).A+"",width:"1700",height:"1058"})}),"\n",(0,s.jsx)(n.h2,{id:"account-permissioning",children:"Account permissioning"}),"\n",(0,s.jsx)(n.p,{children:"Use account permissioning to:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Enforce onboarding or identity requirements."}),"\n",(0,s.jsx)(n.li,{children:"Suspend accounts."}),"\n",(0,s.jsx)(n.li,{children:"Restrict the actions an account can perform."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Account Permissioning",src:i(17608).A+"",width:"1700",height:"1170"})}),"\n",(0,s.jsx)(n.h2,{id:"specify-permissioning",children:"Specify permissioning"}),"\n",(0,s.jsxs)(n.p,{children:["You can specify permissioning ",(0,s.jsx)(n.a,{href:"#local",children:"locally"})," or ",(0,s.jsx)(n.a,{href:"#onchain",children:"onchain"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"local",children:"Local"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local",children:"Local permissioning"})," works at the node level. Each node in the network has a ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local#permissions-configuration-file",children:"permissions configuration file"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Local permissioning affects your node but not the rest of the network. Use local permissioning to restrict use of your node (that is, the resources under your control). For example, customers able to access your node."}),"\n",(0,s.jsx)(n.p,{children:"Local permissioning does not require coordination with the rest of the network and you can act immediately to protect your node. Your rules are not enforced in blocks produced by other nodes."}),"\n",(0,s.jsx)(n.h3,{id:"onchain",children:"Onchain"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"Onchain permissioning"})," works through a smart contract on the network. Specifying permissioning onchain enables all nodes to read and update permissioning configuration from one location."]}),"\n",(0,s.jsx)(n.p,{children:"Onchain permissioning requires coordination to update the rules. The network might not be able to act immediately (for example, the smart contract might enforce a minimum of number of votes before changing permissioning rules)."}),"\n",(0,s.jsx)(n.p,{children:"When you update onchain permissioning, the update applies across the network and new blocks abide by the updated rules. For example, blocked accounts can no longer add transactions to the chain."}),"\n",(0,s.jsx)(n.p,{children:"The following diagram illustrates applying local and onchain permissioning rules."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Permissioning Flow",src:i(36920).A+"",width:"1656",height:"1134"})})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},36920:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/PermissioningFlow-083dd4871a10fb66a7bf7a0e7de03a1d.png"},17608:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/enterprise-ethereum-account-permissioning-5c19ac3228fd7a89cda25b53f80b890b.png"},20705:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/node-permissioning-bad-actor-a0e342071abf311e9f1f52e96581e6f6.png"},28453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var s=i(96540);const o={},r=s.createContext(o);function t(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/608f60e4.12fd1aea.js b/assets/js/608f60e4.12fd1aea.js new file mode 100644 index 00000000000..fe8470ad6ee --- /dev/null +++ b/assets/js/608f60e4.12fd1aea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9558],{62455:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Get started","slug":"/public-networks/get-started","permalink":"/public-networks/get-started","sidebar":"publicDocSidebar","navigation":{"previous":{"title":"Introduction","permalink":"/public-networks/"},"next":{"title":"System requirements","permalink":"/public-networks/get-started/system-requirements"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/6420.1d302b6f.js b/assets/js/6420.1d302b6f.js new file mode 100644 index 00000000000..d25476a8c2b --- /dev/null +++ b/assets/js/6420.1d302b6f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6420],{26420:(t,e,n)=>{n.d(e,{diagram:()=>j});var i=n(99702),s=n(26312),r=n(28259),a=(n(74353),n(16750),n(42838),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,18],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,14],c={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 13:i.addTask(r[o-1],r[o]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},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=r.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 d=y.yylloc;r.push(d);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,x,m,k,_,b,v,$,w,M={};;){if(x=n[n.length-1],this.defaultActions[x]?m=this.defaultActions[x]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||y.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),m=a[x]&&a[x][g]),void 0===m||!m.length||!m[0]){var E="";for(_ in $=[],a[x])this.terminals_[_]&&_>2&&$.push("'"+this.terminals_[_]+"'");E=y.showPosition?"Parse error on line "+(c+1)+":\n"+y.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:d,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(m[0]){case 1:n.push(g),s.push(y.yytext),r.push(y.yylloc),n.push(m[1]),g=null,l=y.yyleng,o=y.yytext,c=y.yylineno,d=y.yylloc;break;case 2:if(b=this.productions_[m[1]][1],M.$=s[s.length-b],M._$={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},f&&(M._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(M,[o,l,c,u.yy,m[1],s,r].concat(h))))return k;b&&(n=n.slice(0,-1*b*2),s=s.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[m[1]][0]),s.push(M.$),r.push(M._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},l={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:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\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:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};function h(){this.yy={}}return c.lexer=l,h.prototype=c,c.Parser=h,new h}());a.parser=a;const o=a;let c="";const l=[],h=[],y=[],u=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},p={getConfig:()=>(0,i.c)().journey,clear:function(){l.length=0,h.length=0,c="",y.length=0,(0,i.v)()},setDiagramTitle:i.q,getDiagramTitle:i.t,setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,addSection:function(t){c=t,l.push(t)},getSections:function(){return l},getTasks:function(){let t=u();let e=0;for(;!t&&e<100;)t=u(),e++;return h.push(...y),h},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:c,type:c,people:r,task:t,score:i};y.push(a)},addTaskOrg:function(t){const e={section:c,type:c,description:t,task:t,classes:[]};h.push(e)},getActors:function(){return function(){const t=[];return h.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},d=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`,f=function(t,e){return(0,r.d)(t,e)},g=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},x=function(t,e){return(0,r.f)(t,e)};let m=-1;const k=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:y}=c,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.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",y);c.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[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"),y=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%");y.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(y,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}}(),_=g,b=function(t,e,n){const i=t.append("g"),s=(0,r.g)();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,f(i,s),k(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},v=x,$=function(t,e,n){const i=e.x+n.width/2,a=t.append("g");m++;a.append("line").attr("id","task"+m).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"),r=t.append("g");r.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"),r.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,s.JLW)().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)+")")}(r):e.score<3?function(t){const i=(0,s.JLW)().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)+")")}(r):r.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")}(a,{cx:i,cy:300+30*(5-e.score),score:e.score});const o=(0,r.g)();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=n.width,o.height=n.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,f(a,o);let c=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:c,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};g(a,i),c+=10})),k(n)(e.task,a,o.x,o.y,o.width,o.height,{class:"task"},n,e.colour)},w=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")},M={};const E=(0,i.c)().journey,T=E.leftMargin,S={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,s){const r=(0,i.c)().journey,a=this;let o=0;var c;this.sequenceItems.forEach((function(i){o++;const l=a.sequenceItems.length-o+1;a.updateVal(i,"starty",e-l*r.boxMargin,Math.min),a.updateVal(i,"stopy",s+l*r.boxMargin,Math.max),a.updateVal(S.data,"startx",t-l*r.boxMargin,Math.min),a.updateVal(S.data,"stopx",n+l*r.boxMargin,Math.max),"activation"!==c&&(a.updateVal(i,"startx",t-l*r.boxMargin,Math.min),a.updateVal(i,"stopx",n+l*r.boxMargin,Math.max),a.updateVal(S.data,"starty",e-l*r.boxMargin,Math.min),a.updateVal(S.data,"stopy",s+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(S.data,"startx",s,Math.min),this.updateVal(S.data,"starty",a,Math.min),this.updateVal(S.data,"stopx",r,Math.max),this.updateVal(S.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}},A=E.sectionFills,I=E.sectionColours,P=function(t,e,n){const s=(0,i.c)().journey;let r="";const a=n+(2*s.height+s.diagramMarginY);let o=0,c="#CCC",l="black",h=0;for(const[i,y]of e.entries()){if(r!==y.section){c=A[o%A.length],h=o%A.length,l=I[o%I.length];let n=0;const a=y.section;for(let t=i;t<e.length&&e[t].section==a;t++)n+=1;const u={x:i*s.taskMargin+i*s.width+T,y:50,text:y.section,fill:c,num:h,colour:l,taskCount:n};b(t,u,s),r=y.section,o++}const n=y.people.reduce(((t,e)=>(M[e]&&(t[e]=M[e]),t)),{});y.x=i*s.taskMargin+i*s.width+T,y.y=a,y.width=s.diagramMarginX,y.height=s.diagramMarginY,y.colour=l,y.fill=c,y.num=h,y.actors=n,$(t,y,s),S.insert(y.x,y.y,y.x+y.width+s.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){E[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.c)().journey,o=(0,i.c)().securityLevel;let c;"sandbox"===o&&(c=(0,s.Ltv)("#i"+e));const l="sandbox"===o?(0,s.Ltv)(c.nodes()[0].contentDocument.body):(0,s.Ltv)("body");S.init();const h=l.select("#"+e);w(h);const y=r.db.getTasks(),u=r.db.getDiagramTitle(),p=r.db.getActors();for(const i in M)delete M[i];let d=0;p.forEach((t=>{M[t]={color:a.actorColours[d%a.actorColours.length],position:d},d++})),function(t){const e=(0,i.c)().journey;let n=60;Object.keys(M).forEach((i=>{const s=M[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:M[i].position};_(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v(t,a),n+=20}))}(h),S.insert(0,0,T,50*Object.keys(M).length),P(h,y,0);const f=S.getBounds();u&&h.append("text").text(u).attr("x",T).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*a.diagramMarginY,x=T+f.stopx+2*a.diagramMarginX;(0,i.i)(h,g,x,a.useMaxWidth),h.append("line").attr("x1",T).attr("y1",4*a.height).attr("x2",x-T-4).attr("y2",4*a.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;h.attr("viewBox",`${f.startx} -25 ${x} ${g+m}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",g+m+25)}},j={parser:o,db:p,renderer:C,styles:d,init:t=>{C.setConf(t.journey),p.clear()}}},28259:(t,e,n)=>{n.d(e,{a:()=>a,b:()=>l,c:()=>c,d:()=>r,e:()=>y,f:()=>o,g:()=>h});var i=n(16750),s=n(99702);const r=(t,e)=>{const n=t.append("rect");if(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),e.name&&n.attr("name",e.name),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return void 0!==e.class&&n.attr("class",e.class),n},a=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,n).lower()},o=(t,e)=>{const n=e.text.replace(s.J," "),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 r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i},c=(t,e,n,s)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,i.Jf)(s);r.attr("xlink:href",a)},l=(t,e,n,s)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,i.Jf)(s);r.attr("xlink:href",`#${a}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),y=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/66bba352.d596c93b.js b/assets/js/66bba352.d596c93b.js new file mode 100644 index 00000000000..8fe82ec9b37 --- /dev/null +++ b/assets/js/66bba352.d596c93b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4546],{41830:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>r,toc:()=>p});var n=s(74848),o=s(28453);const a={title:"Pass JVM options",sidebar_position:2,description:"Passing Java virtual machine JVM options to Besu at runtime",tags:["public networks","private networks"]},i="Pass JVM options",r={id:"public-networks/how-to/configure-java/pass-jvm-options",title:"Pass JVM options",description:"Passing Java virtual machine JVM options to Besu at runtime",source:"@site/docs/public-networks/how-to/configure-java/pass-jvm-options.md",sourceDirName:"public-networks/how-to/configure-java",slug:"/public-networks/how-to/configure-java/pass-jvm-options",permalink:"/public-networks/how-to/configure-java/pass-jvm-options",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-java/pass-jvm-options.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Pass JVM options",sidebar_position:2,description:"Passing Java virtual machine JVM options to Besu at runtime",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Install and update Java",permalink:"/public-networks/how-to/configure-java/install-update-java"},next:{title:"Manage JVM memory",permalink:"/public-networks/how-to/configure-java/manage-memory"}},c={},p=[];function u(e){const t={code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"pass-jvm-options",children:"Pass JVM options"})}),"\n",(0,n.jsx)(t.p,{children:"To perform tasks such as attaching a debugger or configuring the garbage collector, pass Java Virtual Machine (JVM) options to Besu."}),"\n",(0,n.jsxs)(t.p,{children:["Besu passes the contents of the ",(0,n.jsx)(t.code,{children:"BESU_OPTS"})," environment variable to the JVM. Set standard JVM options in the ",(0,n.jsx)(t.code,{children:"BESU_OPTS"})," variable."]}),"\n",(0,n.jsx)(t.p,{children:"For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu."}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"BESU_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \\\nbesu --network=holesky\n"})})]})}function l(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>r});var n=s(96540);const o={},a=n.createContext(o);function i(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67359d90.9c6a5c3f.js b/assets/js/67359d90.9c6a5c3f.js new file mode 100644 index 00000000000..b048244835a --- /dev/null +++ b/assets/js/67359d90.9c6a5c3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5434],{53147:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var r=s(74848),t=s(28453);const i={title:"Access logs using JSON-RPC",sidebar_position:5,description:"Accessing logs using the Besu API",tags:["public networks","private networks"]},c="Access logs using the Besu API",l={id:"public-networks/how-to/use-besu-api/access-logs",title:"Access logs using JSON-RPC",description:"Accessing logs using the Besu API",source:"@site/docs/public-networks/how-to/use-besu-api/access-logs.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/access-logs",permalink:"/public-networks/how-to/use-besu-api/access-logs",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/access-logs.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Access logs using JSON-RPC",sidebar_position:5,description:"Accessing logs using the Besu API",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Authenticate over JSON-RPC requests",permalink:"/public-networks/how-to/use-besu-api/authenticate"},next:{title:"Use the Engine API",permalink:"/public-networks/how-to/use-engine-api"}},a={},o=[{value:"Create a filter",id:"create-a-filter",level:2},{value:"Poll a filter for changes",id:"poll-a-filter-for-changes",level:3},{value:"Get all logs for a filter",id:"get-all-logs-for-a-filter",level:3},{value:"Uninstall a filter",id:"uninstall-a-filter",level:2},{value:"Filters for private contracts",id:"filters-for-private-contracts",level:2},{value:"Get logs using a filter options object",id:"get-logs-using-a-filter-options-object",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"access-logs-using-the-besu-api",children:"Access logs using the Besu API"})}),"\n",(0,r.jsxs)(n.p,{children:["Subscribe to events, such as logs, using either ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub over WebSockets"})," or filters over HTTP."]}),"\n",(0,r.jsx)(n.p,{children:"Access logs using the following Besu API methods:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,r.jsx)(n.code,{children:"eth_getFilterChanges"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,r.jsx)(n.code,{children:"eth_getFilterLogs"})})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,r.jsx)(n.code,{children:"eth_getLogs"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,r.jsx)(n.code,{children:"eth_newFilter"})})," to create the filter before using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,r.jsx)(n.code,{children:"eth_getFilterChanges"})})," and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,r.jsx)(n.code,{children:"eth_getFilterLogs"})}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Access logs for ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private contracts"})," using the equivalent ",(0,r.jsxs)(n.a,{href:"#filters-for-private-contracts",children:[(0,r.jsx)(n.code,{children:"priv_*"})," methods and specifying the privacy group ID"]}),". For example, ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getlogs",children:(0,r.jsx)(n.code,{children:"priv_getLogs"})}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The following examples use the sample contract included in ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"events and logs"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"create-a-filter",children:"Create a filter"}),"\n",(0,r.jsxs)(n.p,{children:["Create a filter using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,r.jsx)(n.code,{children:"eth_newFilter"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"example contract"})," was deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b, the following request for ",(0,r.jsx)(n.code,{children:"eth_newFilter"})," creates a filter to log when ",(0,r.jsx)(n.code,{children:"valueIndexed"})," is set to 5:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_newFilter",\n "params": [\n {\n "fromBlock": "earliest",\n "toBlock": "latest",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "topics": [\n ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],\n ["0x0000000000000000000000000000000000000000000000000000000000000005"]\n ]\n }\n ],\n "id": 1\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,r.jsx)(n.code,{children:"eth_newFilter"})})," returns a filter ID hash (for example, ",(0,r.jsx)(n.code,{children:"0x1ddf0c00989044e9b41cc0ae40272df3"}),")."]}),"\n",(0,r.jsx)(n.h3,{id:"poll-a-filter-for-changes",children:"Poll a filter for changes"}),"\n",(0,r.jsxs)(n.p,{children:["To poll the filter for changes since the last poll, use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,r.jsx)(n.code,{children:"eth_getFilterChanges"})})," with the filter ID hash returned by ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,r.jsx)(n.code,{children:"eth_newFilter"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If the contract had been executed twice since the last poll, with ",(0,r.jsx)(n.code,{children:"valueIndexed"})," set to 1 and 5, ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,r.jsx)(n.code,{children:"eth_getFilterChanges"})})," returns only the log where the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs#event-parameters",children:"topic"})," for ",(0,r.jsx)(n.code,{children:"valueIndexed"})," is 5:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x21c",\n "blockHash": "0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132",\n "transactionHash": "0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000005",\n "topics": [\n "0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8",\n "0x0000000000000000000000000000000000000000000000000000000000000005"\n ]\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"get-all-logs-for-a-filter",children:"Get all logs for a filter"}),"\n",(0,r.jsxs)(n.p,{children:["To get all logs for a filter, use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,r.jsx)(n.code,{children:"eth_getFilterLogs"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If the contract had been executed twice with ",(0,r.jsx)(n.code,{children:"valueIndexed"})," set to 5 since the filter was created using ",(0,r.jsx)(n.code,{children:"eth_newFilter"}),", ",(0,r.jsx)(n.code,{children:"eth_getFilterLogs"})," returns:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x1a7",\n "blockHash": "0x4edda22a242ddc7bc51e2b6b11e63cd67be1af7389470cdea9c869768ff75d42",\n "transactionHash": "0x9535bf8830a72ca7d0020df0b547adc4d0ecc4321b7d5b5d6beb1eccee5c0afa",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000005",\n "topics": [\n "0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8",\n "0x0000000000000000000000000000000000000000000000000000000000000005"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x21c",\n "blockHash": "0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132",\n "transactionHash": "0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000005",\n "topics": [\n "0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8",\n "0x0000000000000000000000000000000000000000000000000000000000000005"\n ]\n }\n ]\n}\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["You can use ",(0,r.jsx)(n.a,{href:"#get-logs-using-a-filter-options-object",children:(0,r.jsx)(n.code,{children:"eth_getLogs"})})," with a filter options object to get all logs matching the filter options instead of using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,r.jsx)(n.code,{children:"eth_newFilter"})})," followed by ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,r.jsx)(n.code,{children:"eth_getFilterLogs"})}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"uninstall-a-filter",children:"Uninstall a filter"}),"\n",(0,r.jsxs)(n.p,{children:["When a filter is no longer required, use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_uninstallfilter",children:(0,r.jsx)(n.code,{children:"eth_uninstallFilter"})})," to remove the filter."]}),"\n",(0,r.jsx)(n.h2,{id:"filters-for-private-contracts",children:"Filters for private contracts"}),"\n",(0,r.jsx)(n.p,{children:"Filters for private contracts are created, accessed, and uninstalled using:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getfilterchanges",children:(0,r.jsx)(n.code,{children:"priv_getFilterChanges"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getfilterlogs",children:(0,r.jsx)(n.code,{children:"priv_getFilterLogs"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getlogs",children:(0,r.jsx)(n.code,{children:"priv_getLogs"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_newfilter",children:(0,r.jsx)(n.code,{children:"priv_newFilter"})})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_uninstallfilter",children:(0,r.jsx)(n.code,{children:"priv_uninstallFilter"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"privacy group ID"})," must be specified as parameter 0 for the ",(0,r.jsx)(n.code,{children:"priv"})," methods."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "priv_newFilter",\n "params": [\n "4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",\n {\n "fromBlock": "earliest",\n "toBlock": "latest",\n "addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"\n ]\n }\n ],\n "id": 1\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"get-logs-using-a-filter-options-object",children:"Get logs using a filter options object"}),"\n",(0,r.jsxs)(n.p,{children:["To get all logs for a filter options object, use ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,r.jsx)(n.code,{children:"eth_getLogs"})})," or ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getlogs",children:(0,r.jsx)(n.code,{children:"priv_getLogs"})})," for a private contract."]}),"\n",(0,r.jsxs)(n.p,{children:["The following request for ",(0,r.jsx)(n.code,{children:"eth_getLogs"})," returns all the logs where the example contract has been deployed to ",(0,r.jsx)(n.code,{children:"0x42699a7612a82f1d9c36148af9c77354759b210b"})," and executed with ",(0,r.jsx)(n.code,{children:"valueIndexed"})," set to 5."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getLogs",\n "params": [\n {\n "fromBlock": "earliest",\n "toBlock": "latest",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "topics": [\n ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],\n ["0x0000000000000000000000000000000000000000000000000000000000000005"]\n ]\n }\n ],\n "id": 1\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["The above example returns the same result as calling ",(0,r.jsx)(n.a,{href:"#creating-a-filter",children:"eth_newFilter"})," followed by ",(0,r.jsx)(n.a,{href:"#getting-all-logs-for-a-filter",children:"eth_getFilterLogs"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>l});var r=s(96540);const t={},i=r.createContext(t);function c(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6788.582b9064.js b/assets/js/6788.582b9064.js new file mode 100644 index 00000000000..1f5b5e9244c --- /dev/null +++ b/assets/js/6788.582b9064.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6788],{16788:(t,n,e)=>{e.d(n,{diagram:()=>H});var i=e(99702),s=e(26312);function r(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function o(t){return t.target.depth}function c(t,n){return t.sourceLinks.length?t.depth:n-1}function l(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e<i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e<s||void 0===e&&s>=s)&&(e=s)}return e}function a(t){return function(){return t}}function u(t,n){return y(t.source,n.source)||t.index-n.index}function f(t,n){return y(t.target,n.target)||t.index-n.index}function y(t,n){return t.y0-n.y0}function d(t){return t.value}function p(t){return t.index}function g(t){return t.nodes}function _(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function k({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function m(){let t,n,e,i=0,s=0,o=1,m=1,v=24,b=8,w=p,L=c,E=g,A=_,S=6;function M(){const c={nodes:E.apply(null,arguments),links:A.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map(((n,e)=>[w(n,e,t),n])));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(c),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(l(n.sourceLinks,d),l(n.targetLinks,d)):n.fixedValue}(c),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(c),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(c),function(e){const c=function({nodes:t}){const e=h(t,(t=>t.depth))+1,s=(o-i-v)/(e-1),r=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(L.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,r[t]?r[t].push(n):r[t]=[n]}if(n)for(const i of r)i.sort(n);return r}(e);t=Math.min(b,(m-s)/(h(c,(t=>t.length))-1)),function(n){const e=r(n,(n=>(m-s-(n.length-1)*t)/l(n,d)));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(m-n+t)/(i.length+1);for(let t=0;t<i.length;++t){const e=i[t];e.y0+=n*(t+1),e.y1+=n*(t+1)}N(i)}}(c);for(let t=0;t<S;++t){const n=Math.pow(.99,t),e=Math.max(1-n,(t+1)/S);T(c,n,e),I(c,n,e)}}(c),k(c),c}function I(t,e,i){for(let s=1,r=t.length;s<r;++s){const r=t[s];for(const t of r){let n=0,i=0;for(const{source:e,value:r}of t.targetLinks){let s=r*(t.layer-e.layer);n+=$(e,t)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(y),O(r,i)}}function T(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=j(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(y),O(r,i)}}function O(n,e){const i=n.length>>1,r=n[i];D(n,r.y0-t,i-1,e),C(n,r.y1+t,i+1,e),D(n,m,n.length-1,e),C(n,s,0,e)}function C(n,e,i,s){for(;i<n.length;++i){const r=n[i],o=(e-r.y0)*s;o>1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function D(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function P({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(f);for(const{target:{targetLinks:n}}of t)n.sort(u)}}function N(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(f),e.sort(u)}function $(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function j(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return M.update=function(t){return k(t),t},M.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:a(t),M):w},M.nodeAlign=function(t){return arguments.length?(L="function"==typeof t?t:a(t),M):L},M.nodeSort=function(t){return arguments.length?(n=t,M):n},M.nodeWidth=function(t){return arguments.length?(v=+t,M):v},M.nodePadding=function(n){return arguments.length?(b=t=+n,M):b},M.nodes=function(t){return arguments.length?(E="function"==typeof t?t:a(t),M):E},M.links=function(t){return arguments.length?(A="function"==typeof t?t:a(t),M):A},M.linkSort=function(t){return arguments.length?(e=t,M):e},M.size=function(t){return arguments.length?(i=s=0,o=+t[0],m=+t[1],M):[o-i,m-s]},M.extent=function(t){return arguments.length?(i=+t[0][0],o=+t[1][0],s=+t[0][1],m=+t[1][1],M):[[i,s],[o,m]]},M.iterations=function(t){return arguments.length?(S=+t,M):S},M}var v=Math.PI,b=2*v,w=1e-6,L=b-w;function E(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A(){return new E}E.prototype=A.prototype={constructor:E,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,c=e-t,l=i-n,h=r-t,a=o-n,u=h*h+a*a;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>w)if(Math.abs(a*c-l*h)>w&&s){var f=e-r,y=i-o,d=c*c+l*l,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),x=s*Math.tan((v-Math.acos((d+u-p)/(2*g*_)))/2),k=x/_,m=x/g;Math.abs(k-1)>w&&(this._+="L"+(t+k*h)+","+(n+k*a)),this._+="A"+s+","+s+",0,0,"+ +(a*f>h*y)+","+(this._x1=t+m*c)+","+(this._y1=n+m*l)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),c=e*Math.sin(i),l=t+o,h=n+c,a=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+l+","+h:(Math.abs(this._x1-l)>w||Math.abs(this._y1-h)>w)&&(this._+="L"+l+","+h),e&&(u<0&&(u=u%b+b),u>L?this._+="A"+e+","+e+",0,1,"+a+","+(t-o)+","+(n-c)+"A"+e+","+e+",0,1,"+a+","+(this._x1=l)+","+(this._y1=h):u>w&&(this._+="A"+e+","+e+",0,"+ +(u>=v)+","+a+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const S=A;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function O(t){return t[1]}function C(t){return t.source}function D(t){return t.target}function P(t){var n=C,e=D,i=T,s=O,r=null;function o(){var o,c=M.call(arguments),l=n.apply(this,c),h=e.apply(this,c);if(r||(r=o=S()),t(r,+i.apply(this,(c[0]=l,c)),+s.apply(this,c),+i.apply(this,(c[0]=h,c)),+s.apply(this,c)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function N(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return P(N).source($).target(j)}e(74353),e(16750),e(42838);var U=function(){var t=function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},n=[1,9],e=[1,10],i=[1,5,10,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(t,n,e,i,s,r,o){var c=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[c-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[c-2].trim().replaceAll('""','"')),e=parseFloat(r[c].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[c];break;case 10:this.$=r[c-1]}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},parse:function(t){var n=this,e=[0],i=[],s=[null],r=[],o=this.table,c="",l=0,h=0,a=r.slice.call(arguments,1),u=Object.create(this.lexer),f={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(f.yy[y]=this.yy[y]);u.setInput(t,f.yy),f.yy.lexer=u,f.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var p=u.options&&u.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,k,m,v,b,w,L,E={};;){if(_=e[e.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(L=void 0,"number"!=typeof(L=i.pop()||u.lex()||1)&&(L instanceof Array&&(L=(i=L).pop()),L=n.symbols_[L]||L),g=L),x=o[_]&&o[_][g]),void 0===x||!x.length||!x[0]){var A="";for(m in w=[],o[_])this.terminals_[m]&&m>2&&w.push("'"+this.terminals_[m]+"'");A=u.showPosition?"Parse error on line "+(l+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:w})}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:e.push(g),s.push(u.yytext),r.push(u.yylloc),e.push(x[1]),g=null,h=u.yyleng,c=u.yytext,l=u.yylineno,d=u.yylloc;break;case 2:if(v=this.productions_[x[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},p&&(E._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(E,[c,h,l,f.yy,x[1],s,r].concat(a))))return k;v&&(e=e.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),e.push(this.productions_[x[1]][0]),s.push(E.$),r.push(E._$),b=o[e[e.length-2]][e[e.length-1]],e.push(b);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},setInput:function(t,n){return this.yy=n||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 n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;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),e.length-1&&(this.yylineno-=e.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:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),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(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},test_match:function(t,n){var e,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],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;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,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((e=this._input.match(this.rules[s[r]]))&&(!n||e[0].length>n[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,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,n,e,i){switch(e){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function o(){this.yy={}}return s.lexer=r,o.prototype=s,s.Parser=o,new o}();U.parser=U;const F=U;let W=[],q=[],G={};class V{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}}class X{constructor(t){this.ID=t}}const K={nodesMap:G,getConfig:()=>(0,i.c)().sankey,getNodes:()=>q,getLinks:()=>W,getGraph:()=>({nodes:q.map((t=>({id:t.ID}))),links:W.map((t=>({source:t.source.ID,target:t.target.ID,value:t.value})))}),addLink:(t,n,e)=>{W.push(new V(t,n,e))},findOrCreateNode:t=>(t=i.e.sanitizeText(t,(0,i.c)()),G[t]||(G[t]=new X(t),q.push(G[t])),G[t]),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,getDiagramTitle:i.t,setDiagramTitle:i.q,clear:()=>{W=[],q=[],G={},(0,i.v)()}},Q=class t{static next(n){return new t(n+ ++t.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}};Q.count=0;let Y=Q;const B={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?r(t.sourceLinks,o)-1:0},justify:c},R={draw:function(t,n,e,r){const{securityLevel:o,sankey:c}=(0,i.c)(),l=i.K.sankey;let h;"sandbox"===o&&(h=(0,s.Ltv)("#i"+n));const a="sandbox"===o?(0,s.Ltv)(h.nodes()[0].contentDocument.body):(0,s.Ltv)("body"),u="sandbox"===o?a.select(`[id="${n}"]`):(0,s.Ltv)(`[id="${n}"]`),f=(null==c?void 0:c.width)??l.width,y=(null==c?void 0:c.height)??l.width,d=(null==c?void 0:c.useMaxWidth)??l.useMaxWidth,p=(null==c?void 0:c.nodeAlignment)??l.nodeAlignment,g=(null==c?void 0:c.prefix)??l.prefix,_=(null==c?void 0:c.suffix)??l.suffix,x=(null==c?void 0:c.showValues)??l.showValues,k=r.db.getGraph(),v=B[p];m().nodeId((t=>t.id)).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(v).extent([[0,0],[f,y]])(k);const b=(0,s.UMr)(s.zt);u.append("g").attr("class","nodes").selectAll(".node").data(k.nodes).join("g").attr("class","node").attr("id",(t=>(t.uid=Y.next("node-")).id)).attr("transform",(function(t){return"translate("+t.x0+","+t.y0+")"})).attr("x",(t=>t.x0)).attr("y",(t=>t.y0)).append("rect").attr("height",(t=>t.y1-t.y0)).attr("width",(t=>t.x1-t.x0)).attr("fill",(t=>b(t.id)));u.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(k.nodes).join("text").attr("x",(t=>t.x0<f/2?t.x1+6:t.x0-6)).attr("y",(t=>(t.y1+t.y0)/2)).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",(t=>t.x0<f/2?"start":"end")).text((({id:t,value:n})=>x?`${t}\n${g}${Math.round(100*n)/100}${_}`:t));const w=u.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(k.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),L=(null==c?void 0:c.linkColor)||"gradient";if("gradient"===L){const t=w.append("linearGradient").attr("id",(t=>(t.uid=Y.next("linearGradient-")).id)).attr("gradientUnits","userSpaceOnUse").attr("x1",(t=>t.source.x1)).attr("x2",(t=>t.target.x0));t.append("stop").attr("offset","0%").attr("stop-color",(t=>b(t.source.id))),t.append("stop").attr("offset","100%").attr("stop-color",(t=>b(t.target.id)))}let E;switch(L){case"gradient":E=t=>t.uid;break;case"source":E=t=>b(t.source.id);break;case"target":E=t=>b(t.target.id);break;default:E=L}w.append("path").attr("d",z()).attr("stroke",E).attr("stroke-width",(t=>Math.max(1,t.width))),(0,i.o)(void 0,u,0,d)}},Z=F.parse.bind(F);F.parse=t=>Z((t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim())(t));const H={parser:F,db:K,renderer:R}}}]); \ No newline at end of file diff --git a/assets/js/6803.5c976ee3.js b/assets/js/6803.5c976ee3.js new file mode 100644 index 00000000000..066fe5d69ee --- /dev/null +++ b/assets/js/6803.5c976ee3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6803],{76803:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(99702),s=i(26312),r=(i(74353),i(16750),i(42838),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],s=[1,6],r=[1,10,12,14,16,18,19,20,21,22],l=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],c=[20,21,22],o=[2,7],h=[1,12],u=[1,13],y=[1,14],p=[1,15],d=[1,16],g=[1,17],_={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",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:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,e,i,n,s,r,l){var a=r.length-1;switch(s){case 3:n.setShowData(!0);break;case 6:this.$=r[a-1];break;case 8:n.addSection(r[a-1],n.cleanupValue(r[a]));break;case 9:this.$=r[a].trim(),n.setDiagramTitle(this.$);break;case 10:this.$=r[a].trim(),n.setAccTitle(this.$);break;case 11:case 12:this.$=r[a].trim(),n.setAccDescription(this.$);break;case 13:n.addSection(r[a].substr(8)),this.$=r[a].substr(8)}},table:[{3:1,4:2,5:e,20:i,21:n,22:s},{1:[3]},{3:7,4:2,5:e,20:i,21:n,22:s},t(r,l,{6:8,7:[1,9]}),t(a,[2,14]),t(a,[2,15]),t(a,[2,16]),{1:[2,1]},t(c,o,{8:10,9:11,1:[2,2],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,l,{6:18}),t(r,[2,5]),{4:19,20:i,21:n,22:s},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},t(c,[2,12]),t(c,[2,13]),t(c,o,{8:10,9:11,1:[2,3],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,[2,6]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11])],defaultActions:{7:[2,1]},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=[],l=this.table,a="",c=0,o=0,h=r.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 d=u.yylloc;r.push(d);var g=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,f,m,b,k,x,v,S,w,$={};;){if(f=i[i.length-1],this.defaultActions[f]?m=this.defaultActions[f]:(null==_&&(w=void 0,"number"!=typeof(w=n.pop()||u.lex()||1)&&(w instanceof Array&&(w=(n=w).pop()),w=e.symbols_[w]||w),_=w),m=l[f]&&l[f][_]),void 0===m||!m.length||!m[0]){var E="";for(k in S=[],l[f])this.terminals_[k]&&k>2&&S.push("'"+this.terminals_[k]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[_]||_,line:u.yylineno,loc:d,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+_);switch(m[0]){case 1:i.push(_),s.push(u.yytext),r.push(u.yylloc),i.push(m[1]),_=null,o=u.yyleng,a=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(x=this.productions_[m[1]][1],$.$=s[s.length-x],$._$={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},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[a,o,c,y.yy,m[1],s,r].concat(h))))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_[m[1]][0]),s.push($.$),r.push($._$),v=l[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}},f={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:case 1:case 3:case 4:break;case 2:return 20;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\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:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};function m(){this.yy={}}return _.lexer=f,m.prototype=_,_.Parser=m,new m}());r.parser=r;const l=r,a=n.B.pie,c={},o=!1;let h=c,u=o;const y=structuredClone(a),p={getConfig:()=>structuredClone(y),clear:()=>{h=structuredClone(c),u=o,(0,n.v)()},setDiagramTitle:n.q,getDiagramTitle:n.t,setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addSection:(t,e)=>{t=(0,n.d)(t,(0,n.c)()),void 0===h[t]&&(h[t]=e,n.l.debug(`added new section: ${t}, with value: ${e}`))},getSections:()=>h,cleanupValue:t=>(":"===t.substring(0,1)&&(t=t.substring(1).trim()),Number(t.trim())),setShowData:t=>{u=t},getShowData:()=>u},d={parser:l,db:p,renderer:{draw:(t,e,i,r)=>{n.l.debug("rendering pie chart\n"+t);const l=r.db,a=(0,n.c)(),c=(0,n.C)(l.getConfig(),a.pie),o=18,h=450,u=h,y=(0,n.A)(e),p=y.append("g"),d=l.getSections();p.attr("transform","translate(225,225)");const{themeVariables:g}=a;let[_]=(0,n.D)(g.pieOuterStrokeWidth);_??(_=2);const f=c.textPosition,m=Math.min(u,h)/2-40,b=(0,s.JLW)().innerRadius(0).outerRadius(m),k=(0,s.JLW)().innerRadius(m*f).outerRadius(m*f);p.append("circle").attr("cx",0).attr("cy",0).attr("r",m+_/2).attr("class","pieOuterCircle");const x=(t=>{const e=Object.entries(t).map((t=>({label:t[0],value:t[1]}))).sort(((t,e)=>e.value-t.value));return(0,s.rLf)().value((t=>t.value))(e)})(d),v=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],S=(0,s.UMr)(v);p.selectAll("mySlices").data(x).enter().append("path").attr("d",b).attr("fill",(t=>S(t.data.label))).attr("class","pieCircle");let w=0;Object.keys(d).forEach((t=>{w+=d[t]})),p.selectAll("mySlices").data(x).enter().append("text").text((t=>(t.data.value/w*100).toFixed(0)+"%")).attr("transform",(t=>"translate("+k.centroid(t)+")")).style("text-anchor","middle").attr("class","slice"),p.append("text").text(l.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const $=p.selectAll(".legend").data(S.domain()).enter().append("g").attr("class","legend").attr("transform",((t,e)=>"translate(216,"+(22*e-22*S.domain().length/2)+")"));$.append("rect").attr("width",o).attr("height",o).style("fill",S).style("stroke",S),$.data(x).append("text").attr("x",22).attr("y",14).text((t=>{const{label:e,value:i}=t.data;return l.getShowData()?`${e} [${i}]`:e}));const E=512+Math.max(...$.selectAll("text").nodes().map((t=>(null==t?void 0:t.getBoundingClientRect().width)??0)));y.attr("viewBox",`0 0 ${E} 450`),(0,n.i)(y,h,E,c.useMaxWidth)}},styles: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`}}}]); \ No newline at end of file diff --git a/assets/js/680b46ee.09961d1c.js b/assets/js/680b46ee.09961d1c.js new file mode 100644 index 00000000000..ae12ef1fb28 --- /dev/null +++ b/assets/js/680b46ee.09961d1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9399],{5387:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var o=t(74848),i=t(28453);const r={description:"Monitoring using metrics and logging",tags:["public networks","private networks"]},s="Monitor Besu",c={id:"public-networks/how-to/monitor/index",title:"Monitor Besu",description:"Monitoring using metrics and logging",source:"@site/docs/public-networks/how-to/monitor/index.md",sourceDirName:"public-networks/how-to/monitor",slug:"/public-networks/how-to/monitor/",permalink:"/public-networks/how-to/monitor/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/monitor/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Monitoring using metrics and logging",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Specify NAT method",permalink:"/public-networks/how-to/connect/specify-nat"},next:{title:"Use metrics",permalink:"/public-networks/how-to/monitor/metrics"}},l={},a=[];function u(e){const n={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"monitor-besu",children:"Monitor Besu"})}),"\n",(0,o.jsx)(n.p,{children:"Monitoring enables identification of node and network issues. Specifically, configuring metrics and logging enables:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"Visual representation of declining node or network performance"})}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/how-to/monitor/logging",children:"Collection of log files to enable issue diagnosis"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For an overview of monitoring Besu, view ",(0,o.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7BuutRe0I28&feature=youtu.be",children:"this recording"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(96540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c6be066.7b55fcc0.js b/assets/js/6c6be066.7b55fcc0.js new file mode 100644 index 00000000000..1f0f4b6cae1 --- /dev/null +++ b/assets/js/6c6be066.7b55fcc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4417],{98938:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var t=r(74848),a=r(28453);const s={title:"Include revert reason",description:"Including revert reason in transactions with Besu",sidebar_position:3,tags:["private networks"]},o="Revert reason",i={id:"private-networks/how-to/send-transactions/revert-reason",title:"Include revert reason",description:"Including revert reason in transactions with Besu",source:"@site/docs/private-networks/how-to/send-transactions/revert-reason.md",sourceDirName:"private-networks/how-to/send-transactions",slug:"/private-networks/how-to/send-transactions/revert-reason",permalink:"/private-networks/how-to/send-transactions/revert-reason",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/send-transactions/revert-reason.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Include revert reason",description:"Including revert reason in transactions with Besu",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Send concurrent private transactions",permalink:"/private-networks/how-to/send-transactions/concurrent-private-transactions"},next:{title:"Monitoring",permalink:"/private-networks/how-to/monitor/"}},c={},d=[{value:"Enable revert reason",id:"enable-revert-reason",level:2},{value:"Where the revert reason is included",id:"where-the-revert-reason-is-included",level:2},{value:"Revert reason format",id:"revert-reason-format",level:2},{value:"Dapp support",id:"dapp-support",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"revert-reason",children:"Revert reason"})}),"\n",(0,t.jsxs)(n.p,{children:["In smart contracts, the ",(0,t.jsx)(n.a,{href:"https://docs.soliditylang.org/en/v0.8.12/control-structures.html#revert",children:(0,t.jsx)(n.code,{children:"revert"})})," operation triggers an exception to flag an error and revert the current call. The EVM passes back to the client an optional string message containing information about the error."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sol",children:'pragma solidity ^0.8.4;\n\ncontract VendingMachine {\n address owner;\n constructor() {\n owner = msg.sender;\n }\n error Unauthorized();\n function buy(uint amount) public payable {\n if (amount > msg.value / 2 ether)\n revert("Not enough Ether provided.");\n // Alternative way to do it:\n require(\n amount <= msg.value / 2 ether,\n "Not enough Ether provided."\n );\n // Perform the purchase.\n }\n function withdraw() public {\n if (msg.sender != owner)\n revert Unauthorized();\n\n payable(msg.sender).transfer(address(this).balance);\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"enable-revert-reason",children:"Enable revert reason"}),"\n",(0,t.jsxs)(n.p,{children:["Use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:(0,t.jsx)(n.code,{children:"--revert-reason-enabled"})})," command line option to include the revert reason in the transaction receipt and the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:(0,t.jsx)(n.code,{children:"trace"})})," response in Besu."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"Enabling revert reason may use a significant amount of memory. We do not recommend enabling revert reason when connected to public Ethereum networks."})}),"\n",(0,t.jsx)(n.h2,{id:"where-the-revert-reason-is-included",children:"Where the revert reason is included"}),"\n",(0,t.jsxs)(n.p,{children:["With revert reason enabled, the transaction receipt returned by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactionreceipt",children:(0,t.jsx)(n.code,{children:"eth_getTransactionReceipt"})})," includes the revert reason as an ABI-encoded string."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The revert reason is not included in the transaction receipt's root hash. Not including the revert reason in the transactions receipt's root hash means the revert reason is only available to nodes that execute the transaction when importing the block. That is, the revert reason is not available if using fast synchronization (",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,t.jsx)(n.code,{children:"--sync-mode=FAST"})}),")."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Example of transaction receipt"',children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "blockHash": "0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a",\n "blockNumber": "0x50",\n "contractAddress": null,\n "cumulativeGasUsed": "0x5208",\n "from": "0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "gasUsed": "0x5208",\n "logs": [],\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "status": "0x1",\n "to": "0xf17f52151ebef6c7334fad080c5704d77216b732",\n "transactionHash": "0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3",\n "transactionIndex": "0x0",\n "revertReason": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000"\n }\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["With revert reason enabled, the list items in the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:(0,t.jsx)(n.code,{children:"trace"})})," response returned by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_replayblocktransactions",children:(0,t.jsx)(n.code,{children:"trace_replayBlockTransactions"})}),", ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_block",children:(0,t.jsx)(n.code,{children:"trace_block"})}),", and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_transaction",children:(0,t.jsx)(n.code,{children:"trace_transaction"})})," include the revert reason as an ABI-encoded string."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Example of trace response list item"',children:'{\n "jsonrpc": "2.0",\n "id": 415,\n "result": [\n {\n "action": {\n "callType": "call",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0xffadea",\n "input": "0x",\n "to": "0x0110000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0x220bc13dc4f1ed38dcca927a5be15eca16497d279f4c40d7b8fe9704eadf1464",\n "blockNumber": 18,\n "error": "Reverted",\n "revertReason": "0x7d88c1856cc95352",\n "subtraces": 0,\n "traceAddress": [],\n "transactionHash": "0xc388baa0e55e6b73e850b22dc7e9853700f6b995fd55d95dd6ccd5a13d63c566",\n "transactionPosition": 1,\n "type": "call"\n }\n ]\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["By default, the error returned by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_estimategas",children:(0,t.jsx)(n.code,{children:"eth_estimateGas"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_call",children:(0,t.jsx)(n.code,{children:"eth_call"})})," includes the revert reason as an ABI-encoded string in the ",(0,t.jsx)(n.code,{children:"data"})," field."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Example of eth_estimateGas and eth_call error"',children:'{\n "jsonrpc": "2.0",\n "id": 3,\n "error": {\n "code": -32000,\n "message": "Execution reverted: ERC20: transfer amount exceeds balance",\n "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000"\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"revert-reason-format",children:"Revert reason format"}),"\n",(0,t.jsxs)(n.p,{children:["As described in the ",(0,t.jsx)(n.a,{href:"https://docs.soliditylang.org/en/v0.8.12/control-structures.html#revert",children:"Solidity documentation"}),", the revert reason is an ABI-encoded string consisting of:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"0x08c379a0 // Function selector for Error(string)\n0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset\n0x000000000000000000000000000000000000000000000000000000000000001a // String length\n0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:"title=\"Example of revert reason string for 'Not enough Ether provided' \"",children:'"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000"\n'})}),"\n",(0,t.jsx)(n.h2,{id:"dapp-support",children:"Dapp support"}),"\n",(0,t.jsx)(n.p,{children:"Client libraries, such as web3j, do not support extracting the revert reason from the transaction receipt. To extract the revert reason your dapp must interact directly with Besu using a custom JSON -> Object converter."})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>i});var t=r(96540);const a={},s=t.createContext(a);function o(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6cafcc6f.99884b59.js b/assets/js/6cafcc6f.99884b59.js new file mode 100644 index 00000000000..02c914d617d --- /dev/null +++ b/assets/js/6cafcc6f.99884b59.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1941],{6417:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var s=t(74848),r=t(28453);const i={title:"Deploy Besu using Kubernetes",description:"Deploy a Besu node using Kubernetes.",toc_max_heading_level:3,tags:["public networks"]},o="Deploy a Besu public node using Kubernetes",a={id:"public-networks/tutorials/kubernetes",title:"Deploy Besu using Kubernetes",description:"Deploy a Besu node using Kubernetes.",source:"@site/docs/public-networks/tutorials/kubernetes.md",sourceDirName:"public-networks/tutorials",slug:"/public-networks/tutorials/kubernetes",permalink:"/public-networks/tutorials/kubernetes",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/tutorials/kubernetes.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Deploy Besu using Kubernetes",description:"Deploy a Besu node using Kubernetes.",toc_max_heading_level:3,tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Run Besu and Teku on a testnet",permalink:"/public-networks/tutorials/besu-teku-testnet"},next:{title:"Reference",permalink:"/public-networks/reference"}},l={},u=[{value:"AWS EKS",id:"aws-eks",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Steps",id:"steps",level:3},{value:"1. Create a security group for discovery",id:"1-create-a-security-group-for-discovery",level:4},{value:"Outbound rules",id:"outbound-rules",level:5},{value:"Inbound rules",id:"inbound-rules",level:4},{value:"2. Add a node group to your cluster",id:"2-add-a-node-group-to-your-cluster",level:4},{value:"3. Install the EBS or EFS drivers",id:"3-install-the-ebs-or-efs-drivers",level:4},{value:"4. Set up the pod",id:"4-set-up-the-pod",level:4},{value:"Azure AKS",id:"azure-aks",level:2},{value:"1. Create a Network Security Group (NSG)",id:"1-create-a-network-security-group-nsg",level:4},{value:"2. Add a node pool to your cluster",id:"2-add-a-node-pool-to-your-cluster",level:4},{value:"3. Use Azure StorageClasses to suit your needs",id:"3-use-azure-storageclasses-to-suit-your-needs",level:4}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deploy-a-besu-public-node-using-kubernetes",children:"Deploy a Besu public node using Kubernetes"})}),"\n",(0,s.jsxs)(n.p,{children:["You can use a cloud provider such as ",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/eks/",children:"Amazon Elastic Kubernetes Service (EKS)"}),"\nor ",(0,s.jsx)(n.a,{href:"https://azure.microsoft.com/en-au/products/kubernetes-service",children:"Azure Kubernetes Service (AKS)"})," to deploy\na Besu public node"]}),"\n",(0,s.jsx)(n.p,{children:"This tutorial walks you through adding an extra node group to your Besu pod."}),"\n",(0,s.jsx)(n.h2,{id:"aws-eks",children:"AWS EKS"}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.p,{children:["Set up a Kubernetes cluster using a managed Kubernetes service such as\n",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/eks/",children:"Amazon EKS"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"steps",children:"Steps"}),"\n",(0,s.jsx)(n.h4,{id:"1-create-a-security-group-for-discovery",children:"1. Create a security group for discovery"}),"\n",(0,s.jsxs)(n.p,{children:["Create a security group in your VPC that allows traffic from anywhere on ports ",(0,s.jsx)(n.code,{children:"30303"})," and ",(0,s.jsx)(n.code,{children:"9000"}),"\n(or equivalent ports that you are using for discovery)."]}),"\n",(0,s.jsx)(n.h5,{id:"outbound-rules",children:"Outbound rules"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Protocol"}),(0,s.jsx)(n.th,{children:"Port range"}),(0,s.jsx)(n.th,{children:"Destination"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"All traffic"}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0.0.0.0/0"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"All traffic"}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:"All"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"::/0"})})]})]})]}),"\n",(0,s.jsx)(n.h4,{id:"inbound-rules",children:"Inbound rules"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Protocol"}),(0,s.jsx)(n.th,{children:"Port range"}),(0,s.jsx)(n.th,{children:"Destination"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Custom UDP"}),(0,s.jsx)(n.td,{children:"UDP"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"9000"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0.0.0.0/0"})}),(0,s.jsx)(n.td,{children:"CL client"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Custom TCP"}),(0,s.jsx)(n.td,{children:"TCP"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"9000"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0.0.0.0/0"})}),(0,s.jsx)(n.td,{children:"CL client"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Custom UDP"}),(0,s.jsx)(n.td,{children:"UDP"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"30303"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0.0.0.0/0"})}),(0,s.jsx)(n.td,{children:"EL client"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Custom TCP"}),(0,s.jsx)(n.td,{children:"TCP"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"30303"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0.0.0.0/0"})}),(0,s.jsx)(n.td,{children:"EL client"})]})]})]}),"\n",(0,s.jsx)(n.admonition,{title:"important",type:"warning",children:(0,s.jsx)(n.p,{children:"The key here is to allow traffic on both TCP and UDP for the consensus layer client and the\nexecution layer client."})}),"\n",(0,s.jsx)(n.h4,{id:"2-add-a-node-group-to-your-cluster",children:"2. Add a node group to your cluster"}),"\n",(0,s.jsxs)(n.p,{children:["In your VPC settings, enable ",(0,s.jsx)(n.strong,{children:"Auto-assign public IPv4 address"})," on the public subnets on which you\nspin up your nodes."]}),"\n",(0,s.jsxs)(n.p,{children:["This allows you to isolate your Besu node on a public subnet and separate it from the other apps and\nnode groups you might have running.\nIf you are using ",(0,s.jsx)(n.a,{href:"https://eksctl.io/",children:"EKSCTL"}),", add the following snippet to your setup:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'managedNodeGroups:\n - name: ng-ethereum\n instanceType: m6a.xlarge\n desiredCapacity: 1 # Increase this capacity if you need more nodes.\n \n subnets:\n - public-subnet-id1\n - public-subnet-id2\n - public-subnet-id3\n labels: { "ng": "ethereum" }\n securityGroups:\n attachIDs: ["sg-1234..."] # The ID of the security group from the previous step.\n iam:\n withAddonPolicies:\n ebs: true\n # efs: true\n taints:\n - key: ethereum\n value: "true"\n effect: NoSchedule\n - key: ethereum\n value: "true"\n effect: NoExecute\n'})}),"\n",(0,s.jsxs)(n.p,{children:["If you are using ",(0,s.jsx)(n.a,{href:"https://www.terraform.io/",children:"Terraform"}),", use something like the following for your\nnew node pool:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:' ng-ethereum = {\n desired_size = 1\n subnet_ids = module.vpc.public_subnets # Only public subnets here.\n vpc_security_group_ids = [ sg-1234 ] # The ID of the security group from the previous step.\n instance_types = ["m6a.xlarge"]\n iam_role_name = "${local.name}-eks-ng-ethereum-role"\n taints = [\n {\n key = "ethereum"\n value = "true"\n effect = "NO_SCHEDULE"\n },\n {\n key = "ethereum"\n value = "true"\n effect = "NO_EXECUTE"\n }\n ]\n labels = {\n workloadType = "ethereum"\n }\n ...\n'})}),"\n",(0,s.jsx)(n.h4,{id:"3-install-the-ebs-or-efs-drivers",children:"3. Install the EBS or EFS drivers"}),"\n",(0,s.jsxs)(n.p,{children:["We recommend using EBS or NvME storage for your chain data.\nFor most cases, the ",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html",children:"EBS drivers"})," or\n",(0,s.jsx)(n.a,{href:"https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html",children:"EFS drivers"})," are sufficient.\nHowever, if you are using instance stores, use the\n",(0,s.jsx)(n.a,{href:"https://aws.amazon.com/blogs/containers/eks-persistent-volumes-for-instance-store/",children:"Local Storage Static Provisioner"}),"\ninstead."]}),"\n",(0,s.jsx)(n.h4,{id:"4-set-up-the-pod",children:"4. Set up the pod"}),"\n",(0,s.jsxs)(n.p,{children:["Now that the infrastructure is set up, use ",(0,s.jsx)(n.code,{children:"hostNetworking"})," to bind your pod to the host and use the\nhost node's public IP for your Besu node."]}),"\n",(0,s.jsx)(n.p,{children:"First, add the following snippet to your StatefulSet:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"template:\n metadata:\n labels:\n ...\n spec:\n hostNetwork: true\n dnsPolicy: ClusterFirstWithHostNet\n affinity: ...\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Next, add an init container and a shared volume to store the public IP.\nThe init container ",(0,s.jsx)(n.code,{children:"init"})," runs and gets the public IP of the host using the AWS metadata service and\nsaves it to a local shared volume ",(0,s.jsx)(n.code,{children:"besu-pip"})," (between the init container and the Besu pod)."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'template:\n metadata:\n labels:\n ...\n spec:\n hostNetwork: true\n dnsPolicy: ClusterFirstWithHostNet\n affinity: ...\n initContainers:\n - name: init\n image: alpine/curl:8.5.0\n volumeMounts:\n - name: pip\n mountPath: /pip\n - name: shared-jwt\n mountPath: /jwt \n - name: besu-data\n mountPath: /data\n securityContext:\n runAsUser: 0 \n command:\n - /bin/bash\n - -xec\n - |\n # Get the existing public IP to associate with.\n PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip)\n # Store the public IP in a local file to be used by the container.\n echo -ne "$PUBLIC_IP_TO_ASSOCIATE" > /pip/ip\n \n # Create the JWT key.\n openssl rand -hex 32 | tr -d "\\n" > /jwt/jwtSecret.hex\n\n # Update permissions on the data volume (if needed).\n chown -R 1000:1000 /data\n\n containers:\n ...\n\n volumes:\n - name: pip\n emptyDir: {}\n - name: jwt\n emptyDir: {}\n - name: besu-data\n persistentVolumeClaim:\n claimName: besu-pvc\n - name: teku-data\n persistentVolumeClaim:\n claimName: teku-pvc\n'})}),"\n",(0,s.jsxs)(n.p,{children:["When you start Besu up in the pod, use the text file in ",(0,s.jsx)(n.code,{children:"pip"})," as your ",(0,s.jsx)(n.code,{children:"p2p-host"}),", which allows\ntraffic in and out as normal."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'template:\n metadata:\n labels:\n ...\n spec:\n hostNetwork: true\n dnsPolicy: ClusterFirstWithHostNet\n affinity: ...\n initContainers:\n - name: init\n image: alpine/curl:8.5.0\n volumeMounts:\n - name: pip\n mountPath: /pip\n - name: shared-jwt\n mountPath: /jwt \n - name: besu-data\n mountPath: /data\n securityContext:\n runAsUser: 0 \n command:\n - /bin/bash\n - -xec\n - |\n # Get the existing public IP to associate with.\n PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip)\n # Store the public IP in a local file to be used by the container.\n echo -ne "$PUBLIC_IP_TO_ASSOCIATE" > /pip/ip\n \n # Create the JWT key.\n openssl rand -hex 32 | tr -d "\\n" > /jwt/jwtSecret.hex\n\n # Update permissions on the data volume (if needed).\n chown -R 1000:1000 /data\n\n containers:\n - name: besu\n image: hyperledger/besu:latest\n volumeMounts:\n - name: pip\n mountPath: /pip\n readOnly: true\n - name: shared-jwt\n mountPath: /jwt \n - name: besu-data\n mountPath: {{ .Values.settings.dataPath }}\n ports:\n - name: elc-rpc\n containerPort: 8545\n protocol: TCP\n - name: elc-ws\n containerPort: 8546\n protocol: TCP\n - name: elc-rlpx\n containerPort: 30303\n protocol: TCP\n - name: elc-discovery\n containerPort: 30303\n protocol: UDP\n - name: elc-metrics\n containerPort: 8545\n protocol: TCP\n - name: elc-engine\n containerPort: 8551\n protocol: TCP \n command:\n - /bin/sh\n - -c\n args:\n - |\n pip=$(cat /pip/ip)\n /opt/besu/bin/besu \\\n --p2p-host=${pip} \\\n ...\n \n - name: teku\n image: consensys/teku:develop\n ...\n\n volumes:\n - name: pip\n emptyDir: {}\n - name: jwt\n emptyDir: {}\n - name: besu-data\n persistentVolumeClaim:\n claimName: besu-pvc\n - name: teku-data\n persistentVolumeClaim:\n claimName: teku-pvc \n'})}),"\n",(0,s.jsx)(n.h2,{id:"azure-aks",children:"Azure AKS"}),"\n",(0,s.jsx)(n.p,{children:"The process for Azure is much the same as that of AWS with a couple of differences."}),"\n",(0,s.jsx)(n.h4,{id:"1-create-a-network-security-group-nsg",children:"1. Create a Network Security Group (NSG)"}),"\n",(0,s.jsxs)(n.p,{children:["Create a NSG with ports ",(0,s.jsx)(n.code,{children:"30303"})," and ",(0,s.jsx)(n.code,{children:"9000"})," (or equivalent) open for TCP and UDP.\nBind this NSG with the subnet you've designated for your Ethereum nodes to ensure that nodes initiated within this subnet will automatically inherit these security rules."]}),"\n",(0,s.jsx)(n.h4,{id:"2-add-a-node-pool-to-your-cluster",children:"2. Add a node pool to your cluster"}),"\n",(0,s.jsx)(n.p,{children:"In Azure all machines get allocated a public IP by default but you need to turn this on for your\nnew node pool."}),"\n",(0,s.jsxs)(n.p,{children:["If you are using ",(0,s.jsx)(n.a,{href:"https://www.terraform.io/",children:"Terraform"}),", use something like the following for your\nnew node pool:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:' node_pools = {\n ...\n ethereum = {\n name = "ethereum"\n vm_size = "Standard_D8as_v5"\n vnet_subnet_id = lookup(module.vnet.vnet_subnets_name_id, "subnet-....") # The ID of the security group from the previous step.\n os_disk_size_gb = 100\n min_count = 1\n max_count = 10\n enable_auto_scaling = true\n enable_node_public_ip = true # This flag lets every node keep its public ip\n enable_host_encryption = true\n node_taints = ["ethereum=true:NoSchedule", "ethereum=true:NoExecute"]\n node_labels = {\n "workloadType" = "ethereum"\n }\n }\n\n ...\n }\n'})}),"\n",(0,s.jsx)(n.h4,{id:"3-use-azure-storageclasses-to-suit-your-needs",children:"3. Use Azure StorageClasses to suit your needs"}),"\n",(0,s.jsxs)(n.p,{children:["We recommend using either Azure Disk or Azure Files to store your chain data\nusing the ",(0,s.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/aks/csi-storage-drivers",children:"CSI storage drivers"}),".\nIf you are using a Terraform to provision your cluster e.g.\n",(0,s.jsx)(n.a,{href:"https://registry.terraform.io/modules/Azure/aks/azurerm/latest",children:"terraform-azurerm-aks"}),"\nthe CSI drivers are provisioned automatically for you."]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(96540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6d0a1147.de68ac01.js b/assets/js/6d0a1147.de68ac01.js new file mode 100644 index 00000000000..e44b9145d2e --- /dev/null +++ b/assets/js/6d0a1147.de68ac01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8573],{78368:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>d});var s=n(74848),a=n(28453),r=n(11470),o=n(19365);const l={title:"Connect to a testnet",sidebar_position:3,Description:"How to connect to a testnet",tags:["public networks"]},i="Connect to a testnet",c={id:"public-networks/get-started/connect/testnet",title:"Connect to a testnet",description:"Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.",source:"@site/docs/public-networks/get-started/connect/testnet.md",sourceDirName:"public-networks/get-started/connect",slug:"/public-networks/get-started/connect/testnet",permalink:"/public-networks/get-started/connect/testnet",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/connect/testnet.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Connect to a testnet",sidebar_position:3,Description:"How to connect to a testnet",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Connect to Mainnet",permalink:"/public-networks/get-started/connect/mainnet"},next:{title:"Migrate to Besu",permalink:"/public-networks/get-started/migrate-to-besu"}},u={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Generate the shared secret",id:"1-generate-the-shared-secret",level:3},{value:"2. Generate validator keys",id:"2-generate-validator-keys",level:3},{value:"3. Start Besu",id:"3-start-besu",level:3},{value:"4. Start the consensus client",id:"4-start-the-consensus-client",level:3},{value:"5. Wait for the clients to sync",id:"5-wait-for-the-clients-to-sync",level:3},{value:"6. Stake ETH",id:"6-stake-eth",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"connect-to-a-testnet",children:"Connect to a testnet"})}),"\n",(0,s.jsxs)(t.p,{children:["Run Besu as an ",(0,s.jsx)(t.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," with any consensus client on the ",(0,s.jsx)(t.a,{href:"https://github.com/eth-clients/holesky",children:"Holesky"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/eth-clients/sepolia",children:"Sepolia"})," testnets."]}),"\n",(0,s.jsxs)(t.p,{children:["If you're using ",(0,s.jsx)(t.a,{href:"https://docs.teku.consensys.net/en/latest/",children:"Teku"})," as a consensus client, you can follow the ",(0,s.jsx)(t.a,{href:"/public-networks/tutorials/besu-teku-testnet",children:"Besu and Teku testnet tutorial"}),"."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["Sepolia is a permissioned network and you can't run a validator client on it without ",(0,s.jsx)(t.a,{href:"https://notes.ethereum.org/zvkfSmYnT0-uxwwEegbCqg",children:"requesting to become a validator"})," first. You can connect your consensus client using the beacon node only, without any validator duties."]})}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu installed"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["A consensus client installed. For example, ",(0,s.jsx)(t.a,{href:"https://docs.teku.consensys.net/en/latest/",children:"Teku"}),"."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,s.jsx)(t.h3,{id:"1-generate-the-shared-secret",children:"1. Generate the shared secret"}),"\n",(0,s.jsx)(t.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'openssl rand -hex 32 | tr -d "\\n" > jwtsecret.hex\n'})}),"\n",(0,s.jsxs)(t.p,{children:["You will specify ",(0,s.jsx)(t.code,{children:"jwtsecret.hex"})," when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/use-engine-api",children:"Engine API"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"2-generate-validator-keys",children:"2. Generate validator keys"}),"\n",(0,s.jsxs)(t.p,{children:["If you're running the consensus client as a beacon node only, skip to the ",(0,s.jsx)(t.a,{href:"#3-start-besu",children:"next step"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["If you're also running the consensus client as a validator client, create a test Ethereum address (you can do this in ",(0,s.jsx)(t.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015289452-How-to-create-an-additional-account-in-your-wallet",children:"MetaMask"}),"). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of ",(0,s.jsx)(t.a,{href:"https://github.com/eth-clients/holesky",children:"Holesky faucets"})," and ",(0,s.jsx)(t.a,{href:"https://github.com/eth-clients/sepolia#meta-data-sepolia",children:"Sepolia faucets"}),"."]}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["If you can't get testnet ETH using the faucet, you can ask for help on the ",(0,s.jsx)(t.a,{href:"https://discord.gg/ethstaker",children:"EthStaker Discord"}),"."]})}),"\n",(0,s.jsxs)(t.p,{children:["Generate validator keys for one or more validators using the ",(0,s.jsx)(t.a,{href:"https://holesky.launchpad.ethereum.org/",children:"Holesky Staking Launchpad"})," (or ",(0,s.jsx)(t.a,{href:"https://notes.ethereum.org/zvkfSmYnT0-uxwwEegbCqg",children:"request to become validator on Sepolia"}),")."]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["Save the password you use to generate each key pair in a ",(0,s.jsx)(t.code,{children:".txt"})," file. You should also have a ",(0,s.jsx)(t.code,{children:".json"})," file for each validator key pair."]})}),"\n",(0,s.jsx)(t.h3,{id:"3-start-besu",children:"3. Start Besu"}),"\n",(0,s.jsxs)(t.p,{children:["Run the following command or specify the options in a ",(0,s.jsx)(t.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),":"]}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Holesky",label:"Holesky",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'besu \\\n --network=holesky \\\n --rpc-http-enabled=true \\\n --rpc-http-host=0.0.0.0 \\\n --rpc-http-cors-origins="*" \\\n --rpc-ws-enabled=true \\\n --rpc-ws-host=0.0.0.0 \\\n --host-allowlist="*" \\\n --engine-host-allowlist="*" \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n'})})}),(0,s.jsx)(o.A,{value:"Sepolia",label:"Sepolia",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'besu \\\n --network=sepolia \\\n --rpc-http-enabled=true \\\n --rpc-http-host=0.0.0.0 \\\n --rpc-http-cors-origins="*" \\\n --rpc-ws-enabled=true \\\n --rpc-ws-host=0.0.0.0 \\\n --host-allowlist="*" \\\n --engine-host-allowlist="*" \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n'})})})]}),"\n",(0,s.jsxs)(t.p,{children:["Specify the path to the ",(0,s.jsx)(t.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(t.a,{href:"#1-generate-the-shared-secret",children:"step 1"})," using the ",(0,s.jsx)(t.a,{href:"/public-networks/reference/cli/options#engine-jwt-secret",children:(0,s.jsx)(t.code,{children:"--engine-jwt-secret"})})," option."]}),"\n",(0,s.jsxs)(t.p,{children:["You can modify the option values and add other ",(0,s.jsx)(t.a,{href:"/public-networks/reference/cli/options",children:"command line options"})," as needed."]}),"\n",(0,s.jsx)(t.h3,{id:"4-start-the-consensus-client",children:"4. Start the consensus client"}),"\n",(0,s.jsx)(t.p,{children:"Refer to your consensus client documentation to configure and start the consensus client."}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"If you're running a validator client, make sure you set a fee recipient address."})}),"\n",(0,s.jsxs)(t.p,{children:["If you're using Teku, follow the ",(0,s.jsx)(t.a,{href:"/public-networks/tutorials/besu-teku-testnet#5-start-teku",children:"Besu and Teku testnet tutorial"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"5-wait-for-the-clients-to-sync",children:"5. Wait for the clients to sync"}),"\n",(0,s.jsx)(t.p,{children:"After starting Besu and the consensus client, your node starts syncing and connecting to peers."}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Besu logs",label:"Besu logs",default:!0,children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'{"@timestamp":"2023-02-03T04:43:49,555","level":"INFO","thread":"main","class":"DefaultSynchronizer","message":"Starting synchronizer.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,556","level":"INFO","thread":"main","class":"FastSyncDownloader","message":"Starting sync","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,559","level":"INFO","thread":"main","class":"Runner","message":"Ethereum main loop is up.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:53,106","level":"INFO","thread":"Timer-0","class":"DNSResolver","message":"Resolved 2409 nodes","throwable":""}\n{"@timestamp":"2023-02-03T04:45:04,803","level":"INFO","thread":"nioEventLoopGroup-3-10","class":"SnapWorldStateDownloader","message":"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36\ncb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0","throwable":""}\n{"@timestamp":"2023-02-03T04:46:04,834","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.08%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:48:01,840","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.23%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:49:09,931","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.41%, Peer count: 11","throwable":""}\n{"@timestamp":"2023-02-03T04:50:12,466","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.61%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:20,977","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.75%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:28,985","level":"INFO","thread":"EthScheduler-Services-29 (importBlock)","class":"FastImportBlocksStep","message":"Block import progress: 180400 of 16545859 (1%)","throwable":""}\n'})})}),(0,s.jsx)(o.A,{value:"Teku logs",label:"Teku logs",children:(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8\n2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10\n2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8\n2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6\n2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9\n"})})})]}),"\n",(0,s.jsx)(t.p,{children:"If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. This can take several days."}),"\n",(0,s.jsx)(t.h3,{id:"6-stake-eth",children:"6. Stake ETH"}),"\n",(0,s.jsxs)(t.p,{children:["Stake your testnet ETH for one or more validators using the ",(0,s.jsx)(t.a,{href:"https://holesky.launchpad.ethereum.org/",children:"Holesky Staking Launchpad"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["You can check your validator status by searching your Ethereum address on the ",(0,s.jsx)(t.a,{href:"https://holesky.beaconcha.in/",children:"Holesky Beacon Chain explorer"}),". It may take up to multiple days for your validator to be activated and start proposing blocks."]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},19365:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(18215);const a={tabItem:"tabItem_Ymn6"};var r=n(74848);function o(e){let{children:t,hidden:n,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(a.tabItem,o),hidden:n,children:t})}},11470:(e,t,n)=>{n.d(t,{A:()=>j});var s=n(96540),a=n(18215),r=n(23104),o=n(56347),l=n(205),i=n(57485),c=n(31682),u=n(70679);function d(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:n,attributes:s,default:a}}=e;return{value:t,label:n,attributes:s,default:a}}))}(n);return function(e){const t=(0,c.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function p(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function g(e){let{queryString:t=!1,groupId:n}=e;const a=(0,o.W6)(),r=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,i.aZ)(r),(0,s.useCallback)((e=>{if(!r)return;const t=new URLSearchParams(a.location.search);t.set(r,e),a.replace({...a.location,search:t.toString()})}),[r,a])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,r=h(e),[o,i]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!p({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const s=n.find((e=>e.default))??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:r}))),[c,d]=g({queryString:n,groupId:a}),[b,m]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,r]=(0,u.Dv)(n);return[a,(0,s.useCallback)((e=>{n&&r.set(e)}),[n,r])]}({groupId:a}),f=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,l.A)((()=>{f&&i(f)}),[f]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,r]),tabValues:r}}var m=n(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=n(74848);function y(e){let{className:t,block:n,selectedValue:s,selectValue:o,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.a_)(),u=e=>{const t=e.currentTarget,n=i.indexOf(t),a=l[n].value;a!==s&&(c(t),o(a))},d=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":n},t),children:l.map((e=>{let{value:t,label:n,attributes:r}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,ref:e=>i.push(e),onKeyDown:d,onClick:u,...r,className:(0,a.A)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":s===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:r}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=b(e);return(0,x.jsxs)("div",{className:(0,a.A)("tabs-container",f.tabList),children:[(0,x.jsx)(y,{...t,...e}),(0,x.jsx)(v,{...t,...e})]})}function j(e){const t=(0,m.A)();return(0,x.jsx)(w,{...e,children:d(e.children)},String(t))}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var s=n(96540);const a={},r=s.createContext(a);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e493491.b4f3819f.js b/assets/js/6e493491.b4f3819f.js new file mode 100644 index 00000000000..165ebdc1555 --- /dev/null +++ b/assets/js/6e493491.b4f3819f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9670],{22876:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>o,toc:()=>d});var s=i(74848),t=i(28453);const n={title:"Plugin API interfaces",sidebar_position:4,description:"Plugin interfaces",tags:["private networks"]},l="Plugin API interfaces",o={id:"private-networks/reference/plugin-api-interfaces",title:"Plugin API interfaces",description:"Plugin interfaces",source:"@site/docs/private-networks/reference/plugin-api-interfaces.md",sourceDirName:"private-networks/reference",slug:"/private-networks/reference/plugin-api-interfaces",permalink:"/private-networks/reference/plugin-api-interfaces",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/plugin-api-interfaces.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Plugin API interfaces",sidebar_position:4,description:"Plugin interfaces",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Accounts for testing",permalink:"/private-networks/reference/accounts-for-testing"},next:{title:"Chatbot",permalink:"/private-networks/chatbot"}},c={},d=[{value:"Core plugin classes",id:"core-plugin-classes",level:2},{value:"Plugin services",id:"plugin-services",level:2}];function a(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"plugin-api-interfaces",children:"Plugin API interfaces"})}),"\n",(0,s.jsxs)(r.p,{children:["API interfaces in Besu allow users to ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/plugins",children:"build plugins"})," to extend Besu functionality."]}),"\n",(0,s.jsxs)(r.p,{children:["For more information about the available interfaces, see the ",(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/index.html",children:"Plugin API Javadoc"}),"."]}),"\n",(0,s.jsx)(r.admonition,{title:"Javadoc issue",type:"note",children:(0,s.jsx)(r.p,{children:"The plugin API documentation is currently not being updated. We're working on a fix, but in the meantime, some links are temporarily pointing to wiki.hyperledger.org."})}),"\n",(0,s.jsx)(r.h2,{id:"core-plugin-classes",children:"Core plugin classes"}),"\n",(0,s.jsx)(r.p,{children:"The following table lists the interfaces providing core plugin classes."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Interface"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://wiki.hyperledger.org/display/BESU/BesuContext",children:(0,s.jsx)(r.strong,{children:"BesuContext"})})}),(0,s.jsx)(r.td,{children:"Allows plugins to access Besu services."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/BesuPlugin.html",children:(0,s.jsx)(r.strong,{children:"BesuPlugin"})})}),(0,s.jsx)(r.td,{children:"Used to manage the plugin lifecycle."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"plugin-services",children:"Plugin services"}),"\n",(0,s.jsx)(r.p,{children:"The following table lists interfaces providing services you can retrieve."}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Interface"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/BesuEvents.html",children:(0,s.jsx)(r.strong,{children:"BesuEvents"})})}),(0,s.jsx)(r.td,{children:"Allows plugins to attach to events during Besu operation."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/BesuConfiguration.html",children:(0,s.jsx)(r.strong,{children:"BesuConfiguration"})})}),(0,s.jsx)(r.td,{children:"Provides file system locations of Besu's storage."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/query/IbftQueryService.html",children:(0,s.jsx)(r.strong,{children:"IbftQueryService"})})}),(0,s.jsx)(r.td,{children:"Allows query of the IBFT 2.0 aspects of the blockchain."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/metrics/MetricCategoryRegistry.html",children:(0,s.jsx)(r.strong,{children:"MetricCategoryRegistry"})})}),(0,s.jsx)(r.td,{children:"Adds a new metrics category to the CLI."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/MetricsSystem.html",children:(0,s.jsx)(r.strong,{children:"MetricsSystem"})})}),(0,s.jsx)(r.td,{children:"Register metrics with the Prometheus endpoint."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/query/PoaQueryService.html",children:(0,s.jsx)(r.strong,{children:"PoaQueryService"})})}),(0,s.jsx)(r.td,{children:"Query the current state of Clique and IBFT 2.0 consensus protocols."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/PicoCLIOptions.html",children:(0,s.jsx)(r.strong,{children:"PicoCLIOptions"})})}),(0,s.jsx)(r.td,{children:"Adds CLI commands to the Besu command line."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/SecurityModuleService.html",children:(0,s.jsx)(r.strong,{children:"SecurityModuleService"})})}),(0,s.jsx)(r.td,{children:"Allows plugins to register a security module."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/org/hyperledger/besu/plugin/services/StorageService.html",children:(0,s.jsx)(r.strong,{children:"StorageService"})})}),(0,s.jsx)(r.td,{children:"Allows plugins to register as a storage engine. For example, to connect to a hardware security module (HSM)."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://wiki.hyperledger.org/display/BESU/PermissioningService",children:(0,s.jsx)(r.strong,{children:"PermissioningService"})})}),(0,s.jsx)(r.td,{children:"Allows for fine grain control of node connection and node messaging permissioning."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://wiki.hyperledger.org/display/BESU/PrivacyPluginService",children:(0,s.jsx)(r.strong,{children:"PrivacyPluginService"})})}),(0,s.jsxs)(r.td,{children:["Provides a way to define how ",(0,s.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transactions"})," are created, and what private genesis to use."]})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"https://wiki.hyperledger.org/display/BESU/RpcEndpointService",children:(0,s.jsx)(r.strong,{children:"RpcEndpointService"})})}),(0,s.jsx)(r.td,{children:"Register custom RPC endpoints."})]})]})]}),"\n",(0,s.jsxs)(r.p,{children:["To use the interfaces in your plugin, ensure the ",(0,s.jsx)(r.a,{href:"https://github.com/ConsenSys/PluginsAPIDemo/blob/957628b3c6f533f3c3f405e2a17e369cd1f02c31/build.gradle",children:"Gradle build file"})," contains the ",(0,s.jsx)(r.code,{children:"https://hyperledger.jfrog.io/hyperledger/besu-maven"})," repository and the ",(0,s.jsx)(r.code,{children:"plugin-api"})," dependency."]}),"\n",(0,s.jsxs)(r.admonition,{title:"Known issue",type:"warning",children:[(0,s.jsxs)(r.p,{children:["As indicated in ",(0,s.jsx)(r.a,{href:"https://github.com/hyperledger/besu-docs/issues/406",children:"issue #406"}),", plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage."]}),(0,s.jsxs)(r.p,{children:["It's in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the ",(0,s.jsx)(r.code,{children:"register"})," step and store it in memory."]}),(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"start"})," step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available."]})]})]})}function h(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>l,x:()=>o});var s=i(96540);const t={},n=s.createContext(t);function l(e){const r=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ea682ce.33f2b314.js b/assets/js/6ea682ce.33f2b314.js new file mode 100644 index 00000000000..5c4c878eb02 --- /dev/null +++ b/assets/js/6ea682ce.33f2b314.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7019],{48296:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>h});var s=i(74848),r=i(28453),t=i(11470),o=i(19365);const l={title:"Clique",description:"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation",sidebar_position:4,path:"blob/master/config/src/main/resources/",source:"rinkeby.json",tags:["private networks"]},c="Configure Clique consensus",a={id:"private-networks/how-to/configure/consensus/clique",title:"Clique",description:"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation",source:"@site/docs/private-networks/how-to/configure/consensus/clique.md",sourceDirName:"private-networks/how-to/configure/consensus",slug:"/private-networks/how-to/configure/consensus/clique",permalink:"/private-networks/how-to/configure/consensus/clique",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/consensus/clique.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Clique",description:"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation",sidebar_position:4,path:"blob/master/config/src/main/resources/",source:"rinkeby.json",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"IBFT 2.0",permalink:"/private-networks/how-to/configure/consensus/ibft"},next:{title:"Add and remove validators without voting",permalink:"/private-networks/how-to/configure/consensus/add-validators-without-voting"}},d={},h=[{value:"Genesis file",id:"genesis-file",level:2},{value:"Skip empty blocks",id:"skip-empty-blocks",level:3},{value:"Extra data",id:"extra-data",level:3},{value:"One initial signer",id:"one-initial-signer",level:3},{value:"Two initial signers",id:"two-initial-signers",level:3},{value:"Post-Merge configuration",id:"post-merge-configuration",level:3},{value:"Connect to a Clique network",id:"connect-to-a-clique-network",level:2},{value:"Add and remove signers",id:"add-and-remove-signers",level:2},{value:"Add a signer",id:"add-a-signer",level:3},{value:"Remove a signer",id:"remove-a-signer",level:3},{value:"Epoch transition",id:"epoch-transition",level:3},{value:"Transitions",id:"transitions",level:2},{value:"Configure block time on an existing network",id:"configure-block-time-on-an-existing-network",level:3},{value:"Configure empty blocks on an existing network",id:"configure-empty-blocks-on-an-existing-network",level:3},{value:"Limitations",id:"limitations",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"configure-clique-consensus",children:"Configure Clique consensus"})}),"\n",(0,s.jsxs)(n.p,{children:["Besu implements the ",(0,s.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-225",children:"Clique"})," proof of authority (PoA) ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/",children:"consensus protocol"}),". Private networks can use Clique."]}),"\n",(0,s.jsx)(n.admonition,{type:"danger",children:(0,s.jsx)(n.p,{children:"Clique is not suitable for production environments. Use only in development environments."})}),"\n",(0,s.jsxs)(n.p,{children:["In Clique networks, approved accounts, known as signers, validate transactions and blocks. Signers take turns to create the next block. Existing signers propose and vote to ",(0,s.jsx)(n.a,{href:"#add-and-remove-signers",children:"add or remove signers"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/clique",children:"create a private network using Clique"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"genesis-file",children:"Genesis file"}),"\n",(0,s.jsxs)(n.p,{children:["To use Clique in a private network, Besu requires a Clique ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"A Clique genesis file defines properties specific to Clique."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:'title="Example Clique genesis file"',children:'{\n "config": {\n "chainId": 1981,\n "berlinBlock": 0,\n "clique": {\n "blockperiodseconds": 15,\n "epochlength": 30000,\n "createemptyblocks": true\n }\n },\n "coinbase": "0x0000000000000000000000000000000000000000",\n "difficulty": "0x1",\n "extraData": "0x000000000000000000000000000000000000000000000000000000000000000001a54556254bfa3db2daa7673435ec63649925c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "gasLimit": "0x1fffffffffffff",\n "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "nonce": "0x0",\n "timestamp": "0x5c51a607",\n "alloc": {},\n "number": "0x0",\n "gasUsed": "0x0",\n "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"The properties specific to Clique are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"blockperiodseconds"})," - The block time, in seconds."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"epochlength"})," - The number of blocks after which to reset all votes."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"createemptyblocks"})," - Set to false to ",(0,s.jsx)(n.a,{href:"#skip-empty-blocks",children:"skip creating empty blocks"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"extraData"})," - ",(0,s.jsx)(n.a,{href:"#extra-data",children:"Extra data"})," including the initial signers."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"skip-empty-blocks",children:"Skip empty blocks"}),"\n",(0,s.jsx)(n.p,{children:"By default, Clique creates empty blocks. For large private networks using Clique, skipping empty blocks can reduce the storage needed."}),"\n",(0,s.jsxs)(n.p,{children:["To skip creating empty blocks, set ",(0,s.jsx)(n.code,{children:"createemptyblocks"})," to ",(0,s.jsx)(n.code,{children:"false"})," in the genesis file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "londonBlock": 0,\n "clique": {\n "blockperiodseconds": 10,\n "epochlength": 30000,\n "createemptyblocks": false\n }\n },\n...\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["All validators must have the same value for ",(0,s.jsx)(n.code,{children:"createemptyblocks"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"extra-data",children:"Extra data"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"extraData"})," property consists of:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"0x prefix."}),"\n",(0,s.jsx)(n.li,{children:"32 bytes of vanity data."}),"\n",(0,s.jsx)(n.li,{children:"A list of initial signer addresses (at least one initial signer is required). 20 bytes for each signer."}),"\n",(0,s.jsx)(n.li,{children:"65 bytes for the proposer signature. In the genesis block there is no initial proposer, so the proposer signature is all zeros."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"one-initial-signer",children:"One initial signer"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"One Initial Signer",src:i(41081).A+"",width:"1376",height:"586"})}),"\n",(0,s.jsx)(n.h3,{id:"two-initial-signers",children:"Two initial signers"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Two Initial Signers",src:i(55500).A+"",width:"1376",height:"678"})}),"\n",(0,s.jsx)(n.h3,{id:"post-merge-configuration",children:"Post-Merge configuration"}),"\n",(0,s.jsxs)(n.p,{children:["After ",(0,s.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/merge/",children:"The Merge"}),", the following block fields are modified or deprecated. Their fields ",(0,s.jsx)(n.strong,{children:"must"})," contain only the constant values from the following chart."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Field"}),(0,s.jsx)(n.th,{children:"Constant value"}),(0,s.jsx)(n.th,{children:"Comment"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"ommersHash"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"= Keccak256(RLP([]))"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"difficulty"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0"})}),(0,s.jsxs)(n.td,{children:["Replaced with ",(0,s.jsx)(n.code,{children:"prevrandao"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"mixHash"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0x0000000000000000000000000000000000000000000000000000000000000000"})}),(0,s.jsxs)(n.td,{children:["Replaced with ",(0,s.jsx)(n.code,{children:"prevrandao"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"nonce"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"0x0000000000000000"})}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.code,{children:"ommers"})})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"[]"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"RLP([]) = 0xc0"})})]})]})]}),"\n",(0,s.jsxs)(n.p,{children:["Additionally, ",(0,s.jsx)(n.a,{href:"#extra-data",children:(0,s.jsx)(n.code,{children:"extraData"})})," is limited to 32 bytes of vanity data after The Merge."]}),"\n",(0,s.jsx)(n.h2,{id:"connect-to-a-clique-network",children:"Connect to a Clique network"}),"\n",(0,s.jsxs)(n.p,{children:["To start a node on a Clique private network, use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,s.jsx)(n.code,{children:"--genesis-file"})})," option to specify the custom genesis file."]}),"\n",(0,s.jsx)(n.h2,{id:"add-and-remove-signers",children:"Add and remove signers"}),"\n",(0,s.jsxs)(n.p,{children:["Existing signers propose and vote to add or remove validators using the Clique JSON-RPC API methods. Enable the HTTP interface with ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-http-enabled"})})," or the WebSocket interface with ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-ws-enabled"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The Clique API methods are disabled by default. To enable them, specify the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,s.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,s.jsx)(n.code,{children:"--rpc-ws-api"})})," option and include ",(0,s.jsx)(n.code,{children:"CLIQUE"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The methods to add or remove signers are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_propose",children:(0,s.jsx)(n.code,{children:"clique_propose"})}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_getsigners",children:(0,s.jsx)(n.code,{children:"clique_getSigners"})}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_discard",children:(0,s.jsx)(n.code,{children:"clique_discard"})}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To view signer metrics for a specified block range, call ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_getsignermetrics",children:(0,s.jsx)(n.code,{children:"clique_getSignerMetrics"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"add-a-signer",children:"Add a signer"}),"\n",(0,s.jsxs)(n.p,{children:["To propose adding a signer to a Clique network, call ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_propose",children:(0,s.jsx)(n.code,{children:"clique_propose"})}),", specifying the address of the proposed signer and ",(0,s.jsx)(n.code,{children:"true"}),". A majority of signers must execute the call."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC clique_propose request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,s.jsx)(n.p,{children:"When the signer creates the next block, the signer adds a vote to the block for the proposed signer."}),"\n",(0,s.jsx)(n.p,{children:"When more than 50% of the existing signers propose adding the signer, with their votes distributed in blocks, the signer can begin signing blocks."}),"\n",(0,s.jsxs)(n.p,{children:["To return a list of signers and confirm the addition of a proposed signer, call ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_getsigners",children:(0,s.jsx)(n.code,{children:"clique_getSigners"})}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC clique_getSigners request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,s.jsxs)(n.p,{children:["To discard your proposal after confirming the addition of a signer, call ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_discard",children:(0,s.jsx)(n.code,{children:"clique_discard"})})," specifying the address of the proposed signer."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC clique_discard request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,s.jsx)(n.h3,{id:"remove-a-signer",children:"Remove a signer"}),"\n",(0,s.jsxs)(n.p,{children:["The process for removing a signer from a Clique network is the same as ",(0,s.jsx)(n.a,{href:"#add-a-signer",children:"adding a signer"}),", except you specify ",(0,s.jsx)(n.code,{children:"false"})," as the second parameter of ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#clique_propose",children:(0,s.jsx)(n.code,{children:"clique_propose"})}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"epoch-transition",children:"Epoch transition"}),"\n",(0,s.jsx)(n.p,{children:"At each epoch transition, Clique discards all pending votes collected from received blocks. Existing proposals remain in effect and signers re-add their vote the next time they create a block."}),"\n",(0,s.jsxs)(n.p,{children:["Define the number of blocks between epoch transitions in the ",(0,s.jsx)(n.a,{href:"#genesis-file",children:"Clique genesis file"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"transitions",children:"Transitions"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"transitions"})," genesis configuration item allows you to specify a future block number at which to\nchange the Clique network configuration in an existing network.\nFor example, you can update the ",(0,s.jsx)(n.a,{href:"#configure-block-time-on-an-existing-network",children:"block time"})," and\nwhether to ",(0,s.jsx)(n.a,{href:"#configure-empty-blocks-on-an-existing-network",children:"create empty blocks"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Do not specify a transition block in the past.\nSpecifying a transition block in the past can result in unexpected behavior, such as causing the\nnetwork to fork."})}),"\n",(0,s.jsx)(n.h3,{id:"configure-block-time-on-an-existing-network",children:"Configure block time on an existing network"}),"\n",(0,s.jsxs)(n.p,{children:["To update an existing network with a new ",(0,s.jsx)(n.code,{children:"blockperiodseconds"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,s.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change ",(0,s.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"<NewValue>"})," is the updated value for ",(0,s.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.A,{children:[(0,s.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "clique": {\n "blockperiodseconds": 3,\n "epochlength": 30,\n "requesttimeoutseconds": 6,\n "createemptyblocks": true\n },\n "transitions": {\n "clique": [\n {\n "block": <FutureBlockNumber>,\n "blockperiodseconds": <NewValue>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,s.jsx)(o.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "clique": {\n "blockperiodseconds": 3,\n "epochlength": 30,\n "requesttimeoutseconds": 6,\n "createemptyblocks": true\n },\n "transitions": {\n "clique": [\n {\n "block": 3,\n "blockperiodseconds": 1\n },\n {\n "block": 6,\n "blockperiodseconds": 2\n },\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To verify the changes after the transition block, view the Besu logs and check that the time\ndifference between each block matches the updated block period."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configure-empty-blocks-on-an-existing-network",children:"Configure empty blocks on an existing network"}),"\n",(0,s.jsxs)(n.p,{children:["To update an existing network with a new ",(0,s.jsx)(n.a,{href:"#skip-empty-blocks",children:(0,s.jsx)(n.code,{children:"createemptyblocks"})}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,s.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change ",(0,s.jsx)(n.code,{children:"createemptyblocks"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"<NewValue>"})," is the updated value for ",(0,s.jsx)(n.code,{children:"createemptyblocks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.A,{children:[(0,s.jsx)(o.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "clique": {\n "blockperiodseconds": 3,\n "epochlength": 30,\n "requesttimeoutseconds": 6,\n "createemptyblocks": true\n },\n "transitions": {\n "clique": [\n {\n "block": <FutureBlockNumber>,\n "createemptyblocks": <NewValue>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,s.jsx)(o.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "clique": {\n "blockperiodseconds": 3,\n "epochlength": 30,\n "requesttimeoutseconds": 6,\n "createemptyblocks": true\n },\n "transitions": {\n "clique": [\n {\n "block": 10,\n "createemptyblocks": false\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,s.jsx)(n.p,{children:"In Clique, blocks created by in-turn validators are published immediately. Out-of-turn validators create blocks that are published after a short delay. In-turn blocks have a higher difficulty than out-of-turn blocks, which allows small forks to resolve to the chain with more in-turn blocks."}),"\n",(0,s.jsx)(n.p,{children:"However, when the out-of-turn delay is shorter than the block propagation delay, out-of-turn blocks may be published before in-turn blocks. This may cause large, irresolvable forks in a network."}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["We recommend using a more updated consensus protocol such as ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," or ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"}),"."]})})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},19365:(e,n,i)=>{i.d(n,{A:()=>o});i(96540);var s=i(18215);const r={tabItem:"tabItem_Ymn6"};var t=i(74848);function o(e){let{children:n,hidden:i,className:o}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,o),hidden:i,children:n})}},11470:(e,n,i)=>{i.d(n,{A:()=>w});var s=i(96540),r=i(18215),t=i(23104),o=i(56347),l=i(205),c=i(57485),a=i(31682),d=i(70679);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:i}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:i,attributes:s,default:r}}=e;return{value:n,label:i,attributes:s,default:r}}))}(i);return function(e){const n=(0,a.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,i])}function p(e){let{value:n,tabValues:i}=e;return i.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:i}=e;const r=(0,o.W6)(),t=function(e){let{queryString:n=!1,groupId:i}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!i)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return i??null}({queryString:n,groupId:i});return[(0,c.aZ)(t),(0,s.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})}),[t,r])]}function f(e){const{defaultValue:n,queryString:i=!1,groupId:r}=e,t=u(e),[o,c]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:i}=e;if(0===i.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:i}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${i.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=i.find((e=>e.default))??i[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:t}))),[a,h]=x({queryString:i,groupId:r}),[f,g]=function(e){let{groupId:n}=e;const i=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,t]=(0,d.Dv)(i);return[r,(0,s.useCallback)((e=>{i&&t.set(e)}),[i,t])]}({groupId:r}),j=(()=>{const e=a??f;return p({value:e,tabValues:t})?e:null})();(0,l.A)((()=>{j&&c(j)}),[j]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),g(e)}),[h,g,t]),tabValues:t}}var g=i(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=i(74848);function b(e){let{className:n,block:i,selectedValue:s,selectValue:o,tabValues:l}=e;const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,t.a_)(),d=e=>{const n=e.currentTarget,i=c.indexOf(n),r=l[i].value;r!==s&&(a(n),o(r))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const i=c.indexOf(e.currentTarget)+1;n=c[i]??c[0];break}case"ArrowLeft":{const i=c.indexOf(e.currentTarget)-1;n=c[i]??c[c.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":i},n),children:l.map((e=>{let{value:n,label:i,attributes:t}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>c.push(e),onKeyDown:h,onClick:d,...t,className:(0,r.A)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":s===n}),children:i??n},n)}))})}function k(e){let{lazy:n,children:i,selectedValue:t}=e;const o=(Array.isArray(i)?i:[i]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===t));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function v(e){const n=f(e);return(0,m.jsxs)("div",{className:(0,r.A)("tabs-container",j.tabList),children:[(0,m.jsx)(b,{...n,...e}),(0,m.jsx)(k,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,m.jsx)(v,{...e,children:h(e.children)},String(n))}},41081:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/CliqueOneIntialSigner-3b59001d390fc935c2852c8506507a5a.png"},55500:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/CliqueTwoIntialSigners-a347015db38fec2d68ff5e188b66deaa.png"},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var s=i(96540);const r={},t=s.createContext(r);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ec2af53.ce63d27b.js b/assets/js/6ec2af53.ce63d27b.js new file mode 100644 index 00000000000..c8b57fb93b6 --- /dev/null +++ b/assets/js/6ec2af53.ce63d27b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6626],{29329:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Tutorials","slug":"private-networks/tutorials","permalink":"/private-networks/tutorials","sidebar":"privateDocSidebar","navigation":{"previous":{"title":"Plugins","permalink":"/private-networks/concepts/plugins"},"next":{"title":"Quorum Developer Quickstart","permalink":"/private-networks/tutorials/quickstart"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/714c5be8.16fbbdd7.js b/assets/js/714c5be8.16fbbdd7.js new file mode 100644 index 00000000000..c41a81d8b9a --- /dev/null +++ b/assets/js/714c5be8.16fbbdd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8814],{86670:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=n(74848),s=n(28453);const i={sidebar_position:2,title:"Use Ansible",description:"Deploying Besu with Ansible role on Galaxy",tags:["private networks"]},r="Deploy Besu with Ansible",a={id:"private-networks/how-to/deploy/ansible",title:"Use Ansible",description:"Deploying Besu with Ansible role on Galaxy",source:"@site/docs/private-networks/how-to/deploy/ansible.md",sourceDirName:"private-networks/how-to/deploy",slug:"/private-networks/how-to/deploy/ansible",permalink:"/private-networks/how-to/deploy/ansible",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/deploy/ansible.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Use Ansible",description:"Deploying Besu with Ansible role on Galaxy",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Deploy to the cloud",permalink:"/private-networks/how-to/deploy/cloud"},next:{title:"Use Kubernetes",permalink:"/private-networks/how-to/deploy/kubernetes"}},l={},p=[];function d(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"deploy-besu-with-ansible",children:"Deploy Besu with Ansible"})}),"\n",(0,o.jsxs)(t.p,{children:["To deploy Besu using Ansible, use the ",(0,o.jsx)(t.a,{href:"https://galaxy.ansible.com/consensys/hyperledger_besu",children:"Besu role"})," published on Galaxy."]}),"\n",(0,o.jsxs)(t.p,{children:['For more information, see the "Read Me" button on the ',(0,o.jsx)(t.a,{href:"https://galaxy.ansible.com/consensys/hyperledger_besu",children:"Ansible Galaxy Besu page"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"We strongly recommend automating network creation. Automating makes updates easier and ensures your configuration is synchronized across the network."})})]})}function c(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var o=n(96540);const s={},i=o.createContext(s);function r(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/715197f0.9996b344.js b/assets/js/715197f0.9996b344.js new file mode 100644 index 00000000000..9d95c98340a --- /dev/null +++ b/assets/js/715197f0.9996b344.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5487],{16677:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var r=t(74848),i=t(28453);const s={title:"Private transaction processing",sidebar_position:1,description:"Private transaction processing"},a="Private transaction processing",c={id:"private-networks/concepts/privacy/private-transactions/processing",title:"Private transaction processing",description:"Private transaction processing",source:"@site/docs/private-networks/concepts/privacy/private-transactions/processing.md",sourceDirName:"private-networks/concepts/privacy/private-transactions",slug:"/private-networks/concepts/privacy/private-transactions/processing",permalink:"/private-networks/concepts/privacy/private-transactions/processing",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/private-transactions/processing.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Private transaction processing",sidebar_position:1,description:"Private transaction processing"},sidebar:"privateDocSidebar",previous:{title:"Private transactions",permalink:"/private-networks/concepts/privacy/private-transactions/"},next:{title:"Privacy groups",permalink:"/private-networks/concepts/privacy/privacy-groups"}},o={},p=[];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"private-transaction-processing",children:"Private transaction processing"})}),"\n",(0,r.jsxs)(n.p,{children:["Processing ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:"private transactions"})," involves the following:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Precompiled contract"}),": A smart contract compiled from the source language to EVM bytecode and stored by an Ethereum node for later execution."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Privacy marker transaction (PMT)"}),": A public Ethereum transaction with a payload of the enclave key. The enclave key is a pointer to the private transaction in Tessera. The ",(0,r.jsx)(n.code,{children:"to"})," attribute of the PMT is the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#priv_getprivacyprecompileaddress",children:"address of the privacy precompiled contract"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The PMT is ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/sign-pmts",children:"signed with a random key or the key specified on the command line"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Private transaction processing is illustrated and described in the following diagram."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Processing Private Transactions",src:t(10457).A+"",width:"2244",height:"2062"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Submit a private transaction using ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eea_sendRawTransaction"})}),". The signed transaction includes transaction parameters specific to private transactions, including:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"privateFor"})," or ",(0,r.jsx)(n.code,{children:"privacyGroupId"}),", which specifies the list of recipients."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"privateFrom"}),", which specifies the sender."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"restriction"}),", which specifies the transaction is restricted to the transaction participants."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The JSON-RPC endpoint passes the private transaction to the Private Transaction Handler."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The Private Transaction Handler sends the private transaction to Tessera."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Tessera distributes the private transaction directly (that is, point-to-point) to the Tessera nodes specified in ",(0,r.jsx)(n.code,{children:"privateFor"})," or belonging to the privacy group identified by ",(0,r.jsx)(n.code,{children:"privacyGroupId"}),". All recipient Tessera nodes store the transaction. Tessera associates the stored transaction with the transaction hash and privacy group ID."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Tessera returns the transaction hash to the Private Transaction Handler."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The Private Transaction Handler creates a PMT for the private transaction. The Private Transaction Handler propagates the PMT using devP2P in the same way as any other public Ethereum transaction."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["If you want to sign the PMT outside of Besu, use ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/private-transactions#priv_distributerawtransaction",children:(0,r.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Besu mines the PMT into a block and the PMT is distributed to all Ethereum nodes in the network."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The Mainnet Transaction Processor processes the PMT in the same way as any other public transaction. On nodes containing the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#priv_getprivacyprecompileaddress",children:"privacy precompile contract"})," specified in the ",(0,r.jsx)(n.code,{children:"to"})," attribute of the PMT, the Mainnet Transaction Processor passes the PMT to the privacy precompile contract."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Nodes receiving the PMT that don't contain the privacy precompile contract ignore the PMT."})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The privacy precompile contract queries Tessera for the private transaction and privacy group ID using the transaction hash."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The privacy precompile contract passes the private transaction to the Private Transaction Processor. The privacy group ID specifies the private world state to use."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The Private Transaction Processor executes the transaction. The Private Transaction Processor can read and write to the private world state, and read from the public world state."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"Recommendations",type:"danger",children:[(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["We recommend using a network with a consensus mechanism supporting transaction finality. For example, ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Tessera must be ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/tessera",children:"highly available and run in a separate instance to Besu"}),"."]}),"\n"]}),(0,r.jsxs)(n.p,{children:["Using private transactions with ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#pruning",children:"pruning"})," or ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"fast sync"})," is not supported."]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},10457:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/PrivateTransactionProcessing-777f8e3007f496f2e621e965fb54dcd0.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>c});var r=t(96540);const i={},s=r.createContext(i);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/71635f7b.913be7fe.js b/assets/js/71635f7b.913be7fe.js new file mode 100644 index 00000000000..4d5e7191c0b --- /dev/null +++ b/assets/js/71635f7b.913be7fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3108],{74449:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var r=n(74848),s=n(28453);const o={title:"Production",sidebar_position:6,description:"Deploying Besu Helm Charts for production on a Kubernetes cluster",tags:["private networks"]},i="Deploy for production",a={id:"private-networks/tutorials/kubernetes/production",title:"Production",description:"Deploying Besu Helm Charts for production on a Kubernetes cluster",source:"@site/docs/private-networks/tutorials/kubernetes/production.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/production",permalink:"/private-networks/tutorials/kubernetes/production",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/production.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Production",sidebar_position:6,description:"Deploying Besu Helm Charts for production on a Kubernetes cluster",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Maintenance",permalink:"/private-networks/tutorials/kubernetes/maintenance"},next:{title:"Configure Kubernetes mode in NAT manager",permalink:"/private-networks/tutorials/kubernetes/nat-manager"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Overview",id:"overview",level:2},{value:"Deploy",id:"deploy",level:2},{value:"Check that you can connect to the cluster with <code>kubectl</code>",id:"check-that-you-can-connect-to-the-cluster-with-kubectl",level:3},{value:"Deploy the network",id:"deploy-the-network",level:3},{value:"Best practices",id:"best-practices",level:2},{value:"Multi-cluster support",id:"multi-cluster-support",level:2}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"deploy-for-production",children:"Deploy for production"})}),"\n",(0,r.jsx)(t.p,{children:"You can deploy Besu for production on a Kubernetes cluster."}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Clone the ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository"]}),"\n",(0,r.jsxs)(t.li,{children:["A ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"running Kubernetes cluster"})]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://kubernetes.io/docs/tasks/tools/",children:"Kubectl"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm3"})}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(t.p,{children:["To get things production-ready, we'll use the same charts, and set a few of the values in the ",(0,r.jsx)(t.code,{children:"cluster"})," map as in the ",(0,r.jsx)(t.a,{href:"#deploy-the-network",children:"Deploy"})," section."]}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsx)(t.p,{children:"The following tutorial ONLY supports AWS and Azure currently. Other cloud providers will be added in time."})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["We recommend using AWS RDS or Azure PostgreSQL in High Availability mode for any Tessera nodes that you use. The templates don't include that functionality. They can be provisioned with CloudFormation or Azure Resource Manager, respectively. Once created, please specify the connection details to the ",(0,r.jsx)(t.code,{children:"values.yml"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"deploy",children:"Deploy"}),"\n",(0,r.jsxs)(t.h3,{id:"check-that-you-can-connect-to-the-cluster-with-kubectl",children:["Check that you can connect to the cluster with ",(0,r.jsx)(t.code,{children:"kubectl"})]}),"\n",(0,r.jsxs)(t.p,{children:["Once you have a ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"cluster running"}),", verify ",(0,r.jsx)(t.code,{children:"kubectl"})," is connected to cluster with:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'kubectl version\nClient Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}\nServer Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}\n'})}),"\n",(0,r.jsx)(t.h3,{id:"deploy-the-network",children:"Deploy the network"}),"\n",(0,r.jsxs)(t.p,{children:["For the rest of this tutorial we use Helm charts. After you have cloned the ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository, change the directory to ",(0,r.jsx)(t.code,{children:"helm"})," for the rest of this tutorial."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd helm\n"})}),"\n",(0,r.jsx)(t.p,{children:"Each helm chart has the following keys that must be set."}),"\n",(0,r.jsxs)(t.p,{children:["Specify either ",(0,r.jsx)(t.code,{children:"aws"})," or ",(0,r.jsx)(t.code,{children:"azure"})," for the ",(0,r.jsx)(t.code,{children:"cluster.provider"}),". Additionally, set ",(0,r.jsx)(t.code,{children:"cloudNativeServices: true"})," and ",(0,r.jsx)(t.code,{children:"reclaimPolicy: Retain"})," so that it looks like the following for AWS:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cluster:\n provider: aws # choose from: aws | azure\n cloudNativeServices: true # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure)\n reclaimPolicy: Retain # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Follow the steps outlined in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"deploy charts"})," tutorial to deploy the network."]}),"\n",(0,r.jsx)(t.h2,{id:"best-practices",children:"Best practices"}),"\n",(0,r.jsx)(t.p,{children:"The most important thing is to plan your network out on paper first and then test it in a Dev cluster to make sure connectivity works with your applications and you get the required throughput in transactions per second (TPS). We also recommend you test the entire process, from provisioning infrastructure to updating nodes on a Dev cluster, prior to launching your production network."}),"\n",(0,r.jsx)(t.p,{children:"By default, the cloud Kubernetes clusters take care of availability and do multi-zones within a region. The scheduler also ensures that deployments are spread out across zones. Where possible, we recommend you use multiple bootnodes and static nodes to speed up peering."}),"\n",(0,r.jsxs)(t.p,{children:["You can connect to APIs and services outside the cluster normally, but connecting into your network (such as adding an on-premise node to the network) might require more configuration. Please check the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/#limitations",children:"limitations"})," and use CNI where possible. To connect an external node to your cluster, the easiest way is to use a VPN as seen in the following ",(0,r.jsx)(t.a,{href:"#multi-cluster-support",children:"multi-cluster"})," setup."]}),"\n",(0,r.jsx)(t.p,{children:"Finally, we recommend setting up monitoring and alerting from the beginning, so you can get early warnings of issues rather than after failure. We have a monitoring chart which uses Grafana and you can use it with Alertmanager to create alerts or alternatively alert via Cloudwatch or Azure Monitoring."}),"\n",(0,r.jsx)(t.h2,{id:"multi-cluster-support",children:"Multi-cluster support"}),"\n",(0,r.jsx)(t.p,{children:"When CNI is used, multi-cluster support is simple, but you have to cater for cross-cluster DNS names. Ideally, you want to create two separate VPCs (or VNets) and make sure they have different base CIDR blocks so that IP addresses don't conflict. Once done, peer the VPCs together and update the subnet route table, so they are effectively a giant single network."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"multi-cluster",src:n(19395).A+"",width:"1151",height:"591"})}),"\n",(0,r.jsxs)(t.p,{children:["When you ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"spin up clusters"}),", use ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/#limitations",children:"CNI"})," and CIDR blocks to match the subnet's CIDR settings. Then deploy the genesis chart on one cluster and copy across the genesis file and static nodes config maps. Depending on your DNS settings, they might be fine as is, or they might need to be actual IP addresses. That is, you can provision cluster B only after cluster A has Besu nodes up and running."]}),"\n",(0,r.jsx)(t.p,{children:"Deploy the network on cluster A, and then on cluster B. Besu nodes on cluster A should work as expected, and Besu nodes on cluster B should use the list of peers provided to communicate with the nodes on cluster A."}),"\n",(0,r.jsx)(t.p,{children:"Keeping the list of peers on the clusters live and up to date can be challenging, so we recommend using the cloud service provider's DNS service such as Route 53 or Azure DNS and adapting the charts to create entries for each node when it comes up."})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19395:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/kubernetes-3-eb071f2ad027b1e11e96e3c4f68a745a.png"},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var r=n(96540);const s={},o=r.createContext(s);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/71e3c29d.66b02934.js b/assets/js/71e3c29d.66b02934.js new file mode 100644 index 00000000000..c370f281cc1 --- /dev/null +++ b/assets/js/71e3c29d.66b02934.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4107],{95672:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>p,frontMatter:()=>c,metadata:()=>o,toc:()=>h});var a=l(74848),s=l(28453),i=l(11470),r=l(19365);const c={title:"Options",description:"Besu command line interface reference",sidebar_position:1,tags:["public networks","private networks"]},t=void 0,o={id:"public-networks/reference/cli/options",title:"Options",description:"Besu command line interface reference",source:"@site/docs/public-networks/reference/cli/options.md",sourceDirName:"public-networks/reference/cli",slug:"/public-networks/reference/cli/options",permalink:"/public-networks/reference/cli/options",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/cli/options.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Options",description:"Besu command line interface reference",sidebar_position:1,tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Reference",permalink:"/public-networks/reference"},next:{title:"Subcommands",permalink:"/public-networks/reference/cli/subcommands"}},d={},h=[{value:"Specify options",id:"specify-options",level:2},{value:"Options",id:"options",level:2},{value:"<code>api-gas-price-blocks</code>",id:"api-gas-price-blocks",level:3},{value:"<code>api-gas-price-max</code>",id:"api-gas-price-max",level:3},{value:"<code>api-gas-price-percentile</code>",id:"api-gas-price-percentile",level:3},{value:"<code>auto-log-bloom-caching-enabled</code>",id:"auto-log-bloom-caching-enabled",level:3},{value:"<code>banned-node-ids</code>",id:"banned-node-ids",level:3},{value:"<code>block-txs-selection-max-time</code>",id:"block-txs-selection-max-time",level:3},{value:"<code>bonsai-historical-block-limit</code>",id:"bonsai-historical-block-limit",level:3},{value:"<code>bonsai-limit-trie-logs-enabled</code>",id:"bonsai-limit-trie-logs-enabled",level:3},{value:"<code>bonsai-trie-logs-pruning-window-size</code>",id:"bonsai-trie-logs-pruning-window-size",level:3},{value:"<code>bootnodes</code>",id:"bootnodes",level:3},{value:"<code>cache-last-blocks</code>",id:"cache-last-blocks",level:3},{value:"<code>color-enabled</code>",id:"color-enabled",level:3},{value:"<code>compatibility-eth64-forkid-enabled</code>",id:"compatibility-eth64-forkid-enabled",level:3},{value:"<code>config-file</code>",id:"config-file",level:3},{value:"<code>data-path</code>",id:"data-path",level:3},{value:"<code>data-storage-format</code>",id:"data-storage-format",level:3},{value:"<code>discovery-dns-url</code>",id:"discovery-dns-url",level:3},{value:"<code>discovery-enabled</code>",id:"discovery-enabled",level:3},{value:"<code>engine-host-allowlist</code>",id:"engine-host-allowlist",level:3},{value:"<code>engine-jwt-disabled</code>",id:"engine-jwt-disabled",level:3},{value:"<code>engine-jwt-secret</code>",id:"engine-jwt-secret",level:3},{value:"<code>engine-rpc-enabled</code>",id:"engine-rpc-enabled",level:3},{value:"<code>engine-rpc-port</code>",id:"engine-rpc-port",level:3},{value:"<code>ethstats</code>",id:"ethstats",level:3},{value:"<code>ethstats-cacert-file</code>",id:"ethstats-cacert-file",level:3},{value:"<code>ethstats-contact</code>",id:"ethstats-contact",level:3},{value:"<code>genesis-file</code>",id:"genesis-file",level:3},{value:"<code>genesis-state-hash-cache-enabled</code>",id:"genesis-state-hash-cache-enabled",level:3},{value:"<code>graphql-http-cors-origins</code>",id:"graphql-http-cors-origins",level:3},{value:"<code>graphql-http-enabled</code>",id:"graphql-http-enabled",level:3},{value:"<code>graphql-http-host</code>",id:"graphql-http-host",level:3},{value:"<code>graphql-http-port</code>",id:"graphql-http-port",level:3},{value:"<code>help</code>",id:"help",level:3},{value:"<code>host-allowlist</code>",id:"host-allowlist",level:3},{value:"<code>identity</code>",id:"identity",level:3},{value:"<code>json-pretty-print-enabled</code>",id:"json-pretty-print-enabled",level:3},{value:"<code>key-value-storage</code>",id:"key-value-storage",level:3},{value:"<code>kzg-trusted-setup</code>",id:"kzg-trusted-setup",level:3},{value:"<code>logging</code>",id:"logging",level:3},{value:"<code>max-peers</code>",id:"max-peers",level:3},{value:"<code>metrics-category</code>",id:"metrics-category",level:3},{value:"<code>metrics-enabled</code>",id:"metrics-enabled",level:3},{value:"<code>metrics-host</code>",id:"metrics-host",level:3},{value:"<code>metrics-port</code>",id:"metrics-port",level:3},{value:"<code>metrics-protocol</code>",id:"metrics-protocol",level:3},{value:"<code>metrics-push-enabled</code>",id:"metrics-push-enabled",level:3},{value:"<code>metrics-push-host</code>",id:"metrics-push-host",level:3},{value:"<code>metrics-push-interval</code>",id:"metrics-push-interval",level:3},{value:"<code>metrics-push-port</code>",id:"metrics-push-port",level:3},{value:"<code>metrics-push-prometheus-job</code>",id:"metrics-push-prometheus-job",level:3},{value:"<code>min-block-occupancy-ratio</code>",id:"min-block-occupancy-ratio",level:3},{value:"<code>min-gas-price</code>",id:"min-gas-price",level:3},{value:"<code>min-priority-fee</code>",id:"min-priority-fee",level:3},{value:"<code>miner-coinbase</code>",id:"miner-coinbase",level:3},{value:"<code>miner-enabled</code>",id:"miner-enabled",level:3},{value:"<code>miner-extra-data</code>",id:"miner-extra-data",level:3},{value:"<code>miner-stratum-enabled</code>",id:"miner-stratum-enabled",level:3},{value:"<code>miner-stratum-host</code>",id:"miner-stratum-host",level:3},{value:"<code>miner-stratum-port</code>",id:"miner-stratum-port",level:3},{value:"<code>nat-method</code>",id:"nat-method",level:3},{value:"<code>net-restrict</code>",id:"net-restrict",level:3},{value:"<code>network</code>",id:"network",level:3},{value:"<code>network-id</code>",id:"network-id",level:3},{value:"<code>node-private-key-file</code>",id:"node-private-key-file",level:3},{value:"<code>p2p-enabled</code>",id:"p2p-enabled",level:3},{value:"<code>p2p-host</code>",id:"p2p-host",level:3},{value:"<code>p2p-interface</code>",id:"p2p-interface",level:3},{value:"<code>p2p-port</code>",id:"p2p-port",level:3},{value:"<code>profile</code>",id:"profile",level:3},{value:"<code>random-peer-priority-enabled</code>",id:"random-peer-priority-enabled",level:3},{value:"<code>receipt-compaction-enabled</code>",id:"receipt-compaction-enabled",level:3},{value:"<code>remote-connections-limit-enabled</code>",id:"remote-connections-limit-enabled",level:3},{value:"<code>remote-connections-max-percentage</code>",id:"remote-connections-max-percentage",level:3},{value:"<code>reorg-logging-threshold</code>",id:"reorg-logging-threshold",level:3},{value:"<code>required-block</code>",id:"required-block",level:3},{value:"<code>revert-reason-enabled</code>",id:"revert-reason-enabled",level:3},{value:"<code>rpc-gas-cap</code>",id:"rpc-gas-cap",level:3},{value:"<code>rpc-http-api</code>",id:"rpc-http-api",level:3},{value:"<code>rpc-http-api-methods-no-auth</code>",id:"rpc-http-api-methods-no-auth",level:3},{value:"<code>rpc-http-authentication-credentials-file</code>",id:"rpc-http-authentication-credentials-file",level:3},{value:"<code>rpc-http-authentication-enabled</code>",id:"rpc-http-authentication-enabled",level:3},{value:"<code>rpc-http-authentication-jwt-algorithm</code>",id:"rpc-http-authentication-jwt-algorithm",level:3},{value:"<code>rpc-http-authentication-jwt-public-key-file</code>",id:"rpc-http-authentication-jwt-public-key-file",level:3},{value:"<code>rpc-http-cors-origins</code>",id:"rpc-http-cors-origins",level:3},{value:"<code>rpc-http-enabled</code>",id:"rpc-http-enabled",level:3},{value:"<code>rpc-http-host</code>",id:"rpc-http-host",level:3},{value:"<code>rpc-http-max-active-connections</code>",id:"rpc-http-max-active-connections",level:3},{value:"<code>rpc-http-max-request-content-length</code>",id:"rpc-http-max-request-content-length",level:3},{value:"<code>rpc-http-max-batch-size</code>",id:"rpc-http-max-batch-size",level:3},{value:"<code>rpc-http-port</code>",id:"rpc-http-port",level:3},{value:"<code>rpc-http-tls-ca-clients-enabled</code>",id:"rpc-http-tls-ca-clients-enabled",level:3},{value:"<code>rpc-http-tls-client-auth-enabled</code>",id:"rpc-http-tls-client-auth-enabled",level:3},{value:"<code>rpc-http-tls-cipher-suite</code>",id:"rpc-http-tls-cipher-suite",level:3},{value:"<code>rpc-http-tls-enabled</code>",id:"rpc-http-tls-enabled",level:3},{value:"<code>rpc-http-tls-keystore-file</code>",id:"rpc-http-tls-keystore-file",level:3},{value:"<code>rpc-http-tls-keystore-password-file</code>",id:"rpc-http-tls-keystore-password-file",level:3},{value:"<code>rpc-http-tls-known-clients-file</code>",id:"rpc-http-tls-known-clients-file",level:3},{value:"<code>rpc-http-tls-protocol</code>",id:"rpc-http-tls-protocol",level:3},{value:"<code>rpc-max-logs-range</code>",id:"rpc-max-logs-range",level:3},{value:"<code>rpc-max-trace-filter-range</code>",id:"rpc-max-trace-filter-range",level:3},{value:"<code>rpc-tx-feecap</code>",id:"rpc-tx-feecap",level:3},{value:"<code>rpc-ws-api</code>",id:"rpc-ws-api",level:3},{value:"<code>rpc-ws-api-methods-no-auth</code>",id:"rpc-ws-api-methods-no-auth",level:3},{value:"<code>rpc-ws-authentication-credentials-file</code>",id:"rpc-ws-authentication-credentials-file",level:3},{value:"<code>rpc-ws-authentication-enabled</code>",id:"rpc-ws-authentication-enabled",level:3},{value:"<code>rpc-ws-authentication-jwt-algorithm</code>",id:"rpc-ws-authentication-jwt-algorithm",level:3},{value:"<code>rpc-ws-authentication-jwt-public-key-file</code>",id:"rpc-ws-authentication-jwt-public-key-file",level:3},{value:"<code>rpc-ws-enabled</code>",id:"rpc-ws-enabled",level:3},{value:"<code>rpc-ws-host</code>",id:"rpc-ws-host",level:3},{value:"<code>rpc-ws-max-active-connections</code>",id:"rpc-ws-max-active-connections",level:3},{value:"<code>rpc-ws-max-frame-size</code>",id:"rpc-ws-max-frame-size",level:3},{value:"<code>rpc-ws-port</code>",id:"rpc-ws-port",level:3},{value:"<code>security-module</code>",id:"security-module",level:3},{value:"<code>static-nodes-file</code>",id:"static-nodes-file",level:3},{value:"<code>strict-tx-replay-protection-enabled</code>",id:"strict-tx-replay-protection-enabled",level:3},{value:"<code>sync-min-peers</code>, <code>fast-sync-min-peers</code>",id:"sync-min-peers-fast-sync-min-peers",level:3},{value:"<code>sync-mode</code>",id:"sync-mode",level:3},{value:"<code>target-gas-limit</code>",id:"target-gas-limit",level:3},{value:"<code>tx-pool</code>",id:"tx-pool",level:3},{value:"<code>tx-pool-blob-price-bump</code>",id:"tx-pool-blob-price-bump",level:3},{value:"<code>tx-pool-enable-save-restore</code>",id:"tx-pool-enable-save-restore",level:3},{value:"<code>tx-pool-layer-max-capacity</code>",id:"tx-pool-layer-max-capacity",level:3},{value:"<code>tx-pool-limit-by-account-percentage</code>",id:"tx-pool-limit-by-account-percentage",level:3},{value:"<code>tx-pool-max-future-by-sender</code>",id:"tx-pool-max-future-by-sender",level:3},{value:"<code>tx-pool-max-prioritized</code>",id:"tx-pool-max-prioritized",level:3},{value:"<code>tx-pool-max-prioritized-by-type</code>",id:"tx-pool-max-prioritized-by-type",level:3},{value:"<code>tx-pool-max-size</code>",id:"tx-pool-max-size",level:3},{value:"<code>tx-pool-min-gas-price</code>",id:"tx-pool-min-gas-price",level:3},{value:"<code>tx-pool-no-local-priority</code>",id:"tx-pool-no-local-priority",level:3},{value:"<code>tx-pool-price-bump</code>",id:"tx-pool-price-bump",level:3},{value:"<code>tx-pool-priority-senders</code>",id:"tx-pool-priority-senders",level:3},{value:"<code>tx-pool-retention-hours</code>",id:"tx-pool-retention-hours",level:3},{value:"<code>tx-pool-save-file</code>",id:"tx-pool-save-file",level:3},{value:"<code>version</code>",id:"version",level:3},{value:"<code>version-compatibility-protection</code>",id:"version-compatibility-protection",level:3},{value:"<code>Xhelp</code>",id:"xhelp",level:3}];function x(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"This reference describes the syntax of the Besu configuration options."}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["This reference contains options that apply to both public and private networks. For private-network-specific options, see the ",(0,a.jsx)(n.a,{href:"/private-networks/reference/cli/options",children:"private network options reference"}),"."]})}),"\n",(0,a.jsx)(n.h2,{id:"specify-options",children:"Specify options"}),"\n",(0,a.jsx)(n.p,{children:"You can specify Besu options:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"On the command line."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"besu [OPTIONS] [SUBCOMMAND]\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"As an environment variable. For each command line option, the equivalent environment variable is:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Uppercase."}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"_"})," replaces ",(0,a.jsx)(n.code,{children:"-"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Has a ",(0,a.jsx)(n.code,{children:"BESU_"})," prefix."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["For example, set ",(0,a.jsx)(n.code,{children:"--miner-coinbase"})," using the ",(0,a.jsx)(n.code,{children:"BESU_MINER_COINBASE"})," environment variable."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In a ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),"."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file."}),"\n",(0,a.jsxs)(n.p,{children:["If using Bash or Z shell, you can view option suggestions by entering ",(0,a.jsx)(n.code,{children:"--"})," and pressing the Tab key twice."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"besu --Tab+Tab\n"})}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsx)(n.p,{children:"Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens."})}),"\n",(0,a.jsx)(n.h2,{id:"options",children:"Options"}),"\n",(0,a.jsx)(n.h3,{id:"api-gas-price-blocks",children:(0,a.jsx)(n.code,{children:"api-gas-price-blocks"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-blocks=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-blocks=50\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_API_GAS_PRICE_BLOCKS=50\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"api-gas-price-blocks=50\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Number of blocks back from the head block to examine for ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})}),". The default is ",(0,a.jsx)(n.code,{children:"100"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"api-gas-price-max",children:(0,a.jsx)(n.code,{children:"api-gas-price-max"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-max=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-max=20000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_API_GAS_PRICE_MAX=20000\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"api-gas-price-max=20000\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Maximum gas price to return for ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})}),", regardless of the percentile value measured. The default is ",(0,a.jsx)(n.code,{children:"500000000000"})," (500 GWei)."]}),"\n",(0,a.jsx)(n.h3,{id:"api-gas-price-percentile",children:(0,a.jsx)(n.code,{children:"api-gas-price-percentile"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-percentile=<DOUBLE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--api-gas-price-percentile=75\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_API_GAS_PRICE_PERCENTILE=75\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"api-gas-price-percentile=75\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Percentile value to measure for ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})}),". The default is ",(0,a.jsx)(n.code,{children:"50.0"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["For ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})}),", to return the:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Highest gas price in ",(0,a.jsx)(n.a,{href:"#api-gas-price-blocks",children:(0,a.jsx)(n.code,{children:"--api-gas-price-blocks"})}),", set to ",(0,a.jsx)(n.code,{children:"100"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Lowest gas price in ",(0,a.jsx)(n.a,{href:"#api-gas-price-blocks",children:(0,a.jsx)(n.code,{children:"--api-gas-price-blocks"})}),", set to ",(0,a.jsx)(n.code,{children:"0"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"auto-log-bloom-caching-enabled",children:(0,a.jsx)(n.code,{children:"auto-log-bloom-caching-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--auto-log-bloom-caching-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--auto-log-bloom-caching-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_AUTO_LOG_BLOOM_CACHING_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"auto-log-bloom-caching-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables automatic log bloom caching. APIs such as ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,a.jsx)(n.code,{children:"eth_getLogs"})})," and ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,a.jsx)(n.code,{children:"eth_getFilterLogs"})})," use the cache for improved performance. The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"If automatic log bloom caching is enabled and a log bloom query reaches the end of the cache, Besu performs an uncached query for logs not yet written to the cache."}),"\n",(0,a.jsx)(n.p,{children:"Automatic log bloom caching has a small impact on performance. If you are not querying logs blooms for a large number of blocks, you might want to disable automatic log bloom caching."}),"\n",(0,a.jsx)(n.h3,{id:"banned-node-ids",children:(0,a.jsx)(n.code,{children:"banned-node-ids"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--banned-node-ids=<bannedNodeId>[,<bannedNodeId>...]...\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--banned-node-ids=0xc35c3...d615f,0xf42c13...fc456\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BANNED_NODE_IDS=0xc35c3...d615f,0xf42c13...fc456\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'banned-node-ids=["0xc35c3...d615f","0xf42c13...fc456"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A list of node IDs with which this node will not peer. The node ID is the public key of the node. You can specify the banned node IDs with or without the ",(0,a.jsx)(n.code,{children:"0x"})," prefix."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The singular ",(0,a.jsx)(n.code,{children:"--banned-node-id"})," and plural ",(0,a.jsx)(n.code,{children:"--banned-node-ids"})," are available and are two names for the same option."]})}),"\n",(0,a.jsx)(n.h3,{id:"block-txs-selection-max-time",children:(0,a.jsx)(n.code,{children:"block-txs-selection-max-time"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--block-txs-selection-max-time=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--block-txs-selection-max-time=1700\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BLOCK_TXS_SELECTION_MAX_TIME=1700\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"block-txs-selection-max-time=1700\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum time, in milliseconds, that can be spent selecting transactions to be included in a block.\nThis value must be less than or equal to the default, ",(0,a.jsx)(n.code,{children:"5000"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This option only applies to proof-of-stake and proof-of-work networks.\nFor proof-of-authority networks, see\n",(0,a.jsx)(n.a,{href:"/private-networks/reference/cli/options#poa-block-txs-selection-max-time",children:(0,a.jsx)(n.code,{children:"--poa-block-txs-selection-max-time"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"bonsai-historical-block-limit",children:(0,a.jsx)(n.code,{children:"bonsai-historical-block-limit"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-historical-block-limit=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-historical-block-limit=256\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BONSAI_HISTORICAL_BLOCK_LIMIT=256\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"bonsai-historical-block-limit=256\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["When using ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"}),", the\n",(0,a.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#accessing-data",children:"maximum number of previous blocks"})," for which\nBonsai can reconstruct a historical state.\nThe default is ",(0,a.jsx)(n.code,{children:"512"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If you plan on querying historical blocks or state using the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/",children:"JSON-RPC API"}),", you might need to adjust the default value or your configured value to avoid errors."]})}),"\n",(0,a.jsx)(n.h3,{id:"bonsai-limit-trie-logs-enabled",children:(0,a.jsx)(n.code,{children:"bonsai-limit-trie-logs-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-limit-trie-logs-enabled=[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-limit-trie-logs-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BONSAI_LIMIT_TRIE_LOGS_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"bonsai-limit-trie-logs-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables limiting the number of\n",(0,a.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Trie"})," logs that are retained.\nWhen enabled, this limit is set to the value of\n",(0,a.jsx)(n.a,{href:"#bonsai-historical-block-limit",children:(0,a.jsx)(n.code,{children:"--bonsai-historical-block-limit"})}),".\nThe default is ",(0,a.jsx)(n.code,{children:"true"}),", unless ",(0,a.jsx)(n.a,{href:"#sync-mode",children:(0,a.jsx)(n.code,{children:"--sync-mode=FULL"})})," is set, in which case this option is\ndisallowed and must be set to ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"bonsai-trie-logs-pruning-window-size",children:(0,a.jsx)(n.code,{children:"bonsai-trie-logs-pruning-window-size"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-trie-logs-pruning-window-size=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bonsai-trie-logs-pruning-window-size=100000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BONSAI_TRIE_LOGS_PRUNING_WINDOW_SIZE=100000\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"bonsai-trie-logs-pruning-window-size=100000\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["When using ",(0,a.jsx)(n.a,{href:"#bonsai-limit-trie-logs-enabled",children:(0,a.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})}),", the number of trie\nlogs to prune during one pruning operation.\nA larger value might impact node performance.\nThe default is ",(0,a.jsx)(n.code,{children:"30000"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"bootnodes",children:(0,a.jsx)(n.code,{children:"bootnodes"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bootnodes[=<enode://id@host:port>[,<enode://id@host:port>...]...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--bootnodes=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_BOOTNODES=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'bootnodes=["enode://c35c3...d615f@1.2.3.4:30303","enode://f42c13...fc456@1.2.3.5:30303"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A list of comma-separated ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})," for ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"P2P discovery bootstrap"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"When connecting to Mainnet or public testnets, the default is a predefined list of enode URLs."}),"\n",(0,a.jsxs)(n.p,{children:["In private networks defined using ",(0,a.jsx)(n.a,{href:"#genesis-file",children:(0,a.jsx)(n.code,{children:"--genesis-file"})})," or when using ",(0,a.jsx)(n.a,{href:"#network",children:(0,a.jsx)(n.code,{children:"--network=dev"})}),", the default is an empty list of bootnodes."]}),"\n",(0,a.jsx)(n.h3,{id:"cache-last-blocks",children:(0,a.jsx)(n.code,{children:"cache-last-blocks"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--cache-last-blocks=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--cache-last-blocks=2048\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"CACHE_LAST_BLOCKS=2048\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cache-last-blocks=2048\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The number of recent blocks to cache.\nUsing this option can improve the performance of several RPC calls including: ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getBlockByNumber",children:(0,a.jsx)(n.code,{children:"eth_getBlockByNumber"})}),", ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getBlockByHash",children:(0,a.jsx)(n.code,{children:"eth_getBlockByHash"})}),", ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#getTransactionReceipt",children:(0,a.jsx)(n.code,{children:"eth_getTransactionReceipt"})}),", and especially ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_feeHistory",children:(0,a.jsx)(n.code,{children:"eth_feeHistory"})}),".\nThe default is ",(0,a.jsx)(n.code,{children:"0"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"color-enabled",children:(0,a.jsx)(n.code,{children:"color-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--color-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--color-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_COLOR_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"color-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables color output to console. The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"compatibility-eth64-forkid-enabled",children:(0,a.jsx)(n.code,{children:"compatibility-eth64-forkid-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--compatibility-eth64-forkid-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--compatibility-eth64-forkid-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_COMPATIBILITY_ETH64_FORKID_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"compatibility-eth64-forkid-enabled=true\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"Enables or disables the legacy Eth/64 fork ID. For any networks with nodes using Besu v1.4 or earlier and nodes using Besu v20.10.1 or later, either:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"All nodes must be upgraded to v20.10.1 or later."}),"\n",(0,a.jsxs)(n.li,{children:["All nodes using v20.10.1 or later must have ",(0,a.jsx)(n.code,{children:"--compatibility-eth64-forkid-enabled"})," set to ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["If networks have Besu nodes using v1.4 or earlier and other Besu nodes using v20.10.1 or later, the nodes on different versions cannot communicate unless ",(0,a.jsx)(n.code,{children:"--compatibility-eth64-forkid-enabled"})," is set to ",(0,a.jsx)(n.code,{children:"true"}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"config-file",children:(0,a.jsx)(n.code,{children:"config-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--config-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--config-file=/home/me/me_node/config.toml\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_CONFIG_FILE=/home/me/me_node/config.toml\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"TOML configuration file"}),". The default is ",(0,a.jsx)(n.code,{children:"none"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"data-path",children:(0,a.jsx)(n.code,{children:"data-path"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--data-path=<PATH>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--data-path=/home/me/me_node\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_DATA_PATH=/home/me/me_node\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'data-path="/home/me/me_node"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the Besu data directory. The default is the directory you installed Besu in, or ",(0,a.jsx)(n.code,{children:"/opt/besu/database"})," if using the ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/install/run-docker-image",children:"Besu Docker image"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"data-storage-format",children:(0,a.jsx)(n.code,{children:"data-storage-format"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--data-storage-format=<FORMAT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--data-storage-format=FOREST\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_DATA_STORAGE_FORMAT=FOREST\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'data-storage-format="BONSAI"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats",children:"data storage format"})," to use. Set to ",(0,a.jsx)(n.code,{children:"BONSAI"})," for Bonsai Tries or ",(0,a.jsx)(n.code,{children:"FOREST"})," for Forest of Tries. The default is ",(0,a.jsx)(n.code,{children:"BONSAI"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"discovery-dns-url",children:(0,a.jsx)(n.code,{children:"discovery-dns-url"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--discovery-dns-url=<enrtree URL>\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_DISCOVERY_DNS_URL=enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'discovery-dns-url="enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"enrtree"})," URL of the DNS node list for ",(0,a.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-1459",children:"node discovery via DNS"}),". The default is ",(0,a.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"discovery-enabled",children:(0,a.jsx)(n.code,{children:"discovery-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--discovery-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--discovery-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_DISCOVERY_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"discovery-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables P2P discovery. The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You can override the default DNS server if it's unreliable or doesn't serve TCP DNS requests, using the ",(0,a.jsx)(n.a,{href:"#xhelp",children:"early access option"})," ",(0,a.jsx)(n.code,{children:"--Xp2p-dns-discovery-server=<HOST>"}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"engine-host-allowlist",children:(0,a.jsx)(n.code,{children:"engine-host-allowlist"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'--engine-host-allowlist=<hostname>[,<hostname>...]... or "*"\n'})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-host-allowlist=localhost,127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ENGINE_HOST_ALLOWLIST=localhost,127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'engine-host-allowlist=["localhost","127.0.0.1"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"A comma-separated list of hostnames to allow for Engine API access (applies to both HTTP and WebSocket)."}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["To allow all hostnames, use ",(0,a.jsx)(n.code,{children:'"*"'}),". We don't recommend allowing all hostnames in production environments."]})}),"\n",(0,a.jsx)(n.h3,{id:"engine-jwt-disabled",children:(0,a.jsx)(n.code,{children:"engine-jwt-disabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-jwt-disabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-jwt-disabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ENGINE_JWT_DISABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"engine-jwt-disabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Disables or enables ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api#authentication",children:"authentication"})," for Engine APIs. The default is ",(0,a.jsx)(n.code,{children:"false"})," (authentication is enabled by default)."]}),"\n",(0,a.jsx)(n.h3,{id:"engine-jwt-secret",children:(0,a.jsx)(n.code,{children:"engine-jwt-secret"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-jwt-secret=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-jwt-secret=jwt.hex\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_ENGINE_JWT_SECRET="jwt.hex"\n'})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'engine-jwt-secret="jwt.hex"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Shared secret used to authenticate ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus clients"})," when using the Engine JSON-RPC API (both HTTP and WebSocket). Contents of file must be at least 32 hex-encoded bytes and not begin with ",(0,a.jsx)(n.code,{children:"0x"}),". May be a relative or absolute path. See an ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/mainnet#1-generate-the-shared-secret",children:"example of how to generate this"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"engine-rpc-enabled",children:(0,a.jsx)(n.code,{children:"engine-rpc-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-rpc-enabled[=<true|false]>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-rpc-enabled\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ENGINE_RPC_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"engine-rpc-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/engine-api/",children:"Engine API"}),". The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"engine-rpc-port",children:(0,a.jsx)(n.code,{children:"engine-rpc-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-rpc-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--engine-rpc-port=8551\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ENGINE_RPC_PORT=8551\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'engine-rpc-port="8551"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The listening port for the Engine API calls (",(0,a.jsx)(n.code,{children:"ENGINE"}),", ",(0,a.jsx)(n.code,{children:"ETH"}),") for JSON-RPC over HTTP and WebSocket. The default is ",(0,a.jsx)(n.code,{children:"8551"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"ethstats",children:(0,a.jsx)(n.code,{children:"ethstats"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats=<[ws://|wss://]nodename:secret@host:[port]>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats=Dev-Node-1:secret@127.0.0.1:3001\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ETHSTATS=Dev-Node-1:secret@127.0.0.1:3001\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'ethstats="Dev-Node-1:secret@127.0.0.1:3001"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Reporting URL of an ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/deploy/ethstats",children:"Ethstats"})," server.\nIf specified without a port, the default port is 443 for SSL connections and 80 for non-SSL connections."]}),"\n",(0,a.jsxs)(n.p,{children:["You can optionally specify ",(0,a.jsx)(n.code,{children:"ws://"})," or ",(0,a.jsx)(n.code,{children:"wss://"})," in the Ethstats URL.\nIf you specify this scheme, the connection doesn't need to switch from SSL to non-SSL on each retry logic."]}),"\n",(0,a.jsx)(n.h3,{id:"ethstats-cacert-file",children:(0,a.jsx)(n.code,{children:"ethstats-cacert-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats-cacert-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats-cacert-file=./root.cert\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ETHSTATS_CACERT_FILE=./root.cert\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'ethstats-cacert-file="./root.cert"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Path to the root certificate authority (CA) certificate file of the Ethstats server specified by ",(0,a.jsx)(n.a,{href:"#ethstats",children:(0,a.jsx)(n.code,{children:"--ethstats"})}),". This option is useful in non-production environments."]}),"\n",(0,a.jsx)(n.h3,{id:"ethstats-contact",children:(0,a.jsx)(n.code,{children:"ethstats-contact"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats-contact=<CONTACT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--ethstats-contact=contact@mail.com\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_ETHSTATS_CONTACT=contact@mail.com\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'ethstats-contact="contact@mail.com"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Contact email address to send to the Ethstats server specified by ",(0,a.jsx)(n.a,{href:"#ethstats",children:(0,a.jsx)(n.code,{children:"--ethstats"})}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"genesis-file",children:(0,a.jsx)(n.code,{children:"genesis-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--genesis-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--genesis-file=/home/me/me_node/customGenesisFile.json\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_GENESIS_FILE=/home/me/me_node/customGenesisFile.json\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'genesis-file="/home/me/me_node/customGenesisFile.json"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["You can't use the ",(0,a.jsx)(n.a,{href:"#genesis-file",children:(0,a.jsx)(n.code,{children:"--genesis-file"})})," and ",(0,a.jsx)(n.a,{href:"#network",children:(0,a.jsx)(n.code,{children:"--network"})})," options at the same time."]})}),"\n",(0,a.jsx)(n.h3,{id:"genesis-state-hash-cache-enabled",children:(0,a.jsx)(n.code,{children:"genesis-state-hash-cache-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--genesis-state-hash-cache-enabled=[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--genesis-state-hash-cache-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_GENESIS_STATE_HASH_CACHE_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"genesis-state-hash-cache-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables fast startup from an existing genesis state hash. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"warning",children:(0,a.jsx)(n.p,{children:"Enabling this option avoids validating the genesis state hash, trading off security for faster node startup times. We only recommend using this option if you are certain that you have not modified your genesis file or database and understand the security implications."})}),"\n",(0,a.jsx)(n.h3,{id:"graphql-http-cors-origins",children:(0,a.jsx)(n.code,{children:"graphql-http-cors-origins"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--graphql-http-cors-origins=<graphQLHttpCorsAllowedOrigins>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'--graphql-http-cors-origins="http://medomain.com","https://meotherdomain.com"\n'})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_GRAPHQL_HTTP_CORS_ORIGINS="http://medomain.com","https://meotherdomain.com"\n'})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'graphql-http-cors-origins=["http://medomain.com","https://meotherdomain.com"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"A list of comma-separated origin domain URLs for CORS validation. The default is none."}),"\n",(0,a.jsx)(n.h3,{id:"graphql-http-enabled",children:(0,a.jsx)(n.code,{children:"graphql-http-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--graphql-http-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--graphql-http-enabled\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_GRAPHQL_HTTP_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"graphql-http-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the GraphQL HTTP service. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["The default GraphQL HTTP service endpoint is ",(0,a.jsx)(n.code,{children:"http://127.0.0.1:8547/graphql"})," if set to ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"graphql-http-host",children:(0,a.jsx)(n.code,{children:"graphql-http-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--graphql-http-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\n--graphql-http-host=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\nBESU_GRAPHQL_HTTP_HOST=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'graphql-http-host="0.0.0.0"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host on which GraphQL HTTP listens. The default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["To allow remote connections, set to ",(0,a.jsx)(n.code,{children:"0.0.0.0"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"graphql-http-port",children:(0,a.jsx)(n.code,{children:"graphql-http-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--graphql-http-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 6175\n--graphql-http-port=6175\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 6175\nBESU_GRAPHQL_HTTP_PORT=6175\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'graphql-http-port="6175"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port (TCP) on which GraphQL HTTP listens. The default is ",(0,a.jsx)(n.code,{children:"8547"}),". Ports must be ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"exposed appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"help",children:(0,a.jsx)(n.code,{children:"help"})}),"\n",(0,a.jsx)(i.A,{children:(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"-h, --help\n"})})})}),"\n",(0,a.jsx)(n.p,{children:"Show the help message and exit."}),"\n",(0,a.jsx)(n.h3,{id:"host-allowlist",children:(0,a.jsx)(n.code,{children:"host-allowlist"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'--host-allowlist=<hostname>[,<hostname>...]... or "*"\n'})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--host-allowlist=medomain.com,meotherdomain.com\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_HOST_ALLOWLIST=medomain.com,meotherdomain.com\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'host-allowlist=["medomain.com", "meotherdomain.com"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of hostnames to ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/#host-allowlist",children:"access the JSON-RPC API"})," and ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"pull Besu metrics"}),". By default, Besu accepts requests from ",(0,a.jsx)(n.code,{children:"localhost"})," and ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["This isn't a permissioning feature. To restrict access to the API, we recommend using the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Besu authentication mechanism"})," with username and password authentication or JWT public key authentication."]})}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["If using ",(0,a.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})," to pull metrics from a node, you must specify all the other nodes you want to pull metrics from in the list of allowed hostnames."]})}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["To allow all hostnames, use ",(0,a.jsx)(n.code,{children:'"*"'}),". We don't recommend allowing all hostnames for production environments."]})}),"\n",(0,a.jsx)(n.h3,{id:"identity",children:(0,a.jsx)(n.code,{children:"identity"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--identity=<String>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--identity=MyNode\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_IDENTITY=MyNode\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'identity="MyNode"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The name for the node. If specified, it's the second section of the client ID provided by some Ethereum network explorers. For example, in the client ID ",(0,a.jsx)(n.code,{children:"besu/MyNode/v1.3.4/linux-x86_64/oracle_openjdk-java-11"}),", the node name is ",(0,a.jsx)(n.code,{children:"MyNode"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["If a name is not specified, the name section is not included in the client ID. For example, ",(0,a.jsx)(n.code,{children:"besu/v1.3.4/linux-x86_64/oracle_openjdk-java-11"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"json-pretty-print-enabled",children:(0,a.jsx)(n.code,{children:"json-pretty-print-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--json-pretty-print-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--json-pretty-print-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_JSON_PRETTY_PRINT_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"json-pretty-print-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the pretty-print output for HTTP and WebSocket responses. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"key-value-storage",children:(0,a.jsx)(n.code,{children:"key-value-storage"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--key-value-storage=<keyValueStorageName>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--key-value-storage=rocksdb\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_KEY_VALUE_STORAGE=rocksdb\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'key-value-storage="rocksdb"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The key-value storage to use. Use this option only if using a storage system provided with a plugin. The default is ",(0,a.jsx)(n.code,{children:"rocksdb"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["For development use only, the ",(0,a.jsx)(n.code,{children:"memory"})," option provides ephemeral storage for sync testing and debugging."]}),"\n",(0,a.jsx)(n.h3,{id:"kzg-trusted-setup",children:(0,a.jsx)(n.code,{children:"kzg-trusted-setup"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--kzg-trusted-setup=<PATH>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_KZG_TRUSTED_SETUP=/etc/besu/kzg-trusted-setup.txt\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the ",(0,a.jsx)(n.a,{href:"https://github.com/ethereum/c-kzg-4844",children:"C-KZG-4844"})," trusted setup file. Use this option to pass a custom setup file for custom networks or to override the default setup file for named networks."]}),"\n",(0,a.jsx)(n.h3,{id:"logging",children:(0,a.jsx)(n.code,{children:"logging"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"-l, --logging=<LEVEL>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--logging=DEBUG\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_LOGGING=DEBUG\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'logging="DEBUG"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Sets logging verbosity. Log levels are ",(0,a.jsx)(n.code,{children:"OFF"}),", ",(0,a.jsx)(n.code,{children:"FATAL"}),", ",(0,a.jsx)(n.code,{children:"ERROR"}),", ",(0,a.jsx)(n.code,{children:"WARN"}),", ",(0,a.jsx)(n.code,{children:"INFO"}),", ",(0,a.jsx)(n.code,{children:"DEBUG"}),", ",(0,a.jsx)(n.code,{children:"TRACE"}),", ",(0,a.jsx)(n.code,{children:"ALL"}),". The default is ",(0,a.jsx)(n.code,{children:"INFO"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"max-peers",children:(0,a.jsx)(n.code,{children:"max-peers"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--max-peers=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--max-peers=42\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MAX_PEERS=42\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"max-peers=42\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The maximum number of P2P connections you can establish. The default is 25."}),"\n",(0,a.jsx)(n.h3,{id:"metrics-category",children:(0,a.jsx)(n.code,{children:"metrics-category"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-category=<metrics-category>[,metrics-category...]...\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-category=BLOCKCHAIN,PEERS,PROCESS\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_CATEGORY=BLOCKCHAIN,PEERS,PROCESS\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-category=["BLOCKCHAIN","PEERS","PROCESS"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of categories for which to track metrics. The defaults are ",(0,a.jsx)(n.code,{children:"BLOCKCHAIN"}),", ",(0,a.jsx)(n.code,{children:"ETHEREUM"}),", ",(0,a.jsx)(n.code,{children:"EXECUTORS"}),", ",(0,a.jsx)(n.code,{children:"JVM"}),", ",(0,a.jsx)(n.code,{children:"NETWORK"}),", ",(0,a.jsx)(n.code,{children:"PEERS"}),", ",(0,a.jsx)(n.code,{children:"PERMISSIONING"}),", ",(0,a.jsx)(n.code,{children:"PROCESS"}),", ",(0,a.jsx)(n.code,{children:"PRUNER"}),", ",(0,a.jsx)(n.code,{children:"RPC"}),", ",(0,a.jsx)(n.code,{children:"STRATUM"}),", ",(0,a.jsx)(n.code,{children:"SYNCHRONIZER"}),", and ",(0,a.jsx)(n.code,{children:"TRANSACTION_POOL"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Other categories are ",(0,a.jsx)(n.code,{children:"KVSTORE_ROCKSDB"}),", ",(0,a.jsx)(n.code,{children:"KVSTORE_PRIVATE_ROCKSDB"}),", ",(0,a.jsx)(n.code,{children:"KVSTORE_ROCKSDB_STATS"}),", and ",(0,a.jsx)(n.code,{children:"KVSTORE_PRIVATE_ROCKSDB_STATS"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Categories containing ",(0,a.jsx)(n.code,{children:"PRIVATE"})," track metrics when you enable ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/privacy/",children:"private transactions"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-enabled",children:(0,a.jsx)(n.code,{children:"metrics-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-enabled\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"metrics-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics#monitor-node-performance-using-prometheus",children:"metrics exporter"}),". The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["You can't specify ",(0,a.jsx)(n.code,{children:"--metrics-enabled"})," with ",(0,a.jsx)(n.a,{href:"#metrics-push-enabled",children:(0,a.jsx)(n.code,{children:"--metrics-push-enabled"})}),". That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-host",children:(0,a.jsx)(n.code,{children:"metrics-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-host=127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_HOST=127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-host="127.0.0.1"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host on which ",(0,a.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})," accesses ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics#monitor-node-performance-using-prometheus",children:"Besu metrics"}),". The metrics server respects the ",(0,a.jsxs)(n.a,{href:"#host-allowlist",children:[(0,a.jsx)(n.code,{children:"--host-allowlist"})," option"]}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["The default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-port",children:(0,a.jsx)(n.code,{children:"metrics-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-port=6174\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PORT=6174\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-port="6174"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port (TCP) on which ",(0,a.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})," accesses ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics#monitor-node-performance-using-prometheus",children:"Besu metrics"}),". The default is ",(0,a.jsx)(n.code,{children:"9545"}),". Ports must be ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"exposed appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-protocol",children:(0,a.jsx)(n.code,{children:"metrics-protocol"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-protocol=<metrics-protocol>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-protocol=OPENTELEMETRY\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PROTOCOL=OPENTELEMETRY\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-protocol="OPENTELEMETRY"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Metrics protocol to use: ",(0,a.jsx)(n.code,{children:"PROMETHEUS"}),", ",(0,a.jsx)(n.code,{children:"OPENTELEMETRY"}),", or ",(0,a.jsx)(n.code,{children:"NONE"}),". The default is ",(0,a.jsx)(n.code,{children:"PROMETHEUS"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-push-enabled",children:(0,a.jsx)(n.code,{children:"metrics-push-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PUSH_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"metrics-push-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics#run-prometheus-with-besu-in-push-mode",children:"push gateway integration"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["You can't specify ",(0,a.jsx)(n.code,{children:"--metrics-push-enabled"})," with ",(0,a.jsx)(n.a,{href:"#metrics-enabled",children:(0,a.jsx)(n.code,{children:"--metrics-enabled"})}),". That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-push-host",children:(0,a.jsx)(n.code,{children:"metrics-push-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-host=127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PUSH_HOST=127.0.0.1\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-push-host="127.0.0.1"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host of the ",(0,a.jsx)(n.a,{href:"https://github.com/prometheus/pushgateway",children:"Prometheus Push Gateway"}),". The default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),". The metrics server respects the ",(0,a.jsxs)(n.a,{href:"#host-allowlist",children:[(0,a.jsx)(n.code,{children:"--host-allowlist"})," option"]}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["When pushing metrics, ensure you set ",(0,a.jsx)(n.code,{children:"--metrics-push-host"})," to the machine on which the push gateway is. Generally, this is a different machine to the machine on which Besu is running."]})}),"\n",(0,a.jsx)(n.h3,{id:"metrics-push-interval",children:(0,a.jsx)(n.code,{children:"metrics-push-interval"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-interval=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-interval=30\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PUSH_INTERVAL=30\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"metrics-push-interval=30\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The interval, in seconds, to push metrics when in ",(0,a.jsx)(n.code,{children:"push"})," mode. The default is 15."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-push-port",children:(0,a.jsx)(n.code,{children:"metrics-push-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-port=6174\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_METRICS_PUSH_PORT=6174\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-push-port="6174"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port (TCP) of the ",(0,a.jsx)(n.a,{href:"https://github.com/prometheus/pushgateway",children:"Prometheus Push Gateway"}),". The default is ",(0,a.jsx)(n.code,{children:"9001"}),". Ports must be ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"exposed appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"metrics-push-prometheus-job",children:(0,a.jsx)(n.code,{children:"metrics-push-prometheus-job"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--metrics-push-prometheus-job=<metricsPrometheusJob>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'--metrics-push-prometheus-job="my-custom-job"\n'})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_METRICS_PUSH_PROMETHEUS_JOB="my-custom-job"\n'})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'metrics-push-prometheus-job="my-custom-job"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The job name when in ",(0,a.jsx)(n.code,{children:"push"})," mode. The default is ",(0,a.jsx)(n.code,{children:"besu-client"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"min-block-occupancy-ratio",children:(0,a.jsx)(n.code,{children:"min-block-occupancy-ratio"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-block-occupancy-ratio=<minBlockOccupancyRatio>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-block-occupancy-ratio=0.5\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MIN_BLOCK_OCCUPANCY_RATIO=0.5\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'min-block-occupancy-ratio="0.5"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"Minimum occupancy ratio for a mined block if the transaction pool is not empty. When filling a block during mining, the occupancy ratio indicates the threshold at which the node stops waiting for smaller transactions to fill the remaining space. The default is 0.8."}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["Besu ignores the ",(0,a.jsx)(n.code,{children:"--min-block-occupancy-ratio"})," option for proof-of-stake networks, such as Ethereum Mainnet."]})}),"\n",(0,a.jsx)(n.h3,{id:"min-gas-price",children:(0,a.jsx)(n.code,{children:"min-gas-price"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-gas-price=<minTransactionGasPrice>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-gas-price=1337\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MIN_GAS_PRICE=1337\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"min-gas-price=1337\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The minimum price (in wei) a transaction offers to include it in a mined block.\nThe minimum gas price is the lowest value ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})})," can return.\nThe default is ",(0,a.jsx)(n.code,{children:"1000"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"For a running node, use:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_getmingasprice",children:(0,a.jsx)(n.code,{children:"miner_getMinGasPrice"})})," to get the value."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_setmingasprice",children:(0,a.jsx)(n.code,{children:"miner_setMinGasPrice"})})," to change the value."]}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["In a ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas network"}),", ensure the minimum\ngas price is set to zero for every node.\nAny node with a minimum gas price set higher than zero will silently drop transactions with a zero\ngas price.\nYou can query a node's gas configuration using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,a.jsx)(n.code,{children:"eth_gasPrice"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"min-priority-fee",children:(0,a.jsx)(n.code,{children:"min-priority-fee"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-priority-fee=<minPriorityFeePerGas>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--min-priority-fee=7\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MIN_PRIORITY_FEE=7\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"min-priority-fee=7\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The minimum priority fee per gas (in wei) offered by a transaction to be included in a block.\nThe default is ",(0,a.jsx)(n.code,{children:"0"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"For a running node, use:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_getminpriorityfee",children:(0,a.jsx)(n.code,{children:"miner_getMinPriorityFee"})})," to get the value."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_setminpriorityfee",children:(0,a.jsx)(n.code,{children:"miner_setMinPriorityFee"})})," to change the value."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"miner-coinbase",children:(0,a.jsx)(n.code,{children:"miner-coinbase"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-coinbase=<Ethereum account address>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-coinbase=fe3b557e8fb62b89f4916b721be55ceb828dbd73\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_COINBASE=fe3b557e8fb62b89f4916b721be55ceb828dbd73\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The account you pay mining rewards to.\nYou must specify a valid coinbase when you enable mining using the\n",(0,a.jsx)(n.a,{href:"#miner-enabled",children:(0,a.jsx)(n.code,{children:"--miner-enabled"})})," option or the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_start",children:(0,a.jsx)(n.code,{children:"miner_start"})}),"\nJSON-RPC API method."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["Besu ignores this option in ",(0,a.jsx)(n.a,{href:"/private-networks/concepts/poa",children:"proof-of-authority"})," networks.\nIn proof-of-stake networks, such as Ethereum Mainnet, this option is used as a last resort for the\nfee recipient, if the consensus layer client doesn't provide any."]})}),"\n",(0,a.jsx)(n.h3,{id:"miner-enabled",children:(0,a.jsx)(n.code,{children:"miner-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"miner-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables mining when you start the node. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"miner-extra-data",children:(0,a.jsx)(n.code,{children:"miner-extra-data"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-extra-data=<Extra data>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-extra-data=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_EXTRA_DATA=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'miner-extra-data="0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A hex string representing the 32 bytes included in the extra data field of a created block.\nThe default is ",(0,a.jsx)(n.code,{children:"0x"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"miner-stratum-enabled",children:(0,a.jsx)(n.code,{children:"miner-stratum-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-stratum-enabled\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_STRATUM_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"miner-stratum-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables a node to perform stratum mining.\nThe default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"miner-stratum-host",children:(0,a.jsx)(n.code,{children:"miner-stratum-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-stratum-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-stratum-host=192.168.1.132\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_STRATUM_HOST=192.168.1.132\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'miner-stratum-host="192.168.1.132"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host of the stratum mining service.\nThe default is ",(0,a.jsx)(n.code,{children:"0.0.0.0"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"miner-stratum-port",children:(0,a.jsx)(n.code,{children:"miner-stratum-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-stratum-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--miner-stratum-port=8010\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_MINER_STRATUM_PORT=8010\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'miner-stratum-port="8010"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port of the stratum mining service.\nThe default is ",(0,a.jsx)(n.code,{children:"8008"}),".\nYou must ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"expose ports appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"nat-method",children:(0,a.jsx)(n.code,{children:"nat-method"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--nat-method=UPNP\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'nat-method="UPNP"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Specify the method for handling ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:"NAT environments"}),". The options are:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#upnp",children:(0,a.jsx)(n.code,{children:"UPNP"})})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#upnp",children:(0,a.jsx)(n.code,{children:"UPNPP2PONLY"})})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#kubernetes",children:(0,a.jsx)(n.code,{children:"KUBERNETES"})})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#docker",children:(0,a.jsx)(n.code,{children:"DOCKER"})})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#auto",children:(0,a.jsx)(n.code,{children:"AUTO"})})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#none",children:(0,a.jsx)(n.code,{children:"NONE"})}),"."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The default is ",(0,a.jsx)(n.code,{children:"AUTO"}),". ",(0,a.jsx)(n.code,{children:"NONE"})," disables NAT functionality."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsx)(n.p,{children:"UPnP support is often disabled by default in networking firmware. If disabled by default, explicitly enable UPnP support."})}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["Use ",(0,a.jsx)(n.code,{children:"UPNPP2PONLY"})," if you wish to enable UPnP for P2P traffic but not JSON-RPC."]})}),"\n",(0,a.jsxs)(n.admonition,{type:"note",children:[(0,a.jsxs)(n.p,{children:["Specifying ",(0,a.jsx)(n.code,{children:"UPNP"})," might introduce delays during node startup, especially on networks without a UPnP gateway device."]}),(0,a.jsxs)(n.p,{children:["You must specify ",(0,a.jsx)(n.code,{children:"DOCKER"})," when using the ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/install/run-docker-image",children:"Besu Docker image"}),"."]})]}),"\n",(0,a.jsx)(n.h3,{id:"net-restrict",children:(0,a.jsx)(n.code,{children:"net-restrict"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--net-restrict=<subnet>[,<subnet>,...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--net-restrict=192.168.1.0/24,10.0.0.0/8\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_NET_RESTRICT=192.168.1.0/24,10.0.0.0/8\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'net-restrict=["192.168.1.0/24","10.0.0.0/8"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"A comma-separated list of allowed IP subnets.\nPeers whose IP addresses fall within the specified subnets are granted permission to interact with the node.\nIf not specified, no subnet-based peer permission restrictions are applied."}),"\n",(0,a.jsx)(n.h3,{id:"network",children:(0,a.jsx)(n.code,{children:"network"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--network=<NETWORK>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--network=holesky\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_NETWORK=holesky\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'network="holesky"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The predefined network configuration. The default is ",(0,a.jsx)(n.code,{children:"mainnet"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"Possible values include the following:"}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Network"}),(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Chain"}),(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Type"}),(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Default Sync Mode"}),(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Consensus Mechanism"}),(0,a.jsx)(n.th,{style:{textAlign:"left"},children:"Description"})]})}),(0,a.jsxs)(n.tbody,{children:[(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"mainnet"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETH"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Production"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoS network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["The main ",(0,a.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/networks/",children:"Ethereum network"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"holesky"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETH"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Test"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoS network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["Multi-client testnet ",(0,a.jsx)(n.a,{href:"https://holesky.dev",children:"Hoelsky"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"sepolia"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETH"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Test"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoS network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["Multi-client testnet ",(0,a.jsx)(n.a,{href:"https://sepolia.dev",children:"Sepolia"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"lukso"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETH"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Production"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoS network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["Network for the ",(0,a.jsx)(n.a,{href:"https://lukso.network/",children:"Lukso chain"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"dev"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETH"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Development"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"FULL"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoW network"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Development network with low difficulty to enable local CPU mining"})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"classic"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETC"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Production"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoW network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["The main ",(0,a.jsx)(n.a,{href:"https://ethereumclassic.org",children:"Ethereum Classic network"})]})]}),(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.code,{children:"mordor "})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"ETC"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"Test"}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:(0,a.jsx)(n.a,{href:"#sync-mode",children:"SNAP"})}),(0,a.jsx)(n.td,{style:{textAlign:"left"},children:"A PoW network"}),(0,a.jsxs)(n.td,{style:{textAlign:"left"},children:["Testnet for ",(0,a.jsx)(n.a,{href:"https://github.com/eth-classic/mordor",children:"Ethereum Classic"})]})]})]})]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["Values are case insensitive, so either ",(0,a.jsx)(n.code,{children:"mainnet"})," or ",(0,a.jsx)(n.code,{children:"MAINNET"})," works."]})}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["You can't use the ",(0,a.jsx)(n.code,{children:"--network"})," and ",(0,a.jsx)(n.a,{href:"#genesis-file",children:(0,a.jsx)(n.code,{children:"--genesis-file"})})," options at the same time."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"The Ropsten, Rinkeby, and Kiln testnets are deprecated."}),"\n"]}),"\n"]})}),"\n",(0,a.jsx)(n.h3,{id:"network-id",children:(0,a.jsx)(n.code,{children:"network-id"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--network-id=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--network-id=8675309\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_NETWORK_ID=8675309\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'network-id="8675309"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"P2P network identifier"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"Use this option to override the default network ID. The default value is the same as the chain ID defined in the genesis file."}),"\n",(0,a.jsx)(n.h3,{id:"node-private-key-file",children:(0,a.jsx)(n.code,{children:"node-private-key-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--node-private-key-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--node-private-key-file=/home/me/me_node/myPrivateKey\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_NODE_PRIVATE_KEY_FILE=/home/me/me_node/myPrivateKey\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'node-private-key-file="/home/me/me_node/myPrivateKey"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The private key file for the node. The default is the key file in the ",(0,a.jsx)(n.a,{href:"#data-path",children:"data directory"}),". If no key file exists, Besu creates a key file containing the generated private key, otherwise, the existing key file specifies the node private key."]}),"\n",(0,a.jsx)(n.admonition,{type:"danger",children:(0,a.jsx)(n.p,{children:"The private key is not encrypted."})}),"\n",(0,a.jsxs)(n.p,{children:["This option is ignored if ",(0,a.jsx)(n.a,{href:"#security-module",children:(0,a.jsx)(n.code,{children:"--security-module"})})," is set to a non-default value."]}),"\n",(0,a.jsx)(n.h3,{id:"p2p-enabled",children:(0,a.jsx)(n.code,{children:"p2p-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_P2P_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"p2p-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables all P2P communication. The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"p2p-host",children:(0,a.jsx)(n.code,{children:"p2p-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\n--p2p-host=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\nBESU_P2P_HOST=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'p2p-host="0.0.0.0"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The advertised host that can be used to access the node from outside the network in ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports#p2p-networking",children:"P2P communication"}),". The default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["If ",(0,a.jsx)(n.a,{href:"#nat-method",children:(0,a.jsx)(n.code,{children:"--nat-method"})})," is set to ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,a.jsx)(n.code,{children:"NONE"})}),", ",(0,a.jsx)(n.code,{children:"--p2p-host"})," is not overridden and must be specified for the node to be accessed from outside the network."]})}),"\n",(0,a.jsx)(n.h3,{id:"p2p-interface",children:(0,a.jsx)(n.code,{children:"p2p-interface"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-interface=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-interface=192.168.1.132\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_P2P_INTERFACE=192.168.1.132\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'p2p-interface="192.168.1.132"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The network interface on which the node listens for ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports#p2p-networking",children:"P2P communication"}),". Use the option to specify the required network interface when the device that Besu is running on has multiple network interfaces. The default is 0.0.0.0 (all interfaces)."]}),"\n",(0,a.jsx)(n.h3,{id:"p2p-port",children:(0,a.jsx)(n.code,{children:"p2p-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--p2p-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 1789\n--p2p-port=1789\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 1789\nBESU_P2P_PORT=1789\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'p2p-port="1789"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The P2P listening ports (UDP and TCP). The default is ",(0,a.jsx)(n.code,{children:"30303"}),". You must ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"expose ports appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"profile",children:(0,a.jsx)(n.code,{children:"profile"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--profile=<PROFILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--profile=STAKER\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_PROFILE=STAKER\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'profile="STAKER"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"Loads a pre-configured TOML file containing custom settings for a specific user profile.\nPossible values are:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#minimalist-staker-profile",children:(0,a.jsx)(n.code,{children:"MINIMALIST_STAKER"})})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#staker-profile",children:(0,a.jsx)(n.code,{children:"STAKER"})})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsxs)(n.a,{href:"/public-networks/how-to/configure-besu/profile#enterpriseprivate-profile",children:[(0,a.jsx)(n.code,{children:"ENTERPRISE"})," or ",(0,a.jsx)(n.code,{children:"PRIVATE"})]})," (aliases for the same profile)"]}),"\n",(0,a.jsxs)(n.li,{children:["File name of an ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#load-external-profiles",children:"external profile"}),",\nwithout the ",(0,a.jsx)(n.code,{children:".toml"})," extension."]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["The default is ",(0,a.jsx)(n.code,{children:"null"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"random-peer-priority-enabled",children:(0,a.jsx)(n.code,{children:"random-peer-priority-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--random-peer-priority-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--random-peer-priority-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RANDOM_PEER_PRIORITY_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"random-peer-priority-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables random prioritization of incoming connections. Enable in small, stable networks to prevent closed groups of peers forming. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"receipt-compaction-enabled",children:(0,a.jsx)(n.code,{children:"receipt-compaction-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--receipt-compaction-enabled=<true|false>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--receipt-compaction-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RECEIPT_COMPACTION_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"receipt-compaction-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables receipt compaction.\nCompacting receipts reduces storage by trimming unnecessary data from transaction receipts.\nThe default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"remote-connections-limit-enabled",children:(0,a.jsx)(n.code,{children:"remote-connections-limit-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--remote-connections-limit-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--remote-connections-limit-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_REMOTE_CONNECTIONS_LIMIT_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"remote-connections-limit-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables using the ",(0,a.jsx)(n.a,{href:"#remote-connections-max-percentage",children:(0,a.jsx)(n.code,{children:"--remote-connections-max-percentage"})})," option to limit the percentage of remote P2P connections initiated by peers. The default is ",(0,a.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsx)(n.p,{children:"In private and permissioned networks with a level of trust between peers, disabling the remote connection limits may increase the speed at which nodes can join the network."})}),"\n",(0,a.jsx)(n.admonition,{type:"danger",children:(0,a.jsxs)(n.p,{children:["To prevent eclipse attacks, ensure you enable the remote connections limit when connecting to any public network, and especially when using ",(0,a.jsx)(n.a,{href:"#sync-mode",children:(0,a.jsx)(n.code,{children:"--sync-mode"})})," and ",(0,a.jsx)(n.a,{href:"#fast-sync-min-peers",children:(0,a.jsx)(n.code,{children:"--fast-sync-min-peers"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"remote-connections-max-percentage",children:(0,a.jsx)(n.code,{children:"remote-connections-max-percentage"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--remote-connections-max-percentage=<DOUBLE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--remote-connections-max-percentage=25\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_REMOTE_CONNECTIONS_MAX_PERCENTAGE=25\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"remote-connections-max-percentage=25\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The percentage of remote P2P connections you can establish with the node. Must be between 0 and 100, inclusive. The default is 60."}),"\n",(0,a.jsx)(n.h3,{id:"reorg-logging-threshold",children:(0,a.jsx)(n.code,{children:"reorg-logging-threshold"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--reorg-logging-threshold=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--reorg-logging-threshold=3\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_REORG_LOGGING_THRESHOLD=3\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"reorg-logging-threshold=3\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"Minimum depth of chain reorganizations to log. The default is 6."}),"\n",(0,a.jsx)(n.h3,{id:"required-block",children:(0,a.jsx)(n.code,{children:"required-block"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--required-block, --required-blocks[=BLOCK=HASH[,BLOCK=HASH...]...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--required-block=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_REQUIRED_BLOCK=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'required-block=["6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"Requires a peer with the specified block number to have the specified hash when connecting, or Besu rejects that peer."}),"\n",(0,a.jsx)(n.h3,{id:"revert-reason-enabled",children:(0,a.jsx)(n.code,{children:"revert-reason-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--revert-reason-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--revert-reason-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_REVERT_REASON_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"revert-reason-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables including the ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"})," in the transaction receipt, ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_estimategas",children:(0,a.jsx)(n.code,{children:"eth_estimateGas"})})," error response, ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_call",children:(0,a.jsx)(n.code,{children:"eth_call"})})," error response, and ",(0,a.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:(0,a.jsx)(n.code,{children:"trace"})})," response. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsx)(n.p,{children:"Enabling revert reason may use a significant amount of memory. We don't recommend enabling revert reason when connected to public Ethereum networks."})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-gas-cap",children:(0,a.jsx)(n.code,{children:"rpc-gas-cap"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-gas-cap=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-gas-cap=50000000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_GAS_CAP=50000000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-gas-cap=50000000\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Sets a limit on the amount of gas for transaction simulation RPC methods.\nThis option allows users to override the transaction's gas limit.\nThis can prevent the simulation of transactions with high gas usage by setting a predefined cap, preventing DoS attacks.\nIts value must be greater than or equal to ",(0,a.jsx)(n.code,{children:"0"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"0"}),", which indicates there is no limit.\nThis cap prevents ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_call",children:(0,a.jsx)(n.code,{children:"eth_call"})})," requests from using excessive resources."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-api",children:(0,a.jsx)(n.code,{children:"rpc-http-api"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-api=<api name>[,<api name>,...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-api=ETH,NET,WEB3\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_API=ETH,NET,WEB3\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-api=["ETH","NET","WEB3"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of APIs to enable on the JSON-RPC HTTP channel. When you use this option you must also specify the ",(0,a.jsx)(n.code,{children:"--rpc-http-enabled"})," option. The available API options are: ",(0,a.jsx)(n.code,{children:"ADMIN"}),", ",(0,a.jsx)(n.code,{children:"CLIQUE"}),", ",(0,a.jsx)(n.code,{children:"DEBUG"}),", ",(0,a.jsx)(n.code,{children:"EEA"}),", ",(0,a.jsx)(n.code,{children:"ETH"}),", ",(0,a.jsx)(n.code,{children:"IBFT"}),", ",(0,a.jsx)(n.code,{children:"MINER"}),", ",(0,a.jsx)(n.code,{children:"NET"}),", ",(0,a.jsx)(n.code,{children:"PERM"}),", ",(0,a.jsx)(n.code,{children:"PLUGINS"}),", ",(0,a.jsx)(n.code,{children:"PRIV"}),", ",(0,a.jsx)(n.code,{children:"QBFT"}),", ",(0,a.jsx)(n.code,{children:"TRACE"}),", ",(0,a.jsx)(n.code,{children:"TXPOOL"}),", and ",(0,a.jsx)(n.code,{children:"WEB3"}),". The default is: ",(0,a.jsx)(n.code,{children:"ETH"}),", ",(0,a.jsx)(n.code,{children:"NET"}),", ",(0,a.jsx)(n.code,{children:"WEB3"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The singular ",(0,a.jsx)(n.code,{children:"--rpc-http-api"})," and plural ",(0,a.jsx)(n.code,{children:"--rpc-http-apis"})," are available and are two names for the same option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-api-methods-no-auth",children:(0,a.jsx)(n.code,{children:"rpc-http-api-methods-no-auth"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-api-methods-no-auth=<api method>[,<api method>,...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-api-methods-no-auth=admin_peers,eth_getWork\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_API_METHODS_NO_AUTH=admin_peers,eth_getWork\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-api-methods-no-auth=["admin_peers","eth_getWork"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of JSON-RPC API methods to exclude from ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication services"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You must enable JSON-RPC HTTP authentication using ",(0,a.jsx)(n.a,{href:"#rpc-http-authentication-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-http-authentication-enabled"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-authentication-credentials-file",children:(0,a.jsx)(n.code,{children:"rpc-http-authentication-credentials-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-credentials-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-credentials-file=/home/me/me_node/auth.toml\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-authentication-credentials-file="/home/me/me_node/auth.toml"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#1-create-the-credentials-file",children:"credentials file"})," for JSON-RPC API ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-authentication-enabled",children:(0,a.jsx)(n.code,{children:"rpc-http-authentication-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_AUTHENTICATION_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-http-authentication-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"})," for the JSON-RPC HTTP service."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-authentication-jwt-algorithm",children:(0,a.jsx)(n.code,{children:"rpc-http-authentication-jwt-algorithm"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"---rpc-http-authentication-jwt-algorithm=<algorithm>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-jwt-algorithm=ES256\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_AUTHENTICATION_JWT_ALGORITHM=ES256\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-authentication-jwt-algorithm="ES256"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#1-generate-a-private-and-public-key-pair",children:"JWT key algorithm"}),"\nused to generate the keypair for JSON-RPC HTTP authentication.\nPossible values are ",(0,a.jsx)(n.code,{children:"RS256"}),", ",(0,a.jsx)(n.code,{children:"RS384"}),", ",(0,a.jsx)(n.code,{children:"RS512"}),", ",(0,a.jsx)(n.code,{children:"ES256"}),", ",(0,a.jsx)(n.code,{children:"ES384"}),", and ",(0,a.jsx)(n.code,{children:"ES512"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"RS256"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-authentication-jwt-public-key-file",children:(0,a.jsx)(n.code,{children:"rpc-http-authentication-jwt-public-key-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-jwt-public-key-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-authentication-jwt-public-key-file=publicKey.pem\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_RPC_HTTP_AUTHENTICATION_JWT_PUBLIC_KEY_FILE="publicKey.pem"\n'})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-authentication-jwt-public-key-file="publicKey.pem"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#jwt-public-key-authentication",children:"JWT provider's public key file"})," used for JSON-RPC HTTP authentication with an external JWT."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-cors-origins",children:(0,a.jsx)(n.code,{children:"rpc-http-cors-origins"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'--rpc-http-cors-origins=<url>[,<url>...]... or all or "*"\n'})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-cors-origins=http://medomain.com,http://remix.ethereum.org\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_CORS_ORIGINS=http://medomain.com,https://meotherdomain.com\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-cors-origins=["http://medomain.com","https://meotherdomain.com"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"A comma-separated list of domain URLs for CORS validation."}),"\n",(0,a.jsx)(n.p,{children:"Listed domains can access the node using JSON-RPC. If your client interacts with Besu using a browser app (such as Remix or a block explorer), add the client domain to the list."}),"\n",(0,a.jsxs)(n.p,{children:["The default value is ",(0,a.jsx)(n.code,{children:'"none"'}),". If you do not list any domains, browser apps cannot interact with your Besu node."]}),"\n",(0,a.jsxs)(n.admonition,{type:"note",children:[(0,a.jsxs)(n.p,{children:["To run a local Besu node with MetaMask, set ",(0,a.jsx)(n.code,{children:"--rpc-http-cors-origins"})," to ",(0,a.jsx)(n.code,{children:"chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn"}),"."]}),(0,a.jsxs)(n.p,{children:["Remember to also include the dapp domain MetaMask interacts with, for example if your app is deployed on Remix and you're using MetaMask to interact with the contract, use ",(0,a.jsx)(n.code,{children:"--rpc-http-cors-origins=chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn,http://remix.ethereum.org"})]})]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["For testing and development purposes, use ",(0,a.jsx)(n.code,{children:'"all"'})," or ",(0,a.jsx)(n.code,{children:'"*"'})," to accept requests from any domain. We don't recommend accepting requests from any domain for production environments."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-enabled",children:(0,a.jsx)(n.code,{children:"rpc-http-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-http-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the JSON-RPC HTTP service. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-host",children:(0,a.jsx)(n.code,{children:"rpc-http-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\n--rpc-http-host=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_HOST=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-host="0.0.0.0"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host on which JSON-RPC HTTP listens. The default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["To allow remote connections, set to ",(0,a.jsx)(n.code,{children:"0.0.0.0"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["Setting the host to ",(0,a.jsx)(n.code,{children:"0.0.0.0"})," exposes the RPC connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-max-active-connections",children:(0,a.jsx)(n.code,{children:"rpc-http-max-active-connections"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-active-connections=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-active-connections=100\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_MAX_ACTIVE_CONNECTIONS=100\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",children:"rpc-http-max-active-connections=100\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The maximum number of allowed JSON-RPC HTTP connections. Once this limit is reached, incoming connections are rejected. The default is 80."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-max-request-content-length",children:(0,a.jsx)(n.code,{children:"rpc-http-max-request-content-length"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-request-content-length=<LONG>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-request-content-length=2097152\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_MAX_REQUEST_CONTENT_LENGTH=2097152\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",children:"rpc-http-max-request-content-length=2097152\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The maximum request content length.\nBesu only accepts JSON-RPC API requests with a body size less than or equal to this value.\nThe default is 5242880 (5 MB)."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-max-batch-size",children:(0,a.jsx)(n.code,{children:"rpc-http-max-batch-size"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-batch-size=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-max-batch-size=1200\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_MAX_BATCH_SIZE=1200\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",children:"rpc-http-max-batch-size=1200\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of allowed requests in a ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#http",children:"RPC batch request"}),". The default limit is ",(0,a.jsx)(n.code,{children:"1024"}),", and ",(0,a.jsx)(n.code,{children:"-1"})," specifies no limit."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-port",children:(0,a.jsx)(n.code,{children:"rpc-http-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 3435\n--rpc-http-port=3435\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_PORT=3435\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-port="3435"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port (TCP) on which JSON-RPC HTTP listens. The default is ",(0,a.jsx)(n.code,{children:"8545"}),". You must ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"expose ports appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-ca-clients-enabled",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-ca-clients-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-ca-clients-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-ca-clients-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_CA_CLIENTS_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-http-tls-ca-clients-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables clients with trusted CA certificates to connect. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You must enable client authentication using the ",(0,a.jsx)(n.a,{href:"#rpc-http-tls-client-auth-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-http-tls-client-auth-enabled"})})," option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-client-auth-enabled",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-client-auth-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-client-auth-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-client-auth-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_CLIENT_AUTH_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-http-tls-client-auth-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables TLS client authentication for the JSON-RPC HTTP service. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You must specify ",(0,a.jsx)(n.a,{href:"#rpc-http-tls-ca-clients-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-http-tls-ca-clients-enabled"})})," and/or ",(0,a.jsx)(n.a,{href:"#rpc-http-tls-known-clients-file",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-known-clients-file"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-cipher-suite",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-cipher-suite"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-cipher-suite=<cipherSuiteName>[, <cipherSuiteName>...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_CIPHER_SUITE=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-tls-cipher-suite=["TLS_AES_256_GCM_SHA384","TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"A list of comma-separated TLS cipher suites to support."}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The singular ",(0,a.jsx)(n.code,{children:"--rpc-http-tls-cipher-suite"})," and plural ",(0,a.jsx)(n.code,{children:"--rpc-http-tls-cipher-suites"})," are available and are two names for the same option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-enabled",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-http-tls-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables TLS for the JSON-RPC HTTP service. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.a,{href:"#rpc-http-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-http-enabled"})})," must be enabled."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-keystore-file",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-keystore-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-keystore-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-keystore-file=/home/me/me_node/keystore.pfx\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_KEYSTORE_FILE=/home/me/me_node/keystore.pfx\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-tls-keystore-file="/home/me/me_node/keystore.pfx"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"The Keystore file (in PKCS #12 format) that contains private key and the certificate presented to the client during authentication."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-keystore-password-file",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-keystore-password-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-keystore-password-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-keystore-password-file=/home/me/me_node/password\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-tls-keystore-password-file="/home/me/me_node/password"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"The path to the file containing the password to decrypt the keystore."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-known-clients-file",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-known-clients-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-known-clients-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-known-clients-file=/home/me/me_node/knownClients\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_KNOWN_CLIENTS_FILE=/home/me/me_node/knownClients\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-tls-known-clients-file="/home/me/me_node/knownClients"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the file used to ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/tls/client-and-server#create-the-known-clients-file",children:"authenticate clients"})," using self-signed certificates or non-public certificates."]}),"\n",(0,a.jsxs)(n.p,{children:["Must contain the certificate's Common Name, and SHA-256 fingerprint in the format ",(0,a.jsx)(n.code,{children:"<CommonName> <hex-string>"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You must enable client authentication using the ",(0,a.jsx)(n.a,{href:"#rpc-http-tls-client-auth-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-http-tls-client-auth-enabled"})})," option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-http-tls-protocol",children:(0,a.jsx)(n.code,{children:"rpc-http-tls-protocol"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-protocol=<protocolName>[, <protocolName>...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-http-tls-protocol=TLSv1.3,TLSv1.2\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_HTTP_TLS_PROTOCOL=TLSv1.3,TLSv1.2\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-http-tls-protocol=["TLSv1.3","TLSv1.2"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A list of comma-separated TLS protocols to support. The default is ",(0,a.jsx)(n.code,{children:"DEFAULT_TLS_PROTOCOLS"}),", a list which includes ",(0,a.jsx)(n.code,{children:"TLSv1.3"})," and ",(0,a.jsx)(n.code,{children:"TLSv1.2"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The singular ",(0,a.jsx)(n.code,{children:"--rpc-http-tls-protocol"})," and plural ",(0,a.jsx)(n.code,{children:"--rpc-http-tls-protocols"})," are available and are two names for the same option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-max-logs-range",children:(0,a.jsx)(n.code,{children:"rpc-max-logs-range"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-max-logs-range=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-max-logs-range=500\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_MAX_LOGS_RANGE=500\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-max-logs-range=500\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["When using ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,a.jsx)(n.code,{children:"eth_getLogs"})}),", the maximum number of blocks to retrieve logs from. Set to 0 to specify no limit. The default is 5000."]}),"\n",(0,a.jsxs)(n.admonition,{type:"caution",children:[(0,a.jsxs)(n.p,{children:["Using ",(0,a.jsx)(n.code,{children:"eth_getLogs"})," to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response."]}),(0,a.jsx)(n.p,{children:"We recommend setting a range limit or leaving this option at its default value."})]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-max-trace-filter-range",children:(0,a.jsx)(n.code,{children:"rpc-max-trace-filter-range"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-max-trace-filter-range=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-max-trace-filter-range=100\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--BESU_RPC_MAX_TRACE_FILTER_RANGE=100\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-max-trace-filter-range=100\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of blocks you can supply to the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#trace_filter",children:(0,a.jsx)(n.code,{children:"trace_filter"})})," method. The value must be equal to or greater than ",(0,a.jsx)(n.code,{children:"0"}),". Setting this option to ",(0,a.jsx)(n.code,{children:"0"})," indicates there is no limit. The default is ",(0,a.jsx)(n.code,{children:"1000"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-tx-feecap",children:(0,a.jsx)(n.code,{children:"rpc-tx-feecap"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-tx-feecap=<MAX_FEE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-tx-feecap=1200000000000000000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_TX_FEECAP=1200000000000000000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-tx-feecap=1200000000000000000\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum transaction fee (in Wei) accepted for transactions submitted through the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,a.jsx)(n.code,{children:"eth_sendRawTransaction"})})," RPC. The default is 1000000000000000000 (1 ether)."]}),"\n",(0,a.jsx)(n.p,{children:"If set to 0, then this option is ignored and no cap is applied."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-api",children:(0,a.jsx)(n.code,{children:"rpc-ws-api"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-api=<api name>[,<api name>...]...\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-api=ETH,NET,WEB3\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_API=ETH,NET,WEB3\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-api=["ETH","NET","WEB3"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of APIs to enable on the WebSockets channel. When you use this option you must also specify the ",(0,a.jsx)(n.code,{children:"--rpc-ws-enabled"})," option. The available API options are: ",(0,a.jsx)(n.code,{children:"ADMIN"}),", ",(0,a.jsx)(n.code,{children:"CLIQUE"}),", ",(0,a.jsx)(n.code,{children:"DEBUG"}),", ",(0,a.jsx)(n.code,{children:"EEA"}),", ",(0,a.jsx)(n.code,{children:"ETH"}),", ",(0,a.jsx)(n.code,{children:"IBFT"}),", ",(0,a.jsx)(n.code,{children:"MINER"}),", ",(0,a.jsx)(n.code,{children:"NET"}),", ",(0,a.jsx)(n.code,{children:"PERM"}),", ",(0,a.jsx)(n.code,{children:"PLUGINS"}),", ",(0,a.jsx)(n.code,{children:"PRIV"}),", ",(0,a.jsx)(n.code,{children:"QBFT"}),", ",(0,a.jsx)(n.code,{children:"TRACE"}),", ",(0,a.jsx)(n.code,{children:"TXPOOL"}),", and ",(0,a.jsx)(n.code,{children:"WEB3"}),". The default is: ",(0,a.jsx)(n.code,{children:"ETH"}),", ",(0,a.jsx)(n.code,{children:"NET"}),", ",(0,a.jsx)(n.code,{children:"WEB3"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.p,{children:["The singular ",(0,a.jsx)(n.code,{children:"--rpc-ws-api"})," and plural ",(0,a.jsx)(n.code,{children:"--rpc-ws-apis"})," options are available and are two names for the same option."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-api-methods-no-auth",children:(0,a.jsx)(n.code,{children:"rpc-ws-api-methods-no-auth"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-api-methods-no-auth=<api method>[,<api method>,...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-api-methods-no-auth=admin_peers,eth_getWork\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_API_METHODS_NO_AUTH=admin_peers,eth_getWork\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-api-methods-no-auth=["admin_peers","eth_getWork"]\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of JSON-RPC API methods to exclude from ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication services"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["You must enable JSON-RPC WebSocket authentication using ",(0,a.jsx)(n.a,{href:"#rpc-ws-authentication-enabled",children:(0,a.jsx)(n.code,{children:"--rpc-ws-authentication-enabled"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-authentication-credentials-file",children:(0,a.jsx)(n.code,{children:"rpc-ws-authentication-credentials-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-credentials-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-credentials-file=/home/me/me_node/auth.toml\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-authentication-credentials-file="/home/me/me_node/auth.toml"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#1-create-the-credentials-file",children:"credentials file"})," for JSON-RPC API ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-authentication-enabled",children:(0,a.jsx)(n.code,{children:"rpc-ws-authentication-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_AUTHENTICATION_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-ws-authentication-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"})," for the JSON-RPC WebSocket service."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"wscat"})," doesn't support headers. ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Authentication"})," requires you to pass an authentication token in the request header. To use authentication with WebSockets, you need an app that supports headers."]})}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-authentication-jwt-algorithm",children:(0,a.jsx)(n.code,{children:"rpc-ws-authentication-jwt-algorithm"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"---rpc-ws-authentication-jwt-algorithm=<algorithm>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-jwt-algorithm=ES256\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_AUTHENTICATION_JWT_ALGORITHM=ES256\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-authentication-jwt-algorithm="ES256"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#1-generate-a-private-and-public-key-pair",children:"JWT key algorithm"}),"\nused to generate the keypair for JSON-RPC WebSocket authentication.\nPossible values are ",(0,a.jsx)(n.code,{children:"RS256"}),", ",(0,a.jsx)(n.code,{children:"RS384"}),", ",(0,a.jsx)(n.code,{children:"RS512"}),", ",(0,a.jsx)(n.code,{children:"ES256"}),", ",(0,a.jsx)(n.code,{children:"ES384"}),", and ",(0,a.jsx)(n.code,{children:"ES512"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"RS256"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-authentication-jwt-public-key-file",children:(0,a.jsx)(n.code,{children:"rpc-ws-authentication-jwt-public-key-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-jwt-public-key-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-authentication-jwt-public-key-file=publicKey.pem\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'BESU_RPC_WS_AUTHENTICATION_JWT_PUBLIC_KEY_FILE="publicKey.pem"\n'})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-authentication-jwt-public-key-file="publicKey.pem"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#jwt-public-key-authentication",children:"JWT provider's public key file"})," used for JSON-RPC WebSocket authentication with an external JWT."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-enabled",children:(0,a.jsx)(n.code,{children:"rpc-ws-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-enabled=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_ENABLED=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rpc-ws-enabled=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables the WebSocket JSON-RPC service. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-host",children:(0,a.jsx)(n.code,{children:"rpc-ws-host"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-host=<HOST>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on all interfaces\n--rpc-ws-host=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_HOST=0.0.0.0\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-host="0.0.0.0"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The host on which WebSocket JSON-RPC listens.\nThe default is ",(0,a.jsx)(n.code,{children:"127.0.0.1"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["To allow remote connections, set to ",(0,a.jsx)(n.code,{children:"0.0.0.0"})]}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-max-active-connections",children:(0,a.jsx)(n.code,{children:"rpc-ws-max-active-connections"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-max-active-connections=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-max-active-connections=100\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_MAX_ACTIVE_CONNECTIONS=100\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",children:"rpc-ws-max-active-connections=100\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The maximum number of WebSocket connections allowed for JSON-RPC. Once this limit is reached, incoming connections are rejected. The default is 80."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-max-frame-size",children:(0,a.jsx)(n.code,{children:"rpc-ws-max-frame-size"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-max-frame-size=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-max-frame-size=65536\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_MAX_FRAME_SIZE=65536\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",children:"rpc-ws-max-frame-size=65536\n"})})})]}),"\n",(0,a.jsx)(n.p,{children:"The maximum size in bytes for JSON-RPC WebSocket frames. If this limit is exceeded, the WebSocket disconnects. The default is 1048576 (or 1 MB)."}),"\n",(0,a.jsx)(n.h3,{id:"rpc-ws-port",children:(0,a.jsx)(n.code,{children:"rpc-ws-port"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--rpc-ws-port=<PORT>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# to listen on port 6174\n--rpc-ws-port=6174\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_RPC_WS_PORT=6174\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'rpc-ws-port="6174"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The port (TCP) on which WebSocket JSON-RPC listens. The default is ",(0,a.jsx)(n.code,{children:"8546"}),". You must ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"expose ports appropriately"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"security-module",children:(0,a.jsx)(n.code,{children:"security-module"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--security-module=<NAME>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--security-module=security_module\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_SECURITY_MODULE=security_module\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'security-module="security_module"\n'})})})]}),"\n",(0,a.jsx)(n.p,{children:"Name of the security module plugin to use. For example, a Hardware Security Module (HSM) or V3 filestore plugin."}),"\n",(0,a.jsxs)(n.p,{children:["The default is the node's local private key file specified using ",(0,a.jsx)(n.a,{href:"#node-private-key-file",children:(0,a.jsx)(n.code,{children:"--node-private-key-file"})}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"static-nodes-file",children:(0,a.jsx)(n.code,{children:"static-nodes-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--static-nodes-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--static-nodes-file=~/besudata/static-nodes.json\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_STATIC_NODES_FILE=~/besudata/static-nodes.json\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'static-nodes-file="~/besudata/static-nodes.json"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Static nodes JSON file containing the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static nodes"})," for this node to connect to. The default is ",(0,a.jsx)(n.code,{children:"datapath/static-nodes.json"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"strict-tx-replay-protection-enabled",children:(0,a.jsx)(n.code,{children:"strict-tx-replay-protection-enabled"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--strict-tx-replay-protection-enabled[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--strict-tx-replay-protection-enabled=false\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"STRICT_TX_REPLAY_PROTECTION_ENABLED=false\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"strict-tx-replay-protection-enabled=false\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables replay protection, in accordance with ",(0,a.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-155",children:"EIP-155"}),", on transactions submitted using JSON-RPC. The default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsxs)(n.h3,{id:"sync-min-peers-fast-sync-min-peers",children:[(0,a.jsx)(n.code,{children:"sync-min-peers"}),", ",(0,a.jsx)(n.code,{children:"fast-sync-min-peers"})]}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--sync-min-peers=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--sync-min-peers=8\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_SYNC_MIN_PEERS=8\n"})})}),(0,a.jsx)(r.A,{value:"Example configuration file",label:"Example configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"sync-min-peers=8\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The minimum number of peers required before starting ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node",children:"sync"}),". The default is ",(0,a.jsx)(n.code,{children:"5"}),". Set to ",(0,a.jsx)(n.code,{children:"1"})," to enable static peers to contribute to the initial sync."]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsx)(n.p,{children:"This option does not apply to Proof of Stake networks."})}),"\n",(0,a.jsx)(n.h3,{id:"sync-mode",children:(0,a.jsx)(n.code,{children:"sync-mode"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--sync-mode=<MODE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--sync-mode=SNAP\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_SYNC_MODE=SNAP\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'sync-mode="SNAP"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The synchronization mode. Use ",(0,a.jsx)(n.code,{children:"SNAP"})," for ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap sync"}),", ",(0,a.jsx)(n.code,{children:"CHECKPOINT"})," for ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#checkpoint-synchronization",children:"checkpoint sync"}),", ",(0,a.jsx)(n.code,{children:"FAST"})," for ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#fast-synchronization",children:"fast sync"}),", and ",(0,a.jsx)(n.code,{children:"FULL"})," for ",(0,a.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"full sync"}),"."]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["The default is ",(0,a.jsx)(n.code,{children:"FULL"})," when connecting to a private network by not using the ",(0,a.jsx)(n.a,{href:"#network",children:(0,a.jsx)(n.code,{children:"--network"})})," option and specifying the ",(0,a.jsx)(n.a,{href:"#genesis-file",children:(0,a.jsx)(n.code,{children:"--genesis-file"})})," option."]}),"\n",(0,a.jsxs)(n.li,{children:["The default is ",(0,a.jsx)(n.code,{children:"SNAP"})," when using the ",(0,a.jsx)(n.a,{href:"#network",children:(0,a.jsx)(n.code,{children:"--network"})})," option with named networks, except for the ",(0,a.jsx)(n.code,{children:"dev"})," development network. ",(0,a.jsx)(n.code,{children:"SNAP"})," is also the default if running Besu on the default network (Ethereum Mainnet) by specifying neither ",(0,a.jsx)(n.a,{href:"#network",children:"network"})," nor ",(0,a.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{title:"Sync nodes for BFT",type:"note",children:(0,a.jsxs)(n.p,{children:["If you're running a node on a ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," or ",(0,a.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," network, your node must use fast sync or full sync."]})}),"\n",(0,a.jsx)(n.admonition,{type:"tip",children:(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"We recommend using snap sync over fast sync because snap sync can be faster by several days."}),"\n",(0,a.jsx)(n.li,{children:"It might become impossible to sync Ethereum Mainnet using fast sync in the future, as clients drop support for fast sync. We recommend you update Besu to a version that supports newer sync methods."}),"\n",(0,a.jsxs)(n.li,{children:["When synchronizing in a mode other than ",(0,a.jsx)(n.code,{children:"FULL"}),", most historical world state data is unavailable. Any methods attempting to access unavailable world state data return ",(0,a.jsx)(n.code,{children:"null"}),"."]}),"\n"]})}),"\n",(0,a.jsx)(n.h3,{id:"target-gas-limit",children:(0,a.jsx)(n.code,{children:"target-gas-limit"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--target-gas-limit=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--target-gas-limit=8000000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TARGET_GAS_LIMIT=8000000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'target-gas-limit="8000000"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The gas limit toward which Besu will gradually move on an existing network, if enough miners are in agreement. To change the block gas limit set in the genesis file without creating a new network, use ",(0,a.jsx)(n.code,{children:"target-gas-limit"}),". The gas limit between blocks can change only 1/1024th, so the target tells the block creator how to set the gas limit in its block. If the values are the same or within 1/1024th, Besu sets the limit to the specified value. Otherwise, the limit moves as far as it can within that constraint."]}),"\n",(0,a.jsxs)(n.p,{children:["If a value for ",(0,a.jsx)(n.code,{children:"target-gas-limit"})," is not specified, the block gas limit remains at the value specified in the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/genesis-items#genesis-block-parameters",children:"genesis file"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Use the ",(0,a.jsx)(n.a,{href:"/public-networks/reference/api/#miner_changetargetgaslimit",children:(0,a.jsx)(n.code,{children:"miner_changeTargetGasLimit"})})," API to update the ",(0,a.jsx)(n.code,{children:"target-gas-limit"})," while Besu is running. Alternatively restart Besu with an updated ",(0,a.jsx)(n.code,{children:"target-gas-limit"})," value."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool",children:(0,a.jsx)(n.code,{children:"tx-pool"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool=<TYPE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool=sequenced\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL=sequenced\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool="sequenced"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Type of ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"})," to use.\nSet to ",(0,a.jsx)(n.code,{children:"layered"})," to use the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"})," implementation.\nThe default is ",(0,a.jsx)(n.code,{children:"layered"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Set to ",(0,a.jsx)(n.code,{children:"sequenced"})," to use the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#sequenced-transaction-pool",children:"sequenced transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"sequenced"})," for the ",(0,a.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#enterpriseprivate-profile",children:"enterprise/private profile"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-blob-price-bump",children:(0,a.jsx)(n.code,{children:"tx-pool-blob-price-bump"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-blob-price-bump=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-blob-price-bump=25\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_BLOB_PRICE_BUMP=25\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-blob-price-bump="25"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Sets the price bump policy for re-issued blob transactions as a percentage increase in price.\nA blob transaction can only replace, or be replaced by, another blob transaction.\nThe default is ",(0,a.jsx)(n.code,{children:"100"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-enable-save-restore",children:(0,a.jsx)(n.code,{children:"tx-pool-enable-save-restore"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-enable-save-restore[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-enable-save-restore=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_ENABLE_SAVE_RESTORE=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"tx-pool-enable-save-restore=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables saving the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"})," contents to a\nfile on shutdown and reloading it at startup.\nThe default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["You can define a custom path to the transaction pool file using the ",(0,a.jsx)(n.a,{href:"#tx-pool-save-file",children:(0,a.jsx)(n.code,{children:"--tx-pool-save-file"})})," option."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-layer-max-capacity",children:(0,a.jsx)(n.code,{children:"tx-pool-layer-max-capacity"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-layer-max-capacity=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-layer-max-capacity=20000000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_LAYER_MAX_CAPACITY=20000000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-layer-max-capacity="20000000"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Maximum amount of memory (in bytes) that any layer within the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"})," can occupy.\nThe default is ",(0,a.jsx)(n.code,{children:"12500000"}),", or 12.5 MB."]}),"\n",(0,a.jsx)(n.p,{children:"There are two memory-limited layers in the transaction pool, so the expected memory consumption is\ntwice the value specified by this option, or 25 MB by default.\nIncrease this value if you have spare RAM and the eviction rate is high for your network."}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-limit-by-account-percentage",children:(0,a.jsx)(n.code,{children:"tx-pool-limit-by-account-percentage"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-limit-by-account-percentage=<DOUBLE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-limit-by-account-percentage=0.1\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_LIMIT_BY_ACCOUNT_PERCENTAGE=0.1\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"tx-pool-limit-by-account-percentage=0.4\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum percentage of transactions from a single sender kept in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),".\nAccepted values are in the range ",(0,a.jsx)(n.code,{children:"(0\u20131]"}),".\nThe default is ",(0,a.jsx)(n.code,{children:".001"}),", or 0.1% of transactions from a single sender to be kept in the pool."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["With the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),"\nimplementation, this option is not applicable.\nReplace this option with ",(0,a.jsx)(n.a,{href:"#tx-pool-max-future-by-sender",children:(0,a.jsx)(n.code,{children:"--tx-pool-max-future-by-sender"})})," to\nspecify the maximum number of sequential transactions from a single sender kept in the pool."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["The default value is often unsuitable for ",(0,a.jsx)(n.a,{href:"/private-networks/",children:"private networks"}),".\nThis feature mitigates future-nonce transactions from filling the pool without ever being\nexecutable by Besu.\nThis is important for Mainnet, but may cause issues on private networks.\nPlease update this value or set to ",(0,a.jsx)(n.code,{children:"1"})," if you know the nodes gossiping transactions in your network."]}),"\n"]}),"\n"]})}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-max-future-by-sender",children:(0,a.jsx)(n.code,{children:"tx-pool-max-future-by-sender"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-future-by-sender=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-future-by-sender=250\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_MAX_FUTURE_BY_SENDER=250\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-max-future-by-sender="250"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of sequential transactions from a single sender kept in the\n",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"200"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"Increase this value to allow a single sender to fit more transactions in a single block.\nFor private networks, you can set this in the hundreds or thousands if you want to ensure\ntransactions with large nonce gaps remain in the transaction pool."}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-max-prioritized",children:(0,a.jsx)(n.code,{children:"tx-pool-max-prioritized"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-prioritized=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-prioritized=1500\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_MAX_PRIORITIZED=1500\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-max-prioritized="1500"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of transactions that are prioritized in the\n",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"2000"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"For private networks, we recommend setting this value to the maximum number of transactions that fit\nin a block in your network."}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-max-prioritized-by-type",children:(0,a.jsx)(n.code,{children:"tx-pool-max-prioritized-by-type"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-prioritized-by-type=<TYPE=INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-prioritized-by-type=BLOB=6\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_MAX_PRIORITIZED_BY_TYPE=BLOB=6\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-max-prioritized-by-type="BLOB=6"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of transactions of a specific ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/types",children:"transaction type"})," that are prioritized in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["This option is mostly useful for tuning the amount of prioritized ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/types#blob-transactions",children:"blob transactions"})," in the transaction pool.\nKeeping the prioritized layer sorted is costly, and only a few blob transactions can fit in a block (currently a maximum of six).\nTuning the maximum number of prioritized transactions by type can help maintain the efficiency and performance of the transaction pool.\nThe default is ",(0,a.jsx)(n.code,{children:"BLOB=6"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-max-size",children:(0,a.jsx)(n.code,{children:"tx-pool-max-size"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-size=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-max-size=2000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_MAX_SIZE=2000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-max-size="2000"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum number of transactions kept in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"4096"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["With the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),"\nimplementation, this option is not applicable because the layered pool is limited by memory size\ninstead of the number of transactions.\nTo configure the maximum memory capacity, use ",(0,a.jsx)(n.a,{href:"#tx-pool-layer-max-capacity",children:(0,a.jsx)(n.code,{children:"--tx-pool-layer-max-capacity"})}),"."]})}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-min-gas-price",children:(0,a.jsx)(n.code,{children:"tx-pool-min-gas-price"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-min-gas-price=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-min-gas-price=2000\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_MIN_GAS_PRICE=2000\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-min-gas-price="2000"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The minimum gas price, in wei, required for a transaction to be accepted into the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-no-local-priority",children:(0,a.jsx)(n.code,{children:"tx-pool-no-local-priority"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-no-local-priority[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-no-local-priority=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_NO_LOCAL_PRIORITY=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"tx-pool-no-local-priority=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["If this option is set to ",(0,a.jsx)(n.code,{children:"true"}),", senders of transactions submitted via RPC are ",(0,a.jsx)(n.em,{children:"not"})," prioritized over\nremote transactions in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-price-bump",children:(0,a.jsx)(n.code,{children:"tx-pool-price-bump"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-price-bump=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-price-bump=25\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_PRICE_BUMP=25\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"tx-pool-price-bump=25\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The price bump percentage to\n",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#replacing-transactions-with-the-same-sender-and-nonce",children:"replace an existing transaction in the transaction pool"}),".\nFor networks with a ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#in-networks-with-a-base-fee-and-priced-gas",children:"base fee and priced gas"}),", the default is ",(0,a.jsx)(n.code,{children:"10"}),", or 10%.\nFor networks with ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#in-networks-with-zero-base-base-or-free-gas",children:"zero base fee, or free gas"}),", the default is ",(0,a.jsx)(n.code,{children:"0"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-priority-senders",children:(0,a.jsx)(n.code,{children:"tx-pool-priority-senders"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-priority-senders=<address>[,<address>,...]\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-priority-senders=0x13003d886a7be927d9451c27eb3bc8d3616e26e9\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_PRIORITY_SENDERS=0x13003d886a7be927d9451c27eb3bc8d3616e26e9\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-priority-senders="0x13003d886a7be927d9451c27eb3bc8d3616e26e9"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["A comma-separated list of sender addresses to prioritize in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),".\nTransactions sent from these addresses, from any source, are prioritized and only evicted after all others.\nIf not specified, only senders submitting transactions via RPC have priority (unless\n",(0,a.jsx)(n.a,{href:"#tx-pool-no-local-priority",children:(0,a.jsx)(n.code,{children:"--tx-pool-no-local-priority"})})," is set to ",(0,a.jsx)(n.code,{children:"true"}),")."]}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-retention-hours",children:(0,a.jsx)(n.code,{children:"tx-pool-retention-hours"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-retention-hours=<INTEGER>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-retention-hours=5\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_RETENTION_HOURS=5\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"tx-pool-retention-hours=5\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The maximum period (in hours) to hold pending transactions in the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),".\nThe default is ",(0,a.jsx)(n.code,{children:"13"}),"."]}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsxs)(n.p,{children:["With the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool#layered-transaction-pool",children:"layered transaction pool"}),"\nimplementation, this option is not applicable because old transactions will expire when the memory\ncache is full."]})}),"\n",(0,a.jsx)(n.h3,{id:"tx-pool-save-file",children:(0,a.jsx)(n.code,{children:"tx-pool-save-file"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-save-file=<FILE>\n"})})}),(0,a.jsx)(r.A,{value:"Example",label:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--tx-pool-save-file=/home/me/me_node/node_txpool.dump\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",label:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_TX_POOL_SAVE_FILE=/home/me/me_node/node_txpool.dump\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",label:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'tx-pool-save-file="/home/me/me_node/node_txpool.dump"\n'})})})]}),"\n",(0,a.jsxs)(n.p,{children:["The path to the file that stores the ",(0,a.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool's"}),"\ncontent if the save and restore functionality is enabled using\n",(0,a.jsx)(n.a,{href:"#tx-pool-enable-save-restore",children:(0,a.jsx)(n.code,{children:"--tx-pool-enable-save-restore"})}),".\nThe file is created on shutdown and reloaded during startup.\nThe default file name is ",(0,a.jsx)(n.code,{children:"txpool.dump"})," in the ",(0,a.jsx)(n.a,{href:"#data-path",children:"data directory"}),"."]}),"\n",(0,a.jsx)(n.h3,{id:"version",children:(0,a.jsx)(n.code,{children:"version"})}),"\n",(0,a.jsx)(i.A,{children:(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"-V, --version\n"})})})}),"\n",(0,a.jsx)(n.p,{children:"Prints version information and exits."}),"\n",(0,a.jsx)(n.h3,{id:"version-compatibility-protection",children:(0,a.jsx)(n.code,{children:"version-compatibility-protection"})}),"\n",(0,a.jsxs)(i.A,{children:[(0,a.jsx)(r.A,{value:"Syntax",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--version-compatibility-protection[=<true|false>]\n"})})}),(0,a.jsx)(r.A,{value:"Example",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"--version-compatibility-protection=true\n"})})}),(0,a.jsx)(r.A,{value:"Environment variable",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"BESU_VERSION_COMPATIBILITY_PROTECTION=true\n"})})}),(0,a.jsx)(r.A,{value:"Configuration file",children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"version-compatibility-protection=true\n"})})})]}),"\n",(0,a.jsxs)(n.p,{children:["Enables or disables performing version compatibility checks when starting Besu.\nIf set to ",(0,a.jsx)(n.code,{children:"true"}),", it checks that the version of Besu being started is the same\nor later than the version of Besu that previously started with the same data directory."]}),"\n",(0,a.jsxs)(n.p,{children:["The default is ",(0,a.jsx)(n.code,{children:"false"})," for named networks, such as Mainnet or Holesky, and ",(0,a.jsx)(n.code,{children:"true"}),"\nfor non-named networks."]}),"\n",(0,a.jsx)(n.h3,{id:"xhelp",children:(0,a.jsx)(n.code,{children:"Xhelp"})}),"\n",(0,a.jsx)(i.A,{children:(0,a.jsx)(r.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"-X, --Xhelp\n"})})})}),"\n",(0,a.jsx)(n.p,{children:"Displays the early access options and their descriptions, and exits."}),"\n",(0,a.jsx)(n.admonition,{type:"caution",children:(0,a.jsx)(n.p,{children:"The displayed options are unstable and may change between releases."})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(x,{...e})}):x(e)}},19365:(e,n,l)=>{l.d(n,{A:()=>r});l(96540);var a=l(18215);const s={tabItem:"tabItem_Ymn6"};var i=l(74848);function r(e){let{children:n,hidden:l,className:r}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,a.A)(s.tabItem,r),hidden:l,children:n})}},11470:(e,n,l)=>{l.d(n,{A:()=>A});var a=l(96540),s=l(18215),i=l(23104),r=l(56347),c=l(205),t=l(57485),o=l(31682),d=l(70679);function h(e){return a.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,a.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function x(e){const{values:n,children:l}=e;return(0,a.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:l,attributes:a,default:s}}=e;return{value:n,label:l,attributes:a,default:s}}))}(l);return function(e){const n=(0,o.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,l])}function p(e){let{value:n,tabValues:l}=e;return l.some((e=>e.value===n))}function u(e){let{queryString:n=!1,groupId:l}=e;const s=(0,r.W6)(),i=function(e){let{queryString:n=!1,groupId:l}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!l)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return l??null}({queryString:n,groupId:l});return[(0,t.aZ)(i),(0,a.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function j(e){const{defaultValue:n,queryString:l=!1,groupId:s}=e,i=x(e),[r,t]=(0,a.useState)((()=>function(e){let{defaultValue:n,tabValues:l}=e;if(0===l.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:l}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${l.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const a=l.find((e=>e.default))??l[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:n,tabValues:i}))),[o,h]=u({queryString:l,groupId:s}),[j,m]=function(e){let{groupId:n}=e;const l=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,d.Dv)(l);return[s,(0,a.useCallback)((e=>{l&&i.set(e)}),[l,i])]}({groupId:s}),b=(()=>{const e=o??j;return p({value:e,tabValues:i})?e:null})();(0,c.A)((()=>{b&&t(b)}),[b]);return{selectedValue:r,selectValue:(0,a.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);t(e),h(e),m(e)}),[h,m,i]),tabValues:i}}var m=l(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=l(74848);function f(e){let{className:n,block:l,selectedValue:a,selectValue:r,tabValues:c}=e;const t=[],{blockElementScrollPositionUntilNextRender:o}=(0,i.a_)(),d=e=>{const n=e.currentTarget,l=t.indexOf(n),s=c[l].value;s!==a&&(o(n),r(s))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const l=t.indexOf(e.currentTarget)+1;n=t[l]??t[0];break}case"ArrowLeft":{const l=t.indexOf(e.currentTarget)-1;n=t[l]??t[t.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":l},n),children:c.map((e=>{let{value:n,label:l,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:a===n?0:-1,"aria-selected":a===n,ref:e=>t.push(e),onKeyDown:h,onClick:d,...i,className:(0,s.A)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":a===n}),children:l??n},n)}))})}function v(e){let{lazy:n,children:l,selectedValue:i}=e;const r=(Array.isArray(l)?l:[l]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===i));return e?(0,a.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function E(e){const n=j(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",b.tabList),children:[(0,g.jsx)(f,{...n,...e}),(0,g.jsx)(v,{...n,...e})]})}function A(e){const n=(0,m.A)();return(0,g.jsx)(E,{...e,children:h(e.children)},String(n))}},28453:(e,n,l)=>{l.d(n,{R:()=>r,x:()=>c});var a=l(96540);const s={},i=a.createContext(s);function r(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7426.b60c03d2.js b/assets/js/7426.b60c03d2.js new file mode 100644 index 00000000000..07f0e1af6c2 --- /dev/null +++ b/assets/js/7426.b60c03d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7426],{87426:(t,e,a)=>{a.d(e,{diagram:()=>y});var r=a(63626),i=a(26312),n=a(21176),d=a(697),o=a(99702);a(74353),a(16750),a(42838);let s=0;const l=function(t){let e=t.id;return t.type&&(e+="<"+(0,o.x)(t.type)+">"),e},p=function(t,e,a,r){const{displayText:i,cssStyle:n}=e.getDisplayDetails(),d=t.append("tspan").attr("x",r.padding).text(i);""!==n&&d.attr("style",e.cssStyle),a||d.attr("dy",r.textHeight)},c=function(t,e,a,r){o.l.debug("Rendering class ",e,a);const i=e.id,n={id:i,label:e.id,width:0,height:0},d=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let s;s=e.link?d.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=s.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",a.textHeight),c=!1}));let g=l(e);const h=s.append("tspan").text(g).attr("class","title");c||h.attr("dy",a.textHeight);const f=s.node().getBBox().height;let x,u,y;if(e.members.length>0){x=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin/2).attr("y2",a.padding+f+a.dividerMargin/2);const t=d.append("text").attr("x",a.padding).attr("y",f+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(e){p(t,e,c,a),c=!1})),u=t.node().getBBox()}if(e.methods.length>0){y=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin+u.height).attr("y2",a.padding+f+a.dividerMargin+u.height);const t=d.append("text").attr("x",a.padding).attr("y",f+2*a.dividerMargin+u.height+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(e){p(t,e,c,a),c=!1}))}const b=d.node().getBBox();var m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));const k=d.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",m).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),x&&x.attr("x2",k),y&&y.attr("x2",k),n.width=k,n.height=b.height+a.padding+.5*a.dividerMargin,n},g=function(t,e,a,r,n){const d=function(t){switch(t){case n.db.relationType.AGGREGATION:return"aggregation";case n.db.relationType.EXTENSION:return"extension";case n.db.relationType.COMPOSITION:return"composition";case n.db.relationType.DEPENDENCY:return"dependency";case n.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const l=e.points,p=(0,i.n8j)().x((function(t){return t.x})).y((function(t){return t.y})).curve(i.qrM),c=t.append("path").attr("d",p(l)).attr("id","edge"+s).attr("class","relation");let g,h,f="";r.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==a.relation.lineType&&c.attr("class","relation dashed-line"),10==a.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==a.relation.type1&&c.attr("marker-start","url("+f+"#"+d(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&c.attr("marker-end","url("+f+"#"+d(a.relation.type2)+"End)");const x=e.points.length;let u,y,b,m,k=o.u.calcLabelPosition(e.points);if(g=k.x,h=k.y,x%2!=0&&x>1){let t=o.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=o.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[x-1]);o.l.debug("cardinality_1_point "+JSON.stringify(t)),o.l.debug("cardinality_2_point "+JSON.stringify(r)),u=t.x,y=t.y,b=r.x,m=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",g).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=i;const n=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",n.x-r.padding/2).attr("y",n.y-r.padding/2).attr("width",n.width+r.padding).attr("height",n.height+r.padding)}if(o.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",u).attr("y",y).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",m).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}s++},h=function(t,e,a,r){o.l.debug("Rendering note ",e,a);const i=e.id,n={id:i,text:e.text,width:0,height:0},d=t.append("g").attr("id",i).attr("class","classGroup");let s=d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){o.l.debug(`Adding line: ${t}`),s.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=d.node().getBBox(),c=d.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)})),n.width=c,n.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,n};let f={};const x=function(t){const e=Object.entries(f).find((e=>e[1].label===t));if(e)return e[0]},u={draw:function(t,e,a,r){const s=(0,o.c)().class;f={},o.l.info("Rendering diagram "+t);const l=(0,o.c)().securityLevel;let p;"sandbox"===l&&(p=(0,i.Ltv)("#i"+e));const u="sandbox"===l?(0,i.Ltv)(p.nodes()[0].contentDocument.body):(0,i.Ltv)("body"),y=u.select(`[id='${e}']`);var b;(b=y).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"),b.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"),b.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"),b.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"),b.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"),b.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"),b.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"),b.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.T({multigraph:!0});m.setGraph({isMultiGraph:!0}),m.setDefaultEdgeLabel((function(){return{}}));const k=r.db.getClasses(),w=Object.keys(k);for(const i of w){const t=k[i],e=c(y,t,s,r);f[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"+x(t.id1)+x(t.id2)+JSON.stringify(t)),m.setEdge(x(t.id1),x(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){o.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=h(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),t.class&&t.class in k&&m.setEdge(t.id,x(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.Zp)(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))),g(y,m.edge(t),m.edge(t).relation,s,r))}));const L=y.node().getBBox(),v=L.width+40,E=L.height+40;(0,o.i)(y,E,v,s.useMaxWidth);const M=`${L.x-20} ${L.y-20} ${v} ${E}`;o.l.debug(`viewBox ${M}`),y.attr("viewBox",M)}},y={parser:r.p,db:r.d,renderer:u,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/76a5e22a.fc8fb787.js b/assets/js/76a5e22a.fc8fb787.js new file mode 100644 index 00000000000..43b666b15ab --- /dev/null +++ b/assets/js/76a5e22a.fc8fb787.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[132,5327],{14311:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>t,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var c=a(74848),d=a(28453);const s={},r=void 0,l={id:"global/postman",title:"postman",description:"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.",source:"@site/docs/global/postman.md",sourceDirName:"global",slug:"/global/postman",permalink:"/global/postman",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/postman.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},t={},i=[{value:"Run in Postman",id:"run-in-postman",level:4},{value:"Download collection",id:"download-collection",level:4}];function o(e){const n={a:"a",admonition:"admonition",h4:"h4",img:"img",p:"p",...(0,d.R)(),...e.components};return(0,c.jsxs)(n.admonition,{title:"Besu JSON-RPC APIs documentation in Postman format",type:"info",children:[(0,c.jsxs)(n.p,{children:["View the ",(0,c.jsx)(n.a,{href:"https://www.postman.com/hyperledger/workspace/hyperledger-besu/collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8",children:"Besu JSON-RPC APIs documentation"})," in the Postman format and obtain example requests in multiple coding languages."]}),(0,c.jsx)(n.h4,{id:"run-in-postman",children:"Run in Postman"}),(0,c.jsx)(n.p,{children:"Click the following button to fork the collection and run requests directly on your local network."}),(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"https://god.gw.postman.com/run-collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8?action=collection%2Ffork&collection-url=entityId%3D11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8%26entityType%3Dcollection%26workspaceId%3Dc4b60b6f-9f15-42d0-8327-7ebabca6f0fd#?env%5BBesu%20node%20on%20local%20host%5D=W3sia2V5IjoicnBjLWh0dHAtaG9zdCIsInZhbHVlIjoibG9jYWxob3N0IiwiZW5hYmxlZCI6ZmFsc2V9LHsia2V5IjoicnBjLWh0dHAtcG9ydCIsInZhbHVlIjoiODU0NSIsImVuYWJsZWQiOmZhbHNlfV0=",children:(0,c.jsx)(n.img,{src:"https://run.pstmn.io/button.svg",alt:"Run in Postman"})}),"."]}),(0,c.jsx)(n.h4,{id:"download-collection",children:"Download collection"}),(0,c.jsxs)(n.p,{children:["Alternatively you can ",(0,c.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(34705).A+"",children:"download the JSON collection file"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}},38456:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>h,contentTitle:()=>i,default:()=>x,frontMatter:()=>t,metadata:()=>o,toc:()=>b});var c=a(74848),d=a(28453),s=a(14311),r=a(11470),l=a(19365);const t={title:"Besu API",sidebar_position:2,description:"Besu JSON-RPC API methods reference",toc_max_heading_level:3,tags:["public networks","private networks"]},i="Besu API methods",o={id:"public-networks/reference/api/index",title:"Besu API",description:"Besu JSON-RPC API methods reference",source:"@site/docs/public-networks/reference/api/index.md",sourceDirName:"public-networks/reference/api",slug:"/public-networks/reference/api/",permalink:"/public-networks/reference/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/api/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Besu API",sidebar_position:2,description:"Besu JSON-RPC API methods reference",toc_max_heading_level:3,tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Subcommands",permalink:"/public-networks/reference/cli/subcommands"},next:{title:"Objects",permalink:"/public-networks/reference/api/objects"}},h={},b=[...s.toc,{value:"<code>ADMIN</code> methods",id:"admin-methods",level:2},{value:"<code>admin_addPeer</code>",id:"admin_addpeer",level:3},{value:"Parameters",id:"parameters",level:4},{value:"Returns",id:"returns",level:4},{value:"<code>admin_changeLogLevel</code>",id:"admin_changeloglevel",level:3},{value:"Parameters",id:"parameters-1",level:4},{value:"Returns",id:"returns-1",level:4},{value:"<code>admin_generateLogBloomCache</code>",id:"admin_generatelogbloomcache",level:3},{value:"Parameters",id:"parameters-2",level:4},{value:"Returns",id:"returns-2",level:4},{value:"<code>admin_logsRemoveCache</code>",id:"admin_logsremovecache",level:3},{value:"Parameters",id:"parameters-3",level:4},{value:"Returns",id:"returns-3",level:4},{value:"<code>admin_logsRepairCache</code>",id:"admin_logsrepaircache",level:3},{value:"Parameters",id:"parameters-4",level:4},{value:"Returns",id:"returns-4",level:4},{value:"<code>admin_nodeInfo</code>",id:"admin_nodeinfo",level:3},{value:"Parameters",id:"parameters-5",level:4},{value:"Returns",id:"returns-5",level:4},{value:"<code>admin_peers</code>",id:"admin_peers",level:3},{value:"Parameters",id:"parameters-6",level:4},{value:"Returns",id:"returns-6",level:4},{value:"<code>admin_removePeer</code>",id:"admin_removepeer",level:3},{value:"Parameters",id:"parameters-7",level:4},{value:"Returns",id:"returns-7",level:4},{value:"<code>DEBUG</code> methods",id:"debug-methods",level:2},{value:"<code>debug_accountAt</code>",id:"debug_accountat",level:3},{value:"Parameters",id:"parameters-8",level:4},{value:"Returns",id:"returns-8",level:4},{value:"<code>debug_accountRange</code>",id:"debug_accountrange",level:3},{value:"Parameters",id:"parameters-9",level:4},{value:"Returns",id:"returns-9",level:4},{value:"<code>debug_batchSendRawTransaction</code>",id:"debug_batchsendrawtransaction",level:3},{value:"Parameters",id:"parameters-10",level:4},{value:"Returns",id:"returns-10",level:4},{value:"<code>debug_getBadBlocks</code>",id:"debug_getbadblocks",level:3},{value:"Parameters",id:"parameters-11",level:4},{value:"Returns",id:"returns-11",level:4},{value:"<code>debug_getRawBlock</code>",id:"debug_getrawblock",level:3},{value:"Parameters",id:"parameters-12",level:4},{value:"Returns",id:"returns-12",level:4},{value:"<code>debug_getRawHeader</code>",id:"debug_getrawheader",level:3},{value:"Parameters",id:"parameters-13",level:4},{value:"Returns",id:"returns-13",level:4},{value:"<code>debug_getRawReceipts</code>",id:"debug_getrawreceipts",level:3},{value:"Parameters",id:"parameters-14",level:4},{value:"Returns",id:"returns-14",level:4},{value:"<code>debug_getRawTransaction</code>",id:"debug_getrawtransaction",level:3},{value:"Parameters",id:"parameters-15",level:4},{value:"Returns",id:"returns-15",level:4},{value:"<code>debug_metrics</code>",id:"debug_metrics",level:3},{value:"Parameters",id:"parameters-16",level:4},{value:"Returns",id:"returns-16",level:4},{value:"<code>debug_replayBlock</code>",id:"debug_replayblock",level:3},{value:"Parameters",id:"parameters-17",level:4},{value:"Returns",id:"returns-17",level:4},{value:"<code>debug_resyncWorldState</code>",id:"debug_resyncworldstate",level:3},{value:"Parameters",id:"parameters-18",level:4},{value:"Returns",id:"returns-18",level:4},{value:"<code>debug_setHead</code>",id:"debug_sethead",level:3},{value:"Parameters",id:"parameters-19",level:4},{value:"Returns",id:"returns-19",level:4},{value:"<code>debug_standardTraceBlockToFile</code>",id:"debug_standardtraceblocktofile",level:3},{value:"Parameters",id:"parameters-20",level:4},{value:"Returns",id:"returns-20",level:4},{value:"<code>debug_standardTraceBadBlockToFile</code>",id:"debug_standardtracebadblocktofile",level:3},{value:"Parameters",id:"parameters-21",level:4},{value:"Returns",id:"returns-21",level:4},{value:"<code>debug_storageRangeAt</code>",id:"debug_storagerangeat",level:3},{value:"Parameters",id:"parameters-22",level:4},{value:"Returns",id:"returns-22",level:4},{value:"<code>debug_traceTransaction</code>",id:"debug_tracetransaction",level:3},{value:"Parameters",id:"parameters-23",level:4},{value:"Returns",id:"returns-23",level:4},{value:"<code>debug_traceBlock</code>",id:"debug_traceblock",level:3},{value:"Parameters",id:"parameters-24",level:4},{value:"Returns",id:"returns-24",level:4},{value:"<code>debug_traceBlockByHash</code>",id:"debug_traceblockbyhash",level:3},{value:"Parameters",id:"parameters-25",level:4},{value:"Returns",id:"returns-25",level:4},{value:"<code>debug_traceBlockByNumber</code>",id:"debug_traceblockbynumber",level:3},{value:"Parameters",id:"parameters-26",level:4},{value:"Returns",id:"returns-26",level:4},{value:"<code>debug_traceCall</code>",id:"debug_tracecall",level:3},{value:"Parameters",id:"parameters-27",level:4},{value:"Returns",id:"returns-27",level:4},{value:"<code>ETH</code> methods",id:"eth-methods",level:2},{value:"<code>eth_accounts</code>",id:"eth_accounts",level:3},{value:"Parameters",id:"parameters-28",level:4},{value:"Returns",id:"returns-28",level:4},{value:"<code>eth_blobBaseFee</code>",id:"eth_blobbasefee",level:3},{value:"Parameters",id:"parameters-29",level:4},{value:"Returns",id:"returns-29",level:4},{value:"<code>eth_blockNumber</code>",id:"eth_blocknumber",level:3},{value:"Parameters",id:"parameters-30",level:4},{value:"Returns",id:"returns-30",level:4},{value:"<code>eth_call</code>",id:"eth_call",level:3},{value:"Parameters",id:"parameters-31",level:4},{value:"Returns",id:"returns-31",level:4},{value:"<code>eth_chainId</code>",id:"eth_chainid",level:3},{value:"Parameters",id:"parameters-32",level:4},{value:"Returns",id:"returns-32",level:4},{value:"<code>eth_coinbase</code>",id:"eth_coinbase",level:3},{value:"Parameters",id:"parameters-33",level:4},{value:"Returns",id:"returns-33",level:4},{value:"<code>eth_createAccessList</code>",id:"eth_createaccesslist",level:3},{value:"Parameters",id:"parameters-34",level:4},{value:"Returns",id:"returns-34",level:4},{value:"<code>eth_estimateGas</code>",id:"eth_estimategas",level:3},{value:"Parameters",id:"parameters-35",level:4},{value:"Returns",id:"returns-35",level:4},{value:"<code>eth_feeHistory</code>",id:"eth_feehistory",level:3},{value:"Parameters",id:"parameters-36",level:4},{value:"Returns",id:"returns-36",level:4},{value:"<code>eth_gasPrice</code>",id:"eth_gasprice",level:3},{value:"Parameters",id:"parameters-37",level:4},{value:"Returns",id:"returns-37",level:4},{value:"<code>eth_getBalance</code>",id:"eth_getbalance",level:3},{value:"Parameters",id:"parameters-38",level:4},{value:"Returns",id:"returns-38",level:4},{value:"<code>eth_getBlockByHash</code>",id:"eth_getblockbyhash",level:3},{value:"Parameters",id:"parameters-39",level:4},{value:"Returns",id:"returns-39",level:4},{value:"<code>eth_getBlockByNumber</code>",id:"eth_getblockbynumber",level:3},{value:"Parameters",id:"parameters-40",level:4},{value:"Returns",id:"returns-40",level:4},{value:"<code>eth_getBlockReceipts</code>",id:"eth_getblockreceipts",level:3},{value:"Parameters",id:"parameters-41",level:4},{value:"Returns",id:"returns-41",level:4},{value:"<code>eth_getBlockTransactionCountByHash</code>",id:"eth_getblocktransactioncountbyhash",level:3},{value:"Parameters",id:"parameters-42",level:4},{value:"Returns",id:"returns-42",level:4},{value:"<code>eth_getBlockTransactionCountByNumber</code>",id:"eth_getblocktransactioncountbynumber",level:3},{value:"Parameters",id:"parameters-43",level:4},{value:"Returns",id:"returns-43",level:4},{value:"<code>eth_getCode</code>",id:"eth_getcode",level:3},{value:"Parameters",id:"parameters-44",level:4},{value:"Returns",id:"returns-44",level:4},{value:"<code>eth_getFilterChanges</code>",id:"eth_getfilterchanges",level:3},{value:"Parameters",id:"parameters-45",level:4},{value:"Returns",id:"returns-45",level:4},{value:"<code>eth_getFilterLogs</code>",id:"eth_getfilterlogs",level:3},{value:"Parameters",id:"parameters-46",level:4},{value:"Returns",id:"returns-46",level:4},{value:"<code>eth_getLogs</code>",id:"eth_getlogs",level:3},{value:"Parameters",id:"parameters-47",level:4},{value:"Returns",id:"returns-47",level:4},{value:"<code>eth_getMinerDataByBlockHash</code>",id:"eth_getminerdatabyblockhash",level:3},{value:"Parameters",id:"parameters-48",level:4},{value:"Returns",id:"returns-48",level:4},{value:"<code>eth_getMinerDataByBlockNumber</code>",id:"eth_getminerdatabyblocknumber",level:3},{value:"Parameters",id:"parameters-49",level:4},{value:"Returns",id:"returns-49",level:4},{value:"<code>eth_getProof</code>",id:"eth_getproof",level:3},{value:"Parameters",id:"parameters-50",level:4},{value:"Returns",id:"returns-50",level:4},{value:"<code>eth_getStorageAt</code>",id:"eth_getstorageat",level:3},{value:"Parameters",id:"parameters-51",level:4},{value:"Returns",id:"returns-51",level:4},{value:"<code>eth_getTransactionByBlockHashAndIndex</code>",id:"eth_gettransactionbyblockhashandindex",level:3},{value:"Parameters",id:"parameters-52",level:4},{value:"Returns",id:"returns-52",level:4},{value:"<code>eth_getTransactionByBlockNumberAndIndex</code>",id:"eth_gettransactionbyblocknumberandindex",level:3},{value:"Parameters",id:"parameters-53",level:4},{value:"Returns",id:"returns-53",level:4},{value:"<code>eth_getTransactionByHash</code>",id:"eth_gettransactionbyhash",level:3},{value:"Parameters",id:"parameters-54",level:4},{value:"Returns",id:"returns-54",level:4},{value:"<code>eth_getTransactionCount</code>",id:"eth_gettransactioncount",level:3},{value:"Parameters",id:"parameters-55",level:4},{value:"Returns",id:"returns-55",level:4},{value:"<code>eth_getTransactionReceipt</code>",id:"eth_gettransactionreceipt",level:3},{value:"Parameters",id:"parameters-56",level:4},{value:"Returns",id:"returns-56",level:4},{value:"<code>eth_getUncleByBlockHashAndIndex</code>",id:"eth_getunclebyblockhashandindex",level:3},{value:"Parameters",id:"parameters-57",level:4},{value:"Returns",id:"returns-57",level:4},{value:"<code>eth_getUncleByBlockNumberAndIndex</code>",id:"eth_getunclebyblocknumberandindex",level:3},{value:"Parameters",id:"parameters-58",level:4},{value:"Returns",id:"returns-58",level:4},{value:"<code>eth_getUncleCountByBlockHash</code>",id:"eth_getunclecountbyblockhash",level:3},{value:"Parameters",id:"parameters-59",level:4},{value:"Returns",id:"returns-59",level:4},{value:"<code>eth_getUncleCountByBlockNumber</code>",id:"eth_getunclecountbyblocknumber",level:3},{value:"Parameters",id:"parameters-60",level:4},{value:"Returns",id:"returns-60",level:4},{value:"<code>eth_getWork</code>",id:"eth_getwork",level:3},{value:"Parameters",id:"parameters-61",level:4},{value:"Returns",id:"returns-61",level:4},{value:"<code>eth_hashrate</code>",id:"eth_hashrate",level:3},{value:"Parameters",id:"parameters-62",level:4},{value:"Returns",id:"returns-62",level:4},{value:"<code>eth_maxPriorityFeePerGas</code>",id:"eth_maxpriorityfeepergas",level:3},{value:"Parameters",id:"parameters-63",level:4},{value:"Returns",id:"returns-63",level:4},{value:"<code>eth_mining</code>",id:"eth_mining",level:3},{value:"Parameters",id:"parameters-64",level:4},{value:"Returns",id:"returns-64",level:4},{value:"<code>eth_newBlockFilter</code>",id:"eth_newblockfilter",level:3},{value:"Parameters",id:"parameters-65",level:4},{value:"Returns",id:"returns-65",level:4},{value:"<code>eth_newFilter</code>",id:"eth_newfilter",level:3},{value:"Parameters",id:"parameters-66",level:4},{value:"Returns",id:"returns-66",level:4},{value:"<code>eth_newPendingTransactionFilter</code>",id:"eth_newpendingtransactionfilter",level:3},{value:"Parameters",id:"parameters-67",level:4},{value:"Returns",id:"returns-67",level:4},{value:"<code>eth_protocolVersion</code>",id:"eth_protocolversion",level:3},{value:"Parameters",id:"parameters-68",level:4},{value:"Returns",id:"returns-68",level:4},{value:"<code>eth_sendRawTransaction</code>",id:"eth_sendrawtransaction",level:3},{value:"Parameters",id:"parameters-69",level:4},{value:"Returns",id:"returns-69",level:4},{value:"<code>eth_submitHashrate</code>",id:"eth_submithashrate",level:3},{value:"Parameters",id:"parameters-70",level:4},{value:"Returns",id:"returns-70",level:4},{value:"<code>eth_submitWork</code>",id:"eth_submitwork",level:3},{value:"Parameters",id:"parameters-71",level:4},{value:"Returns",id:"returns-71",level:4},{value:"<code>eth_syncing</code>",id:"eth_syncing",level:3},{value:"Parameters",id:"parameters-72",level:4},{value:"Returns",id:"returns-72",level:4},{value:"<code>eth_uninstallFilter</code>",id:"eth_uninstallfilter",level:3},{value:"Parameters",id:"parameters-73",level:4},{value:"Returns",id:"returns-73",level:4},{value:"<code>MINER</code> methods",id:"miner-methods",level:2},{value:"<code>miner_changeTargetGasLimit</code>",id:"miner_changetargetgaslimit",level:3},{value:"Parameters",id:"parameters-74",level:4},{value:"Returns",id:"returns-74",level:4},{value:"<code>miner_getExtraData</code>",id:"miner_getextradata",level:3},{value:"Parameters",id:"parameters-75",level:4},{value:"Returns",id:"returns-75",level:4},{value:"<code>miner_getMinGasPrice</code>",id:"miner_getmingasprice",level:3},{value:"Parameters",id:"parameters-76",level:4},{value:"Returns",id:"returns-76",level:4},{value:"<code>miner_getMinPriorityFee</code>",id:"miner_getminpriorityfee",level:3},{value:"Parameters",id:"parameters-77",level:4},{value:"Returns",id:"returns-77",level:4},{value:"<code>miner_setCoinbase</code>",id:"miner_setcoinbase",level:3},{value:"Parameters",id:"parameters-78",level:4},{value:"Returns",id:"returns-78",level:4},{value:"<code>miner_setExtraData</code>",id:"miner_setextradata",level:3},{value:"Parameters",id:"parameters-79",level:4},{value:"Returns",id:"returns-79",level:4},{value:"<code>miner_setMinGasPrice</code>",id:"miner_setmingasprice",level:3},{value:"Parameters",id:"parameters-80",level:4},{value:"Returns",id:"returns-80",level:4},{value:"<code>miner_setMinPriorityFee</code>",id:"miner_setminpriorityfee",level:3},{value:"Parameters",id:"parameters-81",level:4},{value:"Returns",id:"returns-81",level:4},{value:"<code>miner_start</code>",id:"miner_start",level:3},{value:"Parameters",id:"parameters-82",level:4},{value:"Returns",id:"returns-82",level:4},{value:"<code>miner_stop</code>",id:"miner_stop",level:3},{value:"Parameters",id:"parameters-83",level:4},{value:"Returns",id:"returns-83",level:4},{value:"<code>NET</code> methods",id:"net-methods",level:2},{value:"<code>net_enode</code>",id:"net_enode",level:3},{value:"Parameters",id:"parameters-84",level:4},{value:"Returns",id:"returns-84",level:4},{value:"<code>net_listening</code>",id:"net_listening",level:3},{value:"Parameters",id:"parameters-85",level:4},{value:"Returns",id:"returns-85",level:4},{value:"<code>net_peerCount</code>",id:"net_peercount",level:3},{value:"Parameters",id:"parameters-86",level:4},{value:"Returns",id:"returns-86",level:4},{value:"<code>net_services</code>",id:"net_services",level:3},{value:"Parameters",id:"parameters-87",level:4},{value:"Returns",id:"returns-87",level:4},{value:"<code>net_version</code>",id:"net_version",level:3},{value:"Parameters",id:"parameters-88",level:4},{value:"Returns",id:"returns-88",level:4},{value:"<code>PLUGINS</code> methods",id:"plugins-methods",level:2},{value:"<code>plugins_reloadPluginConfig</code>",id:"plugins_reloadpluginconfig",level:3},{value:"Parameters",id:"parameters-89",level:4},{value:"Returns",id:"returns-89",level:4},{value:"<code>TRACE</code> methods",id:"trace-methods",level:2},{value:"<code>trace_block</code>",id:"trace_block",level:3},{value:"Parameters",id:"parameters-90",level:4},{value:"Returns",id:"returns-90",level:4},{value:"<code>trace_call</code>",id:"trace_call",level:3},{value:"Parameters",id:"parameters-91",level:4},{value:"Returns",id:"returns-91",level:4},{value:"<code>trace_callMany</code>",id:"trace_callmany",level:3},{value:"Parameters",id:"parameters-92",level:4},{value:"Returns",id:"returns-92",level:4},{value:"<code>trace_filter</code>",id:"trace_filter",level:3},{value:"Parameters",id:"parameters-93",level:4},{value:"Returns",id:"returns-93",level:4},{value:"<code>trace_get</code>",id:"trace_get",level:3},{value:"Parameters",id:"parameters-94",level:4},{value:"Returns",id:"returns-94",level:4},{value:"<code>trace_rawTransaction</code>",id:"trace_rawtransaction",level:3},{value:"Parameters",id:"parameters-95",level:4},{value:"Returns",id:"returns-95",level:4},{value:"<code>trace_replayBlockTransactions</code>",id:"trace_replayblocktransactions",level:3},{value:"Parameters",id:"parameters-96",level:4},{value:"Returns",id:"returns-96",level:4},{value:"<code>trace_transaction</code>",id:"trace_transaction",level:3},{value:"Parameters",id:"parameters-97",level:4},{value:"Returns",id:"returns-97",level:4},{value:"<code>TXPOOL</code> methods",id:"txpool-methods",level:2},{value:"<code>txpool_besuPendingTransactions</code>",id:"txpool_besupendingtransactions",level:3},{value:"Parameters",id:"parameters-98",level:4},{value:"Returns",id:"returns-98",level:4},{value:"<code>txpool_besuStatistics</code>",id:"txpool_besustatistics",level:3},{value:"Parameters",id:"parameters-99",level:4},{value:"Returns",id:"returns-99",level:4},{value:"<code>txpool_besuTransactions</code>",id:"txpool_besutransactions",level:3},{value:"Parameters",id:"parameters-100",level:4},{value:"Returns",id:"returns-100",level:4},{value:"<code>WEB3</code> methods",id:"web3-methods",level:2},{value:"<code>web3_clientVersion</code>",id:"web3_clientversion",level:3},{value:"Parameters",id:"parameters-101",level:4},{value:"Returns",id:"returns-101",level:4},{value:"<code>web3_sha3</code>",id:"web3_sha3",level:3},{value:"Parameters",id:"parameters-102",level:4},{value:"Returns",id:"returns-102",level:4},{value:"Miscellaneous methods",id:"miscellaneous-methods",level:2},{value:"<code>rpc_modules</code>",id:"rpc_modules",level:3},{value:"Parameters",id:"parameters-103",level:4},{value:"Returns",id:"returns-103",level:4}];function f(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.header,{children:(0,c.jsx)(n.h1,{id:"besu-api-methods",children:"Besu API methods"})}),"\n",(0,c.jsx)(n.admonition,{type:"caution",children:(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["This reference contains API methods that apply to both public and private networks. For private-network-specific API methods, see the ",(0,c.jsx)(n.a,{href:"/private-networks/reference/api/",children:"private network API reference"}),"."]}),"\n",(0,c.jsxs)(n.li,{children:["All JSON-RPC HTTP examples use the default host and port endpoint ",(0,c.jsx)(n.code,{children:"http://127.0.0.1:8545"}),". If using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:"--rpc-http-host"})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:"--rpc-http-port"})," options, update the endpoint."]}),"\n",(0,c.jsx)(n.li,{children:"Most example requests are made against private networks. Depending on network configuration and activity, your example results might be different."}),"\n"]})}),"\n",(0,c.jsx)(s.default,{}),"\n",(0,c.jsxs)(n.h2,{id:"admin-methods",children:[(0,c.jsx)(n.code,{children:"ADMIN"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"ADMIN"})," API methods provide administrative functionality to manage your node."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"ADMIN"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"ADMIN"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"admin_addpeer",children:(0,c.jsx)(n.code,{children:"admin_addPeer"})}),"\n",(0,c.jsxs)(n.p,{children:["Adds a ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static node"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"caution",children:(0,c.jsxs)(n.p,{children:["If connections are timing out, ensure the node ID in the ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," is correct."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"enode"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," of peer to add"]}),"\n",(0,c.jsx)(n.h4,{id:"returns",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," if peer added or ",(0,c.jsx)(n.code,{children:"false"})," if peer already a ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static node"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"admin_addPeer","params":["enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_changeloglevel",children:(0,c.jsx)(n.code,{children:"admin_changeLogLevel"})}),"\n",(0,c.jsx)(n.p,{children:"Changes the log level without restarting Besu. You can change the log level for all logs, or you can change the log level for specific packages or classes."}),"\n",(0,c.jsx)(n.p,{children:"You can specify only one log level per RPC call."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-1",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"level"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#logging",children:"log level"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"log_filter"}),": ",(0,c.jsx)(n.em,{children:"array"})," - (optional) packages or classes for which to change the log level"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-1",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})," if the log level has changed, otherwise ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(n.p,{children:["The following example changes the debug level for specified classes to ",(0,c.jsx)(n.code,{children:"DEBUG"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0", "method":"admin_changeLogLevel", "params":["DEBUG", ["org.hyperledger.besu.ethereum.eth.manager","org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0", "method":"admin_changeLogLevel", "params":["DEBUG", ["org.hyperledger.besu.ethereum.eth.manager","org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler"]], "id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsxs)(n.p,{children:["The following example changes the debug level of all logs to ",(0,c.jsx)(n.code,{children:"WARN"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_changeLogLevel","params":["WARN"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "admin_changeLogLevel",\n "params": ["WARN"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_generatelogbloomcache",children:(0,c.jsx)(n.code,{children:"admin_generateLogBloomCache"})}),"\n",(0,c.jsxs)(n.p,{children:["Generates cached log bloom indexes for blocks. APIs such as ",(0,c.jsx)(n.a,{href:"#eth_getlogs",children:(0,c.jsx)(n.code,{children:"eth_getLogs"})})," and ",(0,c.jsx)(n.a,{href:"#eth_getfilterlogs",children:(0,c.jsx)(n.code,{children:"eth_getFilterLogs"})})," use the cache for improved performance."]}),"\n",(0,c.jsx)(n.admonition,{type:"tip",children:(0,c.jsxs)(n.p,{children:["Manually executing ",(0,c.jsx)(n.code,{children:"admin_generateLogBloomCache"})," is not required unless the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:(0,c.jsx)(n.code,{children:"--auto-log-bloom-caching-enabled"})})," command line option is set to false."]})}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsx)(n.p,{children:"Each index file contains 100000 blocks. The last fragment of blocks less than 100000 are not indexed."})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-2",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block to start generating indexes"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"endBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block to stop generating indexes"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-2",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - log bloom index details:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - starting block for the last requested cache generation"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"endBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ending block for the last requested cache generation"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"currentBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - most recent block added to the cache"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"indexing"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if indexing is in progress"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.em,{children:"boolean"})," - indicates acceptance of the request from this call to generate the cache"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_generateLogBloomCache", "params":["0x0", "0x10000"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "admin_generateLogBloomCache",\n "params": ["0x0", "0x10000"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "startBlock": "0x0",\n "endBlock": "0x10000",\n "currentBlock": "0x0",\n "indexing": true,\n "requestAccepted": true\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_logsremovecache",children:(0,c.jsx)(n.code,{children:"admin_logsRemoveCache"})}),"\n",(0,c.jsx)(n.p,{children:"Removes cache files for the specified range of blocks."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-3",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"fromBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"toBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsxs)(n.p,{children:["You can skip a parameter by using an empty string, ",(0,c.jsx)(n.code,{children:'""'}),". If you specify:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsx)(n.p,{children:"No parameters, the call removes cache files for all blocks."}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["Only ",(0,c.jsx)(n.code,{children:"fromBlock"}),", the call removes cache files for the specified block."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["Only ",(0,c.jsx)(n.code,{children:"toBlock"}),", the call removes cache files from the genesis block to the specified block."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-3",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.code,{children:"Cache Removed"})," status or ",(0,c.jsx)(n.code,{children:"error"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_logsRemoveCache","params":["1", "100"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "admin_logsRemoveCache",\n "params": ["1", "100"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "Status": "Cache Removed"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_logsrepaircache",children:(0,c.jsx)(n.code,{children:"admin_logsRepairCache"})}),"\n",(0,c.jsx)(n.p,{children:"Repairs cached logs by fixing all segments starting with the specified block number."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-4",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - decimal index of the starting block to fix; defaults to the head block"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-4",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - status of the repair request; ",(0,c.jsx)(n.code,{children:"Started"})," or ",(0,c.jsx)(n.code,{children:"Already running"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_logsRepairCache","params":["1200"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "admin_logsRepairCache",\n "params": ["1200"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "Status": "Started"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_nodeinfo",children:(0,c.jsx)(n.code,{children:"admin_nodeInfo"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns networking information about the node. The information includes general information about the node and specific information from each running Ethereum sub-protocol (for example, ",(0,c.jsx)(n.code,{children:"eth"}),")."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-5",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-5",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - node object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"enode"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," of the node"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"listenAddr"}),": ",(0,c.jsx)(n.em,{children:"string"})," - host and port for the node"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"name"}),": ",(0,c.jsx)(n.em,{children:"string"})," - client name"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"id"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#node-public-key",children:"node public key"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"ports"}),": ",(0,c.jsx)(n.em,{children:"object"})," - peer discovery and listening ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/manage-peers#port-configuration",children:"ports"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"protocols"}),": ",(0,c.jsx)(n.em,{children:"object"})," - list of objects containing information for each Ethereum sub-protocol"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["If the node is running locally, the host of the ",(0,c.jsx)(n.code,{children:"enode"})," and ",(0,c.jsx)(n.code,{children:"listenAddr"})," display as ",(0,c.jsx)(n.code,{children:"[::]"})," in the result. When advertising externally, the external address displayed for the ",(0,c.jsx)(n.code,{children:"enode"})," and ",(0,c.jsx)(n.code,{children:"listenAddr"})," is defined by ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,c.jsx)(n.code,{children:"--nat-method"})}),"."]})}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_nodeInfo","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"admin_nodeInfo","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "enode": "enode://87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3@[::]:30303",\n "listenAddr": "[::]:30303",\n "name": "besu/v1.0.1-dev-0d2294a5/osx-x86_64/oracle-java-1.8",\n "id": "87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3",\n "ports": {\n "discovery": 30303,\n "listener": 30303\n },\n "protocols": {\n "eth": {\n "config": {\n "chainId": 2018,\n "homesteadBlock": 0,\n "daoForkBlock": 0,\n "daoForkSupport": true,\n "eip150Block": 0,\n "eip155Block": 0,\n "eip158Block": 0,\n "byzantiumBlock": 0,\n "constantinopleBlock": 0,\n "constantinopleFixBlock": 0,\n "ethash": {\n "fixeddifficulty": 100\n }\n },\n "difficulty": 78536,\n "genesis": "0x43ee12d45470e57c86a0dfe008a5b847af9e372d05e8ba8f01434526eb2bea0f",\n "head": "0xc6677651f16d07ae59cab3a5e1f0b814ed2ec27c00a93297b2aa2e29707844d9",\n "network": 2018\n }\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_peers",children:(0,c.jsx)(n.code,{children:"admin_peers"})}),"\n",(0,c.jsx)(n.p,{children:"Returns networking information about connected remote nodes."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-6",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-6",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of objects returned for each remote node, with the following fields."]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"version"}),": ",(0,c.jsx)(n.em,{children:"string"})," - P2P protocol version"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"name"}),": ",(0,c.jsx)(n.em,{children:"string"})," - client name"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"caps"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of Ethereum sub-protocol capabilities"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"network"}),": ",(0,c.jsx)(n.em,{children:"object"})," - local and remote addresses established at time of bonding with the peer (the remote address might not match the hex value for ",(0,c.jsx)(n.code,{children:"port"}),"; it depends on which node initiated the connection.)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"port"}),": ",(0,c.jsx)(n.em,{children:"string"})," - port on the remote node on which P2P discovery is listening"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"id"}),": ",(0,c.jsx)(n.em,{children:"string"})," - node public key (excluding the ",(0,c.jsx)(n.code,{children:"0x"})," prefix, the node public key is the ID in the ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," ",(0,c.jsx)(n.code,{children:"enode://<id ex 0x>@<host>:<port>"}),".)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"protocols"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/manage-peers#monitor-peer-connections",children:"current state of peer"})," including ",(0,c.jsx)(n.code,{children:"difficulty"})," and ",(0,c.jsx)(n.code,{children:"head"})," (",(0,c.jsx)(n.code,{children:"head"})," is the hash of the highest known block for the peer.)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"enode"}),": ",(0,c.jsx)(n.em,{children:"string"})," - enode URL of the remote node"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_peers","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"admin_peers","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "version": "0x5",\n "name": "besu/v20.10.4-dev-0905d1b2/osx-x86_64/adoptopenjdk-java-11",\n "caps": ["eth/62", "eth/63", "eth/64", "eth/65", "IBF/1"],\n "network": {\n "localAddress": "192.168.1.229:50115",\n "remoteAddress": "168.61.153.255:40303"\n },\n "port": "0x765f",\n "id": "0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc",\n "protocols": {\n "eth": {\n "difficulty": "0x1ac",\n "head": "0x964090ae9277aef43f47f1b8c28411f162243d523118605f0b1231dbfdf3611a",\n "version": 65\n }\n },\n "enode": "enode://e143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc@127.0.0.1:30303"\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"admin_removepeer",children:(0,c.jsx)(n.code,{children:"admin_removePeer"})}),"\n",(0,c.jsxs)(n.p,{children:["Removes a ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static node"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-7",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"enode"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," of peer to remove"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-7",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," if peer removed or ",(0,c.jsx)(n.code,{children:"false"})," if peer not a ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/connect/static-nodes",children:"static node"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_removePeer","params":["enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"admin_removePeer","params":["enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"debug-methods",children:[(0,c.jsx)(n.code,{children:"DEBUG"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"DEBUG"})," API methods allow you to inspect and debug the network. The ",(0,c.jsx)(n.code,{children:"DEBUG"})," API is a more verbose alternative to the ",(0,c.jsxs)(n.a,{href:"#trace-methods",children:[(0,c.jsx)(n.code,{children:"TRACE"})," API"]}),", and its main purpose is compatibility with tools such as ",(0,c.jsx)(n.a,{href:"https://remix.ethereum.org/",children:"Remix"}),". Where these APIs overlap, we recommend using the ",(0,c.jsxs)(n.a,{href:"#trace-methods",children:[(0,c.jsx)(n.code,{children:"TRACE"})," API"]})," for production use over the ",(0,c.jsx)(n.code,{children:"DEBUG"})," API. Specifically, we recommend ",(0,c.jsx)(n.code,{children:"trace_block"})," over ",(0,c.jsx)(n.code,{children:"debug_traceBlock"}),", and ",(0,c.jsx)(n.code,{children:"trace_transaction"})," over ",(0,c.jsx)(n.code,{children:"debug_traceTransaction"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"DEBUG"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"DEBUG"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"debug_accountat",children:(0,c.jsx)(n.code,{children:"debug_accountAt"})}),"\n",(0,c.jsx)(n.p,{children:"Returns account information at the specified index of the specified block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-8",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHashOrNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash or number at which to retrieve account information"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"txIndex"}),": ",(0,c.jsx)(n.em,{children:"number"})," - transaction index at which to retrieve account information"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - contract or account address for which to retrieve information"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-8",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - account details object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"code"}),": ",(0,c.jsx)(n.em,{children:"data"})," - code for the account. Displays ",(0,c.jsx)(n.code,{children:"0x0"})," if the address is an externally owned account."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"nonce"}),": ",(0,c.jsx)(n.em,{children:"quantity"})," - number of transactions made by the account before this one"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"balance"}),": ",(0,c.jsx)(n.em,{children:"quantity"})," - balance of the account in wei"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"codehash"}),": ",(0,c.jsx)(n.em,{children:"data"})," - code hash for the account"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(n.p,{children:["This example uses an externally owned account address for the ",(0,c.jsx)(n.code,{children:"address"})," parameter."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_accountAt","params":["0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6", 0, "0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_accountAt",\n "params": [\n "0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6",\n 0,\n "0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "code": "0x0",\n "nonce": "0x5",\n "balance": "0xad78ebc5ac6200000",\n "codehash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"\n }\n}\n'})})})]}),"\n",(0,c.jsxs)(n.p,{children:["This example uses a contract address for the ",(0,c.jsx)(n.code,{children:"address"})," parameter."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_accountAt","params":["0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c", 0, "0x0e0d2c8f7794e82164f11798276a188147fbd415"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_accountAt",\n "params": [\n "0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c",\n 0,\n "0x0e0d2c8f7794e82164f11798276a188147fbd415"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "code": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b27b880414610030575b600080fd5b61004a60048036038101906100459190610108565b61004c565b005b60606000806000604051935036600085376000803686885af490503d9150816000853e806000811461007d57610093565b60008311156100925761012085019350836040525b5b5060008114156100ec578473ffffffffffffffffffffffffffffffffffffffff167f410d96db3f80b0f89b36888c4d8a94004268f8d42309ac39b7bcba706293e099856040516100e3919061016e565b60405180910390a25b5050505050565b60008135905061010281610227565b92915050565b60006020828403121561011e5761011d610211565b5b600061012c848285016100f3565b91505092915050565b600061014082610190565b61014a818561019b565b935061015a8185602086016101de565b61016381610216565b840191505092915050565b600060208201905081810360008301526101888184610135565b905092915050565b600081519050919050565b600082825260208201905092915050565b60006101b7826101be565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156101fc5780820151818401526020810190506101e1565b8381111561020b576000848401525b50505050565b600080fd5b6000601f19601f8301169050919050565b610230816101ac565b811461023b57600080fd5b5056fea2646970667358221220fdfb5c371055342507b8fb9ca7b0c234f79819bd5cb05c0d467fb605de979eb564736f6c63430008060033",\n "nonce": "0x1",\n "balance": "0x0",\n "codehash": "0xf5f334d41776ed2828fc910d488a05c57fe7c2352aab2d16e30539d7726e1562"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_accountrange",children:(0,c.jsx)(n.code,{children:"debug_accountRange"})}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"https://github.com/ethereum/retesteth/wiki/Retesteth-Overview",children:"Retesteth"})," uses ",(0,c.jsx)(n.code,{children:"debug_accountRange"})," to implement debugging."]}),"\n",(0,c.jsx)(n.p,{children:"Returns the accounts for a specified block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-9",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHashOrNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash or number at which to retrieve account information"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"txIndex"}),": ",(0,c.jsx)(n.em,{children:"number"})," - transaction index at which to retrieve account information"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - address hash from which to start"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"limit"}),": ",(0,c.jsx)(n.em,{children:"integer"})," - maximum number of account entries to return"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-9",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - account details object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"addressMap"}),": ",(0,c.jsx)(n.em,{children:"map"})," of ",(0,c.jsx)(n.em,{children:"strings"})," to ",(0,c.jsx)(n.em,{children:"strings"})," - map of address hashes and account addresses"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"nextKey"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hash of the next address if any addresses remain in the state, otherwise zero"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_accountRange","params":["12345", 0, "0", 5],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_accountRange",\n "params": ["12345", 0, "0", 5],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "addressMap": {\n "0x005e5...86960": "0x0000000000000000000000000000000000000000",\n "0x021fe...6ffe3": "0x0000000000000000000000000000000000000000",\n "0x028e6...ab776": "0x0000000000000000000000000000000000000000",\n "0x02cb5...bc4d8": "0x0000000000000000000000000000000000000000",\n "0x03089...23fd5": "0x0000000000000000000000000000000000000000"\n },\n "nextKey": "0x04242954a5cb9748d3f66bcd4583fd3830287aa585bebd9dd06fa6625976be49"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_batchsendrawtransaction",children:(0,c.jsx)(n.code,{children:"debug_batchSendRawTransaction"})}),"\n",(0,c.jsxs)(n.p,{children:["Sends a list of ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"signed transactions"}),". This is used to quickly load a network with a lot of transactions. This does the same thing as calling ",(0,c.jsx)(n.a,{href:"#eth_sendrawtransaction",children:(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})})," multiple times."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-10",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"data"}),": ",(0,c.jsx)(n.em,{children:"string"})," - signed transaction data array"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-10",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - object returned for each transaction, with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"index"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the transaction in the request parameters array"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"success"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates whether or not the transaction has been added to the transaction pool"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"errorMessage"}),": ",(0,c.jsx)(n.em,{children:"string"})," - (optional) error message"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_batchSendRawTransaction","params":["0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43","0x416","0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0","0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"debug_batchSendRawTransaction","params":["0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43","0x416","0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0","0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "index": 0,\n "success": true\n },\n {\n "index": 1,\n "success": false,\n "errorMessage": "Invalid raw transaction hex"\n },\n {\n "index": 2,\n "success": true\n },\n {\n "index": 3,\n "success": false,\n "errorMessage": "TRANSACTION_REPLACEMENT_UNDERPRICED"\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_getbadblocks",children:(0,c.jsx)(n.code,{children:"debug_getBadBlocks"})}),"\n",(0,c.jsx)(n.p,{children:"Returns a list of invalid blocks. This is used to detect and analyze consensus flaws."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-11",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-11",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_getBadBlocks","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"debug_getBadBlocks","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "block": {\n "number": "0xd",\n "hash": "0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6",\n "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "parentHash": "0x544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31",\n "nonce": "0x0000000000000000",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "transactionsRoot": "0x02c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41",\n "stateRoot": "0x861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5",\n "receiptsRoot": "0xccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7",\n "miner": "0x0000000000000000000000000000000000000000",\n "difficulty": "0x1",\n "totalDifficulty": "0x1",\n "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01",\n "size": "0x3a0",\n "gasLimit": "0xffffffffffff",\n "gasUsed": "0x1a488",\n "timestamp": "0x5f5b6824",\n "uncles": [],\n "transactions": [\n {\n "blockHash": "0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6",\n "blockNumber": "0xd",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x1a49e",\n "gasPrice": "0x3e8",\n "hash": "0xdd8cf045113754c306ba9ac8ac8786235e33bc5c087678084ef260a2a583f127",\n "input": "0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033",\n "nonce": "0x0",\n "to": null,\n "transactionIndex": "0x0",\n "value": "0x0",\n "v": "0xf9d",\n "r": "0xa7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7",\n "s": "0x130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fca"\n }\n ]\n },\n "hash": "0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6",\n "rlp": "0xf9039df9025ca0544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5a002c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41a0ccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d86ffffffffffff8301a488845f5b6824b86100000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a49e8080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da0a7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7a0130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fcac0"\n },\n {\n "block": {\n "number": "0x8",\n "hash": "0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121",\n "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "parentHash": "0x98ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207",\n "nonce": "0x0000000000000000",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "transactionsRoot": "0x8ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486",\n "stateRoot": "0x140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3bac",\n "receiptsRoot": "0x2b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3",\n "miner": "0x0000000000000000000000000000000000000000",\n "difficulty": "0x2",\n "totalDifficulty": "0x2",\n "extraData": "0x00000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701",\n "size": "0x3a0",\n "gasLimit": "0xffffffffffff",\n "gasUsed": "0x1a4c9",\n "timestamp": "0x5f5b6b80",\n "uncles": [],\n "transactions": [\n {\n "blockHash": "0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121",\n "blockNumber": "0x8",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x1a4c9",\n "gasPrice": "0x3e8",\n "hash": "0x675e336a4281b29c619dfd4ccfbd2f930f3728b20caf9e0067284aa3224e6758",\n "input": "0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033",\n "nonce": "0x0",\n "to": null,\n "transactionIndex": "0x0",\n "value": "0x0",\n "v": "0xf9d",\n "r": "0x2e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4",\n "s": "0x50e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0"\n }\n ]\n },\n "hash": "0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121",\n "rlp": "0xf9039df9025ca098ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3baca08ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486a02b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020886ffffffffffff8301a4c9845f5b6b80b86100000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a4c98080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da002e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4a050e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0c0"\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_getrawblock",children:(0,c.jsx)(n.code,{children:"debug_getRawBlock"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/",children:"RLP encoding"})," of the specified block."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-12",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-12",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - RLP-encoded ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_getRawBlock","params":["0x32026E"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"debug_getRawBlock","params":["0x32026E"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xf96096f90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9bf95c56f8ac82d51f8502540be4008303c9e294a68d4c1e3de1b721ad1356bbf827d6bc8cef304f80b844b1bb4d351300dbc7e12342566318001b83aefc9f20080000f3ef25472407fe9c9c69a1470000000242692bb4cd506c409651ab80eb3acfa54551d3dbc9af4493605d79871ba01e474fb147b16b9538d7a59a57738e406158d9cc306a9062b1b7a9f544c35abfa061aabb714c760f2243a16a024811679d402c8822e8b25dfd0038d84298fb5205b87502f87283aa36a754849502f900849502f9108302222794102554afa6b5dbccc86176faef2b2d854201756e8084e2bc7b43c001a04f2398f24bc950db1f5439de3cf6431ea277236595ae8dc5815c0cc671c9f97ca029898786a59c56f086fc0f7a16859f366cf46084add999fe137cbf43693712e8b87c02f87983aa36a7830293748459682f00850165a0bc008255f094fafb56bb5b37c3b0b0ee9d7c31f018aac91dfb778806f05b59d3b2000080c080a0b069dd8967533a773e592c26b1b36df0793d0b9f6eceba34da246f602c2fae58a002009dab32ab63a25b705d9a00e311f7cd5d85e73f9b2c03ffd0e5135c0bb2c6b89502f89283aa36a7018459682f008459682f0983011fec945b9fedd37f0b92e7e282b19cebcf06f57b77c60480a46a62784200000000000000000000000019a1fcc6fcc5832cd2db7704d75efbc800f5a742c001a0c65eb0e48090a8f8830de47f430b9ad11071a62a5db9555619a990d7e9b81738a05a6e826610a5b2ee529a22942ebcd3abd2a8a10228098c8158380e8fcceb962fb9028002f9027c83aa36a7178459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e17852000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f16827000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a004f8666c8e5d0f3c7110994f624d24aa47a1327814289698c3e2777284a5cfdca04ff05f1b8c5beb58972d40e5a7b894d5e28ad2f15a3429c7d2bee6b6a9633730b9019f02f9019b83aa36a70b8459682f008459682f098303644f944284890d4acd0bcb017ece481b96fd4cb457cac88715c0f4db6e0ea0b90124ee1490b20000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d40000000000000000000000001e8c104d068f22d351859cdbfe41a697a98e6ea20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000222e00000000000000000000000000000000000000000000000000015c0f4db6e0ea00000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000c080a0e5270f6291acc162885656bedf64fbcb904c41951221dc0cbbbdca03bb33ce43a01f08c7ed3c231403b55f37a157d80e121b653baa810add8c02aea722631450dcb87c02f87983aa36a7830293758459682f00850165a0bc008255f0948d247f4fbbe81429d3d164a5c9ae0063210edbdc8806f05b59d3b2000080c080a0bb83dd6181c9a7ae3069af3bdf1820b5e556eaf99e385b8d7b3571321fb2966ba02ac193773704524adcd02824796df83407a42cdd81e786b591eba43c4ffc6c40b9028002f9027c83aa36a7048459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e178520000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac6790000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c00000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac679000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0fc882968005f717a74a2c2fb345f691091cab084f4bd3934358741807bd5a66ea03f81c68d05d06bf851a6ef5ea6874557a221cbadde24f3fa51f777699b5d2804b8d802f8d583aa36a7822c0b8459682f008459682f098303534f943367dfa11e3148a07c2da773e1f65b155b0abe5680b864ad58bdd100000000000000000000000053844f9577c2334e541aec7df7174ece5df1fcf0000000000000000000000000e9e12c660e77a732940bab3c2cf385c843b834b800000000000000000000000000000000000000000006015d637c177581800000c001a0a292e7723d3c950aa8a557bd91dece34ec527d9efe2cc413d582dcd9fc6bf6eba03386ce6f58e862f329946bf32897f7df5d1c8f818fecfafc1223052fb251d97eb8b602f8b383aa36a7138459682f008459682f09832dc6c094ba175fdab00e7fcf603f43be8f68db7f4de9f3a980b844095ea7b300000000000000000000000084a0cc1ab353da6b7817947f7b116b8ea982c3d20000000000000000000000000000000000000000000000068f365aea1e440000c001a0968ed0274829918071d9cef28e1adbf1fd15ec76e5a4f809971e887b4c9f34b6a001ce26485bc7e3ea71fb99866bd43002b264b2ed80e10850203c2f07b78856bdb87c02f87983aa36a7830293768459682f00850165a0bc008255f0946d3b93db4e4078cf6541a68532d00705d9a4da618806f05b59d3b2000080c080a083c831630788e7ee57c87128d18582e29aa51f1f233e91d916c06d0750578156a0549b5a00477f3fb4d8fbf95ba3a636c3a14ff011c1bbf3a717e00d61735cbf34b87c02f87983aa36a7830293778459682f00850165a0bc008255f0940d3a7d69859a0dd6971d39703b15379e05ae2ec48806f05b59d3b2000080c001a0082660b5db2d3a8a58c0b863673ab27f7cfe4c049dcc52c76a00ab45b0358db5a05a7519a2d399cb534480383ac21262fbde2dd85241495d7832dee8bb02c49c87b87c02f87983aa36a7830293788459682f00850165a0bc008255f0941be13f64a2463fc7a76b4092c53328cc965a77fb8806f05b59d3b2000080c001a0e6ee9b85c3b729518524fdaeb25d47f89f6fc6c4d2c4df707187bef74d73f958a0756bbf4ab119805b77466957b5895c1d5bf422c5f65d8a06f7efd37dcb2c87afb87c02f87983aa36a7830293798459682f00850165a0bc008255f094a90b28fd6f8e46ac668fcb688414184a163e2cd28806f05b59d3b2000080c080a0d394dd43c58591e5dda8a7f3a2f4eae1bfd65655b9e9eec5facc6dcb39aa77baa002eeabf3fe9c0a56eae476d2f6452ea72e63a9c9b1180290b792883258f939f5b8f802f8f583aa36a7830283818459682f008459682f1082962494d0f723c6b2226df56fe41e63b9eaa66eb540bcb880b884abac047b000000000000000000000000000000000000000000000000000000000103e9f0f3471dc445d8f209ef546e0d20eaccc12ed0a5b4100007f57d9bc8638dacaf6480000000000000000000000000000000000000000000000000000000001d209b1ea11d77d1ab457eb3e2954cb2b98e77b5b07e2a4f48507af0adc61329ddc210c001a0efa10ab60f3bd1e7c4a8d52a275a568fbe2f5edc9e1eaf386299577ff9ddbd6ba06e62cf2f66b58f655ddd3eae47ce40408445b086f6ea858edb7bd847ee206207f86f82e6e582014482f618949ebf6b12e7e33b8672788e7b2b3330356f6f2c41880de0b6b3a7640000808401546d72a008d6be7aa21be0a43e08e960620f4c40c44010a743ead9919ef9423863c08b12a06a63a7caae4504ee5528e50387ca09974f7124035328a62d1085da2fee6618f9f86f82e1c382014482f618949c68eb31c4d00b94c3e3d4c2887946f8b076b24c880de0b6b3a7640000808401546d72a0c22d48d72c70ccf0a44d0950daf16741838f9333ee0bc5e05ff02b058da1e010a06a20c9f74cbc14c0d5bf3b3c38d3c33a5ace9194cddc2c533afb16459eaa7647f86f82e4cb82014482f61894d531e7aa3c0bee832aaff22642c7a3128d48a81a880de0b6b3a7640000808401546d72a01dbaeffc8e11964c06a722bae73e35bb5de55b8f959592868f2ff5fc13b69bd3a002acadc04665570a2032cdb616de15bdca79127f21302d62db5baf96ae4734e6f86e830176e381d882520894ad346e81c5b26fe563ab1ba2aa4ff811655882ca872386f26fc10000808401546d72a0b6de11598824e338100d5ebe70c0b0f4d6893fbb36f11ad55cf74b2f43afc5dda05101e65e7e84ea9edba6e5bf1a1e07028ae3fa5213240e812e57cf6b29080726b9235302f9234f83aa36a7830137d564748315f52194ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5000000000000000000000000000077770000000000000000000000000000000191c15235c348207e935e72b9151056a9661d73631d1e2c3f89ffddf8e74efe8a42ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000030ef2c000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000ec15abee257256da1a964434000f59ddd45b1ce67d5df44f1c82fd5bfe95c3b31dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000777700000000000000000000000000000001d4b5b35d93f51c8143f6a4cc3d7b320d37ce03989cd88c28601f4ea94cd6554249cff83e4dd8e99a8ef9004b2ac7518996f4784af1f9e52debb6223a697e9652530feda219f333e01f8cd0b31ee83b9c250ee51fde9718ef5fa305cbcd01901200200100002020000400000280000006004000c0020000000000000000000100000000029000000000000000090000000000008000200040000012004020000800000000240002400008000800000020000000001040000000000040824000000000000002040000400000002000080000000000000804000000001001000c84000208000000000180020000014000000000210100510008000082c0000000001200002000000024000008400000000220001800400000008010000052000200000200028000000000800000040200000110000010000010000001020000210004100002000000000900280000010008001000000018004000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc0000000000000000000000000000000000000000000000000000000000034bfbc00000000000000000000000000000000000000000000000000000000002ddb24000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000002e042ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b2a7122720155935f15da0807d0054f1a4c3db2a92ec4124bf590ce7a16594f3f1812f260acb049d01ad534a937840a80c0f56fd9a54ca5a8628ed896d14a5f8b2570f5813e35c990656f6300a1a1849429135ada6337646248f6ea03a7f70ac426c1d805216d154ea5a8e5ff953bc04b71b049b4b5bd549b6b0cfa7f8b21dba72a3805c7093d8589f2d4c55b6211441041e8bd7916daed5093fcebd377c31e810a6499e6e26840e3afadc9b339c6abc86b7f89fc3559f4242d373a71389db20219195f6e13069701f6d539dcf63a049726cdd8cadc412d1c43cf3fc0095ae5e2157dc668bdb924d7d7afc2b4632ab8a0e4ef71941a0a6a65645f6cd8570302f90b98bbdd01be238dc07780ee9b93e22ab87f26170d7fc5531347fb9fadcb65dc2ca20442a70be9e785292d533fa9496308a7b1588b50b45c17ea765de525259f036edd3984782399b46793acd5abb9f49e38b309c2363aead57264ac1a44e6432b81127a0bfdc29f01bd04e7db2b2545ed8426d2fe9b3e561793ec8fc875f2a71f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f11fcba848e01c60438611958101321898e95c8fdc936d31389bdba8073b382e5b1e2cd25993ad31586d7525f165fb25a1cf8c22623f983c025d21f0e52ecfec5f0232a753addaad88340ca39f00e9722f35dd25fbe8fdd8846bfc0288215d0638004009396bfcd5e6eb0c587797ae8297decbca48b02407219b910ce163552ed230438292cec430007886beabe7cdf5c6f9c3740a3dd6c52ba88e6d652ce43f90044193c4a42335291795c2cc160dc68b6225edb425a88d27cae159f77df3a2241fbe809c8f1122d245bf439df0761bec97358b96d6653bc83702b559bde5a2d12f771a2a11bc9dc32580bc3ccf9dfacd0a5379587ac5160b45d333a85cde46810ad2875b406f00438aee245ecc63815528a185e9e2a029147db7fcffcb8875e5259f15c3e467de02e035891b131bc715e54e7e27a7acc437bb9f6f84fa4456aa016b3578a73ed8a4706efb935be8b6abe0697e46d878d9c74e274f2816d2fd88146b316731719e125d227e002af95aa13f468a9bae4ff41a4a6036ee7fc321b3249aed4dfb6e75089ec0656ee4e87e1fffefbd74edf55a20d752a85caccf583c0d9e2ef1040b4d36a8e992ad50ce1c4bd2b300b344ca881725c164886a5f8f18035f6e75e67a3eaa2064fc24ff79897edb624e1a67f34deb414d5efaf4c55d482da108aa2ab7504fd5d7f78d91da5c20230380ec013b910b01a26b8bed8a05a004d52db30b7fb01f16347692e9f19f303f48ea8cbbed2d3a3eb277ddf4e9ed8026af5ce92a618c8942caf28b3249044347e14e5c3c2ed5ec0f9cccf1d11a5b290c00773e12c25feafbcceeb8ae6c25a88c9657c627187af6fe0bfea0b3cc36c908a76f90e965bc4135c8596534f444c91aaaaaa6277985e36248bd53ef0f74f103eeac98ba92c5350e4a0c586c851ad25df982e16b2d408de37c687efc6915a41197df379614aa657ab5100627c47896b51b000cb95505bac77e4e440ecd1fe50252fc98f15ee41cafbf717e144da35f424e141639de04ebe5d333e9df8c06821c689d1ef2abbfd12e8a1edc059a9279db7ff44bac1962b5f7297da5c989528229e98a91a3a2e351f371dfa34d4c3676725baa5fa4696f67f4239b5fe1e3fa351d66aa5a2df992426d94ba049bbb4eea0ab22e3b9a7409f2b6719ede64353f4112e4da3919adc16dcd99c545966256493d2699ae529e365c20515d95c013ba2627576fb75a030ffd25b85ed3fc40dbbedbca54427f8dc2255c16b742b3e2b82e1bb634ae73a402927e6dc424d1908942b9b0f2cc17909ed050defe85d24a1986291facbb4ecf9b7ff66c27f8e771d28ec6866e3d24bc97e7be388013df8ba8f407b9147ed9b3581784003a22eeada55656d2be271afce06ef3fca32ac9b77b4f2420d60e892c95418b2a1b7d3dae2738a073ef105e66c08488e8a91e8ebdb5a10e979611bd29245c13cc4c0f5b33eedc5263edd6c27666e0c3f02161114120230511406f9f82102fd8c37c36d4e383e445df4afc6e7dbaa570cfe05b3f6038ec1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5006f155ac97d6757728caceba5530eb745e72277723ad34268b34008a97a27c370e9bc006aeaca4ac36414f35aa41ff400f698623a447c949f7f004f3c3fdb09f2af3c96042e215f0d4bbb23fda72d4f01dd9a55dbdec930919715a23e2cd772a260e2b91324c244d88ce1b83c92dce1aa0e0c255b80ed9325dec0e677563984a1c559ddb4a544eadeb2a38e8ed7736174a30d2bee6e0b65f3766e0b7a4e4d8022dd9f82493a9b1fadd1907147ac29edeb8cf8c7c58fbfa9b82ed3d9f9f05bfc900e52e29a05ca8d445b5245b16928dd61800ebb63933d9c471c2fb38776459641e9debdc606abf6ccfdf8fb41da88ba0745d96fd4557a879fee82e33df32d18b18d7360529f89f3dea680a5cb0c6a7652ee38589e1997f3e64ce4db1d3c04cd628fc0fd6e7ef1944108d48eb742a28467fa4bca693dbc8f923945256da2a83222d172286c82b1949803c54409de4653f258d0cf4266c83d5675ca9b5b3a3fb322b9c493ed7bff0a6165babb19c94d9e2014b13b099f09894fbcf32959b9d4ce71ddf9d24dee8bc40d6be92ee6e1220d84d68ecf1a0424132315c0612802b477b0acabcf346b0ad5ea329ea72f4de7524530bc00ad36baeee835908655faecd350463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea0908c560e84b404afb45f69169d28348ca20bb4f5693db19304d154f60a91ec4e9255be05739f5dc7e0b420d4bde4b188a8520bf39202f81dd3e2f4adcc6f4b4be16880103e0ab232f509729c91ddf0006d6a099a769b38affb89d7489b3bf261106aec362c77acdbb0a71c3da369067eb0f2ee9866a0bbdc4ee41ae81a88d860f1784565b7b1cdd350e8e12241103ff9d57c86c368775530773bafc058cbcea6309bd6d9c144cf6657cac5084ac5fe63ef038a71b3d79e6b7a32cc70039e182052f5cd5e415128e9ab1f553f13c165ea122d089975c1daf617766e12d9f3abb2501571eefde182b767e4b63568d37a8c553671adcee2ee4c7c6d77493e4599cd70d002a718fe0d7c31b7df3893f8b9993c90d7d55eea1c38292f1eae3a7887cfd182977403d5c029a42809f2c6fb8d04aff1c60106ba36367ecca0699866e5ec922ebaeffc4e624d0cc2c748f9c446da0c293d8ba7a28125145ce0936a2dd47172c4502ccf050145fc0584ad8608ee8f6c34c3e718fa5ca616722c5b3549ddb5e2f6a96e82c3d706bf255afda0272c199da51f9a4a869ce8b164694f6ef7593ce08b4bb0afda822eed4a0a7863f532fc0a22de9de5d3456574021b711c42eb1c9190de35ea592568f8ba5528c0f5fadc38e10b14a89a1e49fba9a76ca2478dcca20f8a3c78bb3e1b9869b7375d0deb87819ce7209ad4d73d84a92d08d23649bb50ecb4a1763050b7860afb055461b3158647b453d7977bddde0fac9415327e7eb2ea373fc8abd6793f576e72a47c92d6f6e19fadfdf2c6912365b74929d9b483c19f5146ac5a8dd943caf50b2e0a95fb19066a63a71862a540b2e41731ea66697094e51d309589ce9d25a37c06c9a12839c4c08a050a3ff9e502514f20d573c610466ac5399e11b0153954428f25d16958ab48614d34f768991f84411c401e6900fb0dfaab4108db0ad42fc9ae0a255e60fa4d92747ddda47d07de9f847e7a2be289798c5d34924aae419abdc41d30fb095c6ccabe5c5d5be73ec6197371ea74e08f0583b21901bd748db5348282cabaf57d883f5c55311f1304d7fcd30a9f0b22f810b1a7f089860e4ca0f23ddce9a23d7167762734b10b995d5bd2cf3b31f8f24b18d0a2f7ce1101d3a32d18988f162e91ac94b0f521f24fa287b0d2b97c408079336b89af9e842cf31886c701018ba98d5b0eb0e6d41b67b499f4c466cb1412db0e5937f7ffa83426c9234c713096444d0fc65d1b45f166e54d2a54bc103de110669fbc34555a6d16714ca37651e976b06a7ee96d80af9ff50162016a998451e2ce5819f3346b1fcdf6fe9ff3ec8420d4860a9980ce28fd8c55660983a3fb02cbedb5c638a49e5cdf0b69b71d78e071f1200608e235e6ed0ee8fea5567be12018bcd026412db0538c28bcd4a9afe799d5c677298646943c4200a039d2fced71d985d188f84dfd3132b6a015c50b8a60d712a97c89e0cd7d3a1740244c1522b117dad1220463f5d4af1004c1a2ad6b5708d7d6b28f8ae1e1e7dd1b2d3798b8c2e27a3559c7202aa268099eb3bbdf7c42d0d20b47e5623dba8e6aa1392ff532113c32bd836f4160abb287aefe648aaff6bb0a23928f580347046b64babf354790704538c6ce83f117ac7e83e1e0f54054466cc82b2144cf135be31f24f1b224e2a956827c303b0d82964e284b968c5ebe97688e49ca793a4aba81a3d36eefd8c12e3ce9409be63c3a308636a7b296b804d8125b4f29068ef44d3f2a3c9eb13e61d6365bb96d6973e88a70757b1d9213511d357d252df58d1e848d534d9517165263e803855e8caf387579f1ff0e7e9c3c8e532a2025d8016b70a45c24a546f0b21acf38d16b27eae6466e22396097090291184a7719beb4a55beb89275c6893e01f2075d3b73e165c39335d34a5aa7b280386e30a6df9ba917e1dc6774e2edaa0c87e8f5fcf89306a6fdbcf8cf52cf25f5df473fe350325d510421546765acd00b34ef53e56b01445deea042282e7d6ce20c8f967204c26bda9f2596fa378dc611091ab6db9e1e8d4e9b5c1cc4c4d6ee2ad82b32d08f8cb5a9dd9b03f7aa754f2738ddf2dc0c3318974ff3810765917c251c74ce3d7132c26b5f2ede12a6f62f2e8ddecd5e0d02f99f2ed8ac15641c586d68e093fbe80cefd6a7dbdac6d43e261160807eb82fc2aea870a22b25148d256a083325a5b97bcf0187f748b6c0a1691867344efdd53809fb9edea57669c33780a4aa9e65149937817d3d845d9fccae1876575d5383d06adeacd0f3371209a30e1a9c98446174b0b98560652d0643f120bdabd5484435871b42ad0ce36aa8330c7edd26e64e89eb84e0c72a2c6e49fb24088ae2bdaf7ef07af9bfe381dd6a9ed430a553de1bad4dcefd5239b389090925a69e44e25800d9fccda11ff4e1e4d3049386397f1145c3595ab5115255bc1c1eabb379a37504eda27b1a103b88ae8f174e1d182e3dfbb0b8317d05d6e08c191661b04537421fd84057a9ff5a6eceb68c5bf1f0e356df6e93d936bb6bdccb42127cba43e7615d522242df13f08e5fa162a641430c1431a7d7181dec65202fb618a690c2bf3361d7dc689d5e4a97a550a9b17c8a5ada8f32db3f774e9ed047c02eb7d1ba7add29fa07ab90f290e77bd91ee9b5208b1fb19a37f29dd1a492fa32156a7d43146a336fe6144d19228f975c54ab304565269124e069e864873c0eef23f2e7b012e84ad0c71d76e1b23b8b9a0a66edcd59f4b203a9773ce26baee206254b49efb10cc48bad814b2e299bd478fd4bd8b1ae2c8bd99070b259a9e204e42fc5f65f9e25cb4e4a1a3b67872314fcaeede2abbbc6978660c3e685f6dccb53160d1f7517bbda54177495c23fcf45cdd66363a70a84f2699e239b5071c9e6cb19069f3e0be9f4390c8028ae9960851e34ea18ff88d36ee826c0a4db4e33e94f0ec6651a728a1a2b0c15b30a1783ad4b1d224d87264779a817d107d40c75b77c25addd7b7d6a8b73b2d551f125daed95786920c4130d2061178604f9604a0e2f1c6cdbf3066fd28bf276ee0aee379bc049bc8eba361f4052bd2a698da312c991015c0fbc43ea1d2e72426279fc5181851a15a2f4883018ab01ff8745625f388f05f5fa9abc5d87a710a1227322626115b60f781f4ddd91e205c1cca582a5e37e005396703375846be4f36fdb76c277dc1a2ff1f183cbafc6db485a562f4d08262a207844a3d12261fa0ac479abca76f417df42b037e611b1b6acfda94d5dacc620c3edf5744db24bcc41ef1722dc0e620f8a35c50585a7cecfc97f05bfec21f919420e62a9c4f28ea9585cc056aee08ed8891d077a9647d9c0b5c3141f8c517f13b05bf0a18b99111d2d6e7b4892e78fab35d882e4e153060f0c44cb946d20ad0897a34d2a24d3800b54acd68fdd797aa362560dcede6d12909948bd6f4726a20142eec9c6b78d224b2c24885490bfb492217c6809e0628164579d2c2c16a90f28aa5393ad44c45d4e1500fccdcc684023d7cac4e2cca889333f048cd9a29de018e958d00553c77c74ab50d974df5f654233fb923e809ef6ceabe6a860386603003cc376e90b8bee74f2477343a5ae923aea4ffe99a91b9d9289ddcc3ca316b026b3d369aca474b7941588fc6e9cb062528b10f13b90dd55afd64f7b0ab79163163ce02aed379af25740ac5e37c5628c0b868b7ccfed0ae521c964846f0287d3006952539b2dffaf891bd01fe98a1685e71536d7f33ae85775d11545eb379e0916be616206968605e5033267f6f79cc651c2ce71a790ae5cef19fea7604e479c0793f82db1f8e85bec40d8c6a2dbc9bf76d02a616aced611ae1a7a3756d87dab2855ca585d0048e1e4222ed9d6fa24e3e13677256fbb9959b965727c192696a11474a7f6a6b6c8efb649b1f601c76576f36996ec7a20eee84208232c20e8502903d4e303e4ad7139c654b7e5d2aa262d75672cbb4f653e62ed8e4d28835f7d6d0efb3f39c40558d9cbf19f250681a5c8a59143fec80d6a69d8a265835d6562ef248fa4ac508bd60c9283f6e731baa786828d0f7a635e1d14a448383c8b0243570df4a42799afe03143c227e3fcf0b1393bdf8bacbd26f1041d5e3112c84755942fac77981fe16f048cd882243a8787b09bdc38847a5a9cc9aaf4d30544181ff014dca8b2892c00a933333df6d8ef79041483f2d8c6416897ae7897ca1da85e8f0a493be4520595cd0dd7d32c87999e703704ba0ac7d8b444dba807746123100e2cf7573843a0a755eebad6045d2970a0ef8c9adddff093e79731d5e506f1c43318fb25144ff5fb63041574e89216ebe0ac75d7dcffc35d095691723493c94dcc11d4480bf3fe7b76ba53cae5b409c002f2d1bb5eab08ac993054ec297543798700fe3e2877a4a0cce53599a66eb4f1fef5cafc774277f0e694ebd7f8748fb5140735282e5e0b9bb35b8aeb098775a33820c9b8decad3ad6ce36f79c347dcc2c60a5442d2eab4368827acae1f0ccd52f0475fab95ac57c3c9d7c2649d355756140d5a1e8c6eab8b67a5c169cb899230c4be1dc702323f2b07ee1fcf5657361e250ccbe93bb403abd857eee4335e454e8485a3b055c908c957dca3f9a288299729216103089910386fb994285602ce12b04be1819a2c80394b2410767d9aabdb591e4c4dcd08d1d5bc1bcb532496ff1fc968ac3ff59bc7266d8ecbb67f34b681331685a99b781c9752dfe83d145bd4f3c8ec634f028e850e246aa81f1d03aef40d000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a0bf32b9037b600aae3ecd3dd1838bc9f18ae1661f615cf3d70bc270b6c31f55fb80808080808080a0a2381991afea644ece5cba0d8d69f838f7b123d2e0057a54509e0c61e8b293028080808080808080b8b2f8b030b8adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a0529f2d89256fc038782a4d70b40bf127de906cbe211e7acaa3e928e0fd5cf11d80808080808080a0b4f4d0be01c65da5308bab41d52d8a7c93a1693c170c44d1f619b8364d40e3428080808080808080b90190f9018d30b90189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa50000000000000000000000000000000000000000000000c080a0ae5e67673b90f2d6802e8dba26aadb2e8b81e059d1611afd1908e743e3c0b75da004886b0ac3a810519aa2395bffdd94fbcfe4a2de989ec95d1aea0fcd09afd931b9235302f9234f83aa36a7830137d664748315f42594ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000007777000000000000000000000000000000010012f20d5ba20a09e185d452c999c129d712b83c75480e2e029fc895986d361a781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000004f9456000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000bbe20eedcc0216c615d3a0550a5507bdb2f9912eba7b608300486e871a4e42491dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000007777000000000000000000000000000000014852ab81d236f35c396d4836a6f82239f5672a4b6136ab9ebdd8669a9f9e831b87a26944e5c04f16b79426135ac11b155922c14178bf3d1ecbb1fb12ccc8119a22df5003de2d5956c745f9e825a8f0ca1bb1e265d4d431781b00765e0fe37280000000000004a00000000000800000020400004002001000000000000000010000000002800000000000100009000000000000a000000050000010004020000000000000000412000008002900000000000000000000000000000000820000000000000002000000400000000000080000000000000800000000001000040c0400000000000000010000000001400000000081000001800800008280000000001200002000000000000008440000000000001000000000004000000000000200200040028000000000000000000200000000000000000010000000020200290004100000000000000902080400010000001000000008000000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc100000000000000000000000000000000000000000000000000000000005364e600000000000000000000000000000000000000000000000000000000004456ed000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000002e0781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b21ad05b7c1eb0d208d17426c52831c6347a8db75b12bfeb2970c4dc6666e4eba0492d2ec318089b11ee7ec6087ab6a3df335770526cc0c1679b764d847b4ec1e303d400c12e690aa26a3771e5676e7ac95e2dc7a1b33be698f077c598f880d4203defa26ad36b84573e923af347475c7c7671be245e9859ca1db3c047faeee4b1c0e81d8a92915c2b94ff300e18f77f70ffec15631161e0bc3cdc9143c43422c208187652c1ec83c5d282e10587216eaf56689e5fe236f72c13eb9574afabc622a739cefbbe11aaa4e2e3d4c5415818914fe554a07be374f565d9bcebc0134940e8921b87bd4f6b42a6432e6e176be5ec82bb8eb6bdb7e4acc1f1e99725bd3ab2e3fa52e02c2741dfe6eddf5a3846dfd57f6a72e834faa048cb007826a293d9e163d47f9ea635871b25afcc3561dfce77b3a2604b3c8de90aa24916f41aed62d2e0c0d18f9c259bf614f1321c5b7cf7b5bd73cec408dd85f046bf36302e20f3603b7832071796022e893386de4e3b170135a591b1a44117240ba85876dba586b1f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f12f7e30e74b0329222f6067cad3b4324a80f570506985d729f7780955333f40e615f065023fb607d975d7a2b9f234137e72260d8f6b586baecf42819f8328dfb3304441f2c9e97d1fab9a3625073ac3d2bff6ba2f8d659cbc6f66e8d9afde1ef229ff39bac1ecd65eddc4953e2726a72daefa76f00d58e11c9a9ba3448fbe0d3a03db78d70ed9c574ddc45de5c73efdf3113ee70a4b42cea9884f85c1b995516912800abeb70f3022d5de6d9f49469161a36a6a309099ca43e388908635ed4ae825a14b7cf5213454a1f345497008ed417e5d33ef84c4934368b36f27606072192a1b43396f89647f0541dd25f55b42c5295d3ab2a22355664608b8dfec3c9d76045b27d8c2bdba7f376a44826bbf4044aed0d57068489fd32a2bf52f8613aa150185aafe655d2b86bf8867a6f7728c4133fb95776545b19767a0d7144f60f5ef038eac390d1cac6f9882211d7302137efc82b93b8f9c55db629f47a2c61931c21d01d5ad967c9dc6c1abfd496a74df2ac4714cfb027bc4d8c0153543ca663ded2af64f7396ed3b2ebd1976386814e94b7f7fcc3a19a4dd876288b905c381bc8f008de145083d6404890a863e1af1dd897aeef2516b20df50befb6c708c9728a22cb31d80b0e953aa71230d2462bb0668dd8701e11bc5240d85184f9298e2c5a3257b5dcc3e138df8b7d4162d6253fb5c21a65e952600c8764c613c6f43d22c861d4380cd688c286e9ffad6bb8582421fcab96b075769cf48b3160f056dfac4041b08287533a769bed0f08fdee9a16c5c8f414eb35830793c7b64341fef79dbc529a7b99f85d4e2e88b64954be967c5ee6386f9131b80b454ce70209f78f2101d0ca71da273735bcbcdc5ea5d3d54b607820b9bc852abb1b733cb7bb5018276d30c4c0a7f9ffcd318499a2041043494b82456ca8ac6f07678a8b770329b7c00f31e70e97ce48bc796570be27577e8986ee4c7fa51da44bdecfddfcf18686cbddc02ca206d9132d451ab55cce8069f631412ad2ae02b1a8245d31c0a65854d07370259f632fe253b2412c5a785148248d660d7cb6bef5240749d6ac4a4ac59384b27e7019c6cae15ef7c82e5a952f4da079b6205f9e16f3d3c84e94b490530c5b602d4bf5e9d34f2a785cdb7f7755d6d467a9d88071bbdf8c79195730db7d0b7872cbdcdabab02bd4b8487b726c5ce6492344ae7e900a21893e7b840b46380ba99278ce95322dc23daa97995d1149d425952913428c8ef8659dd2cc2895f12b08e0532a254fd5674fcac1b0992472ef75337d8d77f6fef3720d4b7b17302478c7d2e3b8dec7af4c681aba5e25d8aa3f4382b0082066c3f7a0b4e42c4637df90d9a1e2f3fd1cffa7e0d5577f5da89353521ed02cb1c39eb5746cef10ceb74c3fdba13199b42516ebfe29af40da64ad81b46b7bf04bf25994255c7a51f6839848810025bb52fe7500cf1ef628a07747894e3b73d53e6b2997d0654f1ffd0c070455400fd7e9d670984ac807a0f8131977ed1806fd3c0927c34b7b4dabf011d31e86b1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5020d266b1ccea774955484405f58ad161251d879a87c43d5dbaecd976ac5d04dd2586d70031a86b0dcade14028f36a04508494c7a20e98b3b21f7765e7b3ef68f10960709e63eea35a26ff47424e18df8cc271ff3049262c855d6a131695a395f2ba2f1b039012ac8a2abdf6d9f6b0c432f0ae78b9bccb99f89759434477257ce1f44cc61e95b9c9843ec8efb17c640fc4c837ec125fb25323d3f0644615d21721607fee4d68e2dc9bd29f5b13fafe39b0710d0365dccda35e3c937aed1b6949b2a0a7523011eb706357b85e174376ea7cadbd01ed0dd1bc6a8e5a5a11bc6131f0661dd6365b13c6e2de50b98cba1cde58a921d19936c711424eb625b7c35cba01a0f7dfa8d6f86a2a02425ab48e2c28f8f2f61adbb744c221b9c4f35b16c749c227bcee1202e87537c7441f421c855ce87d858a679f09dcf814bfa1f26f7d9ce18f723d2f84d4b25ec60adbb6367e92270836d03c71ed43413767342a4fb8d6801b8755bf65e7947ed4459ad6486fc1cca1f1cc89df3d307f01d8ac68aa1d08d18aa35a46bf245589c599eddc6337e764c36426f7b7f5d2afde0a76fd3aa536d1a165f9f23cfc65866f574f2289aa5be056dd32c72a204ba8328dd9b0b4643790463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea09160db3fa7477a2fff436ecee95aa2d51ff42ca9d4fcf021b6e501410fd41098a1a8f6021636ece98c27bd74740b7280d3a5e13d9850fcf7f2118c4c91572ba5826fcc4b0837d0b394f6683cba38fa35a5e2bd242041533bd25939cc873d1f5852a2f57cb172eb17c2e3c351240a0b2b334978b90ac18041b09aead26649b1c1c019e41731e77c6b2211d7da94630507bad027561dc625b7e84094378e599a57b09eb32c2a67cf5f2f0bf9250e6da07b165f97dca10517e9f3fe3561d02ec83a722b544bd6e25ef27d9825d13651443c4d984d7e5d0fd70c2a7f983b3ae8c698d27a2a0bf2d35655f477adc99c56f48773922831746f8af58de941a020986ad7c23fb7d31c2f17f305174db26b40447e64c66216dce98e7a8316dd91dee468e602206a4d1d18fa7827f733037fa87dfc9c74c9df0960867087c776382b94db9420a19e5338e17e8a68cb7621f0b56984610bedd3d9b77dc5447cdb129ecc33596079cf206e93904368cae07f0d449e2095f8abd95f26603d2db047647babc8342200be0095aa5489fd18cd00a52f59b70ff04c4b1e572db76d08bad419abbabb00b9e485e3f017807c12b427b5e0e648cf7b16065e313c1c073ce354a5fc6812c02b8d4b6aa1168c575dad9875087fe9f61702309febfb99b895387cc1104c35e123b713019b5e51c320fc2521cdb5cfca20f617773fd46d3872128b87df6f66a21fb3fa16711245ab65eef629c5e6073efaff5b707657f4442f2eb2637fa71000f14fc691a71aacf902c0c1a1a5d7d8d351b8b3cad57acd0a9e47a1abdcaf2b70aed8b7370a6bb2bb4f3d679c4f9793e4b256deefaef1e6dbcdbb648b917e34822d833d2ac1614aebcf360d328d9271f27c52c93de4a9455ce6cd8d2140ebf6b21c9b172cf47556efc5dff9afb913e328a708292bfb65c96d668f4d0b3a9a21b222039156cba9980d6bf11efbd8dd893378e5dc1b323c57d8f702076c22d125d1489bab2553c5521631c35f7b5236007ce8f37012cace78d6eb39718904b5dc31ddcb6f4f175e52bcf6c6008f6f5a572925600194b9af7ae074dbf85119e3afd141b2ff2652a58f043e97f11b77997a9da1c96c18b5254a107f24e997a3ea61c2069b9d04d49bd1bcd2495b19bc71848f28bfb4f0346b682a1b474e040b056e60a32b5e8aa532103101cb45ca41c6a690c8688523b8566d507f29eb44fe2d2490e81f4343ca61c8783b83e40e3ce66532f186e9d09bd2667cf974a763072a910121aa5e86e151d92a868508b680f795bc30b4502769f41e3afef5f321be9ce2f1cff3eb3308d65aa0ed780cc889f605f35eb5e02ba772d08db2579f8561c61fa09a8e23ea1416fb95ca0c7e139ddd16f04b0c872499e44cb5a03868d6c5fa1300c19a96b8586b8f33bd760c6350713696b7d3236acb0eb35bde2e6378e9ef9b117b02290ead7824d42452e332f6ec95a7f871da9ebdf6ad02c959a1a36ba33ff0089a4f5217b7bfa5379a507b1e994fb7b8fef489f1f2cf6fdedf0e530635ef31faaa1a37457c445836376dc5cdefc7770fbbad8c326955655efe4ecde89bd2f1dc62a2551a45206fd7d42605aa1c0fc80476b741bd7df1f0f2db0fc387614240e78427bb3a8cbbaf9bb112da06ea6942335f88c65d42d17816136509ec39b51079b5eb2a8cd15c3d1fbc56dd72c3499c101e2fc9126e8f194c6c8006faef30917c5e535439c6b0d78be52a4d17a3a25d0878649b668db027eecbbafcfac7a612138c77d1511f9cc5e763eaddbad6d9d8770705ef7b4d062b4c6dc72f30d1d272dca8700ae03a4c6d2cc6a0a03f9bfb2615b2b294515ca80827ec9cbaa7746112530f5e70f236a641c05bbc8647dd130f02db3561f9dfaa1d687235bccb0498202af478a6070dfa49df99785a61eb5fe5f18777569c18b08d2042ae8639abbc225b832a2fbcd95ff43a3fee4fb2962983af8304ef995716110a7ad35c538697c109c01c427ca6cefef3a842fcf74b1c49a3f2da88b85fdb1d05e20cd567538942fa2f0ffbb5d2ff73d60d562d9a0a6894bec3d85a709b43e42ab64e2306cb96919e078b899f3155af56390d06ddc662afe8d2c91fc091e2c5cbbfab3fdb3f49423a5a5f7741f2d70c6736adc66e7c2caa89c6bbc678bb4b445a8a63d120867f01f164dc87adc853633ca7bd4b9d585c2a637d1469da612b5210476fc8d66f90029bdbf7fa5eddc8335cd23deb4bb47e1582e64a03dd021292d34435419af80af178cdfab0fb9374fa0fade48108cd3a571b814231784ac37c9f6071fc6ac0bb018595c9d8afbfcd6f31832b2581f7f7ce7c45d22817aab8ac6df0e0995e12dbd1595c3377b707b816c96ceb1893b9e7c747a577bb7540b89eb3ff7cac878a7a121a37b38fcd3248abfd24b50e25948dcaeff8c1c7ab8b745a93adb87cd54fca223dd940ef4d7eca9dd69243c74ea128ed624e52c7a2257f3950d0c7409d665d912495f8a8a2cf2482c1d51cd7793d3d31f32ffc24374d8606daa2a423931d97019ba2fd3ba773645b7fd01cf75e8201dd29f694a72136b585d940bff8867654223c28d0603d85fe4472d93ee30e35f46e27b8f40f9a9ad03992d9ff23305fc062c7d95971baae1ab074df88d41e09ec9752efff012c482e0cf9aea2b78cc26db146a278d584575ed615f5d168e6df7a832322da093f0aea706cee594207427d3005fd910843f3dc54b14f8b187e3b495b7474792743fc2e43f62bbc7fd50a76513f1fa4073b15a42d1e78a708134238f2521c749d086deeef512823b514aa64122b365efd51e11415de40826971c234d571c3e2a0507226c6ccc540e43a9aa32244b29784ac824c20d3d1b72dc7262f61cce4eefbe9a4ea4cb1061e4a71925aa13f31d6ce80bb7c56bf47b91cf107ab17168dd4fb60614757d7c7f4ebe0320692235fb502621ed9b15b9b3fa23aa1bf266a2a2c3f2386b52625e42e0cd85c37319e3266185419bcf6dea997e52ec8fca5887a68530002fcc5b3619e88d4dc9a918cc36bac2416ffa9b9734ac4e67a93a800f36d7aba4ecfed8d65f62cf6ad13d184a8c6406e3ba17b8aee6af0721ed091e1d225d044629a4ef5153c294a3e87e243e03bdcf6eaf7ee56d9d969a1f054d5774a7e2c363b160386b909c89717aa7015385f4ab8b6c97805c12c37d981ca945134cb1306d39a4d136b42c36d8aacd2c37575a11b17fa50ede8072d667f64bb55e3b54aff2c3c61782e442e088db7c1ce62287477132bef00c17e9992dd42f35b5e098eb97724fc4e697d75812635203abe8f96000d9553012be065980fb16d6d1c0c80457585c6eb699b0e8a6e36c1cd518dd1ffc517afcb9114a4ff629d06cd2f0be1495c4ee09243e96529e6c3a228c923ca2a703930ea94f7a5803645324ba9ea1a08e6c3241fe57a80bd24f780566342561189baed15e85ba9257b701d651754ff534e51279961ff379974e34010d80773b169a140e0ee7c5e2c0312c9dee46fb7b309710d448a43805c7eab513e84e346411b7145f77ff4ced7b32eb641528f78d88af0fe88e0840e9c16f2210e18c1da605bb04a4c963441c06fa839f722b0c67345168bc0fbb1c826f20472c7551a1327eae9eddbc24e63814fb81320cbc6f03488d64587f3e5f53c03db02cb15412e622f9ec9944643d4b5530b0cd4d577489d8ee499ecf2b74fb72423412aca8530fe53c3fc584ed8e39f900843ac73e36fb113c343cc197cd689a09e12f29203c1dfe839630f6932f3a29de81ba787f6044e70dff8981b71fe82f8a4d01f45770a53b090026a003b3e639eca0e6a1e5bdd0aad456e89d83012ea1f53e1a5fe848b33528f7195a7b0c36d4315f1b96b62d5603e87a13e12a97ec335e3922d4339d9575cb26d5691da78a738aa5c84aecc22a93033a6912f84360d13e2e23b0185bdc2cd331bd26ababcc91894935db5c7e1800b8a10db884a7614ceea91f38bbf623c5e7e7238eef06cd9fc9e43507c56e8d6212b7d03ef2db0dfceb040c0b206e1b7eee6ae564b15e4c02e9c3e4179d78bc68a9fbc2166cb8458342f218dc631705602b2ef1c6716dbc08f30810c9e2ab3ac7a03e300e9c21cd2a0240025ed5eda13e6daa246241669acfae65302dbca5c579d3b5c3a4c16a976209e22845337f9ca033329f849f3ccebc69ff01b301d99dbe9e79058fade67bf881c70283f41eaca130d1423e733ccd520f26ebbe8d304cbb8fa2f4bf67e2e041e5e90e840d5510d33a9f700219fbead699901ea3b3f8aa3d5ff0c028ceee5b5e711c29e7740bc98f4b78f15f2aa1e01449f1f15e68023861f540d2ae0541273c641914ea0e6abadbb2f11618bb678c8b7abff1f6d4e9f789706cdbd8dcc1acd4bbd506e42e928d134366d3f32d8caa4b86736bb065b1a3f89354835b7ba5ae1e53cc1bd9f5dfa3e0d49c0a0a8d32670c382712e30f8f4cb8fc980785fb6012df752e02c923d3f56f5764a41629646f9fd7641c8365f0917f85a64d0ba36179e2c2b3045d7b3c6ccfdb60cd5c365c43d88e231465c6616f7d2cab0db88cd79268e5ba0cecb98875958ee3827af7842e35d9cc89c3776e5640f2433a6afccf0e6fff9321e31802746639bf2bf77f375dd6799baa184b48815f24d3fca5d534dfe61d1306d15e97d3a320457ddd2239cc52fb31dbf98709cf090ae59afabbda6da75f4e1373a28bcadc2405e0a7f6dbf9a3e26511fc600a496b4623593213283a1fd33f000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a04dd5a916917c46969db2e2093e73972daa52d5582e183eb0bd08362e7aca1dc280808080808080a03605d0d2c4765be29883abb71f1c4b162f9d6786835ccabb068a243ff819909f8080808080808080b8b2f8b030b8adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a087eef6c6fab228bc280138441d870592a3910f042806b16f257faf5f1542f9a280808080808080a00ac60a3a5bafa4560edb7bd978a6b8980fa818c5edea7c010986328de4d9b4ba8080808080808080b90190f9018d30b90189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d67440000000000000000000000000000000000000000000000c080a0d86a71e8e531bae3b2a2e70d98e516ccf31b6583d936ffa31c3772ac265db828a0420f5a8067c7eec5214117647da149eaa4e7c78a10d8ee6fa62001ee1b680f9fb9060002f905fc83aa36a7823d3f647482a9c494bac000000000000000000000000000000000000380b905930001536cb8da3dd105e94414690798c7f100000000057b78da8ccffb3bd38b03c0f12199bb964b426dd6b091efd7dc3ad1a9d321d1713b2ea1189d39280b4791c5c858729090c3b6182ac75951eef74b38191686b35c4669656ca9dc5a0ce7e9399f7efffc03afe7fd6e7485887f6264e97e9856a6978b65c5db3b4ce57cf4812abeba0de10d0d6ee5a2cbc9885a2163a58d1895524adbfd86d795eac74ec74d783b599861bf4b7b3e6daf70b3ae0e5740c88a4dc15b893f76fe074a718bcead52fb2a06d6e5f1cf3ca344ad05dcf5ca10bd9bc2809cd8ecd40a2dd0e03200dadd8f921f0e9953a7e6d8c7dc99e60cf6fe81465175e0cf99b702ac6a13706e64ac349a1119796eb0b6e7d5ae48ad74a5c997d679ef9c637c619587cb98ecf88e620dacdc57701500c74e087533f978831a78bf3857cb6044a8c66e41645cdee74ac7cdac69a8484083eb003827ccfd6b92c77b7097a15f38a419f6f0578f3568465e6fb639f1a8d6e52e9d17a0413100ca8d08b210a2e5adb2bead3dfaada14b2513113802f3996daccac89014dafd1368700300053ad7daeea2a4d4d9e8502aa44337c6ff91165a25de84fe5273b2e5b7f4dda3a0410900125e7778d5c2a59a2ca2ce36bacc9e95812ae1b69a478fc7ecf5ded14b68a80a010d6e03e07137d5de8082773f8a422390cd0a592d81e6e623a42bc69547e6b343e1d9a14e64ac3486116e29a8315486a2324d93d3e33a8344ffdbc2655b76dbf72077e43c13961a6a52f0565f2000881576c7a113e7aa6e9a6ed4679014533f8d1bf80ff44ae5599813e80d2c1f2fd0a03400864952137916724a4504bb118ccaf9236f217a1e43c97e471397a3f86672226dd0e02e00d4dcbfe4dd250a97d0c830b3d93213fd048fed38ea8378018c726be68728e22c687037000e3bb6d2858fba82db877c2e28fa1e2cca4ce57b6bdfdba7513dcd2649da93544083d06f85c8f4d21559e8e7651dcaa0c3aafc4a691fdfb27f2f39ea08ea62feff43cf0d80061500b0b00cb246f3641d83f5c934c477ca641a5c545da8aa0e4662c4c5f26ee70525a04125006cf268fbdcaddb151168bf24d3fa2e09f7445d859ff9e5ba2fe71e7ef8861ba61834a80280ebddf1bc99e8d00ae5d2a0893d64774d4cea1bad7146fc964526b6c4617cd70a68500d00f7e8131b976b9537ab4e2b9c9cf086fcfd82e235cf6c6eabbf8030cc3fd1e395071a840120bfbd7fd4a54397eca0c0f7adc1231dd539950f508f92e237e3aeb91468c38d4083ea0068a89abd38178e2e9f67559758419b6908d48d58967547c9edfe98ba016e050734a809807957936c079272b238748593ee3a73f5c7647d0ece20a5c208769c484474aa2f192b6dcc780a770c9b40b42348219a34a746cb495f3f1efb710a816ac142121461c6f7bf82fb00b0dec5bfbcaa2e32983075c84989e439154bfc7df1d0549680a6c1a4999c18aa010dee074028fcade2995b7daec4562449ccbced0caf7a660f49ac4ea07d485b22348948a0415d001ce8e16f70ca5813141f7f7544586da1364d2f77dd8fbb7cc937c6d46136f93d68f000009a72d59e5a9bdf1de5e60bbb17358bc65e8ff1566fabad6d6eb42ef2781f6d6d40837000bce21c64847942319b4ac1c92b2ee02fe2bfbf43b685908b92a0c3cd25f21641a0417d0084138599419cf73489312bda0d53e1fa748e1f7927380961470ec9fda73b36978c953661c8065aaafe09fb847fb54e35b3c68f771b6953941b2b4e619b486d81761ee187bf828700301cd34529763c60738c12e1ccce6ddff8b8338cda8fda245e5d8d5613d20734408306df96bd65c7b8d5c27299269dd9335ef7cb1f3357145983f365ec2f933686fc6d77d0a01100ca3a3773d3f0a52559ee691776b714fedc8c7b2cd672c7065c295693d0616d37408318007c18e9a9f6e4929e20d8efd4c2428065720ed1938af8e5348c14b373b0a845d1063468d2f96f000000ffff86f9aa5001c001a08f785a1c8e4c549c415dd948da80f86e3aaabc4e7a784604b6362208e0fb6b85a011d366d57b6ad95cda2eb6b618704859b4d433ad7557cad177eff6f6bae578cbc0f90200df8345de7e8203e494e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de7f8203e594e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de8082062294388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de8182062394388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de828201949425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de838201979425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de848201999425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8582019a9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8682019b9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8782019e9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de888201a29425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de898201a59425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8a8201a89425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8b8201a99425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8c8201aa9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8d8201ac9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_getrawheader",children:(0,c.jsx)(n.code,{children:"debug_getRawHeader"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/",children:"RLP encoding"})," of the header of specified block."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-13",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-13",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - RLP-encoded block header or ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_getRawHeader","params":["0x32026E"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_getRawHeader",\n "params": ["0x32026E"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xf90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9b"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_getrawreceipts",children:(0,c.jsx)(n.code,{children:"debug_getRawReceipts"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/",children:"RLP encoding"}),"\nof the transaction receipts of the specified block."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-14",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-14",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - array of RLP-encoded ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-receipt-object",children:"transaction receipts"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_getRawReceipts","params":["0x32026E"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"debug_getRawReceipts","params":["0x32026E"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0xf901a60182c70eb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000021849e99c31e3113a489d7eb0fd4d8c0edbe47afa00000000000000000000000000000000000000000000000000000000029b92700",\n "0xf901a70183018e1cb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000008000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000069cda9d6cc6ce05982d0b4fdf9480f2991f39b5aa00000000000000000000000000000000000000000000000000000000029b92700"\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_getrawtransaction",children:(0,c.jsx)(n.code,{children:"debug_getRawTransaction"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/",children:"RLP encoding"}),"\nof the specified transaction."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-15",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte transaction hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-15",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - RLP-encoded ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_getRawTransaction","params":["0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"debug_getRawTransaction","params":["0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xf8678084342770c182520894658bdf435d810c91414ec09147daa6db624063798203e880820a95a0af5fc351b9e457a31f37c84e5cd99dd3c5de60af3de33c6f4160177a2c786a60a0201da7a21046af55837330a2c52fc1543cd4d9ead00ddf178dd96935b607ff9b"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_metrics",children:(0,c.jsx)(n.code,{children:"debug_metrics"})}),"\n",(0,c.jsx)(n.p,{children:"Returns metrics providing information on the internal operation of Besu."}),"\n",(0,c.jsx)(n.p,{children:"The available metrics might change over time. The JVM metrics might vary based on the JVM implementation used."}),"\n",(0,c.jsx)(n.p,{children:"The metric types are:"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsx)(n.p,{children:"Timer"}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsx)(n.p,{children:"Counter"}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsx)(n.p,{children:"Gauge"}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-16",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-16",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - metrics object"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_metrics","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "debug_metrics", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "jvm": {\n "memory_bytes_init": {\n "heap": 268435456,\n "nonheap": 2555904\n },\n "threads_current": 41,\n "memory_bytes_used": {\n "heap": 696923976,\n "nonheap": 63633456\n },\n "memory_pool_bytes_used": {\n "PS Eden Space": 669119360,\n "Code Cache": 19689024,\n "Compressed Class Space": 4871144,\n "PS Survivor Space": 2716320,\n "PS Old Gen": 25088296,\n "Metaspace": 39073288\n },\n ...\n },\n "process": {\n "open_fds": 546,\n "cpu_seconds_total": 67.148992,\n "start_time_seconds": 1543897699.589,\n "max_fds": 10240\n },\n "rpc": {\n "request_time": {\n "debug_metrics": {\n "bucket": {\n "+Inf": 2,\n "0.01": 1,\n "0.075": 2,\n "0.75": 2,\n "0.005": 1,\n "0.025": 2,\n "0.1": 2,\n "1.0": 2,\n "0.05": 2,\n "10.0": 2,\n "0.25": 2,\n "0.5": 2,\n "5.0": 2,\n "2.5": 2,\n "7.5": 2\n },\n "count": 2,\n "sum": 0.015925392\n }\n }\n },\n "blockchain": {\n "difficulty_total": 3533501,\n "announcedBlock_ingest": {\n "bucket": {\n "+Inf": 0,\n "0.01": 0,\n "0.075": 0,\n "0.75": 0,\n "0.005": 0,\n "0.025": 0,\n "0.1": 0,\n "1.0": 0,\n "0.05": 0,\n "10.0": 0,\n "0.25": 0,\n "0.5": 0,\n "5.0": 0,\n "2.5": 0,\n "7.5": 0\n },\n "count": 0,\n "sum": 0\n },\n "height": 1908793\n },\n "peers": {\n "disconnected_total": {\n "remote": {\n "SUBPROTOCOL_TRIGGERED": 5\n },\n "local": {\n "TCP_SUBSYSTEM_ERROR": 1,\n "SUBPROTOCOL_TRIGGERED": 2,\n "USELESS_PEER": 3\n }\n },\n "peer_count_current": 2,\n "connected_total": 10\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_replayblock",children:(0,c.jsx)(n.code,{children:"debug_replayBlock"})}),"\n",(0,c.jsx)(n.p,{children:"Re-imports the block matching the specified block number, by rolling the head of the local chain back to the block right before the specified block, then importing the specified block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-17",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-17",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})," or ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_replayBlock","params":["0x1"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "debug_replayBlock", "params": ["0x1"], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_resyncworldstate",children:(0,c.jsx)(n.code,{children:"debug_resyncWorldState"})}),"\n",(0,c.jsx)(n.p,{children:"Triggers a re-synchronization of the world state while retaining imported blocks. This is useful if there are world state database inconsistencies (for example, Bonsai database issues)."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-18",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-18",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})," or ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_resyncWorldState","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "debug_resyncWorldState", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_sethead",children:(0,c.jsx)(n.code,{children:"debug_setHead"})}),"\n",(0,c.jsx)(n.p,{children:"Sets the current head of the local chain to the block matching the specified block number."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-19",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-19",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})," or ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_setHead","params":["0x1"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "debug_setHead", "params": ["0x1"], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_standardtraceblocktofile",children:(0,c.jsx)(n.code,{children:"debug_standardTraceBlockToFile"})}),"\n",(0,c.jsx)(n.p,{children:"Generates files containing the block trace. A separate file is generated for each transaction in the block."}),"\n",(0,c.jsx)(n.p,{children:"You can also specify a trace file for a specific transaction in a block."}),"\n",(0,c.jsxs)(n.p,{children:["Use ",(0,c.jsx)(n.a,{href:"#debug_standardtracebadblocktofile",children:(0,c.jsx)(n.code,{children:"debug_standardTraceBadBlockToFile"})})," to view the trace for an invalid block."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-20",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"txHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - (optional) transaction hash; if omitted, a trace file is generated for each transaction in the block."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - (optional) specifies whether to capture EVM memory during the trace; defaults to ",(0,c.jsx)(n.code,{children:"true"})]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-20",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - location of the generated trace files"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_standardTraceBlockToFile","params":["0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc", {\n"txHash": "0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6", "disableMemory": false}], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_standardTraceBlockToFile",\n "params": [\n "0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc",\n {\n "txHash": "0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6",\n "disableMemory": false\n }\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "/Users/me/mynode/holesky/data/traces/block_0x2dc0b6c4-4-0x4ff04c4a-1612820117332"\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_standardtracebadblocktofile",children:(0,c.jsx)(n.code,{children:"debug_standardTraceBadBlockToFile"})}),"\n",(0,c.jsx)(n.p,{children:"Generates files containing the block trace of invalid blocks. A separate file is generated for each transaction in the block."}),"\n",(0,c.jsxs)(n.p,{children:["Use ",(0,c.jsx)(n.a,{href:"#debug_standardtraceblocktofile",children:(0,c.jsx)(n.code,{children:"debug_standardTraceBlockToFile"})})," to view the trace for a valid block."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-21",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-21",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - location of the generated trace files"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_standardTraceBadBlockToFile","params":["0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_standardTraceBadBlockToFile",\n "params": [\n "0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "/Users/me/mynode/holesky/data/traces/block_0x53741e9e-0-0x407ec43d-1600951088172"\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_storagerangeat",children:(0,c.jsx)(n.code,{children:"debug_storageRangeAt"})}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"https://remix.ethereum.org/",children:"Remix"})," uses ",(0,c.jsx)(n.code,{children:"debug_storageRangeAt"})," to implement debugging. Use the ",(0,c.jsx)(n.em,{children:"Debugger"})," tab in Remix instead of calling ",(0,c.jsx)(n.code,{children:"debug_storageRangeAt"})," directly."]}),"\n",(0,c.jsx)(n.p,{children:"Returns the contract storage for the specified range."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-22",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"txIndex"}),": ",(0,c.jsx)(n.em,{children:"number"})," - transaction index from which to start"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - contract address"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startKey"}),": ",(0,c.jsx)(n.em,{children:"string"})," - start key"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"limit"}),": ",(0,c.jsx)(n.em,{children:"number"})," - number of storage entries to return"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-22",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#range-object",children:"range object"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_storageRangeAt","params":["0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c",0,"0x0e0d2c8f7794e82164f11798276a188147fbd415","0x0000000000000000000000000000000000000000000000000000000000000000",1], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_storageRangeAt",\n "params": [\n "0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c",\n 0,\n "0x0e0d2c8f7794e82164f11798276a188147fbd415",\n "0x0000000000000000000000000000000000000000000000000000000000000000",\n 1\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "storage": {\n "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563": {\n "key": null,\n "value": "0x0000000000000000000000000000000000000000000000000000000000000001"\n }\n },\n "nextKey": "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_tracetransaction",children:(0,c.jsx)(n.code,{children:"debug_traceTransaction"})}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"https://remix.ethereum.org/",children:"Remix"})," uses ",(0,c.jsx)(n.code,{children:"debug_traceTransaction"})," to implement debugging. Use the ",(0,c.jsx)(n.em,{children:"Debugger"})," tab in Remix instead of calling ",(0,c.jsx)(n.code,{children:"debug_traceTransaction"})," directly."]}),"\n",(0,c.jsx)(n.p,{children:"Reruns the transaction with the same state as when the transaction executed."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-23",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transactionHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - transaction hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"object"})," - request options object with the following fields (all optional and default to ",(0,c.jsx)(n.code,{children:"false"}),"):"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStorage"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables storage capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables memory capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStack"})," : ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables stack capture."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-23",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-object",children:"trace object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e",{"disableStorage":true}],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_traceTransaction",\n "params": [\n "0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e",\n { "disableStorage": true }\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "gas": 21000,\n "failed": false,\n "returnValue": "",\n "structLogs": [\n {\n "pc": 0,\n "op": "STOP",\n "gas": 0,\n "gasCost": 0,\n "depth": 1,\n "stack": [],\n "memory": [],\n "storage": null\n }\n ]\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_traceblock",children:(0,c.jsx)(n.code,{children:"debug_traceBlock"})}),"\n",(0,c.jsx)(n.p,{children:"Returns full trace of all invoked opcodes of all transactions included in the block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-24",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"block"}),": ",(0,c.jsx)(n.em,{children:"string"})," - RLP of the block"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"object"})," - request options object with the following fields (all optional and default to ",(0,c.jsx)(n.code,{children:"false"}),"):"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStorage"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables storage capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables memory capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStack"})," : ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables stack capture."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-24",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-object",children:"trace object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_traceBlock","params":["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_traceBlock",\n "params": [\n "0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "gas": 21000,\n "failed": false,\n "returnValue": "",\n "structLogs": [\n {\n "pc": 0,\n "op": "STOP",\n "gas": 0,\n "gasCost": 0,\n "depth": 1,\n "stack": [],\n "memory": [],\n "storage": null\n }\n ]\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_traceblockbyhash",children:(0,c.jsx)(n.code,{children:"debug_traceBlockByHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns full trace of all invoked opcodes of all transactions included in the block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-25",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - block hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"object"})," - request options object with the following fields (all optional and default to ",(0,c.jsx)(n.code,{children:"false"}),"):"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStorage"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables storage capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables memory capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStack"})," : ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables stack capture."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-25",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-object",children:"trace objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_traceBlockByHash","params":["0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_traceBlockByHash",\n "params": [\n "0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "gas": 21000,\n "failed": false,\n "returnValue": "",\n "structLogs": [\n {\n "pc": 0,\n "op": "STOP",\n "gas": 0,\n "gasCost": 0,\n "depth": 1,\n "stack": [],\n "memory": [],\n "storage": {},\n "reason": null\n }\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_traceblockbynumber",children:(0,c.jsx)(n.code,{children:"debug_traceBlockByNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns full trace of all invoked opcodes of all transactions included in the block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-26",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"object"})," - request options object with the following fields (all optional and default to ",(0,c.jsx)(n.code,{children:"false"}),"):"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStorage"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables storage capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables memory capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStack"})," : ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables stack capture."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-26",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-object",children:"trace objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_traceBlockByNumber","params":["0x7224",{"disableStorage":true}], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_traceBlockByNumber",\n "params": ["0x7224", { "disableStorage": true }],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "gas": 21000,\n "failed": false,\n "returnValue": "",\n "structLogs": [\n {\n "pc": 0,\n "op": "STOP",\n "gas": 0,\n "gasCost": 0,\n "depth": 1,\n "stack": [],\n "memory": [],\n "storage": null,\n "reason": null\n }\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"debug_tracecall",children:(0,c.jsx)(n.code,{children:"debug_traceCall"})}),"\n",(0,c.jsxs)(n.p,{children:["Performs an ",(0,c.jsx)(n.a,{href:"#eth_call",children:(0,c.jsx)(n.code,{children:"eth_call"})})," within the execution environment of a given block, using the final state of its parent block as the base, and provides a detailed trace of the executed opcodes."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-27",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"call"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"object"})," - request options object with the following fields (all optional and default to ",(0,c.jsx)(n.code,{children:"false"}),"):"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStorage"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables storage capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableMemory"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables memory capture."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"disableStack"})," : ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," disables stack capture."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-27",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-object",children:"trace objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"debug_traceCall","params":[{"from":"","to":"","gas":"0xfffff2","gasPrice":"0xef","value":"0x0","data":""},"latest",{"disableMemory":true,"disableStack":true,"disableStorage":true}], "id":1}\' http://127.0.0.1:8545\n\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "debug_traceCall",\n "params": [{"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73","0x0050000000000000000000000000000000000000", "0xfffff2","0xef","0x0","0x0000000000000000000000000030000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001"},"latest",{"disableMemory":true,"disableStack":true,"disableStorage":true}],\n "id": 1\n}\n\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "gas": 21000,\n "failed": false,\n "returnValue": "",\n "structLogs": [\n {\n "pc": 0,\n "op": "STOP",\n "gas": 0,\n "gasCost": 0,\n "depth": 1,\n "stack": [],\n "memory": [],\n "storage": null,\n "reason": null\n }\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"eth-methods",children:[(0,c.jsx)(n.code,{children:"ETH"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"ETH"})," API methods allow you to interact with the blockchain."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["Methods with an equivalent ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/graphql",children:"GraphQL"})," query include a GraphQL request and result in the method example. The parameter and result descriptions apply to the JSON-RPC requests. The GraphQL specification is defined in the ",(0,c.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/ethereum/api/src/main/resources/schema.graphqls",children:"schema"}),"."]})}),"\n",(0,c.jsx)(n.h3,{id:"eth_accounts",children:(0,c.jsx)(n.code,{children:"eth_accounts"})}),"\n",(0,c.jsx)(n.p,{children:"Returns a list of account addresses a client owns."}),"\n",(0,c.jsxs)(n.admonition,{type:"note",children:[(0,c.jsxs)(n.p,{children:["This method returns an empty object because Besu ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"doesn't support key management"})," inside the client."]}),(0,c.jsxs)(n.p,{children:["To provide access to your key store and and then sign transactions, use ",(0,c.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," with Besu."]})]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-28",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-28",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of 20-byte account addresses owned by the client"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": []\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_blobbasefee",children:(0,c.jsx)(n.code,{children:"eth_blobBaseFee"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the base fee per blob gas in wei."}),"\n",(0,c.jsx)(n.admonition,{type:"info",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"/public-networks/concepts/transactions/types#blob-transactions",children:"Shard blob transactions"})," enable scaling Ethereum by allowing blobs of\ndata to be stored temporarily by consensus clients."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-29",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-29",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal integer representing the base fee per blob gas."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_blobBaseFee","params":[],"id":51}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{"jsonrpc":"2.0","method":"eth_blobBaseFee","params":[],"id":51}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": "0x3f5694c1f"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_blocknumber",children:(0,c.jsx)(n.code,{children:"eth_blockNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the index corresponding to the block number of the current chain head."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-30",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-30",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal integer representing the index corresponding to the block number of the current chain head"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":51}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 51 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": "0x2377"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block{number}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n block {\n number\n }\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "number": 16221\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_call",children:(0,c.jsx)(n.code,{children:"eth_call"})}),"\n",(0,c.jsx)(n.p,{children:"Invokes a contract function locally and does not change the state of the blockchain."}),"\n",(0,c.jsxs)(n.p,{children:["You can interact with contracts using ",(0,c.jsx)(n.a,{href:"#eth_sendrawtransaction",children:(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})})," or ",(0,c.jsx)(n.code,{children:"eth_call"}),"."]}),"\n",(0,c.jsxs)(n.p,{children:["By default, the ",(0,c.jsx)(n.code,{children:"eth_call"})," error response includes the ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-31",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"call"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n",(0,c.jsxs)(n.admonition,{type:"note",children:[(0,c.jsxs)(n.p,{children:["The ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:[(0,c.jsx)(n.code,{children:"strict"})," parameter"]})," determines if the sender account balance is checked:"]}),(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["If ",(0,c.jsx)(n.code,{children:"strict:true"}),", the balance is checked and ",(0,c.jsx)(n.code,{children:"eth_call"})," fails if the sender account has an insufficient balance to send the transaction with the specified gas parameters."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["If ",(0,c.jsx)(n.code,{children:"strict:false"}),", the balance is not checked and ",(0,c.jsx)(n.code,{children:"eth_call"})," can succeed even if the sender account has an insufficient balance."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["If ",(0,c.jsx)(n.code,{children:"strict"})," is not specified, the balance is checked against the gas parameters if supplied."]}),"\n"]}),"\n"]}),(0,c.jsxs)(n.p,{children:["If you do not want the sender account balance checked, send zero gas or specify ",(0,c.jsx)(n.code,{children:"strict:false"}),"."]})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number,\nblock hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as\ndescribed in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-31",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - return value of the executed contract"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","value":"0x1"}, "latest"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_call",\n "params": [\n { "to": "0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13", "value": "0x1" },\n "latest"\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block {number call (data : {from : \\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\", to: \\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\", data :\\"0x12a7b914\\"}){data status}}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block {\n number\n call(data: {from: "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", to: "0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13", data: "0x12a7b914"}) {\n data\n status\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "number": 17449,\n "call": {\n "data": "0x",\n "status": 1\n }\n }\n }\n}\n'})})})]}),"\n",(0,c.jsxs)(n.admonition,{title:"Example of a simulated contract creation",type:"info",children:[(0,c.jsxs)(n.p,{children:["The following example creates a simulated contract by not including the ",(0,c.jsx)(n.code,{children:"to"})," parameter from the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})," in the ",(0,c.jsx)(n.code,{children:"call"})," parameter. Besu simulates the data to create the contract."]}),(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_call","params":[{"from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "data":"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b5061021e806100606000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032","gas":"0x439cf","gasPrice":"0x0"},"latest"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032"\n}\n'})})})]})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_chainid",children:(0,c.jsx)(n.code,{children:"eth_chainId"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"chain ID"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-32",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-32",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - chain ID in hexadecimal"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":51}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 51 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": "0x7e2"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_coinbase",children:(0,c.jsx)(n.code,{children:"eth_coinbase"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the client coinbase address. The coinbase address is the account to pay mining rewards to."}),"\n",(0,c.jsxs)(n.p,{children:["To set a coinbase address, start Besu with the ",(0,c.jsx)(n.code,{children:"--miner-coinbase"})," option set to a valid Ethereum account address. You can get the Ethereum account address from a client such as MetaMask or Etherscan. For example:"]}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:'besu --miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" --rpc-http-enabled\n'})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-33",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-33",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - coinbase address"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_coinbase", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_createaccesslist",children:(0,c.jsx)(n.code,{children:"eth_createAccessList"})}),"\n",(0,c.jsxs)(n.p,{children:["Creates an ",(0,c.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-2930",children:"EIP-2930"})," access list that you can ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/transactions/types#access_list-transactions",children:"include in a transaction"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-34",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-34",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - access list object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:[(0,c.jsx)(n.code,{children:"accessList"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of objects with the following fields:","\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - addresses to be accessed by the transaction"]}),"\n",(0,c.jsxs)(n.li,{children:[(0,c.jsx)(n.code,{children:"storageKeys"}),": ",(0,c.jsx)(n.em,{children:"array"})," - storage keys to be accessed by the transaction"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:[(0,c.jsx)(n.code,{children:"gasUsed"}),": ",(0,c.jsx)(n.em,{children:"string"})," - approximate gas cost for the transaction if the access list is included"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"method":"eth_createAccessList","params":[{"from": "0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63", "data": "0x608060806080608155"}, "pending"],"id":1,"jsonrpc":"2.0"}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "method": "eth_createAccessList",\n "params": [\n {\n "from": "0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63",\n "data": "0x608060806080608155"\n },\n "pending"\n ],\n "id": 1,\n "jsonrpc": "2.0"\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "accessList": [\n {\n "address": "0xa02457e5dfd32bda5fc7e1f1b008aa5979568150",\n "storageKeys": [\n "0x0000000000000000000000000000000000000000000000000000000000000081",\n ]\n }\n ]\n "gasUsed": "0x125f8"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_estimategas",children:(0,c.jsx)(n.code,{children:"eth_estimateGas"})}),"\n",(0,c.jsx)(n.p,{children:"Returns an estimate of the gas required for a transaction to complete. The estimation process does not use gas and the transaction is not added to the blockchain. The resulting estimate can be greater than the amount of gas the transaction ends up using, for reasons including EVM mechanics and node performance."}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"eth_estimateGas"})," call does not send a transaction. You must call ",(0,c.jsx)(n.a,{href:"#eth_sendrawtransaction",children:(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})})," to execute the transaction."]}),"\n",(0,c.jsxs)(n.p,{children:["By default, the ",(0,c.jsx)(n.code,{children:"eth_estimateGas"})," error response includes the ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-35",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:["For ",(0,c.jsx)(n.code,{children:"eth_estimateGas"}),", all fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply)."]}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"call"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n",(0,c.jsx)(n.h4,{id:"returns-35",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - amount of gas used"]}),"\n",(0,c.jsxs)(n.p,{children:["The following example returns an estimate of 21000 wei (",(0,c.jsx)(n.code,{children:"0x5208"}),") for the transaction."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"from":"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73","to":"0x44Aa93095D6749A706051658B970b941c72c1D53","value":"0x1"}],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_estimateGas",\n "params": [\n {\n "from": "0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73",\n "to": "0x44Aa93095D6749A706051658B970b941c72c1D53",\n "value": "0x1"\n }\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x5208"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block{estimateGas (data: {from :\\"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\\", to :\\"0x8888f1f195afa192cfee860698584c030f4c9db1\\"})}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block {\n estimateGas(data: {from: "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f", to: "0x8888f1f195afa192cfee860698584c030f4c9db1"})\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "estimateGas": 21000\n }\n }\n}\n'})})})]}),"\n",(0,c.jsxs)(n.p,{children:["The following example request estimates the cost of deploying a simple storage smart contract to the network. The data field contains the hash of the compiled contract you want to deploy. (You can get the compiled contract hash from your IDE, for example, ",(0,c.jsx)(n.strong,{children:"Remix > Compile tab > details > WEB3DEPLOY"}),".) The result is 113355 wei."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST \\\nhttp://127.0.0.1:8545 \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "jsonrpc": "2.0",\n "method": "eth_estimateGas",\n "params": [{\n "from": "0x8bad598904ec5d93d07e204a366d084a80c7694e",\n "data": "0x608060405234801561001057600080fd5b5060e38061001f6000396000f3fe6080604052600436106043576000357c0100000000000000000000000000000000000000000000000000000000900480633fa4f24514604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b806000819055505056fea165627a7a7230582020d7ad478b98b85ca751c924ef66bcebbbd8072b93031073ef35270a4c42f0080029"\n }],\n "id": 1\n}\'\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1bacb"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_feehistory",children:(0,c.jsx)(n.code,{children:"eth_feeHistory"})}),"\n",(0,c.jsx)(n.p,{children:"Returns base fee per gas and transaction effective priority fee per gas history for the requested block\nrange, allowing you to track trends over time."}),"\n",(0,c.jsxs)(n.p,{children:["As of ",(0,c.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-4844",children:"EIP-4844"}),", this method tracks transaction blob gas fees as well."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-36",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockCount"}),": ",(0,c.jsx)(n.em,{children:"integer"})," or ",(0,c.jsx)(n.em,{children:"string"})," - Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. Accepts hexadecimal or integer values."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"newestBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing the highest number block of\nthe requested range, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or\n",(0,c.jsx)(n.code,{children:"safe"}),", as described in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"array"})," of ",(0,c.jsx)(n.code,{children:"integers"})," - (optional) A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-36",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#fee-history-results-object",children:"Fee history results object"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_feeHistory","params": ["0x5", "latest", [20,30]],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_feeHistory",\n "params": ["0x5", "latest", [20, 30]],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "oldestBlock": "0x10b52f",\n "baseFeePerGas": [\n "0x3fa63a3f",\n "0x37f999ee",\n "0x3e36f20a",\n "0x4099f79a",\n "0x430d532d",\n "0x46fcd4a4"\n ],\n "baseFeePerBlobGas": [\n "0x7b7609c19",\n "0x6dbe41789",\n "0x7223341d4",\n "0x6574a002c",\n "0x7223341d4",\n "0x6574a002c"\n ],\n "gasUsedRatio": [\n 0.017712333333333333,\n 0.9458865666666667,\n 0.6534561,\n 0.6517375666666667,\n 0.7347769666666667\n ],\n "blobGasUsedRatio": [\n 0.0,\n 0.6666666666666666,\n 0.0,\n 1.0,\n 0.0\n ],\n "reward": [\n [\n "0x3b9aca00",\n "0x59682f00"\n ],\n [\n "0x3a13012",\n "0x3a13012"\n ],\n [\n "0xf4240",\n "0xf4240"\n ],\n [\n "0xf4240",\n "0xf4240"\n ],\n [\n "0xf4240",\n "0xf4240"\n ]\n ]\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gasprice",children:(0,c.jsx)(n.code,{children:"eth_gasPrice"})}),"\n",(0,c.jsx)(n.p,{children:"Returns a percentile gas unit price for the most recent blocks, in wei. By default, the last 100 blocks are examined and the 50th percentile gas unit price (that is, the median value) is returned."}),"\n",(0,c.jsxs)(n.p,{children:["If there are no blocks, the value for ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,c.jsx)(n.code,{children:"--min-gas-price"})})," is returned. The value returned is restricted to values between ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,c.jsx)(n.code,{children:"--min-gas-price"})})," and ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#api-gas-price-max",children:(0,c.jsx)(n.code,{children:"--api-gas-price-max"})}),". By default, 1000 wei and 500 gwei."]}),"\n",(0,c.jsxs)(n.p,{children:["Use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#api-gas-price-blocks",children:(0,c.jsx)(n.code,{children:"--api-gas-price-blocks"})}),", ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#api-gas-price-percentile",children:(0,c.jsx)(n.code,{children:"--api-gas-price-percentile"})})," , and ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#api-gas-price-max",children:(0,c.jsx)(n.code,{children:"--api-gas-price-max"})})," command line options to configure the ",(0,c.jsx)(n.code,{children:"eth_gasPrice"})," default values."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-37",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-37",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - percentile gas unit price for the most recent blocks, in wei, as a hexadecimal value"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x3e8"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{gasPrice}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n gasPrice\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "gasPrice": "0x3e8"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getbalance",children:(0,c.jsx)(n.code,{children:"eth_getBalance"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the account balance of the specified address."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-38",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 20-byte account address from which to retrieve the balance"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block\nnumber, block hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or\n",(0,c.jsx)(n.code,{children:"safe"}),", as described in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-38",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - current balance, in wei, as a hexadecimal value"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "latest"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getBalance",\n "params": ["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "latest"],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x1cfe56f3795885980000"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{ account ( address: \\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\") { balance } }"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n account(address: "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73") {\n balance\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "account": {\n "balance": "0x1ce96a1ffe7620d00000"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getblockbyhash",children:(0,c.jsx)(n.code,{children:"eth_getBlockByHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns information about the block matching the specified block hash."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-39",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"hash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of a block"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"verbose"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - if ",(0,c.jsx)(n.code,{children:"true"}),", returns the full ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction objects"}),"; if ",(0,c.jsx)(n.code,{children:"false"}),", returns the transaction hashes"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-39",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no block"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c", false],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getBlockByHash",\n "params": [\n "0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",\n false\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": {\n "number": "0x68b3",\n "hash": "0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",\n "mixHash": "0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d",\n "parentHash": "0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d",\n "nonce": "0x378da40ff335b070",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "logsBloom": "0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000",\n "transactionsRoot": "0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126",\n "stateRoot": "0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233",\n "receiptsRoot": "0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a",\n "miner": "0xb42b6c4a95406c78ff892d270ad20b22642e102d",\n "difficulty": "0x66e619a",\n "totalDifficulty": "0x1e875d746ae",\n "extraData": "0xd583010502846765746885676f312e37856c696e7578",\n "size": "0x334",\n "gasLimit": "0x47e7c4",\n "gasUsed": "0x37993",\n "timestamp": "0x5835c54d",\n "uncles": [],\n "transactions": [\n "0xa0807e117a8dd124ab949f460f08c36c72b710188f01609595223b325e58e0fc",\n "0xeae6d797af50cb62a596ec3939114d63967c374fa57de9bc0f4e2b576ed6639d"\n ],\n "baseFeePerGas": "0x7"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block (hash : \\"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\\") {number transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(hash: "0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92") {\n number\n transactions {\n hash\n }\n timestamp\n difficulty\n totalDifficulty\n gasUsed\n gasLimit\n hash\n nonce\n ommerCount\n logsBloom\n mixHash\n ommerHash\n extraData\n stateRoot\n receiptsRoot\n transactionCount\n transactionsRoot\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "number": 17607,\n "transactions": [],\n "timestamp": "0x5cdbdfb5",\n "difficulty": "0x1",\n "totalDifficulty": "0x44c8",\n "gasUsed": 0,\n "gasLimit": 4700000,\n "hash": "0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92",\n "nonce": "0x0000000000000000",\n "ommerCount": 0,\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "ommerHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "extraData": "0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b841fae6d25da0b91e3e88669d0a765c98479d86d53e9ea1f3fb6b36d7ff22fa622a3da0c49c20e5562c774e90acae8ad487936f6b6019cd8a782db684693cba1e9800",\n "stateRoot": "0xa7086c266aed46cd3bc45579178f8acb36d9d147de575a3ecbf8c7e6f1c737fc",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "transactionCount": 0,\n "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "baseFeePerGas": "0x7"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getblockbynumber",children:(0,c.jsx)(n.code,{children:"eth_getBlockByNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns information about the block matching the specified block number."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-40",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"verbose"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - if ",(0,c.jsx)(n.code,{children:"true"}),", returns the full ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction objects"}),"; if ",(0,c.jsx)(n.code,{children:"false"}),", returns only the hashes of the transactions."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-40",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no block."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x68B3", true],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getBlockByNumber",\n "params": ["0x68B3", true],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "number": "0x68b3",\n "hash": "0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",\n "mixHash": "0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d",\n "parentHash": "0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d",\n "nonce": "0x378da40ff335b070",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "logsBloom": "0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000",\n "transactionsRoot": "0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126",\n "stateRoot": "0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233",\n "receiptsRoot": "0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a",\n "miner": "0xb42b6c4a95406c78ff892d270ad20b22642e102d",\n "difficulty": "0x66e619a",\n "totalDifficulty": "0x1e875d746ae",\n "extraData": "0xd583010502846765746885676f312e37856c696e7578",\n "size": "0x334",\n "gasLimit": "0x47e7c4",\n "gasUsed": "0x37993",\n "timestamp": "0x5835c54d",\n "uncles": [],\n "transactions": [],\n "baseFeePerGas": "0x7"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block (number : 100) {transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot ommers{hash} ommerAt(index : 1){hash} miner{address} account(address: \\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\"){balance} parent{hash} }}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(number: 100) {\n transactions {\n hash\n }\n timestamp\n difficulty\n totalDifficulty\n gasUsed\n gasLimit\n hash\n nonce\n ommerCount\n logsBloom\n mixHash\n ommerHash\n extraData\n stateRoot\n receiptsRoot\n transactionCount\n transactionsRoot\n ommers {\n hash\n }\n ommerAt(index: 1) {\n hash\n }\n miner {\n address\n }\n account(address: "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73") {\n balance\n }\n parent {\n hash\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "transactions": [],\n "timestamp": "0x5cd10933",\n "difficulty": "0x1",\n "totalDifficulty": "0x65",\n "gasUsed": 0,\n "gasLimit": 4700000,\n "hash": "0x63b3ea2bc37fec8f82680eb823652da6af8acebb4f6c4d0ff659c55be473c8b0",\n "nonce": "0x0000000000000000",\n "ommerCount": 0,\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "ommerHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "extraData": "0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8414d877d8d0ced37ea138fab55a978f3740367a24a31731322ecdc3368f11e0d4966c9ce17ae59a76fb94eb436e8a386868f6bd6b0a5678e58daf49f5dd940558b00",\n "stateRoot": "0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "transactionCount": 0,\n "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "ommers": [],\n "ommerAt": null,\n "miner": {\n "address": "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n },\n "account": {\n "balance": "0xad0f47f269cbf31ac"\n },\n "parent": {\n "hash": "0x7bca25e1fa5e395fd6029eb496a70b6b5495843976bf9e49b993c723ded29d9e"\n },\n "baseFeePerGas": "0x7"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getblockreceipts",children:(0,c.jsx)(n.code,{children:"eth_getBlockReceipts"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns all transaction receipts for a given block. Transaction receipts provide a way to track the success or failure of a transaction (",(0,c.jsx)(n.code,{children:"1"})," if successful and ",(0,c.jsx)(n.code,{children:"0"})," if failed), as well as the amount of\ngas used and any event logs that might have been produced by a smart contract during the transaction."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-41",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-41",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no block."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBlockReceipts","params":["latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["0x6f55"], "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "blockHash": "0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182",\n "blockNumber": "0x6f55",\n "contractAddress": null,\n "cumulativeGasUsed": "0x18c36",\n "from": "0x22896bfc68814bfd855b1a167255ee497006e730",\n "gasUsed": "0x18c36",\n "effectiveGasPrice": "0x9502f907",\n "logs": [\n {\n "address": "0xfd584430cafa2f451b4e2ebcf3986a21fff04350",\n "topics": [\n "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",\n "0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8",\n "0x000000000000000000000000835281a2563db4ebf1b626172e085dc406bfc7d2",\n "0x00000000000000000000000022896bfc68814bfd855b1a167255ee497006e730"\n ],\n "data": "0x",\n "blockNumber": "0x6f55",\n "transactionHash": "0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975",\n "transactionIndex": "0x0",\n "blockHash": "0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182",\n "logIndex": "0x0",\n "removed": false\n }\n ],\n "logsBloom": "0x00000004000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000080020000000000000200010000000000000000000001000000800000000000000000000000000000000000000000000000000000100100000000000000000000008000000000000000000000000000000002000000000000000000000",\n "status": "0x1",\n "to": "0xfd584430cafa2f451b4e2ebcf3986a21fff04350",\n "transactionHash": "0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975",\n "transactionIndex": "0x0",\n "type": "0x0"\n },\n {\n "blockHash": "0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182",\n "blockNumber": "0x6f55",\n "contractAddress": null,\n "cumulativeGasUsed": "0x1de3e",\n "from": "0x712e3a792c974b3e3dbe41229ad4290791c75a82",\n "gasUsed": "0x5208",\n "effectiveGasPrice": "0x9502f907",\n "logs": [],\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "status": "0x1",\n "to": "0xd42e2b1c14d02f1df5369a9827cb8e6f3f75f338",\n "transactionHash": "0xefb83b4e3f1c317e8da0f8e2fbb2fe964f34ee184466032aeecac79f20eacaf6",\n "transactionIndex": "0x1",\n "type": "0x2"\n }\n ]\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block (hash: \\"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\\") {transactions{block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block (hash: "0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d") {\n transactions { \n block { \n hash\n logsBloom\n } \n hash\n createdContract {\n address\n } \n cumulativeGasUsed\n gas\n gasUsed\n logs{ \n topics\n } \n from{ \n address\n }\n to { \n address\n } \n index\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data" : {\n "block" : {\n "transactions" : [ {\n "block" : {\n "hash" : "0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d",\n "logsBloom" : "0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000"\n },\n "hash" : "0x7afe779fd0c6d4a1b6f330e679a5cf94095eaa57d2ce0c0ef991dfb2b405374f",\n "createdContract" : null,\n "cumulativeGasUsed" : "0x5208",\n "gas" : "0x61a8",\n "gasUsed" : "0x5208",\n "logs" : [ ],\n "from" : {\n "address" : "0x66f962241b8ff853849c85a63a0ce20bae4f68d5"\n },\n "to" : {\n "address" : "0x6be8356826a9fc7b2d911fcc1de6342ae5f5b9a3"\n },\n "index" : "0x0"\n }, {\n "block" : {\n "hash" : "0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d",\n "logsBloom" : "0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000"\n },\n "hash" : "0x412f04ba27c1c096dadb2d8af54ee61034c3d4679fdd025a634e95fa2238713c",\n "createdContract" : null,\n "cumulativeGasUsed" : "0xbcdb2",\n "gas" : "0xbdfe0",\n "gasUsed" : "0xb7baa",\n "logs" : [ {\n "topics" : [ "0xd93fde3ea1bb11dcd7a4e66320a05fc5aa63983b6447eff660084c4b1b1b499b", "0x00000000000000000000000000000000000000000000000000000000000e4d3a" ]\n } ],\n "from" : {\n "address" : "0xe253f7a6533c62755f470b33fa5bcd659a5db3cd"\n },\n "to" : {\n "address" : "0x95ff8d3ce9dcb7455beb7845143bea84fe5c4f6f"\n },\n "index" : "0x1"\n } ]\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getblocktransactioncountbyhash",children:(0,c.jsx)(n.code,{children:"eth_getBlockTransactionCountByHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of transactions in the block matching the specified block hash."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-42",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"hash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-42",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"number"})," - integer representing the number of transactions in the specified block, or ",(0,c.jsx)(n.code,{children:"null"})," if no matching block hash is found"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getBlockTransactionCountByHash",\n "params": [\n "0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": null\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(hash:\\"0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097\\"){transactionCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(hash: "0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097") {\n transactionCount\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "transactionCount": 1\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getblocktransactioncountbynumber",children:(0,c.jsx)(n.code,{children:"eth_getBlockTransactionCountByNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of transactions in a block matching the specified block number."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-43",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-43",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer representing the number of transactions in the specified block, or ",(0,c.jsx)(n.code,{children:"null"})," if no matching block number is found"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":51}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getBlockTransactionCountByNumber",\n "params": ["0xe8"],\n "id": 51\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": "0x8"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(number:232){transactionCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n block(number: 232) {\n transactionCount\n }\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "transactionCount": 1\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getcode",children:(0,c.jsx)(n.code,{children:"eth_getCode"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the code of the smart contract at the specified address. Besu stores compiled smart contract code as a hexadecimal value."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-44",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 20-byte contract address"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number,\nblock hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as\ndescribed in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-44",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"data"})," - code stored at the specified address"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa50a51c09a5c451c52bb714527e1974b686d8e77", "latest"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getCode",\n "params": ["0xa50a51c09a5c451c52bb714527e1974b686d8e77", "latest"],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{account(address: \\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\\"){ code }}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n account(address: "0xa50a51c09a5c451c52bb714527e1974b686d8e77") {\n code\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "account": {\n "code": "0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getfilterchanges",children:(0,c.jsx)(n.code,{children:"eth_getFilterChanges"})}),"\n",(0,c.jsx)(n.p,{children:"Polls the specified filter and returns an array of changes that have occurred since the last poll."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-45",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"filterId"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-45",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," or ",(0,c.jsx)(n.em,{children:"objects"})," - if nothing changed since the last poll, an empty list; otherwise:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["For filters created with ",(0,c.jsx)(n.code,{children:"eth_newBlockFilter"}),", returns block hashes."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["For filters created with ",(0,c.jsx)(n.code,{children:"eth_newPendingTransactionFilter"}),", returns transaction hashes."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:["For filters created with ",(0,c.jsx)(n.code,{children:"eth_newFilter"}),", returns ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"}),"."]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0xf8bf5598d9e04fbe84523d42640b9b0e"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getFilterChanges",\n "params": ["0xf8bf5598d9e04fbe84523d42640b9b0e"],\n "id": 1\n}\n'})})}),(0,c.jsxs)(l.A,{value:"JSON result",label:"JSON result",children:[(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",metastring:'title="Example result from a filter created with eth_newBlockFilter"',children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0xda2bfe44bf85394f0d6aa702b5af89ae50ae22c0928c18b8903d9269abe17e0b",\n "0x88cd3a37306db1306f01f7a0e5b25a9df52719ad2f87b0f88ee0e6753ed4a812",\n "0x4d4c731fe129ff32b425e6060d433d3fde278b565bbd1fd624d5a804a34f8786"\n ]\n}\n'})}),(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",metastring:'title="Example result from a filter created with eth_newPendingTransactionFilter"',children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x1e977049b6db09362da09491bee3949d9362080ce3f4fc19721196d508580d46",\n "0xa3abc4b9a4e497fd58dc59cdff52e9bb5609136bcd499e760798aa92802769be"\n ]\n}\n'})}),(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",metastring:'title="Example result from a filter created with eth_newFilter"',children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x233",\n "blockHash": "0xfc139f5e2edee9e9c888d8df9a2d2226133a9bd87c88ccbd9c930d3d4c9f9ef5",\n "transactionHash": "0x66e7a140c8fa27fe98fde923defea7562c3ca2d6bb89798aabec65782c08f63d",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000004",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x238",\n "blockHash": "0x98b0ec0f9fea0018a644959accbe69cd046a8582e89402e1ab0ada91cad644ed",\n "transactionHash": "0xdb17aa1c2ce609132f599155d384c0bc5334c988a6c368056d7e167e23eee058",\n "transactionIndex": "0x0",\n "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000007",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n }\n ]\n}\n'})})]})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getfilterlogs",children:(0,c.jsx)(n.code,{children:"eth_getFilterLogs"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns an array of ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," for the specified filter."]}),"\n",(0,c.jsxs)(n.p,{children:["Leave the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:(0,c.jsx)(n.code,{children:"--auto-log-bloom-caching-enabled"})})," command line option at the default value of ",(0,c.jsx)(n.code,{children:"true"})," to improve log retrieval performance."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"eth_getFilterLogs"})," is only used for filters created with ",(0,c.jsx)(n.code,{children:"eth_newFilter"}),". To specify a filter object and get logs without creating a filter, use ",(0,c.jsx)(n.code,{children:"eth_getLogs"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-46",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"filterId"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-46",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x5ace5de3985749b6a1b2b0d3f3e1fb69"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getFilterLogs",\n "params": ["0x5ace5de3985749b6a1b2b0d3f3e1fb69"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0xb3",\n "blockHash": "0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998",\n "transactionHash": "0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689",\n "transactionIndex": "0x0",\n "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000003",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0xb6",\n "blockHash": "0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc",\n "transactionHash": "0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399",\n "transactionIndex": "0x0",\n "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000005",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getlogs",children:(0,c.jsx)(n.code,{children:"eth_getLogs"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns an array of ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," matching a specified filter object."]}),"\n",(0,c.jsxs)(n.p,{children:["Leave the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:(0,c.jsx)(n.code,{children:"--auto-log-bloom-caching-enabled"})})," command line option at the default value of ",(0,c.jsx)(n.code,{children:"true"})," to improve log retrieval performance."]}),"\n",(0,c.jsx)(n.admonition,{type:"caution",children:(0,c.jsxs)(n.p,{children:["Using ",(0,c.jsx)(n.code,{children:"eth_getLogs"})," to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response. We recommend setting a range limit using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-max-logs-range",children:(0,c.jsx)(n.code,{children:"--rpc-max-logs-range"})})," option (or leaving it at its default value of 1000)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-47",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"filterOptions"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#filter-options-object",children:"filter options object"})]}),"\n",(0,c.jsx)(n.h4,{id:"returns-47",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock":"earliest", "toBlock":"latest", "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8", "topics":[]}], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getLogs",\n "params": [\n {\n "fromBlock": "earliest",\n "toBlock": "latest",\n "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8",\n "topics": []\n }\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0xb3",\n "blockHash": "0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998",\n "transactionHash": "0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689",\n "transactionIndex": "0x0",\n "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000003",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0xb6",\n "blockHash": "0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc",\n "transactionHash": "0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399",\n "transactionIndex": "0x0",\n "address": "0x2e1f232a9439c3d459fceca0beef13acc8259dd8",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000005",\n "topics": [\n "0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3"\n ]\n }\n ]\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{logs(filter:{fromBlock: 1486000, toBlock: 1486010, addresses: [\\"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\\"], topics: [[\\"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\\"]]}) {index topics data account{address} transaction{hash} }}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n logs(filter: {fromBlock: 1486000, toBlock: 1486010, addresses: ["0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d"], topics: [["0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d"]]}) {\n index\n topics\n data\n account {\n address\n }\n transaction {\n hash\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "logs": [\n {\n "index": 0,\n "topics": [\n "0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d",\n "0x0000000000000000000000000000000000000000000000000000000000000004",\n "0x0000000000000000000000000000000000000000000000000000000000508918"\n ],\n "data": "0xa5a04999ec29a8bd19ce32b859280ef9dbb464d846be06f64a1b1012ec08ab03",\n "account": {\n "address": "0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d"\n },\n "transaction": {\n "hash": "0x36a2186344c6a32760e7700fdf3685936220876c51ff39d071eb48c17f7e802f"\n }\n },\n {\n "index": 0,\n "topics": [\n "0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d",\n "0x0000000000000000000000000000000000000000000000000000000000000003",\n "0x0000000000000000000000000000000000000000000000000000000000648c72"\n ],\n "data": "0x0ee96b660ad82c8010c90760a03edfbb40b4af5e3634a8c214e4ac7fa1f61492",\n "account": {\n "address": "0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d"\n },\n "transaction": {\n "hash": "0x9e2cc9e84a9e78839d6f4b591dfd98cc7a454a8ee3cd6ccd0a18e662e22d3818"\n }\n }\n ]\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getminerdatabyblockhash",children:(0,c.jsx)(n.code,{children:"eth_getMinerDataByBlockHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns miner data for the specified block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-48",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"hash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-48",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#miner-data-object",children:"miner data object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method": "eth_getMinerDataByBlockHash","params": ["0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getMinerDataByBlockHash",\n "params": [\n "0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "netBlockReward": "0x47c6f3739f3da800",\n "staticBlockReward": "0x4563918244f40000",\n "transactionFee": "0x38456548220800",\n "uncleInclusionReward": "0x22b1c8c1227a000",\n "uncleRewards": [\n {\n "hash": "0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974",\n "coinbase": "0x0c062b329265c965deef1eede55183b3acb8f611"\n }\n ],\n "coinbase": "0xb42b6c4a95406c78ff892d270ad20b22642e102d",\n "extraData": "0xd583010502846765746885676f312e37856c696e7578",\n "difficulty": "0x7348c20",\n "totalDifficulty": "0xa57bcfdd96"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getminerdatabyblocknumber",children:(0,c.jsx)(n.code,{children:"eth_getMinerDataByBlockNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns miner data for the specified block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-49",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-49",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#miner-data-object",children:"miner data object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method": "eth_getMinerDataByBlockNumber","params": ["0x7689D2"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getMinerDataByBlockNumber",\n "params": ["0x7689D2"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "netBlockReward": "0x47c6f3739f3da800",\n "staticBlockReward": "0x4563918244f40000",\n "transactionFee": "0x38456548220800",\n "uncleInclusionReward": "0x22b1c8c1227a000",\n "uncleRewards": [\n {\n "hash": "0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974",\n "coinbase": "0x0c062b329265c965deef1eede55183b3acb8f611"\n }\n ],\n "coinbase": "0xb42b6c4a95406c78ff892d270ad20b22642e102d",\n "extraData": "0xd583010502846765746885676f312e37856c696e7578",\n "difficulty": "0x7348c20",\n "totalDifficulty": "0xa57bcfdd96"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getproof",children:(0,c.jsx)(n.code,{children:"eth_getProof"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the account and storage values of the specified account, including the Merkle proof."}),"\n",(0,c.jsx)(n.p,{children:"The API allows IoT devices or mobile apps which are unable to run light clients to verify responses from untrusted sources, by using a trusted block hash."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-50",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 20-byte address of the account or contract"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"keys"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of 32-byte storage keys to generate proofs for"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block\nnumber, block hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or\n",(0,c.jsx)(n.code,{children:"safe"}),", as described in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-50",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - account details object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"balance"}),": ",(0,c.jsx)(n.em,{children:"string"})," - account balance"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"codeHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of the account code"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"nonce"}),": ",(0,c.jsx)(n.em,{children:"string"})," - number of transactions sent from the account"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"storageHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte SHA3 of the ",(0,c.jsx)(n.code,{children:"storageRoot"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"accountProof"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of RLP-encoded Merkle tree nodes, starting with the ",(0,c.jsx)(n.code,{children:"stateRoot"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"storageProof"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of storage entry objects with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"key"}),": ",(0,c.jsx)(n.em,{children:"string"})," - storage key"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"value"}),": ",(0,c.jsx)(n.em,{children:"string"})," - storage value"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"proof"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of RLP-encoded Merkle tree nodes, starting with the ",(0,c.jsx)(n.code,{children:"storageHash"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method": "eth_getProof","params": [\n"0a8156e7ee392d885d10eaa86afd0e323afdcd95", ["0x0000000000000000000000000000000000000000000000000000000000000347"], "latest"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getProof",\n "params": [\n "0a8156e7ee392d885d10eaa86afd0e323afdcd95",\n ["0x0000000000000000000000000000000000000000000000000000000000000347"],\n "latest"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "accountProof": [\n "0xf90211a0...608d898380",\n "0xf90211a0...ec33f19580",\n "0xf901d1a0...9e55584480",\n "0xf8718080...18e5777142"\n ],\n "address": "0x0a8156e7ee392d885d10eaa86afd0e323afdcd95",\n "balance": "0x0",\n "codeHash": "0x2b6975dcaf69f9bb9a3b30bb6a37b305ce440250bf0dd2f23338cb18e5777142",\n "nonce": "0x5f",\n "storageHash": "0x917688de43091589aa58c1dfd315105bc9de4478b9ba7471616a4d8a43d46203",\n "storageProof": [\n {\n "key": "0x0000000000000000000000000000000000000000000000000000000000000347",\n "value": "0x0",\n "proof": [\n "0xf90211a0...5176779280",\n "0xf901f1a0...c208d86580",\n "0xf8d180a0...1ce6808080"\n ]\n }\n ]\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getstorageat",children:(0,c.jsx)(n.code,{children:"eth_getStorageAt"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the value of a storage position at a specified address."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-51",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 20-byte storage address"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"index"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer index of the storage position"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block\nnumber, block hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or\n",(0,c.jsx)(n.code,{children:"safe"}),", as described in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-51",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"})," : ",(0,c.jsx)(n.em,{children:"string"})," - value at the specified storage position"]}),"\n",(0,c.jsx)(n.p,{children:"Calculating the correct position depends on the storage you want to retrieve."}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method": "eth_getStorageAt","params": ["0x\u202d3B3F3E\u202c","0x0","latest"],"id": 53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getStorageAt",\n "params": ["0x\u202d3B3F3E\u202c", "0x0", "latest"],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x0000000000000000000000000000000000000000000000000000000000000000"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{account(address: \\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\") {storage(slot: \\"0x04\\")}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n account(address: "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73") {\n storage(slot: "0x04")\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "account": {\n "storage": "0x0000000000000000000000000000000000000000000000000000000000000000"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gettransactionbyblockhashandindex",children:(0,c.jsx)(n.code,{children:"eth_getTransactionByBlockHashAndIndex"})}),"\n",(0,c.jsx)(n.p,{children:"Returns transaction information for the specified block hash and transaction index position."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-52",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"block"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of a block"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"index"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer representing the transaction index position"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-52",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no transaction"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7", "0x2"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getTransactionByBlockHashAndIndex",\n "params": [\n "0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7",\n "0x2"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "blockHash": "0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7",\n "blockNumber": "0x1442e",\n "chainId": 2018,\n "from": "0x70c9217d814985faef62b124420f8dfbddd96433",\n "gas": "0x3d090",\n "gasPrice": "0x57148a6be",\n "hash": "0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6",\n "input": "0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000",\n "nonce": "0x2cb2",\n "to": "0xcfdc98ec7f01dab1b67b36373524ce0208dc3953",\n "transactionIndex": "0x2",\n "value": "0x0",\n "v": "0x2a",\n "r": "0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a",\n "s": "0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{ block(hash: \\"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\\") { transactionAt(index: 0) {block{hash} hash } } }"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(hash: "0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69") {\n transactionAt(index: 0) {\n block {\n hash\n }\n hash\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "transactionAt": {\n "block": {\n "hash": "0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69"\n },\n "hash": "0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86"\n }\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gettransactionbyblocknumberandindex",children:(0,c.jsx)(n.code,{children:"eth_getTransactionByBlockNumberAndIndex"})}),"\n",(0,c.jsx)(n.p,{children:"Returns transaction information for the specified block number and transaction index position."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-53",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"index"}),": ",(0,c.jsx)(n.em,{children:"string"})," - transaction index position"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-53",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no transaction"]}),"\n",(0,c.jsxs)(n.p,{children:["This request returns the third transaction in the 82990 block on the Ropsten testnet. You can also view this ",(0,c.jsx)(n.a,{href:"https://ropsten.etherscan.io/txs?block=82990",children:"block"})," and ",(0,c.jsx)(n.a,{href:"https://ropsten.etherscan.io/tx/0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6",children:"transaction"})," on Etherscan."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["82990", "0x2"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getTransactionByBlockNumberAndIndex",\n "params": ["82990", "0x2"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "blockHash": "0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7",\n "blockNumber": "0x1442e",\n "chainId": 2018,\n "from": "0x70c9217d814985faef62b124420f8dfbddd96433",\n "gas": "0x3d090",\n "gasPrice": "0x57148a6be",\n "hash": "0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6",\n "input": "0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000",\n "nonce": "0x2cb2",\n "to": "0xcfdc98ec7f01dab1b67b36373524ce0208dc3953",\n "transactionIndex": "0x2",\n "value": "0x0",\n "v": "0x2a",\n "r": "0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a",\n "s": "0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{block(number:20303) {transactionAt(index: 0) {block{hash} hash}}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n block(number: 20303) {\n transactionAt(index: 0) {\n block {\n hash\n }\n hash\n }\n }\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "transactionAt": {\n "block": {\n "hash": "0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69"\n },\n "hash": "0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86"\n }\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gettransactionbyhash",children:(0,c.jsx)(n.code,{children:"eth_getTransactionByHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns transaction information for the specified transaction hash."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-54",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte transaction hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-54",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-object",children:"transaction object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no transaction"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getTransactionByHash",\n "params": [\n "0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44"\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": {\n "blockHash": "0x510efccf44a192e6e34bcb439a1947e24b86244280762cbb006858c237093fda",\n "blockNumber": "0x422",\n "chainId": 2018,\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x5208",\n "gasPrice": "0x3b9aca00",\n "hash": "0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44",\n "input": "0x",\n "nonce": "0x1",\n "to": "0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "transactionIndex": "0x0",\n "value": "0x4e1003b28d9280000",\n "v": "0xfe7",\n "r": "0x84caf09aefbd5e539295acc67217563438a4efb224879b6855f56857fa2037d3",\n "s": "0x5e863be3829812c81439f0ae9d8ecb832b531d651fb234c848d1bf45e62be8b9"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{transaction(hash : \\"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\\") { block{hash} gas gasPrice hash nonce value from {address} to {address} status}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n transaction(hash: "0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d") {\n block {\n hash\n }\n gas\n gasPrice\n hash\n nonce\n value\n from {\n address\n }\n to {\n address\n }\n status\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "transaction": {\n "block": {\n "hash": "0xb1ef35744bade6980c3a933024b2557a8c724a19e5fdd2116bac712aa5e57198"\n },\n "gas": 21000,\n "gasPrice": "0x2540be400",\n "hash": "0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d",\n "nonce": 6,\n "value": "0x8ac7230489e80000",\n "from": {\n "address": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n },\n "to": {\n "address": "0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f"\n },\n "status": 1\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gettransactioncount",children:(0,c.jsx)(n.code,{children:"eth_getTransactionCount"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the number of transactions sent from a specified address. Use the ",(0,c.jsx)(n.code,{children:"pending"})," tag to get the next account nonce not used by any pending transactions."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-55",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"address"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 20-byte account address"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"})," or ",(0,c.jsx)(n.code,{children:"blockHash"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-55",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer representing the number of transactions sent from the specified address"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0xc94770007dda54cF92009BFF0dE90c06F603a09f","latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getTransactionCount",\n "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{ account (address:\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\"){transactionCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n account(address: "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73") {\n transactionCount\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "account": {\n "transactionCount": 5\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_gettransactionreceipt",children:(0,c.jsx)(n.code,{children:"eth_getTransactionReceipt"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the receipt of a transaction by transaction hash. Receipts for pending transactions are not available."}),"\n",(0,c.jsxs)(n.p,{children:["If you enabled ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),", the receipt includes available revert reasons in the response."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-56",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of a transaction"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-56",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-receipt-object",children:"transaction receipt object"}),", or ",(0,c.jsx)(n.code,{children:"null"})," when there is no receipt"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getTransactionReceipt",\n "params": [\n "0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f"\n ],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "blockHash": "0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a",\n "blockNumber": "0x50",\n "contractAddress": null,\n "cumulativeGasUsed": "0x5208",\n "from": "0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "gasUsed": "0x5208",\n "effectiveGasPrice": "0x1",\n "logs": [],\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "status": "0x1",\n "to": "0xf17f52151ebef6c7334fad080c5704d77216b732",\n "transactionHash": "0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3",\n "transactionIndex": "0x0"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{"query": "{transaction(hash: \\"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\\") {block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n transaction(hash: "0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86") {\n block {\n hash\n logsBloom\n }\n hash\n createdContract {\n address\n }\n cumulativeGasUsed\n gas\n gasUsed\n logs {\n topics\n }\n from {\n address\n }\n to {\n address\n }\n index\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "transaction": {\n "block": {\n "hash": "0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"\n },\n "hash": "0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86",\n "createdContract": null,\n "cumulativeGasUsed": 21000,\n "gas": 21000,\n "gasUsed": 21000,\n "effectiveGasPrice": "0x1",\n "logs": [],\n "from": {\n "address": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n },\n "to": {\n "address": "0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f"\n },\n "index": 0\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getunclebyblockhashandindex",children:(0,c.jsx)(n.code,{children:"eth_getUncleByBlockHashAndIndex"})}),"\n",(0,c.jsx)(n.p,{children:"Returns uncle specified by block hash and index."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-57",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"block"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte block hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"uncleIndex"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the uncle"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-57",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsx)(n.p,{children:"Uncles don't contain individual transactions."})}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7", "0x0"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getUncleByBlockHashAndIndex",\n "params": [\n "0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7",\n "0x0"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "difficulty": "0x76b123df93230",\n "extraData": "0x50505945206e616e6f706f6f6c2e6f7267",\n "gasLimit": "0x7a121d",\n "gasUsed": "0x7a0175",\n "hash": "0xc20189c0b1a4a23116ab3b177e929137f6e826f17fc4c2e880e7258c620e9817",\n "logsBloom": "0x890086c024487ca422be846a201a10e41bc2882902312116c1119609482031e9c000e2a708004a10281024028020c505727a12570c4810121c59024490b040894406a1c23c37a0094810921da3923600c71c03044b40924280038d07ab91964a008084264a01641380798840805a284cce201a8026045451002500113a00de441001320805ca2840037000111640d090442c11116d2112948084240242340400236ce81502063401dcc214b9105194d050884721c1208800b20501a4201400276004142f118e60808284506979a86e050820101c170c185e2310005205a82a2100382422104182090184800c02489e033440218142140045801c024cc1818485",\n "miner": "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5",\n "mixHash": "0xf557cc827e058862aa3ea1bd6088fb8766f70c0eac4117c56cf85b7911f82a14",\n "nonce": "0xd320b48904347cdd",\n "number": "0x768964",\n "parentHash": "0x98d752708b3677df8f439c4529f999b94663d5494dbfc08909656db3c90f6255",\n "receiptsRoot": "0x0f838f0ceb73368e7fc8d713a7761e5be31e3b4beafe1a6875a7f275f82da45b",\n "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",\n "size": "0x21a",\n "stateRoot": "0xa0c7d4fca79810c89c517eff8dadb9c6d6f4bcc27c2edfb301301e1cf7dec642",\n "timestamp": "0x5cdcbba6",\n "totalDifficulty": "0x229ad33cabd4c40d23d",\n "transactionsRoot": "0x866e38e91d01ef0387b8e07ccf35cd910224271ccf2b7477b8c8439e8b70f365",\n "uncles": []\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(hash:\\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\\"){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(hash: "0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7") {\n ommerAt(index: 0) {\n difficulty\n extraData\n gasLimit\n gasUsed\n hash\n logsBloom\n mixHash\n nonce\n number\n receiptsRoot\n stateRoot\n timestamp\n totalDifficulty\n transactionsRoot\n }\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "difficulty": "0x1",\n "extraData": "0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8418e98ef756acdae1e510b1df4b507b7af04eb3802db7fa0f3e73e7d0721b3645e76f4eb3d0dbf0de75620c4405bd5a663247cdd9616482c883053856d857f884a01",\n "gasLimit": 4700000,\n "gasUsed": 0,\n "hash": "0x0efe67972b982eb6be5df84e5238eb07475f86afa8a7de708f6a13ac0ff60d6c",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "nonce": "0x0000000000000000",\n "number": 200,\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "stateRoot": "0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48",\n "timestamp": "0x5cd109fb",\n "totalDifficulty": "0xc9",\n "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getunclebyblocknumberandindex",children:(0,c.jsx)(n.code,{children:"eth_getUncleByBlockNumberAndIndex"})}),"\n",(0,c.jsx)(n.p,{children:"Returns uncle specified by block number and index."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-58",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"uncleIndex"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the uncle"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-58",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#block-object",children:"block object"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsx)(n.p,{children:"Uncles do not contain individual transactions."})}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x7689D2", "0x0"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getUncleByBlockNumberAndIndex",\n "params": ["0x7689D2", "0x0"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "difficulty": "0x77daec467bf93",\n "extraData": "0x50505945206e616e6f706f6f6c2e6f7267",\n "gasLimit": "0x7a121d",\n "gasUsed": "0x7a0f7b",\n "hash": "0x42d83ae9c0743f4b1f9c61ff7ea8b164c1bab3627decd49233760680be006ecf",\n "logsBloom": "0x888200800000340120220008640200500408006100038400100581c000080240080a0014e8002010080004088040004022402a000c18010001400100002a041141a0610a0052900600041018c0002a0003090020404c00206010010513d00020005380124e08050480710000000108401012b0901c1424006000083a10a8c1040100a0440081050210124400040044304070004001100000012600806008061d0320800000b40042160600002480000000800000c0002100200940801c000820800048024904710000400640490026000a44300309000286088010c2300060003011380006400200812009144042204810209020410a84000410520c08802941",\n "miner": "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5",\n "mixHash": "0xf977fcdb52868be410b75ef2becc35cc312f13ab0a6ce400ecd9d445f66fa3f2",\n "nonce": "0x628b28403bf1e3d3",\n "number": "0x7689d0",\n "parentHash": "0xb32cfdfbf4adb05d30f02fcc6fe039cc6666402142954051c1a1cb9cc91aa11e",\n "receiptsRoot": "0x9c7c8361d1a24ea2841432234c81974a9920d3eba2b2b1c496b5f925a95cb4ac",\n "sha3Uncles": "0x7d972aa1b182b7e93f1db043f03fbdbfac6874fe7e67e162141bcc0aefa6336b",\n "size": "0x21a",\n "stateRoot": "0x74e97b77813146344d75acb5a52a006cc6dfaca678a10fb8a484a8443e919272",\n "timestamp": "0x5cdcc0a7",\n "totalDifficulty": "0x229b0583b4bd2698ca0",\n "transactionsRoot": "0x1d21626afddf05e5866de66ca3fcd98f1caf5357eba0cc6ec675606e116a891b",\n "uncles": []\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(number:2587){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n block(number: 2587) {\n ommerAt(index: 0) {\n difficulty\n extraData\n gasLimit\n gasUsed\n hash\n logsBloom\n mixHash\n nonce\n number\n receiptsRoot\n stateRoot\n timestamp\n totalDifficulty\n transactionsRoot\n }\n }\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "ommerAt": null\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getunclecountbyblockhash",children:(0,c.jsx)(n.code,{children:"eth_getUncleCountByBlockHash"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of uncles in a block from a block matching the given block hash."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-59",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"block"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-59",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer representing the number of uncles in the specified block"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getUncleCountByBlockHash",\n "params": [\n "0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": 0x0\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(hash:\\"0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426\\"){ommerCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(hash: "0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426") {\n ommerCount\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "ommerCount": 2\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getunclecountbyblocknumber",children:(0,c.jsx)(n.code,{children:"eth_getUncleCountByBlockNumber"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of uncles in a block matching the specified block number."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-60",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-60",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - integer representing the number of uncles in the specified block"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_getUncleCountByBlockNumber",\n "params": ["0xe8"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block(number:\\"0x59fd\\"){ommerCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'{\n block(number: "0x59fd") {\n ommerCount\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "ommerCount": 0\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_getwork",children:(0,c.jsx)(n.code,{children:"eth_getWork"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the hash of the current block, the seed hash, and the required target boundary condition."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-61",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-61",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - array with the following items:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"header"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of the current block header (PoW-hash)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"seed"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte seed hash used for the DAG"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"target"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte required target boundary condition: 2^256 / difficulty"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal integer representing the current block number"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_getWork", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0xce5e32ca59cb86799a1879e90150b2c3b882852173e59865e9e79abb67a9d636",\n "0x0000000000000000000000000000000000000000000000000000000000000000",\n "0x00a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3",\n "0x42"\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_hashrate",children:(0,c.jsx)(n.code,{children:"eth_hashrate"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of hashes per second with which the node is mining."}),"\n",(0,c.jsx)(n.p,{children:"When the stratum server is enabled, this method returns the cumulative hashrate of all sealers reporting their hashrate."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-62",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-62",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - number of hashes per second"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x12b"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_maxpriorityfeepergas",children:(0,c.jsx)(n.code,{children:"eth_maxPriorityFeePerGas"})}),"\n",(0,c.jsx)(n.p,{children:"Returns an estimate of how much priority fee, in wei, you can pay to get a transaction included in the current block."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-63",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-63",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"hexadecimal"})," value in wei"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_maxPriorityFeePerGas","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xf4240"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_mining",children:(0,c.jsx)(n.code,{children:"eth_mining"})}),"\n",(0,c.jsx)(n.p,{children:"Whether the client is actively mining new blocks. Besu pauses mining while the client synchronizes with the network regardless of command settings or methods called."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-64",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-64",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if the client is actively mining new blocks"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_mining", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_newblockfilter",children:(0,c.jsx)(n.code,{children:"eth_newBlockFilter"})}),"\n",(0,c.jsxs)(n.p,{children:["Creates a filter to retrieve new block hashes. To poll for new blocks, use ",(0,c.jsx)(n.a,{href:"#eth_getfilterchanges",children:(0,c.jsx)(n.code,{children:"eth_getFilterChanges"})}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-65",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-65",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x9d78b6780f844228b96ecc65a320a825"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_newfilter",children:(0,c.jsx)(n.code,{children:"eth_newFilter"})}),"\n",(0,c.jsxs)(n.p,{children:["Creates a ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/events-and-logs",children:"log filter"}),". To poll for logs associated with the created filter, use ",(0,c.jsx)(n.a,{href:"#eth_getfilterchanges",children:(0,c.jsx)(n.code,{children:"eth_getFilterChanges"})}),". To get all logs associated with the filter, use ",(0,c.jsx)(n.a,{href:"#eth_getfilterlogs",children:(0,c.jsx)(n.code,{children:"eth_getFilterLogs"})}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-66",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"filterOptions"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#filter-options-object",children:"filter options object"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"fromBlock"})," and ",(0,c.jsx)(n.code,{children:"toBlock"})," in the filter options object default to ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-66",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"fromBlock":"earliest", "toBlock":"latest", "topics":[]}],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_newFilter",\n "params": [{ "fromBlock": "earliest", "toBlock": "latest", "topics": [] }],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1ddf0c00989044e9b41cc0ae40272df3"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_newpendingtransactionfilter",children:(0,c.jsx)(n.code,{children:"eth_newPendingTransactionFilter"})}),"\n",(0,c.jsxs)(n.p,{children:["Creates a filter to retrieve new pending transactions hashes. To poll for new pending transactions, use ",(0,c.jsx)(n.a,{href:"#eth_getfilterchanges",children:(0,c.jsx)(n.code,{children:"eth_getFilterChanges"})}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-67",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-67",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_newPendingTransactionFilter",\n "params": [],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x443d6a77c4964707a8554c92f7e4debd"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_protocolversion",children:(0,c.jsx)(n.code,{children:"eth_protocolVersion"})}),"\n",(0,c.jsx)(n.p,{children:"Returns current Ethereum protocol version."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-68",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-68",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Ethereum protocol version"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_protocolVersion", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x3f"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{protocolVersion}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n protocolVersion\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "protocolVersion": 63\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_sendrawtransaction",children:(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})}),"\n",(0,c.jsxs)(n.p,{children:["Sends a ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"signed transaction"}),". A transaction can send ether, deploy a contract, or interact with a contract. Set the maximum transaction fee for transactions using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-tx-feecap",children:(0,c.jsx)(n.code,{children:"--rpc-tx-feecap"})})," CLI option."]}),"\n",(0,c.jsxs)(n.p,{children:["You can interact with contracts using ",(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})," or ",(0,c.jsx)(n.a,{href:"#eth_call",children:(0,c.jsx)(n.code,{children:"eth_call"})}),"."]}),"\n",(0,c.jsxs)(n.p,{children:["To avoid exposing your private key, create signed transactions offline and send the signed transaction data using ",(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"}),"."]}),"\n",(0,c.jsxs)(n.admonition,{type:"info",children:[(0,c.jsxs)(n.p,{children:["Besu doesn't implement ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:(0,c.jsx)(n.code,{children:"eth_sendTransaction"})}),"."]}),(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," provides transaction signing and implements ",(0,c.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/reference/api/json-rpc#eth_sendtransaction",children:(0,c.jsx)(n.code,{children:"eth_sendTransaction"})}),"."]})]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-69",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - signed transaction serialized to hexadecimal format"]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"Creating and sending transactions"})," includes examples of creating signed transactions using the ",(0,c.jsx)(n.a,{href:"https://github.com/ethereum/web3.js/",children:"web3.js"})," library."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-69",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte transaction hash"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_sendRawTransaction",\n "params": [\n "0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "jsonrpc": "2.0",\n "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "mutation {sendRawTransaction(data: \\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\\")}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:'mutation {\n sendRawTransaction(data: "0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833")\n}\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "sendRawTransaction": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_submithashrate",children:(0,c.jsx)(n.code,{children:"eth_submitHashrate"})}),"\n",(0,c.jsxs)(n.p,{children:["Submits the mining hashrate. This is used by mining software such as ",(0,c.jsx)(n.a,{href:"https://github.com/ethereum-mining/ethminer",children:"Ethminer"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-70",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"hashrate"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hexadecimal string representation of the hashrate"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"id"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte random hexadecimal ID identifying the client"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-70",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if submission is successful"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_submitHashrate",\n "params": [\n "0x0000000000000000000000000000000000000000000000000000000000500000",\n "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_submitwork",children:(0,c.jsx)(n.code,{children:"eth_submitWork"})}),"\n",(0,c.jsxs)(n.p,{children:["Submits a proof of work (Ethash) solution. This is used by mining software such as ",(0,c.jsx)(n.a,{href:"https://github.com/ethereum-mining/ethminer",children:"Ethminer"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-71",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"nonce"}),": ",(0,c.jsx)(n.em,{children:"string"})," - retrieved 8-byte nonce"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"header"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-byte hash of the block header (PoW-hash)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"digest"}),": ",(0,c.jsx)(n.em,{children:"string"})," - 32-bytes mix digest"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-71",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if the provided solution is valid"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "id": 1,\n "jsonrpc": "2.0",\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_syncing",children:(0,c.jsx)(n.code,{children:"eth_syncing"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns an object with data about the synchronization status, or ",(0,c.jsx)(n.code,{children:"false"})," if not synchronizing."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["Once the node reaches the head of the chain, ",(0,c.jsx)(n.code,{children:"eth_syncing"})," returns false, indicating that there is no active syncing target."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-72",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-72",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," or ",(0,c.jsx)(n.em,{children:"boolean"})," - synchronization status data object with the following fields, or ",(0,c.jsx)(n.code,{children:"false"})," if not synchronizing:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startingBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the highest block on the blockchain when the network synchronization starts"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"currentBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the latest block (also known as the best block) for the current node (this is the same index that ",(0,c.jsx)(n.a,{href:"#eth_blocknumber",children:(0,c.jsx)(n.code,{children:"eth_blockNumber"})})," returns.)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"highestBlock"}),": ",(0,c.jsx)(n.em,{children:"string"})," - index of the highest known block in the peer network (that is, the highest block so far discovered among peer nodes. This is the same value as ",(0,c.jsx)(n.code,{children:"currentBlock"})," if the current node has no peers.)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pulledStates"}),": ",(0,c.jsx)(n.em,{children:"string"})," - if fast synchronizing, the number of state entries fetched so far, or ",(0,c.jsx)(n.code,{children:"null"})," if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"knownStates"}),": ",(0,c.jsx)(n.em,{children:"string"})," - if fast synchronizing, the number of states the node knows of so far, or ",(0,c.jsx)(n.code,{children:"null"})," if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.)"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":51}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 51 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": {\n "startingBlock": "0x0",\n "currentBlock": "0x1518",\n "highestBlock": "0x9567a3",\n "pulledStates": "0x203ca",\n "knownStates": "0x200636"\n }\n}\n'})})}),(0,c.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{syncing{startingBlock currentBlock highestBlock pulledStates knownStates}}"}\' http://localhost:8547/graphql\n'})})}),(0,c.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-text",children:"{\n syncing {\n startingBlock\n currentBlock\n highestBlock\n pulledStates\n knownStates\n }\n}\n"})})}),(0,c.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "syncing": {\n "startingBlock": 0,\n "currentBlock": 5400,\n "highestBlock": 9791395,\n "pullStates": 132042,\n "knownStates": 2098742\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"eth_uninstallfilter",children:(0,c.jsx)(n.code,{children:"eth_uninstallFilter"})}),"\n",(0,c.jsx)(n.p,{children:"Uninstalls a filter with the specified ID. When a filter is no longer required, call this method."}),"\n",(0,c.jsxs)(n.p,{children:["Filters time out when not requested by ",(0,c.jsx)(n.a,{href:"#eth_getfilterchanges",children:(0,c.jsx)(n.code,{children:"eth_getFilterChanges"})})," or ",(0,c.jsx)(n.a,{href:"#eth_getfilterlogs",children:(0,c.jsx)(n.code,{children:"eth_getFilterLogs"})})," for 10 minutes."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-73",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"filterId"}),": ",(0,c.jsx)(n.em,{children:"string"})," - filter ID"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-73",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if the filter is successfully uninstalled"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0x70355a0b574b437eaa19fe95adfedc0a"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "eth_uninstallFilter",\n "params": ["0x70355a0b574b437eaa19fe95adfedc0a"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"miner-methods",children:[(0,c.jsx)(n.code,{children:"MINER"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"MINER"})," API methods allow you to control the node's mining operation, or settings related to\nblock creation in general."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"MINER"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"MINER"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"miner_changetargetgaslimit",children:(0,c.jsx)(n.code,{children:"miner_changeTargetGasLimit"})}),"\n",(0,c.jsxs)(n.p,{children:["Updates the target gas limit set using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#target-gas-limit",children:(0,c.jsx)(n.code,{children:"--target-gas-limit"})})," command line option."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-74",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"gasPrice"}),": ",(0,c.jsx)(n.em,{children:"number"})," - target gas price in wei"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-74",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})," or ",(0,c.jsx)(n.code,{children:"error"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_changeTargetGasLimit","params":[800000], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_changeTargetGasLimit",\n "params": [800000],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_getextradata",children:(0,c.jsx)(n.code,{children:"miner_getExtraData"})}),"\n",(0,c.jsx)(n.p,{children:"Retrieves the current extra data field that is used when producing blocks."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-75",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-75",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Hexadecimal string representation of the extra data bytes."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_getExtraData","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_getExtraData",\n "params": [],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x68656c6c6f20776f726c64"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_getmingasprice",children:(0,c.jsx)(n.code,{children:"miner_getMinGasPrice"})}),"\n",(0,c.jsxs)(n.p,{children:["Gets the minimum gas price (in wei) offered by a transaction to be included in a block.\nThe initial value is set using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,c.jsx)(n.code,{children:"--min-gas-price"})})," command line\noption, or is set to ",(0,c.jsx)(n.code,{children:"1000"})," if the command line option is not specified.\nUse ",(0,c.jsx)(n.a,{href:"#miner_setmingasprice",children:(0,c.jsx)(n.code,{children:"miner_setMinGasPrice"})})," to change the current value of the gas price."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-76",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-76",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Minimum gas price (in wei) as a hexadecimal string"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_getMinGasPrice","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_getMinGasPrice",\n "params": [],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x3e8"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_getminpriorityfee",children:(0,c.jsx)(n.code,{children:"miner_getMinPriorityFee"})}),"\n",(0,c.jsxs)(n.p,{children:["Gets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The initial value is set using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-priority-fee",children:(0,c.jsx)(n.code,{children:"--min-priority-fee"})})," command line option, or is set to ",(0,c.jsx)(n.code,{children:"0"})," if the command line option is not specified.\nUse ",(0,c.jsx)(n.a,{href:"#miner_setminpriorityfee",children:(0,c.jsx)(n.code,{children:"miner_setMinPriorityFee"})})," to change the current value of the fee."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-77",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-77",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Minimum priority fee per gas (in wei) as a hexadecimal string"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_getMinPriorityFee","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_getMinPriorityFee",\n "params": [],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_setcoinbase",children:(0,c.jsx)(n.code,{children:"miner_setCoinbase"})}),"\n",(0,c.jsx)(n.p,{children:"Sets the coinbase, the address for the mining rewards."}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["You can also use ",(0,c.jsx)(n.code,{children:"miner_setEtherbase"})," as an alternative method. They both work the same way. Etherbase is a historic name for coinbase."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-78",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"coinbase"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Account address you pay mining rewards to"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-78",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," when address is set"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_setCoinbase","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_setCoinbase",\n "params": ["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_setextradata",children:(0,c.jsx)(n.code,{children:"miner_setExtraData"})}),"\n",(0,c.jsx)(n.p,{children:"Sets a new value for the extra data field that is used when producing blocks."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-79",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"extraData"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Hexadecimal representation of the extra data field, with a maximum of 32 bytes."]}),"\n",(0,c.jsx)(n.h4,{id:"returns-79",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"true"})," or ",(0,c.jsx)(n.code,{children:"false"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_setExtraData","params":["0x0010203"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_setExtraData",\n "params": ["0x0010203"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "params": ["0x0010203"],\n "id": 1,\n "result": "true"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_setmingasprice",children:(0,c.jsx)(n.code,{children:"miner_setMinGasPrice"})}),"\n",(0,c.jsxs)(n.p,{children:["Sets the minimum gas price (in wei) offered by a transaction to be included in a block.\nThe initial value is set using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:(0,c.jsx)(n.code,{children:"--min-gas-price"})})," command line\noption, or is set to ",(0,c.jsx)(n.code,{children:"1000"})," if the command line option is not specified.\nUse ",(0,c.jsx)(n.a,{href:"#miner_getmingasprice",children:(0,c.jsx)(n.code,{children:"miner_getMinGasPrice"})})," to get the current value of the gas price."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-80",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"minGasPrice"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Minimum gas price in hexadecimal"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-80",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," when the gas price is set"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_setMinGasPrice","params":["0x5dc"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_setMinGasPrice",\n "params": ["0x5dc"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_setminpriorityfee",children:(0,c.jsx)(n.code,{children:"miner_setMinPriorityFee"})}),"\n",(0,c.jsxs)(n.p,{children:["Sets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block.\nThe initial value is set using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-priority-fee",children:(0,c.jsx)(n.code,{children:"--min-priority-fee"})})," command line option, or is set to ",(0,c.jsx)(n.code,{children:"0"})," if the command line option is not specified.\nUse ",(0,c.jsx)(n.a,{href:"#miner_getminpriorityfee",children:(0,c.jsx)(n.code,{children:"miner_getMinPriorityFee"})})," to get the current value of the fee."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-81",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"minPriorityFeePerGas"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Minimum priority fee per gas in hexadecimal"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-81",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," when the fee is set"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_setMinPriorityFee","params":["0x0a"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "miner_setMinPriorityFee",\n "params": ["0x0a"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_start",children:(0,c.jsx)(n.code,{children:"miner_start"})}),"\n",(0,c.jsxs)(n.p,{children:["Starts the mining process.\nTo start mining, you must first specify a miner coinbase using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-coinbase",children:(0,c.jsx)(n.code,{children:"--miner-coinbase"})})," command line option or using ",(0,c.jsx)(n.a,{href:"#miner_setcoinbase",children:(0,c.jsx)(n.code,{children:"miner_setCoinbase"})}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-82",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-82",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," if mining starts, or if the node is already mining"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_start","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "miner_start", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"miner_stop",children:(0,c.jsx)(n.code,{children:"miner_stop"})}),"\n",(0,c.jsx)(n.p,{children:"Stops the mining process on the client."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-83",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-83",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - ",(0,c.jsx)(n.code,{children:"true"})," if mining stops, or if the node is not mining"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "miner_stop", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"net-methods",children:[(0,c.jsx)(n.code,{children:"NET"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"NET"})," API methods provide network-related information."]}),"\n",(0,c.jsx)(n.h3,{id:"net_enode",children:(0,c.jsx)(n.code,{children:"net_enode"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-84",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-84",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," of the node"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_enode","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"net_enode","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"net_listening",children:(0,c.jsx)(n.code,{children:"net_listening"})}),"\n",(0,c.jsx)(n.p,{children:"Whether the client is actively listening for network connections."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-85",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-85",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"boolean"})," - indicates if the client is actively listening for network connections"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_listening","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"net_listening","params":[],"id":53}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": true\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"net_peercount",children:(0,c.jsx)(n.code,{children:"net_peerCount"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the number of peers currently connected to the client."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-86",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-86",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - number of connected peers in hexadecimal"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x5"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"net_services",children:(0,c.jsx)(n.code,{children:"net_services"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns enabled services (for example, ",(0,c.jsx)(n.code,{children:"jsonrpc"}),") and the host and port for each service."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#nat-method",children:(0,c.jsx)(n.code,{children:"--nat-method"})})," setting affects the JSON-RPC and P2P host and port values, but not the metrics host and port values."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-87",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-87",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - enabled services"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_services","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"net_services","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "jsonrpc": {\n "host": "127.0.0.1",\n "port": "8545"\n },\n "p2p": {\n "host": "127.0.0.1",\n "port": "30303"\n },\n "metrics": {\n "host": "127.0.0.1",\n "port": "9545"\n }\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"net_version",children:(0,c.jsx)(n.code,{children:"net_version"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns the ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"network ID"}),"."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-88",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-88",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - current network ID"]}),"\n",(0,c.jsxs)(n.table,{children:[(0,c.jsx)(n.thead,{children:(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.th,{children:"Network ID"}),(0,c.jsx)(n.th,{children:"Chain"}),(0,c.jsx)(n.th,{children:"Network"}),(0,c.jsx)(n.th,{children:"Description"})]})}),(0,c.jsxs)(n.tbody,{children:[(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"1"})}),(0,c.jsx)(n.td,{children:"ETH"}),(0,c.jsx)(n.td,{children:"Mainnet"}),(0,c.jsx)(n.td,{children:"Main Ethereum network"})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"17000"})}),(0,c.jsx)(n.td,{children:"ETH"}),(0,c.jsx)(n.td,{children:"Holesky"}),(0,c.jsx)(n.td,{children:"PoS test network"})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"11155111"})}),(0,c.jsx)(n.td,{children:"ETH"}),(0,c.jsx)(n.td,{children:"Sepolia"}),(0,c.jsx)(n.td,{children:"PoS test network"})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"2018"})}),(0,c.jsx)(n.td,{children:"ETH"}),(0,c.jsx)(n.td,{children:"Dev"}),(0,c.jsx)(n.td,{children:"PoW development network"})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"1"})}),(0,c.jsx)(n.td,{children:"ETC"}),(0,c.jsx)(n.td,{children:"Classic"}),(0,c.jsx)(n.td,{children:"Main Ethereum Classic network"})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"7"})}),(0,c.jsx)(n.td,{children:"ETC"}),(0,c.jsx)(n.td,{children:"Mordor"}),(0,c.jsx)(n.td,{children:"PoW test network"})]})]})]}),"\n",(0,c.jsxs)(n.admonition,{type:"note",children:[(0,c.jsx)(n.p,{children:"For almost all networks, network ID and chain ID are the same."}),(0,c.jsxs)(n.p,{children:["The only networks in the table above with different network and chain IDs are Classic with a chain ID of ",(0,c.jsx)(n.code,{children:"61"})," and Mordor with a chain ID of ",(0,c.jsx)(n.code,{children:"63"}),"."]})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_version","params":[],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "net_version", "params": [], "id": 53 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result for Mainnet",label:"JSON result for Mainnet",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 51,\n "result": "1"\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result for Holesky",label:"JSON result for Holesky",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "5"\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"plugins-methods",children:[(0,c.jsx)(n.code,{children:"PLUGINS"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"PLUGINS"})," API methods provide plugin-related functionality."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"PLUGINS"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"PLUGINS"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"plugins_reloadpluginconfig",children:(0,c.jsx)(n.code,{children:"plugins_reloadPluginConfig"})}),"\n",(0,c.jsx)(n.p,{children:"Reloads specified plugin configuration."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-89",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"plugin"}),": ",(0,c.jsx)(n.em,{children:"string"})," - plugin"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-89",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - ",(0,c.jsx)(n.code,{children:"Success"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"plugins_reloadPluginConfig","params":["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "plugins_reloadPluginConfig",\n "params": ["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"trace-methods",children:[(0,c.jsx)(n.code,{children:"TRACE"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"TRACE"})," API is a more concise alternative to the ",(0,c.jsxs)(n.a,{href:"#debug-methods",children:[(0,c.jsx)(n.code,{children:"DEBUG"})," API"]}),"."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"TRACE"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"TRACE"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"trace_block",children:(0,c.jsx)(n.code,{children:"trace_block"})}),"\n",(0,c.jsxs)(n.p,{children:["Provides transaction processing of ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types#trace",children:["type ",(0,c.jsx)(n.code,{children:"trace"})]})," for the specified block."]}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["Your node must be an ",(0,c.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"}),", or\nthe requested block must be within the number of\n",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," when using\n",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"})," (by default, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-90",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-90",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in transaction execution order; if revert reason is enabled with ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:(0,c.jsx)(n.code,{children:"--revert-reason-enabled"})}),", the returned list items include the ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_block","params":["0x6"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "trace_block", "params": ["0x6"], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": [\n {\n "action": {\n "callType": "call",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0xffad82",\n "input": "0x0000000000000000000000000000000000000999",\n "to": "0x0020000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd",\n "blockNumber": 6,\n "result": {\n "gasUsed": "0x7536",\n "output": "0x"\n },\n "subtraces": 1,\n "traceAddress": [],\n "transactionHash": "0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e",\n "transactionPosition": 0,\n "type": "call"\n },\n {\n "action": {\n "address": "0x0020000000000000000000000000000000000000",\n "balance": "0x300",\n "refundAddress": "0x0000000000000999000000000000000000000000"\n },\n "blockHash": "0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd",\n "blockNumber": 6,\n "result": null,\n "subtraces": 0,\n "traceAddress": [0],\n "transactionHash": "0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e",\n "transactionPosition": 0,\n "type": "suicide"\n },\n {\n "action": {\n "author": "0x0000000000000000000000000000000000000000",\n "rewardType": "block",\n "value": "0x1bc16d674ec80000"\n },\n "blockHash": "0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd",\n "blockNumber": 6,\n "result": null,\n "subtraces": 0,\n "traceAddress": [],\n "transactionHash": null,\n "transactionPosition": null,\n "type": "reward"\n }\n ],\n "id": 1\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_call",children:(0,c.jsx)(n.code,{children:"trace_call"})}),"\n",(0,c.jsx)(n.p,{children:"Executes the given call and returns a number of possible traces for it."}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["When using ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"}),", the requested block must\nbe within the number of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," (by\ndefault, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-91",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"call"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of tracing options; tracing options are ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types",children:[(0,c.jsx)(n.code,{children:"trace"}),", ",(0,c.jsx)(n.code,{children:"vmTrace"}),", and ",(0,c.jsx)(n.code,{children:"stateDiff"})]}),". Specify any combination of the three options including none of them."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-91",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in transaction execution order"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_call","params":[{"from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73","to":"0x0010000000000000000000000000000000000000","gas":"0xfffff2","gasPrice":"0xef","value":"0x0","data":"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002","nonce":"0x0"},["trace"],"latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_call",\n "params": [\n {\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "to": "0x0010000000000000000000000000000000000000",\n "gas": "0xfffff2",\n "gasPrice": "0xef",\n "value": "0x0",\n "data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002",\n "nonce": "0x0"\n },\n ["trace"],\n "latest"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": {\n "output" : "0x",\n "stateDiff" : null,\n "trace" : [ {\n "action" : {\n "callType" : "call",\n "from" : "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas" : "0xffabba",\n "input" : "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002",\n "to" : "0x0010000000000000000000000000000000000000",\n "value" : "0x0"\n },\n "result" : {\n "gasUsed" : "0x9c58",\n "output" : "0x"\n },\n "subtraces" : 0,\n "traceAddress" : [ ],\n "type" : "call"\n } ],\n "vmTrace" : null\n },\n"id" : 2\n},\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_callmany",children:(0,c.jsx)(n.code,{children:"trace_callMany"})}),"\n",(0,c.jsx)(n.p,{children:"Performs multiple call traces on top of the same block. You can trace dependent transactions."}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["When using ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"}),", the requested block must\nbe within the number of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," (by\ndefault, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-92",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of tracing options; tracing options are ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types",children:[(0,c.jsx)(n.code,{children:"trace"}),", ",(0,c.jsx)(n.code,{children:"vmTrace"}),", and ",(0,c.jsx)(n.code,{children:"stateDiff"})]}),". Specify any combination of the three options including none of them."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-92",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in transaction execution order"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_callMany","params":[[[{"from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1","to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b","value":"0x186a0"},["trace"]],[{"from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1","to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b","value":"0x186a0"},["trace"]]],"latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{"jsonrpc":"2.0","method":"trace_callMany","params":[[[{"from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1","to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b","value":"0x186a0"},["trace"]],[{"from":"0x407d73d8a49eeb85d32cf465507dd71d507100c1","to":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b","value":"0x186a0"},["trace"]]],"latest"],"latest"],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": [\n {\n "output" : "0x",\n "stateDiff" : null,\n "trace" : [ {\n "action" : {\n "callType" : "call",\n "from" : "0x407d73d8a49eeb85d32cf465507dd71d507100c1",\n "gas" : "0x1dcd12f8",\n "input" : "0x",\n "to" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "value" : "0x186a0"\n },\n "result" : {\n "gasUsed" : "0x0",\n "output" : "0x"\n },\n "subtraces" : 0,\n "traceAddress" : [ ],\n "type" : "call"\n } ],\n "vmTrace" : null\n },\n {\n "output" : "0x",\n "stateDiff" : null,\n "trace" : [ {\n "action" : {\n "callType" : "call",\n "from" : "0x407d73d8a49eeb85d32cf465507dd71d507100c1",\n "gas" : "0x1dcd12f8",\n "input" : "0x",\n "to" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "value" : "0x186a0"\n },\n "result" : {\n "gasUsed" : "0x0",\n "output" : "0x"\n },\n "subtraces" : 0,\n "traceAddress" : [ ],\n "type" : "call"\n } ],\n "vmTrace" : null\n },\n ],\n"id" : 1\n},\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_filter",children:(0,c.jsx)(n.code,{children:"trace_filter"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns traces matching the specified filter. The maximum number of blocks you can supply to ",(0,c.jsx)(n.code,{children:"trace_filter"})," is 1000 by default. You can adjust this limit using the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-max-trace-filter-range",children:(0,c.jsx)(n.code,{children:"--rpc-max-trace-filter-range"})})," option."]}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["Your node must be an ",(0,c.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"}),", or\nthe requested blocks must be within the number of\n",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," when using\n",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"})," (by default, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-93",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"traceFilterOptions"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#trace-filter-options-object",children:"trace filter options object"})]}),"\n",(0,c.jsx)(n.h4,{id:"returns-93",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in transaction execution order"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_filter","params":[{"fromBlock":"0x1","toBlock":"0x21","after":2,"count":2,"fromAddress":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"]}],"id":415}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_filter",\n "params": [\n {\n "fromBlock": "0x1",\n "toBlock": "0x21",\n "after": 2,\n "count": 2,\n "fromAddress": ["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"]\n }\n ],\n "id": 415\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": [\n {\n "action": {\n "callType": "call",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0xffad82",\n "input": "0x0000000000000000000000000000000000000999",\n "to": "0x0020000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0xcd5d9c7acdcbd3fb4b24a39e05a38e32235751bb0c9e4f1aa16dc598a2c2a9e4",\n "blockNumber": 6,\n "result": {\n "gasUsed": "0x7536",\n "output": "0x"\n },\n "subtraces": 1,\n "traceAddress": [],\n "transactionHash": "0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e",\n "transactionPosition": 0,\n "type": "call"\n },\n {\n "action": {\n "callType": "call",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0xffad52",\n "input": "0xf000000000000000000000000000000000000000000000000000000000000001",\n "to": "0x0030000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0xeed85fe57db751442c826cfe4fdf43b10a5c2bc8b6fd3a8ccced48eb3fb35885",\n "blockNumber": 7,\n "result": {\n "gasUsed": "0x1b",\n "output": "0xf000000000000000000000000000000000000000000000000000000000000002"\n },\n "subtraces": 0,\n "traceAddress": [],\n "transactionHash": "0x47f4d445ea1812cb1ddd3464ab23d2bfc6ed408a8a9db1c497f94e8e06e85286",\n "transactionPosition": 0,\n "type": "call"\n }\n ],\n "id": 415\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_get",children:(0,c.jsx)(n.code,{children:"trace_get"})}),"\n",(0,c.jsx)(n.p,{children:"Returns a trace at the given position."}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["Your node must be an ",(0,c.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"}),", or\nthe requested transaction must be contained in a block within the number of\n",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," when using\n",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"})," (by default, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-94",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - transaction hash"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"indexPositions"}),": ",(0,c.jsx)(n.em,{children:"array"})," - Index positions of the traces"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-94",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in the order called by the transaction"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_get","params":["0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",["0x0"]],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_get",\n "params": [\n "0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",\n ["0x0"]\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": {\n "action" : {\n "callType" : "call",\n "from" : "0x1c39ba39e4735cb65978d4db400ddd70a72dc750",\n "gas" : "0x13e99",\n "input" : "0x16c72721",\n "to" : "0x2bd2326c993dfaef84f696526064ff22eba5b362",\n "value" : "0x0"\n },\n "blockHash" : "0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add"\n "blockNumber": 3068185,\n "result": {\n "gasUsed": "0x183",\n "output" : "0x0000000000000000000000000000000000000000000000000000000000000001"\n },\n "subtraces" : 0,\n "traceAddress" : [\n 0\n ],\n "transactionHash": "0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",\n "transactionPosition": 2,\n "type" : "call"\n },\n"id" : 1\n},\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_rawtransaction",children:(0,c.jsx)(n.code,{children:"trace_rawTransaction"})}),"\n",(0,c.jsxs)(n.p,{children:["Traces a call to ",(0,c.jsx)(n.code,{children:"eth_sendRawTransaction"})," without making the call, returning the traces."]}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["When using ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"}),", the requested transaction\nmust be contained in a block within the number of\n",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," (by default, 512 from the head of\nthe chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-95",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"data"})," - ",(0,c.jsx)(n.em,{children:"string"})," - Raw transaction data"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of tracing options; tracing options are ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types",children:[(0,c.jsx)(n.code,{children:"trace"}),", ",(0,c.jsx)(n.code,{children:"vmTrace"}),", and ",(0,c.jsx)(n.code,{children:"stateDiff"})]}),". Specify any combination of the three options including none of them."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-95",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in the order called by the transaction"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"trace_rawTransaction","params":["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",["trace"]],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_rawTransaction",\n "params": [\n "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",\n ["trace"]\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": {\n "output" : "0x"\n "stateDiff": null,\n "from" : "0x1c39ba39e4735cb65978d4db400ddd70a72dc750",\n "trace": [{\n "action": { ... },\n "result": {\n "gasUsed": "0x0",\n "output": "0x"\n }\n "subtraces": 0,\n "traceAddress": [],\n "type": "call"\n }],\n "vmTrace": null\n },\n"id" : 1\n},\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_replayblocktransactions",children:(0,c.jsx)(n.code,{children:"trace_replayBlockTransactions"})}),"\n",(0,c.jsx)(n.p,{children:"Provides transaction processing tracing per block."}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["When using ",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"}),", the requested block must\nbe within the number of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," (by\ndefault, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-96",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,c.jsx)(n.code,{children:"latest"}),", ",(0,c.jsx)(n.code,{children:"earliest"}),", ",(0,c.jsx)(n.code,{children:"pending"}),", ",(0,c.jsx)(n.code,{children:"finalized"}),", or ",(0,c.jsx)(n.code,{children:"safe"}),", as described in\n",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"pending"})," returns the same value as ",(0,c.jsx)(n.code,{children:"latest"}),"."]})}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"options"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - list of tracing options; tracing options are ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types",children:[(0,c.jsx)(n.code,{children:"trace"}),", ",(0,c.jsx)(n.code,{children:"vmTrace"}),", and ",(0,c.jsx)(n.code,{children:"stateDiff"})]}),". Specify any combination of the three options including none of them."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-96",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#transaction-trace-object",children:"transaction trace objects"})," containing one object per transaction, in transaction execution order; if revert reason is enabled with ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:(0,c.jsx)(n.code,{children:"--revert-reason-enabled"})}),", the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:(0,c.jsx)(n.code,{children:"trace"})})," list items in the returned transaction trace object include the ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0", "method": "trace_replayBlockTransactions","params": ["0x12",["trace","vmTrace","stateDiff"]],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_replayBlockTransactions",\n "params": ["0x12", ["trace", "vmTrace", "stateDiff"]],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result":[\n {\n "output":"0x",\n "vmTrace":{\n "code":"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851",\n "ops":[\n {\n "cost":3,\n "ex":{\n "mem":null,\n "push":[\n "0x8"\n ],\n "store":null,\n "used":16756175\n },\n "pc":72,\n "sub":null\n },\n ...\n ]\n },\n "trace":[\n {\n "action":{\n "callType":"call",\n "from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas":"0xffadea",\n "input":"0x",\n "to":"0x0100000000000000000000000000000000000000",\n "value":"0x0"\n },\n "result":{\n "gasUsed":"0x1e",\n "output":"0x"\n },\n "subtraces":0,\n "traceAddress":[\n ],\n "type":"call"\n }\n ],\n "stateDiff":{\n "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73":{\n "balance":{\n "*":{\n "from":"0xffffffffffffffffffffffffffffffffc3e12a20b",\n "to":"0xffffffffffffffffffffffffffffffffc3dc5f091"\n }\n },\n "code":"=",\n "nonce":{\n "*":{\n "from":"0x14",\n "to":"0x15"\n }\n },\n "storage":{\n }\n }\n },\n "transactionHash":"0x2a5079cc535c429f668f13a7fb9a28bdba6831b5462bd04f781777b332a8fcbd",\n },\n {...}\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"trace_transaction",children:(0,c.jsx)(n.code,{children:"trace_transaction"})}),"\n",(0,c.jsxs)(n.p,{children:["Provides transaction processing of ",(0,c.jsxs)(n.a,{href:"/public-networks/reference/trace-types#trace",children:["type ",(0,c.jsx)(n.code,{children:"trace"})]})," for the specified transaction."]}),"\n",(0,c.jsx)(n.admonition,{title:"note",type:"info",children:(0,c.jsxs)(n.p,{children:["Your node must be an ",(0,c.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"}),", or\nthe requested transaction must be contained in a block within the number of\n",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," when using\n",(0,c.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai"})," (by default, 512 from the head of the chain)."]})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-97",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transaction"}),": ",(0,c.jsx)(n.em,{children:"string"})," - transaction hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-97",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of ",(0,c.jsx)(n.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in the order called by the transaction; if revert reason is enabled with ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:(0,c.jsx)(n.code,{children:"--revert-reason-enabled"})}),", the returned list items include the ",(0,c.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0", "method": "trace_transaction","params": ["0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "trace_transaction",\n "params": [\n "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7"\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": [\n {\n "action": {\n "creationMethod": "create",\n "from": "0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "gas": "0xff2e26",\n "init": "0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "address": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "code": "0x",\n "gasUsed": "0x1c39"\n },\n "subtraces": 2,\n "traceAddress": [],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "create"\n },\n {\n "action": {\n "callType": "callcode",\n "from": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "gas": "0xfb2ea9",\n "input": "0x",\n "to": "0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "gasUsed": "0x138e",\n "output": "0x"\n },\n "subtraces": 1,\n "traceAddress": [0],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "call"\n },\n {\n "action": {\n "address": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "balance": "0x0",\n "refundAddress": "0x0000000000000000000000000000000000000000"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": null,\n "subtraces": 0,\n "traceAddress": [0, 0],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "suicide"\n },\n {\n "action": {\n "callType": "callcode",\n "from": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "gas": "0xfb18a5",\n "input": "0x",\n "to": "0x00a0000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "gasUsed": "0x30b",\n "output": "0x"\n },\n "subtraces": 0,\n "traceAddress": [1],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "call"\n }\n ],\n "id": 1\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"txpool-methods",children:[(0,c.jsx)(n.code,{children:"TXPOOL"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"TXPOOL"})," API methods allow you to inspect the contents of the transaction pool."]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"TXPOOL"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,c.jsx)(n.code,{children:"TXPOOL"})," API methods, use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,c.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,c.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,c.jsx)(n.h3,{id:"txpool_besupendingtransactions",children:(0,c.jsx)(n.code,{children:"txpool_besuPendingTransactions"})}),"\n",(0,c.jsx)(n.p,{children:"Lists pending transactions that match the supplied filter conditions."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-98",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"numResults"}),": ",(0,c.jsx)(n.em,{children:"number"})," - integer representing the maximum number of results to return"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"fields"}),": ",(0,c.jsx)(n.em,{children:"object"})," - object of fields used to create the filter condition"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(n.p,{children:["Each field in the object corresponds to a field name containing an operator, and a value for the operator. A field name can only be specified once, and can only contain one operator. For example, you cannot query transactions with a gas price between 8 and 9 Gwei by using both the ",(0,c.jsx)(n.code,{children:"gt"})," and ",(0,c.jsx)(n.code,{children:"lt"})," operator in the same field name instance."]}),"\n",(0,c.jsx)(n.p,{children:"All filters must be satisfied for a transaction to be returned."}),"\n",(0,c.jsxs)(n.table,{children:[(0,c.jsx)(n.thead,{children:(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.th,{children:"Field name"}),(0,c.jsx)(n.th,{children:"Value"}),(0,c.jsx)(n.th,{style:{textAlign:"center"},children:"Value type"}),(0,c.jsx)(n.th,{children:"Supported operators"})]})}),(0,c.jsxs)(n.tbody,{children:[(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"from"})}),(0,c.jsx)(n.td,{children:"Address of the sender."}),(0,c.jsxs)(n.td,{style:{textAlign:"center"},children:[(0,c.jsx)(n.em,{children:"Data"}),", 20\xa0bytes"]}),(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"eq"})})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"to"})}),(0,c.jsxs)(n.td,{children:["Address of the receiver, or ",(0,c.jsx)(n.code,{children:'"contract_creation"'}),"."]}),(0,c.jsxs)(n.td,{style:{textAlign:"center"},children:[(0,c.jsx)(n.em,{children:"Data"}),", 20\xa0bytes"]}),(0,c.jsxs)(n.td,{children:[(0,c.jsx)(n.code,{children:"eq"}),", ",(0,c.jsx)(n.code,{children:"action"})]})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"gas"})}),(0,c.jsx)(n.td,{children:"Gas provided by the sender."}),(0,c.jsx)(n.td,{style:{textAlign:"center"},children:(0,c.jsx)(n.em,{children:"Quantity"})}),(0,c.jsxs)(n.td,{children:[(0,c.jsx)(n.code,{children:"eq"}),", ",(0,c.jsx)(n.code,{children:"gt"}),", ",(0,c.jsx)(n.code,{children:"lt"})]})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"gasPrice"})}),(0,c.jsx)(n.td,{children:"Gas price, in wei, provided by the sender."}),(0,c.jsx)(n.td,{style:{textAlign:"center"},children:(0,c.jsx)(n.em,{children:"Quantity"})}),(0,c.jsxs)(n.td,{children:[(0,c.jsx)(n.code,{children:"eq"}),", ",(0,c.jsx)(n.code,{children:"gt"}),", ",(0,c.jsx)(n.code,{children:"lt"})]})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"value"})}),(0,c.jsx)(n.td,{children:"Value transferred, in wei."}),(0,c.jsx)(n.td,{style:{textAlign:"center"},children:(0,c.jsx)(n.em,{children:"Quantity"})}),(0,c.jsxs)(n.td,{children:[(0,c.jsx)(n.code,{children:"eq"}),", ",(0,c.jsx)(n.code,{children:"gt"}),", ",(0,c.jsx)(n.code,{children:"lt"})]})]}),(0,c.jsxs)(n.tr,{children:[(0,c.jsx)(n.td,{children:(0,c.jsx)(n.code,{children:"nonce"})}),(0,c.jsx)(n.td,{children:"Number of transactions made by the sender."}),(0,c.jsx)(n.td,{style:{textAlign:"center"},children:(0,c.jsx)(n.em,{children:"Quantity"})}),(0,c.jsxs)(n.td,{children:[(0,c.jsx)(n.code,{children:"eq"}),", ",(0,c.jsx)(n.code,{children:"gt"}),", ",(0,c.jsx)(n.code,{children:"lt"})]})]})]})]}),"\n",(0,c.jsx)(n.p,{children:"Supported operators:"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"eq"})," (equal to)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"lt"})," (less than)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"gt"})," (greater than)"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsx)(n.p,{children:(0,c.jsx)(n.code,{children:"action"})}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsxs)(n.p,{children:["The only supported ",(0,c.jsx)(n.code,{children:"action"})," is ",(0,c.jsx)(n.code,{children:'"contract_creation"'}),"."]})}),"\n",(0,c.jsx)(n.h4,{id:"returns-98",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of objects with ",(0,c.jsx)(n.a,{href:"/public-networks/reference/api/objects#pending-transaction-object",children:"details of the pending transaction"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"txpool_besuPendingTransactions","params":[2,{"from":{"eq":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"},"gas":{"lt":"0x5209"},"nonce":{"gt":"0x1"}}],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "txpool_besuPendingTransactions",\n "params": [\n 2,\n {\n "from": { "eq": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" },\n "gas": { "lt": "0x5209" },\n "nonce": { "gt": "0x1" }\n }\n ],\n "id": 1\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x5208",\n "gasPrice": "0xab5d04c00",\n "hash": "0xb7b2f4306c1c228ec94043da73b582594007091a7dfe024b1f8d6d772284e54b",\n "input": "0x",\n "nonce": "0x2",\n "to": "0xf8be4ebda7f62d79a665294ec1263bfdb59aabf2",\n "value": "0x0",\n "v": "0xfe8",\n "r": "0x5beb711e652c6cf0a589d3cea904eefc4f45ce4372652288701d08cc4412086d",\n "s": "0x3af14a56e63aa5fb7dcb444a89708363a9d2c1eba1f777c67690288415080ded"\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"txpool_besustatistics",children:(0,c.jsx)(n.code,{children:"txpool_besuStatistics"})}),"\n",(0,c.jsx)(n.p,{children:"Lists statistics about the node transaction pool."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-99",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-99",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"object"})," - transaction pool statistics object with the following fields:"]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"maxSize"}),": ",(0,c.jsx)(n.em,{children:"number"})," - maximum number of transactions kept in the transaction pool; use the ",(0,c.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-size",children:(0,c.jsx)(n.code,{children:"--tx-pool-max-size"})})," option to configure the maximum size."]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"localCount"}),": ",(0,c.jsx)(n.em,{children:"number"})," - number of transactions submitted directly to this node"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"remoteCount"}),": ",(0,c.jsx)(n.em,{children:"number"})," - number of transactions received from remote nodes"]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"txpool_besuStatistics","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"txpool_besuStatistics","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "maxSize": 4096,\n "localCount": 1,\n "remoteCount": 0\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"txpool_besutransactions",children:(0,c.jsx)(n.code,{children:"txpool_besuTransactions"})}),"\n",(0,c.jsx)(n.p,{children:"Lists transactions in the node transaction pool."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-100",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-100",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - list of transactions"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"txpool_besuTransactions","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "txpool_besuTransactions", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "hash": "0x8a66830098be4006a3f63a03b6e9b67aa721e04bd6b46d420b8f1937689fb4f1",\n "isReceivedFromLocalSource": true,\n "addedToPoolAt": "2019-03-21T01:35:50.911Z"\n },\n {\n "hash": "0x41ee803c3987ceb5bcea0fad7a76a8106a2a6dd654409007d9931032ea54579b",\n "isReceivedFromLocalSource": true,\n "addedToPoolAt": "2019-03-21T01:36:00.374Z"\n }\n ]\n}\n'})})})]}),"\n",(0,c.jsxs)(n.h2,{id:"web3-methods",children:[(0,c.jsx)(n.code,{children:"WEB3"})," methods"]}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.code,{children:"WEB3"})," API methods provide functionality for the Ethereum ecosystem."]}),"\n",(0,c.jsx)(n.h3,{id:"web3_clientversion",children:(0,c.jsx)(n.code,{children:"web3_clientVersion"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the current client version."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-101",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-101",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - current client version"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{ "jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1 }\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "besu/<version>"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"web3_sha3",children:(0,c.jsx)(n.code,{children:"web3_sha3"})}),"\n",(0,c.jsxs)(n.p,{children:["Returns a ",(0,c.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/SHA-3",children:"SHA3"})," hash of the specified data. The result value is a ",(0,c.jsx)(n.a,{href:"https://keccak.team/keccak.html",children:"Keccak-256"})," hash, not the standardized SHA3-256."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-102",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"data"}),": ",(0,c.jsx)(n.em,{children:"string"})," - data to convert to a SHA3 hash"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-102",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"string"})," - SHA3 result of the input data"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c00"],"id":53}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "web3_sha3",\n "params": ["0x68656c6c6f20776f726c00"],\n "id": 53\n}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f"\n}\n'})})})]}),"\n",(0,c.jsx)(n.h2,{id:"miscellaneous-methods",children:"Miscellaneous methods"}),"\n",(0,c.jsx)(n.h3,{id:"rpc_modules",children:(0,c.jsx)(n.code,{children:"rpc_modules"})}),"\n",(0,c.jsxs)(n.p,{children:["Lists ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#api-methods-enabled-by-default",children:"enabled APIs"})," and the version of each."]}),"\n",(0,c.jsx)(n.h4,{id:"parameters-103",children:"Parameters"}),"\n",(0,c.jsx)(n.p,{children:"None"}),"\n",(0,c.jsx)(n.h4,{id:"returns-103",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"result"}),": ",(0,c.jsx)(n.em,{children:"map"})," of ",(0,c.jsx)(n.em,{children:"strings"})," to ",(0,c.jsx)(n.em,{children:"strings"})," - enabled APIs and their versions"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,c.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":1}\n'})})}),(0,c.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "web3": "1.0",\n "eth": "1.0",\n "net": "1.0"\n }\n}\n'})})})]})]})}function x(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(f,{...e})}):f(e)}},19365:(e,n,a)=>{a.d(n,{A:()=>r});a(96540);var c=a(18215);const d={tabItem:"tabItem_Ymn6"};var s=a(74848);function r(e){let{children:n,hidden:a,className:r}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,c.A)(d.tabItem,r),hidden:a,children:n})}},11470:(e,n,a)=>{a.d(n,{A:()=>w});var c=a(96540),d=a(18215),s=a(23104),r=a(56347),l=a(205),t=a(57485),i=a(31682),o=a(70679);function h(e){return c.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,c.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function b(e){const{values:n,children:a}=e;return(0,c.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:c,default:d}}=e;return{value:n,label:a,attributes:c,default:d}}))}(a);return function(e){const n=(0,i.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function f(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:a}=e;const d=(0,r.W6)(),s=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,t.aZ)(s),(0,c.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(d.location.search);n.set(s,e),d.replace({...d.location,search:n.toString()})}),[s,d])]}function u(e){const{defaultValue:n,queryString:a=!1,groupId:d}=e,s=b(e),[r,t]=(0,c.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!f({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const c=a.find((e=>e.default))??a[0];if(!c)throw new Error("Unexpected error: 0 tabValues");return c.value}({defaultValue:n,tabValues:s}))),[i,h]=x({queryString:a,groupId:d}),[u,j]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[d,s]=(0,o.Dv)(a);return[d,(0,c.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:d}),p=(()=>{const e=i??u;return f({value:e,tabValues:s})?e:null})();(0,l.A)((()=>{p&&t(p)}),[p]);return{selectedValue:r,selectValue:(0,c.useCallback)((e=>{if(!f({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);t(e),h(e),j(e)}),[h,j,s]),tabValues:s}}var j=a(92303);const p={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=a(74848);function g(e){let{className:n,block:a,selectedValue:c,selectValue:r,tabValues:l}=e;const t=[],{blockElementScrollPositionUntilNextRender:i}=(0,s.a_)(),o=e=>{const n=e.currentTarget,a=t.indexOf(n),d=l[a].value;d!==c&&(i(n),r(d))},h=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const a=t.indexOf(e.currentTarget)+1;n=t[a]??t[0];break}case"ArrowLeft":{const a=t.indexOf(e.currentTarget)-1;n=t[a]??t[t.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,d.A)("tabs",{"tabs--block":a},n),children:l.map((e=>{let{value:n,label:a,attributes:s}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:c===n?0:-1,"aria-selected":c===n,ref:e=>t.push(e),onKeyDown:h,onClick:o,...s,className:(0,d.A)("tabs__item",p.tabItem,s?.className,{"tabs__item--active":c===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:s}=e;const r=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,c.cloneElement)(e,{className:(0,d.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,c.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function k(e){const n=u(e);return(0,m.jsxs)("div",{className:(0,d.A)("tabs-container",p.tabList),children:[(0,m.jsx)(g,{...n,...e}),(0,m.jsx)(v,{...n,...e})]})}function w(e){const n=(0,j.A)();return(0,m.jsx)(k,{...e,children:h(e.children)},String(n))}},34705:(e,n,a)=>{a.d(n,{A:()=>c});const c=a.p+"assets/files/postman_collection-53d58dda1f254764c957a43f3344607d.json"},28453:(e,n,a)=>{a.d(n,{R:()=>r,x:()=>l});var c=a(96540);const d={},s=c.createContext(d);function r(e){const n=c.useContext(s);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),c.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/79bb8117.c7ab0d00.js b/assets/js/79bb8117.c7ab0d00.js new file mode 100644 index 00000000000..0d3a4520b56 --- /dev/null +++ b/assets/js/79bb8117.c7ab0d00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8230],{78747:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var o=n(74848),r=n(28453);const s={title:"Local playground",sidebar_position:1,description:"Deploying a Besu private network locally with Kubernetes",tags:["private networks"]},i="Deploy in a local environment",l={id:"private-networks/tutorials/kubernetes/playground",title:"Local playground",description:"Deploying a Besu private network locally with Kubernetes",source:"@site/docs/private-networks/tutorials/kubernetes/playground.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/playground",permalink:"/private-networks/tutorials/kubernetes/playground",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/playground.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Local playground",sidebar_position:1,description:"Deploying a Besu private network locally with Kubernetes",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Deploy a Besu private network with Kubernetes",permalink:"/private-networks/tutorials/kubernetes/"},next:{title:"Create a cluster",permalink:"/private-networks/tutorials/kubernetes/cluster"}},a={},u=[{value:"Steps",id:"steps",level:2},{value:"Important notes",id:"important-notes",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"deploy-in-a-local-environment",children:"Deploy in a local environment"})}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/playground",children:"playground"})," was created to provide an opportunity to deploy ",(0,o.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/",children:"quorum-kubernetes"})," in a local environment before attempting in a live environment (such as in the cloud or on-premise). Local deployment can be done with any local Kubernetes tool. Minikube and Rancher Desktop have been tested to work, but any complete Kubernetes solution with support for ",(0,o.jsx)(t.code,{children:"kubectl"})," should suffice."]}),"\n",(0,o.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Navigate to the playground ",(0,o.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/playground",children:(0,o.jsx)(t.code,{children:"README"})}),"."]}),"\n",(0,o.jsx)(t.li,{children:"Ensure that your system meets the requirements specified."}),"\n",(0,o.jsxs)(t.li,{children:["Choose your Ethereum client (Besu or GoQuorum): ",(0,o.jsx)(t.code,{children:"quorum-besu"})," or ",(0,o.jsx)(t.code,{children:"quorum-go"}),"."]}),"\n",(0,o.jsx)(t.li,{children:"Choose your consensus algorithm. The playground supports Clique, Ethash (PoW), and IBFT2 for Besu, and IBFT for GoQuorum."}),"\n",(0,o.jsxs)(t.li,{children:["Follow the instructions from the ",(0,o.jsx)(t.code,{children:"README"})," for the chosen client and consensus algorithm folder."]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"important-notes",children:"Important notes"}),"\n",(0,o.jsx)(t.p,{children:"Consider the following when deploying and developing with the playground:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["The playground is created specifically for developers and operators to become familiar with the deployment of Besu in a Kubernetes environment in preparation for going into a cloud or on-premise environment. Thus, it should ",(0,o.jsx)(t.strong,{children:"not"})," be deployed into a production environment."]}),"\n",(0,o.jsxs)(t.li,{children:["The playground is not a complete reflection of the ",(0,o.jsx)(t.code,{children:"helm"})," charts as it does not use ",(0,o.jsx)(t.code,{children:"Helm"}),", but rather static or non-templated code that is deployed through ",(0,o.jsx)(t.code,{children:"kubectl apply -f"}),". This means that without ",(0,o.jsx)(t.code,{children:"Helm"})," there's a significant amount of repeated code. This is fine for development but not ideal for a production environment."]}),"\n",(0,o.jsxs)(t.li,{children:["The playground uses static/hard-coded keys. Automatic key generation is only supported in ",(0,o.jsx)(t.code,{children:"helm"})," charts."]}),"\n",(0,o.jsx)(t.li,{children:"As the playground is for local development, no cloud integration or lifecycle support is offered."}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>l});var o=n(96540);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a44c711.94783d97.js b/assets/js/7a44c711.94783d97.js new file mode 100644 index 00000000000..fffbf2a7f7f --- /dev/null +++ b/assets/js/7a44c711.94783d97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1283],{48739:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>o,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var t=r(74848),n=r(28453);const a={title:"Privacy groups",sidebar_position:2,description:"Privacy groups"},s="Privacy groups",c={id:"private-networks/concepts/privacy/privacy-groups",title:"Privacy groups",description:"Privacy groups",source:"@site/docs/private-networks/concepts/privacy/privacy-groups.md",sourceDirName:"private-networks/concepts/privacy",slug:"/private-networks/concepts/privacy/privacy-groups",permalink:"/private-networks/concepts/privacy/privacy-groups",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/privacy-groups.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Privacy groups",sidebar_position:2,description:"Privacy groups"},sidebar:"privateDocSidebar",previous:{title:"Private transaction processing",permalink:"/private-networks/concepts/privacy/private-transactions/processing"},next:{title:"Flexible privacy groups",permalink:"/private-networks/concepts/privacy/flexible-privacy"}},o={},p=[{value:"Privacy types",id:"privacy-types",level:2},{value:"Access between states",id:"access-between-states",level:3},{value:"Enterprise Ethereum Alliance privacy",id:"enterprise-ethereum-alliance-privacy",level:3},{value:"Besu-extended privacy",id:"besu-extended-privacy",level:3},{value:"Multi-tenancy",id:"multi-tenancy",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"privacy-groups",children:"Privacy groups"})}),"\n",(0,t.jsx)(i.p,{children:"A privacy group is a group of nodes identified by a unique privacy group ID by Tessera. Tessera stores each private transaction with the privacy group ID."}),"\n",(0,t.jsx)(i.p,{children:"The Besu nodes maintain the public world state for the blockchain and a private state for each privacy group. The private states contain data that is not shared in the globally replicated world state."}),"\n",(0,t.jsxs)(i.admonition,{type:"caution",children:[(0,t.jsx)(i.p,{children:"The privacy group implementations described below are offchain privacy groups and cannot have their group membership updated."}),(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.a,{href:"/private-networks/concepts/privacy/flexible-privacy",children:"Flexible privacy groups are an early access feature"}),"."]})]}),"\n",(0,t.jsx)(i.h2,{id:"privacy-types",children:"Privacy types"}),"\n",(0,t.jsx)(i.p,{children:"Besu implements two types of privacy:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["Enterprise Ethereum Alliance (EEA) privacy, where private transactions include ",(0,t.jsx)(i.code,{children:"privateFor"})," as the recipient."]}),"\n",(0,t.jsxs)(i.li,{children:["Besu-extended privacy, where private transactions include ",(0,t.jsx)(i.code,{children:"privacyGroupId"})," as the recipient."]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"Both privacy types create privacy groups and store private transactions with their privacy group in Tessera."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Privacy Groups",src:r(98971).A+"",width:"631",height:"638"})})}),"\n",(0,t.jsx)(i.admonition,{type:"note",children:(0,t.jsx)(i.p,{children:"For clarity, the Tessera nodes are not shown in the previous diagram. To send private transactions, each Besu node must have an associated Tessera node."})}),"\n",(0,t.jsx)(i.h3,{id:"access-between-states",children:"Access between states"}),"\n",(0,t.jsx)(i.p,{children:"A contract in a privacy group:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Can read or write to a contract in the same privacy group."}),"\n",(0,t.jsx)(i.li,{children:"Can read from the public state including public contracts."}),"\n",(0,t.jsx)(i.li,{children:"Cannot access contracts from a different privacy group."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"A public contract cannot access a private contract."}),"\n",(0,t.jsx)(i.h3,{id:"enterprise-ethereum-alliance-privacy",children:"Enterprise Ethereum Alliance privacy"}),"\n",(0,t.jsxs)(i.p,{children:["In the privacy implementation complying with the ",(0,t.jsx)(i.a,{href:"https://entethalliance.org/technical-documents/",children:"EEA Client Specification"})," the group of nodes specified by ",(0,t.jsx)(i.code,{children:"privateFrom"})," and ",(0,t.jsx)(i.code,{children:"privateFor"})," form a privacy group with a unique privacy group ID provided by Tessera."]}),"\n",(0,t.jsx)(i.p,{children:"The previous diagram illustrates two privacy groups enabling:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"A, B, and C to send transactions that are private from D."}),"\n",(0,t.jsx)(i.li,{children:"A, C, and D to send transactions that are private from B."}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["Using EEA-compliant privacy, to send private transactions between A, B, and C, A initializes a contract in a private transaction with B and C specified as the ",(0,t.jsx)(i.code,{children:"privateFor"})," and A specified as the ",(0,t.jsx)(i.code,{children:"privateFrom"}),". Initializing the contract creates a privacy group consisting of A, B, and C. For the ABC private state to remain consistent, A, B, and C must be included on transactions (as either ",(0,t.jsx)(i.code,{children:"privateFrom"})," or ",(0,t.jsx)(i.code,{children:"privateFor"}),") even if they are between only two of the three parties."]}),"\n",(0,t.jsxs)(i.p,{children:["To send private transactions between A, C, and D, C initializes a different contract in a private transaction with A and D specified as the ",(0,t.jsx)(i.code,{children:"privateFor"})," and C specified as the ",(0,t.jsx)(i.code,{children:"privateFrom"}),". Initializing the contract creates a privacy group consisting of A, C, and D. For the ACD private state to remain consistent, A, C, and D must be included on transactions (as either ",(0,t.jsx)(i.code,{children:"privateFrom"})," or ",(0,t.jsx)(i.code,{children:"privateFor"}),") even if they are between only two of the three parties."]}),"\n",(0,t.jsx)(i.h3,{id:"besu-extended-privacy",children:"Besu-extended privacy"}),"\n",(0,t.jsxs)(i.p,{children:["The Besu-extended privacy implementation creates a privacy group using ",(0,t.jsx)(i.a,{href:"/public-networks/reference/api/#priv_createprivacygroup",children:(0,t.jsx)(i.code,{children:"priv_createPrivacyGroup"})})," with private transactions sent to the privacy group ID."]}),"\n",(0,t.jsx)(i.p,{children:"Using the same privacy groups as in the previous example."}),"\n",(0,t.jsx)(i.p,{children:"Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a privacy group consisting of A, B, and C. The privacy group ID is specified when sending private transactions and A, B, and C are recipients of all private transactions sent to the privacy group."}),"\n",(0,t.jsx)(i.p,{children:"To send private transactions between A, C, and D, A creates a privacy group consisting of A, C, and D. The privacy group ID of this group is specified when sending private transactions with A, C, and D as recipients."}),"\n",(0,t.jsx)(i.h2,{id:"multi-tenancy",children:"Multi-tenancy"}),"\n",(0,t.jsxs)(i.p,{children:["When using ",(0,t.jsx)(i.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"})," with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group."]})]})}function l(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},98971:(e,i,r)=>{r.d(i,{A:()=>t});const t=r.p+"assets/images/PrivacyGroups-f8b035c1df4b611ec108a113587611dc.png"},28453:(e,i,r)=>{r.d(i,{R:()=>s,x:()=>c});var t=r(96540);const n={},a=t.createContext(n);function s(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b0f9452.7847efd5.js b/assets/js/7b0f9452.7847efd5.js new file mode 100644 index 00000000000..7fe499bcda4 --- /dev/null +++ b/assets/js/7b0f9452.7847efd5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8344],{26985:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(74848),s=t(28453),a=t(11470),i=t(19365);const o={title:"Free gas network",description:"Configuring free gas networks",sidebar_position:2,tags:["private networks"]},c="Configure free gas networks",l={id:"private-networks/how-to/configure/free-gas",title:"Free gas network",description:"Configuring free gas networks",source:"@site/docs/private-networks/how-to/configure/free-gas.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/free-gas",permalink:"/private-networks/how-to/configure/free-gas",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/free-gas.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Free gas network",description:"Configuring free gas networks",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Add and remove validators without voting",permalink:"/private-networks/how-to/configure/consensus/add-validators-without-voting"},next:{title:"Bootnodes",permalink:"/private-networks/how-to/configure/bootnodes"}},u={},d=[{value:"Configure free gas in Besu",id:"configure-free-gas-in-besu",level:2},{value:"1. Set the block size",id:"1-set-the-block-size",level:3},{value:"2. Set the contract size",id:"2-set-the-contract-size",level:3},{value:"3. Start Besu with a minimum gas price of zero",id:"3-start-besu-with-a-minimum-gas-price-of-zero",level:3},{value:"4. Enable zero base fee if using London fork or later",id:"4-enable-zero-base-fee-if-using-london-fork-or-later",level:3},{value:"Configure free gas in Hardhat",id:"configure-free-gas-in-hardhat",level:2},{value:"Update <code>hardhat.config.js</code>",id:"update-hardhatconfigjs",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"configure-free-gas-networks",children:"Configure free gas networks"})}),"\n",(0,r.jsx)(n.p,{children:"Transactions use computational resources so have an associated cost. Gas is the cost unit and the gas price is the price per gas unit. The transaction cost is the gas used * gas price."}),"\n",(0,r.jsx)(n.p,{children:"In public networks, the account submitting the transaction pays the transaction cost, in Ether. The miner (or validator in PoA networks) that includes the transaction in a block receives transaction cost."}),"\n",(0,r.jsx)(n.p,{children:"In many private networks, network participants run the validators and do not require gas as an incentive. Networks that don't require gas as an incentive usually configure the gas price to be zero (that is, free gas). Some private networks might allocate Ether and use a non-zero gas price to limit resource use."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["We use the term ",(0,r.jsx)(n.em,{children:"free gas network"})," to refer to a network with a gas price of zero. A network with a gas price of zero is also known as a ",(0,r.jsx)(n.em,{children:"zero gas network"})," or ",(0,r.jsx)(n.em,{children:"no gas network"}),"."]})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Some pre-crafted transactions require the deployment account to have gas available. For example, the transaction that creates the smart contract in ",(0,r.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-1820",children:"EIP-1820"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"In a free gas network, transactions still use gas but the gas price is zero, meaning the transaction cost is zero. Transaction cost = gas used * 0 (the gas price)."}),"\n",(0,r.jsx)(n.h2,{id:"configure-free-gas-in-besu",children:"Configure free gas in Besu"}),"\n",(0,r.jsx)(n.p,{children:"When gas is free, limiting block and contract sizes is less important. In free gas networks, we increase the block size limit and set the contract size limit to the maximum value."}),"\n",(0,r.jsx)(n.h3,{id:"1-set-the-block-size",children:"1. Set the block size"}),"\n",(0,r.jsxs)(n.p,{children:["If you want to remove gas from consideration and don't mind blocks potentially taking longer to create, in the genesis file set the block size limit (measured in gas) to the maximum accepted by Hardhat (",(0,r.jsx)(n.code,{children:"0x1fffffffffffff"}),"). In the genesis file, specify ",(0,r.jsx)(n.code,{children:"gasLimit"})," following the ",(0,r.jsx)(n.code,{children:"config"})," key."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ....\n },\n ...\n "gasLimit": "0x1fffffffffffff",\n ....\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["If you are more concerned about blocks arriving on time and don't have expensive individual transactions, set ",(0,r.jsx)(n.code,{children:"gasLimit"})," to a value closer to the amount of gas your validators can process in the configured block time."]}),"\n",(0,r.jsx)(n.h3,{id:"2-set-the-contract-size",children:"2. Set the contract size"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"config"})," section of the genesis file, set the contract size limit to the maximum supported size (in bytes)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'(\n "config": {\n ...\n "contractSizeLimit": 2147483647,\n ...\n }\n ...\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"3-start-besu-with-a-minimum-gas-price-of-zero",children:"3. Start Besu with a minimum gas price of zero"}),"\n",(0,r.jsxs)(n.p,{children:["When starting nodes, set the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:"minimum gas price"})," to zero."]}),"\n",(0,r.jsxs)(a.A,{children:[(0,r.jsx)(i.A,{value:"Command line",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"--min-gas-price=0\n"})})}),(0,r.jsx)(i.A,{value:"Configuration file",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"min-gas-price=0\n"})})})]}),"\n",(0,r.jsx)(n.admonition,{title:"Important",type:"danger",children:(0,r.jsxs)(n.p,{children:["In a free gas network, ensure the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#min-gas-price",children:"minimum gas price"})," is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. You can query a node's gas configuration using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gasprice",children:(0,r.jsx)(n.code,{children:"eth_gasPrice"})}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"4-enable-zero-base-fee-if-using-london-fork-or-later",children:"4. Enable zero base fee if using London fork or later"}),"\n",(0,r.jsxs)(n.p,{children:["If your network is configured to use the ",(0,r.jsx)(n.code,{children:"londonBlock"})," or a later hard fork, then you must also enable the ",(0,r.jsx)(n.code,{children:"zeroBaseFee"})," configuration. You must set this on all your nodes. Once it is set, future blocks produced by that node will set a ",(0,r.jsx)(n.code,{children:"baseFee"})," of 0. This is required because the London hard fork (EIP-1559) introduced a non-zero ",(0,r.jsx)(n.code,{children:"baseFee"})," into the block which normally means transactions require gas."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "londonBlock": 0,\n "zeroBaseFee": true,\n ...\n },\n ...\n}\n'})}),"\n",(0,r.jsxs)(n.p,{children:["If zero base fee is enabled, you cannot specify a value for ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,r.jsx)(n.code,{children:"--tx-pool-price-bump"})}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"configure-free-gas-in-hardhat",children:"Configure free gas in Hardhat"}),"\n",(0,r.jsx)(n.p,{children:"If using Hardhat to develop on your free gas network, you also need to configure free gas in Hardhat."}),"\n",(0,r.jsx)(n.p,{children:"Like setting block and contract size limits to their maximum values for Besu, set the transaction gas limit in Hardhat to the maximum possible."}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Besu does not support private key management. To use Besu with Hardhat, you must configure a ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/develop/hardhat",children:"Hardhat wallet"}),"."]})}),"\n",(0,r.jsxs)(n.h3,{id:"update-hardhatconfigjs",children:["Update ",(0,r.jsx)(n.code,{children:"hardhat.config.js"})]}),"\n",(0,r.jsxs)(n.p,{children:["Update the ",(0,r.jsx)(n.code,{children:"hardhat.config.js"})," file:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Set the gas price to zero."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"gasPrice: 0;\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Set the gas limit for a transaction (that is, contract creation) to be the block gas limit - 1."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'gas: "0x1ffffffffffffe";\n'})}),"\n",(0,r.jsxs)(n.p,{children:["Setting ",(0,r.jsx)(n.code,{children:"gasPrice"})," to ",(0,r.jsx)(n.code,{children:"0"})," should cover transaction costs for most deployments."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Specify ",(0,r.jsx)(n.code,{children:"evmVersion"})," when using the latest Solidity version."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'solidity: {\n version: "0.8.20",\n settings: {\n evmVersion: "london", // required for Besu\n optimizer: {...},\n },\n },\n'})}),"\n"]}),"\n"]})]})}function f(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var a=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>k});var r=t(96540),s=t(18215),a=t(23104),i=t(56347),o=t(205),c=t(57485),l=t(31682),u=t(70679);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const s=(0,i.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,c.aZ)(a),(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(s.location.search);n.set(a,e),s.replace({...s.location,search:n.toString()})}),[a,s])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,a=h(e),[i,c]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[l,d]=p({queryString:t,groupId:s}),[g,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,a]=(0,u.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:s}),b=(()=>{const e=l??g;return f({value:e,tabValues:a})?e:null})();(0,o.A)((()=>{b&&c(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),m(e)}),[d,m,a]),tabValues:a}}var m=t(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=t(74848);function v(e){let{className:n,block:t,selectedValue:r,selectValue:i,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,a.a_)(),u=e=>{const n=e.currentTarget,t=c.indexOf(n),s=o[t].value;s!==r&&(l(n),i(s))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=c.indexOf(e.currentTarget)+1;n=c[t]??c[0];break}case"ArrowLeft":{const t=c.indexOf(e.currentTarget)-1;n=c[t]??c[c.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>c.push(e),onKeyDown:d,onClick:u,...a,className:(0,s.A)("tabs__item",b.tabItem,a?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function j(e){let{lazy:n,children:t,selectedValue:a}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function w(e){const n=g(e);return(0,x.jsxs)("div",{className:(0,s.A)("tabs-container",b.tabList),children:[(0,x.jsx)(v,{...n,...e}),(0,x.jsx)(j,{...n,...e})]})}function k(e){const n=(0,m.A)();return(0,x.jsx)(w,{...e,children:d(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(96540);const s={},a=r.createContext(s);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b4961ca.d2b3a768.js b/assets/js/7b4961ca.d2b3a768.js new file mode 100644 index 00000000000..4b3ee40d9b8 --- /dev/null +++ b/assets/js/7b4961ca.d2b3a768.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3034],{56042:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>a,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var t=s(74848),r=s(28453);const i={title:"Use Splunk",sidebar_position:5,toc_max_heading_level:2,description:"Send Besu logs to Splunk",tags:["private networks"]},l="Use Splunk",o={id:"private-networks/how-to/monitor/splunk",title:"Use Splunk",description:"Send Besu logs to Splunk",source:"@site/docs/private-networks/how-to/monitor/splunk.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/splunk",permalink:"/private-networks/how-to/monitor/splunk",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/splunk.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Use Splunk",sidebar_position:5,toc_max_heading_level:2,description:"Send Besu logs to Splunk",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Quorum Hibernate",permalink:"/private-networks/how-to/monitor/quorum-hibernate"},next:{title:"Use OpenTelemetry",permalink:"/private-networks/how-to/monitor/opentelemetry"}},c={},d=[{value:"Developer Quickstart with Splunk",id:"developer-quickstart-with-splunk",level:2},{value:"Splunk Connect for Ethereum Docker Compose",id:"splunk-connect-for-ethereum-docker-compose",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Steps",id:"steps",level:3},{value:"Use Splunk Enterprise as a Docker container",id:"use-splunk-enterprise-as-a-docker-container",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Steps",id:"steps-1",level:3},{value:"Run a Splunk Enterprise instance",id:"run-a-splunk-enterprise-instance",level:2},{value:"Prerequisites",id:"prerequisites-1",level:3},{value:"Steps",id:"steps-2",level:3},{value:"Splunk options reference",id:"splunk-options-reference",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"use-splunk",children:"Use Splunk"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://splunkbase.splunk.com/app/4866/",children:"Splunk"})," is a third-party monitoring solution compatible with Besu. A Splunk server can receive Besu logs and enable complex search, visualization, and analysis."]}),"\n",(0,t.jsx)(n.p,{children:"Splunk can aggregate multiple logs in one place and run complex queries without being connected to the machine running Besu to read the standard output."}),"\n",(0,t.jsx)(n.p,{children:"Options for running Splunk and Besu are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#developer-quickstart-with-splunk",children:"Developer Quickstart with Splunk"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#splunk-connect-for-ethereum-docker-compose",children:"Splunk Connect for Ethereum Docker Compose"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#use-splunk-enterprise-as-a-docker-container",children:"Use Splunk Enterprise as a Docker container"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#run-a-splunk-enterprise-instance",children:"Run a Splunk Enterprise instance"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"developer-quickstart-with-splunk",children:"Developer Quickstart with Splunk"}),"\n",(0,t.jsx)(n.p,{children:"To view the Quickstart network logs in Splunk:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"Start the Developer Quickstart with Besu"}),", selecting Splunk monitoring."]}),"\n",(0,t.jsxs)(n.li,{children:["Open the ",(0,t.jsx)(n.a,{href:"http://localhost:8000",children:"Splunk UI"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"splunk-connect-for-ethereum-docker-compose",children:"Splunk Connect for Ethereum Docker Compose"}),"\n",(0,t.jsx)(n.p,{children:"To run a development Besu node and connect it to Splunk Enterprise, use the Splunk Connect for Ethereum demonstration Docker Compose environment provided by Splunk."}),"\n",(0,t.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://git-scm.com/",children:"Git"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker and Docker-compose"})}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"A Splunk license is not required to use the Splunk Connect for Ethereum demonstration."})}),"\n",(0,t.jsx)(n.h3,{id:"steps",children:"Steps"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Clone the Splunk Connect for Ethereum repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/splunk/splunk-connect-for-ethereum.git\ncd splunk-connect-for-ethereum\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start the demonstration environment by following the Splunk Connect for Ethereum repository ",(0,t.jsx)(n.a,{href:"https://github.com/splunk/splunk-connect-for-ethereum/tree/master/examples/besu",children:"README"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsx)(n.p,{children:"Splunk enterprise takes some time to start."}),(0,t.jsxs)(n.p,{children:["Run ",(0,t.jsx)(n.code,{children:"docker ps"})," and wait for the ",(0,t.jsx)(n.code,{children:"STATUS"})," of the 3 containers to be ",(0,t.jsx)(n.code,{children:"Up [number] seconds (healthy)"}),"."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n127600dd1173 splunkdlt/ethlogger:latest "ethlogger" 53 seconds ago Up 51 seconds (healthy) ethlogger\n88dfcee683c4 splunk/splunk:latest "/sbin/entrypoint.sh\u2026" 53 seconds ago Up 52 seconds (healthy) 8065/tcp, 8088-8089/tcp, 8191/tcp, 9887/tcp, 9997/tcp, 0.0.0.0:18000->8000/tcp splunk\n111b0c6d6072 hyperledger/besu:1.4.4 "besu" 53 seconds ago Up 52 seconds (healthy) 8545-8547/tcp, 30303/tcp besu\n'})})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"use-splunk-enterprise-as-a-docker-container",children:"Use Splunk Enterprise as a Docker container"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/CHANGELOG.md#144",children:"Besu 1.4.4"})," or later ",(0,t.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"installed"})]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["A Splunk license is not required to use the trial version of the Splunk Docker image. The image is not suitable for production use and has ",(0,t.jsx)(n.a,{href:"https://www.splunk.com/",children:"restrictions on daily log volume"}),"."]})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If running ",(0,t.jsx)(n.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Besu as a Docker container"}),", consider using ",(0,t.jsx)(n.a,{href:"#splunk-connect-for-ethereum-docker-compose",children:"Splunk Connect for Ethereum Docker Compose"})," or ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/deploy/kubernetes",children:"Kubernetes"})," instead of the Splunk Enterprise trial container."]})}),"\n",(0,t.jsx)(n.h3,{id:"steps-1",children:"Steps"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the Splunk Enterprise container:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run \\\n-e SPLUNK_START_ARGS=--accept-license \\\n-e SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113 \\\n-e SPLUNK_PASSWORD=changeme \\\n--rm \\\n-p8080:8000 -p8088:8088 \\\n-d \\\n--name splunk-demo \\\nsplunk/splunk:latest\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Once the service is started, connect on ",(0,t.jsx)(n.a,{href:"http://localhost:8080/",children:(0,t.jsx)(n.code,{children:"http://localhost:8080/"})})," and login as the ",(0,t.jsx)(n.code,{children:"admin"})," user with a password of ",(0,t.jsx)(n.code,{children:"changeme"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"To follow the logs of the Splunk container:"}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker logs -f splunk-demo\n"})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create the Besu index:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the Splunk Web interface, navigate to the ",(0,t.jsx)(n.a,{href:"http://localhost:8080/en-US/manager/search/data/indexes",children:"index list in the settings"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Documentation/Splunk/8.0.4/Indexer/Setupmultipleindexes#Create_events_indexes",children:"Create an event index"})," with an Index Name of ",(0,t.jsx)(n.code,{children:"besu"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"Leave other fields with the default values."}),"\n",(0,t.jsxs)(n.li,{children:["Save the ",(0,t.jsx)(n.code,{children:"besu"})," index."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Run Besu. To start a Besu node running in development mode, run the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"LOGGER=Splunk \\\nSPLUNK_URL=https://localhost:8088 \\\nSPLUNK_TOKEN=11111111-1111-1111-1111-1111111111113 \\\nSPLUNK_SKIPTLSVERIFY=true \\\nbesu \\\n--network=dev \\\n--miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 \\\n--miner-enabled \\\n--logging=trace\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The environment variables specified send the Besu logs to Splunk. Only ",(0,t.jsx)(n.code,{children:"LOGGER"}),", ",(0,t.jsx)(n.code,{children:"SPLUNK_URL"}),", ",(0,t.jsx)(n.code,{children:"SPLUNK_TOKEN"})," and ",(0,t.jsx)(n.code,{children:"SPLUNK_SKIPTLSVERIFY"})," are required in this example. The complete list of options is in the ",(0,t.jsx)(n.a,{href:"#splunk-options-reference",children:"Splunk options reference table"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Splunk Web interface, navigate to the ",(0,t.jsx)(n.a,{href:"http://localhost:8080/en-US/app/search/search",children:"search page"}),". Type ",(0,t.jsx)(n.code,{children:'index="besu"'})," in the search field. Log events sent by Besu are displayed."]}),"\n",(0,t.jsx)(n.p,{children:"Congratulations! You can now play with the search and other Splunk features to explore your Besu logs."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Splunk search page",src:s(11055).A+"",width:"2072",height:"1436"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Stop Besu with ++ctrl+c++. Stop the Splunk container with ",(0,t.jsx)(n.code,{children:"docker stop splunk-demo"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"run-a-splunk-enterprise-instance",children:"Run a Splunk Enterprise instance"}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites-1",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://www.splunk.com/",children:"Splunk Enterprise license"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/master/CHANGELOG.md#144",children:"Besu 1.4.4"})," or later ",(0,t.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"installed"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"steps-2",children:"Steps"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Follow the steps in the ",(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Documentation/Splunk/8.0.4/Installation",children:"Splunk Enterprise documentation"})," to download, install, and run Splunk Enterprise."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"After logging into the Splunk Enterprise Web interface, navigate to the settings to:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Documentation/Splunk/8.0.4/Data/UsetheHTTPEventCollector",children:"Create an HTTP Event Collector"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Documentation/Splunk/8.0.4/Indexer/Setupmultipleindexes#Create_events_indexes",children:"Create an event index"})," named ",(0,t.jsx)(n.code,{children:"besu"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Run Besu as in step 3 in ",(0,t.jsx)(n.a,{href:"#use-splunk-enterprise-as-a-docker-container",children:"using Splunk on Docker"}),". Set the ",(0,t.jsx)(n.code,{children:"SPLUNK_URL"})," value to match the HTTP Event Collector address and port."]}),"\n",(0,t.jsxs)(n.p,{children:["You can display logs and use the search engine as in step 4 in ",(0,t.jsx)(n.a,{href:"#use-splunk-enterprise-as-a-docker-container",children:"using Splunk on Docker"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"splunk-options-reference",children:"Splunk options reference"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Required"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LOGGER"})}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"Splunk"})," to activate sending logs to Splunk."]}),(0,t.jsx)(n.td,{children:"Yes"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"HOST"})}),(0,t.jsxs)(n.td,{children:["Current host. If in a Docker environment, the default value is the docker container ID. Otherwise, the default value is ",(0,t.jsx)(n.code,{children:"localhost"}),"."]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_URL"})}),(0,t.jsxs)(n.td,{children:["URL of the Splunk HTTP Event Collector. For example, use ",(0,t.jsx)(n.code,{children:"https://localhost:8088"})]}),(0,t.jsx)(n.td,{children:"Yes"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_TOKEN"})}),(0,t.jsxs)(n.td,{children:["Authentication token, usually of the form ",(0,t.jsx)(n.code,{children:"11111111-1111-1111-1111-111111111111"})]}),(0,t.jsx)(n.td,{children:"Yes"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_INDEX"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Splexicon:Index",children:"Index"})," to store logs. Defaults to ",(0,t.jsx)(n.code,{children:"besu"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_SOURCE"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Splexicon:Source",children:"Source of the logs"}),". Defaults to ",(0,t.jsx)(n.code,{children:"besu"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_SOURCETYPE"})}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://docs.splunk.com/Splexicon:Sourcetype",children:"Source type of the logs"}),". Defaults to ",(0,t.jsx)(n.code,{children:"besu"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_BATCH_SIZE_BYTES"})}),(0,t.jsxs)(n.td,{children:["Size of a log batch in bytes. Defaults to ",(0,t.jsx)(n.code,{children:"65536"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_BATCH_SIZE_COUNT"})}),(0,t.jsxs)(n.td,{children:["Size of a log batch in number of events. Defaults to ",(0,t.jsx)(n.code,{children:"1000"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_BATCH_INTERVAL"})}),(0,t.jsxs)(n.td,{children:["Interval at which to send log batches. Defaults to ",(0,t.jsx)(n.code,{children:"500"})]}),(0,t.jsx)(n.td,{children:"No"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SPLUNK_SKIPTLSVERIFY"})}),(0,t.jsxs)(n.td,{children:["Whether to check the Splunk instance TLS certificate when sending data. Defaults to ",(0,t.jsx)(n.code,{children:"false"})]}),(0,t.jsx)(n.td,{children:"No"})]})]})]})]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},11055:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/splunk-ui-c43ce48c74291a12501d3c9a86614bd9.png"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>o});var t=s(96540);const r={},i=t.createContext(r);function l(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7bb2e71b.0d7a41fe.js b/assets/js/7bb2e71b.0d7a41fe.js new file mode 100644 index 00000000000..3967ca4d103 --- /dev/null +++ b/assets/js/7bb2e71b.0d7a41fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[841],{42491:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>d});var s=t(74848),r=t(28453),a=t(11470),o=t(19365);const l={title:"Connect to Mainnet",sidebar_position:2,description:"How to connect to Mainnet",tags:["public networks"]},i="Connect to Mainnet",c={id:"public-networks/get-started/connect/mainnet",title:"Connect to Mainnet",description:"How to connect to Mainnet",source:"@site/docs/public-networks/get-started/connect/mainnet.md",sourceDirName:"public-networks/get-started/connect",slug:"/public-networks/get-started/connect/mainnet",permalink:"/public-networks/get-started/connect/mainnet",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/connect/mainnet.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Connect to Mainnet",sidebar_position:2,description:"How to connect to Mainnet",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Sync Besu",permalink:"/public-networks/get-started/connect/sync-node"},next:{title:"Connect to a testnet",permalink:"/public-networks/get-started/connect/testnet"}},u={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Generate the shared secret",id:"1-generate-the-shared-secret",level:3},{value:"2. Generate validator keys",id:"2-generate-validator-keys",level:3},{value:"3. Start Besu",id:"3-start-besu",level:3},{value:"4. Start the consensus client",id:"4-start-the-consensus-client",level:3},{value:"5. Wait for the clients to sync",id:"5-wait-for-the-clients-to-sync",level:3},{value:"6. Stake ETH",id:"6-stake-eth",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"connect-to-mainnet",children:"Connect to Mainnet"})}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["As a ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"Proof of Stake network"}),", running a full Ethereum node requires both ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-and-consensus-clients",children:"an execution client and a consensus client"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["Run Besu as an ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," with any ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"})," on Ethereum Mainnet."]}),"\n",(0,s.jsxs)(n.p,{children:["If you're using ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/en/stable/",children:"Teku"})," as a consensus client, you can follow the ",(0,s.jsx)(n.a,{href:"/public-networks/tutorials/besu-teku-mainnet",children:"Besu and Teku Mainnet tutorial"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu installed"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["A consensus client installed. For example, ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/en/latest/",children:"Teku"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"steps",children:"Steps"}),"\n",(0,s.jsx)(n.h3,{id:"1-generate-the-shared-secret",children:"1. Generate the shared secret"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'openssl rand -hex 32 | tr -d "\\n" > jwtsecret.hex\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You will specify ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api",children:"Engine API"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"2-generate-validator-keys",children:"2. Generate validator keys"}),"\n",(0,s.jsxs)(n.p,{children:["If you're running the consensus client as a beacon node only, skip to the ",(0,s.jsx)(n.a,{href:"#3-start-besu",children:"next step"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you're also running the consensus client as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator)."}),"\n",(0,s.jsxs)(n.p,{children:["Generate validator keys for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Save the password you use to generate each key pair in a ",(0,s.jsx)(n.code,{children:".txt"})," file. You should also have a ",(0,s.jsx)(n.code,{children:".json"})," file for each validator key pair."]})}),"\n",(0,s.jsx)(n.h3,{id:"3-start-besu",children:"3. Start Besu"}),"\n",(0,s.jsxs)(n.p,{children:["Run the following command or specify the options in a ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu \\\n --rpc-http-enabled=true \\\n --rpc-http-host=0.0.0.0 \\\n --rpc-ws-enabled=true \\\n --rpc-ws-host=0.0.0.0 \\\n --host-allowlist=<IP of Besu node>,127.0.0.1,localhost \\\n --engine-host-allowlist=<IP of Besu node>,127.0.0.1,localhost \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n"})}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#1-generate-the-shared-secret",children:"step 1"})," using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-jwt-secret",children:(0,s.jsx)(n.code,{children:"--engine-jwt-secret"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The IP address of your Besu node using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,s.jsx)(n.code,{children:"--host-allowlist"})})," and ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-host-allowlist",children:(0,s.jsx)(n.code,{children:"--engine-host-allowlist"})})," options."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Also, in the command:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-http-enabled"})})," enables the HTTP JSON-RPC service."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,s.jsx)(n.code,{children:"--rpc-http-host"})})," is set to ",(0,s.jsx)(n.code,{children:"0.0.0.0"})," to allow remote RPC connections."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-ws-enabled"})})," enables the WebSocket JSON-RPC service."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-host",children:(0,s.jsx)(n.code,{children:"--rpc-ws-host"})})," is set to ",(0,s.jsx)(n.code,{children:"0.0.0.0"})," to allow remote RPC connections."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-rpc-enabled",children:(0,s.jsx)(n.code,{children:"--engine-rpc-enabled"})})," enables the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/engine-api/",children:"Engine API"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h3,{id:"4-start-the-consensus-client",children:"4. Start the consensus client"}),"\n",(0,s.jsx)(n.p,{children:"Refer to your consensus client documentation to configure and start the consensus client."}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"If you're running a validator client, make sure you set a fee recipient address."})}),"\n",(0,s.jsxs)(n.p,{children:["If you're using Teku, follow the ",(0,s.jsx)(n.a,{href:"/public-networks/tutorials/besu-teku-mainnet#5-start-teku",children:"Besu and Teku Mainnet tutorial"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"5-wait-for-the-clients-to-sync",children:"5. Wait for the clients to sync"}),"\n",(0,s.jsx)(n.p,{children:"After starting Besu and the consensus client, your node starts syncing and connecting to peers."}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(o.A,{value:"Besu logs",label:"Besu logs",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'{"@timestamp":"2023-02-03T04:43:49,555","level":"INFO","thread":"main","class":"DefaultSynchronizer","message":"Starting synchronizer.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,556","level":"INFO","thread":"main","class":"SnapSyncDownloader","message":"Starting sync","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,559","level":"INFO","thread":"main","class":"Runner","message":"Ethereum main loop is up.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:53,106","level":"INFO","thread":"Timer-0","class":"DNSResolver","message":"Resolved 2409 nodes","throwable":""}\n{"@timestamp":"2023-02-03T04:45:04,803","level":"INFO","thread":"nioEventLoopGroup-3-10","class":"SnapWorldStateDownloader","message":"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36\ncb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0","throwable":""}\n{"@timestamp":"2023-02-03T04:46:04,834","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.08%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:48:01,840","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.23%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:49:09,931","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.41%, Peer count: 11","throwable":""}\n{"@timestamp":"2023-02-03T04:50:12,466","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.61%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:20,977","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.75%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:28,985","level":"INFO","thread":"EthScheduler-Services-29 (importBlock)","class":"ImportBlocksStep","message":"Block import progress: 180400 of 16545859 (1%)","throwable":""}\n'})})}),(0,s.jsx)(o.A,{value:"Teku logs",label:"Teku logs",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8\n2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10\n2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8\n2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6\n2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days."}),"\n",(0,s.jsx)(n.h3,{id:"6-stake-eth",children:"6. Stake ETH"}),"\n",(0,s.jsxs)(n.p,{children:["Stake your ETH for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can check your validator status by searching your Ethereum address on the ",(0,s.jsx)(n.a,{href:"https://beaconcha.in/",children:"Beacon Chain explorer"}),". It may take up to multiple days for your validator to be activated and start proposing blocks."]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var s=t(18215);const r={tabItem:"tabItem_Ymn6"};var a=t(74848);function o(e){let{children:n,hidden:t,className:o}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,o),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>y});var s=t(96540),r=t(18215),a=t(23104),o=t(56347),l=t(205),i=t(57485),c=t(31682),u=t(70679);function d(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const r=(0,o.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,i.aZ)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=h(e),[o,i]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,d]=f({queryString:t,groupId:r}),[b,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,u.Dv)(t);return[r,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),g=(()=>{const e=c??b;return p({value:e,tabValues:a})?e:null})();(0,l.A)((()=>{g&&i(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,a]),tabValues:a}}var m=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=t(74848);function j(e){let{className:n,block:t,selectedValue:s,selectValue:o,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),u=e=>{const n=e.currentTarget,t=i.indexOf(n),r=l[t].value;r!==s&&(c(n),o(r))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=i.indexOf(e.currentTarget)+1;n=i[t]??i[0];break}case"ArrowLeft":{const t=i.indexOf(e.currentTarget)-1;n=i[t]??i[i.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:l.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>i.push(e),onKeyDown:d,onClick:u,...a,className:(0,r.A)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function w(e){let{lazy:n,children:t,selectedValue:a}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function v(e){const n=b(e);return(0,x.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,x.jsx)(j,{...n,...e}),(0,x.jsx)(w,{...n,...e})]})}function y(e){const n=(0,m.A)();return(0,x.jsx)(v,{...e,children:d(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var s=t(96540);const r={},a=s.createContext(r);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e9c70a7.b09bb89b.js b/assets/js/7e9c70a7.b09bb89b.js new file mode 100644 index 00000000000..d7a59e35db9 --- /dev/null +++ b/assets/js/7e9c70a7.b09bb89b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8090],{47239:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>l,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var i=t(74848),s=t(28453);const r={title:"Network ID and chain ID",sidebar_position:6,description:"Learn about network ID and chain ID in Besu.",tags:["public networks","private networks"]},c="Network ID and chain ID",o={id:"public-networks/concepts/network-and-chain-id",title:"Network ID and chain ID",description:"Learn about network ID and chain ID in Besu.",source:"@site/docs/public-networks/concepts/network-and-chain-id.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/network-and-chain-id",permalink:"/public-networks/concepts/network-and-chain-id",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/network-and-chain-id.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Network ID and chain ID",sidebar_position:6,description:"Learn about network ID and chain ID in Besu.",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Transaction validation",permalink:"/public-networks/concepts/transactions/validation"},next:{title:"Events and logs",permalink:"/public-networks/concepts/events-and-logs"}},d={},a=[{value:"Specify a different network ID",id:"specify-a-different-network-id",level:2},{value:"Start a new chain with a new chain ID",id:"start-a-new-chain-with-a-new-chain-id",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"network-id-and-chain-id",children:"Network ID and chain ID"})}),"\n",(0,i.jsx)(n.p,{children:"Ethereum networks have two identifiers, a network ID and a chain ID. Although they often have the same value, they have different uses."}),"\n",(0,i.jsxs)(n.p,{children:["Peer-to-peer communication between nodes uses the ",(0,i.jsx)(n.em,{children:"network ID"}),", while the transaction signature process uses the ",(0,i.jsx)(n.em,{children:"chain ID"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md",children:"EIP-155"})," introduced using the chain ID as part of the transaction signing process to protect against transaction replay attacks."]})}),"\n",(0,i.jsx)(n.p,{children:"For most networks, including Mainnet and the public testnets, the network ID and the chain ID are the same, with the network ID defaulting to the chain ID, as specified in the genesis file."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",metastring:'title="Chain ID in the genesis file"',children:'{\n "config": {\n "ethash": {\n },\n "chainID": 1981\n },\n ...\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Besu sets the chain ID (and by default the network ID) automatically, using either the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,i.jsx)(n.code,{children:"--genesis-file"})})," option or when specifying a network using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,i.jsx)(n.code,{children:"--network"})})," option. The following table lists the available networks and their chain and network IDs."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Network"}),(0,i.jsx)(n.th,{children:"Chain"}),(0,i.jsx)(n.th,{children:"Chain ID"}),(0,i.jsx)(n.th,{children:"Network ID"}),(0,i.jsx)(n.th,{children:"Type"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"mainnet"})}),(0,i.jsx)(n.td,{children:"ETH"}),(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Production"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"holesky"})}),(0,i.jsx)(n.td,{children:"ETH"}),(0,i.jsx)(n.td,{children:"17000"}),(0,i.jsx)(n.td,{children:"17000"}),(0,i.jsx)(n.td,{children:"Test"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"sepolia"})}),(0,i.jsx)(n.td,{children:"ETH"}),(0,i.jsx)(n.td,{children:"11155111"}),(0,i.jsx)(n.td,{children:"11155111"}),(0,i.jsx)(n.td,{children:"Test"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"dev"})}),(0,i.jsx)(n.td,{children:"ETH"}),(0,i.jsx)(n.td,{children:"2018"}),(0,i.jsx)(n.td,{children:"2018"}),(0,i.jsx)(n.td,{children:"Development"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"classic"})}),(0,i.jsx)(n.td,{children:"ETC"}),(0,i.jsx)(n.td,{children:"61"}),(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"Production"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"mordor"})}),(0,i.jsx)(n.td,{children:"ETC"}),(0,i.jsx)(n.td,{children:"63"}),(0,i.jsx)(n.td,{children:"7"}),(0,i.jsx)(n.td,{children:"Test"})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The Ropsten, Rinkeby, and Kiln testnets are deprecated."})}),"\n",(0,i.jsx)(n.h2,{id:"specify-a-different-network-id",children:"Specify a different network ID"}),"\n",(0,i.jsxs)(n.p,{children:["Usually the network ID is the same as the chain ID, but if you want to separate specific nodes from the rest of the network so they can't connect or synchronize with other nodes, you can override the default network ID for those nodes using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#network-id",children:(0,i.jsx)(n.code,{children:"--network-id"})})," option."]}),"\n",(0,i.jsx)(n.h2,{id:"start-a-new-chain-with-a-new-chain-id",children:"Start a new chain with a new chain ID"}),"\n",(0,i.jsxs)(n.p,{children:["If you update the chain ID (or network ID) of existing nodes, they can no longer peer with other nodes in the network. Nodes need to have a matching ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),", including the chain ID, in order to peer. In this case, you're effectively running two chains that can't communicate with each other."]}),"\n",(0,i.jsx)(n.p,{children:"To change a chain ID and start a new chain:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Stop all your nodes using ",(0,i.jsx)("kbd",{children:"ctrl+c"})," in each terminal window."]}),"\n",(0,i.jsxs)(n.li,{children:["Update the ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"})," with the new chain ID."]}),"\n",(0,i.jsx)(n.li,{children:"Make sure all nodes have the same genesis file."}),"\n",(0,i.jsx)(n.li,{children:"Delete the old data directory or point to a new location for each node."}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/private-networks/tutorials/ibft/#6-start-the-first-node-as-the-bootnode",children:"Restart the nodes"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Warning",type:"danger",children:[(0,i.jsx)(n.p,{children:"Starting a new chain is starting from block zero."}),(0,i.jsx)(n.p,{children:"This means when you start a new chain with a new chain ID, you lose all previous data."})]})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function c(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ea61495.8ff9c14b.js b/assets/js/7ea61495.8ff9c14b.js new file mode 100644 index 00000000000..ff7f6ff1328 --- /dev/null +++ b/assets/js/7ea61495.8ff9c14b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5327],{14311:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var o=t(74848),s=t(28453);const i={},l=void 0,a={id:"global/postman",title:"postman",description:"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.",source:"@site/docs/global/postman.md",sourceDirName:"global",slug:"/global/postman",permalink:"/global/postman",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/postman.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},c={},d=[{value:"Run in Postman",id:"run-in-postman",level:4},{value:"Download collection",id:"download-collection",level:4}];function r(n){const e={a:"a",admonition:"admonition",h4:"h4",img:"img",p:"p",...(0,s.R)(),...n.components};return(0,o.jsxs)(e.admonition,{title:"Besu JSON-RPC APIs documentation in Postman format",type:"info",children:[(0,o.jsxs)(e.p,{children:["View the ",(0,o.jsx)(e.a,{href:"https://www.postman.com/hyperledger/workspace/hyperledger-besu/collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8",children:"Besu JSON-RPC APIs documentation"})," in the Postman format and obtain example requests in multiple coding languages."]}),(0,o.jsx)(e.h4,{id:"run-in-postman",children:"Run in Postman"}),(0,o.jsx)(e.p,{children:"Click the following button to fork the collection and run requests directly on your local network."}),(0,o.jsxs)(e.p,{children:[(0,o.jsx)(e.a,{href:"https://god.gw.postman.com/run-collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8?action=collection%2Ffork&collection-url=entityId%3D11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8%26entityType%3Dcollection%26workspaceId%3Dc4b60b6f-9f15-42d0-8327-7ebabca6f0fd#?env%5BBesu%20node%20on%20local%20host%5D=W3sia2V5IjoicnBjLWh0dHAtaG9zdCIsInZhbHVlIjoibG9jYWxob3N0IiwiZW5hYmxlZCI6ZmFsc2V9LHsia2V5IjoicnBjLWh0dHAtcG9ydCIsInZhbHVlIjoiODU0NSIsImVuYWJsZWQiOmZhbHNlfV0=",children:(0,o.jsx)(e.img,{src:"https://run.pstmn.io/button.svg",alt:"Run in Postman"})}),"."]}),(0,o.jsx)(e.h4,{id:"download-collection",children:"Download collection"}),(0,o.jsxs)(e.p,{children:["Alternatively you can ",(0,o.jsx)(e.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(34705).A+"",children:"download the JSON collection file"}),"."]})]})}function u(n={}){const{wrapper:e}={...(0,s.R)(),...n.components};return e?(0,o.jsx)(e,{...n,children:(0,o.jsx)(r,{...n})}):r(n)}},34705:(n,e,t)=>{t.d(e,{A:()=>o});const o=t.p+"assets/files/postman_collection-53d58dda1f254764c957a43f3344607d.json"},28453:(n,e,t)=>{t.d(e,{R:()=>l,x:()=>a});var o=t(96540);const s={},i=o.createContext(s);function l(n){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),o.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/8055.e84c6b8b.js b/assets/js/8055.e84c6b8b.js new file mode 100644 index 00000000000..a501a1b7b78 --- /dev/null +++ b/assets/js/8055.e84c6b8b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8055],{98055:(t,e,a)=>{a.d(e,{a:()=>l,b:()=>B,c:()=>d,d:()=>I,e:()=>M,f:()=>j,g:()=>C,h:()=>A,i:()=>x,j:()=>N,k:()=>R,l:()=>o,m:()=>Y,p:()=>_,s:()=>T,u:()=>h});var r=a(99702),n=a(26312),i=a(8337);const s={extension:(t,e,a)=>{r.l.trace("Making markers for ",a),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).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",a+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).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,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).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",a+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).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,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).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",a+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).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,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).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",a+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).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,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).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",a+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).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,a)=>{t.append("marker").attr("id",a+"_"+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",a+"_"+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,a)=>{t.append("marker").attr("id",a+"_"+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",a+"_"+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,a)=>{t.append("defs").append("marker").attr("id",a+"_"+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")}},l=(t,e,a,r)=>{e.forEach((e=>{s[e](t,a,r)}))};const d=(t,e,a,i)=>{let s=t||"";if("object"==typeof s&&(s=s[0]),(0,r.m)((0,r.c)().flowchart.htmlLabels)){s=s.replace(/\\n|\n/g,"<br />"),r.l.debug("vertexText"+s);let t=function(t){const e=(0,n.Ltv)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var s,l;return a.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),s=a,(l=t.labelStyle)&&s.attr("style",l),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:(0,r.M)(s).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 r=[];r="string"==typeof s?s.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(s)?s:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),a?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},o=async(t,e,a,s)=>{let l;const o=e.useHtmlLabels||(0,r.m)((0,r.c)().flowchart.htmlLabels);l=a||"node default";const h=t.insert("g").attr("class",l).attr("id",e.domId||e.id),c=h.insert("g").attr("class","label").attr("style",e.labelStyle);let y;y=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const p=c.node();let g;g="markdown"===e.labelType?(0,i.a)(c,(0,r.d)((0,r.M)(y),(0,r.c)()),{useHtmlLabels:o,width:e.width||(0,r.c)().flowchart.wrappingWidth,classes:"markdown-node-label"}):p.appendChild(d((0,r.d)((0,r.M)(y),(0,r.c)()),e.labelStyle,!1,s));let x=g.getBBox();const f=e.padding/2;if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=g.children[0],e=(0,n.Ltv)(g),a=t.getElementsByTagName("img");if(a){const t=""===y.replace(/<img[^>]*>/g,"").trim();await Promise.all([...a].map((e=>new Promise((a=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,r.c)().fontSize?(0,r.c)().fontSize:window.getComputedStyle(document.body).fontSize,a=5,n=parseInt(t,10)*a+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";a(e)}setTimeout((()=>{e.complete&&n()})),e.addEventListener("error",n),e.addEventListener("load",n)})))))}x=t.getBoundingClientRect(),e.attr("width",x.width),e.attr("height",x.height)}return o?c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"):c.attr("transform","translate(0, "+-x.height/2+")"),e.centerLabel&&c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),c.insert("rect",":first-child"),{shapeSvg:h,bbox:x,halfPadding:f,label:c}},h=(t,e)=>{const a=e.node().getBBox();t.width=a.width,t.height=a.height};function c(t,e,a,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+a/2+")")}function y(t,e,a,r){var n=t.x,i=t.y,s=n-r.x,l=i-r.y,d=Math.sqrt(e*e*l*l+a*a*s*s),o=Math.abs(e*a*s/d);r.x<n&&(o=-o);var h=Math.abs(e*a*l/d);return r.y<i&&(h=-h),{x:n+o,y:i+h}}function p(t,e,a,r){var n,i,s,l,d,o,h,c,y,p,x,f,u;if(n=e.y-t.y,s=t.x-e.x,d=e.x*t.y-t.x*e.y,y=n*a.x+s*a.y+d,p=n*r.x+s*r.y+d,!(0!==y&&0!==p&&g(y,p)||(i=r.y-a.y,l=a.x-r.x,o=r.x*a.y-a.x*r.y,h=i*t.x+l*t.y+o,c=i*e.x+l*e.y+o,0!==h&&0!==c&&g(h,c)||0==(x=n*l-i*s))))return f=Math.abs(x/2),{x:(u=s*o-l*d)<0?(u-f)/x:(u+f)/x,y:(u=i*d-n*o)<0?(u-f)/x:(u+f)/x}}function g(t,e){return t*e>0}const x=(t,e)=>{var a,r,n=t.x,i=t.y,s=e.x-n,l=e.y-i,d=t.width/2,o=t.height/2;return Math.abs(l)*d>Math.abs(s)*o?(l<0&&(o=-o),a=0===l?0:o*s/l,r=o):(s<0&&(d=-d),a=d,r=0===s?0:d*l/s),{x:n+a,y:i+r}},f={node:function(t,e){return t.intersect(e)},circle:function(t,e,a){return y(t,e,e,a)},ellipse:y,polygon:function(t,e,a){var r=t.x,n=t.y,i=[],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=r-t.width/2-s,o=n-t.height/2-l,h=0;h<e.length;h++){var c=e[h],y=e[h<e.length-1?h+1:0],g=p(t,a,{x:d+c.x,y:o+c.y},{x:d+y.x,y:o+y.y});g&&i.push(g)}return i.length?(i.length>1&&i.sort((function(t,e){var r=t.x-a.x,n=t.y-a.y,i=Math.sqrt(r*r+n*n),s=e.x-a.x,l=e.y-a.y,d=Math.sqrt(s*s+l*l);return i<d?-1:i===d?0:1})),i[0]):t},rect:x},u=(t,e,a)=>{const r=(t=>{const e=new Set;for(const a of t)switch(a){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(a)}return e})(t),n=e.height+2*a.padding,i=n/2,s=e.width+2*i+a.padding,l=a.padding/2;return r.has("right")&&r.has("left")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:i,y:0},{x:s/2,y:2*l},{x:s-i,y:0},{x:s,y:0},{x:s,y:-n/3},{x:s+2*l,y:-n/2},{x:s,y:-2*n/3},{x:s,y:-n},{x:s-i,y:-n},{x:s/2,y:-n-2*l},{x:i,y:-n},{x:0,y:-n},{x:0,y:-2*n/3},{x:-2*l,y:-n/2},{x:0,y:-n/3}]:r.has("right")&&r.has("left")&&r.has("up")?[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}]:r.has("right")&&r.has("left")&&r.has("down")?[{x:0,y:0},{x:i,y:-n},{x:s-i,y:-n},{x:s,y:0}]:r.has("right")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:s,y:-i},{x:s,y:-n+i},{x:0,y:-n}]:r.has("left")&&r.has("up")&&r.has("down")?[{x:s,y:0},{x:0,y:-i},{x:0,y:-n+i},{x:s,y:-n}]:r.has("right")&&r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")&&r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:r.has("right")&&r.has("up")?[{x:0,y:0},{x:s,y:-i},{x:0,y:-n}]:r.has("right")&&r.has("down")?[{x:0,y:0},{x:s,y:0},{x:0,y:-n}]:r.has("left")&&r.has("up")?[{x:s,y:0},{x:0,y:-i},{x:s,y:-n}]:r.has("left")&&r.has("down")?[{x:s,y:0},{x:0,y:0},{x:s,y:-n}]:r.has("right")?[{x:i,y:-l},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n+l}]:r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")?[{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l}]:r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:[{x:0,y:0}]},w=t=>t?" "+t:"",b=(t,e)=>`${e||"node default"}${w(t.classes)} ${w(t.class)}`,m=async(t,e)=>{const{shapeSvg:a,bbox:n}=await o(t,e,b(e,void 0),!0),i=n.width+e.padding+(n.height+e.padding),s=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];r.l.info("Question main (Circle)");const l=c(a,i,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return r.l.warn("Intersect called"),f.polygon(e,s,t)},a};function k(t,e,a,n){const i=[],s=t=>{i.push(t,0)},l=t=>{i.push(0,t)};e.includes("t")?(r.l.debug("add top border"),s(a)):l(a),e.includes("r")?(r.l.debug("add right border"),s(n)):l(n),e.includes("b")?(r.l.debug("add bottom border"),s(a)):l(a),e.includes("l")?(r.l.debug("add left border"),s(n)):l(n),t.attr("stroke-dasharray",i.join(" "))}const v=(t,e,a)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let n=70,i=10;"LR"===a&&(n=10,i=70);const s=r.append("rect").attr("x",-1*n/2).attr("y",-1*i/2).attr("width",n).attr("height",i).attr("class","fork-join");return h(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return f.rect(e,t)},r},L={rhombus:m,composite:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,d=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-d/2:-n.height/2-i;if(s.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).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=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},question:m,rect:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes+" "+e.class,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,d=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-d/2:-n.height/2-i;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).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=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},labelRect:async(t,e)=>{const{shapeSvg:a}=await o(t,e,"label",!0);r.l.trace("Classes = ",e.class);const n=a.insert("rect",":first-child");if(n.attr("width",0).attr("height",0),a.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(n,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,n),e.intersect=function(t){return f.rect(e,t)},a},rectWithTitle:(t,e)=>{let a;a=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",a).attr("id",e.domId||e.id),s=i.insert("rect",":first-child"),l=i.insert("line"),o=i.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let y="";y="object"==typeof c?c[0]:c,r.l.info("Label text abc79",y,c,"object"==typeof c);const p=o.node().appendChild(d(y,e.labelStyle,!0,!0));let g={width:0,height:0};if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=p.children[0],e=(0,n.Ltv)(p);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}r.l.info("Text 2",c);const x=c.slice(1,c.length);let u=p.getBBox();const w=o.node().appendChild(d(x.join?x.join("<br/>"):x,e.labelStyle,!0,!0));if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=w.children[0],e=(0,n.Ltv)(w);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}const b=e.padding/2;return(0,n.Ltv)(w).attr("transform","translate( "+(g.width>u.width?0:(u.width-g.width)/2)+", "+(u.height+b+5)+")"),(0,n.Ltv)(p).attr("transform","translate( "+(g.width<u.width?0:-(u.width-g.width)/2)+", 0)"),g=o.node().getBBox(),o.attr("transform","translate("+-g.width/2+", "+(-g.height/2-b+3)+")"),s.attr("class","outer title-state").attr("x",-g.width/2-b).attr("y",-g.height/2-b).attr("width",g.width+e.padding).attr("height",g.height+e.padding),l.attr("class","divider").attr("x1",-g.width/2-b).attr("x2",g.width/2+b).attr("y1",-g.height/2-b+u.height+b).attr("y2",-g.height/2-b+u.height+b),h(e,s),e.intersect=function(t){return f.rect(e,t)},i},choice:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return a.insert("polygon",":first-child").attr("points",r.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 f.circle(e,14,t)},a},circle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,b(e,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("Circle main"),h(e,s),e.intersect=function(t){return r.l.info("Circle intersect",e,n.width/2+i,t),f.circle(e,n.width/2+i,t)},a},doublecircle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,b(e,void 0),!0),s=a.insert("g",":first-child"),l=s.insert("circle"),d=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+5).attr("width",n.width+e.padding+10).attr("height",n.height+e.padding+10),d.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("DoubleCircle main"),h(e,l),e.intersect=function(t){return r.l.info("DoubleCircle intersect",e,n.width/2+i+5,t),f.circle(e,n.width/2+i+5,t)},a},stadium:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.height+e.padding,i=r.width+n/4+e.padding,s=a.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},hexagon:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.height+e.padding,i=n/4,s=r.width+2*i+e.padding,l=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}],d=c(a,s,n,l);return d.attr("style",e.style),h(e,d),e.intersect=function(t){return f.polygon(e,l,t)},a},block_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,void 0,!0),n=r.height+2*e.padding,i=n/2,s=r.width+2*i+e.padding,l=u(e.directions,r,e),d=c(a,s,n,l);return d.attr("style",e.style),h(e,d),e.intersect=function(t){return f.polygon(e,l,t)},a},rect_left_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return c(a,n,i,s).attr("style",e.style),e.width=n+i,e.height=i,e.intersect=function(t){return f.polygon(e,s,t)},a},lean_right:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},lean_left:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},inv_trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},rect_right_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},cylinder:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=n/2,s=i/(2.5+n/50),l=r.height+s+e.padding,d="M 0,"+s+" a "+i+","+s+" 0,0,0 "+n+" 0 a "+i+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,c=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",d).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return h(e,c),e.intersect=function(t){const a=f.rect(e,t),r=a.x-e.x;if(0!=i&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(a.y-e.y)>e.height/2-s)){let n=s*s*(1-r*r/(i*i));0!=n&&(n=Math.sqrt(n)),n=s-n,t.y-e.y>0&&(n=-n),a.y+=n}return a},a},start:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),h(e,r),e.intersect=function(t){return f.circle(e,7,t)},a},end:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child"),n=a.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),h(e,n),e.intersect=function(t){return f.circle(e,7,t)},a},note:async(t,e)=>{e.useHtmlLabels||(0,r.c)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:a,bbox:n,halfPadding:i}=await o(t,e,"node "+e.classes,!0);r.l.info("Classes = ",e.classes);const s=a.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),h(e,s),e.intersect=function(t){return f.rect(e,t)},a},subroutine:async(t,e)=>{const{shapeSvg:a,bbox:r}=await o(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},fork:v,join:v,class_box:(t,e)=>{const a=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const s=t.insert("g").attr("class",i).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),o=s.insert("line"),c=s.insert("line");let y=0,p=4;const g=s.insert("g").attr("class","label");let x=0;const u=e.classData.annotations&&e.classData.annotations[0],w=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",b=g.node().appendChild(d(w,e.labelStyle,!0,!0));let m=b.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=b.children[0],e=(0,n.Ltv)(b);m=t.getBoundingClientRect(),e.attr("width",m.width),e.attr("height",m.height)}e.classData.annotations[0]&&(p+=m.height+4,y+=m.width);let k=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,r.c)().flowchart.htmlLabels?k+="<"+e.classData.type+">":k+="<"+e.classData.type+">");const v=g.node().appendChild(d(k,e.labelStyle,!0,!0));(0,n.Ltv)(v).attr("class","classTitle");let L=v.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=v.children[0],e=(0,n.Ltv)(v);L=t.getBoundingClientRect(),e.attr("width",L.width),e.attr("height",L.height)}p+=L.height+4,L.width>y&&(y=L.width);const S=[];e.classData.members.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(d(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ltv)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,S.push(s)})),p+=8;const M=[];if(e.classData.methods.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(d(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ltv)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,M.push(s)})),p+=8,u){let t=(y-m.width)/2;(0,n.Ltv)(b).attr("transform","translate( "+(-1*y/2+t)+", "+-1*p/2+")"),x=m.height+4}let T=(y-L.width)/2;return(0,n.Ltv)(v).attr("transform","translate( "+(-1*y/2+T)+", "+(-1*p/2+x)+")"),x+=L.height+4,o.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,S.forEach((t=>{(0,n.Ltv)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x+4)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),x+=8,c.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,M.forEach((t=>{(0,n.Ltv)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),l.attr("style",e.style).attr("class","outer title-state").attr("x",-y/2-a).attr("y",-p/2-a).attr("width",y+e.padding).attr("height",p+e.padding),h(e,l),e.intersect=function(t){return f.rect(e,t)},s}};let S={};const M=async(t,e,a)=>{let n,i;if(e.link){let s;"sandbox"===(0,r.c)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),i=await L[e.shape](n,e,a)}else i=await L[e.shape](t,e,a),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),n.attr("data-node","true"),n.attr("data-id",e.id),S[e.id]=n,e.haveCallback&&S[e.id].attr("class",S[e.id].attr("class")+" clickable"),n},T=(t,e)=>{S[e.id]=t},B=()=>{S={}},_=t=>{const e=S[t.id];r.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const a=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+a-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),a},C=({flowchart:t})=>{var e,a;const r=(null==(e=null==t?void 0:t.subGraphTitleMargin)?void 0:e.top)??0,n=(null==(a=null==t?void 0:t.subGraphTitleMargin)?void 0:a.bottom)??0;return{subGraphTitleTopMargin:r,subGraphTitleBottomMargin:n,subGraphTitleTotalMargin:r+n}},E={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function $(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=P(t),e=P(e);const[a,r]=[t.x,t.y],[n,i]=[e.x,e.y],s=n-a,l=i-r;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const P=t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,R=t=>({x:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaX:a}=$(r[0],r[1]);n=E[t.arrowTypeStart]*Math.cos(e)*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaX:a}=$(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.cos(e)*(a>=0?1:-1)}return P(e).x+n},y:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaY:a}=$(r[0],r[1]);n=E[t.arrowTypeStart]*Math.abs(Math.sin(e))*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaY:a}=$(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(a>=0?1:-1)}return P(e).y+n}}),Y=(t,e,a,r,n)=>{e.arrowTypeStart&&W(t,"start",e.arrowTypeStart,a,r,n),e.arrowTypeEnd&&W(t,"end",e.arrowTypeEnd,a,r,n)},O={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},W=(t,e,a,n,i,s)=>{const l=O[a];if(!l)return void r.l.warn(`Unknown arrow type: ${a}`);const d="start"===e?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${s}-${l}${d})`)};let X={},H={};const I=()=>{X={},H={}},j=(t,e)=>{const a=(0,r.m)((0,r.c)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,i.a)(t,e.label,{style:e.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):d(e.label,e.labelStyle),l=t.insert("g").attr("class","edgeLabel"),o=l.insert("g").attr("class","label");o.node().appendChild(s);let h,c=s.getBBox();if(a){const t=s.children[0],e=(0,n.Ltv)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}if(o.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),X[e.id]=l,e.width=c.width,e.height=c.height,e.startLabelLeft){const a=d(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startLeft=r,D(h,e.startLabelLeft)}if(e.startLabelRight){const a=d(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=r.node().appendChild(a),n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startRight=r,D(h,e.startLabelRight)}if(e.endLabelLeft){const a=d(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endLeft=r,D(h,e.endLabelLeft)}if(e.endLabelRight){const a=d(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endRight=r,D(h,e.endLabelRight)}return s};function D(t,e){(0,r.c)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const N=(t,e)=>{r.l.debug("Moving label abc88 ",t.id,t.label,X[t.id],e);let a=e.updatedPath?e.updatedPath:e.originalPath;const n=(0,r.c)(),{subGraphTitleTotalMargin:i}=C(n);if(t.label){const n=X[t.id];let s=t.x,l=t.y;if(a){const n=r.u.calcLabelPosition(a);r.l.debug("Moving label "+t.label+" from (",s,",",l,") to (",n.x,",",n.y,") abc88"),e.updatedPath&&(s=n.x,l=n.y)}n.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){const e=H[t.id].startLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.startLabelRight){const e=H[t.id].startRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelLeft){const e=H[t.id].endLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelRight){const e=H[t.id].endRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}},U=(t,e)=>{r.l.debug("abc88 cutPathAtIntersect",t,e);let a=[],n=t[0],i=!1;return t.forEach((t=>{if(((t,e)=>{const a=t.x,r=t.y,n=Math.abs(e.x-a),i=Math.abs(e.y-r),s=t.width/2,l=t.height/2;return n>=s||i>=l})(e,t)||i)n=t,i||a.push(t);else{const s=((t,e,a)=>{r.l.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(a)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,s=Math.abs(n-a.x),l=t.width/2;let d=a.x<e.x?l-s:l+s;const o=t.height/2,h=Math.abs(e.y-a.y),c=Math.abs(e.x-a.x);if(Math.abs(i-e.y)*l>Math.abs(n-e.x)*o){let t=a.y<e.y?e.y-o-i:i-o-e.y;d=c*t/h;const n={x:a.x<e.x?a.x+d:a.x-c+d,y:a.y<e.y?a.y+h-t:a.y-h+t};return 0===d&&(n.x=e.x,n.y=e.y),0===c&&(n.x=e.x),0===h&&(n.y=e.y),r.l.debug(`abc89 topp/bott calc, Q ${h}, q ${t}, R ${c}, r ${d}`,n),n}{d=a.x<e.x?e.x-l-n:n-l-e.x;let t=h*d/c,i=a.x<e.x?a.x+c-d:a.x-c+d,s=a.y<e.y?a.y+t:a.y-t;return r.l.debug(`sides calc abc89, Q ${h}, q ${t}, R ${c}, r ${d}`,{_x:i,_y:s}),0===d&&(i=e.x,s=e.y),0===c&&(i=e.x),0===h&&(s=e.y),{x:i,y:s}}})(e,n,t);let l=!1;a.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),a.some((t=>t.x===s.x&&t.y===s.y))||a.push(s),i=!0}})),a},A=function(t,e,a,i,s,l,d){let o=a.points;r.l.debug("abc88 InsertEdge: edge=",a,"e=",e);let h=!1;const c=l.node(e.v);var y=l.node(e.w);(null==y?void 0:y.intersect)&&(null==c?void 0:c.intersect)&&(o=o.slice(1,a.points.length-1),o.unshift(c.intersect(o[0])),o.push(y.intersect(o[o.length-1]))),a.toCluster&&(r.l.debug("to cluster abc88",i[a.toCluster]),o=U(a.points,i[a.toCluster].node),h=!0),a.fromCluster&&(r.l.debug("from cluster abc88",i[a.fromCluster]),o=U(o.reverse(),i[a.fromCluster].node).reverse(),h=!0);const p=o.filter((t=>!Number.isNaN(t.y)));let g=n.qrM;!a.curve||"graph"!==s&&"flowchart"!==s||(g=a.curve);const{x:x,y:f}=R(a),u=(0,n.n8j)().x(x).y(f).curve(g);let w;switch(a.thickness){case"normal":w="edge-thickness-normal";break;case"thick":case"invisible":w="edge-thickness-thick";break;default:w=""}switch(a.pattern){case"solid":w+=" edge-pattern-solid";break;case"dotted":w+=" edge-pattern-dotted";break;case"dashed":w+=" edge-pattern-dashed"}const b=t.append("path").attr("d",u(p)).attr("id",a.id).attr("class"," "+w+(a.classes?" "+a.classes:"")).attr("style",a.style);let m="";((0,r.c)().flowchart.arrowMarkerAbsolute||(0,r.c)().state.arrowMarkerAbsolute)&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),Y(b,a,m,d,s);let k={};return h&&(k.updatedPath=o),k.originalPath=a.points,k}}}]); \ No newline at end of file diff --git a/assets/js/810074cd.228e5b7c.js b/assets/js/810074cd.228e5b7c.js new file mode 100644 index 00000000000..29cafd2ec58 --- /dev/null +++ b/assets/js/810074cd.228e5b7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3474],{60277:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var t=o(74848),s=o(28453);const i={title:"Configure static nodes",sidebar_position:1,description:"Configuring static nodes",tags:["public networks","private networks"]},c="Static nodes",r={id:"public-networks/how-to/connect/static-nodes",title:"Configure static nodes",description:"Configuring static nodes",source:"@site/docs/public-networks/how-to/connect/static-nodes.md",sourceDirName:"public-networks/how-to/connect",slug:"/public-networks/how-to/connect/static-nodes",permalink:"/public-networks/how-to/connect/static-nodes",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/connect/static-nodes.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Configure static nodes",sidebar_position:1,description:"Configuring static nodes",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Create and send transactions",permalink:"/public-networks/how-to/send-transactions"},next:{title:"Configure ports",permalink:"/public-networks/how-to/connect/configure-ports"}},d={},a=[{value:"Configure static nodes",id:"configure-static-nodes",level:2},{value:"<code>static-nodes.json</code> file",id:"static-nodesjson-file",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"static-nodes",children:"Static nodes"})}),"\n",(0,t.jsxs)(n.p,{children:["Static nodes are a configured set of trusted nodes. Static nodes are exempt from ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/connect/manage-peers#limit-peers",children:"maximum peer"})," and ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/connect/manage-peers#limit-remote-connections",children:"remote connection"})," limits."]}),"\n",(0,t.jsx)(n.p,{children:"Besu periodically initiates a connection to any unconnected static node. To mitigate low peer count issues in small networks, we recommend using static nodes, or static nodes and bootnodes."}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"Bootnodes and static nodes are both methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes."}),(0,t.jsx)(n.p,{children:"For example:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"You run multiple nodes on Mainnet, using bootnodes for discovery, but want to ensure your nodes are always connected to each other, using static nodes."}),"\n",(0,t.jsx)(n.li,{children:"You run a small network and want your nodes to reconnect if disconnected, using static nodes."}),"\n"]}),(0,t.jsxs)(n.p,{children:["To find peers, configure one or more ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"}),". To configure a specific set of peer connections, use static nodes."]})]}),"\n",(0,t.jsx)(n.h2,{id:"configure-static-nodes",children:"Configure static nodes"}),"\n",(0,t.jsx)(n.p,{children:"To configure a network of static nodes:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["List the ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})," of the nodes in the ",(0,t.jsxs)(n.a,{href:"#static-nodesjson-file",children:[(0,t.jsx)(n.code,{children:"static-nodes.json"})," file"]}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Save the ",(0,t.jsx)(n.code,{children:"static-nodes.json"})," file in the data directory (specified by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,t.jsx)(n.code,{children:"--data-path"})}),") of each node. Alternatively, you can explicitly specify the static nodes file on the command line using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#static-nodes-file",children:(0,t.jsx)(n.code,{children:"--static-nodes-file"})}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start Besu with discovery disabled using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#discovery-enabled",children:(0,t.jsx)(n.code,{children:"--discovery-enabled=false"})}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["To update the list of static peers at run time, use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#admin_addpeer",children:(0,t.jsx)(n.code,{children:"admin_addPeer"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#admin_removepeer",children:(0,t.jsx)(n.code,{children:"admin_removePeer"})})," JSON-RPC API methods."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["Runtime modifications of static nodes are not persisted between runs. The ",(0,t.jsx)(n.code,{children:"static-nodes.json"})," file is not updated by the ",(0,t.jsx)(n.code,{children:"admin_addPeer"})," and ",(0,t.jsx)(n.code,{children:"admin_removePeer"})," methods."]}),(0,t.jsxs)(n.p,{children:["Nodes not in the list of the static nodes are not prevented from connecting. To prevent nodes from connecting, use ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/permissioning/",children:"Permissioning"}),"."]})]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["If the added peer does not appear in the peer list (returned by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#admin_peers",children:(0,t.jsx)(n.code,{children:"admin_peers"})}),"), check the the supplied ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," is correct, the node is running, and the node is listening for TCP connections on the endpoint."]})}),"\n",(0,t.jsxs)(n.h3,{id:"static-nodesjson-file",children:[(0,t.jsx)(n.code,{children:"static-nodes.json"})," file"]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"static-nodes.json"})," file must be in the data directory (specified by ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,t.jsx)(n.code,{children:"--data-path"})}),") and contain a JSON array of ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Example"',children:'[\n "enode://cea71cb65a471037e01508cebcc178f176f9d5267bf29507ea1f6431eb6a5dc67d086dc8dc54358a72299dab1161febc5d7af49d1609c69b42b5e54544145d4f@127.0.0.1:30303",\n "enode://ca05e940488614402705a6b6836288ea902169ecc67a89e1bd5ef94bc0d1933f20be16bc881ffb4be59f521afa8718fc26eec2b0e90f2cd0f44f99bc8103e60f@127.0.0.1:30304"\n]\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Each node has a ",(0,t.jsx)(n.code,{children:"static-nodes.json"})," file. We recommend each node in the network has the same ",(0,t.jsx)(n.code,{children:"static-nodes.json"})," file."]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>c,x:()=>r});var t=o(96540);const s={},i=t.createContext(s);function c(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8161613e.62808094.js b/assets/js/8161613e.62808094.js new file mode 100644 index 00000000000..3e96ac9e111 --- /dev/null +++ b/assets/js/8161613e.62808094.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7882],{38253:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var o=t(74848),r=t(28453);const i={description:"Monitoring using metrics and logging",tags:["private networks"]},s="Monitoring",a={id:"private-networks/how-to/monitor/index",title:"Monitoring",description:"Monitoring using metrics and logging",source:"@site/docs/private-networks/how-to/monitor/index.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/",permalink:"/private-networks/how-to/monitor/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Monitoring using metrics and logging",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Include revert reason",permalink:"/private-networks/how-to/send-transactions/revert-reason"},next:{title:"Use Grafana Loki",permalink:"/private-networks/how-to/monitor/loki"}},c={},l=[];function d(e){const n={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"monitoring",children:"Monitoring"})}),"\n",(0,o.jsxs)(n.p,{children:["Use monitoring to identify node and network issues. In private networks, you can ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/monitor/",children:"configure metrics and logging"})," as in public networks."]}),"\n",(0,o.jsx)(n.p,{children:"You can also use the following monitoring tools in private networks:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/loki",children:"Loki"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/elastic-stack",children:"Elastic Stack"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/quorum-hibernate",children:"Quorum Hibernate"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/splunk",children:"Splunk"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/opentelemetry",children:"OpenTelemetry"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/private-networks/how-to/monitor/chainlens",children:"Chainlens Explorer"})}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For an overview of monitoring Besu, view ",(0,o.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7BuutRe0I28&feature=youtu.be",children:"this recording"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(96540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/833497ee.be45d96a.js b/assets/js/833497ee.be45d96a.js new file mode 100644 index 00000000000..e1d16ae1e4f --- /dev/null +++ b/assets/js/833497ee.be45d96a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7343],{53723:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=s(74848),l=s(28453),n=s(11470),a=s(19365);const i={title:"Peer-to-peer TLS",sidebar_position:2,description:"Configure P2P TLS communication",tags:["private networks"]},o="Configure P2P TLS",c={id:"private-networks/how-to/configure/tls/p2p",title:"Peer-to-peer TLS",description:"Configure P2P TLS communication",source:"@site/docs/private-networks/how-to/configure/tls/p2p.md",sourceDirName:"private-networks/how-to/configure/tls",slug:"/private-networks/how-to/configure/tls/p2p",permalink:"/private-networks/how-to/configure/tls/p2p",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/tls/p2p.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Peer-to-peer TLS",sidebar_position:2,description:"Configure P2P TLS communication",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Client and server TLS",permalink:"/private-networks/how-to/configure/tls/client-and-server"},next:{title:"Block proposal permissioning",permalink:"/private-networks/how-to/configure/block-proposal-permissioning"}},d={},p=[{value:"Configure P2P TLS",id:"configure-p2p-tls-1",level:2},{value:"Command line options",id:"command-line-options",level:2},{value:"<code>Xp2p-tls-crl-file</code>",id:"xp2p-tls-crl-file",level:3},{value:"<code>Xp2p-tls-enabled</code>",id:"xp2p-tls-enabled",level:3},{value:"<code>Xp2p-tls-keystore-file</code>",id:"xp2p-tls-keystore-file",level:3},{value:"<code>Xp2p-tls-keystore-password-file</code>",id:"xp2p-tls-keystore-password-file",level:3},{value:"<code>Xp2p-tls-keystore-type</code>",id:"xp2p-tls-keystore-type",level:3},{value:"<code>Xp2p-tls-truststore-file</code>",id:"xp2p-tls-truststore-file",level:3},{value:"<code>Xp2p-tls-truststore-password-file</code>",id:"xp2p-tls-truststore-password-file",level:3},{value:"<code>Xp2p-tls-truststore-type</code>",id:"xp2p-tls-truststore-type",level:3}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"configure-p2p-tls",children:"Configure P2P TLS"})}),"\n",(0,r.jsx)(t.p,{children:"You can configure TLS to secure the P2P communication between nodes by ensuring only authorized nodes can communicate with each other. Use certificates issued by a trusted authority to connect authorized nodes in the network."}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"P2P TLS is an early access feature, and functionality and options may be updated between releases."})}),"\n",(0,r.jsx)(t.p,{children:"Besu supports PKCS11, PKCS12, and JKS keystore and truststore types for P2P TLS."}),"\n",(0,r.jsx)(t.h2,{id:"configure-p2p-tls-1",children:"Configure P2P TLS"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Prerequisites"}),":"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A configured network. For example, ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/qbft",children:"see steps 1 to 5 in the QBFT tutorial"}),"."]}),"\n",(0,r.jsx)(t.li,{children:"Each node requires a keystore that contains the node's certificate and key."}),"\n",(0,r.jsx)(t.li,{children:"A truststore containing all the trusted certificates for the network."}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Start Besu and include the following command line options on the required nodes:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --Xp2p-tls-enabled=true \\\n--Xp2p-tls-keystore-type="PKCS12" \\\n--Xp2p-tls-keystore-file="keystore" \\\n--Xp2p-tls-keystore-password-file="keystore.password" \\\n--Xp2p-tls-crl-file="crl2.pem" \\\n--Xp2p-tls-truststore-type="JKS" \\\n--Xp2p-tls-truststore-file="truststore.jks" \\\n--Xp2p-tls-truststore-password-file="truststore_password.txt"\n'})}),"\n",(0,r.jsx)(t.p,{children:"In the command line:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Enable TLS for P2P communication using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-enabled",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-enabled=true"})}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Specify the keystore type and keystore file using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-keystore-type",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-keystore-type"})})," and ",(0,r.jsx)(t.a,{href:"#xp2p-tls-keystore-file",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-keystore-file"})}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Specify the text file containing the password to unlock the keystore file using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-keystore-password-file",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-keystore-password-file"})}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Specify the optional ",(0,r.jsx)(t.a,{href:"https://www.securew2.com/blog/certificate-revocation-crl-explained",children:"certificate revocation list (CRL)"})," file using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-crl-file",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-crl-file"})}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Specify the truststore type and truststore file using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-truststore-type",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-truststore-type"})})," and ",(0,r.jsx)(t.a,{href:"#xp2p-tls-truststore-file",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-truststore-file"})}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Specify the text file containing the password to unlock the truststore file using ",(0,r.jsx)(t.a,{href:"#xp2p-tls-keystore-password-file",children:(0,r.jsx)(t.code,{children:"--Xp2p-tls-truststore-password-file"})}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"command-line-options",children:"Command line options"}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-crl-file",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-crl-file"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-crl-file=<FILE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-crl-file=/home/cert/cert.crl.pem\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_CRL_FILE=/home/cert/cert.crl.pem\n"})})})]}),"\n",(0,r.jsx)(t.p,{children:"Path to the optional certificate revocation list (CRL) file."}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-enabled",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-enabled"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-enabled[=<true|false>]\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-enabled=true\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_ENABLED=true\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["Enable TLS for P2P communication. The default is ",(0,r.jsx)(t.code,{children:"false"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-keystore-file",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-keystore-file"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-file=<FILE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-file=/home/cert/keystore.jks\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_KEYSTORE_FILE=/home/cert/keystore.jks\n"})})})]}),"\n",(0,r.jsx)(t.p,{children:"Keystore file containing the key and certificate to allow TLS for P2P communication."}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-keystore-password-file",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-keystore-password-file"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-password-file=<FILE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-password-file=/home/cert/password.txt\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_KEYSTORE_PASSWORD_FILE=/home/cert/password.txt\n"})})})]}),"\n",(0,r.jsx)(t.p,{children:"Text file containing the password to unlock the keystore file."}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-keystore-type",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-keystore-type"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-type=<TYPE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-keystore-type=JKS\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_KEYSTORE_TYPE=JKS\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["Keystore type that allows TLS for P2P communication. Valid options are ",(0,r.jsx)(t.code,{children:"JKS"}),", ",(0,r.jsx)(t.code,{children:"PKCS11"}),", and ",(0,r.jsx)(t.code,{children:"PKCS12"}),". The default is ",(0,r.jsx)(t.code,{children:"JKS"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-truststore-file",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-truststore-file"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-file=<FILE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-file=/home/cert/truststore.jks\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_TRUSTSTORE_FILE=/home/cert/truststore.jks\n"})})})]}),"\n",(0,r.jsx)(t.p,{children:"Truststore containing the trusted certificates that allows TLS for P2P communication."}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-truststore-password-file",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-truststore-password-file"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-password-file=<FILE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-password-file=/home/cert/password.txt\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt\n"})})})]}),"\n",(0,r.jsx)(t.p,{children:"Text file containing the password to unlock the truststore file."}),"\n",(0,r.jsx)(t.h3,{id:"xp2p-tls-truststore-type",children:(0,r.jsx)(t.code,{children:"Xp2p-tls-truststore-type"})}),"\n",(0,r.jsxs)(n.A,{children:[(0,r.jsx)(a.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-type=<TYPE>\n"})})}),(0,r.jsx)(a.A,{value:"Example",label:"Example",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"--Xp2p-tls-truststore-type=JKS\n"})})}),(0,r.jsx)(a.A,{value:"Environment variable",label:"Environment variable",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"BESU_XP2P_TLS_TRUSTSTORE_TYPE=JKS\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["Truststore type. Valid options are ",(0,r.jsx)(t.code,{children:"JKS"}),", ",(0,r.jsx)(t.code,{children:"PKCS11"}),", and ",(0,r.jsx)(t.code,{children:"PKCS12"}),". The default is ",(0,r.jsx)(t.code,{children:"JKS"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19365:(e,t,s)=>{s.d(t,{A:()=>a});s(96540);var r=s(18215);const l={tabItem:"tabItem_Ymn6"};var n=s(74848);function a(e){let{children:t,hidden:s,className:a}=e;return(0,n.jsx)("div",{role:"tabpanel",className:(0,r.A)(l.tabItem,a),hidden:s,children:t})}},11470:(e,t,s)=>{s.d(t,{A:()=>S});var r=s(96540),l=s(18215),n=s(23104),a=s(56347),i=s(205),o=s(57485),c=s(31682),d=s(70679);function p(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:t,children:s}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return p(e).map((e=>{let{props:{value:t,label:s,attributes:r,default:l}}=e;return{value:t,label:s,attributes:r,default:l}}))}(s);return function(e){const t=(0,c.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,s])}function h(e){let{value:t,tabValues:s}=e;return s.some((e=>e.value===t))}function x(e){let{queryString:t=!1,groupId:s}=e;const l=(0,a.W6)(),n=function(e){let{queryString:t=!1,groupId:s}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:t,groupId:s});return[(0,o.aZ)(n),(0,r.useCallback)((e=>{if(!n)return;const t=new URLSearchParams(l.location.search);t.set(n,e),l.replace({...l.location,search:t.toString()})}),[n,l])]}function f(e){const{defaultValue:t,queryString:s=!1,groupId:l}=e,n=u(e),[a,o]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!h({value:t,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:n}))),[c,p]=x({queryString:s,groupId:l}),[f,m]=function(e){let{groupId:t}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(t),[l,n]=(0,d.Dv)(s);return[l,(0,r.useCallback)((e=>{s&&n.set(e)}),[s,n])]}({groupId:l}),j=(()=>{const e=c??f;return h({value:e,tabValues:n})?e:null})();(0,i.A)((()=>{j&&o(j)}),[j]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:n}))throw new Error(`Can't select invalid tab value=${e}`);o(e),p(e),m(e)}),[p,m,n]),tabValues:n}}var m=s(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=s(74848);function v(e){let{className:t,block:s,selectedValue:r,selectValue:a,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,n.a_)(),d=e=>{const t=e.currentTarget,s=o.indexOf(t),l=i[s].value;l!==r&&(c(t),a(l))},p=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;t=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;t=o[s]??o[o.length-1];break}}t?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.A)("tabs",{"tabs--block":s},t),children:i.map((e=>{let{value:t,label:s,attributes:n}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>o.push(e),onKeyDown:p,onClick:d,...n,className:(0,l.A)("tabs__item",j.tabItem,n?.className,{"tabs__item--active":r===t}),children:s??t},t)}))})}function g(e){let{lazy:t,children:s,selectedValue:n}=e;const a=(Array.isArray(s)?s:[s]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:(0,l.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function y(e){const t=f(e);return(0,b.jsxs)("div",{className:(0,l.A)("tabs-container",j.tabList),children:[(0,b.jsx)(v,{...t,...e}),(0,b.jsx)(g,{...t,...e})]})}function S(e){const t=(0,m.A)();return(0,b.jsx)(y,{...e,children:p(e.children)},String(t))}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var r=s(96540);const l={},n=r.createContext(l);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/84b35613.46c0e03d.js b/assets/js/84b35613.46c0e03d.js new file mode 100644 index 00000000000..1de77af7dd1 --- /dev/null +++ b/assets/js/84b35613.46c0e03d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2559],{49475:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=o(74848),s=o(28453);const t={description:"Troubleshoot poor performance and resource constraints.",sidebar_label:"Troubleshoot performance",sidebar_position:3,tags:["public networks"]},i="Troubleshoot poor performance and resource constraints",a={id:"public-networks/how-to/troubleshoot/performance",title:"Troubleshoot poor performance and resource constraints",description:"Troubleshoot poor performance and resource constraints.",source:"@site/docs/public-networks/how-to/troubleshoot/performance.md",sourceDirName:"public-networks/how-to/troubleshoot",slug:"/public-networks/how-to/troubleshoot/performance",permalink:"/public-networks/how-to/troubleshoot/performance",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/troubleshoot/performance.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{description:"Troubleshoot poor performance and resource constraints.",sidebar_label:"Troubleshoot performance",sidebar_position:3,tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Trace transactions",permalink:"/public-networks/how-to/troubleshoot/trace-transactions"},next:{title:"Troubleshoot peering",permalink:"/public-networks/how-to/troubleshoot/peering"}},c={},l=[];function u(e){const n={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"troubleshoot-poor-performance-and-resource-constraints",children:"Troubleshoot poor performance and resource constraints"})}),"\n",(0,r.jsxs)(n.p,{children:["Your hardware, machine environment, and node configuration can affect your node's ability to serve\nrequests and perform ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"validator duties"}),", including\n",(0,r.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/attestations",children:"attestation performance"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you notice high resource usage when ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/monitor/",children:"monitoring your node"}),", you can\ntry the following suggestions:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Disable swapping.\nBesu is an I/O intensive application, especially during sync, enabling swapping hurts Besu's performance.\nYou can disable swap at the OS level.\n",(0,r.jsx)(n.a,{href:"https://www.tecmint.com/disable-swap-partition/",children:"This article"})," provides information on how to\ndisable swap (and caveats)."]}),"\n",(0,r.jsx)(n.li,{children:"Use a high performance SSD disk with NVMe, since Besu's performance bottleneck is often slow disk I/O."}),"\n",(0,r.jsxs)(n.li,{children:["Configure memory and RAM:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["If you have RAM constraints, use ",(0,r.jsx)(n.a,{href:"/public-networks/get-started/system-requirements",children:"OpenJ9"})," if you're\nrunning on ",(0,r.jsx)(n.code,{children:"x86_64"})," Linux architecture to reduce memory usage."]}),"\n",(0,r.jsxs)(n.li,{children:["Review and change your ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/configure-java/manage-memory",children:"Java heap size"})," if necessary.\n5GB is an appropriate limit.\nHigher values may improve sync time, but can be reduced after completing sync."]}),"\n",(0,r.jsxs)(n.li,{children:["Ensure Besu is using ",(0,r.jsx)(n.a,{href:"/public-networks/get-started/install/binary-distribution",children:"jemalloc"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["If you have 32GB RAM or more, set the ",(0,r.jsx)(n.code,{children:"Xplugin-rocksdb-high-spec-enabled"})," configuration option\nto ",(0,r.jsx)(n.code,{children:"true"}),".\nDon't use this on RAM machines with 16GB RAM or less if you're running a consensus client on the\nsame hardware."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["If you're running on ARM64, make sure the glibc version is greater than 2.29.\nIf not, Besu uses a Java implementation instead of the native one for some precompiled contracts,\nwhich results in lower performance.","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["On Ubuntu, run ",(0,r.jsx)(n.code,{children:"ldd --version"}),".\nSee ",(0,r.jsx)(n.a,{href:"https://dev.to/0xbf/how-to-get-glibc-version-c-lang-26he",children:"the methods for other environments"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"Pay attention to what processes are running on the same machine/VM as Besu.\nJava applications, with default settings, are designed to run alone on the machine.\nYou can run your consensus client on the same machine, but this adds overhead on Besu, and vice\nversa (on CPU cache misses, CPU scheduler latency, IO, etc.)."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"You should continue to monitor your node after following these suggestions."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>a});var r=o(96540);const s={},t=r.createContext(s);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8635.9e01011f.js b/assets/js/8635.9e01011f.js new file mode 100644 index 00000000000..6474926393f --- /dev/null +++ b/assets/js/8635.9e01011f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8635],{18635:(e,t,l)=>{l.d(t,{diagram:()=>u});var n=l(63626),a=l(26312),o=l(697),i=l(99702),s=l(35364);l(74353),l(16750),l(42838),l(21176),l(14075);const d=e=>i.e.sanitizeText(e,(0,i.c)());let r={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const c=function(e,t,l,n,a){const o=Object.keys(e);i.l.info("keys:",o),i.l.info(e),o.filter((t=>e[t].parent==a)).forEach((function(l){var o,s;const r=e[l],c=r.cssClasses.join(" "),b=(0,i.k)(r.styles),p=r.label??r.id,u={labelStyle:b.labelStyle,shape:"class_box",labelText:d(p),classData:r,rx:0,ry:0,class:c,style:b.style,id:r.id,domId:r.domId,tooltip:n.db.getTooltip(r.id,a)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,u),a&&t.setParent(r.id,a),i.l.info("setNode",u)}))};function b(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){r={...r,...e}},draw:async function(e,t,l,n){i.l.info("Drawing class - ",t);const p=(0,i.c)().flowchart??(0,i.c)().class,u=(0,i.c)().securityLevel;i.l.info("config:",p);const f=(null==p?void 0:p.nodeSpacing)??50,y=(null==p?void 0:p.rankSpacing)??50,g=new o.T({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:f,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getNamespaces(),v=n.db.getClasses(),w=n.db.getRelations(),k=n.db.getNotes();let x;i.l.info(w),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(a){var o,s;const r=e[a],b={shape:"rect",id:r.id,domId:r.domId,labelText:d(r.id),labelStyle:"",style:"fill: none; stroke: black",padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,b),c(r.classes,t,l,n,r.id),i.l.info("setNode",b)}))}(h,g,t,n),c(v,g,t,n),function(e,t){const l=(0,i.c)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:`id_${e.id1}_${e.id2}_${n}`,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:b(e.relation.type1),arrowTypeEnd:b(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,i.n)(null==l?void 0:l.curve,a.lUB)};if(i.l.info(s,e),void 0!==e.style){const t=(0,i.k)(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.c)().flowchart)?void 0:o.htmlLabels)??(0,i.c)().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)}))}(w,g),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,c;const b=e,p="",u="",f=b.text,y={labelStyle:p,shape:"note",labelText:d(f),noteData:b,rx:0,ry:0,class:"",style:u,id:b.id,domId:b.id,tooltip:"",type:"note",padding:(null==(s=(0,i.c)().flowchart)?void 0:s.padding)??(null==(c=(0,i.c)().class)?void 0:c.padding)};if(t.setNode(b.id,y),i.l.info("setNode",y),!b.class||!(b.class in n))return;const g=l+o,h={id:`edgeNote${g}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,i.n)(r.curve,a.lUB)};t.setEdge(b.id,b.class,h,g)}))}(k,g,w.length+1,v),"sandbox"===u&&(x=(0,a.Ltv)("#i"+t));const m="sandbox"===u?(0,a.Ltv)(x.nodes()[0].contentDocument.body):(0,a.Ltv)("body"),T=m.select(`[id="${t}"]`),S=m.select("#"+t+" g");if(await(0,s.r)(S,g,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),i.u.insertTitle(T,"classTitleText",(null==p?void 0:p.titleTopMargin)??5,n.db.getDiagramTitle()),(0,i.o)(g,T,null==p?void 0:p.diagramPadding,null==p?void 0:p.useMaxWidth),!(null==p?void 0:p.htmlLabels)){const e="sandbox"===u?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)}}}},u={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/87114070.258aec83.js b/assets/js/87114070.258aec83.js new file mode 100644 index 00000000000..0a1b8ea081c --- /dev/null +++ b/assets/js/87114070.258aec83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1975],{16528:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var i=s(74848),d=s(28453);const o={title:"Node keys",sidebar_position:9,description:"Learn about node public and private keys, and the node address.",tags:["public networks","private networks"]},t="Node keys and node address",r={id:"public-networks/concepts/node-keys",title:"Node keys",description:"Learn about node public and private keys, and the node address.",source:"@site/docs/public-networks/concepts/node-keys.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/node-keys",permalink:"/public-networks/concepts/node-keys",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/node-keys.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:9,frontMatter:{title:"Node keys",sidebar_position:9,description:"Learn about node public and private keys, and the node address.",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Genesis file",permalink:"/public-networks/concepts/genesis-file"},next:{title:"Tutorials",permalink:"/public-networks/tutorials"}},c={},a=[{value:"Node private key",id:"node-private-key",level:2},{value:"Node public key",id:"node-public-key",level:2},{value:"Node address",id:"node-address",level:2},{value:"Specify a custom node private key file",id:"specify-a-custom-node-private-key-file",level:2},{value:"Enode URL",id:"enode-url",level:2},{value:"Domain name support",id:"domain-name-support",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,d.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"node-keys-and-node-address",children:"Node keys and node address"})}),"\n",(0,i.jsx)(n.p,{children:"Each node has a private and public key pair, and a node address. Besu uses the private and public key pair to sign and verify transactions, and the node address as an identifier for the node."}),"\n",(0,i.jsx)(n.h2,{id:"node-private-key",children:"Node private key"}),"\n",(0,i.jsxs)(n.p,{children:["When starting Besu, if the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,i.jsx)(n.code,{children:"--node-private-key-file"})})," option is not specified and a ",(0,i.jsx)(n.code,{children:"key"})," file does not exist in the data directory for the node, Besu generates a node private key and writes it to the ",(0,i.jsx)(n.code,{children:"key"})," file."]}),"\n",(0,i.jsxs)(n.p,{children:["If a ",(0,i.jsx)(n.code,{children:"key"})," file does exist in the data directory when starting Besu, the node starts using the private key in the ",(0,i.jsx)(n.code,{children:"key"})," file."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The private key is not encrypted."})}),"\n",(0,i.jsx)(n.h2,{id:"node-public-key",children:"Node public key"}),"\n",(0,i.jsx)(n.p,{children:"The node public key displays in the log after starting Besu. Also referred to as the node ID, the node public key forms part of the enode URL of a node."}),"\n",(0,i.jsxs)(n.p,{children:["You can export the node public key, either to standard output or to a specified file, using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands#public-key",children:(0,i.jsx)(n.code,{children:"public-key export"})})," subcommand."]}),"\n",(0,i.jsx)(n.h2,{id:"node-address",children:"Node address"}),"\n",(0,i.jsx)(n.p,{children:"Besu generates the node address by creating a hash of the node public key and using the last 20 bytes of the hash as the node address. It is also displayed in the logs after starting Besu."}),"\n",(0,i.jsxs)(n.p,{children:["You can export the node address, either to standard output or to a specified file, using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands#public-key",children:(0,i.jsx)(n.code,{children:"public-key export-address"})})," subcommand."]}),"\n",(0,i.jsx)(n.h2,{id:"specify-a-custom-node-private-key-file",children:"Specify a custom node private key file"}),"\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,i.jsx)(n.code,{children:"--node-private-key-file"})})," option to specify a custom ",(0,i.jsx)(n.code,{children:"key"})," file in any location."]}),"\n",(0,i.jsxs)(n.p,{children:["If the ",(0,i.jsx)(n.code,{children:"key"})," file exists, the node starts with the private key in the ",(0,i.jsx)(n.code,{children:"key"})," file. If the ",(0,i.jsx)(n.code,{children:"key"})," file does not exist, Besu generates a node private key and writes it to the ",(0,i.jsx)(n.code,{children:"key"})," file."]}),"\n",(0,i.jsxs)(n.p,{children:["For example, the following command either reads the node private key from ",(0,i.jsx)(n.code,{children:"privatekeyfile"})," or writes a generated private key to ",(0,i.jsx)(n.code,{children:"privatekeyfile"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'besu --node-private-key-file="/Users/username/privatekeyfile"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"enode-url",children:"Enode URL"}),"\n",(0,i.jsxs)(n.p,{children:["The enode URL identifies a node. For example, the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,i.jsx)(n.code,{children:"--bootnodes"})})," option and the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#admin_addpeer",children:(0,i.jsx)(n.code,{children:"admin_addPeer"})})," method specify nodes by the enode URL."]}),"\n",(0,i.jsxs)(n.p,{children:["The enode URL format is ",(0,i.jsx)(n.code,{children:"enode://<id>@<host:port>[?discport=<port>]"})," where:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"<id>"})," is the node public key, excluding the initial 0x."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"<host:port>"})," is the host and TCP port the bootnode is listening on for P2P discovery. Specify the host and TCP port using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,i.jsx)(n.code,{children:"--p2p-host"})})," and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,i.jsx)(n.code,{children:"--p2p-port"})})," options. The default host is ",(0,i.jsx)(n.code,{children:"127.0.0.1"})," and the default port is ",(0,i.jsx)(n.code,{children:"30303"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Standard Ethereum enode URLs allow hostnames as IP addresses only, however Besu provides ",(0,i.jsx)(n.a,{href:"#domain-name-support",children:"domain name support"})," in private permissioned networks."]})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If the TCP listening and UDP discovery ports differ, the UDP port is specified as query parameter ",(0,i.jsx)(n.code,{children:"discport"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsxs)(n.p,{children:["If the node public key is ",(0,i.jsx)(n.code,{children:"0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f"}),", the host is ",(0,i.jsx)(n.code,{children:"10.3.58.6"}),", the TCP listening port is ",(0,i.jsx)(n.code,{children:"30303"}),", and the UDP discovery port is ",(0,i.jsx)(n.code,{children:"30301"}),", then the enode URL is ",(0,i.jsx)(n.code,{children:"enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@10.3.58.6:30303?discport=30301"})]}),(0,i.jsxs)(n.p,{children:["If the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,i.jsx)(n.code,{children:"--p2p-host"})})," or ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,i.jsx)(n.code,{children:"--p2p-port"})})," options are not specified and the node public key is ",(0,i.jsx)(n.code,{children:"0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f"}),", then the enode URL is ",(0,i.jsx)(n.code,{children:"enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303"})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The enode URL displays when starting a Besu node. Use the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#net_enode",children:(0,i.jsx)(n.code,{children:"net_enode"})})," JSON-RPC API method to get the enode URL of the node."]}),"\n",(0,i.jsxs)(n.p,{children:["The enode advertised to other nodes during discovery is the external IP address and port, as defined by ",(0,i.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,i.jsx)(n.code,{children:"--nat-method"})}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"domain-name-support",children:"Domain name support"}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsxs)(n.p,{children:["Enode URL domain name support is an early access feature that you can use in private ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/permissioning/",children:"permissioned networks"})," only."]})}),"\n",(0,i.jsx)(n.p,{children:"To use domain names in enode URLs:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Configure DNS reverse lookup."}),"\n",(0,i.jsxs)(n.li,{children:["Enable DNS support using the early access option ",(0,i.jsx)(n.code,{children:"--Xdns-enabled"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",metastring:'title="Example enode URL using a domain name"',children:"enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@mydomain.dev.example.net:30301\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If deploying Besu using Kubernetes in private permissioned networks, use the ",(0,i.jsx)(n.code,{children:"--Xdns-enabled"})," and ",(0,i.jsx)(n.code,{children:"--Xdns-update-enabled"})," options to ensure that Besu can connect to a container after restarting even if the IP address of the container changes."]}),(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#xhelp",children:(0,i.jsx)(n.code,{children:"--Xhelp"})})," command line option to view early access options and their descriptions."]})]}),"\n",(0,i.jsxs)(n.p,{children:["If nodes are not connecting as expected, set the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#admin_changeloglevel",children:"log level to TRACE"})," to help troubleshoot the issue."]})]})}function p(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>r});var i=s(96540);const d={},o=i.createContext(d);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8810.8e349140.js b/assets/js/8810.8e349140.js new file mode 100644 index 00000000000..7cdb3ba6ddd --- /dev/null +++ b/assets/js/8810.8e349140.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8810],{10646:(e,t,n)=>{n.d(t,{H:()=>l});var r=n(82933);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.AV(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}},82933:(e,t,n)=>{n.d(t,{AV:()=>c,De:()=>o,c$:()=>p,gh:()=>a,nh:()=>d});var r=n(34963),l=n(89610);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.A(n)){var o=n.transition;if(l.A(o))return o(e)}return e}},75937:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(72453),l=n(74886);const o=(e,t)=>r.A.lang.round(l.A.parse(e)[t])},88810:(e,t,n)=>{n.d(t,{diagram:()=>i});var r=n(32548),l=(n(697),n(26312));n(99702),n(48585),n(23068),n(8058),n(21176),n(82933);n(10646);n(5664),n(91395);n(81942);l.lUB;var o=n(65382);n(74353),n(16750),n(42838),n(14075);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")}}},65382:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(697),l=n(26312),o=n(99702),a=n(35364),s=n(10646),i=n(75937),c=n(25582);const d={},p=async function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`),c=Object.keys(e);for(const d of c){const n=e[d];let r="default";n.classes.length>0&&(r=n.classes.join(" ")),r+=" flowchart-label";const c=(0,o.k)(n.styles);let p,b=void 0!==n.text?n.text:n.id;if(o.l.info("vertex",n,n.labelType),"markdown"===n.labelType)o.l.info("vertex",n,n.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b};p=(0,s.H)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",c.labelStyle.replace("color:","fill:"));const t=b.split(o.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)}p=e}let w=0,f="";switch(n.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}const u=await(0,o.r)(b,(0,o.c)());t.setNode(n.id,{labelStyle:c.labelStyle,shape:f,labelText:u,labelType:n.labelType,rx:w,ry:w,class:r,style:c.style,id:n.id,link:n.link,linkTarget:n.linkTarget,tooltip:a.db.getTooltip(n.id)||"",domId:a.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,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:c.labelStyle,labelType:n.labelType,shape:f,labelText:u,rx:w,ry:w,class:r,style:c.style,id:n.id,domId:a.db.lookUpDomId(n.id),width:"group"===n.type?500:void 0,type:n.type,dir:n.dir,props:n.props,padding:(0,o.c)().flowchart.padding})}},b=async function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}for(const c of e){s++;const n="L-"+c.start+"-"+c.end;void 0===i[n]?(i[n]=0,o.l.info("abc78 new entry",n,i[n])):(i[n]++,o.l.info("abc78 new entry",n,i[n]));let p=n+"-"+i[n];o.l.info("abc78 new link id to be used is",n,p,i[n]);const b="LS-"+c.start,w="LE-"+c.end,f={style:"",labelStyle:""};switch(f.minlen=c.length||1,"arrow_open"===c.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",c.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(c.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==c.style){const e=(0,o.k)(c.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==c.interpolate?f.curve=(0,o.n)(c.interpolate,l.lUB):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.lUB):f.curve=(0,o.n)(d.curve,l.lUB),void 0===c.text?void 0!==c.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=c.labelType,f.label=await(0,o.r)(c.text.replace(o.e.lineBreakRegex,"\n"),(0,o.c)()),void 0===c.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(c.start,c.end,f,s)}},w={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){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ltv)("#i"+t));const h="sandbox"===c?(0,l.Ltv)(u.nodes()[0].contentDocument.body):(0,l.Ltv)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.T({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.Ubm)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}await p(v,y,t,h,g,s),await b(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.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(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ltv)("#"+t+' [id="'+e+'"]');if(r){const e=g.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"===c?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()}))}}}))}},f=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 .katex path {\n fill: #000;\n stroke: #000;\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: ${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 /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.A,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.A(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \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/88771ea1.3718db6e.js b/assets/js/88771ea1.3718db6e.js new file mode 100644 index 00000000000..b2b36acb98e --- /dev/null +++ b/assets/js/88771ea1.3718db6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4265],{73703:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var n=r(74848),o=r(28453);const i={title:"Use Quorum Hibernate",sidebar_position:4,description:"Use Quorum Hibernate with Besu",tags:["private networks"]},s="Use Quorum Hibernate",a={id:"private-networks/how-to/monitor/quorum-hibernate",title:"Use Quorum Hibernate",description:"Use Quorum Hibernate with Besu",source:"@site/docs/private-networks/how-to/monitor/quorum-hibernate.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/quorum-hibernate",permalink:"/private-networks/how-to/monitor/quorum-hibernate",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/quorum-hibernate.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Use Quorum Hibernate",sidebar_position:4,description:"Use Quorum Hibernate with Besu",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Elastic Stack",permalink:"/private-networks/how-to/monitor/elastic-stack"},next:{title:"Use Splunk",permalink:"/private-networks/how-to/monitor/splunk"}},u={},c=[];function h(e){const t={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"use-quorum-hibernate",children:"Use Quorum Hibernate"})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-hibernate",children:"Quorum Hibernate"})," is a proxy that monitors a node's API traffic and hibernates the node when inactive. This reduces infrastructure costs by ensuring only nodes receiving API requests or nodes required to establish consensus are running."]}),"\n",(0,n.jsx)(t.p,{children:"Quorum Hibernate wakes up hibernating nodes:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"When a new transaction or API request is received."}),"\n",(0,n.jsx)(t.li,{children:"To allow it to periodically sync with the network."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>a});var n=r(96540);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/887b6037.03b4e162.js b/assets/js/887b6037.03b4e162.js new file mode 100644 index 00000000000..02f7910b2f2 --- /dev/null +++ b/assets/js/887b6037.03b4e162.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4068],{22751:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var o=t(74848),r=t(28453),a=t(11470),s=t(19365);const i={title:"Add and remove validators without voting",description:"How to add or remove validators without voting",sidebar_position:5,tags:["private networks"]},l="Add and remove validators without voting",c={id:"private-networks/how-to/configure/consensus/add-validators-without-voting",title:"Add and remove validators without voting",description:"How to add or remove validators without voting",source:"@site/docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md",sourceDirName:"private-networks/how-to/configure/consensus",slug:"/private-networks/how-to/configure/consensus/add-validators-without-voting",permalink:"/private-networks/how-to/configure/consensus/add-validators-without-voting",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Add and remove validators without voting",description:"How to add or remove validators without voting",sidebar_position:5,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Clique",permalink:"/private-networks/how-to/configure/consensus/clique"},next:{title:"Free gas network",permalink:"/private-networks/how-to/configure/free-gas"}},d={},u=[{value:"Override smart contract validators",id:"override-smart-contract-validators",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"add-and-remove-validators-without-voting",children:"Add and remove validators without voting"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," or ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," network conditions might not allow voting to change validators. For example, if a majority of the current validators are no longer participating in the network, a vote to add or remove validators won't be successful. You can bypass voting and specify new validators using a transition in the genesis file."]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["In most cases, add or remove validators ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators",children:"by voting or smart contract for QBFT"}),"; or ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"by voting for IBFT 2.0"}),". Use transitions only when voting isn't possible. Using transitions requires coordinating a rolling update of all the nodes in order to pick up the configuration at the correct block height. Using transitions also leaves the validator overrides permanently in your genesis configuration."]}),"\n",(0,o.jsx)(n.li,{children:"Transitions are a Besu-specific feature. If you run a mixed-client QBFT network, you can't use transitions to change the validators."}),"\n"]})}),"\n",(0,o.jsx)(n.p,{children:"To add or remove validators without voting:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the genesis file, add the ",(0,o.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<BlockNumber>"})," is the upcoming block at which to change validators."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<ValidatorAddressX> ... <ValidatorAddressZ>"})," are strings representing the account addresses of the validators after ",(0,o.jsx)(n.code,{children:"<BlockNumber>"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(a.A,{children:[(0,o.jsx)(s.A,{value:"QBFT syntax",label:"QBFT syntax",default:!0,children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "qbft": [\n {\n "block": <BlockNumber>,\n "validators": [\n <ValidatorAddressX>,\n ...\n <ValidatorAddressZ>\n ]\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,o.jsx)(s.A,{value:"QBFT example",label:"QBFT example",children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "qbft": [\n {\n "block": 25,\n "validators": [\n "0x372a70ace72b02cc7f1757183f98c620254f9c8d",\n "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n ]\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,o.jsx)(s.A,{value:"IBFT 2.0 syntax",children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "ibft2": [\n {\n "block": <BlockNumber>,\n "validators": [\n <ValidatorAddressX>,\n ...\n <ValidatorAddressZ>\n ]\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,o.jsx)(s.A,{value:"IBFT 2.0 example",children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "ibft2": [\n {\n "block": 25,\n "validators": [\n "0x372a70ace72b02cc7f1757183f98c620254f9c8d",\n "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n ]\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["To verify the changes after the transition block, call ",(0,o.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_getvalidatorsbyblocknumber",children:(0,o.jsx)(n.code,{children:"qbft_getValidatorsByBlockNumber"})})," or ",(0,o.jsx)(n.a,{href:"/private-networks/reference/api/#ibft_getvalidatorsbyblocknumber",children:(0,o.jsx)(n.code,{children:"ibft_getValidatorsByBlockNumber"})}),", specifying ",(0,o.jsx)(n.code,{children:"latest"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"caution",children:[(0,o.jsx)(n.p,{children:"Don't specify a transition block in the past."}),(0,o.jsx)(n.p,{children:"Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork."})]}),"\n",(0,o.jsx)(n.h2,{id:"override-smart-contract-validators",children:"Override smart contract validators"}),"\n",(0,o.jsxs)(n.p,{children:["When using ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators-using-a-smart-contract",children:"QBFT contract validator selection"}),", if network conditions require it, you can bypass the smart contract and specify new validators in the genesis file. For example, you lose quorum for your current list of contract validators, and you can't perform a transaction to vote more in."]}),"\n",(0,o.jsxs)(n.p,{children:["This requires temporarily ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#swap-validator-management-methods",children:"switching to block header validator selection mode"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"To bypass the smart contract and specify new validators:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the genesis file, add a ",(0,o.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<BlockNumber>"})," is the upcoming block at which to change validators."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<SelectionMode>"})," is the validator selection mode to switch to. In this case we'll switch to the ",(0,o.jsx)(n.code,{children:"blockheader"})," mode temporarily."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<ValidatorAddressX> ... <ValidatorAddressZ>"})," are strings representing the account addresses of the validators after ",(0,o.jsx)(n.code,{children:"<BlockNumber>"}),". These validators only need to be sufficient to progress the chain and allow a new contract to be deployed."]}),"\n"]}),"\n",(0,o.jsxs)(a.A,{children:[(0,o.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4,\n "validatorcontractaddress": "0x0000000000000000000000000000000000007777"\n },\n "transitions": {\n "qbft": [\n {\n "block": <BlockNumber>,\n "validatorselectionmode": <SelectionMode>,\n "validators": [\n <ValidatorAddressX>,\n ...\n <ValidatorAddressZ>\n ]\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,o.jsx)(s.A,{value:"Example",label:"Example",children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4,\n "validatorcontractaddress": "0x0000000000000000000000000000000000007777"\n },\n "transitions": {\n "qbft": [\n {\n "block": 2555,\n "validatorselectionmode": "blockheader",\n "validators": [\n "0x372a70ace72b02cc7f1757183f98c620254f9c8d",\n "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n ]\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Deploy a new contract to the blockchain containing the desired list of validators."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the genesis file, add another ",(0,o.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<BlockNumber>"})," is the upcoming block at which to change validators."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<SelectionMode>"})," is the validator selection mode to switch to. In this case we'll switch to ",(0,o.jsx)(n.code,{children:"contract"})," mode."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.code,{children:"<NewValidatorContractAddress>"})," is the address of the new smart contract."]}),"\n"]}),"\n",(0,o.jsxs)(a.A,{children:[(0,o.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4,\n \u201cvalidatorcontractaddress\u201d: \u201c0x0000000000000000000000000000000000007777\u201d\n },\n "transitions": {\n "qbft": [\n {\n "block": 2555,\n "validatorselectionmode": "blockheader",\n "validators": [\n "0x372a70ace72b02cc7f1757183f98c620254f9c8d",\n "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n ]\n },\n {\n "block": <BlockNumber>,\n "validatorselectionmode": <SelectionMode>,\n "validatorcontractaddress": <NewValidatorContractAddress>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,o.jsx)(s.A,{value:"Example",label:"Example",children:(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4,\n "validatorcontractaddress": "0x0000000000000000000000000000000000007777"\n },\n "transitions": {\n "qbft": [\n {\n "block": 2555,\n "validatorselectionmode": "blockheader",\n "validators": [\n "0x372a70ace72b02cc7f1757183f98c620254f9c8d",\n "0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb"\n ]\n },\n {\n "block": 2755,\n "validatorselectionmode": "contract",\n "validatorcontractaddress": "0x0000000000000000000000000000000000009999"\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed."}),"\n"]}),"\n"]})]})}function f(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>s});t(96540);var o=t(18215);const r={tabItem:"tabItem_Ymn6"};var a=t(74848);function s(e){let{children:n,hidden:t,className:s}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,o.A)(r.tabItem,s),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>k});var o=t(96540),r=t(18215),a=t(23104),s=t(56347),i=t(205),l=t(57485),c=t(31682),d=t(70679);function u(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:o,default:r}}=e;return{value:n,label:t,attributes:o,default:r}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function f(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,s.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(a),(0,o.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=h(e),[s,l]=(0,o.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!f({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:a}))),[c,u]=p({queryString:t,groupId:r}),[b,v]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,d.Dv)(t);return[r,(0,o.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),m=(()=>{const e=c??b;return f({value:e,tabValues:a})?e:null})();(0,i.A)((()=>{m&&l(m)}),[m]);return{selectedValue:s,selectValue:(0,o.useCallback)((e=>{if(!f({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),v(e)}),[u,v,a]),tabValues:a}}var v=t(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(74848);function x(e){let{className:n,block:t,selectedValue:o,selectValue:s,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),r=i[t].value;r!==o&&(c(n),s(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:o===n?0:-1,"aria-selected":o===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...a,className:(0,r.A)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":o===n}),children:t??n},n)}))})}function j(e){let{lazy:n,children:t,selectedValue:a}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===a));return e?(0,o.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function w(e){const n=b(e);return(0,g.jsxs)("div",{className:(0,r.A)("tabs-container",m.tabList),children:[(0,g.jsx)(x,{...n,...e}),(0,g.jsx)(j,{...n,...e})]})}function k(e){const n=(0,v.A)();return(0,g.jsx)(w,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>i});var o=t(96540);const r={},a=o.createContext(r);function s(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88996aea.b118aeda.js b/assets/js/88996aea.b118aeda.js new file mode 100644 index 00000000000..7b748bd6136 --- /dev/null +++ b/assets/js/88996aea.b118aeda.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7952],{77410:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=r(74848),i=r(28453);const a={title:"Sample load balancer configurations",sidebar_position:1,description:"Sample load balancers",tags:["public networks","private networks"]},s="Sample load balancer configurations",o={id:"public-networks/how-to/configure-ha/sample-configuration",title:"Sample load balancer configurations",description:"Sample load balancers",source:"@site/docs/public-networks/how-to/configure-ha/sample-configuration.md",sourceDirName:"public-networks/how-to/configure-ha",slug:"/public-networks/how-to/configure-ha/sample-configuration",permalink:"/public-networks/how-to/configure-ha/sample-configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-ha/sample-configuration.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Sample load balancer configurations",sidebar_position:1,description:"Sample load balancers",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"High availability of JSON-RPC and RPC Pub/Sub APIs",permalink:"/public-networks/how-to/configure-ha/"},next:{title:"Install and update Java",permalink:"/public-networks/how-to/configure-java/install-update-java"}},c={},l=[{value:"AWS",id:"aws",level:2},{value:"HTTPS redirection",id:"https-redirection",level:3},{value:"Elastic Kubernetes Service",id:"elastic-kubernetes-service",level:2},{value:"Manual configurations",id:"manual-configurations",level:2},{value:"HTTPS redirection",id:"https-redirection-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"sample-load-balancer-configurations",children:"Sample load balancer configurations"})}),"\n",(0,t.jsx)(n.h2,{id:"aws",children:"AWS"}),"\n",(0,t.jsxs)(n.p,{children:["For AWS, we recommend the Classic Load Balancer. The Classic Load Balancer is the easiest to configure and work with. Register the Besu instances to the load balancer and use the ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#readiness-and-liveness-endpoints",children:"liveness endpoint"})," for health checks."]}),"\n",(0,t.jsx)(n.p,{children:"For finer grain control, use the Application Load Balancer:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Configure one target group with n nodes."}),"\n",(0,t.jsxs)(n.li,{children:["Configure multiple listeners with one per port (for example, ",(0,t.jsx)(n.code,{children:"30303"}),", ",(0,t.jsx)(n.code,{children:"8545"}),") you are using and route to the target group."]}),"\n",(0,t.jsxs)(n.li,{children:["Use the ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#readiness-and-liveness-endpoints",children:"liveness endpoint"})," for health checks."]}),"\n",(0,t.jsx)(n.li,{children:"Register the Besu instances multiple times with different ports. This is like configuring microservices on Elastic Container Service (ECS) or Elastic Kubernetes Service (EKS)."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"https-redirection",children:"HTTPS redirection"}),"\n",(0,t.jsx)(n.p,{children:"With either AWS load balancer, you can add certificates using ACM (Amazon Certificate Manager), add them to the load balancers, and redirect all HTTP calls to HTTPS."}),"\n",(0,t.jsx)(n.h2,{id:"elastic-kubernetes-service",children:"Elastic Kubernetes Service"}),"\n",(0,t.jsx)(n.p,{children:"For Elastic Kubernetes Service (AWS Kubernetes service) use the same load balancer configuration as when running nodes in Kubernetes. Use labels to specify nodes for the load balanced group."}),"\n",(0,t.jsx)(n.h2,{id:"manual-configurations",children:"Manual configurations"}),"\n",(0,t.jsx)(n.p,{children:"Where applicable, we strongly recommend using service discovery. That is, pair your load balancer configuration with something that dynamically detects new nodes and removed failed nodes."}),"\n",(0,t.jsx)(n.p,{children:"For Nginx, use multiple upstreams (one for each port). Pair each upstream with a separate server block."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-conf",metastring:'title="Upstreams paired with server blocks"',children:"upstream discovery_tcp_30303 {\n server 10.0.1.1:30303;\n server 10.0.1.2:30303;\n}\n\nupstream rpc_tcp_8545 {\n server 10.0.1.1:8545;\n server 10.0.1.2:8545;\n}\n\nserver {\n listen 30303;\n server_name some.host;\n location / {\n proxy_pass http://discovery_tcp_30303;\n }\n}\n\nserver {\n listen 8545;\n server_name some.host;\n location / {\n proxy_pass http://rpc_tcp_8545;\n }\n}\n...\n"})}),"\n",(0,t.jsx)(n.p,{children:"For HAProxy, create multiple backend and frontend sets."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",metastring:'title="Multiple backend and frontend sets"',children:"frontend discovery-tcp-30303\n bind *:30303\n acl ...\n ...\n default_backend back-discovery-tcp-30303\n\nfrontend rpc-tcp-8545\n bind *:8545\n acl ...\n ...\n default_backend back-rpc-tcp-8545\n\nbackend back-discovery-tcp-30303\n balance leastconn\n server node-01 10.0.1.1:30303 weight 1 check\n server node-02 10.0.1.2:30303 weight 1 check\n option ...\n timeout server 600s\n\nbackend back-rpc-tcp-8545\n balance leastconn\n server node-01 10.0.1.1:8545 weight 1 check\n server node-02 10.0.1.2:8545 weight 1 check\n option ....\n timeout server 600s\n...\n"})}),"\n",(0,t.jsx)(n.h3,{id:"https-redirection-1",children:"HTTPS redirection"}),"\n",(0,t.jsx)(n.p,{children:"To add HTTPS capability, update the above server blocks to include the certificates and specific ciphers. If you require an HTTP to HTTPS redirection, add separate blocks to return a 301 code with the new URI."})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>o});var t=r(96540);const i={},a=t.createContext(i);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89f1fe89.bb340bbd.js b/assets/js/89f1fe89.bb340bbd.js new file mode 100644 index 00000000000..9af465bcb93 --- /dev/null +++ b/assets/js/89f1fe89.bb340bbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3623],{37971:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var s=t(74848),o=t(28453),a=t(11470),r=t(19365);const i={title:"Deploy charts",sidebar_position:3,description:"Deploying Besu Helm Charts for a Kubernetes cluster",tags:["private networks"]},l="Deploy charts",c={id:"private-networks/tutorials/kubernetes/charts",title:"Deploy charts",description:"Deploying Besu Helm Charts for a Kubernetes cluster",source:"@site/docs/private-networks/tutorials/kubernetes/charts.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/charts",permalink:"/private-networks/tutorials/kubernetes/charts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/charts.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Deploy charts",sidebar_position:3,description:"Deploying Besu Helm Charts for a Kubernetes cluster",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a cluster",permalink:"/private-networks/tutorials/kubernetes/cluster"},next:{title:"Use the Quorum Explorer",permalink:"/private-networks/tutorials/kubernetes/quorum-explorer"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Provision with Helm charts",id:"provision-with-helm-charts",level:2},{value:"1. Check that you can connect to the cluster with <code>kubectl</code>",id:"1-check-that-you-can-connect-to-the-cluster-with-kubectl",level:3},{value:"2. Create the namespace",id:"2-create-the-namespace",level:3},{value:"3. Deploy the monitoring chart",id:"3-deploy-the-monitoring-chart",level:3},{value:"4. Deploy the genesis chart",id:"4-deploy-the-genesis-chart",level:3},{value:"5. Deploy the bootnodes",id:"5-deploy-the-bootnodes",level:3},{value:"6. Deploy the validators",id:"6-deploy-the-validators",level:3},{value:"7. Add/Remove additional validators to the validator pool",id:"7-addremove-additional-validators-to-the-validator-pool",level:3},{value:"8. Deploy RPC or Transaction nodes",id:"8-deploy-rpc-or-transaction-nodes",level:3},{value:"9. Connect to the node from your local machine via an ingress",id:"9-connect-to-the-node-from-your-local-machine-via-an-ingress",level:3},{value:"10. Blockchain explorer",id:"10-blockchain-explorer",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"deploy-charts",children:"Deploy charts"})}),"\n",(0,s.jsx)(n.p,{children:"You can deploy Besu Helm charts for a Kubernetes cluster."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Clone the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository"]}),"\n",(0,s.jsxs)(n.li,{children:["A ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"running Kubernetes cluster"})]}),"\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://kubernetes.io/docs/tasks/tools/",children:"Kubectl"})]}),"\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm3"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"provision-with-helm-charts",children:"Provision with Helm charts"}),"\n",(0,s.jsxs)(n.p,{children:["Helm is a method of packaging a collection of objects into a chart which can then be deployed to the cluster. After you have cloned the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository, change the directory to ",(0,s.jsx)(n.code,{children:"helm"})," for the rest of this tutorial."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd helm\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Each helm chart has the following key-map values which you will need to set depending on your needs. The ",(0,s.jsx)(n.code,{children:"cluster.provider"})," is used as a key for the various cloud features enabled. Please specify only one cloud provider, not both. At present, the charts have full support for cloud native services in both AWS and Azure. Please note that if you use GCP, IBM etc please set ",(0,s.jsx)(n.code,{children:"cluster.provider: local"})," and set ",(0,s.jsx)(n.code,{children:"cluster.cloudNativeServices: false"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Please update the ",(0,s.jsx)(n.code,{children:"aws"})," or ",(0,s.jsx)(n.code,{children:"azure"})," map as shown below if you deploy to either cloud provider."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cluster:\n provider: local # choose from: local | aws | azure\n cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure)\n reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted\n\nquorumFlags:\n privacy: false\n removeKeysOnDelete: false\n\naws:\n # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name\n serviceAccountName: quorum-node-secrets-sa\n # the region you are deploying to\n region: ap-southeast-2\n\nazure:\n # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name\n identityName: quorum-pod-identity\n # the clientId of the user assigned managed identity created in the template\n identityClientId: azure-clientId\n keyvaultName: azure-keyvault\n # the tenant ID of the key vault\n tenantId: azure-tenantId\n # the subscription ID to use - this needs to be set explicitly when using multi tenancy\n subscriptionId: azure-subscriptionId\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Setting the ",(0,s.jsx)(n.code,{children:"cluster.cloudNativeServices: true"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Stores keys in Azure Key Vault or AWS Secrets Manager."}),"\n",(0,s.jsx)(n.li,{children:"Uses Azure Managed Identities or AWS Identity and Access Management for pod identity access."}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"You can customize any of the charts in this repository to suit your requirements, and make pull requests to extend functionality."})}),"\n",(0,s.jsxs)(n.h3,{id:"1-check-that-you-can-connect-to-the-cluster-with-kubectl",children:["1. Check that you can connect to the cluster with ",(0,s.jsx)(n.code,{children:"kubectl"})]}),"\n",(0,s.jsx)(n.p,{children:"Verify kubectl is connected to cluster using: (use the latest version)"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl version\n"})}),"\n",(0,s.jsx)(n.p,{children:"The result looks similar to:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}\nServer Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"2-create-the-namespace",children:"2. Create the namespace"}),"\n",(0,s.jsx)(n.p,{children:"This tutorial isolates groups of resources (for example, StatefulSets and Services) within a single cluster."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The rest of this tutorial uses ",(0,s.jsx)(n.code,{children:"besu"})," as the namespace, but you're free to pick any name when deploying, as long as it's consistent across the ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"infrastructure scripts"})," and charts."]})}),"\n",(0,s.jsx)(n.p,{children:"Run the following in a terminal window:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace besu\n"})}),"\n",(0,s.jsx)(n.h3,{id:"3-deploy-the-monitoring-chart",children:"3. Deploy the monitoring chart"}),"\n",(0,s.jsx)(n.p,{children:"This chart deploys Prometheus and Grafana to monitor the metrics of the cluster, nodes and state of the network."}),"\n",(0,s.jsxs)(n.p,{children:["Update the admin ",(0,s.jsx)(n.code,{children:"username"})," and ",(0,s.jsx)(n.code,{children:"password"})," in the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/monitoring.yml",children:"monitoring values file"}),". Configure alerts to the receiver of your choice (for example, email or Slack), then deploy the chart using:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\nhelm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --values ./values/monitoring.yml --wait\nkubectl --namespace besu apply -f ./values/monitoring/\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Metrics are collected via a ",(0,s.jsx)(n.a,{href:"https://github.com/prometheus-operator/prometheus-operator/blob/7c77626e5e270a2530e187b185d45eeed8a773bf/Documentation/user-guides/getting-started.md",children:"ServiceMonitor"})," that scrapes each Besu pod, using given ",(0,s.jsx)(n.a,{href:"https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/",children:(0,s.jsx)(n.code,{children:"annotations"})})," which specify the port and path to use. For example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:' template:\n metadata:\n annotations:\n prometheus.io/scrape: "true"\n prometheus.io/port: 9545\n prometheus.io/path: "/metrics"\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["For production use cases, configure Grafana with one of the supported ",(0,s.jsx)(n.a,{href:"https://grafana.com/docs/grafana/latest/auth/",children:"native auth mechanisms"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-metrics",src:t(2828).A+"",width:"1918",height:"943"})}),"\n",(0,s.jsxs)(n.p,{children:["Optionally you can also deploy the ",(0,s.jsx)(n.a,{href:"https://www.elastic.co/elastic-stack/",children:"Elastic Stack"})," to view logs (and metrics)."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm repo add elastic https://helm.elastic.co\nhelm repo update\n# if on cloud\nhelm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml\n# if local - set the replicas to 1\nhelm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1\nhelm install kibana --version 7.17.1 elastic/kibana --namespace quorum --values ./values/kibana.yml\nhelm install filebeat --version 7.17.1 elastic/filebeat --namespace quorum --values ./values/filebeat.yml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If you install ",(0,s.jsx)(n.code,{children:"filebeat"}),", please create a ",(0,s.jsx)(n.code,{children:"filebeat-*"})," index pattern in ",(0,s.jsx)(n.code,{children:"kibana"}),". All the logs from the nodes are sent to the ",(0,s.jsx)(n.code,{children:"filebeat"})," index. If you use The Elastic stack for logs and metrics, please deploy ",(0,s.jsx)(n.code,{children:"metricbeat"})," in a similar manner to ",(0,s.jsx)(n.code,{children:"filebeat"})," and create an index pattern in Kibana."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-elastic",src:t(46973).A+"",width:"1919",height:"937"})}),"\n",(0,s.jsx)(n.p,{children:"To connect to Kibana or Grafana, we also need to deploy an ingress so you can access your monitoring endpoints publicly. We use Nginx as our ingress here, and you are free to configure any ingress per your requirements."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx\nhelm repo update\nhelm install quorum-monitoring-ingress ingress-nginx/ingress-nginx \\\n --namespace quorum \\\n --set controller.ingressClassResource.name="monitoring-nginx" \\\n --set controller.ingressClassResource.controllerValue="k8s.io/monitoring-ingress-nginx" \\\n --set controller.replicaCount=1 \\\n --set controller.nodeSelector."kubernetes\\.io/os"=linux \\\n --set defaultBackend.nodeSelector."kubernetes\\.io/os"=linux \\\n --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\\.io/os"=linux \\\n --set controller.service.externalTrafficPolicy=Local\n\nkubectl apply -f ../ingress/ingress-rules-monitoring.yml\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Once complete, view the IP address listed under the ",(0,s.jsx)(n.code,{children:"Ingress"})," section if you're using the Kubernetes Dashboard or on the command line ",(0,s.jsx)(n.code,{children:"kubectl -n quorum get services quorum-monitoring-ingress-ingress-nginx-controller"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["We refer to the ingress here as ",(0,s.jsx)(n.code,{children:"external-nginx"})," because it deals with monitoring endpoints specifically. We also deploy a second ingress called ",(0,s.jsx)(n.code,{children:"network-ingress"})," which is for the blockchain nodes only in ",(0,s.jsx)(n.a,{href:"#9-connect-to-the-node-from-your-local-machine-via-an-ingress",children:"step 8"})]})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-ingress-external",src:t(47019).A+"",width:"1902",height:"899"})}),"\n",(0,s.jsx)(n.p,{children:"You can view the Besu dashboard by going to:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"http://<INGRESS_IP>/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can view the Kibana dashboard (if deployed) by going to:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"http://<INGRESS_IP>/kibana\n"})}),"\n",(0,s.jsx)(n.h3,{id:"4-deploy-the-genesis-chart",children:"4. Deploy the genesis chart"}),"\n",(0,s.jsx)(n.p,{children:"The genesis chart creates the genesis file and keys for the validators."}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["It's important to keep the release names of the initial validator pool as per this tutorial, that is ",(0,s.jsx)(n.code,{children:"validator-n"}),", where ",(0,s.jsx)(n.code,{children:"n"})," is the node number. Any validators created after the initial pool can be named to anything you like."]})}),"\n",(0,s.jsxs)(n.p,{children:["The override ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/genesis-besu.yml",children:"values.yml"})," looks like below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"---\nquorumFlags:\n removeGenesisOnDelete: true\n\ncluster:\n provider: local # choose from: local | aws | azure\n cloudNativeServices: false\n\naws:\n # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name\n serviceAccountName: quorum-node-secrets-sa\n # the region you are deploying to\n region: ap-southeast-2\n\nazure:\n # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name\n identityName: quorum-pod-identity\n # the clientId of the user assigned managed identity created in the template\n identityClientId: azure-clientId\n keyvaultName: azure-keyvault\n # the tenant ID of the key vault\n tenantId: azure-tenantId\n # the subscription ID to use - this needs to be set explicitly when using multi tenancy\n subscriptionId: azure-subscriptionId\n\n# the raw Genesis config\n# rawGenesisConfig.blockchain.nodes set the number of validators/signers\nrawGenesisConfig:\n genesis:\n config:\n chainId: 1337\n algorithm:\n consensus: qbft # choose from: ibft2 | qbft | clique\n blockperiodseconds: 10\n epochlength: 30000\n requesttimeoutseconds: 20\n gasLimit: '0x47b760'\n difficulty: '0x1'\n coinbase: '0x0000000000000000000000000000000000000000'\n blockchain:\n nodes:\n generate: true\n count: 4\n accountPassword: 'password'\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Please set the ",(0,s.jsx)(n.code,{children:"aws"}),", ",(0,s.jsx)(n.code,{children:"azure"})," and ",(0,s.jsx)(n.code,{children:"cluster"})," keys are as per the ",(0,s.jsx)(n.a,{href:"#provision-with-helm-charts",children:"Provisioning"})," step. ",(0,s.jsx)(n.code,{children:"quorumFlags.removeGenesisOnDelete: true"})," tells the chart to delete the genesis file when the chart is deleted. If you may wish to retain the genesis on deletion, please set that value to ",(0,s.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The last config item is ",(0,s.jsx)(n.code,{children:"rawGenesisConfig"})," which has details of the chain you are creating, please edit any of the parameters in there to match your requirements. To set the number of initial validators set the ",(0,s.jsx)(n.code,{children:"rawGenesisConfig.blockchain.nodes"})," to the number that you'd like. We recommend using the Byzantine formula of ",(0,s.jsx)(n.code,{children:"N=3F+1"})," when setting the number of validators."]}),"\n",(0,s.jsxs)(n.p,{children:["One more thing to note is that when ",(0,s.jsx)(n.code,{children:"cluster.cloudNativeServices: true"})," is set, the genesis job will not add the ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"Quickstart"})," test accounts into the genesis file."]}),"\n",(0,s.jsx)(n.p,{children:"When you are ready deploy the chart with :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd helm\nhelm install genesis ./charts/besu-genesis --namespace besu --create-namespace --values ./values/genesis-besu.yml\n"})}),"\n",(0,s.jsx)(n.p,{children:"Once completed, view the genesis and enodes (the list of static nodes) configuration maps that every Besu node uses, and the validator and bootnode node keys as secrets."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-genesis-configmaps",src:t(10066).A+"",width:"1910",height:"416"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-genesis-secrets",src:t(44931).A+"",width:"1906",height:"789"})}),"\n",(0,s.jsx)(n.h3,{id:"5-deploy-the-bootnodes",children:"5. Deploy the bootnodes"}),"\n",(0,s.jsxs)(n.p,{children:["This is an optional but recommended step. In a production setup we recommend the use of two ore more bootnodes for best practices. Each Besu node has a map that tells the StatefulSet what to deploy and how to clean up. The default ",(0,s.jsx)(n.code,{children:"values.yml"})," for the StatefulSet define the following flags which are present in all the override values files."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"---\nquorumFlags:\n privacy: false\n removeKeysOnDelete: true\n isBootnode: true # set this to true if this node is a bootnode\n usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster\n\ncluster:\n provider: local # choose from: local | aws | azure\n cloudNativeServices: false\n reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted\n\naws:\n # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name\n serviceAccountName: quorum-node-secrets-sa\n # the region you are deploying to\n region: ap-southeast-2\n\nazure:\n # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name\n identityName: quorum-pod-identity\n # the clientId of the user assigned managed identity created in the template\n identityClientId: azure-clientId\n keyvaultName: azure-keyvault\n # the tenant ID of the key vault\n tenantId: azure-tenantId\n # the subscription ID to use - this needs to be set explicitly when using multi tenancy\n subscriptionId: azure-subscriptionId\n\nnode:\n besu:\n metrics:\n serviceMonitorEnabled: true\n resources:\n cpuLimit: 1\n cpuRequest: 0.1\n memLimit: \"2G\"\n memRequest: \"1G\"\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Please set the ",(0,s.jsx)(n.code,{children:"aws"}),", ",(0,s.jsx)(n.code,{children:"azure"})," and ",(0,s.jsx)(n.code,{children:"cluster"})," keys are as per the ",(0,s.jsx)(n.a,{href:"#provision-with-helm-charts",children:"Provisioning"})," step. ",(0,s.jsx)(n.code,{children:"quorumFlags.removeKeysOnDelete: true"})," tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to ",(0,s.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For the bootnodes only, set the ",(0,s.jsx)(n.code,{children:"quorumFlags.isBootnode: true"}),". When using bootnodes you have to also set ",(0,s.jsx)(n.code,{children:"quorumFlags.usesBootnodes: true"})," to indicate that all nodes on the network will use these bootnodes."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you use bootnodes, you must set ",(0,s.jsx)(n.code,{children:"quorumFlags.usesBootnodes: true"})," in the override values.yaml for every other node type, that is validators.yaml, txnode.yaml and reader.yaml"]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm install bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml\nhelm install bootnode-2 ./charts/besu-node --namespace besu --values ./values/bootnode.yml\n"})}),"\n",(0,s.jsx)(n.p,{children:"Once complete, you see two StatefulSets, and the two bootnodes discover themselves and peer. Because there are no validators present yet, there are no blocks created, as seen in the following logs."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-bootnode-logs",src:t(49140).A+"",width:"1909",height:"782"})}),"\n",(0,s.jsx)(n.h3,{id:"6-deploy-the-validators",children:"6. Deploy the validators"}),"\n",(0,s.jsx)(n.p,{children:"The validators peer with the bootnodes and themselves, and when a majority of the validators have peered, blocks are proposed and created on the chain."}),"\n",(0,s.jsxs)(n.p,{children:["These are the next set of nodes that we will deploy. The charts use four validators (default) to replicate best practices for a network. The override ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/validator.yml",children:"values.yml"})," for the StatefulSet looks like below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"---\nquorumFlags:\n privacy: false\n removeKeysOnDelete: false\n isBootnode: false # set this to true if this node is a bootnode\n usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Please set the ",(0,s.jsx)(n.code,{children:"aws"}),", ",(0,s.jsx)(n.code,{children:"azure"})," and ",(0,s.jsx)(n.code,{children:"cluster"})," keys are as per the ",(0,s.jsx)(n.a,{href:"#provision-with-helm-charts",children:"Provisioning"})," step. ",(0,s.jsx)(n.code,{children:"quorumFlags.removeKeysOnDelete: true"})," tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to ",(0,s.jsx)(n.code,{children:"false"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Please note that if you delete a majority of the validators, the network will halt. Additionally, if the validator keys are deleted you may not be able to recover as you need a majority of the validators up to vote to add new validators into the pool"})}),"\n",(0,s.jsxs)(n.p,{children:["When using bootnodes (if deployed in the previous step) you have to also set ",(0,s.jsx)(n.code,{children:"quorumFlags.usesBootnodes: true"})," to indicate that all nodes on the network will use these bootnodes."]}),"\n",(0,s.jsxs)(n.p,{children:["For the initial validator pool we set all the node flags to ",(0,s.jsx)(n.code,{children:"false"})," and then deploy."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm install validator-1 ./charts/besu-node --namespace besu --values ./values/validator.yml\nhelm install validator-2 ./charts/besu-node --namespace besu --values ./values/validator.yml\nhelm install validator-3 ./charts/besu-node --namespace besu --values ./values/validator.yml\nhelm install validator-4 ./charts/besu-node --namespace besu --values ./values/validator.yml\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["It's important to keep the release names of the validators the same as it is tied to the keys that the genesis chart creates. So we use ",(0,s.jsx)(n.code,{children:"validator-1"}),", ",(0,s.jsx)(n.code,{children:"validator-2"}),", etc. in the following command."]})}),"\n",(0,s.jsx)(n.p,{children:"Once completed, you may need to give the validators a few minutes to peer and for round changes, depending on when the first validator was spun up, before the logs display blocks being created."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-validator-logs",src:t(97588).A+"",width:"1904",height:"853"})}),"\n",(0,s.jsx)(n.h3,{id:"7-addremove-additional-validators-to-the-validator-pool",children:"7. Add/Remove additional validators to the validator pool"}),"\n",(0,s.jsxs)(n.p,{children:["To add (or remove) more validators to the initial validator pool, you need to deploy a node such as an RPC node (step 8) and then ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"vote"})," that node in. The vote API call must be made on a majority of the existing pool and the new node will then become a validator."]}),"\n",(0,s.jsxs)(n.p,{children:["Please refer to the ",(0,s.jsx)(n.a,{href:"#9-connect-to-the-node-from-your-local-machine-via-an-ingress",children:"Ingress Section"})," for details on making the API calls from your local machine or equivalent."]}),"\n",(0,s.jsx)(n.h3,{id:"8-deploy-rpc-or-transaction-nodes",children:"8. Deploy RPC or Transaction nodes"}),"\n",(0,s.jsxs)(n.p,{children:["An RPC node is simply a node that can be used to make public transactions or perform read heavy operations such as when connected to a chain explorer like ",(0,s.jsx)(n.a,{href:"https://github.com/blockscout/blockscout",children:"BlockScout"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The RPC override ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/reader.yml",children:"values.yml"})," for the StatefulSet looks identical to that of the validators above, and will create it's own node keys before the node starts."]}),"\n",(0,s.jsx)(n.p,{children:"To deploy an RPC node:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm install rpc-1 ./charts/besu-node --namespace besu --values ./values/reader.yml\n"})}),"\n",(0,s.jsx)(n.p,{children:"A Transaction or Member node in turn is one which has an accompanying Private Transaction Manager, such as Tessera; which allow you to make private transactions between nodes."}),"\n",(0,s.jsxs)(n.p,{children:["The Transaction override ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/txnode.yml",children:"values.yml"})," for the StatefulSet looks identical to that of the validators above and only has ",(0,s.jsx)(n.code,{children:"quorumFlags.privacy: true"})," to indicate that it is deploying a pair of GoQuorum and Tessera nodes."]}),"\n",(0,s.jsx)(n.p,{children:"To deploy a Transaction or Member node:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm install member-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Logs for ",(0,s.jsx)(n.code,{children:"member-1"})," resemble the following for Tessera:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-tx-tessera-logs",src:t(21780).A+"",width:"1951",height:"602"})}),"\n",(0,s.jsx)(n.p,{children:"Logs for Besu resemble the following:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-tx-Besu-logs",src:t(23396).A+"",width:"1951",height:"605"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["In these examples we use ",(0,s.jsx)(n.code,{children:"member-1"})," and ",(0,s.jsx)(n.code,{children:"rpc-1"})," as release names for the deployments. You can pick any release name that you'd like to use in place of those as per your requirements."]})}),"\n",(0,s.jsx)(n.h3,{id:"9-connect-to-the-node-from-your-local-machine-via-an-ingress",children:"9. Connect to the node from your local machine via an ingress"}),"\n",(0,s.jsxs)(n.p,{children:["In order to view the Grafana dashboards or connect to the nodes to make transactions from your local machine you can deploy an ingress controller with rules. We use the ",(0,s.jsx)(n.code,{children:"ingress-nginx"})," ingress controller which can be deployed as follows:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx\nhelm repo update\nhelm install quorum-network-ingress ingress-nginx/ingress-nginx \\\n --namespace quorum \\\n --set controller.ingressClassResource.name="network-nginx" \\\n --set controller.ingressClassResource.controllerValue="k8s.io/network-ingress-nginx" \\\n --set controller.replicaCount=1 \\\n --set controller.nodeSelector."kubernetes\\.io/os"=linux \\\n --set defaultBackend.nodeSelector."kubernetes\\.io/os"=linux \\\n --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\\.io/os"=linux \\\n --set controller.service.externalTrafficPolicy=Local\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/ingress/ingress-rules-besu.yml",children:"pre-defined rules"})," to test functionality, and alter to suit your requirements (for example, restrict access for API calls to trusted CIDR blocks)."]}),"\n",(0,s.jsxs)(n.p,{children:["Edit the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/ingress/ingress-rules-besu.yml",children:"rules"})," file so that the service names match your release name. In the example, we deployed a transaction node with the release name ",(0,s.jsx)(n.code,{children:"member-1"})," so the corresponding service is called ",(0,s.jsx)(n.code,{children:"besu-node-member-1"}),". Once you have settings that match your deployments, deploy the rules as follows:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl apply -f ../ingress/ingress-rules-besu.yml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Once complete, view the IP address listed under the ",(0,s.jsx)(n.code,{children:"Ingress"})," section if you're using the Kubernetes Dashboard or on the command line ",(0,s.jsx)(n.code,{children:"kubectl -n quorum get services quorum-network-ingress-ingress-nginx-controller"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-ingress",src:t(47019).A+"",width:"1902",height:"899"})}),"\n",(0,s.jsx)(n.p,{children:"The following is an example RPC call, which confirms that the node running the JSON-RPC service is syncing:"}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(r.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -v -X POST -H "Content-Type: application/json" --data \'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}\' http://<INGRESS_IP>/rpc\n'})})}),(0,s.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x4e9"\n}\n'})})})]}),"\n",(0,s.jsx)(n.h3,{id:"10-blockchain-explorer",children:"10. Blockchain explorer"}),"\n",(0,s.jsxs)(n.p,{children:["You can deploy ",(0,s.jsx)(n.a,{href:"https://github.com/blockscout/blockscout",children:"BlockScout"})," to aid with monitoring the blockchain. To do this, update the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/blockscout-besu.yml",children:"BlockScout values file"})," and set the ",(0,s.jsx)(n.code,{children:"database"})," and ",(0,s.jsx)(n.code,{children:"secret_key_base"})," values."]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.p,{children:["Changes to the database requires changes to both the ",(0,s.jsx)(n.code,{children:"database"})," and the ",(0,s.jsx)(n.code,{children:"blockscout"})," dictionaries."]})}),"\n",(0,s.jsx)(n.p,{children:"Once completed, deploy the chart using:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm dependency update ./charts/blockscout\nhelm install blockscout ./charts/blockscout --namespace quorum --values ./values/blockscout-goquorum.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can optionally deploy the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-explorer",children:"Quorum-Explorer"})," as a lightweight blockchain explorer. The Quorum Explorer is not recommended for use in production and is intended for demonstration or Development purposes only. The Explorer can give an overview over the whole network, such as querying each node on the network for node or block information, voting (add/remove) validators from the network, demonstrating a SimpleStorage smart contract with privacy enabled, and sending transactions between wallets as you would do in MetaMask. Please see the ",(0,s.jsx)(n.a,{href:"/private-networks/tutorials/kubernetes/quorum-explorer",children:"Explorer"})," page for details on how to use the application."]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"The accounts listed in the file below are for test purposes only and should not be used on a production network."})}),"\n",(0,s.jsxs)(n.p,{children:["To deploy the application, update the ",(0,s.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/explorer-besu.yaml",children:"Explorer values file"})," with details of your nodes and endpoints and then deploy."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm install quorum-explorer ./charts/explorer --namespace besu --values ./values/explorer-besu.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You will also need deploy the ingress (if not already done in ",(0,s.jsx)(n.a,{href:"#3-deploy-the-monitoring-chart",children:"Monitoring"})," to access the endpoint on ",(0,s.jsx)(n.code,{children:"http://<INGRESS_IP>/explorer"})]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"k8s-explorer",src:t(88591).A+"",width:"1917",height:"944"})})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>r});t(96540);var s=t(18215);const o={tabItem:"tabItem_Ymn6"};var a=t(74848);function r(e){let{children:n,hidden:t,className:r}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.A)(o.tabItem,r),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>k});var s=t(96540),o=t(18215),a=t(23104),r=t(56347),i=t(205),l=t(57485),c=t(31682),d=t(70679);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:o}}=e;return{value:n,label:t,attributes:s,default:o}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const o=(0,r.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(o.location.search);n.set(a,e),o.replace({...o.location,search:n.toString()})}),[a,o])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:o}=e,a=u(e),[r,l]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,h]=m({queryString:t,groupId:o}),[b,g]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[o,a]=(0,d.Dv)(t);return[o,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:o}),f=(()=>{const e=c??b;return p({value:e,tabValues:a})?e:null})();(0,i.A)((()=>{f&&l(f)}),[f]);return{selectedValue:r,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),g(e)}),[h,g,a]),tabValues:a}}var g=t(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=t(74848);function v(e){let{className:n,block:t,selectedValue:s,selectValue:r,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),o=i[t].value;o!==s&&(c(n),r(o))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...a,className:(0,o.A)("tabs__item",f.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function y(e){let{lazy:n,children:t,selectedValue:a}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function j(e){const n=b(e);return(0,x.jsxs)("div",{className:(0,o.A)("tabs-container",f.tabList),children:[(0,x.jsx)(v,{...n,...e}),(0,x.jsx)(y,{...n,...e})]})}function k(e){const n=(0,g.A)();return(0,x.jsx)(j,{...e,children:h(e.children)},String(n))}},44931:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kuberenetes-genesis-secrets-01ce3f7990b79414bad9ca1178d66700.png"},49140:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-bootnode-logs-01c0c7d459650185e6acb4f897ef0973.png"},46973:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-elastic-77850ddd9691a3c8f64bd625d3af3a4d.png"},88591:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-explorer-41af1feb005383ef1871e47d4792c3b5.png"},10066:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-genesis-configmaps-829bdeea072f7fadfe9c440cceff33fd.png"},2828:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-grafana-f5b7e488c30e4bbacde6f0fba682e0a2.png"},47019:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-ingress-ip-12a419bfc4a14aa9dee58168f8dc012b.png"},23396:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-tx-Besu-logs-86e44cf39e1bad7a0760e75e04663f8e.png"},21780:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-tx-tessera-logs-9dc3ebbea91d127a6279fe8fe8e3edcc.png"},97588:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/kubernetes-validator-logs-85c883d2e1a7e2addc592ab2f3fc62a4.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>i});var s=t(96540);const o={},a=s.createContext(o);function r(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a886138.8a9eb2e0.js b/assets/js/8a886138.8a9eb2e0.js new file mode 100644 index 00000000000..51db4379240 --- /dev/null +++ b/assets/js/8a886138.8a9eb2e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4852],{93120:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>d});var o=t(74848),s=t(28453);const c={},i=void 0,r={id:"global/test_accounts",title:"test_accounts",description:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.",source:"@site/docs/global/test_accounts.md",sourceDirName:"global",slug:"/global/test_accounts",permalink:"/global/test_accounts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/test_accounts.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},a={},d=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(n.admonition,{type:"danger",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{children:(0,o.jsx)(n.strong,{children:"Do not use the test accounts on Ethereum Mainnet or any production network."})}),(0,o.jsx)(n.p,{children:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code."}),(0,o.jsx)(n.p,{children:"They are not secure and everyone can use them."}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud."})}),(0,o.jsx)(n.p,{children:"In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes."}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Always secure your Ethereum Mainnet and any production account properly."})}),(0,o.jsxs)(n.p,{children:["See for instance ",(0,o.jsx)(n.a,{href:"https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds",children:'MyCrypto "Protecting Yourself and Your Funds" guide'}),"."]})]}),"\n",(0,o.jsxs)(n.admonition,{type:"info",children:[(0,o.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 1 (address ',(0,o.jsx)(n.code,{children:"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"}),')"']}),(0,o.jsx)(n.p,{children:"Private key to copy :"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-text",children:"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\n"})}),(0,o.jsxs)(n.p,{children:["Initial balance : 200 Eth ",(0,o.jsx)(n.em,{children:"(200000000000000000000 Wei)"})]})]}),"\n",(0,o.jsxs)(n.admonition,{type:"info",children:[(0,o.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 2 (address ',(0,o.jsx)(n.code,{children:"0x627306090abaB3A6e1400e9345bC60c78a8BEf57"}),')"']}),(0,o.jsx)(n.p,{children:"Private key to copy :"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-text",children:"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\n"})}),(0,o.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,o.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]}),"\n",(0,o.jsxs)(n.admonition,{type:"info",children:[(0,o.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 3 (address ',(0,o.jsx)(n.code,{children:"0xf17f52151EbEF6C7334FAD080c5704D77216b732"}),')"']}),(0,o.jsx)(n.p,{children:"Private key to copy :"}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-text",children:"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\n"})}),(0,o.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,o.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>r});var o=t(96540);const s={},c=o.createContext(s);function i(e){const n=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8b137bfa.9dfb2f95.js b/assets/js/8b137bfa.9dfb2f95.js new file mode 100644 index 00000000000..b93d085552a --- /dev/null +++ b/assets/js/8b137bfa.9dfb2f95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7045,5327],{14311:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>i});var t=s(74848),r=s(28453);const a={},l=void 0,c={id:"global/postman",title:"postman",description:"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.",source:"@site/docs/global/postman.md",sourceDirName:"global",slug:"/global/postman",permalink:"/global/postman",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/postman.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},o={},i=[{value:"Run in Postman",id:"run-in-postman",level:4},{value:"Download collection",id:"download-collection",level:4}];function d(e){const n={a:"a",admonition:"admonition",h4:"h4",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(n.admonition,{title:"Besu JSON-RPC APIs documentation in Postman format",type:"info",children:[(0,t.jsxs)(n.p,{children:["View the ",(0,t.jsx)(n.a,{href:"https://www.postman.com/hyperledger/workspace/hyperledger-besu/collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8",children:"Besu JSON-RPC APIs documentation"})," in the Postman format and obtain example requests in multiple coding languages."]}),(0,t.jsx)(n.h4,{id:"run-in-postman",children:"Run in Postman"}),(0,t.jsx)(n.p,{children:"Click the following button to fork the collection and run requests directly on your local network."}),(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://god.gw.postman.com/run-collection/11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8?action=collection%2Ffork&collection-url=entityId%3D11610746-f334929f-c8c3-43ed-bb73-69a6f0d728d8%26entityType%3Dcollection%26workspaceId%3Dc4b60b6f-9f15-42d0-8327-7ebabca6f0fd#?env%5BBesu%20node%20on%20local%20host%5D=W3sia2V5IjoicnBjLWh0dHAtaG9zdCIsInZhbHVlIjoibG9jYWxob3N0IiwiZW5hYmxlZCI6ZmFsc2V9LHsia2V5IjoicnBjLWh0dHAtcG9ydCIsInZhbHVlIjoiODU0NSIsImVuYWJsZWQiOmZhbHNlfV0=",children:(0,t.jsx)(n.img,{src:"https://run.pstmn.io/button.svg",alt:"Run in Postman"})}),"."]}),(0,t.jsx)(n.h4,{id:"download-collection",children:"Download collection"}),(0,t.jsxs)(n.p,{children:["Alternatively you can ",(0,t.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:s(34705).A+"",children:"download the JSON collection file"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},69261:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>i,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>u});var t=s(74848),r=s(28453),a=s(14311),l=s(11470),c=s(19365);const o={title:"Use JSON-RPC over HTTP, WS, and IPC",sidebar_position:1,description:"How to access the Besu API using JSON-RPC",tags:["public networks","private networks"]},i="Use JSON-RPC over HTTP, WebSocket, and IPC",d={id:"public-networks/how-to/use-besu-api/json-rpc",title:"Use JSON-RPC over HTTP, WS, and IPC",description:"How to access the Besu API using JSON-RPC",source:"@site/docs/public-networks/how-to/use-besu-api/json-rpc.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/json-rpc",permalink:"/public-networks/how-to/use-besu-api/json-rpc",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/json-rpc.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use JSON-RPC over HTTP, WS, and IPC",sidebar_position:1,description:"How to access the Besu API using JSON-RPC",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Access the Besu API",permalink:"/public-networks/how-to/use-besu-api/"},next:{title:"Use RPC Pub/Sub over WS",permalink:"/public-networks/how-to/use-besu-api/rpc-pubsub"}},h={},u=[...a.toc,{value:"Geth console",id:"geth-console",level:2},{value:"JSON-RPC authentication",id:"json-rpc-authentication",level:2},{value:"HTTP and WebSocket requests",id:"http-and-websocket-requests",level:2},{value:"HTTP",id:"http",level:3},{value:"WebSocket",id:"websocket",level:3},{value:"Readiness and liveness endpoints",id:"readiness-and-liveness-endpoints",level:2},{value:"Readiness",id:"readiness",level:3},{value:"Liveness",id:"liveness",level:3},{value:"API methods enabled by default",id:"api-methods-enabled-by-default",level:2},{value:"Block parameter",id:"block-parameter",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"use-json-rpc-over-http-websocket-and-ipc",children:"Use JSON-RPC over HTTP, WebSocket, and IPC"})}),"\n",(0,t.jsx)(n.p,{children:"JSON-RPC APIs allow you to interact with your node. JSON-RPC endpoints are not enabled by default."}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"You should secure access to your node's JSON-RPC endpoints. Users with access to your node via JSON-RPC can make calls directly to your node, causing your node to consume resources."})}),"\n",(0,t.jsxs)(n.p,{children:["To enable JSON-RPC over HTTP or WebSocket, use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-enabled"})})," and ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-ws-enabled"})})," options."]}),"\n",(0,t.jsxs)(n.p,{children:["To enable JSON-RPC over an ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/#socket-path",children:"IPC socket"}),", use the ",(0,t.jsx)(n.code,{children:"--Xrpc-ipc-enabled"})," option."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"--Xrpc-ipc-enabled"})," is an early access option."]})}),"\n",(0,t.jsx)(a.default,{}),"\n",(0,t.jsx)(n.h2,{id:"geth-console",children:"Geth console"}),"\n",(0,t.jsx)(n.p,{children:"The geth console is a REPL (Read, Evaluate, & Print Loop) JavaScript console. Use JSON-RPC APIs supported by geth and Besu directly in the console."}),"\n",(0,t.jsx)(n.p,{children:"To use the geth console with Besu:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start Besu with the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-enabled"})})," or ",(0,t.jsx)(n.code,{children:"--Xrpc-ipc-enabled"})," option."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Specify which APIs to enable using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,t.jsx)(n.code,{children:"--Xrpc-ipc-api"})," option."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the geth console specifying the JSON-RPC endpoint:"}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"HTTP endpoint",label:"HTTP endpoint",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"geth attach http://localhost:8545\n"})})}),(0,t.jsx)(c.A,{value:"IPC endpoint",label:"IPC endpoint",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"geth attach /path/to/besu.ipc\n"})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use the geth console to call ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/",children:"JSON-RPC API methods"})," that geth and Besu share."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"eth.syncing\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"json-rpc-authentication",children:"JSON-RPC authentication"}),"\n",(0,t.jsxs)(n.p,{children:["Besu disables ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Authentication"})," by default."]}),"\n",(0,t.jsx)(n.h2,{id:"http-and-websocket-requests",children:"HTTP and WebSocket requests"}),"\n",(0,t.jsx)(n.h3,{id:"http",children:"HTTP"}),"\n",(0,t.jsxs)(n.p,{children:["To make RPC requests over HTTP, you can use ",(0,t.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:(0,t.jsx)(n.code,{children:"curl"})}),"."]}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","id":<request-ID>,"method":"<method-name>","params":[<method-parameters>]}\' <JSON-RPC-http-endpoint:port>\n'})})}),(0,t.jsx)(c.A,{value:"curl HTTP request",label:"curl HTTP request",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","id":"1","method":"eth_blockNumber","params":[]}\' http://127.0.0.1:8555\n'})})}),(0,t.jsx)(c.A,{value:"JSON result",label:"JSON result",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": "1",\n "result": "0x60e"\n}\n'})})})]}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.code,{children:"curl"})," to make multiple RPC requests (batch requests) over HTTP at the same time. Send the requests as an array, and receive an array of responses. The default number of allowed requests in a RPC batch request is ",(0,t.jsx)(n.code,{children:"1024"}),". Use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-max-batch-size",children:(0,t.jsx)(n.code,{children:"--rpc-http-max-batch-size"})})," command line option to update the default value."]}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'[{"jsonrpc":"2.0","id":"1","method":"eth_blockNumber","params":[]}, {"jsonrpc":"2.0","id":"2","method":"admin_peers","params":[]}]\' http://127.0.0.1:8555\n'})})}),(0,t.jsx)(c.A,{value:"JSON result",label:"JSON result",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "jsonrpc": "2.0",\n "id": "1",\n "result": "0x60e"\n },\n {\n "jsonrpc": "2.0",\n "id": "2",\n "result": []\n }\n]\n'})})})]}),"\n",(0,t.jsx)(n.h3,{id:"websocket",children:"WebSocket"}),"\n",(0,t.jsxs)(n.p,{children:["To make RPC requests over WebSocket, you can use ",(0,t.jsx)(n.a,{href:"https://github.com/websockets/wscat",children:(0,t.jsx)(n.code,{children:"wscat"})}),", a Node.js based command-line tool."]}),"\n",(0,t.jsxs)(n.p,{children:["First connect to the WebSocket server using ",(0,t.jsx)(n.code,{children:"wscat"})," (you only need to connect once per session):"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"wscat -c ws://<JSON-RPC-ws-endpoint:port>\n"})}),"\n",(0,t.jsx)(n.p,{children:"After you establish a connection, the terminal displays a '>' prompt. Send individual requests as a JSON data package at each prompt."}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","id":<request-ID>,"method":"<method-name>","params":[<method-parameters>]}\n'})})}),(0,t.jsx)(c.A,{value:"wscat WS request",label:"wscat WS request",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'{"jsonrpc":"2.0","id":"1","method":"eth_blockNumber","params":[]}\n'})})}),(0,t.jsx)(c.A,{value:"JSON result",label:"JSON result",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": "1",\n "result": "0x23"\n}\n'})})})]}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.code,{children:"wscat"})," to make multiple RPC requests over WebSocket at the same time. Send the requests as an array, and receive an array of responses."]}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"wscat WS request",label:"wscat WS request",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'[{"jsonrpc":"2.0","id":"1","method":"eth_blockNumber","params":[]}, {"jsonrpc":"2.0","id":"2","method":"admin_peers","params":[]}]\n'})})}),(0,t.jsx)(c.A,{value:"JSON result",label:"JSON result",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n {\n "jsonrpc": "2.0",\n "id": "1",\n "result": "0x23"\n },\n {\n "jsonrpc": "2.0",\n "id": "2",\n "result": []\n }\n]\n'})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"wscat"})," does not support headers. ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"Authentication"})," requires you to pass an authentication token in the request header. To use authentication with WebSocket, you need an app that supports headers."]})}),"\n",(0,t.jsx)(n.h2,{id:"readiness-and-liveness-endpoints",children:"Readiness and liveness endpoints"}),"\n",(0,t.jsxs)(n.p,{children:["Besu provides readiness and liveness endpoints to confirm the Besu node status. Both return a ",(0,t.jsx)(n.code,{children:"200 OK"})," status when ready or live and a ",(0,t.jsx)(n.code,{children:"503 Service Unavailable"})," status if not ready or live."]}),"\n",(0,t.jsx)(n.h3,{id:"readiness",children:"Readiness"}),"\n",(0,t.jsxs)(n.p,{children:["By default, the readiness check requires a connected peer and the node to be within two blocks of the best known block. If you have ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-enabled",children:"disabled P2P communication"}),", you do not need peers. A live node with P2P disabled is always ready."]}),"\n",(0,t.jsxs)(n.p,{children:["Use the query parameters ",(0,t.jsx)(n.code,{children:"minPeers"})," and ",(0,t.jsx)(n.code,{children:"maxBlocksBehind"})," to adjust the number of peers required and the number of blocks tolerance."]}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"Readiness endpoint",label:"Readiness endpoint",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"http://<JSON-RPC-HTTP-endpoint:port>/readiness\n"})})}),(0,t.jsx)(c.A,{value:"curl request example",label:"curl request example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -v 'http://localhost:8545/readiness'\n"})})}),(0,t.jsx)(c.A,{value:"Query parameters example",label:"Query parameters example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -v 'http://localhost:8545/readiness?minPeers=0&maxBlocksBehind=10'\n"})})})]}),"\n",(0,t.jsx)(n.h3,{id:"liveness",children:"Liveness"}),"\n",(0,t.jsxs)(n.p,{children:["The liveness check requires the JSON-RPC server to be up. You can use the endpoint to verify that the node can respond to RPC calls. The status in the response will always be ",(0,t.jsx)(n.code,{children:"UP"}),"."]}),"\n",(0,t.jsxs)(l.A,{children:[(0,t.jsx)(c.A,{value:"Liveness endpoint",label:"Liveness endpoint",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"http://<JSON-RPC-HTTP-endpoint:port>/liveness\n"})})}),(0,t.jsx)(c.A,{value:"curl request example",label:"curl request example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -v 'http://localhost:8545/liveness'\n"})})})]}),"\n",(0,t.jsx)(n.h2,{id:"api-methods-enabled-by-default",children:"API methods enabled by default"}),"\n",(0,t.jsxs)(n.p,{children:["Besu enables the ",(0,t.jsx)(n.code,{children:"ETH"}),", ",(0,t.jsx)(n.code,{children:"NET"}),", and ",(0,t.jsx)(n.code,{children:"WEB3"})," API methods by default."]}),"\n",(0,t.jsxs)(n.p,{children:["To enable the ",(0,t.jsx)(n.code,{children:"ADMIN"}),", ",(0,t.jsx)(n.code,{children:"CLIQUE"}),", ",(0,t.jsx)(n.code,{children:"DEBUG"}),", ",(0,t.jsx)(n.code,{children:"EEA"}),", ",(0,t.jsx)(n.code,{children:"IBFT"}),", ",(0,t.jsx)(n.code,{children:"MINER"}),", ",(0,t.jsx)(n.code,{children:"PERM"}),", ",(0,t.jsx)(n.code,{children:"PLUGINS"}),", ",(0,t.jsx)(n.code,{children:"PRIV"}),", ",(0,t.jsx)(n.code,{children:"TRACE"}),", and ",(0,t.jsx)(n.code,{children:"TXPOOL"})," API methods, use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(n.code,{children:"--rpc-http-api"})}),", ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,t.jsx)(n.code,{children:"--rpc-ws-api"})}),", or ",(0,t.jsx)(n.code,{children:"--Xrpc-ipc-api"})," options."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"--Xrpc-ipc-api"})," is an early access option."]})}),"\n",(0,t.jsx)(n.h2,{id:"block-parameter",children:"Block parameter"}),"\n",(0,t.jsxs)(n.p,{children:["When you make requests that might have different results depending on the block accessed, the block\nparameter specifies the block.\nMethods such as ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactionbyblocknumberandindex",children:(0,t.jsx)(n.code,{children:"eth_getTransactionByBlockNumberAndIndex"})}),"\nhave a block parameter."]}),"\n",(0,t.jsx)(n.p,{children:"The block parameter can have one of the following values:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"blockNumber"})," : ",(0,t.jsx)(n.em,{children:"quantity"})," - The block number, specified in hexadecimal or decimal.\n",(0,t.jsx)(n.code,{children:"0"})," represents the genesis block."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"blockHash"})," : ",(0,t.jsx)(n.em,{children:"string"})," or ",(0,t.jsx)(n.em,{children:"object"})," - 32-byte block hash or JSON object specifying the block hash.\nIf using a JSON object, you can specify ",(0,t.jsx)(n.code,{children:"requireCanonical"})," to indicate whether the block must be a\ncanonical block.\nSee ",(0,t.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/a2dedb0b2c7980cdc35db8eb4c094f2eb0dc7deb/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_getBalance_blockHashObjectCanonical.json",children:"this example"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"note",children:[(0,t.jsxs)(n.p,{children:["Only the following methods support the ",(0,t.jsx)(n.code,{children:"blockHash"})," parameter:"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_call",children:(0,t.jsx)(n.code,{children:"eth_call"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getbalance",children:(0,t.jsx)(n.code,{children:"eth_getBalance"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getcode",children:(0,t.jsx)(n.code,{children:"eth_getCode"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getproof",children:(0,t.jsx)(n.code,{children:"eth_getProof"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_getstorageat",children:(0,t.jsx)(n.code,{children:"eth_getStorageAt"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,t.jsx)(n.code,{children:"eth_getTransactionCount"})})}),"\n"]})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"earliest"})," : ",(0,t.jsx)(n.em,{children:"tag"})," - The earliest (genesis) block."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"latest"})," : ",(0,t.jsx)(n.em,{children:"tag"})," - The last block mined."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"pending"})," : ",(0,t.jsx)(n.em,{children:"tag"})," - When used with ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,t.jsx)(n.code,{children:"eth_getTransactionCount"})}),",\nrefers to the last block mined plus pending transactions.\nWhen used with ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_getvalidatorsbyblocknumber",children:(0,t.jsx)(n.code,{children:"qbft_getValidatorsByBlockNumber"})}),",\nreturns a list of validators that will be used to produce the next block."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"finalized"})," : ",(0,t.jsx)(n.em,{children:"tag"})," - The most recent crypto-economically secure block.\nIt cannot be reorganized outside manual intervention driven by community coordination."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"safe"})," : ",(0,t.jsx)(n.em,{children:"tag"})," - The most recent block that is safe from reorganization under honest majority and\ncertain synchronicity assumptions."]}),"\n"]}),"\n"]})]})}function b(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>l});s(96540);var t=s(18215);const r={tabItem:"tabItem_Ymn6"};var a=s(74848);function l(e){let{children:n,hidden:s,className:l}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,l),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>w});var t=s(96540),r=s(18215),a=s(23104),l=s(56347),c=s(205),o=s(57485),i=s(31682),d=s(70679);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:t,default:r}}=e;return{value:n,label:s,attributes:t,default:r}}))}(s);return function(e){const n=(0,i.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:s}=e;const r=(0,l.W6)(),a=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,o.aZ)(a),(0,t.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function j(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,a=u(e),[l,o]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=s.find((e=>e.default))??s[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:a}))),[i,h]=b({queryString:s,groupId:r}),[j,x]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,d.Dv)(s);return[r,(0,t.useCallback)((e=>{s&&a.set(e)}),[s,a])]}({groupId:r}),m=(()=>{const e=i??j;return p({value:e,tabValues:a})?e:null})();(0,c.A)((()=>{m&&o(m)}),[m]);return{selectedValue:l,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),x(e)}),[h,x,a]),tabValues:a}}var x=s(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=s(74848);function g(e){let{className:n,block:s,selectedValue:t,selectValue:l,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:i}=(0,a.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),r=c[s].value;r!==t&&(i(n),l(r))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;n=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;n=o[s]??o[o.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:a}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...a,className:(0,r.A)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":t===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:a}=e;const l=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===a));return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function k(e){const n=j(e);return(0,f.jsxs)("div",{className:(0,r.A)("tabs-container",m.tabList),children:[(0,f.jsx)(g,{...n,...e}),(0,f.jsx)(v,{...n,...e})]})}function w(e){const n=(0,x.A)();return(0,f.jsx)(k,{...e,children:h(e.children)},String(n))}},34705:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/files/postman_collection-53d58dda1f254764c957a43f3344607d.json"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>c});var t=s(96540);const r={},a=t.createContext(r);function l(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8b8c93ab.2009f544.js b/assets/js/8b8c93ab.2009f544.js new file mode 100644 index 00000000000..4a0af99cf42 --- /dev/null +++ b/assets/js/8b8c93ab.2009f544.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2735],{25119:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var i=t(74848),r=t(28453);const s={title:"Alternative elliptic curves",description:"Using alternative elliptic curves in Besu",sidebar_position:8,tags:["private networks"]},o="Configure alternative elliptic curves",c={id:"private-networks/how-to/configure/curves",title:"Alternative elliptic curves",description:"Using alternative elliptic curves in Besu",source:"@site/docs/private-networks/how-to/configure/curves.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/curves",permalink:"/private-networks/how-to/configure/curves",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/curves.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:8,frontMatter:{title:"Alternative elliptic curves",description:"Using alternative elliptic curves in Besu",sidebar_position:8,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Block proposal permissioning",permalink:"/private-networks/how-to/configure/block-proposal-permissioning"},next:{title:"Create and send transactions",permalink:"/private-networks/how-to/send-transactions/"}},a={},l=[];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"configure-alternative-elliptic-curves",children:"Configure alternative elliptic curves"})}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"Configuring alternative elliptic curves is an early access feature."})}),"\n",(0,i.jsxs)(n.p,{children:["By default, Besu uses the Ethereum standard ",(0,i.jsx)(n.code,{children:"secp256k1"})," elliptic curve (EC). However, when running nodes in a private network, it is possible to configure an alternative elliptic curve."]}),"\n",(0,i.jsxs)(n.p,{children:["The configuration for what elliptic curve Besu will use is done in the network configuration section of genesis file, using the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/genesis-items#Configuration_Items",children:(0,i.jsx)(n.code,{children:"ecCurve"})})," key:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'{\n "genesis": {\n "config": {\n "ecCurve": "secp256k1",\n [...]\n },\n [...]\n}\n'})}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"danger",children:(0,i.jsxs)(n.p,{children:["All nodes in the network ",(0,i.jsx)(n.strong,{children:"MUST"})," use the same elliptic curve. Nodes with different EC configuration from the network won't be able to send messages to other nodes or verify transactions and blocks."]})}),"\n",(0,i.jsx)(n.p,{children:"Besu supports the following elliptic curves:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"secp256k1"})," (Ethereum default)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"secp256r1"})}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var i=t(96540);const r={},s=i.createContext(r);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8c0ee333.86633b3b.js b/assets/js/8c0ee333.86633b3b.js new file mode 100644 index 00000000000..6cb1bf4909f --- /dev/null +++ b/assets/js/8c0ee333.86633b3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[379],{45462:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var s=a(74848),t=a(28453);const i={sidebar_position:1,description:"Install or update Java for use with Besu",tags:["public networks","private networks"]},l="Install and update Java",o={id:"public-networks/how-to/configure-java/install-update-java",title:"Install and update Java",description:"Install or update Java for use with Besu",source:"@site/docs/public-networks/how-to/configure-java/install-update-java.md",sourceDirName:"public-networks/how-to/configure-java",slug:"/public-networks/how-to/configure-java/install-update-java",permalink:"/public-networks/how-to/configure-java/install-update-java",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-java/install-update-java.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Install or update Java for use with Besu",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Sample load balancer configurations",permalink:"/public-networks/how-to/configure-ha/sample-configuration"},next:{title:"Pass JVM options",permalink:"/public-networks/how-to/configure-java/pass-jvm-options"}},r={},d=[{value:"Install Java",id:"install-java",level:2},{value:"Install Java on Ubuntu",id:"install-java-on-ubuntu",level:3},{value:"Install Java on MacOS",id:"install-java-on-macos",level:3},{value:"Update Java",id:"update-java",level:2},{value:"Update Java on Ubuntu",id:"update-java-on-ubuntu",level:3},{value:"Update Java on MacOS",id:"update-java-on-macos",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"install-and-update-java",children:"Install and update Java"})}),"\n",(0,s.jsxs)(n.p,{children:["There are many flavors of Java and the Java Virtual Machine (JVM) that work with Besu.\nThey might impact performance, start time, and more.\nConsider the options carefully when installing Java on your host machine.\nCurrently, ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/system-requirements#java-distribution-and-installation",children:"we recommend Java 21"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"install-java",children:"Install Java"}),"\n",(0,s.jsx)(n.p,{children:"Download the version of Java you would like to install.\nIf you are running Besu outside a virtual environment, like Docker, you must have Java installed on\nthe host machine."}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Download ",(0,s.jsx)(n.a,{href:"https://jdk.java.net/21/",children:"OpenJDK 21"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"You can find platform-specific installation instructions with the download.\nThe following installation examples use OpenJDK."}),"\n",(0,s.jsx)(n.h3,{id:"install-java-on-ubuntu",children:"Install Java on Ubuntu"}),"\n",(0,s.jsxs)(n.p,{children:["You can install OpenJDK on Ubuntu using the ",(0,s.jsx)(n.code,{children:"apt-get"})," command."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Ensure ",(0,s.jsx)(n.code,{children:"apt"})," libraries are installed and up-to-date:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt update && sudo apt upgrade -y\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Confirm whether Java is already installed:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"java -version\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If a version is returned, and you would like to update, see how to ",(0,s.jsx)(n.a,{href:"#update-java-on-ubuntu",children:"update Java on Ubuntu"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["If no version is returned, use ",(0,s.jsx)(n.code,{children:"apt"})," to install the preferred version."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install openjdk-21-jdk\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Confirm the installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"java -version\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You might need to update your environment to make Java visible to Besu.\nEdit the ",(0,s.jsx)(n.code,{children:".bashrc"})," file in your home directory (or create it if needed) and add the following\nlines to the end of the file:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title=".bashrc"',children:"export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))\nexport PATH=$PATH:$JAVA_HOME/bin\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Save your changes and source the file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"source ~/.bashrc \n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Verify that you updated your environment:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"echo $JAVA_HOME\necho $PATH\n"})}),"\n",(0,s.jsx)(n.p,{children:"You should see the JDK versions output."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"install-java-on-macos",children:"Install Java on MacOS"}),"\n",(0,s.jsx)(n.p,{children:"You can install OpenJDK on MacOS using Homebrew."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["With ",(0,s.jsx)(n.code,{children:"brew"})," installed, run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew install openjdk@21\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can target another version if you prefer."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Confirm the installation:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"java -version\n"})}),"\n",(0,s.jsx)(n.p,{children:"The OpenJDK version you install should display."}),"\n",(0,s.jsxs)(n.p,{children:["If this command returns ",(0,s.jsx)(n.code,{children:"command not found: java"}),", check your terminal logs.\nBrew might prompt you to create a symlink or update your path variables within the logs in the\nterminal output.\nIf so, run the prompts provided."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"update-java",children:"Update Java"}),"\n",(0,s.jsx)(n.h3,{id:"update-java-on-ubuntu",children:"Update Java on Ubuntu"}),"\n",(0,s.jsxs)(n.p,{children:["To update Java on Ubuntu, uninstall the current versions and follow the instructions to\n",(0,s.jsx)(n.a,{href:"#install-java-on-ubuntu",children:"install Java on Ubuntu"})," with your target version."]}),"\n",(0,s.jsx)(n.p,{children:"If you started with this guide, you can uninstall Java using the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get purge openjdk-\\*\n"})}),"\n",(0,s.jsx)(n.h3,{id:"update-java-on-macos",children:"Update Java on MacOS"}),"\n",(0,s.jsx)(n.p,{children:"You can update Java on MacOS using Homebrew."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"List your Homebrew packages:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew ls\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To update the JDK version (for example, from 17 to 21), uninstall the old version and reinstall\nthe target version:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew uninstall openjdk@17\nbrew install openjdk@21\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you installed a version of Java not using Homebrew, it is located at\n",(0,s.jsx)(n.code,{children:"/Library/Java/JavaVirtualMachines"})," and can be safely deleted from that directory."]})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To update point versions of Java, run the ",(0,s.jsx)(n.code,{children:"upgrade"})," command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"brew upgrade openjdk\n"})}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,a)=>{a.d(n,{R:()=>l,x:()=>o});var s=a(96540);const t={},i=s.createContext(t);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8d677f34.fd46d48d.js b/assets/js/8d677f34.fd46d48d.js new file mode 100644 index 00000000000..030ea0f650e --- /dev/null +++ b/assets/js/8d677f34.fd46d48d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2056],{70316:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>d,toc:()=>h});var r=n(74848),s=n(28453),i=n(11470),o=n(19365);const a={title:"Create a Clique network",sidebar_position:4,description:"Create a private network using the Clique consensus protocol.",tags:["private networks"]},l="Create a private network using Clique",d={id:"private-networks/tutorials/clique",title:"Create a Clique network",description:"Create a private network using the Clique consensus protocol.",source:"@site/docs/private-networks/tutorials/clique.md",sourceDirName:"private-networks/tutorials",slug:"/private-networks/tutorials/clique",permalink:"/private-networks/tutorials/clique",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/clique.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Create a Clique network",sidebar_position:4,description:"Create a private network using the Clique consensus protocol.",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Add and removing IBFT 2.0 validators",permalink:"/private-networks/tutorials/ibft/validators"},next:{title:"Create an Ethash network",permalink:"/private-networks/tutorials/ethash"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create directories",id:"1-create-directories",level:3},{value:"2. Get the address for Node-1",id:"2-get-the-address-for-node-1",level:3},{value:"3. Create the genesis file",id:"3-create-the-genesis-file",level:3},{value:"4. Start the first node as the bootnode",id:"4-start-the-first-node-as-the-bootnode",level:3},{value:"5. Start Node-2",id:"5-start-node-2",level:3},{value:"6. Start Node-3",id:"6-start-node-3",level:3},{value:"7. Confirm the private network is working",id:"7-confirm-the-private-network-is-working",level:3},{value:"Next steps",id:"next-steps",level:2},{value:"Stop the nodes",id:"stop-the-nodes",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"create-a-private-network-using-clique",children:"Create a private network using Clique"})}),"\n",(0,r.jsxs)(t.p,{children:["A private network provides a configurable network for testing. This private network uses the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique (proof of authority) consensus protocol"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"danger",children:(0,r.jsx)(t.p,{children:"The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall."})}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://curl.haxx.se/download.html",children:"Curl (or similar webservice client)"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(t.p,{children:"Listed on the right-hand side of the page are the steps to create a private network using Clique."}),"\n",(0,r.jsx)(t.h3,{id:"1-create-directories",children:"1. Create directories"}),"\n",(0,r.jsxs)(t.p,{children:["Each node requires a data directory for the blockchain data. When the node starts, Besu saves the ",(0,r.jsx)(t.a,{href:"/public-networks/concepts/node-keys",children:"node key"})," in this directory."]}),"\n",(0,r.jsx)(t.p,{children:"Create directories for your private network, each of the three nodes, and a data directory for each node:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"Clique-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-3\n \u251c\u2500\u2500 data\n"})}),"\n",(0,r.jsx)(t.h3,{id:"2-get-the-address-for-node-1",children:"2. Get the address for Node-1"}),"\n",(0,r.jsx)(t.p,{children:"In Clique networks, you must include the address of at least one initial signer in the genesis file. For this Clique network, we'll use Node-1 as the initial signer. This requires obtaining the address for Node-1."}),"\n",(0,r.jsxs)(t.p,{children:["To get the address for Node-1, in the ",(0,r.jsx)(t.code,{children:"Node-1"})," directory, use the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/subcommands#export-address",children:(0,r.jsx)(t.code,{children:"public-key export-address"})})," subcommand to write the node address to the specified file (",(0,r.jsx)(t.code,{children:"node1Address"})," in this example)."]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"besu --data-path=data public-key export-address --to=data/node1Address\n"})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"besu --data-path=data public-key export-address --to=data\\node1Address\n"})})})]}),"\n",(0,r.jsx)(t.h3,{id:"3-create-the-genesis-file",children:"3. Create the genesis file"}),"\n",(0,r.jsxs)(t.p,{children:["The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/clique#genesis-file",children:"Clique genesis file"})," includes the address of Node-1 as the initial signer in the ",(0,r.jsx)(t.code,{children:"extraData"})," field."]}),"\n",(0,r.jsx)(t.p,{children:"All nodes in a network must use the same genesis file."}),"\n",(0,r.jsxs)(t.p,{children:["Copy the following genesis definition to a file called ",(0,r.jsx)(t.code,{children:"cliqueGenesis.json"})," and save it in the ",(0,r.jsx)(t.code,{children:"Clique-Network"})," directory:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",children:'{\n "config": {\n "chainId": 1337,\n "berlinBlock": 0,\n "clique": {\n "blockperiodseconds": 15,\n "epochlength": 30000\n }\n },\n "coinbase": "0x0000000000000000000000000000000000000000",\n "difficulty": "0x1",\n\n "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000<Node 1 Address>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "gasLimit": "0xa00000",\n "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "nonce": "0x0",\n "timestamp": "0x5c51a607",\n "alloc": {\n "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {\n "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "0xad78ebc5ac6200000"\n },\n "627306090abaB3A6e1400e9345bC60c78a8BEf57": {\n "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n },\n "f17f52151EbEF6C7334FAD080c5704D77216b732": {\n "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n }\n }\n}\n'})}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["We recommend specifying the latest ",(0,r.jsx)(t.a,{href:"/public-networks/reference/genesis-items#milestone-blocks",children:"milestone"})," when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes."]})}),"\n",(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.code,{children:"extraData"}),", replace ",(0,r.jsx)(t.code,{children:"<Node 1 Address>"})," with the ",(0,r.jsx)(t.a,{href:"#2-get-the-address-for-node-1",children:"address for Node-1"}),", excluding the 0x prefix."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",children:'{\n ...\n"extraData":"0x0000000000000000000000000000000000000000000000000000000000000000b9b81ee349c3807e46bc71aa2632203c5b4620340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n ...\n}\n'})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["Do not use the accounts in ",(0,r.jsx)(t.code,{children:"alloc"})," in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure."]})}),"\n",(0,r.jsx)(t.h3,{id:"4-start-the-first-node-as-the-bootnode",children:"4. Start the first node as the bootnode"}),"\n",(0,r.jsx)(t.p,{children:"Start Node-1:"}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line enables:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["The JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(t.code,{children:"--rpc-http-enabled"})})," option"]}),"\n",(0,r.jsxs)(t.li,{children:["The ETH, NET, and CLIQUE APIs using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,r.jsx)(t.code,{children:"--rpc-http-api"})})," option"]}),"\n",(0,r.jsxs)(t.li,{children:["All-host access to the HTTP JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(t.code,{children:"--host-allowlist"})})," option"]}),"\n",(0,r.jsxs)(t.li,{children:["All-domain access to the node through the HTTP JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(t.code,{children:"--rpc-http-cors-origins"})})," option"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["When the node starts, the ",(0,r.jsx)(t.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Node 1 Enode URL",src:n(14739).A+"",width:"988",height:"126"})}),"\n",(0,r.jsx)(t.h3,{id:"5-start-node-2",children:"5. Start Node-2"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, change to the ",(0,r.jsx)(t.code,{children:"Node-2"})," directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes=<Node-1 Enode URL> --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes=<Node-1 Enode URL> --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 for P2P discovery using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 for HTTP JSON-RPC using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The enode URL of Node-1 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,r.jsx)(t.code,{children:"--bootnodes"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The data directory for Node-2 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Other options as for ",(0,r.jsx)(t.a,{href:"#4-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"6-start-node-3",children:"6. Start Node-3"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, change to the ",(0,r.jsx)(t.code,{children:"Node-3"})," directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes=<Node-1 Enode URL> --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes=<Node-1 Enode URL> --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 and Node-2 for P2P discovery using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 and Node-2 for HTTP JSON-RPC using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The data directory for Node-3 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The bootnode as for ",(0,r.jsx)(t.a,{href:"#5-start-node-2",children:"Node-2"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Other options as for ",(0,r.jsx)(t.a,{href:"#4-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"7-confirm-the-private-network-is-working",children:"7. Confirm the private network is working"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, use curl to call the JSON-RPC API ",(0,r.jsx)(t.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,r.jsx)(t.code,{children:"net_peerCount"})})," method and confirm the nodes are functioning as peers:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}\' localhost:8545\n'})}),"\n",(0,r.jsx)(t.p,{children:"The result confirms Node-1 has two peers (Node-2 and Node-3):"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x2"\n}\n'})}),"\n",(0,r.jsx)(t.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsx)(t.p,{children:"Look at the logs displayed to confirm Node-1 is producing blocks and Node-2 and Node-3 are importing blocks."}),"\n",(0,r.jsxs)(t.p,{children:["Use the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/clique#add-and-remove-signers",children:"Clique API to add"})," Node-2 or Node-3 as a signer."]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["To add Node-2 or Node-3 as a signer you need the ",(0,r.jsx)(t.a,{href:"#2-get-the-address-for-node-1",children:"node address as when specifying Node-1"})," as the initial signer."]})}),"\n",(0,r.jsxs)(t.p,{children:["Import accounts to MetaMask and send transactions, as described in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["Besu doesn't support ",(0,r.jsx)(t.a,{href:"/public-networks/how-to/send-transactions",children:"private key management"}),"."]})}),"\n",(0,r.jsx)(t.h2,{id:"stop-the-nodes",children:"Stop the nodes"}),"\n",(0,r.jsx)(t.p,{children:"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["To restart the Clique network in the future, start from ",(0,r.jsx)(t.a,{href:"#4-start-the-first-node-as-the-bootnode",children:"4. Start First Node as Bootnode"}),"."]})})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var r=n(18215);const s={tabItem:"tabItem_Ymn6"};var i=n(74848);function o(e){let{children:t,hidden:n,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,o),hidden:n,children:t})}},11470:(e,t,n)=>{n.d(t,{A:()=>k});var r=n(96540),s=n(18215),i=n(23104),o=n(56347),a=n(205),l=n(57485),d=n(31682),c=n(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:s}}=e;return{value:t,label:n,attributes:r,default:s}}))}(n);return function(e){const t=(0,d.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const s=(0,o.W6)(),i=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l.aZ)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(s.location.search);t.set(i,e),s.replace({...s.location,search:t.toString()})}),[i,s])]}function x(e){const{defaultValue:t,queryString:n=!1,groupId:s}=e,i=p(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[d,h]=f({queryString:n,groupId:s}),[x,b]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[s,i]=(0,c.Dv)(n);return[s,(0,r.useCallback)((e=>{n&&i.set(e)}),[n,i])]}({groupId:s}),j=(()=>{const e=d??x;return u({value:e,tabValues:i})?e:null})();(0,a.A)((()=>{j&&l(j)}),[j]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),b(e)}),[h,b,i]),tabValues:i}}var b=n(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=n(74848);function m(e){let{className:t,block:n,selectedValue:r,selectValue:o,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,i.a_)(),c=e=>{const t=e.currentTarget,n=l.indexOf(t),s=a[n].value;s!==r&&(d(t),o(s))},h=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const n=l.indexOf(e.currentTarget)+1;t=l[n]??l[0];break}case"ArrowLeft":{const n=l.indexOf(e.currentTarget)-1;t=l[n]??l[l.length-1];break}}t?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},t),children:a.map((e=>{let{value:t,label:n,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:h,onClick:c,...i,className:(0,s.A)("tabs__item",j.tabItem,i?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function v(e){let{lazy:t,children:n,selectedValue:i}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==i})))})}function w(e){const t=x(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",j.tabList),children:[(0,g.jsx)(m,{...t,...e}),(0,g.jsx)(v,{...t,...e})]})}function k(e){const t=(0,b.A)();return(0,g.jsx)(w,{...e,children:h(e.children)},String(t))}},14739:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(96540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ef40281.aaa3c872.js b/assets/js/8ef40281.aaa3c872.js new file mode 100644 index 00000000000..617c2a6940b --- /dev/null +++ b/assets/js/8ef40281.aaa3c872.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1703],{70682:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=n(74848),o=n(28453),s=n(11470),a=n(19365);const i={title:"Create a QBFT network",sidebar_position:2,description:"Create a private network using the QBFT consensus protocol.",tags:["private networks"]},d="Create a private network using QBFT",c={id:"private-networks/tutorials/qbft",title:"Create a QBFT network",description:"Create a private network using the QBFT consensus protocol.",source:"@site/docs/private-networks/tutorials/qbft.md",sourceDirName:"private-networks/tutorials",slug:"/private-networks/tutorials/qbft",permalink:"/private-networks/tutorials/qbft",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/qbft.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Create a QBFT network",sidebar_position:2,description:"Create a private network using the QBFT consensus protocol.",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Quorum Developer Quickstart",permalink:"/private-networks/tutorials/quickstart"},next:{title:"Create a private network using IBFT 2.0",permalink:"/private-networks/tutorials/ibft/"}},l={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create directories",id:"1-create-directories",level:3},{value:"2. Create a configuration file",id:"2-create-a-configuration-file",level:3},{value:"3. Generate node keys and a genesis file",id:"3-generate-node-keys-and-a-genesis-file",level:3},{value:"4. Copy the genesis file to the QBFT-Network directory",id:"4-copy-the-genesis-file-to-the-qbft-network-directory",level:3},{value:"5. Copy the node private keys to the node directories",id:"5-copy-the-node-private-keys-to-the-node-directories",level:3},{value:"6. Start the first node as the bootnode",id:"6-start-the-first-node-as-the-bootnode",level:3},{value:"7. Start Node-2",id:"7-start-node-2",level:3},{value:"8. Start Node-3",id:"8-start-node-3",level:3},{value:"9. Start Node-4",id:"9-start-node-4",level:3},{value:"10. Confirm the private network is working",id:"10-confirm-the-private-network-is-working",level:3},{value:"Next steps",id:"next-steps",level:2},{value:"Stop the nodes",id:"stop-the-nodes",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"create-a-private-network-using-qbft",children:"Create a private network using QBFT"})}),"\n",(0,r.jsxs)(t.p,{children:["A private network provides a configurable network for testing. This private network uses the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT (proof of authority) consensus protocol"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The QBFT network in this tutorial implements the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators-using-block-headers",children:"block header validator selection method"})," to manage validators. For a tutorial on how to implement the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators-using-a-smart-contract",children:"contract validator selection method"}),", follow the steps in the ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/validator-smart-contracts",children:"example smart contract repository"}),"."]}),"\n",(0,r.jsxs)(t.admonition,{type:"important",children:[(0,r.jsx)(t.p,{children:"The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall."}),(0,r.jsx)(t.p,{children:"This tutorial configures a private network using QBFT for educational purposes only. QBFT requires 4 validators to be Byzantine fault tolerant."})]}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu"})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://curl.haxx.se/download.html",children:"Curl (or similar webservice client)"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(t.p,{children:"Listed on the right-hand side of the page are the steps to create a private network using QBFT with four nodes. The four nodes are all validators."}),"\n",(0,r.jsx)(t.h3,{id:"1-create-directories",children:"1. Create directories"}),"\n",(0,r.jsx)(t.p,{children:"Each node requires a data directory for the blockchain data."}),"\n",(0,r.jsx)(t.p,{children:"Create directories for your private network, each of the four nodes, and a data directory for each node:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"QBFT-Network/\n\u251c\u2500\u2500 Node-1\n\u2502 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-2\n\u2502 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-3\n\u2502 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-4\n \u251c\u2500\u2500 data\n"})}),"\n",(0,r.jsx)(t.h3,{id:"2-create-a-configuration-file",children:"2. Create a configuration file"}),"\n",(0,r.jsxs)(t.p,{children:["The configuration file defines the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#genesis-file",children:"QBFT genesis file"})," and the number of node key pairs to generate."]}),"\n",(0,r.jsxs)(t.p,{children:["The configuration file has two nested JSON nodes. The first is the ",(0,r.jsx)(t.code,{children:"genesis"})," property defining the QBFT genesis file, except for the ",(0,r.jsx)(t.code,{children:"extraData"})," string, which Besu generates automatically in the resulting genesis file. The second is the ",(0,r.jsx)(t.code,{children:"blockchain"})," property defining the number of key pairs to generate."]}),"\n",(0,r.jsxs)(t.p,{children:["Copy the following configuration file definition to a file called ",(0,r.jsx)(t.code,{children:"qbftConfigFile.json"})," and save it in the ",(0,r.jsx)(t.code,{children:"QBFT-Network"})," directory:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",children:'{\n "genesis": {\n "config": {\n "chainId": 1337,\n "berlinBlock": 0,\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n }\n },\n "nonce": "0x0",\n "timestamp": "0x58ee40ba",\n "gasLimit": "0x47b760",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {\n "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "0xad78ebc5ac6200000"\n },\n "627306090abaB3A6e1400e9345bC60c78a8BEf57": {\n "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n },\n "f17f52151EbEF6C7334FAD080c5704D77216b732": {\n "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n }\n }\n },\n "blockchain": {\n "nodes": {\n "generate": true,\n "count": 4\n }\n }\n}\n'})}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsxs)(t.p,{children:["We recommend specifying the latest ",(0,r.jsx)(t.a,{href:"/public-networks/reference/genesis-items#milestone-blocks",children:"milestone"})," when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes."]})}),"\n",(0,r.jsx)(t.admonition,{type:"warning",children:(0,r.jsxs)(t.p,{children:["Do not use the accounts in ",(0,r.jsx)(t.code,{children:"alloc"})," in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure."]})}),"\n",(0,r.jsx)(t.h3,{id:"3-generate-node-keys-and-a-genesis-file",children:"3. Generate node keys and a genesis file"}),"\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.code,{children:"QBFT-Network"})," directory, generate the node key and genesis file:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"besu operator generate-blockchain-config --config-file=qbftConfigFile.json --to=networkFiles --private-key-file-name=key\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Besu creates the following in the ",(0,r.jsx)(t.code,{children:"networkFiles"})," directory:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"genesis.json"})," - The genesis file including the ",(0,r.jsx)(t.code,{children:"extraData"})," property specifying the four nodes are validators."]}),"\n",(0,r.jsx)(t.li,{children:"A directory for each node named using the node address and containing the public and private key for each node."}),"\n"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-text",children:"networkFiles/\n\u251c\u2500\u2500 genesis.json\n\u2514\u2500\u2500 keys\n \u251c\u2500\u2500 0x438821c42b812fecdcea7fe8235806a412712fc0\n \u2502 \u251c\u2500\u2500 key\n \u2502 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5\n \u2502 \u251c\u2500\u2500 key\n \u2502 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xcd5629bd37155608a0c9b28c4fd19310d53b3184\n \u2502 \u251c\u2500\u2500 key\n \u2502 \u2514\u2500\u2500 key.pub\n \u2514\u2500\u2500 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a\n \u251c\u2500\u2500 key\n \u2514\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(t.h3,{id:"4-copy-the-genesis-file-to-the-qbft-network-directory",children:"4. Copy the genesis file to the QBFT-Network directory"}),"\n",(0,r.jsxs)(t.p,{children:["Copy the ",(0,r.jsx)(t.code,{children:"genesis.json"})," file to the ",(0,r.jsx)(t.code,{children:"QBFT-Network"})," directory."]}),"\n",(0,r.jsx)(t.h3,{id:"5-copy-the-node-private-keys-to-the-node-directories",children:"5. Copy the node private keys to the node directories"}),"\n",(0,r.jsxs)(t.p,{children:["For each node, copy the key files to the ",(0,r.jsx)(t.code,{children:"data"})," directory for that node"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-text",children:"QBFT-Network/\n\u251c\u2500\u2500 genesis.json\n\u251c\u2500\u2500 Node-1\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \u251c\u2500\u2500 key\n\u2502 \u2502 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-2\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \u251c\u2500\u2500 key\n\u2502 \u2502 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-3\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \u251c\u2500\u2500 key\n\u2502 \u2502 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-4\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \u251c\u2500\u2500 key\n\u2502 \u2502 \u251c\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(t.h3,{id:"6-start-the-first-node-as-the-bootnode",children:"6. Start the first node as the bootnode"}),"\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.code,{children:"Node-1"})," directory, start Node-1:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Specifies the data directory for Node-1 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Enables the JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(t.code,{children:"--rpc-http-enabled"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Enables the ETH, NET, and QBFT APIs using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,r.jsx)(t.code,{children:"--rpc-http-api"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Enables all-host access to the HTTP JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(t.code,{children:"--host-allowlist"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Enables all-domain access to the node through the HTTP JSON-RPC API using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(t.code,{children:"--rpc-http-cors-origins"})})," option."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["When the node starts, the ",(0,r.jsx)(t.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Node 1 Enode URL",src:n(14739).A+"",width:"988",height:"126"})}),"\n",(0,r.jsx)(t.h3,{id:"7-start-node-2",children:"7. Start Node-2"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, change to the ",(0,r.jsx)(t.code,{children:"Node-2"})," directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["The data directory for Node-2 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 for P2P discovery using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 for HTTP JSON-RPC using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The enode URL of Node-1 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,r.jsx)(t.code,{children:"--bootnodes"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["Other options as for ",(0,r.jsx)(t.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"8-start-node-3",children:"8. Start Node-3"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, change to the ",(0,r.jsx)(t.code,{children:"Node-3"})," directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["The data directory for Node-3 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 and Node-2 for P2P discovery using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1 and Node-2 for HTTP JSON-RPC using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The bootnode as for ",(0,r.jsx)(t.a,{href:"#7-start-node-2",children:"Node-2"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Other options as for ",(0,r.jsx)(t.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"9-start-node-4",children:"9. Start Node-4"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, change to the ",(0,r.jsx)(t.code,{children:"Node-4"})," directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548\n'})})})]}),"\n",(0,r.jsx)(t.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["The data directory for Node-4 using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(t.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1, Node-2, and Node-3 for P2P discovery using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(t.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the ",(0,r.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(t.code,{children:"--rpc-http-port"})})," option."]}),"\n",(0,r.jsxs)(t.li,{children:["The bootnode as for ",(0,r.jsx)(t.a,{href:"#7-start-node-2",children:"Node-2"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Other options as for ",(0,r.jsx)(t.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"10-confirm-the-private-network-is-working",children:"10. Confirm the private network is working"}),"\n",(0,r.jsxs)(t.p,{children:["Start another terminal, use curl to call the JSON-RPC API ",(0,r.jsx)(t.a,{href:"/private-networks/reference/api/#qbft_getvalidatorsbyblocknumber",children:(0,r.jsx)(t.code,{children:"qbft_getvalidatorsbyblocknumber"})})," method and confirm the network has four validators:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' localhost:8545\n'})}),"\n",(0,r.jsx)(t.p,{children:"The result displays the four validators:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x73ced0bd3def2e2d9859e3bd0882683a2e6835fb",\n "0x7a175f3542ceb60bf80fb536b3f42e7a30c0a6d7",\n "0x7f6efa6e34f8c9b591a9ad4763e21b3fca31bcd6",\n "0xc64140f1c9d5bb82e54976e568ad39958c3e94be"\n ]\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:"Look at the logs to confirm Besu is producing blocks:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"2021-05-26 08:47:00.221+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ee4456536e2793523df87288fae76518089eec91c3f7e05e220f1f4d3f6f95b) in 0.016s. Peers: 4\n2021-05-26 08:47:02.071+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #2 / 0 tx / 0 pending / 0 (0.0%) gas / (0x6fc47ada7146d75f6a46911d8d4038795b0c99970bbd4ce0c6d6aa60955f66fe)\n2021-05-26 08:47:04.051+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #3 / 0 tx / 0 pending / 0 (0.0%) gas / (0x3cb663880a65103266b11a8d8631beca5c482d515ac287125aa077b2e31b80b0)\n2021-05-26 08:47:06.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Produced #4 / 0 tx / 0 pending / 0 (0.0%) gas / (0xc2927915ac0c94bab5fc9acea6608455f1c857d69e97191dc2c39e4ac411817b)\n2021-05-26 08:47:08.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #5 / 0 tx / 0 pending / 0 (0.0%) gas / (0xba63471d62c936733add9b884f5213c3842af9f52460268e39e0666ab82f02a5)\n"})}),"\n",(0,r.jsxs)(t.admonition,{type:"important",children:[(0,r.jsxs)(t.p,{children:["If the key files were not copied to the correct directory in ",(0,r.jsx)(t.a,{href:"#5-copy-the-node-private-keys-to-the-node-directories",children:"step 5"}),", the network will not start producing blocks."]}),(0,r.jsxs)(t.p,{children:["The logs for each node should indicate the public key was loaded from the ",(0,r.jsx)(t.code,{children:"data/key"})," directory:"]}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Loaded public key 0x931d32f1aec4e45b150ee38f3c74157a750fc53f523e63fe2b07bf3fce43a3de64587fc9aaf3736444f2e3eef0eea90be3b67d18be7b5b2b7cb2fcd670416a7e from <path-to-network>/QBFT-Network/Node-1/data/key\n"})}),(0,r.jsx)(t.p,{children:"If the keys were not copied to the correct directory, Besu creates a key when starting up:"}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to <path-to-network>/QBFT-Network/Node-1/data/key\n"})}),(0,r.jsx)(t.p,{children:"If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks."})]}),"\n",(0,r.jsx)(t.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(t.p,{children:["Use the ",(0,r.jsx)(t.a,{href:"/private-networks/reference/api/#qbft-methods",children:"QBFT API"})," to remove or add validators, or import accounts to MetaMask and send transactions as described in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),"."]}),"\n",(0,r.jsxs)(t.admonition,{type:"note",children:[(0,r.jsxs)(t.p,{children:["To add or remove nodes as validators you need the node address. The directory ",(0,r.jsx)(t.a,{href:"#3-generate-node-keys-and-a-genesis-file",children:"created for each node"})," has the node address as the name."]}),(0,r.jsxs)(t.p,{children:["Besu doesn't support ",(0,r.jsx)(t.a,{href:"/public-networks/how-to/send-transactions",children:"private key management"}),"."]})]}),"\n",(0,r.jsxs)(t.p,{children:["You can switch from the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators-using-block-headers",children:"block header validator selection method"})," configured here, to the ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators-using-a-smart-contract",children:"contract validator selection method"})," by updating the genesis file and ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft#transitions",children:"configuring a transition"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"stop-the-nodes",children:"Stop the nodes"}),"\n",(0,r.jsx)(t.p,{children:"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window."}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["To restart the QBFT network in the future, start from ",(0,r.jsx)(t.a,{href:"#6-start-the-first-node-as-the-bootnode",children:"step 6"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"*[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers."})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,t,n)=>{n.d(t,{A:()=>a});n(96540);var r=n(18215);const o={tabItem:"tabItem_Ymn6"};var s=n(74848);function a(e){let{children:t,hidden:n,className:a}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(o.tabItem,a),hidden:n,children:t})}},11470:(e,t,n)=>{n.d(t,{A:()=>w});var r=n(96540),o=n(18215),s=n(23104),a=n(56347),i=n(205),d=n(57485),c=n(31682),l=n(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return h(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:o}}=e;return{value:t,label:n,attributes:r,default:o}}))}(n);return function(e){const t=(0,c.XI)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function u(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:n}=e;const o=(0,a.W6)(),s=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,d.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(o.location.search);t.set(s,e),o.replace({...o.location,search:t.toString()})}),[s,o])]}function b(e){const{defaultValue:t,queryString:n=!1,groupId:o}=e,s=p(e),[a,d]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!u({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,h]=f({queryString:n,groupId:o}),[b,x]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[o,s]=(0,l.Dv)(n);return[o,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:o}),g=(()=>{const e=c??b;return u({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{g&&d(g)}),[g]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),x(e)}),[h,x,s]),tabValues:s}}var x=n(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=n(74848);function m(e){let{className:t,block:n,selectedValue:r,selectValue:a,tabValues:i}=e;const d=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),l=e=>{const t=e.currentTarget,n=d.indexOf(t),o=i[n].value;o!==r&&(c(t),a(o))},h=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=d.indexOf(e.currentTarget)+1;t=d[n]??d[0];break}case"ArrowLeft":{const n=d.indexOf(e.currentTarget)-1;t=d[n]??d[d.length-1];break}}t?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.A)("tabs",{"tabs--block":n},t),children:i.map((e=>{let{value:t,label:n,attributes:s}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>d.push(e),onKeyDown:h,onClick:l,...s,className:(0,o.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===t}),children:n??t},t)}))})}function k(e){let{lazy:t,children:n,selectedValue:s}=e;const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,o.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==s})))})}function v(e){const t=b(e);return(0,j.jsxs)("div",{className:(0,o.A)("tabs-container",g.tabList),children:[(0,j.jsx)(m,{...t,...e}),(0,j.jsx)(k,{...t,...e})]})}function w(e){const t=(0,x.A)();return(0,j.jsx)(v,{...e,children:h(e.children)},String(t))}},14739:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var r=n(96540);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91cde904.d5d26aec.js b/assets/js/91cde904.d5d26aec.js new file mode 100644 index 00000000000..f0fbef1196b --- /dev/null +++ b/assets/js/91cde904.d5d26aec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7650],{18538:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=n(74848),i=n(28453);const r={title:"Installation options",description:"Options for getting started with Besu",tags:["public networks"]},o="Installation options",l={id:"public-networks/get-started/install/index",title:"Installation options",description:"Options for getting started with Besu",source:"@site/docs/public-networks/get-started/install/index.md",sourceDirName:"public-networks/get-started/install",slug:"/public-networks/get-started/install/",permalink:"/public-networks/get-started/install/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/install/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Installation options",description:"Options for getting started with Besu",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"System requirements",permalink:"/public-networks/get-started/system-requirements"},next:{title:"Run Besu from Docker image",permalink:"/public-networks/get-started/install/run-docker-image"}},a={},c=[{value:"Build from source",id:"build-from-source",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"installation-options",children:"Installation options"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/run-docker-image",children:"Docker image"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Binaries"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"build-from-source",children:"Build from source"}),"\n",(0,s.jsxs)(t.p,{children:["If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/binary-distribution",children:"binary"})," or ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/install/run-docker-image",children:"Docker image"})," for more stable versions."]}),"\n",(0,s.jsxs)(t.p,{children:["View the ",(0,s.jsx)(t.a,{href:"https://wiki.hyperledger.org/display/BESU/Building+from+source",children:"Wiki"})," for instructions to install Besu from source."]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>l});var s=n(96540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91f929bc.db1ffe3e.js b/assets/js/91f929bc.db1ffe3e.js new file mode 100644 index 00000000000..3f48f8ad006 --- /dev/null +++ b/assets/js/91f929bc.db1ffe3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4340],{58088:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var o=r(74848),n=r(28453);const i={title:"Use Java Flight Recorder",sidebar_position:4,description:"Using Java Flight Recorder with Besu",tags:["public networks","private networks"]},a="Use Java Flight Recorder",s={id:"public-networks/how-to/configure-java/java-flight-recorder",title:"Use Java Flight Recorder",description:"Using Java Flight Recorder with Besu",source:"@site/docs/public-networks/how-to/configure-java/java-flight-recorder.md",sourceDirName:"public-networks/how-to/configure-java",slug:"/public-networks/how-to/configure-java/java-flight-recorder",permalink:"/public-networks/how-to/configure-java/java-flight-recorder",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-java/java-flight-recorder.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Use Java Flight Recorder",sidebar_position:4,description:"Using Java Flight Recorder with Besu",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Manage JVM memory",permalink:"/public-networks/how-to/configure-java/manage-memory"},next:{title:"Use Hardhat",permalink:"/public-networks/how-to/develop/hardhat"}},c={},l=[{value:"Enable Java Flight Recorder",id:"enable-java-flight-recorder",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"use-java-flight-recorder",children:"Use Java Flight Recorder"})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/about.htm#JFRUH170",children:"Java Flight Recorder (JFR)"})," is a monitoring tool that collects information about the Java Virtual Machine (JVM) when Besu is running. Use the JFR as a tool to analyze Besu performance."]}),"\n",(0,o.jsx)(t.h2,{id:"enable-java-flight-recorder",children:"Enable Java Flight Recorder"}),"\n",(0,o.jsxs)(t.p,{children:["To enable JFR, set ",(0,o.jsx)(t.code,{children:"BESU_OPTS"})," to the JFR tags as follows:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"export BESU_OPTS=-XX:StartFlightRecording=disk=true,delay=15s,dumponexit=true,\\\nfilename=/tmp/recording.jfr,maxsize=1024m,maxage=1d,\\\nsettings=profile,path-to-gc-roots=true\n"})}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"When recording, cleanly exiting Besu results in better data. If not possible to cleanly exit, the file may be missing some information not flushed to disk."})}),"\n",(0,o.jsxs)(t.p,{children:["Inspect the file written to ",(0,o.jsx)(t.code,{children:"/tmp/recording.jfr"})," with tools such as ",(0,o.jsx)(t.a,{href:"https://docs.oracle.com/javacomponents/jmc-5-5/jmc-user-guide/intro.htm#JMCCI109",children:"Mission Control"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"danger",children:(0,o.jsxs)(t.p,{children:["If providing the output file to ",(0,o.jsx)(t.a,{href:"https://consensys.net/quorum/support/",children:"ConsenSys Quorum support"}),", be aware that while JFR files don't contain secrets such as private keys, some details about the user configuration can be inferred from the JFR output."]})})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>a,x:()=>s});var o=r(96540);const n={},i=o.createContext(n);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9213a1f9.f3841e84.js b/assets/js/9213a1f9.f3841e84.js new file mode 100644 index 00000000000..49fc176159e --- /dev/null +++ b/assets/js/9213a1f9.f3841e84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5303],{87514:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var t=i(74848),a=i(28453);const n={title:"Create and manage privacy groups",description:"Create and manage privacy groups with Besu",sidebar_position:4,tags:["private networks"]},o="Create and manage privacy groups",s={id:"private-networks/how-to/use-privacy/privacy-groups",title:"Create and manage privacy groups",description:"Create and manage privacy groups with Besu",source:"@site/docs/private-networks/how-to/use-privacy/privacy-groups.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/privacy-groups",permalink:"/private-networks/how-to/use-privacy/privacy-groups",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/privacy-groups.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Create and manage privacy groups",description:"Create and manage privacy groups with Besu",sidebar_position:4,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Run Tessera with Besu",permalink:"/private-networks/how-to/use-privacy/tessera"},next:{title:"Use flexible privacy groups",permalink:"/private-networks/how-to/use-privacy/flexible"}},p={},c=[];function d(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"create-and-manage-privacy-groups",children:"Create and manage privacy groups"})}),"\n",(0,t.jsx)(r.p,{children:"Besu-extended privacy provides JSON-RPC API methods for creating and managing privacy groups:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_createprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_createPrivacyGroup"})})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_findprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_findPrivacyGroup"})})}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_deleteprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_deletePrivacyGroup"})}),"."]}),"\n"]}),"\n",(0,t.jsx)(r.admonition,{type:"tip",children:(0,t.jsxs)(r.p,{children:["You can find and delete ",(0,t.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"EEA-compliant privacy groups"})," using ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_findprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_findPrivacyGroup"})})," and ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_deleteprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_deletePrivacyGroup"})}),"."]})})]})}function u(e={}){const{wrapper:r}={...(0,a.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>o,x:()=>s});var t=i(96540);const a={},n=t.createContext(a);function o(e){const r=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function s(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/93e76459.524fd05d.js b/assets/js/93e76459.524fd05d.js new file mode 100644 index 00000000000..fcda95835d3 --- /dev/null +++ b/assets/js/93e76459.524fd05d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[23],{57695:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=n(74848),s=n(28453);const a={description:"Besu privacy-enabled private network tutorial",tags:["private networks"]},o="Create a privacy-enabled network using the Quorum Developer Quickstart",i={id:"private-networks/tutorials/privacy/quickstart",title:"Create a privacy-enabled network using the Quorum Developer Quickstart",description:"Besu privacy-enabled private network tutorial",source:"@site/docs/private-networks/tutorials/privacy/quickstart.md",sourceDirName:"private-networks/tutorials/privacy",slug:"/private-networks/tutorials/privacy/quickstart",permalink:"/private-networks/tutorials/privacy/quickstart",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/privacy/quickstart.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Besu privacy-enabled private network tutorial",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use the web3js-quorum multi-node example",permalink:"/private-networks/tutorials/privacy/web3js-quorum"},next:{title:"Create a permissioned network",permalink:"/private-networks/tutorials/permissioning/"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create Docker-compose file",id:"1-create-docker-compose-file",level:3},{value:"2. Start the network",id:"2-start-the-network",level:3},{value:"3. Deploy the private contract and interact with the nodes",id:"3-deploy-the-private-contract-and-interact-with-the-nodes",level:3},{value:"4. Stop the network",id:"4--stop-the-network",level:3},{value:"More examples",id:"more-examples",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"create-a-privacy-enabled-network-using-the-quorum-developer-quickstart",children:"Create a privacy-enabled network using the Quorum Developer Quickstart"})}),"\n",(0,r.jsxs)(t.p,{children:["You can create a privacy-enabled network using the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Quorum Developer Quickstart"}),". It runs a private Besu network that uses ",(0,r.jsx)(t.a,{href:"https://docs.tessera.consensys.net/en/stable/",children:"Tessera"})," as its private transaction manager."]}),"\n",(0,r.jsxs)(t.p,{children:["You can use the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#block-explorer",children:"Block Explorer"}),", make ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#run-json-rpc-requests",children:"JSON-RPC requests"}),", and ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"create transactions using MetaMask"}),". This tutorial describes how to make private transactions between nodes, and perform read and write operations on private contracts."]}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsx)(t.p,{children:"This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks."})}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(t.p,{children:"To run this tutorial, you must have the following installed:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://docs.docker.com/compose/install/",children:"Docker and Docker-compose"})}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["If using ",(0,r.jsx)(t.a,{href:"https://docs.docker.com/docker-for-mac/",children:"MacOS"})," or ",(0,r.jsx)(t.a,{href:"https://docs.docker.com/docker-for-windows/",children:"Windows"}),", enable Docker to use up to 6GB of memory on the ",(0,r.jsx)(t.em,{children:"Advanced"})," tab in ",(0,r.jsx)(t.em,{children:"Preferences"}),"."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://nodejs.org/en/download/",children:"Nodejs"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"https://git-scm.com/",children:"Git command line"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://curl.haxx.se/download.html",children:"Curl command line"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(t.h3,{id:"1-create-docker-compose-file",children:"1. Create Docker-compose file"}),"\n",(0,r.jsx)(t.p,{children:"To create the docker-compose file and artifacts, run:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"npx quorum-dev-quickstart\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Follow the prompts displayed to run Besu, private transactions, and ",(0,r.jsx)(t.a,{href:"/private-networks/how-to/monitor/elastic-stack",children:"logging with ELK"}),". Enter ",(0,r.jsx)(t.code,{children:"n"})," for Codefi Orchestrate."]}),"\n",(0,r.jsx)(t.h3,{id:"2-start-the-network",children:"2. Start the network"}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"If running in Windows, please run commands from the GitBash shell"})}),"\n",(0,r.jsx)(t.p,{children:"In the installation directory, start the network:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"./run.sh\n"})}),"\n",(0,r.jsx)(t.p,{children:"The script pulls the Docker images starts the network. Pulling the images takes a few minutes the first time. The network details display."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"*************************************\nQuorum Dev Quickstart\n*************************************\nSetting up the index patterns in kibana .................\n----------------------------------\nList endpoints and services\n----------------------------------\nJSON-RPC HTTP service endpoint : http://localhost:8545\nJSON-RPC WebSocket service endpoint : ws://localhost:8546\nWeb block explorer address : http://localhost:25000/\nPrometheus address : http://localhost:9090/graph\nGrafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All\nCollated logs using Kibana endpoint : http://localhost:5601/app/kibana#/discover\n\nFor more information on the endpoints and services, refer to README.md in the installation directory.\n****************************************************************\n"})}),"\n",(0,r.jsx)(t.h3,{id:"3-deploy-the-private-contract-and-interact-with-the-nodes",children:"3. Deploy the private contract and interact with the nodes"}),"\n",(0,r.jsxs)(t.p,{children:["To deploy a private contract to another ",(0,r.jsx)(t.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy group"})," member, use the ",(0,r.jsx)(t.a,{href:"https://consensys.github.io/web3js-quorum/latest/index.html",children:"web3js-quorum"})," library and the ",(0,r.jsx)(t.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(t.code,{children:"eea_sendRawTransaction"})})," API call. You must use this API call instead of ",(0,r.jsx)(t.a,{href:"https://ethereum.github.io/execution-apis/api-documentation",children:(0,r.jsx)(t.code,{children:"eth_sendTransaction"})})," because Besu keeps account management separate for stronger security."]}),"\n",(0,r.jsxs)(t.p,{children:["This example uses the ",(0,r.jsx)(t.a,{href:"https://www.npmjs.com/package/web3",children:"web3js"})," library to make the API calls, the example creates three Besu nodes, with each node having a corresponding Tessera node for privacy. You can access the Besu member nodes for API calls on the following ports:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"Member1Besu RPC: http://localhost:20000\nMember1Tessera: http://localhost:9081\n\nMember2Besu RPC: http://localhost:20002\nMember2Tessera: http://localhost:9082\n\nMember3Besu RPC: http://localhost:20004\nMember3Tessera: http://localhost:9083\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Navigate to the ",(0,r.jsx)(t.code,{children:"smart_contracts"})," directory and deploy the private transaction:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"cd smart_contracts\nnpm install\nnode scripts/private/private_tx.js\n"})}),"\n",(0,r.jsxs)(t.p,{children:["The script deploys the contract and sends an arbitrary value (47) from ",(0,r.jsx)(t.code,{children:"Member1"})," to ",(0,r.jsx)(t.code,{children:"Member3"}),". Once done, it queries all three members (Tessera) to check the value at an address. Only ",(0,r.jsx)(t.code,{children:"Member1"})," & ",(0,r.jsx)(t.code,{children:"Member3"})," has this information as they were involved in the transaction, ",(0,r.jsx)(t.code,{children:"Member2"})," responds with a ",(0,r.jsx)(t.code,{children:"0x"})," to indicate it is unaware of the transaction."]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"node scripts/private/private_tx.js\nCreating contract...\nGetting contractAddress from txHash: 0xc1b57f6a7773fe887afb141a09a573d19cb0fdbb15e0f2b9ed0dfead6f5b5dbf\nWaiting for transaction to be mined ...\nAddress of transaction: 0x8220ca987f7bb7f99815d0ef64e1d8a072a2c167\nUse the smart contracts 'get' function to read the contract's constructor initialized value ..\nWaiting for transaction to be mined ...\nMember1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000002f\nUse the smart contracts 'set' function to update that value to 123 .. - from member1 to member3\nTransaction hash: 0x387c6627fe87e235b0f2bbbe1b2003a11b54afc737dca8da4990d3de3197ac5f\nWaiting for transaction to be mined ...\nVerify the private transaction is private by reading the value from all three members ..\nWaiting for transaction to be mined ...\nMember1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b\nWaiting for transaction to be mined ...\nMember2 value from deployed contract is: 0x\nWaiting for transaction to be mined ...\nMember3 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b\n"})}),"\n",(0,r.jsx)(t.p,{children:"The general contract deployment flow is:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Deploy a contract, which returns a transaction hash."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Obtain the privacy transaction receipt from the transaction hash."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Use the contract address in the privacy transaction receipt to ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/contracts/interact",children:"interact with the contract"})," from that point on."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"4--stop-the-network",children:"4. Stop the network"}),"\n",(0,r.jsx)(t.p,{children:"Do one of the following to stop the network:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Stop the network:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"./stop.sh\n"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Stop the network and remove the containers and volumes:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"./remove.sh\n"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"more-examples",children:"More examples"}),"\n",(0,r.jsxs)(t.p,{children:["View the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/privacy/web3js-quorum",children:"web3js-quorum client library example"})," and\n",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/web3js-quorum/tree/master/example",children:"code examples"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["You can also test the ERC-20 token example by executing ",(0,r.jsx)(t.code,{children:"erc20.js"}),", which deploys a\n",(0,r.jsx)(t.code,{children:"HumanStandardToken"})," contract and transfers one token to Node-2."]}),"\n",(0,r.jsxs)(t.p,{children:["You can verify this by observing the ",(0,r.jsx)(t.code,{children:"data"})," field of the ",(0,r.jsx)(t.code,{children:"logs"}),", which is ",(0,r.jsx)(t.code,{children:"1"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>i});var r=n(96540);const s={},a=r.createContext(s);function o(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9689.252d8165.js b/assets/js/9689.252d8165.js new file mode 100644 index 00000000000..78160464859 --- /dev/null +++ b/assets/js/9689.252d8165.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9689],{79689:(t,e,a)=>{a.d(e,{diagram:()=>at});var r=a(99702),s=a(26312),i=a(28259),n=a(16750),o=(a(74353),a(42838),function(){var t=function(t,e,a,r){for(a=a||{},r=t.length;r--;a[t[r]]=e);return a},e=[1,2],a=[1,3],r=[1,4],s=[2,4],i=[1,9],n=[1,11],o=[1,13],c=[1,14],l=[1,16],d=[1,17],h=[1,18],p=[1,24],g=[1,25],u=[1,26],x=[1,27],y=[1,28],m=[1,29],b=[1,30],f=[1,31],T=[1,32],E=[1,33],w=[1,34],P=[1,35],_=[1,36],v=[1,37],L=[1,38],k=[1,39],I=[1,41],M=[1,42],N=[1,43],A=[1,44],O=[1,45],S=[1,46],D=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],R=[4,5,16,50,52,53],C=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Y=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],B=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],V=[68,69,70],F=[1,120],q={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(t,e,a,r,s,i,n){var o=i.length-1;switch(s){case 3:return r.apply(i[o]),i[o];case 4:case 9:case 8:case 13:this.$=[];break;case 5:case 10:i[o-1].push(i[o]),this.$=i[o-1];break;case 6:case 7:case 11:case 12:case 62:this.$=i[o];break;case 15:i[o].type="createParticipant",this.$=i[o];break;case 16:i[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(i[o-2])}),i[o-1].push({type:"boxEnd",boxText:i[o-2]}),this.$=i[o-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-2]),sequenceIndexStep:Number(i[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]};break;case 23:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-1]};break;case 29:r.setDiagramTitle(i[o].substring(6)),this.$=i[o].substring(6);break;case 30:r.setDiagramTitle(i[o].substring(7)),this.$=i[o].substring(7);break;case 31:this.$=i[o].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=i[o].trim(),r.setAccDescription(this.$);break;case 34:i[o-1].unshift({type:"loopStart",loopText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.LOOP_START}),i[o-1].push({type:"loopEnd",loopText:i[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=i[o-1];break;case 35:i[o-1].unshift({type:"rectStart",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_START}),i[o-1].push({type:"rectEnd",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=i[o-1];break;case 36:i[o-1].unshift({type:"optStart",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_START}),i[o-1].push({type:"optEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=i[o-1];break;case 37:i[o-1].unshift({type:"altStart",altText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.ALT_START}),i[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=i[o-1];break;case 38:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 39:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_OVER_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 40:i[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.CRITICAL_START}),i[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=i[o-1];break;case 41:i[o-1].unshift({type:"breakStart",breakText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_START}),i[o-1].push({type:"breakEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=i[o-1];break;case 43:this.$=i[o-3].concat([{type:"option",optionText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},i[o]]);break;case 45:this.$=i[o-3].concat([{type:"and",parText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.PAR_AND},i[o]]);break;case 47:this.$=i[o-3].concat([{type:"else",altText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.ALT_ELSE},i[o]]);break;case 48:i[o-3].draw="participant",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 49:i[o-1].draw="participant",i[o-1].type="addParticipant",this.$=i[o-1];break;case 50:i[o-3].draw="actor",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 51:i[o-1].draw="actor",i[o-1].type="addParticipant",this.$=i[o-1];break;case 52:i[o-1].type="destroyParticipant",this.$=i[o-1];break;case 53:this.$=[i[o-1],{type:"addNote",placement:i[o-2],actor:i[o-1].actor,text:i[o]}];break;case 54:i[o-2]=[].concat(i[o-1],i[o-1]).slice(0,2),i[o-2][0]=i[o-2][0].actor,i[o-2][1]=i[o-2][1].actor,this.$=[i[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:i[o-2].slice(0,2),text:i[o]}];break;case 55:this.$=[i[o-1],{type:"addLinks",actor:i[o-1].actor,text:i[o]}];break;case 56:this.$=[i[o-1],{type:"addALink",actor:i[o-1].actor,text:i[o]}];break;case 57:this.$=[i[o-1],{type:"addProperties",actor:i[o-1].actor,text:i[o]}];break;case 58:this.$=[i[o-1],{type:"addDetails",actor:i[o-1].actor,text:i[o]}];break;case 61:this.$=[i[o-2],i[o]];break;case 63:this.$=r.PLACEMENT.LEFTOF;break;case 64:this.$=r.PLACEMENT.RIGHTOF;break;case 65:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o],activate:!0},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]}];break;case 66:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-4]}];break;case 67:this.$=[i[o-3],i[o-1],{type:"addMessage",from:i[o-3].actor,to:i[o-1].actor,signalType:i[o-2],msg:i[o]}];break;case 68:this.$={type:"addParticipant",actor:i[o]};break;case 69:this.$=r.LINETYPE.SOLID_OPEN;break;case 70:this.$=r.LINETYPE.DOTTED_OPEN;break;case 71:this.$=r.LINETYPE.SOLID;break;case 72:this.$=r.LINETYPE.DOTTED;break;case 73:this.$=r.LINETYPE.SOLID_CROSS;break;case 74:this.$=r.LINETYPE.DOTTED_CROSS;break;case 75:this.$=r.LINETYPE.SOLID_POINT;break;case 76:this.$=r.LINETYPE.DOTTED_POINT;break;case 77:this.$=r.parseMessage(i[o].trim().substring(1))}},table:[{3:1,4:e,5:a,6:r},{1:[3]},{3:5,4:e,5:a,6:r},{3:6,4:e,5:a,6:r},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},t(D,[2,5]),{9:47,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},t(D,[2,7]),t(D,[2,8]),t(D,[2,14]),{12:48,50:v,52:L,53:k},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:S},{22:55,70:S},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(D,[2,29]),t(D,[2,30]),{32:[1,61]},{34:[1,62]},t(D,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:S},{22:72,70:S},{22:73,70:S},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:S},{22:88,70:S},{22:89,70:S},{22:90,70:S},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(D,[2,6]),t(D,[2,15]),t(R,[2,9],{10:91}),t(D,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(D,[2,21]),{5:[1,95]},{5:[1,96]},t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,31]),t(D,[2,32]),t(C,s,{7:97}),t(C,s,{7:98}),t(C,s,{7:99}),t($,s,{40:100,7:101}),t(Y,s,{42:102,7:103}),t(Y,s,{7:103,42:104}),t(B,s,{45:105,7:106}),t(C,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:S},t(V,[2,69]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),{22:116,70:S},{22:118,58:117,70:S},{70:[2,63]},{70:[2,64]},{56:119,79:F},{56:121,79:F},{56:122,79:F},{56:123,79:F},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:v,52:L,53:k},{5:[1,129]},t(D,[2,19]),t(D,[2,20]),t(D,[2,22]),t(D,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,130],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,131],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,132],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,133]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,46],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,49:[1,134],50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,44],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,48:[1,136],50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{16:[1,137]},{16:[1,138]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,42],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,47:[1,139],50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,140],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:v,52:L,53:k,54:I,59:M,60:N,61:A,62:O,70:S},{15:[1,141]},t(D,[2,49]),{15:[1,142]},t(D,[2,51]),t(D,[2,52]),{22:143,70:S},{22:144,70:S},{56:145,79:F},{56:146,79:F},{56:147,79:F},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(D,[2,16]),t(R,[2,10]),{12:149,50:v,52:L,53:k},t(R,[2,12]),t(R,[2,13]),t(D,[2,18]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),t(D,[2,37]),{15:[1,150]},t(D,[2,38]),{15:[1,151]},t(D,[2,39]),t(D,[2,40]),{15:[1,152]},t(D,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:F},{56:156,79:F},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:S},t(R,[2,11]),t($,s,{7:101,40:158}),t(Y,s,{7:103,42:159}),t(B,s,{7:106,45:160}),t(D,[2,48]),t(D,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},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],r=[],s=[null],i=[],n=this.table,o="",c=0,l=0,d=i.slice.call(arguments,1),h=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]);h.setInput(t,p.yy),p.yy.lexer=h,p.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var u=h.yylloc;i.push(u);var x=h.options&&h.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,f,T,E,w,P,_,v={};;){if(m=a[a.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=e.symbols_[_]||_),y=_),b=n[m]&&n[m][y]),void 0===b||!b.length||!b[0]){var L="";for(T in P=[],n[m])this.terminals_[T]&&T>2&&P.push("'"+this.terminals_[T]+"'");L=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+P.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(L,{text:h.match,token:this.terminals_[y]||y,line:h.yylineno,loc:u,expected:P})}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:a.push(y),s.push(h.yytext),i.push(h.yylloc),a.push(b[1]),y=null,l=h.yyleng,o=h.yytext,c=h.yylineno,u=h.yylloc;break;case 2:if(E=this.productions_[b[1]][1],v.$=s[s.length-E],v._$={first_line:i[i.length-(E||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(E||1)].first_column,last_column:i[i.length-1].last_column},x&&(v._$.range=[i[i.length-(E||1)].range[0],i[i.length-1].range[1]]),void 0!==(f=this.performAction.apply(v,[o,l,c,p.yy,b[1],s,i].concat(d))))return f;E&&(a=a.slice(0,-1*E*2),s=s.slice(0,-1*E),i=i.slice(0,-1*E)),a.push(this.productions_[b[1]][0]),s.push(v.$),i.push(v._$),w=n[a[a.length-2]][a[a.length-1]],a.push(w);break;case 3:return!0}}return!0}},W={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 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),a.length-1&&(this.yylineno-=a.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:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[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 a,r,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))),(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],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 i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;i<s.length;i++)if((a=this._input.match(this.rules[s[i]]))&&(!e||a[0].length>e[0].length)){if(e=a,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,s[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[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,a,r){switch(a){case 0:case 51:case 64:return 5;case 1:case 2:case 3:case 4:case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 52:return e.yytext=e.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 65:return"INVALID"}},rules:[/^(?:[\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,/^(?:create\b)/i,/^(?:destroy\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,/^(?:par_over\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:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};function z(){this.yy={}}return q.lexer=W,z.prototype=q,q.Parser=z,new z}());o.parser=o;const c=o;const l=new class{constructor(t){this.init=t,this.records=this.init()}reset(){this.records=this.init()}}((()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}))),d=function(t,e,a,r){let s=l.records.currentBox;const i=l.records.actors[t];if(i){if(l.records.currentBox&&i.box&&l.records.currentBox!==i.box)throw new Error("A same participant should only be defined in one Box: "+i.name+" can't be in '"+i.box.name+"' and in '"+l.records.currentBox.name+"' at the same time.");if(s=i.box?i.box:l.records.currentBox,i.box=s,i&&e===i.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:r}),null!=r&&null!=a.text||(a={text:e,wrap:null,type:r}),l.records.actors[t]={box:s,name:e,description:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,prevActor:l.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},l.records.prevActor&&l.records.actors[l.records.prevActor]&&(l.records.actors[l.records.prevActor].nextActor=t),l.records.currentBox&&l.records.currentBox.actorKeys.push(t),l.records.prevActor=t},h=function(t,e,a={text:void 0,wrap:void 0},r,s=!1){if(r===u.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<l.records.messages.length;e++)l.records.messages[e].type===u.ACTIVE_START&&l.records.messages[e].from.actor===t&&a++,l.records.messages[e].type===u.ACTIVE_END&&l.records.messages[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 l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:r,activate:s}),!0},p=function(t){return l.records.actors[t]},g=()=>void 0!==l.records.wrapEnabled?l.records.wrapEnabled:(0,r.c)().sequence.wrap,u={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,PAR_OVER_START:32},x=function(t,e,a){const r={actor:t,placement:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap},s=[].concat(t,t);l.records.notes.push(r),l.records.messages.push({from:s[0],to:s[1],message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:u.NOTE,placement:e})},y=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");m(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor link text",s)}};function m(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const b=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());f(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor properties text",s)}};function f(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const T=function(t,e){const a=p(t),s=document.getElementById(e.text);try{const t=s.innerHTML,e=JSON.parse(t);e.properties&&f(a,e.properties),e.links&&m(a,e.links)}catch(i){r.l.error("error while parsing actor details text",i)}},E=function(t){if(Array.isArray(t))t.forEach((function(t){E(t)}));else switch(t.type){case"sequenceIndex":l.records.messages.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":d(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(l.records.actors[t.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");l.records.lastCreated=t.actor,d(t.actor,t.actor,t.description,t.draw),l.records.createdActors[t.actor]=l.records.messages.length;break;case"destroyParticipant":l.records.lastDestroyed=t.actor,l.records.destroyedActors[t.actor]=l.records.messages.length;break;case"activeStart":case"activeEnd":h(t.actor,void 0,void 0,t.signalType);break;case"addNote":x(t.actor,t.placement,t.text);break;case"addLinks":y(t.actor,t.text);break;case"addALink":!function(t,e){const a=p(t);try{const t={};let o=(0,r.d)(e.text,(0,r.c)());var s=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var i=o.slice(0,s-1).trim(),n=o.slice(s+1).trim();t[i]=n,m(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":b(t.actor,t.text);break;case"addDetails":T(t.actor,t.text);break;case"addMessage":if(l.records.lastCreated){if(t.to!==l.records.lastCreated)throw new Error("The created participant "+l.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");l.records.lastCreated=void 0}else if(l.records.lastDestroyed){if(t.to!==l.records.lastDestroyed&&t.from!==l.records.lastDestroyed)throw new Error("The destroyed participant "+l.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");l.records.lastDestroyed=void 0}h(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":e=t.boxData,l.records.boxes.push({name:e.text,wrap:void 0===e.wrap&&g()||!!e.wrap,fill:e.color,actorKeys:[]}),l.records.currentBox=l.records.boxes.slice(-1)[0];break;case"boxEnd":l.records.currentBox=void 0;break;case"loopStart":h(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":h(void 0,void 0,void 0,t.signalType);break;case"rectStart":h(void 0,void 0,t.color,t.signalType);break;case"optStart":h(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":h(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.s)(t.text);break;case"parStart":case"and":h(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":h(void 0,void 0,t.criticalText,t.signalType);break;case"option":h(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":h(void 0,void 0,t.breakText,t.signalType)}var e},w={addActor:d,addMessage:function(t,e,a,r){l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,answer:r})},addSignal:h,addLinks:y,addDetails:T,addProperties:b,autoWrap:g,setWrap:function(t){l.records.wrapEnabled=t},enableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!0},disableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!1},showSequenceNumbers:()=>l.records.sequenceNumbersEnabled,getMessages:function(){return l.records.messages},getActors:function(){return l.records.actors},getCreatedActors:function(){return l.records.createdActors},getDestroyedActors:function(){return l.records.destroyedActors},getActor:p,getActorKeys:function(){return Object.keys(l.records.actors)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.g,getBoxes:function(){return l.records.boxes},getDiagramTitle:r.t,setDiagramTitle:r.q,getConfig:()=>(0,r.c)().sequence,clear:function(){l.reset(),(0,r.v)()},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",s=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",s=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",s=t.trim())}return{color:a,text:void 0!==s?(0,r.d)(s.replace(/^:?(?:no)?wrap:/,""),(0,r.c)()):void 0,wrap:void 0!==s?null!==s.match(/^:?wrap:/)||null===s.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:u,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:x,setAccTitle:r.s,apply:E,setAccDescription:r.b,getAccDescription:r.a,hasAtLeastOneBox:function(){return l.records.boxes.length>0},hasAtLeastOneBoxWithTitle:function(){return l.records.boxes.some((t=>t.name))}},P=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`,_="actor-top",v="actor-bottom",L=function(t,e){return(0,i.d)(t,e)},k=async function(t,e,a=null){let s=t.append("foreignObject");const i=await(0,r.r)(e.text,(0,r.F)()),n=s.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(s.attr("height",Math.round(n.height)).attr("width",Math.round(n.width)),"noteText"===e.class){const a=t.node().firstChild;a.setAttribute("height",n.height+2*e.textMargin);const r=a.getBBox();s.attr("x",Math.round(r.x+r.width/2-n.width/2)).attr("y",Math.round(r.y+r.height/2-n.height/2))}else if(a){let{startx:t,stopx:r,starty:i}=a;if(t>r){const e=t;t=r,r=e}s.attr("x",Math.round(t+Math.abs(t-r)/2-n.width/2)),"loopText"===e.class?s.attr("y",Math.round(i)):s.attr("y",Math.round(i-n.height))}return[s]},I=function(t,e){let a=0,s=0;const i=e.text.split(r.e.lineBreakRegex),[n,o]=(0,r.D)(e.fontSize);let c=[],l=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+s+e.textMargin)/2);break;case"bottom":case"end":d=()=>Math.round(e.y+(a+s+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[h,p]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==n&&(l=h*n);const i=t.append("text");i.attr("x",e.x),i.attr("y",d()),void 0!==e.anchor&&i.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&i.style("font-family",e.fontFamily),void 0!==o&&i.style("font-size",o),void 0!==e.fontWeight&&i.style("font-weight",e.fontWeight),void 0!==e.fill&&i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class),void 0!==e.dy?i.attr("dy",e.dy):0!==l&&i.attr("dy",l);const g=p||r.Z;if(e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(g)}else i.text(g);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(s+=(i._groups||i)[0][0].getBBox().height,a=s),c.push(i)}return c},M=function(t,e){const a=t.append("polygon");var r,s,i,n,o;return a.attr("points",(r=e.x,s=e.y,i=e.width,n=e.height,r+","+s+" "+(r+i)+","+s+" "+(r+i)+","+(s+n-(o=7))+" "+(r+i-1.2*o)+","+(s+n)+" "+r+","+(s+n))),a.attr("class","labelBox"),e.y=e.y+e.height/2,I(t,e),a};let N=-1;const A=(t,e,a,r)=>{t.select&&a.forEach((a=>{const s=e[a],i=t.select("#actor"+s.actorCnt);!r.mirrorActors&&s.stopy?i.attr("y2",s.stopy+s.height/2):r.mirrorActors&&i.attr("y2",s.stopy)}))},O=function(t,e){(0,i.a)(t,e)},S=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}},D=function(){function t(t,e,a,r,s,n,o){i(e.append("text").attr("x",a+s/2).attr("y",r+n/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,s,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,[g,u]=(0,r.D)(d),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,l=e.append("text").attr("x",a+n/2).attr("y",s).style("text-anchor","middle").style("font-size",u).style("font-weight",p).style("font-family",h);l.append("tspan").attr("x",a+n/2).attr("dy",t).text(x[r]),l.attr("y",s+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,c)}}function a(t,a,r,s,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",s).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,s,n,o,c,l),i(h,c)}async function s(t,a,s,n,o,c,l,d){const h=await(0,r.H)(t,(0,r.F)()),p=a.append("switch"),g=p.append("foreignObject").attr("x",s+o/2-h.width/2).attr("y",n+c/2-h.height/2).attr("width",h.width).attr("height",h.height).append("xhtml:div").style("height","100%").style("width","100%");g.append("div").style("text-align","center").style("vertical-align","middle").html(await(0,r.r)(t,(0,r.F)())),e(t,p,s,n,o,c,l,d),i(g,l)}function i(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r,i=!1){return i?s:"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),R=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,g=t.split(r.e.lineBreakRegex);for(let r=0;r<g.length;r++){const t=r*d-d*(g.length-1)/2,n=e.append("text").attr("x",a).attr("y",i).style("text-anchor","start").style("font-size",d).style("font-weight",p).style("font-family",h);n.append("tspan").attr("x",a).attr("dy",t).text(g[r]),n.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(n,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,0,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),C={drawRect:L,drawText:I,drawLabel:M,drawActor:async function(t,e,a,s){switch(e.type){case"actor":return await async function(t,e,a,s){const n=s?e.stopy:e.starty,o=e.x+e.width/2,c=n+80;t.lower(),s||(N++,t.append("line").attr("id","actor"+N).attr("x1",o).attr("y1",c).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),e.actorCnt=N);const l=t.append("g");let d="actor-man";d+=s?` ${v}`:` ${_}`,l.attr("class",d),l.attr("name",e.name);const h=(0,i.g)();h.x=e.x,h.y=n,h.fill="#eaeaea",h.width=e.width,h.height=e.height,h.class="actor",h.rx=3,h.ry=3,l.append("line").attr("id","actor-man-torso"+N).attr("x1",o).attr("y1",n+25).attr("x2",o).attr("y2",n+45),l.append("line").attr("id","actor-man-arms"+N).attr("x1",o-18).attr("y1",n+33).attr("x2",o+18).attr("y2",n+33),l.append("line").attr("x1",o-18).attr("y1",n+60).attr("x2",o).attr("y2",n+45),l.append("line").attr("x1",o).attr("y1",n+45).attr("x2",o+18-2).attr("y2",n+60);const p=l.append("circle");p.attr("cx",e.x+e.width/2),p.attr("cy",n+10),p.attr("r",15),p.attr("width",e.width),p.attr("height",e.height);const g=l.node().getBBox();return e.height=g.height,await D(a,(0,r.G)(e.description))(e.description,l,h.x,h.y+35,h.width,h.height,{class:"actor"},a),e.height}(t,e,a,s);case"participant":return await async function(t,e,a,s){const n=s?e.stopy:e.starty,o=e.x+e.width/2,c=n+5,l=t.append("g").lower();var d,h=l;s||(N++,Object.keys(e.links||{}).length&&!a.forceMenus&&h.attr("onclick",(d=`actor${N}_popup`,"var pu = document.getElementById('"+d+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }")).attr("cursor","pointer"),h.append("line").attr("id","actor"+N).attr("x1",o).attr("y1",c).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),h=l.append("g"),e.actorCnt=N,null!=e.links&&h.attr("id","root-"+N));const p=(0,i.g)();var g="actor";null!=e.properties&&e.properties.class?g=e.properties.class:p.fill="#eaeaea",g+=s?` ${v}`:` ${_}`,p.x=e.x,p.y=n,p.width=e.width,p.height=e.height,p.class=g,p.rx=3,p.ry=3,p.name=e.name;const u=L(h,p);if(e.rectData=p,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?(0,i.b)(h,p.x+p.width-20,p.y+10,t.substr(1)):(0,i.c)(h,p.x+p.width-20,p.y+10,t)}await D(a,(0,r.G)(e.description))(e.description,h,p.x,p.y,p.width,p.height,{class:"actor"},a);let x=e.height;if(u.node){const t=u.node().getBBox();e.height=t.height,x=t.height}return x}(t,e,a,s)}},drawBox:async function(t,e,a){const r=t.append("g");O(r,e),e.name&&await D(a)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),r.lower()},drawPopup:function(t,e,a,r,s){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const i=e.links,o=e.actorCnt,c=e.rectData;var l="none";s&&(l="block !important");const d=t.append("g");d.attr("id","actor"+o+"_popup"),d.attr("class","actorPopupMenu"),d.attr("display",l);var h="";void 0!==c.class&&(h=" "+c.class);let p=c.width>a?c.width:a;const g=d.append("rect");if(g.attr("class","actorPopupMenuPanel"+h),g.attr("x",c.x),g.attr("y",c.height),g.attr("fill",c.fill),g.attr("stroke",c.stroke),g.attr("width",p),g.attr("height",c.height),g.attr("rx",c.rx),g.attr("ry",c.ry),null!=i){var u=20;for(let t in i){var x=d.append("a"),y=(0,n.Jf)(i[t]);x.attr("xlink:href",y),x.attr("target","_blank"),R(r)(t,x,c.x+10,c.height+u,p,20,{class:"actor"},r),u+=30}}return g.attr("height",u),{height:c.height+u,width:p}},anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,r,s){const n=(0,i.g)(),o=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+s%3,n.width=e.stopx-e.startx,n.height=a-e.starty,L(o,n)},drawLoop:async function(t,e,a,s){const{boxMargin:n,boxTextMargin:o,labelBoxHeight:c,labelBoxWidth:l,messageFontFamily:d,messageFontSize:h,messageFontWeight:p}=s,g=t.append("g"),u=function(t,e,a,r){return g.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r).attr("class","loopLine")};u(e.startx,e.starty,e.stopx,e.starty),u(e.stopx,e.starty,e.stopx,e.stopy),u(e.startx,e.stopy,e.stopx,e.stopy),u(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){u(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let x=(0,i.e)();x.text=a,x.x=e.startx,x.y=e.starty,x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.anchor="middle",x.valign="middle",x.tspan=!1,x.width=l||50,x.height=c||20,x.textMargin=o,x.class="labelText",M(g,x),x=S(),x.text=e.title,x.x=e.startx+l/2+(e.stopx-e.startx)/2,x.y=e.starty+n+o,x.anchor="middle",x.valign="middle",x.textMargin=o,x.class="loopText",x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.wrap=!0;let y=(0,r.G)(x.text)?await k(g,x,e):I(g,x);if(void 0!==e.sectionTitles)for(const[i,m]of Object.entries(e.sectionTitles))if(m.message){x.text=m.message,x.x=e.startx+(e.stopx-e.startx)/2,x.y=e.sections[i].y+n+o,x.class="loopText",x.anchor="middle",x.valign="middle",x.tspan=!1,x.fontFamily=d,x.fontSize=h,x.fontWeight=p,x.wrap=e.wrap,(0,r.G)(x.text)?(e.starty=e.sections[i].y,await k(g,x,e)):I(g,x);let t=Math.round(y.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[i].height+=t-(n+o)}return e.height=Math.round(e.stopy-e.starty),g},drawBackgroundRect:O,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.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",15.5).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",4.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:S,getNoteRect:function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},fixLifeLineHeights:A,sanitizeUrl:n.Jf};let $={};const Y={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,j((0,r.c)())},updateVal:function(t,e,a,r){void 0===t[e]?t[e]=a:t[e]=r(a,t[e])},updateBounds:function(t,e,a,r){const s=this;let i=0;function n(n){return function(o){i++;const c=s.sequenceItems.length-i+1;s.updateVal(o,"starty",e-c*$.boxMargin,Math.min),s.updateVal(o,"stopy",r+c*$.boxMargin,Math.max),s.updateVal(Y.data,"startx",t-c*$.boxMargin,Math.min),s.updateVal(Y.data,"stopx",a+c*$.boxMargin,Math.max),"activation"!==n&&(s.updateVal(o,"startx",t-c*$.boxMargin,Math.min),s.updateVal(o,"stopx",a+c*$.boxMargin,Math.max),s.updateVal(Y.data,"starty",e-c*$.boxMargin,Math.min),s.updateVal(Y.data,"stopy",r+c*$.boxMargin,Math.max))}}this.sequenceItems.forEach(n()),this.activations.forEach(n("activation"))},insert:function(t,e,a,s){const i=r.e.getMin(t,a),n=r.e.getMax(t,a),o=r.e.getMin(e,s),c=r.e.getMax(e,s);this.updateVal(Y.data,"startx",i,Math.min),this.updateVal(Y.data,"starty",o,Math.min),this.updateVal(Y.data,"stopx",n,Math.max),this.updateVal(Y.data,"stopy",c,Math.max),this.updateBounds(i,o,n,c)},newActivation:function(t,e,a){const r=a[t.from.actor],s=G(t.from.actor).length||0,i=r.x+r.width/2+(s-1)*$.activationWidth/2;this.activations.push({startx:i,starty:this.verticalPos+2,stopx:i+$.activationWidth,stopy:void 0,actor:t.from.actor,anchored:C.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()},isLoopOverlap:function(){return!!this.sequenceItems.length&&this.sequenceItems[this.sequenceItems.length-1].overlap},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Y.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=r.e.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},B=async function(t,e){Y.bumpVerticalPos($.boxMargin),e.height=$.boxMargin,e.starty=Y.getVerticalPos();const a=(0,i.g)();a.x=e.startx,a.y=e.starty,a.width=e.width||$.width,a.class="note";const s=t.append("g"),n=C.drawRect(s,a),o=(0,i.e)();o.x=e.startx,o.y=e.starty,o.width=a.width,o.dy="1em",o.text=e.message,o.class="noteText",o.fontFamily=$.noteFontFamily,o.fontSize=$.noteFontSize,o.fontWeight=$.noteFontWeight,o.anchor=$.noteAlign,o.textMargin=$.noteMargin,o.valign="center";const c=(0,r.G)(o.text)?await k(s,o):I(s,o),l=Math.round(c.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));n.attr("height",l+2*$.noteMargin),e.height+=l+2*$.noteMargin,Y.bumpVerticalPos(l+2*$.noteMargin),e.stopy=e.starty+l+2*$.noteMargin,e.stopx=e.startx+a.width,Y.insert(e.startx,e.starty,e.stopx,e.stopy),Y.models.addNote(e)},V=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),F=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),q=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});async function W(t,e){Y.bumpVerticalPos(10);const{startx:a,stopx:s,message:i}=e,n=r.e.splitBreaks(i).length,o=(0,r.G)(i),c=o?await(0,r.H)(i,(0,r.c)()):r.u.calculateTextDimensions(i,V($));if(!o){const t=c.height/n;e.height+=t,Y.bumpVerticalPos(t)}let l,d=c.height-10;const h=c.width;if(a===s){l=Y.getVerticalPos()+d,$.rightAngles||(d+=$.boxMargin,l=Y.getVerticalPos()+d),d+=30;const t=r.e.getMax(h/2,$.width/2);Y.insert(a-t,Y.getVerticalPos()-10+d,s+t,Y.getVerticalPos()+30+d)}else d+=$.boxMargin,l=Y.getVerticalPos()+d,Y.insert(a,l-10,s,l);return Y.bumpVerticalPos(d),e.height+=d,e.stopy=e.starty+e.height,Y.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}const z=async function(t,e,a,s){const{startx:n,stopx:o,starty:c,message:l,type:d,sequenceIndex:h,sequenceVisible:p}=e,g=r.u.calculateTextDimensions(l,V($)),u=(0,i.e)();u.x=n,u.y=c+10,u.width=o-n,u.class="messageText",u.dy="1em",u.text=l,u.fontFamily=$.messageFontFamily,u.fontSize=$.messageFontSize,u.fontWeight=$.messageFontWeight,u.anchor=$.messageAlign,u.valign="center",u.textMargin=$.wrapPadding,u.tspan=!1,(0,r.G)(u.text)?await k(t,u,{startx:n,stopx:o,starty:a}):I(t,u);const x=g.width;let y;n===o?y=$.rightAngles?t.append("path").attr("d",`M ${n},${a} H ${n+r.e.getMax($.width/2,x/2)} V ${a+25} H ${n}`):t.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)):(y=t.append("line"),y.attr("x1",n),y.attr("y1",a),y.attr("x2",o),y.attr("y2",a)),d===s.db.LINETYPE.DOTTED||d===s.db.LINETYPE.DOTTED_CROSS||d===s.db.LINETYPE.DOTTED_POINT||d===s.db.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");let m="";$.arrowMarkerAbsolute&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","none"),y.style("fill","none"),d!==s.db.LINETYPE.SOLID&&d!==s.db.LINETYPE.DOTTED||y.attr("marker-end","url("+m+"#arrowhead)"),d!==s.db.LINETYPE.SOLID_POINT&&d!==s.db.LINETYPE.DOTTED_POINT||y.attr("marker-end","url("+m+"#filled-head)"),d!==s.db.LINETYPE.SOLID_CROSS&&d!==s.db.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+m+"#crosshead)"),(p||$.showSequenceNumbers)&&(y.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},H=async function(t,e,a,s){if(s){let s=0;Y.bumpVerticalPos(2*$.boxMargin);for(const i of a){const a=e[i];a.stopy||(a.stopy=Y.getVerticalPos());const n=await C.drawActor(t,a,$,!0);s=r.e.getMax(s,n)}Y.bumpVerticalPos(s+$.boxMargin)}else for(const r of a){const a=e[r];await C.drawActor(t,a,$,!1)}},U=function(t,e,a,r){let s=0,i=0;for(const n of a){const a=e[n],o=Z(a),c=C.drawPopup(t,a,o,$,$.forceMenus,r);c.height>s&&(s=c.height),c.width+a.x>i&&(i=c.width+a.x)}return{maxHeight:s,maxWidth:i}},j=function(t){(0,r.f)($,t),t.fontFamily&&($.actorFontFamily=$.noteFontFamily=$.messageFontFamily=t.fontFamily),t.fontSize&&($.actorFontSize=$.noteFontSize=$.messageFontSize=t.fontSize),t.fontWeight&&($.actorFontWeight=$.noteFontWeight=$.messageFontWeight=t.fontWeight)},G=function(t){return Y.activations.filter((function(e){return e.actor===t}))},K=function(t,e){const a=e[t],s=G(t);return[s.reduce((function(t,e){return r.e.getMin(t,e.startx)}),a.x+a.width/2-1),s.reduce((function(t,e){return r.e.getMax(t,e.stopx)}),a.x+a.width/2+1)]};function X(t,e,a,s,i){Y.bumpVerticalPos(a);let n=s;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,i=V($);e.message=r.u.wrapLabel(`[${e.message}]`,a-2*$.wrapPadding,i),e.width=a,e.wrap=!0;const o=r.u.calculateTextDimensions(e.message,i),c=r.e.getMax(o.height,$.labelBoxHeight);n=s+c,r.l.debug(`${c} - ${e.message}`)}i(e),Y.bumpVerticalPos(n)}function J(t,e,a,r,s,i,n){function o(a,r){a.x<s[t.from].x?(Y.insert(e.stopx-r,e.starty,e.startx,e.stopy+a.height/2+$.noteMargin),e.stopx=e.stopx+r):(Y.insert(e.startx,e.starty,e.stopx+r,e.stopy+a.height/2+$.noteMargin),e.stopx=e.stopx-r)}if(i[t.to]==r){const e=s[t.to];o(e,"actor"==e.type?21:e.width/2+3),e.starty=a-e.height/2,Y.bumpVerticalPos(e.height/2)}else if(n[t.from]==r){const r=s[t.from];if($.mirrorActors){!function(a,r){a.x<s[t.to].x?(Y.insert(e.startx-r,e.starty,e.stopx,e.stopy+a.height/2+$.noteMargin),e.startx=e.startx+r):(Y.insert(e.stopx,e.starty,e.startx+r,e.stopy+a.height/2+$.noteMargin),e.startx=e.startx-r)}(r,"actor"==r.type?18:r.width/2)}r.stopy=a-r.height/2,Y.bumpVerticalPos(r.height/2)}else if(n[t.to]==r){const e=s[t.to];if($.mirrorActors){o(e,"actor"==e.type?21:e.width/2+3)}e.stopy=a-e.height/2,Y.bumpVerticalPos(e.height/2)}}const Z=function(t){let e=0;const a=q($);for(const s in t.links){const t=r.u.calculateTextDimensions(s,a).width+2*$.wrapPadding+2*$.boxMargin;e<t&&(e=t)}return e};const Q=async function(t,e,a){const s=e[t.from].x,i=e[t.to].x,n=t.wrap&&t.message;let o=(0,r.G)(t.message)?await(0,r.H)(t.message,(0,r.c)()):r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,$.width,F($)):t.message,F($));const c={width:n?$.width:r.e.getMax($.width,o.width+2*$.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(c.width=n?r.e.getMax($.width,o.width):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*$.noteMargin),c.startx=s+(e[t.from].width+$.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(c.width=n?r.e.getMax($.width,o.width+2*$.noteMargin):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*$.noteMargin),c.startx=s-c.width+(e[t.from].width-$.actorMargin)/2):t.to===t.from?(o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,r.e.getMax($.width,e[t.from].width),F($)):t.message,F($)),c.width=n?r.e.getMax($.width,e[t.from].width):r.e.getMax(e[t.from].width,$.width,o.width+2*$.noteMargin),c.startx=s+(e[t.from].width-c.width)/2):(c.width=Math.abs(s+e[t.from].width/2-(i+e[t.to].width/2))+$.actorMargin,c.startx=s<i?s+e[t.from].width/2-$.actorMargin/2:i+e[t.to].width/2-$.actorMargin/2),n&&(c.message=r.u.wrapLabel(t.message,c.width-2*$.wrapPadding,F($))),r.l.debug(`NM:[${c.startx},${c.stopx},${c.starty},${c.stopy}:${c.width},${c.height}=${t.message}]`),c},tt=function(t,e,a){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))return{};const[s,i]=K(t.from,e),[n,o]=K(t.to,e),c=s<=n,l=c?i:s;let d=c?n:o;const h=Math.abs(n-o)>2,p=t=>c?-t:t;t.from===t.to?d=l:(t.activate&&!h&&(d+=p($.activationWidth/2-1)),[a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(d+=p(3)));const g=[s,i,n,o],u=Math.abs(l-d);t.wrap&&t.message&&(t.message=r.u.wrapLabel(t.message,r.e.getMax(u+2*$.wrapPadding,$.width),V($)));const x=r.u.calculateTextDimensions(t.message,V($));return{width:r.e.getMax(t.wrap?0:x.width+2*$.wrapPadding,u+2*$.wrapPadding,$.width),height:0,startx:l,stopx:d,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,g),toBounds:Math.max.apply(null,g)}},et=async function(t,e,a,s){const i={},n=[];let o,c,l;for(const d of t){switch(d.id=r.u.random({length:10}),d.type){case s.db.LINETYPE.LOOP_START:case s.db.LINETYPE.ALT_START:case s.db.LINETYPE.OPT_START:case s.db.LINETYPE.PAR_START:case s.db.LINETYPE.PAR_OVER_START:case s.db.LINETYPE.CRITICAL_START:case s.db.LINETYPE.BREAK_START:n.push({id:d.id,msg:d.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case s.db.LINETYPE.ALT_ELSE:case s.db.LINETYPE.PAR_AND:case s.db.LINETYPE.CRITICAL_OPTION:d.message&&(o=n.pop(),i[o.id]=o,i[d.id]=o,n.push(o));break;case s.db.LINETYPE.LOOP_END:case s.db.LINETYPE.ALT_END:case s.db.LINETYPE.OPT_END:case s.db.LINETYPE.PAR_END:case s.db.LINETYPE.CRITICAL_END:case s.db.LINETYPE.BREAK_END:o=n.pop(),i[o.id]=o;break;case s.db.LINETYPE.ACTIVE_START:{const t=e[d.from?d.from.actor:d.to.actor],a=G(d.from?d.from.actor:d.to.actor).length,r=t.x+t.width/2+(a-1)*$.activationWidth/2,s={startx:r,stopx:r+$.activationWidth,actor:d.from.actor,enabled:!0};Y.activations.push(s)}break;case s.db.LINETYPE.ACTIVE_END:{const t=Y.activations.map((t=>t.actor)).lastIndexOf(d.from.actor);delete Y.activations.splice(t,1)[0]}}void 0!==d.placement?(c=await Q(d,e,s),d.noteModel=c,n.forEach((t=>{o=t,o.from=r.e.getMin(o.from,c.startx),o.to=r.e.getMax(o.to,c.startx+c.width),o.width=r.e.getMax(o.width,Math.abs(o.from-o.to))-$.labelBoxWidth}))):(l=tt(d,e,s),d.msgModel=l,l.startx&&l.stopx&&n.length>0&&n.forEach((t=>{if(o=t,l.startx===l.stopx){const t=e[d.from],a=e[d.to];o.from=r.e.getMin(t.x-l.width/2,t.x-t.width/2,o.from),o.to=r.e.getMax(a.x+l.width/2,a.x+t.width/2,o.to),o.width=r.e.getMax(o.width,Math.abs(o.to-o.from))-$.labelBoxWidth}else o.from=r.e.getMin(l.startx,o.from),o.to=r.e.getMax(l.stopx,o.to),o.width=r.e.getMax(o.width,l.width)-$.labelBoxWidth})))}return Y.activations=[],r.l.debug("Loop type widths:",i),i},at={parser:c,db:w,renderer:{bounds:Y,drawActors:H,drawActorsPopup:U,setConf:j,draw:async function(t,e,a,i){const{securityLevel:n,sequence:o}=(0,r.c)();let c;$=o,"sandbox"===n&&(c=(0,s.Ltv)("#i"+e));const l="sandbox"===n?(0,s.Ltv)(c.nodes()[0].contentDocument.body):(0,s.Ltv)("body"),d="sandbox"===n?c.nodes()[0].contentDocument:document;Y.init(),r.l.debug(i.db);const h="sandbox"===n?l.select(`[id="${e}"]`):(0,s.Ltv)(`[id="${e}"]`),p=i.db.getActors(),g=i.db.getCreatedActors(),u=i.db.getDestroyedActors(),x=i.db.getBoxes();let y=i.db.getActorKeys();const m=i.db.getMessages(),b=i.db.getDiagramTitle(),f=i.db.hasAtLeastOneBox(),T=i.db.hasAtLeastOneBoxWithTitle(),E=await async function(t,e,a){const s={};for(const i of e)if(t[i.to]&&t[i.from]){const e=t[i.to];if(i.placement===a.db.PLACEMENT.LEFTOF&&!e.prevActor)continue;if(i.placement===a.db.PLACEMENT.RIGHTOF&&!e.nextActor)continue;const n=void 0!==i.placement,o=!n,c=n?F($):V($),l=i.wrap?r.u.wrapLabel(i.message,$.width-2*$.wrapPadding,c):i.message,d=((0,r.G)(l)?await(0,r.H)(i.message,(0,r.c)()):r.u.calculateTextDimensions(l,c)).width+2*$.wrapPadding;o&&i.from===e.nextActor?s[i.to]=r.e.getMax(s[i.to]||0,d):o&&i.from===e.prevActor?s[i.from]=r.e.getMax(s[i.from]||0,d):o&&i.from===i.to?(s[i.from]=r.e.getMax(s[i.from]||0,d/2),s[i.to]=r.e.getMax(s[i.to]||0,d/2)):i.placement===a.db.PLACEMENT.RIGHTOF?s[i.from]=r.e.getMax(s[i.from]||0,d):i.placement===a.db.PLACEMENT.LEFTOF?s[e.prevActor]=r.e.getMax(s[e.prevActor]||0,d):i.placement===a.db.PLACEMENT.OVER&&(e.prevActor&&(s[e.prevActor]=r.e.getMax(s[e.prevActor]||0,d/2)),e.nextActor&&(s[i.from]=r.e.getMax(s[i.from]||0,d/2)))}return r.l.debug("maxMessageWidthPerActor:",s),s}(p,m,i);if($.height=await async function(t,e,a){let s=0;for(const n of Object.keys(t)){const e=t[n];e.wrap&&(e.description=r.u.wrapLabel(e.description,$.width-2*$.wrapPadding,q($)));const a=(0,r.G)(e.description)?await(0,r.H)(e.description,(0,r.c)()):r.u.calculateTextDimensions(e.description,q($));e.width=e.wrap?$.width:r.e.getMax($.width,a.width+2*$.wrapPadding),e.height=e.wrap?r.e.getMax(a.height,$.height):$.height,s=r.e.getMax(s,e.height)}for(const n in e){const a=t[n];if(!a)continue;const s=t[a.nextActor];if(!s){const t=e[n]+$.actorMargin-a.width/2;a.margin=r.e.getMax(t,$.actorMargin);continue}const i=e[n]+$.actorMargin-a.width/2-s.width/2;a.margin=r.e.getMax(i,$.actorMargin)}let i=0;return a.forEach((e=>{const a=V($);let s=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);s-=2*$.boxTextMargin,e.wrap&&(e.name=r.u.wrapLabel(e.name,s-2*$.wrapPadding,a));const n=r.u.calculateTextDimensions(e.name,a);i=r.e.getMax(n.height,i);const o=r.e.getMax(s,n.width+2*$.wrapPadding);if(e.margin=$.boxTextMargin,s<o){const t=(o-s)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=i)),r.e.getMax(s,$.height)}(p,E,x),C.insertComputerIcon(h),C.insertDatabaseIcon(h),C.insertClockIcon(h),f&&(Y.bumpVerticalPos($.boxMargin),T&&Y.bumpVerticalPos(x[0].textMaxHeight)),!0===$.hideUnusedParticipants){const t=new Set;m.forEach((e=>{t.add(e.from),t.add(e.to)})),y=y.filter((e=>t.has(e)))}await async function(t,e,a,s,i,n,o){let c,l=0,d=0,h=0;for(const p of s){const t=e[p],s=t.box;c&&c!=s&&(o||Y.models.addBox(c),d+=$.boxMargin+c.margin),s&&s!=c&&(o||(s.x=l+d,s.y=i),d+=s.margin),t.width=t.width||$.width,t.height=r.e.getMax(t.height||$.height,$.height),t.margin=t.margin||$.actorMargin,h=r.e.getMax(h,t.height),a[t.name]&&(d+=t.width/2),t.x=l+d,t.starty=Y.getVerticalPos(),Y.insert(t.x,i,t.x+t.width,t.height),l+=t.width+d,t.box&&(t.box.width=l+s.margin-t.box.x),d=t.margin,c=t.box,Y.models.addActor(t)}c&&!o&&Y.models.addBox(c),Y.bumpVerticalPos(h)}(0,p,g,y,0,0,!1);const w=await et(m,p,E,i);function P(t,e){const a=Y.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),C.drawActivation(h,a,e,$,G(t.from.actor).length),Y.insert(a.startx,e-10,a.stopx,e)}C.insertArrowHead(h),C.insertArrowCrossHead(h),C.insertArrowFilledHead(h),C.insertSequenceNumber(h);let _=1,v=1;const L=[],k=[];let I=0;for(const s of m){let t,e,a;switch(s.type){case i.db.LINETYPE.NOTE:Y.resetVerticalPos(),e=s.noteModel,await B(h,e);break;case i.db.LINETYPE.ACTIVE_START:Y.newActivation(s,h,p);break;case i.db.LINETYPE.ACTIVE_END:P(s,Y.getVerticalPos());break;case i.db.LINETYPE.LOOP_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.LOOP_END:t=Y.endLoop(),await C.drawLoop(h,t,"loop",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.RECT_START:X(w,s,$.boxMargin,$.boxMargin,(t=>Y.newLoop(void 0,t.message)));break;case i.db.LINETYPE.RECT_END:t=Y.endLoop(),k.push(t),Y.models.addLoop(t),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos());break;case i.db.LINETYPE.OPT_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.OPT_END:t=Y.endLoop(),await C.drawLoop(h,t,"opt",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.ALT_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.ALT_ELSE:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.ALT_END:t=Y.endLoop(),await C.drawLoop(h,t,"alt",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.PAR_START:case i.db.LINETYPE.PAR_OVER_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t))),Y.saveVerticalPos();break;case i.db.LINETYPE.PAR_AND:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.PAR_END:t=Y.endLoop(),await C.drawLoop(h,t,"par",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.AUTONUMBER:_=s.message.start||_,v=s.message.step||v,s.message.visible?i.db.enableSequenceNumbers():i.db.disableSequenceNumbers();break;case i.db.LINETYPE.CRITICAL_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.CRITICAL_OPTION:X(w,s,$.boxMargin+$.boxTextMargin,$.boxMargin,(t=>Y.addSectionToLoop(t)));break;case i.db.LINETYPE.CRITICAL_END:t=Y.endLoop(),await C.drawLoop(h,t,"critical",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;case i.db.LINETYPE.BREAK_START:X(w,s,$.boxMargin,$.boxMargin+$.boxTextMargin,(t=>Y.newLoop(t)));break;case i.db.LINETYPE.BREAK_END:t=Y.endLoop(),await C.drawLoop(h,t,"break",$),Y.bumpVerticalPos(t.stopy-Y.getVerticalPos()),Y.models.addLoop(t);break;default:try{a=s.msgModel,a.starty=Y.getVerticalPos(),a.sequenceIndex=_,a.sequenceVisible=i.db.showSequenceNumbers();const t=await W(0,a);J(s,a,t,I,p,g,u),L.push({messageModel:a,lineStartY:t}),Y.models.addMessage(a)}catch(K){r.l.error("error while drawing message",K)}}[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(s.type)&&(_+=v),I++}r.l.debug("createdActors",g),r.l.debug("destroyedActors",u),await H(h,p,y,!1);for(const r of L)await z(h,r.messageModel,r.lineStartY,i);$.mirrorActors&&await H(h,p,y,!0),k.forEach((t=>C.drawBackgroundRect(h,t))),A(h,p,y,$);for(const r of Y.models.boxes)r.height=Y.getVerticalPos()-r.y,Y.insert(r.x,r.y,r.x+r.width,r.height),r.startx=r.x,r.starty=r.y,r.stopx=r.startx+r.width,r.stopy=r.starty+r.height,r.stroke="rgb(0,0,0, 0.5)",await C.drawBox(h,r,$);f&&Y.bumpVerticalPos($.boxMargin);const M=U(h,p,y,d),{bounds:N}=Y.getBounds();let O=N.stopy-N.starty;O<M.maxHeight&&(O=M.maxHeight);let S=O+2*$.diagramMarginY;$.mirrorActors&&(S=S-$.boxMargin+$.bottomMarginAdj);let D=N.stopx-N.startx;D<M.maxWidth&&(D=M.maxWidth);const R=D+2*$.diagramMarginX;b&&h.append("text").text(b).attr("x",(N.stopx-N.startx)/2-2*$.diagramMarginX).attr("y",-25),(0,r.i)(h,S,R,$.useMaxWidth);const j=b?40:0;h.attr("viewBox",N.startx-$.diagramMarginX+" -"+($.diagramMarginY+j)+" "+R+" "+(S+j)),r.l.debug("models:",Y.models)}},styles:P,init:({wrap:t})=>{w.setWrap(t)}}},28259:(t,e,a)=>{a.d(e,{a:()=>n,b:()=>l,c:()=>c,d:()=>i,e:()=>h,f:()=>o,g:()=>d});var r=a(16750),s=a(99702);const i=(t,e)=>{const a=t.append("rect");if(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),e.name&&a.attr("name",e.name),void 0!==e.rx&&a.attr("rx",e.rx),void 0!==e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const r in e.attrs)a.attr(r,e.attrs[r]);return void 0!==e.class&&a.attr("class",e.class),a},n=(t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};i(t,a).lower()},o=(t,e)=>{const a=e.text.replace(s.J," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(a),r},c=(t,e,a,s)=>{const i=t.append("image");i.attr("x",e),i.attr("y",a);const n=(0,r.Jf)(s);i.attr("xlink:href",n)},l=(t,e,a,s)=>{const i=t.append("use");i.attr("x",e),i.attr("y",a);const n=(0,r.Jf)(s);i.attr("xlink:href",`#${n}`)},d=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),h=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/981fdc44.2631aab4.js b/assets/js/981fdc44.2631aab4.js new file mode 100644 index 00000000000..9d34d0f25a5 --- /dev/null +++ b/assets/js/981fdc44.2631aab4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4990],{1142:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>u,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>c,toc:()=>d});var s=r(74848),t=r(28453),a=r(11470),i=r(19365);const l={title:"System requirements",sidebar_position:1,description:"Ensure you meet the system requirements to sync and run Besu.",tags:["public networks"]},o="System requirements",c={id:"public-networks/get-started/system-requirements",title:"System requirements",description:"Ensure you meet the system requirements to sync and run Besu.",source:"@site/docs/public-networks/get-started/system-requirements.md",sourceDirName:"public-networks/get-started",slug:"/public-networks/get-started/system-requirements",permalink:"/public-networks/get-started/system-requirements",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/system-requirements.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"System requirements",sidebar_position:1,description:"Ensure you meet the system requirements to sync and run Besu.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Get started",permalink:"/public-networks/get-started"},next:{title:"Installation options",permalink:"/public-networks/get-started/install/"}},u={},d=[{value:"Java distribution and installation",id:"java-distribution-and-installation",level:2},{value:"Java Virtual Machine size",id:"java-virtual-machine-size",level:2},{value:"Disk space",id:"disk-space",level:2},{value:"Disk type",id:"disk-type",level:2},{value:"AWS requirements",id:"aws-requirements",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"system-requirements",children:"System requirements"})}),"\n",(0,s.jsxs)(n.p,{children:["Determine public network system requirements by checking CPU and disk space requirements using ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/monitor/metrics",children:"Prometheus"}),". Grafana provides a ",(0,s.jsx)(n.a,{href:"https://grafana.com/grafana/dashboards/10273",children:"sample dashboard"})," for Besu."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"CPU requirements are highest when syncing to the network and typically reduce after the node is synchronized to the chain head."})}),"\n",(0,s.jsx)(n.h2,{id:"java-distribution-and-installation",children:"Java distribution and installation"}),"\n",(0,s.jsxs)(n.p,{children:["Besu requires an installation of Java 21+ to run.\nWe currently recommend two Java distributions, ",(0,s.jsx)(n.a,{href:"https://jdk.java.net/21/",children:"OpenJDK 21"})," and\n",(0,s.jsx)(n.a,{href:"https://www.eclipse.org/openj9/",children:"OpenJ9"}),", though you can experiment based on your needs."]}),"\n",(0,s.jsx)(n.p,{children:"OpenJDK is the default for many Java users and is balanced in performance and garbage collection.\nOpenJ9 consumes less memory and system resources, but can have worse performance on some setups."}),"\n",(0,s.jsxs)(n.p,{children:["If you have more than 32GB RAM (for Besu and your ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"}),"), use OpenJDK.\nIf you have less RAM:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"If you're on Linux (or Unix-based) and your CPU is x86-64 bit architecture (like Intel), use OpenJ9."}),"\n",(0,s.jsx)(n.li,{children:"If you're on ARM-64 CPU architecture (Mac M-series, Raspberry Pi), use OpenJDK."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"If you have OpenJDK installed or need a fresh installation of OpenJ9, you can pick up the OpenJ9\ndocker image, or install the OpenJ9 JDK using the following steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Get the ",(0,s.jsx)(n.a,{href:"https://github.com/ibmruntimes/semeru21-certified-binaries/releases",children:"binaries"})," corresponding to\nyour OS architecture.\nFor example:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget https://github.com/ibmruntimes/semeru21-certified-binaries/releases/download/jdk-21.0.3%2B9_openj9-0.44.0/ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Uncompress the binaries:"}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(i.A,{value:"Command",label:"Command",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"tar -xvf YOUR_J9_IMAGE.tar.gz\n"})})}),(0,s.jsx)(i.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"tar -xvf ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz\n"})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Move the binaries to ",(0,s.jsx)(n.code,{children:"bin"})," directory:"]}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(i.A,{value:"Command",label:"Command",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo cp -r YOUR_IMAGE/ /usr/bin/\n"})})}),(0,s.jsx)(i.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo cp -r jdk-21.0.3+9/ /usr/bin/\n"})})})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Specify OpenJ9 for Java on your machine:"}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(i.A,{value:"Command",label:"Command",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo update-alternatives --install "/usr/bin/java" "java" "/usr/bin/YOUR_IMAGE" 1\nsudo update-alternatives --config java (and choose OpenJ9)\n'})})}),(0,s.jsx)(i.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'sudo update-alternatives --install "/usr/bin/java" "java" "/usr/bin/jdk-21.0.3+9/bin/java"\n'})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Change your ",(0,s.jsx)(n.code,{children:"JAVA_HOME"})," to OpenJ9 (if using the JDK implementation), where ",(0,s.jsx)(n.code,{children:"jdk-install-dir"})," is\nthe installation location you specified:"]}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(i.A,{value:"Command",label:"Command",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"export JAVA_HOME=jdk-install-dir`\n"})})}),(0,s.jsx)(i.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"export JAVA_HOME=/usr/bin/jdk-21.0.3+9\n"})})})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"java-virtual-machine-size",children:"Java Virtual Machine size"}),"\n",(0,s.jsxs)(n.p,{children:["For Mainnet and testnets, the minimum ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-java/manage-memory",children:"Java Virtual Machine (JVM) memory requirement is 8 GB"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs."}),"\n",(0,s.jsx)(n.h2,{id:"disk-space",children:"Disk space"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"Fast synchronization"})," with ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats",children:"pruning"})," enabled requires approximately 750 GB of disk space. ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"Full synchronization"})," requires approximately 3 TB."]}),"\n",(0,s.jsx)(n.h2,{id:"disk-type",children:"Disk type"}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/disks",children:"local SSD storage"})," for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup."]}),"\n",(0,s.jsxs)(n.p,{children:["You can use local SSDs through ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/SCSI",children:"SCSI interfaces"}),". For higher performance in production settings, we recommend upgrading to ",(0,s.jsx)(n.a,{href:"https://cloud.google.com/compute/docs/disks/local-ssd#performance",children:"NVMe interfaces"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"aws-requirements",children:"AWS requirements"}),"\n",(0,s.jsxs)(n.p,{children:["We are running 22.4.2 Mainnet nodes using ",(0,s.jsx)(n.code,{children:"m6gd.2xlarge"})," boxes."]}),"\n",(0,s.jsxs)(n.p,{children:["We synchronized the 22.4.2 Mainnet nodes using ",(0,s.jsx)(n.code,{children:"m6gd.2xlarge"})," boxes."]}),"\n",(0,s.jsx)(n.p,{children:"Using a larger box while synchronizing speeds up the sync process by giving it more resources. When the sync is completed, the box size can be reduced."}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"If you are using a more recent release than 22.4.2, resource requirements may have increased."})})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},19365:(e,n,r)=>{r.d(n,{A:()=>i});r(96540);var s=r(18215);const t={tabItem:"tabItem_Ymn6"};var a=r(74848);function i(e){let{children:n,hidden:r,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.A)(t.tabItem,i),hidden:r,children:n})}},11470:(e,n,r)=>{r.d(n,{A:()=>k});var s=r(96540),t=r(18215),a=r(23104),i=r(56347),l=r(205),o=r(57485),c=r(31682),u=r(70679);function d(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:r}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:r,attributes:s,default:t}}=e;return{value:n,label:r,attributes:s,default:t}}))}(r);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,r])}function p(e){let{value:n,tabValues:r}=e;return r.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:r}=e;const t=(0,i.W6)(),a=function(e){let{queryString:n=!1,groupId:r}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!r)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:n,groupId:r});return[(0,o.aZ)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace({...t.location,search:n.toString()})}),[a,t])]}function b(e){const{defaultValue:n,queryString:r=!1,groupId:t}=e,a=h(e),[i,o]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:r}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=r.find((e=>e.default))??r[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,d]=m({queryString:r,groupId:t}),[b,x]=function(e){let{groupId:n}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,a]=(0,u.Dv)(r);return[t,(0,s.useCallback)((e=>{r&&a.set(e)}),[r,a])]}({groupId:t}),f=(()=>{const e=c??b;return p({value:e,tabValues:a})?e:null})();(0,l.A)((()=>{f&&o(f)}),[f]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),x(e)}),[d,x,a]),tabValues:a}}var x=r(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=r(74848);function g(e){let{className:n,block:r,selectedValue:s,selectValue:i,tabValues:l}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),u=e=>{const n=e.currentTarget,r=o.indexOf(n),t=l[r].value;t!==s&&(c(n),i(t))},d=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=o.indexOf(e.currentTarget)+1;n=o[r]??o[0];break}case"ArrowLeft":{const r=o.indexOf(e.currentTarget)-1;n=o[r]??o[o.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":r},n),children:l.map((e=>{let{value:n,label:r,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>o.push(e),onKeyDown:d,onClick:u,...a,className:(0,t.A)("tabs__item",f.tabItem,a?.className,{"tabs__item--active":s===n}),children:r??n},n)}))})}function v(e){let{lazy:n,children:r,selectedValue:a}=e;const i=(Array.isArray(r)?r:[r]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function y(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,t.A)("tabs-container",f.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,j.jsx)(y,{...e,children:d(e.children)},String(n))}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>l});var s=r(96540);const t={},a=s.createContext(t);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/99a5eb2e.e27a7309.js b/assets/js/99a5eb2e.e27a7309.js new file mode 100644 index 00000000000..5f119de806c --- /dev/null +++ b/assets/js/99a5eb2e.e27a7309.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4353],{52491:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>a,frontMatter:()=>r,metadata:()=>d,toc:()=>h});var s=n(74848),i=n(28453);const r={title:"Objects",description:"Engine API objects reference",tags:["public networks"]},c="Engine API objects",d={id:"public-networks/reference/engine-api/objects",title:"Objects",description:"Engine API objects reference",source:"@site/docs/public-networks/reference/engine-api/objects.md",sourceDirName:"public-networks/reference/engine-api",slug:"/public-networks/reference/engine-api/objects",permalink:"/public-networks/reference/engine-api/objects",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/engine-api/objects.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Objects",description:"Engine API objects reference",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Engine API",permalink:"/public-networks/reference/engine-api/"},next:{title:"Genesis file items",permalink:"/public-networks/reference/genesis-items"}},l={},h=[{value:"Execution payload object",id:"execution-payload-object",level:2},{value:"Fork choice state object",id:"fork-choice-state-object",level:2},{value:"Payload attributes object",id:"payload-attributes-object",level:2},{value:"Payload status object",id:"payload-status-object",level:2},{value:"Transition configuration object",id:"transition-configuration-object",level:2}];function o(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"engine-api-objects",children:"Engine API objects"})}),"\n",(0,s.jsxs)(t.p,{children:["The following objects are parameters for or returned by the ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/",children:"Engine API methods"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"execution-payload-object",children:"Execution payload object"}),"\n",(0,s.jsxs)(t.p,{children:["Parameter for ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_newpayloadv1",children:(0,s.jsx)(t.code,{children:"engine_newPayloadV1"})}),". Returned by ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_getpayloadv1",children:(0,s.jsx)(t.code,{children:"engine_getPayloadV1"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"parentHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Hash of the parent block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"feeRecipient"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 20 Bytes"]}),(0,s.jsx)(t.td,{children:"Beneficiary of the fee."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"stateRoot"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Root of the final state trie for the block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"receiptsRoot"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Root of the receipts trie for the block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"logsBloom"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 256 Bytes"]}),(0,s.jsx)(t.td,{children:"Bloom filter for light clients to quickly retrieve related logs."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"prevRandao"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Difficulty for this block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"blockNumber"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsx)(t.td,{children:"Block number of block containing this transaction."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"gasLimit"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsx)(t.td,{children:"Maximum gas allowed in this block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"gasUsed"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsx)(t.td,{children:"Total gas used by all transactions in this block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"timestamp"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsx)(t.td,{children:"Unix timestamp (milliseconds) for block assembly."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"extraData"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 0 to 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Extra data field for this block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"baseFeePerGas"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 256 Bits"]}),(0,s.jsxs)(t.td,{children:["The block's ",(0,s.jsx)(t.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:"base fee per gas"}),". This field is empty for blocks created before ",(0,s.jsx)(t.a,{href:"https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md",children:"EIP-1559"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"blockHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Hash of the execution block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"transactions"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:(0,s.jsx)(t.em,{children:"Array"})}),(0,s.jsxs)(t.td,{children:["Array of transaction objects, each object is a list representing ",(0,s.jsx)(t.code,{children:"TransactionType"}),", ",(0,s.jsx)(t.code,{children:"TransactionPayload"}),", or ",(0,s.jsx)(t.code,{children:"LegacyTransaction"})," as defined in ",(0,s.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-2718",children:"EIP-2718"}),"."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"fork-choice-state-object",children:"Fork choice state object"}),"\n",(0,s.jsxs)(t.p,{children:["Parameter for ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_forkchoiceupdatedv1",children:(0,s.jsx)(t.code,{children:"engine_forkchoiceUpdatedV1"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"headBlockHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Block hash of the head of the canonical chain."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"safeBlockHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsxs)(t.td,{children:['"Safe" block hash of the canonical chain under certain synchrony and honesty assumptions. This value MUST be either equal to or an ancestor of ',(0,s.jsx)(t.code,{children:"headBlockHash"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"finalizedBlockHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Block hash of the most recent finalized block."})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"payload-attributes-object",children:"Payload attributes object"}),"\n",(0,s.jsxs)(t.p,{children:["Parameter for ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_forkchoiceupdatedv1",children:(0,s.jsx)(t.code,{children:"engine_forkchoiceUpdatedV1"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"timestamp"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsxs)(t.td,{children:["Value for the ",(0,s.jsx)(t.code,{children:"timestamp"})," field of the new payload."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"prevRandao"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsxs)(t.td,{children:["Value for the ",(0,s.jsx)(t.code,{children:"prevRandao"})," field of the new payload."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"suggestedFeeRecipient"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 20 Bytes"]}),(0,s.jsxs)(t.td,{children:["Suggested value for the ",(0,s.jsx)(t.code,{children:"feeRecipient"})," field of the new payload."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"payload-status-object",children:"Payload status object"}),"\n",(0,s.jsxs)(t.p,{children:["Returned by ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_newpayloadv1",children:(0,s.jsx)(t.code,{children:"engine_newPayloadV1"})})," and ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_forkchoiceupdatedv1",children:(0,s.jsx)(t.code,{children:"engine_forkchoiceUpdatedV1"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"status"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:(0,s.jsx)(t.em,{children:"Enumeration"})}),(0,s.jsxs)(t.td,{children:["Either ",(0,s.jsx)(t.code,{children:'"VALID"'}),", ",(0,s.jsx)(t.code,{children:'"INVALID"'}),", ",(0,s.jsx)(t.code,{children:'"SYNCING"'}),", ",(0,s.jsx)(t.code,{children:'"ACCEPTED"'}),", ",(0,s.jsx)(t.code,{children:'"INVALID_BLOCK_HASH"'}),", or ",(0,s.jsx)(t.code,{children:'"INVALID_TERMINAL_BLOCK"'}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"latestValidHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsx)(t.td,{children:"Hash of the most recent valid block in the branch defined by payload and its ancestors."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"validationError"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:(0,s.jsx)(t.em,{children:"String"})}),(0,s.jsxs)(t.td,{children:["Message providing additional details on the validation error if the payload is classified as ",(0,s.jsx)(t.code,{children:"INVALID"}),", ",(0,s.jsx)(t.code,{children:"INVALID_BLOCK_HASH"})," or ",(0,s.jsx)(t.code,{children:"INVALID_TERMINAL_BLOCK"}),"."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"transition-configuration-object",children:"Transition configuration object"}),"\n",(0,s.jsxs)(t.p,{children:["Parameter for and returned by ",(0,s.jsx)(t.a,{href:"/public-networks/reference/engine-api/#engine_exchangetransitionconfigurationv1",children:(0,s.jsx)(t.code,{children:"engine_exchangeTransitionConfigurationV1"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"terminalTotalDifficulty"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 256 Bits"]}),(0,s.jsxs)(t.td,{children:["Maps on the ",(0,s.jsx)(t.code,{children:"TERMINAL_TOTAL_DIFFICULTY"})," parameter of ",(0,s.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-3675#client-software-configuration",children:"EIP-3675"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"terminalBlockHash"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Data"}),", 32 Bytes"]}),(0,s.jsxs)(t.td,{children:["Maps on the ",(0,s.jsx)(t.code,{children:"TERMINAL_BLOCK_HASH"})," parameter of ",(0,s.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-3675#client-software-configuration",children:"EIP-3675"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"terminalBlockNumber"})}),(0,s.jsxs)(t.td,{style:{textAlign:"center"},children:[(0,s.jsx)(t.em,{children:"Quantity"}),", 64 Bits"]}),(0,s.jsxs)(t.td,{children:["Maps on the ",(0,s.jsx)(t.code,{children:"TERMINAL_BLOCK_NUMBER"})," parameter of ",(0,s.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-3675#client-software-configuration",children:"EIP-3675"}),"."]})]})]})]})]})}function a(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>d});var s=n(96540);const i={},r=s.createContext(i);function c(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9a50decc.b6c64dc3.js b/assets/js/9a50decc.b6c64dc3.js new file mode 100644 index 00000000000..f43d78cc73f --- /dev/null +++ b/assets/js/9a50decc.b6c64dc3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8721],{1770:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>h});var r=t(74848),s=t(28453),i=t(11470),a=t(19365);const o={title:"Create an Ethash network",sidebar_position:5,description:"Create a private network using the Ethash consensus protocol.",tags:["private networks"]},l="Create a private network using Ethash",c={id:"private-networks/tutorials/ethash",title:"Create an Ethash network",description:"Create a private network using the Ethash consensus protocol.",source:"@site/docs/private-networks/tutorials/ethash.md",sourceDirName:"private-networks/tutorials",slug:"/private-networks/tutorials/ethash",permalink:"/private-networks/tutorials/ethash",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/ethash.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Create an Ethash network",sidebar_position:5,description:"Create a private network using the Ethash consensus protocol.",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a Clique network",permalink:"/private-networks/tutorials/clique"},next:{title:"Create a privacy enabled network using the Quickstart",permalink:"/private-networks/tutorials/privacy/"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create directories",id:"1-create-directories",level:3},{value:"2. Create a genesis file",id:"2-create-a-genesis-file",level:3},{value:"3. Start the first node as a bootnode",id:"3-start-the-first-node-as-a-bootnode",level:3},{value:"4. Start Node-2",id:"4-start-node-2",level:3},{value:"5. Start Node-3",id:"5-start-node-3",level:3},{value:"6. Confirm the private network is working",id:"6-confirm-the-private-network-is-working",level:3},{value:"Next steps",id:"next-steps",level:2},{value:"Stop the nodes",id:"stop-the-nodes",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"create-a-private-network-using-ethash",children:"Create a private network using Ethash"})}),"\n",(0,r.jsx)(n.p,{children:"A private network provides a configurable network for testing. By configuring a low difficulty and enabling mining, this allows for fast block creation."}),"\n",(0,r.jsx)(n.p,{children:"You can test multi-block and multi-user scenarios on a private network before moving to one of the public testnets."}),"\n",(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsx)(n.p,{children:"The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall."})}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu"})}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:"Curl (or similar webservice client)"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(n.p,{children:"Listed on the right-hand side of the page are the steps to create a private network using Ethash."}),"\n",(0,r.jsx)(n.h3,{id:"1-create-directories",children:"1. Create directories"}),"\n",(0,r.jsxs)(n.p,{children:["Each node requires a data directory for the blockchain data. When the node starts, Besu saves the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys",children:"node key"})," in this directory."]}),"\n",(0,r.jsx)(n.p,{children:"Create directories for your private network, each of the three nodes, and a data directory for each node:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Private-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-3\n \u251c\u2500\u2500 data\n"})}),"\n",(0,r.jsx)(n.h3,{id:"2-create-a-genesis-file",children:"2. Create a genesis file"}),"\n",(0,r.jsx)(n.p,{children:"The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The genesis file includes entries for configuring the blockchain, such as the mining difficulty and initial accounts and balances."}),"\n",(0,r.jsxs)(n.p,{children:["All nodes in a network must use the same genesis file. The ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/network-and-chain-id",children:"network ID"})," defaults to the ",(0,r.jsx)(n.code,{children:"chainID"})," in the genesis file. The ",(0,r.jsx)(n.code,{children:"fixeddifficulty"})," enables fast block mining."]}),"\n",(0,r.jsxs)(n.p,{children:["Copy the following genesis definition to a file called ",(0,r.jsx)(n.code,{children:"privateNetworkGenesis.json"})," and save it in the ",(0,r.jsx)(n.code,{children:"Private-Network"})," directory:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "berlinBlock": 0,\n "ethash": {\n "fixeddifficulty": 1000\n },\n "chainID": 1337\n },\n "nonce": "0x42",\n "gasLimit": "0x1000000",\n "difficulty": "0x10000",\n "alloc": {\n "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {\n "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "0xad78ebc5ac6200000"\n },\n "f17f52151EbEF6C7334FAD080c5704D77216b732": {\n "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["We recommend specifying the latest ",(0,r.jsx)(n.a,{href:"/public-networks/reference/genesis-items#milestone-blocks",children:"milestone"})," when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes."]})}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Don't use the accounts in ",(0,r.jsx)(n.code,{children:"alloc"})," in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure."]})}),"\n",(0,r.jsx)(n.h3,{id:"3-start-the-first-node-as-a-bootnode",children:"3. Start the first node as a bootnode"}),"\n",(0,r.jsx)(n.p,{children:"Start Node-1:"}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist="*" --rpc-http-cors-origins="all"\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line enables:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Mining and specifies the account to pay mining rewards to using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-enabled",children:(0,r.jsx)(n.code,{children:"--miner-enabled"})})," and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#miner-coinbase",children:(0,r.jsx)(n.code,{children:"--miner-coinbase"})})," options."]}),"\n",(0,r.jsxs)(n.li,{children:["JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["All-host access to the HTTP JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(n.code,{children:"--host-allowlist"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["All-domain access to the node through the HTTP JSON-RPC API using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(n.code,{children:"--rpc-http-cors-origins"})})," option."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"The miner coinbase account is one of the accounts defined in the genesis file."})}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Node 1 Enode URL",src:t(14739).A+"",width:"988",height:"126"})}),"\n",(0,r.jsx)(n.h3,{id:"4-start-node-2",children:"4. Start Node-2"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-2"})," directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304\n"})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30304\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 for P2P discovery using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["The enode URL of Node-1 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bootnodes",children:(0,r.jsx)(n.code,{children:"--bootnodes"})})," option."]}),"\n",(0,r.jsxs)(n.li,{children:["A data directory for Node-2 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsx)(n.li,{children:"A genesis file as for Node-1."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"5-start-node-3",children:"5. Start Node-3"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-3"})," directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(a.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305\n"})})}),(0,r.jsx)(a.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30305\n"})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A different port to Node-1 and Node-2 for P2P discovery."}),"\n",(0,r.jsxs)(n.li,{children:["A data directory for Node-3 using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option."]}),"\n",(0,r.jsx)(n.li,{children:"A bootnode and genesis file as for Node-2."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"6-confirm-the-private-network-is-working",children:"6. Confirm the private network is working"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, use curl to call the JSON-RPC API ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,r.jsx)(n.code,{children:"net_peerCount"})})," method and confirm the nodes are functioning as peers:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}\' localhost:8545\n'})}),"\n",(0,r.jsx)(n.p,{children:"The result confirms Node-1 (the node running the JSON-RPC service) has two peers (Node-2 and Node-3):"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x2"\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,r.jsxs)(n.p,{children:["Import accounts to MetaMask and send transactions as described in the ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Besu doesn't support ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"private key management"}),"."]})}),"\n",(0,r.jsxs)(n.p,{children:["Send transactions using ",(0,r.jsx)(n.code,{children:"eth_sendRawTransaction"})," to ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/",children:"send ether or, deploy or invoke contracts"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/json-rpc",children:"JSON-RPC API"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Start a node with the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-ws-enabled"})})," option and use the ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub",children:"RPC Pub/Sub API"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"stop-the-nodes",children:"Stop the nodes"}),"\n",(0,r.jsx)(n.p,{children:"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["To restart the private network in the future, start from ",(0,r.jsx)(n.a,{href:"#3-start-the-first-node-as-a-bootnode",children:"3. Start the first node as a bootnode"}),"."]})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var i=t(74848);function a(e){let{children:n,hidden:t,className:a}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,a),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>k});var r=t(96540),s=t(18215),i=t(23104),a=t(56347),o=t(205),l=t(57485),c=t(31682),d=t(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const s=(0,a.W6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=u(e),[a,l]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[c,h]=f({queryString:t,groupId:s}),[b,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,d.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),j=(()=>{const e=c??b;return p({value:e,tabValues:i})?e:null})();(0,o.A)((()=>{j&&l(j)}),[j]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),h(e),x(e)}),[h,x,i]),tabValues:i}}var x=t(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=t(74848);function g(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),s=o[t].value;s!==r&&(c(n),a(s))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:h,onClick:d,...i,className:(0,s.A)("tabs__item",j.tabItem,i?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:i}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function w(e){const n=b(e);return(0,m.jsxs)("div",{className:(0,s.A)("tabs-container",j.tabList),children:[(0,m.jsx)(g,{...n,...e}),(0,m.jsx)(v,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,m.jsx)(w,{...e,children:h(e.children)},String(n))}},14739:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var r=t(96540);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9bb932b9.afa89081.js b/assets/js/9bb932b9.afa89081.js new file mode 100644 index 00000000000..ac525916d51 --- /dev/null +++ b/assets/js/9bb932b9.afa89081.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1589],{65463:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var n=o(74848),r=o(28453);const s={title:"Deploy to the cloud",sidebar_position:1,description:"Deploying Besu to the cloud",tags:["private networks"]},i="Deploy Besu to the cloud",l={id:"private-networks/how-to/deploy/cloud",title:"Deploy to the cloud",description:"Deploying Besu to the cloud",source:"@site/docs/private-networks/how-to/deploy/cloud.md",sourceDirName:"private-networks/how-to/deploy",slug:"/private-networks/how-to/deploy/cloud",permalink:"/private-networks/how-to/deploy/cloud",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/deploy/cloud.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Deploy to the cloud",sidebar_position:1,description:"Deploying Besu to the cloud",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use onchain permissioning",permalink:"/private-networks/how-to/use-permissioning/onchain"},next:{title:"Use Ansible",permalink:"/private-networks/how-to/deploy/ansible"}},a={},d=[];function c(e){const t={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"deploy-besu-to-the-cloud",children:"Deploy Besu to the cloud"})}),"\n",(0,n.jsx)(t.p,{children:"When deploying Besu to the cloud:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Ensure you have enough spread across Availability Zones (AZs) and Regions, especially for bootnodes and validators."}),"\n",(0,n.jsx)(t.li,{children:"If your network is a multi-region network, consider using VPC Peering to reduce latency."}),"\n",(0,n.jsx)(t.li,{children:"Where required, use VPNs to connect to your on premise systems, or single private chains."}),"\n",(0,n.jsxs)(t.li,{children:["If deploying to Kubernetes, please refer to the ",(0,n.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/",children:"tutorial"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>l});var n=o(96540);const r={},s=n.createContext(r);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9ffeb22a.49801fbd.js b/assets/js/9ffeb22a.49801fbd.js new file mode 100644 index 00000000000..7b27aaa3fa5 --- /dev/null +++ b/assets/js/9ffeb22a.49801fbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9334],{55847:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>d});var r=t(74848),s=t(28453),o=t(11470),a=t(19365);const l={title:"Consensus protocols",description:"Besu consensus protocols",sidebar_position:1,tags:["private networks"]},i="Consensus protocols",u={id:"private-networks/how-to/configure/consensus/index",title:"Consensus protocols",description:"Besu consensus protocols",source:"@site/docs/private-networks/how-to/configure/consensus/index.md",sourceDirName:"private-networks/how-to/configure/consensus",slug:"/private-networks/how-to/configure/consensus/",permalink:"/private-networks/how-to/configure/consensus/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/consensus/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Consensus protocols",description:"Besu consensus protocols",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"How to",permalink:"/private-networks/how-to/"},next:{title:"QBFT",permalink:"/private-networks/how-to/configure/consensus/qbft"}},c={},d=[];function p(e){const n={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"consensus-protocols",children:"Consensus protocols"})}),"\n",(0,r.jsx)(n.p,{children:"Besu supports the following consensus protocols:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," (proof of authority) - The recommended enterprise-grade consensus protocol for private networks."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," (proof of authority) - Supported for existing private networks."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"})," (proof of authority) - Not recommended for production use."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"Proof of stake"})," - Used on Ethereum Mainnet and public testnets."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/",children:"Ethash"})," (proof of work) - Can be used in ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/ethash",children:"small development networks"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["See a ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/poa",children:"comparison of the proof of authority consensus protocols"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"config"})," property in the genesis file specifies the consensus protocol for a chain."]}),"\n",(0,r.jsxs)(o.A,{children:[(0,r.jsx)(a.A,{value:"Ethash",label:"Ethash",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ethash": {\n ...\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(a.A,{value:"Clique",label:"Clique",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "clique": {\n ...\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(a.A,{value:"IBFT 2.0",label:"IBFT 2.0",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "ibft2": {\n ...\n }\n },\n ...\n}\n'})})}),(0,r.jsx)(a.A,{value:"QBFT",label:"QBFT",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n ...\n }\n },\n ...\n}\n'})})})]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>a});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var o=t(74848);function a(e){let{children:n,hidden:t,className:a}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,a),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>k});var r=t(96540),s=t(18215),o=t(23104),a=t(56347),l=t(205),i=t(57485),u=t(31682),c=t(70679);function d(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,u.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function h(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const s=(0,a.W6)(),o=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,i.aZ)(o),(0,r.useCallback)((e=>{if(!o)return;const n=new URLSearchParams(s.location.search);n.set(o,e),s.replace({...s.location,search:n.toString()})}),[o,s])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=p(e),[a,i]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!h({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:o}))),[u,d]=f({queryString:t,groupId:s}),[b,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,o]=(0,c.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&o.set(e)}),[t,o])]}({groupId:s}),v=(()=>{const e=u??b;return h({value:e,tabValues:o})?e:null})();(0,l.A)((()=>{v&&i(v)}),[v]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!h({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),m(e)}),[d,m,o]),tabValues:o}}var m=t(92303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(74848);function w(e){let{className:n,block:t,selectedValue:r,selectValue:a,tabValues:l}=e;const i=[],{blockElementScrollPositionUntilNextRender:u}=(0,o.a_)(),c=e=>{const n=e.currentTarget,t=i.indexOf(n),s=l[t].value;s!==r&&(u(n),a(s))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=i.indexOf(e.currentTarget)+1;n=i[t]??i[0];break}case"ArrowLeft":{const t=i.indexOf(e.currentTarget)-1;n=i[t]??i[i.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:l.map((e=>{let{value:n,label:t,attributes:o}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>i.push(e),onKeyDown:d,onClick:c,...o,className:(0,s.A)("tabs__item",v.tabItem,o?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function x(e){let{lazy:n,children:t,selectedValue:o}=e;const a=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=a.find((e=>e.props.value===o));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:a.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==o})))})}function j(e){const n=b(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",v.tabList),children:[(0,g.jsx)(w,{...n,...e}),(0,g.jsx)(x,{...n,...e})]})}function k(e){const n=(0,m.A)();return(0,g.jsx)(j,{...e,children:d(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var r=t(96540);const s={},o=r.createContext(s);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a0520cc7.101b9a64.js b/assets/js/a0520cc7.101b9a64.js new file mode 100644 index 00000000000..7b23ee5d1dd --- /dev/null +++ b/assets/js/a0520cc7.101b9a64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5936],{24450:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"How to","slug":"public-networks/how-to","permalink":"/public-networks/how-to","sidebar":"publicDocSidebar","navigation":{"previous":{"title":"Migrate to Besu","permalink":"/public-networks/get-started/migrate-to-besu"},"next":{"title":"Configure Besu","permalink":"/public-networks/how-to/configure-besu/"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/a0f949fc.bcd58d85.js b/assets/js/a0f949fc.bcd58d85.js new file mode 100644 index 00000000000..fd79a2b99a3 --- /dev/null +++ b/assets/js/a0f949fc.bcd58d85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8587],{48098:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var l=s(74848),a=s(28453),r=s(11470),t=s(19365);const i={title:"Subcommands",description:"Besu command line interface subcommands",sidebar_position:2,tags:["public networks","private networks"]},o="Subcommands",c={id:"public-networks/reference/cli/subcommands",title:"Subcommands",description:"Besu command line interface subcommands",source:"@site/docs/public-networks/reference/cli/subcommands.md",sourceDirName:"public-networks/reference/cli",slug:"/public-networks/reference/cli/subcommands",permalink:"/public-networks/reference/cli/subcommands",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/cli/subcommands.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Subcommands",description:"Besu command line interface subcommands",sidebar_position:2,tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Options",permalink:"/public-networks/reference/cli/options"},next:{title:"Besu API",permalink:"/public-networks/reference/api/"}},d={},h=[{value:"<code>blocks</code>",id:"blocks",level:2},{value:"<code>import</code>",id:"import",level:3},{value:"<code>export</code>",id:"export",level:3},{value:"<code>operator</code>",id:"operator",level:2},{value:"<code>generate-log-bloom-cache</code>",id:"generate-log-bloom-cache",level:3},{value:"<code>password</code>",id:"password",level:2},{value:"<code>hash</code>",id:"hash",level:3},{value:"<code>public-key</code>",id:"public-key",level:2},{value:"<code>export</code>",id:"export-1",level:3},{value:"<code>export-address</code>",id:"export-address",level:3},{value:"<code>retesteth</code>",id:"retesteth",level:2},{value:"<code>storage</code>",id:"storage",level:2},{value:"<code>revert-metadata</code>",id:"revert-metadata",level:3},{value:"<code>revert-variables</code>",id:"revert-variables",level:3},{value:"<code>rocksdb usage</code>",id:"rocksdb-usage",level:3},{value:"<code>trie-log</code>",id:"trie-log",level:3},{value:"<code>count</code>",id:"count",level:4},{value:"<code>prune</code>",id:"prune",level:4},{value:"<code>validate-config</code>",id:"validate-config",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"subcommands",children:"Subcommands"})}),"\n",(0,l.jsx)(n.p,{children:"This reference describes the syntax of the Besu command line interface (CLI) subcommands."}),"\n",(0,l.jsx)(n.admonition,{type:"note",children:(0,l.jsxs)(n.p,{children:["This reference contains subcommands that apply to both public and private networks. For private-network-specific subcommands, see the ",(0,l.jsx)(n.a,{href:"/private-networks/reference/cli/subcommands",children:"private network subcommands reference"}),"."]})}),"\n",(0,l.jsx)(n.p,{children:"To start a Besu node using subcommands, run:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS]\n"})}),"\n",(0,l.jsx)(n.p,{children:"If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu Tab+Tab\n"})}),"\n",(0,l.jsx)(n.h2,{id:"blocks",children:(0,l.jsx)(n.code,{children:"blocks"})}),"\n",(0,l.jsx)(n.p,{children:"Provides blocks related actions."}),"\n",(0,l.jsx)(n.h3,{id:"import",children:(0,l.jsx)(n.code,{children:"import"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu blocks import [--skip-pow-validation-enabled] [--start-block=<LONG>] [--end-block=<LONG>] --from=<block-file>\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu blocks import --skip-pow-validation-enabled --start-block=100 --end-block=300 --from=/home/me/me_project/mainnet-export1.blocks --from=/home/me/me_project/mainnet-export2.blocks\n"})})})]}),"\n",(0,l.jsx)(n.p,{children:"Imports a block or range of blocks from the specified file into the blockchain database."}),"\n",(0,l.jsxs)(n.p,{children:["You can specify the starting index of the block range to import with ",(0,l.jsx)(n.code,{children:"--start-block"}),". If omitted, the default start block is 0 (the beginning of the chain)."]}),"\n",(0,l.jsxs)(n.p,{children:["You can specify the ending index (exclusive) of the block range to import with ",(0,l.jsx)(n.code,{children:"--end-block"}),". If omitted, all blocks after the start block are imported."]}),"\n",(0,l.jsxs)(n.p,{children:["You can specify multiple ",(0,l.jsx)(n.code,{children:"--from"})," arguments. This can be useful when blocks have been exported over time to multiple files. If multiple files are provided they are read in the order specified in the command."]}),"\n",(0,l.jsxs)(n.p,{children:["Including ",(0,l.jsx)(n.code,{children:"--skip-pow-validation-enabled"})," skips validation of the ",(0,l.jsx)(n.code,{children:"mixHash"})," when importing blocks."]}),"\n",(0,l.jsx)(n.admonition,{type:"note",children:(0,l.jsxs)(n.p,{children:["Use ",(0,l.jsx)(n.code,{children:"--skip-pow-validation-enabled"})," when performing ",(0,l.jsx)(n.a,{href:"https://github.com/ethereum/hive",children:"Ethereum Foundation hive testing"}),"."]})}),"\n",(0,l.jsx)(n.h3,{id:"export",children:(0,l.jsx)(n.code,{children:"export"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu blocks export [--start-block=<LONG>] [--end-block=<LONG>] --to=<block-file>\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --network=holesky --data-path=/home/data/ blocks export --start-block=100 --end-block=300 --to=/home/exportblock.bin\n"})})})]}),"\n",(0,l.jsx)(n.p,{children:"Exports a block or range of blocks from storage to a file in RLP format."}),"\n",(0,l.jsxs)(n.p,{children:["If you omit ",(0,l.jsx)(n.code,{children:"--start-block"}),", the default start block is 0 (the beginning of the chain), and if you omit ",(0,l.jsx)(n.code,{children:"--end-block"}),", the default end block is the current chain head."]}),"\n",(0,l.jsxs)(n.p,{children:["If you are not running the command against the default network (Mainnet), specify the ",(0,l.jsx)(n.code,{children:"--network"})," or ",(0,l.jsx)(n.code,{children:"--genesis-file"})," parameter."]}),"\n",(0,l.jsx)(n.h2,{id:"operator",children:(0,l.jsx)(n.code,{children:"operator"})}),"\n",(0,l.jsx)(n.p,{children:"Provides operator actions."}),"\n",(0,l.jsx)(n.h3,{id:"generate-log-bloom-cache",children:(0,l.jsx)(n.code,{children:"generate-log-bloom-cache"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu operator generate-log-bloom-cache [--start-block=<BLOCK_NUMBER>] [--end-block=<BLOCK_NUMBER>]\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --network=holesky --data-path=/project/holesky operator generate-log-bloom-cache --start-block=0 --end-block=100000\n"})})})]}),"\n",(0,l.jsx)(n.admonition,{type:"tip",children:(0,l.jsxs)(n.p,{children:["Manually executing ",(0,l.jsx)(n.code,{children:"generate-log-bloom-cache"})," is not required unless you set the ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:(0,l.jsx)(n.code,{children:"--auto-log-bloom-caching-enabled"})})," command line option to false."]})}),"\n",(0,l.jsx)(n.p,{children:"Generates cached log bloom indexes for blocks. APIs use the cached indexes for improved log query performance."}),"\n",(0,l.jsx)(n.admonition,{type:"note",children:(0,l.jsx)(n.p,{children:"Each index file contains 100000 blocks. The last fragment of blocks less that 100000 are not indexed."})}),"\n",(0,l.jsxs)(n.p,{children:["To generate cached log bloom indexes while the node is running, use the ",(0,l.jsx)(n.a,{href:"/public-networks/reference/api/#admin_generatelogbloomcache",children:(0,l.jsx)(n.code,{children:"admin_generateLogBloomCache"})})," API."]}),"\n",(0,l.jsx)(n.h2,{id:"password",children:(0,l.jsx)(n.code,{children:"password"})}),"\n",(0,l.jsx)(n.p,{children:"Provides password related actions."}),"\n",(0,l.jsx)(n.h3,{id:"hash",children:(0,l.jsx)(n.code,{children:"hash"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu password hash --password=<my-password>\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu password hash --password=myPassword123\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Generates the hash of a given password. Include the hash in the ",(0,l.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate#credentials-file",children:"credentials file"})," for JSON-RPC API ",(0,l.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/authenticate",children:"authentication"}),"."]}),"\n",(0,l.jsx)(n.h2,{id:"public-key",children:(0,l.jsx)(n.code,{children:"public-key"})}),"\n",(0,l.jsx)(n.p,{children:"Provides node public key related actions."}),"\n",(0,l.jsx)(n.admonition,{type:"caution",children:(0,l.jsxs)(n.p,{children:["To get the public key or address of a node, ensure you use the ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,l.jsx)(n.code,{children:"--data-path"})})," or ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,l.jsx)(n.code,{children:"--node-private-key-file"})})," option with the ",(0,l.jsx)(n.code,{children:"public-key"})," command. Otherwise, a new ",(0,l.jsx)(n.a,{href:"/public-networks/concepts/node-keys",children:"node key"})," is silently generated when starting Besu."]})}),"\n",(0,l.jsx)(n.h3,{id:"export-1",children:(0,l.jsx)(n.code,{children:"export"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu public-key export [--node-private-key-file=<file>] [--to=<key-file>] [--ec-curve=<ec-curve-name>]\n"})})}),(0,l.jsx)(t.A,{value:"Example to standard output",label:"Example (to standard output)",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --data-path=<node data path> public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1\n"})})}),(0,l.jsx)(t.A,{value:"Example to file",label:"Example (to file)",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --data-path=<node data path> public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/not_precious_pub_key --ec-curve=secp256k1\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Outputs the node public key to standard output or to the file specified by ",(0,l.jsx)(n.code,{children:"--to=<key-file>"}),". You can output the public key associated with a specific private key file using the ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,l.jsx)(n.code,{children:"--node-private-key-file"})})," option. The default elliptic curve used for the key is ",(0,l.jsx)(n.code,{children:"secp256k1"}),". Use the ",(0,l.jsx)(n.code,{children:"--ec-curve"})," option to choose between ",(0,l.jsx)(n.code,{children:"secp256k1"})," or ",(0,l.jsx)(n.code,{children:"secp256r1"}),"."]}),"\n",(0,l.jsx)(n.h3,{id:"export-address",children:(0,l.jsx)(n.code,{children:"export-address"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu public-key export-address [--node-private-key-file=<file>] [--to=<address-file>] [--ec-curve=<ec-curve-name>]\n"})})}),(0,l.jsx)(t.A,{value:"Example to standard output",label:"Example (to standard output)",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --data-path=<node data path> public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1\n"})})}),(0,l.jsx)(t.A,{value:"Example to file",label:"Example (to file)",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --data-path=<node data path> public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/me_node_address --ec-curve=secp256k1\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Outputs the node address to standard output or to the file specified by ",(0,l.jsx)(n.code,{children:"--to=<address-file>"}),". You can output the address associated with a specific private key file using the ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#node-private-key-file",children:(0,l.jsx)(n.code,{children:"--node-private-key-file"})})," option. The default elliptic curve used for the key is ",(0,l.jsx)(n.code,{children:"secp256k1"}),". Use the ",(0,l.jsx)(n.code,{children:"--ec-curve"})," option to choose between ",(0,l.jsx)(n.code,{children:"secp256k1"})," or ",(0,l.jsx)(n.code,{children:"secp256r1"}),"."]}),"\n",(0,l.jsx)(n.h2,{id:"retesteth",children:(0,l.jsx)(n.code,{children:"retesteth"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu retesteth [--data-path=<PATH>] [--rpc-http-host=<HOST>] [--rpc-http-port=<PORT>] [-l=<LOG VERBOSITY LEVEL>] [--host-allowlist=<hostname>[,<hostname>\u2026]\u2026 or * or all]\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu retesteth --data-path=/home/me/me_node --rpc-http-port=8590 --host-allowlist=*\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Runs a Retesteth-compatible server. ",(0,l.jsx)(n.a,{href:"https://github.com/ethereum/retesteth/wiki",children:"Retesteth"})," is a developer tool that can generate and run consensus tests against any Ethereum client running such a server."]}),"\n",(0,l.jsx)(n.p,{children:"The command accepts the following command line options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,l.jsx)(n.code,{children:"--data-path"})})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,l.jsx)(n.code,{children:"--host-allowlist"})})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,l.jsx)(n.code,{children:"--rpc-http-host"})})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,l.jsx)(n.code,{children:"--rpc-http-port"})})}),"\n",(0,l.jsx)(n.li,{children:(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#logging",children:(0,l.jsx)(n.code,{children:"--logging"})})}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"storage",children:(0,l.jsx)(n.code,{children:"storage"})}),"\n",(0,l.jsx)(n.p,{children:"Provides storage related actions."}),"\n",(0,l.jsx)(n.h3,{id:"revert-metadata",children:(0,l.jsx)(n.code,{children:"revert-metadata"})}),"\n",(0,l.jsx)(r.A,{children:(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu storage revert-metadata v2-to-v1\n"})})})}),"\n",(0,l.jsxs)(n.p,{children:["Reverts the modifications made by the ",(0,l.jsx)(n.a,{href:"https://github.com/hyperledger/besu/pull/6555",children:"database metadata refactor"}),".\nIf you need to downgrade Besu, run this subcommand before installing the previous binaries."]}),"\n",(0,l.jsx)(n.h3,{id:"revert-variables",children:(0,l.jsx)(n.code,{children:"revert-variables"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file <PATH-TO-CONFIG-FILE> storage revert-variables\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file config.toml storage revert-variables\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Reverts the modifications made by the ",(0,l.jsx)(n.a,{href:"https://github.com/hyperledger/besu/pull/5471",children:"variables storage feature"}),".\nIf you need to downgrade Besu, first run this subcommand specifying the path to\nthe ",(0,l.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"})," normally used to\nstart Besu."]}),"\n",(0,l.jsx)(n.h3,{id:"rocksdb-usage",children:(0,l.jsx)(n.code,{children:"rocksdb usage"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file <PATH-TO-CONFIG-FILE> storage rocksdb usage\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file config.toml storage rocksdb usage\n"})})}),(0,l.jsx)(t.A,{value:"Example output",label:"Example output",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"|--------------------------------|-----------------|-------------|-----------------|------------------|\n| Column Family | Keys | Total Size | SST Files Size | Blob Files Size |\n|--------------------------------|-----------------|-------------|-----------------|------------------|\n| BLOCKCHAIN | 2355141414 | 933 GiB | 166 GiB | 767 GiB |\n| VARIABLES | 26 | 240 KiB | 240 KiB | 0 B |\n| ACCOUNT_INFO_STATE | 9634454 | 496 MiB | 496 MiB | 0 B |\n| ACCOUNT_STORAGE_STORAGE | 24041432 | 1 GiB | 1 GiB | 0 B |\n| CODE_STORAGE | 37703864 | 12 GiB | 12 GiB | 0 B |\n| TRIE_BRANCH_STORAGE | 1885032116 | 138 GiB | 138 GiB | 0 B |\n| TRIE_LOG_STORAGE | 267301 | 17 GiB | 17 GiB | 0 B |\n|--------------------------------|-----------------|-------------|-----------------|------------------|\n| ESTIMATED TOTAL | 4311820607 | 1104 GiB | 337 GiB | 767 GiB |\n|--------------------------------|-----------------|-------------|-----------------|------------------|\n"})})})]}),"\n",(0,l.jsx)(n.p,{children:"Displays the disk space used by the RocksDB key-value database, categorized into column families."}),"\n",(0,l.jsx)(n.h3,{id:"trie-log",children:(0,l.jsx)(n.code,{children:"trie-log"})}),"\n",(0,l.jsx)(n.p,{children:"Provides actions related to managing, recording, and logging changes for the Bonsai Trie data."}),"\n",(0,l.jsx)(n.h4,{id:"count",children:(0,l.jsx)(n.code,{children:"count"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file <PATH-TO-CONFIG-FILE> storage trie-log count\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file config.toml storage trie-log count\n"})})}),(0,l.jsx)(t.A,{value:"Example output",label:"Example output",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"trieLog count: 742311\n - canonical count: 681039\n - fork count: 217\n - orphaned count: 61055\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Displays the number of trie logs in the database.\nThis is the number of keys for the ",(0,l.jsx)(n.code,{children:"TRIE_LOG_STORAGE"})," ",(0,l.jsx)(n.a,{href:"#rocksdb-usage",children:"column family in RocksDB"}),".\nThe following are specified in the ",(0,l.jsx)(n.code,{children:"trieLog count"}),":"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"canonical count"})," represents the finalized blockchain."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"fork count"})," represents non-finalized branches of the blockchain."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"orphaned count"})," represents trie logs not in the blockchain, which can occur during block creation."]}),"\n"]}),"\n",(0,l.jsx)(n.h4,{id:"prune",children:(0,l.jsx)(n.code,{children:"prune"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file <PATH-TO-CONFIG-FILE> storage trie-log prune\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file config.toml storage trie-log prune\n"})})}),(0,l.jsx)(t.A,{value:"Example setting retention limit",label:"Example setting retention limit",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu --config-file config.toml --bonsai-historical-block-limit=1024 storage trie-log prune\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Removes all trie log layers below the specified retention limit, including orphaned trie logs.\nYou can configure the retention limit using ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:(0,l.jsx)(n.code,{children:"--bonsai-historical-block-limit"})}),".\nThe retention limit should match the configuration used with ",(0,l.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-limit-trie-logs-enabled",children:(0,l.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})}),".\nThe default limit is ",(0,l.jsx)(n.code,{children:"512"}),"."]}),"\n",(0,l.jsx)(n.h2,{id:"validate-config",children:(0,l.jsx)(n.code,{children:"validate-config"})}),"\n",(0,l.jsxs)(r.A,{children:[(0,l.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu validate-config --config-file <PATH-TO-CONFIG-FILE>\n"})})}),(0,l.jsx)(t.A,{value:"Example",label:"Example",children:(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"besu validate-config --config-file config.toml\n"})})})]}),"\n",(0,l.jsxs)(n.p,{children:["Performs basic syntax validation of the specified ",(0,l.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),". Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup)."]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>t});s(96540);var l=s(18215);const a={tabItem:"tabItem_Ymn6"};var r=s(74848);function t(e){let{children:n,hidden:s,className:t}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,l.A)(a.tabItem,t),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>y});var l=s(96540),a=s(18215),r=s(23104),t=s(56347),i=s(205),o=s(57485),c=s(31682),d=s(70679);function h(e){return l.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,l.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:s}=e;return(0,l.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:l,default:a}}=e;return{value:n,label:s,attributes:l,default:a}}))}(s);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:s}=e;const a=(0,t.W6)(),r=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,o.aZ)(r),(0,l.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})}),[r,a])]}function b(e){const{defaultValue:n,queryString:s=!1,groupId:a}=e,r=u(e),[t,o]=(0,l.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const l=s.find((e=>e.default))??s[0];if(!l)throw new Error("Unexpected error: 0 tabValues");return l.value}({defaultValue:n,tabValues:r}))),[c,h]=x({queryString:s,groupId:a}),[b,m]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,r]=(0,d.Dv)(s);return[a,(0,l.useCallback)((e=>{s&&r.set(e)}),[s,r])]}({groupId:a}),f=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,i.A)((()=>{f&&o(f)}),[f]);return{selectedValue:t,selectValue:(0,l.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),m(e)}),[h,m,r]),tabValues:r}}var m=s(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=s(74848);function g(e){let{className:n,block:s,selectedValue:l,selectValue:t,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),a=i[s].value;a!==l&&(c(n),t(a))},h=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;n=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;n=o[s]??o[o.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":s},n),children:i.map((e=>{let{value:n,label:s,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:l===n?0:-1,"aria-selected":l===n,ref:e=>o.push(e),onKeyDown:h,onClick:d,...r,className:(0,a.A)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":l===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===r));return e?(0,l.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,l.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function k(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,a.A)("tabs-container",f.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function y(e){const n=(0,m.A)();return(0,j.jsx)(k,{...e,children:h(e.children)},String(n))}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>i});var l=s(96540);const a={},r=l.createContext(a);function t(e){const n=l.useContext(r);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),l.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a2bd30e6.b9419280.js b/assets/js/a2bd30e6.b9419280.js new file mode 100644 index 00000000000..02d643e2291 --- /dev/null +++ b/assets/js/a2bd30e6.b9419280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6792],{37416:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>p,contentTitle:()=>t,default:()=>l,frontMatter:()=>o,metadata:()=>c,toc:()=>a});var s=i(74848),r=i(28453);const o={title:"Permissioning plugin",description:"Plugin based permissioning",sidebar_position:2,tags:["private networks"]},t="Permissioning plugin",c={id:"private-networks/concepts/permissioning/plugin",title:"Permissioning plugin",description:"Plugin based permissioning",source:"@site/docs/private-networks/concepts/permissioning/plugin.md",sourceDirName:"private-networks/concepts/permissioning",slug:"/private-networks/concepts/permissioning/plugin",permalink:"/private-networks/concepts/permissioning/plugin",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/permissioning/plugin.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Permissioning plugin",description:"Plugin based permissioning",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Onchain permissioning",permalink:"/private-networks/concepts/permissioning/onchain"},next:{title:"Public key infrastructure",permalink:"/private-networks/concepts/pki"}},p={},a=[{value:"Connection permissioning",id:"connection-permissioning",level:2},{value:"Message permissioning",id:"message-permissioning",level:2},{value:"Register your plugin",id:"register-your-plugin",level:2}];function g(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"permissioning-plugin",children:"Permissioning plugin"})}),"\n",(0,s.jsxs)(n.p,{children:["You can define complex ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/permissioning/",children:"permissioning"})," solutions by building a plugin that extends Besu functionality."]}),"\n",(0,s.jsxs)(n.p,{children:["The plugin API provides a ",(0,s.jsx)(n.code,{children:"PermissioningService"})," interface that currently supports connection permissioning and message permissioning."]}),"\n",(0,s.jsx)(n.h2,{id:"connection-permissioning",children:"Connection permissioning"}),"\n",(0,s.jsx)(n.p,{children:"Use connection permissioning when deciding whether to restrict node access to known participants only."}),"\n",(0,s.jsx)(n.h2,{id:"message-permissioning",children:"Message permissioning"}),"\n",(0,s.jsx)(n.p,{children:"Use message permissioning to propagate different types of devP2P messages to particular nodes. For example, this can be used to prevent pending transactions from being forwarded to other nodes."}),"\n",(0,s.jsx)(n.h2,{id:"register-your-plugin",children:"Register your plugin"}),"\n",(0,s.jsxs)(n.p,{children:["To enable permissioning in your plugin, implement the ",(0,s.jsx)(n.code,{children:"PermissioningService"})," interface and register your providers."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:"@AutoService(BesuPlugin.class)\npublic class TestPermissioningPlugin implements BesuPlugin {\n PermissioningService service;\n @Override\n public void register(final BesuContext context) {\n service = context.getService(PermissioningService.class).get();\n }\n @Override\n public void start() {\n service.registerNodePermissioningProvider((sourceEnode, destinationEnode) -> {\n // perform logic for node permissioning\n return true;\n });\n service.registerNodeMessagePermissioningProvider((destinationEnode, code) -> {\n // perform logic for message permissioning\n return true;\n });\n }\n @Override\n public void stop() {}\n}\n"})})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var s=i(96540);const r={},o=s.createContext(r);function t(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a626427b.ae5b558b.js b/assets/js/a626427b.ae5b558b.js new file mode 100644 index 00000000000..cf501924f8c --- /dev/null +++ b/assets/js/a626427b.ae5b558b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[779],{70459:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var s=n(74848),a=n(28453);const r={title:"Maintenance",sidebar_position:5,description:"Maintenance for Besu on a Kubernetes cluster",tags:["private networks"]},i="Maintenance",o={id:"private-networks/tutorials/kubernetes/maintenance",title:"Maintenance",description:"Maintenance for Besu on a Kubernetes cluster",source:"@site/docs/private-networks/tutorials/kubernetes/maintenance.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/maintenance",permalink:"/private-networks/tutorials/kubernetes/maintenance",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/maintenance.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Maintenance",sidebar_position:5,description:"Maintenance for Besu on a Kubernetes cluster",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use the Quorum Explorer",permalink:"/private-networks/tutorials/kubernetes/quorum-explorer"},next:{title:"Production",permalink:"/private-networks/tutorials/kubernetes/production"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Update a persistent volume claim size",id:"update-a-persistent-volume-claim-size",level:2},{value:"Update Besu versions",id:"update-besu-versions",level:2}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"maintenance",children:"Maintenance"})}),"\n",(0,s.jsx)(t.p,{children:"You can perform maintenance for Besu on a Kubernetes cluster."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Clone the ",(0,s.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository"]}),"\n",(0,s.jsxs)(t.li,{children:["A ",(0,s.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"running Kubernetes cluster"})," with a ",(0,s.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"network"})]}),"\n",(0,s.jsxs)(t.li,{children:["Install ",(0,s.jsx)(t.a,{href:"https://kubernetes.io/docs/tasks/tools/",children:"Kubectl"})]}),"\n",(0,s.jsxs)(t.li,{children:["Install ",(0,s.jsx)(t.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm3"})]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"update-a-persistent-volume-claim-size",children:"Update a persistent volume claim size"}),"\n",(0,s.jsxs)(t.p,{children:["Over time, as the chain grows, so will the amount of space used by the persistent volume claim (PVC). As of Kubernetes v1.11, ",(0,s.jsx)(t.a,{href:"https://kubernetes.io/docs/concepts/storage/storage-classes/#allow-volume-expansion",children:"certain types of Storage Classes"})," allow volume resizing. Production charts for Azure use Azure Files, and on AWS use EBS Block Store which allow for volume expansion."]}),"\n",(0,s.jsxs)(t.p,{children:["To update the volume size, you must update the override values file. For example, to increase the size on the transaction nodes volumes, add the following snippet to the ",(0,s.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/txnode.yml",children:(0,s.jsx)(t.code,{children:"txnode values.yml"})})," file, with the new size limit (the following example uses 50Gi)."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'storage:\n sizeLimit: "50Gi"\n pvcSizeLimit: "50Gi"\n'})}),"\n",(0,s.jsx)(t.p,{children:"Once complete, update the node via helm:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm upgrade tx-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml\n"})}),"\n",(0,s.jsx)(t.h2,{id:"update-besu-versions",children:"Update Besu versions"}),"\n",(0,s.jsx)(t.admonition,{type:"important",children:(0,s.jsx)(t.p,{children:"When updating Besu nodes across a cluster, perform the updates as a rolling update and not all at once, especially for the validator pool. If all the validators are taken offline, the chain halts, and you must wait for round changes to expire before blocks are created again."})}),"\n",(0,s.jsxs)(t.p,{children:["Updates for Besu can be done via Helm in exactly the same manner as other applications. Alternatively, this can be done via ",(0,s.jsx)(t.code,{children:"kubectl"}),". This example updates a node called ",(0,s.jsx)(t.code,{children:"besu-validator-3"}),":"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Set the update policy to use rolling updates (if not done already):"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'kubectl patch statefulset besu-validator-3 --namespace besu -p \'{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}\'\n'})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Update the Besu version via Helm:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm upgrade bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml --set image.besu.tag=21.10.0\n"})}),"\n",(0,s.jsxs)(t.p,{children:["Or via ",(0,s.jsx)(t.code,{children:"kubectl"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'kubectl patch statefulset besu-validator-3 --namespace besu --type=\'json\' -p=\'[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"hyperledger/besu:21.10.0"}]\'\n'})}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var s=n(96540);const a={},r=s.createContext(a);function i(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7456010.396c4ea2.js b/assets/js/a7456010.396c4ea2.js new file mode 100644 index 00000000000..8101cf4a0aa --- /dev/null +++ b/assets/js/a7456010.396c4ea2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1235],{88552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.3a315759.js b/assets/js/a7bd4aaa.3a315759.js new file mode 100644 index 00000000000..80da1bdf4a1 --- /dev/null +++ b/assets/js/a7bd4aaa.3a315759.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7098],{74532:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(96540);var r=s(1003),o=s(82565),t=s(23025),c=s(22831),i=s(41463),u=s(74848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.A,{version:e.version,tag:(0,o.k)(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(t.n,{version:e,children:(0,c.v)(s.routes)})})}function d(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.98eb17a6.js b/assets/js/a94703ab.98eb17a6.js new file mode 100644 index 00000000000..ad5aece3637 --- /dev/null +++ b/assets/js/a94703ab.98eb17a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9048],{11377:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(96540),o=n(18215),i=n(1003),s=n(17559),l=n(26972),r=n(60609),c=n(21312),d=n(23104),u=n(75062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(74848);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.gk)();return(0,d.Mq)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.$)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(53109),x=n(56347),f=n(24581),j=n(6342),v=n(23465);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("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"}),(0,b.jsx)("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 A={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",A.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:A.collapseSidebarButtonIcon})})}var k=n(65041),C=n(89532);const S=Symbol("EmptyContext"),T=a.createContext(S);function N(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(T.Provider,{value:i,children:t})}var I=n(41422),B=n(99169),y=n(28774),w=n(92303);function L(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function E(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.p)(),v=function(e){const t=(0,w.A)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.Nr)(e):void 0),[e,t])}(t),_=(0,l.w8)(t,i),A=(0,B.ys)(x,i),{collapsed:g,setCollapsed:k}=(0,I.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:N,setExpandedItem:E}=function(){const e=(0,a.useContext)(T);if(e===S)throw new C.dV("DocSidebarItemsExpandedStateProvider");return e}(),M=function(e){void 0===e&&(e=!g),E(e?null:c),k(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,C.ZC)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:M}),(0,a.useEffect)((()=>{h&&null!=N&&N!==c&&f&&k(!0)}),[h,N,c,k,f]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":A}),children:[(0,b.jsx)(y.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?M(!1):(e.preventDefault(),M())}:()=>{n?.(t)},"aria-current":A?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?v??"#":v,...d,children:m}),x&&h&&(0,b.jsx)(L,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),M()}})]}),(0,b.jsx)(I.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(U,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var M=n(16654),H=n(43186);const G={menuExternalLink:"menuExternalLink_NmtK"};function W(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l.w8)(t,a),x=(0,M.A)(d);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(y.A,{className:(0,o.A)("menu__link",!x&&G.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.A,{})]})},u)}const P={menuHtmlItem:"menuHtmlItem_M9Kj"};function R(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(n),l&&[P.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function D(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(E,{item:t,...n});case"html":return(0,b.jsx)(R,{item:t,...n});default:return(0,b.jsx)(W,{item:t,...n})}}function F(e){let{items:t,...n}=e;const a=(0,l.Y)(t,n.activePath);return(0,b.jsx)(N,{children:a.map(((e,t)=>(0,b.jsx)(D,{item:e,index:t,...n},t)))})}const U=(0,a.memo)(F),V={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function Y(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,k.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",V.menu,l&&V.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:n,activePath:t,level:1})})})}const K="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",q="sidebarHidden_VK0M",O="sidebarLogo_isFc";function J(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(K,s&&z,i&&q),children:[s&&(0,b.jsx)(v.A,{tabIndex:-1,className:O}),(0,b.jsx)(Y,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const Q=a.memo(J);var X=n(75600),Z=n(22069);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Z.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(X.GX,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Q,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.T)({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,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.t)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.A)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.t)();return(0,b.jsx)("main",{className:(0,o.A)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.t)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(23363);function be(e){const t=(0,l.B5)(e);if(!t)return(0,b.jsx)(me.A,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(r.V,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},23363:(e,t,n)=>{n.d(t,{A:()=>l});n(96540);var a=n(18215),o=n(21312),i=n(51107),s=n(74848);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"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/a99a03ac.f53b1c99.js b/assets/js/a99a03ac.f53b1c99.js new file mode 100644 index 00000000000..0ea6a2eba73 --- /dev/null +++ b/assets/js/a99a03ac.f53b1c99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9624],{95062:(t,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=a(74848),e=a(28453);const o={title:"Transaction validation",sidebar_position:3,description:"What transaction validation and when",tags:["public networks","private networks"]},s="Transaction validation",r={id:"public-networks/concepts/transactions/validation",title:"Transaction validation",description:"What transaction validation and when",source:"@site/docs/public-networks/concepts/transactions/validation.md",sourceDirName:"public-networks/concepts/transactions",slug:"/public-networks/concepts/transactions/validation",permalink:"/public-networks/concepts/transactions/validation",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/transactions/validation.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Transaction validation",sidebar_position:3,description:"What transaction validation and when",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Transaction pool",permalink:"/public-networks/concepts/transactions/pool"},next:{title:"Network ID and chain ID",permalink:"/public-networks/concepts/network-and-chain-id"}},c={},l=[];function d(t){const n={admonition:"admonition",h1:"h1",header:"header",img:"img",p:"p",...(0,e.R)(),...t.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"transaction-validation",children:"Transaction validation"})}),"\n",(0,i.jsx)(n.p,{children:"For transactions submitted and added to a block, Besu validates the transactions, as illustrated in the following diagram."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Transaction Validation",src:a(35027).A+"",width:"1380",height:"1310"})}),"\n",(0,i.jsx)(n.p,{children:"Besu repeats the set of transaction pool validations after propagating the transaction. Besu repeats the same set of validations when importing the block that includes the transaction, except the nonce must be exactly right when importing the block."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Private transactions are not added to the transaction pool. The privacy marker transaction is submitted to the transaction pool but the private transaction itself is directly distributed to the transaction participants."})}),"\n",(0,i.jsx)(n.p,{children:"When adding the transaction to a block, Besu performs an additional validation to check that the transaction gas limit is less than the remaining block gas limit. After creating a block, the node imports the block and then repeats the transaction pool validations."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The transaction is only added if the entire transaction gas limit is less than the remaining gas for the block. The total gas used by the transaction is not relevant to this validation. That is, if the total gas used by the transaction is less than the remaining block gas, but the transaction gas limit is more than the remaining block gas, the transaction is not added."})})]})}function p(t={}){const{wrapper:n}={...(0,e.R)(),...t.components};return n?(0,i.jsx)(n,{...t,children:(0,i.jsx)(d,{...t})}):d(t)}},35027:(t,n,a)=>{a.d(n,{A:()=>i});const i=a.p+"assets/images/transaction-validation-3e8deafb4d76b8cab2bc1d341ebeb0a9.png"},28453:(t,n,a)=>{a.d(n,{R:()=>s,x:()=>r});var i=a(96540);const e={},o=i.createContext(e);function s(t){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof t?t(n):{...n,...t}}),[n,t])}function r(t){let n;return n=t.disableParentContext?"function"==typeof t.components?t.components(e):t.components||e:s(t.components),i.createElement(o.Provider,{value:n},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/aa0c6744.5bbc0d85.js b/assets/js/aa0c6744.5bbc0d85.js new file mode 100644 index 00000000000..d49be17f3cb --- /dev/null +++ b/assets/js/aa0c6744.5bbc0d85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6867],{44207:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var s=t(74848),r=t(28453),a=t(11470),i=t(19365);const o={title:"Run Besu and Teku on Mainnet",sidebar_position:1,description:"Run Besu and Teku on Ethereum Mainnet.",tags:["public networks"]},l="Run Besu and Teku on Mainnet",c={id:"public-networks/tutorials/besu-teku-mainnet",title:"Run Besu and Teku on Mainnet",description:"Run Besu and Teku on Ethereum Mainnet.",source:"@site/docs/public-networks/tutorials/besu-teku-mainnet.md",sourceDirName:"public-networks/tutorials",slug:"/public-networks/tutorials/besu-teku-mainnet",permalink:"/public-networks/tutorials/besu-teku-mainnet",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/tutorials/besu-teku-mainnet.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Run Besu and Teku on Mainnet",sidebar_position:1,description:"Run Besu and Teku on Ethereum Mainnet.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Tutorials",permalink:"/public-networks/tutorials"},next:{title:"Run Besu and Teku on a testnet",permalink:"/public-networks/tutorials/besu-teku-testnet"}},d={},u=[{value:"1. Install Besu and Teku",id:"1-install-besu-and-teku",level:2},{value:"2. Generate the shared secret",id:"2-generate-the-shared-secret",level:2},{value:"3. Generate validator keys",id:"3-generate-validator-keys",level:2},{value:"4. Start Besu",id:"4-start-besu",level:2},{value:"5. Start Teku",id:"5-start-teku",level:2},{value:"Beacon node only",id:"beacon-node-only",level:3},{value:"Beacon node and validator client",id:"beacon-node-and-validator-client",level:3},{value:"6. Wait for Besu and Teku to sync",id:"6-wait-for-besu-and-teku-to-sync",level:2},{value:"7. Stake ETH",id:"7-stake-eth",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"run-besu-and-teku-on-mainnet",children:"Run Besu and Teku on Mainnet"})}),"\n",(0,s.jsxs)(n.p,{children:["Run Besu as an ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," and ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/",children:"Teku"})," as a ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"})," on Ethereum Mainnet."]}),"\n",(0,s.jsx)(n.h2,{id:"1-install-besu-and-teku",children:"1. Install Besu and Teku"}),"\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu"})," and ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Get-Started/Installation-Options/Install-Binaries/",children:"Teku"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions."}),"\n",(0,s.jsxs)(n.p,{children:["Ensure you meet the ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/system-requirements",children:"system requirements for Besu on public networks"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"2-generate-the-shared-secret",children:"2. Generate the shared secret"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'openssl rand -hex 32 | tr -d "\\n" > jwtsecret.hex\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You will specify ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api",children:"Engine API"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"3-generate-validator-keys",children:"3. Generate validator keys"}),"\n",(0,s.jsxs)(n.p,{children:["If you're running Teku as a beacon node only, skip to the ",(0,s.jsx)(n.a,{href:"#4-start-besu",children:"next step"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"If you're also running Teku as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator)."}),"\n",(0,s.jsxs)(n.p,{children:["Generate validator keys and stake your ETH for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.p,{children:["Save the password you use to generate each key pair in a ",(0,s.jsx)(n.code,{children:".txt"})," file."]}),(0,s.jsxs)(n.p,{children:["You should also have a ",(0,s.jsx)(n.code,{children:".json"})," file for each validator key pair."]})]}),"\n",(0,s.jsx)(n.h2,{id:"4-start-besu",children:"4. Start Besu"}),"\n",(0,s.jsxs)(n.p,{children:["Run the following command or specify the options in a ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"besu \\\n --sync-mode=SNAP \\\n --data-storage-format=BONSAI \\\n --rpc-http-enabled=true \\\n --p2p-host=<your public IP> \\\n --host-allowlist=<your public IP>,127.0.0.1,localhost \\\n --engine-host-allowlist=<your public IP>,127.0.0.1,localhost \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n"})}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-jwt-secret",children:(0,s.jsx)(n.code,{children:"--engine-jwt-secret"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The public IP address of your Besu node using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,s.jsx)(n.code,{children:"--host-allowlist"})})," and ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-host-allowlist",children:(0,s.jsx)(n.code,{children:"--engine-host-allowlist"})})," options."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Also, in the command:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,s.jsx)(n.code,{children:"--sync-mode"})})," specifies using ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap sync"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,s.jsx)(n.code,{children:"--data-storage-format"})})," specifies using ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,s.jsx)(n.code,{children:"--rpc-http-enabled"})})," enables the HTTP JSON-RPC service."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-rpc-enabled",children:(0,s.jsx)(n.code,{children:"--engine-rpc-enabled"})})," enables the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/engine-api/",children:"Engine API"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h2,{id:"5-start-teku",children:"5. Start Teku"}),"\n",(0,s.jsx)(n.p,{children:"Open a new terminal window."}),"\n",(0,s.jsx)(n.h3,{id:"beacon-node-only",children:"Beacon node only"}),"\n",(0,s.jsxs)(n.p,{children:["To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Configure/Use-Configuration-File/",children:"Teku configuration file"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"teku \\\n --ee-endpoint=http://localhost:8551 \\\n --ee-jwt-secret-file=<path to jwtsecret.hex> \\\n --metrics-enabled=true \\\n --rest-api-enabled=true \\\n --p2p-advertised-ip=<your public IP> \\\n --checkpoint-sync-url=<checkpoint sync URL>\n"})}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-jwt-secret-file",children:(0,s.jsx)(n.code,{children:"--ee-jwt-secret-file"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The public IP address of your Teku node using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#p2p-advertised-ip",children:(0,s.jsx)(n.code,{children:"--p2p-advertised-ip"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The URL of a checkpoint sync endpoint using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#checkpoint-sync-url",children:(0,s.jsx)(n.code,{children:"--checkpoint-sync-url"})})," option."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Also, in the command:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-endpoint",children:(0,s.jsx)(n.code,{children:"--ee-endpoint"})})," is set to the default URL of Besu's Engine API."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#metrics-enabled",children:(0,s.jsx)(n.code,{children:"--metrics-enabled"})})," enables Teku's metrics exporter."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#rest-api-enabled",children:(0,s.jsx)(n.code,{children:"--rest-api-enabled"})})," enables Teku's REST API service."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/Reference/CLI/CLI-Syntax/",children:"Teku command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h3,{id:"beacon-node-and-validator-client",children:"Beacon node and validator client"}),"\n",(0,s.jsxs)(n.p,{children:["To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Configure/Use-Configuration-File/",children:"Teku configuration file"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"teku \\\n --ee-endpoint http://localhost:8551 \\\n --ee-jwt-secret-file <path to jwtsecret.hex> \\\n --metrics-enabled=true \\\n --rest-api-enabled=true \\\n --checkpoint-sync-url=<checkpoint sync URL> \\\n --validators-proposer-default-fee-recipient=<ETH address> \\\n --validator-keys=<path to key file>:<path to password file>[,<path to key file>:<path to password file>,...]\n"})}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-jwt-secret-file",children:(0,s.jsx)(n.code,{children:"--ee-jwt-secret-file"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The URL of a checkpoint sync endpoint using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#checkpoint-sync-url",children:(0,s.jsx)(n.code,{children:"--checkpoint-sync-url"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["An Ethereum address you own as the default fee recipient using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#validators-proposer-default-fee-recipient",children:(0,s.jsx)(n.code,{children:"--validators-proposer-default-fee-recipient"})}),"\noption."]}),"\n",(0,s.jsxs)(n.li,{children:["The paths to the keystore ",(0,s.jsx)(n.code,{children:".json"})," file and password ",(0,s.jsx)(n.code,{children:".txt"})," file created in\n",(0,s.jsx)(n.a,{href:"#3-generate-validator-keys",children:"step 3"})," for each validator using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#validator-keys",children:(0,s.jsx)(n.code,{children:"--validator-keys"})})," option.\nSeparate the ",(0,s.jsx)(n.code,{children:".json"})," and ",(0,s.jsx)(n.code,{children:".txt"})," files with a colon, and separate entries for multiple validators with commas."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Also, in the command:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-endpoint",children:(0,s.jsx)(n.code,{children:"--ee-endpoint"})})," is set to the default URL of Besu's Engine API."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#metrics-enabled",children:(0,s.jsx)(n.code,{children:"--metrics-enabled"})})," enables Teku's metrics exporter."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#rest-api-enabled",children:(0,s.jsx)(n.code,{children:"--rest-api-enabled"})})," enables Teku's REST API service."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/Reference/CLI/CLI-Syntax/",children:"Teku command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h2,{id:"6-wait-for-besu-and-teku-to-sync",children:"6. Wait for Besu and Teku to sync"}),"\n",(0,s.jsx)(n.p,{children:"After starting Besu and Teku, your node starts syncing and connecting to peers."}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(i.A,{value:"Besu logs",label:"Besu logs",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{"@timestamp":"2023-02-03T04:43:49,555","level":"INFO","thread":"main","class":"DefaultSynchronizer","message":"Starting synchronizer.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,556","level":"INFO","thread":"main","class":"FastSyncDownloader","message":"Starting sync","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,559","level":"INFO","thread":"main","class":"Runner","message":"Ethereum main loop is up.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:53,106","level":"INFO","thread":"Timer-0","class":"DNSResolver","message":"Resolved 2409 nodes","throwable":""}\n{"@timestamp":"2023-02-03T04:45:04,803","level":"INFO","thread":"nioEventLoopGroup-3-10","class":"SnapWorldStateDownloader","message":"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36\ncb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0","throwable":""}\n{"@timestamp":"2023-02-03T04:46:04,834","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.08%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:48:01,840","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.23%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:49:09,931","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.41%, Peer count: 11","throwable":""}\n{"@timestamp":"2023-02-03T04:50:12,466","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.61%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:20,977","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.75%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:28,985","level":"INFO","thread":"EthScheduler-Services-29 (importBlock)","class":"FastImportBlocksStep","message":"Block import progress: 180400 of 16545859 (1%)","throwable":""}\n'})})}),(0,s.jsx)(i.A,{value:"Teku logs",label:"Teku logs",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8\n2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10\n2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8\n2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6\n2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days."}),"\n",(0,s.jsx)(n.h2,{id:"7-stake-eth",children:"7. Stake ETH"}),"\n",(0,s.jsxs)(n.p,{children:["Stake your ETH for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can check your validator status by searching your Ethereum address on the ",(0,s.jsx)(n.a,{href:"https://beaconcha.in/",children:"Beacon Chain explorer"}),". It may take up to multiple days for your validator to be activated and start proposing blocks."]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var s=t(18215);const r={tabItem:"tabItem_Ymn6"};var a=t(74848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,i),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>v});var s=t(96540),r=t(18215),a=t(23104),i=t(56347),o=t(205),l=t(57485),c=t(31682),d=t(70679);function u(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:r}}=e;return{value:n,label:t,attributes:s,default:r}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.W6)(),a=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(a),(0,s.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(r.location.search);n.set(a,e),r.replace({...r.location,search:n.toString()})}),[a,r])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,a=h(e),[i,l]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a}))),[c,u]=f({queryString:t,groupId:r}),[b,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,a]=(0,d.Dv)(t);return[r,(0,s.useCallback)((e=>{t&&a.set(e)}),[t,a])]}({groupId:r}),m=(()=>{const e=c??b;return p({value:e,tabValues:a})?e:null})();(0,o.A)((()=>{m&&l(m)}),[m]);return{selectedValue:i,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),x(e)}),[u,x,a]),tabValues:a}}var x=t(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=t(74848);function g(e){let{className:n,block:t,selectedValue:s,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,a.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),r=o[t].value;r!==s&&(c(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:o.map((e=>{let{value:n,label:t,attributes:a}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...a,className:(0,r.A)("tabs__item",m.tabItem,a?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function k(e){let{lazy:n,children:t,selectedValue:a}=e;const i=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function y(e){const n=b(e);return(0,j.jsxs)("div",{className:(0,r.A)("tabs-container",m.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(k,{...n,...e})]})}function v(e){const n=(0,x.A)();return(0,j.jsx)(y,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var s=t(96540);const r={},a=s.createContext(r);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aa612600.83b9921f.js b/assets/js/aa612600.83b9921f.js new file mode 100644 index 00000000000..b9895b81462 --- /dev/null +++ b/assets/js/aa612600.83b9921f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2778],{31204:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>i,toc:()=>h});var s=a(74848),l=a(28453),r=a(11470),t=a(19365);const c={title:"EVM tool options",sidebar_position:5,toc_max_heading_level:3,description:"Besu EVM tool options reference",tags:["public networks","private networks"]},d="EVM tool reference",i={id:"public-networks/reference/evm-tool",title:"EVM tool options",description:"Besu EVM tool options reference",source:"@site/docs/public-networks/reference/evm-tool.md",sourceDirName:"public-networks/reference",slug:"/public-networks/reference/evm-tool",permalink:"/public-networks/reference/evm-tool",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/evm-tool.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"EVM tool options",sidebar_position:5,toc_max_heading_level:3,description:"Besu EVM tool options reference",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Genesis file items",permalink:"/public-networks/reference/genesis-items"},next:{title:"Transaction trace types",permalink:"/public-networks/reference/trace-types"}},o={},h=[{value:"Options",id:"options",level:2},{value:"<code>code</code>",id:"code",level:3},{value:"<code>gas</code>",id:"gas",level:3},{value:"<code>price</code>",id:"price",level:3},{value:"<code>sender</code>",id:"sender",level:3},{value:"<code>receiver</code>",id:"receiver",level:3},{value:"<code>input</code>",id:"input",level:3},{value:"<code>value</code>",id:"value",level:3},{value:"<code>json</code>, <code>trace</code>",id:"json-trace",level:3},{value:"<code>json-alloc</code>",id:"json-alloc",level:3},{value:"<code>[no]memory</code>, <code>trace.[no]memory</code>",id:"nomemory-tracenomemory",level:3},{value:"<code>trace.[no]stack</code>",id:"tracenostack",level:3},{value:"<code>trace.[no]returndata</code>",id:"tracenoreturndata",level:3},{value:"<code>[no]time</code>",id:"notime",level:3},{value:"<code>genesis</code>",id:"genesis",level:3},{value:"<code>chain</code>",id:"chain",level:3},{value:"<code>repeat</code>",id:"repeat",level:3},{value:"<code>revert-reason-enabled</code>",id:"revert-reason-enabled",level:3},{value:"<code>fork</code>",id:"fork",level:3},{value:"<code>key-value-storage</code>",id:"key-value-storage",level:3},{value:"<code>data-path</code>",id:"data-path",level:3},{value:"<code>block-number</code>",id:"block-number",level:3},{value:"<code>version</code>",id:"version",level:3},{value:"Subcommands",id:"subcommands",level:2},{value:"<code>code-validate</code>",id:"code-validate",level:3},{value:"Use command arguments",id:"use-command-arguments",level:4},{value:"Use standard input",id:"use-standard-input",level:4},{value:"<code>state-test</code>",id:"state-test",level:3},{value:"Use command arguments",id:"use-command-arguments-1",level:4},{value:"Use standard input",id:"use-standard-input-1",level:4},{value:"<code>transition</code>, <code>t8n</code>, <code>t8n-server</code>",id:"transition-t8n-t8n-server",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",p:"p",pre:"pre",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"evm-tool-reference",children:"EVM tool reference"})}),"\n",(0,s.jsxs)(n.p,{children:["This reference describes ",(0,s.jsx)(n.a,{href:"#options",children:"options"})," and ",(0,s.jsx)(n.a,{href:"#subcommands",children:"subcommands"})," for the\n",(0,s.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/evm-tool",children:"EVM tool"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Option names that include ",(0,s.jsx)(n.code,{children:"trace"}),", such as ",(0,s.jsx)(n.a,{href:"#json-trace",children:(0,s.jsx)(n.code,{children:"--trace"})})," and ",(0,s.jsx)(n.a,{href:"#nomemory-tracenomemory",children:(0,s.jsx)(n.code,{children:"--trace.[no]memory"})})," exist to support ",(0,s.jsx)(n.a,{href:"https://ethereum-tests.readthedocs.io/en/latest/t8ntool.html",children:(0,s.jsx)(n.code,{children:"t8ntool"})})," reference testing, and are interchangeable with their standard option names."]})}),"\n",(0,s.jsx)(n.h2,{id:"options",children:"Options"}),"\n",(0,s.jsx)(n.h3,{id:"code",children:(0,s.jsx)(n.code,{children:"code"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--code=<code>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--code=5B600080808060045AFA50600056\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"The code to be executed, in compiled hex code form. Execution fails if this is not set."}),"\n",(0,s.jsx)(n.h3,{id:"gas",children:(0,s.jsx)(n.code,{children:"gas"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--gas=<integer>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--gas=100000000\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"Amount of gas to make available to the EVM. The default is 10 billion, a number unlikely to be seen in any production blockchain."}),"\n",(0,s.jsx)(n.h3,{id:"price",children:(0,s.jsx)(n.code,{children:"price"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--price=<integer>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--price=10\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Price of gas in Gwei. The default is ",(0,s.jsx)(n.code,{children:"0"}),". If set to a non-zero value, the sender account must have enough value to cover the gas fees."]}),"\n",(0,s.jsx)(n.h3,{id:"sender",children:(0,s.jsx)(n.code,{children:"sender"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--sender=<address>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--sender=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["The account the invocation is sent from. The specified account must exist in the world state, which, unless specified by ",(0,s.jsx)(n.a,{href:"#genesis",children:(0,s.jsx)(n.code,{children:"--genesis"})}),", is the set of ",(0,s.jsx)(n.a,{href:"/private-networks/reference/accounts-for-testing",children:"accounts used for testing"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"receiver",children:(0,s.jsx)(n.code,{children:"receiver"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--receiver=<address>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--receiver=0x588108d3eab34e94484d7cda5a1d31804ca96fe7\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"The account the invocation is sent to. The specified account does not need to exist."}),"\n",(0,s.jsx)(n.h3,{id:"input",children:(0,s.jsx)(n.code,{children:"input"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--input=<code>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--input=9064129300000000000000000000000000000000000000000000000000000000\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["The data passed into the call. Corresponds to the ",(0,s.jsx)(n.code,{children:"data"})," field of the transaction and is returned by the ",(0,s.jsx)(n.code,{children:"CALLDATA"})," and related opcodes."]}),"\n",(0,s.jsx)(n.h3,{id:"value",children:(0,s.jsx)(n.code,{children:"value"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--value=<integer>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--value=1000000000000000000\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"The value, in wei, attached to this transaction. For operations that query the value or transfer it to other accounts this is the amount that is available. The amount is not reduced to cover intrinsic cost and gas fees."}),"\n",(0,s.jsxs)(n.h3,{id:"json-trace",children:[(0,s.jsx)(n.code,{children:"json"}),", ",(0,s.jsx)(n.code,{children:"trace"})]}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--json\n"})})})}),"\n",(0,s.jsx)(n.p,{children:"Provides an operation-by-operation trace of the command in JSON."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"--trace"})," is an alias for ",(0,s.jsx)(n.code,{children:"--json"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"json-alloc",children:(0,s.jsx)(n.code,{children:"json-alloc"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--json-alloc\n"})})})}),"\n",(0,s.jsx)(n.p,{children:"Outputs a JSON summary of the post-execution world state and allocations."}),"\n",(0,s.jsxs)(n.h3,{id:"nomemory-tracenomemory",children:[(0,s.jsx)(n.code,{children:"[no]memory"}),", ",(0,s.jsx)(n.code,{children:"trace.[no]memory"})]}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--nomemory, --memory\n"})})})}),"\n",(0,s.jsxs)(n.p,{children:["Setting ",(0,s.jsx)(n.code,{children:"--nomemory"})," disables tracing the memory output for each operation. Setting ",(0,s.jsx)(n.code,{children:"--memory"})," enables it. Memory traces are disabled by default."]}),"\n",(0,s.jsx)(n.p,{children:"For memory heavy scripts, disabling memory traces may reduce the volume of JSON output."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"--trace.[no]memory"})," is an alias for ",(0,s.jsx)(n.code,{children:"--[no]memory"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"tracenostack",children:(0,s.jsx)(n.code,{children:"trace.[no]stack"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--trace.nostack, --trace.stack\n"})})})}),"\n",(0,s.jsxs)(n.p,{children:["Setting ",(0,s.jsx)(n.code,{children:"--trace.nostack"})," disables tracing the operand stack for each operation. Setting ",(0,s.jsx)(n.code,{children:"--trace.stack"})," enables it. Stack traces are enabled by default."]}),"\n",(0,s.jsx)(n.h3,{id:"tracenoreturndata",children:(0,s.jsx)(n.code,{children:"trace.[no]returndata"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--trace.noreturndata, --trace.returndata\n"})})})}),"\n",(0,s.jsxs)(n.p,{children:["Setting ",(0,s.jsx)(n.code,{children:"--trace.noreturndata"})," disables tracing the return data for each operation. Setting ",(0,s.jsx)(n.code,{children:"--trace.returndata"})," enables it. Return data traces are enabled by default."]}),"\n",(0,s.jsx)(n.h3,{id:"notime",children:(0,s.jsx)(n.code,{children:"[no]time"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--notime, --time\n"})})})}),"\n",(0,s.jsxs)(n.p,{children:["Setting ",(0,s.jsx)(n.code,{children:"--notime"})," disables including time data in the summary output. Setting ",(0,s.jsx)(n.code,{children:"--time"})," enables it."]}),"\n",(0,s.jsx)(n.p,{children:"This is useful for testing and differential evaluations."}),"\n",(0,s.jsx)(n.h3,{id:"genesis",children:(0,s.jsx)(n.code,{children:"genesis"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--genesis=<path>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--genesis=/opt/besu/genesis.json\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/public-networks/reference/genesis-items",children:"Besu genesis file"})," to use when evaluating the EVM. Most useful are the ",(0,s.jsx)(n.code,{children:"alloc"})," items that set up accounts and their stored memory states."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"--prestate"})," is a deprecated alias for ",(0,s.jsx)(n.code,{children:"--genesis"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"chain",children:(0,s.jsx)(n.code,{children:"chain"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--chain=<mainnet|sepolia|dev|classic|mordor|kotti|astor>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--chain=holesky\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["The well-known network genesis file to use when evaluating the EVM. These values are an alternative to the ",(0,s.jsx)(n.a,{href:"#genesis",children:(0,s.jsx)(n.code,{children:"--genesis"})})," option for well-known networks."]}),"\n",(0,s.jsx)(n.h3,{id:"repeat",children:(0,s.jsx)(n.code,{children:"repeat"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--repeat=<integer>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--repeat=1000\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Number of times to repeat the contract before gathering timing information. This is useful when benchmarking EVM operations. The default is ",(0,s.jsx)(n.code,{children:"0"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"revert-reason-enabled",children:(0,s.jsx)(n.code,{children:"revert-reason-enabled"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--revert-reason-enabled\n"})})})}),"\n",(0,s.jsxs)(n.p,{children:["Enables tracing the reason included in ",(0,s.jsx)(n.code,{children:"REVERT"})," operations. The revert reason is enabled by default."]}),"\n",(0,s.jsx)(n.h3,{id:"fork",children:(0,s.jsx)(n.code,{children:"fork"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--fork=<string>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--fork=FutureEips\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"Specific fork to evaluate, overriding network settings."}),"\n",(0,s.jsx)(n.h3,{id:"key-value-storage",children:(0,s.jsx)(n.code,{children:"key-value-storage"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--key-value-storage=<memory|rocksdb>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--key-value-storage=rocksdb\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"Kind of key value storage to use."}),"\n",(0,s.jsxs)(n.p,{children:["It might be useful to execute isolated EVM calls in the context of an actual world state. The default is ",(0,s.jsx)(n.code,{children:"memory"}),", which executes the call only in the context of the world provided by ",(0,s.jsx)(n.a,{href:"#genesis",children:(0,s.jsx)(n.code,{children:"--genesis"})})," or ",(0,s.jsx)(n.a,{href:"#chain",children:(0,s.jsx)(n.code,{children:"--chain"})})," at block zero."]}),"\n",(0,s.jsxs)(n.p,{children:["When set to ",(0,s.jsx)(n.code,{children:"rocksdb"})," and combined with ",(0,s.jsx)(n.a,{href:"#data-path",children:(0,s.jsx)(n.code,{children:"--data-path"})}),", ",(0,s.jsx)(n.a,{href:"#block-number",children:(0,s.jsx)(n.code,{children:"--block-number"})}),", and ",(0,s.jsx)(n.a,{href:"#genesis",children:(0,s.jsx)(n.code,{children:"--genesis"})}),", a Besu node that isn't currently running can be used to provide the appropriate world state for a transaction. This is useful when evaluating consensus failures."]}),"\n",(0,s.jsx)(n.h3,{id:"data-path",children:(0,s.jsx)(n.code,{children:"data-path"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--data-path=<path>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--data-path=/opt/besu/data\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["When ",(0,s.jsx)(n.a,{href:"#key-value-storage",children:(0,s.jsx)(n.code,{children:"--key-value-storage"})})," is set to ",(0,s.jsx)(n.code,{children:"rocksdb"}),", specifies the location of the database on disk."]}),"\n",(0,s.jsx)(n.h3,{id:"block-number",children:(0,s.jsx)(n.code,{children:"block-number"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--block-number=<integer>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--block-number=10000000\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["The block number to evaluate the code against. Used to ensure that the EVM is evaluating the code against the correct fork, or to specify the world state when ",(0,s.jsx)(n.a,{href:"#key-value-storage",children:(0,s.jsx)(n.code,{children:"--key-value-storage"})})," is set to ",(0,s.jsx)(n.code,{children:"rocksdb"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"version",children:(0,s.jsx)(n.code,{children:"version"})}),"\n",(0,s.jsx)(r.A,{children:(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"--version\n"})})})}),"\n",(0,s.jsx)(n.p,{children:"Displays the version information."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"-v"})," is an alias for ",(0,s.jsx)(n.code,{children:"--version"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"subcommands",children:"Subcommands"}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"The following subcommands are used for testing code bases and not meant for typical user interactions."})}),"\n",(0,s.jsx)(n.h3,{id:"code-validate",children:(0,s.jsx)(n.code,{children:"code-validate"})}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"evmtool code-validate --file=<file>\n"})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"evmtool code-validate --file=eof.txt\n"})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Allows ",(0,s.jsx)(n.a,{href:"https://eips.ethereum.org/EIPS/eip-3540",children:"Ethereum object formatted (EOF)"})," code to be validated."]}),"\n",(0,s.jsxs)(n.p,{children:["You can specify a file containing one or more EOF containers or EVM bytecode using the ",(0,s.jsx)(n.code,{children:"--file"})," option.\nEach line in the file is considered a separate program."]}),"\n",(0,s.jsx)(n.h4,{id:"use-command-arguments",children:"Use command arguments"}),"\n",(0,s.jsx)(n.p,{children:"If you use command arguments, each argument is considered a separate program.\nIf a code segment includes spaces, it must be contained in quotes."}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Docker example",label:"Docker example",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker run --rm hyperledger/besu-evmtool:develop code-validate "0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1" 0xef0002 0xef00010100040200010001030000000000000000\n'})})}),(0,s.jsx)(t.A,{value:"Example",label:"Example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'evmtool code-validate "0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1" 0xef0002 0xef00010100040200010001030000000000000000\n'})})})]}),"\n",(0,s.jsx)(n.h4,{id:"use-standard-input",children:"Use standard input"}),"\n",(0,s.jsx)(n.p,{children:"If no reference tests are passed in using the command line, the EVM tool loads and validates code\nfrom standard input.\nEach line is considered a separate program.\nComment lines and blanks are ignored."}),"\n",(0,s.jsx)(n.h3,{id:"state-test",children:(0,s.jsx)(n.code,{children:"state-test"})}),"\n",(0,s.jsxs)(n.p,{children:["Allows the ",(0,s.jsx)(n.a,{href:"https://github.com/ethereum/tests/tree/develop/GeneralStateTests",children:"Ethereum state tests"}),"\nto be evaluated.\nRun ",(0,s.jsx)(n.code,{children:"evmtool state-test --help"})," for the full list of supported options.\nNotable options are ",(0,s.jsx)(n.a,{href:"#json-trace",children:(0,s.jsx)(n.code,{children:"--json"})})," and ",(0,s.jsx)(n.a,{href:"#nomemory-tracenomemory",children:(0,s.jsx)(n.code,{children:"--nomemory"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Set ",(0,s.jsx)(n.code,{children:"--json"})," for EVM Lab Fuzzing.\nWhether or not ",(0,s.jsx)(n.code,{children:"--json"})," is set, a summary JSON object is printed to standard output for each state\ntest executed."]}),"\n",(0,s.jsx)(n.h4,{id:"use-command-arguments-1",children:"Use command arguments"}),"\n",(0,s.jsx)(n.p,{children:"If you use command arguments, you can list one or more state tests.\nAll the state tests are evaluated in the order they are specified."}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Docker example",label:"Docker example",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker run --rm -v ${PWD}:/opt/referencetests hyperledger/besu-evmtool:develop --json state-test /opt/referencetests/GeneralStateTests/stExample/add11.json\n"})})}),(0,s.jsx)(t.A,{value:"CLI example",label:"CLI example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"evmtool --json state-test stExample/add11.json\n"})})})]}),"\n",(0,s.jsx)(n.h4,{id:"use-standard-input-1",children:"Use standard input"}),"\n",(0,s.jsx)(n.p,{children:"If no reference tests are passed in using the command line, the EVM tool loads one complete JSON\nobject from standard input and executes that state test."}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(t.A,{value:"Docker example",label:"Docker example",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker run --rm -i hyperledger/besu-evmtool:develop --json state-test < stExample/add11.json\n"})})}),(0,s.jsx)(t.A,{value:"CLI example",label:"CLI example",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"evmtool --json state-test < stExample/add11.json\n"})})})]}),"\n",(0,s.jsxs)(n.h3,{id:"transition-t8n-t8n-server",children:[(0,s.jsx)(n.code,{children:"transition"}),", ",(0,s.jsx)(n.code,{children:"t8n"}),", ",(0,s.jsx)(n.code,{children:"t8n-server"})]}),"\n",(0,s.jsxs)(n.p,{children:["Allows the Ethereum state transition and blockchain tests to be evaluated.\nSee the ",(0,s.jsx)(n.a,{href:"https://ethereum-tests.readthedocs.io/en/develop/t8ntool-ref.html",children:"transition tool reference"}),"\nand ",(0,s.jsx)(n.a,{href:"https://ethereum.github.io/execution-spec-tests/v1.0.6/",children:"Execution Spec Tests"})," for more\ninformation about this subcommand."]})]})}function x(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},19365:(e,n,a)=>{a.d(n,{A:()=>t});a(96540);var s=a(18215);const l={tabItem:"tabItem_Ymn6"};var r=a(74848);function t(e){let{children:n,hidden:a,className:t}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(l.tabItem,t),hidden:a,children:n})}},11470:(e,n,a)=>{a.d(n,{A:()=>k});var s=a(96540),l=a(18215),r=a(23104),t=a(56347),c=a(205),d=a(57485),i=a(31682),o=a(70679);function h(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:a}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:s,default:l}}=e;return{value:n,label:a,attributes:s,default:l}}))}(a);return function(e){const n=(0,i.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function x(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function j(e){let{queryString:n=!1,groupId:a}=e;const l=(0,t.W6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,d.aZ)(r),(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(l.location.search);n.set(r,e),l.replace({...l.location,search:n.toString()})}),[r,l])]}function p(e){const{defaultValue:n,queryString:a=!1,groupId:l}=e,r=u(e),[t,d]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!x({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=a.find((e=>e.default))??a[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:r}))),[i,h]=j({queryString:a,groupId:l}),[p,m]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[l,r]=(0,o.Dv)(a);return[l,(0,s.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:l}),b=(()=>{const e=i??p;return x({value:e,tabValues:r})?e:null})();(0,c.A)((()=>{b&&d(b)}),[b]);return{selectedValue:t,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),m(e)}),[h,m,r]),tabValues:r}}var m=a(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=a(74848);function f(e){let{className:n,block:a,selectedValue:s,selectValue:t,tabValues:c}=e;const d=[],{blockElementScrollPositionUntilNextRender:i}=(0,r.a_)(),o=e=>{const n=e.currentTarget,a=d.indexOf(n),l=c[a].value;l!==s&&(i(n),t(l))},h=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const a=d.indexOf(e.currentTarget)+1;n=d[a]??d[0];break}case"ArrowLeft":{const a=d.indexOf(e.currentTarget)-1;n=d[a]??d[d.length-1];break}}n?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.A)("tabs",{"tabs--block":a},n),children:c.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>d.push(e),onKeyDown:h,onClick:o,...r,className:(0,l.A)("tabs__item",b.tabItem,r?.className,{"tabs__item--active":s===n}),children:a??n},n)}))})}function g(e){let{lazy:n,children:a,selectedValue:r}=e;const t=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:(0,l.A)("margin-top--md",e.props.className)}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function y(e){const n=p(e);return(0,v.jsxs)("div",{className:(0,l.A)("tabs-container",b.tabList),children:[(0,v.jsx)(f,{...n,...e}),(0,v.jsx)(g,{...n,...e})]})}function k(e){const n=(0,m.A)();return(0,v.jsx)(y,{...e,children:h(e.children)},String(n))}},28453:(e,n,a)=>{a.d(n,{R:()=>t,x:()=>c});var s=a(96540);const l={},r=s.createContext(l);function t(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aba21aa0.f74b2f51.js b/assets/js/aba21aa0.f74b2f51.js new file mode 100644 index 00000000000..e99d6f10080 --- /dev/null +++ b/assets/js/aba21aa0.f74b2f51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5742],{27093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/af3555a6.8d8c4ead.js b/assets/js/af3555a6.8d8c4ead.js new file mode 100644 index 00000000000..b67d7a8c88d --- /dev/null +++ b/assets/js/af3555a6.8d8c4ead.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[849],{14396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>h});var r=t(74848),a=t(28453),s=t(11470),l=t(19365);const i={title:"Use GraphQL over HTTP",sidebar_position:3,description:"How to access the Besu API using GraphQL",tags:["public networks","private networks"]},o="Use GraphQL over HTTP",c={id:"public-networks/how-to/use-besu-api/graphql",title:"Use GraphQL over HTTP",description:"How to access the Besu API using GraphQL",source:"@site/docs/public-networks/how-to/use-besu-api/graphql.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/graphql",permalink:"/public-networks/how-to/use-besu-api/graphql",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/graphql.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Use GraphQL over HTTP",sidebar_position:3,description:"How to access the Besu API using GraphQL",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use RPC Pub/Sub over WS",permalink:"/public-networks/how-to/use-besu-api/rpc-pubsub"},next:{title:"Authenticate over JSON-RPC requests",permalink:"/public-networks/how-to/use-besu-api/authenticate"}},u={},h=[{value:"GraphQL requests with cURL",id:"graphql-requests-with-curl",level:2},{value:"GraphQL requests with GraphiQL app",id:"graphql-requests-with-graphiql-app",level:2},{value:"Pending",id:"pending",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"use-graphql-over-http",children:"Use GraphQL over HTTP"})}),"\n",(0,r.jsx)(n.p,{children:"GraphQL can reduce the overhead needed for common queries.\nFor example, instead of querying each receipt in a block, GraphQL can get the same result with a\nsingle query for the entire block."}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/ethereum/api/src/main/resources/schema.graphqls",children:"Besu GraphQL schema"})," describes the GraphQL implementation for Ethereum.\nEnable the GraphQL service using ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/#enable-api-access",children:"command line options"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"GraphQL is not supported over WebSocket."})}),"\n",(0,r.jsxs)(n.p,{children:["Access the GraphQL endpoint at ",(0,r.jsx)(n.code,{children:"http://<HOST>:<PORT>/graphql"}),".\nConfigure ",(0,r.jsx)(n.code,{children:"<HOST>"})," and ",(0,r.jsx)(n.code,{children:"<PORT>"})," using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#graphql-http-host",children:(0,r.jsx)(n.code,{children:"graphql-http-host"})}),"\nand ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#graphql-http-port",children:(0,r.jsx)(n.code,{children:"graphql-http-port"})}),".\nThe default endpoint is ",(0,r.jsx)(n.code,{children:"http://127.0.0.1:8547/graphql"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"graphql-requests-with-curl",children:"GraphQL requests with cURL"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/public-networks/reference/api/",children:"Besu JSON-RPC API methods"})," with an equivalent\n",(0,r.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/graphql",children:"GraphQL"})," query include a GraphQL request and result in the method example."]}),"\n",(0,r.jsx)(n.p,{children:"For example, the following request returns the block number:"}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Request",label:"Request",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block{number}}"}\' http://localhost:8547/graphql\n'})})}),(0,r.jsx)(l.A,{value:"Response",label:"Response",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data" : {\n "block" : {\n "number" : "0x281"\n }\n }\n}\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The following request returns the gas price:"}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Request",label:"Request",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{gasPrice}"}\' http://localhost:8547/graphql\n'})})}),(0,r.jsx)(l.A,{value:"Response",label:"Response",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data" : {\n "gasPrice" : "0x0"\n }\n}\n'})})})]}),"\n",(0,r.jsxs)(n.p,{children:["The following ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_syncing",children:(0,r.jsx)(n.code,{children:"syncing"})})," request returns data about the\nsynchronization status:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Request",label:"Request",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{syncing{startingBlock currentBlock highestBlock}}"}\' http://localhost:8547/graphql\n'})})}),(0,r.jsx)(l.A,{value:"Response",label:"Response",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data" : {\n "syncing" : {\n "startingBlock" : 665,\n "currentBlock" : 3190,\n "highestBlock" : 26395\n }\n }\n}\n'})})})]}),"\n",(0,r.jsxs)(n.admonition,{title:"note",type:"info",children:[(0,r.jsxs)(n.p,{children:["In some cases, for example, when your node is fully synced, the syncing request returns a ",(0,r.jsx)(n.code,{children:"null"})," response:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data" : {\n "syncing" : null\n }\n}\n'})})]}),"\n",(0,r.jsx)(n.h2,{id:"graphql-requests-with-graphiql-app",children:"GraphQL requests with GraphiQL app"}),"\n",(0,r.jsxs)(n.p,{children:["The third-party tool, ",(0,r.jsx)(n.a,{href:"https://github.com/skevy/graphiql-app",children:"GraphiQL"}),", provides a tabbed interface\nfor editing and testing GraphQL queries and mutations.\nGraphiQL also provides access to the ",(0,r.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/ethereum/api/src/main/resources/schema.graphqls",children:"Besu GraphQL schema"})," from within the app."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"GraphiQL",src:t(80229).A+"",width:"2002",height:"786"})}),"\n",(0,r.jsx)(n.h2,{id:"pending",children:"Pending"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"transactionCount"})," and ",(0,r.jsx)(n.code,{children:"transactions"})," supports the Pending query."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Besu does not execute pending transactions so results from ",(0,r.jsx)(n.code,{children:"account"}),", ",(0,r.jsx)(n.code,{children:"call"}),", and ",(0,r.jsx)(n.code,{children:"estimateGas"})," for\nPending do not reflect pending transactions."]})}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Pending transactions",label:"Pending transactions",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{pending {transactionCount}}"}\' http://localhost:8547/graphql\n'})})}),(0,r.jsx)(l.A,{value:"Result",label:"Result",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "pending": {\n "transactionCount": 2\n }\n }\n}\n'})})})]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(l.A,{value:"Pending transactions",label:"Pending transactions",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{pending {transactions{hash}}}"}\' http://localhost:8547/graphql\n'})})}),(0,r.jsx)(l.A,{value:"Result",label:"Result",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "data": {\n "pending": {\n "transactions": [\n {\n "hash": "0xbb3ab8e2113a4afdde9753782cb0680408c0d5b982572dda117a4c72fafbf3fa"\n },\n {\n "hash": "0xf6bd6b1bccf765024bd482a71c6855428e2903895982090ab5dbb0feda717af6"\n }\n ]\n }\n }\n}\n'})})})]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>l});t(96540);var r=t(18215);const a={tabItem:"tabItem_Ymn6"};var s=t(74848);function l(e){let{children:n,hidden:t,className:l}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(a.tabItem,l),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>q});var r=t(96540),a=t(18215),s=t(23104),l=t(56347),i=t(205),o=t(57485),c=t(31682),u=t(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function d(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:a}}=e;return{value:n,label:t,attributes:r,default:a}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function b(e){let{queryString:n=!1,groupId:t}=e;const a=(0,l.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(a.location.search);n.set(s,e),a.replace({...a.location,search:n.toString()})}),[s,a])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,s=d(e),[l,o]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:s}))),[c,h]=b({queryString:t,groupId:a}),[g,f]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,s]=(0,u.Dv)(t);return[a,(0,r.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:a}),m=(()=>{const e=c??g;return p({value:e,tabValues:s})?e:null})();(0,i.A)((()=>{m&&o(m)}),[m]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),h(e),f(e)}),[h,f,s]),tabValues:s}}var f=t(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=t(74848);function j(e){let{className:n,block:t,selectedValue:r,selectValue:l,tabValues:i}=e;const o=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),u=e=>{const n=e.currentTarget,t=o.indexOf(n),a=i[t].value;a!==r&&(c(n),l(a))},h=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>o.push(e),onKeyDown:h,onClick:u,...s,className:(0,a.A)("tabs__item",m.tabItem,s?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:s}=e;const l=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=l.find((e=>e.props.value===s));return e?(0,r.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:l.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function w(e){const n=g(e);return(0,x.jsxs)("div",{className:(0,a.A)("tabs-container",m.tabList),children:[(0,x.jsx)(j,{...n,...e}),(0,x.jsx)(v,{...n,...e})]})}function q(e){const n=(0,f.A)();return(0,x.jsx)(w,{...e,children:h(e.children)},String(n))}},80229:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/GraphiQL-a6360ff9467a3f33ade0bf00e6eec49e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>i});var r=t(96540);const a={},s=r.createContext(a);function l(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b0eb7c42.5a8a020d.js b/assets/js/b0eb7c42.5a8a020d.js new file mode 100644 index 00000000000..1a5eb4280e1 --- /dev/null +++ b/assets/js/b0eb7c42.5a8a020d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5580],{2414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var s=t(74848),o=t(28453);const i={title:"Node clients",sidebar_position:1,description:"Learn about execution and consensus clients.",tags:["public networks"]},c="Node clients",r={id:"public-networks/concepts/node-clients",title:"Node clients",description:"Learn about execution and consensus clients.",source:"@site/docs/public-networks/concepts/node-clients.md",sourceDirName:"public-networks/concepts",slug:"/public-networks/concepts/node-clients",permalink:"/public-networks/concepts/node-clients",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/node-clients.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Node clients",sidebar_position:1,description:"Learn about execution and consensus clients.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Concepts",permalink:"/public-networks/concepts"},next:{title:"Proof of stake consensus",permalink:"/public-networks/concepts/proof-of-stake/"}},a={},l=[{value:"Execution and consensus clients",id:"execution-and-consensus-clients",level:2},{value:"Execution clients",id:"execution-clients",level:3},{value:"Consensus clients",id:"consensus-clients",level:3},{value:"Validator clients",id:"validator-clients",level:4}];function d(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"node-clients",children:"Node clients"})}),"\n",(0,s.jsxs)(n.p,{children:["Ethereum's Proof of Stake (PoS) protocol leverages two separate P2P networks supporting\nseparate clients. Execution clients gossip transactions over their network, enabling them to manage\ntheir local transaction pool. Consensus clients gossip blocks over their network, enabling consensus\nand chain growth. A validator node also runs the ",(0,s.jsx)(n.a,{href:"#validator-clients",children:"validator client"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["As as result of ",(0,s.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/merge/",children:"the 2022 Merge"}),", Ethereum Mainnet\ntransitioned from Proof of Work (PoW) to ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"PoS"})," consensus."]})}),"\n",(0,s.jsx)(n.h2,{id:"execution-and-consensus-clients",children:"Execution and consensus clients"}),"\n",(0,s.jsxs)(n.p,{children:["Under PoS, a full Ethereum Mainnet node is a combination of an execution client (previously called\nan ",(0,s.jsx)(n.a,{href:"https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/",children:"Eth1 client"})," client) and a\nconsensus client (previously called an\n",(0,s.jsx)(n.a,{href:"https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/",children:"Eth2 client"}),"). The consensus client\nuses the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api",children:"Engine API"})," to communicate with the execution client."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Ethereum Merge node",src:t(12573).A+"",width:"1542",height:"1134"})}),"\n",(0,s.jsx)(n.h3,{id:"execution-clients",children:"Execution clients"}),"\n",(0,s.jsxs)(n.p,{children:["Execution clients, such as Besu, manage the execution layer, including executing transactions and\nupdating the world state. Execution clients serve ",(0,s.jsx)(n.a,{href:"/public-networks/reference/engine-api/",children:"JSON-RPC API"}),"\nrequests and communicate with each other P2P."]}),"\n",(0,s.jsx)(n.p,{children:"Besu is an execution client that you can run with:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/mainnet",children:"Any consensus client on Mainnet"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/get-started/connect/testnet",children:"Any consensus client on a testnet"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/tutorials/besu-teku-mainnet",children:"Teku on Mainnet"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/public-networks/tutorials/besu-teku-testnet",children:"Teku on a testnet"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"consensus-clients",children:"Consensus clients"}),"\n",(0,s.jsxs)(n.p,{children:["The consensus client (also known as the beacon node, CL client or, formerly, the Eth2 client)\nimplements the PoS consensus algorithm, which enables the network to achieve agreement based on\nvalidated data from the execution client. Consensus clients serve\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/reference/rest",children:"REST API"})," requests and\ncommunicate with each other P2P."]}),"\n",(0,s.jsxs)(n.p,{children:["Consensus clients, such as ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/en/latest/",children:"Teku"})," contain beacon node\nimplementations. The beacon node is the primary link to the ",(0,s.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/beacon-chain/",children:"Beacon Chain"})," (i.e. the consensus layer).\nA consensus client can run without the (bundled) validator to keep up with the head of the chain,\nallowing the node to stay synced."]}),"\n",(0,s.jsx)(n.h4,{id:"validator-clients",children:"Validator clients"}),"\n",(0,s.jsxs)(n.p,{children:["To operate a validator node, node operators must also run a validator client and deposit the\n",(0,s.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/#validators",children:"required ETH"})," into the\ndeposit contract. The validator client handles attestations and block proposal \u2014 i.e. performs\n",(0,s.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"validator duties"})," on the consensus layer.\nThe validator client may either be run\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/get-started/start-teku#start-the-clients-in-a-single-process",children:"in the same process"}),"\nas the beacon node or ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/get-started/start-teku#run-the-clients-separately",children:"separately"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Validators earn ",(0,s.jsx)(n.a,{href:"https://www.blocknative.com/ethereum-staking-calculator",children:"rewards"})," for performing\n",(0,s.jsx)(n.a,{href:"/public-networks/concepts/proof-of-stake/",children:"validator duties"}),", and\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/reference/cli#validators-proposer-default-fee-recipient",children:"fee recipients"}),"\nalso earn rewards for the inclusion of execution layer transactions."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},12573:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/Execution-Consensus-Clients-EngineAPI-92aa028e4d500a83a7887cdcf7724db8.png"},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>r});var s=t(96540);const o={},i=s.createContext(o);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2d12fc2.1317c4e3.js b/assets/js/b2d12fc2.1317c4e3.js new file mode 100644 index 00000000000..6d4e3cad7cd --- /dev/null +++ b/assets/js/b2d12fc2.1317c4e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7949],{37680:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=o(74848),n=o(28453);const r={title:"Use Grafana Loki",sidebar_position:2,description:"Using Grafana Loki log management platform with Besu",tags:["private networks"]},s="Grafana Loki",a={id:"private-networks/how-to/monitor/loki",title:"Use Grafana Loki",description:"Using Grafana Loki log management platform with Besu",source:"@site/docs/private-networks/how-to/monitor/loki.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/loki",permalink:"/private-networks/how-to/monitor/loki",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/loki.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use Grafana Loki",sidebar_position:2,description:"Using Grafana Loki log management platform with Besu",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Monitoring",permalink:"/private-networks/how-to/monitor/"},next:{title:"Use Elastic Stack",permalink:"/private-networks/how-to/monitor/elastic-stack"}},l={},c=[];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",img:"img",li:"li",ol:"ol",p:"p",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"grafana-loki",children:"Grafana Loki"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://grafana.com/oss/loki/",children:"Grafana Loki"})," is an open-source log management platform that is available when using the ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/master/files/common/promtail/promtail.yml",children:"Promtail configuration"})," ingests logs at regular defined intervals and outputs them to ",(0,i.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/master/files/common/loki/loki.yml",children:"Loki"})," for storage."]}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"pipeline configuration"})," in Promtail defines pipeline stages that can collate logs natively or using the JSON format."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["If using the pipeline regex stage in ",(0,i.jsx)(t.code,{children:"Promtail"}),", configuration must match your log format."]})}),"\n",(0,i.jsx)(t.p,{children:"To view the GoQuorum Quickstart network logs in Loki:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Start the Developer Quickstart with Besu"}),", selecting Loki monitoring."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Open the ",(0,i.jsx)(t.a,{href:"http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search=&from=now-15m&to=now",children:(0,i.jsx)(t.code,{children:"Grafana Loki address"})})," listed by the sample networks ",(0,i.jsx)(t.code,{children:"list.sh"})," script."]}),"\n",(0,i.jsx)(t.p,{children:"The logs display in Loki."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Loki logs",src:o(60119).A+"",width:"1915",height:"898"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},60119:(e,t,o)=>{o.d(t,{A:()=>i});const i=o.p+"assets/images/grafana_loki-b7ec065514dfe7bb716e9029bda5c056.png"},28453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>a});var i=o(96540);const n={},r=i.createContext(n);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4b83649.29e393a4.js b/assets/js/b4b83649.29e393a4.js new file mode 100644 index 00000000000..b8d2b1e28da --- /dev/null +++ b/assets/js/b4b83649.29e393a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4397],{4881:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var r=t(74848),s=t(28453);const i={title:"Start Besu",description:"Start Besu on a private Ethereum network.",sidebar_position:3,tags:["private networks"]},o="Start Besu",a={id:"private-networks/get-started/start-node",title:"Start Besu",description:"Start Besu on a private Ethereum network.",source:"@site/docs/private-networks/get-started/start-node.md",sourceDirName:"private-networks/get-started",slug:"/private-networks/get-started/start-node",permalink:"/private-networks/get-started/start-node",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/get-started/start-node.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Start Besu",description:"Start Besu on a private Ethereum network.",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Install binary distribution",permalink:"/private-networks/get-started/install/binary-distribution"},next:{title:"How to",permalink:"/private-networks/how-to/"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Local block data",id:"local-block-data",level:2},{value:"Genesis configuration",id:"genesis-configuration",level:2},{value:"Confirm node is running",id:"confirm-node-is-running",level:2},{value:"Run a node for testing",id:"run-a-node-for-testing",level:2},{value:"Run a node on a private network",id:"run-a-node-on-a-private-network",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"start-besu",children:"Start Besu"})}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options",children:(0,r.jsx)(n.code,{children:"besu"})})," command with the required command line options to start a node."]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu installed"})}),"\n",(0,r.jsx)(n.h2,{id:"local-block-data",children:"Local block data"}),"\n",(0,r.jsxs)(n.p,{children:["When connecting to a network other than the network previously connected to, you must either delete the local block data or use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," option to specify a different data directory."]}),"\n",(0,r.jsxs)(n.p,{children:["To delete the local block data, delete the ",(0,r.jsx)(n.code,{children:"database"})," directory in the ",(0,r.jsx)(n.code,{children:"besu/build/distribution/besu-<version>"})," directory."]}),"\n",(0,r.jsx)(n.h2,{id:"genesis-configuration",children:"Genesis configuration"}),"\n",(0,r.jsxs)(n.p,{children:["To define a genesis configuration, create a ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"})," (for example, ",(0,r.jsx)(n.code,{children:"genesis.json"}),") and specify the file using the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,r.jsx)(n.code,{children:"--genesis-file"})})," option."]}),"\n",(0,r.jsxs)(n.p,{children:["When you specify ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,r.jsx)(n.code,{children:"--network=dev"})}),", Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,r.jsx)(n.code,{children:"--network=dev"})})," has an empty bootnodes list by default."]}),"\n",(0,r.jsxs)(n.p,{children:["Predefined genesis configurations for named networks are in the ",(0,r.jsx)(n.a,{href:"https://github.com/hyperledger/besu/tree/master/config/src/main/resources",children:"Besu source files"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"confirm-node-is-running",children:"Confirm node is running"}),"\n",(0,r.jsxs)(n.p,{children:["If you started Besu with the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})})," option, use ",(0,r.jsx)(n.a,{href:"https://curl.haxx.se/",children:"cURL"})," to call ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/",children:"JSON-RPC API methods"})," to confirm the node is running."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eth_chainId"})," returns the chain ID of the network."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}\' localhost:8545\n'})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"eth_syncing"})," returns the starting, current, and highest block."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}\' localhost:8545\n'})}),"\n",(0,r.jsxs)(n.p,{children:["For example, after connecting to Mainnet, ",(0,r.jsx)(n.code,{children:"eth_syncing"})," will return something similar to:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "startingBlock": "0x0",\n "currentBlock": "0x2d0",\n "highestBlock": "0x66c0"\n }\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"run-a-node-for-testing",children:"Run a node for testing"}),"\n",(0,r.jsx)(n.p,{children:"To run a node that mines blocks at a rate suitable for testing purposes:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --host-allowlist="*" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir\n'})}),"\n",(0,r.jsxs)(n.p,{children:["You can also use the following ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"})," on the command line to start a node with the same options as above:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-toml",children:'network="dev"\nminer-enabled=true\nminer-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\nrpc-http-cors-origins=["all"]\nhost-allowlist=["*"]\nrpc-ws-enabled=true\nrpc-http-enabled=true\ndata-path="/tmp/tmpdata-path"\n'})}),"\n",(0,r.jsxs)(n.admonition,{type:"caution",children:[(0,r.jsx)(n.p,{children:"The following settings are a security risk in production environments:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enabling the HTTP JSON-RPC service (",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})}),") and setting ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,r.jsx)(n.code,{children:"--rpc-http-host"})})," to 0.0.0.0 exposes the RPC connection on your node to any remote connection."]}),"\n",(0,r.jsxs)(n.li,{children:["Setting ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(n.code,{children:"--host-allowlist"})})," to ",(0,r.jsx)(n.code,{children:'"*"'})," allows JSON-RPC API access from any host."]}),"\n",(0,r.jsxs)(n.li,{children:["Setting ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(n.code,{children:"--rpc-http-cors-origins"})})," to ",(0,r.jsx)(n.code,{children:'"all"'})," or ",(0,r.jsx)(n.code,{children:'"*"'})," allows cross-origin resource sharing (CORS) access from any domain."]}),"\n"]})]}),"\n",(0,r.jsx)(n.h2,{id:"run-a-node-on-a-private-network",children:"Run a node on a private network"}),"\n",(0,r.jsx)(n.p,{children:"To run a node on your private network specifying a genesis file and data directory:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu --genesis-file=<path>/genesis.json --data-path=<data-path> --rpc-http-enabled --bootnodes=<bootnodes>\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Where ",(0,r.jsx)(n.code,{children:"<data-path>"})," is the path to the directory to save the chain data to. Ensure you configure a peer discovery method, such as ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You might need to set ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-limit-by-account-percentage",children:(0,r.jsx)(n.code,{children:"--tx-pool-limit-by-account-percentage"})})," to 1. The default value is suitable for Mainnet, but may cause issues on private networks."]})}),"\n",(0,r.jsxs)(n.admonition,{title:"Sync nodes for BFT",type:"note",children:[(0,r.jsxs)(n.p,{children:["If you're running a node on a ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," or ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," network, your node must use ",(0,r.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#fast-synchronization",children:"fast sync"})," or ",(0,r.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"full sync"}),"."]}),(0,r.jsx)(n.p,{children:"Full sync is set by default."})]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b5388cc7.8e4ba5ca.js b/assets/js/b5388cc7.8e4ba5ca.js new file mode 100644 index 00000000000..a2916fcba0f --- /dev/null +++ b/assets/js/b5388cc7.8e4ba5ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4872],{78814:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var t=a(74848),i=a(28453),r=a(11470),s=a(19365);const o={title:"QBFT",description:"Besu QBFT proof of authority (PoA) consensus protocol implementation",sidebar_position:2,tags:["private networks"]},c="Configure QBFT consensus",d={id:"private-networks/how-to/configure/consensus/qbft",title:"QBFT",description:"Besu QBFT proof of authority (PoA) consensus protocol implementation",source:"@site/docs/private-networks/how-to/configure/consensus/qbft.md",sourceDirName:"private-networks/how-to/configure/consensus",slug:"/private-networks/how-to/configure/consensus/qbft",permalink:"/private-networks/how-to/configure/consensus/qbft",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/consensus/qbft.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"QBFT",description:"Besu QBFT proof of authority (PoA) consensus protocol implementation",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Consensus protocols",permalink:"/private-networks/how-to/configure/consensus/"},next:{title:"IBFT 2.0",permalink:"/private-networks/how-to/configure/consensus/ibft"}},l={},h=[{value:"Genesis file",id:"genesis-file",level:2},{value:"Extra data",id:"extra-data",level:3},{value:"Generate extra data",id:"generate-extra-data",level:4},{value:"Block time",id:"block-time",level:3},{value:"Tune block timeout",id:"tune-block-timeout",level:4},{value:"Optional configuration options",id:"optional-configuration-options",level:3},{value:"Post-Merge configuration",id:"post-merge-configuration",level:3},{value:"Add and remove validators",id:"add-and-remove-validators",level:2},{value:"Add and remove validators using block headers",id:"add-and-remove-validators-using-block-headers",level:3},{value:"Add a validator",id:"add-a-validator",level:4},{value:"Remove a validator",id:"remove-a-validator",level:4},{value:"Epoch transition",id:"epoch-transition",level:4},{value:"Add and remove validators using a smart contract",id:"add-and-remove-validators-using-a-smart-contract",level:3},{value:"Minimum number of validators",id:"minimum-number-of-validators",level:3},{value:"Transitions",id:"transitions",level:2},{value:"Configure block time on an existing network",id:"configure-block-time-on-an-existing-network",level:3},{value:"Configure block rewards on an existing network",id:"configure-block-rewards-on-an-existing-network",level:3},{value:"Swap validator management methods",id:"swap-validator-management-methods",level:3},{value:"Configure the mining beneficiary on an existing network",id:"configure-the-mining-beneficiary-on-an-existing-network",level:3}];function f(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"configure-qbft-consensus",children:"Configure QBFT consensus"})}),"\n",(0,t.jsxs)(n.p,{children:["Besu implements the QBFT proof of authority (PoA) ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/",children:"consensus protocol"}),". QBFT is the recommended enterprise-grade consensus protocol for private networks."]}),"\n",(0,t.jsx)(n.p,{children:"In QBFT networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block."}),"\n",(0,t.jsxs)(n.p,{children:["Existing validators propose and vote to ",(0,t.jsx)(n.a,{href:"#add-and-remove-validators",children:"add or remove validators"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["You can ",(0,t.jsx)(n.a,{href:"/private-networks/tutorials/qbft",children:"create a private network using QBFT"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"Configure your network to ensure you never lose more than 1/3 your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted."})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["You can use a plugin to securely store a validator's key using the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#security-module",children:(0,t.jsx)(n.code,{children:"--security-module"})})," option."]})}),"\n",(0,t.jsx)(n.h2,{id:"genesis-file",children:"Genesis file"}),"\n",(0,t.jsxs)(n.p,{children:["To use QBFT, define a ",(0,t.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"})," that contains the QBFT properties."]}),"\n",(0,t.jsxs)(n.p,{children:["The genesis file differs depending on the ",(0,t.jsx)(n.a,{href:"#add-and-remove-validators",children:"validator management method"})," you intend to use."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["You can use a ",(0,t.jsx)(n.a,{href:"#transitions",children:"transitions"})," to change the ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," or validator management method of the network at a later time."]})}),"\n",(0,t.jsxs)(r.A,{children:[(0,t.jsx)(s.A,{value:"Block header validator selection",label:"Block header validator selection",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "chainid": 1337,\n "berlinBlock": 0,\n "qbft": {\n "epochlength": 30000,\n "blockperiodseconds": 5,\n "requesttimeoutseconds": 10\n }\n },\n "nonce": "0x0",\n "timestamp": "0x5b3d92d7",\n "extraData": "0xf87aa00000000000000000000000000000000000000000000000000000000000000000f8549464a702e6263b7297a96638cac6ae65e6541f4169943923390ad55e90c237593b3b0e401f3b08a0318594aefdb9a738c9f433e5b6b212a6d62f6370c2f69294c7eeb9a4e00ce683cf93039b212648e01c6c6b78c080c0",\n "gasLimit": "0x29b92700",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "64d9be4177f418bcf4e56adad85f33e3a64efe22": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "9f66f8a0f0a6537e4a36aa1799673ea7ae97a166": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "a7f25969fb6f3d5ac09a88862c90b5ff664557a7": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "f4bbfd32c11c9d63e9b4c77bb225810f840342df": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n }\n },\n "number": "0x0",\n "gasUsed": "0x0",\n "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"\n}\n'})})}),(0,t.jsx)(s.A,{value:"Contract validator selection",label:"Contract validator selection",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n "chainid": 1337,\n "berlinBlock": 0,\n "qbft": {\n "epochlength": 30000,\n "blockperiodseconds": 5,\n "requesttimeoutseconds": 10,\n "validatorcontractaddress": "0x0000000000000000000000000000000000007777"\n }\n },\n "nonce": "0x0",\n "timestamp": "0x5b3d92d7",\n "extraData": "0xe5a00000000000000000000000000000000000000000000000000000000000000000c0c080c0",\n "gasLimit": "0x29b92700",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "64d9be4177f418bcf4e56adad85f33e3a64efe22": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "9f66f8a0f0a6537e4a36aa1799673ea7ae97a166": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "a7f25969fb6f3d5ac09a88862c90b5ff664557a7": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "f4bbfd32c11c9d63e9b4c77bb225810f840342df": {\n "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"\n },\n "0x0000000000000000000000000000000000007777": {\n "comment": "validator smart contract",\n "balance": "0",\n "code": "0x608060405234801561001057600080fd5b50600436106100a5576000357c0100000000000000000000000000000000000000000000000000000000900480639692ea25116100785780639692ea2514610113578063b4ec9ac114610126578063b7ab4db514610139578063c76f24371461014e57600080fd5b80631c5a9d9c146100aa578063508adcfc146100bf57806351b42b00146100db5780635dc43899146100e3575b600080fd5b6100bd6100b8366004611399565b610161565b005b6100c860035481565b6040519081526020015b60405180910390f35b6100bd6104aa565b6100f66100f1366004611399565b61074e565b6040805193845260208401929092521515908201526060016100d2565b6100bd610121366004611399565b610bbd565b6100bd610134366004611399565b610deb565b6101416110a3565b6040516100d291906113c9565b6100bd61015c366004611399565b611105565b3360009081526001602052604090205460ff1661019c5760405160e560020a62461bcd02815260040161019390611416565b60405180910390fd5b600160a060020a03811661021b5760405160e560020a62461bcd02815260206004820152602860248201527f63616e6e6f742061637469766174652076616c696461746f722077697468206160448201527f64647265737320300000000000000000000000000000000000000000000000006064820152608401610193565b60005b6000548110156102b7576000818154811061023b5761023b611505565b600091825260209091200154600160a060020a03838116911614156102a55760405160e560020a62461bcd02815260206004820152601b60248201527f76616c696461746f7220697320616c72656164792061637469766500000000006044820152606401610193565b806102af816114b8565b91505061021e565b33600090815260016020526040902054610100900460ff16156103345733600090815260016020526040812054815484929162010000900460ff1690811061030157610301611505565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550610432565b600054610100116103b05760405160e560020a62461bcd02815260206004820152602e60248201527f6e756d626572206f662076616c696461746f72732063616e6e6f74206265206c60448201527f6172676572207468616e203235360000000000000000000000000000000000006064820152608401610193565b3360009081526001602081905260408220805461ff001981166101009081178355845460ff16620100000262ffff001990921691909117179055815490810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563018054600160a060020a038416600160a060020a03199091161790555b600160a060020a0382166000818152600260205260408082208054600160a060020a03191633908117909155915490519192917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f9161049e916001909182521515602082015260400190565b60405180910390a35050565b3360009081526001602052604090205460ff166104dc5760405160e560020a62461bcd02815260040161019390611416565b6000546001106105315760405160e560020a62461bcd02815260206004820181905260248201527f63616e6e6f742064656163746976617465206c6173742076616c696461746f726044820152606401610193565b33600090815260016020526040902054610100900460ff166105be5760405160e560020a62461bcd02815260206004820152602860248201527f73656e64657220646f6573206e6f74206861766520616e20616374697665207660448201527f616c696461746f720000000000000000000000000000000000000000000000006064820152608401610193565b336000908152600160205260408120805461ff0019169081905581546201000090910460ff1691908190839081106105f8576105f8611505565b60009182526020822001548154600160a060020a03909116925081906106209060019061148a565b8154811061063057610630611505565b60009182526020822001548154600160a060020a03909116925082919060ff861690811061066057610660611505565b60009182526020808320919091018054600160a060020a031916600160a060020a03948516179055838316825260028152604080832054909316825260019052908120805462ff000019166201000060ff8716021790558054806106c6576106c66114ec565b6000828152602080822060001990840181018054600160a060020a03199081169091559301909355600160a060020a03851680825260028452604080832080549094169093558154835190815293840191909152339290917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f910160405180910390a3505050565b336000908152600160205260408120548190819060ff166107845760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a03851660009081526004602052604090205481101561082357600160a060020a038516600090815260046020526040812080546001929190849081106107d6576107d6611505565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610811578361080d816114b8565b9450505b8061081b816114b8565b915050610787565b5060026003546108339190611465565b831115610b8657600160a060020a038416600090815260046020526040812061085b9161135f565b600160a060020a03841660009081526001602052604090205460ff1615610ab0576003805490600061088c836114a1565b9091555050600160a060020a038416600090815260016020526040902054610100900460ff1615610a89576000546001106109325760405160e560020a62461bcd02815260206004820152603860248201527f63616e6e6f742072656d6f766520616c6c6f776564206163636f756e7420776960448201527f7468206c617374206163746976652076616c696461746f7200000000000000006064820152608401610193565b600160a060020a03841660009081526001602052604081205481546201000090910460ff169160029181908490811061096d5761096d611505565b6000918252602080832090910154600160a060020a0316835282019290925260400181208054600160a060020a0319169055805481906109af9060019061148a565b815481106109bf576109bf611505565b60009182526020822001548154600160a060020a03909116925082919060ff85169081106109ef576109ef611505565b600091825260208220018054600160a060020a031916600160a060020a039390931692909217909155805480610a2757610a276114ec565b6000828152602080822083016000199081018054600160a060020a0319169055909201909255600160a060020a0392831682526002815260408083205490931682526001905220805460ff909216620100000262ff0000199092169190911790555b600160a060020a0384166000908152600160205260409020805462ffffff19169055610b32565b60038054906000610ac0836114b8565b909155505060408051606081018252600180825260006020808401828152848601838152600160a060020a038b16845293909152939020915182549351915160ff16620100000262ff0000199215156101000261ff00199215159290921661ffff199095169490941717169190911790555b600160a060020a03841660008181526001602090815260409182902054915160ff909216151582527f94154efdb7741591680558a88682943a481f1a468cb81f46fe7f8cead2e40519910160405180910390a25b826002600354610b969190611465565b610ba190600161144d565b6002600354610bb09190611465565b9196909550931192915050565b3360009081526001602052604090205460ff16610bef5760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a038216600090815260046020526040902054811015610d4b57600160a060020a0382166000908152600460205260409020805433919083908110610c3f57610c3f611505565b600091825260209091200154600160a060020a03161415610d3957600160a060020a03821660009081526004602052604090208054610c809060019061148a565b81548110610c9057610c90611505565b6000918252602080832090910154600160a060020a03858116845260049092526040909220805491909216919083908110610ccd57610ccd611505565b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559184168152600490915260409020805480610d1257610d126114ec565b60008281526020902081016000199081018054600160a060020a0319169055019055610d4b565b80610d43816114b8565b915050610bf2565b50600160a060020a0381166000818152600460205260409020546003543392917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba91610d9990600290611465565b610da490600161144d565b600160a060020a0386166000908152600160208181526040928390205483519586529085019390935260ff909216159083015260608201526080015b60405180910390a350565b3360009081526001602052604090205460ff16610e1d5760405160e560020a62461bcd02815260040161019390611416565b600160a060020a038116610e765760405160e560020a62461bcd02815260206004820152601f60248201527f6163636f756e7420746f2062652061646465642063616e6e6f742062652030006044820152606401610193565b600160a060020a03811660009081526001602081905260409091205460ff16151514610f0d5760405160e560020a62461bcd02815260206004820152602a60248201527f6163636f756e7420746f2072656d6f7665206973206e6f74206f6e207468652060448201527f616c6c6f77206c697374000000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a038216600090815260046020526040902054811015610ffb57600160a060020a0382166000908152600460205260409020805433919083908110610f5d57610f5d611505565b600091825260209091200154600160a060020a03161415610fe95760405160e560020a62461bcd02815260206004820152602a60248201527f73656e6465722068617320616c726561647920766f74656420746f2072656d6f60448201527f7665206163636f756e74000000000000000000000000000000000000000000006064820152608401610193565b80610ff3816114b8565b915050610f10565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061107490600290611465565b61107f90600161144d565b60408051928352602083019190915260009082018190526060820152608001610de0565b606060008054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110dd575b5050505050905090565b3360009081526001602052604090205460ff166111375760405160e560020a62461bcd02815260040161019390611416565b600160a060020a03811660009081526001602052604090205460ff16156111c95760405160e560020a62461bcd02815260206004820152602b60248201527f6163636f756e7420746f2061646420697320616c7265616479206f6e2074686560448201527f20616c6c6f77206c6973740000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a0382166000908152600460205260409020548110156112b757600160a060020a038216600090815260046020526040902080543391908390811061121957611219611505565b600091825260209091200154600160a060020a031614156112a55760405160e560020a62461bcd02815260206004820152602760248201527f73656e6465722068617320616c726561647920766f74656420746f206164642060448201527f6163636f756e74000000000000000000000000000000000000000000000000006064820152608401610193565b806112af816114b8565b9150506111cc565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061133090600290611465565b61133b90600161144d565b60408051928352602083019190915260019082015260006060820152608001610de0565b508054600082559060005260206000209081019061137d9190611380565b50565b5b808211156113955760008155600101611381565b5090565b6000602082840312156113ab57600080fd5b8135600160a060020a03811681146113c257600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561140a578351600160a060020a0316835292840192918401916001016113e5565b50909695505050505050565b6020808252601f908201527f73656e646572206973206e6f74206f6e2074686520616c6c6f77206c69737400604082015260600190565b60008219821115611460576114606114d3565b500190565b6000826114855760e060020a634e487b7102600052601260045260246000fd5b500490565b60008282101561149c5761149c6114d3565b500390565b6000816114b0576114b06114d3565b506000190190565b60006000198214156114cc576114cc6114d3565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fdfea26469706673582212200c3e9c07521b155532c0de1605aae52f4ae953670f0afb0f30d320580b93213d64736f6c63430008070033",\n "storage": {\n "0000000000000000000000000000000000000000000000000000000000000000": "0000000000000000000000000000000000000000000000000000000000000002",\n "290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563": "0000000000000000000000009a6d82ef3912d5ab60473124bccd2f2a640769d7",\n "290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564": "00000000000000000000000065463bf6268e5cc409b6501ec846487b935a1446",\n "aedead2c33b41c31b4afd2246c6bf5131c209d4b0ca6c2247778ac7be7443a00": "0000000000000000000000000000000000000000000000000000000000000101",\n "33784757d5da236467d27a7c5b0cc5aa9026ca3b79e29106a67a5e93c292a523": "0000000000000000000000000000000000000000000000000000000000010101",\n "35aba1eb0bbe741ac01e5b6ce584bc042b1a0b7d115eb8f7dd02a1a1de2fd14d": "000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "0d9217f0a1f7c602fd67052d20171ff73b156d1b87ea258cb6a5d94f71298158": "000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57",\n "0000000000000000000000000000000000000000000000000000000000000003": "0000000000000000000000000000000000000000000000000000000000000002"\n },\n "version": "0x01"\n }\n },\n "number": "0x0",\n "gasUsed": "0x0",\n "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"\n}\n'})})})]}),"\n",(0,t.jsx)(n.p,{children:"The QBFT properties are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"blockperiodseconds"})," - The minimum block time, in seconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"epochlength"})," - The number of blocks after which to reset all votes."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," - The timeout for each consensus round before a round change, in seconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"blockreward"})," - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"validatorcontractaddress"})," - Address of the validator smart contract. Required only if using a contract validator selection. The address must be identical to the address in the ",(0,t.jsx)(n.code,{children:"alloc"})," section. This option can also be used in the ",(0,t.jsx)(n.a,{href:"#transitions",children:"transitions"})," configuration item if swapping ",(0,t.jsx)(n.a,{href:"#add-and-remove-validators",children:"validator management methods"})," in an existing network."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"miningbeneficiary"})," - Optional beneficiary of the ",(0,t.jsx)(n.code,{children:"blockreward"}),". Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#extra-data",children:(0,t.jsx)(n.code,{children:"extraData"})})," - RLP encoded ",(0,t.jsx)(n.a,{href:"#extra-data",children:"extra data"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["We don't recommend changing ",(0,t.jsx)(n.code,{children:"epochlength"})," in a running network. Changing the ",(0,t.jsx)(n.code,{children:"epochlength"})," after genesis can result in illegal blocks."]})}),"\n",(0,t.jsxs)(n.admonition,{title:"Invalid block header error",type:"caution",children:[(0,t.jsxs)(n.p,{children:["When adding a new node, if a ",(0,t.jsx)(n.code,{children:"TimeStampMoreRecentThanParent | Invalid block header"})," error occurs, the genesis file of the new node specifies a higher ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu."]}),(0,t.jsxs)(n.p,{children:["Decrease the ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," in the new QBFT genesis file to a lower value that satisfies the block header validation."]}),(0,t.jsxs)(n.p,{children:["If the error reads ",(0,t.jsx)(n.code,{children:"| TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds"}),", decrease the ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," from 4 seconds to 3 seconds to match the imported chain."]}),(0,t.jsxs)(n.p,{children:["After you update the new genesis file, if the imported chain has a ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," value set lower than you prefer, you can adjust it by ",(0,t.jsx)(n.a,{href:"#configure-block-time-on-an-existing-network",children:"configuring the block time on an existing QBFT network"}),"."]})]}),"\n",(0,t.jsx)(n.p,{children:"The properties with specific values in the QBFT genesis files are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"difficulty"})," - ",(0,t.jsx)(n.code,{children:"0x1"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"mixHash"})," - ",(0,t.jsx)(n.code,{children:"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365"})," for Istanbul block identification"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["To start a node on a QBFT private network, use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,t.jsx)(n.code,{children:"--genesis-file"})})," option to specify the custom genesis file."]}),"\n",(0,t.jsx)(n.h3,{id:"extra-data",children:"Extra data"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"extraData"})," property is an RLP encoding of:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"32 bytes of vanity data."}),"\n",(0,t.jsxs)(n.li,{children:["If using:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#add-and-remove-validators-using-block-headers",children:"Block header validator selection"}),", a list of validator addresses."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#add-and-remove-validators-using-a-smart-contract",children:"Contract validator selection"}),", no validators."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"Any validator votes. No vote is included in the genesis block."}),"\n",(0,t.jsx)(n.li,{children:"The round the block was created on. The round in the genesis block is 0."}),"\n",(0,t.jsx)(n.li,{children:"A list of seals of the validators (signed block hashes). No seals are included in the genesis block."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"When using block header validator selection, the important information in the genesis block extra data is the list of validators. All other details have empty values in the genesis block."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["When using contract validator selection to manage validators, the list of validators is configured\nin the ",(0,t.jsx)(n.code,{children:"alloc"})," property's ",(0,t.jsx)(n.code,{children:"storage"})," section.\nView the ",(0,t.jsx)(n.a,{href:"https://github.com/ConsenSys/validator-smart-contracts",children:"example smart contract"})," for more\ninformation on how to generate the ",(0,t.jsx)(n.code,{children:"storage"})," section."]})}),"\n",(0,t.jsxs)(n.p,{children:["Formally, ",(0,t.jsx)(n.code,{children:"extraData"})," in the genesis block contains:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If using block header validator selection: ",(0,t.jsx)(n.code,{children:"RLP([32 bytes Vanity, List<Validators>, No Vote, Round=Int(0), 0 Seals])"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["If using contract validator selection: ",(0,t.jsx)(n.code,{children:"RLP([32 bytes Vanity, 0 Validators, No Vote, Round=Int(0), 0 Seals])"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"RLP encoding is a space-efficient object serialization scheme used in Ethereum."})}),"\n",(0,t.jsx)(n.h4,{id:"generate-extra-data",children:"Generate extra data"}),"\n",(0,t.jsxs)(n.p,{children:["To generate the ",(0,t.jsx)(n.code,{children:"extraData"})," RLP string for inclusion in the genesis file, use the ",(0,t.jsx)(n.a,{href:"/private-networks/reference/cli/subcommands#encode",children:(0,t.jsx)(n.code,{children:"rlp encode"})})," Besu subcommand."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:"besu rlp encode --from=toEncode.json --type=QBFT_EXTRA_DATA\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Where the ",(0,t.jsx)(n.code,{children:"toEncode.json"})," file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the ",(0,t.jsx)(n.code,{children:"toEncode.json"})," file, use the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands#export-address",children:(0,t.jsx)(n.code,{children:"public-key export-address"})})," Besu subcommand. For example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="Initial validators in toEncode.json file"',children:'[\n "0x4592c8e45706cc08b8f44b11e43cba0cfc5892cb",\n "0x06e23768a0f59cf365e18c2e0c89e151bcdedc70",\n "0xc5327f96ee02d7bcbc1bf1236b8c15148971e1de",\n "0xab5e7f4061c605820d3744227eed91ff8e2c8908"\n]\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Copy the RLP encoded data to the ",(0,t.jsx)(n.code,{children:"extraData"})," property in the genesis file."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="RLP encoded data"',children:"0xf87aa00000000000000000000000000000000000000000000000000000000000000000f854944592c8e45706cc08b8f44b11e43cba0cfc5892cb9406e23768a0f59cf365e18c2e0c89e151bcdedc7094c5327f96ee02d7bcbc1bf1236b8c15148971e1de94ab5e7f4061c605820d3744227eed91ff8e2c8908c080c0\n"})}),"\n",(0,t.jsxs)(n.p,{children:["When you start the network, the four nodes previously specified in ",(0,t.jsx)(n.code,{children:"toEncode.json"})," are the validators for the network."]}),"\n",(0,t.jsx)(n.h3,{id:"block-time",children:"Block time"}),"\n",(0,t.jsxs)(n.p,{children:["When the protocol receives a new chain head, the block time (",(0,t.jsx)(n.code,{children:"blockperiodseconds"}),") timer starts. When ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," expires, the round timeout (",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"}),") timer starts and the protocol proposes a new block."]}),"\n",(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"}),". The timeout period continues to double each time a round fails to add a block."]}),"\n",(0,t.jsxs)(n.p,{children:["Usually, the protocol adds the proposed block before reaching ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"}),". A new round then starts, resetting the block time and round timeout timers. When ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," expires, the protocol proposes the next new block."]}),"\n",(0,t.jsx)(n.admonition,{type:"danger",children:(0,t.jsxs)(n.p,{children:["If more than 1/3 of validators stop participating, new blocks can no longer be created and ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," doubles with each round change. The quickest method to resume block production is to restart all validators, which resets ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," to its genesis value."]})}),"\n",(0,t.jsxs)(n.p,{children:["Once ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators."]}),"\n",(0,t.jsx)(n.h4,{id:"tune-block-timeout",children:"Tune block timeout"}),"\n",(0,t.jsx)(n.p,{children:"To tune the block timeout for your network deployment:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Set ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," to your desired block time and ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," to two times ",(0,t.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Reduce ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," until you start to see round changes occurring."]}),"\n",(0,t.jsxs)(n.li,{children:["Increase ",(0,t.jsx)(n.code,{children:"requesttimeoutseconds"})," to the value where round changes are no longer occurring."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["View ",(0,t.jsxs)(n.a,{href:"/public-networks/reference/api/#admin_changeloglevel",children:[(0,t.jsx)(n.code,{children:"TRACE"})," logs"]})," to see round change log messages."]})}),"\n",(0,t.jsxs)(n.p,{children:["Use a ",(0,t.jsx)(n.a,{href:"#transitions",children:"transition"})," to update the ",(0,t.jsx)(n.code,{children:"blockperiodseconds"})," in an existing network."]}),"\n",(0,t.jsx)(n.h3,{id:"optional-configuration-options",children:"Optional configuration options"}),"\n",(0,t.jsx)(n.p,{children:"Optional configuration options in the genesis file are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"messageQueueLimit"})," - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"duplicateMessageLimit"})," - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"futureMessagesLimit"})," - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"futureMessagesMaxDistance"})," - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"post-merge-configuration",children:"Post-Merge configuration"}),"\n",(0,t.jsxs)(n.p,{children:["After ",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/upgrades/merge/",children:"The Merge"}),", the following block fields are modified or deprecated. Their fields ",(0,t.jsx)(n.strong,{children:"must"})," contain only the constant values from the following chart."]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field"}),(0,t.jsx)(n.th,{children:"Constant value"}),(0,t.jsx)(n.th,{children:"Comment"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"ommersHash"})})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"= Keccak256(RLP([]))"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"difficulty"})})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0"})}),(0,t.jsxs)(n.td,{children:["Replaced with ",(0,t.jsx)(n.code,{children:"prevrandao"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"mixHash"})})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0x0000000000000000000000000000000000000000000000000000000000000000"})}),(0,t.jsxs)(n.td,{children:["Replaced with ",(0,t.jsx)(n.code,{children:"prevrandao"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"nonce"})})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"0x0000000000000000"})}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"ommers"})})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"[]"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"RLP([]) = 0xc0"})})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["Additionally, ",(0,t.jsx)(n.a,{href:"#extra-data",children:(0,t.jsx)(n.code,{children:"extraData"})})," is limited to the 32 bytes of vanity data after The Merge."]}),"\n",(0,t.jsx)(n.h2,{id:"add-and-remove-validators",children:"Add and remove validators"}),"\n",(0,t.jsx)(n.p,{children:"QBFT provides two methods to manage validators:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"#add-and-remove-validators-using-block-headers",children:"Block header validator selection"})," - Existing validators propose and vote to add or remove validators using the QBFT JSON-RPC API methods."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"#add-and-remove-validators-using-a-smart-contract",children:"Contract validator selection"})," - Use a smart contract to specify the validators used to propose and validate blocks."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["You can use ",(0,t.jsx)(n.a,{href:"#transitions",children:"transitions"})," to swap between block header validator selection and contract validator selection in an existing network."]}),"\n",(0,t.jsxs)(n.p,{children:["For block header validator selection, initial validators are configured in the genesis file's ",(0,t.jsx)(n.a,{href:"#extra-data",children:(0,t.jsx)(n.code,{children:"extraData"})})," property, whereas the initial validators when using the contract validator selection method are configured in the genesis file's ",(0,t.jsx)(n.code,{children:"storage"})," section."]}),"\n",(0,t.jsx)(n.h3,{id:"add-and-remove-validators-using-block-headers",children:"Add and remove validators using block headers"}),"\n",(0,t.jsxs)(n.p,{children:["Enable the HTTP interface with ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-http-enabled"})})," or the WebSockets interface with ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-enabled",children:(0,t.jsx)(n.code,{children:"--rpc-ws-enabled"})}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The QBFT API methods are disabled by default. To enable them, specify the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,t.jsx)(n.code,{children:"--rpc-ws-api"})})," option and include ",(0,t.jsx)(n.code,{children:"QBFT"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The methods to add or remove validators are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_getpendingvotes",children:(0,t.jsx)(n.code,{children:"qbft_getPendingVotes"})}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_proposevalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_proposeValidatorVote"})}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_discardvalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_discardValidatorVote"})}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["To view validator metrics for a specified block range, use ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_getsignermetrics",children:(0,t.jsx)(n.code,{children:"qbft_getSignerMetrics"})}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If network conditions render it impossible to add and remove validators by voting, you can ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/add-validators-without-voting",children:"add and remove validators without voting"}),"."]})}),"\n",(0,t.jsx)(n.h4,{id:"add-a-validator",children:"Add a validator"}),"\n",(0,t.jsxs)(n.p,{children:["To propose adding a validator, call ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_proposevalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_proposeValidatorVote"})}),", specifying the address of the proposed validator and ",(0,t.jsx)(n.code,{children:"true"}),". A majority of validators must execute the call."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC qbft_proposeValidatorVote request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["When the validator proposes the next block, the protocol inserts one proposal received from ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_proposevalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_proposeValidatorVote"})})," into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote."]}),"\n",(0,t.jsx)(n.p,{children:"When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks."}),"\n",(0,t.jsxs)(n.p,{children:["To return a list of validators and confirm the addition of a proposed validator, use ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_getvalidatorsbyblocknumber",children:(0,t.jsx)(n.code,{children:"qbft_getValidatorsByBlockNumber"})}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC qbft_getValidatorsByBlockNumber request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,t.jsxs)(n.p,{children:["To discard your proposal after confirming the addition of a validator, call ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_discardvalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_discardValidatorVote"})}),", specifying the address of the proposed validator."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="JSON-RPC qbft_discardValidatorVote request example"',children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}\' <JSON-RPC-endpoint:port>\n'})}),"\n",(0,t.jsx)(n.h4,{id:"remove-a-validator",children:"Remove a validator"}),"\n",(0,t.jsxs)(n.p,{children:["The process for removing a validator is the same as adding a validator except you specify ",(0,t.jsx)(n.code,{children:"false"})," as the second parameter of ",(0,t.jsx)(n.a,{href:"/private-networks/reference/api/#qbft_proposevalidatorvote",children:(0,t.jsx)(n.code,{children:"qbft_proposeValidatorVote"})}),"."]}),"\n",(0,t.jsx)(n.h4,{id:"epoch-transition",children:"Epoch transition"}),"\n",(0,t.jsx)(n.p,{children:"At each epoch transition, QBFT discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block."}),"\n",(0,t.jsxs)(n.p,{children:["An epoch transition occurs every ",(0,t.jsx)(n.code,{children:"epochLength"})," blocks. Define ",(0,t.jsx)(n.code,{children:"epochlength"})," in the QBFT genesis file."]}),"\n",(0,t.jsx)(n.h3,{id:"add-and-remove-validators-using-a-smart-contract",children:"Add and remove validators using a smart contract"}),"\n",(0,t.jsxs)(n.p,{children:["Users can create their own smart contracts to add or remove validators based on their organizational requirements. View the ",(0,t.jsx)(n.a,{href:"https://github.com/ConsenSys/validator-smart-contracts",children:"example smart contract"})," for more information on how to create and deploy the smart contract."]}),"\n",(0,t.jsxs)(n.p,{children:["You can pre-deploy the validator smart contract in a new QBFT network by specifying the contract details in the ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#genesis-file",children:"genesis file"}),". For existing QBFT networks you need to compile and deploy the contract using a transaction, then obtain the contract address from the receipt and use that in a ",(0,t.jsx)(n.a,{href:"#swap-validator-management-methods",children:"transition"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"You can't use the JSON-RPC methods to add or remove validators when using a smart contract to manage nodes."}),(0,t.jsx)(n.p,{children:"You must interact with the contract functions using transactions."})]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["If network conditions render it impossible to add and remove validators using a smart contract, you can ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/add-validators-without-voting#override-smart-contract-validators",children:"override smart contract validators"}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"minimum-number-of-validators",children:"Minimum number of validators"}),"\n",(0,t.jsx)(n.p,{children:"QBFT requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers."}),"\n",(0,t.jsx)(n.h2,{id:"transitions",children:"Transitions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"transitions"})," genesis configuration item allows you to specify a future block number at which to\nthe QBFT network configuration in an existing network.\nFor example, you can update the ",(0,t.jsx)(n.a,{href:"#configure-block-time-on-an-existing-network",children:"block time"}),",\n",(0,t.jsx)(n.a,{href:"#configure-block-rewards-on-an-existing-network",children:"block reward"}),",\n",(0,t.jsx)(n.a,{href:"#swap-validator-management-methods",children:"validator management method"}),", or\n",(0,t.jsx)(n.a,{href:"#configure-the-mining-beneficiary-on-an-existing-network",children:"mining beneficiary"}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"Do not specify a transition block in the past.\nSpecifying a transition block in the past can result in unexpected behavior, such as causing the\nnetwork to fork."})}),"\n",(0,t.jsx)(n.h3,{id:"configure-block-time-on-an-existing-network",children:"Configure block time on an existing network"}),"\n",(0,t.jsxs)(n.p,{children:["To update an existing network with a new ",(0,t.jsx)(n.code,{children:"blockperiodseconds"}),":"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,t.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change ",(0,t.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<NewValue>"})," is the updated value for ",(0,t.jsx)(n.code,{children:"blockperiodseconds"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(r.A,{children:[(0,t.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "qbft": [\n {\n "block": <FutureBlockNumber>,\n "blockperiodseconds": <NewValue>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,t.jsx)(s.A,{value:"Example",label:"Example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n },\n "transitions": {\n "qbft": [\n {\n "block": 1240,\n "blockperiodseconds": 4\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To verify the changes after the transition block, view the Besu logs and check that the time\ndifference between each block matches the updated block period."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"configure-block-rewards-on-an-existing-network",children:"Configure block rewards on an existing network"}),"\n",(0,t.jsxs)(n.p,{children:["To update an existing network with a new ",(0,t.jsx)(n.code,{children:"blockreward"}),":"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,t.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change ",(0,t.jsx)(n.code,{children:"blockreward"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<NewValue>"})," is the updated value for ",(0,t.jsx)(n.code,{children:"blockreward"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(r.A,{children:[(0,t.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n "blockreward": "5000000000000000"\n },\n "transitions": {\n "qbft": [\n {\n "block": <FutureBlockNumber>,\n "blockreward": <NewValue>\n },\n {\n "block": <FutureBlockNumber>,\n "blockreward": <NewValue>\n },\n {\n "block": <FutureBlockNumber>,\n "blockreward": <NewValue>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,t.jsx)(s.A,{value:"Example",label:"Example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n "blockreward": "5000000000000000"\n },\n "transitions": {\n "qbft": [\n {\n "block": 10,\n "blockreward": "6000000000000000"\n },\n {\n "block": 15,\n "blockreward": "75000000000000000"\n },\n {\n "block": 20,\n "blockreward": "0"\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["You can add multiple ",(0,t.jsx)(n.code,{children:"blockreward"})," updates in one transition object by specifying multiple future blocks."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"swap-validator-management-methods",children:"Swap validator management methods"}),"\n",(0,t.jsx)(n.p,{children:"To swap between block header validator selection and contract validator selection methods in an existing network:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,t.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change the validator selection method."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<SelectionMode>"})," is the validator selection mode to switch to. Valid options are ",(0,t.jsx)(n.code,{children:"contract"})," and ",(0,t.jsx)(n.code,{children:"blockheader"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<ContractAddress>"})," is the smart contract address, if switching to the contract validator selection method."]}),"\n"]}),"\n",(0,t.jsxs)(r.A,{children:[(0,t.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 5,\n "epochlength": 30000,\n "requesttimeoutseconds": 10\n },\n "transitions": {\n "qbft": [\n {\n "block": <FutureBlockNumber>,\n "validatorselectionmode": <SelectionMode>,\n "validatorcontractaddress": <ContractAddress>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,t.jsx)(s.A,{value:"Example",label:"Example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 5,\n "epochlength": 30000,\n "requesttimeoutseconds": 10\n },\n "transitions": {\n "qbft": [\n {\n "block": 102885,\n "validatorselectionmode": "contract",\n "validatorcontractaddress": "0x0000000000000000000000000000000000007777"\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"configure-the-mining-beneficiary-on-an-existing-network",children:"Configure the mining beneficiary on an existing network"}),"\n",(0,t.jsx)(n.p,{children:"To update an existing network with a new mining beneficiary:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Stop all nodes in the network."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"#genesis-file",children:"genesis file"}),", add the ",(0,t.jsx)(n.code,{children:"transitions"})," configuration item where:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<FutureBlockNumber>"})," is the upcoming block at which to change ",(0,t.jsx)(n.code,{children:"miningbeneficiary"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"<NewAddress>"})," is the updated 20-byte address for ",(0,t.jsx)(n.code,{children:"miningbeneficiary"}),". Starting at ",(0,t.jsx)(n.code,{children:"<FutureBlockNumber>"}),", block rewards go to this address."]}),"\n"]}),"\n",(0,t.jsxs)(r.A,{children:[(0,t.jsx)(s.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 5,\n "epochlength": 30000,\n "requesttimeoutseconds": 10\n },\n "transitions": {\n "qbft": [\n {\n "block": <FutureBlockNumber>,\n "miningbeneficiary": <NewAddress>\n },\n {\n "block": <FutureBlockNumber>,\n "miningbeneficiary": <NewAddress>\n }\n ]\n }\n },\n ...\n}\n'})})}),(0,t.jsx)(s.A,{value:"Example",label:"Example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "config": {\n ...\n "qbft": {\n "blockperiodseconds": 5,\n "epochlength": 30000,\n "requesttimeoutseconds": 10\n },\n "transitions": {\n "qbft": [\n {\n "block": 10000,\n "miningbeneficiary": "0x0000000000000000000000000000000000000002",\n },\n {\n "block": 20000,\n "miningbeneficiary": "",\n }\n ]\n }\n },\n ...\n}\n'})})})]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Setting the ",(0,t.jsx)(n.code,{children:"miningbeneficiary"})," to an empty value clears out any override so that block rewards go to the block producer rather than a global override address."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Restart all nodes in the network using the updated genesis file."}),"\n"]}),"\n"]})]})}function b(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(f,{...e})}):f(e)}},19365:(e,n,a)=>{a.d(n,{A:()=>s});a(96540);var t=a(18215);const i={tabItem:"tabItem_Ymn6"};var r=a(74848);function s(e){let{children:n,hidden:a,className:s}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(i.tabItem,s),hidden:a,children:n})}},11470:(e,n,a)=>{a.d(n,{A:()=>w});var t=a(96540),i=a(18215),r=a(23104),s=a(56347),o=a(205),c=a(57485),d=a(31682),l=a(70679);function h(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function f(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:i}}=e;return{value:n,label:a,attributes:t,default:i}}))}(a);return function(e){const n=(0,d.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function b(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function u(e){let{queryString:n=!1,groupId:a}=e;const i=(0,s.W6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,c.aZ)(r),(0,t.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(i.location.search);n.set(r,e),i.replace({...i.location,search:n.toString()})}),[r,i])]}function x(e){const{defaultValue:n,queryString:a=!1,groupId:i}=e,r=f(e),[s,c]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!b({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:r}))),[d,h]=u({queryString:a,groupId:i}),[x,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[i,r]=(0,l.Dv)(a);return[i,(0,t.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:i}),m=(()=>{const e=d??x;return b({value:e,tabValues:r})?e:null})();(0,o.A)((()=>{m&&c(m)}),[m]);return{selectedValue:s,selectValue:(0,t.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),p(e)}),[h,p,r]),tabValues:r}}var p=a(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=a(74848);function g(e){let{className:n,block:a,selectedValue:t,selectValue:s,tabValues:o}=e;const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,r.a_)(),l=e=>{const n=e.currentTarget,a=c.indexOf(n),i=o[a].value;i!==t&&(d(n),s(i))},h=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const a=c.indexOf(e.currentTarget)+1;n=c[a]??c[0];break}case"ArrowLeft":{const a=c.indexOf(e.currentTarget)-1;n=c[a]??c[c.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":a},n),children:o.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>c.push(e),onKeyDown:h,onClick:l,...r,className:(0,i.A)("tabs__item",m.tabItem,r?.className,{"tabs__item--active":t===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:r}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===r));return e?(0,t.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function k(e){const n=x(e);return(0,j.jsxs)("div",{className:(0,i.A)("tabs-container",m.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function w(e){const n=(0,p.A)();return(0,j.jsx)(k,{...e,children:h(e.children)},String(n))}},28453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>o});var t=a(96540);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b5e9b728.2405688b.js b/assets/js/b5e9b728.2405688b.js new file mode 100644 index 00000000000..637a181a1dd --- /dev/null +++ b/assets/js/b5e9b728.2405688b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4597],{61312:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=t(74848),c=t(28453);const s={title:"Trace transactions",sidebar_position:2,description:"How to trace transactions",tags:["public networks","private networks"]},i="Trace transactions",o={id:"public-networks/how-to/troubleshoot/trace-transactions",title:"Trace transactions",description:"How to trace transactions",source:"@site/docs/public-networks/how-to/troubleshoot/trace-transactions.md",sourceDirName:"public-networks/how-to/troubleshoot",slug:"/public-networks/how-to/troubleshoot/trace-transactions",permalink:"/public-networks/how-to/troubleshoot/trace-transactions",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/troubleshoot/trace-transactions.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Trace transactions",sidebar_position:2,description:"How to trace transactions",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use EVM tool",permalink:"/public-networks/how-to/troubleshoot/evm-tool"},next:{title:"Troubleshoot performance",permalink:"/public-networks/how-to/troubleshoot/performance"}},a={},l=[{value:"Ad-hoc tracing APIs",id:"ad-hoc-tracing-apis",level:2},{value:"Transaction-trace filtering APIs",id:"transaction-trace-filtering-apis",level:2}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,c.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"trace-transactions",children:"Trace transactions"})}),"\n",(0,n.jsxs)(r.p,{children:["To get detailed information about transaction processing, use the ",(0,n.jsxs)(r.a,{href:"/public-networks/reference/api/#trace-methods",children:[(0,n.jsx)(r.code,{children:"TRACE"})," API"]}),". Enable the ",(0,n.jsx)(r.code,{children:"TRACE"})," API using the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," command line options."]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"TRACE"})," API has two sets of trace calls, ",(0,n.jsx)(r.a,{href:"#ad-hoc-tracing-apis",children:"ad-hoc tracing APIs"})," and ",(0,n.jsx)(r.a,{href:"#transaction-trace-filtering-apis",children:"transaction-trace filtering APIs"}),"."]}),"\n",(0,n.jsx)(r.h2,{id:"ad-hoc-tracing-apis",children:"Ad-hoc tracing APIs"}),"\n",(0,n.jsxs)(r.p,{children:["These APIs allow you to use the ",(0,n.jsxs)(r.a,{href:"/public-networks/reference/trace-types",children:[(0,n.jsx)(r.code,{children:"trace"}),", ",(0,n.jsx)(r.code,{children:"vmTrace"}),", or ",(0,n.jsx)(r.code,{children:"stateDiff"})]})," diagnostic options when tracing calls or transactions."]}),"\n",(0,n.jsxs)(r.p,{children:["When using ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," with the ad-hoc\ntracing APIs, the requested block or transaction must be within the number of\n",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," (by default, 512\nfrom the head of the chain)."]}),"\n",(0,n.jsx)(r.p,{children:"The ad-hoc tracing APIs are:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_call",children:(0,n.jsx)(r.code,{children:"trace_call"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_callmany",children:(0,n.jsx)(r.code,{children:"trace_callMany"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_rawtransaction",children:(0,n.jsx)(r.code,{children:"trace_rawTransaction"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_replayblocktransactions",children:(0,n.jsx)(r.code,{children:"trace_replayBlockTransactions"})})}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"transaction-trace-filtering-apis",children:"Transaction-trace filtering APIs"}),"\n",(0,n.jsxs)(r.p,{children:["These APIs allow you to filter and search by specific information such as the block, address, or transaction. These APIs only use the ",(0,n.jsxs)(r.a,{href:"/public-networks/reference/trace-types#trace",children:[(0,n.jsx)(r.code,{children:"trace"})," type"]}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["To use the transaction-trace filtering APIs, your node must be an\n",(0,n.jsx)(r.a,{href:"/public-networks/get-started/connect/sync-node#run-an-archive-node",children:"archive node"}),", or the requested block\nor transaction must be within the number of\n",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#bonsai-historical-block-limit",children:"blocks retained"})," when using\n",(0,n.jsx)(r.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," (by default, 512 from the head\nof the chain)."]}),"\n",(0,n.jsx)(r.p,{children:"The transaction-trace filtering APIs are:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_block",children:(0,n.jsx)(r.code,{children:"trace_block"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_filter",children:(0,n.jsx)(r.code,{children:"trace_filter"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_get",children:(0,n.jsx)(r.code,{children:"trace_get"})})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#trace_transaction",children:(0,n.jsx)(r.code,{children:"trace_transaction"})})}),"\n"]})]})}function d(e={}){const{wrapper:r}={...(0,c.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453:(e,r,t)=>{t.d(r,{R:()=>i,x:()=>o});var n=t(96540);const c={},s=n.createContext(c);function i(e){const r=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b658262b.4407836a.js b/assets/js/b658262b.4407836a.js new file mode 100644 index 00000000000..9416c09cfe4 --- /dev/null +++ b/assets/js/b658262b.4407836a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1384],{93440:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=t(74848),s=t(28453);const o={title:"Run Besu from Docker image",sidebar_position:1,description:"Run Besu using the official docker image",tags:["public networks"]},i="Run Besu from a Docker image",a={id:"public-networks/get-started/install/run-docker-image",title:"Run Besu from Docker image",description:"Run Besu using the official docker image",source:"@site/docs/public-networks/get-started/install/run-docker-image.md",sourceDirName:"public-networks/get-started/install",slug:"/public-networks/get-started/install/run-docker-image",permalink:"/public-networks/get-started/install/run-docker-image",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/install/run-docker-image.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Run Besu from Docker image",sidebar_position:1,description:"Run Besu using the official docker image",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Installation options",permalink:"/public-networks/get-started/install/"},next:{title:"Install binary distribution",permalink:"/public-networks/get-started/install/binary-distribution"}},c={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Default node for Mainnet",id:"default-node-for-mainnet",level:2},{value:"Expose ports",id:"expose-ports",level:2},{value:"Start Besu",id:"start-besu",level:2},{value:"Run a node for testing",id:"run-a-node-for-testing",level:3},{value:"Run a node on Holesky testnet",id:"run-a-node-on-holesky-testnet",level:3},{value:"Run a node on Ethereum Mainnet",id:"run-a-node-on-ethereum-mainnet",level:3},{value:"Stop Besu and clean up resources",id:"stop-besu-and-clean-up-resources",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"run-besu-from-a-docker-image",children:"Run Besu from a Docker image"})}),"\n",(0,r.jsx)(n.p,{children:"Besu provides a Docker image to run a Besu node in a Docker container."}),"\n",(0,r.jsx)(n.p,{children:"Use this Docker image to run a single Besu node without installing Besu."}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"MacOS or Linux"}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"The Docker image doesn't run on Windows."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"default-node-for-mainnet",children:"Default node for Mainnet"}),"\n",(0,r.jsx)(n.p,{children:"To run a Besu node in a container connected to the Ethereum Mainnet:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run hyperledger/besu:latest\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://hub.docker.com/r/hyperledger/besu/tags",children:"https://hub.docker.com/r/hyperledger/besu/tags"})," lists the available tags for the image."]}),(0,r.jsxs)(n.p,{children:["If you previously pulled ",(0,r.jsx)(n.code,{children:"latest"}),", Docker runs the cached version."]}),(0,r.jsxs)(n.p,{children:["To ensure your image is up to date, pull the ",(0,r.jsx)(n.code,{children:"latest"})," version again using ",(0,r.jsx)(n.code,{children:"docker pull hyperledger/besu:latest"}),"."]})]}),"\n",(0,r.jsx)(n.h2,{id:"expose-ports",children:"Expose ports"}),"\n",(0,r.jsxs)(n.p,{children:["Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-port",children:(0,r.jsx)(n.code,{children:"--rpc-ws-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-port",children:(0,r.jsx)(n.code,{children:"--metrics-port"})}),", ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#graphql-http-port",children:(0,r.jsx)(n.code,{children:"--graphql-http-port"})}),", and ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-push-port",children:(0,r.jsx)(n.code,{children:"--metrics-push-port"})})," options."]}),"\n",(0,r.jsx)(n.p,{children:"To run Besu exposing local ports for access:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p <localportJSON-RPC>:8545 -p <localportWS>:8546 -p <localportP2P>:30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["The examples on this page expose TCP ports only. To expose UDP ports, specify ",(0,r.jsx)(n.code,{children:"/udp"})," at the end of the argument for the ",(0,r.jsx)(n.code,{children:"-p"})," Docker subcommand option:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p <port>:<port>/udp\n"})}),(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsxs)(n.a,{href:"https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose",children:[(0,r.jsx)(n.code,{children:"docker run -p"})," documentation"]}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["To enable JSON-RPC HTTP calls to ",(0,r.jsx)(n.code,{children:"127.0.0.1:8545"})," and P2P discovery on ",(0,r.jsx)(n.code,{children:"127.0.0.1:13001"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled\n"})}),"\n",(0,r.jsx)(n.h2,{id:"start-besu",children:"Start Besu"}),"\n",(0,r.jsxs)(n.admonition,{type:"danger",children:[(0,r.jsxs)(n.p,{children:["Don't mount a volume at the default data path (",(0,r.jsx)(n.code,{children:"/opt/besu"}),"). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching."]}),(0,r.jsxs)(n.p,{children:["To run a node that maintains the node state (key and database), ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})," must be set to a location other than ",(0,r.jsx)(n.code,{children:"/opt/besu"})," and a storage volume mounted at that location."]}),(0,r.jsxs)(n.p,{children:["When running in a Docker container, ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,r.jsx)(n.code,{children:"--nat-method"})})," must be set to ",(0,r.jsx)(n.code,{children:"DOCKER"})," or ",(0,r.jsx)(n.code,{children:"AUTO"})," (default). Don't set ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat",children:(0,r.jsx)(n.code,{children:"--nat-method"})})," to ",(0,r.jsx)(n.code,{children:"NONE"})," or ",(0,r.jsx)(n.code,{children:"UPNP"}),"."]})]}),"\n",(0,r.jsxs)(n.p,{children:["You can specify ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#specify-options",children:"Besu environment variables"})," with the Docker image instead of the command line options."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Example"',children:"docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest\n"})}),"\n",(0,r.jsxs)(n.admonition,{title:"Unsupported address type exception",type:"caution",children:[(0,r.jsx)(n.p,{children:"When running Besu from a Docker image, you might get the following exception:"}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime.\n"})}),(0,r.jsx)(n.p,{children:"This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker."}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://docs.docker.com/config/daemon/ipv6/",children:"Enable IPv6 support in Docker"})," to allow outbound IPv6 traffic and allow connection with IPv6 peers."]})]}),"\n",(0,r.jsx)(n.h3,{id:"run-a-node-for-testing",children:"Run a node for testing"}),"\n",(0,r.jsx)(n.p,{children:"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 8546:8546 --mount type=bind,source=/<myvolume/besu/testnode>,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu\n"})}),"\n",(0,r.jsx)(n.h3,{id:"run-a-node-on-holesky-testnet",children:"Run a node on Holesky testnet"}),"\n",(0,r.jsx)(n.p,{children:"To run a node on Holesky:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 30303:30303 --mount type=bind,source=/<myvolume/besu/holesky>,target=/var/lib/besu hyperledger/besu:latest --network=holesky --data-path=/var/lib/besu\n"})}),"\n",(0,r.jsx)(n.h3,{id:"run-a-node-on-ethereum-mainnet",children:"Run a node on Ethereum Mainnet"}),"\n",(0,r.jsx)(n.p,{children:"To run a node on Ethereum Mainnet with the HTTP JSON-RPC service enabled:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker run -p 8545:8545 --mount type=bind,source=/<myvolume/besu/mainnet>,target=/var/lib/besu -p 30303:30303 hyperledger/besu:latest --rpc-http-enabled --data-path=/var/lib/besu\n"})}),"\n",(0,r.jsx)(n.h2,{id:"stop-besu-and-clean-up-resources",children:"Stop Besu and clean up resources"}),"\n",(0,r.jsxs)(n.p,{children:["When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run ",(0,r.jsx)(n.code,{children:"docker container ls"})," and ",(0,r.jsx)(n.code,{children:"docker volume ls"})," to get the container and volume names."]}),"\n",(0,r.jsx)(n.p,{children:"To stop a container:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker stop <container-name>\n"})}),"\n",(0,r.jsx)(n.p,{children:"To delete a container:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker rm <container-name>\n"})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var r=t(96540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b6b2f0db.e7ee8e7b.js b/assets/js/b6b2f0db.e7ee8e7b.js new file mode 100644 index 00000000000..5bb4985944f --- /dev/null +++ b/assets/js/b6b2f0db.e7ee8e7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[499],{4522:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var t=r(74848),c=r(28453);const s={title:"Transaction trace types",sidebar_position:6,description:"Transaction trace types reference",tags:["public networks","private networks"]},d="Transaction trace types",i={id:"public-networks/reference/trace-types",title:"Transaction trace types",description:"Transaction trace types reference",source:"@site/docs/public-networks/reference/trace-types.md",sourceDirName:"public-networks/reference",slug:"/public-networks/reference/trace-types",permalink:"/public-networks/reference/trace-types",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/trace-types.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Transaction trace types",sidebar_position:6,description:"Transaction trace types reference",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"EVM tool options",permalink:"/public-networks/reference/evm-tool"},next:{title:"Projects using Besu",permalink:"/public-networks/reference/projects-using-besu"}},a={},l=[{value:"<code>trace</code>",id:"trace",level:2},{value:"<code>vmTrace</code>",id:"vmtrace",level:2},{value:"<code>stateDiff</code>",id:"statediff",level:2},{value:"Applicable API methods",id:"applicable-api-methods",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"transaction-trace-types",children:"Transaction trace types"})}),"\n",(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/trace-transactions",children:"tracing transactions"}),", the trace type options are ",(0,t.jsx)(n.a,{href:"#trace",children:(0,t.jsx)(n.code,{children:"trace"})}),", ",(0,t.jsx)(n.a,{href:"#vmtrace",children:(0,t.jsx)(n.code,{children:"vmTrace"})}),", and ",(0,t.jsx)(n.a,{href:"#statediff",children:(0,t.jsx)(n.code,{children:"stateDiff"})}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"trace",children:(0,t.jsx)(n.code,{children:"trace"})}),"\n",(0,t.jsx)(n.p,{children:"An ordered list of calls to other contracts, excluding precompiled contracts."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="trace example"',children:'"trace":[\n {\n "action":{\n "callType":"call",\n "from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas":"0xffadea",\n "input":"0x",\n "to":"0x0100000000000000000000000000000000000000",\n "value":"0x0"\n },\n "result":{\n "gasUsed":"0x1e",\n "output":"0x"\n },\n "subtraces":0,\n "traceAddress":[\n ],\n "type":"call"\n }\n]\n'})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Key"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"action"})}),(0,t.jsx)(n.td,{children:"Transaction details."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"callType"})}),(0,t.jsxs)(n.td,{children:["Whether the transaction is ",(0,t.jsx)(n.code,{children:"call"})," or ",(0,t.jsx)(n.code,{children:"create"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"from"})}),(0,t.jsx)(n.td,{children:"Address of the transaction sender."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"gas"})}),(0,t.jsx)(n.td,{children:"Gas provided by sender."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"input"})}),(0,t.jsx)(n.td,{children:"Transaction data."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"to"})}),(0,t.jsx)(n.td,{children:"Target of the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"value"})}),(0,t.jsx)(n.td,{children:"Value transferred in the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"result"})}),(0,t.jsx)(n.td,{children:"Transaction result."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"gasUsed"})}),(0,t.jsx)(n.td,{children:"Gas used by the transaction. Includes any refunds of unused gas."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"output"})}),(0,t.jsxs)(n.td,{children:["Return value of the contract call. Contains only the actual value sent by a ",(0,t.jsx)(n.code,{children:"RETURN"})," operation. If a ",(0,t.jsx)(n.code,{children:"RETURN"})," was not executed, the output is empty bytes."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"subTraces"})}),(0,t.jsx)(n.td,{children:"Traces of contract calls made by the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"traceAddress"})}),(0,t.jsx)(n.td,{children:"Tree list address of where the call occurred, address of the parents, and order of the current sub call."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"type"})}),(0,t.jsxs)(n.td,{children:["Whether the transaction is a ",(0,t.jsx)(n.code,{children:"CALL"})," or ",(0,t.jsx)(n.code,{children:"CREATE"})," series operation."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"vmtrace",children:(0,t.jsx)(n.code,{children:"vmTrace"})}),"\n",(0,t.jsx)(n.p,{children:"An ordered list of EVM actions when processing the transaction."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"vmTrace"})," only reports actual data returned from a ",(0,t.jsx)(n.code,{children:"RETURN"})," opcode and does not return the contents of the reserved output space for the call operations. As a result:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"vmTrace"})," reports ",(0,t.jsx)(n.code,{children:"null"})," when a call operation ends because of a ",(0,t.jsx)(n.code,{children:"STOP"}),", ",(0,t.jsx)(n.code,{children:"HALT"}),", ",(0,t.jsx)(n.code,{children:"REVERT"}),", running out of instructions, or any exceptional halts."]}),"\n",(0,t.jsxs)(n.li,{children:["When a ",(0,t.jsx)(n.code,{children:"RETURN"})," operation returns data of a different length to the space reserved by the call, ",(0,t.jsx)(n.code,{children:"vmTrace"})," reports only the data passed to the ",(0,t.jsx)(n.code,{children:"RETURN"})," operation and does not include pre-existing memory data or trim the returned data."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["For out of gas operations, ",(0,t.jsx)(n.code,{children:"vmTrace"})," reports the operation that caused the out of gas exception, including the calculated gas cost. ",(0,t.jsx)(n.code,{children:"vmTrace"})," does not report ",(0,t.jsx)(n.code,{children:"ex"})," values because the operation is not executed."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="vmTrace example"',children:'"vmTrace":{\n "code":"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851",\n "ops":[\n {\n "cost":3,\n "ex":{\n "mem":null,\n "push":[\n "0x8"\n ],\n "store":null,\n "used":16756175\n },\n "pc":72,\n "sub":null\n },\n ...\n ]\n}\n'})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Key"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"code"})}),(0,t.jsx)(n.td,{children:"Code executed by the EVM."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ops"})}),(0,t.jsx)(n.td,{children:"Sequence of EVM operations (opcodes) executed in the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"cost"})}),(0,t.jsx)(n.td,{children:"Gas cost of the opcode. Includes memory expansion costs but not gas refunds. For precompiled contract calls, reports only the actual cost."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ex"})}),(0,t.jsx)(n.td,{children:"Executed operations."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"mem"})}),(0,t.jsx)(n.td,{children:"Memory read or written by the operation."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"push"})}),(0,t.jsx)(n.td,{children:"Adjusted stack items. For swap, includes all intermediate values and the result. Otherwise, is the value pushed onto the stack."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"store"})}),(0,t.jsx)(n.td,{children:"Account storage written by the operation."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"used"})}),(0,t.jsx)(n.td,{children:"Remaining gas taking into account the all but 1/64th rule for calls."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"pc"})}),(0,t.jsx)(n.td,{children:"Program counter."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sub"})}),(0,t.jsx)(n.td,{children:"Sub call operations."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"statediff",children:(0,t.jsx)(n.code,{children:"stateDiff"})}),"\n",(0,t.jsxs)(n.p,{children:["State changes in the requested block for each transaction represented as a map of accounts to an object. Besu lists the balance, code, nonce, and storage changes from immediately before the transaction to after the transaction. For the ",(0,t.jsx)(n.code,{children:"key:value"})," pairs:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"+"})," indicates the field didn\u2019t exist before and now has the specified value"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"-"})," indicates a deleted value"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"*"})," has a ",(0,t.jsx)(n.code,{children:"from"})," and a ",(0,t.jsx)(n.code,{children:"to"})," value."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"An absent value is distinct from zero when creating accounts or clearing storage."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="stateDiff example"',children:'"stateDiff":{\n "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73":{\n "balance":{\n "*":{\n "from":"0xffffffffffffffffffffffffffffffffc3e12a20b",\n "to":"0xffffffffffffffffffffffffffffffffc3dc5f091"\n }\n },\n "code":"=",\n "nonce":{\n "*":{\n "from":"0x14",\n "to":"0x15"\n }\n },\n "storage":{\n }\n }\n}\n'})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Key"}),(0,t.jsx)(n.th,{children:"Value"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"balance"})}),(0,t.jsx)(n.td,{children:"Change of balance event."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"balance.from"})}),(0,t.jsx)(n.td,{children:"Balance before the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"balance.to"})}),(0,t.jsx)(n.td,{children:"Balance after the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"code"})}),(0,t.jsx)(n.td,{children:"Changes to code. None in this example."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"nonce"})}),(0,t.jsx)(n.td,{children:"Change of nonce."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"nonce.from"})}),(0,t.jsx)(n.td,{children:"Nonce before the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"nonce.to"})}),(0,t.jsx)(n.td,{children:"Nonce after the transaction."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"storage"})}),(0,t.jsx)(n.td,{children:"Changes to storage. None in this example."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"applicable-api-methods",children:"Applicable API methods"}),"\n",(0,t.jsxs)(n.p,{children:["The trace options ",(0,t.jsx)(n.code,{children:"trace"}),", ",(0,t.jsx)(n.code,{children:"vmTrace"}),", and ",(0,t.jsx)(n.code,{children:"stateDiff"})," are available for the following ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/trace-transactions#ad-hoc-tracing-apis",children:"ad-hoc tracing API methods"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_call",children:(0,t.jsx)(n.code,{children:"trace_call"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_callmany",children:(0,t.jsx)(n.code,{children:"trace_callMany"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_rawtransaction",children:(0,t.jsx)(n.code,{children:"trace_rawTransaction"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_replayblocktransactions",children:(0,t.jsx)(n.code,{children:"trace_replayBlockTransactions"})})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Only the ",(0,t.jsx)(n.code,{children:"trace"})," option is available for the following ",(0,t.jsx)(n.a,{href:"/public-networks/how-to/troubleshoot/trace-transactions#transaction-trace-filtering-apis",children:"transaction-trace filtering API methods"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_block",children:(0,t.jsx)(n.code,{children:"trace_block"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_filter",children:(0,t.jsx)(n.code,{children:"trace_filter"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_get",children:(0,t.jsx)(n.code,{children:"trace_get"})})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#trace_transaction",children:(0,t.jsx)(n.code,{children:"trace_transaction"})})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>d,x:()=>i});var t=r(96540);const c={},s=t.createContext(c);function d(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b7759d8d.db359485.js b/assets/js/b7759d8d.db359485.js new file mode 100644 index 00000000000..a1855b3f55a --- /dev/null +++ b/assets/js/b7759d8d.db359485.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1625],{76552:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=t(74848),r=t(28453);const o={title:"Deploy a Besu private network with Kubernetes",description:"Deploying Besu with Kubernetes",tags:["private networks"]},a="Deploy Besu using Kubernetes",i={id:"private-networks/tutorials/kubernetes/index",title:"Deploy a Besu private network with Kubernetes",description:"Deploying Besu with Kubernetes",source:"@site/docs/private-networks/tutorials/kubernetes/index.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/",permalink:"/private-networks/tutorials/kubernetes/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Deploy a Besu private network with Kubernetes",description:"Deploying Besu with Kubernetes",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Interact with a deployed contract",permalink:"/private-networks/tutorials/contracts/interact"},next:{title:"Local playground",permalink:"/private-networks/tutorials/kubernetes/playground"}},l={},c=[{value:"Quorum-Kubernetes",id:"quorum-kubernetes",level:2},{value:"Cloud support",id:"cloud-support",level:3},{value:"Limitations",id:"limitations",level:2},{value:"CNI",id:"cni",level:3},{value:"Multi-cluster",id:"multi-cluster",level:2},{value:"Concepts",id:"concepts",level:2},{value:"Namespaces",id:"namespaces",level:3},{value:"Nodes",id:"nodes",level:3},{value:"Role-based access controls",id:"role-based-access-controls",level:3},{value:"Storage",id:"storage",level:3},{value:"Monitoring",id:"monitoring",level:3},{value:"Ingress Controllers",id:"ingress-controllers",level:3}];function u(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"deploy-besu-using-kubernetes",children:"Deploy Besu using Kubernetes"})}),"\n",(0,n.jsxs)(s.p,{children:["Use the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/besu-kubernetes",children:"reference implementations"})," to install private networks using Kubernetes (K8s). Reference implementations are available using:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/helm",children:"Helm"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/roboll/helmfile",children:"Helmfile"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/besu-kubernetes/tree/master/playground/kubectl",children:(0,n.jsx)(s.code,{children:"kubectl"})}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Familiarize yourself with the reference implementations and customize them for your requirements."}),"\n",(0,n.jsx)(s.h2,{id:"quorum-kubernetes",children:"Quorum-Kubernetes"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-Kubernetes",children:"Quorum-Kubernetes"})," is a repository containing Kubernetes manifests and Helm charts that you can customize and deploy on a local cluster or in the cloud."]}),"\n",(0,n.jsx)(s.admonition,{type:"important",children:(0,n.jsxs)(s.p,{children:["We recommend starting with the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/playground",children:"playground"})," directory and working through the example setups before moving to the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/helm/",children:(0,n.jsx)(s.code,{children:"Helm charts"})})," directory."]})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"helm"})," directory contains charts for the various components, and each chart has a ",(0,n.jsx)(s.code,{children:"cluster"})," map with features that you can toggle."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cluster:\n provider: local # choose from: local | aws | azure\n cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure)\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Setting ",(0,n.jsx)(s.code,{children:"cluster.cloudNativeServices: true"})," stores keys in AWS Secrets Manager or Azure Key Vault instead of Kubernetes Secrets, and will also make use of AWS IAM or Azure Managed Identities for the pods."]}),"\n",(0,n.jsx)(s.h3,{id:"cloud-support",children:"Cloud support"}),"\n",(0,n.jsxs)(s.p,{children:["The repository's ",(0,n.jsx)(s.code,{children:"helm"})," charts support on-premise and cloud providers such as AWS, Azure, GCP, IBM etc. You can configure the provider in the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/genesis-besu.yml",children:"values.yml"})," file of the respective charts by setting ",(0,n.jsx)(s.code,{children:"cluster.provider"})," to ",(0,n.jsx)(s.code,{children:"local"}),", ",(0,n.jsx)(s.code,{children:"aws"}),", or ",(0,n.jsx)(s.code,{children:"azure"}),". If you use GCP, IBM etc., please set ",(0,n.jsx)(s.code,{children:"cluster.provider: local"})," and ",(0,n.jsx)(s.code,{children:"cluster.cloudNativeServices: false"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The repository also contains ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/azure",children:"Azure ARM templates"})," and ",(0,n.jsxs)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/aws",children:["AWS ",(0,n.jsx)(s.code,{children:"eksctl"})," templates"]})," to deploy the required base infrastructure."]}),"\n",(0,n.jsx)(s.h2,{id:"limitations",children:"Limitations"}),"\n",(0,n.jsx)(s.p,{children:"When using multi-clusters, Kubernetes load balancers disallow TCP and UDP traffic on the same port, which inhibits discovery working natively for each pod. Use the following solutions to mitigate this limitation:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Disallow discovery and use static nodes to allow only TCP traffic. This isn't an issue for load balancers or exposing nodes publicly."}),"\n",(0,n.jsxs)(s.li,{children:["If you need to use discovery, use something such as ",(0,n.jsx)(s.a,{href:"#cni",children:"CNI"})," which is supported by all major cloud providers, and the cloud templates already have CNI implemented."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"cni",children:"CNI"}),"\n",(0,n.jsxs)(s.p,{children:["With the traditional ",(0,n.jsx)(s.code,{children:"kubenet"})," networking mode, nodes get an IP from the virtual network subnet. Each node in turn uses NAT to configure the pods so that they reach other pods on the virtual network. This limits where they can reach but also more specifically what can reach them. For example, an external VM which must have custom routes does not scale well."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"without-CNI",src:t(45934).A+"",width:"956",height:"412"})}),"\n",(0,n.jsx)(s.p,{children:"CNI, on the other hand, allows every pod to get a unique IP directly from the virtual subnet which removes this restriction. Therefore, it has a limit on the maximum number of pods that can be spun up, so you must plan ahead to avoid IP exhaustion."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"with-CNI",src:t(59227).A+"",width:"957",height:"404"})}),"\n",(0,n.jsx)(s.h2,{id:"multi-cluster",children:"Multi-cluster"}),"\n",(0,n.jsxs)(s.p,{children:["You must enable ",(0,n.jsx)(s.a,{href:"#cni",children:"CNI"})," to use multi-cluster, or to connect external nodes to an existing Kubernetes cluster. To connect multiple clusters, they must each have different CIDR blocks to ensure no conflicts, and the first step is to peer the VPCs or VNets together and update the route tables. From that point on you can use static nodes and pods to communicate across the cluster."]}),"\n",(0,n.jsx)(s.p,{children:"The same setup also works to connect external nodes and business applications from other infrastructure, either in the cloud or on premise."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"multi-cluster",src:t(19395).A+"",width:"1151",height:"591"})}),"\n",(0,n.jsx)(s.h2,{id:"concepts",children:"Concepts"}),"\n",(0,n.jsx)(s.h3,{id:"namespaces",children:"Namespaces"}),"\n",(0,n.jsxs)(s.p,{children:["In Kubernetes, ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",children:"namespaces"})," provide a mechanism for isolating groups of resources within a single cluster. Both namespaces and resources (for example, Stateful Sets or Services) within a namespace must be unique, but resources across namespaces don't need to be."]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsx)(s.p,{children:"Namespace-based scoping is not applicable for cluster-wide objects (for example, Storage Class or Persistent Volumes)."})}),"\n",(0,n.jsx)(s.h3,{id:"nodes",children:"Nodes"}),"\n",(0,n.jsx)(s.p,{children:"Consider using Stateful Sets instead of Deployments for Besu. The term 'client node' refers to bootnode, validator and member/RPC nodes. For Besu nodes, we only use CLI arguments to keep things consistent."}),"\n",(0,n.jsx)(s.h3,{id:"role-based-access-controls",children:"Role-based access controls"}),"\n",(0,n.jsx)(s.p,{children:"We encourage using role-based access controls (RBACs) for access to the private key of each node, that is, only a specific pod or statefulset is allowed to access a specific secret."}),"\n",(0,n.jsxs)(s.p,{children:["If you need to specify a Kube configuration file for each pod, use the ",(0,n.jsx)(s.code,{children:"KUBE_CONFIG_PATH"})," variable."]}),"\n",(0,n.jsx)(s.h3,{id:"storage",children:"Storage"}),"\n",(0,n.jsx)(s.p,{children:"We use separate data volumes to store the blockchain data. This is similar to using separate volumes to store data when using docker containers natively or docker-compose. This is done for a few reasons:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Containers are mortal and we do not want to store data on them."}),"\n",(0,n.jsx)(s.li,{children:"Kubernetes host nodes can fail and we want the chain data to persist."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Ensure that you provide enough data storage capacity for all nodes on the cluster. Select the appropriate type of ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/storage/storage-classes/",children:"Storage Class"})," based on your cloud provider. In the templates, the size of the ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims",children:"volume claims"})," is set to 20Gb by default; you can change this depending on your needs. If you have a different storage account than the one in the charts, you may edit those ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/charts/besu-node/templates/node-storage.yaml",children:"Storage Classes"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["When using Persistent Volume Claims, set the ",(0,n.jsx)(s.code,{children:"allowVolumeExpansion"})," to ",(0,n.jsx)(s.code,{children:"true"}),". This helps keep costs low and enables growing the volume over time rather than creating new volumes and copying data across."]}),"\n",(0,n.jsx)(s.h3,{id:"monitoring",children:"Monitoring"}),"\n",(0,n.jsx)(s.p,{children:"We recommend deploying metrics to get an overview of the network, nodes, and volumes. You can also create alerts."}),"\n",(0,n.jsx)(s.p,{children:"Besu publishes metrics to Prometheus, and you can configure metrics using the kubernetes scraper configuration. We also have custom Grafana dashboards to monitor the blockchain."}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Refer to ",(0,n.jsx)(s.code,{children:"values/monitoring.yml"})," to configure the alerts per your requirements (for example slack or email)."]})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cd helm\nhelm repo add prometheus-community https://prometheus-community.github.io/helm-charts\nhelm repo update\nhelm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --create-namespace --values ./values/monitoring.yml --wait\nkubectl --namespace besu apply -f ./values/monitoring/\n"})}),"\n",(0,n.jsx)(s.p,{children:"You can configure Besu to suit your environment. For example, use the Elastic charts to log to a file that you can parse using Logstash into an ELK cluster."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"cd helm\nhelm repo add elastic https://helm.elastic.co\nhelm repo update\n# if on cloud\nhelm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml\n# if local - set the replicas to 1\nhelm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1\nhelm install kibana --version 7.17.1 elastic/kibana --namespace besu --values ./values/kibana.yml\nhelm install filebeat --version 7.17.1 elastic/filebeat --namespace besu --values ./values/filebeat.yml\n"})}),"\n",(0,n.jsx)(s.h3,{id:"ingress-controllers",children:"Ingress Controllers"}),"\n",(0,n.jsxs)(s.p,{children:["If you require the ingress controllers for the RPC calls or the monitoring dashboards, we have provided example ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/ingress/ingress-rules-besu.yml",children:"rules"})," that are pre-configured for common use cases. Use these as a reference and develop solutions to match your network topology and requirements."]})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},45934:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/kubernetes-1-d999da470021bd1aba37a76fd868e18f.jpeg"},59227:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/kubernetes-2-4503dd0ffbb4151254fcf515a0e5fbd2.jpeg"},19395:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/kubernetes-3-eb071f2ad027b1e11e96e3c4f68a745a.png"},28453:(e,s,t)=>{t.d(s,{R:()=>a,x:()=>i});var n=t(96540);const r={},o=n.createContext(r);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbdbb161.99f8c8f5.js b/assets/js/bbdbb161.99f8c8f5.js new file mode 100644 index 00000000000..f005f05d317 --- /dev/null +++ b/assets/js/bbdbb161.99f8c8f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8521],{95129:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>a});var t=n(74848),s=n(28453);const i={description:"private networks reference overview",tags:["private networks"]},c="Reference",o={id:"private-networks/reference/index",title:"Reference",description:"private networks reference overview",source:"@site/docs/private-networks/reference/index.md",sourceDirName:"private-networks/reference",slug:"/private-networks/reference/",permalink:"/private-networks/reference/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"private networks reference overview",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Deploy using Microsoft Azure",permalink:"/private-networks/tutorials/azure"},next:{title:"Private network options",permalink:"/private-networks/reference/cli/options"}},l={},a=[];function d(e){const r={a:"a",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"reference",children:"Reference"})}),"\n",(0,t.jsx)(r.p,{children:"This section provides reference material for private network features."}),"\n",(0,t.jsxs)(r.p,{children:["The following features and resources are shared with ",(0,t.jsx)(r.a,{href:"/public-networks/",children:"public networks"})," and the content can be found in the public networks section:"]}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["Besu command line:","\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/options",children:"Standard options"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/subcommands",children:"Standard subcommands"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(r.li,{children:["Besu API:","\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/api/",children:"Standard Besu API methods"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/api/objects",children:"Standard Besu API objects"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/genesis-items",children:"Genesis file items"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/evm-tool",children:"EVM tool options"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/trace-types",children:"Transaction trace types"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/projects-using-besu",children:"Projects using Besu"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"/public-networks/reference/disclosure",children:"Security disclosure policy"})}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>c,x:()=>o});var t=n(96540);const s={},i=t.createContext(s);function c(e){const r=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bc60af12.60d23579.js b/assets/js/bc60af12.60d23579.js new file mode 100644 index 00000000000..cf985b73c0f --- /dev/null +++ b/assets/js/bc60af12.60d23579.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9084],{29827:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var o=n(74848),r=n(28453);const c={title:"Connect to a network overview",tags:["public networks"],hide:["feedback"]},s="Connect to a network",i={id:"public-networks/get-started/connect/index",title:"Connect to a network overview",description:"This section provides information on connecting Besu to a public Ethereum network.",source:"@site/docs/public-networks/get-started/connect/index.md",sourceDirName:"public-networks/get-started/connect",slug:"/public-networks/get-started/connect/",permalink:"/public-networks/get-started/connect/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/connect/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Connect to a network overview",tags:["public networks"],hide:["feedback"]},sidebar:"publicDocSidebar",previous:{title:"Start Besu",permalink:"/public-networks/get-started/start-node"},next:{title:"Sync Besu",permalink:"/public-networks/get-started/connect/sync-node"}},a={},d=[];function u(e){const t={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"connect-to-a-network",children:"Connect to a network"})}),"\n",(0,o.jsx)(t.p,{children:"This section provides information on connecting Besu to a public Ethereum network."})]})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(96540);const r={},c=o.createContext(r);function s(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bc69a950.d52a0855.js b/assets/js/bc69a950.d52a0855.js new file mode 100644 index 00000000000..513afa04067 --- /dev/null +++ b/assets/js/bc69a950.d52a0855.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7044],{74198:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var r=t(74848),s=t(28453),i=t(11470),o=t(19365);const a={title:"Use metrics",sidebar_position:1,description:"Monitoring and metrics",tags:["public networks","private networks"]},l="Use metrics to monitor node performance",c={id:"public-networks/how-to/monitor/metrics",title:"Use metrics",description:"Monitoring and metrics",source:"@site/docs/public-networks/how-to/monitor/metrics.md",sourceDirName:"public-networks/how-to/monitor",slug:"/public-networks/how-to/monitor/metrics",permalink:"/public-networks/how-to/monitor/metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/monitor/metrics.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use metrics",sidebar_position:1,description:"Monitoring and metrics",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Monitor Besu",permalink:"/public-networks/how-to/monitor/"},next:{title:"Understand metrics",permalink:"/public-networks/how-to/monitor/understand-metrics"}},h={},u=[{value:"Install Prometheus",id:"install-prometheus",level:2},{value:"Set up and run Prometheus with Besu",id:"set-up-and-run-prometheus-with-besu",level:2},{value:"Run Prometheus with Besu in push mode",id:"run-prometheus-with-besu-in-push-mode",level:2},{value:"View Prometheus graphical interface",id:"view-prometheus-graphical-interface",level:2},{value:"View the metrics list",id:"view-the-metrics-list",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"use-metrics-to-monitor-node-performance",children:"Use metrics to monitor node performance"})}),"\n",(0,r.jsxs)(n.p,{children:["To enable the ",(0,r.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})," monitoring and alerting service to access Besu metrics, use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-enabled",children:(0,r.jsx)(n.code,{children:"--metrics-enabled"})})," option. Use ",(0,r.jsx)(n.a,{href:"https://grafana.com/",children:"Grafana"})," to visualize the collected data. See the sample ",(0,r.jsx)(n.a,{href:"https://grafana.com/grafana/dashboards/16455-besu-full/",children:"Besu Full Grafana dashboard"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The Besu example networks have ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/quickstart#monitor-nodes-with-prometheus-and-grafana",children:"monitoring with Prometheus and Grafana configured"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Use Prometheus to monitor the number of blocks your Besu node is behind the chain head, and to alert you that your node is not keeping up with the chain head."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7BuutRe0I28&feature=youtu.be",children:"This recording"})," shows examples of monitoring Besu."]}),"\n",(0,r.jsx)(n.h2,{id:"install-prometheus",children:"Install Prometheus"}),"\n",(0,r.jsxs)(n.p,{children:["To use Prometheus with Besu, install the ",(0,r.jsx)(n.a,{href:"https://prometheus.io/download/",children:"Prometheus main component"}),". On MacOS, install with ",(0,r.jsx)(n.a,{href:"https://formulae.brew.sh/formula/prometheus",children:"Homebrew"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"brew install prometheus\n"})}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"You can also install:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Exporters that send system metrics to Prometheus to monitor non-Besu-specific items such as disk and CPU usage."}),"\n",(0,r.jsx)(n.li,{children:"Other Prometheus components, such as the Alert Manager. Additional configuration is not required for these components because Prometheus handles and analyzes data directly from the feed."}),"\n"]})]}),"\n",(0,r.jsx)(n.h2,{id:"set-up-and-run-prometheus-with-besu",children:"Set up and run Prometheus with Besu"}),"\n",(0,r.jsx)(n.p,{children:"To configure Prometheus and run with Besu:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Configure Prometheus to poll Besu.\nFor example, add the following YAML fragment to the ",(0,r.jsx)(n.code,{children:"scrape_configs"})," block of the ",(0,r.jsx)(n.code,{children:"prometheus.yml"})," file:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Fragment to insert in prometheus.yml",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",children:"- job_name: besu\n scrape_interval: 15s\n scrape_timeout: 10s\n metrics_path: /metrics\n scheme: http\n static_configs:\n - targets:\n - localhost:9545\n"})})}),(0,r.jsx)(o.A,{value:"Full prometheus.yml example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",children:'global:\n scrape_interval: 15s\n\nscrape_configs:\n - job_name: "prometheus"\n static_configs:\n - targets: ["localhost:9090"]\n - job_name: besu\n scrape_interval: 15s\n scrape_timeout: 10s\n metrics_path: /metrics\n scheme: http\n static_configs:\n - targets:\n - localhost:9545\n'})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Prometheus requires 3 MB of space per node per hour for metrics, with a ",(0,r.jsx)(n.code,{children:"scrape_interval"})," of 15 seconds."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Start Besu with the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-enabled",children:(0,r.jsx)(n.code,{children:"--metrics-enabled"})})," option.\nTo start a single node for testing with metrics enabled, run the following command:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Syntax",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase <COINBASE ADDRESS> --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-enabled\n'})})}),(0,r.jsx)(o.A,{value:"Example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-enabled\n'})})})]}),"\n",(0,r.jsxs)(n.p,{children:["To specify the host and port on which Prometheus accesses Besu, use the\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-host",children:(0,r.jsx)(n.code,{children:"--metrics-host"})})," and\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-port",children:(0,r.jsx)(n.code,{children:"--metrics-port"})})," options.\nThe default host and port are ",(0,r.jsx)(n.code,{children:"127.0.0.1"})," (",(0,r.jsx)(n.code,{children:"localhost"}),") and ",(0,r.jsx)(n.code,{children:"9545"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsxs)(n.p,{children:["To avoid DNS rebinding attacks, if running Prometheus on a different host than your Besu node\n(any host other than ",(0,r.jsx)(n.code,{children:"localhost"}),"), add the hostname that Prometheus uses to\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(n.code,{children:"--host-allowlist"})}),".\nFor example, if Prometheus is configured to get metrics from ",(0,r.jsx)(n.code,{children:"http://besu.local:8008/metrics"}),",\nthen ",(0,r.jsx)(n.code,{children:"besu.local"})," must be in ",(0,r.jsx)(n.code,{children:"--host-allowlist"}),"."]})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In another terminal, run Prometheus specifying the ",(0,r.jsx)(n.code,{children:"prometheus.yml"})," file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"prometheus --config.file=prometheus.yml\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["View the ",(0,r.jsx)(n.a,{href:"#view-prometheus-graphical-interface",children:"Prometheus graphical interface"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Use a log ingestion tool, such as Logstash, to parse the logs and alert you to configured anomalies."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"run-prometheus-with-besu-in-push-mode",children:"Run Prometheus with Besu in push mode"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-enabled",children:(0,r.jsx)(n.code,{children:"--metrics-enabled"})})," option enables Prometheus\npolling of Besu, but sometimes metrics are hard to poll (for example, when running inside Docker\ncontainers with varying IP addresses).\nTo enable Besu to push metrics to a ",(0,r.jsx)(n.a,{href:"https://github.com/prometheus/pushgateway",children:"Prometheus push gateway"}),",\nuse the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-push-enabled",children:(0,r.jsx)(n.code,{children:"--metrics-push-enabled"})})," option."]}),"\n",(0,r.jsx)(n.p,{children:"To configure Prometheus and run with Besu pushing to a push gateway:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Configure Prometheus to read from a push gateway.\nFor example, add the following YAML fragment to the ",(0,r.jsx)(n.code,{children:"scrape_configs"})," block of the ",(0,r.jsx)(n.code,{children:"prometheus.yml"})," file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yml",children:"- job_name: push-gateway\n metrics_path: /metrics\n scheme: http\n static_configs:\n - targets:\n - localhost:9091\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Start the push gateway.\nYou can deploy the push gateway using the Docker image:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker pull prom/pushgateway\ndocker run -d -p 9091:9091 prom/pushgateway\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Start Besu specifying the ",(0,r.jsx)(n.code,{children:"--metrics-push-enabled"})," option and port of the push gateway:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Syntax",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase <COINBASE ADDRESS> --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1\n'})})}),(0,r.jsx)(o.A,{value:"Example",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1\n'})})})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In another terminal, run Prometheus specifying the ",(0,r.jsx)(n.code,{children:"prometheus.yml"})," file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"prometheus --config.file=prometheus.yml\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["View the ",(0,r.jsx)(n.a,{href:"#view-prometheus-graphical-interface",children:"Prometheus graphical interface"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"view-prometheus-graphical-interface",children:"View Prometheus graphical interface"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open a Web browser to ",(0,r.jsx)(n.a,{href:"http://localhost:9090",children:(0,r.jsx)(n.code,{children:"http://localhost:9090"})})," to view the Prometheus graphical interface."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Choose ",(0,r.jsx)(n.strong,{children:"Graph"})," from the menu bar and click the ",(0,r.jsx)(n.strong,{children:"Console"})," tab below."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["From the ",(0,r.jsx)(n.strong,{children:"Insert metric at cursor"})," drop-down, select a ",(0,r.jsx)(n.a,{href:"#metrics-list",children:"metric"})," such as ",(0,r.jsx)(n.code,{children:"besu_blockchain_difficulty_total"})," or ",(0,r.jsx)(n.code,{children:"ethereum_blockchain_height"})," and click ",(0,r.jsx)(n.strong,{children:"Execute"}),". The values display."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click the ",(0,r.jsx)(n.strong,{children:"Graph"})," tab to view the data as a time-based graph. The query string displays below the graph. For example, ",(0,r.jsx)(n.code,{children:'{ethereum_blockchain_height{instance="localhost:9545",job="prometheus"}'}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"view-the-metrics-list",children:"View the metrics list"}),"\n",(0,r.jsx)(n.p,{children:"Run the following command to view the full list of available metrics:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"curl http://localhost:9545/metrics\n"})}),"\n",(0,r.jsx)(n.p,{children:"Update the host and port if you are not using the default values."}),"\n",(0,r.jsxs)(n.p,{children:["Each metric, such as ",(0,r.jsx)(n.code,{children:"besu_blockchain_chain_head_gas_limit"}),", starts with a metric category prefix.\nMetrics specific to Besu use the ",(0,r.jsx)(n.code,{children:"besu_"})," prefix, followed by another metric category.\nYou can enable metric categories using the\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#metrics-category",children:(0,r.jsx)(n.code,{children:"--metrics-category"})})," command line option."]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var i=t(74848);function o(e){let{children:n,hidden:t,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,o),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>y});var r=t(96540),s=t(18215),i=t(23104),o=t(56347),a=t(205),l=t(57485),c=t(31682),h=t(70679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function d(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:r,default:s}}=e;return{value:n,label:t,attributes:r,default:s}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:t}=e;const s=(0,o.W6)(),i=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(s.location.search);n.set(i,e),s.replace({...s.location,search:n.toString()})}),[i,s])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=d(e),[o,l]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=t.find((e=>e.default))??t[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[c,u]=m({queryString:t,groupId:s}),[b,f]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,i]=(0,h.Dv)(t);return[s,(0,r.useCallback)((e=>{t&&i.set(e)}),[t,i])]}({groupId:s}),x=(()=>{const e=c??b;return p({value:e,tabValues:i})?e:null})();(0,a.A)((()=>{x&&l(x)}),[x]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,i]),tabValues:i}}var f=t(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=t(74848);function j(e){let{className:n,block:t,selectedValue:r,selectValue:o,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.a_)(),h=e=>{const n=e.currentTarget,t=l.indexOf(n),s=a[t].value;s!==r&&(c(n),o(s))},u=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:u,onClick:h,...i,className:(0,s.A)("tabs__item",x.tabItem,i?.className,{"tabs__item--active":r===n}),children:t??n},n)}))})}function w(e){let{lazy:n,children:t,selectedValue:i}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function v(e){const n=b(e);return(0,g.jsxs)("div",{className:(0,s.A)("tabs-container",x.tabList),children:[(0,g.jsx)(j,{...n,...e}),(0,g.jsx)(w,{...n,...e})]})}function y(e){const n=(0,f.A)();return(0,g.jsx)(v,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(96540);const s={},i=r.createContext(s);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd3642f6.1f7a447c.js b/assets/js/bd3642f6.1f7a447c.js new file mode 100644 index 00000000000..5565b557169 --- /dev/null +++ b/assets/js/bd3642f6.1f7a447c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2868],{1634:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var s=t(74848),r=t(28453);const i={title:"Privacy",sidebar_position:1,description:"Privacy"},a="Privacy",o={id:"private-networks/concepts/privacy/index",title:"Privacy",description:"Privacy",source:"@site/docs/private-networks/concepts/privacy/index.md",sourceDirName:"private-networks/concepts/privacy",slug:"/private-networks/concepts/privacy/",permalink:"/private-networks/concepts/privacy/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/index.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Privacy",sidebar_position:1,description:"Privacy"},sidebar:"privateDocSidebar",previous:{title:"Proof of authority consensus",permalink:"/private-networks/concepts/poa"},next:{title:"Private transactions",permalink:"/private-networks/concepts/privacy/private-transactions/"}},c={},p=[{value:"Private transaction manager",id:"private-transaction-manager",level:2},{value:"Privacy-enabled networks",id:"privacy-enabled-networks",level:2},{value:"Reorg-compatible privacy",id:"reorg-compatible-privacy",level:2}];function d(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"privacy",children:"Privacy"})}),"\n",(0,s.jsx)(n.p,{children:"In Besu, privacy refers to the ability to keep transactions private between the involved participants. Other participants cannot access the transaction content or list of participants."}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsx)(n.p,{children:"For production environments requiring private transactions:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["We recommend using a network with a consensus mechanism supporting transaction finality. For example, ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Tessera must be ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/tessera",children:"highly available and run in a separate instance to Besu"}),"."]}),"\n"]}),(0,s.jsxs)(n.p,{children:["Using private transactions with ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#pruning",children:"pruning"})," or ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"fast sync"})," isn't supported."]})]}),"\n",(0,s.jsx)(n.h2,{id:"private-transaction-manager",children:"Private transaction manager"}),"\n",(0,s.jsxs)(n.p,{children:["Besu uses a private transaction manager, ",(0,s.jsx)(n.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"}),", to implement privacy. Each Besu node that sends or receives ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:"private transactions"})," requires an associated Tessera node."]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Tessera Nodes",src:t(40785).A+"",width:"731",height:"807"})})}),"\n",(0,s.jsx)(n.p,{children:"Private transactions pass from the Besu node to the associated Tessera node. The Tessera node encrypts and directly distributes (that is, point-to-point) the private transaction to the Tessera nodes participating in the transaction."}),"\n",(0,s.jsxs)(n.p,{children:["By default, each participant in a privacy-enabled network uses its own Besu and Tessera node. ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"Multi-tenancy"})," allows more than one participant to use the same Besu and Tessera node."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"Private Transaction Managers are also known as Enclaves."})}),"\n",(0,s.jsx)(n.h2,{id:"privacy-enabled-networks",children:"Privacy-enabled networks"}),"\n",(0,s.jsxs)(n.p,{children:["When enabling privacy in a ",(0,s.jsx)(n.a,{href:"/private-networks/get-started/system-requirements",children:"private network"}),", there's an assumed level of trust among the node operators, since all are members of the private network."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks because gas isn't required in private transactions."})}),"\n",(0,s.jsx)(n.p,{children:"In contrast, gas is required in Ethereum Mainnet and public testnets because they are trustless environments."}),"\n",(0,s.jsx)(n.p,{children:"Privacy-enabled networks should have a mechanism to establish trust offchain. Node operators should be informed on:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Guidelines for use, responsibilities, and good behavior."}),"\n",(0,s.jsx)(n.li,{children:"Smart contract security, so contracts deployed on the network use resources efficiently."}),"\n",(0,s.jsx)(n.li,{children:"Consequences for malicious activity."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Privacy-enabled networks should run development and test environments that closely resemble production, so contracts can be tested, and potential issues can be found before they're deployed in production."}),"\n",(0,s.jsx)(n.h2,{id:"reorg-compatible-privacy",children:"Reorg-compatible privacy"}),"\n",(0,s.jsx)(n.p,{children:"In v1.4, using private transactions in a network using a consensus mechanism where forks occur (that is, PoW algorithms or Clique) is an early access feature."}),"\n",(0,s.jsx)(n.p,{children:"Do not use private transactions in production environments using consensus mechanisms where forks occur."})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},40785:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/TesseraNodes-ea2944d12c284fc0bad69e7c3f898817.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var s=t(96540);const r={},i=s.createContext(r);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd4880eb.01b716ea.js b/assets/js/bd4880eb.01b716ea.js new file mode 100644 index 00000000000..2486b199c52 --- /dev/null +++ b/assets/js/bd4880eb.01b716ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1572],{43573:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(74848),a=n(28453);const s={title:"Interact with a deployed contract",sidebar_position:2,description:"calling smart contracts functions",tags:["private networks"]},o="Interact with deployed smart contracts",c={id:"private-networks/tutorials/contracts/interact",title:"Interact with a deployed contract",description:"calling smart contracts functions",source:"@site/docs/private-networks/tutorials/contracts/interact.md",sourceDirName:"private-networks/tutorials/contracts",slug:"/private-networks/tutorials/contracts/interact",permalink:"/private-networks/tutorials/contracts/interact",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/contracts/interact.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Interact with a deployed contract",sidebar_position:2,description:"calling smart contracts functions",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Transfer account funds",permalink:"/private-networks/tutorials/contracts/transfer-funds"},next:{title:"Deploy a Besu private network with Kubernetes",permalink:"/private-networks/tutorials/kubernetes/"}},i={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Interact with public contracts",id:"interact-with-public-contracts",level:2},{value:"1. Perform a read operation",id:"1-perform-a-read-operation",level:3},{value:"2. Perform a write operation",id:"2-perform-a-write-operation",level:3},{value:"3. Verify an updated value",id:"3-verify-an-updated-value",level:3},{value:"Interact with private contracts",id:"interact-with-private-contracts",level:2},{value:"1. Perform a read operation",id:"1-perform-a-read-operation-1",level:3},{value:"2. Perform a write operation",id:"2-perform-a-write-operation-1",level:3},{value:"3. Verify an updated value",id:"3-verify-an-updated-value-1",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"interact-with-deployed-smart-contracts",children:"Interact with deployed smart contracts"})}),"\n",(0,r.jsxs)(t.p,{children:["You can get started with the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"})," to rapidly generate local blockchain networks."]}),"\n",(0,r.jsx)(t.p,{children:"This tutorial shows you how to interact with smart contracts that have been deployed to a network."}),"\n",(0,r.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["A network with a deployed smart contract as in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/contracts/",children:"deploying smart contracts tutorial"})]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"interact-with-public-contracts",children:"Interact with public contracts"}),"\n",(0,r.jsxs)(t.p,{children:["This tutorial uses the ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/common/smart_contracts/privacy/contracts/SimpleStorage.sol",children:(0,r.jsx)(t.code,{children:"SimpleStorage.sol"})})," contract:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:"pragma solidity ^0.7.0;\n\ncontract SimpleStorage {\n uint public storedData;\n\n constructor(uint initVal) public {\n storedData = initVal;\n }\n\n function set(uint x) public {\n storedData = x;\n }\n\n function get() view public returns (uint retVal) {\n return storedData;\n }\n}\n"})}),"\n",(0,r.jsxs)(t.p,{children:["Once the contract is deployed, you can perform a read operation using the ",(0,r.jsx)(t.code,{children:"get"})," function call and a write operation using the ",(0,r.jsx)(t.code,{children:"set"})," function call. This tutorial uses the ",(0,r.jsx)(t.a,{href:"https://www.npmjs.com/package/web3",children:"web3js"})," library to interact with the contract. A ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/public_tx.js",children:"full example"})," of these calls can be found in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"1-perform-a-read-operation",children:"1. Perform a read operation"}),"\n",(0,r.jsxs)(t.p,{children:["To perform a read operation, you need the address that the contract was deployed to and the contract's ABI. The contract's ABI can be obtained from compiling the contract; see the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/contracts/",children:"deploying smart contracts tutorial"})," for an example."]}),"\n",(0,r.jsxs)(t.p,{children:["Use the ",(0,r.jsx)(t.a,{href:"https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html",children:(0,r.jsx)(t.code,{children:"web3.eth.Contract"})})," object to create a new instance of the smart contract, then make the ",(0,r.jsx)(t.code,{children:"get"})," function call from the contract's list of methods, which will return the value stored:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'async function getValueAtAddress(\n host,\n deployedContractAbi,\n deployedContractAddress,\n) {\n const web3 = new Web3(host);\n const contractInstance = new web3.eth.Contract(\n deployedContractAbi,\n deployedContractAddress,\n );\n const res = await contractInstance.methods.get().call();\n console.log("Obtained value at deployed contract is: " + res);\n return res;\n}\n'})}),"\n",(0,r.jsx)(t.h3,{id:"2-perform-a-write-operation",children:"2. Perform a write operation"}),"\n",(0,r.jsxs)(t.p,{children:["To perform a write operation, send a transaction to update the stored value. As with the ",(0,r.jsxs)(t.a,{href:"#1-perform-a-read-operation",children:[(0,r.jsx)(t.code,{children:"get"})," call"]}),", you need to use the address that the contract was deployed to and the contract's ABI. The account address must correspond to an actual account with some ETH in it to perform the transaction. Because Besu doesn't manage accounts, this address is the address you use in ",(0,r.jsx)(t.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," (or equivalent) to manage your accounts."]}),"\n",(0,r.jsxs)(t.p,{children:["Make the ",(0,r.jsx)(t.code,{children:"set"})," call passing in your account address, ",(0,r.jsx)(t.code,{children:"value"})," as the updated value of the contract, and the amount of gas you are willing to spend for the transaction:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'// You need to use the accountAddress details provided to Besu to send/interact with contracts\nasync function setValueAtAddress(\n host,\n accountAddress,\n value,\n deployedContractAbi,\n deployedContractAddress,\n) {\n const web3 = new Web3(host);\n const contractInstance = new web3.eth.Contract(\n deployedContractAbi,\n deployedContractAddress,\n );\n const res = await contractInstance.methods\n .set(value)\n .send({ from: accountAddress, gasPrice: "0xFF", gasLimit: "0x24A22" });\n return res;\n}\n'})}),"\n",(0,r.jsx)(t.h3,{id:"3-verify-an-updated-value",children:"3. Verify an updated value"}),"\n",(0,r.jsxs)(t.p,{children:["To verify that a value has been updated, perform a ",(0,r.jsx)(t.code,{children:"get"})," call after a ",(0,r.jsx)(t.code,{children:"set"})," update call."]}),"\n",(0,r.jsx)(t.h2,{id:"interact-with-private-contracts",children:"Interact with private contracts"}),"\n",(0,r.jsxs)(t.p,{children:["This private contracts example uses the same ",(0,r.jsx)(t.code,{children:"SimpleStorage.sol"})," contract as in the ",(0,r.jsx)(t.a,{href:"#interact-with-public-contracts",children:"public contracts example"}),", but it uses the ",(0,r.jsx)(t.a,{href:"https://consensys.github.io/web3js-quorum/latest/index.html",children:"web3js-quorum"})," library and the ",(0,r.jsx)(t.a,{href:"https://consensys.github.io/web3js-quorum/latest/module-priv.html#~generateAndSendRawTransaction",children:(0,r.jsx)(t.code,{children:"generateAndSendRawTransaction"})})," method to interact with the contract. Both read and write operations are performed using the ",(0,r.jsx)(t.code,{children:"generateAndSendRawTransaction"})," API call. A ",(0,r.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/private_tx.js",children:"full example"})," can be found in the ",(0,r.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"1-perform-a-read-operation-1",children:"1. Perform a read operation"}),"\n",(0,r.jsx)(t.p,{children:"As in the public contracts example, to perform a read operation, you need the address that the contract was deployed to and the contract's ABI. You also need your private and public keys and the recipient's public key."}),"\n",(0,r.jsxs)(t.p,{children:["Use the ",(0,r.jsx)(t.a,{href:"https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html",children:(0,r.jsx)(t.code,{children:"web3.eth.Contract"})})," object to create a new instance of the smart contract, extract the signature of function's ABI for the ",(0,r.jsx)(t.code,{children:"get"})," method, and then use this value as the ",(0,r.jsx)(t.code,{children:"data"})," parameter for the ",(0,r.jsx)(t.code,{children:"generateAndSendRawTransaction"})," transaction."]}),"\n",(0,r.jsxs)(t.p,{children:["The keys remain the same for the sender and recipient, and the ",(0,r.jsx)(t.code,{children:"to"})," field is the contract's address. Once you make the request, you receive a ",(0,r.jsx)(t.code,{children:"transactionHash"}),", which you can use to get a ",(0,r.jsx)(t.code,{children:"transactionReceipt"})," containing the value stored:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'async function getValueAtAddress(\n clientUrl,\n address,\n contractAbi,\n fromPrivateKey,\n fromPublicKey,\n toPublicKey,\n) {\n const Web3 = require("web3");\n const Web3Quorum = require("web3js-quorum");\n const web3 = new Web3Quorum(new Web3("http://localhost:22000"));\n // eslint-disable-next-line no-underscore-dangle\n const functionAbi = contract._jsonInterface.find((e) => {\n return e.name === "get";\n });\n const functionParams = {\n to: address,\n data: functionAbi.signature,\n privateKey: fromPrivateKey,\n privateFrom: fromPublicKey,\n privateFor: [toPublicKey],\n };\n const transactionHash = await web3quorum.priv.generateAndSendRawTransaction(\n functionParams,\n );\n // console.log(`Transaction hash: ${transactionHash}`);\n const result = await web3quorum.priv.waitForTransactionReceipt(\n transactionHash,\n );\n console.log(\n "" + nodeName + " value from deployed contract is: " + result.output,\n );\n return result;\n}\n'})}),"\n",(0,r.jsx)(t.h3,{id:"2-perform-a-write-operation-1",children:"2. Perform a write operation"}),"\n",(0,r.jsxs)(t.p,{children:["Performing a write operation is almost the same process as the read operation, except that you encode the new value to the ",(0,r.jsx)(t.code,{children:"set"})," function's ABI, and then append these arguments to the ",(0,r.jsx)(t.code,{children:"set"})," function's ABI and use this as the ",(0,r.jsx)(t.code,{children:"data"})," field:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-js",children:'async function setValueAtAddress(\n clientUrl,\n address,\n value,\n contractAbi,\n fromPrivateKey,\n fromPublicKey,\n toPublicKey,\n) {\n const Web3 = require("web3");\n const Web3Quorum = require("web3js-quorum");\n const web3 = new Web3Quorum(new Web3("http://localhost:22000"));\n // eslint-disable-next-line no-underscore-dangle\n const functionAbi = contract._jsonInterface.find((e) => {\n return e.name === "set";\n });\n const functionArgs = web3quorum.eth.abi\n .encodeParameters(functionAbi.inputs, [value])\n .slice(2);\n const functionParams = {\n to: address,\n data: functionAbi.signature + functionArgs,\n privateKey: fromPrivateKey,\n privateFrom: fromPublicKey,\n privateFor: [toPublicKey],\n };\n const transactionHash = await web3quorum.priv.generateAndSendRawTransaction(\n functionParams,\n );\n console.log(`Transaction hash: ${transactionHash}`);\n const result = await web3quorum.priv.waitForTransactionReceipt(\n transactionHash,\n );\n return result;\n}\n'})}),"\n",(0,r.jsx)(t.h3,{id:"3-verify-an-updated-value-1",children:"3. Verify an updated value"}),"\n",(0,r.jsxs)(t.p,{children:["To verify that a value has been updated, perform a ",(0,r.jsx)(t.code,{children:"get"})," call after a ",(0,r.jsx)(t.code,{children:"set"})," update call."]})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var r=n(96540);const a={},s=r.createContext(a);function o(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bea70e21.81bfac1d.js b/assets/js/bea70e21.81bfac1d.js new file mode 100644 index 00000000000..9890037359b --- /dev/null +++ b/assets/js/bea70e21.81bfac1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7618],{57760:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=s(74848),t=s(28453);const i={title:"Deploy using Microsoft Azure",sidebar_position:10,description:"Deploy a private IBFT 2.0 network using Microsoft Azure.",tags:["private networks"]},o="Deploy private network example on Azure",a={id:"private-networks/tutorials/azure",title:"Deploy using Microsoft Azure",description:"Deploy a private IBFT 2.0 network using Microsoft Azure.",source:"@site/docs/private-networks/tutorials/azure.md",sourceDirName:"private-networks/tutorials",slug:"/private-networks/tutorials/azure",permalink:"/private-networks/tutorials/azure",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/azure.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:10,frontMatter:{title:"Deploy using Microsoft Azure",sidebar_position:10,description:"Deploy a private IBFT 2.0 network using Microsoft Azure.",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Configure Kubernetes mode in NAT manager",permalink:"/private-networks/tutorials/kubernetes/nat-manager"},next:{title:"Reference",permalink:"/private-networks/reference/"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Deploy",id:"deploy",level:2},{value:"Block explorer",id:"block-explorer",level:2},{value:"Metrics",id:"metrics",level:2},{value:"Connect to VM RPC endpoint",id:"connect-to-vm-rpc-endpoint",level:2},{value:"SSH",id:"ssh",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"deploy-private-network-example-on-azure",children:"Deploy private network example on Azure"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://azuremarketplace.microsoft.com/en-us/marketplace/apps/consensys.quorum-dev-quickstart",children:"Quorum Dev Quickstart on Azure Marketplace"})," enables deploying a private IBFT 2.0 network, which includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"A bootnode."}),"\n",(0,r.jsx)(n.li,{children:"An RPC node."}),"\n",(0,r.jsx)(n.li,{children:"Three regular nodes."}),"\n",(0,r.jsx)(n.li,{children:"A block explorer."}),"\n",(0,r.jsx)(n.li,{children:"Prometheus and Grafana with the Besu dashboard installed."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"These are deployed on a single Azure VM in minutes."}),"\n",(0,r.jsxs)(n.p,{children:["Once deployed, you can develop and test applications and connect to the Visual Studio Code (VSCode) plugin using the RPC endpoint ",(0,r.jsx)(n.code,{children:"http://<VM_IP>/jsonrpc"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"The following is a high-level overview of the deployed network."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Image landing",src:s(69507).A+"",width:"1512",height:"1746"})}),"\n",(0,r.jsx)(n.h2,{id:"deploy",children:"Deploy"}),"\n",(0,r.jsx)(n.p,{children:"To deploy the private network example on Azure:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a Resource Group in the ",(0,r.jsx)(n.a,{href:"https://portal.azure.com",children:"Azure Portal"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Go to the ",(0,r.jsx)(n.a,{href:"https://azuremarketplace.microsoft.com/en-us/marketplace/apps/consensys.quorum-dev-quickstart",children:"Quorum Dev Quickstart on Azure Marketplace"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Get It Now"})," and ",(0,r.jsx)(n.strong,{children:"Continue"}),". The Quickstart landing page is displayed."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Image landing",src:s(24825).A+"",width:"2646",height:"1762"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Create"}),". The ",(0,r.jsx)(n.strong,{children:"Basics"})," page is displayed."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Image basics",src:s(31508).A+"",width:"2672",height:"2030"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Details of the Resource Group you created earlier."}),"\n",(0,r.jsx)(n.li,{children:"Basic user credentials to start a VM."}),"\n",(0,r.jsx)(n.li,{children:"Prefix for your new VM and any other resources created."}),"\n",(0,r.jsx)(n.li,{children:"Region to which you wish to deploy the VM."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Next: Size"})," and select the size of the VM you want to use."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["To start the deployment, click ",(0,r.jsx)(n.strong,{children:"Review + create"})," at the bottom left of the page."]}),"\n",(0,r.jsx)(n.p,{children:"The deployment typically takes 3--5 minutes. The progress of your deployment is displayed."}),"\n",(0,r.jsx)(n.p,{children:"When the deployment is complete, the resources created are displayed."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.strong,{children:"Go to Resource"}),". Everything created in the deployment is displayed."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Click on the VM name. The VM details such as the IP and DNS name are displayed. Use the IP and DNS name displayed to connect to the VM, either in browser or via RPC calls."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"block-explorer",children:"Block explorer"}),"\n",(0,r.jsx)(n.p,{children:"To display the block explorer, open a new tab and enter either the IP of the VM or the DNS name."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Image be",src:s(58829).A+"",width:"1919",height:"1020"})}),"\n",(0,r.jsx)(n.h2,{id:"metrics",children:"Metrics"}),"\n",(0,r.jsx)(n.p,{children:"The deployment includes Prometheus metrics and Grafana with a custom Besu Dashboard installed. To display the dashboard:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open a new tab and enter the IP or DNS name appended with ",(0,r.jsx)(n.code,{children:"/grafana"}),". For example: ",(0,r.jsx)(n.code,{children:"http://<DNS_NAME_OF_VM>/grafana"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Click on home and select the Besu dashboard."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Grafana screenshot",src:s(81813).A+"",width:"1919",height:"1020"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The dashboard provides a visual way to monitor your network and nodes as the chain progresses. Alerting can also be configured."}),"\n",(0,r.jsx)(n.h2,{id:"connect-to-vm-rpc-endpoint",children:"Connect to VM RPC endpoint"}),"\n",(0,r.jsxs)(n.p,{children:["You can connect dapps or develop directly from the IDE by using VSCode and connecting to the VM RPC endpoint. The endpoint is the DNS name appended with ",(0,r.jsx)(n.code,{children:"/jsonrpc"}),": ",(0,r.jsx)(n.code,{children:"http://<DNS_NAME_OF_VM>/jsonrpc"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"ssh",children:"SSH"}),"\n",(0,r.jsxs)(n.p,{children:["You can SSH into the VM to see how everything is set up and working. Use the credentials from step 5 of ",(0,r.jsx)(n.a,{href:"#deploy",children:"deployment"})," and your preferred client:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ssh username@<DNS_NAME_OF_VM>\n"})}),"\n",(0,r.jsxs)(n.p,{children:["To list all containers running, run ",(0,r.jsx)(n.code,{children:"docker ps"}),". Find the complete setup in ",(0,r.jsx)(n.code,{children:"/home/<username>/besu-quickstart"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Image ssh",src:s(55877).A+"",width:"1912",height:"993"})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},24825:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/mp_0_landing-5cdec9b2528e30ce29b06d11ecb77938.png"},55877:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/mp_10_ssh-47c3a844de85d9a9e17e33c3234b32c4.png"},31508:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/mp_1_basics-fcefb199c3a414a1df4e9c55a39502bc.png"},58829:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/mp_8_block_explorer-acb08c38f2b2d6293ac0ce112808cb56.png"},81813:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/mp_9_grafana-8553c7f464c56edad72663f6425e95d7.png"},69507:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/sampleNetworks-poa-f758f8253e9ab26a321c53c3b3c7259b.png"},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var r=s(96540);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c029b5c7.f8626ecd.js b/assets/js/c029b5c7.f8626ecd.js new file mode 100644 index 00000000000..085756d9e04 --- /dev/null +++ b/assets/js/c029b5c7.f8626ecd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7800],{9424:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var n=r(74848),a=r(28453);const s={title:"Backup and restore",description:"Backing up and restoring Besu",sidebar_position:7,tags:["private networks"]},i="Backup and restore Besu",o={id:"private-networks/how-to/backup",title:"Backup and restore",description:"Backing up and restoring Besu",source:"@site/docs/private-networks/how-to/backup.md",sourceDirName:"private-networks/how-to",slug:"/private-networks/how-to/backup",permalink:"/private-networks/how-to/backup",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/backup.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Backup and restore",description:"Backing up and restoring Besu",sidebar_position:7,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Ethstats network monitor",permalink:"/private-networks/how-to/deploy/ethstats"},next:{title:"Upgrade",permalink:"/private-networks/how-to/upgrade"}},d={},c=[{value:"Genesis file",id:"genesis-file",level:2},{value:"Data backups",id:"data-backups",level:2},{value:"Data restores",id:"data-restores",level:2},{value:"Corrupted data",id:"corrupted-data",level:2},{value:"Prevent accidental downgrade",id:"prevent-accidental-downgrade",level:2},{value:"Find peers after restarting",id:"find-peers-after-restarting",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"backup-and-restore-besu",children:"Backup and restore Besu"})}),"\n",(0,n.jsx)(t.p,{children:"In a decentralized blockchain, data replicates between nodes so it is not lost. But backing up configuration and data ensures a smoother recovery from corrupted data or other failures."}),"\n",(0,n.jsx)(t.h2,{id:"genesis-file",children:"Genesis file"}),"\n",(0,n.jsx)(t.p,{children:"The genesis file for a network must be accessible on every node. We recommend storing the genesis file under source control."}),"\n",(0,n.jsx)(t.h2,{id:"data-backups",children:"Data backups"}),"\n",(0,n.jsx)(t.p,{children:"If installed locally, the default data location is the Besu installation directory."}),"\n",(0,n.jsxs)(t.p,{children:["We recommend mounting a ",(0,n.jsx)(t.a,{href:"/private-networks/get-started/install/run-docker-image",children:"separate volume to store data"}),". Use the ",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,n.jsx)(t.code,{children:"--data-path"})})," command line option to pass the path to Besu."]}),"\n",(0,n.jsxs)(t.p,{children:["The default data location is the Besu installation directory, or ",(0,n.jsx)(t.code,{children:"/opt/besu/database"})," if using the ",(0,n.jsx)(t.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Besu Docker image"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Having some data reduces the time to synchronize a new node. You can perform periodic backups of the data directory and send the data to your preferred backup mechanism. For example, ",(0,n.jsx)(t.code,{children:"cron"})," job and ",(0,n.jsx)(t.code,{children:"rsync"}),", archives to the cloud such as s3, or ",(0,n.jsx)(t.code,{children:"tar.gz"})," archives."]}),"\n",(0,n.jsx)(t.h2,{id:"data-restores",children:"Data restores"}),"\n",(0,n.jsx)(t.p,{children:"To restore data:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"If the node is running, stop the node."}),"\n",(0,n.jsx)(t.li,{children:"If required, move the data directory to another location for analysis."}),"\n",(0,n.jsx)(t.li,{children:"Restore the data from your last known good backup to the same directory."}),"\n",(0,n.jsx)(t.li,{children:"Ensure user permissions are valid so you can read from and write to the data directory."}),"\n",(0,n.jsx)(t.li,{children:"Restart the node."}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"corrupted-data",children:"Corrupted data"}),"\n",(0,n.jsx)(t.p,{children:"If log messages signify a corrupt database, the cleanest way to recover is:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Stop the node."}),"\n",(0,n.jsxs)(t.li,{children:["Restore the data from a ",(0,n.jsx)(t.a,{href:"#data-backups",children:"previous backup"}),"."]}),"\n",(0,n.jsx)(t.li,{children:"Restart the node."}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"prevent-accidental-downgrade",children:"Prevent accidental downgrade"}),"\n",(0,n.jsxs)(t.p,{children:["When restarting Besu, accidentally using an earlier version of Besu might risk corrupting your database.\nTo protect against incompatibility between versions, set the\n",(0,n.jsx)(t.a,{href:"/public-networks/reference/cli/options#version-compatibility-protection",children:(0,n.jsx)(t.code,{children:"--version-compatibility-protection"})}),"\noption to ",(0,n.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"find-peers-after-restarting",children:"Find peers after restarting"}),"\n",(0,n.jsxs)(t.p,{children:["The process for finding peers after restarting is the same as for ",(0,n.jsx)(t.a,{href:"/public-networks/how-to/upgrade-node#find-peers-on-restarting",children:"finding peers after upgrading and restarting"}),"."]})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>o});var n=r(96540);const a={},s=n.createContext(a);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c41908c3.1f525574.js b/assets/js/c41908c3.1f525574.js new file mode 100644 index 00000000000..293b952317e --- /dev/null +++ b/assets/js/c41908c3.1f525574.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4978],{43816:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var i=n(74848),r=n(28453);const a={title:"Create a multi-tenant network",sidebar_position:2,description:"Configure multi-tenancy",tags:["private networks"]},s="Configure a multi-tenant node",o={id:"private-networks/tutorials/privacy/multi-tenancy",title:"Create a multi-tenant network",description:"Configure multi-tenancy",source:"@site/docs/private-networks/tutorials/privacy/multi-tenancy.md",sourceDirName:"private-networks/tutorials/privacy",slug:"/private-networks/tutorials/privacy/multi-tenancy",permalink:"/private-networks/tutorials/privacy/multi-tenancy",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/privacy/multi-tenancy.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Create a multi-tenant network",sidebar_position:2,description:"Configure multi-tenancy",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a privacy enabled network using the Quickstart",permalink:"/private-networks/tutorials/privacy/"},next:{title:"Use the web3js-quorum multi-node example",permalink:"/private-networks/tutorials/privacy/web3js-quorum"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Generate a private and public key pair",id:"1-generate-a-private-and-public-key-pair",level:3},{value:"2. Generate Tessera keys",id:"2-generate-tessera-keys",level:3},{value:"3. Update the Tessera configuration file",id:"3-update-the-tessera-configuration-file",level:3},{value:"4. Start Tessera",id:"4-start-tessera",level:3},{value:"5. Start Besu Node-1",id:"5-start-besu-node-1",level:3},{value:"6. Generate the tenant JWTs",id:"6-generate-the-tenant-jwts",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"configure-a-multi-tenant-node",children:"Configure a multi-tenant node"})}),"\n",(0,i.jsxs)(t.p,{children:["You can configure Besu and associated Tessera node in a privacy-enabled network to host ",(0,i.jsx)(t.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multiple tenants"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["In this tutorial we'll add tenants to the ",(0,i.jsx)(t.code,{children:"Node-1"})," Besu and Tessera node in a ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/privacy/",children:"privacy-enabled network"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"IBFT-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u251c\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u251c\u2500\u2500 Tessera\n\u2514\u2500\u2500 Node-4\n \u251c\u2500\u2500 data\n \u251c\u2500\u2500 Tessera\n"})}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["This tutorial uses ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#jwt-public-key-authentication",children:"JWT public key authentication"})," to create the tenant's JWT, but you can also use ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#username-and-password-authentication",children:"username and password authentication"}),"."]})}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/privacy/",children:"privacy-enabled network"}),"."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"steps",children:"Steps"}),"\n",(0,i.jsx)(t.h3,{id:"1-generate-a-private-and-public-key-pair",children:"1. Generate a private and public key pair"}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.code,{children:"Node-1"})," directory, ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#1-generate-a-private-and-public-key-pair",children:"generate the private and public key pair"}),". The key pair, which must be in ",(0,i.jsx)(t.code,{children:".pem"})," format, belongs to the operator who uses the key pair to authenticate the ",(0,i.jsx)(t.a,{href:"#6-generate-the-tenant-jwts",children:"tenant JWTs"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["This step is not required when using ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#username-and-password-authentication",children:"username and password authentication"})," to create the required JWTs."]})}),"\n",(0,i.jsx)(t.h3,{id:"2-generate-tessera-keys",children:"2. Generate Tessera keys"}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.code,{children:"Node-1/Tessera"})," directory, ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/privacy/#2-generate-tessera-keys",children:"generate a public/private key pair for each tenant"}),"."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"The instructions creates an unlocked private key, meaning you do not need a password to decrypt the private key file."})}),"\n",(0,i.jsxs)(t.p,{children:["Name the key pair ",(0,i.jsx)(t.code,{children:"nodeKey2"})," and ",(0,i.jsx)(t.code,{children:"nodeKey3"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"3-update-the-tessera-configuration-file",children:"3. Update the Tessera configuration file"}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.code,{children:"Node-1/Tessera"})," directory, update the ",(0,i.jsx)(t.code,{children:"tessera.conf"})," file by adding the new key pairs:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n "mode": "orion",\n "useWhiteList": false,\n "jdbc": {\n "username": "sa",\n "password": "",\n "url": "jdbc:h2:./target/h2/tessera1",\n "autoCreateTables": true\n },\n "serverConfigs": [\n {\n "app": "ThirdParty",\n "serverAddress": "http://localhost:9101",\n "communicationType": "REST"\n },\n {\n "app": "Q2T",\n "serverAddress": "http://localhost:9102",\n "communicationType": "REST"\n },\n {\n "app": "P2P",\n "serverAddress": "http://localhost:9103",\n "sslConfig": {\n "tls": "OFF"\n },\n "communicationType": "REST"\n }\n ],\n "peer": [\n {\n "url": "http://localhost:9203"\n },\n {\n "url": "http://localhost:9303"\n },\n {\n "url": "http://localhost:9403"\n }\n ],\n "keys": {\n "passwords": [],\n "keyData": [\n {\n "privateKeyPath": "nodeKey.key",\n "publicKeyPath": "nodeKey.pub"\n },\n {\n "privateKeyPath": "nodeKey2.key",\n "publicKeyPath": "nodeKey2.pub"\n },\n {\n "privateKeyPath": "nodeKey3.key",\n "publicKeyPath": "nodeKey3.pub"\n }\n ]\n },\n "alwaysSendTo": []\n}\n'})}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["Besu requires ",(0,i.jsxs)(t.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/Orion-Mode",children:[(0,i.jsx)(t.code,{children:"orion"})," mode"]}),". Add the line ",(0,i.jsx)(t.code,{children:'"mode": "orion",'})," to the Tessera configuration file."]})}),"\n",(0,i.jsx)(t.h3,{id:"4-start-tessera",children:"4. Start Tessera"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/private-networks/tutorials/privacy/#4-start-the-tessera-nodes",children:"Start the Tessera nodes"})," and specify the configuration file."]}),"\n",(0,i.jsx)(t.h3,{id:"5-start-besu-node-1",children:"5. Start Besu Node-1"}),"\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.code,{children:"Node-1"})," directory, start Besu Node-1:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --rpc-http-authentication-enabled --rpc-http-authentication-jwt-public-key-file=publicKey.pem --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-multi-tenancy-enabled --min-gas-price=0\n'})}),"\n",(0,i.jsx)(t.p,{children:"The command line specifies privacy options:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-enabled",children:(0,i.jsx)(t.code,{children:"--rpc-http-authentication-enabled"})})," enables authentication for JSON-RPC APIs."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-jwt-public-key-file",children:(0,i.jsx)(t.code,{children:"--rpc-http-authentication-jwt-public-key-file"})})," specifies the Operator's ",(0,i.jsx)(t.a,{href:"#1-generate-a-private-and-public-key-pair",children:"public key file"}),". Used to authenticate the ",(0,i.jsx)(t.a,{href:"#6-generate-the-tenant-jwts",children:"tenant JWTs"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/private-networks/reference/cli/options#privacy-enabled",children:(0,i.jsx)(t.code,{children:"--privacy-enabled"})})," enables privacy."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/private-networks/reference/cli/options#privacy-url",children:(0,i.jsx)(t.code,{children:"--privacy-url"})})," specifies the ",(0,i.jsx)(t.a,{href:"https://docs.tessera.consensys.net/Reference/TesseraAPI",children:"Quorum to Tessera (Q2T)"})," server address of the Tessera node (",(0,i.jsx)(t.code,{children:"Q2T"})," in ",(0,i.jsx)(t.code,{children:"tessera.conf"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/private-networks/reference/cli/options#privacy-multi-tenancy-enabled",children:(0,i.jsx)(t.code,{children:"--privacy-multi-tenancy-enabled"})})," enables multi-tenancy."]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-jwt-public-key-file",children:(0,i.jsx)(t.code,{children:"--rpc-http-authentication-jwt-public-key-file"})})," is only required when using ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#jwt-public-key-authentication",children:"JWT public key authentication"}),". If using ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#username-and-password-authentication",children:"username and password authentication"}),", use ",(0,i.jsx)(t.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-credentials-file",children:(0,i.jsx)(t.code,{children:"--rpc-http-authentication-credentials-file"})})," instead."]})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/private-networks/tutorials/privacy/#6-start-besu-node-2",children:"Start the remaining Besu nodes"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"6-generate-the-tenant-jwts",children:"6. Generate the tenant JWTs"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#2-create-the-jwt",children:"Generate the JWT"})," for each tenant and specify the ",(0,i.jsx)(t.a,{href:"#2-generate-tessera-keys",children:"tenant's Tessera public key"})," in the ",(0,i.jsx)(t.code,{children:"privacyPublicKey"})," field."]}),"\n",(0,i.jsxs)(t.p,{children:["Ensure you apply the appropriate ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#json-rpc-permissions",children:"JSON-RPC API permissions"})," to the token. For example, ensure you enable the ",(0,i.jsx)(t.code,{children:"PRIV"})," and ",(0,i.jsx)(t.code,{children:"EEA"})," APIs for privacy."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["This step is not required when using ",(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#username-and-password-authentication",children:"username and password authentication"})," to create the required JWTs."]})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/public-networks/how-to/use-besu-api/authenticate#using-an-authentication-token-to-make-requests",children:"Use the authentication token to make requests"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>o});var i=n(96540);const r={},a=i.createContext(r);function s(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c48436f6.ceedba4d.js b/assets/js/c48436f6.ceedba4d.js new file mode 100644 index 00000000000..8f1b7614d89 --- /dev/null +++ b/assets/js/c48436f6.ceedba4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2593],{99307:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var s=n(74848),i=n(28453);const r={description:"Migrate to Besu from a different Ethereum execution client.",tags:["public networks"]},o="Migrate to Besu",c={id:"public-networks/get-started/migrate-to-besu",title:"Migrate to Besu",description:"Migrate to Besu from a different Ethereum execution client.",source:"@site/docs/public-networks/get-started/migrate-to-besu.md",sourceDirName:"public-networks/get-started",slug:"/public-networks/get-started/migrate-to-besu",permalink:"/public-networks/get-started/migrate-to-besu",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/get-started/migrate-to-besu.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Migrate to Besu from a different Ethereum execution client.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Connect to a testnet",permalink:"/public-networks/get-started/connect/testnet"},next:{title:"How to",permalink:"/public-networks/how-to"}},a={},u=[];function l(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"migrate-to-besu",children:"Migrate to Besu"})}),"\n",(0,s.jsxs)(t.p,{children:["Migrate from a different Ethereum ",(0,s.jsx)(t.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," to Besu to contribute to ",(0,s.jsx)(t.a,{href:"https://clientdiversity.org/",children:"client diversity"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["To migrate from a different client, ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/connect/mainnet#2-start-besu",children:"configure Besu as an execution client"})," and connect your ",(0,s.jsx)(t.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"})," to Besu instead of your original execution client."]}),"\n",(0,s.jsxs)(t.p,{children:["To minimize downtime while ",(0,s.jsx)(t.a,{href:"/public-networks/get-started/connect/sync-node",children:"Besu syncs"})," and avoid downtime penalties, you can sync Besu with a new consensus layer instance. Once Besu has fully synced you can connect it to your existing consensus client."]}),"\n",(0,s.jsxs)(t.p,{children:["Find guides to switch from specific clients on the ",(0,s.jsx)(t.a,{href:"https://clientdiversity.org/#switch",children:"client diversity website"}),"."]})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var s=n(96540);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c69ab138.d760b4a7.js b/assets/js/c69ab138.d760b4a7.js new file mode 100644 index 00000000000..4b8c25a7bf4 --- /dev/null +++ b/assets/js/c69ab138.d760b4a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6048],{57425:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var t=i(74848),s=i(28453);const r={title:"Plugins",sidebar_position:6,description:"Plugins overview",tags:["private networks"]},l="Plugins",o={id:"private-networks/concepts/plugins",title:"Plugins",description:"Plugins overview",source:"@site/docs/private-networks/concepts/plugins.md",sourceDirName:"private-networks/concepts",slug:"/private-networks/concepts/plugins",permalink:"/private-networks/concepts/plugins",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/plugins.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:6,frontMatter:{title:"Plugins",sidebar_position:6,description:"Plugins overview",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Public key infrastructure",permalink:"/private-networks/concepts/pki"},next:{title:"Tutorials",permalink:"/private-networks/tutorials"}},c={},a=[{value:"Install plugins",id:"install-plugins",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"plugins",children:"Plugins"})}),"\n",(0,t.jsx)(n.p,{children:"You can extend Besu functionality by building Java plugins or using existing open source Besu plugins. Use the Plugin API to take data from any Besu network, public or permissioned, and feed it into an application or system."}),"\n",(0,t.jsx)(n.p,{children:"For example, create a plugin to add more monitoring functionality or stream event data to a third-party application. The API exposes data about the following components:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Blocks"}),"\n",(0,t.jsx)(n.li,{children:"Balances"}),"\n",(0,t.jsx)(n.li,{children:"Transactions"}),"\n",(0,t.jsx)(n.li,{children:"Smart contracts"}),"\n",(0,t.jsx)(n.li,{children:"Execution results"}),"\n",(0,t.jsx)(n.li,{children:"Logs"}),"\n",(0,t.jsx)(n.li,{children:"Syncing state."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Besu plugin API",src:i(42483).A+"",width:"1512",height:"944"})}),"\n",(0,t.jsxs)(n.p,{children:["The plugin API provides access to ",(0,t.jsx)(n.a,{href:"/private-networks/reference/plugin-api-interfaces",children:"interfaces"})," allowing you to build the plugin."]}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["View the ",(0,t.jsx)(n.a,{href:"https://youtu.be/78sa2WuA1rg",children:"plugin API webinar"})," for an example of how to build a plugin."]}),(0,t.jsxs)(n.p,{children:["For more information about the available interfaces, see the ",(0,t.jsx)(n.a,{href:"https://javadoc.io/doc/org.hyperledger.besu/plugin-api/latest/index.html",children:"Plugin API Javadoc"}),"."]})]}),"\n",(0,t.jsx)(n.h2,{id:"install-plugins",children:"Install plugins"}),"\n",(0,t.jsxs)(n.p,{children:["To allow Besu to access and use the plugin, copy the plugin (",(0,t.jsx)(n.code,{children:".jar"}),") to the ",(0,t.jsx)(n.code,{children:"plugins"})," directory."]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["If not already present, you must create the ",(0,t.jsx)(n.code,{children:"plugins"})," directory one directory level below (",(0,t.jsx)(n.code,{children:"../"}),") the ",(0,t.jsx)(n.code,{children:"besu"})," executable."]})}),"\n",(0,t.jsx)(n.p,{children:"Each plugin in the directory has the following lifecycle events:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Register"})," - Executed when Besu starts. Besu checks plugin compatibility and registers plugins."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Start"})," - Plugins start after being successfully registered."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Stop"})," - Besu stops plugins."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"The order in which Besu calls plugins during lifecycle events is not guaranteed."})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},42483:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/Hyperledger-Besu-Plugin-API-55b61f51dd27221eb8c9de3892b1fb2e.png"},28453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var t=i(96540);const s={},r=t.createContext(s);function l(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c6a4c9bf.0ba2d938.js b/assets/js/c6a4c9bf.0ba2d938.js new file mode 100644 index 00000000000..0b7b70566c1 --- /dev/null +++ b/assets/js/c6a4c9bf.0ba2d938.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7643],{60968:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>o,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var i=t(74848),a=t(28453),s=t(11470),r=t(19365);const c={title:"Authenticate over JSON-RPC requests",sidebar_position:4,description:"Besu authentication and authorization for JSON-RPC",tags:["public networks","private networks"]},o="Authenticate and authorize JSON-RPC",l={id:"public-networks/how-to/use-besu-api/authenticate",title:"Authenticate over JSON-RPC requests",description:"Besu authentication and authorization for JSON-RPC",source:"@site/docs/public-networks/how-to/use-besu-api/authenticate.md",sourceDirName:"public-networks/how-to/use-besu-api",slug:"/public-networks/how-to/use-besu-api/authenticate",permalink:"/public-networks/how-to/use-besu-api/authenticate",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/use-besu-api/authenticate.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Authenticate over JSON-RPC requests",sidebar_position:4,description:"Besu authentication and authorization for JSON-RPC",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Use GraphQL over HTTP",permalink:"/public-networks/how-to/use-besu-api/graphql"},next:{title:"Access logs using JSON-RPC",permalink:"/public-networks/how-to/use-besu-api/access-logs"}},h={},d=[{value:"Username and password authentication",id:"username-and-password-authentication",level:2},{value:"1. Create the credentials file",id:"1-create-the-credentials-file",level:3},{value:"2. Enable authentication",id:"2-enable-authentication",level:3},{value:"3. Generate an authentication token",id:"3-generate-an-authentication-token",level:3},{value:"JWT public key authentication",id:"jwt-public-key-authentication",level:2},{value:"1. Generate a private and public key pair",id:"1-generate-a-private-and-public-key-pair",level:3},{value:"2. Create the JWT",id:"2-create-the-jwt",level:3},{value:"3. Enable authentication",id:"3-enable-authentication",level:3},{value:"JSON-RPC permissions",id:"json-rpc-permissions",level:2},{value:"Use an authentication token to make requests",id:"use-an-authentication-token-to-make-requests",level:2},{value:"Postman",id:"postman",level:3},{value:"cURL",id:"curl",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",section:"section",strong:"strong",sup:"sup",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"authenticate-and-authorize-json-rpc",children:"Authenticate and authorize JSON-RPC"})}),"\n",(0,i.jsxs)(n.p,{children:["Authentication identifies a user, and authorization verifies user access to requested JSON-RPC methods. Besu verifies users using ",(0,i.jsx)(n.a,{href:"https://jwt.io/introduction/",children:"JSON Web Tokens (JWT)"}),". JWT is also used in ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"})," to verify tenant data access."]}),"\n",(0,i.jsx)(n.p,{children:"Besu supports two mutually exclusive authentication methods:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#username-and-password-authentication",children:"Username and password"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#jwt-public-key-authentication",children:"JWT public key"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Besu creates JWT internally with ",(0,i.jsx)(n.a,{href:"#username-and-password-authentication",children:"username and password authentication"}),", and externally with ",(0,i.jsx)(n.a,{href:"#jwt-public-key-authentication",children:"JWT public key authentication"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Using JSON-RPC authentication and authorization with ",(0,i.jsx)(n.a,{href:"https://metamask.io/",children:"MetaMask"})," is not supported."]})}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"To prevent interception of authentication credentials and authenticated tokens, make authenticated requests over HTTPS. We recommend running production deployments behind a network layer that provides SSL termination. Besu does not provide a HTTPS connection natively."})}),"\n",(0,i.jsx)(n.h2,{id:"username-and-password-authentication",children:"Username and password authentication"}),"\n",(0,i.jsxs)(n.p,{children:["Enable authentication from the command line. Supply the credentials file and send a request to the ",(0,i.jsx)(n.code,{children:"/login"})," endpoint using the username and password. The ",(0,i.jsx)(n.code,{children:"/login"})," endpoint creates a JWT for making permitted JSON-RPC requests."]}),"\n",(0,i.jsxs)(n.p,{children:["Using ",(0,i.jsx)(n.a,{href:"#jwt-public-key-authentication",children:"public key authentication"})," disables the ",(0,i.jsx)(n.code,{children:"/login"})," endpoint."]}),"\n",(0,i.jsx)(n.h3,{id:"1-create-the-credentials-file",children:"1. Create the credentials file"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"toml"})," credentials file defines user details and the JSON-RPC methods they can access."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-toml",metastring:'title="auth.toml"',children:'[Users.username1]\npassword = "$2a$10$l3GA7K8g6rJ/Yv.YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC"\npermissions=["net:*","eth:blockNumber"]\nprivacyPublicKey="U7ANiOOd5L9Z/dMxRFjdbhA1Qragw6fLuYgmgCvLoX4="\n\n[Users.username2]\npassword = "$2b$10$6sHt1J0MVUGIoNKvJiK33uaZzUwNmMmJlaVLkIwinkPiS1UBnAnF2"\npermissions=["net:version","admin:*"]\nprivacyPublicKey="quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="\n'})}),"\n",(0,i.jsx)(n.p,{children:"Each user requiring JSON-RPC access the configuration file lists the:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Username. ",(0,i.jsx)(n.code,{children:"Users."})," is mandatory and followed by the username. That is, replace ",(0,i.jsx)(n.code,{children:"<username>"})," in ",(0,i.jsx)(n.code,{children:"[Users.<username>]"})," with the username."]}),"\n",(0,i.jsxs)(n.li,{children:["Hash of the user password. Use the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands#password",children:(0,i.jsx)(n.code,{children:"password hash"})})," subcommand to generate the hash."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#json-rpc-permissions",children:"JSON-RPC permissions"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Optional. The tenant's Tessera public key using ",(0,i.jsx)(n.code,{children:"privacyPublicKey"}),". Only used for ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(s.A,{children:[(0,i.jsx)(r.A,{value:"Command",label:"Command",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"besu password hash --password=MyPassword\n"})})}),(0,i.jsx)(r.A,{value:"Hash output",label:"Hash output",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"$2a$10$L3Xb5G/AJOsEK5SuOn9uzOhpCCfuVWTajc5hwWerY6N5xBM/xlrMK\n"})})})]}),"\n",(0,i.jsx)(n.h3,{id:"2-enable-authentication",children:"2. Enable authentication"}),"\n",(0,i.jsxs)(n.p,{children:["Enable authentication for the JSON-RPC API using the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-enabled",children:(0,i.jsx)(n.code,{children:"--rpc-http-authentication-enabled"})}),"\nor ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-authentication-enabled",children:(0,i.jsx)(n.code,{children:"--rpc-ws-authentication-enabled"})})," option."]}),"\n",(0,i.jsxs)(n.p,{children:["Specify the ",(0,i.jsx)(n.a,{href:"#1-create-the-credentials-file",children:"credentials file"})," using the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-credentials-file",children:(0,i.jsx)(n.code,{children:"--rpc-http-authentication-credentials-file"})}),"\nor ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-authentication-credentials-file",children:(0,i.jsx)(n.code,{children:"--rpc-ws-authentication-credentials-file"})})," option."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["With authentication enabled, you can specify methods that don't require authentication using\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api-methods-no-auth",children:(0,i.jsx)(n.code,{children:"--rpc-http-api-methods-no-auth"})})," or\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api-methods-no-auth",children:(0,i.jsx)(n.code,{children:"--rpc-ws-api-methods-no-auth"})}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"3-generate-an-authentication-token",children:"3. Generate an authentication token"}),"\n",(0,i.jsxs)(n.p,{children:["To generate an authentication token, make a request to the ",(0,i.jsx)(n.code,{children:"/login"})," endpoint with your username and password. Specify the HTTP port or the WS port to generate a token to authenticate over HTTP or WS respectively. HTTP and WS requires a different token."]}),"\n",(0,i.jsxs)(s.A,{children:[(0,i.jsx)(r.A,{value:"Generate a token for HTTP",label:"Generate a token for HTTP",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"username":"username1","password":"MyPassword"}\' <JSON-RPC-http-hostname:http-port>/login\n'})})}),(0,i.jsx)(r.A,{value:"Example for HTTP",label:"Example for HTTP",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"username":"username1","password":"MyPassword"}\' http://localhost:8545/login\n'})})}),(0,i.jsx)(r.A,{value:"Generate a token for WS",label:"Generate a token for WS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"username":"username1","password":"MyPassword"}\' <JSON-RPC-ws-hostname:ws-port>/login\n'})})}),(0,i.jsx)(r.A,{value:"Example for WS",label:"Example for WS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"username":"username1","password":"MyPassword"}\' http://localhost:8546/login\n'})})}),(0,i.jsx)(r.A,{value:"JSON result",label:"JSON result",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MDYwNCwiZXhwIjoxNTUwNDYwOTA0fQ.l2Ycqzl_AyvReXBeUSayOlOMS_E8-DCuz3q0Db0DKD7mqyl6q-giWoEtfdWzUEvZbRRi2_ecKO3N6JkXq7zMKQAJbVAEzobfbaaXWcQEpHOjtnK4_Yz-UPyKiXtu7HGdcdl5Tfx3dKoksbqkBl3U3vFWxzmFnuu3dAISfVJYUNA"\n}\n'})})})]}),"\n",(0,i.jsx)(n.p,{children:"Authentication tokens expire five minutes after generation. If you require access after the token expires, you need to generate a new token."}),"\n",(0,i.jsx)(n.h2,{id:"jwt-public-key-authentication",children:"JWT public key authentication"}),"\n",(0,i.jsx)(n.p,{children:"Enable authentication from the command line and supply the external JWT provider's public key."}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsxs)(n.p,{children:["JWT public authentication disables the Besu ",(0,i.jsx)(n.code,{children:"/login"})," endpoint, meaning ",(0,i.jsx)(n.a,{href:"#username-and-password-authentication",children:"username and password authentication"})," will not work."]})}),"\n",(0,i.jsx)(n.h3,{id:"1-generate-a-private-and-public-key-pair",children:"1. Generate a private and public key pair"}),"\n",(0,i.jsxs)(n.p,{children:["The private and accompanying public key files must be in ",(0,i.jsx)(n.code,{children:".pem"})," format."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.a,{href:"https://datatracker.ietf.org/doc/html/rfc7518#section-3.1",children:"key algorithm"})," can be:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["RSA with private key length of at least 2048 bits using algorithm ",(0,i.jsx)(n.code,{children:"RS256"}),", ",(0,i.jsx)(n.code,{children:"RS384"}),", or ",(0,i.jsx)(n.code,{children:"RS512"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["ECDSA private key, using ",(0,i.jsx)(n.code,{children:"ES256"})," (",(0,i.jsx)(n.code,{children:"secp256r1"})," or ",(0,i.jsx)(n.code,{children:"secp256k1"}),"), ",(0,i.jsx)(n.code,{children:"ES384"}),", or ",(0,i.jsx)(n.code,{children:"ES512"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The default value for Besu is ",(0,i.jsx)(n.code,{children:"RS256"}),".\nWhen you use a different key algorithm, you must specify the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-jwt-algorithm",children:(0,i.jsx)(n.code,{children:"--rcp-http-authentication-jwt-algorithm"})}),"\noption and/or the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-authentication-jwt-algorithm",children:(0,i.jsx)(n.code,{children:"--rcp-ws-authentication-jwt-algorithm"})}),"\noption depending on your needs."]}),"\n",(0,i.jsxs)(s.A,{children:[(0,i.jsx)(r.A,{value:"RS256 RSA Keys",label:"RS256 RSA Keys",default:!0,children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Generate the private key:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"openssl genrsa -out privateRSAKey.pem 2048\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Generate the public key:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"openssl rsa -pubout -in privateRSAKey.pem -pubout -out publicRSAKey.pem\n"})}),"\n"]}),"\n"]})}),(0,i.jsx)(r.A,{value:"ES256 secp256r1 ECDSA Keys",label:"ES256 secp256r1 ECDSA Keys",children:(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Generate the private key:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"openssl ecparam -name secp256r1 -genkey -out privateECDSAKey.pem\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Generate the public key:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"openssl ec -in privateECDSAKey.pem -pubout -out publicECDSAKey.pem\n"})}),"\n"]}),"\n"]})})]}),"\n",(0,i.jsxs)(n.admonition,{title:"Private key security",type:"danger",children:[(0,i.jsx)(n.p,{children:"The private key must be kept secret. Never share private keys publicly or on a Web site, even if advertised as secure."}),(0,i.jsxs)(n.p,{children:["Always keep your private keys safe -- ideally using ",(0,i.jsx)(n.a,{href:"https://connect2id.com/products/nimbus-jose-jwt/examples/pkcs11",children:"hardware"})," or ",(0,i.jsx)(n.a,{href:"https://www.vaultproject.io/docs/secrets/identity/identity-token",children:"vault"})," -- and define a strong security policy and ",(0,i.jsx)(n.a,{href:"https://auth0.com/docs/best-practices/token-best-practices",children:"best practices"}),"."]}),(0,i.jsx)(n.p,{children:"Compromised keys can provide attackers access to your node's RPC-API."})]}),"\n",(0,i.jsx)(n.h3,{id:"2-create-the-jwt",children:"2. Create the JWT"}),"\n",(0,i.jsxs)(n.p,{children:["Create the JWT using a trusted authentication provider",(0,i.jsx)(n.sup,{children:(0,i.jsx)(n.a,{href:"#user-content-fn-1",id:"user-content-fnref-1","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," or ",(0,i.jsx)(n.a,{href:"https://jwt.io/libraries",children:"library"})," in your own code."]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"https://github.com/NicolasMassart/java-jwt-sample-generation/",children:"Java code sample to generate JWT using Vertx"})," for an example implementation."]}),"\n",(0,i.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,i.jsxs)(n.p,{children:["The JWT must use one of the ",(0,i.jsx)(n.code,{children:"RS256"}),", ",(0,i.jsx)(n.code,{children:"RS384"}),", ",(0,i.jsx)(n.code,{children:"RS512"}),", ",(0,i.jsx)(n.code,{children:"ES256"}),", ",(0,i.jsx)(n.code,{children:"ES384"}),", or ",(0,i.jsx)(n.code,{children:"ES512"})," algorithms."]})}),"\n",(0,i.jsx)(n.p,{children:"Each payload for the JWT must contain:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#json-rpc-permissions",children:"JSON-RPC permissions"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsxs)(n.a,{href:"https://tools.ietf.org/html/rfc7519#section-4.1.4",children:[(0,i.jsx)(n.code,{children:"exp"})," (Expiration Time) claim"]})}),"\n",(0,i.jsxs)(n.li,{children:["Optionally, the tenant's Tessera public key using ",(0,i.jsx)(n.code,{children:"privacyPublicKey"}),". Only used for ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(s.A,{children:[(0,i.jsx)(r.A,{value:"Example JSON Payload",label:"Example JSON Payload",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "permissions": ["*:*"],\n "privacyPublicKey": "2UKH3VJThkOoKskrLFpwoxCnnRARyobV1bEdgseFHTs=",\n "exp": 1600899999002\n}\n'})})}),(0,i.jsx)(r.A,{value:"Example JWT result",label:"Example JWT result",children:(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Example result",src:t(42365).A+"",width:"493",height:"486"})})})]}),"\n",(0,i.jsx)(n.h3,{id:"3-enable-authentication",children:"3. Enable authentication"}),"\n",(0,i.jsxs)(n.p,{children:["Enable authentication for the JSON-RPC API using the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-enabled",children:(0,i.jsx)(n.code,{children:"--rpc-http-authentication-enabled"})}),"\nor ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-authentication-enabled",children:(0,i.jsx)(n.code,{children:"--rpc-ws-authentication-enabled"})})," option."]}),"\n",(0,i.jsxs)(n.p,{children:["Specify the JWT provider's public key file to use with the externally created JWT, using the\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-authentication-jwt-public-key-file",children:(0,i.jsx)(n.code,{children:"--rpc-http-authentication-jwt-public-key-file"})}),"\nor ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-authentication-jwt-public-key-file",children:(0,i.jsx)(n.code,{children:"--rpc-ws-authentication-jwt-public-key-file"})})," option."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["With authentication enabled, you can specify methods that don't require authentication using\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api-methods-no-auth",children:(0,i.jsx)(n.code,{children:"--rpc-http-api-methods-no-auth"})})," or\n",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api-methods-no-auth",children:(0,i.jsx)(n.code,{children:"--rpc-ws-api-methods-no-auth"})}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"json-rpc-permissions",children:"JSON-RPC permissions"}),"\n",(0,i.jsx)(n.p,{children:"Each user has a list of permissions strings defining the methods they can access. To give access to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["All API methods, specify ",(0,i.jsx)(n.code,{children:'["*:*"]'}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["All API methods in an API group, specify ",(0,i.jsx)(n.code,{children:'["<api_group>:*"]'}),". For example, ",(0,i.jsx)(n.code,{children:'["eth:*"]'}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Specific API methods, specify ",(0,i.jsx)(n.code,{children:'["<api_group>:<method_name>"]'}),". For example, ",(0,i.jsx)(n.code,{children:'["admin:peers"]'}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["With authentication enabled, to explicitly specify a user cannot access any methods, include the user with an empty permissions list (",(0,i.jsx)(n.code,{children:"[]"}),"). Users with an empty permissions list and users not included in the credentials file cannot access any JSON-RPC methods."]}),"\n",(0,i.jsx)(n.h2,{id:"use-an-authentication-token-to-make-requests",children:"Use an authentication token to make requests"}),"\n",(0,i.jsxs)(n.p,{children:["Specify the authentication token as a ",(0,i.jsx)(n.code,{children:"Bearer"})," token in the JSON-RPC request header."]}),"\n",(0,i.jsx)(n.h3,{id:"postman",children:"Postman"}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Authorization"})," tab in the ",(0,i.jsx)(n.strong,{children:"TYPE"})," drop-down list, select ",(0,i.jsx)(n.strong,{children:"Bearer Token"})," and specify the token (generated either ",(0,i.jsx)(n.a,{href:"#2-create-the-jwt",children:"externally"})," or by the ",(0,i.jsxs)(n.a,{href:"#3-generate-an-authentication-token",children:[(0,i.jsx)(n.code,{children:"login"})," request"]}),")."]}),"\n",(0,i.jsx)(n.h3,{id:"curl",children:"cURL"}),"\n",(0,i.jsxs)(n.p,{children:["Specify the ",(0,i.jsx)(n.code,{children:"Bearer"})," in the header."]}),"\n",(0,i.jsxs)(s.A,{children:[(0,i.jsx)(r.A,{value:"cURL Request with authentication placeholders",label:"cURL Request with authentication placeholders",default:!0,children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H \'Authorization: Bearer <JWT_TOKEN>\' -d \'{"jsonrpc":"2.0","method":"<API_METHOD>","params":[],"id":1}\' <JSON-RPC-http-hostname:port>\n'})})}),(0,i.jsx)(r.A,{value:"cURL Request with authentication",label:"cURL Request with authentication",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'curl -X POST -H \'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MTQxNiwiZXhwIjoxNTUwNDYxNzE2fQ.WQ1mqpqzRLHaoL8gOSEZPvnRs_qf6j__7A3Sg8vf9RKvWdNTww_vRJF1gjcVy-FFh96AchVnQyXVx0aNUz9O0txt8VN3jqABVWbGMfSk2T_CFdSw5aDjuriCsves9BQpP70Vhj-tseaudg-XU5hCokX0tChbAqd9fB2138zYm5M\' -d \'{"jsonrpc":"2.0","method":"net_listening","params":[],"id":1}\' http://localhost:8545\n'})})})]}),"\n","\n",(0,i.jsxs)(n.section,{"data-footnotes":!0,className:"footnotes",children:[(0,i.jsx)(n.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{id:"user-content-fn-1",children:["\n",(0,i.jsxs)(n.p,{children:["for example ",(0,i.jsx)(n.a,{href:"https://auth0.com/",children:"Auth0"})," or ",(0,i.jsx)(n.a,{href:"https://www.keycloak.org/",children:"Keycloak"})," ",(0,i.jsx)(n.a,{href:"#user-content-fnref-1","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>r});t(96540);var i=t(18215);const a={tabItem:"tabItem_Ymn6"};var s=t(74848);function r(e){let{children:n,hidden:t,className:r}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,i.A)(a.tabItem,r),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>v});var i=t(96540),a=t(18215),s=t(23104),r=t(56347),c=t(205),o=t(57485),l=t(31682),h=t(70679);function d(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function u(e){const{values:n,children:t}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:i,default:a}}=e;return{value:n,label:t,attributes:i,default:a}}))}(t);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function x(e){let{queryString:n=!1,groupId:t}=e;const a=(0,r.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,o.aZ)(s),(0,i.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(a.location.search);n.set(s,e),a.replace({...a.location,search:n.toString()})}),[s,a])]}function j(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,s=u(e),[r,o]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=t.find((e=>e.default))??t[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:s}))),[l,d]=x({queryString:t,groupId:a}),[j,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,s]=(0,h.Dv)(t);return[a,(0,i.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:a}),f=(()=>{const e=l??j;return p({value:e,tabValues:s})?e:null})();(0,c.A)((()=>{f&&o(f)}),[f]);return{selectedValue:r,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);o(e),d(e),m(e)}),[d,m,s]),tabValues:s}}var m=t(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=t(74848);function y(e){let{className:n,block:t,selectedValue:i,selectValue:r,tabValues:c}=e;const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,s.a_)(),h=e=>{const n=e.currentTarget,t=o.indexOf(n),a=c[t].value;a!==i&&(l(n),r(a))},d=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},n),children:c.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,b.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>o.push(e),onKeyDown:d,onClick:h,...s,className:(0,a.A)("tabs__item",f.tabItem,s?.className,{"tabs__item--active":i===n}),children:t??n},n)}))})}function w(e){let{lazy:n,children:t,selectedValue:s}=e;const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=r.find((e=>e.props.value===s));return e?(0,i.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function g(e){const n=j(e);return(0,b.jsxs)("div",{className:(0,a.A)("tabs-container",f.tabList),children:[(0,b.jsx)(y,{...n,...e}),(0,b.jsx)(w,{...n,...e})]})}function v(e){const n=(0,m.A)();return(0,b.jsx)(g,{...e,children:d(e.children)},String(n))}},42365:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/jwt-49a83901a587794e24b4684fc0a089b2.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var i=t(96540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c6c17076.d07d2dbd.js b/assets/js/c6c17076.d07d2dbd.js new file mode 100644 index 00000000000..5545f1b816f --- /dev/null +++ b/assets/js/c6c17076.d07d2dbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8546],{38057:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var s=i(74848),o=i(28453);const t={title:"Onchain permissioning",description:"Onchain permissioning",sidebar_position:1,tags:["private networks"]},r="Onchain permissioning",c={id:"private-networks/concepts/permissioning/onchain",title:"Onchain permissioning",description:"Onchain permissioning",source:"@site/docs/private-networks/concepts/permissioning/onchain.md",sourceDirName:"private-networks/concepts/permissioning",slug:"/private-networks/concepts/permissioning/onchain",permalink:"/private-networks/concepts/permissioning/onchain",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/permissioning/onchain.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Onchain permissioning",description:"Onchain permissioning",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Permissioning",permalink:"/private-networks/concepts/permissioning/"},next:{title:"Permissioning plugin",permalink:"/private-networks/concepts/permissioning/plugin"}},a={},l=[{value:"Permissioning contracts",id:"permissioning-contracts",level:2},{value:"Allowlists",id:"allowlists",level:3},{value:"Bootnodes",id:"bootnodes",level:2}];function d(n){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"onchain-permissioning",children:"Onchain permissioning"})}),"\n",(0,s.jsxs)(e.p,{children:["Onchain ",(0,s.jsx)(e.a,{href:"/private-networks/concepts/permissioning/",children:"permissioning"})," uses smart contracts to store and administer the node, account, and admin allowlists. Using onchain permissioning enables all nodes to read the allowlists from a single source, the blockchain."]}),"\n",(0,s.jsx)(e.admonition,{type:"danger",children:(0,s.jsx)(e.p,{children:"When using onchain account permissioning, a node checks permissions when importing blocks. Meaning, a node only imports blocks in which all transactions are from authorized senders. If you disable onchain account permissioning and your node accepts blocks without enforcing this rule, your node cannot re-synchronize with other nodes that enforce onchain account permissioning rules (your node goes into forked state)."})}),"\n",(0,s.jsx)(e.admonition,{type:"note",children:(0,s.jsx)(e.p,{children:"Custom smart contracts and dapps can be implemented to work with onchain permissioning."})}),"\n",(0,s.jsx)(e.h2,{id:"permissioning-contracts",children:"Permissioning contracts"}),"\n",(0,s.jsx)(e.admonition,{type:"caution",children:(0,s.jsxs)(e.p,{children:["The permissioning contract has multiple interfaces, and each interface maps to a specific version of the ",(0,s.jsx)(e.a,{href:"https://entethalliance.org/technical-specifications/",children:"Enterprise Ethereum Alliance Client Specification"}),". Ensure that you ",(0,s.jsx)(e.a,{href:"/private-networks/how-to/use-permissioning/onchain#specify-the-permissioning-contract-interface-version",children:"specify the permissioning contract interface"})," being used when starting Besu."]})}),"\n",(0,s.jsx)(e.h3,{id:"allowlists",children:"Allowlists"}),"\n",(0,s.jsx)(e.p,{children:"Permissioning implements three allowlists:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Accounts, which can submit transactions to the network."}),"\n",(0,s.jsx)(e.li,{children:"Nodes, which can join the network."}),"\n",(0,s.jsx)(e.li,{children:"Admins, which are accounts able to update the accounts and nodes allowlists."}),"\n"]}),"\n",(0,s.jsxs)(e.admonition,{title:"Using account permissioning and privacy",type:"caution",children:[(0,s.jsxs)(e.p,{children:["Account permissioning is incompatible with ",(0,s.jsx)(e.a,{href:"/private-networks/how-to/use-privacy/sign-pmts",children:"random key signing"})," for ",(0,s.jsx)(e.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transactions"}),"."]}),(0,s.jsxs)(e.p,{children:["If using account permissioning and privacy, a signing key must be specified using the ",(0,s.jsx)(e.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,s.jsx)(e.code,{children:"--privacy-marker-transaction-signing-key-file"})})," command line option and the corresponding public key included in the accounts allowlist."]})]}),"\n",(0,s.jsxs)(e.admonition,{type:"tip",children:[(0,s.jsxs)(e.p,{children:["If nodes are not connecting as expected, set the ",(0,s.jsxs)(e.a,{href:"/public-networks/reference/cli/options#logging",children:["log level to ",(0,s.jsx)(e.code,{children:"TRACE"})]})," and search for messages containing ",(0,s.jsx)(e.code,{children:"Node permissioning"})," to identify the issue."]}),(0,s.jsxs)(e.p,{children:["Ensure the ",(0,s.jsx)(e.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,s.jsx)(e.code,{children:"--p2p-host"})})," command line option has been correctly configured for all nodes with the externally accessible address."]}),(0,s.jsx)(e.p,{children:"If you change your network configuration, you may need to update the node allowlist."})]}),"\n",(0,s.jsx)(e.h2,{id:"bootnodes",children:"Bootnodes"}),"\n",(0,s.jsxs)(e.p,{children:["When a node joins the network, the node connects to the ",(0,s.jsx)(e.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"})," until it synchronizes to the chain head, regardless of node permissions. After synchronization, the Account Rules and Node Rules smart contracts apply the permissioning rules."]}),"\n",(0,s.jsx)(e.p,{children:"If a synchronized node loses all peer connections (that is, it has zero peers), it reconnects to the bootnodes to rediscover peers."}),"\n",(0,s.jsx)(e.admonition,{type:"info",children:(0,s.jsx)(e.p,{children:"All bootnodes must be on the nodes allowlist."})})]})}function h(n={}){const{wrapper:e}={...(0,o.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(d,{...n})}):d(n)}},28453:(n,e,i)=>{i.d(e,{R:()=>r,x:()=>c});var s=i(96540);const o={},t=s.createContext(o);function r(n){const e=s.useContext(t);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:r(n.components),s.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8cab34c.2e679808.js b/assets/js/c8cab34c.2e679808.js new file mode 100644 index 00000000000..48834f12e3d --- /dev/null +++ b/assets/js/c8cab34c.2e679808.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2180],{11070:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var s=r(74848),n=r(28453);const i={title:"Private network API objects",sidebar_position:2,description:"Besu private network API objects reference",tags:["private networks"]},c="Private network API objects",d={id:"private-networks/reference/api/objects",title:"Private network API objects",description:"Besu private network API objects reference",source:"@site/docs/private-networks/reference/api/objects.md",sourceDirName:"private-networks/reference/api",slug:"/private-networks/reference/api/objects",permalink:"/private-networks/reference/api/objects",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/api/objects.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Private network API objects",sidebar_position:2,description:"Besu private network API objects reference",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Private network API methods",permalink:"/private-networks/reference/api/"},next:{title:"Accounts for testing",permalink:"/private-networks/reference/accounts-for-testing"}},l={},a=[{value:"Private transaction object",id:"private-transaction-object",level:2},{value:"Private transaction receipt object",id:"private-transaction-receipt-object",level:2}];function o(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"private-network-api-objects",children:"Private network API objects"})}),"\n",(0,s.jsx)(t.p,{children:"The following objects are parameters for or returned by Besu private network API methods."}),"\n",(0,s.jsx)(t.admonition,{title:"Important",type:"caution",children:(0,s.jsxs)(t.p,{children:["This reference contains API objects that apply to only private networks. For API objects that apply to both private and public networks, see the ",(0,s.jsx)(t.a,{href:"/public-networks/reference/api/objects",children:"public network API objects reference"}),"."]})}),"\n",(0,s.jsx)(t.h2,{id:"private-transaction-object",children:"Private transaction object"}),"\n",(0,s.jsxs)(t.p,{children:["Returned by ",(0,s.jsx)(t.a,{href:"/private-networks/reference/api/#priv_getprivatetransaction",children:(0,s.jsx)(t.code,{children:"priv_getPrivateTransaction"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"from"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,s.jsx)(t.td,{children:"Address of the sender."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"gas"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsx)(t.td,{children:"Gas provided by the sender."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"gasPrice"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsx)(t.td,{children:"Gas price, in Wei, provided by the sender."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"input"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,s.jsx)(t.td,{children:"The data to create or invoke a contract."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"nonce"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsx)(t.td,{children:"Number of transactions made by the sender to the privacy group before this one."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"to"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"null"})," if a contract creation transaction, otherwise, the contract address."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"value"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"null"})," because private transactions cannot transfer Ether."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"v"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsx)(t.td,{children:"ECDSA Recovery ID."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"r"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsx)(t.td,{children:"ECDSA signature r."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"s"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsx)(t.td,{children:"ECDSA signature s."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"privateFrom"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public key of the sender."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"privateFor"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Array of Data, 32\xa0bytes each"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public keys of recipients. Not returned if using ",(0,s.jsx)(t.code,{children:"privacyGroupId"})," to ",(0,s.jsx)(t.a,{href:"/private-networks/concepts/privacy/privacy-groups#privacy-types",children:"send the transaction"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"privacyGroupId"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," privacy group ID of recipients. Not returned if using ",(0,s.jsx)(t.code,{children:"privateFor"})," to ",(0,s.jsx)(t.a,{href:"/private-networks/concepts/privacy/privacy-groups#privacy-types",children:"send the transaction"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"restriction"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,s.jsxs)(t.td,{children:["Must be ",(0,s.jsx)(t.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:(0,s.jsx)(t.code,{children:"restricted"})}),"."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"private-transaction-receipt-object",children:"Private transaction receipt object"}),"\n",(0,s.jsxs)(t.p,{children:["Returned by ",(0,s.jsx)(t.a,{href:"/private-networks/reference/api/#priv_gettransactionreceipt",children:(0,s.jsx)(t.code,{children:"priv_getTransactionReceipt"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Key"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Type"}),(0,s.jsx)(t.th,{children:"Value"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"blockHash"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsx)(t.td,{children:"Hash of block containing this transaction."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"blockNumber"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsx)(t.td,{children:"Block number of block containing this transaction."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"contractAddress"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,s.jsxs)(t.td,{children:["Contract address created if a contract creation transaction, otherwise, ",(0,s.jsx)(t.code,{children:"null"}),". A failed contract creation transaction still produces a contract address value."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"from"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,s.jsx)(t.td,{children:"Address of the sender."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"logs"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Array"}),(0,s.jsxs)(t.td,{children:["Array of ",(0,s.jsx)(t.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"})," generated by this private transaction."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"to"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 20\xa0bytes"}),(0,s.jsx)(t.td,{children:"Address of the receiver, if sending ether, otherwise, null."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"transactionIndex"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity, Integer"}),(0,s.jsx)(t.td,{children:"Index position of transaction in the block."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"revertReason"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"String"}),(0,s.jsxs)(t.td,{children:["ABI-encoded string that displays the ",(0,s.jsx)(t.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"reason for reverting the transaction"}),". Only available if revert reason is ",(0,s.jsx)(t.a,{href:"/private-networks/reference/cli/options#revert-reason-enabled",children:"enabled"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"output"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data"}),(0,s.jsxs)(t.td,{children:["RLP-encoded return value of a contract call if a value returns, otherwise, ",(0,s.jsx)(t.code,{children:"null"}),"."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"commitmentHash"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsx)(t.td,{children:"Hash of the privacy marker transaction."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"status"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Quantity"}),(0,s.jsxs)(t.td,{children:["Either ",(0,s.jsx)(t.code,{children:"0x1"})," (success) or ",(0,s.jsx)(t.code,{children:"0x0"})," (failure)."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"privateFrom"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 32\xa0bytes"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public key of the sender."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"privateFor"})," or ",(0,s.jsx)(t.code,{children:"privacyGroupId"})]}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Array or Data, 32\xa0bytes"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public keys or privacy group ID of the recipients."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"logsBloom"})}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Data, 256\xa0bytes"}),(0,s.jsx)(t.td,{children:"Bloom filter for light clients to quickly retrieve related logs."})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>c,x:()=>d});var s=r(96540);const n={},i=s.createContext(n);function c(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca90dbf4.78a640a1.js b/assets/js/ca90dbf4.78a640a1.js new file mode 100644 index 00000000000..003ebda99aa --- /dev/null +++ b/assets/js/ca90dbf4.78a640a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2080],{78769:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var o=i(74848),s=i(28453);const t={title:"Configure Besu",description:"Specify options in the Besu configuration file.",sidebar_position:1,tags:["public networks","private networks"]},r="Configure Besu",c={id:"public-networks/how-to/configure-besu/index",title:"Configure Besu",description:"Specify options in the Besu configuration file.",source:"@site/docs/public-networks/how-to/configure-besu/index.md",sourceDirName:"public-networks/how-to/configure-besu",slug:"/public-networks/how-to/configure-besu/",permalink:"/public-networks/how-to/configure-besu/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-besu/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Configure Besu",description:"Specify options in the Besu configuration file.",sidebar_position:1,tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"How to",permalink:"/public-networks/how-to"},next:{title:"Use a profile",permalink:"/public-networks/how-to/configure-besu/profile"}},l={},d=[{value:"Configuration order of precedence",id:"configuration-order-of-precedence",level:2},{value:"TOML configuration file",id:"toml-configuration-file",level:2},{value:"Default configuration",id:"default-configuration",level:2},{value:"Peering",id:"peering",level:3},{value:"Storage",id:"storage",level:3},{value:"Sync",id:"sync",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"configure-besu",children:"Configure Besu"})}),"\n",(0,o.jsxs)(n.p,{children:["Besu comes with a ",(0,o.jsx)(n.a,{href:"#default-configuration",children:"default configuration"})," that is suitable for staking."]}),"\n",(0,o.jsxs)(n.p,{children:["You can override the default values by specifying ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"configuration options"})," on the command line, as environment variables, or in a ",(0,o.jsx)(n.a,{href:"#toml-configuration-file",children:"TOML configuration file"})," that can be reused across node startups."]}),"\n",(0,o.jsxs)(n.p,{children:["You can also use a ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile",children:"pre-configured profile"})," for some common use cases or create and apply a ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#load-external-profiles",children:"custom profile"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"configuration-order-of-precedence",children:"Configuration order of precedence"}),"\n",(0,o.jsx)(n.p,{children:"For options specified in multiple places, the order of precedence is as follows:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Command line"}),"\n",(0,o.jsx)(n.li,{children:"Environment variable"}),"\n",(0,o.jsxs)(n.li,{children:["Configuration file specified by ",(0,o.jsx)(n.code,{children:"--config-file"})]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile",children:"Pre-configured profile"})," specified by ",(0,o.jsx)(n.code,{children:"--profile"})]}),"\n",(0,o.jsx)(n.li,{children:"Default values (used if no other configuration source is available)"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["For example, if you specify a ",(0,o.jsx)(n.code,{children:"config.toml"})," configuration file and ",(0,o.jsx)(n.code,{children:"staker"})," profile, and an option\nis not found in the environment variables, Besu looks for it in ",(0,o.jsx)(n.code,{children:"config.toml"}),".\nIf the option is not found in ",(0,o.jsx)(n.code,{children:"config.toml"}),", Besu looks for it in ",(0,o.jsx)(n.code,{children:"staker.toml"}),".\nIf the option is not found in ",(0,o.jsx)(n.code,{children:"staker.toml"}),", Besu uses the default value for that option."]}),"\n",(0,o.jsx)(n.h2,{id:"toml-configuration-file",children:"TOML configuration file"}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["The configuration file is used for node-level settings. You can specify network-wide settings in the ",(0,o.jsx)(n.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),"."]})}),"\n",(0,o.jsxs)(n.p,{children:["Specify the configuration file using the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#config-file",children:(0,o.jsx)(n.code,{children:"--config-file"})})," option.\nThe configuration file must be a valid TOML file composed of key/value pairs. Each key is the same as the corresponding command line option name without the leading dashes (",(0,o.jsx)(n.code,{children:"--"}),")."]}),"\n",(0,o.jsx)(n.p,{children:"Values must conform to TOML specifications for string, numbers, arrays, and booleans. Specific differences between the command line and the TOML file format are:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Comma-separated lists on the command line are string arrays in the TOML file."}),"\n",(0,o.jsxs)(n.li,{children:["Enclose file paths, hexadecimal numbers, URLs, and <host",":port","> values in quotes."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Table headings are ignored in TOML files. If you specify a valid Besu option under a table heading in the configuration file, Besu ignores the table heading and reads the option in the same way it does for options not under table headings."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"command line reference"})," includes configuration file examples for each option."]})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-toml",metastring:'title="Sample TOML configuration file"',children:'# Valid TOML config file\ndata-path="~/besudata" # Path\n\n# Network\nbootnodes=["enode://001@123:4567", "enode://002@123:4567", "enode://003@123:4567"]\n\np2p-host="1.2.3.4"\np2p-port=1234\nmax-peers=42\n\nrpc-http-host="5.6.7.8"\nrpc-http-port=5678\n\nrpc-ws-host="9.10.11.12"\nrpc-ws-port=9101\n\n# Chain\ngenesis-file="~/genesis.json" # Path to the custom genesis file\n\n# Mining\nminer-enabled=true\nminer-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"\n'})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",metastring:'title="Starting Besu with a configuration file"',children:"besu --config-file=/home/me/me_node/config.toml\n"})}),"\n",(0,o.jsx)(n.h2,{id:"default-configuration",children:"Default configuration"}),"\n",(0,o.jsxs)(n.p,{children:["The following tables describe important default values of Besu's configuration.\nWhen using the default configuration, Besu is optimized for staking.\nYou can extend these defaults using a ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile",children:"profile"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["For example, extending the default configuration using the ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#staker-profile",children:"staker profile"})," directs Besu to use Mainnet, creating a staking-optimized node ready to run with a ",(0,o.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"validator and consensus client"}),"."]}),"\n",(0,o.jsx)(n.h3,{id:"peering",children:"Peering"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Configuration option"}),(0,o.jsx)(n.th,{children:"Default"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#discovery-enabled",children:(0,o.jsx)(n.code,{children:"discovery-enabled"})})}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"true"})}),(0,o.jsx)(n.td,{children:"Besu assumes the node will automatically discover other Ethereum nodes using P2P."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-enabled",children:(0,o.jsx)(n.code,{children:"p2p-enabled"})})}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"true"})}),(0,o.jsx)(n.td,{children:"Besu assumes the node will connect P2P."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-rpc-enabled",children:(0,o.jsx)(n.code,{children:"engine-rpc-enabled"})})}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"true"})}),(0,o.jsx)(n.td,{children:"Besu assumes the Engine API will be required to communicate with the consensus layer."})]})]})]}),"\n",(0,o.jsx)(n.h3,{id:"storage",children:"Storage"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Configuration option"}),(0,o.jsx)(n.th,{children:"Default"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,o.jsx)(n.code,{children:"data-storage-format"})})}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"BONSAI"})}),(0,o.jsxs)(n.td,{children:["Besu uses ",(0,o.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"}),", the most space-efficient data storage format."]})]})})]}),"\n",(0,o.jsx)(n.h3,{id:"sync",children:"Sync"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Configuration option"}),(0,o.jsx)(n.th,{children:"Default"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,o.jsx)(n.code,{children:"sync-mode"})})}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.code,{children:"SNAP"})}),(0,o.jsxs)(n.td,{children:["Besu syncs using ",(0,o.jsx)(n.a,{href:"/public-networks/get-started/connect/sync-node#snap-synchronization",children:"snap sync"}),", the most time-efficient sync method."]})]})})]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["You can see all default configuration values in the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"configuration options reference"}),"."]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>c});var o=i(96540);const s={},t=o.createContext(s);function r(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cdbaa4c0.6b1c2e3e.js b/assets/js/cdbaa4c0.6b1c2e3e.js new file mode 100644 index 00000000000..f41754c2180 --- /dev/null +++ b/assets/js/cdbaa4c0.6b1c2e3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1207],{43422:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var n=t(74848),s=t(28453);const r={title:"Use EVM tool",sidebar_position:1,description:"Besu EVM tool",tags:["public networks","private networks"]},i="Use the EVM tool",l={id:"public-networks/how-to/troubleshoot/evm-tool",title:"Use EVM tool",description:"Besu EVM tool",source:"@site/docs/public-networks/how-to/troubleshoot/evm-tool.md",sourceDirName:"public-networks/how-to/troubleshoot",slug:"/public-networks/how-to/troubleshoot/evm-tool",permalink:"/public-networks/how-to/troubleshoot/evm-tool",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/troubleshoot/evm-tool.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use EVM tool",sidebar_position:1,description:"Besu EVM tool",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Reduce storage for Bonsai Tries",permalink:"/public-networks/how-to/bonsai-limit-trie-logs"},next:{title:"Trace transactions",permalink:"/public-networks/how-to/troubleshoot/trace-transactions"}},c={},a=[{value:"Get the EVM tool",id:"get-the-evm-tool",level:2},{value:"Build from source",id:"build-from-source",level:3},{value:"Execute with Docker",id:"execute-with-docker",level:3},{value:"EVM tool options",id:"evm-tool-options",level:2}];function d(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.header,{children:(0,n.jsx)(o.h1,{id:"use-the-evm-tool",children:"Use the EVM tool"})}),"\n",(0,n.jsx)(o.p,{children:"The Besu EVM tool is a CLI program that executes arbitrary EVM programs and Ethereum State Tests\noutside the context of an operating node.\nUse the EVM tool for benchmarking and fuzz testing."}),"\n",(0,n.jsx)(o.h2,{id:"get-the-evm-tool",children:"Get the EVM tool"}),"\n",(0,n.jsxs)(o.p,{children:["The EVM tool is part of the standard ",(0,n.jsx)(o.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu binary distribution"}),"."]}),"\n",(0,n.jsx)(o.h3,{id:"build-from-source",children:"Build from source"}),"\n",(0,n.jsx)(o.p,{children:"To build from source, run the following from the root of the Besu repository:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"./gradlew :ethereum:evmTool:installDist\n"})}),"\n",(0,n.jsxs)(o.p,{children:["An extractable archive files is created in ",(0,n.jsx)(o.code,{children:"ethereum/evmtool/build/distributions"})," and an executable\ninstallation in ",(0,n.jsx)(o.code,{children:"ethereum/evmtool/build/install/evmtool"}),"."]}),"\n",(0,n.jsx)(o.p,{children:"Execute the EVM tool:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"ethereum/evmtool/build/install/evmtool/bin/evmtool <evmtool options>\n"})}),"\n",(0,n.jsx)(o.h3,{id:"execute-with-docker",children:"Execute with Docker"}),"\n",(0,n.jsx)(o.p,{children:"To run the Besu EVM tool in a container:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"docker run -rm <docker options> hyperledger/besu-evmtool:develop <evmtool options>\n"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:["Because no data is stored in local directories we recommended using the ",(0,n.jsx)(o.code,{children:"-rm"})," docker option.\nThe ",(0,n.jsx)(o.code,{children:"-rm"})," option deletes the container at the end of execution."]}),"\n",(0,n.jsxs)(o.li,{children:["If you use an option that requires input from standard in, use the ",(0,n.jsx)(o.code,{children:"-i"})," docker option.\nThe ",(0,n.jsx)(o.code,{children:"-i"})," option pipes standard input to the EVM tool."]}),"\n",(0,n.jsxs)(o.li,{children:["If you need to reference files we recommend using a docker file binding, such as\n",(0,n.jsx)(o.code,{children:"-v ${PWD}:/opt/data"}),", which maps the current directory to the ",(0,n.jsx)(o.code,{children:"/opt/data"})," directory in the container."]}),"\n"]}),"\n",(0,n.jsx)(o.admonition,{type:"note",children:(0,n.jsxs)(o.p,{children:["The ",(0,n.jsx)(o.code,{children:"latest"})," tag is the latest released version of Besu.\nThe ",(0,n.jsx)(o.code,{children:"develop"})," tag is the current main branch code that will go into a future release version of Besu."]})}),"\n",(0,n.jsx)(o.h2,{id:"evm-tool-options",children:"EVM tool options"}),"\n",(0,n.jsxs)(o.p,{children:["The first mode of the EVM tool runs arbitrary EVM bytecode.\nUse ",(0,n.jsx)(o.a,{href:"/public-networks/reference/evm-tool#options",children:"command line options"})," to specify the code and other\ncontextual information.\nFor example:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-bash",children:"evmtool --code=5B600080808060045AFA50600056\n"})}),"\n",(0,n.jsxs)(o.p,{children:["The EVM tool also has ",(0,n.jsx)(o.a,{href:"/public-networks/reference/evm-tool#subcommands",children:"subcommands"})," used for testing code bases.\nThese subcommands are not meant for typical user interactions."]})]})}function h(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>i,x:()=>l});var n=t(96540);const s={},r=n.createContext(s);function i(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function l(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ce4c8b54.661eac58.js b/assets/js/ce4c8b54.661eac58.js new file mode 100644 index 00000000000..6d2bfd10e3e --- /dev/null +++ b/assets/js/ce4c8b54.661eac58.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8077],{54662:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(74848),t=r(28453);const i={title:"Create a cluster",sidebar_position:2,description:"Create a cluster for deployment",tags:["private networks"]},a="Create a cluster",o={id:"private-networks/tutorials/kubernetes/cluster",title:"Create a cluster",description:"Create a cluster for deployment",source:"@site/docs/private-networks/tutorials/kubernetes/cluster.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/cluster",permalink:"/private-networks/tutorials/kubernetes/cluster",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/cluster.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Create a cluster",sidebar_position:2,description:"Create a cluster for deployment",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Local playground",permalink:"/private-networks/tutorials/kubernetes/playground"},next:{title:"Deploy charts",permalink:"/private-networks/tutorials/kubernetes/charts"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Local Clusters",id:"local-clusters",level:2},{value:"Minikube",id:"minikube",level:3},{value:"kind",id:"kind",level:3},{value:"Rancher",id:"rancher",level:3},{value:"Cloud clusters",id:"cloud-clusters",level:2},{value:"AWS EKS",id:"aws-eks",level:3},{value:"Azure Kubernetes Service",id:"azure-kubernetes-service",level:3}];function d(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"create-a-cluster",children:"Create a cluster"})}),"\n",(0,n.jsxs)(s.p,{children:["You can create a ",(0,n.jsx)(s.a,{href:"#local-clusters",children:"local"})," or ",(0,n.jsx)(s.a,{href:"#cloud-clusters",children:"cloud"})," cluster to deploy a Besu network using Kubernetes."]}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Clone the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository"]}),"\n",(0,n.jsxs)(s.li,{children:["Install ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/tasks/tools/",children:"Kubectl"})]}),"\n",(0,n.jsxs)(s.li,{children:["Install ",(0,n.jsx)(s.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm3"})]}),"\n",(0,n.jsxs)(s.li,{children:["Install ",(0,n.jsx)(s.a,{href:"https://aws.amazon.com/cli/",children:"AWS CLI"})," and ",(0,n.jsx)(s.a,{href:"https://eksctl.io/",children:(0,n.jsx)(s.code,{children:"eksctl"})})," for AWS EKS clusters"]}),"\n",(0,n.jsxs)(s.li,{children:["Install ",(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/cli/azure/install-azure-cli",children:"Azure CLI"})," for Azure AKS clusters"]}),"\n",(0,n.jsx)(s.li,{children:"Install the cloud-specific CLI"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"local-clusters",children:"Local Clusters"}),"\n",(0,n.jsx)(s.p,{children:"Use one of several options to create a local cluster. Select one listed below, or another that you're comfortable with."}),"\n",(0,n.jsx)(s.h3,{id:"minikube",children:"Minikube"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"Minikube"})," is one of the most popular options to spin up a local Kubernetes cluster for development. You can ",(0,n.jsx)(s.a,{href:"https://minikube.sigs.k8s.io/docs/start/",children:"install a version"})," based on your architecture."]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsx)(s.p,{children:"We recommend at least 2 CPUs and 16GB of RAM."})}),"\n",(0,n.jsx)(s.p,{children:"To start the cluster, run the following command:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"minikube start --cpus 2 --memory 16384 --cni auto\n"})}),"\n",(0,n.jsx)(s.h3,{id:"kind",children:"kind"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://kind.sigs.k8s.io",children:"kind (Kubernetes in Docker)"})," is a lightweight tool for running local Kubernetes clusters. The ",(0,n.jsx)(s.a,{href:"https://kind.sigs.k8s.io/docs/user/quick-start#installation",children:"installation"})," is similar to ",(0,n.jsx)(s.a,{href:"#minikube",children:"Minikube"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"To start the cluster, run the following command:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"kind create cluster\n"})}),"\n",(0,n.jsx)(s.h3,{id:"rancher",children:"Rancher"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://github.com/rancher-sandbox/rancher-desktop/",children:"Rancher"})," is a lightweight open source desktop application for Mac, Windows, and Linux. It provides Kubernetes and container management, and allows you to choose the version of Kubernetes to run."]}),"\n",(0,n.jsx)(s.p,{children:"It can build, push, pull, and run container images. Built container images can be run without needing a registry."}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["The official Docker-CLI is not supported but rather uses ",(0,n.jsx)(s.a,{href:"https://github.com/containerd/nerdctl",children:"nerdctl"})," which is a Docker-CLI compatible tool for containerd, and is automatically installed with Rancher Desktop."]})}),"\n",(0,n.jsxs)(s.admonition,{type:"note",children:[(0,n.jsxs)(s.p,{children:["For Windows, you must ",(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/windows/wsl/install",children:"install Windows Subsystem for Linux (WSL)"})," to install Rancher Desktop."]}),(0,n.jsxs)(s.p,{children:["Refer to the ",(0,n.jsx)(s.a,{href:"https://docs.rancherdesktop.io/",children:"official Rancher Desktop documentation"})," for system requirements and installation instructions."]})]}),"\n",(0,n.jsx)(s.h2,{id:"cloud-clusters",children:"Cloud clusters"}),"\n",(0,n.jsx)(s.h3,{id:"aws-eks",children:"AWS EKS"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://aws.amazon.com/eks/",children:"AWS Elastic Kubernetes Service (AWS EKS)"})," is one of the most popular platforms to deploy Besu."]}),"\n",(0,n.jsxs)(s.p,{children:["To create a cluster in AWS, you must install the ",(0,n.jsx)(s.a,{href:"https://aws.amazon.com/cli/",children:"AWS CLI"})," and ",(0,n.jsx)(s.a,{href:"https://eksctl.io/",children:(0,n.jsx)(s.code,{children:"eksctl"})}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/aws",children:"template"})," comprises the base infrastructure used to build the cluster and other resources in AWS. We also use some native services with the cluster for performance and best practices, these include:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://github.com/aws/amazon-eks-pod-identity-webhook",children:"Pod identities"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html",children:"Secrets Store CSI drivers"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Dynamic storage classes backed by AWS EBS. The ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims",children:"volume claims"})," are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://docs.aws.amazon.com/eks/latest/userguide/pod-networking.html",children:"CNI"})," networking mode for EKS. By default, EKS clusters use ",(0,n.jsx)(s.code,{children:"kubenet"}),' to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address "hidden" behind the node IP.']}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsx)(s.p,{children:"This approach reduces the number of IP addresses that you must reserve in your network space for pods, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or those on another cloud provider)."})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"AWS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. The IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can lead to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster."}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"EKS clusters must not use 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24 for the Kubernetes service address range."})}),"\n",(0,n.jsx)(s.p,{children:"To provision the cluster:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Update ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/aws/templates/cluster.yml",children:"cluster.yml"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Deploy the template:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"eksctl create cluster -f ./templates/cluster.yml\n"})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Your ",(0,n.jsx)(s.code,{children:".kube/config"})," should be connected to the cluster automatically, but if not, run the commands below and replace ",(0,n.jsx)(s.code,{children:"AWS_REGION"})," and ",(0,n.jsx)(s.code,{children:"CLUSTER_NAME"})," with details that are specific to your deployment."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"aws sts get-caller-identity\naws eks --region AWS_REGION update-kubeconfig --name CLUSTER_NAME\n"})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["After the deployment completes, provision the EBS drivers for the volumes. While it is possible to use the in-tree ",(0,n.jsx)(s.code,{children:"aws-ebs"})," driver that's natively supported by Kubernetes, it is no longer being updated and does not support newer EBS features such as the ",(0,n.jsx)(s.a,{href:"https://stackoverflow.com/questions/68359043/whats-the-difference-between-ebs-csi-aws-com-vs-kubernetes-io-aws-ebs-for-provi",children:"cheaper and better gp3 volumes"}),". The ",(0,n.jsx)(s.code,{children:"cluster.yml"})," file (from the steps above) that is included in this folder automatically deploys the cluster with the EBS IAM policies, but you need to install the EBS CSI drivers. This can be done through the AWS Management Console for simplicity, or via a CLI command as below. Replace ",(0,n.jsx)(s.code,{children:"CLUSTER_NAME"}),", ",(0,n.jsx)(s.code,{children:"AWS_REGION"})," and ",(0,n.jsx)(s.code,{children:"AWS_ACCOUNT"})," with details that are specific to your deployment."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster CLUSTER_NAME --region AWS_REGION --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --approve --role-only --role-name AmazonEKS_EBS_CSI_DriverRole\n\neksctl create addon --name aws-ebs-csi-driver --cluster CLUSTER_NAME --region AWS_REGION --service-account-role-arn arn:aws:iam::AWS_ACCOUNT:role/AmazonEKS_EBS_CSI_DriverRole --force\n"})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Once the deployment is completed, provision the Secrets Manager IAM and CSI driver. Use ",(0,n.jsx)(s.code,{children:"besu"})," (or equivalent) for ",(0,n.jsx)(s.code,{children:"NAMESPACE"})," and replace ",(0,n.jsx)(s.code,{children:"CLUSTER_NAME"}),", ",(0,n.jsx)(s.code,{children:"AWS_REGION"})," and ",(0,n.jsx)(s.code,{children:"AWS_ACCOUNT"})," with details that are specific to your deployment."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts\nhelm install --namespace kube-system --create-namespace csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver\nkubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml\n\nPOLICY_ARN=$(aws --region AWS_REGION --query Policy.Arn --output text iam create-policy --policy-name quorum-node-secrets-mgr-policy --policy-document \'{\n "Version": "2012-10-17",\n "Statement": [ {\n "Effect": "Allow",\n "Action": ["secretsmanager:CreateSecret","secretsmanager:UpdateSecret","secretsmanager:DescribeSecret","secretsmanager:GetSecretValue","secretsmanager:PutSecretValue","secretsmanager:ReplicateSecretToRegions","secretsmanager:TagResource"],\n "Resource": ["arn:aws:secretsmanager:AWS_REGION:AWS_ACCOUNT:secret:besu-node-*"]\n } ]\n}\')\n\n# If you have deployed the above policy before, you can acquire its ARN:\nPOLICY_ARN=$(aws iam list-policies --scope Local \\\n--query \'Policies[?PolicyName==`quorum-node-secrets-mgr-policy`].Arn\' \\\n--output text)\n\neksctl create iamserviceaccount --name quorum-node-secrets-sa --namespace NAMESPACE --region=AWS_REGION --cluster CLUSTER_NAME --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts\n'})}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["The above command creates a service account called ",(0,n.jsx)(s.code,{children:"quorum-node-secrets-sa"})," and is preconfigured in the helm charts override ",(0,n.jsx)(s.code,{children:"values.yml"})," files, for ease of use."]})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Optionally, deploy the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/aws/templates/k8s-dashboard",children:"kubernetes dashboard"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["You can now use your cluster and you can deploy ",(0,n.jsx)(s.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"Helm charts"})," to it."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"azure-kubernetes-service",children:"Azure Kubernetes Service"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://azure.microsoft.com/en-us/services/kubernetes-service/",children:"Azure Kubernetes Service (AKS)"})," is another popular cloud platform that you can use to deploy Besu. To create a cluster in Azure, you must install the ",(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/cli/azure/install-azure-cli",children:"Azure CLI"})," and have admin rights on your Azure subscription to enable some preview features on AKS."]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/tree/master/azure",children:"template"})," comprises the base infrastructure used to build the cluster and other resources in Azure. We also make use Azure native services and features after the cluster is created. These include:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity",children:"AAD pod identities"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/azure/key-vault/general/key-vault-integrate-kubernetes",children:"Secrets Store CSI drivers"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Dynamic storage classes backed by Azure Files. The ",(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv",children:"volume claims"})," are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni",children:"CNI"})," networking mode for AKS. By default, AKS clusters use ",(0,n.jsx)(s.code,{children:"kubenet"}),', to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address "hidden" behind the node IP.']}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsx)(s.p,{children:"This approach reduces the number of IP addresses you must reserve in your network space for pods to use, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or other cloud providers)."})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"AKS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. These IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can leads to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster."}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.p,{children:["Please do not create more than one AKS cluster in the same subnet. AKS clusters may not use ",(0,n.jsx)(s.code,{children:"169.254.0.0/16"}),", ",(0,n.jsx)(s.code,{children:"172.30.0.0/16"}),", ",(0,n.jsx)(s.code,{children:"172.31.0.0/16"}),", or ",(0,n.jsx)(s.code,{children:"192.0.2.0/24"})," for the Kubernetes service address range."]})}),"\n",(0,n.jsx)(s.p,{children:"To provision the cluster:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Enable the preview features that allow you to use AKS with CNI, and a managed identity to authenticate and run cluster operations with other services. We also enable ",(0,n.jsx)(s.a,{href:"https://docs.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity",children:"AAD pod identities"})," which use the managed identity. This is in preview, so you must enable this feature by registering the ",(0,n.jsx)(s.code,{children:"EnablePodIdentityPreview"})," feature:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"az feature register --name EnablePodIdentityPreview --namespace Microsoft.ContainerService\n"})}),"\n",(0,n.jsx)(s.p,{children:"This takes a little while and you can check on progress by running:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"az feature list --namespace Microsoft.ContainerService -o table\n"})}),"\n",(0,n.jsx)(s.p,{children:"Install or update your local Azure CLI with preview features:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"az extension add --name aks-preview\naz extension update --name aks-preview\n"})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Create a resource group if you don't already have one:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'az group create --name BesuGroup --location "East US"\n'})}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Deploy the template:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["Navigate to the ",(0,n.jsx)(s.a,{href:"https://portal.azure.com",children:"Azure portal"}),", select ",(0,n.jsx)(s.strong,{children:"+ Create a resource"})," in the upper left corner."]}),"\n",(0,n.jsxs)(s.li,{children:["Search for ",(0,n.jsx)(s.code,{children:"Template deployment (deploy using custom templates)"})," and select ",(0,n.jsx)(s.strong,{children:"Create"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Select ",(0,n.jsx)(s.strong,{children:"Build your own template in the editor"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Remove the contents (JSON) in the editor and paste in the contents of ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/azure/arm/azuredeploy.json",children:(0,n.jsx)(s.code,{children:"azuredeploy.json"})})]}),"\n",(0,n.jsxs)(s.li,{children:["Select ",(0,n.jsx)(s.strong,{children:"Save"}),"."]}),"\n",(0,n.jsx)(s.li,{children:"Input provisioning parameters in the displayed user interface."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:"Provision the drivers:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Run the ",(0,n.jsx)(s.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/azure/scripts/bootstrap.sh",children:"bootstrap"})," script."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Use ",(0,n.jsx)(s.code,{children:"besu"})," for ",(0,n.jsx)(s.code,{children:"AKS_NAMESPACE"}),", and update ",(0,n.jsx)(s.code,{children:"AKS_RESOURCE_GROUP"}),", ",(0,n.jsx)(s.code,{children:"AKS_CLUSTER_NAME"}),", and ",(0,n.jsx)(s.code,{children:"AKS_MANAGED_IDENTITY"})," in the commands below to match your settings and deployed resources from step 3."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'./scripts/bootstrap.sh "AKS_RESOURCE_GROUP" "AKS_CLUSTER_NAME" "AKS_MANAGED_IDENTITY" "AKS_NAMESPACE"\n'})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["You can now use your cluster and you can deploy ",(0,n.jsx)(s.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"Helm charts"})," to it."]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>a,x:()=>o});var n=r(96540);const t={},i=n.createContext(t);function a(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ce515f1b.30380617.js b/assets/js/ce515f1b.30380617.js new file mode 100644 index 00000000000..84de0243f61 --- /dev/null +++ b/assets/js/ce515f1b.30380617.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3677],{27791:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var n=r(74848),s=r(28453);const o={title:"Use the Quorum Explorer",sidebar_position:4,description:"Using the Quorum Explorer on a Kubernetes cluster",tags:["private networks"]},i="Use the Quorum Explorer",a={id:"private-networks/tutorials/kubernetes/quorum-explorer",title:"Use the Quorum Explorer",description:"Using the Quorum Explorer on a Kubernetes cluster",source:"@site/docs/private-networks/tutorials/kubernetes/quorum-explorer.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/quorum-explorer",permalink:"/private-networks/tutorials/kubernetes/quorum-explorer",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/quorum-explorer.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Use the Quorum Explorer",sidebar_position:4,description:"Using the Quorum Explorer on a Kubernetes cluster",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Deploy charts",permalink:"/private-networks/tutorials/kubernetes/charts"},next:{title:"Maintenance",permalink:"/private-networks/tutorials/kubernetes/maintenance"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Deploy the Quorum Explorer helm chart",id:"deploy-the-quorum-explorer-helm-chart",level:2},{value:"Nodes",id:"nodes",level:2},{value:"Validators",id:"validators",level:2},{value:"Explorer",id:"explorer",level:2},{value:"Contracts",id:"contracts",level:2},{value:"Wallet",id:"wallet",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"use-the-quorum-explorer",children:"Use the Quorum Explorer"})}),"\n",(0,n.jsx)(t.p,{children:"You can use the Quorum Explorer on a Kubernetes cluster."}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Clone the ",(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"Quorum-Kubernetes"})," repository"]}),"\n",(0,n.jsxs)(t.li,{children:["A ",(0,n.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/cluster",children:"running Kubernetes cluster"})]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://kubernetes.io/docs/tasks/tools/",children:"Kubectl"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm3"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"Existing network"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"deploy-the-quorum-explorer-helm-chart",children:"Deploy the Quorum Explorer helm chart"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-explorer",children:"Quorum-Explorer"})," as a lightweight blockchain explorer. The Quorum Explorer is ",(0,n.jsx)(t.strong,{children:"not"})," recommended for use in production and is intended for demonstration or development purposes only."]}),"\n",(0,n.jsxs)(t.p,{children:["The explorer can provide an overview over the whole network, such as block information, voting or removing validators from the network, and demonstrates using the ",(0,n.jsx)(t.code,{children:"SimpleStorage"})," smart contract with privacy enabled, and sending transactions between wallets in one interface."]}),"\n",(0,n.jsxs)(t.p,{children:["To use the explorer, update the ",(0,n.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/explorer-besu.yaml",children:"Quorum-Explorer values file"})," with your node details and endpoints, and then ",(0,n.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/charts",children:"deploy"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"nodes",children:"Nodes"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Nodes"})," page provides an overview of the nodes on the network. Select the node you would like to interact with from the drop-down on the top right, and you'll get details of the node, block height, peers, queued transactions etc."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer",src:r(88591).A+"",width:"1917",height:"944"})}),"\n",(0,n.jsx)(t.h2,{id:"validators",children:"Validators"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Validators"})," page simulates a production environment or consortium where each node individually runs API calls to vote to add a validator or remove an existing validator."]}),"\n",(0,n.jsx)(t.p,{children:"When using the buttons to remove, discard pending validators, or proposing a validator, the app sends an API request to the selected node in the drop-down only. To add or remove a validator you need to select a majority of the existing validator pool individually, and perform the vote API call by clicking the button. Each node can call a discard on the voting process during or after the validator has been added."}),"\n",(0,n.jsx)(t.p,{children:"The vote calls made from non-validator nodes have no effect on overall consensus."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer-validators",src:r(72119).A+"",width:"1896",height:"887"})}),"\n",(0,n.jsx)(t.h2,{id:"explorer",children:"Explorer"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Explorer"})," page gives you the latest blocks from the chain and the latest transactions as they occur on the network. In addition, you can search by block number or transaction hash using the respective search bar."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer-explorer",src:r(17079).A+"",width:"1901",height:"889"})}),"\n",(0,n.jsx)(t.h2,{id:"contracts",children:"Contracts"}),"\n",(0,n.jsxs)(t.p,{children:["Use the ",(0,n.jsx)(t.strong,{children:"Contracts"})," page to compile and deploy a smart contract. Currently, the only contract available for deployment through the app is the ",(0,n.jsx)(t.code,{children:"SimpleStorage"})," contract. However, in time, we plan to add more contracts to that view."]}),"\n",(0,n.jsxs)(t.p,{children:["In this example, we deploy from ",(0,n.jsx)(t.code,{children:"member-1"})," and select ",(0,n.jsx)(t.code,{children:"member-1"})," and ",(0,n.jsx)(t.code,{children:"member-3"})," in the ",(0,n.jsx)(t.strong,{children:"Private For"})," multi-select. Then click on ",(0,n.jsx)(t.code,{children:"Compile"})," and ",(0,n.jsx)(t.code,{children:"Deploy"})]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer-contracts-1",src:r(34735).A+"",width:"1890",height:"891"})}),"\n",(0,n.jsxs)(t.p,{children:["Once deployed, you can interact with the contract. As this is a new transaction, select ",(0,n.jsx)(t.code,{children:"member-1"})," and ",(0,n.jsx)(t.code,{children:"member-3"})," in ",(0,n.jsx)(t.strong,{children:"Interact"})," multi-select, and then click on the appropriate method call to ",(0,n.jsx)(t.code,{children:"get"})," or ",(0,n.jsx)(t.code,{children:"set"})," the value at the deployed contract address."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer-contracts-set",src:r(49898).A+"",width:"1899",height:"1042"})}),"\n",(0,n.jsxs)(t.p,{children:["To test the private transaction functionality, select ",(0,n.jsx)(t.code,{children:"member-2"})," from the drop-down on the top right, you'll notice that you are unable to interact with the contract because ",(0,n.jsx)(t.code,{children:"member-2"})," was not part of the transaction. Only ",(0,n.jsx)(t.code,{children:"members-1"})," and ",(0,n.jsx)(t.code,{children:"member-3"})," responds correctly."]}),"\n",(0,n.jsx)(t.h2,{id:"wallet",children:"Wallet"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Wallet"})," page gives you the functionality to send simple ETH transactions between accounts by providing the account's private key, the recipient's address, and transfer amount in Wei."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"k8s-explorer-wallet",src:r(91401).A+"",width:"1918",height:"891"})})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},34735:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-contracts-1-01181eb965e9c78057dc930f48fa2090.png"},49898:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-contracts-set-dbfe4f65b418999410a999147d16df19.png"},17079:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-explorer-443ae4a27618574d082103bcaa740065.png"},72119:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-validators-5bd265d7bd401c159b2852dc84533ecf.png"},91401:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-wallet-e14f1a64b75ae0b133d676ccee8f2ec0.png"},88591:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/kubernetes-explorer-41af1feb005383ef1871e47d4792c3b5.png"},28453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>a});var n=r(96540);const s={},o=n.createContext(s);function i(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf53573e.1cf4a868.js b/assets/js/cf53573e.1cf4a868.js new file mode 100644 index 00000000000..b334a19b54e --- /dev/null +++ b/assets/js/cf53573e.1cf4a868.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7516],{80442:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>b});var n=o(74848),s=o(28453);const r={title:"Chatbot",sidebar_position:10,sidebar_label:"Chatbot",description:"Chatbot",tags:["public networks"]},i="Chatbot",c={id:"public-networks/chatbot",title:"Chatbot",description:"Chatbot",source:"@site/docs/public-networks/chatbot.mdx",sourceDirName:"public-networks",slug:"/public-networks/chatbot",permalink:"/public-networks/chatbot",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/chatbot.mdx",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:10,frontMatter:{title:"Chatbot",sidebar_position:10,sidebar_label:"Chatbot",description:"Chatbot",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Security disclosure policy",permalink:"/public-networks/reference/disclosure"}},a={},b=[];function l(t){const e={h1:"h1",header:"header",...(0,s.R)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"chatbot",children:"Chatbot"})}),"\n",(0,n.jsx)("iframe",{src:"https://docsbot-besu.prd.ai.consensys.io/?embed=true",height:"800",width:"100%"})]})}function u(t={}){const{wrapper:e}={...(0,s.R)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(l,{...t})}):l(t)}},28453:(t,e,o)=>{o.d(e,{R:()=>i,x:()=>c});var n=o(96540);const s={},r=n.createContext(s);function i(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/d13d7343.f36b83d7.js b/assets/js/d13d7343.f36b83d7.js new file mode 100644 index 00000000000..1b7d588c844 --- /dev/null +++ b/assets/js/d13d7343.f36b83d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9222],{67296:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(74848),a=t(28453);const s={title:"Send concurrent private transactions",description:"Creating and sending concurrent private transactions with Besu",sidebar_position:2,tags:["private networks"]},i="Send concurrent private transactions",o={id:"private-networks/how-to/send-transactions/concurrent-private-transactions",title:"Send concurrent private transactions",description:"Creating and sending concurrent private transactions with Besu",source:"@site/docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md",sourceDirName:"private-networks/how-to/send-transactions",slug:"/private-networks/how-to/send-transactions/concurrent-private-transactions",permalink:"/private-networks/how-to/send-transactions/concurrent-private-transactions",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Send concurrent private transactions",description:"Creating and sending concurrent private transactions with Besu",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create and send private transactions",permalink:"/private-networks/how-to/send-transactions/private-transactions"},next:{title:"Include revert reason",permalink:"/private-networks/how-to/send-transactions/revert-reason"}},c={},d=[];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"send-concurrent-private-transactions",children:"Send concurrent private transactions"})}),"\n",(0,r.jsxs)(n.p,{children:["Private transaction processing involves two transactions, the private transaction and the ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction (PMT)"}),". The private transaction and the PMT each have their own ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/#nonces",children:"nonce"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If your private transaction rate requires sending private transactions without waiting for the previous private transaction to be mined, using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,r.jsx)(n.code,{children:"eth_getTransactionCount"})})," and ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eea_sendRawTransaction"})})," may result in ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/#private-nonce-management",children:"incorrect nonces"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["In this case, use ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/private-transactions#priv_distributerawtransaction",children:(0,r.jsx)(n.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["You can use ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#priv_gettransactioncount",children:(0,r.jsx)(n.code,{children:"priv_getTransactionCount"})})," or ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#priv_geteeatransactioncount",children:(0,r.jsx)(n.code,{children:"priv_getEeaTransactionCount"})})," to get the nonce for an account for the specified privacy group or participants."]})}),"\n",(0,r.jsxs)(n.p,{children:["Send the corresponding PMT using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eth_sendRawTransaction"})}),", specifying the public PMT nonce. This method allows you to create and send the PMT yourself rather than ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,r.jsx)(n.code,{children:"eea_sendRawTransaction"})})," handling the PMT."]}),"\n",(0,r.jsxs)(n.admonition,{type:"caution",children:[(0,r.jsxs)(n.p,{children:["When using ",(0,r.jsx)(n.code,{children:"priv_distributeRawTransaction"})," to distribute transactions with consecutive nonces for the same account, the corresponding PMTs must use one account with the nonces in the same order as the private transactions."]}),(0,r.jsx)(n.p,{children:"This is to ensure that the private transactions are executed in the correct order."})]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://github.com/ConsenSys/web3js-quorum/tree/master/example/concurrentPrivateTransactions",children:"web3js-quorum library"})," includes an example of how to send concurrent private transactions. The example uses ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"offchain privacy groups"}),". Use ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#priv_getprivacyprecompileaddress",children:(0,r.jsx)(n.code,{children:"priv_getPrivacyPrecompileAddress"})})," to get the precompile address to specify in the ",(0,r.jsx)(n.code,{children:"to"})," field when creating the PMT."]})})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(96540);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d1f22a5a.9f8374b5.js b/assets/js/d1f22a5a.9f8374b5.js new file mode 100644 index 00000000000..d3181ddeb2f --- /dev/null +++ b/assets/js/d1f22a5a.9f8374b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6271],{24270:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=t(74848),s=t(28453);const o={title:"Use onchain permissioning",sidebar_position:2,description:"Use onchain permissioning allowlists",tags:["private networks"]},r="Use onchain permissioning",a={id:"private-networks/how-to/use-permissioning/onchain",title:"Use onchain permissioning",description:"Use onchain permissioning allowlists",source:"@site/docs/private-networks/how-to/use-permissioning/onchain.md",sourceDirName:"private-networks/how-to/use-permissioning",slug:"/private-networks/how-to/use-permissioning/onchain",permalink:"/private-networks/how-to/use-permissioning/onchain",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-permissioning/onchain.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use onchain permissioning",sidebar_position:2,description:"Use onchain permissioning allowlists",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use local permissioning",permalink:"/private-networks/how-to/use-permissioning/local"},next:{title:"Deploy to the cloud",permalink:"/private-networks/how-to/deploy/cloud"}},c={},d=[{value:"Specify the permissioning contract interface version",id:"specify-the-permissioning-contract-interface-version",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"use-onchain-permissioning",children:"Use onchain permissioning"})}),"\n",(0,i.jsxs)(n.p,{children:["This page contains some extra info if you're using ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain permissioning"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect."})}),"\n",(0,i.jsxs)(n.admonition,{type:"important",children:[(0,i.jsxs)(n.p,{children:["Node allowlists ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/node-keys#domain-name-support",children:"support domain names"})," in enode URLs as an early access feature. Use the ",(0,i.jsx)(n.code,{children:"--Xdns-enabled"})," option to enable domain name support."]}),(0,i.jsxs)(n.p,{children:["If using Kubernetes, enable domain name support and use the ",(0,i.jsx)(n.code,{children:"--Xdns-update-enabled"})," option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes."]})]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you add a running node, the node does not attempt to reconnect to the bootnode and synchronize until peer discovery restarts. To add an allowlisted node as a peer without waiting for peer discovery to restart, use ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#admin_addpeer",children:(0,i.jsx)(n.code,{children:"admin_addPeer"})}),"."]}),(0,i.jsxs)(n.p,{children:["If you add the node to the allowlist before starting the node, using ",(0,i.jsx)(n.code,{children:"admin_addPeer"})," is not required because peer discovery is run on node startup."]})]}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If nodes are not connecting as expected, set the ",(0,i.jsxs)(n.a,{href:"/public-networks/reference/cli/options#logging",children:["log level to ",(0,i.jsx)(n.code,{children:"TRACE"})]})," and search for messages containing ",(0,i.jsx)(n.code,{children:"Node permissioning"})," to identify the issue."]}),(0,i.jsxs)(n.p,{children:["Ensure the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,i.jsx)(n.code,{children:"--p2p-host"})})," command line option has been correctly configured for all nodes with the externally accessible address."]}),(0,i.jsx)(n.p,{children:"If you change your network configuration, you may need to update the node allowlist."})]}),"\n",(0,i.jsx)(n.h2,{id:"specify-the-permissioning-contract-interface-version",children:"Specify the permissioning contract interface version"}),"\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-contract-version",children:(0,i.jsx)(n.code,{children:"--permissions-nodes-contract-version"})})," command line option to specify the version of the ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain#permissioning-contracts",children:"permissioning contract interface"}),". The default is 1."]}),"\n",(0,i.jsxs)(n.p,{children:["Specify the contract interface version that maps to the version of the ",(0,i.jsx)(n.a,{href:"https://entethalliance.org/technical-specifications/",children:"Enterprise Ethereum Alliance Client Specification"})," the contract interface implements."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{style:{textAlign:"left"}}),(0,i.jsx)(n.th,{style:{textAlign:"left"},children:"EEA Client Specification"}),(0,i.jsx)(n.th,{style:{textAlign:"left"},children:"Contract interface"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"Version"}),(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"5"}),(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"1"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"Version"}),(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"6"}),(0,i.jsx)(n.td,{style:{textAlign:"left"},children:"2"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["The permissioning contracts in the ",(0,i.jsx)(n.a,{href:"https://github.com/ConsenSys/permissioning-smart-contracts",children:(0,i.jsx)(n.code,{children:"ConsenSys/permissioning-smart-contracts"})})," repository implement the version 2 contract interface."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(96540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d333d0b1.8068ca24.js b/assets/js/d333d0b1.8068ca24.js new file mode 100644 index 00000000000..2c6e3116192 --- /dev/null +++ b/assets/js/d333d0b1.8068ca24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9489],{28504:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Reference","slug":"public-networks/reference","permalink":"/public-networks/reference","sidebar":"publicDocSidebar","navigation":{"previous":{"title":"Deploy Besu using Kubernetes","permalink":"/public-networks/tutorials/kubernetes"},"next":{"title":"Options","permalink":"/public-networks/reference/cli/options"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/d4c8fb26.65039764.js b/assets/js/d4c8fb26.65039764.js new file mode 100644 index 00000000000..63ebde81b69 --- /dev/null +++ b/assets/js/d4c8fb26.65039764.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5058],{10319:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var i=s(74848),n=s(28453);const a={title:"Use Elastic Stack",sidebar_position:3,description:"Using Elastic Stack (ELK) with Besu",tags:["private networks"]},o="Use Elastic Stack",r={id:"private-networks/how-to/monitor/elastic-stack",title:"Use Elastic Stack",description:"Using Elastic Stack (ELK) with Besu",source:"@site/docs/private-networks/how-to/monitor/elastic-stack.md",sourceDirName:"private-networks/how-to/monitor",slug:"/private-networks/how-to/monitor/elastic-stack",permalink:"/private-networks/how-to/monitor/elastic-stack",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/monitor/elastic-stack.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Use Elastic Stack",sidebar_position:3,description:"Using Elastic Stack (ELK) with Besu",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Grafana Loki",permalink:"/private-networks/how-to/monitor/loki"},next:{title:"Use Quorum Hibernate",permalink:"/private-networks/how-to/monitor/quorum-hibernate"}},c={},l=[];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",img:"img",li:"li",ol:"ol",p:"p",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"use-elastic-stack",children:"Use Elastic Stack"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://www.elastic.co/what-is/elk-stack",children:"Elastic Stack"})," (ELK) is an open-source log management platform that is available when using the ",(0,i.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/common/filebeat/filebeat.yml",children:"Filebeat"})," configuration ingests logs and the ",(0,i.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/common/metricbeat/metricbeat.yml",children:"Metricbeat"})," configuration collects metrics from the nodes at regular defined intervals and outputs them to Redis for storage. Redis provides a highly available mechanism enabling storage by any of the Elastic Beats and pulled by Logstash as required."]}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/common/logstash/pipeline/20_besu.conf",children:"pipeline configuration"})," defines the JSON format used for Besu logs and automatically picks up any new log fields."]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["The pipeline configuration must match the your log format. If using the default log format, you can use the ",(0,i.jsx)(t.a,{href:"https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html",children:"grok plugin"})," to extract the log fields."]})}),"\n",(0,i.jsx)(t.p,{children:"To see the Besu Quickstart network logs in Kibana:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Start the Developer Quickstart with Besu"}),", selecting ELK monitoring."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Open the ",(0,i.jsx)(t.a,{href:"http://localhost:5601/app/kibana#/discover",children:(0,i.jsx)(t.code,{children:"Kibana logs address"})})," listed by the sample networks ",(0,i.jsx)(t.code,{children:"list.sh"})," script. The logs display in Kibana."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Kibana",src:s(33620).A+"",width:"1513",height:"737"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},33620:(e,t,s)=>{s.d(t,{A:()=>i});const i=s.p+"assets/images/KibanaQuickstart-6c27f6f292b9d10869daeddd552aeca0.png"},28453:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>r});var i=s(96540);const n={},a=i.createContext(n);function o(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d78c9adf.670895a9.js b/assets/js/d78c9adf.670895a9.js new file mode 100644 index 00000000000..91aed3d8a08 --- /dev/null +++ b/assets/js/d78c9adf.670895a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6567],{98126:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>o,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>t,toc:()=>h});var n=s(74848),a=s(28453),c=s(11470),l=s(19365);const i={description:"Besu private network JSON-RPC API methods reference",toc_max_heading_level:3,tags:["private networks"]},d="Private network API methods",t={id:"private-networks/reference/api/index",title:"Private network API methods",description:"Besu private network JSON-RPC API methods reference",source:"@site/docs/private-networks/reference/api/index.md",sourceDirName:"private-networks/reference/api",slug:"/private-networks/reference/api/",permalink:"/private-networks/reference/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/api/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Besu private network JSON-RPC API methods reference",toc_max_heading_level:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Private network subcommands",permalink:"/private-networks/reference/cli/subcommands"},next:{title:"Private network API objects",permalink:"/private-networks/reference/api/objects"}},o={},h=[{value:"<code>CLIQUE</code> methods",id:"clique-methods",level:2},{value:"<code>clique_discard</code>",id:"clique_discard",level:3},{value:"Parameters",id:"parameters",level:4},{value:"Returns",id:"returns",level:4},{value:"<code>clique_getSigners</code>",id:"clique_getsigners",level:3},{value:"Parameters",id:"parameters-1",level:4},{value:"Returns",id:"returns-1",level:4},{value:"<code>clique_getSignerMetrics</code>",id:"clique_getsignermetrics",level:3},{value:"Parameters",id:"parameters-2",level:4},{value:"Returns",id:"returns-2",level:4},{value:"<code>clique_getSignersAtHash</code>",id:"clique_getsignersathash",level:3},{value:"Parameters",id:"parameters-3",level:4},{value:"Returns",id:"returns-3",level:4},{value:"<code>clique_proposals</code>",id:"clique_proposals",level:3},{value:"Parameters",id:"parameters-4",level:4},{value:"Returns",id:"returns-4",level:4},{value:"<code>clique_propose</code>",id:"clique_propose",level:3},{value:"Parameters",id:"parameters-5",level:4},{value:"Returns",id:"returns-5",level:4},{value:"<code>EEA</code> methods",id:"eea-methods",level:2},{value:"<code>eea_sendRawTransaction</code>",id:"eea_sendrawtransaction",level:3},{value:"Parameters",id:"parameters-6",level:4},{value:"Returns",id:"returns-6",level:4},{value:"<code>IBFT</code> 2.0 methods",id:"ibft-20-methods",level:2},{value:"<code>ibft_discardValidatorVote</code>",id:"ibft_discardvalidatorvote",level:3},{value:"Parameters",id:"parameters-7",level:4},{value:"Returns",id:"returns-7",level:4},{value:"<code>ibft_getPendingVotes</code>",id:"ibft_getpendingvotes",level:3},{value:"Parameters",id:"parameters-8",level:4},{value:"Returns",id:"returns-8",level:4},{value:"<code>ibft_getSignerMetrics</code>",id:"ibft_getsignermetrics",level:3},{value:"Parameters",id:"parameters-9",level:4},{value:"Returns",id:"returns-9",level:4},{value:"<code>ibft_getValidatorsByBlockHash</code>",id:"ibft_getvalidatorsbyblockhash",level:3},{value:"Parameters",id:"parameters-10",level:4},{value:"Returns",id:"returns-10",level:4},{value:"<code>ibft_getValidatorsByBlockNumber</code>",id:"ibft_getvalidatorsbyblocknumber",level:3},{value:"Parameters",id:"parameters-11",level:4},{value:"Returns",id:"returns-11",level:4},{value:"<code>ibft_proposeValidatorVote</code>",id:"ibft_proposevalidatorvote",level:3},{value:"Parameters",id:"parameters-12",level:4},{value:"Returns",id:"returns-12",level:4},{value:"<code>PERM</code> (Permissioning) methods",id:"perm-permissioning-methods",level:2},{value:"<code>perm_addAccountsToAllowlist</code>",id:"perm_addaccountstoallowlist",level:3},{value:"Parameters",id:"parameters-13",level:4},{value:"Returns",id:"returns-13",level:4},{value:"<code>perm_addNodesToAllowlist</code>",id:"perm_addnodestoallowlist",level:3},{value:"Parameters",id:"parameters-14",level:4},{value:"Returns",id:"returns-14",level:4},{value:"<code>perm_getAccountsAllowlist</code>",id:"perm_getaccountsallowlist",level:3},{value:"Parameters",id:"parameters-15",level:4},{value:"Returns",id:"returns-15",level:4},{value:"<code>perm_getNodesAllowlist</code>",id:"perm_getnodesallowlist",level:3},{value:"Parameters",id:"parameters-16",level:4},{value:"Returns",id:"returns-16",level:4},{value:"<code>perm_reloadPermissionsFromFile</code>",id:"perm_reloadpermissionsfromfile",level:3},{value:"Parameters",id:"parameters-17",level:4},{value:"Returns",id:"returns-17",level:4},{value:"<code>perm_removeAccountsFromAllowlist</code>",id:"perm_removeaccountsfromallowlist",level:3},{value:"Parameters",id:"parameters-18",level:4},{value:"Returns",id:"returns-18",level:4},{value:"<code>perm_removeNodesFromAllowlist</code>",id:"perm_removenodesfromallowlist",level:3},{value:"Parameters",id:"parameters-19",level:4},{value:"Returns",id:"returns-19",level:4},{value:"<code>PRIV</code> methods",id:"priv-methods",level:2},{value:"<code>priv_call</code>",id:"priv_call",level:3},{value:"Parameters",id:"parameters-20",level:4},{value:"Returns",id:"returns-20",level:4},{value:"<code>priv_createPrivacyGroup</code>",id:"priv_createprivacygroup",level:3},{value:"Parameters",id:"parameters-21",level:4},{value:"Returns",id:"returns-21",level:4},{value:"<code>priv_debugGetStateRoot</code>",id:"priv_debuggetstateroot",level:3},{value:"Parameters",id:"parameters-22",level:4},{value:"Returns",id:"returns-22",level:4},{value:"<code>priv_deletePrivacyGroup</code>",id:"priv_deleteprivacygroup",level:3},{value:"Parameters",id:"parameters-23",level:4},{value:"Returns",id:"returns-23",level:4},{value:"<code>priv_distributeRawTransaction</code>",id:"priv_distributerawtransaction",level:3},{value:"Parameters",id:"parameters-24",level:4},{value:"Returns",id:"returns-24",level:4},{value:"<code>priv_findPrivacyGroup</code>",id:"priv_findprivacygroup",level:3},{value:"Parameters",id:"parameters-25",level:4},{value:"Returns",id:"returns-25",level:4},{value:"<code>priv_getCode</code>",id:"priv_getcode",level:3},{value:"Parameters",id:"parameters-26",level:4},{value:"Returns",id:"returns-26",level:4},{value:"<code>priv_getEeaTransactionCount</code>",id:"priv_geteeatransactioncount",level:3},{value:"Parameters",id:"parameters-27",level:4},{value:"Returns",id:"returns-27",level:4},{value:"<code>priv_getFilterChanges</code>",id:"priv_getfilterchanges",level:3},{value:"Parameters",id:"parameters-28",level:4},{value:"Returns",id:"returns-28",level:4},{value:"<code>priv_getFilterLogs</code>",id:"priv_getfilterlogs",level:3},{value:"Parameters",id:"parameters-29",level:4},{value:"Returns",id:"returns-29",level:4},{value:"<code>priv_getLogs</code>",id:"priv_getlogs",level:3},{value:"Parameters",id:"parameters-30",level:4},{value:"Returns",id:"returns-30",level:4},{value:"<code>priv_getPrivacyPrecompileAddress</code>",id:"priv_getprivacyprecompileaddress",level:3},{value:"Parameters",id:"parameters-31",level:4},{value:"Returns",id:"returns-31",level:4},{value:"<code>priv_getPrivateTransaction</code>",id:"priv_getprivatetransaction",level:3},{value:"Parameters",id:"parameters-32",level:4},{value:"Returns",id:"returns-32",level:4},{value:"<code>priv_getTransactionCount</code>",id:"priv_gettransactioncount",level:3},{value:"Parameters",id:"parameters-33",level:4},{value:"Returns",id:"returns-33",level:4},{value:"<code>priv_getTransactionReceipt</code>",id:"priv_gettransactionreceipt",level:3},{value:"Parameters",id:"parameters-34",level:4},{value:"Returns",id:"returns-34",level:4},{value:"<code>priv_newFilter</code>",id:"priv_newfilter",level:3},{value:"Parameters",id:"parameters-35",level:4},{value:"Returns",id:"returns-35",level:4},{value:"<code>priv_traceTransaction</code>",id:"priv_tracetransaction",level:3},{value:"Parameters",id:"parameters-36",level:4},{value:"Returns",id:"returns-36",level:4},{value:"<code>priv_uninstallFilter</code>",id:"priv_uninstallfilter",level:3},{value:"Parameters",id:"parameters-37",level:4},{value:"Returns",id:"returns-37",level:4},{value:"<code>QBFT</code> methods",id:"qbft-methods",level:2},{value:"<code>qbft_discardValidatorVote</code>",id:"qbft_discardvalidatorvote",level:3},{value:"Parameters",id:"parameters-38",level:4},{value:"Returns",id:"returns-38",level:4},{value:"<code>qbft_getPendingVotes</code>",id:"qbft_getpendingvotes",level:3},{value:"Parameters",id:"parameters-39",level:4},{value:"Returns",id:"returns-39",level:4},{value:"<code>qbft_getSignerMetrics</code>",id:"qbft_getsignermetrics",level:3},{value:"Parameters",id:"parameters-40",level:4},{value:"Returns",id:"returns-40",level:4},{value:"<code>qbft_getValidatorsByBlockHash</code>",id:"qbft_getvalidatorsbyblockhash",level:3},{value:"Parameters",id:"parameters-41",level:4},{value:"Returns",id:"returns-41",level:4},{value:"<code>qbft_getValidatorsByBlockNumber</code>",id:"qbft_getvalidatorsbyblocknumber",level:3},{value:"Parameters",id:"parameters-42",level:4},{value:"Returns",id:"returns-42",level:4},{value:"<code>qbft_proposeValidatorVote</code>",id:"qbft_proposevalidatorvote",level:3},{value:"Parameters",id:"parameters-43",level:4},{value:"Returns",id:"returns-43",level:4}];function p(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"private-network-api-methods",children:"Private network API methods"})}),"\n",(0,n.jsx)(r.admonition,{title:"Important",type:"caution",children:(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["This reference contains API methods that apply to only private networks. For API methods that apply to both private and public networks, see the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/",children:"public network API reference"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["All JSON-RPC HTTP examples use the default host and port endpoint ",(0,n.jsx)(r.code,{children:"http://127.0.0.1:8545"}),". If using the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:"--rpc-http-host"})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:"--rpc-http-port"})," options, update the endpoint."]}),"\n"]})}),"\n",(0,n.jsxs)(r.h2,{id:"clique-methods",children:[(0,n.jsx)(r.code,{children:"CLIQUE"})," methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"CLIQUE"})," API methods provide access to the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"})," consensus engine."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"CLIQUE"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"CLIQUE"})," API methods use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,n.jsx)(r.h3,{id:"clique_discard",children:(0,n.jsx)(r.code,{children:"clique_discard"})}),"\n",(0,n.jsxs)(r.p,{children:["Discards a proposal to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/clique#add-and-remove-signers",children:"add or remove a signer with the specified address"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 20-byte address of proposed signer"]}),"\n",(0,n.jsx)(r.h4,{id:"returns",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - indicates if the proposal is discarded"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"clique_getsigners",children:(0,n.jsx)(r.code,{children:"clique_getSigners"})}),"\n",(0,n.jsxs)(r.p,{children:["Lists ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/clique#adding-and-removing-signers",children:"signers for the specified block"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-1",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"returns-1",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"string"})," - list of 20-byte addresses of signers"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc" : "2.0",\n "id" : 1,\n "result" : [ "0x42eb768f2244c8811c63729a21a3569731535f06", "0x7ffc57839b00206d1ad20c69a1981b489f772031", "0xb279182d99e65703f0076e4812653aab85fca0f0" ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"clique_getsignermetrics",children:(0,n.jsx)(r.code,{children:"clique_getSignerMetrics"})}),"\n",(0,n.jsx)(r.p,{children:"Provides the following validator metrics for the specified range:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Number of blocks from each validator"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Block number of the last block proposed by each validator (if any proposed in the specified range)"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"All validators present in the last block"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-2",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"fromBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one\nof the string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"toBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.p,{children:"If you specify:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks."}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-2",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of validator objects"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The proposer of the genesis block has address ",(0,n.jsx)(r.code,{children:"0x0000000000000000000000000000000000000000"}),"."]})}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x61"\n },\n {\n "address": "0x42eb768f2244c8811c63729a21a3569731535f06",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x63"\n },\n {\n "address": "0xb279182d99e65703f0076e4812653aab85fca0f0",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x62"\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"clique_getsignersathash",children:(0,n.jsx)(r.code,{children:"clique_getSignersAtHash"})}),"\n",(0,n.jsx)(r.p,{children:"Lists signers for the specified block."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-3",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"hash"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-3",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"string"})," - list of 20-byte addresses of signers"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x42eb768f2244c8811c63729a21a3569731535f06",\n "0x7ffc57839b00206d1ad20c69a1981b489f772031",\n "0xb279182d99e65703f0076e4812653aab85fca0f0"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"clique_proposals",children:(0,n.jsx)(r.code,{children:"clique_proposals"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/clique#add-and-remove-signers",children:"current proposals"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-4",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-4",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"map"})," of ",(0,n.jsx)(r.em,{children:"strings"})," to ",(0,n.jsx)(r.em,{children:"booleans"})," - map of account addresses to corresponding boolean values indicating the proposal for each account (if ",(0,n.jsx)(r.code,{children:"true"}),", the proposal is to add a signer; if ",(0,n.jsx)(r.code,{children:"false"}),", the proposal is to remove a signer.)"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "0x42eb768f2244c8811c63729a21a3569731535f07": false,\n "0x12eb759f2222d7711c63729a45c3585731521d01": true\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"clique_propose",children:(0,n.jsx)(r.code,{children:"clique_propose"})}),"\n",(0,n.jsxs)(r.p,{children:["Proposes to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/clique#add-and-remove-signers",children:"add or remove a signer with the specified address"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-5",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 20-byte address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"proposal"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})," to propose adding signer or ",(0,n.jsx)(r.code,{children:"false"})," to propose removing signer"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-5",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsxs)(r.h2,{id:"eea-methods",children:[(0,n.jsx)(r.code,{children:"EEA"})," methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"EEA"})," API methods provide functionality for ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:"private transactions"})," and ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy groups"}),"."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"EEA"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"EEA"})," API methods, use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,n.jsx)(r.h3,{id:"eea_sendrawtransaction",children:(0,n.jsx)(r.code,{children:"eea_sendRawTransaction"})}),"\n",(0,n.jsxs)(r.p,{children:["Distributes the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:"private transaction"}),", generates the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"})," and submits it to the transaction pool, and returns the transaction hash of the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["The signed transaction passed as an input parameter includes the ",(0,n.jsx)(r.code,{children:"privateFrom"}),", ",(0,n.jsxs)(r.a,{href:"/private-networks/how-to/send-transactions/private-transactions#eea-compliant-or-besu-extended-privacy",children:[(0,n.jsx)(r.code,{children:"privateFor"})," or ",(0,n.jsx)(r.code,{children:"privacyGroupId"})]}),", and ",(0,n.jsx)(r.code,{children:"restriction"})," fields."]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"gas"})," and ",(0,n.jsx)(r.code,{children:"gasPrice"})," are used by the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"})," not the private transaction itself."]}),"\n",(0,n.jsxs)(r.p,{children:["To avoid exposing your private key, create signed transactions offline and send the signed transaction data using ",(0,n.jsx)(r.code,{children:"eea_sendRawTransaction"}),"."]}),"\n",(0,n.jsxs)(r.admonition,{type:"important",children:[(0,n.jsxs)(r.p,{children:["For production systems requiring private transactions, use a network with a consensus mechanism supporting transaction finality to make sure the private state does not become inconsistent with the chain. For example, ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," and ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," provide the required finality."]}),(0,n.jsxs)(r.p,{children:["Using private transactions with ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/data-storage-formats#pruning",children:"pruning"})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#sync-mode",children:"fast sync"})," isn't supported."]})]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-6",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"transaction"}),": ",(0,n.jsx)(r.em,{children:"string"})," - signed RLP-encoded private transaction"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-6",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte transaction hash of the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"})]}),"\n",(0,n.jsx)(r.admonition,{type:"tip",children:(0,n.jsxs)(r.p,{children:["If creating a contract, use ",(0,n.jsx)(r.a,{href:"#priv_gettransactionreceipt",children:"priv_getTransactionReceipt"})," to retrieve the contract address after the transaction is finalized."]})}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "id": 1,\n "jsonrpc": "2.0",\n "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"\n}\n'})})})]}),"\n",(0,n.jsxs)(r.h2,{id:"ibft-20-methods",children:[(0,n.jsx)(r.code,{children:"IBFT"})," 2.0 methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"IBFT"})," API methods provide access to the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"})," consensus engine."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"IBFT"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"IBFT"})," API methods, use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,n.jsx)(r.h3,{id:"ibft_discardvalidatorvote",children:(0,n.jsx)(r.code,{children:"ibft_discardValidatorVote"})}),"\n",(0,n.jsxs)(r.p,{children:["Discards a proposal to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"add or remove a validator"})," with the specified address."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-7",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 20-byte address of proposed validator"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-7",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - indicates if the proposal is discarded"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"ibft_getpendingvotes",children:(0,n.jsx)(r.code,{children:"ibft_getPendingVotes"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"votes"})," cast in the current ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"epoch"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-8",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-8",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"map"})," of ",(0,n.jsx)(r.em,{children:"strings"})," to ",(0,n.jsx)(r.em,{children:"booleans"})," - map of account addresses to corresponding boolean values indicating the vote for each account; if ",(0,n.jsx)(r.code,{children:"true"}),", the vote is to add a validator. If ",(0,n.jsx)(r.code,{children:"false"}),", the proposal is to remove a validator."]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true,\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"ibft_getsignermetrics",children:(0,n.jsx)(r.code,{children:"ibft_getSignerMetrics"})}),"\n",(0,n.jsx)(r.p,{children:"Provides the following validator metrics for the specified range:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Number of blocks from each validator"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Block number of the last block proposed by each validator (if any proposed in the specified range)"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"All validators present in the last block of the range"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-9",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"fromBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one\nof the string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"toBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.p,{children:"If you specify:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks."}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-9",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of validator objects"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The proposer of the genesis block has address ",(0,n.jsx)(r.code,{children:"0x0000000000000000000000000000000000000000"}),"."]})}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x61"\n },\n {\n "address": "0x42eb768f2244c8811c63729a21a3569731535f06",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x63"\n },\n {\n "address": "0xb279182d99e65703f0076e4812653aab85fca0f0",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x62"\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"ibft_getvalidatorsbyblockhash",children:(0,n.jsx)(r.code,{children:"ibft_getValidatorsByBlockHash"})}),"\n",(0,n.jsx)(r.p,{children:"Lists the validators defined in the specified block."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-10",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"block"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-10",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of validator addresses"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5",\n "0xb1b2bc9582d2901afdc579f528a35ca41403fa85",\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"ibft_getvalidatorsbyblocknumber",children:(0,n.jsx)(r.code,{children:"ibft_getValidatorsByBlockNumber"})}),"\n",(0,n.jsx)(r.p,{children:"Lists the validators defined in the specified block."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-11",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"returns-11",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of validator addresses"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5",\n "0xb1b2bc9582d2901afdc579f528a35ca41403fa85",\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"ibft_proposevalidatorvote",children:(0,n.jsx)(r.code,{children:"ibft_proposeValidatorVote"})}),"\n",(0,n.jsxs)(r.p,{children:["Proposes to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"add or remove a validator"})," with the specified address."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-12",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - account address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"proposal"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})," to propose adding validator or ",(0,n.jsx)(r.code,{children:"false"})," to propose removing validator"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-12",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsxs)(r.h2,{id:"perm-permissioning-methods",children:[(0,n.jsx)(r.code,{children:"PERM"})," (Permissioning) methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"PERM"})," API methods provide permissioning functionality. Use these methods for ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local",children:"local permissioning"})," only."]}),"\n",(0,n.jsx)(r.admonition,{type:"important",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"PERM"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"PERM"})," API methods, use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," CLI options."]})}),"\n",(0,n.jsx)(r.h3,{id:"perm_addaccountstoallowlist",children:(0,n.jsx)(r.code,{children:"perm_addAccountsToAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Adds accounts (participants) to the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#account-permissioning",children:"accounts permission list"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-13",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"addresses"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of account addresses"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"The parameters list contains a list which is why the account addresses are enclosed by double square brackets."})}),"\n",(0,n.jsx)(r.h4,{id:"returns-13",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - ",(0,n.jsx)(r.code,{children:"Success"})," or ",(0,n.jsx)(r.code,{children:"error"})," (errors include attempting to add accounts already on the allowlist and including invalid account addresses.)"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_addnodestoallowlist",children:(0,n.jsx)(r.code,{children:"perm_addNodesToAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Adds nodes to the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#node-allowlisting",children:"nodes allowlist"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["To use domain names in enode URLs, ensure you ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/node-keys#domain-name-support",children:"enable DNS support"})," to avoid receiving a ",(0,n.jsx)(r.code,{children:"request contains an invalid node"})," error."]}),"\n",(0,n.jsx)(r.admonition,{type:"warning",children:(0,n.jsx)(r.p,{children:"Enode URL domain name support is an early access feature."})}),"\n",(0,n.jsx)(r.h4,{id:"parameters-14",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"enodes"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"The parameters list contains a list which is why the enode URLs are enclosed by double square brackets."})}),"\n",(0,n.jsx)(r.h4,{id:"returns-14",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - ",(0,n.jsx)(r.code,{children:"Success"})," or ",(0,n.jsx)(r.code,{children:"error"}),"; errors include attempting to add nodes already on the allowlist or including invalid enode URLs."]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_getaccountsallowlist",children:(0,n.jsx)(r.code,{children:"perm_getAccountsAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Lists accounts (participants) in the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#account-permissioning",children:"accounts permissions list"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-15",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-15",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of accounts (participants) in the accounts allowlist"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x0000000000000000000000000000000000000009",\n "0xb9b81ee349c3807e46bc71aa2632203c5b462033"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_getnodesallowlist",children:(0,n.jsx)(r.code,{children:"perm_getNodesAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Lists nodes in the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#node-allowlisting",children:"nodes allowlist"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-16",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-16",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})," of nodes in the nodes allowlist"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305",\n "enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_reloadpermissionsfromfile",children:(0,n.jsx)(r.code,{children:"perm_reloadPermissionsFromFile"})}),"\n",(0,n.jsxs)(r.p,{children:["Reloads the accounts and nodes allowlists from the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#permissions-configuration-file",children:"permissions configuration file"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-17",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-17",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - ",(0,n.jsx)(r.code,{children:"Success"}),", or ",(0,n.jsx)(r.code,{children:"error"})," if the permissions configuration file is not valid"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_removeaccountsfromallowlist",children:(0,n.jsx)(r.code,{children:"perm_removeAccountsFromAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Removes accounts (participants) from the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#account-permissioning",children:"accounts permissions list"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-18",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"addresses"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of account addresses"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"The parameters list contains a list which is why the account addresses are enclosed by double square brackets."})}),"\n",(0,n.jsx)(r.h4,{id:"returns-18",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - ",(0,n.jsx)(r.code,{children:"Success"})," or ",(0,n.jsx)(r.code,{children:"error"})," (errors include attempting to remove accounts not on the allowlist and including invalid account addresses.)"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"perm_removenodesfromallowlist",children:(0,n.jsx)(r.code,{children:"perm_removeNodesFromAllowlist"})}),"\n",(0,n.jsxs)(r.p,{children:["Removes nodes from the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-permissioning/local#node-allowlisting",children:"nodes allowlist"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-19",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"enodes"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URLs"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"The parameters list contains a list which is why the enode URLs are enclosed by double square brackets."})}),"\n",(0,n.jsx)(r.h4,{id:"returns-19",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - ",(0,n.jsx)(r.code,{children:"Success"})," or ",(0,n.jsx)(r.code,{children:"error"})," (errors include attempting to remove nodes not on the allowlist and including invalid enode URLs.)"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "Success"\n}\n'})})})]}),"\n",(0,n.jsxs)(r.h2,{id:"priv-methods",children:[(0,n.jsx)(r.code,{children:"PRIV"})," methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"PRIV"})," API methods provide functionality for ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/",children:"private transactions"})," and ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy groups"}),"."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"PRIV"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"PRIV"})," API methods, use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,n.jsx)(r.h3,{id:"priv_call",children:(0,n.jsx)(r.code,{children:"priv_call"})}),"\n",(0,n.jsx)(r.p,{children:"Invokes a private contract function locally and does not change the privacy group state."}),"\n",(0,n.jsxs)(r.p,{children:["For private contracts, ",(0,n.jsx)(r.code,{children:"priv_call"})," is the same as ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_call",children:(0,n.jsx)(r.code,{children:"eth_call"})})," for public contracts."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-20",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"call"}),": ",(0,n.jsx)(r.em,{children:"object"})," - ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#transaction-call-object",children:"transaction call object"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-20",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"data"})," - return value of the executed contract"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x0000000000000000000000000000000000000000000000000000000000000001"\n}\n'})})}),(0,n.jsx)(l.A,{value:"curl GraphQL",label:"curl GraphQL",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST -H "Content-Type: application/json" --data \'{ "query": "{block {number call (data : {from : \\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\", to: \\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\", data :\\"0x12a7b914\\"}){data status}}}"}\' http://localhost:8547/graphql\n'})})}),(0,n.jsx)(l.A,{value:"GraphQL",label:"GraphQL",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{\n block {\n number\n call(data: {from: "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", to: "0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13", data: "0x12a7b914"}) {\n data\n status\n }\n }\n}\n'})})}),(0,n.jsx)(l.A,{value:"GraphQL result",label:"GraphQL result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "data": {\n "block": {\n "number": 17449,\n "call": {\n "data": "0x",\n "status": 1\n }\n }\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_createprivacygroup",children:(0,n.jsx)(r.code,{children:"priv_createPrivacyGroup"})}),"\n",(0,n.jsxs)(r.p,{children:["Creates a group of nodes, specified by their ",(0,n.jsx)(r.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public key."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-21",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"options"}),": ",(0,n.jsx)(r.em,{children:"object"})," - request options object with the following fields:"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"addresses"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of nodes specified by ",(0,n.jsx)(r.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public keys"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"name"}),": ",(0,n.jsx)(r.em,{children:"string"})," - (optional) privacy group name"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"description"}),": ",(0,n.jsx)(r.em,{children:"string"})," - (optional) privacy group description"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-21",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - privacy group ID"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_debuggetstateroot",children:(0,n.jsx)(r.code,{children:"priv_debugGetStateRoot"})}),"\n",(0,n.jsx)(r.p,{children:"Returns the state root of the specified privacy group at the specified block."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-22",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-22",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte state root"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_deleteprivacygroup",children:(0,n.jsx)(r.code,{children:"priv_deletePrivacyGroup"})}),"\n",(0,n.jsx)(r.p,{children:"Deletes the specified privacy group."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-23",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - privacy group ID"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-23",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - deleted privacy group ID"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 53,\n "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_distributerawtransaction",children:(0,n.jsx)(r.code,{children:"priv_distributeRawTransaction"})}),"\n",(0,n.jsxs)(r.p,{children:["Distributes a signed, RLP encoded ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:"private transaction"}),"."]}),"\n",(0,n.jsx)(r.admonition,{type:"tip",children:(0,n.jsxs)(r.p,{children:["If you want to sign the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-privacy/sign-pmts",children:"privacy marker transaction"})," outside of Besu, use ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/send-transactions/private-transactions#priv_distributerawtransaction",children:(0,n.jsx)(r.code,{children:"priv_distributeRawTransaction"})})," instead of ",(0,n.jsx)(r.a,{href:"#eea_sendrawtransaction",children:(0,n.jsx)(r.code,{children:"eea_sendRawTransaction"})}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"parameters-24",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"transaction"}),": ",(0,n.jsx)(r.em,{children:"string"})," - signed RLP-encoded private transaction"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-24",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte enclave key (the enclave key is a pointer to the private transaction in ",(0,n.jsx)(r.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"}),".)"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_findprivacygroup",children:(0,n.jsx)(r.code,{children:"priv_findPrivacyGroup"})}),"\n",(0,n.jsx)(r.p,{children:"Returns a list of privacy groups containing only the listed members. For example, if the listed members are A and B, a privacy group containing A, B, and C is not returned."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-25",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"members"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - members specified by ",(0,n.jsx)(r.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," public keys"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-25",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - privacy group objects containing only the specified members; privacy groups are ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups#enterprise-ethereum-alliance-privacy",children:"EEA-compliant"})," or ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups#besu-extended-privacy",children:"Besu-extended"})," with types:"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"LEGACY"})," for EEA-compliant groups."]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"PANTHEON"})," for Besu-extended groups."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=",\n "name": "Group B",\n "description": "Description of Group B",\n "type": "PANTHEON",\n "members": [\n "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getcode",children:(0,n.jsx)(r.code,{children:"priv_getCode"})}),"\n",(0,n.jsx)(r.p,{children:"Returns the code of the private smart contract at the specified address. Compiled smart contract code is stored as a hexadecimal value."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-26",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 20-byte contract address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the\nstring tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-26",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"data"})," - code stored at the specified address"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_geteeatransactioncount",children:(0,n.jsx)(r.code,{children:"priv_getEeaTransactionCount"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns the private transaction count for the specified account and ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups#enterprise-ethereum-alliance-privacy",children:"group of sender and recipients"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["::caution important\nIf sending more than one transaction to be mined in the same block (that is, you are not\nwaiting for the transaction receipt), you must calculate the private transaction nonce outside\nBesu instead of using ",(0,n.jsx)(r.code,{children:"priv_getEeaTransactionCount"}),".\n:::"]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-27",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - account address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"sender"}),": ",(0,n.jsx)(r.em,{children:"string"})," - base64-encoded Tessera address of the sender"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"recipients"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - base64-encoded Tessera addresses of recipients"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-27",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - integer representing the number of private transactions sent from the address to the specified group of sender and recipients"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getfilterchanges",children:(0,n.jsx)(r.code,{children:"priv_getFilterChanges"})}),"\n",(0,n.jsx)(r.p,{children:"Polls the specified filter for a private contract and returns an array of changes that have occurred since the last poll."}),"\n",(0,n.jsxs)(r.p,{children:["Filters for private contracts can only be created by ",(0,n.jsx)(r.a,{href:"#priv_newfilter",children:(0,n.jsx)(r.code,{children:"priv_newFilter"})})," so unlike ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_getfilterchanges",children:(0,n.jsx)(r.code,{children:"eth_getFilterChanges"})}),", ",(0,n.jsx)(r.code,{children:"priv_getFilterChanges"})," always returns an array of log objects or an empty list."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-28",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"filterId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - filter ID"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-28",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"}),", or an empty list if nothing has changed since the last poll"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x4d0",\n "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb",\n "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88",\n "transactionIndex": "0x0",\n "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000002"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getfilterlogs",children:(0,n.jsx)(r.code,{children:"priv_getFilterLogs"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns an array of ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," for the specified filter for a private contract."]}),"\n",(0,n.jsxs)(r.p,{children:["For private contracts, ",(0,n.jsx)(r.code,{children:"priv_getFilterLogs"})," is the same as ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_getfilterlogs",children:(0,n.jsx)(r.code,{children:"eth_getFilterLogs"})})," for public contracts except there's no ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:"automatic log bloom caching"})," for private contracts."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"priv_getFilterLogs"})," is only used for filters created with ",(0,n.jsx)(r.a,{href:"#priv_newfilter",children:(0,n.jsx)(r.code,{children:"priv_newFilter"})}),". To specify a filter object and get logs without creating a filter, use ",(0,n.jsx)(r.a,{href:"#priv_getlogs",children:(0,n.jsx)(r.code,{children:"priv_getLogs"})}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"parameters-29",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"filterId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - filter ID"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-29",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"})]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x493",\n "blockHash": "0xd9cb3a852e1e02c95f035a2e32d57f82c10cab61faa3e8f5c010adf979bb4786",\n "transactionHash": "0x78866dc51fdf189d8cca74f6a8fe54f172348fbd2163bbe80fa8b106cfc7deb4",\n "transactionIndex": "0x0",\n "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000001"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x4d0",\n "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb",\n "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88",\n "transactionIndex": "0x0",\n "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000002"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getlogs",children:(0,n.jsx)(r.code,{children:"priv_getLogs"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns an array of ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/events-and-logs",children:"logs"})," matching a specified filter object."]}),"\n",(0,n.jsxs)(r.p,{children:["For private contracts, ",(0,n.jsx)(r.code,{children:"priv_getLogs"})," is the same as ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_getlogs",children:(0,n.jsx)(r.code,{children:"eth_getLogs"})})," for public contracts except there is no ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#auto-log-bloom-caching-enabled",children:"automatic log bloom caching"})," for private contracts."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-30",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"filterOptions"}),": ",(0,n.jsx)(r.em,{children:"object"})," - ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#filter-options-object",children:"filter options object"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-30",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#log-object",children:"log objects"})]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x342",\n "blockHash": "0xf5954f068fa2f2f7741281e8c753a8e92047e27ab3c4971836d2c89fab86d92b",\n "transactionHash": "0xa9ba5cffde9d4ad8997c5c4352d5d49eeea0e9def8a4ea69991b8837c49d4e4f",\n "transactionIndex": "0x0",\n "address": "0x630c507ff633312087dc33c513b66276abcd2fc3",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000001"\n ]\n },\n {\n "logIndex": "0x0",\n "removed": false,\n "blockNumber": "0x383",\n "blockHash": "0x91b73a47d53e3a88d62ed091a89a4be7557ad91b552e7ff7d86bf78977d5d45d",\n "transactionHash": "0xc2a185faf00e87434e55b7f70cc4c38be354c2128b4b96b5f5def0b54a2173ec",\n "transactionIndex": "0x0",\n "address": "0x630c507ff633312087dc33c513b66276abcd2fc3",\n "data": "0x",\n "topics": [\n "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410",\n "0x0000000000000000000000000000000000000000000000000000000000000002"\n ]\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getprivacyprecompileaddress",children:(0,n.jsx)(r.code,{children:"priv_getPrivacyPrecompileAddress"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns the address of the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy precompiled contract"}),". The address is derived and based on the value of the ",(0,n.jsx)(r.a,{href:"/private-networks/reference/cli/options#privacy-flexible-groups-enabled",children:(0,n.jsx)(r.code,{children:"privacy-flexible-groups-enabled"})})," option."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-31",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-31",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - address of the privacy precompile"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x000000000000000000000000000000000000007e"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_getprivatetransaction",children:(0,n.jsx)(r.code,{children:"priv_getPrivateTransaction"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns the private transaction if you are a participant, otherwise, ",(0,n.jsx)(r.code,{children:"null"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-32",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"transaction"}),": ",(0,n.jsx)(r.em,{children:"string"})," - transaction hash returned by ",(0,n.jsx)(r.a,{href:"#eea_sendrawtransaction",children:(0,n.jsx)(r.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"returns-32",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"object"})," - ",(0,n.jsx)(r.a,{href:"/private-networks/reference/api/objects#private-transaction-object",children:"private transaction object"}),", or ",(0,n.jsx)(r.code,{children:"null"})," if not a participant in the private transaction"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "gas": "0x2dc6c0",\n "gasPrice": "0x0",\n "hash": "0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498",\n "input": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610221806100606000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f2451461005c5780636057361d1461008757806367e404ce146100b4575b600080fd5b34801561006857600080fd5b5061007161010b565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100b260048036038101908080359060200190929190505050610115565b005b3480156100c057600080fd5b506100c96101cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600254905090565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a18060028190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050905600a165627a7a723058208efaf938851fb2d235f8bf9a9685f149129a30fe0f4b20a6c1885dc02f639eba0029",\n "nonce": "0x0",\n "to": null,\n "value": "0x0",\n "v": "0xfe8",\n "r": "0x654a6a9663ca70bb13e27cca14b3777cc92da184e19a151cdeef2ccbbd5c6405",\n "s": "0x5dd4667b020c8a5af7ae28d4c3126f8dcb1187f49dcf0de9d7a39b1651892eef",\n "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "privateFor": ["g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="],\n "restriction": "restricted"\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_gettransactioncount",children:(0,n.jsx)(r.code,{children:"priv_getTransactionCount"})}),"\n",(0,n.jsx)(r.p,{children:"Returns the private transaction count for specified account and privacy group."}),"\n",(0,n.jsx)(r.admonition,{type:"important",children:(0,n.jsxs)(r.p,{children:["If sending more than one transaction to be mined in the same block (that is, you are not waiting for the transaction receipt), you must calculate the private transaction nonce outside Besu instead of using ",(0,n.jsx)(r.code,{children:"priv_getTransactionCount"}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"parameters-33",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - account address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - privacy group ID"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-33",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - integer representing the number of private transactions sent from the address to the specified privacy group"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x1"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_gettransactionreceipt",children:(0,n.jsx)(r.code,{children:"priv_getTransactionReceipt"})}),"\n",(0,n.jsx)(r.p,{children:"Returns information about the private transaction after mining the transaction. Receipts for pending transactions are not available."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-34",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"transaction"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte hash of a transaction"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-34",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"object"})," - ",(0,n.jsx)(r.a,{href:"/private-networks/reference/api/objects#private-transaction-receipt-object",children:"private Transaction receipt object"}),", or ",(0,n.jsx)(r.code,{children:"null"})," if no receipt found"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "blockHash": "0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a",\n "blockNumber": "0x50",\n "contractAddress": "0x493b76031593402e24e16faa81f677b58e2d53f3",\n "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",\n "logs": [],\n "to": "0xf17f52151ebef6c7334fad080c5704d77216b732",\n "transactionHash": "0x36219e92b5f53d4150aa9ef7d2d793118cced523de6724100da5b534e3ceb4b8",\n "transactionIndex": "0x0",\n "output": "0x6080604052600436106049576000357c010000000000000000000000000000000000000000000\n 0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059\n 57600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b\n 50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b8060008190555050560\n 0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",\n "commitmentHash": "0x79b9e6b0856db398ad7dc208f15b1d38c0c0b0c5f99e4a443a2c5a85510e96a5",\n "status": "0x1",\n "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "privacyGroupId": "cD636RZlcqVSpoxT/ExbkWQfBO7kPAZO0QlWHErNSL8=",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_newfilter",children:(0,n.jsx)(r.code,{children:"priv_newFilter"})}),"\n",(0,n.jsxs)(r.p,{children:["Creates a ",(0,n.jsx)(r.a,{href:"/public-networks/concepts/events-and-logs",children:"log filter"})," for a private contract. To poll for logs associated with the created filter, use ",(0,n.jsx)(r.a,{href:"#priv_getfilterchanges",children:(0,n.jsx)(r.code,{children:"priv_getFilterChanges"})}),". To get all logs associated with the filter, use ",(0,n.jsx)(r.a,{href:"#priv_getfilterlogs",children:(0,n.jsx)(r.code,{children:"priv_getFilterLogs"})}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["For private contracts, ",(0,n.jsx)(r.code,{children:"priv_newFilter"})," is the same as ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_newfilter",children:(0,n.jsx)(r.code,{children:"eth_newFilter"})})," for public contracts."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-35",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy Group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"filterOptions"}),": ",(0,n.jsx)(r.em,{children:"object"})," - ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/objects#filter-options-object",children:"filter options object"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"fromBlock"})," and ",(0,n.jsx)(r.code,{children:"toBlock"})," in the filter options object default to ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.h4,{id:"returns-35",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"string"})," - filter ID"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x4a35b92809d73f4f53a2355d62125442"\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_tracetransaction",children:(0,n.jsx)(r.code,{children:"priv_traceTransaction"})}),"\n",(0,n.jsxs)(r.p,{children:["Provides a ",(0,n.jsx)(r.a,{href:"../../../public-networks/reference/api#trace_transaction",children:"transaction trace"})," for a private transaction."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-36",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - the privacy group ID associated with the transaction"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"transactionHash"}),": ",(0,n.jsx)(r.em,{children:"string"})," - the hash of the private transaction to trace"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-36",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of ",(0,n.jsx)(r.a,{href:"/public-networks/reference/trace-types#trace",children:"calls to other contracts"})," containing one object per call, in the order called by the transaction.\nIf revert reason is enabled with ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#revert-reason-enabled",children:(0,n.jsx)(r.code,{children:"--revert-reason-enabled"})}),", the returned list items include the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/send-transactions/revert-reason",children:"revert reason"}),"."]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0", "method": "priv_traceTransaction","params": ["0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7", {"privacyGroupId": "Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM="}],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{\n "jsonrpc": "2.0",\n "method": "priv_traceTransaction",\n "params": [\n "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n {\n "privacyGroupId": "Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM="\n }\n ],\n "id": 1\n}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "result": [\n {\n "action": {\n "creationMethod": "create",\n "from": "0x627306090abab3a6e1400e9345bc60c78a8bef57",\n "gas": "0xff2e26",\n "init": "0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "address": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "code": "0x",\n "gasUsed": "0x1c39"\n },\n "subtraces": 2,\n "traceAddress": [],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "create"\n },\n {\n "action": {\n "callType": "callcode",\n "from": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "gas": "0xfb2ea9",\n "input": "0x",\n "to": "0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "gasUsed": "0x138e",\n "output": "0x"\n },\n "subtraces": 1,\n "traceAddress": [0],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "call"\n },\n {\n "action": {\n "address": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "balance": "0x0",\n "refundAddress": "0x0000000000000000000000000000000000000000"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": null,\n "subtraces": 0,\n "traceAddress": [0, 0],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "suicide"\n },\n {\n "action": {\n "callType": "callcode",\n "from": "0x30753e4a8aad7f8597332e813735def5dd395028",\n "gas": "0xfb18a5",\n "input": "0x",\n "to": "0x00a0000000000000000000000000000000000000",\n "value": "0x0"\n },\n "blockHash": "0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e",\n "blockNumber": 19,\n "result": {\n "gasUsed": "0x30b",\n "output": "0x"\n },\n "subtraces": 0,\n "traceAddress": [1],\n "transactionHash": "0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7",\n "transactionPosition": 3,\n "type": "call"\n }\n ],\n "id": 1,\n "privacyGroupId": "Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM="\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"priv_uninstallfilter",children:(0,n.jsx)(r.code,{children:"priv_uninstallFilter"})}),"\n",(0,n.jsx)(r.p,{children:"Uninstalls a filter for a private contract with the specified ID. When a filter is no longer required, call this method."}),"\n",(0,n.jsxs)(r.p,{children:["Filters time out when not requested by ",(0,n.jsx)(r.a,{href:"#priv_getfilterchanges",children:(0,n.jsx)(r.code,{children:"priv_getFilterChanges"})})," or ",(0,n.jsx)(r.a,{href:"#priv_getfilterlogs",children:(0,n.jsx)(r.code,{children:"priv_getFilterLogs"})})," for 10 minutes."]}),"\n",(0,n.jsxs)(r.p,{children:["For private contracts, ",(0,n.jsx)(r.code,{children:"priv_uninstallFilter"})," is the same as ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#eth_uninstallfilter",children:(0,n.jsx)(r.code,{children:"eth_uninstallFilter"})})," for public contracts."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-37",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"privacyGroupId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy group ID"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"filterId"}),": ",(0,n.jsx)(r.em,{children:"string"})," - filter ID"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-37",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - indicates if the filter is successfully uninstalled"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsxs)(r.h2,{id:"qbft-methods",children:[(0,n.jsx)(r.code,{children:"QBFT"})," methods"]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"QBFT"})," API methods provide access to the ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"})," consensus engine."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"QBFT"})," API methods are not enabled by default for JSON-RPC. To enable the ",(0,n.jsx)(r.code,{children:"QBFT"})," API methods, use the ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,n.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,n.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,n.jsx)(r.code,{children:"--rpc-ws-api"})})," options."]})}),"\n",(0,n.jsx)(r.h3,{id:"qbft_discardvalidatorvote",children:(0,n.jsx)(r.code,{children:"qbft_discardValidatorVote"})}),"\n",(0,n.jsxs)(r.p,{children:["Discards a proposal to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators",children:"add or remove a validator"})," with the specified address."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-38",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 20-byte address of proposed validator"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-38",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - indicates if the proposal is discarded"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"qbft_getpendingvotes",children:(0,n.jsx)(r.code,{children:"qbft_getPendingVotes"})}),"\n",(0,n.jsxs)(r.p,{children:["Returns ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators",children:"votes"})," cast in the current ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft#genesis-file",children:"epoch"}),"."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-39",children:"Parameters"}),"\n",(0,n.jsx)(r.p,{children:"None"}),"\n",(0,n.jsx)(r.h4,{id:"returns-39",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"map"})," of ",(0,n.jsx)(r.em,{children:"strings"})," to ",(0,n.jsx)(r.em,{children:"booleans"})," - map of account addresses to corresponding boolean values indicating the vote for each account; if ",(0,n.jsx)(r.code,{children:"true"}),", the vote is to add a validator. If ",(0,n.jsx)(r.code,{children:"false"}),", the proposal is to remove a validator."]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true,\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true\n }\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"qbft_getsignermetrics",children:(0,n.jsx)(r.code,{children:"qbft_getSignerMetrics"})}),"\n",(0,n.jsx)(r.p,{children:"Provides the following validator metrics for the specified range:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Number of blocks from each validator"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Block number of the last block proposed by each validator (if any proposed in the specified range)"}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"All validators present in the last block of the range"}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-40",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"fromBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one\nof the string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"toBlockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of\nthe string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in\n",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"pending"})," returns the same value as ",(0,n.jsx)(r.code,{children:"latest"}),"."]})}),"\n",(0,n.jsx)(r.p,{children:"If you specify:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks."}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-40",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"objects"})," - list of validator objects"]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["The proposer of the genesis block has address ",(0,n.jsx)(r.code,{children:"0x0000000000000000000000000000000000000000"}),"."]})}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS",label:"wscat WS",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x61"\n },\n {\n "address": "0x42eb768f2244c8811c63729a21a3569731535f06",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x63"\n },\n {\n "address": "0xb279182d99e65703f0076e4812653aab85fca0f0",\n "proposedBlockCount": "0x21",\n "lastProposedBlockNumber": "0x62"\n }\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"qbft_getvalidatorsbyblockhash",children:(0,n.jsx)(r.code,{children:"qbft_getValidatorsByBlockHash"})}),"\n",(0,n.jsx)(r.p,{children:"Lists the validators defined in the specified block."}),"\n",(0,n.jsx)(r.h4,{id:"parameters-41",children:"Parameters"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"block"}),": ",(0,n.jsx)(r.em,{children:"string"})," - 32-byte block hash"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-41",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of validator addresses"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5",\n "0xb1b2bc9582d2901afdc579f528a35ca41403fa85",\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"qbft_getvalidatorsbyblocknumber",children:(0,n.jsx)(r.code,{children:"qbft_getValidatorsByBlockNumber"})}),"\n",(0,n.jsx)(r.p,{children:"Lists the validators for the specified block."}),"\n",(0,n.jsx)(r.p,{children:"For all blocks up to the chain head block this method returns the validators that were used at the time the block was produced."}),"\n",(0,n.jsxs)(r.p,{children:["Use ",(0,n.jsx)(r.code,{children:"blockNumber"})," to get the list of validators for that block."]}),"\n",(0,n.jsx)(r.p,{children:"For the chain head block there are two validator lists associated with it:"}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["The validators that were used at the time the block was produced. This list is returned by passing ",(0,n.jsx)(r.code,{children:"latest"})," as the input parameter."]}),"\n",(0,n.jsxs)(r.li,{children:["The validators that will be used to produce the next block. This list is returned by passing ",(0,n.jsx)(r.code,{children:"pending"})," as the input parameter."]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:"In most instances the two lists for the chain head block are the same. However, when voting has completed to add or remove a validator, the validators that will be used to produce the next block are different. Comparing the two lists can be helpful when diagnosing a stalled chain."}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsxs)(r.p,{children:["When the validator list changes, an ",(0,n.jsx)(r.code,{children:"INFO"})," log message displays, showing the previous list of validators and the new list of validators."]})}),"\n",(0,n.jsx)(r.h4,{id:"parameters-42",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"blockNumber"}),": ",(0,n.jsx)(r.em,{children:"string"})," - hexadecimal or decimal integer representing a block number, or one of the string tags ",(0,n.jsx)(r.code,{children:"latest"}),", ",(0,n.jsx)(r.code,{children:"earliest"}),", ",(0,n.jsx)(r.code,{children:"pending"}),", ",(0,n.jsx)(r.code,{children:"finalized"}),", or ",(0,n.jsx)(r.code,{children:"safe"}),", as described in ",(0,n.jsx)(r.a,{href:"/public-networks/how-to/use-besu-api/json-rpc#block-parameter",children:"block parameter"})]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-42",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"array"})," of ",(0,n.jsx)(r.em,{children:"strings"})," - list of validator addresses"]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n "0x42d4287eac8078828cf5f3486cfe601a275a49a5",\n "0xb1b2bc9582d2901afdc579f528a35ca41403fa85",\n "0xef1bfb6a12794615c9b0b5a21e6741f01e570185"\n ]\n}\n'})})})]}),"\n",(0,n.jsx)(r.h3,{id:"qbft_proposevalidatorvote",children:(0,n.jsx)(r.code,{children:"qbft_proposeValidatorVote"})}),"\n",(0,n.jsxs)(r.p,{children:["Proposes to ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/configure/consensus/qbft#add-and-remove-validators",children:"add or remove a validator"})," with the specified address."]}),"\n",(0,n.jsx)(r.h4,{id:"parameters-43",children:"Parameters"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"address"}),": ",(0,n.jsx)(r.em,{children:"string"})," - account address"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"proposal"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})," to propose adding validator or ",(0,n.jsx)(r.code,{children:"false"})," to propose removing validator"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h4,{id:"returns-43",children:"Returns"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"result"}),": ",(0,n.jsx)(r.em,{children:"boolean"})," - ",(0,n.jsx)(r.code,{children:"true"})]}),"\n",(0,n.jsxs)(c.A,{children:[(0,n.jsx)(l.A,{value:"curl HTTP request",label:"curl HTTP request",default:!0,children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,n.jsx)(l.A,{value:"wscat WS request",label:"wscat WS request",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:'{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}\n'})})}),(0,n.jsx)(l.A,{value:"JSON result",label:"JSON result",children:(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": true\n}\n'})})})]}),"\n",(0,n.jsx)(r.p,{children:"*[EEA]: Enterprise Ethereum Alliance"})]})}function u(e={}){const{wrapper:r}={...(0,a.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},19365:(e,r,s)=>{s.d(r,{A:()=>l});s(96540);var n=s(18215);const a={tabItem:"tabItem_Ymn6"};var c=s(74848);function l(e){let{children:r,hidden:s,className:l}=e;return(0,c.jsx)("div",{role:"tabpanel",className:(0,n.A)(a.tabItem,l),hidden:s,children:r})}},11470:(e,r,s)=>{s.d(r,{A:()=>k});var n=s(96540),a=s(18215),c=s(23104),l=s(56347),i=s(205),d=s(57485),t=s(31682),o=s(70679);function h(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:r}=e;return!!r&&"object"==typeof r&&"value"in r}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:r,children:s}=e;return(0,n.useMemo)((()=>{const e=r??function(e){return h(e).map((e=>{let{props:{value:r,label:s,attributes:n,default:a}}=e;return{value:r,label:s,attributes:n,default:a}}))}(s);return function(e){const r=(0,t.XI)(e,((e,r)=>e.value===r.value));if(r.length>0)throw new Error(`Docusaurus error: Duplicate values "${r.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[r,s])}function u(e){let{value:r,tabValues:s}=e;return s.some((e=>e.value===r))}function x(e){let{queryString:r=!1,groupId:s}=e;const a=(0,l.W6)(),c=function(e){let{queryString:r=!1,groupId:s}=e;if("string"==typeof r)return r;if(!1===r)return null;if(!0===r&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:r,groupId:s});return[(0,d.aZ)(c),(0,n.useCallback)((e=>{if(!c)return;const r=new URLSearchParams(a.location.search);r.set(c,e),a.replace({...a.location,search:r.toString()})}),[c,a])]}function f(e){const{defaultValue:r,queryString:s=!1,groupId:a}=e,c=p(e),[l,d]=(0,n.useState)((()=>function(e){let{defaultValue:r,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(r){if(!u({value:r,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${r}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return r}const n=s.find((e=>e.default))??s[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:r,tabValues:c}))),[t,h]=x({queryString:s,groupId:a}),[f,j]=function(e){let{groupId:r}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(r),[a,c]=(0,o.Dv)(s);return[a,(0,n.useCallback)((e=>{s&&c.set(e)}),[s,c])]}({groupId:a}),b=(()=>{const e=t??f;return u({value:e,tabValues:c})?e:null})();(0,i.A)((()=>{b&&d(b)}),[b]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!u({value:e,tabValues:c}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),j(e)}),[h,j,c]),tabValues:c}}var j=s(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var m=s(74848);function v(e){let{className:r,block:s,selectedValue:n,selectValue:l,tabValues:i}=e;const d=[],{blockElementScrollPositionUntilNextRender:t}=(0,c.a_)(),o=e=>{const r=e.currentTarget,s=d.indexOf(r),a=i[s].value;a!==n&&(t(r),l(a))},h=e=>{let r=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;r=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;r=d[s]??d[d.length-1];break}}r?.focus()};return(0,m.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":s},r),children:i.map((e=>{let{value:r,label:s,attributes:c}=e;return(0,m.jsx)("li",{role:"tab",tabIndex:n===r?0:-1,"aria-selected":n===r,ref:e=>d.push(e),onKeyDown:h,onClick:o,...c,className:(0,a.A)("tabs__item",b.tabItem,c?.className,{"tabs__item--active":n===r}),children:s??r},r)}))})}function g(e){let{lazy:r,children:s,selectedValue:c}=e;const l=(Array.isArray(s)?s:[s]).filter(Boolean);if(r){const e=l.find((e=>e.props.value===c));return e?(0,n.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,m.jsx)("div",{className:"margin-top--md",children:l.map(((e,r)=>(0,n.cloneElement)(e,{key:r,hidden:e.props.value!==c})))})}function w(e){const r=f(e);return(0,m.jsxs)("div",{className:(0,a.A)("tabs-container",b.tabList),children:[(0,m.jsx)(v,{...r,...e}),(0,m.jsx)(g,{...r,...e})]})}function k(e){const r=(0,j.A)();return(0,m.jsx)(w,{...e,children:h(e.children)},String(r))}},28453:(e,r,s)=>{s.d(r,{R:()=>l,x:()=>i});var n=s(96540);const a={},c=n.createContext(a);function l(e){const r=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d7914a50.222188a7.js b/assets/js/d7914a50.222188a7.js new file mode 100644 index 00000000000..f3fd92822c9 --- /dev/null +++ b/assets/js/d7914a50.222188a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2812],{18913:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>c,metadata:()=>r,toc:()=>d});var a=t(74848),s=t(28453);const c={title:"Transfer account funds",sidebar_position:1,description:"funds transfer transactions",tags:["private networks"]},o="Transfer funds between accounts in a transaction",r={id:"private-networks/tutorials/contracts/transfer-funds",title:"Transfer account funds",description:"funds transfer transactions",source:"@site/docs/private-networks/tutorials/contracts/transfer-funds.md",sourceDirName:"private-networks/tutorials/contracts",slug:"/private-networks/tutorials/contracts/transfer-funds",permalink:"/private-networks/tutorials/contracts/transfer-funds",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/contracts/transfer-funds.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Transfer account funds",sidebar_position:1,description:"funds transfer transactions",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Deploy a smart contract",permalink:"/private-networks/tutorials/contracts/"},next:{title:"Interact with a deployed contract",permalink:"/private-networks/tutorials/contracts/interact"}},i={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Use <code>eth_sendSignedTransaction</code>",id:"use-eth_sendsignedtransaction",level:2},{value:"Use <code>eth_sendTransaction</code>",id:"use-eth_sendtransaction",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"transfer-funds-between-accounts-in-a-transaction",children:"Transfer funds between accounts in a transaction"})}),"\n",(0,a.jsxs)(n.p,{children:["You can get started with the ",(0,a.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"})," to rapidly generate local blockchain networks."]}),"\n",(0,a.jsx)(n.p,{children:"This tutorial shows you how to transfer funds (ETH) between accounts in a transaction."}),"\n",(0,a.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["A ",(0,a.jsx)(n.a,{href:"/private-networks/tutorials/quickstart",children:"private network"})]}),"\n"]}),"\n",(0,a.jsxs)(n.h2,{id:"use-eth_sendsignedtransaction",children:["Use ",(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"})]}),"\n",(0,a.jsxs)(n.p,{children:["The simplest way to transfer funds between externally-owned accounts is using ",(0,a.jsx)(n.a,{href:"https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendsignedtransaction",children:(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"})}),". This example uses ",(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"})," and one of the ",(0,a.jsx)(n.a,{href:"/private-networks/reference/accounts-for-testing",children:"test accounts"})," to transfer funds to a newly created account."]}),"\n",(0,a.jsx)(n.admonition,{title:"Do not use the test accounts on Ethereum Mainnet or any production network",type:"danger",children:(0,a.jsx)(n.p,{children:"The private key is publicly displayed, which means the account is not secure."})}),"\n",(0,a.jsx)(n.p,{children:"Before making the transaction, check the balances of both accounts to verify the funds transfer after the transaction."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'const web3 = new Web3(host);\n// Pre-seeded account with 90000 ETH\nconst privateKeyA =\n "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3";\nconst accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA);\nvar accountABalance = web3.utils.fromWei(\n await web3.eth.getBalance(accountA.address),\n);\nconsole.log("Account A has balance of: " + accountABalance);\n\n// Create a new account to transfer ETH to\nvar accountB = web3.eth.accounts.create();\nvar accountBBalance = web3.utils.fromWei(\n await web3.eth.getBalance(accountB.address),\n);\nconsole.log("Account B has balance of: " + accountBBalance);\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Use the test account address (Account A) for the ",(0,a.jsx)(n.code,{children:"from"})," parameter, the recipient account address (Account B) for the ",(0,a.jsx)(n.code,{children:"to"})," parameter, and the amount of ETH to transfer between accounts for the ",(0,a.jsx)(n.code,{children:"value"})," parameter. Sign the transaction with Account A's private key and send it using ",(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"}),"."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'// Send some ETH from A to B\nconst rawTxOptions = {\n nonce: web3.utils.numberToHex(\n await web3.eth.getTransactionCount(accountA.address),\n ),\n from: accountA.address,\n to: accountB.address,\n value: "0x100", // Amount of ETH to transfer\n gasPrice: "0x0", // ETH per unit of gas\n gasLimit: "0x24A22", // Max number of gas units the tx is allowed to use\n};\nconsole.log("Creating transaction...");\nconst tx = new Tx(rawTxOptions);\nconsole.log("Signing transaction...");\ntx.sign(Buffer.from(accountA.privateKey.substring(2), "hex"));\nconsole.log("Sending transaction...");\nvar serializedTx = tx.serialize();\nconst pTx = await web3.eth.sendSignedTransaction(\n "0x" + serializedTx.toString("hex").toString("hex"),\n);\nconsole.log("tx transactionHash: " + pTx.transactionHash);\n'})}),"\n",(0,a.jsx)(n.p,{children:"Once it completes, you can see the updated balances."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'// After the transaction, there should be some ETH transferred\nvar accountABalance = await getAccountBalance(host, accountA);\nconsole.log("Account A has an updated balance of: " + accountABalance);\nvar accountBBalance = await getAccountBalance(host, accountB);\nconsole.log("Account B has an updatedbalance of: " + accountBBalance);\n}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["A ",(0,a.jsx)(n.a,{href:"https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/eth_tx.js",children:"full example"})," can be found in the Developer Quickstart."]}),"\n",(0,a.jsxs)(n.h2,{id:"use-eth_sendtransaction",children:["Use ",(0,a.jsx)(n.code,{children:"eth_sendTransaction"})]}),"\n",(0,a.jsxs)(n.p,{children:["An alternative to using ",(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"})," is ",(0,a.jsx)(n.a,{href:"https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction",children:(0,a.jsx)(n.code,{children:"eth_sendTransaction"})}),". However, Besu does not support the ",(0,a.jsx)(n.code,{children:"eth_sendTransaction"})," API call and keeps account management separate for stronger security. Instead, Besu uses ",(0,a.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," to make the ",(0,a.jsx)(n.code,{children:"eth_sendTransaction"})," API call."]}),"\n",(0,a.jsxs)(n.p,{children:["Use ",(0,a.jsx)(n.code,{children:"eth_sendTransaction"})," similarly to ",(0,a.jsxs)(n.a,{href:"#use-eth_sendsignedtransaction",children:["using ",(0,a.jsx)(n.code,{children:"eth_sendSignedTransaction"})]})," (without the signing step which is done by Web3Signer):"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'const web3 = new Web3(host);\n// Pre-seeded account with 90000 ETH\nconst privateKeyA = "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3";\nconst accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA);\nvar accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address));\nconsole.log("Account A has balance of: " + accountABalance);\n\n// Create a new account to transfer ETH to\nvar accountB = web3.eth.accounts.create();\nvar accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address));\nconsole.log("Account B has balance of: " + accountBBalance);\n\n// Send some ETH from A to B\nconst txOptions = {\n from: accountA.address,\n to: accountB.address,\n value: "0x100", // Amount of ETH to transfer\n gasPrice: "0x0", // ETH per unit of gas\n gasLimit: "0x24A22" // Max number of gas units the tx is allowed to use\n};\nconsole.log("Creating transaction...");\nconst pTx = await web3.eth.sendTransaction(txOptions);\nconsole.log("tx transactionHash: " + pTx.transactionHash);\n\n// After the transaction, there should be some ETH transferred\nvar accountABalance = await getAccountBalance(host, accountA);\nconsole.log("Account A has an updated balance of: " + accountABalance);\nvar accountBBalance = await getAccountBalance(host, accountB);\nconsole.log("Account B has an updatedbalance of: " + accountBBalance);\n}\n'})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var a=t(96540);const s={},c=a.createContext(s);function o(e){const n=a.useContext(c);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),a.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d7b72fb9.232604a9.js b/assets/js/d7b72fb9.232604a9.js new file mode 100644 index 00000000000..2ac40bd6739 --- /dev/null +++ b/assets/js/d7b72fb9.232604a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6162],{13628:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>a,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var n=t(74848),r=t(28453);const o={title:"Projects using Besu",sidebar_position:7,description:"List of projects using Besu",tags:["public networks","private networks"]},i="Projects using Besu",c={id:"public-networks/reference/projects-using-besu",title:"Projects using Besu",description:"List of projects using Besu",source:"@site/docs/public-networks/reference/projects-using-besu.md",sourceDirName:"public-networks/reference",slug:"/public-networks/reference/projects-using-besu",permalink:"/public-networks/reference/projects-using-besu",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/projects-using-besu.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Projects using Besu",sidebar_position:7,description:"List of projects using Besu",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Transaction trace types",permalink:"/public-networks/reference/trace-types"},next:{title:"Security disclosure policy",permalink:"/public-networks/reference/disclosure"}},l={},u=[{value:"Block explorers",id:"block-explorers",level:2}];function p(e){const s={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"projects-using-besu",children:"Projects using Besu"})}),"\n",(0,n.jsx)(s.h2,{id:"block-explorers",children:"Block explorers"}),"\n",(0,n.jsx)(s.p,{children:"The following block explorers are compatible with Besu:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://github.com/blockscout/blockscout#readme",children:"BlockScout"})," - See the ",(0,n.jsx)(s.a,{href:"https://docs.blockscout.com/",children:"project documentation"})," for setup instructions."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://www.web3labs.com/chainlens",children:"Chainlens Blockchain Explorer"})," - See how to ",(0,n.jsx)(s.a,{href:"/private-networks/how-to/monitor/chainlens",children:"use Chainlens with privacy-enabled networks"}),"."]}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>c});var n=t(96540);const r={},o=n.createContext(r);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d86228ad.04e46fc2.js b/assets/js/d86228ad.04e46fc2.js new file mode 100644 index 00000000000..2ded4db7a3c --- /dev/null +++ b/assets/js/d86228ad.04e46fc2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[198],{38116:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=s(74848),o=s(28453);const i={title:"Attestations",sidebar_position:1,description:"Proof of stake attestations",tags:["public networks"]},r="Attestations",a={id:"public-networks/concepts/proof-of-stake/attestations",title:"Attestations",description:"Proof of stake attestations",source:"@site/docs/public-networks/concepts/proof-of-stake/attestations.md",sourceDirName:"public-networks/concepts/proof-of-stake",slug:"/public-networks/concepts/proof-of-stake/attestations",permalink:"/public-networks/concepts/proof-of-stake/attestations",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/proof-of-stake/attestations.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Attestations",sidebar_position:1,description:"Proof of stake attestations",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Proof of stake consensus",permalink:"/public-networks/concepts/proof-of-stake/"},next:{title:"Data storage formats",permalink:"/public-networks/concepts/data-storage-formats"}},c={},l=[{value:"What are attestations?",id:"what-are-attestations",level:2},{value:"Attestation rewards",id:"attestation-rewards",level:2},{value:"Incorrect attestations",id:"incorrect-attestations",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"References",id:"references",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"attestations",children:"Attestations"})}),"\n",(0,n.jsxs)(t.p,{children:["Ethereum's move to ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/proof-of-stake/",children:"proof of stake consensus"})," has brought many changes to the way the network operates. An important aspect of proof of stake is the need for validators to provide attestations in a timely and accurate manner. However, missed attestations have become a common occurrence among validators, leading to a loss of rewards and earnings. This page explores the context behind missing attestations."]}),"\n",(0,n.jsx)(t.h2,{id:"what-are-attestations",children:"What are attestations?"}),"\n",(0,n.jsxs)(t.p,{children:["Every epoch (6.4 minutes), a validator proposes an attestation to the network. The attestation is for a specific slot (every 12 seconds) in the epoch. The attestation votes in favor of the validator's view of the chain, in particular, the most recent justified block and the first block in the current epoch (known as ",(0,n.jsx)(t.em,{children:"source"})," and ",(0,n.jsx)(t.em,{children:"target"})," checkpoints). This information is collected for all participating validators, enabling the network to reach consensus about the state of the blockchain."]}),"\n",(0,n.jsxs)(t.p,{children:["Honest nodes have 1/3 * ",(0,n.jsx)(t.code,{children:"SECONDS_PER_SLOT"})," (4 seconds) from the start of the slot to either receive the block or decide there was no block produced and attest to an \u201cempty\u201d or \u201cskip\u201d slot. Once this time has elapsed, attesters should broadcast their attestation reflecting their local view of the chain."]}),"\n",(0,n.jsxs)(t.p,{children:["See the ",(0,n.jsx)(t.a,{href:"https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/validator.md#attesting",children:"official specification"})," for more information about attestations."]}),"\n",(0,n.jsx)(t.h2,{id:"attestation-rewards",children:"Attestation rewards"}),"\n",(0,n.jsx)(t.p,{children:"Around 85% of validators' rewards come from making attestations. Although committee and slot assignments for attesting are randomized, every active validator will be selected to make exactly one attestation each epoch."}),"\n",(0,n.jsx)(t.p,{children:"Attestations receive rewards only if they're included in Beacon Chain blocks. An attestation contains three votes. Each vote is eligible for a reward, subject to the following conditions:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Getting attestations included with the correct source checkpoint within 5 slots"}),"\n",(0,n.jsx)(t.li,{children:"Getting attestations included with the correct target checkpoint within 32 slots"}),"\n",(0,n.jsx)(t.li,{children:"Getting attestations included with the correct head within 1 slot immediately"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:['Each of these duties carries a reward rate, a portion of the entire "weight denominator," or the sum of weighted rewards for each attestation. The remaining weights relate to participating in sync committees and proposing blocks (excluding any tips/MEV, the bulk of block rewards). The following table (from ',(0,n.jsx)(t.a,{href:"https://eth2book.info/bellatrix/part2/incentives/rewards/",children:"Upgrading Ethereum"}),") breaks down these weights for cumulative rewards:"]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Percentage"}),(0,n.jsx)(t.th,{children:"Value"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"TIMELY_SOURCE_WEIGHT"})}),(0,n.jsx)(t.td,{children:"21.9%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(14)"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"TIMELY_TARGET_WEIGHT"})}),(0,n.jsx)(t.td,{children:"40.6%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(26)"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"TIMELY_HEAD_WEIGHT"})}),(0,n.jsx)(t.td,{children:"21.9%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(14)"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"SYNC_REWARD_WEIGHT"})}),(0,n.jsx)(t.td,{children:"3.1%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(2)"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"PROPOSER_WEIGHT"})}),(0,n.jsx)(t.td,{children:"12.5%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(8)"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"WEIGHT_DENOMINATOR"})}),(0,n.jsx)(t.td,{children:"100%"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"uint64(64)"})})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"incorrect-attestations",children:"Incorrect attestations"}),"\n",(0,n.jsx)(t.p,{children:"If you have attestations with incorrect head votes, your node might be experiencing slow block imports. However, block producers can also be slow to publish blocks, resulting in a majority of validators getting the head vote wrong. A <100% head vote doesn't necessarily imply a problem with your node."}),"\n",(0,n.jsx)(t.p,{children:"In case of a slowdown, identify whether the issue is with the beacon node or the execution client. Block timing logs can be helpful in determining this."}),"\n",(0,n.jsxs)(t.p,{children:["If you're using ",(0,n.jsx)(t.a,{href:"https://docs.teku.consensys.net/",children:"Teku"})," as a consensus layer client, identify late blocks (the block didn't get to Teku in time) with the following kind of log:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-bash",children:"Late Block Import *** Block: c2b911533a8f8d5e699d1a334e0576d2b9aa4caa726bde8b827548b579b47c68 (4765916) proposer 6230 arrival 3475ms, pre-state_retrieved +5ms, processed +185ms, execution_payload_result_received +1436ms, begin_importing +0ms, transaction_prepared +0ms, transaction_committed +0ms, completed +21ms\n"})}),"\n",(0,n.jsx)(t.p,{children:"The time of arrival indicates how much time elapsed after the start of the slot before your node received the block. In this example, the block arrived after 3475ms, which is slower than optimal, but still enough time for Teku to create an attestation 4 seconds into the slot."}),"\n",(0,n.jsx)(t.p,{children:"Typically, delayed arrivals occur when the block producer is slow in generating the block. It's also possible that the block was published on time but took longer to propagate to your node through peer-to-peer gossip. If delayed arrivals are a recurring issue, it might be a problem with your node, such as an incorrect system clock, network issues, or a reduction in the number of peers."}),"\n",(0,n.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,n.jsx)(t.p,{children:"Attestations are complicated. Rewards can be impacted by:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"The contents of a block (how long it takes to compute)."}),"\n",(0,n.jsx)(t.li,{children:"The hardware processing that block (execution speed)."}),"\n",(0,n.jsx)(t.li,{children:"How long it takes for the block to arrive to Besu from the consensus layer."}),"\n",(0,n.jsx)(t.li,{children:"The arrival time of the block from other consensus layer peers. Besu and your consensus layer client have no control over how late into a slot they receive blocks."}),"\n",(0,n.jsx)(t.li,{children:"General network latency."}),"\n",(0,n.jsx)(t.li,{children:"The status of either Besu or the consensus layer client."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"/public-networks/how-to/monitor/",children:"Monitoring"})," your validator carefully for uptime, execution speed, and a valid consensus layer connection will help you explore attestation performance for your node."]}),"\n",(0,n.jsx)(t.h2,{id:"references",children:"References"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://eth2book.info/bellatrix/part2/incentives/rewards/",children:"Upgrading Ethereum"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://www.symphonious.net/2022/09/25/understanding-attestation-misses/",children:"Understanding Attestation Misses"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://notes.ethereum.org/DaWh-02HQ4qftum1xdphkg?view#Broadcast-attestation",children:"Block production in Ethereum after the Merge"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/validator.md#attesting",children:"Ethereum Consensus Specs"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var n=s(96540);const o={},i=n.createContext(o);function r(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d94d9a73.aad3c4bc.js b/assets/js/d94d9a73.aad3c4bc.js new file mode 100644 index 00000000000..37c4968ca29 --- /dev/null +++ b/assets/js/d94d9a73.aad3c4bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3522],{92552:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var i=t(74848),a=t(28453);const r={description:"Private transaction overview"},s="Private transactions",c={id:"private-networks/concepts/privacy/private-transactions/index",title:"Private transactions",description:"Private transaction overview",source:"@site/docs/private-networks/concepts/privacy/private-transactions/index.md",sourceDirName:"private-networks/concepts/privacy/private-transactions",slug:"/private-networks/concepts/privacy/private-transactions/",permalink:"/private-networks/concepts/privacy/private-transactions/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/private-transactions/index.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{description:"Private transaction overview"},sidebar:"privateDocSidebar",previous:{title:"Privacy",permalink:"/private-networks/concepts/privacy/"},next:{title:"Private transaction processing",permalink:"/private-networks/concepts/privacy/private-transactions/processing"}},o={},d=[{value:"Besu and Tessera keys",id:"besu-and-tessera-keys",level:2},{value:"Nonces",id:"nonces",level:2},{value:"Private transaction nonce",id:"private-transaction-nonce",level:3},{value:"Private nonce validation",id:"private-nonce-validation",level:3},{value:"Private nonce management",id:"private-nonce-management",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"private-transactions",children:"Private transactions"})}),"\n",(0,i.jsx)(n.p,{children:"Private transactions have the same parameters as public Ethereum transactions, with the following additions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"privateFrom"})," - The Tessera public key of the transaction sender."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"One of the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"privateFor"})," - The Tessera public keys of the transaction recipients."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"privacyGroupId"})," - ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"The privacy group to receive the transaction"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"restriction"})," - Whether the private transaction is ",(0,i.jsx)(n.code,{children:"restricted"})," or ",(0,i.jsx)(n.code,{children:"unrestricted"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"restricted"})," - Only the nodes participating in the transaction receive and store the payload of the private transaction."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"unrestricted"})," - All nodes in the network receive the payload of the private transaction, but only the nodes participating in the transaction can read the transaction."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Besu implements ",(0,i.jsx)(n.code,{children:"restricted"})," private transactions only."]})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"gas"})," and ",(0,i.jsx)(n.code,{children:"gasPrice"})," are used by the ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction (PMT)"}),", not the private transaction itself."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Because gas isn't required in private transactions, inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks. Ensure your network has a mechanism to ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/#privacy-enabled-networks",children:"establish trust offchain"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["You can ",(0,i.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/private-transactions",children:"create and send private transactions"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"besu-and-tessera-keys",children:"Besu and Tessera keys"}),"\n",(0,i.jsxs)(n.p,{children:["Besu and Tessera nodes both have public/private key pairs identifying them. A Besu node sending a private transaction to a Tessera node signs the transaction with the Besu node private key. The ",(0,i.jsx)(n.code,{children:"privateFrom"})," and ",(0,i.jsx)(n.code,{children:"privateFor"})," parameters specified in the RLP-encoded transaction string for ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,i.jsx)(n.code,{children:"eea_sendRawTransaction"})})," are the public keys of the Tessera nodes sending and receiving the transaction."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The mapping of Besu node addresses to Tessera node public keys is offchain. That is, the sender of a private transaction must know the Tessera node public key of the recipient."})}),"\n",(0,i.jsx)(n.h2,{id:"nonces",children:"Nonces"}),"\n",(0,i.jsx)(n.p,{children:"A nonce is the number of previous transactions made by the sender."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"Private transaction processing"})," involves two transactions: the private transaction distributed to involved participants, and the privacy marker transaction (PMT) included on the public blockchain. Each of these transactions has its own nonce. Since the PMT is a public transaction, the PMT nonce is the public nonce for the account."]}),"\n",(0,i.jsx)(n.h3,{id:"private-transaction-nonce",children:"Private transaction nonce"}),"\n",(0,i.jsxs)(n.p,{children:["Besu maintains separate private states for each ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy group"}),". The private transaction nonce for an account is specific to the privacy group. That is, the nonce for account A for privacy group ABC is different to the nonce for account A for privacy group AB."]}),"\n",(0,i.jsx)(n.h3,{id:"private-nonce-validation",children:"Private nonce validation"}),"\n",(0,i.jsxs)(n.p,{children:["Unlike public transactions, private transactions are not submitted to the ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/transactions/pool",children:"transaction pool"}),". The private transaction is distributed directly to the participants in the transaction, and the PMT is submitted to the transaction pool."]}),"\n",(0,i.jsxs)(n.p,{children:["Unlike ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/transactions/validation",children:"public transaction nonces"}),", private transaction nonces aren't validated when the private transaction is submitted. If a private transaction has an incorrect nonce, the PMT is still valid and is added to a block. However, in this scenario, the private transaction execution fails when ",(0,i.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"processing the PMT"})," for the private transaction with the incorrect nonce."]}),"\n",(0,i.jsx)(n.p,{children:"The following private transaction flow illustrates when nonce validation occurs:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Submit a private transaction with a ",(0,i.jsx)(n.a,{href:"#private-transaction-nonce",children:"nonce value"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The private transaction is distributed to all participants in the privacy group."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The PMT is created and submitted to the transaction pool with a nonce of ",(0,i.jsx)(n.code,{children:"0"})," if using one-time accounts. If using a specific account with ",(0,i.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,i.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})}),", the public nonce for that account is obtained and used for the PMT."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The PMT is mined and included in the block."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After the block containing the PMT is imported, and the PMT is processed, the private transaction is retrieved from the private transaction manager and executed."}),"\n",(0,i.jsx)(n.p,{children:"If the private transaction was submitted with a correct nonce in step 1, the nonce is validated as correct. If an incorrect nonce was submitted, the private transaction execution fails."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"private-nonce-management",children:"Private nonce management"}),"\n",(0,i.jsxs)(n.p,{children:["In Besu, you call ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#eth_gettransactioncount",children:(0,i.jsx)(n.code,{children:"eth_getTransactionCount"})})," to get a nonce, then use that nonce with ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,i.jsx)(n.code,{children:"eea_sendRawTransaction"})})," to send a private transaction."]}),"\n",(0,i.jsxs)(n.p,{children:["However, when you send multiple transactions in row, if a subsequent call to ",(0,i.jsx)(n.code,{children:"getTransactionCount"})," happens before a previous transaction is processed, you can get the same nonce again."]}),"\n",(0,i.jsx)(n.p,{children:"You can manage private nonces in multiple ways:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Let Besu handle it. You just need to wait long enough between calls to ",(0,i.jsx)(n.code,{children:"sendRawTransaction"})," for the transactions to process. The current window is around 1.5 seconds, depending on block time."]}),"\n",(0,i.jsxs)(n.p,{children:["Public transactions deal with this issue, but the window is shorter, since you can use the transaction pool to take into account pending transactions (by using ",(0,i.jsx)(n.code,{children:'eth_getTransactionCount("pending")'}),")."]}),"\n",(0,i.jsx)(n.p,{children:"For private transactions, the window is longer because private transactions aren't submitted to the transaction pool. You must wait until the private transaction's corresponding PMT is included in a block."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Manage the nonce yourself, by keeping track of and providing the nonce at each call. We recommend this if you're ",(0,i.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/concurrent-private-transactions",children:"sending many transactions that are independent of each other"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["You can use ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#priv_gettransactioncount",children:(0,i.jsx)(n.code,{children:"priv_getTransactionCount"})})," or ",(0,i.jsx)(n.a,{href:"/private-networks/reference/api/#priv_geteeatransactioncount",children:(0,i.jsx)(n.code,{children:"priv_getEeaTransactionCount"})})," to get the nonce for an account for the specified privacy group or participants."]})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.a,{href:"https://github.com/ConsenSys/web3js-quorum/blob/9a0f9eb1b91a4a0d93801f77782b509ae2e7314c/example/concurrentPrivateTransactions/concurrentPrivateTransactions.js",children:"web3js-quorum library includes an example"})," of nonce management when ",(0,i.jsx)(n.a,{href:"/private-networks/how-to/send-transactions/concurrent-private-transactions",children:"sending concurrent private transactions"}),". The example calculates the correct nonces for the private transactions and PMTs outside of Besu."]})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var i=t(96540);const a={},r=i.createContext(a);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d97c1e1b.59b77cac.js b/assets/js/d97c1e1b.59b77cac.js new file mode 100644 index 00000000000..f4f25f482e8 --- /dev/null +++ b/assets/js/d97c1e1b.59b77cac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3691],{23485:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Tutorials","slug":"public-networks/tutorials","permalink":"/public-networks/tutorials","sidebar":"publicDocSidebar","navigation":{"previous":{"title":"Node keys","permalink":"/public-networks/concepts/node-keys"},"next":{"title":"Run Besu and Teku on Mainnet","permalink":"/public-networks/tutorials/besu-teku-mainnet"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/dbf86eb1.25be7d49.js b/assets/js/dbf86eb1.25be7d49.js new file mode 100644 index 00000000000..986444b39d3 --- /dev/null +++ b/assets/js/dbf86eb1.25be7d49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9291],{26036:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>f,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var c=n(74848),r=n(28453);const o={title:"Pre-deploy a contract",description:"Pre-deploying contracts in the genesis file",sidebar_position:5,tags:["private networks"]},i="Pre-deploy contracts in the genesis file",s={id:"private-networks/how-to/configure/contracts",title:"Pre-deploy a contract",description:"Pre-deploying contracts in the genesis file",source:"@site/docs/private-networks/how-to/configure/contracts.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/contracts",permalink:"/private-networks/how-to/configure/contracts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/contracts.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Pre-deploy a contract",description:"Pre-deploying contracts in the genesis file",sidebar_position:5,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Validators",permalink:"/private-networks/how-to/configure/validators"},next:{title:"Client and server TLS",permalink:"/private-networks/how-to/configure/tls/client-and-server"}},a={},d=[];function l(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(t.header,{children:(0,c.jsx)(t.h1,{id:"pre-deploy-contracts-in-the-genesis-file",children:"Pre-deploy contracts in the genesis file"})}),"\n",(0,c.jsxs)(t.p,{children:["To pre-deploy contracts when starting Besu, specify the contract code in the ",(0,c.jsx)(t.a,{href:"/public-networks/concepts/genesis-file",children:"genesis file"}),"."]}),"\n",(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:"language-json",metastring:'title="Contract code in the genesis file"',children:'{\n ...\n "alloc": {\n "0x0ffd23af8eebc60b3cfdeed6f814988757237314": {\n "balance": "0x100000000000000000000000000000000000000000000000000",\n "code": "0x6080604052600436106043576000357c010000000000000000000000000000000000000000000000000000000090048063010fc84214604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b80600081905550807f04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce360405160405180910390a25056fea165627a7a7230582038cb7ea327af8f73feabcfbff64498f1e74831e67f7c75286760d3845c6747c70029",\n "storage": {\n "7aa07e0c924147697605046b7c2c32645b7bbfb41e0ac5d0a84ac93cbb759798": "0000000000000000000000000000000000000000000000000000000000000001",\n "cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb": "0000000000000000000000000000000000000000000000000000000000000001",\n }\n }\n },\n ...\n}\n'})}),"\n",(0,c.jsx)(t.p,{children:"The contract code in the genesis file defines the:"}),"\n",(0,c.jsxs)(t.ul,{children:["\n",(0,c.jsx)(t.li,{children:"Address."}),"\n",(0,c.jsx)(t.li,{children:"Balance."}),"\n",(0,c.jsx)(t.li,{children:"Bytecode."}),"\n",(0,c.jsx)(t.li,{children:"Key value pairs for contract storage."}),"\n"]})]})}function f(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var c=n(96540);const r={},o=c.createContext(r);function i(e){const t=c.useContext(o);return c.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),c.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd3e5b84.1cd1b92a.js b/assets/js/dd3e5b84.1cd1b92a.js new file mode 100644 index 00000000000..43f78056db1 --- /dev/null +++ b/assets/js/dd3e5b84.1cd1b92a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7806],{37473:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var r=s(74848),t=s(28453),i=s(11470),o=s(19365);const a={title:"Create a permissioned network",sidebar_position:1,description:"Besu create a permissioned network",toc_max_heading_level:3,tags:["private networks"]},d="Create a permissioned network",l={id:"private-networks/tutorials/permissioning/index",title:"Create a permissioned network",description:"Besu create a permissioned network",source:"@site/docs/private-networks/tutorials/permissioning/index.md",sourceDirName:"private-networks/tutorials/permissioning",slug:"/private-networks/tutorials/permissioning/",permalink:"/private-networks/tutorials/permissioning/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/permissioning/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Create a permissioned network",sidebar_position:1,description:"Besu create a permissioned network",toc_max_heading_level:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Create a privacy-enabled network using the Quorum Developer Quickstart",permalink:"/private-networks/tutorials/privacy/quickstart"},next:{title:"Deploy a smart contract",permalink:"/private-networks/tutorials/contracts/"}},c={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create folders",id:"1-create-folders",level:3},{value:"2. Create the configuration file",id:"2-create-the-configuration-file",level:3},{value:"3. Generate node keys and a genesis file",id:"3-generate-node-keys-and-a-genesis-file",level:3},{value:"4. Copy the genesis file to the Permissioned-Network directory",id:"4-copy-the-genesis-file-to-the-permissioned-network-directory",level:3},{value:"5. Copy the node private keys to the node directories",id:"5-copy-the-node-private-keys-to-the-node-directories",level:3},{value:"6. Create the permissions configuration file",id:"6-create-the-permissions-configuration-file",level:3},{value:"7. Start Node-1",id:"7-start-node-1",level:3},{value:"8. Start Node-2",id:"8-start-node-2",level:3},{value:"9. Start Node-3",id:"9-start-node-3",level:3},{value:"10. Start Node-4",id:"10-start-node-4",level:3},{value:"11. Add enode URLs for nodes to permissions configuration file",id:"11-add-enode-urls-for-nodes-to-permissions-configuration-file",level:3},{value:"12. Add nodes as peers",id:"12-add-nodes-as-peers",level:3},{value:"13. Confirm permissioned network is working",id:"13-confirm-permissioned-network-is-working",level:3},{value:"Check peer count",id:"check-peer-count",level:4},{value:"Send a transaction from an account in the allowlist",id:"send-a-transaction-from-an-account-in-the-allowlist",level:4},{value:"Try sending a transaction from an account not in the accounts allowlist",id:"try-sending-a-transaction-from-an-account-not-in-the-accounts-allowlist",level:4},{value:"Start a node not on the nodes allowlist",id:"start-a-node-not-on-the-nodes-allowlist",level:4},{value:"Stop nodes",id:"stop-nodes",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"create-a-permissioned-network",children:"Create a permissioned network"})}),"\n",(0,r.jsxs)(n.p,{children:["The following steps set up a permissioned network with local node and account permissions. The network uses the ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0 proof of authority consensus protocol"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"danger",children:(0,r.jsx)(n.p,{children:"A permissioned Ethereum network as described here is not protected against all attack vectors. We recommend applying defense in depth to protect your infrastructure."})}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/private-networks/get-started/install/binary-distribution",children:"Besu"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://curl.haxx.se/download.html",children:"curl (or similar Web service client)"})}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"steps",children:"Steps"}),"\n",(0,r.jsx)(n.h3,{id:"1-create-folders",children:"1. Create folders"}),"\n",(0,r.jsx)(n.p,{children:"Each node requires a data directory for the blockchain data."}),"\n",(0,r.jsx)(n.p,{children:"Create directories for your permissioned network and each of the three nodes, and a data directory for each node:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Permissioned-Network/\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2514\u2500\u2500 Node-4\n \u251c\u2500\u2500 data\n"})}),"\n",(0,r.jsx)(n.h3,{id:"2-create-the-configuration-file",children:"2. Create the configuration file"}),"\n",(0,r.jsxs)(n.p,{children:["The configuration file defines the ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"IBFT 2.0 genesis file"})," and the number of node key pairs to generate."]}),"\n",(0,r.jsxs)(n.p,{children:["The configuration file has two nested JSON nodes. The first is the ",(0,r.jsx)(n.code,{children:"genesis"})," property defining the IBFT 2.0 genesis file, except for the ",(0,r.jsx)(n.code,{children:"extraData"})," string, which Besu generates automatically in the resulting genesis file. The second is the ",(0,r.jsx)(n.code,{children:"blockchain"})," property defining the number of key pairs to generate."]}),"\n",(0,r.jsxs)(n.p,{children:["Copy the following configuration file definition to a file called ",(0,r.jsx)(n.code,{children:"ibftConfigFile.json"})," and save it in the ",(0,r.jsx)(n.code,{children:"Permissioned-Network"})," directory:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "genesis": {\n "config": {\n "chainId": 1337,\n "berlinBlock": 0,\n "ibft2": {\n "blockperiodseconds": 2,\n "epochlength": 30000,\n "requesttimeoutseconds": 4\n }\n },\n "nonce": "0x0",\n "timestamp": "0x58ee40ba",\n "gasLimit": "0x47b760",\n "difficulty": "0x1",\n "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",\n "coinbase": "0x0000000000000000000000000000000000000000",\n "alloc": {\n "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {\n "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "0xad78ebc5ac6200000"\n },\n "627306090abaB3A6e1400e9345bC60c78a8BEf57": {\n "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n },\n "f17f52151EbEF6C7334FAD080c5704D77216b732": {\n "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",\n "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored",\n "balance": "90000000000000000000000"\n }\n }\n },\n "blockchain": {\n "nodes": {\n "generate": true,\n "count": 4\n }\n }\n}\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Security warning",type:"danger",children:(0,r.jsx)(n.p,{children:"Don't use the accounts in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure."})}),"\n",(0,r.jsx)(n.h3,{id:"3-generate-node-keys-and-a-genesis-file",children:"3. Generate node keys and a genesis file"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"Permissioned-Network"})," directory, generate the node key and genesis file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Besu creates the following in the ",(0,r.jsx)(n.code,{children:"networkFiles"})," directory:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"genesis.json"})," - The genesis file including the ",(0,r.jsx)(n.code,{children:"extraData"})," property specifying the four nodes are validators."]}),"\n",(0,r.jsx)(n.li,{children:"A directory for each node named using the node address and containing the public and private key for each node."}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"networkFiles/\n\u251c\u2500\u2500 genesis.json\n\u2514\u2500\u2500 keys\n \u251c\u2500\u2500 0x438821c42b812fecdcea7fe8235806a412712fc0\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u251c\u2500\u2500 0xcd5629bd37155608a0c9b28c4fd19310d53b3184\n \u2502\xa0\xa0 \u251c\u2500\u2500 key\n \u2502\xa0\xa0 \u2514\u2500\u2500 key.pub\n \u2514\u2500\u2500 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a\n \u251c\u2500\u2500 key\n \u2514\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(n.h3,{id:"4-copy-the-genesis-file-to-the-permissioned-network-directory",children:"4. Copy the genesis file to the Permissioned-Network directory"}),"\n",(0,r.jsxs)(n.p,{children:["Copy the ",(0,r.jsx)(n.code,{children:"genesis.json"})," file to the ",(0,r.jsx)(n.code,{children:"Permisssioned-Network"})," directory."]}),"\n",(0,r.jsx)(n.h3,{id:"5-copy-the-node-private-keys-to-the-node-directories",children:"5. Copy the node private keys to the node directories"}),"\n",(0,r.jsxs)(n.p,{children:["For each node, copy the key files to the ",(0,r.jsx)(n.code,{children:"data"})," directory for that node"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"Permissioned-Network/\n\u251c\u2500\u2500 genesis.json\n\u251c\u2500\u2500 Node-1\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-2\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-3\n\u2502\xa0\xa0 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n\u251c\u2500\u2500 Node-4\n\u2502 \u251c\u2500\u2500 data\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key\n\u2502 \u2502 \xa0\xa0 \u251c\u2500\u2500 key.pub\n"})}),"\n",(0,r.jsx)(n.h3,{id:"6-create-the-permissions-configuration-file",children:"6. Create the permissions configuration file"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/use-permissioning/local#permissions-configuration-file",children:"permissions configuration file"})," defines the nodes and accounts allowlists."]}),"\n",(0,r.jsxs)(n.p,{children:["Copy the following permissions configuration to a file called ",(0,r.jsx)(n.code,{children:"permissions_config.toml"})," and save a copy in the ",(0,r.jsx)(n.code,{children:"Node-1/data"}),", ",(0,r.jsx)(n.code,{children:"Node-2/data"}),", ",(0,r.jsx)(n.code,{children:"Node-3/data"}),", and ",(0,r.jsx)(n.code,{children:"Node-4/data"})," directories:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-toml",metastring:'title="permissions_config.toml"',children:'accounts-allowlist=["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "0x627306090abaB3A6e1400e9345bC60c78a8BEf57"]\n\nnodes-allowlist=[]\n'})}),"\n",(0,r.jsx)(n.p,{children:"The permissions configuration file includes the first two accounts from the genesis file."}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#perm_addnodestoallowlist",children:(0,r.jsx)(n.code,{children:"perm_addNodesToAllowlist"})})," JSON-RPC API method to add permissioned nodes after starting the nodes."]}),"\n",(0,r.jsx)(n.h3,{id:"7-start-node-1",children:"7. Start Node-1"}),"\n",(0,r.jsx)(n.p,{children:"Use the following command:"}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*"\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*"\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line allows you to enable:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Nodes and accounts permissions using ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-config-file-enabled",children:(0,r.jsx)(n.code,{children:"--permissions-nodes-config-file-enabled"})})," and ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-accounts-config-file-enabled",children:(0,r.jsx)(n.code,{children:"--permissions-accounts-config-file-enabled"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["The JSON-RPC API using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-enabled",children:(0,r.jsx)(n.code,{children:"--rpc-http-enabled"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:"ADMIN"}),", ",(0,r.jsx)(n.code,{children:"ETH"}),", ",(0,r.jsx)(n.code,{children:"NET"}),", ",(0,r.jsx)(n.code,{children:"PERM"}),", and ",(0,r.jsx)(n.code,{children:"IBFT"})," APIs using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,r.jsx)(n.code,{children:"--rpc-http-api"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["All-host access to the HTTP JSON-RPC API using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#host-allowlist",children:(0,r.jsx)(n.code,{children:"--host-allowlist"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["All-domain access to the node through the HTTP JSON-RPC API using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-cors-origins",children:(0,r.jsx)(n.code,{children:"--rpc-http-cors-origins"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. You need the enode URL to specify Node-1 as a peer and update the permissions configuration file in the following steps."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Node 1 Enode URL",src:s(14739).A+"",width:"988",height:"126"})}),"\n",(0,r.jsx)(n.h3,{id:"8-start-node-2",children:"8. Start Node-2"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-2"})," directory, and start Node-2:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30304 --rpc-http-port=8546\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30304 --rpc-http-port=8546\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 for P2P discovery using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 for HTTP JSON-RPC using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A data directory for Node-2 using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#7-start-node-1",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. You need the enode URL to update the permissions configuration file in the following steps."]}),"\n",(0,r.jsx)(n.h3,{id:"9-start-node-3",children:"9. Start Node-3"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-3"})," directory, and start Node-3:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30305 --rpc-http-port=8547\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30305 --rpc-http-port=8547\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 and Node-2 for P2P discovery using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1 and Node-2 for HTTP JSON-RPC using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A data directory for Node-3 using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#7-start-node-1",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. You need the enode URL to update the permissions configuration file in the following steps."]}),"\n",(0,r.jsx)(n.h3,{id:"10-start-node-4",children:"10. Start Node-4"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal, change to the ",(0,r.jsx)(n.code,{children:"Node-4"})," directory, and start Node-4:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30306 --rpc-http-port=8548\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30306 --rpc-http-port=8548\n'})})})]}),"\n",(0,r.jsx)(n.p,{children:"The command line specifies:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1, Node-2, and Node-3 for P2P discovery using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,r.jsx)(n.code,{children:"--p2p-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,r.jsx)(n.code,{children:"--rpc-http-port"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["A data directory for Node-4 using ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Other options as for ",(0,r.jsx)(n.a,{href:"#7-start-node-1",children:"Node-1"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["When the node starts, the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode URL"})," displays. You need the enode URL to update the permissions configuration file in the following steps."]}),"\n",(0,r.jsx)(n.h3,{id:"11-add-enode-urls-for-nodes-to-permissions-configuration-file",children:"11. Add enode URLs for nodes to permissions configuration file"}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal and use the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/api/#perm_addnodestoallowlist",children:(0,r.jsx)(n.code,{children:"perm_addNodesToAllowlist"})})," JSON-RPC API method to add the nodes to the permissions configuration file for each node."]}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"<EnodeNode1>"}),", ",(0,r.jsx)(n.code,{children:"<EnodeNode2>"}),", ",(0,r.jsx)(n.code,{children:"<EnodeNode3>"}),", and ",(0,r.jsx)(n.code,{children:"<EnodeNode4>"})," with the enode URL displayed when starting each node."]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Node-1",label:"Node-1",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}\' http://127.0.0.1:8545\n'})})}),(0,r.jsx)(o.A,{value:"Node-2",label:"Node-2",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}\' http://127.0.0.1:8546\n'})})}),(0,r.jsx)(o.A,{value:"Node-3",label:"Node-3",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}\' http://127.0.0.1:8547\n'})})}),(0,r.jsx)(o.A,{value:"Node-4",label:"Node-4",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["<EnodeNode1>","<EnodeNode2>","<EnodeNode3>","EnodeNode4"]], "id":1}\' http://127.0.0.1:8548\n'})})})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"The curl call is the same for each node except for the JSON-RPC endpoint."})}),"\n",(0,r.jsx)(n.h3,{id:"12-add-nodes-as-peers",children:"12. Add nodes as peers"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#admin_addpeer",children:(0,r.jsx)(n.code,{children:"admin_addPeer"})})," JSON-RPC API method to add Node-1 as a peer for Node-2, Node-3, and Node-4."]}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"<EnodeNode1>"})," with the enode URL displayed when starting Node-1."]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Node-2",label:"Node-2",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}\' http://127.0.0.1:8546\n'})})}),(0,r.jsx)(o.A,{value:"Node-3",label:"Node-3",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}\' http://127.0.0.1:8547\n'})})}),(0,r.jsx)(o.A,{value:"Node-4",label:"Node-4",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode1>"],"id":1}\' http://127.0.0.1:8548\n'})})})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"The curl call is the same for each node except for the JSON-RPC endpoint."})}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"<EnodeNode2>"})," with the enode URL displayed when starting Node-2."]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"Node-3",label:"Node-3",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode2>"],"id":1}\' http://127.0.0.1:8547\n'})})}),(0,r.jsx)(o.A,{value:"Node-4",label:"Node-4",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode2>"],"id":1}\' http://127.0.0.1:8548\n'})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"<EnodeNode3>"})," with the enode URL displayed when starting Node-3."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"admin_addPeer","params":["<EnodeNode3>"],"id":1}\' http://127.0.0.1:8548\n'})}),"\n",(0,r.jsx)(n.h3,{id:"13-confirm-permissioned-network-is-working",children:"13. Confirm permissioned network is working"}),"\n",(0,r.jsx)(n.h4,{id:"check-peer-count",children:"Check peer count"}),"\n",(0,r.jsxs)(n.p,{children:["Use curl to call the JSON-RPC API ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,r.jsx)(n.code,{children:"net_peerCount"})})," method and confirm the nodes are functioning as peers:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}\' localhost:8545\n'})}),"\n",(0,r.jsx)(n.p,{children:"The result confirms Node-1 (the node running the JSON-RPC service) has three peers (Node-2, Node-3 and Node-4):"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x3"\n}\n'})}),"\n",(0,r.jsx)(n.h4,{id:"send-a-transaction-from-an-account-in-the-allowlist",children:"Send a transaction from an account in the allowlist"}),"\n",(0,r.jsxs)(n.p,{children:["Import the first account from the genesis file into MetaMask and send transactions, as described in the ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),":"]}),"\n",(0,r.jsx)(n.admonition,{title:"Account 1",type:"info",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Address: ",(0,r.jsx)(n.code,{children:"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"})]}),"\n",(0,r.jsxs)(n.li,{children:["Private key : ",(0,r.jsx)(n.code,{children:"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"})]}),"\n",(0,r.jsxs)(n.li,{children:["Initial balance : ",(0,r.jsx)(n.code,{children:"0xad78ebc5ac6200000"})," (200000000000000000000 in decimal)"]}),"\n"]})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Besu doesn't support ",(0,r.jsx)(n.a,{href:"/public-networks/how-to/send-transactions",children:"private key management"}),"."]})}),"\n",(0,r.jsx)(n.h4,{id:"try-sending-a-transaction-from-an-account-not-in-the-accounts-allowlist",children:"Try sending a transaction from an account not in the accounts allowlist"}),"\n",(0,r.jsxs)(n.p,{children:["Import the third account from the genesis file into MetaMask and try to send a transaction, as described in the ",(0,r.jsx)(n.a,{href:"/private-networks/tutorials/quickstart#create-a-transaction-using-metamask",children:"Quickstart tutorial"}),":"]}),"\n",(0,r.jsx)(n.admonition,{title:"Account 3",type:"info",children:(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Address: ",(0,r.jsx)(n.code,{children:"0xf17f52151EbEF6C7334FAD080c5704D77216b732"})]}),"\n",(0,r.jsxs)(n.li,{children:["Private key: ",(0,r.jsx)(n.code,{children:"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f"})]}),"\n",(0,r.jsxs)(n.li,{children:["Initial balance: ",(0,r.jsx)(n.code,{children:"0x90000000000000000000000"})," (2785365088392105618523029504 in decimal)"]}),"\n"]})}),"\n",(0,r.jsx)(n.h4,{id:"start-a-node-not-on-the-nodes-allowlist",children:"Start a node not on the nodes allowlist"}),"\n",(0,r.jsxs)(n.p,{children:["In your ",(0,r.jsx)(n.code,{children:"Permissioned-Network"})," directory, create a ",(0,r.jsx)(n.code,{children:"Node-5"})," directory and ",(0,r.jsx)(n.code,{children:"data"})," directory inside it."]}),"\n",(0,r.jsxs)(n.p,{children:["Change to the ",(0,r.jsx)(n.code,{children:"Node-5"})," directory and start Node-5 specifying the Node-1 enode URL as the bootnode:"]}),"\n",(0,r.jsxs)(i.A,{children:[(0,r.jsx)(o.A,{value:"MacOS",label:"MacOS",default:!0,children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --bootnodes="<EnodeNode1>" --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30307 --rpc-http-port=8549\n'})})}),(0,r.jsx)(o.A,{value:"Windows",label:"Windows",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'besu --data-path=data --bootnodes="<EnodeNode1>" --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist="*" --rpc-http-cors-origins="*" --p2p-port=30307 --rpc-http-port=8549\n'})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Start another terminal and use curl to call the JSON-RPC API ",(0,r.jsx)(n.a,{href:"/public-networks/reference/api/#net_peercount",children:(0,r.jsx)(n.code,{children:"net_peerCount"})})," method:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}\' localhost:8549\n'})}),"\n",(0,r.jsx)(n.p,{children:"The result confirms Node-5 has no peers even though it specifies Node-1 as a bootnode:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": "0x0"\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"stop-nodes",children:"Stop nodes"}),"\n",(0,r.jsx)(n.p,{children:"When finished using the permissioned network, stop all nodes using Ctrl+C in each terminal window."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["To restart the permissioned network in the future, start from ",(0,r.jsx)(n.a,{href:"#7-start-node-1",children:"step 7"}),"."]})})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>o});s(96540);var r=s(18215);const t={tabItem:"tabItem_Ymn6"};var i=s(74848);function o(e){let{children:n,hidden:s,className:o}=e;return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,o),hidden:s,children:n})}},11470:(e,n,s)=>{s.d(n,{A:()=>k});var r=s(96540),t=s(18215),i=s(23104),o=s(56347),a=s(205),d=s(57485),l=s(31682),c=s(70679);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:s}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((e=>{let{props:{value:n,label:s,attributes:r,default:t}}=e;return{value:n,label:s,attributes:r,default:t}}))}(s);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,s])}function u(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:s}=e;const t=(0,o.W6)(),i=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,d.aZ)(i),(0,r.useCallback)((e=>{if(!i)return;const n=new URLSearchParams(t.location.search);n.set(i,e),t.replace({...t.location,search:n.toString()})}),[i,t])]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,i=p(e),[o,d]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!u({value:n,tabValues:s}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=s.find((e=>e.default))??s[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:i}))),[l,h]=f({queryString:s,groupId:t}),[x,j]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,i]=(0,c.Dv)(s);return[t,(0,r.useCallback)((e=>{s&&i.set(e)}),[s,i])]}({groupId:t}),m=(()=>{const e=l??x;return u({value:e,tabValues:i})?e:null})();(0,a.A)((()=>{m&&d(m)}),[m]);return{selectedValue:o,selectValue:(0,r.useCallback)((e=>{if(!u({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);d(e),h(e),j(e)}),[h,j,i]),tabValues:i}}var j=s(92303);const m={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var g=s(74848);function b(e){let{className:n,block:s,selectedValue:r,selectValue:o,tabValues:a}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.a_)(),c=e=>{const n=e.currentTarget,s=d.indexOf(n),t=a[s].value;t!==r&&(l(n),o(t))},h=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const s=d.indexOf(e.currentTarget)+1;n=d[s]??d[0];break}case"ArrowLeft":{const s=d.indexOf(e.currentTarget)-1;n=d[s]??d[d.length-1];break}}n?.focus()};return(0,g.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":s},n),children:a.map((e=>{let{value:n,label:s,attributes:i}=e;return(0,g.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>d.push(e),onKeyDown:h,onClick:c,...i,className:(0,t.A)("tabs__item",m.tabItem,i?.className,{"tabs__item--active":r===n}),children:s??n},n)}))})}function N(e){let{lazy:n,children:s,selectedValue:i}=e;const o=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===i));return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,g.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==i})))})}function w(e){const n=x(e);return(0,g.jsxs)("div",{className:(0,t.A)("tabs-container",m.tabList),children:[(0,g.jsx)(b,{...n,...e}),(0,g.jsx)(N,{...n,...e})]})}function k(e){const n=(0,j.A)();return(0,g.jsx)(w,{...e,children:h(e.children)},String(n))}},14739:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/EnodeStartup-145939e1c789c28e464db82faa0fb3ca.png"},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var r=s(96540);const t={},i=r.createContext(t);function o(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd5955a1.57842f6a.js b/assets/js/dd5955a1.57842f6a.js new file mode 100644 index 00000000000..7538fed570d --- /dev/null +++ b/assets/js/dd5955a1.57842f6a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6493],{13571:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>b,frontMatter:()=>t,metadata:()=>l,toc:()=>u});var c=a(74848),s=a(28453),r=a(11470),i=a(19365);const t={title:"Engine API",description:"Engine API methods reference",toc_max_heading_level:3,tags:["public networks"]},d="Engine API methods",l={id:"public-networks/reference/engine-api/index",title:"Engine API",description:"Engine API methods reference",source:"@site/docs/public-networks/reference/engine-api/index.md",sourceDirName:"public-networks/reference/engine-api",slug:"/public-networks/reference/engine-api/",permalink:"/public-networks/reference/engine-api/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/engine-api/index.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{title:"Engine API",description:"Engine API methods reference",toc_max_heading_level:3,tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Objects",permalink:"/public-networks/reference/api/objects"},next:{title:"Objects",permalink:"/public-networks/reference/engine-api/objects"}},o={},u=[{value:"Methods",id:"methods",level:2},{value:"<code>engine_exchangeCapabilities</code>",id:"engine_exchangecapabilities",level:3},{value:"Parameters",id:"parameters",level:4},{value:"Returns",id:"returns",level:4},{value:"<code>engine_exchangeTransitionConfigurationV1</code>",id:"engine_exchangetransitionconfigurationv1",level:3},{value:"Parameters",id:"parameters-1",level:4},{value:"Returns",id:"returns-1",level:4},{value:"<code>engine_forkchoiceUpdatedV1</code>",id:"engine_forkchoiceupdatedv1",level:3},{value:"Parameters",id:"parameters-2",level:4},{value:"Returns",id:"returns-2",level:4},{value:"<code>engine_getPayloadBodiesByHashV1</code>",id:"engine_getpayloadbodiesbyhashv1",level:3},{value:"Parameters",id:"parameters-3",level:4},{value:"Returns",id:"returns-3",level:4},{value:"<code>engine_getPayloadBodiesByRangeV1</code>",id:"engine_getpayloadbodiesbyrangev1",level:3},{value:"Parameters",id:"parameters-4",level:4},{value:"Returns",id:"returns-4",level:4},{value:"<code>engine_getPayloadV1</code>",id:"engine_getpayloadv1",level:3},{value:"Parameters",id:"parameters-5",level:4},{value:"Returns",id:"returns-5",level:4},{value:"<code>engine_newPayloadV1</code>",id:"engine_newpayloadv1",level:3},{value:"Parameters",id:"parameters-6",level:4},{value:"Returns",id:"returns-6",level:4}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.header,{children:(0,c.jsx)(n.h1,{id:"engine-api-methods",children:"Engine API methods"})}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-and-consensus-clients",children:"Consensus and execution clients"})," communicate with each other using the Engine API. When running Besu as an execution client, ",(0,c.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api",children:"use these API calls"})," to communicate with a consensus client."]}),"\n",(0,c.jsx)(n.admonition,{type:"info",children:(0,c.jsx)(n.p,{children:"The engine API is enabled by default."})}),"\n",(0,c.jsxs)(n.p,{children:["See the ",(0,c.jsx)(n.a,{href:"https://github.com/ethereum/execution-apis/blob/0b965fb714ccd3faa3c939fdce1726e56679cdec/src/engine/specification.md",children:"Ethereum Engine API specification"})," for more information. Not all changes to the Engine API are documented on this page."]}),"\n",(0,c.jsx)(n.h2,{id:"methods",children:"Methods"}),"\n",(0,c.jsx)(n.h3,{id:"engine_exchangecapabilities",children:(0,c.jsx)(n.code,{children:"engine_exchangeCapabilities"})}),"\n",(0,c.jsx)(n.p,{children:"Exchanges a list of supported Engine API methods between the consensus client and Besu."}),"\n",(0,c.jsx)(n.h4,{id:"parameters",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"remoteCapabilities"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - Engine API method names that the consensus client supports"]}),"\n",(0,c.jsx)(n.h4,{id:"returns",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"localCapabilities"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - Engine API method names that Besu supports"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_exchangeCapabilities","params":[["engine_exchangeTransitionConfigurationV1","engine_forkchoiceUpdatedV1","engine_getPayloadBodiesByHash","engine_getPayloadBodiesByRangeV1","engine_getPayloadV1","engine_newPayloadV1"]],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_exchangeCapabilities",\n "params": [\n [\n "engine_exchangeTransitionConfigurationV1",\n "engine_forkchoiceUpdatedV1",\n "engine_getPayloadBodiesByHash",\n "engine_getPayloadBodiesByRangeV1",\n "engine_getPayloadV1",\n "engine_newPayloadV1"\n ]\n ],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": [\n "engine_getPayloadV1",\n "engine_getPayloadV2",\n "engine_executePayloadV1",\n "engine_newPayloadV1",\n "engine_newPayloadV2",\n "engine_forkchoiceUpdatedV1",\n "engine_forkchoiceUpdatedV2",\n "engine_exchangeTransitionConfigurationV1",\n "engine_getPayloadBodiesByHashV1",\n "engine_getPayloadBodiesByRangeV1"\n ]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_exchangetransitionconfigurationv1",children:(0,c.jsx)(n.code,{children:"engine_exchangeTransitionConfigurationV1"})}),"\n",(0,c.jsx)(n.p,{children:"Sends the transition configuration to the consensus client to verify the configuration between both clients."}),"\n",(0,c.jsx)(n.admonition,{type:"note",children:(0,c.jsx)(n.p,{children:"The execution client runs this call every 60 seconds in the background. The log displays a warning message if the call hasn't been sent in 120 seconds."})}),"\n",(0,c.jsx)(n.h4,{id:"parameters-1",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transitionConfiguration"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#transition-configuration-object",children:"Transition configuration object"})]}),"\n",(0,c.jsx)(n.h4,{id:"returns-1",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"transitionConfiguration"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#transition-configuration-object",children:"Transition configuration object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_exchangeTransitionConfigurationV1","params":[{"terminalTotalDifficulty": 0, "terminalBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "terminalBlockNumber": "0x1"}],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_exchangeTransitionConfigurationV1",\n "params": [\n {\n "terminalTotalDifficulty": 0,\n "terminalBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "terminalBlockNumber": "0x1"\n }\n ],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": {\n "terminalTotalDifficulty": 0,\n "terminalBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "terminalBlockNumber": "0x1"\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_forkchoiceupdatedv1",children:(0,c.jsx)(n.code,{children:"engine_forkchoiceUpdatedV1"})}),"\n",(0,c.jsx)(n.p,{children:"Updates the fork choice with the consensus client."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-2",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"forkchoiceState"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#fork-choice-state-object",children:"Fork choice state object"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"payloadAttributes"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#payload-attributes-object",children:"Payload attribute object"}),". Can be ",(0,c.jsx)(n.code,{children:"null"}),"."]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-2",children:"Returns"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"payloadStatus"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#payload-status-object",children:"Payload status object"})]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"payloadId"}),": ",(0,c.jsx)(n.em,{children:"data"})," - identifier of the payload build process or ",(0,c.jsx)(n.code,{children:"null"})]}),"\n"]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "safeBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "finalizedBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"},null],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_forkchoiceUpdatedV1",\n "params": [\n {\n "headBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "safeBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "finalizedBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"\n },\n null\n ],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": {\n "payloadStatus": {\n "status": "VALID",\n "latestValidHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "validationError": null\n },\n "payloadId": null\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_getpayloadbodiesbyhashv1",children:(0,c.jsx)(n.code,{children:"engine_getPayloadBodiesByHashV1"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the bodies of the execution payloads corresponding to the specified block hashes."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-3",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"blockHashes"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"strings"})," - Block hashes"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-3",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"engineGetPayloadBodiesResultV1"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - Execution payload body objects"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_getPayloadBodiesByHashV1","params":[["0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c","0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553"]],"id":1}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_getPayloadBodiesByHashV1",\n "params": [\n [\n "0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",\n "0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553"\n ]\n ],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": [{\n "transactions": ["0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65", "0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95", ...],\n "withdrawals": [{\n "index" : "0xf0",\n "validatorIndex" : "0xf0",\n "address" : "0x00000000000000000000000000000000000010f0",\n "amount" : "0x1"\n }, {\n "index" : "0xf1",\n "validatorIndex" : "0xf1",\n "address" : "0x00000000000000000000000000000000000010f1",\n "amount" : "0x1"\n }]\n }, {\n "transactions": ["0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe", "0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29", ...],\n "withdrawals": [{\n "index" : "0xf2",\n "validatorIndex" : "0xf2",\n "address" : "0x00000000000000000000000000000000000010f2",\n "amount" : "0x1"\n }, {\n "index" : "0xf3",\n "validatorIndex" : "0xf3",\n "address" : "0x00000000000000000000000000000000000010f3",\n "amount" : "0x1"\n }]\n }]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_getpayloadbodiesbyrangev1",children:(0,c.jsx)(n.code,{children:"engine_getPayloadBodiesByRangeV1"})}),"\n",(0,c.jsx)(n.p,{children:"Returns the bodies of the execution payloads corresponding to the specified range of block numbers."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-4",children:"Parameters"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"startBlockNumber"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Number of the starting block of the range, as a hexadecimal string"]}),"\n"]}),"\n",(0,c.jsxs)(n.li,{children:["\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"count"}),": ",(0,c.jsx)(n.em,{children:"string"})," - Number of blocks in the range (including the starting block), as a hexadecimal string"]}),"\n"]}),"\n"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-4",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"engineGetPayloadBodiesResultV1"}),": ",(0,c.jsx)(n.em,{children:"array"})," of ",(0,c.jsx)(n.em,{children:"objects"})," - Execution payload body objects"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_getPayloadBodiesByRangeV1","params":["0x20", "0x2"],"id":1}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_getPayloadBodiesByRangeV1",\n "params": ["0x20", "0x2"],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": [{\n "transactions": ["0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65", "0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95", ...],\n "withdrawals": [{\n "index" : "0xf0",\n "validatorIndex" : "0xf0",\n "address" : "0x00000000000000000000000000000000000010f0",\n "amount" : "0x1"\n }, {\n "index" : "0xf1",\n "validatorIndex" : "0xf1",\n "address" : "0x00000000000000000000000000000000000010f1",\n "amount" : "0x1"\n }]\n }, {\n "transactions": ["0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe", "0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29", ...],\n "withdrawals": [{\n "index" : "0xf2",\n "validatorIndex" : "0xf2",\n "address" : "0x00000000000000000000000000000000000010f2",\n "amount" : "0x1"\n }, {\n "index" : "0xf3",\n "validatorIndex" : "0xf3",\n "address" : "0x00000000000000000000000000000000000010f3",\n "amount" : "0x1"\n }]\n }]\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_getpayloadv1",children:(0,c.jsx)(n.code,{children:"engine_getPayloadV1"})}),"\n",(0,c.jsx)(n.p,{children:"Prepares the payload to send to the consensus client."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-5",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"payloadId"}),": ",(0,c.jsx)(n.em,{children:"data"})," - Identifier of the payload build process"]}),"\n",(0,c.jsx)(n.h4,{id:"returns-5",children:"Returns"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"executionPayload"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#execution-payload-object",children:"Execution payload object"})]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_getPayloadV1","params":["0x0000000021f32cc1"],"id":1}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_getPayloadV1",\n "params": ["0x0000000021f32cc1"],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 67,\n "result": {\n "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "blockNumber": "0x1",\n "gasLimit": "0x1c9c380",\n "gasUsed": "0x0",\n "timestamp": "0x5",\n "extraData": "0x",\n "baseFeePerGas": "0x7",\n "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "transactions": []\n }\n}\n'})})})]}),"\n",(0,c.jsx)(n.h3,{id:"engine_newpayloadv1",children:(0,c.jsx)(n.code,{children:"engine_newPayloadV1"})}),"\n",(0,c.jsx)(n.p,{children:"Executes the payload with the consensus client."}),"\n",(0,c.jsx)(n.h4,{id:"parameters-6",children:"Parameters"}),"\n",(0,c.jsxs)(n.p,{children:[(0,c.jsx)(n.code,{children:"executionPayload"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#execution-payload-object",children:"Execution payload object"})]}),"\n",(0,c.jsx)(n.h4,{id:"returns-6",children:"Returns"}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsxs)(n.li,{children:[(0,c.jsx)(n.code,{children:"payloadStatus"}),": ",(0,c.jsx)(n.em,{children:"object"})," - ",(0,c.jsx)(n.a,{href:"/public-networks/reference/engine-api/objects#payload-status-object",children:"Payload status object"})]}),"\n"]}),"\n",(0,c.jsxs)(r.A,{children:[(0,c.jsx)(i.A,{value:"curl HTTP",label:"curl HTTP",default:!0,children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-bash",children:'curl -X POST --data \'{"jsonrpc":"2.0","method":"engine_newPayloadV1","params":[\n {\n "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "blockNumber": "0x1",\n "gasLimit": "0x1c9c380",\n "gasUsed": "0x0",\n "timestamp": "0x5",\n "extraData": "0x",\n "baseFeePerGas": "0x7",\n "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "transactions": []\n }\n],"id":67}\' http://127.0.0.1:8550\n'})})}),(0,c.jsx)(i.A,{value:"wscat WS",label:"wscat WS",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "method": "engine_newPayloadV1",\n "params": [\n {\n "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",\n "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",\n "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",\n "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",\n "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",\n "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",\n "blockNumber": "0x1",\n "gasLimit": "0x1c9c380",\n "gasUsed": "0x0",\n "timestamp": "0x5",\n "extraData": "0x",\n "baseFeePerGas": "0x7",\n "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "transactions": []\n }\n ],\n "id": 67\n}\n'})})}),(0,c.jsx)(i.A,{value:"JSON result",label:"JSON result",children:(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": {\n "status": "VALID",\n "latestValidHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",\n "validationError": null\n }\n}\n'})})})]})]})}function b(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(h,{...e})}):h(e)}},19365:(e,n,a)=>{a.d(n,{A:()=>i});a(96540);var c=a(18215);const s={tabItem:"tabItem_Ymn6"};var r=a(74848);function i(e){let{children:n,hidden:a,className:i}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,c.A)(s.tabItem,i),hidden:a,children:n})}},11470:(e,n,a)=>{a.d(n,{A:()=>P});var c=a(96540),s=a(18215),r=a(23104),i=a(56347),t=a(205),d=a(57485),l=a(31682),o=a(70679);function u(e){return c.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,c.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:a}=e;return(0,c.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:a,attributes:c,default:s}}=e;return{value:n,label:a,attributes:c,default:s}}))}(a);return function(e){const n=(0,l.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function b(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:a}=e;const s=(0,i.W6)(),r=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,d.aZ)(r),(0,c.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(s.location.search);n.set(r,e),s.replace({...s.location,search:n.toString()})}),[r,s])]}function x(e){const{defaultValue:n,queryString:a=!1,groupId:s}=e,r=h(e),[i,d]=(0,c.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!b({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const c=a.find((e=>e.default))??a[0];if(!c)throw new Error("Unexpected error: 0 tabValues");return c.value}({defaultValue:n,tabValues:r}))),[l,u]=f({queryString:a,groupId:s}),[x,p]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[s,r]=(0,o.Dv)(a);return[s,(0,c.useCallback)((e=>{a&&r.set(e)}),[a,r])]}({groupId:s}),g=(()=>{const e=l??x;return b({value:e,tabValues:r})?e:null})();(0,t.A)((()=>{g&&d(g)}),[g]);return{selectedValue:i,selectValue:(0,c.useCallback)((e=>{if(!b({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);d(e),u(e),p(e)}),[u,p,r]),tabValues:r}}var p=a(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=a(74848);function m(e){let{className:n,block:a,selectedValue:c,selectValue:i,tabValues:t}=e;const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),o=e=>{const n=e.currentTarget,a=d.indexOf(n),s=t[a].value;s!==c&&(l(n),i(s))},u=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const a=d.indexOf(e.currentTarget)+1;n=d[a]??d[0];break}case"ArrowLeft":{const a=d.indexOf(e.currentTarget)-1;n=d[a]??d[d.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":a},n),children:t.map((e=>{let{value:n,label:a,attributes:r}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:c===n?0:-1,"aria-selected":c===n,ref:e=>d.push(e),onKeyDown:u,onClick:o,...r,className:(0,s.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":c===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:r}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===r));return e?(0,c.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,c.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function y(e){const n=x(e);return(0,j.jsxs)("div",{className:(0,s.A)("tabs-container",g.tabList),children:[(0,j.jsx)(m,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function P(e){const n=(0,p.A)();return(0,j.jsx)(y,{...e,children:u(e.children)},String(n))}},28453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>t});var c=a(96540);const s={},r=c.createContext(s);function i(e){const n=c.useContext(r);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),c.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd900a84.4a6a9763.js b/assets/js/dd900a84.4a6a9763.js new file mode 100644 index 00000000000..ec16bc58f03 --- /dev/null +++ b/assets/js/dd900a84.4a6a9763.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2953],{94112:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=t(74848),a=t(28453);const i={title:"Run Tessera with Besu",description:"Running ConsenSys Quorum Tessera with Besu",sidebar_position:3,tags:["private networks"]},r="Run Tessera with Besu",o={id:"private-networks/how-to/use-privacy/tessera",title:"Run Tessera with Besu",description:"Running ConsenSys Quorum Tessera with Besu",source:"@site/docs/private-networks/how-to/use-privacy/tessera.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/tessera",permalink:"/private-networks/how-to/use-privacy/tessera",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/tessera.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Run Tessera with Besu",description:"Running ConsenSys Quorum Tessera with Besu",sidebar_position:3,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Besu-extended privacy",permalink:"/private-networks/how-to/use-privacy/besu-extended"},next:{title:"Create and manage privacy groups",permalink:"/private-networks/how-to/use-privacy/privacy-groups"}},c={},u=[{value:"High availability",id:"high-availability",level:2},{value:"Separate instances",id:"separate-instances",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"run-tessera-with-besu",children:"Run Tessera with Besu"})}),"\n",(0,n.jsxs)(s.p,{children:["To enable ",(0,n.jsx)(s.a,{href:"/private-networks/concepts/privacy/",children:"privacy functionality"})," in production systems, ",(0,n.jsx)(s.a,{href:"https://docs.tessera.consensys.net/",children:"Tessera"})," must be ",(0,n.jsx)(s.a,{href:"#high-availability",children:"highly available"})," and ",(0,n.jsx)(s.a,{href:"#separate-instances",children:"run in a separate instance"})," to Besu."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Besu-Tessera-High-Availability",src:t(38775).A+"",width:"1512",height:"648"})}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsx)(s.p,{children:"You can also configure Besu for high availability using load balancers."})}),"\n",(0,n.jsx)(s.h2,{id:"high-availability",children:"High availability"}),"\n",(0,n.jsxs)(s.p,{children:["Privacy requires you to ",(0,n.jsx)(s.a,{href:"https://consensys.net/docs/goquorum//en/stable/configure-and-manage/configure/high-availability/",children:"configure Tessera for high availability"}),". Besu also requires ",(0,n.jsxs)(s.a,{href:"https://docs.tessera.consensys.net/HowTo/Configure/Orion-Mode",children:[(0,n.jsx)(s.code,{children:"orion"})," mode"]})," to be enabled in Tessera."]}),"\n",(0,n.jsx)(s.p,{children:"To successfully distribute a private transaction, all private transaction participants must be online. If any participants are offline when submitting the private transaction, the transaction is not attempted and you need to resubmit the transaction."}),"\n",(0,n.jsx)(s.p,{children:"If a Tessera node is unavailable when Besu attempts to process a privacy marker transaction, the Besu node stops processing all new blocks until Tessera is available. The Besu node continually attempts to process the privacy marker transaction until Tessera is available again."}),"\n",(0,n.jsx)(s.admonition,{type:"caution",children:(0,n.jsx)(s.p,{children:"If Tessera becomes available but has lost data, Besu resumes processing blocks and the private states in the Besu nodes might become inconsistent."})}),"\n",(0,n.jsx)(s.h2,{id:"separate-instances",children:"Separate instances"}),"\n",(0,n.jsx)(s.p,{children:"For production systems, we recommend running Besu and Tessera in separate instances. If running Besu and Tessera in the same instance, restrict the amount of memory used by each JVM to ensure each has enough memory."})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},38775:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Besu-Tessera-High-Availability-452df28ed69ccdc9a06250a617e5a477.png"},28453:(e,s,t)=>{t.d(s,{R:()=>r,x:()=>o});var n=t(96540);const a={},i=n.createContext(a);function r(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.15aaaa71.js b/assets/js/df203c0f.15aaaa71.js new file mode 100644 index 00000000000..25e057d1528 --- /dev/null +++ b/assets/js/df203c0f.15aaaa71.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4279],{27293:(e,n,t)=>{t.d(n,{A:()=>F});var i=t(96540),s=t(74848);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(18215),a=t(21312),r=t(17559);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.A)(r.G.common.admonition,r.G.common.admonitionType(n),c.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:c.admonitionHeading,children:[(0,s.jsx)("span",{className:c.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:c.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[i||t?(0,s.jsx)(u,{title:i,icon:t}):null,(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("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"})})}const x={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,s.jsx)(m,{...x,...e,className:(0,l.A)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("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"})})}const p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.A)("alert alert--success",e.className),children:e.children})}function A(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("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"})})}const N={icon:(0,s.jsx)(A,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...N,...e,className:(0,l.A)("alert alert--info",e.className),children:e.children})}function b(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("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"})})}const T={icon:(0,s.jsx)(b,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("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"})})}const z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(b,{}),title:(0,s.jsx)(a.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const M={...{note:f,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...T,...e,className:(0,l.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(f,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.A)("alert alert--warning",e.className),children:e.children})}}};function F(e){const n=o(e),t=(i=n.type,M[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),M.info));var i;return(0,s.jsx)(t,{...n})}},30128:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});t(96540);var i=t(18215),s=t(28774),o=t(53465),l=t(1003),a=t(17559),r=t(21312),c=t(41463),d=t(5260),u=t(74848);function h(){return(0,u.jsx)(r.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function m(){return(0,u.jsx)(r.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function g(){return(0,u.jsx)(d.A,{children:(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var x=t(27293);function f(e){let{className:n}=e;return(0,u.jsx)(x.A,{type:"caution",title:(0,u.jsx)(h,{}),className:(0,i.A)(n,a.G.common.unlistedBanner),children:(0,u.jsx)(m,{})})}function j(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(g,{}),(0,u.jsx)(f,{...e})]})}var p=t(51107);function v(e){const n=function(){const{selectMessage:e}=(0,o.W)();return n=>e(n,(0,r.T)({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:n}))}();return(0,r.T)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function A(e){let{doc:n}=e;return(0,u.jsxs)("article",{className:"margin-vert--lg",children:[(0,u.jsx)(s.A,{to:n.permalink,children:(0,u.jsx)(p.A,{as:"h2",children:n.title})}),n.description&&(0,u.jsx)("p",{children:n.description})]})}function N(e){let{title:n,tag:t}=e;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(l.be,{title:n,description:t.description}),(0,u.jsx)(c.A,{tag:"doc_tag_doc_list"})]})}function w(e){let{tag:n,title:t}=e;return(0,u.jsx)(l.e3,{className:(0,i.A)(a.G.page.docsTagDocListPage),children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,u.jsx)(j,{}),(0,u.jsxs)("header",{className:"margin-bottom--xl",children:[(0,u.jsx)(p.A,{as:"h1",children:t}),n.description&&(0,u.jsx)("p",{children:n.description}),(0,u.jsx)(s.A,{href:n.allTagsPath,children:(0,u.jsx)(r.A,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View all tags"})})]}),(0,u.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,u.jsx)(A,{doc:e},e.id)))})]})})})})}function b(e){const n=v(e);return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(N,{...e,title:n}),(0,u.jsx)(w,{...e,title:n})]})}},53465:(e,n,t)=>{t.d(n,{W:()=>c});var i=t(96540),s=t(44586);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function r(){const{i18n:{currentLocale:e}}=(0,s.A)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function c(){const e=r();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file diff --git a/assets/js/dfe7f568.05d882cb.js b/assets/js/dfe7f568.05d882cb.js new file mode 100644 index 00000000000..9bb68be84f7 --- /dev/null +++ b/assets/js/dfe7f568.05d882cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1816],{56847:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var o=t(74848),i=t(28453);const r={title:"Transaction pool",sidebar_position:2,description:"Transaction pool overview",tags:["public networks","private networks"]},s="Transaction pool",c={id:"public-networks/concepts/transactions/pool",title:"Transaction pool",description:"Transaction pool overview",source:"@site/docs/public-networks/concepts/transactions/pool.md",sourceDirName:"public-networks/concepts/transactions",slug:"/public-networks/concepts/transactions/pool",permalink:"/public-networks/concepts/transactions/pool",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/concepts/transactions/pool.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Transaction pool",sidebar_position:2,description:"Transaction pool overview",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Transaction types",permalink:"/public-networks/concepts/transactions/types"},next:{title:"Transaction validation",permalink:"/public-networks/concepts/transactions/validation"}},a={},l=[{value:"Layered transaction pool",id:"layered-transaction-pool",level:2},{value:"Sequenced transaction pool",id:"sequenced-transaction-pool",level:2},{value:"Dropping transactions when the layered transaction pool is full",id:"dropping-transactions-when-the-layered-transaction-pool-is-full",level:2},{value:"Replacing transactions with the same sender and nonce",id:"replacing-transactions-with-the-same-sender-and-nonce",level:2},{value:"In networks with a base fee and priced gas",id:"in-networks-with-a-base-fee-and-priced-gas",level:3},{value:"In networks with zero base base or free gas",id:"in-networks-with-zero-base-base-or-free-gas",level:3},{value:"Transaction pool methods and options",id:"transaction-pool-methods-and-options",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"transaction-pool",children:"Transaction pool"})}),"\n",(0,o.jsx)(n.p,{children:"All nodes maintain a transaction pool to store pending transactions before processing."}),"\n",(0,o.jsx)(n.p,{children:"Transaction pools are categorized into the following two types:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"#layered-transaction-pool",children:"Layered"})," - Recommended for public blockchain networks."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"#sequenced-transaction-pool",children:"Sequenced"})," - Recommended for private blockchain networks."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["You can use specific options and methods to ",(0,o.jsx)(n.a,{href:"#transaction-pool-methods-and-options",children:"configure and monitor the transaction pool"}),"."]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["When submitting ",(0,o.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/#nonce-validation",children:"private transactions"}),",\nthe ",(0,o.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction"}),"\nis submitted to the transaction pool, not the private transaction itself."]})}),"\n",(0,o.jsx)(n.h2,{id:"layered-transaction-pool",children:"Layered transaction pool"}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.a,{href:"https://github.com/hyperledger/besu/pull/5290",children:"layered transaction pool"})," is the default\ntransaction pool implementation.\nThe implementation separates the pool into layers according to value and executability of the transactions.\nThe first layer keeps only the highest-value transactions that can feasibly go into the next block.\nThe other two layers ensure Besu always has a backlog of transactions to fill blocks, maximizing the amount of fees."]}),"\n",(0,o.jsx)(n.p,{children:"Layered pools have additional parameters that allow you to limit and configure the number of transactions in different layers, enabling them to handle high volumes and sort transactions at a faster speed."}),"\n",(0,o.jsx)(n.p,{children:"With the layered transaction pool, Besu produces more profitable blocks more quickly, with more\ndenial-of-service protection, and using less CPU than with the legacy transaction pool."}),"\n",(0,o.jsx)(n.p,{children:"If you previously configured transaction pool behavior, upgrade to the layered transaction pool by:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Removing the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-retention-hours",children:(0,o.jsx)(n.code,{children:"--tx-pool-retention-hours"})}),"\noption, which is not applicable because old transactions will expire when the memory cache is full."]}),"\n",(0,o.jsxs)(n.li,{children:["Replacing the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-limit-by-account-percentage",children:(0,o.jsx)(n.code,{children:"--tx-pool-limit-by-account-percentage"})}),"\noption with ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-future-by-sender",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-future-by-sender"})}),"\nto limit the number of sequential transactions, instead of percentage of transactions, from a single\nsender kept in the pool."]}),"\n",(0,o.jsxs)(n.li,{children:["Removing the ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-size",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-size"})})," option,\nwhich is not applicable because the layered pool is limited by memory size instead of the number\nof transactions.\nTo configure the maximum memory capacity, use ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-layer-max-capacity",children:(0,o.jsx)(n.code,{children:"--tx-pool-layer-max-capacity"})}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["You can opt out of the layered transaction pool implementation by setting the\n",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool",children:(0,o.jsx)(n.code,{children:"--tx-pool"})})," option to ",(0,o.jsx)(n.code,{children:"sequenced"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"sequenced-transaction-pool",children:"Sequenced transaction pool"}),"\n",(0,o.jsx)(n.p,{children:"In the sequenced transaction pool, transactions are processed strictly in the order they are received.\nAlthough sequenced transaction pools lack the flexibility of layered pools, they help maintain a\nconsistent and transparent transaction order, which is often useful in private blockchains."}),"\n",(0,o.jsxs)(n.p,{children:["You can select the sequenced transaction pool by setting ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool",children:(0,o.jsx)(n.code,{children:"--tx-pool=sequenced"})}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If you set the enterprise configuration profile using ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#enterpriseprivate-profile",children:(0,o.jsx)(n.code,{children:"--profile=enterprise"})})," or ",(0,o.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/profile#enterpriseprivate-profile",children:(0,o.jsx)(n.code,{children:"--profile=private"})}),", the ",(0,o.jsx)(n.code,{children:"sequenced"})," transaction pool is set by default."]}),"\n",(0,o.jsx)(n.p,{children:"The sequenced transaction pool suits enterprise environments because it functions like a first-in-first-out (FIFO) queue and processes transactions in the order of submission, regardless of the sender.\nWhen the pool reaches capacity, the newer transactions are evicted first, reducing the likelihood of a nonce gap and avoiding the need to resubmit older transactions."}),"\n",(0,o.jsx)(n.h2,{id:"dropping-transactions-when-the-layered-transaction-pool-is-full",children:"Dropping transactions when the layered transaction pool is full"}),"\n",(0,o.jsx)(n.p,{children:"When the transaction pool is full, it accepts and retains local transactions in preference to remote transactions.\nIf the transaction pool is full of local transactions, Besu drops the oldest local transactions first.\nThat is, a full transaction pool continues to accept new local transactions by first dropping remote transactions and then by dropping the oldest local transactions."}),"\n",(0,o.jsx)(n.h2,{id:"replacing-transactions-with-the-same-sender-and-nonce",children:"Replacing transactions with the same sender and nonce"}),"\n",(0,o.jsx)(n.h3,{id:"in-networks-with-a-base-fee-and-priced-gas",children:"In networks with a base fee and priced gas"}),"\n",(0,o.jsx)(n.p,{children:"You can replace a pending transaction with a transaction that has the same sender and nonce but a higher gas price."}),"\n",(0,o.jsxs)(n.p,{children:["If sending a ",(0,o.jsx)(n.a,{href:"/public-networks/concepts/transactions/types#frontier-transactions",children:"legacy transaction"}),", the old transaction is replaced if the new transaction has a gas price higher than the existing gas price by the percentage specified by ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["If sending an ",(0,o.jsxs)(n.a,{href:"/public-networks/concepts/transactions/types#eip1559-transactions",children:[(0,o.jsx)(n.code,{children:"EIP1559"})," transaction"]}),", the old transaction is replaced if one of the following is true:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The new transaction's effective gas price is higher than the existing gas price by the percentage specified by ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})})," AND the new effective priority fee is greater than or equal to the existing priority fee."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The new transaction's effective gas price is the equal to the existing gas price AND the new effective priority fee is higher than the existing priority fee by the percentage specified by ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["The default value for ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})})," is 10%."]}),"\n",(0,o.jsx)(n.h3,{id:"in-networks-with-zero-base-base-or-free-gas",children:"In networks with zero base base or free gas"}),"\n",(0,o.jsx)(n.p,{children:"To enable replacing transactions in the transaction pool for zero base fee networks,\nor free gas networks:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["If you set ",(0,o.jsx)(n.a,{href:"/public-networks/reference/genesis-items",children:(0,o.jsx)(n.code,{children:"zeroBaseFee"})})," to ",(0,o.jsx)(n.code,{children:"true"})," in the genesis file,\nthe transaction pool price bump is set to ",(0,o.jsx)(n.code,{children:"0"}),". Specifying a value for transaction pool price bump using ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})}),"\nwill cause an error."]}),"\n",(0,o.jsxs)(n.li,{children:["If the ",(0,o.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"minimum gas price is zero"}),", the transaction pool price bump is set to ",(0,o.jsx)(n.code,{children:"0"}),", unless you specify a different value using ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"transaction-pool-methods-and-options",children:"Transaction pool methods and options"}),"\n",(0,o.jsx)(n.p,{children:"You can configure and monitor the transaction pool using the following methods, subscriptions, and options:"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{}),(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Method"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#txpool_besutransactions",children:(0,o.jsx)(n.code,{children:"txpool_besuTransactions"})})}),(0,o.jsx)(n.td,{children:"API method to list transactions in the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Method"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#txpool_besustatistics",children:(0,o.jsx)(n.code,{children:"txpool_besuStatistics"})})}),(0,o.jsx)(n.td,{children:"API method to list statistics of the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Method"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/api/#txpool_besupendingtransactions",children:(0,o.jsx)(n.code,{children:"txpool_besuPendingTransactions"})})}),(0,o.jsx)(n.td,{children:"API method to list pending transactions in the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Subscription"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub#pending-transactions",children:(0,o.jsx)(n.code,{children:"newPendingTransactions"})})}),(0,o.jsx)(n.td,{children:"RPC subscription to notify of transactions added to the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Subscription"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/rpc-pubsub#dropped-transactions",children:(0,o.jsx)(n.code,{children:"droppedPendingTransactions"})})}),(0,o.jsx)(n.td,{children:"RPC subscription to notify of transactions dropped from the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool",children:(0,o.jsx)(n.code,{children:"--tx-pool"})})}),(0,o.jsx)(n.td,{children:"Option to specify the type of transaction pool to use."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-enable-save-restore",children:(0,o.jsx)(n.code,{children:"--tx-pool-enable-save-restore"})})}),(0,o.jsx)(n.td,{children:"Option to enable save and restore functionality for the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-layer-max-capacity",children:(0,o.jsx)(n.code,{children:"--tx-pool-layer-max-capacity"})})}),(0,o.jsx)(n.td,{children:"Option to specify the maximum memory capacity of the layered transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-limit-by-account-percentage",children:(0,o.jsx)(n.code,{children:"--tx-pool-limit-by-account-percentage"})})}),(0,o.jsx)(n.td,{children:"Option to limit the transaction pool by account percentage."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-future-by-sender",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-future-by-sender"})})}),(0,o.jsx)(n.td,{children:"Option to specify the maximum number of future transactions by sender."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-prioritized",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-prioritized"})})}),(0,o.jsx)(n.td,{children:"Option to specify the maximum number of prioritized transactions."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-prioritized-by-type",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-prioritized-by-type"})})}),(0,o.jsx)(n.td,{children:"Option to specify the maximum number of prioritized transactions by type."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-max-size",children:(0,o.jsx)(n.code,{children:"--tx-pool-max-size"})})}),(0,o.jsx)(n.td,{children:"Option to specify the maximum size of the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-min-gas-price",children:(0,o.jsx)(n.code,{children:"--tx-pool-min-gas-price"})})}),(0,o.jsx)(n.td,{children:"Option to specify the minimum gas price for transactions in the pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-no-local-priority",children:(0,o.jsx)(n.code,{children:"--tx-pool-no-local-priority"})})}),(0,o.jsx)(n.td,{children:"Option to disable local priority for transactions."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-price-bump",children:(0,o.jsx)(n.code,{children:"--tx-pool-price-bump"})})}),(0,o.jsx)(n.td,{children:"Option to specify the price bump percentage to replace an existing transaction."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-priority-senders",children:(0,o.jsx)(n.code,{children:"--tx-pool-priority-senders"})})}),(0,o.jsx)(n.td,{children:"Option to specify sender addresses to prioritize in the transaction pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-retention-hours",children:(0,o.jsx)(n.code,{children:"--tx-pool-retention-hours"})})}),(0,o.jsx)(n.td,{children:"Option to specify the number of hours to retain transactions in the pool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Option"}),(0,o.jsx)(n.td,{children:(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-save-file",children:(0,o.jsx)(n.code,{children:"--tx-pool-save-file"})})}),(0,o.jsx)(n.td,{children:"Option to specify the file for saving the transaction pool state."})]})]})]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["The option ",(0,o.jsx)(n.a,{href:"/public-networks/reference/cli/options#tx-pool-layer-max-capacity",children:(0,o.jsx)(n.code,{children:"--tx-pool-layer-max-capacity"})})," is applicable only for ",(0,o.jsx)(n.a,{href:"#layered-transaction-pool",children:"layered transaction pools"}),"."]})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(96540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e0a6c7d4.d1acdf63.js b/assets/js/e0a6c7d4.d1acdf63.js new file mode 100644 index 00000000000..032c0bd618f --- /dev/null +++ b/assets/js/e0a6c7d4.d1acdf63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8139,4852],{93120:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var s=t(74848),o=t(28453);const i={},r=void 0,c={id:"global/test_accounts",title:"test_accounts",description:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.",source:"@site/docs/global/test_accounts.md",sourceDirName:"global",slug:"/global/test_accounts",permalink:"/global/test_accounts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/global/test_accounts.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,frontMatter:{}},a={},d=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsx)(n.mdxAdmonitionTitle,{children:(0,s.jsx)(n.strong,{children:"Do not use the test accounts on Ethereum Mainnet or any production network."})}),(0,s.jsx)(n.p,{children:"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code."}),(0,s.jsx)(n.p,{children:"They are not secure and everyone can use them."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud."})}),(0,s.jsx)(n.p,{children:"In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes."}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Always secure your Ethereum Mainnet and any production account properly."})}),(0,s.jsxs)(n.p,{children:["See for instance ",(0,s.jsx)(n.a,{href:"https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds",children:'MyCrypto "Protecting Yourself and Your Funds" guide'}),"."]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 1 (address ',(0,s.jsx)(n.code,{children:"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 200 Eth ",(0,s.jsx)(n.em,{children:"(200000000000000000000 Wei)"})]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 2 (address ',(0,s.jsx)(n.code,{children:"0x627306090abaB3A6e1400e9345bC60c78a8BEf57"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,s.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.mdxAdmonitionTitle,{children:['"Test Account 3 (address ',(0,s.jsx)(n.code,{children:"0xf17f52151EbEF6C7334FAD080c5704D77216b732"}),')"']}),(0,s.jsx)(n.p,{children:"Private key to copy :"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\n"})}),(0,s.jsxs)(n.p,{children:["Initial balance : 90000 Eth ",(0,s.jsx)(n.em,{children:"(90000000000000000000000 Wei)"})]})]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},83426:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var s=t(74848),o=t(28453),i=t(93120);const r={title:"Accounts for testing",sidebar_position:3,description:"Ethereum accounts used for Besu testing only on private networks",tags:["private networks"]},c="Accounts for testing",a={id:"private-networks/reference/accounts-for-testing",title:"Accounts for testing",description:"Ethereum accounts used for Besu testing only on private networks",source:"@site/docs/private-networks/reference/accounts-for-testing.md",sourceDirName:"private-networks/reference",slug:"/private-networks/reference/accounts-for-testing",permalink:"/private-networks/reference/accounts-for-testing",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/accounts-for-testing.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Accounts for testing",sidebar_position:3,description:"Ethereum accounts used for Besu testing only on private networks",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Private network API objects",permalink:"/private-networks/reference/api/objects"},next:{title:"Plugin API interfaces",permalink:"/private-networks/reference/plugin-api-interfaces"}},d={},l=[{value:"Development mode",id:"development-mode",level:2},...i.toc,{value:"Genesis file",id:"genesis-file",level:2}];function u(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"accounts-for-testing",children:"Accounts for testing"})}),"\n",(0,s.jsx)(n.p,{children:"You can use existing accounts for testing by including them in the genesis file for a private network. Besu also provides predefined accounts for use in development mode."}),"\n",(0,s.jsx)(n.h2,{id:"development-mode",children:"Development mode"}),"\n",(0,s.jsxs)(n.p,{children:["When you start Besu with the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#network",children:(0,s.jsx)(n.code,{children:"--network=dev"})})," command line option, Besu uses the ",(0,s.jsx)(n.code,{children:"dev.json"})," genesis file by default."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"dev.json"})," genesis file defines the following accounts used for testing."]}),"\n",(0,s.jsx)(i.default,{}),"\n",(0,s.jsx)(n.h2,{id:"genesis-file",children:"Genesis file"}),"\n",(0,s.jsxs)(n.p,{children:["To use existing test accounts, specify the accounts and balances in a genesis file for your test network. For an example of how to define accounts in the genesis file, see ",(0,s.jsx)(n.a,{href:"https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/config/src/main/resources/dev.json",children:(0,s.jsx)(n.code,{children:"dev.json"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["To start Besu with the genesis file defining the existing accounts, use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#genesis-file",children:(0,s.jsx)(n.code,{children:"--genesis-file"})})," command line option ."]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var s=t(96540);const o={},i=s.createContext(o);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e12df8e0.862983c0.js b/assets/js/e12df8e0.862983c0.js new file mode 100644 index 00000000000..502b363c251 --- /dev/null +++ b/assets/js/e12df8e0.862983c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8882],{42130:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>a,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var r=s(74848),i=s(28453);const o={title:"Security disclosure policy",sidebar_position:8,description:"Besu responsible disclosure statement",tags:["public networks","private networks"]},n="Security disclosure policy",c={id:"public-networks/reference/disclosure",title:"Security disclosure policy",description:"Besu responsible disclosure statement",source:"@site/docs/public-networks/reference/disclosure.md",sourceDirName:"public-networks/reference",slug:"/public-networks/reference/disclosure",permalink:"/public-networks/reference/disclosure",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/reference/disclosure.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:8,frontMatter:{title:"Security disclosure policy",sidebar_position:8,description:"Besu responsible disclosure statement",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Projects using Besu",permalink:"/public-networks/reference/projects-using-besu"},next:{title:"Chatbot",permalink:"/public-networks/chatbot"}},l={},u=[];function p(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"security-disclosure-policy",children:"Security disclosure policy"})}),"\n",(0,r.jsx)(t.p,{children:"At Besu, security is a priority. But regardless of how much effort we put into system security, there might still be vulnerabilities present. If you discover a vulnerability, we need to know about it so we can take steps to address it as quickly as possible. We would like you to help us better protect our clients and our systems."}),"\n",(0,r.jsxs)(t.p,{children:["Please follow the process explained on ",(0,r.jsx)(t.a,{href:"https://wiki.hyperledger.org/display/SEC/Defect+Response",children:"defect response wiki page"}),"."]})]})}function a(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>n,x:()=>c});var r=s(96540);const i={},o=r.createContext(i);function n(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1c9c46b.f63b7265.js b/assets/js/e1c9c46b.f63b7265.js new file mode 100644 index 00000000000..33a705a69ce --- /dev/null +++ b/assets/js/e1c9c46b.f63b7265.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[4567],{78242:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=t(74848),r=t(28453);const i={title:"Create and send transactions",sidebar_position:4,description:"Send transactions using eth_call or eth_sendRawTransaction.",tags:["public networks"]},o="Create and send transactions",a={id:"public-networks/how-to/send-transactions",title:"Create and send transactions",description:"Send transactions using eth_call or eth_sendRawTransaction.",source:"@site/docs/public-networks/how-to/send-transactions.md",sourceDirName:"public-networks/how-to",slug:"/public-networks/how-to/send-transactions",permalink:"/public-networks/how-to/send-transactions",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/send-transactions.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Create and send transactions",sidebar_position:4,description:"Send transactions using eth_call or eth_sendRawTransaction.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Use the Engine API",permalink:"/public-networks/how-to/use-engine-api"},next:{title:"Configure static nodes",permalink:"/public-networks/how-to/connect/static-nodes"}},c={},d=[{value:"<code>eth_call</code> vs <code>eth_sendRawTransaction</code>",id:"eth_call-vs-eth_sendrawtransaction",level:2},{value:"Use wallets for key management",id:"use-wallets-for-key-management",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"create-and-send-transactions",children:"Create and send transactions"})}),"\n",(0,s.jsxs)(n.p,{children:["You can send signed transactions using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})})," JSON-RPC API method."]}),"\n",(0,s.jsxs)(n.p,{children:["Signed transactions can be simple value transfers, contract creation, or contract invocation. Set the maximum transaction fee for transactions using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-tx-feecap",children:(0,s.jsx)(n.code,{children:"--rpc-tx-feecap"})})," CLI option."]}),"\n",(0,s.jsxs)(n.p,{children:["To accept signed transactions from remote connections, set the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/#service-hosts",children:"API listening host"})," to ",(0,s.jsx)(n.code,{children:"0.0.0.0"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/public-networks/how-to/develop/client-libraries",children:"Use client libraries"})," to create and send a signed raw transaction to transfer Ether and create a smart contract."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Private keys",type:"danger",children:[(0,s.jsx)(n.p,{children:"Don't use the accounts from the examples on Mainnet or any public network except for testing. The private keys are displayed which means the accounts are not secure."}),(0,s.jsxs)(n.p,{children:["All accounts and private keys in the examples are from the ",(0,s.jsx)(n.code,{children:"dev.json"})," genesis file in the ",(0,s.jsx)(n.a,{href:"https://github.com/hyperledger/besu/tree/master/config/src/main/resources",children:(0,s.jsx)(n.code,{children:"/besu/config/src/main/resources"})})," directory."]}),(0,s.jsxs)(n.p,{children:["In production environments avoid exposing your private keys by creating signed transactions offline, or use ",(0,s.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," to isolate your private keys and sign transactions with ",(0,s.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/reference/api/json-rpc#eth_sendtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendTransaction"})}),"."]})]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:["Setting the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-besu-api/#service-hosts",children:"listening host"})," to ",(0,s.jsx)(n.code,{children:"0.0.0.0"})," exposes the API service connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet."]})}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Libraries such as ",(0,s.jsx)(n.a,{href:"https://github.com/web3j/web3j",children:"web3j"})," or ",(0,s.jsx)(n.a,{href:"https://github.com/ethereum/ethereumj",children:"ethereumj"})," and tools such as ",(0,s.jsx)(n.a,{href:"https://mycrypto.com/",children:"MyCrypto"})," can also create signed transactions."]})}),"\n",(0,s.jsxs)(n.h2,{id:"eth_call-vs-eth_sendrawtransaction",children:[(0,s.jsx)(n.code,{children:"eth_call"})," vs ",(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})]}),"\n",(0,s.jsxs)(n.p,{children:["You can interact with contracts using ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_call",children:(0,s.jsx)(n.code,{children:"eth_call"})})," or ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})}),". The table below compares the characteristics of both calls."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"eth_call"})}),(0,s.jsx)(n.th,{children:(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Read-only"}),(0,s.jsx)(n.td,{children:"Write"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Invokes contract function locally"}),(0,s.jsx)(n.td,{children:"Broadcasts to the network"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Does not change state of blockchain"}),(0,s.jsx)(n.td,{children:"Updates the blockchain (for example, transfers ether between accounts)"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Does not consume gas"}),(0,s.jsx)(n.td,{children:"Requires gas"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Synchronous"}),(0,s.jsx)(n.td,{children:"Asynchronous"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Returns the value of a contract function available immediately"}),(0,s.jsx)(n.td,{children:"Returns transaction hash only. A block might not include all possible transactions (for example, if the gas price is too low)."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"use-wallets-for-key-management",children:"Use wallets for key management"}),"\n",(0,s.jsx)(n.p,{children:"Besu doesn't support key management inside the client. Use:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.web3signer.consensys.net/",children:"Web3Signer"})," with Besu to provide access to your key store and sign transactions."]}),"\n",(0,s.jsxs)(n.li,{children:["Third-party tools (for example, ",(0,s.jsx)(n.a,{href:"https://metamask.io/",children:"MetaMask"})," and ",(0,s.jsx)(n.a,{href:"https://web3j.io/",children:"web3j"}),") for creating accounts."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(96540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e6ca27ec.eb3396ab.js b/assets/js/e6ca27ec.eb3396ab.js new file mode 100644 index 00000000000..a053f7966cc --- /dev/null +++ b/assets/js/e6ca27ec.eb3396ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[231],{6345:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=n(74848),r=n(28453);const a={title:"Performance best practices",description:"Performance best practices",sidebar_position:9,tags:["private networks"]},i="Performance best practices",o={id:"private-networks/how-to/use-privacy/performance-best-practices",title:"Performance best practices",description:"Performance best practices",source:"@site/docs/private-networks/how-to/use-privacy/performance-best-practices.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/performance-best-practices",permalink:"/private-networks/how-to/use-privacy/performance-best-practices",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/performance-best-practices.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:9,frontMatter:{title:"Performance best practices",description:"Performance best practices",sidebar_position:9,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use the web3js-quorum library",permalink:"/private-networks/how-to/use-privacy/web3js-quorum"},next:{title:"Use local permissioning",permalink:"/private-networks/how-to/use-permissioning/local"}},c={},l=[{value:"General performance",id:"general-performance",level:2},{value:"Use fast, local, solid state storage",id:"use-fast-local-solid-state-storage",level:3},{value:"Private transaction performance",id:"private-transaction-performance",level:2},{value:"Use concurrent submission",id:"use-concurrent-submission",level:3},{value:"Co-locate Besu and Tessera",id:"co-locate-besu-and-tessera",level:3},{value:"Optimize worst-case latency between Tessera nodes",id:"optimize-worst-case-latency-between-tessera-nodes",level:3},{value:"Use stateful nonce management",id:"use-stateful-nonce-management",level:3},{value:"Use random senders for privacy marker transactions",id:"use-random-senders-for-privacy-marker-transactions",level:3},{value:"Avoid queuing transactions in Tessera",id:"avoid-queuing-transactions-in-tessera",level:3},{value:"Limit the group size to reduce communication overhead",id:"limit-the-group-size-to-reduce-communication-overhead",level:3},{value:"Limit group membership changes and make them quick",id:"limit-group-membership-changes-and-make-them-quick",level:3}];function d(e){const s={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"performance-best-practices",children:"Performance best practices"})}),"\n",(0,t.jsx)(s.p,{children:"This document collects deployment and usage tips to help you achieve high performance for private transactions. If transaction throughput or latency is not meeting your expectations, please consider the following before raising an issue."}),"\n",(0,t.jsx)(s.h2,{id:"general-performance",children:"General performance"}),"\n",(0,t.jsx)(s.p,{children:"Private transactions use the same facilities as public ones. General Besu performance tunings apply. Specific approaches are out of scope of this document, except for the following, which strongly impacts performance:"}),"\n",(0,t.jsx)(s.h3,{id:"use-fast-local-solid-state-storage",children:"Use fast, local, solid state storage"}),"\n",(0,t.jsx)(s.p,{children:"Running EVM transactions creates a lot of random reads that are executed sequentially. The Besu data folder for high throughput nodes should be located on the fastest possible storage media."}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Prefer ",(0,t.jsx)(s.a,{href:"https://cloud.google.com/compute/docs/disks/local-ssd#performance",children:"NVMe"})," attached SLC flash or Intel Optane."]}),"\n",(0,t.jsx)(s.li,{children:"Avoid network attached SSDs or cloud storage with limited input/output operations per second."}),"\n",(0,t.jsx)(s.li,{children:"Do not use spinning disks under any circumstances."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"private-transaction-performance",children:"Private transaction performance"}),"\n",(0,t.jsx)(s.h3,{id:"use-concurrent-submission",children:"Use concurrent submission"}),"\n",(0,t.jsxs)(s.p,{children:["When submitting a private transaction using ",(0,t.jsx)(s.a,{href:"https://github.com/ConsenSys/web3js-quorum",children:"web3js-quorum"}),", the submit call will only return once the privacy marker transaction has been included in a block. This limits the throughput to at most one private transaction per block when submitting from a single thread. To increase throughput, use web3js-quorum from multiple concurrent threads or processes."]}),"\n",(0,t.jsx)(s.h3,{id:"co-locate-besu-and-tessera",children:"Co-locate Besu and Tessera"}),"\n",(0,t.jsx)(s.p,{children:"Besu has to talk to its local Tessera node frequently while handling a block. While we do not recommend running them on the same node, minimizing the latency between Besu and Tessera will improve block processing times. Besu and Tessera should not be hosted in geographically distributed locations."}),"\n",(0,t.jsx)(s.h3,{id:"optimize-worst-case-latency-between-tessera-nodes",children:"Optimize worst-case latency between Tessera nodes"}),"\n",(0,t.jsx)(s.p,{children:"When distributing a new private transaction between Tessera nodes, the overall throughput is determined by the slowest Tessera nodes. Try to minimize network latency between Tessera nodes and do not mix different machine types when hosting Tessera."}),"\n",(0,t.jsx)(s.h3,{id:"use-stateful-nonce-management",children:"Use stateful nonce management"}),"\n",(0,t.jsx)(s.p,{children:"Management of public and private nonces in web3js-quorum is stateless: before a transaction is sent, web3js-quorum has to query for those nonces. This is increasing latency, the node's load, and is a source of fragility due to nonce collision when multiple senders try to use the same account concurrently."}),"\n",(0,t.jsx)(s.p,{children:"For performance and reliability it is advantageous to manage nonces in a stateful manner on the client side instead of querying them for every transaction."}),"\n",(0,t.jsx)(s.h3,{id:"use-random-senders-for-privacy-marker-transactions",children:"Use random senders for privacy marker transactions"}),"\n",(0,t.jsxs)(s.p,{children:["To avoid public nonce management, privacy marker transactions can be sent using a ",(0,t.jsx)(s.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:"random account per transaction"}),". This option is only available for zero gas networks."]}),"\n",(0,t.jsx)(s.h3,{id:"avoid-queuing-transactions-in-tessera",children:"Avoid queuing transactions in Tessera"}),"\n",(0,t.jsx)(s.p,{children:"When Tessera is overloaded with transactions, the performance breaks down catastrophically due to unbounded growth of the request queue. Avoid sending more transactions to Tessera than it can handle. Sudden jumps in submission latency and submission failure rate should be answered with a load reduction on the client side, for example using a back-off scheme."}),"\n",(0,t.jsx)(s.p,{children:"Please note that this is not Tessera specific but a general issue in distributed systems. It just happens that if queueing discipline is not maintained, Tessera tends to be the first component to fail."}),"\n",(0,t.jsx)(s.h3,{id:"limit-the-group-size-to-reduce-communication-overhead",children:"Limit the group size to reduce communication overhead"}),"\n",(0,t.jsx)(s.p,{children:"Smaller groups need fewer communication for transaction propagation. If reducing the number of Tessera nodes involved in a transaction is an option, it will lead to slightly better tail latencies. Multi-tenancy Tessera can be used to have large groups with a small number of Tessera nodes (possibly only one)."}),"\n",(0,t.jsx)(s.h3,{id:"limit-group-membership-changes-and-make-them-quick",children:"Limit group membership changes and make them quick"}),"\n",(0,t.jsx)(s.p,{children:"Groups are locked (prevented from executing transactions) during membership changes. Try to minimize the number of times the membership changes. When possible, spread load across multiple groups to always have some groups available while others are locked. Consider batching group membership changes if possible. Note however that this does not work with the default management contract, yet."})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(96540);const r={},a=t.createContext(r);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e8e619e2.2fdd8d20.js b/assets/js/e8e619e2.2fdd8d20.js new file mode 100644 index 00000000000..830ce53ed90 --- /dev/null +++ b/assets/js/e8e619e2.2fdd8d20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1178],{1788:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var t=n(74848),i=n(28453);const s={title:"Use Besu-extended privacy",description:"Besu-extended privacy",sidebar_position:2,tags:["private networks"]},a="Use Besu-extended privacy",c={id:"private-networks/how-to/use-privacy/besu-extended",title:"Use Besu-extended privacy",description:"Besu-extended privacy",source:"@site/docs/private-networks/how-to/use-privacy/besu-extended.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/besu-extended",permalink:"/private-networks/how-to/use-privacy/besu-extended",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/besu-extended.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Use Besu-extended privacy",description:"Besu-extended privacy",sidebar_position:2,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use EEA-compliant privacy",permalink:"/private-networks/how-to/use-privacy/eea-compliant"},next:{title:"Run Tessera with Besu",permalink:"/private-networks/how-to/use-privacy/tessera"}},p={},o=[{value:"Privacy group type",id:"privacy-group-type",level:2}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"use-besu-extended-privacy",children:"Use Besu-extended privacy"})}),"\n",(0,t.jsxs)(r.p,{children:["Besu provides an extended implementation of privacy allowing you to ",(0,t.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"create a privacy group for a set of participants"}),". You must specify the privacy group ID when sending private transactions."]}),"\n",(0,t.jsxs)(r.p,{children:["To enable the ",(0,t.jsxs)(r.a,{href:"/private-networks/reference/api/#priv-methods",children:[(0,t.jsx)(r.code,{children:"PRIV"})," API methods"]}),", use the ",(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,t.jsx)(r.code,{children:"--rpc-ws-api"})})," command line options."]}),"\n",(0,t.jsxs)(r.p,{children:["To create the privacy group containing the recipients of a private transaction, use ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_createprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_createPrivacyGroup"})}),"."]}),"\n",(0,t.jsxs)(r.p,{children:["To create an EEA-compliant private transaction, specify ",(0,t.jsx)(r.code,{children:"privacyGroupId"})," when creating the signed transaction passed as an input parameter to ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(r.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,t.jsx)(r.h2,{id:"privacy-group-type",children:"Privacy group type"}),"\n",(0,t.jsxs)(r.p,{children:["Privacy groups created using ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_createprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_createPrivacyGroup"})})," have a ",(0,t.jsx)(r.code,{children:"BESU"})," privacy group type when returned by ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_findprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_findPrivacyGroup"})}),"."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=",\n "name": "Group B",\n "description": "Description of Group B",\n "type": "BESU",\n "members": [\n "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",\n "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="\n ]\n }\n ]\n}\n'})})]})}function u(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>a,x:()=>c});var t=n(96540);const i={},s=t.createContext(i);function a(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebb34ddb.01a618cd.js b/assets/js/ebb34ddb.01a618cd.js new file mode 100644 index 00000000000..fab955d5e8b --- /dev/null +++ b/assets/js/ebb34ddb.01a618cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[9729],{54479:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var n=r(74848),i=r(28453);const s={title:"Private networks",sidebar_position:1,sidebar_label:"Introduction",id:"index",description:"Private networks overview",tags:["private networks"]},o="Besu for private networks",a={id:"private-networks/index",title:"Private networks",description:"Private networks overview",source:"@site/docs/private-networks/index.md",sourceDirName:"private-networks",slug:"/private-networks/",permalink:"/private-networks/",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/index.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Private networks",sidebar_position:1,sidebar_label:"Introduction",id:"index",description:"Private networks overview",tags:["private networks"]},sidebar:"privateDocSidebar",next:{title:"Get started",permalink:"/private-networks/get-started"}},c={},d=[{value:"Architecture",id:"architecture",level:2}];function p(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"besu-for-private-networks",children:"Besu for private networks"})}),"\n",(0,n.jsx)(t.p,{children:"You can use Besu to develop enterprise applications requiring secure, high-performance transaction processing in a private network."}),"\n",(0,n.jsxs)(t.p,{children:["A private network is a network not connected to Ethereum Mainnet or an Ethereum testnet. Private networks typically use a different ",(0,n.jsx)(t.a,{href:"/public-networks/concepts/network-and-chain-id",children:"chain ID"})," and proof of authority consensus (",(0,n.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/qbft",children:"QBFT"}),", ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/ibft",children:"IBFT 2.0"}),", or ",(0,n.jsx)(t.a,{href:"/private-networks/how-to/configure/consensus/clique",children:"Clique"}),")."]}),"\n",(0,n.jsxs)(t.p,{children:["You can also ",(0,n.jsx)(t.a,{href:"/private-networks/tutorials/ethash",children:"create a local development network"})," using proof of work (Ethash)."]}),"\n",(0,n.jsxs)(t.p,{children:["Besu supports enterprise features including ",(0,n.jsx)(t.a,{href:"/private-networks/concepts/privacy/",children:"privacy"})," and ",(0,n.jsx)(t.a,{href:"/private-networks/concepts/permissioning/",children:"permissioning"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Get started with the ",(0,n.jsx)(t.a,{href:"/private-networks/tutorials/quickstart",children:"Developer Quickstart"})," to rapidly generate local blockchain networks."]}),"\n",(0,n.jsx)(t.h2,{id:"architecture",children:"Architecture"}),"\n",(0,n.jsx)(t.p,{children:"The following diagram outlines the high-level architecture of Besu for private networks."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Private architecture",src:r(15929).A+"",width:"1656",height:"1054"})}),"\n",(0,n.jsxs)(t.p,{children:["If you have any questions about Besu for private networks, ask on the ",(0,n.jsx)(t.strong,{children:"besu"})," channel on\n",(0,n.jsx)(t.a,{href:"https://discord.gg/hyperledger",children:"Discord"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},15929:(e,t,r)=>{r.d(t,{A:()=>n});const n=r.p+"assets/images/private-architecture-5a4d514abd93e693a77b25cacdfc9ef7.jpeg"},28453:(e,t,r)=>{r.d(t,{R:()=>o,x:()=>a});var n=r(96540);const i={},s=n.createContext(i);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec4f4180.84b21fd8.js b/assets/js/ec4f4180.84b21fd8.js new file mode 100644 index 00000000000..f58d6c2cc51 --- /dev/null +++ b/assets/js/ec4f4180.84b21fd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7372],{88764:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var s=t(74848),a=t(28453),r=t(11470),o=t(19365);const i={title:"Run Besu and Teku on a testnet",sidebar_position:2,description:"Run Besu and Teku on Holesky or Sepolia testnet.",tags:["public networks"]},l="Run Besu and Teku on a testnet",c={id:"public-networks/tutorials/besu-teku-testnet",title:"Run Besu and Teku on a testnet",description:"Run Besu and Teku on Holesky or Sepolia testnet.",source:"@site/docs/public-networks/tutorials/besu-teku-testnet.md",sourceDirName:"public-networks/tutorials",slug:"/public-networks/tutorials/besu-teku-testnet",permalink:"/public-networks/tutorials/besu-teku-testnet",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/tutorials/besu-teku-testnet.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Run Besu and Teku on a testnet",sidebar_position:2,description:"Run Besu and Teku on Holesky or Sepolia testnet.",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Run Besu and Teku on Mainnet",permalink:"/public-networks/tutorials/besu-teku-mainnet"},next:{title:"Deploy Besu using Kubernetes",permalink:"/public-networks/tutorials/kubernetes"}},d={},u=[{value:"1. Install Besu and Teku",id:"1-install-besu-and-teku",level:2},{value:"2. Generate the shared secret",id:"2-generate-the-shared-secret",level:2},{value:"3. Generate validator keys",id:"3-generate-validator-keys",level:2},{value:"4. Start Besu",id:"4-start-besu",level:2},{value:"5. Start Teku",id:"5-start-teku",level:2},{value:"Beacon node only",id:"beacon-node-only",level:3},{value:"Beacon node and validator client",id:"beacon-node-and-validator-client",level:3},{value:"6. Wait for Besu and Teku to sync",id:"6-wait-for-besu-and-teku-to-sync",level:2},{value:"7. Stake ETH",id:"7-stake-eth",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"run-besu-and-teku-on-a-testnet",children:"Run Besu and Teku on a testnet"})}),"\n",(0,s.jsxs)(n.p,{children:["Run Besu as an ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#execution-clients",children:"execution client"})," and ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/",children:"Teku"})," as a ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-clients#consensus-clients",children:"consensus client"})," on the ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/holesky",children:"Holesky"})," and ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/sepolia",children:"Sepolia"})," Ethereum testnets."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Sepolia is a permissioned network and you can't run a validator client on it without ",(0,s.jsx)(n.a,{href:"https://notes.ethereum.org/zvkfSmYnT0-uxwwEegbCqg",children:"requesting to become a validator"})," first. You can connect your consensus client using the beacon node only, without any validator duties."]})}),"\n",(0,s.jsx)(n.h2,{id:"1-install-besu-and-teku",children:"1. Install Besu and Teku"}),"\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/install/binary-distribution",children:"Besu"})," and ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Get-Started/Installation-Options/Install-Binaries/",children:"Teku"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions."}),"\n",(0,s.jsxs)(n.p,{children:["Ensure you meet the ",(0,s.jsx)(n.a,{href:"/public-networks/get-started/system-requirements",children:"system requirements for Besu on public networks"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"2-generate-the-shared-secret",children:"2. Generate the shared secret"}),"\n",(0,s.jsx)(n.p,{children:"Run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'openssl rand -hex 32 | tr -d "\\n" > jwtsecret.hex\n'})}),"\n",(0,s.jsxs)(n.p,{children:["You will specify ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/use-engine-api",children:"Engine API"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"3-generate-validator-keys",children:"3. Generate validator keys"}),"\n",(0,s.jsxs)(n.p,{children:["If you're running Teku as a beacon node only, skip to the ",(0,s.jsx)(n.a,{href:"#4-start-besu",children:"next step"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you're also running Teku as a validator client, create a test Ethereum address (you can do this in ",(0,s.jsx)(n.a,{href:"https://metamask.zendesk.com/hc/en-us/articles/360015289452-How-to-create-an-additional-account-in-your-wallet",children:"MetaMask"}),"). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/holesky",children:"Holesky faucets"})," and ",(0,s.jsx)(n.a,{href:"https://github.com/eth-clients/sepolia#meta-data-sepolia",children:"Sepolia faucets"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you can't get ETH using the faucet, you can ask for help on the ",(0,s.jsx)(n.a,{href:"https://discord.com/invite/ethstaker",children:"EthStaker Discord"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["Generate validator keys for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://holesky.launchpad.ethereum.org/",children:"Holesky Staking Launchpad"})," (or ",(0,s.jsx)(n.a,{href:"https://notes.ethereum.org/zvkfSmYnT0-uxwwEegbCqg",children:"request to become validator on Sepolia"}),")."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["Save the password you use to generate each key pair in a ",(0,s.jsx)(n.code,{children:".txt"})," file. You should also have a ",(0,s.jsx)(n.code,{children:".json"})," file for each validator key pair."]})}),"\n",(0,s.jsx)(n.h2,{id:"4-start-besu",children:"4. Start Besu"}),"\n",(0,s.jsxs)(n.p,{children:["Run the following command or specify the options in a ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/configure-besu/",children:"configuration file"}),":"]}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Holesky",label:"Holesky",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'besu \\\n --network=holesky \\\n --rpc-http-enabled=true \\\n --rpc-http-cors-origins="*" \\\n --rpc-ws-enabled=true \\\n --p2p-host=<your public IP> \\\n --host-allowlist="*" \\\n --engine-host-allowlist="*" \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n'})})}),(0,s.jsx)(o.A,{value:"Sepolia",label:"Sepolia",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'besu \\\n --network=sepolia \\\n --rpc-http-enabled=true \\\n --rpc-http-cors-origins="*" \\\n --rpc-ws-enabled=true \\\n --p2p-host=<your public IP> \\ \n --host-allowlist="*" \\\n --engine-host-allowlist="*" \\\n --engine-rpc-enabled \\\n --engine-jwt-secret=<path to jwtsecret.hex>\n'})})})]}),"\n",(0,s.jsxs)(n.p,{children:["Specify the path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#engine-jwt-secret",children:(0,s.jsx)(n.code,{children:"--engine-jwt-secret"})})," option."]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options",children:"command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h2,{id:"5-start-teku",children:"5. Start Teku"}),"\n",(0,s.jsx)(n.p,{children:"Open a new terminal window."}),"\n",(0,s.jsx)(n.h3,{id:"beacon-node-only",children:"Beacon node only"}),"\n",(0,s.jsxs)(n.p,{children:["To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Configure/Use-Configuration-File/",children:"Teku configuration file"}),":"]}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Holesky",label:"Holesky",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"teku \\\n --network=holesky \\\n --ee-endpoint=http://localhost:8551 \\\n --ee-jwt-secret-file=<path to jwtsecret.hex> \\\n --metrics-enabled=true \\\n --rest-api-enabled=true \\\n --p2p-advertised-ip=<your public IP> \\ \n --checkpoint-sync-url=<checkpoint sync URL>\n"})})}),(0,s.jsx)(o.A,{value:"Sepolia",label:"Sepolia",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"teku \\\n --network=sepolia \\\n --ee-endpoint=http://localhost:8551 \\\n --ee-jwt-secret-file=<path to jwtsecret.hex> \\\n --metrics-enabled=true \\\n --rest-api-enabled=true \\\n --p2p-advertised-ip=<your public IP> \\ \n --checkpoint-sync-url=<checkpoint sync URL>\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-jwt-secret-file",children:(0,s.jsx)(n.code,{children:"--ee-jwt-secret-file"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The public IP address of your Teku node using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#p2p-advertised-ip",children:(0,s.jsx)(n.code,{children:"--p2p-advertised-ip"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The URL of a checkpoint sync endpoint using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#checkpoint-sync-url",children:(0,s.jsx)(n.code,{children:"--checkpoint-sync-url"})})," option."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/Reference/CLI/CLI-Syntax/",children:"Teku command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h3,{id:"beacon-node-and-validator-client",children:"Beacon node and validator client"}),"\n",(0,s.jsxs)(n.p,{children:["To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/HowTo/Configure/Use-Configuration-File/",children:"Teku configuration file"}),":"]}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Holesky",label:"Holesky",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"teku \\\n --network=holesky \\\n --ee-endpoint=http://localhost:8551 \\\n --ee-jwt-secret-file=<path to jwtsecret.hex> \\\n --metrics-enabled=true \\\n --rest-api-enabled=true \\\n --p2p-advertised-ip=<your public IP> \\ \n --checkpoint-sync-url=<checkpoint sync URL> \\\n --validators-proposer-default-fee-recipient=<ETH address> \\\n --validator-keys=<path to key file>:<path to password file>[,<path to key file>:<path to password file>,...]\n"})})}),(0,s.jsx)(o.A,{value:"Sepolia",label:"Sepolia",children:(0,s.jsxs)(n.p,{children:["Sepolia is a permissioned network and you can't run a validator client on it without ",(0,s.jsx)(n.a,{href:"https://notes.ethereum.org/zvkfSmYnT0-uxwwEegbCqg",children:"requesting to become a validator"})," first."]})})]}),"\n",(0,s.jsx)(n.p,{children:"Specify:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The path to the ",(0,s.jsx)(n.code,{children:"jwtsecret.hex"})," file generated in ",(0,s.jsx)(n.a,{href:"#2-generate-the-shared-secret",children:"step 2"})," using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#ee-jwt-secret-file",children:(0,s.jsx)(n.code,{children:"--ee-jwt-secret-file"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The public IP address of your Teku node using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#p2p-advertised-ip",children:(0,s.jsx)(n.code,{children:"--p2p-advertised-ip"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The URL of a checkpoint sync endpoint using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#checkpoint-sync-url",children:(0,s.jsx)(n.code,{children:"--checkpoint-sync-url"})})," option."]}),"\n",(0,s.jsxs)(n.li,{children:["The test Ethereum address created in ",(0,s.jsx)(n.a,{href:"#3-generate-validator-keys",children:"step 3"})," as the default fee\nrecipient using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#validators-proposer-default-fee-recipient",children:(0,s.jsx)(n.code,{children:"--validators-proposer-default-fee-recipient"})}),"\noption."]}),"\n",(0,s.jsxs)(n.li,{children:["The paths to the keystore ",(0,s.jsx)(n.code,{children:".json"})," file and password ",(0,s.jsx)(n.code,{children:".txt"})," file created in\n",(0,s.jsx)(n.a,{href:"#3-generate-validator-keys",children:"step 3"})," for each validator using the\n",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.io/reference/cli#validator-keys",children:(0,s.jsx)(n.code,{children:"--validator-keys"})})," option.\nSeparate the ",(0,s.jsx)(n.code,{children:".json"})," and ",(0,s.jsx)(n.code,{children:".txt"})," files with a colon, and separate entries for multiple validators with commas."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can modify the option values and add other ",(0,s.jsx)(n.a,{href:"https://docs.teku.consensys.net/Reference/CLI/CLI-Syntax/",children:"Teku command line options"})," as needed."]}),"\n",(0,s.jsx)(n.h2,{id:"6-wait-for-besu-and-teku-to-sync",children:"6. Wait for Besu and Teku to sync"}),"\n",(0,s.jsx)(n.p,{children:"After starting Besu and Teku, your node starts syncing and connecting to peers."}),"\n",(0,s.jsxs)(r.A,{children:[(0,s.jsx)(o.A,{value:"Besu logs",label:"Besu logs",default:!0,children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{"@timestamp":"2023-02-03T04:43:49,555","level":"INFO","thread":"main","class":"DefaultSynchronizer","message":"Starting synchronizer.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,556","level":"INFO","thread":"main","class":"FastSyncDownloader","message":"Starting sync","throwable":""}\n{"@timestamp":"2023-02-03T04:43:49,559","level":"INFO","thread":"main","class":"Runner","message":"Ethereum main loop is up.","throwable":""}\n{"@timestamp":"2023-02-03T04:43:53,106","level":"INFO","thread":"Timer-0","class":"DNSResolver","message":"Resolved 2409 nodes","throwable":""}\n{"@timestamp":"2023-02-03T04:45:04,803","level":"INFO","thread":"nioEventLoopGroup-3-10","class":"SnapWorldStateDownloader","message":"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36\ncb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0","throwable":""}\n{"@timestamp":"2023-02-03T04:46:04,834","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.08%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:48:01,840","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.23%, Peer count: 8","throwable":""}\n{"@timestamp":"2023-02-03T04:49:09,931","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.41%, Peer count: 11","throwable":""}\n{"@timestamp":"2023-02-03T04:50:12,466","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.61%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:20,977","level":"INFO","thread":"EthScheduler-Services-3 (batchPersistAccountData)","class":"SnapsyncMetricsManager","message":"Worldstate download progress: 0.75%, Peer count: 10","throwable":""}\n{"@timestamp":"2023-02-03T04:51:28,985","level":"INFO","thread":"EthScheduler-Services-29 (importBlock)","class":"FastImportBlocksStep","message":"Block import progress: 180400 of 16545859 (1%)","throwable":""}\n'})})}),(0,s.jsx)(o.A,{value:"Teku logs",label:"Teku logs",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8\n2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10\n2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8\n2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6\n2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9\n"})})})]}),"\n",(0,s.jsx)(n.p,{children:"If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days."}),"\n",(0,s.jsx)(n.h2,{id:"7-stake-eth",children:"7. Stake ETH"}),"\n",(0,s.jsxs)(n.p,{children:["Stake your testnet ETH for one or more validators using the ",(0,s.jsx)(n.a,{href:"https://holesky.launchpad.ethereum.org/",children:"Holesky Staking Launchpad"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can check your validator status by searching your Ethereum address on the ",(0,s.jsx)(n.a,{href:"https://holesky.beaconcha.in/",children:"Holesky Beacon Chain explorer"}),". It may take up to multiple days for your validator to be activated and start proposing blocks."]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},19365:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var s=t(18215);const a={tabItem:"tabItem_Ymn6"};var r=t(74848);function o(e){let{children:n,hidden:t,className:o}=e;return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(a.tabItem,o),hidden:t,children:n})}},11470:(e,n,t)=>{t.d(n,{A:()=>v});var s=t(96540),a=t(18215),r=t(23104),o=t(56347),i=t(205),l=t(57485),c=t(31682),d=t(70679);function u(e){return s.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,s.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:t,attributes:s,default:a}}=e;return{value:n,label:t,attributes:s,default:a}}))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function p(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:t}=e;const a=(0,o.W6)(),r=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(r),(0,s.useCallback)((e=>{if(!r)return;const n=new URLSearchParams(a.location.search);n.set(r,e),a.replace({...a.location,search:n.toString()})}),[r,a])]}function b(e){const{defaultValue:n,queryString:t=!1,groupId:a}=e,r=h(e),[o,l]=(0,s.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const s=t.find((e=>e.default))??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:r}))),[c,u]=f({queryString:t,groupId:a}),[b,m]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[a,r]=(0,d.Dv)(t);return[a,(0,s.useCallback)((e=>{t&&r.set(e)}),[t,r])]}({groupId:a}),g=(()=>{const e=c??b;return p({value:e,tabValues:r})?e:null})();(0,i.A)((()=>{g&&l(g)}),[g]);return{selectedValue:o,selectValue:(0,s.useCallback)((e=>{if(!p({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,r]),tabValues:r}}var m=t(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var k=t(74848);function x(e){let{className:n,block:t,selectedValue:s,selectValue:o,tabValues:i}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,r.a_)(),d=e=>{const n=e.currentTarget,t=l.indexOf(n),a=i[t].value;a!==s&&(c(n),o(a))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,k.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},n),children:i.map((e=>{let{value:n,label:t,attributes:r}=e;return(0,k.jsx)("li",{role:"tab",tabIndex:s===n?0:-1,"aria-selected":s===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...r,className:(0,a.A)("tabs__item",g.tabItem,r?.className,{"tabs__item--active":s===n}),children:t??n},n)}))})}function j(e){let{lazy:n,children:t,selectedValue:r}=e;const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=o.find((e=>e.props.value===r));return e?(0,s.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,k.jsx)("div",{className:"margin-top--md",children:o.map(((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function y(e){const n=b(e);return(0,k.jsxs)("div",{className:(0,a.A)("tabs-container",g.tabList),children:[(0,k.jsx)(x,{...n,...e}),(0,k.jsx)(j,{...n,...e})]})}function v(e){const n=(0,m.A)();return(0,k.jsx)(y,{...e,children:u(e.children)},String(n))}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>i});var s=t(96540);const a={},r=s.createContext(a);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecc00064.1f415c88.js b/assets/js/ecc00064.1f415c88.js new file mode 100644 index 00000000000..f0bfa5711dc --- /dev/null +++ b/assets/js/ecc00064.1f415c88.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[6384],{68060:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>p});var s=r(74848),n=r(28453);const o={sidebar_position:3,title:"Use Kubernetes",description:"Deploying Besu with Kubernetes",tags:["private networks"]},i="Deploy Besu with Kubernetes",a={id:"private-networks/how-to/deploy/kubernetes",title:"Use Kubernetes",description:"Deploying Besu with Kubernetes",source:"@site/docs/private-networks/how-to/deploy/kubernetes.md",sourceDirName:"private-networks/how-to/deploy",slug:"/private-networks/how-to/deploy/kubernetes",permalink:"/private-networks/how-to/deploy/kubernetes",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/deploy/kubernetes.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{sidebar_position:3,title:"Use Kubernetes",description:"Deploying Besu with Kubernetes",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Ansible",permalink:"/private-networks/how-to/deploy/ansible"},next:{title:"Use Ethstats network monitor",permalink:"/private-networks/how-to/deploy/ethstats"}},u={},p=[];function l(e){const t={a:"a",h1:"h1",header:"header",p:"p",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"deploy-besu-with-kubernetes",children:"Deploy Besu with Kubernetes"})}),"\n",(0,s.jsxs)(t.p,{children:["Use the ",(0,s.jsx)(t.a,{href:"https://github.com/ConsenSys/quorum-kubernetes",children:"reference implementations"})," to install private networks using Kubernetes (K8s). The repository has full support for cloud providers like AWS, Azure, GCP, and IBM, and has production setups that use of identities and cloud-native secret storage services like Azure KeyVault and AWS Secrets Manager."]}),"\n",(0,s.jsxs)(t.p,{children:["Refer to the ",(0,s.jsx)(t.a,{href:"/private-networks/tutorials/kubernetes/",children:"tutorial"})," and familiarize yourself with the reference implementations, and customize them to your requirements."]})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>a});var s=r(96540);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/edcc188d.270a02da.js b/assets/js/edcc188d.270a02da.js new file mode 100644 index 00000000000..ea035ad0e92 --- /dev/null +++ b/assets/js/edcc188d.270a02da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[389],{47096:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=r(74848),n=r(28453);const i={title:"Upgrade",description:"Upgrading protocol versions",sidebar_position:8,tags:["private networks"]},s="Network and protocol upgrades",a={id:"private-networks/how-to/upgrade",title:"Upgrade",description:"Upgrading protocol versions",source:"@site/docs/private-networks/how-to/upgrade.md",sourceDirName:"private-networks/how-to",slug:"/private-networks/how-to/upgrade",permalink:"/private-networks/how-to/upgrade",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/upgrade.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:8,frontMatter:{title:"Upgrade",description:"Upgrading protocol versions",sidebar_position:8,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Backup and restore",permalink:"/private-networks/how-to/backup"},next:{title:"Concepts",permalink:"/private-networks/concepts/"}},d={},p=[{value:"Upgrade the protocol",id:"upgrade-the-protocol",level:2}];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"network-and-protocol-upgrades",children:"Network and protocol upgrades"})}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsxs)(t.p,{children:["Node upgrades upgrade your Besu client to a later version. In private networks, you can ",(0,o.jsx)(t.a,{href:"/public-networks/how-to/upgrade-node",children:"upgrade your node"})," as in public networks."]})}),"\n",(0,o.jsx)(t.p,{children:"Network upgrades are the mechanism for upgrading the Ethereum protocol. Protocol upgrades occur during the network upgrades."}),"\n",(0,o.jsx)(t.p,{children:"For Ethereum Mainnet and public testnets, the milestone block definitions are included in Besu. Upgrading your Besu client applies the network upgrade."}),"\n",(0,o.jsx)(t.p,{children:"For private networks, all network participants must agree on the protocol upgrades and coordinate the network upgrades. The genesis file specifies the milestone block at which to apply the protocol upgrade."}),"\n",(0,o.jsx)(t.h2,{id:"upgrade-the-protocol",children:"Upgrade the protocol"}),"\n",(0,o.jsx)(t.p,{children:"To upgrade the protocol in a private network:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Review included EIPs for breaking changes. A ",(0,o.jsx)(t.a,{href:"https://eips.ethereum.org/meta",children:"meta EIP"})," for each protocol upgrade lists included EIPs. For example, ",(0,o.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-1679",children:"Istanbul"}),"."]}),"\n",(0,o.jsx)(t.li,{children:"Network participants agree on the block number at which to upgrade."}),"\n",(0,o.jsxs)(t.li,{children:["For each node in the network:","\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Add the ",(0,o.jsx)(t.a,{href:"/public-networks/reference/genesis-items#milestone-blocks",children:"milestone block number"})," to the genesis file."]}),"\n",(0,o.jsx)(t.li,{children:"Restart the node before reaching milestone block."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"caution",children:(0,o.jsx)(t.p,{children:"To avoid a forked network, all network participants must update their genesis file to include the agreed on milestone block and restart their node before reaching the milestone block."})}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"For compatibility with future protocol upgrades, don't hardcode any gas price assumptions."}),"\n",(0,o.jsx)(t.li,{children:"Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does include breaking changes."}),"\n"]})})]})}function l(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},28453:(e,t,r)=>{r.d(t,{R:()=>s,x:()=>a});var o=r(96540);const n={},i=o.createContext(n);function s(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ee08513e.fec2f54e.js b/assets/js/ee08513e.fec2f54e.js new file mode 100644 index 00000000000..b88d20fa345 --- /dev/null +++ b/assets/js/ee08513e.fec2f54e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1639],{80870:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var i=t(74848),r=t(28453);const s={title:"Specify NAT method",sidebar_position:4,description:"Configuring NAT with Besu",tags:["public networks","private networks"]},o="Specify the NAT method",c={id:"public-networks/how-to/connect/specify-nat",title:"Specify NAT method",description:"Configuring NAT with Besu",source:"@site/docs/public-networks/how-to/connect/specify-nat.md",sourceDirName:"public-networks/how-to/connect",slug:"/public-networks/how-to/connect/specify-nat",permalink:"/public-networks/how-to/connect/specify-nat",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/connect/specify-nat.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Specify NAT method",sidebar_position:4,description:"Configuring NAT with Besu",tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Manage peers",permalink:"/public-networks/how-to/connect/manage-peers"},next:{title:"Monitor Besu",permalink:"/public-networks/how-to/monitor/"}},d={},l=[{value:"Auto",id:"auto",level:2},{value:"UPnP",id:"upnp",level:2},{value:"Kubernetes",id:"kubernetes",level:2},{value:"Docker",id:"docker",level:2},{value:"None",id:"none",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"specify-the-nat-method",children:"Specify the NAT method"})}),"\n",(0,i.jsxs)(n.p,{children:["Use the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#nat-method",children:(0,i.jsx)(n.code,{children:"--nat-method"})})," option to specify the NAT method. Options are: ",(0,i.jsx)(n.a,{href:"#upnp",children:(0,i.jsx)(n.code,{children:"UPNP"})}),", ",(0,i.jsx)(n.a,{href:"#kubernetes",children:(0,i.jsx)(n.code,{children:"KUBERNETES"})}),", ",(0,i.jsx)(n.a,{href:"#docker",children:(0,i.jsx)(n.code,{children:"DOCKER"})}),", ",(0,i.jsx)(n.a,{href:"#auto",children:(0,i.jsx)(n.code,{children:"AUTO"})}),", and ",(0,i.jsx)(n.a,{href:"#none",children:(0,i.jsx)(n.code,{children:"NONE"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.a,{href:"/public-networks/concepts/node-keys#enode-url",children:"enode"})," advertised to other nodes during discovery is the external IP address and port. The ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#admin_nodeinfo",children:(0,i.jsx)(n.code,{children:"admin_nodeInfo"})})," JSON-RPC API method returns the external address and port for the ",(0,i.jsx)(n.code,{children:"enode"})," and ",(0,i.jsx)(n.code,{children:"listenAddr"})," properties."]}),"\n",(0,i.jsx)(n.p,{children:"While Besu is running, the following are not supported:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"IP address changes"}),"\n",(0,i.jsxs)(n.li,{children:["Changing NAT methods. To change the NAT method, restart the node with the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#nat-method",children:(0,i.jsx)(n.code,{children:"--nat-method"})})," option set."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"auto",children:"Auto"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"AUTO"})," detects if Besu is running inside a Kubernetes cluster or a Docker container."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If Besu is running in a Kubernetes cluster, ",(0,i.jsx)(n.code,{children:"AUTO"})," sets to ",(0,i.jsx)(n.a,{href:"#kubernetes",children:(0,i.jsx)(n.code,{children:"KUBERNETES"})}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["If Besu is running in a Docker container, ",(0,i.jsx)(n.code,{children:"AUTO"})," sets to ",(0,i.jsx)(n.a,{href:"#docker",children:(0,i.jsx)(n.code,{children:"DOCKER"})}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["If Besu is not running in Kubernetes or Docker container, ",(0,i.jsx)(n.code,{children:"AUTO"})," sets to ",(0,i.jsx)(n.a,{href:"#none",children:(0,i.jsx)(n.code,{children:"NONE"})}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"AUTO"})," is the default NAT method."]}),"\n",(0,i.jsx)(n.p,{children:"The following log shows an automatic detection failure."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-log",metastring:'title="The following log shows an automatic detection failure"',children:"INFO | KubernetesNatManager | Starting kubernetes NAT manager.\nDEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.\nDEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used\nINFO | NetworkRunner | Starting Network.\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If automatic detection fails, set the IP and ports in ",(0,i.jsx)(n.a,{href:"#none",children:(0,i.jsx)(n.code,{children:"NONE"})})," mode."]})}),"\n",(0,i.jsx)(n.h2,{id:"upnp",children:"UPnP"}),"\n",(0,i.jsxs)(n.p,{children:["Specify ",(0,i.jsx)(n.code,{children:"UPNP"})," to quickly allow inbound peer connections without manual router configuration. Use UPnP in home or small office environments where a wireless router or modem provides NAT isolation."]}),"\n",(0,i.jsx)(n.p,{children:"UPnP automatically detects if a node is running in a UPnP environment and provides port forwarding. UPnP might introduce delays during node startup, especially on networks without a UPnP gateway device."}),"\n",(0,i.jsxs)(n.p,{children:["Use ",(0,i.jsx)(n.code,{children:"UPNPP2PONLY"})," if you wish to enable UPnP only for p2p traffic."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"UPnP support is often disabled by default in networking firmware. If disabled by default, you must explicitly enable UPnP support."})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["When the NAT method is set to ",(0,i.jsx)(n.code,{children:"UPNP"}),", the advertised port is the same as the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:"listening port"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,i.jsxs)(n.p,{children:["Specify ",(0,i.jsx)(n.code,{children:"KUBERNETES"})," to explicitly specify Besu is running inside a Kubernetes cluster. Besu automatically detects if it's running inside of a Kubernetes cluster and interacts with Kubernetes APIs as required to determine external IP addresses and exposed ports."]}),"\n",(0,i.jsx)(n.p,{children:"In Kubernetes, the Ingress IP of the load balancer will be used as the external IP for Besu. A load balancer service can map any incoming port to a target port. These mapping rules will be the one retrieved by Besu."}),"\n",(0,i.jsxs)(n.p,{children:["A tutorial to ",(0,i.jsx)(n.a,{href:"/private-networks/tutorials/kubernetes/nat-manager",children:"Configure the Nat Manager for Kubernetes"})," is available."]}),"\n",(0,i.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,i.jsxs)(n.p,{children:["Specify ",(0,i.jsx)(n.code,{children:"DOCKER"})," to explicitly specify Besu is running inside a Docker container. If you specify ",(0,i.jsx)(n.code,{children:"DOCKER"}),", you advertise the host IP address not the container IP address."]}),"\n",(0,i.jsxs)(n.p,{children:["The host IP address is the advertised host specified in the ",(0,i.jsxs)(n.a,{href:"https://docs.docker.com/engine/reference/commandline/run/#add-entries-to-container-hosts-file---add-host",children:[(0,i.jsx)(n.code,{children:"docker run"})," command"]}),". If not specified in the ",(0,i.jsx)(n.code,{children:"docker run"})," command, the advertised host defaults to the values for ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,i.jsx)(n.code,{children:"--p2p-host"})})," and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,i.jsx)(n.code,{children:"--p2p-port"})}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"none",children:"None"}),"\n",(0,i.jsxs)(n.p,{children:["Specify ",(0,i.jsx)(n.code,{children:"NONE"})," to explicitly configure the external IP address and ports advertised using:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-host",children:(0,i.jsx)(n.code,{children:"--p2p-host"})})," and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:(0,i.jsx)(n.code,{children:"--p2p-port"})})," for the P2P service."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-host",children:(0,i.jsx)(n.code,{children:"--rpc-http-host"})})," and ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-port",children:(0,i.jsx)(n.code,{children:"--rpc-http-port"})})," for the JSON-RPC HTTP service."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The P2P and JSON-RPC HTTP hosts and ports are advertised in the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/api/#net_services",children:(0,i.jsx)(n.code,{children:"net_services"})})," method."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["When the NAT method is set to ",(0,i.jsx)(n.code,{children:"NONE"}),", the advertised port is the same as the ",(0,i.jsx)(n.a,{href:"/public-networks/reference/cli/options#p2p-port",children:"listening port"}),"."]})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var i=t(96540);const r={},s=i.createContext(r);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ee5d8003.8490affb.js b/assets/js/ee5d8003.8490affb.js new file mode 100644 index 00000000000..daba3bae27a --- /dev/null +++ b/assets/js/ee5d8003.8490affb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5193],{68952:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>u});var t=a(74848),r=a(28453),s=a(11470),i=a(19365);const o={title:"Private network subcommands",sidebar_position:2,description:"Besu command line interface subcommands",tags:["private networks"]},l="Private network subcommands",c={id:"private-networks/reference/cli/subcommands",title:"Private network subcommands",description:"Besu command line interface subcommands",source:"@site/docs/private-networks/reference/cli/subcommands.md",sourceDirName:"private-networks/reference/cli",slug:"/private-networks/reference/cli/subcommands",permalink:"/private-networks/reference/cli/subcommands",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/reference/cli/subcommands.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:2,frontMatter:{title:"Private network subcommands",sidebar_position:2,description:"Besu command line interface subcommands",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Private network options",permalink:"/private-networks/reference/cli/options"},next:{title:"Private network API methods",permalink:"/private-networks/reference/api/"}},d={},u=[{value:"<code>operator</code>",id:"operator",level:2},{value:"<code>generate-blockchain-config</code>",id:"generate-blockchain-config",level:3},{value:"<code>rlp</code>",id:"rlp",level:2},{value:"<code>decode</code>",id:"decode",level:3},{value:"<code>encode</code>",id:"encode",level:3},{value:"IBFT 2.0 extra data",id:"ibft-20-extra-data",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"private-network-subcommands",children:"Private network subcommands"})}),"\n",(0,t.jsx)(n.p,{children:"This reference describes the syntax of the Besu private network command line interface (CLI) subcommands."}),"\n",(0,t.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,t.jsxs)(n.p,{children:["This reference contains subcommands that apply to only private networks. For subcommands that apply to both private and public networks, see the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/cli/subcommands",children:"public network subcommands reference"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"To start a Besu node using subcommands, run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS]\n"})}),"\n",(0,t.jsx)(n.p,{children:"If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu Tab+Tab\n"})}),"\n",(0,t.jsx)(n.h2,{id:"operator",children:(0,t.jsx)(n.code,{children:"operator"})}),"\n",(0,t.jsx)(n.p,{children:"Provides operator actions."}),"\n",(0,t.jsx)(n.h3,{id:"generate-blockchain-config",children:(0,t.jsx)(n.code,{children:"generate-blockchain-config"})}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsx)(i.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu operator generate-blockchain-config --config-file=<FILE> --to=<DIRECTORY> [--genesis-file-name=<FILE>] [--private-key-file-name=<FILE>] [--public-key-file-name=<FILE>]\n"})})}),(0,t.jsx)(i.A,{value:"Example",label:"Example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Generates an ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#genesis-file",children:"IBFT 2.0"})," or ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#genesis-file",children:"QBFT"})," genesis file."]}),"\n",(0,t.jsxs)(n.p,{children:["The configuration file has two nested JSON nodes. The first is the ",(0,t.jsx)(n.code,{children:"genesis"})," property defining the IBFT 2.0 or QBFT genesis file, except for the ",(0,t.jsx)(n.code,{children:"extraData"})," string. The second is the ",(0,t.jsx)(n.code,{children:"blockchain"})," property defining the number of key pairs to generate."]}),"\n",(0,t.jsx)(n.h2,{id:"rlp",children:(0,t.jsx)(n.code,{children:"rlp"})}),"\n",(0,t.jsx)(n.p,{children:"Provides RLP related actions."}),"\n",(0,t.jsx)(n.h3,{id:"decode",children:(0,t.jsx)(n.code,{children:"decode"})}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsx)(i.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu rlp decode [--from=<FILE>] [--to=<FILE>] [--type=<TYPE>]\n"})})}),(0,t.jsx)(i.A,{value:"File example",label:"File example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu rlp decode --from=ibft_extra_data.txt --to=decoded_ibft_extra_data.txt --type=IBFT_EXTRA_DATA\n"})})}),(0,t.jsx)(i.A,{value:"Standard input/output example",label:"Standard input/output example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cat ibft_extra_data.txt | besu rlp decode > decoded_ibft_extra_data.txt\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Decodes the RLP hexadecimal string used as ",(0,t.jsx)(n.code,{children:"extraData"})," in an\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#extra-data",children:"IBFT 2.0"})," or\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#extra-data",children:"QBFT"})," genesis file into a validator list."]}),"\n",(0,t.jsx)(n.p,{children:"This subcommand takes the following options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"from"})," - The file containing the RLP hexadecimal string to decode.\nThe default is standard input."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"to"})," - The file to write the decoded validator list to.\nThe default is standard output."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"type"})," - ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"})," for an IBFT 2.0 ",(0,t.jsx)(n.code,{children:"extraData"})," string, or ",(0,t.jsx)(n.code,{children:"QBFT_EXTRA_DATA"})," for a QBFT\n",(0,t.jsx)(n.code,{children:"extraData"})," string.\nThe default is ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"encode",children:(0,t.jsx)(n.code,{children:"encode"})}),"\n",(0,t.jsxs)(s.A,{children:[(0,t.jsx)(i.A,{value:"Syntax",label:"Syntax",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu rlp encode [--from=<FILE>] [--to=<FILE>] [--type=<TYPE>]\n"})})}),(0,t.jsx)(i.A,{value:"File example",label:"File example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA\n"})})}),(0,t.jsx)(i.A,{value:"Standard input/output example",label:"Standard input/output example",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cat extra_data.json | besu rlp encode > rlp.txt\n"})})})]}),"\n",(0,t.jsxs)(n.p,{children:["Encodes a validator list into an RLP hexadecimal string to use as ",(0,t.jsx)(n.code,{children:"extraData"})," in an\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/ibft#extra-data",children:"IBFT 2.0"})," or\n",(0,t.jsx)(n.a,{href:"/private-networks/how-to/configure/consensus/qbft#extra-data",children:"QBFT"})," genesis file."]}),"\n",(0,t.jsx)(n.p,{children:"This subcommand takes the following options:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"from"})," - The file containing the validator list to encode.\nThe default is standard input."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"to"})," - The file to write the RLP-encoded hexadecimal string to.\nThe default is standard output."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"type"})," - ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"})," for an IBFT 2.0 ",(0,t.jsx)(n.code,{children:"extraData"})," string, or ",(0,t.jsx)(n.code,{children:"QBFT_EXTRA_DATA"})," for a QBFT\n",(0,t.jsx)(n.code,{children:"extraData"})," string.\nThe default is ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ibft-20-extra-data",children:"IBFT 2.0 extra data"}),"\n",(0,t.jsxs)(n.p,{children:["To generate the RLP encoded ",(0,t.jsx)(n.code,{children:"extraData"})," string, specify a JSON input that is an array of validator addresses in ascending order."]}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.mdxAdmonitionTitle,{children:["JSON schema for ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"})]}),(0,t.jsxs)(n.p,{children:["Use the following JSON schema to validate that your JSON data is well-formatted. To validate your JSON content, use an online validation tool, such as ",(0,t.jsx)(n.a,{href:"https://www.jsonschemavalidator.net/",children:"JSON Schema Validator"}),"."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",\n "type": "array",\n "definitions": {},\n "title": "IBFT extra data",\n "description": "JSON format used as input to generate an IBFT extra data RLP string",\n "items": {\n "$id": "#/address",\n "type": "string",\n "title": "Validator address",\n "description": "The validator node address",\n "default": "",\n "examples": [\n "be068f726a13c8d46c44be6ce9d275600e1735a4",\n "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"\n ],\n "pattern": "^([0-9a-f]{40})$"\n }\n}\n'})}),(0,t.jsxs)(n.p,{children:["Example ",(0,t.jsx)(n.code,{children:"IBFT_EXTRA_DATA"})," encoding:"]}),(0,t.jsxs)(s.A,{children:[(0,t.jsx)(i.A,{value:"JSON input",label:"JSON input",default:!0,children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'[\n "be068f726a13c8d46c44be6ce9d275600e1735a4",\n "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"\n]\n'})})}),(0,t.jsx)(i.A,{value:"RLP output",label:"RLP output",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"0xf853a00000000000000000000000000000000000000000000000000000000000000000ea94be068f726a13c8d46c44be6ce9d275600e1735a4945ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193808400000000c0\n"})})})]})]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},19365:(e,n,a)=>{a.d(n,{A:()=>i});a(96540);var t=a(18215);const r={tabItem:"tabItem_Ymn6"};var s=a(74848);function i(e){let{children:n,hidden:a,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,i),hidden:a,children:n})}},11470:(e,n,a)=>{a.d(n,{A:()=>w});var t=a(96540),r=a(18215),s=a(23104),i=a(56347),o=a(205),l=a(57485),c=a(31682),d=a(70679);function u(e){return t.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:a}=e;return(0,t.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:a,attributes:t,default:r}}=e;return{value:n,label:a,attributes:t,default:r}}))}(a);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,a])}function p(e){let{value:n,tabValues:a}=e;return a.some((e=>e.value===n))}function f(e){let{queryString:n=!1,groupId:a}=e;const r=(0,i.W6)(),s=function(e){let{queryString:n=!1,groupId:a}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:n,groupId:a});return[(0,l.aZ)(s),(0,t.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(r.location.search);n.set(s,e),r.replace({...r.location,search:n.toString()})}),[s,r])]}function x(e){const{defaultValue:n,queryString:a=!1,groupId:r}=e,s=h(e),[i,l]=(0,t.useState)((()=>function(e){let{defaultValue:n,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!p({value:n,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const t=a.find((e=>e.default))??a[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:s}))),[c,u]=f({queryString:a,groupId:r}),[x,m]=function(e){let{groupId:n}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,s]=(0,d.Dv)(a);return[r,(0,t.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:r}),b=(()=>{const e=c??x;return p({value:e,tabValues:s})?e:null})();(0,o.A)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,t.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),m(e)}),[u,m,s]),tabValues:s}}var m=a(92303);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var j=a(74848);function g(e){let{className:n,block:a,selectedValue:t,selectValue:i,tabValues:o}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const n=e.currentTarget,a=l.indexOf(n),r=o[a].value;r!==t&&(c(n),i(r))},u=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;n=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;n=l[a]??l[l.length-1];break}}n?.focus()};return(0,j.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":a},n),children:o.map((e=>{let{value:n,label:a,attributes:s}=e;return(0,j.jsx)("li",{role:"tab",tabIndex:t===n?0:-1,"aria-selected":t===n,ref:e=>l.push(e),onKeyDown:u,onClick:d,...s,className:(0,r.A)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":t===n}),children:a??n},n)}))})}function v(e){let{lazy:n,children:a,selectedValue:s}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===s));return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,j.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s})))})}function T(e){const n=x(e);return(0,j.jsxs)("div",{className:(0,r.A)("tabs-container",b.tabList),children:[(0,j.jsx)(g,{...n,...e}),(0,j.jsx)(v,{...n,...e})]})}function w(e){const n=(0,m.A)();return(0,j.jsx)(T,{...e,children:u(e.children)},String(n))}},28453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>o});var t=a(96540);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eeceef6b.38bac9b2.js b/assets/js/eeceef6b.38bac9b2.js new file mode 100644 index 00000000000..ebf6eab933f --- /dev/null +++ b/assets/js/eeceef6b.38bac9b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3164],{66181:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var r=o(74848),t=o(28453);o(11470),o(19365);const a={title:"Reduce storage for Bonsai Tries",sidebar_position:12,description:"Reduce the size of your database when using Bonsai Tries",tags:["public networks"]},i="Reduce storage for Bonsai Tries",s={id:"public-networks/how-to/bonsai-limit-trie-logs",title:"Reduce storage for Bonsai Tries",description:"Reduce the size of your database when using Bonsai Tries",source:"@site/docs/public-networks/how-to/bonsai-limit-trie-logs.md",sourceDirName:"public-networks/how-to",slug:"/public-networks/how-to/bonsai-limit-trie-logs",permalink:"/public-networks/how-to/bonsai-limit-trie-logs",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/bonsai-limit-trie-logs.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:12,frontMatter:{title:"Reduce storage for Bonsai Tries",sidebar_position:12,description:"Reduce the size of your database when using Bonsai Tries",tags:["public networks"]},sidebar:"publicDocSidebar",previous:{title:"Upgrade Besu",permalink:"/public-networks/how-to/upgrade-node"},next:{title:"Use EVM tool",permalink:"/public-networks/how-to/troubleshoot/evm-tool"}},l={},d=[{value:"Limit and prune trie logs",id:"limit-and-prune-trie-logs",level:2},{value:"Prune outdated trie logs",id:"prune-outdated-trie-logs",level:3},{value:"Troubleshoot",id:"troubleshoot",level:2},{value:"Prune command for Mainnet",id:"prune-command-for-mainnet",level:3},{value:"Subcommand not working",id:"subcommand-not-working",level:3},{value:"Column handle not found for segment <code>TRIE_BRANCH_STORAGE</code>",id:"column-handle-not-found-for-segment-trie_branch_storage",level:3},{value:"Database not detected",id:"database-not-detected",level:3},{value:"Cannot store generated private key",id:"cannot-store-generated-private-key",level:3},{value:"Valid keypair not provided",id:"valid-keypair-not-provided",level:3},{value:"Column handle not found for segment <code>WORLD_STATE</code>",id:"column-handle-not-found-for-segment-world_state",level:3},{value:"Resource temporarily unavailable",id:"resource-temporarily-unavailable",level:3},{value:"Unable to change the sync mode",id:"unable-to-change-the-sync-mode",level:3},{value:"Cannot run trie log prune",id:"cannot-run-trie-log-prune",level:3},{value:"Block does not match stored chain data",id:"block-does-not-match-stored-chain-data",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"reduce-storage-for-bonsai-tries",children:"Reduce storage for Bonsai Tries"})}),"\n",(0,r.jsxs)(n.p,{children:["When using the ",(0,r.jsx)(n.a,{href:"/public-networks/concepts/data-storage-formats#bonsai-tries",children:"Bonsai Tries"})," data storage format,\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-limit-trie-logs-enabled",children:(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})})," is\nenabled by default.\nWhen enabled, this feature can reduce database growth by more than 3 GB each week on Mainnet."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["If ",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,r.jsx)(n.code,{children:"--sync-mode=FULL"})})," is set, the\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-limit-trie-logs-enabled",children:(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})}),"\noption is disallowed and must be set to ",(0,r.jsx)(n.code,{children:"false"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"limit-and-prune-trie-logs",children:"Limit and prune trie logs"}),"\n",(0,r.jsxs)(n.p,{children:["If you're running Besu without\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-limit-trie-logs-enabled",children:(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})}),",\nyou might have a backlog of redundant trie logs.\nYou can prune these using the following instructions."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Ensure you are using Besu version 24.6.0 or later.\nIf you are using an older version, upgrade Besu or refer to the older version of the documentation."})}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"The following commands are examples.\nBefore executing these example commands on your node, modify them to apply to your node's configuration."})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Stop Besu."}),"\n",(0,r.jsxs)(n.li,{children:["(Optional) Run the Besu trie log prune command. Specify the Bonsai Trie data storage format and the data directory for your Besu database:","\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune\n"})}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"Start Besu."}),"\n",(0,r.jsxs)(n.li,{children:["Look for ",(0,r.jsx)(n.code,{children:"Limit trie logs enabled: retention: 512; prune window: 30000"})," in your Besu configuration printout at startup."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"prune-outdated-trie-logs",children:"Prune outdated trie logs"}),"\n",(0,r.jsxs)(n.p,{children:["When you start Besu with\n",(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#bonsai-limit-trie-logs-enabled",children:(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})}),", it\ncontinuously prunes the unnecessary trie log data, removing it one block at a time.\nThis process begins after an initial reduction in the database size during startup."]}),"\n",(0,r.jsxs)(n.p,{children:["Enabling ",(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})," on a long-running node does not immediately clear your backlog of trie logs in the same way resyncing does.\nInstead of resyncing, you can run an offline command to immediately prune old trie logs.\nTo run the offline command, you must shut down Besu for a minimal period.\nIf the ",(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"})," option is enabled, you do not need to run the offline command again after initially running it."]}),"\n",(0,r.jsxs)(n.p,{children:["For minimal downtime, we recommend running the offline command before restarting Besu with ",(0,r.jsx)(n.code,{children:"--bonsai-limit-trie-logs-enabled"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you are following the guides by ",(0,r.jsx)(n.a,{href:"https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-teku-f09ecd9ef2ee",children:"Somer Esat"})," or ",(0,r.jsx)(n.a,{href:"https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet/part-i-installation/step-3-installing-execution-client/besu",children:"CoinCashew"}),", you have set the following options in your ",(0,r.jsx)(n.code,{children:"besu.service"})," or ",(0,r.jsx)(n.code,{children:"execution.service"})," systemd file:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'...\nExecStart=/usr/local/bin/besu/bin/besu \\\n...\n --sync-mode=SNAP \\\n --data-path="/var/lib/besu" \\\n --data-storage-format=BONSAI \\\n...\n'})}),"\n",(0,r.jsx)(n.p,{children:"To prune trie logs, the command should look similar to the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.p,{children:"The logs should look similar to the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"2024-02-02 05:45:41.162+00:00 | main | INFO | KeyPairUtil | Attempting to load public key from /data/besu/key\n ...\n2024-02-02 05:45:43.433+00:00 | main | INFO | TrieLogSubCommand | Estimating trie logs size before pruning...\n2024-02-02 05:45:43.837+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size before pruning: 9 GiB\n2024-02-02 05:46:09.863+00:00 | main | INFO | TrieLogHelper | Starting pruning: retain 512 trie logs, processing in 1 batches...\n2024-02-02 05:46:09.918+00:00 | main | INFO | TrieLogHelper | Saving trie logs to retain in file /data/besu/database/trieLogsToRetain-1 (batch 1)...\n2024-02-02 05:46:09.926+00:00 | main | INFO | TrieLogHelper | Obtaining trielogs from db, this may take a few minutes...\n2024-02-02 05:46:10.100+00:00 | main | INFO | TrieLogHelper | Clear trie logs...\n2024-02-02 05:46:10.155+00:00 | main | INFO | TrieLogHelper | Restoring trie logs retained from batch 1...\n2024-02-02 05:46:10.222+00:00 | main | INFO | TrieLogHelper | Key(0): 0xcd50706da7f6f2db7f9d54f3589122760900d9ab2508c20a4ca40b496d930368\n... \n2024-02-02 05:46:10.336+00:00 | main | INFO | TrieLogHelper | Key(511): 0x238f9649b59616430ad7e43b8f3cf65bc97cac4aa54a3eddf3ad6ee666ce733e\n2024-02-02 05:46:10.441+00:00 | main | INFO | TrieLogHelper | Deleting files...\n2024-02-02 05:46:10.446+00:00 | main | INFO | TrieLogSubCommand | Finished pruning. Re-estimating trie logs size...\n2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size after pruning: 0 B (0 B estimate is normal when using default settings)\n2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Prune ran successfully. We estimate you freed up 9 GiB!\nPrune ran successfully. We estimate you freed up 9 GiB!\n"})}),"\n",(0,r.jsx)(n.p,{children:"If you are using a TOML configuration file, you can run a command similar to the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --config-file=besu-config.toml storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.h2,{id:"troubleshoot",children:"Troubleshoot"}),"\n",(0,r.jsx)(n.p,{children:"Troubleshoot common errors that can occur when using the trie log prune command to reduce your database size for Bonsai Tries.\nTo minimize errors, ensure your command specifies the following:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,r.jsx)(n.code,{children:"--data-storage-format"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:(0,r.jsx)(n.code,{children:"--data-path"})})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,r.jsx)(n.code,{children:"--sync-mode"})})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"prune-command-for-mainnet",children:"Prune command for Mainnet"}),"\n",(0,r.jsx)(n.p,{children:"The prune command should look similar to the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.p,{children:"Ensure you stop Besu before running the command."}),"\n",(0,r.jsx)(n.h3,{id:"subcommand-not-working",children:"Subcommand not working"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.IllegalArgumentException: Subcommand only works with data-storage-format=BONSAI"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"--data-storage-format=BONSAI"})," might be missing.\nTo resolve, add the storage format.\nThe command should look similar to the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsxs)(n.h3,{id:"column-handle-not-found-for-segment-trie_branch_storage",children:["Column handle not found for segment ",(0,r.jsx)(n.code,{children:"TRIE_BRANCH_STORAGE"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.RuntimeException: Column handle not found for segment TRIE_BRANCH_STORAGE"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Ensure you specify ",(0,r.jsx)(n.code,{children:"--data-path"}),".\nYour command should look similar to the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.h3,{id:"database-not-detected",children:"Database not detected"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.IllegalArgumentException: Trying to retain more trie logs than chain length (0), skipping pruning"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Ensure you specify the correct ",(0,r.jsx)(n.code,{children:"--data-path"})," for your node.\nYour command should look similar to the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.h3,{id:"cannot-store-generated-private-key",children:"Cannot store generated private key"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.IllegalArgumentException: Cannot store generated private key"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Ensure you specify the correct ",(0,r.jsx)(n.code,{children:"--data-path"})," for your node.\nYour command should look similar to the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune\n"})}),"\n",(0,r.jsx)(n.h3,{id:"valid-keypair-not-provided",children:"Valid keypair not provided"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.IllegalArgumentException: Supplied file does not contain valid keyPair pair."})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Check your file permissions and try running a ",(0,r.jsx)(n.code,{children:"sudo"})," command to resolve the issue:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu storage --sync-mode=SNAP trie-log prune\n"})}),"\n",(0,r.jsxs)(n.h3,{id:"column-handle-not-found-for-segment-world_state",children:["Column handle not found for segment ",(0,r.jsx)(n.code,{children:"WORLD_STATE"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.RuntimeException: Column handle not found for segment WORLD_STATE"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Ensure you are using ",(0,r.jsx)(n.code,{children:"--data-storage-format=BONSAI"})," instead of ",(0,r.jsx)(n.code,{children:"--data-storage-format=FOREST"})," on an existing Bonsai database."]}),"\n",(0,r.jsx)(n.h3,{id:"resource-temporarily-unavailable",children:"Resource temporarily unavailable"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: While lock file: /data/besu/database/LOCK: Resource temporarily unavailable"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Check if Besu is already running.\nYou must shut down the Besu client before running the subcommand."}),"\n",(0,r.jsx)(n.h3,{id:"unable-to-change-the-sync-mode",children:"Unable to change the sync mode"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.IllegalStateException: Unable to change the sync mode when snap sync is incomplete, please restart with snap sync mode"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Check that you have specified ",(0,r.jsx)(n.code,{children:"--sync-mode"}),".\nThe default is ",(0,r.jsx)(n.code,{children:"--sync-mode=SNAP"}),".\nMost Mainnet users use ",(0,r.jsx)(n.code,{children:"SNAP"})," or ",(0,r.jsx)(n.code,{children:"CHECKPOINT"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"cannot-run-trie-log-prune",children:"Cannot run trie log prune"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"java.lang.RuntimeException: No finalized block present, can't safely run trie log prune"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"This message might appear if your node is relatively new or recently resynced.\nTo resolve this error, ensure that your node is fully synced and correctly configured to recognize finalized blocks."}),"\n",(0,r.jsx)(n.h3,{id:"block-does-not-match-stored-chain-data",children:"Block does not match stored chain data"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"org.hyperledger.besu.util.InvalidConfigurationException: Supplied genesis block does not match chain data stored in /data/besu."})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Check if you are running the command for a network other than Mainnet.\nTo specify a network, run a command that looks similar to the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"sudo /usr/local/bin/besu/bin/besu --network=holesky --sync-mode=SNAP --data-storage-format=BONSAI --data-path=/var/lib/besu storage trie-log prune\n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},19365:(e,n,o)=>{o.d(n,{A:()=>i});o(96540);var r=o(18215);const t={tabItem:"tabItem_Ymn6"};var a=o(74848);function i(e){let{children:n,hidden:o,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,i),hidden:o,children:n})}},11470:(e,n,o)=>{o.d(n,{A:()=>w});var r=o(96540),t=o(18215),a=o(23104),i=o(56347),s=o(205),l=o(57485),d=o(31682),c=o(70679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:o}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:o,attributes:r,default:t}}=e;return{value:n,label:o,attributes:r,default:t}}))}(o);return function(e){const n=(0,d.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,o])}function m(e){let{value:n,tabValues:o}=e;return o.some((e=>e.value===n))}function g(e){let{queryString:n=!1,groupId:o}=e;const t=(0,i.W6)(),a=function(e){let{queryString:n=!1,groupId:o}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!o)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:n,groupId:o});return[(0,l.aZ)(a),(0,r.useCallback)((e=>{if(!a)return;const n=new URLSearchParams(t.location.search);n.set(a,e),t.replace({...t.location,search:n.toString()})}),[a,t])]}function p(e){const{defaultValue:n,queryString:o=!1,groupId:t}=e,a=h(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:n,tabValues:o}=e;if(0===o.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(n){if(!m({value:n,tabValues:o}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${o.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const r=o.find((e=>e.default))??o[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:a}))),[d,u]=g({queryString:o,groupId:t}),[p,b]=function(e){let{groupId:n}=e;const o=function(e){return e?`docusaurus.tab.${e}`:null}(n),[t,a]=(0,c.Dv)(o);return[t,(0,r.useCallback)((e=>{o&&a.set(e)}),[o,a])]}({groupId:t}),f=(()=>{const e=d??p;return m({value:e,tabValues:a})?e:null})();(0,s.A)((()=>{f&&l(f)}),[f]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),b(e)}),[u,b,a]),tabValues:a}}var b=o(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=o(74848);function j(e){let{className:n,block:o,selectedValue:r,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:d}=(0,a.a_)(),c=e=>{const n=e.currentTarget,o=l.indexOf(n),t=s[o].value;t!==r&&(d(n),i(t))},u=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const o=l.indexOf(e.currentTarget)+1;n=l[o]??l[0];break}case"ArrowLeft":{const o=l.indexOf(e.currentTarget)-1;n=l[o]??l[l.length-1];break}}n?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":o},n),children:s.map((e=>{let{value:n,label:o,attributes:a}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===n?0:-1,"aria-selected":r===n,ref:e=>l.push(e),onKeyDown:u,onClick:c,...a,className:(0,t.A)("tabs__item",f.tabItem,a?.className,{"tabs__item--active":r===n}),children:o??n},n)}))})}function y(e){let{lazy:n,children:o,selectedValue:a}=e;const i=(Array.isArray(o)?o:[o]).filter(Boolean);if(n){const e=i.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:(0,t.A)("margin-top--md",e.props.className)}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==a})))})}function v(e){const n=p(e);return(0,x.jsxs)("div",{className:(0,t.A)("tabs-container",f.tabList),children:[(0,x.jsx)(j,{...n,...e}),(0,x.jsx)(y,{...n,...e})]})}function w(e){const n=(0,b.A)();return(0,x.jsx)(v,{...e,children:u(e.children)},String(n))}},28453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>s});var r=o(96540);const t={},a=r.createContext(t);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f0bf0af8.e4baebc0.js b/assets/js/f0bf0af8.e4baebc0.js new file mode 100644 index 00000000000..dbe6fed6bc6 --- /dev/null +++ b/assets/js/f0bf0af8.e4baebc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[1942],{77292:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(74848),t=n(28453);const i={title:"Validators",description:"Configuring validators in production networks",sidebar_position:4,tags:["private networks"]},a="Configure validators in a production network",s={id:"private-networks/how-to/configure/validators",title:"Validators",description:"Configuring validators in production networks",source:"@site/docs/private-networks/how-to/configure/validators.md",sourceDirName:"private-networks/how-to/configure",slug:"/private-networks/how-to/configure/validators",permalink:"/private-networks/how-to/configure/validators",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/configure/validators.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:4,frontMatter:{title:"Validators",description:"Configuring validators in production networks",sidebar_position:4,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Bootnodes",permalink:"/private-networks/how-to/configure/bootnodes"},next:{title:"Pre-deploy a contract",permalink:"/private-networks/how-to/configure/contracts"}},d={},l=[{value:"Number of validators required",id:"number-of-validators-required",level:2},{value:"Adding and removing validators",id:"adding-and-removing-validators",level:2},{value:"Validators as bootnodes",id:"validators-as-bootnodes",level:2}];function c(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.header,{children:(0,r.jsx)(o.h1,{id:"configure-validators-in-a-production-network",children:"Configure validators in a production network"})}),"\n",(0,r.jsxs)(o.p,{children:["As when ",(0,r.jsx)(o.a,{href:"/private-networks/how-to/configure/bootnodes",children:"configuring bootnodes"}),":"]}),"\n",(0,r.jsxs)(o.ol,{children:["\n",(0,r.jsxs)(o.li,{children:["\n",(0,r.jsxs)(o.p,{children:["Create the ",(0,r.jsx)(o.a,{href:"/public-networks/concepts/node-keys",children:"node key pair"})," (that is, the private and public key) before starting the validator."]}),"\n"]}),"\n",(0,r.jsxs)(o.li,{children:["\n",(0,r.jsx)(o.p,{children:"When creating validators in the cloud (for example, AWS or Azure), attempt to assign static IP addresses to them. If your network is:"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:"Publicly accessible, assign an elastic IP address."}),"\n",(0,r.jsx)(o.li,{children:"Internal only, specify a private IP address when you create the instance and record this IP address."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(o.p,{children:"We recommend storing validator configuration under source control."}),"\n",(0,r.jsx)(o.h2,{id:"number-of-validators-required",children:"Number of validators required"}),"\n",(0,r.jsxs)(o.p,{children:["Ensure you configure enough validators to allow for redundancy. IBFT 2.0 tolerates ",(0,r.jsx)(o.code,{children:"f = (n-1)/3"})," faulty validators, where:"]}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsxs)(o.li,{children:[(0,r.jsx)(o.code,{children:"f"})," is the number of faulty validators"]}),"\n",(0,r.jsxs)(o.li,{children:[(0,r.jsx)(o.code,{children:"n"})," is the number of validators."]}),"\n"]}),"\n",(0,r.jsx)(o.h2,{id:"adding-and-removing-validators",children:"Adding and removing validators"}),"\n",(0,r.jsxs)(o.p,{children:["You can ",(0,r.jsx)(o.a,{href:"/private-networks/how-to/configure/consensus/ibft#add-and-remove-validators",children:"vote validators in or out of the validator pool"}),"."]}),"\n",(0,r.jsx)(o.h2,{id:"validators-as-bootnodes",children:"Validators as bootnodes"}),"\n",(0,r.jsxs)(o.p,{children:["Validators can also be bootnodes. Other than the ",(0,r.jsx)(o.a,{href:"/private-networks/how-to/configure/bootnodes",children:"usual configuration for bootnodes"}),", you do not need to specify any extra configuration when a validator is also a bootnode."]}),"\n",(0,r.jsx)(o.p,{children:"If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network."})]})}function u(e={}){const{wrapper:o}={...(0,t.R)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>a,x:()=>s});var r=n(96540);const t={},i=r.createContext(t);function a(e){const o=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f2142509.56209469.js b/assets/js/f2142509.56209469.js new file mode 100644 index 00000000000..d177df7cab8 --- /dev/null +++ b/assets/js/f2142509.56209469.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8862],{30401:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var s=r(74848),o=r(28453);const t={title:"Configure Kubernetes mode in NAT manager",sidebar_position:9,description:"Tutorial to configure Kubernetes mode for Besu Nat Manager",tags:["private networks"]},a="Configure Kubernetes mode in NAT Manager",i={id:"private-networks/tutorials/kubernetes/nat-manager",title:"Configure Kubernetes mode in NAT manager",description:"Tutorial to configure Kubernetes mode for Besu Nat Manager",source:"@site/docs/private-networks/tutorials/kubernetes/nat-manager.md",sourceDirName:"private-networks/tutorials/kubernetes",slug:"/private-networks/tutorials/kubernetes/nat-manager",permalink:"/private-networks/tutorials/kubernetes/nat-manager",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/tutorials/kubernetes/nat-manager.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:9,frontMatter:{title:"Configure Kubernetes mode in NAT manager",sidebar_position:9,description:"Tutorial to configure Kubernetes mode for Besu Nat Manager",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Production",permalink:"/private-networks/tutorials/kubernetes/production"},next:{title:"Deploy using Microsoft Azure",permalink:"/private-networks/tutorials/azure"}},l={},d=[{value:"Automatic configuration",id:"automatic-configuration",level:2},{value:"1. Create a load balancer",id:"1-create-a-load-balancer",level:3},{value:"2. Check if the load balancer is properly deployed",id:"2-check-if-the-load-balancer-is-properly-deployed",level:3},{value:"3. Deploy Besu",id:"3-deploy-besu",level:3},{value:"Automatic detection errors",id:"automatic-detection-errors",level:2},{value:"<code>Service not found</code> error message",id:"service-not-found-error-message",level:3},{value:"<code>Forbidden</code> error message",id:"forbidden-error-message",level:3},{value:"<code>Ingress not found</code> error message",id:"ingress-not-found-error-message",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"configure-kubernetes-mode-in-nat-manager",children:"Configure Kubernetes mode in NAT Manager"})}),"\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#auto",children:(0,s.jsx)(n.code,{children:"--nat-method=AUTO"})})," or ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#kubernetes",children:(0,s.jsx)(n.code,{children:"--nat-method=KUBERNETES"})})," CLI options to let the Besu node automatically configure its IP address and ports."]}),"\n",(0,s.jsxs)(n.p,{children:["Use mode ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#none",children:(0,s.jsx)(n.code,{children:"--nat-method=NONE"})})," to be able to set your Besu ports and IP address manually."]}),"\n",(0,s.jsxs)(n.p,{children:["Default mode is ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#auto",children:(0,s.jsx)(n.code,{children:"AUTO"})})," but Besu will fallback to ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#none",children:(0,s.jsx)(n.code,{children:"NONE"})})," mode if automatic configuration fails."]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.p,{children:["The following log shows fallback to ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#none",children:(0,s.jsx)(n.code,{children:"NONE"})})," mode after an automatic detection failure."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"INFO | KubernetesNatManager | Starting kubernetes NAT manager.\nDEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.\nDEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used\nINFO | NetworkRunner | Starting Network.\n"})})]}),"\n",(0,s.jsx)(n.h2,{id:"automatic-configuration",children:"Automatic configuration"}),"\n",(0,s.jsx)(n.p,{children:"Follow 3 steps to configure Besu for automatic IP address and ports detection on Kubernetes:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#1-create-a-load-balancer",children:"Create a load balancer"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#2-check-if-the-load-balancer-is-properly-deployed",children:"Check if the load balancer is properly deployed"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#3-deploy-besu",children:"Deploy Besu"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"1-create-a-load-balancer",children:"1. Create a load balancer"}),"\n",(0,s.jsxs)(n.p,{children:["Deploy a ",(0,s.jsx)(n.code,{children:"LoadBalancer"})," service for Besu to recover IP address and ports."]}),"\n",(0,s.jsx)(n.p,{children:"Here is an example that you can customize with your own ports and routing rules."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'---\napiVersion: v1\nkind: Service\nmetadata:\n labels:\n app.kubernetes.io/name: besu\n app.kubernetes.io/release: "1.0.0"\n name: besu\nspec:\n ports:\n - name: "json-rpc"\n port: 8545\n targetPort: 8545\n - name: "rlpx"\n port: 30303\n targetPort: 30303\n selector:\n app.kubernetes.io/name: besu\n app.kubernetes.io/release: "1.0.0"\n type: LoadBalancer\n'})}),"\n",(0,s.jsxs)(n.p,{children:["This service example lists the rules for the different ports used by Besu (",(0,s.jsx)(n.code,{children:"json-rpc"})," and",(0,s.jsx)(n.code,{children:" rlpx"}),"). The default value is used for ",(0,s.jsx)(n.code,{children:"discovery"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"2-check-if-the-load-balancer-is-properly-deployed",children:"2. Check if the load balancer is properly deployed"}),"\n",(0,s.jsx)(n.p,{children:"Verify the load balancer readiness before launching Besu."}),"\n",(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"kubectl describe services besu"})," to check the service status."]}),"\n",(0,s.jsx)(n.p,{children:"The command should display the following information:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'Name: besu\nNamespace: default\nLabels: app.kubernetes.io/name=besu\n app.kubernetes.io/release=1.0.0\nAnnotations: kubectl.kubernetes.io/last-applied-configuration:\n {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"besu","app.kubernetes.io/release":"1....\nSelector: app.kubernetes.io/name=besu,app.kubernetes.io/release=1.0.0\nType: LoadBalancer\nIP: --------\nLoadBalancer Ingress: ***<IP>***\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The load balancer must have an IP address displayed in place of ",(0,s.jsx)(n.code,{children:"***<IP>***"})," on the ",(0,s.jsx)(n.code,{children:"LoadBalancer Ingress"})," line to be ready."]}),"\n",(0,s.jsxs)(n.p,{children:["Run the ",(0,s.jsx)(n.code,{children:"kubectl describe services besu"})," command again until the load balancer IP address appears in the output."]}),"\n",(0,s.jsx)(n.h3,{id:"3-deploy-besu",children:"3. Deploy Besu"}),"\n",(0,s.jsx)(n.p,{children:"When steps 1 and 2 are completed, deploy Besu using the following YAML example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: besu-config\n labels:\n app.kubernetes.io/name: besu\n app.kubernetes.io/release: 1.0.0\ndata:\n BESU_LOGGING: "INFO"\n BESU_NETWORK: "dev"\n BESU_P2P_ENABLED: "true"\n BESU_RPC_HTTP_ENABLED: "true"\n BESU_RPC_HTTP_APIS: "eth,net,web3,debug,admin"\n KUBE_CONFIG_PATH: "/opt/besu/shared/kube-config"\n---\napiVersion: extensions/v1beta1\nkind: Deployment\nmetadata:\n name: besu\n labels:\n app.kubernetes.io/name: besu\n app.kubernetes.io/release: "1.0.0"\nspec:\n replicas: 1\n strategy: {}\n template:\n metadata:\n creationTimestamp: null\n labels:\n app.kubernetes.io/name: besu\n app.kubernetes.io/release: "1.0.0"\n spec:\n containers:\n - name: besu\n image: "hyperledger/besu:latest"\n imagePullPolicy: Always\n ports:\n - containerPort: 8545\n - containerPort: 30303\n envFrom:\n - configMapRef:\n name: besu-config\n restartPolicy: Always\nstatus: {}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"automatic-detection-errors",children:"Automatic detection errors"}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsx)(n.p,{children:"Automatic detection error messages do not prevent you to use Besu."}),(0,s.jsxs)(n.p,{children:["Try the fix indicated for each error or use ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#kubernetes",children:(0,s.jsx)(n.code,{children:"--nat-method=KUBERNETES"})})," CLI option and ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/configure-ports",children:"set IP address and port manually"}),"."]})]}),"\n",(0,s.jsx)(n.p,{children:"Possible errors messages for Kubernetes automatic detection failure:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#service-not-found-error-message",children:(0,s.jsx)(n.code,{children:"Service not found"})})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#forbidden-error-message",children:(0,s.jsx)(n.code,{children:"Forbidden"})})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#ingress-not-found-error-message",children:(0,s.jsx)(n.code,{children:"Ingress not found"})})}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"service-not-found-error-message",children:[(0,s.jsx)(n.code,{children:"Service not found"})," error message"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Error message:"})," ",(0,s.jsx)(n.code,{children:"Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Cause:"})," load balancer did start correctly or has the incorrect name."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Fix:"})," check and modify load balancer YAML configuration and restart service."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Example error log",type:"info",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"INFO | KubernetesNatManager | Starting kubernetes NAT manager.\nDEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.\nDEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used\nINFO | NetworkRunner | Starting Network.\n"})})}),"\n",(0,s.jsxs)(n.h3,{id:"forbidden-error-message",children:[(0,s.jsx)(n.code,{children:"Forbidden"})," error message"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Error message:"})," ",(0,s.jsx)(n.code,{children:"Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Cause:"})," Besu don't have permission to list the services via the Kubernetes API to retrieve IP address and ports from the load balancer."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Fix:"})," Give it the required permissions using ",(0,s.jsx)(n.a,{href:"https://kubernetes.io/docs/reference/access-authn-authz/rbac/",children:"Role-based access control"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["If you can't manage permissions, define the IP address and ports manually with ",(0,s.jsx)(n.a,{href:"/public-networks/how-to/connect/specify-nat#none",children:(0,s.jsx)(n.code,{children:"NONE"})})," mode"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Example error log",type:"info",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"INFO | KubernetesNatManager | Starting kubernetes NAT manager.\nDEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.\nDEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used\nINFO | NetworkRunner | Starting Network.\n"})})}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["For development environment, the permission issue can be fixed by running ",(0,s.jsx)(n.code,{children:"kubectl create clusterrolebinding myapp-view-binding --clusterrole=admin --serviceaccount=default:default"})]}),(0,s.jsx)(n.p,{children:"This command should only be used on development environment and not in production environment."}),(0,s.jsxs)(n.p,{children:["In production environment, require a finer management of permissions using Kubernetes ",(0,s.jsx)(n.a,{href:"https://kubernetes.io/docs/reference/access-authn-authz/rbac/",children:"Role-based access control"}),"."]})]}),"\n",(0,s.jsxs)(n.h3,{id:"ingress-not-found-error-message",children:[(0,s.jsx)(n.code,{children:"Ingress not found"})," error message"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Error message:"})," ",(0,s.jsx)(n.code,{children:"Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Cause:"})," Load balancer did not finish to recover an IP address."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Fix:"})," ",(0,s.jsx)(n.a,{href:"#2-check-if-the-load-balancer-is-properly-deployed",children:"Check that the load balancer is properly deployed"})," before launching Besu."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"Example error log",type:"info",children:(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"INFO | KubernetesNatManager | Starting kubernetes NAT manager.\nDEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.\nDEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used\nINFO | NetworkRunner | Starting Network.\n"})})})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>i});var s=r(96540);const o={},t=s.createContext(o);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f3adc880.1e05bd0a.js b/assets/js/f3adc880.1e05bd0a.js new file mode 100644 index 00000000000..a281c52f338 --- /dev/null +++ b/assets/js/f3adc880.1e05bd0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[7448],{87891:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>r});var s=i(74848),o=i(28453);const t={title:"Use local permissioning",sidebar_position:1,description:"Besu local permissioning",tags:["private networks"]},a="Use local permissioning",l={id:"private-networks/how-to/use-permissioning/local",title:"Use local permissioning",description:"Besu local permissioning",source:"@site/docs/private-networks/how-to/use-permissioning/local.md",sourceDirName:"private-networks/how-to/use-permissioning",slug:"/private-networks/how-to/use-permissioning/local",permalink:"/private-networks/how-to/use-permissioning/local",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-permissioning/local.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use local permissioning",sidebar_position:1,description:"Besu local permissioning",tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Performance best practices",permalink:"/private-networks/how-to/use-privacy/performance-best-practices"},next:{title:"Use onchain permissioning",permalink:"/private-networks/how-to/use-permissioning/onchain"}},c={},r=[{value:"Node allowlisting",id:"node-allowlisting",level:2},{value:"Specify bootnodes in the allowlist",id:"specify-bootnodes-in-the-allowlist",level:3},{value:"Enable node allowlisting",id:"enable-node-allowlisting",level:3},{value:"Update the node allowlist",id:"update-the-node-allowlist",level:3},{value:"View the node allowlist",id:"view-the-node-allowlist",level:3},{value:"Account allowlisting",id:"account-allowlisting",level:2},{value:"Enable account allowlisting",id:"enable-account-allowlisting",level:3},{value:"Update the account allowlist",id:"update-the-account-allowlist",level:3},{value:"View the account allowlist",id:"view-the-account-allowlist",level:3},{value:"Permissions configuration file",id:"permissions-configuration-file",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"use-local-permissioning",children:"Use local permissioning"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/private-networks/concepts/permissioning/#local",children:"Local permissioning"})," supports node and account allowlisting."]}),"\n",(0,s.jsx)(n.h2,{id:"node-allowlisting",children:"Node allowlisting"}),"\n",(0,s.jsxs)(n.p,{children:["You can allow access to specified nodes in the ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"}),". With node allowlisting enabled, communication is only between nodes in the allowlist."]}),"\n",(0,s.jsxs)(n.admonition,{type:"info",children:[(0,s.jsxs)(n.p,{children:["Node allowlists ",(0,s.jsx)(n.a,{href:"/public-networks/concepts/node-keys#domain-name-support",children:"support domain names"})," in enode URLs as an early access feature. Use the ",(0,s.jsx)(n.code,{children:"--Xdns-enabled"})," option to enable domain name support."]}),(0,s.jsxs)(n.p,{children:["If using Kubernetes, enable domain name support and use the ",(0,s.jsx)(n.code,{children:"--Xdns-update-enabled"})," option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes."]})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-toml",metastring:'title="Nodes allowlist in the permissions configuration file"',children:'nodes-allowlist=["enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.168.0.9:4567","enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.169.0.9:4568"]\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Node allowlisting is at the node level. That is, each node in the network has a ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"})," file in the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:"data directory"})," for the node."]}),"\n",(0,s.jsxs)(n.p,{children:["Local permissioning doesn't check that the node using the permissions configuration file is listed in the allowlist, it only checks that the remote end of the connection is in the allowlist. Use ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/permissioning/onchain",children:"onchain permissioning"})," if you need to check both ends of the connection."]}),"\n",(0,s.jsx)(n.h3,{id:"specify-bootnodes-in-the-allowlist",children:"Specify bootnodes in the allowlist"}),"\n",(0,s.jsxs)(n.p,{children:["The nodes permissions list must include the ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/configure/bootnodes",children:"bootnodes"})," or Besu doesn't start with node permissions enabled."]}),"\n",(0,s.jsx)(n.p,{children:"If you start Besu with specified bootnodes and have node permissioning enabled:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'--bootnodes="enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304","enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"nodes-allowlist"})," in the ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"})," must contain the specified bootnodes."]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect."})}),"\n",(0,s.jsx)(n.h3,{id:"enable-node-allowlisting",children:"Enable node allowlisting"}),"\n",(0,s.jsxs)(n.p,{children:["To enable node allowlisting, specify the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-config-file-enabled",children:(0,s.jsx)(n.code,{children:"--permissions-nodes-config-file-enabled"})})," option when starting Besu."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"PERM"})," API methods are not enabled by default. To enable the ",(0,s.jsx)(n.code,{children:"PERM"})," API methods, use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,s.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,s.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]}),"\n",(0,s.jsx)(n.h3,{id:"update-the-node-allowlist",children:"Update the node allowlist"}),"\n",(0,s.jsx)(n.p,{children:"To update the nodes allowlist while the node is running, use the following JSON-RPC API methods:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_addnodestoallowlist",children:(0,s.jsx)(n.code,{children:"perm_addNodesToAllowlist"})})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_removenodesfromallowlist",children:(0,s.jsx)(n.code,{children:"perm_removeNodesFromAllowlist"})})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can also update the ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:(0,s.jsx)(n.code,{children:"permissions_config.toml"})})," file directly and then update the allowlist using the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_reloadpermissionsfromfile",children:(0,s.jsx)(n.code,{children:"perm_reloadPermissionsFromFile"})})," method."]}),"\n",(0,s.jsx)(n.p,{children:"Updates to the permissions configuration file persist across node restarts."}),"\n",(0,s.jsx)(n.h3,{id:"view-the-node-allowlist",children:"View the node allowlist"}),"\n",(0,s.jsxs)(n.p,{children:["To view the nodes allowlist, use the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_getnodesallowlist",children:(0,s.jsx)(n.code,{children:"perm_getNodesAllowlist"})})," method."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Each node has a ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"}),", which means nodes can have different nodes allowlists. This means nodes might be participating in the network that are not on the allowlist of other nodes in the network. We recommend each node in the network has the same nodes allowlist."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="Example of different node allowlists"',children:"Node 1 Allowlist = [Node 2, Node 3]\n\nNode 2 Allowlist = [Node 3, Node 5]\n\nNode 5 is participating in the same network as Node 1 even though Node 1 does not have Node 5\non their allowlist.\n"})}),"\n",(0,s.jsx)(n.h2,{id:"account-allowlisting",children:"Account allowlisting"}),"\n",(0,s.jsxs)(n.p,{children:["You can specify accounts in the accounts allowlist in the ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"}),". A node with account permissioning accepts transactions only from accounts in the accounts allowlist."]}),"\n",(0,s.jsx)(n.admonition,{title:"Accounts allowlist in the permissions configuration file",type:"info",children:(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:'accounts-allowlist=["0x0000000000000000000000000000000000000009"]'})})}),"\n",(0,s.jsxs)(n.p,{children:["Account allowlisting is at the node level. That is, each node in the network has a ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"})," in the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:"data directory"})," for the node."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Using account permissioning and privacy",type:"caution",children:[(0,s.jsxs)(n.p,{children:["Account permissioning is incompatible with ",(0,s.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/sign-pmts",children:"random key signing"})," for ",(0,s.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transactions"}),"."]}),(0,s.jsxs)(n.p,{children:["If using account permissioning and privacy, a signing key must be specified using the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,s.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})})," command line option and the corresponding public key included in the accounts allowlist."]})]}),"\n",(0,s.jsx)(n.p,{children:"Transaction validation against the accounts allowlist occurs at the following points:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Submitted by JSON-RPC API method ",(0,s.jsx)(n.a,{href:"/public-networks/reference/api/#eth_sendrawtransaction",children:(0,s.jsx)(n.code,{children:"eth_sendRawTransaction"})})]}),"\n",(0,s.jsx)(n.li,{children:"Received via propagation from another node"}),"\n",(0,s.jsx)(n.li,{children:"Added to a block by a mining node"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"After adding transactions to a block, the transactions are not validated against the allowlist when received by another node. That is, a node can synchronize and add blocks containing transactions from accounts that are not on the accounts allowlist of that node."}),"\n",(0,s.jsx)(n.p,{children:"The following diagram illustrates applying local and onchain permissioning rules."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Permissioning Flow",src:i(36920).A+"",width:"1656",height:"1134"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",metastring:'title="Example of different account allowlists"',children:"Node 1 Allowlist = [Account A, Account B]\n\nNode 2 Allowlist = [Account B, Account C]\n\nMining Node Allowlist = [Account A, Account B]\n\nAccount A submits a transaction on Node 1. Node 1 validates and propagates the transaction. The\nMining Node receives the transaction, validates it is from an account in the Mining Node\naccounts allowlist, and includes the transaction in the block. Node 2 receives and adds\nthe block created by the Mining Node.\n\nNode 2 now has a transaction in the blockchain from Account A, which is not on the accounts\nallowlist for Node 2.\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Each node has a ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:"permissions configuration file"})," which means nodes in the network can have different accounts allowlists. This means a transaction can be successfully submitted by Node A from an account in the Node A allowlist but rejected by Node B to which it's propagated if the account is not in the Node B allowlist. We recommend each node in the network has the same accounts allowlist."]})}),"\n",(0,s.jsx)(n.h3,{id:"enable-account-allowlisting",children:"Enable account allowlisting"}),"\n",(0,s.jsxs)(n.p,{children:["To enable account allowlisting, specify the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-accounts-config-file-enabled",children:(0,s.jsx)(n.code,{children:"--permissions-accounts-config-file-enabled"})})," option when starting Besu."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"PERM"})," API methods are not enabled by default. To enable the ",(0,s.jsx)(n.code,{children:"PERM"})," API methods, use the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,s.jsx)(n.code,{children:"--rpc-http-api"})})," or ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,s.jsx)(n.code,{children:"--rpc-ws-api"})})," options."]}),"\n",(0,s.jsx)(n.h3,{id:"update-the-account-allowlist",children:"Update the account allowlist"}),"\n",(0,s.jsx)(n.p,{children:"To update the accounts allowlist when the node is running, use the JSON-RPC API methods:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_addaccountstoallowlist",children:(0,s.jsx)(n.code,{children:"perm_addAccountsToAllowlist"})})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_removeaccountsfromallowlist",children:(0,s.jsx)(n.code,{children:"perm_removeAccountsFromAllowlist"})}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["You can also update the ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:(0,s.jsx)(n.code,{children:"permissions_config.toml"})})," file directly and use the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_reloadpermissionsfromfile",children:(0,s.jsx)(n.code,{children:"perm_reloadPermissionsFromFile"})})," method to update the allowlists."]}),"\n",(0,s.jsx)(n.p,{children:"Updates to the permissions configuration file persist across node restarts."}),"\n",(0,s.jsx)(n.h3,{id:"view-the-account-allowlist",children:"View the account allowlist"}),"\n",(0,s.jsxs)(n.p,{children:["To view the accounts allowlist, use the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/api/#perm_getaccountsallowlist",children:(0,s.jsx)(n.code,{children:"perm_getAccountsAllowlist"})})," method."]}),"\n",(0,s.jsx)(n.h2,{id:"permissions-configuration-file",children:"Permissions configuration file"}),"\n",(0,s.jsxs)(n.p,{children:["The permissions configuration file contains the nodes and accounts allowlists. If the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-accounts-config-file",children:(0,s.jsx)(n.code,{children:"--permissions-accounts-config-file"})})," and ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-config-file",children:(0,s.jsx)(n.code,{children:"--permissions-nodes-config-file"})})," options are not specified, the name of the permissions configuration file must be ",(0,s.jsx)(n.a,{href:"#permissions-configuration-file",children:(0,s.jsx)(n.code,{children:"permissions_config.toml"})})," and must be in the ",(0,s.jsx)(n.a,{href:"/public-networks/reference/cli/options#data-path",children:"data directory"})," for the node."]}),"\n",(0,s.jsx)(n.p,{children:"You can specify the accounts and nodes allowlists in the same file or in separate files for accounts and nodes."}),"\n",(0,s.jsxs)(n.p,{children:["To specify a permissions configuration file (or separate files for accounts and nodes) in any location, use the ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-accounts-config-file",children:(0,s.jsx)(n.code,{children:"--permissions-accounts-config-file"})})," and ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-config-file",children:(0,s.jsx)(n.code,{children:"--permissions-nodes-config-file"})})," options."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-accounts-config-file",children:(0,s.jsx)(n.code,{children:"--permissions-accounts-config-file"})})," and ",(0,s.jsx)(n.a,{href:"/private-networks/reference/cli/options#permissions-nodes-config-file",children:(0,s.jsx)(n.code,{children:"permissions-nodes-config-file"})})," options are not used when running Besu from the ",(0,s.jsx)(n.a,{href:"/private-networks/get-started/install/run-docker-image",children:"Docker image"}),". Use a bind mount to ",(0,s.jsx)(n.a,{href:"/private-networks/get-started/install/run-docker-image",children:"specify a permissions configuration file with Docker"}),"."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-toml",metastring:'title="Sample permissions configuration file"',children:'accounts-allowlist=["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]\n\nnodes-allowlist=["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304","enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305"]\n'})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},36920:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/PermissioningFlow-083dd4871a10fb66a7bf7a0e7de03a1d.png"},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>l});var s=i(96540);const o={},t=s.createContext(o);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f46f4beb.ad1162b3.js b/assets/js/f46f4beb.ad1162b3.js new file mode 100644 index 00000000000..783768caa7b --- /dev/null +++ b/assets/js/f46f4beb.ad1162b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8182],{22229:e=>{e.exports=JSON.parse('{"tag":{"label":"private networks","permalink":"/tags/private-networks","allTagsPath":"/tags","count":128,"items":[{"id":"public-networks/how-to/use-besu-api/access-logs","title":"Access logs using JSON-RPC","description":"Accessing logs using the Besu API","permalink":"/public-networks/how-to/use-besu-api/access-logs"},{"id":"private-networks/how-to/use-privacy/access-private-transactions","title":"Access private and privacy marker transactions","description":"Methods for accessing and managing private transactions and privacy groups in Besu","permalink":"/private-networks/how-to/use-privacy/access-private-transactions"},{"id":"public-networks/how-to/use-besu-api/index","title":"Access the Besu API","description":"Besu API","permalink":"/public-networks/how-to/use-besu-api/"},{"id":"private-networks/reference/accounts-for-testing","title":"Accounts for testing","description":"Ethereum accounts used for Besu testing only on private networks","permalink":"/private-networks/reference/accounts-for-testing"},{"id":"private-networks/how-to/configure/consensus/add-validators-without-voting","title":"Add and remove validators without voting","description":"How to add or remove validators without voting","permalink":"/private-networks/how-to/configure/consensus/add-validators-without-voting"},{"id":"private-networks/tutorials/ibft/validators","title":"Add and removing IBFT 2.0 validators","description":"Adding and removing IBFT 2.0 validators","permalink":"/private-networks/tutorials/ibft/validators"},{"id":"private-networks/how-to/configure/curves","title":"Alternative elliptic curves","description":"Using alternative elliptic curves in Besu","permalink":"/private-networks/how-to/configure/curves"},{"id":"public-networks/how-to/use-besu-api/authenticate","title":"Authenticate over JSON-RPC requests","description":"Besu authentication and authorization for JSON-RPC","permalink":"/public-networks/how-to/use-besu-api/authenticate"},{"id":"private-networks/how-to/backup","title":"Backup and restore","description":"Backing up and restoring Besu","permalink":"/private-networks/how-to/backup"},{"id":"public-networks/reference/api/index","title":"Besu API","description":"Besu JSON-RPC API methods reference","permalink":"/public-networks/reference/api/"},{"id":"private-networks/how-to/configure/block-proposal-permissioning","title":"Block proposal permissioning","description":"Block proposal permissioning","permalink":"/private-networks/how-to/configure/block-proposal-permissioning"},{"id":"private-networks/how-to/configure/bootnodes","title":"Bootnodes","description":"Configuring bootnodes","permalink":"/private-networks/how-to/configure/bootnodes"},{"id":"private-networks/chatbot","title":"Chatbot","description":"Chatbot","permalink":"/private-networks/chatbot"},{"id":"private-networks/how-to/configure/tls/client-and-server","title":"Client and server TLS","description":"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.","permalink":"/private-networks/how-to/configure/tls/client-and-server"},{"id":"private-networks/how-to/configure/consensus/clique","title":"Clique","description":"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation","permalink":"/private-networks/how-to/configure/consensus/clique"},{"id":"private-networks/concepts/index","title":"Concepts","description":"private networks concepts overview","permalink":"/private-networks/concepts/"},{"id":"public-networks/how-to/configure-besu/index","title":"Configure Besu","description":"Specify options in the Besu configuration file.","permalink":"/public-networks/how-to/configure-besu/"},{"id":"private-networks/tutorials/kubernetes/nat-manager","title":"Configure Kubernetes mode in NAT manager","description":"Tutorial to configure Kubernetes mode for Besu Nat Manager","permalink":"/private-networks/tutorials/kubernetes/nat-manager"},{"id":"public-networks/how-to/monitor/logging","title":"Configure logging","description":"Besu log level setting and log formatting","permalink":"/public-networks/how-to/monitor/logging"},{"id":"public-networks/how-to/use-pow/mining","title":"Configure mining","description":"Using Besu for PoW CPU mining","permalink":"/public-networks/how-to/use-pow/mining"},{"id":"public-networks/how-to/connect/configure-ports","title":"Configure ports","description":"To enable communication you must expose Besu ports appropriately","permalink":"/public-networks/how-to/connect/configure-ports"},{"id":"public-networks/how-to/connect/static-nodes","title":"Configure static nodes","description":"Configuring static nodes","permalink":"/public-networks/how-to/connect/static-nodes"},{"id":"private-networks/how-to/configure/consensus/index","title":"Consensus protocols","description":"Besu consensus protocols","permalink":"/private-networks/how-to/configure/consensus/"},{"id":"private-networks/tutorials/clique","title":"Create a Clique network","description":"Create a private network using the Clique consensus protocol.","permalink":"/private-networks/tutorials/clique"},{"id":"private-networks/tutorials/kubernetes/cluster","title":"Create a cluster","description":"Create a cluster for deployment","permalink":"/private-networks/tutorials/kubernetes/cluster"},{"id":"private-networks/tutorials/privacy/multi-tenancy","title":"Create a multi-tenant network","description":"Configure multi-tenancy","permalink":"/private-networks/tutorials/privacy/multi-tenancy"},{"id":"private-networks/tutorials/permissioning/index","title":"Create a permissioned network","description":"Besu create a permissioned network","permalink":"/private-networks/tutorials/permissioning/"},{"id":"private-networks/tutorials/privacy/index","title":"Create a privacy enabled network using the Quickstart","description":"Configure Besu privacy","permalink":"/private-networks/tutorials/privacy/"},{"id":"private-networks/tutorials/privacy/quickstart","title":"Create a privacy-enabled network using the Quorum Developer Quickstart","description":"Besu privacy-enabled private network tutorial","permalink":"/private-networks/tutorials/privacy/quickstart"},{"id":"private-networks/tutorials/ibft/index","title":"Create a private network using IBFT 2.0","description":"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol","permalink":"/private-networks/tutorials/ibft/"},{"id":"private-networks/tutorials/qbft","title":"Create a QBFT network","description":"Create a private network using the QBFT consensus protocol.","permalink":"/private-networks/tutorials/qbft"},{"id":"private-networks/tutorials/ethash","title":"Create an Ethash network","description":"Create a private network using the Ethash consensus protocol.","permalink":"/private-networks/tutorials/ethash"},{"id":"private-networks/how-to/use-privacy/privacy-groups","title":"Create and manage privacy groups","description":"Create and manage privacy groups with Besu","permalink":"/private-networks/how-to/use-privacy/privacy-groups"},{"id":"private-networks/how-to/send-transactions/private-transactions","title":"Create and send private transactions","description":"Creating and sending private transactions with Besu","permalink":"/private-networks/how-to/send-transactions/private-transactions"},{"id":"private-networks/how-to/send-transactions/index","title":"Create and send transactions","description":"private networks send transactions overview","permalink":"/private-networks/how-to/send-transactions/"},{"id":"private-networks/tutorials/kubernetes/index","title":"Deploy a Besu private network with Kubernetes","description":"Deploying Besu with Kubernetes","permalink":"/private-networks/tutorials/kubernetes/"},{"id":"private-networks/tutorials/contracts/index","title":"Deploy a smart contract","description":"deploying smart contracts","permalink":"/private-networks/tutorials/contracts/"},{"id":"private-networks/tutorials/kubernetes/charts","title":"Deploy charts","description":"Deploying Besu Helm Charts for a Kubernetes cluster","permalink":"/private-networks/tutorials/kubernetes/charts"},{"id":"private-networks/how-to/deploy/cloud","title":"Deploy to the cloud","description":"Deploying Besu to the cloud","permalink":"/private-networks/how-to/deploy/cloud"},{"id":"private-networks/tutorials/azure","title":"Deploy using Microsoft Azure","description":"Deploy a private IBFT 2.0 network using Microsoft Azure.","permalink":"/private-networks/tutorials/azure"},{"id":"public-networks/concepts/events-and-logs","title":"Events and logs","description":"Learn about events and logs in Besu.","permalink":"/public-networks/concepts/events-and-logs"},{"id":"public-networks/reference/evm-tool","title":"EVM tool options","description":"Besu EVM tool options reference","permalink":"/public-networks/reference/evm-tool"},{"id":"private-networks/how-to/configure/free-gas","title":"Free gas network","description":"Configuring free gas networks","permalink":"/private-networks/how-to/configure/free-gas"},{"id":"public-networks/concepts/genesis-file","title":"Genesis file","description":"Learn about configuring a network using the genesis file.","permalink":"/public-networks/concepts/genesis-file"},{"id":"public-networks/reference/genesis-items","title":"Genesis file items","description":"Genesis file configuration items reference","permalink":"/public-networks/reference/genesis-items"},{"id":"public-networks/how-to/configure-ha/index","title":"High availability of JSON-RPC and RPC Pub/Sub APIs","description":"Besu high availability","permalink":"/public-networks/how-to/configure-ha/"},{"id":"private-networks/how-to/index","title":"How to","description":"Private networks how to overview","permalink":"/private-networks/how-to/"},{"id":"private-networks/how-to/configure/consensus/ibft","title":"IBFT 2.0","description":"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation","permalink":"/private-networks/how-to/configure/consensus/ibft"},{"id":"private-networks/how-to/send-transactions/revert-reason","title":"Include revert reason","description":"Including revert reason in transactions with Besu","permalink":"/private-networks/how-to/send-transactions/revert-reason"},{"id":"public-networks/how-to/configure-java/install-update-java","title":"Install and update Java","description":"Install or update Java for use with Besu","permalink":"/public-networks/how-to/configure-java/install-update-java"},{"id":"private-networks/get-started/install/binary-distribution","title":"Install binary distribution","description":"Install or upgrade Besu from binary distribution","permalink":"/private-networks/get-started/install/binary-distribution"},{"id":"private-networks/get-started/install/index","title":"Installation options","description":"Options for getting started with Besu","permalink":"/private-networks/get-started/install/"},{"id":"private-networks/tutorials/contracts/interact","title":"Interact with a deployed contract","description":"calling smart contracts functions","permalink":"/private-networks/tutorials/contracts/interact"},{"id":"private-networks/tutorials/kubernetes/playground","title":"Local playground","description":"Deploying a Besu private network locally with Kubernetes","permalink":"/private-networks/tutorials/kubernetes/playground"},{"id":"private-networks/tutorials/kubernetes/maintenance","title":"Maintenance","description":"Maintenance for Besu on a Kubernetes cluster","permalink":"/private-networks/tutorials/kubernetes/maintenance"},{"id":"public-networks/how-to/configure-java/manage-memory","title":"Manage JVM memory","description":"Besu memory management","permalink":"/public-networks/how-to/configure-java/manage-memory"},{"id":"public-networks/how-to/connect/manage-peers","title":"Manage peers","description":"Managing Besu peers","permalink":"/public-networks/how-to/connect/manage-peers"},{"id":"public-networks/how-to/monitor/index","title":"Monitor Besu","description":"Monitoring using metrics and logging","permalink":"/public-networks/how-to/monitor/"},{"id":"private-networks/how-to/monitor/index","title":"Monitoring","description":"Monitoring using metrics and logging","permalink":"/private-networks/how-to/monitor/"},{"id":"public-networks/concepts/network-and-chain-id","title":"Network ID and chain ID","description":"Learn about network ID and chain ID in Besu.","permalink":"/public-networks/concepts/network-and-chain-id"},{"id":"public-networks/concepts/node-keys","title":"Node keys","description":"Learn about node public and private keys, and the node address.","permalink":"/public-networks/concepts/node-keys"},{"id":"public-networks/reference/api/objects","title":"Objects","description":"Besu API objects reference","permalink":"/public-networks/reference/api/objects"},{"id":"private-networks/concepts/permissioning/onchain","title":"Onchain permissioning","description":"Onchain permissioning","permalink":"/private-networks/concepts/permissioning/onchain"},{"id":"public-networks/reference/cli/options","title":"Options","description":"Besu command line interface reference","permalink":"/public-networks/reference/cli/options"},{"id":"public-networks/how-to/configure-java/pass-jvm-options","title":"Pass JVM options","description":"Passing Java virtual machine JVM options to Besu at runtime","permalink":"/public-networks/how-to/configure-java/pass-jvm-options"},{"id":"private-networks/how-to/configure/tls/p2p","title":"Peer-to-peer TLS","description":"Configure P2P TLS communication","permalink":"/private-networks/how-to/configure/tls/p2p"},{"id":"private-networks/how-to/use-privacy/performance-best-practices","title":"Performance best practices","description":"Performance best practices","permalink":"/private-networks/how-to/use-privacy/performance-best-practices"},{"id":"private-networks/concepts/permissioning/index","title":"Permissioning","description":"Besu permissioning feature","permalink":"/private-networks/concepts/permissioning/"},{"id":"private-networks/concepts/permissioning/plugin","title":"Permissioning plugin","description":"Plugin based permissioning","permalink":"/private-networks/concepts/permissioning/plugin"},{"id":"private-networks/reference/plugin-api-interfaces","title":"Plugin API interfaces","description":"Plugin interfaces","permalink":"/private-networks/reference/plugin-api-interfaces"},{"id":"private-networks/concepts/plugins","title":"Plugins","description":"Plugins overview","permalink":"/private-networks/concepts/plugins"},{"id":"private-networks/how-to/configure/contracts","title":"Pre-deploy a contract","description":"Pre-deploying contracts in the genesis file","permalink":"/private-networks/how-to/configure/contracts"},{"id":"private-networks/reference/api/index","title":"Private network API methods","description":"Besu private network JSON-RPC API methods reference","permalink":"/private-networks/reference/api/"},{"id":"private-networks/reference/api/objects","title":"Private network API objects","description":"Besu private network API objects reference","permalink":"/private-networks/reference/api/objects"},{"id":"private-networks/reference/cli/options","title":"Private network options","description":"Besu private networks CLI reference","permalink":"/private-networks/reference/cli/options"},{"id":"private-networks/reference/cli/subcommands","title":"Private network subcommands","description":"Besu command line interface subcommands","permalink":"/private-networks/reference/cli/subcommands"},{"id":"private-networks/index","title":"Private networks","description":"Private networks overview","permalink":"/private-networks/"},{"id":"private-networks/tutorials/kubernetes/production","title":"Production","description":"Deploying Besu Helm Charts for production on a Kubernetes cluster","permalink":"/private-networks/tutorials/kubernetes/production"},{"id":"public-networks/reference/projects-using-besu","title":"Projects using Besu","description":"List of projects using Besu","permalink":"/public-networks/reference/projects-using-besu"},{"id":"private-networks/concepts/poa","title":"Proof of authority consensus","description":"Besu proof of authority consensus protocols comparison","permalink":"/private-networks/concepts/poa"},{"id":"private-networks/concepts/pki","title":"Public key infrastructure","description":"Public key infrastructure","permalink":"/private-networks/concepts/pki"},{"id":"private-networks/how-to/configure/consensus/qbft","title":"QBFT","description":"Besu QBFT proof of authority (PoA) consensus protocol implementation","permalink":"/private-networks/how-to/configure/consensus/qbft"},{"id":"private-networks/tutorials/quickstart","title":"Quorum Developer Quickstart","description":"Rapidly generate a local blockchain network using the Quickstart.","permalink":"/private-networks/tutorials/quickstart"},{"id":"private-networks/reference/index","title":"Reference","description":"private networks reference overview","permalink":"/private-networks/reference/"},{"id":"private-networks/get-started/install/run-docker-image","title":"Run Besu from Docker image","description":"Run Besu using the official docker image","permalink":"/private-networks/get-started/install/run-docker-image"},{"id":"private-networks/how-to/use-privacy/tessera","title":"Run Tessera with Besu","description":"Running ConsenSys Quorum Tessera with Besu","permalink":"/private-networks/how-to/use-privacy/tessera"},{"id":"public-networks/how-to/configure-ha/sample-configuration","title":"Sample load balancer configurations","description":"Sample load balancers","permalink":"/public-networks/how-to/configure-ha/sample-configuration"},{"id":"public-networks/reference/disclosure","title":"Security disclosure policy","description":"Besu responsible disclosure statement","permalink":"/public-networks/reference/disclosure"},{"id":"private-networks/how-to/send-transactions/concurrent-private-transactions","title":"Send concurrent private transactions","description":"Creating and sending concurrent private transactions with Besu","permalink":"/private-networks/how-to/send-transactions/concurrent-private-transactions"},{"id":"private-networks/how-to/use-privacy/sign-pmts","title":"Sign privacy marker transactions","description":"How to sign a privacy marker transaction with Besu","permalink":"/private-networks/how-to/use-privacy/sign-pmts"},{"id":"public-networks/how-to/connect/specify-nat","title":"Specify NAT method","description":"Configuring NAT with Besu","permalink":"/public-networks/how-to/connect/specify-nat"},{"id":"private-networks/get-started/start-node","title":"Start Besu","description":"Start Besu on a private Ethereum network.","permalink":"/private-networks/get-started/start-node"},{"id":"public-networks/reference/cli/subcommands","title":"Subcommands","description":"Besu command line interface subcommands","permalink":"/public-networks/reference/cli/subcommands"},{"id":"private-networks/get-started/system-requirements","title":"System requirements","description":"Ensure you meet the system requirements to sync and run Besu.","permalink":"/private-networks/get-started/system-requirements"},{"id":"public-networks/how-to/troubleshoot/trace-transactions","title":"Trace transactions","description":"How to trace transactions","permalink":"/public-networks/how-to/troubleshoot/trace-transactions"},{"id":"public-networks/concepts/transactions/pool","title":"Transaction pool","description":"Transaction pool overview","permalink":"/public-networks/concepts/transactions/pool"},{"id":"public-networks/reference/trace-types","title":"Transaction trace types","description":"Transaction trace types reference","permalink":"/public-networks/reference/trace-types"},{"id":"public-networks/concepts/transactions/types","title":"Transaction types","description":"Description of the different transaction types","permalink":"/public-networks/concepts/transactions/types"},{"id":"public-networks/concepts/transactions/validation","title":"Transaction validation","description":"What transaction validation and when","permalink":"/public-networks/concepts/transactions/validation"},{"id":"private-networks/tutorials/contracts/transfer-funds","title":"Transfer account funds","description":"funds transfer transactions","permalink":"/private-networks/tutorials/contracts/transfer-funds"},{"id":"private-networks/how-to/upgrade","title":"Upgrade","description":"Upgrading protocol versions","permalink":"/private-networks/how-to/upgrade"},{"id":"public-networks/how-to/configure-besu/profile","title":"Use a profile","description":"You can load a profile to extend Besu\'s default configuration, using the --profile option.","permalink":"/public-networks/how-to/configure-besu/profile"},{"id":"private-networks/how-to/deploy/ansible","title":"Use Ansible","description":"Deploying Besu with Ansible role on Galaxy","permalink":"/private-networks/how-to/deploy/ansible"},{"id":"private-networks/how-to/use-privacy/besu-extended","title":"Use Besu-extended privacy","description":"Besu-extended privacy","permalink":"/private-networks/how-to/use-privacy/besu-extended"},{"id":"private-networks/how-to/monitor/chainlens","title":"Use Chainlens Explorer","description":"Use Chainlens Explorer on a privacy-enabled Besu network","permalink":"/private-networks/how-to/monitor/chainlens"},{"id":"public-networks/how-to/develop/client-libraries","title":"Use client libraries","description":"Besu client libraries","permalink":"/public-networks/how-to/develop/client-libraries"},{"id":"private-networks/how-to/use-privacy/eea-compliant","title":"Use EEA-compliant privacy","description":"Besu JSON-RPC methods to use for EEA-compliant privacy","permalink":"/private-networks/how-to/use-privacy/eea-compliant"},{"id":"private-networks/how-to/monitor/elastic-stack","title":"Use Elastic Stack","description":"Using Elastic Stack (ELK) with Besu","permalink":"/private-networks/how-to/monitor/elastic-stack"},{"id":"private-networks/how-to/deploy/ethstats","title":"Use Ethstats network monitor","description":"Ethstats network monitor","permalink":"/private-networks/how-to/deploy/ethstats"},{"id":"public-networks/how-to/troubleshoot/evm-tool","title":"Use EVM tool","description":"Besu EVM tool","permalink":"/public-networks/how-to/troubleshoot/evm-tool"},{"id":"private-networks/how-to/use-privacy/flexible","title":"Use flexible privacy groups","description":"Use flexible privacy groups","permalink":"/private-networks/how-to/use-privacy/flexible"},{"id":"private-networks/how-to/monitor/loki","title":"Use Grafana Loki","description":"Using Grafana Loki log management platform with Besu","permalink":"/private-networks/how-to/monitor/loki"},{"id":"public-networks/how-to/use-besu-api/graphql","title":"Use GraphQL over HTTP","description":"How to access the Besu API using GraphQL","permalink":"/public-networks/how-to/use-besu-api/graphql"},{"id":"public-networks/how-to/develop/hardhat","title":"Use Hardhat","description":"Using Besu with Hardhat","permalink":"/public-networks/how-to/develop/hardhat"},{"id":"public-networks/how-to/configure-java/java-flight-recorder","title":"Use Java Flight Recorder","description":"Using Java Flight Recorder with Besu","permalink":"/public-networks/how-to/configure-java/java-flight-recorder"},{"id":"public-networks/how-to/use-besu-api/json-rpc","title":"Use JSON-RPC over HTTP, WS, and IPC","description":"How to access the Besu API using JSON-RPC","permalink":"/public-networks/how-to/use-besu-api/json-rpc"},{"id":"private-networks/how-to/deploy/kubernetes","title":"Use Kubernetes","description":"Deploying Besu with Kubernetes","permalink":"/private-networks/how-to/deploy/kubernetes"},{"id":"private-networks/how-to/use-permissioning/local","title":"Use local permissioning","description":"Besu local permissioning","permalink":"/private-networks/how-to/use-permissioning/local"},{"id":"public-networks/how-to/monitor/metrics","title":"Use metrics","description":"Monitoring and metrics","permalink":"/public-networks/how-to/monitor/metrics"},{"id":"private-networks/how-to/use-permissioning/onchain","title":"Use onchain permissioning","description":"Use onchain permissioning allowlists","permalink":"/private-networks/how-to/use-permissioning/onchain"},{"id":"private-networks/how-to/monitor/opentelemetry","title":"Use OpenTelemetry","description":"Collect Besu information with the OpenTelemetry Collector","permalink":"/private-networks/how-to/monitor/opentelemetry"},{"id":"private-networks/how-to/monitor/quorum-hibernate","title":"Use Quorum Hibernate","description":"Use Quorum Hibernate with Besu","permalink":"/private-networks/how-to/monitor/quorum-hibernate"},{"id":"public-networks/how-to/use-besu-api/rpc-pubsub","title":"Use RPC Pub/Sub over WS","description":"Using RPC Pub/Sub with Besu WebSockets","permalink":"/public-networks/how-to/use-besu-api/rpc-pubsub"},{"id":"private-networks/how-to/monitor/splunk","title":"Use Splunk","description":"Send Besu logs to Splunk","permalink":"/private-networks/how-to/monitor/splunk"},{"id":"private-networks/tutorials/kubernetes/quorum-explorer","title":"Use the Quorum Explorer","description":"Using the Quorum Explorer on a Kubernetes cluster","permalink":"/private-networks/tutorials/kubernetes/quorum-explorer"},{"id":"private-networks/how-to/use-privacy/web3js-quorum","title":"Use the web3js-quorum library","description":"web3js-quorum client library","permalink":"/private-networks/how-to/use-privacy/web3js-quorum"},{"id":"private-networks/tutorials/privacy/web3js-quorum","title":"Use the web3js-quorum multi-node example","description":"web3js-quorum client library multi-node example","permalink":"/private-networks/tutorials/privacy/web3js-quorum"},{"id":"private-networks/how-to/configure/validators","title":"Validators","description":"Configuring validators in production networks","permalink":"/private-networks/how-to/configure/validators"}],"unlisted":false}}')}}]); \ No newline at end of file diff --git a/assets/js/f606b5b5.9a7c8ae3.js b/assets/js/f606b5b5.9a7c8ae3.js new file mode 100644 index 00000000000..6952a33a345 --- /dev/null +++ b/assets/js/f606b5b5.9a7c8ae3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2077],{75583:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=i(74848),r=i(28453);const a={title:"Privacy plugin",description:"Privacy plugin",sidebar_position:5},s="Privacy plugin",o={id:"private-networks/concepts/privacy/plugin",title:"Privacy plugin",description:"Privacy plugin",source:"@site/docs/private-networks/concepts/privacy/plugin.md",sourceDirName:"private-networks/concepts/privacy",slug:"/private-networks/concepts/privacy/plugin",permalink:"/private-networks/concepts/privacy/plugin",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/plugin.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:5,frontMatter:{title:"Privacy plugin",description:"Privacy plugin",sidebar_position:5},sidebar:"privateDocSidebar",previous:{title:"Multi-tenancy",permalink:"/private-networks/concepts/privacy/multi-tenancy"},next:{title:"Permissioning",permalink:"/private-networks/concepts/permissioning/"}},c={},l=[{value:"Configuration",id:"configuration",level:2},{value:"Use the payload provider interface",id:"use-the-payload-provider-interface",level:2},{value:"Send transactions",id:"send-transactions",level:3},{value:"Mine transactions",id:"mine-transactions",level:3},{value:"Transaction factory",id:"transaction-factory",level:2},{value:"Register your plugin",id:"register-your-plugin",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"privacy-plugin",children:"Privacy plugin"})}),"\n",(0,t.jsx)(n.p,{children:"You can define your own strategy for private transactions by building a plugin that extends Besu functionality."}),"\n",(0,t.jsx)(n.p,{children:"The plugin can take many forms, but it must provide Besu with a private transaction when required."}),"\n",(0,t.jsx)(n.admonition,{type:"danger",children:(0,t.jsx)(n.p,{children:"The privacy plugin is an early access feature and plugin interfaces are subject to change between releases."})}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["Enable the privacy plugin by starting Besu and including the ",(0,t.jsx)(n.code,{children:"--Xprivacy-plugin-enabled"})," command line option. The registered plugin must implement the ",(0,t.jsx)(n.code,{children:"PrivacyPluginPayloadProvider"})," interface."]}),"\n",(0,t.jsx)(n.h2,{id:"use-the-payload-provider-interface",children:"Use the payload provider interface"}),"\n",(0,t.jsxs)(n.p,{children:["The privacy plugin must define the ",(0,t.jsx)(n.a,{href:"/private-networks/how-to/use-privacy/access-private-transactions",children:"privacy marker transaction (PMT)"})," payload. Use the payload to retrieve the contents of the private transaction which could be a link to a location in an enclave, or an encrypted form of the private payload itself."]}),"\n",(0,t.jsx)(n.p,{children:"Besu doesn't need to know how the private transaction is distributed, it just needs to know what the private transaction for the PMT is."}),"\n",(0,t.jsx)(n.h3,{id:"send-transactions",children:"Send transactions"}),"\n",(0,t.jsxs)(n.p,{children:["When submitting a private transaction using ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(n.code,{children:"eea_sendRawTransaction"})}),", the signed transaction must be sent to ",(0,t.jsx)(n.code,{children:"0x000000000000000000000000000000000000007a"})," to indicate which ",(0,t.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy precompiled contract"})," is being used."]}),"\n",(0,t.jsx)(n.p,{children:"The transaction flow is as follows:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"The JSON-RPC endpoint passes the private transaction to the private transaction manager (for example Tessera)."}),"\n",(0,t.jsx)(n.li,{children:"The private transaction manager sends the private transaction to the privacy plugin."}),"\n",(0,t.jsx)(n.li,{children:"The plugin decides what data to store onchain in the payload, for example the encrypted and serialized private transaction."}),"\n",(0,t.jsx)(n.li,{children:"The plugin returns what needs to be stored in the payload for the PMT."}),"\n",(0,t.jsx)(n.li,{children:"The private transaction handler creates a PMT for the private transaction, and propagates the PMT using devP2P in the same way as a public Ethereum transaction."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"mine-transactions",children:"Mine transactions"}),"\n",(0,t.jsx)(n.p,{children:"The process of mining transactions happens in reverse to sending transactions."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The Mainnet transaction processor processes the PMT in the same way as any other public transaction. On nodes containing the ",(0,t.jsx)(n.a,{href:"/public-networks/reference/api/#priv_getprivacyprecompileaddress",children:"privacy precompile contract"})," specified in the ",(0,t.jsx)(n.code,{children:"to"})," attribute of the PMT, the Mainnet transaction processor passes the PMT to the privacy precompile contract."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Nodes receiving the PMT that do not contain the specified privacy precompile contract will ignore the PMT."})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The privacy precompile contract queries the plugin for the private transaction using the PMT."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The privacy precompile contract passes the private transaction to the private transaction manager. The privacy group ID specifies the private world state to use."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The private transaction manager executes the transaction. The private transaction manager can read and write to the private world state, and read from the public world state."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"transaction-factory",children:"Transaction factory"}),"\n",(0,t.jsx)(n.p,{children:"An additional extension is available to help you define how PMTs are signed. Currently, Besu supports fixed or random key signing for PMTs."}),"\n",(0,t.jsx)(n.p,{children:"The extension allows you to use a more dynamic approach, for example different keys for different groups."}),"\n",(0,t.jsxs)(n.p,{children:["Your plugin needs to register the ",(0,t.jsx)(n.code,{children:"PrivateMarkerTransactionFactory"})," interface which is called before submitting a PMT to the transaction pool. The responsibility then lies with the plugin to sign and serialize the PMT."]}),"\n",(0,t.jsx)(n.h2,{id:"register-your-plugin",children:"Register your plugin"}),"\n",(0,t.jsxs)(n.p,{children:["To enable Besu to use your privacy plugin, implement the ",(0,t.jsx)(n.code,{children:"PrivacyPluginService"})," interface and call ",(0,t.jsx)(n.code,{children:"setPayloadProvider"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-java",children:"@AutoService(BesuPlugin.class)\npublic class TestPrivacyPlugin implements BesuPlugin {\n private PrivacyPluginService service;\n @Override\n public void register(BesuContext context) {\n service = context.getService(PrivacyPluginService.class).get();\n }\n @Override\n public void start() {\n service.setPayloadProvider(new PrivacyPluginPayloadProvider() {\n @Override\n public Bytes generateMarkerPayload(PrivateTransaction privateTransaction, String privacyUserId) {\n // perform logic to serialize the payload of the marker transaction\n // in this example we are serialising the private transaction using rlp https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/\n return org.hyperledger.besu.ethereum.privacy.PrivateTransaction.serialize(privateTransaction).encoded();\n }\n @Override\n public Optional<PrivateTransaction> getPrivateTransactionFromPayload(Transaction transaction) {\n // perform logic to deserialize payload from the marker transaction\n final BytesValueRLPInput bytesValueRLPInput =\n new BytesValueRLPInput(transaction.getPayload(), false);\n return Optional.of(org.hyperledger.besu.ethereum.privacy.PrivateTransaction.readFrom(bytesValueRLPInput));\n }\n });\n }\n @Override\n public void stop() {}\n}\n"})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>o});var t=i(96540);const r={},a=t.createContext(r);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f7a0d716.4949904b.js b/assets/js/f7a0d716.4949904b.js new file mode 100644 index 00000000000..4dc8b090d9c --- /dev/null +++ b/assets/js/f7a0d716.4949904b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5003],{27215:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Get started","slug":"/private-networks/get-started","permalink":"/private-networks/get-started","sidebar":"privateDocSidebar","navigation":{"previous":{"title":"Introduction","permalink":"/private-networks/"},"next":{"title":"System requirements","permalink":"/private-networks/get-started/system-requirements"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/f834d930.96d7377e.js b/assets/js/f834d930.96d7377e.js new file mode 100644 index 00000000000..56984f097db --- /dev/null +++ b/assets/js/f834d930.96d7377e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8096],{71496:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var t=n(74848),i=n(28453);const o={title:"Use EEA-compliant privacy",description:"Besu JSON-RPC methods to use for EEA-compliant privacy",sidebar_position:1,tags:["private networks"]},a="Use EEA-compliant privacy",s={id:"private-networks/how-to/use-privacy/eea-compliant",title:"Use EEA-compliant privacy",description:"Besu JSON-RPC methods to use for EEA-compliant privacy",source:"@site/docs/private-networks/how-to/use-privacy/eea-compliant.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/eea-compliant",permalink:"/private-networks/how-to/use-privacy/eea-compliant",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/eea-compliant.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use EEA-compliant privacy",description:"Besu JSON-RPC methods to use for EEA-compliant privacy",sidebar_position:1,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Use Chainlens Explorer",permalink:"/private-networks/how-to/monitor/chainlens"},next:{title:"Use Besu-extended privacy",permalink:"/private-networks/how-to/use-privacy/besu-extended"}},c={},p=[{value:"Privacy group type",id:"privacy-group-type",level:2}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.header,{children:(0,t.jsx)(r.h1,{id:"use-eea-compliant-privacy",children:"Use EEA-compliant privacy"})}),"\n",(0,t.jsxs)(r.p,{children:["When using Besu ",(0,t.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"EEA-compliant privacy"}),", the group of nodes specified by ",(0,t.jsx)(r.code,{children:"privateFrom"})," and ",(0,t.jsx)(r.code,{children:"privateFor"})," form a privacy group, to which Tessera assigns a unique privacy group ID."]}),"\n",(0,t.jsxs)(r.p,{children:["To enable the ",(0,t.jsxs)(r.a,{href:"/private-networks/reference/api/#eea-methods",children:[(0,t.jsx)(r.code,{children:"EEA"})," API methods"]}),", use the ",(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-http-api",children:(0,t.jsx)(r.code,{children:"--rpc-http-api"})})," or ",(0,t.jsx)(r.a,{href:"/public-networks/reference/cli/options#rpc-ws-api",children:(0,t.jsx)(r.code,{children:"--rpc-ws-api"})})," command line options."]}),"\n",(0,t.jsxs)(r.p,{children:["To create an EEA-compliant private transaction, specify ",(0,t.jsx)(r.code,{children:"privateFor"})," when creating the signed transaction passed as an input parameter to ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#eea_sendrawtransaction",children:(0,t.jsx)(r.code,{children:"eea_sendRawTransaction"})}),"."]}),"\n",(0,t.jsx)(r.h2,{id:"privacy-group-type",children:"Privacy group type"}),"\n",(0,t.jsxs)(r.p,{children:["Privacy groups created when specifying ",(0,t.jsx)(r.code,{children:"privateFrom"})," and ",(0,t.jsx)(r.code,{children:"privateFor"})," have a ",(0,t.jsx)(r.code,{children:"LEGACY"})," privacy group type when returned by ",(0,t.jsx)(r.a,{href:"/private-networks/reference/api/#priv_findprivacygroup",children:(0,t.jsx)(r.code,{children:"priv_findPrivacyGroup"})}),"."]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-json",children:'{\n "jsonrpc": "2.0",\n "id": 1,\n "result": [\n {\n "privacyGroupId": "68/Cq0mVjB8FbXDLE1tbDRAvD/srluIok137uFOaClM=",\n "name": "legacy",\n "description": "Privacy groups to support the creation of groups by privateFor and privateFrom",\n "type": "LEGACY",\n "members": [\n "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=",\n "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk="\n ]\n }\n ]\n}\n'})})]})}function l(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>a,x:()=>s});var t=n(96540);const i={},o=t.createContext(i);function a(e){const r=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function s(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb537116.7649b17a.js b/assets/js/fb537116.7649b17a.js new file mode 100644 index 00000000000..7a5465a0306 --- /dev/null +++ b/assets/js/fb537116.7649b17a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[5954],{27660:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var o=i(74848),n=i(28453);const t={title:"Use a profile",sidebar_position:1,tags:["public networks","private networks"]},s="Use a profile",l={id:"public-networks/how-to/configure-besu/profile",title:"Use a profile",description:"You can load a profile to extend Besu's default configuration, using the --profile option.",source:"@site/docs/public-networks/how-to/configure-besu/profile.md",sourceDirName:"public-networks/how-to/configure-besu",slug:"/public-networks/how-to/configure-besu/profile",permalink:"/public-networks/how-to/configure-besu/profile",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/public-networks/how-to/configure-besu/profile.md",tags:[{inline:!0,label:"public networks",permalink:"/tags/public-networks"},{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:1,frontMatter:{title:"Use a profile",sidebar_position:1,tags:["public networks","private networks"]},sidebar:"publicDocSidebar",previous:{title:"Configure Besu",permalink:"/public-networks/how-to/configure-besu/"},next:{title:"Access the Besu API",permalink:"/public-networks/how-to/use-besu-api/"}},a={},c=[{value:"Minimalist staker profile",id:"minimalist-staker-profile",level:2},{value:"Staker profile",id:"staker-profile",level:2},{value:"Enterprise/Private profile",id:"enterpriseprivate-profile",level:2},{value:"Load external profiles",id:"load-external-profiles",level:2}];function p(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"use-a-profile",children:"Use a profile"})}),"\n",(0,o.jsxs)(r.p,{children:["You can load a profile to extend Besu's ",(0,o.jsx)(r.a,{href:"/public-networks/how-to/configure-besu/#default-configuration",children:"default configuration"}),", using the ",(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#profile",children:(0,o.jsx)(r.code,{children:"--profile"})})," option."]}),"\n",(0,o.jsx)(r.p,{children:"Profiles simplify the process of configuring Besu for common use cases. Besu provides the following pre-configured profiles:"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"#minimalist-staker-profile",children:"Minimalist staker profile"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"#staker-profile",children:"Staker profile"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"#enterpriseprivate-profile",children:"Enterprise/Private profile"})}),"\n"]}),"\n",(0,o.jsxs)(r.p,{children:["Alternatively, you can customize and ",(0,o.jsx)(r.a,{href:"#load-external-profiles",children:"load external profiles"}),"."]}),"\n",(0,o.jsx)(r.admonition,{type:"note",children:(0,o.jsxs)(r.p,{children:["Run ",(0,o.jsx)(r.code,{children:"./besu --help"})," to view all available profiles."]})}),"\n",(0,o.jsx)(r.admonition,{type:"note",children:(0,o.jsxs)(r.p,{children:["A configuration option specified in the configuration file or on the command line\n",(0,o.jsx)(r.a,{href:"/public-networks/how-to/configure-besu/#configuration-order-of-precedence",children:"overrides the same option"})," set in the profile."]})}),"\n",(0,o.jsx)(r.h2,{id:"minimalist-staker-profile",children:"Minimalist staker profile"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#profile",children:(0,o.jsx)(r.code,{children:"--profile=MINIMALIST_STAKER"})})," is optimized for stakers who\nwant to maximize their hardware value but don't want to serve full sets of data to their peers, See the\n",(0,o.jsx)(r.a,{href:"https://github.com/hyperledger/besu/blob/main/config/src/main/resources/profiles/minimalist-staker.toml",children:"minimalist staker profile on GitHub"}),"\nfor the custom settings."]}),"\n",(0,o.jsx)(r.h2,{id:"staker-profile",children:"Staker profile"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#profile",children:(0,o.jsx)(r.code,{children:"--profile=STAKER"})})," is optimized for stakers who want to\nmaximize their hardware value while also serving full sets of data to their peers. See the\n",(0,o.jsx)(r.a,{href:"https://github.com/hyperledger/besu/blob/main/config/src/main/resources/profiles/staker.toml",children:"staker profile on GitHub"}),"\nfor the custom settings."]}),"\n",(0,o.jsx)(r.h2,{id:"enterpriseprivate-profile",children:"Enterprise/Private profile"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.code,{children:"ENTERPRISE"})," and ",(0,o.jsx)(r.code,{children:"PRIVATE"})," are aliases for the same profile. ",(0,o.jsxs)(r.a,{href:"/public-networks/reference/cli/options#profile",children:[(0,o.jsx)(r.code,{children:"--profile=PRIVATE"})," / ",(0,o.jsx)(r.code,{children:"--profile=ENTERPRISE"})]}),"\nsupports private network operators and enterprises by handling specific use cases that apply to\nprivate network operators. See the ",(0,o.jsx)(r.a,{href:"https://github.com/hyperledger/besu/blob/main/config/src/main/resources/profiles/enterprise-private.toml",children:"enterprise/private profile on\nGitHub"}),"\nfor the custom settings."]}),"\n",(0,o.jsxs)(r.p,{children:["When using this profile, set ",(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#sync-mode",children:(0,o.jsx)(r.code,{children:"--sync-mode=FULL"})}),"\nand ",(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#data-storage-format",children:(0,o.jsx)(r.code,{children:"--data-storage-format=FOREST"})}),"."]}),"\n",(0,o.jsx)(r.h2,{id:"load-external-profiles",children:"Load external profiles"}),"\n",(0,o.jsx)(r.p,{children:"You can use external profiles to create custom Besu bundles with various plugins and their default options."}),"\n",(0,o.jsxs)(r.p,{children:["Add external profiles to a ",(0,o.jsx)(r.code,{children:"profiles"})," directory under the root Besu directory.\nRun Besu with ",(0,o.jsx)(r.a,{href:"/public-networks/reference/cli/options#profile",children:(0,o.jsx)(r.code,{children:"--profile"})})," set to the external profile\nfile name, without the ",(0,o.jsx)(r.code,{children:".toml"})," extension.\nFor example, to load the ",(0,o.jsx)(r.code,{children:"profiles/custom_profile.toml"})," profile, run:"]}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-bash",children:"besu --profile=custom_profile\n"})}),"\n",(0,o.jsx)(r.admonition,{type:"note",children:(0,o.jsxs)(r.p,{children:["You can overwrite the directory in which to place external profiles using the ",(0,o.jsx)(r.code,{children:"besu.profiles.dir"}),"\nsystem property."]})})]})}function d(e={}){const{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>s,x:()=>l});var o=i(96540);const n={},t=o.createContext(n);function s(e){const r=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),o.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb8ebc35.3ded177c.js b/assets/js/fb8ebc35.3ded177c.js new file mode 100644 index 00000000000..ac6743d8012 --- /dev/null +++ b/assets/js/fb8ebc35.3ded177c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[2587],{43538:(e,r,i)=>{i.r(r),i.d(r,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>p});var n=i(74848),t=i(28453);const a={title:"Flexible privacy groups",sidebar_position:3,description:"Flexible privacy groups"},s="Flexible privacy groups",o={id:"private-networks/concepts/privacy/flexible-privacy",title:"Flexible privacy groups",description:"Flexible privacy groups",source:"@site/docs/private-networks/concepts/privacy/flexible-privacy.md",sourceDirName:"private-networks/concepts/privacy",slug:"/private-networks/concepts/privacy/flexible-privacy",permalink:"/private-networks/concepts/privacy/flexible-privacy",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/concepts/privacy/flexible-privacy.md",tags:[],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:3,frontMatter:{title:"Flexible privacy groups",sidebar_position:3,description:"Flexible privacy groups"},sidebar:"privateDocSidebar",previous:{title:"Privacy groups",permalink:"/private-networks/concepts/privacy/privacy-groups"},next:{title:"Multi-tenancy",permalink:"/private-networks/concepts/privacy/multi-tenancy"}},c={},p=[{value:"Group management contracts",id:"group-management-contracts",level:2},{value:"Flexible privacy group IDs",id:"flexible-privacy-group-ids",level:2},{value:"Multi-tenancy",id:"multi-tenancy",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"flexible-privacy-groups",children:"Flexible privacy groups"})}),"\n",(0,n.jsxs)(r.p,{children:["Flexible ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"privacy groups"})," use smart contracts to store and maintain the group membership. You can ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-privacy/flexible",children:"add and remove members to and from flexible privacy groups"}),"."]}),"\n",(0,n.jsx)(r.admonition,{type:"tip",children:(0,n.jsx)(r.p,{children:"Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups."})}),"\n",(0,n.jsxs)(r.admonition,{type:"danger",children:[(0,n.jsx)(r.p,{children:"Flexible privacy groups are an early access feature. Don't use in production networks."}),(0,n.jsx)(r.p,{children:"The flexible privacy group interfaces might change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions."}),(0,n.jsxs)(r.p,{children:["We don't recommended creating flexible privacy groups in a chain with existing ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"offchain privacy groups"}),"."]})]}),"\n",(0,n.jsx)(r.h2,{id:"group-management-contracts",children:"Group management contracts"}),"\n",(0,n.jsx)(r.p,{children:"The privacy group management contract bytecode is hard-coded into Besu and when you create a privacy group, the contract bytecode is part of the genesis state of the privacy group."}),"\n",(0,n.jsx)(r.admonition,{type:"caution",children:(0,n.jsx)(r.p,{children:"All members of a flexible privacy group must be using the same version of Besu. If using different versions, the private state within the privacy group may become inconsistent."})}),"\n",(0,n.jsx)(r.p,{children:"In the default implementation of the group management contract, the signer of the private transaction that creates the privacy group is also the owner of the group. Only the owner can add and remove participants, and upgrade the management contract."}),"\n",(0,n.jsx)(r.p,{children:"The owner is identified by the signing key. Transactions to add and remove participants, or upgrade the management contract, must be signed by the same key that signed the group creation transaction."}),"\n",(0,n.jsx)(r.h2,{id:"flexible-privacy-group-ids",children:"Flexible privacy group IDs"}),"\n",(0,n.jsx)(r.p,{children:"When creating a flexible privacy group, generate the privacy group ID for the group outside of Besu and pass the ID as a parameter."}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.a,{href:"/private-networks/how-to/use-privacy/flexible",children:"web3js-quorum library"})," generates a unique privacy group ID and passes the ID to Besu when creating a privacy group."]}),"\n",(0,n.jsxs)(r.admonition,{type:"caution",children:[(0,n.jsx)(r.p,{children:"When generating a privacy group ID, you must ensure the ID is unique across all network participants. If you create a privacy group with an existing privacy group ID, the existing privacy group is overwritten."}),(0,n.jsx)(r.p,{children:"To ensure unique privacy group IDs, we recommend using 256-bit SecureRandom."})]}),"\n",(0,n.jsx)(r.h2,{id:"multi-tenancy",children:"Multi-tenancy"}),"\n",(0,n.jsxs)(r.p,{children:["When using ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/multi-tenancy",children:"multi-tenancy"})," with flexible privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group."]}),"\n",(0,n.jsxs)(r.p,{children:["Using multi-tenancy with flexible privacy groups is more complex than with ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/privacy-groups",children:"offchain privacy groups"})," because users may be added and removed from flexible privacy groups. When a user is added to a privacy group, they get access to all existing data in the privacy group. After being removed from a privacy group, a user retains access to already existing data in the privacy group, up to the block containing the ",(0,n.jsx)(r.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"privacy marker transaction (PMT)"})," that removed them (the removal block). A removed user doesn't have access to data in the privacy group that happens after they were removed."]}),"\n",(0,n.jsx)(r.p,{children:"In particular, when multi-tenancy is enabled and a user requests access to a privacy group they were once a member of but later removed from, Besu allows the user access to the following functionality and data associated with the privacy group:"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["Private transactions using ",(0,n.jsx)(r.code,{children:"priv_getTransaction"})," and private transaction receipts using ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#priv_gettransactionreceipt",children:(0,n.jsx)(r.code,{children:"priv_getTransactionReceipt"})})," from blocks up to (and including) the removal block."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"A removed group member may have access to some private transactions after the removal PMT in the same block."})}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["Using ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#priv_call",children:(0,n.jsx)(r.code,{children:"priv_call"})})," on blocks up to (and including) the removal block."]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["Private logs using ",(0,n.jsx)(r.a,{href:"/public-networks/reference/api/#priv_getlogs",children:(0,n.jsx)(r.code,{children:"priv_getLogs"})})," for blocks up to (and including) the removal block. When the ",(0,n.jsx)(r.code,{children:"toBlock"})," is greater than the removal block, ",(0,n.jsx)(r.code,{children:"priv_getLogs"})," still returns logs up to the removal block."]}),"\n",(0,n.jsx)(r.admonition,{type:"note",children:(0,n.jsx)(r.p,{children:"When a user is removed from a privacy group, any log filters they've created are also removed and can't be accessed. A user can only create and access filters for a privacy group they are currently a member of."})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["All other ",(0,n.jsxs)(r.a,{href:"/public-networks/reference/api/#priv-methods",children:[(0,n.jsx)(r.code,{children:"PRIV"})," API methods"]})," fail for the removed group member."]})]})}function d(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,r,i)=>{i.d(r,{R:()=>s,x:()=>o});var n=i(96540);const t={},a=n.createContext(t);function s(e){const r=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),n.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe1d21e1.674e5808.js b/assets/js/fe1d21e1.674e5808.js new file mode 100644 index 00000000000..cd93615ddb0 --- /dev/null +++ b/assets/js/fe1d21e1.674e5808.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[3078],{30579:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var r=i(74848),t=i(28453);const s={title:"Sign privacy marker transactions",description:"How to sign a privacy marker transaction with Besu",sidebar_position:7,tags:["private networks"]},a="Sign privacy marker transactions",o={id:"private-networks/how-to/use-privacy/sign-pmts",title:"Sign privacy marker transactions",description:"How to sign a privacy marker transaction with Besu",source:"@site/docs/private-networks/how-to/use-privacy/sign-pmts.md",sourceDirName:"private-networks/how-to/use-privacy",slug:"/private-networks/how-to/use-privacy/sign-pmts",permalink:"/private-networks/how-to/use-privacy/sign-pmts",draft:!1,unlisted:!1,editUrl:"https://github.com/hyperledger/besu-docs/tree/main/docs/private-networks/how-to/use-privacy/sign-pmts.md",tags:[{inline:!0,label:"private networks",permalink:"/tags/private-networks"}],version:"current",lastUpdatedAt:1727047044e3,sidebarPosition:7,frontMatter:{title:"Sign privacy marker transactions",description:"How to sign a privacy marker transaction with Besu",sidebar_position:7,tags:["private networks"]},sidebar:"privateDocSidebar",previous:{title:"Access private and privacy marker transactions",permalink:"/private-networks/how-to/use-privacy/access-private-transactions"},next:{title:"Use the web3js-quorum library",permalink:"/private-networks/how-to/use-privacy/web3js-quorum"}},c={},p=[];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"sign-privacy-marker-transactions",children:"Sign privacy marker transactions"})}),"\n",(0,r.jsxs)(n.p,{children:["You can sign privacy marker transactions (PMTs) with either a random key or a specified key. To sign privacy marker transactions with a specified private key, use ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,r.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})})," when starting Besu."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["The private key file can be the same file used by ",(0,r.jsx)(n.a,{href:"#node-private-key-file",children:(0,r.jsx)(n.code,{children:"--node-private-key-file"})}),", or a different key file to identify who signed the privacy marker transaction."]})}),"\n",(0,r.jsx)(n.p,{children:"In networks where you pay gas, you must specify a key and the associated account must contain adequate funds."}),"\n",(0,r.jsxs)(n.p,{children:["In ",(0,r.jsx)(n.a,{href:"/private-networks/how-to/configure/free-gas",children:"free gas networks"}),", to provide further anonymity by signing each privacy marker transaction with a different random key, exclude the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,r.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})})," command line option when starting Besu."]}),"\n",(0,r.jsxs)(n.admonition,{title:'"Using account permissioning and privacy"',type:"caution",children:[(0,r.jsxs)(n.p,{children:["You can't use ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/permissioning/#account-permissioning",children:"account permissioning"})," with random key signing."]}),(0,r.jsxs)(n.p,{children:["If using account permissioning and privacy, a signing key must be specified using the ",(0,r.jsx)(n.a,{href:"/private-networks/reference/cli/options#privacy-marker-transaction-signing-key-file",children:(0,r.jsx)(n.code,{children:"--privacy-marker-transaction-signing-key-file"})})," command line option and the corresponding public key included in the accounts allowlist."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Besu signs privacy marker transactions during the ",(0,r.jsx)(n.a,{href:"/private-networks/concepts/privacy/private-transactions/processing",children:"private transaction process"}),"."]})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>o});var r=i(96540);const t={},s=r.createContext(t);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.3fdf14f6.js b/assets/js/main.3fdf14f6.js new file mode 100644 index 00000000000..e76bcfa0a12 --- /dev/null +++ b/assets/js/main.3fdf14f6.js @@ -0,0 +1,2 @@ +/*! For license information please see main.3fdf14f6.js.LICENSE.txt */ +(self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[]).push([[8792],{35947:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(96540);var r=n(53259),o=n.n(r),a=n(84054);const i={"0145acbf":[()=>n.e(8235).then(n.bind(n,90090)),"@site/docs/public-networks/concepts/data-storage-formats.md",90090],"01562474":[()=>n.e(9812).then(n.bind(n,49922)),"@site/docs/public-networks/how-to/develop/hardhat.md",49922],"02fd2e39":[()=>n.e(7936).then(n.bind(n,11210)),"@site/docs/private-networks/concepts/privacy/multi-tenancy.md",11210],"030f9ebf":[()=>Promise.all([n.e(1869),n.e(4656)]).then(n.bind(n,71920)),"@site/docs/private-networks/tutorials/privacy/index.md",71920],"06aa37f3":[()=>Promise.all([n.e(1869),n.e(3824)]).then(n.bind(n,35134)),"@site/docs/private-networks/reference/cli/options.md",35134],"0821166d":[()=>n.e(6627).then(n.bind(n,11575)),"@site/docs/public-networks/get-started/start-node.md",11575],"083d4b51":[()=>n.e(2622).then(n.bind(n,77384)),"@site/docs/public-networks/concepts/transactions/types.md",77384],"0c3b97c4":[()=>n.e(2682).then(n.bind(n,30604)),"@site/docs/private-networks/get-started/system-requirements.md",30604],"0ea635c0":[()=>n.e(6126).then(n.bind(n,54036)),"@site/docs/public-networks/concepts/genesis-file.md",54036],"0ef1fb3f":[()=>n.e(370).then(n.bind(n,94289)),"@site/docs/public-networks/get-started/connect/sync-node.md",94289],"0f2e6691":[()=>n.e(4524).then(n.bind(n,60441)),"@site/docs/private-networks/concepts/pki.md",60441],"10d3d954":[()=>Promise.all([n.e(1869),n.e(5201)]).then(n.bind(n,57357)),"@site/docs/private-networks/how-to/configure/block-proposal-permissioning.md",57357],"12718c4a":[()=>n.e(8472).then(n.bind(n,39418)),"@site/docs/public-networks/concepts/parallel-transaction-execution.md",39418],"13034d1e":[()=>Promise.all([n.e(1869),n.e(5946)]).then(n.bind(n,61801)),"@site/docs/public-networks/how-to/configure-java/manage-memory.md",61801],"138e0e15":[()=>n.e(4921).then(n.t.bind(n,41597,19)),"@generated/@easyops-cn/docusaurus-search-local/default/__plugin.json",41597],13912882:[()=>n.e(3005).then(n.bind(n,25319)),"@site/docs/public-networks/how-to/upgrade-node.md",25319],"14eb3368":[()=>Promise.all([n.e(1869),n.e(6969)]).then(n.bind(n,79196)),"@theme/DocCategoryGeneratedIndexPage",79196],16350423:[()=>n.e(8251).then(n.bind(n,7302)),"@site/docs/public-networks/how-to/connect/configure-ports.md",7302],"166cf840":[()=>Promise.all([n.e(1869),n.e(609)]).then(n.bind(n,53798)),"@site/docs/private-networks/how-to/configure/consensus/ibft.md",53798],"1719a32c":[()=>n.e(2668).then(n.bind(n,81525)),"@site/docs/public-networks/how-to/monitor/understand-metrics.md",81525],17896441:[()=>Promise.all([n.e(1869),n.e(1721),n.e(8401)]).then(n.bind(n,29158)),"@theme/DocItem",29158],"1a4e3797":[()=>Promise.all([n.e(1869),n.e(2138)]).then(n.bind(n,41283)),"@theme/SearchPage",41283],"1a78f042":[()=>n.e(2460).then(n.bind(n,22556)),"@site/docs/public-networks/how-to/connect/manage-peers.md",22556],"1b2e0ee9":[()=>n.e(5430).then(n.bind(n,58087)),"@site/docs/public-networks/how-to/develop/client-libraries.md",58087],"1b5bfdea":[()=>n.e(903).then(n.bind(n,96349)),"@site/docs/public-networks/how-to/use-besu-api/index.md",96349],"1b73c7ba":[()=>n.e(973).then(n.bind(n,10512)),"@site/docs/private-networks/how-to/index.md",10512],"1df93b7f":[()=>n.e(4583).then(n.bind(n,52989)),"@site/src/pages/index.tsx",52989],"1f29a5e5":[()=>Promise.all([n.e(1869),n.e(2093)]).then(n.bind(n,76658)),"@site/docs/private-networks/tutorials/ibft/validators.md",76658],"2039806a":[()=>n.e(7698).then(n.bind(n,23207)),"@site/docs/public-networks/how-to/configure-ha/index.md",23207],"22dd74f7":[()=>n.e(1567).then(n.t.bind(n,55226,19)),"@generated/docusaurus-plugin-content-docs/default/p/index-466.json",55226],"248beabf":[()=>n.e(5305).then(n.bind(n,49444)),"@site/docs/public-networks/concepts/events-and-logs.md",49444],25537021:[()=>n.e(2618).then(n.bind(n,89040)),"@site/docs/public-networks/get-started/install/binary-distribution.md",89040],"2712d2e6":[()=>n.e(6948).then(n.bind(n,53800)),"@site/docs/private-networks/chatbot.mdx",53800],"27b89368":[()=>n.e(9022).then(n.bind(n,70298)),"@site/docs/private-networks/get-started/install/binary-distribution.md",70298],28249022:[()=>n.e(76).then(n.bind(n,75125)),"@site/docs/private-networks/concepts/index.md",75125],"297e0bb4":[()=>Promise.all([n.e(1869),n.e(2764)]).then(n.bind(n,13742)),"@site/docs/private-networks/tutorials/quickstart.md",13742],"2ce131d7":[()=>n.e(1023).then(n.bind(n,45021)),"@site/docs/public-networks/index.md",45021],"2de980e5":[()=>Promise.all([n.e(1869),n.e(5953)]).then(n.bind(n,61878)),"@site/docs/private-networks/how-to/monitor/opentelemetry.md",61878],"306048a3":[()=>n.e(1524).then(n.bind(n,2556)),"@site/docs/private-networks/how-to/monitor/chainlens.md",2556],"3234314a":[()=>n.e(8088).then(n.bind(n,58971)),"@site/docs/private-networks/how-to/use-privacy/access-private-transactions.md",58971],"3624528b":[()=>n.e(1701).then(n.bind(n,95751)),"@site/docs/private-networks/how-to/send-transactions/index.md",95751],"3720c009":[()=>Promise.all([n.e(1869),n.e(4787)]).then(n.bind(n,30876)),"@theme/DocTagsListPage",30876],37906014:[()=>n.e(5407).then(n.bind(n,92586)),"@site/docs/private-networks/get-started/install/run-docker-image.md",92586],"3868ebe2":[()=>n.e(6116).then(n.bind(n,10739)),"@site/docs/public-networks/concepts/proof-of-stake/index.md",10739],"3917f523":[()=>n.e(5769).then(n.bind(n,45988)),"@site/docs/public-networks/reference/genesis-items.md",45988],"3a4520c6":[()=>n.e(1275).then(n.bind(n,12317)),"@site/docs/private-networks/concepts/poa.md",12317],"3aaf4567":[()=>n.e(5398).then(n.bind(n,62629)),"@site/docs/public-networks/how-to/troubleshoot/peering.md",62629],"3b05cdc2":[()=>n.e(6563).then(n.bind(n,42260)),"@site/docs/private-networks/how-to/send-transactions/private-transactions.md",42260],"3e86fe35":[()=>n.e(1874).then(n.bind(n,81090)),"@site/docs/public-networks/how-to/monitor/logging.md",81090],"3f04f830":[()=>Promise.all([n.e(1869),n.e(1903)]).then(n.bind(n,49857)),"@site/docs/private-networks/tutorials/ibft/index.md",49857],"43d83ec4":[()=>n.e(4029).then(n.bind(n,95402)),"@site/docs/private-networks/how-to/deploy/ethstats.md",95402],"46ff6f7b":[()=>n.e(7738).then(n.bind(n,82557)),"@site/docs/public-networks/how-to/use-pow/mining.md",82557],"4a41aaaf":[()=>n.e(6436).then(n.bind(n,59043)),"@site/docs/private-networks/tutorials/contracts/index.md",59043],"4b21c0d5":[()=>n.e(6414).then(n.t.bind(n,913,19)),"@generated/docusaurus-plugin-content-docs/default/p/public-networks-concepts-f26.json",913],"4ba08559":[()=>Promise.all([n.e(1869),n.e(6410)]).then(n.bind(n,74060)),"@site/docs/public-networks/how-to/use-besu-api/rpc-pubsub.md",74060],"4d94bde1":[()=>Promise.all([n.e(1869),n.e(7208)]).then(n.bind(n,72935)),"@site/docs/private-networks/how-to/use-privacy/web3js-quorum.md",72935],"4f63be9c":[()=>n.e(9779).then(n.bind(n,74318)),"@site/docs/private-networks/how-to/use-privacy/flexible.md",74318],"5576e3f0":[()=>n.e(68).then(n.bind(n,88240)),"@site/docs/private-networks/get-started/install/index.md",88240],"55b6f436":[()=>n.e(6944).then(n.bind(n,32912)),"@site/docs/private-networks/how-to/configure/tls/client-and-server.md",32912],"563e4b8b":[()=>Promise.all([n.e(1869),n.e(2554)]).then(n.bind(n,64745)),"@site/docs/public-networks/how-to/use-engine-api.md",64745],"59af61a6":[()=>n.e(9174).then(n.t.bind(n,5332,19)),"@generated/docusaurus-plugin-content-docs/default/p/tags-b9f.json",5332],"5af5c663":[()=>n.e(8620).then(n.bind(n,1888)),"@site/docs/public-networks/reference/api/objects.md",1888],"5b178458":[()=>n.e(4717).then(n.bind(n,47122)),"@site/docs/private-networks/how-to/configure/bootnodes.md",47122],"5c820069":[()=>n.e(510).then(n.bind(n,41266)),"@site/docs/private-networks/tutorials/privacy/web3js-quorum.md",41266],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5ec0198e":[()=>n.e(8715).then(n.bind(n,24211)),"@site/docs/private-networks/concepts/permissioning/index.md",24211],"608f60e4":[()=>n.e(9558).then(n.t.bind(n,62455,19)),"@generated/docusaurus-plugin-content-docs/default/p/public-networks-get-started-71a.json",62455],"66bba352":[()=>n.e(4546).then(n.bind(n,41830)),"@site/docs/public-networks/how-to/configure-java/pass-jvm-options.md",41830],"67359d90":[()=>n.e(5434).then(n.bind(n,53147)),"@site/docs/public-networks/how-to/use-besu-api/access-logs.md",53147],"680b46ee":[()=>n.e(9399).then(n.bind(n,5387)),"@site/docs/public-networks/how-to/monitor/index.md",5387],"6c6be066":[()=>n.e(4417).then(n.bind(n,98938)),"@site/docs/private-networks/how-to/send-transactions/revert-reason.md",98938],"6cafcc6f":[()=>n.e(1941).then(n.bind(n,6417)),"@site/docs/public-networks/tutorials/kubernetes.md",6417],"6d0a1147":[()=>Promise.all([n.e(1869),n.e(8573)]).then(n.bind(n,78368)),"@site/docs/public-networks/get-started/connect/testnet.md",78368],"6e493491":[()=>n.e(9670).then(n.bind(n,22876)),"@site/docs/private-networks/reference/plugin-api-interfaces.md",22876],"6ea682ce":[()=>Promise.all([n.e(1869),n.e(7019)]).then(n.bind(n,48296)),"@site/docs/private-networks/how-to/configure/consensus/clique.md",48296],"6ec2af53":[()=>n.e(6626).then(n.t.bind(n,29329,19)),"@generated/docusaurus-plugin-content-docs/default/p/private-networks-tutorials-fbb.json",29329],"714c5be8":[()=>n.e(8814).then(n.bind(n,86670)),"@site/docs/private-networks/how-to/deploy/ansible.md",86670],"715197f0":[()=>n.e(5487).then(n.bind(n,16677)),"@site/docs/private-networks/concepts/privacy/private-transactions/processing.md",16677],"71635f7b":[()=>n.e(3108).then(n.bind(n,74449)),"@site/docs/private-networks/tutorials/kubernetes/production.md",74449],"71e3c29d":[()=>Promise.all([n.e(1869),n.e(4107)]).then(n.bind(n,95672)),"@site/docs/public-networks/reference/cli/options.md",95672],"76a5e22a":[()=>Promise.all([n.e(1869),n.e(132)]).then(n.bind(n,38456)),"@site/docs/public-networks/reference/api/index.md",38456],"79bb8117":[()=>n.e(8230).then(n.bind(n,78747)),"@site/docs/private-networks/tutorials/kubernetes/playground.md",78747],"7a44c711":[()=>n.e(1283).then(n.bind(n,48739)),"@site/docs/private-networks/concepts/privacy/privacy-groups.md",48739],"7b0f9452":[()=>Promise.all([n.e(1869),n.e(8344)]).then(n.bind(n,26985)),"@site/docs/private-networks/how-to/configure/free-gas.md",26985],"7b4961ca":[()=>n.e(3034).then(n.bind(n,56042)),"@site/docs/private-networks/how-to/monitor/splunk.md",56042],"7bb2e71b":[()=>Promise.all([n.e(1869),n.e(841)]).then(n.bind(n,42491)),"@site/docs/public-networks/get-started/connect/mainnet.md",42491],"7e9c70a7":[()=>n.e(8090).then(n.bind(n,47239)),"@site/docs/public-networks/concepts/network-and-chain-id.md",47239],"7ea61495":[()=>n.e(5327).then(n.bind(n,14311)),"@site/docs/global/postman.md",14311],"810074cd":[()=>n.e(3474).then(n.bind(n,60277)),"@site/docs/public-networks/how-to/connect/static-nodes.md",60277],"8161613e":[()=>n.e(7882).then(n.bind(n,38253)),"@site/docs/private-networks/how-to/monitor/index.md",38253],"833497ee":[()=>Promise.all([n.e(1869),n.e(7343)]).then(n.bind(n,53723)),"@site/docs/private-networks/how-to/configure/tls/p2p.md",53723],"84b35613":[()=>n.e(2559).then(n.bind(n,49475)),"@site/docs/public-networks/how-to/troubleshoot/performance.md",49475],87114070:[()=>n.e(1975).then(n.bind(n,16528)),"@site/docs/public-networks/concepts/node-keys.md",16528],"88771ea1":[()=>n.e(4265).then(n.bind(n,73703)),"@site/docs/private-networks/how-to/monitor/quorum-hibernate.md",73703],"887b6037":[()=>Promise.all([n.e(1869),n.e(4068)]).then(n.bind(n,22751)),"@site/docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md",22751],"88996aea":[()=>n.e(7952).then(n.bind(n,77410)),"@site/docs/public-networks/how-to/configure-ha/sample-configuration.md",77410],"89f1fe89":[()=>Promise.all([n.e(1869),n.e(3623)]).then(n.bind(n,37971)),"@site/docs/private-networks/tutorials/kubernetes/charts.md",37971],"8a886138":[()=>n.e(4852).then(n.bind(n,93120)),"@site/docs/global/test_accounts.md",93120],"8b137bfa":[()=>Promise.all([n.e(1869),n.e(7045)]).then(n.bind(n,69261)),"@site/docs/public-networks/how-to/use-besu-api/json-rpc.md",69261],"8b8c93ab":[()=>n.e(2735).then(n.bind(n,25119)),"@site/docs/private-networks/how-to/configure/curves.md",25119],"8c0ee333":[()=>n.e(379).then(n.bind(n,45462)),"@site/docs/public-networks/how-to/configure-java/install-update-java.md",45462],"8d677f34":[()=>Promise.all([n.e(1869),n.e(2056)]).then(n.bind(n,70316)),"@site/docs/private-networks/tutorials/clique.md",70316],"8ef40281":[()=>Promise.all([n.e(1869),n.e(1703)]).then(n.bind(n,70682)),"@site/docs/private-networks/tutorials/qbft.md",70682],"91cde904":[()=>n.e(7650).then(n.bind(n,18538)),"@site/docs/public-networks/get-started/install/index.md",18538],"91f929bc":[()=>n.e(4340).then(n.bind(n,58088)),"@site/docs/public-networks/how-to/configure-java/java-flight-recorder.md",58088],"9213a1f9":[()=>n.e(5303).then(n.bind(n,87514)),"@site/docs/private-networks/how-to/use-privacy/privacy-groups.md",87514],"93e76459":[()=>n.e(23).then(n.bind(n,57695)),"@site/docs/private-networks/tutorials/privacy/quickstart.md",57695],"981fdc44":[()=>Promise.all([n.e(1869),n.e(4990)]).then(n.bind(n,1142)),"@site/docs/public-networks/get-started/system-requirements.md",1142],"99a5eb2e":[()=>n.e(4353).then(n.bind(n,52491)),"@site/docs/public-networks/reference/engine-api/objects.md",52491],"9a50decc":[()=>Promise.all([n.e(1869),n.e(8721)]).then(n.bind(n,1770)),"@site/docs/private-networks/tutorials/ethash.md",1770],"9bb932b9":[()=>n.e(1589).then(n.bind(n,65463)),"@site/docs/private-networks/how-to/deploy/cloud.md",65463],"9ffeb22a":[()=>Promise.all([n.e(1869),n.e(9334)]).then(n.bind(n,55847)),"@site/docs/private-networks/how-to/configure/consensus/index.md",55847],a0520cc7:[()=>n.e(5936).then(n.t.bind(n,24450,19)),"@generated/docusaurus-plugin-content-docs/default/p/public-networks-how-to-e7d.json",24450],a0f949fc:[()=>Promise.all([n.e(1869),n.e(8587)]).then(n.bind(n,48098)),"@site/docs/public-networks/reference/cli/subcommands.md",48098],a2bd30e6:[()=>n.e(6792).then(n.bind(n,37416)),"@site/docs/private-networks/concepts/permissioning/plugin.md",37416],a626427b:[()=>n.e(779).then(n.bind(n,70459)),"@site/docs/private-networks/tutorials/kubernetes/maintenance.md",70459],a7456010:[()=>n.e(1235).then(n.t.bind(n,88552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",88552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,74532)),"@theme/DocVersionRoot",74532],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,11377)),"@theme/DocRoot",11377],a99a03ac:[()=>n.e(9624).then(n.bind(n,95062)),"@site/docs/public-networks/concepts/transactions/validation.md",95062],aa0c6744:[()=>Promise.all([n.e(1869),n.e(6867)]).then(n.bind(n,44207)),"@site/docs/public-networks/tutorials/besu-teku-mainnet.md",44207],aa612600:[()=>Promise.all([n.e(1869),n.e(2778)]).then(n.bind(n,31204)),"@site/docs/public-networks/reference/evm-tool.md",31204],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,27093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",27093],af3555a6:[()=>Promise.all([n.e(1869),n.e(849)]).then(n.bind(n,14396)),"@site/docs/public-networks/how-to/use-besu-api/graphql.md",14396],b0eb7c42:[()=>n.e(5580).then(n.bind(n,2414)),"@site/docs/public-networks/concepts/node-clients.md",2414],b2d12fc2:[()=>n.e(7949).then(n.bind(n,37680)),"@site/docs/private-networks/how-to/monitor/loki.md",37680],b4b83649:[()=>n.e(4397).then(n.bind(n,4881)),"@site/docs/private-networks/get-started/start-node.md",4881],b5388cc7:[()=>Promise.all([n.e(1869),n.e(4872)]).then(n.bind(n,78814)),"@site/docs/private-networks/how-to/configure/consensus/qbft.md",78814],b5e9b728:[()=>n.e(4597).then(n.bind(n,61312)),"@site/docs/public-networks/how-to/troubleshoot/trace-transactions.md",61312],b658262b:[()=>n.e(1384).then(n.bind(n,93440)),"@site/docs/public-networks/get-started/install/run-docker-image.md",93440],b6b2f0db:[()=>n.e(499).then(n.bind(n,4522)),"@site/docs/public-networks/reference/trace-types.md",4522],b7759d8d:[()=>n.e(1625).then(n.bind(n,76552)),"@site/docs/private-networks/tutorials/kubernetes/index.md",76552],bbdbb161:[()=>n.e(8521).then(n.bind(n,95129)),"@site/docs/private-networks/reference/index.md",95129],bc60af12:[()=>n.e(9084).then(n.bind(n,29827)),"@site/docs/public-networks/get-started/connect/index.md",29827],bc69a950:[()=>Promise.all([n.e(1869),n.e(7044)]).then(n.bind(n,74198)),"@site/docs/public-networks/how-to/monitor/metrics.md",74198],bd3642f6:[()=>n.e(2868).then(n.bind(n,1634)),"@site/docs/private-networks/concepts/privacy/index.md",1634],bd4880eb:[()=>n.e(1572).then(n.bind(n,43573)),"@site/docs/private-networks/tutorials/contracts/interact.md",43573],bea70e21:[()=>n.e(7618).then(n.bind(n,57760)),"@site/docs/private-networks/tutorials/azure.md",57760],c029b5c7:[()=>n.e(7800).then(n.bind(n,9424)),"@site/docs/private-networks/how-to/backup.md",9424],c14ba340:[()=>n.e(1157).then(n.t.bind(n,63905,19)),"@generated/docusaurus-plugin-content-docs/default/p/tags-public-networks-947.json",63905],c41908c3:[()=>n.e(4978).then(n.bind(n,43816)),"@site/docs/private-networks/tutorials/privacy/multi-tenancy.md",43816],c48436f6:[()=>n.e(2593).then(n.bind(n,99307)),"@site/docs/public-networks/get-started/migrate-to-besu.md",99307],c69ab138:[()=>n.e(6048).then(n.bind(n,57425)),"@site/docs/private-networks/concepts/plugins.md",57425],c6a4c9bf:[()=>Promise.all([n.e(1869),n.e(7643)]).then(n.bind(n,60968)),"@site/docs/public-networks/how-to/use-besu-api/authenticate.md",60968],c6c17076:[()=>n.e(8546).then(n.bind(n,38057)),"@site/docs/private-networks/concepts/permissioning/onchain.md",38057],c8cab34c:[()=>n.e(2180).then(n.bind(n,11070)),"@site/docs/private-networks/reference/api/objects.md",11070],ca90dbf4:[()=>n.e(2080).then(n.bind(n,78769)),"@site/docs/public-networks/how-to/configure-besu/index.md",78769],cdbaa4c0:[()=>n.e(1207).then(n.bind(n,43422)),"@site/docs/public-networks/how-to/troubleshoot/evm-tool.md",43422],ce4c8b54:[()=>n.e(8077).then(n.bind(n,54662)),"@site/docs/private-networks/tutorials/kubernetes/cluster.md",54662],ce515f1b:[()=>n.e(3677).then(n.bind(n,27791)),"@site/docs/private-networks/tutorials/kubernetes/quorum-explorer.md",27791],cf53573e:[()=>n.e(7516).then(n.bind(n,80442)),"@site/docs/public-networks/chatbot.mdx",80442],d13d7343:[()=>n.e(9222).then(n.bind(n,67296)),"@site/docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md",67296],d1f22a5a:[()=>n.e(6271).then(n.bind(n,24270)),"@site/docs/private-networks/how-to/use-permissioning/onchain.md",24270],d333d0b1:[()=>n.e(9489).then(n.t.bind(n,28504,19)),"@generated/docusaurus-plugin-content-docs/default/p/public-networks-reference-f0a.json",28504],d4c8fb26:[()=>n.e(5058).then(n.bind(n,10319)),"@site/docs/private-networks/how-to/monitor/elastic-stack.md",10319],d78c9adf:[()=>Promise.all([n.e(1869),n.e(6567)]).then(n.bind(n,98126)),"@site/docs/private-networks/reference/api/index.md",98126],d7914a50:[()=>n.e(2812).then(n.bind(n,18913)),"@site/docs/private-networks/tutorials/contracts/transfer-funds.md",18913],d7b72fb9:[()=>n.e(6162).then(n.bind(n,13628)),"@site/docs/public-networks/reference/projects-using-besu.md",13628],d86228ad:[()=>n.e(198).then(n.bind(n,38116)),"@site/docs/public-networks/concepts/proof-of-stake/attestations.md",38116],d94d9a73:[()=>n.e(3522).then(n.bind(n,92552)),"@site/docs/private-networks/concepts/privacy/private-transactions/index.md",92552],d97c1e1b:[()=>n.e(3691).then(n.t.bind(n,23485,19)),"@generated/docusaurus-plugin-content-docs/default/p/public-networks-tutorials-f66.json",23485],dbf86eb1:[()=>n.e(9291).then(n.bind(n,26036)),"@site/docs/private-networks/how-to/configure/contracts.md",26036],dd3e5b84:[()=>Promise.all([n.e(1869),n.e(7806)]).then(n.bind(n,37473)),"@site/docs/private-networks/tutorials/permissioning/index.md",37473],dd5955a1:[()=>Promise.all([n.e(1869),n.e(6493)]).then(n.bind(n,13571)),"@site/docs/public-networks/reference/engine-api/index.md",13571],dd900a84:[()=>n.e(2953).then(n.bind(n,94112)),"@site/docs/private-networks/how-to/use-privacy/tessera.md",94112],df203c0f:[()=>Promise.all([n.e(1869),n.e(4279)]).then(n.bind(n,30128)),"@theme/DocTagDocListPage",30128],dfe7f568:[()=>n.e(1816).then(n.bind(n,56847)),"@site/docs/public-networks/concepts/transactions/pool.md",56847],e0a6c7d4:[()=>n.e(8139).then(n.bind(n,83426)),"@site/docs/private-networks/reference/accounts-for-testing.md",83426],e12df8e0:[()=>n.e(8882).then(n.bind(n,42130)),"@site/docs/public-networks/reference/disclosure.md",42130],e1c9c46b:[()=>n.e(4567).then(n.bind(n,78242)),"@site/docs/public-networks/how-to/send-transactions.md",78242],e6ca27ec:[()=>n.e(231).then(n.bind(n,6345)),"@site/docs/private-networks/how-to/use-privacy/performance-best-practices.md",6345],e8e619e2:[()=>n.e(1178).then(n.bind(n,1788)),"@site/docs/private-networks/how-to/use-privacy/besu-extended.md",1788],ebb34ddb:[()=>n.e(9729).then(n.bind(n,54479)),"@site/docs/private-networks/index.md",54479],ec4f4180:[()=>Promise.all([n.e(1869),n.e(7372)]).then(n.bind(n,88764)),"@site/docs/public-networks/tutorials/besu-teku-testnet.md",88764],ecc00064:[()=>n.e(6384).then(n.bind(n,68060)),"@site/docs/private-networks/how-to/deploy/kubernetes.md",68060],edcc188d:[()=>n.e(389).then(n.bind(n,47096)),"@site/docs/private-networks/how-to/upgrade.md",47096],ee08513e:[()=>n.e(1639).then(n.bind(n,80870)),"@site/docs/public-networks/how-to/connect/specify-nat.md",80870],ee5d8003:[()=>Promise.all([n.e(1869),n.e(5193)]).then(n.bind(n,68952)),"@site/docs/private-networks/reference/cli/subcommands.md",68952],eeceef6b:[()=>Promise.all([n.e(1869),n.e(3164)]).then(n.bind(n,66181)),"@site/docs/public-networks/how-to/bonsai-limit-trie-logs.md",66181],f0bf0af8:[()=>n.e(1942).then(n.bind(n,77292)),"@site/docs/private-networks/how-to/configure/validators.md",77292],f2142509:[()=>n.e(8862).then(n.bind(n,30401)),"@site/docs/private-networks/tutorials/kubernetes/nat-manager.md",30401],f3adc880:[()=>n.e(7448).then(n.bind(n,87891)),"@site/docs/private-networks/how-to/use-permissioning/local.md",87891],f46f4beb:[()=>n.e(8182).then(n.t.bind(n,22229,19)),"@generated/docusaurus-plugin-content-docs/default/p/tags-private-networks-7cd.json",22229],f606b5b5:[()=>n.e(2077).then(n.bind(n,75583)),"@site/docs/private-networks/concepts/privacy/plugin.md",75583],f7a0d716:[()=>n.e(5003).then(n.t.bind(n,27215,19)),"@generated/docusaurus-plugin-content-docs/default/p/private-networks-get-started-bf1.json",27215],f834d930:[()=>n.e(8096).then(n.bind(n,71496)),"@site/docs/private-networks/how-to/use-privacy/eea-compliant.md",71496],fb537116:[()=>n.e(5954).then(n.bind(n,27660)),"@site/docs/public-networks/how-to/configure-besu/profile.md",27660],fb8ebc35:[()=>n.e(2587).then(n.bind(n,43538)),"@site/docs/private-networks/concepts/privacy/flexible-privacy.md",43538],fe1d21e1:[()=>n.e(3078).then(n.bind(n,30579)),"@site/docs/private-networks/how-to/use-privacy/sign-pmts.md",30579]};var s=n(74848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("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%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("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",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(86921),u=n(53102);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(2237).then(n.bind(n,82237)),modules:["@theme/NotFound"],webpack:()=>[82237],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],h=(0,c.A)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)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 a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/search",component:d("/search","822"),exact:!0},{path:"/",component:d("/","e5f"),exact:!0},{path:"/",component:d("/","18e"),routes:[{path:"/",component:d("/","19c"),routes:[{path:"/tags",component:d("/tags","ce1"),exact:!0},{path:"/tags/private-networks",component:d("/tags/private-networks","e59"),exact:!0},{path:"/tags/public-networks",component:d("/tags/public-networks","41a"),exact:!0},{path:"/",component:d("/","4cc"),routes:[{path:"/global/postman",component:d("/global/postman","ee4"),exact:!0},{path:"/global/test_accounts",component:d("/global/test_accounts","28e"),exact:!0},{path:"/private-networks",component:d("/private-networks","eb2"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/chatbot",component:d("/private-networks/chatbot","048"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts",component:d("/private-networks/concepts","4a8"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/permissioning",component:d("/private-networks/concepts/permissioning","64e"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/permissioning/onchain",component:d("/private-networks/concepts/permissioning/onchain","41d"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/permissioning/plugin",component:d("/private-networks/concepts/permissioning/plugin","b94"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/pki",component:d("/private-networks/concepts/pki","cdc"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/plugins",component:d("/private-networks/concepts/plugins","f6a"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/poa",component:d("/private-networks/concepts/poa","a52"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy",component:d("/private-networks/concepts/privacy","a25"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/flexible-privacy",component:d("/private-networks/concepts/privacy/flexible-privacy","8dc"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/multi-tenancy",component:d("/private-networks/concepts/privacy/multi-tenancy","bf3"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/plugin",component:d("/private-networks/concepts/privacy/plugin","d02"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/privacy-groups",component:d("/private-networks/concepts/privacy/privacy-groups","88a"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/private-transactions",component:d("/private-networks/concepts/privacy/private-transactions","b2c"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/concepts/privacy/private-transactions/processing",component:d("/private-networks/concepts/privacy/private-transactions/processing","d76"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started",component:d("/private-networks/get-started","ea9"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started/install",component:d("/private-networks/get-started/install","dcb"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started/install/binary-distribution",component:d("/private-networks/get-started/install/binary-distribution","925"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started/install/run-docker-image",component:d("/private-networks/get-started/install/run-docker-image","b68"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started/start-node",component:d("/private-networks/get-started/start-node","596"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/get-started/system-requirements",component:d("/private-networks/get-started/system-requirements","63a"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to",component:d("/private-networks/how-to","b9b"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/backup",component:d("/private-networks/how-to/backup","f0c"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/block-proposal-permissioning",component:d("/private-networks/how-to/configure/block-proposal-permissioning","7a2"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/bootnodes",component:d("/private-networks/how-to/configure/bootnodes","d2d"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/consensus",component:d("/private-networks/how-to/configure/consensus","f2d"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/consensus/add-validators-without-voting",component:d("/private-networks/how-to/configure/consensus/add-validators-without-voting","ed4"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/consensus/clique",component:d("/private-networks/how-to/configure/consensus/clique","b9b"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/consensus/ibft",component:d("/private-networks/how-to/configure/consensus/ibft","9c3"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/consensus/qbft",component:d("/private-networks/how-to/configure/consensus/qbft","1f4"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/contracts",component:d("/private-networks/how-to/configure/contracts","843"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/curves",component:d("/private-networks/how-to/configure/curves","65a"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/free-gas",component:d("/private-networks/how-to/configure/free-gas","bb6"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/tls/client-and-server",component:d("/private-networks/how-to/configure/tls/client-and-server","d10"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/tls/p2p",component:d("/private-networks/how-to/configure/tls/p2p","910"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/configure/validators",component:d("/private-networks/how-to/configure/validators","a15"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/deploy/ansible",component:d("/private-networks/how-to/deploy/ansible","f49"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/deploy/cloud",component:d("/private-networks/how-to/deploy/cloud","3bb"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/deploy/ethstats",component:d("/private-networks/how-to/deploy/ethstats","444"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/deploy/kubernetes",component:d("/private-networks/how-to/deploy/kubernetes","720"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor",component:d("/private-networks/how-to/monitor","402"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/chainlens",component:d("/private-networks/how-to/monitor/chainlens","a00"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/elastic-stack",component:d("/private-networks/how-to/monitor/elastic-stack","82f"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/loki",component:d("/private-networks/how-to/monitor/loki","920"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/opentelemetry",component:d("/private-networks/how-to/monitor/opentelemetry","914"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/quorum-hibernate",component:d("/private-networks/how-to/monitor/quorum-hibernate","3dc"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/monitor/splunk",component:d("/private-networks/how-to/monitor/splunk","4d2"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/send-transactions",component:d("/private-networks/how-to/send-transactions","e65"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/send-transactions/concurrent-private-transactions",component:d("/private-networks/how-to/send-transactions/concurrent-private-transactions","185"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/send-transactions/private-transactions",component:d("/private-networks/how-to/send-transactions/private-transactions","635"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/send-transactions/revert-reason",component:d("/private-networks/how-to/send-transactions/revert-reason","704"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/upgrade",component:d("/private-networks/how-to/upgrade","3c6"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-permissioning/local",component:d("/private-networks/how-to/use-permissioning/local","33e"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-permissioning/onchain",component:d("/private-networks/how-to/use-permissioning/onchain","fca"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/access-private-transactions",component:d("/private-networks/how-to/use-privacy/access-private-transactions","53d"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/besu-extended",component:d("/private-networks/how-to/use-privacy/besu-extended","9de"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/eea-compliant",component:d("/private-networks/how-to/use-privacy/eea-compliant","981"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/flexible",component:d("/private-networks/how-to/use-privacy/flexible","3b9"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/performance-best-practices",component:d("/private-networks/how-to/use-privacy/performance-best-practices","3b9"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/privacy-groups",component:d("/private-networks/how-to/use-privacy/privacy-groups","323"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/sign-pmts",component:d("/private-networks/how-to/use-privacy/sign-pmts","07f"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/tessera",component:d("/private-networks/how-to/use-privacy/tessera","d45"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/how-to/use-privacy/web3js-quorum",component:d("/private-networks/how-to/use-privacy/web3js-quorum","e49"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference",component:d("/private-networks/reference","f52"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/accounts-for-testing",component:d("/private-networks/reference/accounts-for-testing","df1"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/api",component:d("/private-networks/reference/api","ff9"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/api/objects",component:d("/private-networks/reference/api/objects","351"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/cli/options",component:d("/private-networks/reference/cli/options","1be"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/cli/subcommands",component:d("/private-networks/reference/cli/subcommands","174"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/reference/plugin-api-interfaces",component:d("/private-networks/reference/plugin-api-interfaces","031"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials",component:d("/private-networks/tutorials","ec3"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/azure",component:d("/private-networks/tutorials/azure","60f"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/clique",component:d("/private-networks/tutorials/clique","956"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/contracts",component:d("/private-networks/tutorials/contracts","bde"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/contracts/interact",component:d("/private-networks/tutorials/contracts/interact","b8b"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/contracts/transfer-funds",component:d("/private-networks/tutorials/contracts/transfer-funds","056"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/ethash",component:d("/private-networks/tutorials/ethash","f5c"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/ibft",component:d("/private-networks/tutorials/ibft","edc"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/ibft/validators",component:d("/private-networks/tutorials/ibft/validators","5aa"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes",component:d("/private-networks/tutorials/kubernetes","0d7"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/charts",component:d("/private-networks/tutorials/kubernetes/charts","695"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/cluster",component:d("/private-networks/tutorials/kubernetes/cluster","301"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/maintenance",component:d("/private-networks/tutorials/kubernetes/maintenance","06d"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/nat-manager",component:d("/private-networks/tutorials/kubernetes/nat-manager","2fd"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/playground",component:d("/private-networks/tutorials/kubernetes/playground","c97"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/production",component:d("/private-networks/tutorials/kubernetes/production","93b"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/kubernetes/quorum-explorer",component:d("/private-networks/tutorials/kubernetes/quorum-explorer","ec3"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/permissioning",component:d("/private-networks/tutorials/permissioning","456"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/privacy",component:d("/private-networks/tutorials/privacy","83c"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/privacy/multi-tenancy",component:d("/private-networks/tutorials/privacy/multi-tenancy","4fd"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/privacy/quickstart",component:d("/private-networks/tutorials/privacy/quickstart","16b"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/privacy/web3js-quorum",component:d("/private-networks/tutorials/privacy/web3js-quorum","c63"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/qbft",component:d("/private-networks/tutorials/qbft","5be"),exact:!0,sidebar:"privateDocSidebar"},{path:"/private-networks/tutorials/quickstart",component:d("/private-networks/tutorials/quickstart","e95"),exact:!0,sidebar:"privateDocSidebar"},{path:"/public-networks",component:d("/public-networks","88b"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/chatbot",component:d("/public-networks/chatbot","cff"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts",component:d("/public-networks/concepts","66b"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/data-storage-formats",component:d("/public-networks/concepts/data-storage-formats","4f0"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/events-and-logs",component:d("/public-networks/concepts/events-and-logs","d70"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/genesis-file",component:d("/public-networks/concepts/genesis-file","5ff"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/network-and-chain-id",component:d("/public-networks/concepts/network-and-chain-id","680"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/node-clients",component:d("/public-networks/concepts/node-clients","778"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/node-keys",component:d("/public-networks/concepts/node-keys","c51"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/parallel-transaction-execution",component:d("/public-networks/concepts/parallel-transaction-execution","d04"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/proof-of-stake",component:d("/public-networks/concepts/proof-of-stake","2f1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/proof-of-stake/attestations",component:d("/public-networks/concepts/proof-of-stake/attestations","154"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/transactions/pool",component:d("/public-networks/concepts/transactions/pool","cc4"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/transactions/types",component:d("/public-networks/concepts/transactions/types","1c3"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/concepts/transactions/validation",component:d("/public-networks/concepts/transactions/validation","639"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started",component:d("/public-networks/get-started","bcb"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/connect",component:d("/public-networks/get-started/connect","8e3"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/connect/mainnet",component:d("/public-networks/get-started/connect/mainnet","8b3"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/connect/sync-node",component:d("/public-networks/get-started/connect/sync-node","6be"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/connect/testnet",component:d("/public-networks/get-started/connect/testnet","acf"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/install",component:d("/public-networks/get-started/install","8a7"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/install/binary-distribution",component:d("/public-networks/get-started/install/binary-distribution","dbb"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/install/run-docker-image",component:d("/public-networks/get-started/install/run-docker-image","637"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/migrate-to-besu",component:d("/public-networks/get-started/migrate-to-besu","b61"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/start-node",component:d("/public-networks/get-started/start-node","b90"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/get-started/system-requirements",component:d("/public-networks/get-started/system-requirements","71a"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to",component:d("/public-networks/how-to","daf"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/bonsai-limit-trie-logs",component:d("/public-networks/how-to/bonsai-limit-trie-logs","2e1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-besu",component:d("/public-networks/how-to/configure-besu","059"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-besu/profile",component:d("/public-networks/how-to/configure-besu/profile","93b"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-ha",component:d("/public-networks/how-to/configure-ha","3ed"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-ha/sample-configuration",component:d("/public-networks/how-to/configure-ha/sample-configuration","d3f"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-java/install-update-java",component:d("/public-networks/how-to/configure-java/install-update-java","4b9"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-java/java-flight-recorder",component:d("/public-networks/how-to/configure-java/java-flight-recorder","7c1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-java/manage-memory",component:d("/public-networks/how-to/configure-java/manage-memory","32b"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/configure-java/pass-jvm-options",component:d("/public-networks/how-to/configure-java/pass-jvm-options","53d"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/connect/configure-ports",component:d("/public-networks/how-to/connect/configure-ports","d35"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/connect/manage-peers",component:d("/public-networks/how-to/connect/manage-peers","ae2"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/connect/specify-nat",component:d("/public-networks/how-to/connect/specify-nat","ca4"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/connect/static-nodes",component:d("/public-networks/how-to/connect/static-nodes","4dc"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/develop/client-libraries",component:d("/public-networks/how-to/develop/client-libraries","2c1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/develop/hardhat",component:d("/public-networks/how-to/develop/hardhat","f60"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/monitor",component:d("/public-networks/how-to/monitor","b53"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/monitor/logging",component:d("/public-networks/how-to/monitor/logging","ea3"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/monitor/metrics",component:d("/public-networks/how-to/monitor/metrics","ada"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/monitor/understand-metrics",component:d("/public-networks/how-to/monitor/understand-metrics","21e"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/send-transactions",component:d("/public-networks/how-to/send-transactions","a24"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/troubleshoot/evm-tool",component:d("/public-networks/how-to/troubleshoot/evm-tool","dc1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/troubleshoot/peering",component:d("/public-networks/how-to/troubleshoot/peering","dd0"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/troubleshoot/performance",component:d("/public-networks/how-to/troubleshoot/performance","b5e"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/troubleshoot/trace-transactions",component:d("/public-networks/how-to/troubleshoot/trace-transactions","202"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/upgrade-node",component:d("/public-networks/how-to/upgrade-node","a31"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api",component:d("/public-networks/how-to/use-besu-api","f72"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api/access-logs",component:d("/public-networks/how-to/use-besu-api/access-logs","38e"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api/authenticate",component:d("/public-networks/how-to/use-besu-api/authenticate","d0f"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api/graphql",component:d("/public-networks/how-to/use-besu-api/graphql","787"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api/json-rpc",component:d("/public-networks/how-to/use-besu-api/json-rpc","f81"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-besu-api/rpc-pubsub",component:d("/public-networks/how-to/use-besu-api/rpc-pubsub","0be"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-engine-api",component:d("/public-networks/how-to/use-engine-api","ec1"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/how-to/use-pow/mining",component:d("/public-networks/how-to/use-pow/mining","e56"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference",component:d("/public-networks/reference","236"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/api",component:d("/public-networks/reference/api","ecd"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/api/objects",component:d("/public-networks/reference/api/objects","371"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/cli/options",component:d("/public-networks/reference/cli/options","1a6"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/cli/subcommands",component:d("/public-networks/reference/cli/subcommands","67d"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/disclosure",component:d("/public-networks/reference/disclosure","ea0"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/engine-api",component:d("/public-networks/reference/engine-api","ce3"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/engine-api/objects",component:d("/public-networks/reference/engine-api/objects","112"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/evm-tool",component:d("/public-networks/reference/evm-tool","73b"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/genesis-items",component:d("/public-networks/reference/genesis-items","481"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/projects-using-besu",component:d("/public-networks/reference/projects-using-besu","5a4"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/reference/trace-types",component:d("/public-networks/reference/trace-types","a9a"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/tutorials",component:d("/public-networks/tutorials","bf7"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/tutorials/besu-teku-mainnet",component:d("/public-networks/tutorials/besu-teku-mainnet","11f"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/tutorials/besu-teku-testnet",component:d("/public-networks/tutorials/besu-teku-testnet","3fd"),exact:!0,sidebar:"publicDocSidebar"},{path:"/public-networks/tutorials/kubernetes",component:d("/public-networks/tutorials/kubernetes","c26"),exact:!0,sidebar:"publicDocSidebar"}]}]}]},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(96540),o=n(74848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},77815:(e,t,n)=>{"use strict";var r=n(96540),o=n(5338),a=n(80545),i=n(54625),s=n(4784),l=n(38193);const c=[n(10119),n(26134),n(76294),n(51043),n(31911)];var u=n(35947),d=n(56347),p=n(22831),f=n(74848);function h(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var b=n(5260),m=n(44586),g=n(86025),v=n(6342),y=n(1003),w=n(32131),k=n(14090);const x="default";var S=n(70440),_=n(41463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(b.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.Ks)((0,g.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(b.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,m.A)(),{metadata:t,image:n}=(0,v.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(b.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(y.be,{image:n}),(0,f.jsx)(C,{}),(0,f.jsx)(E,{}),(0,f.jsx)(_.A,{tag:x,locale:e}),(0,f.jsx)(b.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const A=new Map;var D=n(6125),j=n(26988),P=n(205);function L(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=c.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:r}=e;return(0,P.A)((()=>{r!==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:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?L("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=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(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(0,f.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const I=R,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" 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="${z}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${z}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,m.A)();return(0,f.jsx)(f.Fragment,{children:!l.A.canUseDOM&&(0,f.jsx)(b.A,{children:(0,f.jsx)("script",{children:B(e)})})})}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.A)(),{pathname:n}=(0,d.zy)();return t&&n===e?(0,f.jsx)($,{}):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,m.A)(),a=(0,g.Ay)(e),{htmlLang:i,direction:s}=o[r];return(0,f.jsxs)(b.A,{children:[(0,f.jsx)("html",{lang:i,dir:s}),(0,f.jsx)("title",{children:t}),(0,f.jsx)("meta",{property:"og:title",content:t}),(0,f.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,f.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,f.jsx)("link",{rel:"icon",href:a})]})}var Q=n(67489),V=n(92303);function q(){const e=(0,V.A)();return(0,f.jsx)(b.A,{children:(0,f.jsx)("html",{"data-has-hydrated":e})})}const W=(0,p.v)(u.A);function G(){const e=function(e){if(A.has(e.pathname))return{...e,pathname:A.get(e.pathname)};if((0,p.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(I,{location:e,children:W})}function K(){return(0,f.jsx)(Q.A,{children:(0,f.jsx)(j.l,{children:(0,f.jsxs)(D.x,{children:[(0,f.jsxs)(h,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(T,{}),(0,f.jsx)(U,{}),(0,f.jsx)(G,{})]}),(0,f.jsx)(q,{})]})})})}var Z=n(84054);const Y=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 X=n(86921);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.u)(u.A,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,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),O(e))},re=Object.freeze(ne);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ae=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(oe,{children:(0,f.jsx)(K,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};O(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},26988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(96540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"public-networks/index","docs":[{"id":"global/postman","path":"/global/postman"},{"id":"global/test_accounts","path":"/global/test_accounts"},{"id":"private-networks/chatbot","path":"/private-networks/chatbot","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/index","path":"/private-networks/concepts/","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/permissioning/index","path":"/private-networks/concepts/permissioning/","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/permissioning/onchain","path":"/private-networks/concepts/permissioning/onchain","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/permissioning/plugin","path":"/private-networks/concepts/permissioning/plugin","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/pki","path":"/private-networks/concepts/pki","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/plugins","path":"/private-networks/concepts/plugins","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/poa","path":"/private-networks/concepts/poa","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/flexible-privacy","path":"/private-networks/concepts/privacy/flexible-privacy","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/index","path":"/private-networks/concepts/privacy/","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/multi-tenancy","path":"/private-networks/concepts/privacy/multi-tenancy","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/plugin","path":"/private-networks/concepts/privacy/plugin","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/privacy-groups","path":"/private-networks/concepts/privacy/privacy-groups","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/private-transactions/index","path":"/private-networks/concepts/privacy/private-transactions/","sidebar":"privateDocSidebar"},{"id":"private-networks/concepts/privacy/private-transactions/processing","path":"/private-networks/concepts/privacy/private-transactions/processing","sidebar":"privateDocSidebar"},{"id":"private-networks/get-started/install/binary-distribution","path":"/private-networks/get-started/install/binary-distribution","sidebar":"privateDocSidebar"},{"id":"private-networks/get-started/install/index","path":"/private-networks/get-started/install/","sidebar":"privateDocSidebar"},{"id":"private-networks/get-started/install/run-docker-image","path":"/private-networks/get-started/install/run-docker-image","sidebar":"privateDocSidebar"},{"id":"private-networks/get-started/start-node","path":"/private-networks/get-started/start-node","sidebar":"privateDocSidebar"},{"id":"private-networks/get-started/system-requirements","path":"/private-networks/get-started/system-requirements","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/backup","path":"/private-networks/how-to/backup","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/block-proposal-permissioning","path":"/private-networks/how-to/configure/block-proposal-permissioning","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/bootnodes","path":"/private-networks/how-to/configure/bootnodes","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/consensus/add-validators-without-voting","path":"/private-networks/how-to/configure/consensus/add-validators-without-voting","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/consensus/clique","path":"/private-networks/how-to/configure/consensus/clique","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/consensus/ibft","path":"/private-networks/how-to/configure/consensus/ibft","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/consensus/index","path":"/private-networks/how-to/configure/consensus/","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/consensus/qbft","path":"/private-networks/how-to/configure/consensus/qbft","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/contracts","path":"/private-networks/how-to/configure/contracts","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/curves","path":"/private-networks/how-to/configure/curves","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/free-gas","path":"/private-networks/how-to/configure/free-gas","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/tls/client-and-server","path":"/private-networks/how-to/configure/tls/client-and-server","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/tls/p2p","path":"/private-networks/how-to/configure/tls/p2p","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/configure/validators","path":"/private-networks/how-to/configure/validators","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/deploy/ansible","path":"/private-networks/how-to/deploy/ansible","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/deploy/cloud","path":"/private-networks/how-to/deploy/cloud","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/deploy/ethstats","path":"/private-networks/how-to/deploy/ethstats","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/deploy/kubernetes","path":"/private-networks/how-to/deploy/kubernetes","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/index","path":"/private-networks/how-to/","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/chainlens","path":"/private-networks/how-to/monitor/chainlens","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/elastic-stack","path":"/private-networks/how-to/monitor/elastic-stack","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/index","path":"/private-networks/how-to/monitor/","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/loki","path":"/private-networks/how-to/monitor/loki","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/opentelemetry","path":"/private-networks/how-to/monitor/opentelemetry","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/quorum-hibernate","path":"/private-networks/how-to/monitor/quorum-hibernate","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/monitor/splunk","path":"/private-networks/how-to/monitor/splunk","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/send-transactions/concurrent-private-transactions","path":"/private-networks/how-to/send-transactions/concurrent-private-transactions","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/send-transactions/index","path":"/private-networks/how-to/send-transactions/","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/send-transactions/private-transactions","path":"/private-networks/how-to/send-transactions/private-transactions","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/send-transactions/revert-reason","path":"/private-networks/how-to/send-transactions/revert-reason","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/upgrade","path":"/private-networks/how-to/upgrade","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-permissioning/local","path":"/private-networks/how-to/use-permissioning/local","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-permissioning/onchain","path":"/private-networks/how-to/use-permissioning/onchain","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/access-private-transactions","path":"/private-networks/how-to/use-privacy/access-private-transactions","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/besu-extended","path":"/private-networks/how-to/use-privacy/besu-extended","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/eea-compliant","path":"/private-networks/how-to/use-privacy/eea-compliant","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/flexible","path":"/private-networks/how-to/use-privacy/flexible","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/performance-best-practices","path":"/private-networks/how-to/use-privacy/performance-best-practices","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/privacy-groups","path":"/private-networks/how-to/use-privacy/privacy-groups","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/sign-pmts","path":"/private-networks/how-to/use-privacy/sign-pmts","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/tessera","path":"/private-networks/how-to/use-privacy/tessera","sidebar":"privateDocSidebar"},{"id":"private-networks/how-to/use-privacy/web3js-quorum","path":"/private-networks/how-to/use-privacy/web3js-quorum","sidebar":"privateDocSidebar"},{"id":"private-networks/index","path":"/private-networks/","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/accounts-for-testing","path":"/private-networks/reference/accounts-for-testing","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/api/index","path":"/private-networks/reference/api/","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/api/objects","path":"/private-networks/reference/api/objects","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/cli/options","path":"/private-networks/reference/cli/options","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/cli/subcommands","path":"/private-networks/reference/cli/subcommands","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/index","path":"/private-networks/reference/","sidebar":"privateDocSidebar"},{"id":"private-networks/reference/plugin-api-interfaces","path":"/private-networks/reference/plugin-api-interfaces","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/azure","path":"/private-networks/tutorials/azure","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/clique","path":"/private-networks/tutorials/clique","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/contracts/index","path":"/private-networks/tutorials/contracts/","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/contracts/interact","path":"/private-networks/tutorials/contracts/interact","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/contracts/transfer-funds","path":"/private-networks/tutorials/contracts/transfer-funds","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/ethash","path":"/private-networks/tutorials/ethash","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/ibft/index","path":"/private-networks/tutorials/ibft/","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/ibft/validators","path":"/private-networks/tutorials/ibft/validators","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/charts","path":"/private-networks/tutorials/kubernetes/charts","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/cluster","path":"/private-networks/tutorials/kubernetes/cluster","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/index","path":"/private-networks/tutorials/kubernetes/","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/maintenance","path":"/private-networks/tutorials/kubernetes/maintenance","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/nat-manager","path":"/private-networks/tutorials/kubernetes/nat-manager","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/playground","path":"/private-networks/tutorials/kubernetes/playground","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/production","path":"/private-networks/tutorials/kubernetes/production","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/kubernetes/quorum-explorer","path":"/private-networks/tutorials/kubernetes/quorum-explorer","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/permissioning/index","path":"/private-networks/tutorials/permissioning/","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/privacy/index","path":"/private-networks/tutorials/privacy/","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/privacy/multi-tenancy","path":"/private-networks/tutorials/privacy/multi-tenancy","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/privacy/quickstart","path":"/private-networks/tutorials/privacy/quickstart","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/privacy/web3js-quorum","path":"/private-networks/tutorials/privacy/web3js-quorum","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/qbft","path":"/private-networks/tutorials/qbft","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials/quickstart","path":"/private-networks/tutorials/quickstart","sidebar":"privateDocSidebar"},{"id":"public-networks/chatbot","path":"/public-networks/chatbot","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/data-storage-formats","path":"/public-networks/concepts/data-storage-formats","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/events-and-logs","path":"/public-networks/concepts/events-and-logs","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/genesis-file","path":"/public-networks/concepts/genesis-file","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/network-and-chain-id","path":"/public-networks/concepts/network-and-chain-id","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/node-clients","path":"/public-networks/concepts/node-clients","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/node-keys","path":"/public-networks/concepts/node-keys","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/parallel-transaction-execution","path":"/public-networks/concepts/parallel-transaction-execution","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/proof-of-stake/attestations","path":"/public-networks/concepts/proof-of-stake/attestations","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/proof-of-stake/index","path":"/public-networks/concepts/proof-of-stake/","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/transactions/pool","path":"/public-networks/concepts/transactions/pool","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/transactions/types","path":"/public-networks/concepts/transactions/types","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts/transactions/validation","path":"/public-networks/concepts/transactions/validation","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/connect/index","path":"/public-networks/get-started/connect/","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/connect/mainnet","path":"/public-networks/get-started/connect/mainnet","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/connect/sync-node","path":"/public-networks/get-started/connect/sync-node","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/connect/testnet","path":"/public-networks/get-started/connect/testnet","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/install/binary-distribution","path":"/public-networks/get-started/install/binary-distribution","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/install/index","path":"/public-networks/get-started/install/","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/install/run-docker-image","path":"/public-networks/get-started/install/run-docker-image","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/migrate-to-besu","path":"/public-networks/get-started/migrate-to-besu","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/start-node","path":"/public-networks/get-started/start-node","sidebar":"publicDocSidebar"},{"id":"public-networks/get-started/system-requirements","path":"/public-networks/get-started/system-requirements","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/bonsai-limit-trie-logs","path":"/public-networks/how-to/bonsai-limit-trie-logs","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-besu/index","path":"/public-networks/how-to/configure-besu/","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-besu/profile","path":"/public-networks/how-to/configure-besu/profile","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-ha/index","path":"/public-networks/how-to/configure-ha/","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-ha/sample-configuration","path":"/public-networks/how-to/configure-ha/sample-configuration","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-java/install-update-java","path":"/public-networks/how-to/configure-java/install-update-java","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-java/java-flight-recorder","path":"/public-networks/how-to/configure-java/java-flight-recorder","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-java/manage-memory","path":"/public-networks/how-to/configure-java/manage-memory","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/configure-java/pass-jvm-options","path":"/public-networks/how-to/configure-java/pass-jvm-options","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/connect/configure-ports","path":"/public-networks/how-to/connect/configure-ports","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/connect/manage-peers","path":"/public-networks/how-to/connect/manage-peers","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/connect/specify-nat","path":"/public-networks/how-to/connect/specify-nat","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/connect/static-nodes","path":"/public-networks/how-to/connect/static-nodes","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/develop/client-libraries","path":"/public-networks/how-to/develop/client-libraries","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/develop/hardhat","path":"/public-networks/how-to/develop/hardhat","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/monitor/index","path":"/public-networks/how-to/monitor/","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/monitor/logging","path":"/public-networks/how-to/monitor/logging","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/monitor/metrics","path":"/public-networks/how-to/monitor/metrics","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/monitor/understand-metrics","path":"/public-networks/how-to/monitor/understand-metrics","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/send-transactions","path":"/public-networks/how-to/send-transactions","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/troubleshoot/evm-tool","path":"/public-networks/how-to/troubleshoot/evm-tool","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/troubleshoot/peering","path":"/public-networks/how-to/troubleshoot/peering","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/troubleshoot/performance","path":"/public-networks/how-to/troubleshoot/performance","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/troubleshoot/trace-transactions","path":"/public-networks/how-to/troubleshoot/trace-transactions","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/upgrade-node","path":"/public-networks/how-to/upgrade-node","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/access-logs","path":"/public-networks/how-to/use-besu-api/access-logs","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/authenticate","path":"/public-networks/how-to/use-besu-api/authenticate","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/graphql","path":"/public-networks/how-to/use-besu-api/graphql","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/index","path":"/public-networks/how-to/use-besu-api/","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/json-rpc","path":"/public-networks/how-to/use-besu-api/json-rpc","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-besu-api/rpc-pubsub","path":"/public-networks/how-to/use-besu-api/rpc-pubsub","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-engine-api","path":"/public-networks/how-to/use-engine-api","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to/use-pow/mining","path":"/public-networks/how-to/use-pow/mining","sidebar":"publicDocSidebar"},{"id":"public-networks/index","path":"/public-networks/","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/api/index","path":"/public-networks/reference/api/","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/api/objects","path":"/public-networks/reference/api/objects","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/cli/options","path":"/public-networks/reference/cli/options","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/cli/subcommands","path":"/public-networks/reference/cli/subcommands","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/disclosure","path":"/public-networks/reference/disclosure","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/engine-api/index","path":"/public-networks/reference/engine-api/","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/engine-api/objects","path":"/public-networks/reference/engine-api/objects","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/evm-tool","path":"/public-networks/reference/evm-tool","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/genesis-items","path":"/public-networks/reference/genesis-items","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/projects-using-besu","path":"/public-networks/reference/projects-using-besu","sidebar":"publicDocSidebar"},{"id":"public-networks/reference/trace-types","path":"/public-networks/reference/trace-types","sidebar":"publicDocSidebar"},{"id":"public-networks/tutorials/besu-teku-mainnet","path":"/public-networks/tutorials/besu-teku-mainnet","sidebar":"publicDocSidebar"},{"id":"public-networks/tutorials/besu-teku-testnet","path":"/public-networks/tutorials/besu-teku-testnet","sidebar":"publicDocSidebar"},{"id":"public-networks/tutorials/kubernetes","path":"/public-networks/tutorials/kubernetes","sidebar":"publicDocSidebar"},{"id":"/public-networks/get-started","path":"/public-networks/get-started","sidebar":"publicDocSidebar"},{"id":"public-networks/how-to","path":"/public-networks/how-to","sidebar":"publicDocSidebar"},{"id":"public-networks/concepts","path":"/public-networks/concepts","sidebar":"publicDocSidebar"},{"id":"public-networks/tutorials","path":"/public-networks/tutorials","sidebar":"publicDocSidebar"},{"id":"public-networks/reference","path":"/public-networks/reference","sidebar":"publicDocSidebar"},{"id":"/private-networks/get-started","path":"/private-networks/get-started","sidebar":"privateDocSidebar"},{"id":"private-networks/tutorials","path":"/private-networks/tutorials","sidebar":"privateDocSidebar"}],"draftIds":[],"sidebars":{"publicDocSidebar":{"link":{"path":"/public-networks/","label":"Introduction"}},"privateDocSidebar":{"link":{"path":"/private-networks/","label":"Introduction"}}}}],"breadcrumbs":false}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-KD07N5GM2B"],"anonymizeIP":true,"id":"default"}},"docusaurus-plugin-google-tag-manager":{"default":{"containerId":"GTM-THG37T4","id":"default"}}}'),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(22654);const l=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.5.2"},"docusaurus-plugin-google-tag-manager":{"type":"package","name":"@docusaurus/plugin-google-tag-manager","version":"3.5.2"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.5.2"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.44.5"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.5.2"}}}');var c=n(74848);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},67489:(e,t,n)=>{"use strict";n.d(t,{A:()=>b});var r=n(96540),o=n(38193),a=n(5260),i=n(70440),s=n(59504),l=n(53102),c=n(74848);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(b,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const h=e=>(0,c.jsx)(f,{...e});class b extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.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??h)(e)}return e??null}}},38193:(e,t,n)=>{"use strict";n.d(t,{A:()=>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}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);var r=n(80545),o=n(74848);function a(e){return(0,o.jsx)(r.mg,{...e})}},28774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(96540),o=n(54625),a=n(70440),i=n(44586),s=n(16654),l=n(38193),c=n(63427),u=n(86025),d=n(74848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:h,isActive:b,"data-noBrokenLinkCheck":m,autoAddBaseUrl:g=!0,...v}=e;const{siteConfig:y}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=y,x=y.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),_=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const C=p||f;const T=(0,s.A)(C),A=C?.replace("pathname://","");let D=void 0!==A?(j=A,g&&(e=>e.startsWith("/"))(j)?S(j):j):void 0;var j;"hash"===x&&D?.startsWith("./")&&(D=D?.slice(1)),D&&T&&(D=(0,a.Ks)(D,{trailingSlash:w,baseUrl:k}));const P=(0,r.useRef)(!1),L=n?o.k2:o.N_,N=l.A.canUseIntersectionObserver,O=(0,r.useRef)(),R=()=>{P.current||null==D||(window.docusaurus.preload(D),P.current=!0)};(0,r.useEffect)((()=>(!N&&T&&l.A.canUseDOM&&null!=D&&window.docusaurus.prefetch(D),()=>{N&&O.current&&O.current.disconnect()})),[O,D,N,T]);const I=D?.startsWith("#")??!1,F=!v.target||"_self"===v.target,M=!D||!T||!F||I&&"hash"!==x;m||!I&&M||_.collectLink(D),v.id&&_.collectAnchor(v.id);const z={};return M?(0,d.jsx)("a",{ref:E,href:D,...C&&!T&&{target:"_blank",rel:"noopener noreferrer"},...v,...z}):(0,d.jsx)(L,{...v,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,N&&e&&T&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=D&&window.docusaurus.prefetch(D))}))})),O.current.observe(e))},to:D,...n&&{isActive:b,activeClassName:h},...z})}const f=r.forwardRef(p)},21312:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(96540),o=n(74848);function a(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 i=n(22654);function s(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 i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=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 i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},17065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},16654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},86025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(96540),o=n(44586),a=n(16654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},63427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(96540);n(74848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},44586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(96540),o=n(26988);function a(){return(0,r.useContext)(o.o)}},92303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(96540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(96540);const o=n(38193).A.canUseDOM?r.useLayoutEffect:r.useEffect},86921:(e,t,n)=>{"use strict";n.d(t,{A:()=>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}},53102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(96540),o=n(74848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(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:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},53886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>m,XK:()=>y,g1:()=>v});var r=n(96540),o=n(44070),a=n(17065),i=n(6342),s=n(70679),l=n(89532),c=n(74848);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function h(){const e=(0,o.Gy)(),t=(0,i.p)().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 b(e){let{children:t}=e;const n=h();return(0,c.jsx)(f.Provider,{value:n,children:t})}function m(e){let{children:t}=e;return(0,c.jsx)(b,{children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=g(),{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])}}function y(){const e=(0,o.Gy)(),[t]=g();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},82565:(e,t,n)=>{"use strict";n.d(t,{k:()=>a,v:()=>i});var r=n(44070),o=n(53886);function a(e,t){return`docs-${e}-${t}`}function i(){const e=(0,r.Gy)(),t=(0,r.gk)(),n=(0,o.XK)();return[...Object.keys(e).map((function(r){const o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find((e=>e.isLast));return a(r,(o??i??s).name)}))]}},60609:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(96540),o=n(89532),a=n(74848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},26972:(e,t,n)=>{"use strict";n.d(t,{$S:()=>h,B5:()=>E,Nr:()=>f,OF:()=>k,QB:()=>_,Vd:()=>x,Y:()=>y,cC:()=>p,d1:()=>C,fW:()=>S,w8:()=>g});var r=n(96540),o=n(56347),a=n(22831),i=n(44070),s=n(99169),l=n(31682),c=n(53886),u=n(23025),d=n(60609);function p(e){const t=(0,u.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({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 b=(e,t)=>void 0!==e&&(0,s.ys)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?b(e.href,t):"category"===e.type&&(b(e.href,t)||m(e.items,t))}function v(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function w(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,s.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,l.sb)([t,n,o].filter(Boolean))),[t,n,o])}function S(e,t){const n=x(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 _(e,t){const n=x(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- ${(0,l.sb)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.v)(i),sidebarName:l,sidebarItems:c}}function C(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!f(e)))}},23025:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(96540),o=n(89532),a=n(74848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},44070:(e,t,n)=>{"use strict";n.d(t,{d1:()=>u.d1,zK:()=>w,vT:()=>m,gk:()=>g,Gy:()=>h,$S:()=>u.$S,HW:()=>k,vF:()=>p.v,ht:()=>b,g1:()=>d.g1,r7:()=>y,jh:()=>v});var r=n(56347),o=n(44586),a=n(17065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();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){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),o=n?.docs.find((e=>!!(0,r.B6)(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):{}}}var u=n(26972),d=n(53886),p=n(82565);const f={},h=()=>i("docusaurus-plugin-content-docs")??f,b=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),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})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function m(e){void 0===e&&(e={});const t=h(),{pathname:n}=(0,r.zy)();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.B6)(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 g(e){void 0===e&&(e={});const t=m(e),{pathname:n}=(0,r.zy)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function v(e){return b(e).versions}function y(e){const t=b(e);return s(t)}function w(e){const t=b(e),{pathname:n}=(0,r.zy)();return c(t,n)}function k(e){const t=b(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},31911:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},76294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),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()}}},26134:(e,t,n)=>{"use strict";var r=n(78181),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(19700),n(59843)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},51107:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(96540);var r=n(18215),o=n(21312),a=n(6342),i=n(28774),s=n(63427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(74848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},43186:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(74848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("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"})})}},59504:(e,t,n)=>{"use strict";n.d(t,{A:()=>Lt});var r=n(96540),o=n(18215),a=n(67489),i=n(1003),s=n(56347),l=n(21312),c=n(75062),u=n(74848);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,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.T)({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 b(e){const t=e.children??h,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(17559),g=n(14090);const v={skipToContent:"skipToContent_fXgn"};function y(){return(0,u.jsx)(b,{className:v.skipToContent})}var w=n(6342),k=n(65041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var D=n(22069),j=n(23104);var P=n(89532),L=n(75600);const N=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,D.M)(),t=(0,L.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.ZC)(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(0,u.jsx)(N.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(N);if(!e)throw new P.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(95293),z=n(92303);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("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 $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("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 U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({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"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const Q=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function q(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.G)();return r?null:(0,u.jsx)(Q,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(23465);function G(){return(0,u.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,D.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({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(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Z(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(G,{}),(0,u.jsx)(q,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Y=n(28774),X=n(86025),J=n(16654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(43186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.A)(o),b=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Y.A,{href:l?f:o,...c,...b}):(0,u.jsx)(Y.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...b})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(41422),se=n(99169),le=n(44586);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.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)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ge,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ge,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var he=n(32131);function be(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("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 me="iconLanguage_nlXk";var ge=n(11088),ve=n(20053);var ye=n(44070),we=n(5891),ke=n(32384),xe=n(69913),Se=n(4471),_e=n(27674),Ee=n(86841),Ce=n(43810);const Te='<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>',Ae='<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>',De='<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>',je='<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>',Pe='<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>',Le='<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>',Oe={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 Re(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:s}=e;const l=n===xe.i.Title,c=n===xe.i.Keywords,u=l||c,d=n===xe.i.Heading,p=[];i?p.push(Le):s&&p.push(Ne);const f=p.map((e=>`<span class="${Oe.hitTree}">${e}</span>`)),h=`<span class="${Oe.hitIcon}">${u?Te:d?Ae:De}</span>`,b=[`<span class="${Oe.hitTitle}">${c?(0,Ee.Z)(t.s,a):(0,Ce.C)(t.t,(0,_e.g)(o,"t"),a)}</span>`];if(!i&&!s&&ge.tb){const e=r?r.b?.concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;b.push(`<span class="${Oe.hitPath}">${(0,Se.$)(e??[])}</span>`)}else u||b.push(`<span class="${Oe.hitPath}">${(0,Ee.Z)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const m=`<span class="${Oe.hitAction}">${je}</span>`;return[...f,h,`<span class="${Oe.hitWrapper}">`,...b,"</span>",m].join("")}function Ie(){return`<span class="${Oe.noResults}"><span class="${Oe.noResultsIcon}">${Pe}</span><span>${(0,l.T)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var Fe=n(2849),Me=n(43385);async function ze(){const e=await Promise.all([n.e(489),n.e(5741)]).then(n.t.bind(n,90489,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Be="_highlight";const $e=function(e){let{handleSearchBarToggle:t}=e;const o=(0,z.A)(),{siteConfig:{baseUrl:a},i18n:{currentLocale:i}}=(0,le.A)(),c=(0,ye.vT)();let d=a;try{const{preferredVersion:e}=function(){return n(44070).g1(...arguments)}(c?.pluginId??ge.UB);e&&!e.isLast&&(d=e.path+"/")}catch(M){if(ge.I$&&!(M instanceof P.dV))throw M}const p=(0,s.W6)(),f=(0,s.zy)(),h=(0,r.useRef)(null),b=(0,r.useRef)(new Map),m=(0,r.useRef)(!1),[g,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(!1),[k,x]=(0,r.useState)(""),S=(0,r.useRef)(null),_=(0,r.useRef)(""),[E,C]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ge.Hg))return;let e="";if(f.pathname.startsWith(d)){const t=f.pathname.substring(d.length);let n;for(const e of ge.Hg){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}_.current!==e&&(b.current.delete(e),_.current=e),C(e)}),[f.pathname,d]);const T=!!ge.O6&&Array.isArray(ge.Hg)&&""===E,A=(0,r.useCallback)((async()=>{if(T||b.current.get(E))return;b.current.set(E,"loading"),S.current?.autocomplete.destroy(),v(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,we.Z)(d,E),ze()]);if(S.current=n(h.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ve.A)(Oe.searchBar,{[Oe.searchBarLeft]:"left"===ge.ZG}),noPrefix:!0,dropdownMenu:Oe.dropdownMenu,input:Oe.input,hint:Oe.hint,suggestions:Oe.suggestions,suggestion:Oe.suggestion,cursor:Oe.cursor,dataset:Oe.dataset,empty:Oe.empty}},[{source:(0,ke.m)(e,t,ge.AT),templates:{suggestion:Re,empty:Ie,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!E||!ge.dz))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),o=new URLSearchParams;let s;if(o.set("q",t),E){const e=E&&Array.isArray(ge.Hg)?ge.Hg.find((e=>"string"==typeof e?e===E:e.path===E)):E,t=e?(0,Me.p)(e,i).label:E;s=ge.dz&&n?(0,l.T)({id:"theme.SearchBar.seeAllOutsideContext",message:'See all results outside "{context}"'},{context:t}):(0,l.T)({id:"theme.SearchBar.searchInContext",message:'See all results within "{context}"'},{context:t})}else s=(0,l.T)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!E||!Array.isArray(ge.Hg)||ge.dz&&n||o.set("ctx",E),d!==a){if(!d.startsWith(a))throw new Error(`Version url '${d}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);o.set("version",d.substring(a.length))}const c=`${a}search/?${o.toString()}`;return r.href=c,r.textContent=s,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),S.current?.autocomplete.close(),p.push(c))})),r})({query:t,isEmpty:n}),o=document.createElement("div");return o.className=Oe.hitFooter,o.appendChild(r),o}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;h.current?.blur();let a=n;if(ge.CU&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(Be,t);a+=`?${e.toString()}`}r&&(a+=r),p.push(a)})).on("autocomplete:closed",(()=>{h.current?.blur()})),b.current.set(E,"done"),v(!1),m.current){const e=h.current;e.value&&S.current?.autocomplete.open(),e.focus()}}),[T,E,d,a,p]);(0,r.useEffect)((()=>{if(!ge.CU)return;const e=o?new URLSearchParams(f.search).getAll(Be):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.CU(t);n.unmark(),0!==e.length&&n.mark(e),x(e.join(" ")),S.current?.autocomplete.setVal(e.join(" "))}))}),[o,f.search,f.pathname]);const[D,j]=(0,r.useState)(!1),L=(0,r.useCallback)((()=>{m.current=!0,A(),j(!0),t?.(!0)}),[t,A]),N=(0,r.useCallback)((()=>{j(!1),t?.(!1)}),[t]),O=(0,r.useCallback)((()=>{A()}),[A]),R=(0,r.useCallback)((e=>{x(e.target.value),e.target.value&&w(!0)}),[]),I=!!o&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ge.WW)return;const e=e=>{!(I?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),h.current?.focus(),L())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[I,L]);const F=(0,r.useCallback)((()=>{const e=new URLSearchParams(f.search);e.delete(Be);const t=e.toString(),n=f.pathname+(""!=t?`?${t}`:"")+f.hash;n!=f.pathname+f.search+f.hash&&p.push(n),x(""),S.current?.autocomplete.setVal("")}),[f.pathname,f.search,f.hash,p]);return(0,u.jsxs)("div",{className:(0,ve.A)("navbar__search",Oe.searchBarContainer,{[Oe.searchIndexLoading]:g&&y,[Oe.focused]:D}),hidden:T,dir:"ltr",children:[(0,u.jsx)("input",{placeholder:(0,l.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:O,onFocus:L,onBlur:N,onChange:R,ref:h,value:k}),(0,u.jsx)(Fe.A,{className:Oe.searchBarLoadingRing}),ge.WW&&ge.pk&&(""!==k?(0,u.jsx)("button",{className:Oe.searchClearButton,onClick:F,children:"\u2715"}):o&&(0,u.jsxs)("div",{className:Oe.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Oe.searchHint,children:I?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Oe.searchHint,children:"K"})]}))]})},Ue={navbarSearchContainer:"navbarSearchContainer_Bca1"};function He(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.A)(n,Ue.navbarSearchContainer),children:t})}var Qe=n(26972);var Ve=n(53886);function qe(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const We={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),p=(0,he.o)(),{search:f,hash:h}=(0,s.zy)(),b=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${h}${o}`;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":""}})),...r],m=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(be,{className:me}),m]}),items:b})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(He,{className:n,children:(0,u.jsx)($e,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.zK)(r),i=(0,Qe.QB)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.zK)(r),i=(0,Qe.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,Qe.Vd)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.zy)(),p=(0,ye.zK)(n),f=(0,ye.jh)(n),{savePreferredVersionName:h}=(0,Ve.g1)(n),b=[...o,...f.map((function(e){const t=qe(e,p);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],m=(0,Qe.Vd)(n)[0],g=t&&b.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,v=t&&b.length>1?void 0:qe(m,p).path;return b.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:g,to:v,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:g,to:v,items:b,isActive:r?()=>!1:void 0})}};function Ge(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=We[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ke(){const e=(0,D.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ge,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ze(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{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)",children:"\u2190 Back to main menu"})})}function Ye(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ze,{onClick:()=>t.hide()}),t.content]})}function Xe(){const e=(0,D.M)();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?(0,u.jsx)(F,{header:(0,u.jsx)(Z,{}),primaryMenu:(0,u.jsx)(Ke,{}),secondaryMenu:(0,u.jsx)(Ye,{})}):null}const Je={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function et(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function tt(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,D.M)(),{navbarRef:s,isNavbarVisible:d}=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,j.Mq)(((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,c.$)((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(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Je.navbarHideable,!d&&Je.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(et,{onClick:i.toggle}),(0,u.jsx)(Xe,{})]})}var nt=n(12181);const rt="right";function ot(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function at(){const{toggle:e,shown:t}=(0,D.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({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",children:(0,u.jsx)(ot,{})})}const it={colorModeToggle:"colorModeToggle_DEke"};function st(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(nt.k2,{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}),children:(0,u.jsx)(Ge,{...e})},t)))})}function lt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ct(){const e=(0,D.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??rt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(lt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(at,{}),(0,u.jsx)(G,{}),(0,u.jsx)(st,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(st,{items:r}),(0,u.jsx)(q,{className:it.colorModeToggle}),!o&&(0,u.jsx)(He,{children:(0,u.jsx)($e,{})})]})})}function ut(){return(0,u.jsx)(tt,{children:(0,u.jsx)(ct,{})})}function dt(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Y.A,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function pt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(dt,{item:t})},t.href??t.to)}function ft(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(pt,{item:e},t)))})]})}function ht(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ft,{column:e},t)))})}function bt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function mt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(dt,{item:t})}function gt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(mt,{item:e}),t.length!==n+1&&(0,u.jsx)(bt,{})]},n)))})})}function vt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ht,{columns:t}):(0,u.jsx)(gt,{links:t})}var yt=n(21122);const wt={footerLogoLink:"footerLogoLink_BH7S"};function kt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(yt.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function xt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Y.A,{href:t.href,className:wt.footerLogoLink,target:t.target,children:(0,u.jsx)(kt,{logo:t})}):(0,u.jsx)(kt,{logo:t})}function St(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function _t(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function Et(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(_t,{style:o,links:n&&n.length>0&&(0,u.jsx)(vt,{links:n}),logo:r&&(0,u.jsx)(xt,{logo:r}),copyright:t&&(0,u.jsx)(St,{copyright:t})})}const Ct=r.memo(Et),Tt=(0,P.fM)([M.a,k.o,j.Tv,Ve.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(L.y_,{children:(0,u.jsx)(D.e,{children:(0,u.jsx)(O,{children:t})})})}]);function At(e){let{children:t}=e;return(0,u.jsx)(Tt,{children:t})}var Dt=n(51107);function jt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Dt.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(nt.a2,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(nt.bq,{error:t})})]})})})}const Pt={mainWrapper:"mainWrapper_z2l0"};function Lt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,g.J)(),(0,u.jsxs)(At,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(y,{}),(0,u.jsx)(A,{}),(0,u.jsx)(ut,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(m.G.wrapper.main,Pt.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(jt,{...e}),children:t})}),!n&&(0,u.jsx)(Ct,{})]})}},23465:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(96540);var r=n(28774),o=n(86025),a=n(44586),i=n(6342),s=n(21122),l=n(74848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Ay)(s?.href||"/"),h=n?"":t,b=s?.alt??h;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:b,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},41463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);var r=n(5260),o=n(74848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},21122:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(96540),o=n(15066),a=n(92303),i=n(95293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(74848);function c(e){let{className:t,children:n}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},41422:(e,t,n)=>{"use strict";n.d(t,{N:()=>g,u:()=>c});var r=n(96540),o=n(38193),a=n(205),i=n(53109),s=n(74848);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function h(e){if(!o.A.canUseDOM)return e?u:d}function b(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(b,{...n,collapsed:l}):null}function g(e){let{lazy:t,...n}=e;const r=t?m:b;return(0,s.jsx)(r,{...n})}},65041:(e,t,n)=>{"use strict";n.d(t,{M:()=>b,o:()=>h});var r=n(96540),o=n(92303),a=n(70679),i=n(89532),s=n(6342),l=n(74848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},95293:(e,t,n)=>{"use strict";n.d(t,{G:()=>g,a:()=>m});var r=n(96540),o=n(38193),a=n(89532),i=n(70679),s=n(6342),l=n(74848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,h=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),b=e=>{d.set(f(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&b(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(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===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},22069:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(96540),o=n(75600),a=n(24581),i=n(57485),s=n(6342),l=n(89532),c=n(74848);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},75600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(96540),o=n(89532),a=n(74848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},14090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(96540);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)}}),[])}},24581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(96540),o=n(38193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},17559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-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",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",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:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},53109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},12181:(e,t,n)=>{"use strict";n.d(t,{bq:()=>u,MN:()=>c,a2:()=>l,k2:()=>d});var r=n(96540),o=n(21312),a=n(70440);const i={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var s=n(74848);function l(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(o.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,a.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},57485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>l});var r=n(96540),o=n(56347),a=n(89532);function i(e){!function(e){const t=(0,o.W6)(),n=(0,a._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,o.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},31682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{XI:()=>r,sb:()=>o})},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>h});var r=n(96540),o=n(15066),a=n(5260),i=n(53102);function s(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(86025),c=n(44586);var u=n(74848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.hH)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,o.A)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function h(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.A)(r,a),children:t})}},89532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(96540),o=n(205),a=n(74848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class l 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 c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},99169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(96540),o=n(35947),a=n(44586);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.A)().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.A,baseUrl:e})),[e])}},23104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>u,a_:()=>h,gk:()=>b});var r=n(96540),o=n(38193),a=n(92303),i=n(205),s=n(89532),l=n(74848);const c=r.createContext(void 0);function u(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(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const p=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),o=(0,r.useRef)(p()),a=(0,s._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();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 h(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function b(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"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?.()}}},70679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>u,Dv:()=>d});var r=n(96540);const o=JSON.parse('{"N":"localStorage","M":""}'),a=o.N;function i(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 s(e){if(void 0===e&&(e=a),"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,l||(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),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${o.M}`;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}}(n);const r=s(t?.persistence);return null===r?c:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},32131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(44586),o=n(56347),a=n(70440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,o.zy)(),c=(0,a.Ks)(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}`}}}},75062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(96540),o=n(56347),a=n(89532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(44586);function o(){return(0,r.A)().siteConfig.themeConfig}},12983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?o(l):a(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(42566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},80253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},70440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(31635);var o=n(12983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(42566);var i=n(80253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},42566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},2849:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(96540);var r=n(20053);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(74848);function i(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.A)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},5891:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(58291),o=n.n(r),a=n(11088);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.IH.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}},32384:(e,t,n)=>{"use strict";n.d(t,{m:()=>c});var r=n(58291),o=n.n(r);var a=n(11088);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})))})))}var l=n(69913);function c(e,t,n){return function(r,s){const c=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.BH);if(0===c.length)return void s([]);const u=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.BH)if("en"===i)a.sx||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))}(c,t),d=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(d.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!d.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-d.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:i!==l.i.Title&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),d.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type!==l.i.Heading&&t.type!==l.i.Content&&t.type!==l.i.Description||!t.page?t.index:e.findIndex((e=>e.document===t.page)),o=n.type!==l.i.Heading&&n.type!==l.i.Content&&n.type!==l.i.Description||!n.page?n.index:e.findIndex((e=>e.document===n.page));if(-1===r&&(r=t.index),-1===o&&(o=n.index),r===o){const e=(0===n.type?1:0)-(0===t.type?1:0);return 0===e?t.index-n.index:e}return r-o}))}(d),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.slice(0,n).some((e=>(e.type===l.i.Keywords?e.page:e.document)===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(d),s(d)}}},4471:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{$:()=>r})},53103:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{Z:()=>r})},27674:(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,{g:()=>r})},86841:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(53103);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.Z)(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.Z)(e)}</mark>`:(0,r.Z)(e):a.join("")}},43810:(e,t,n)=>{"use strict";n.d(t,{C:()=>l});var r=n(53103),o=n(86841);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(11088);function l(e,t,n,a){void 0===a&&(a=s.rG);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.Z)(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.Z)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=i(e.substring(l)).map((e=>({html:(0,r.Z)(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 h=d.textLength,b=0,m=0,g=!1,v=!1;for(;h<a;)if((b<=m||0===f.length)&&u.length>0){const e=u.pop();h+e.textLength<=a?(p.unshift(e.html),b+=e.textLength,h+=e.textLength):(g=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();h+e.textLength<=a?(p.push(e.html),m+=e.textLength,h+=e.textLength):(v=!0,f.length=0)}}return(g||u.length>0)&&p.unshift("\u2026"),(v||f.length>0)&&p.push("\u2026"),p.join("")}},43385:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{p:()=>r})},11088:(e,t,n)=>{"use strict";n.d(t,{CU:()=>a,UB:()=>f,tb:()=>c,O6:()=>m,I$:()=>h,BH:()=>r,sx:()=>o,ZG:()=>p,WW:()=>u,pk:()=>d,Hg:()=>b,IH:()=>i,rG:()=>l,AT:()=>s,dz:()=>g});n(58291);const r=["en"],o=!1,a=null,i="search-index{dir}.json?_=7f625930",s=8,l=50,c=!1,u=!0,d=!0,p="right",f=void 0,h=!0,b=null,m=!1,g=!1},69913:(e,t,n)=>{"use strict";var r;n.d(t,{i:()=>r}),function(e){e[e.Title=0]="Title",e[e.Heading=1]="Heading",e[e.Description=2]="Description",e[e.Keywords=3]="Keywords",e[e.Content=4]="Content"}(r||(r={}))},20053:(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,{A:()=>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}},31513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>A,AO:()=>p});var r=n(58168);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 h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var s=n(11561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(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 d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(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 f(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.A)({},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 h(){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 b=!("undefined"==typeof window||!window.document||!window.document.createElement);function m(e,t){t(window.confirm(e))}var g="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),b||(0,s.A)(!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,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?m:k,S=i.keyLength,_=void 0===S?6:S,E=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return E&&(a=u(a,E)),f(a,r,n)}function T(){return Math.random().toString(36).substr(2,_)}var A=h();function D(e){(0,r.A)($,e),$.length=n.length,A.notifyListeners($.location,$.action)}function j(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(C(e.state))}function P(){N(C(y()))}var L=!1;function N(e){if(L)L=!1,D();else{A.confirmTransitionTo(e,"POP",x,(function(t){t?D({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,F(o))}(e)}))}}var O=C(y()),R=[O.key];function I(e){return E+p(e)}function F(e){n.go(e)}var M=0;function z(e){1===(M+=e)&&1===e?(window.addEventListener(g,j),a&&window.addEventListener(v,P)):0===M&&(window.removeEventListener(g,j),a&&window.removeEventListener(v,P))}var B=!1;var $={length:n.length,action:"POP",location:O,createHref:I,push:function(e,t){var r="PUSH",a=f(e,t,T(),$.location);A.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf($.location.key),c=R.slice(0,l+1);c.push(a.key),R=c,D({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,T(),$.location);A.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf($.location.key);-1!==l&&(R[l]=a.key),D({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=A.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=A.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function E(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),b||(0,s.A)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?m:o,i=n.hashType,c=void 0===i?"slash":i,g=e.basename?d(l(e.basename)):"",v=x[c],y=v.encodePath,w=v.decodePath;function C(){var e=w(_());return g&&(e=u(e,g)),f(e)}var T=h();function A(e){(0,r.A)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var D=!1,j=null;function P(){var e,t,n=_(),r=y(n);if(n!==r)E(r);else{var o=C(),i=B.location;if(!D&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(j===p(o))return;j=null,function(e){if(D)D=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,a,(function(n){n?A({action:t,location:e}):function(e){var t=B.location,n=R.lastIndexOf(p(t));-1===n&&(n=0);var r=R.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(D=!0,I(o))}(e)}))}}(o)}}var L=_(),N=y(L);L!==N&&E(N);var O=C(),R=[p(O)];function I(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,P):0===F&&window.removeEventListener(k,P)}var z=!1;var B={length:t.length,action:"POP",location:O,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(g+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(g+t);if(_()!==o){j=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(p(B.location)),i=R.slice(0,a+1);i.push(t),R=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(g+t);_()!==o&&(j=t,E(o));var a=R.indexOf(p(B.location));-1!==a&&(R[a]=t),A({action:n,location:r})}}))},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return z||(M(1),z=!0),function(){return z&&(z=!1,M(-1)),t()}},listen:function(e){var t=T.appendListener(e);return M(1),function(){M(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(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=h();function d(e){(0,r.A)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function b(){return Math.random().toString(36).substr(2,c)}var m=T(s,0,a.length-1),g=a.map((function(e){return f(e,void 0,"string"==typeof e?b():e.key||b())})),v=p;function y(e){var t=T(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[m],index:m,entries:g,createHref:v,push:function(e,t){var r="PUSH",o=f(e,t,b(),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=f(e,t,b(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(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}},4146:(e,t,n)=>{"use strict";var r=n(44363),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,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),b=l(n),m=0;m<i.length;++m){var g=i[m];if(!(a[g]||r&&r[g]||b&&b[g]||s&&s[g])){var v=p(n,g);try{c(t,g,v)}catch(y){}}}}return t}},20311: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}}},64634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},58291:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,h,b,m,g,v,y,w,k,x,S,_,E,C,T,A,D,j,P,L,N,O,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.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},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.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},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.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 R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.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))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.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(R.tokenizer.separator)||a==r){if(s>0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.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)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.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},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.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},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.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)},R.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)},R.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},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.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},R.Vector.prototype.toJSON=function(){return this.elements},R.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,h=new RegExp("^("+c+")?"+u+c),b=new RegExp(p),m=new RegExp(d),g=new RegExp(f),v=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,k=/^(.+?)(ed|ing)$/,x=/.$/,S=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),E=new RegExp("^"+c+l+"[^aeiouwxy]$"),C=/^(.+?[^aeiou])y$/,T=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,A=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,j=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+c+l+"[^aeiouwxy]$"),O=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=y,(o=v).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=k,(o=w).test(e)){var u=o.exec(e);(o=h).test(u[1])&&(o=x,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=g).test(t)&&(l=_,c=E,(a=S).test(e=t)?e+="e":l.test(e)?(o=x,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=C).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=T).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+i[n])),(o=A).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+s[n])),a=j,(o=D).test(e)?(t=(u=o.exec(e))[1],(o=b).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=b).test(t)&&(e=t)),(o=P).test(e)&&(t=(u=o.exec(e))[1],a=m,l=N,((o=b).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=b,(o=L).test(e)&&a.test(e)&&(o=x,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(O)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.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}},R.stopWordFilter=R.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"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.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 R.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 R.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 R.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 R.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},R.TokenSet.fromString=function(e){for(var t=new R.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 R.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},R.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},R.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},R.TokenSet.prototype.intersect=function(e){for(var t=new R.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],h=p.final&&f.final,b=void 0;d in n.output.edges?(b=n.output.edges[d]).final=b.final||h:((b=new R.TokenSet).final=h,n.output.edges[d]=b),r.push({qNode:f,output:b,node:p})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.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 R.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},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.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()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.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 R.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=R.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=R.TokenSet.fromClause(l),h=this.tokenSet.intersect(f).toArray();if(0===h.length&&l.presence===R.Query.presence.REQUIRED){for(var b=0;b<l.fields.length;b++){a[P=l.fields[b]]=R.Set.empty}break}for(var m=0;m<h.length;m++){var g=h[m],v=this.invertedIndex[g],y=v._index;for(b=0;b<l.fields.length;b++){var w=v[P=l.fields[b]],k=Object.keys(w),x=g+"/"+P,S=new R.Set(k);if(l.presence==R.Query.presence.REQUIRED&&(u=u.union(S),void 0===a[P]&&(a[P]=R.Set.complete)),l.presence!=R.Query.presence.PROHIBITED){if(r[P].upsert(y,l.boost,(function(e,t){return e+t})),!o[x]){for(var _=0;_<k.length;_++){var E,C=k[_],T=new R.FieldRef(C,P),A=w[C];void 0===(E=n[T])?n[T]=new R.MatchData(g,P,A):E.add(g,P,A)}o[x]=!0}}else void 0===i[P]&&(i[P]=R.Set.empty),i[P]=i[P].union(S)}}}if(l.presence===R.Query.presence.REQUIRED)for(b=0;b<l.fields.length;b++){a[P=l.fields[b]]=a[P].intersect(u)}}var D=R.Set.complete,j=R.Set.empty;for(s=0;s<this.fields.length;s++){var P;a[P=this.fields[s]]&&(D=D.intersect(a[P])),i[P]&&(j=j.union(i[P]))}var L=Object.keys(n),N=[],O=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(s=0;s<L.length;s++){T=L[s];var I=R.FieldRef.fromString(T);n[T]=new R.MatchData}}for(s=0;s<L.length;s++){var F=(I=R.FieldRef.fromString(L[s])).docRef;if(D.contains(F)&&!j.contains(F)){var M,z=this.fieldVectors[I],B=r[I.fieldName].similarity(z);if(void 0!==(M=O[F]))M.score+=B,M.matchData.combine(n[I]);else{var $={ref:F,score:B,matchData:n[I]};O[F]=$,N.push($)}}}return N.sort((function(e,t){return t.score-e.score}))},R.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:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,s=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.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 R.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 R.Index(t)},R.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=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.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 R.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 h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var b=0;b<r.length;b++)h[r[b]]=Object.create(null);this.invertedIndex[f]=h}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],v=f.metadata[g];null==this.invertedIndex[f][a][n][g]&&(this.invertedIndex[f][a][n][g]=[]),this.invertedIndex[f][a][n][g].push(v)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.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},R.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=R.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new R.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,h=0;h<d;h++){var b,m,g,v=u[h],y=c[v],w=this.invertedIndex[v]._index;void 0===r[v]?(b=R.idf(this.invertedIndex[v],this.documentCount),r[v]=b):b=r[v],m=b*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+y),m*=p,m*=f,g=Math.round(1e3*m)/1e3,l.insert(w,g)}e[a]=l}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.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)},R.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])}}}},R.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},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.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=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.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("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.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 R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.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 R.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 R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.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 R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.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 R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.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 R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},10119:(e,t,n)=>{"use strict";n.r(t)},51043:(e,t,n)=>{"use strict";n.r(t)},5947: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)},35302:(e,t,n)=>{var r=n(64634);e.exports=h,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,s=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(s,f),s=f+d.length,p)l+=p[1];else{var h=e[s],b=n[2],m=n[3],g=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=b&&null!=h&&h!==b,x="+"===y||"*"===y,S="?"===y||"*"===y,_=b||c,E=g||v,C=b||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:m||a++,prefix:b||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?u(E):w?".*":i(_,C)})}}return s<e.length&&(l+=e.substr(s)),l&&r.push(l),r}function i(e,t){return!t||t.indexOf(e)>-1?"[^"+c(e)+"]+?":c(t)+"|(?:(?!"+c(t)+")[^"+c(e)+"])+?"}function s(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(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+")$",p(t)));return function(t,o){for(var a="",i=t||{},l=(o||{}).pretty?s:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=i[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 c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function d(e,t){return e.keys=t,e}function p(e){return e&&e.sensitive?"":"i"}function f(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 l=e[s];if("string"==typeof l)i+=c(l);else{var u=c(l.prefix),f="(?:"+l.pattern+")";t.push(l),l.repeat&&(f+="(?:"+u+f+")*"),i+=f=l.optional?l.partial?u+"("+f+")?":"(?:"+u+"("+f+"))?":u+"("+f+")"}}var h=c(n.delimiter||"/"),b=i.slice(-h.length)===h;return o||(i=(b?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&b?"":"(?="+h+"|$)",d(new RegExp("^"+i,p(n)),t)}function h(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 d(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(h(e[o],t,n).source);return d(new RegExp("(?:"+r.join("|")+")",p(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},96976:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},19700:()=>{!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),h=p.indexOf(f);if(h>-1){++o;var b=p.substring(0,h),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),g=p.substring(h+f.length),v=[];b&&v.push.apply(v,i([b])),v.push(m),g&&v.push.apply(v,i([g])),"string"==typeof c?s.splice.apply(s,[l,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},43537:()=>{Prism.languages.solidity=Prism.languages.extend("clike",{"class-name":{pattern:/(\b(?:contract|enum|interface|library|new|struct|using)\s+)(?!\d)[\w$]+/,lookbehind:!0},keyword:/\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\b/,operator:/=>|->|:=|=:|\*\*|\+\+|--|\|\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),Prism.languages.insertBefore("solidity","keyword",{builtin:/\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\d|3[0-2])?)\b/}),Prism.languages.insertBefore("solidity","number",{version:{pattern:/([<>]=?|\^)\d+\.\d+\.\d+\b/,lookbehind:!0,alias:"number"}}),Prism.languages.sol=Prism.languages.solidity},70132:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},59843:(e,t,n)=>{var r={"./prism-java":96976,"./prism-solidity":43537,"./prism-toml":70132};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=59843},2694:(e,t,n)=>{"use strict";var r=n(6925);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}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},22551:(e,t,n)=>{"use strict";var r=n(96540),o=n(69982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,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={},h={};function b(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 m={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){m[e]=new b(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];m[t]=new b(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){m[e]=new b(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){m[e]=new b(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){m[e]=new b(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){m[e]=new b(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){m[e]=new b(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){m[e]=new b(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){m[e]=new b(e,5,!1,e.toLowerCase(),null,!1,!1)}));var g=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,r){var o=m.hasOwnProperty(t)?m[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!!d.call(h,e)||!d.call(f,e)&&(p.test(e)?h[e]=!0:(f[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(g,v);m[t]=new b(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(g,v);m[t]=new b(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(g,v);m[t]=new b(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){m[e]=new b(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new b("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){m[e]=new b(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),D=Symbol.for("react.suspense"),j=Symbol.for("react.suspense_list"),P=Symbol.for("react.memo"),L=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var O=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=O&&e[O]||e["@@iterator"])?e:null}var I,F=Object.assign;function M(e){if(void 0===I)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);I=t&&t[1]||""}return"\n"+I+e}var z=!1;function B(e,t){if(!e||z)return"";z=!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(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.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]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function $(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(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 x:return"Portal";case E:return"Profiler";case _:return"StrictMode";case D:return"Suspense";case j:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case P:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case L:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=V(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 W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function G(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 K(e,t){var n=t.checked;return F({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Z(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Q(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 Y(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function X(e,t){Y(e,t);var n=Q(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")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,Q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(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 ee(e,t,n){"number"===t&&G(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(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=""+Q(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 re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return F({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Q(n)}}function ae(e,t){var n=Q(t.value),r=Q(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 ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(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 le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.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 ue(e,t)}))}:ue);function pe(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 fe={animationIterationCount:!0,aspectRatio:!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},he=["Webkit","ms","Moz","O"];function be(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function me(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=be(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){he.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var ge=F({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 ve(e,t){if(t){if(ge[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,_e=null;function Ee(e){if(e=wo(e)){if("function"!=typeof xe)throw Error(a(280));var t=e.stateNode;t&&(t=xo(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?_e?_e.push(e):_e=[e]:Se=e}function Te(){if(Se){var e=Se,t=_e;if(_e=Se=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Ae(e,t){return e(t)}function De(){}var je=!1;function Pe(e,t,n){if(je)return e(t,n);je=!0;try{return Ae(e,t,n)}finally{je=!1,(null!==Se||null!==_e)&&(De(),Te())}}function Le(e,t){var n=e.stateNode;if(null===n)return null;var r=xo(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(a(231,t,typeof n));return n}var Ne=!1;if(u)try{var Oe={};Object.defineProperty(Oe,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Oe,Oe),window.removeEventListener("test",Oe,Oe)}catch(ue){Ne=!1}function Re(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 Ie=!1,Fe=null,Me=!1,ze=null,Be={onError:function(e){Ie=!0,Fe=e}};function $e(e,t,n,r,o,a,i,s,l){Ie=!1,Fe=null,Re.apply(Be,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{!!(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function He(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 Qe(e){if(Ue(e)!==e)throw Error(a(188))}function Ve(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Qe(o),e;if(i===r)return Qe(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var We=o.unstable_scheduleCallback,Ge=o.unstable_cancelCallback,Ke=o.unstable_shouldYield,Ze=o.unstable_requestPaint,Ye=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&!(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&4194240&a))return t;if(4&r&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ht(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function bt(){var e=ct;return!(4194240&(ct<<=1))&&(ct=64),e}function mt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function gt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?268435455&e?16:536870912:4:1}var kt,xt,St,_t,Et,Ct=!1,Tt=[],At=null,Dt=null,jt=null,Pt=new Map,Lt=new Map,Nt=[],Ot="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 Rt(e,t){switch(e){case"focusin":case"focusout":At=null;break;case"dragenter":case"dragleave":Dt=null;break;case"mouseover":case"mouseout":jt=null;break;case"pointerover":case"pointerout":Pt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Lt.delete(t.pointerId)}}function It(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&xt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Ft(e){var t=yo(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(n)))return e.blockedOn=t,void Et(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Mt(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=wo(n))&&xt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Mt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==At&&Mt(At)&&(At=null),null!==Dt&&Mt(Dt)&&(Dt=null),null!==jt&&Mt(jt)&&(jt=null),Pt.forEach(zt),Lt.forEach(zt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==At&&$t(At,e),null!==Dt&&$t(Dt,e),null!==jt&&$t(jt,e),Pt.forEach(t),Lt.forEach(t),n=0;n<Nt.length;n++)(r=Nt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Nt.length&&null===(n=Nt[0]).blockedOn;)Ft(n),null===n.blockedOn&&Nt.shift()}var Ht=w.ReactCurrentBatchConfig,Qt=!0;function Vt(e,t,n,r){var o=yt,a=Ht.transition;Ht.transition=null;try{yt=1,Wt(e,t,n,r)}finally{yt=o,Ht.transition=a}}function qt(e,t,n,r){var o=yt,a=Ht.transition;Ht.transition=null;try{yt=4,Wt(e,t,n,r)}finally{yt=o,Ht.transition=a}}function Wt(e,t,n,r){if(Qt){var o=Kt(e,t,n,r);if(null===o)Qr(e,t,r,Gt,n),Rt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return At=It(At,e,t,n,r,o),!0;case"dragenter":return Dt=It(Dt,e,t,n,r,o),!0;case"mouseover":return jt=It(jt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Pt.set(a,It(Pt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Lt.set(a,It(Lt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Rt(e,r),4&t&&-1<Ot.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&kt(a),null===(a=Kt(e,t,n,r))&&Qr(e,t,r,Gt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Qr(e,t,r,null,n)}}var Gt=null;function Kt(e,t,n,r){if(Gt=null,null!==(e=yo(e=ke(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gt=e,null}function Zt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Yt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,o="value"in Yt?Yt.value:Yt.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 Jt=o.slice(e,1<t?1-t:void 0)}function tn(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 nn(){return!0}function rn(){return!1}function on(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)?nn:rn,this.isPropagationStopped=rn,this}return F(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=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=F({},cn,{view:0,detail:0}),pn=on(dn),fn=F({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:En,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!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),hn=on(fn),bn=on(F({},fn,{dataTransfer:0})),mn=on(F({},dn,{relatedTarget:0})),gn=on(F({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=F({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),wn=on(F({},cn,{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"},xn={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"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function En(){return _n}var Cn=F({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:En,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=on(Cn),An=on(F({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Dn=on(F({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:En})),jn=on(F({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Pn=F({},fn,{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}),Ln=on(Pn),Nn=[9,13,27,32],On=u&&"CompositionEvent"in window,Rn=null;u&&"documentMode"in document&&(Rn=document.documentMode);var In=u&&"TextEvent"in window&&!Rn,Fn=u&&(!On||Rn&&8<Rn&&11>=Rn),Mn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Hn={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 Qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Vn(e,t,n,r){Ce(r),0<(t=qr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Wn=null;function Gn(e){Mr(e,0)}function Kn(e){if(W(ko(e)))return e}function Zn(e,t){if("change"===e)return t}var Yn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Yn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){qn&&(qn.detachEvent("onpropertychange",nr),Wn=qn=null)}function nr(e){if("value"===e.propertyName&&Kn(Wn)){var t=[];Vn(t,Wn,e,ke(e)),Pe(Gn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Wn=n,(qn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Wn)}function ar(e,t){if("click"===e)return Kn(t)}function ir(e,t){if("input"===e||"change"===e)return Kn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(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++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(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=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=G();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=G((e=t.contentWindow).document)}return t}function fr(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)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var br=u&&"documentMode"in document&&11>=document.documentMode,mr=null,gr=null,vr=null,yr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;yr||null==mr||mr!==G(r)||("selectionStart"in(r=mr)&&fr(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},vr&&lr(vr,r)||(vr=r,0<(r=qr(gr,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},_r={};function Er(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return Sr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=Er("animationend"),Tr=Er("animationiteration"),Ar=Er("animationstart"),Dr=Er("transitionend"),jr=new Map,Pr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Lr(e,t){jr.set(e,t),l(t,[e])}for(var Nr=0;Nr<Pr.length;Nr++){var Or=Pr[Nr];Lr(Or.toLowerCase(),"on"+(Or[0].toUpperCase()+Or.slice(1)))}Lr(Cr,"onAnimationEnd"),Lr(Tr,"onAnimationIteration"),Lr(Ar,"onAnimationStart"),Lr("dblclick","onDoubleClick"),Lr("focusin","onFocus"),Lr("focusout","onBlur"),Lr(Dr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Rr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ir=new Set("cancel close invalid load scroll toggle".split(" ").concat(Rr));function Fr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if($e.apply(this,arguments),Ie){if(!Ie)throw Error(a(198));var u=Fe;Ie=!1,Fe=null,Me||(Me=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Mr(e,t){t=!!(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;Fr(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;Fr(o,s,c),a=l}}}if(Me)throw e=ze,Me=!1,ze=null,e}function zr(e,t){var n=t[mo];void 0===n&&(n=t[mo]=new Set);var r=e+"__bubble";n.has(r)||(Hr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),Hr(n,e,r,t)}var $r="_reactListening"+Math.random().toString(36).slice(2);function Ur(e){if(!e[$r]){e[$r]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ir.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$r]||(t[$r]=!0,Br("selectionchange",!1,t))}}function Hr(e,t,n,r){switch(Zt(t)){case 1:var o=Vt;break;case 4:o=qt;break;default:o=Wt}n=o.bind(null,t,n,e),o=void 0,!Ne||"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 Qr(e,t,n,r,o){var a=r;if(!(1&t||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=yo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Pe((function(){var r=a,o=ke(n),i=[];e:{var s=jr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=mn;break;case"focusout":c="blur",l=mn;break;case"beforeblur":case"afterblur":l=mn;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=hn;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=Dn;break;case Cr:case Tr:case Ar:l=gn;break;case Dr:l=jn;break;case"scroll":l=pn;break;case"wheel":l=Ln;break;case"copy":case"cut":case"paste":l=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=An}var u=!!(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,h=r;null!==h;){var b=(f=h).stateNode;if(5===f.tag&&null!==b&&(f=b,null!==p&&(null!=(b=Le(h,p))&&u.push(Vr(h,b,f)))),d)break;h=h.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(!(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!yo(c)&&!c[bo])&&(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)?yo(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=hn,b="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(u=An,b="onPointerLeave",p="onPointerEnter",h="pointer"),d=null==l?s:ko(l),f=null==c?s:ko(c),(s=new u(b,h+"leave",l,n,o)).target=d,s.relatedTarget=f,b=null,yo(o)===r&&((u=new u(p,h+"enter",c,n,o)).target=f,u.relatedTarget=d,b=u),d=b,l&&c)e:{for(p=c,h=0,f=u=l;f;f=Wr(f))h++;for(f=0,b=p;b;b=Wr(b))f++;for(;0<h-f;)u=Wr(u),h--;for(;0<f-h;)p=Wr(p),f--;for(;h--;){if(u===p||null!==p&&u===p.alternate)break e;u=Wr(u),p=Wr(p)}u=null}else u=null;null!==l&&Gr(i,s,l,u,!1),null!==c&&null!==d&&Gr(i,d,c,u,!0)}if("select"===(l=(s=r?ko(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var m=Zn;else if(Qn(s))if(Yn)m=ir;else{m=or;var g=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(m=ar);switch(m&&(m=m(e,r))?Vn(i,m,n,o):(g&&g(e,s,r),"focusout"===e&&(g=s._wrapperState)&&g.controlled&&"number"===s.type&&ee(s,"number",s.value)),g=r?ko(r):window,e){case"focusin":(Qn(g)||"true"===g.contentEditable)&&(mr=g,gr=r,vr=null);break;case"focusout":vr=gr=mr=null;break;case"mousedown":yr=!0;break;case"contextmenu":case"mouseup":case"dragend":yr=!1,wr(i,n,o);break;case"selectionchange":if(br)break;case"keydown":case"keyup":wr(i,n,o)}var v;if(On)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Un?Bn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Fn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==y?"onCompositionEnd"===y&&Un&&(v=en()):(Xt="value"in(Yt=o)?Yt.value:Yt.textContent,Un=!0)),0<(g=qr(r,y)).length&&(y=new wn(y,e,null,n,o),i.push({event:y,listeners:g}),v?y.data=v:null!==(v=$n(n))&&(y.data=v))),(v=In?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(zn=!0,Mn);case"textInput":return(e=t.data)===Mn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!On&&Bn(e,t)?(e=en(),Jt=Xt=Yt=null,Un=!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 Fn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=qr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Mr(i,t)}))}function Vr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qr(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=Le(e,n))&&r.unshift(Vr(e,a,o)),null!=(a=Le(e,t))&&r.push(Vr(e,a,o))),e=e.return}return r}function Wr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Gr(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=Le(n,a))&&i.unshift(Vr(n,l,s)):o||null!=(l=Le(n,a))&&i.push(Vr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Kr=/\r\n?/g,Zr=/\u0000|\uFFFD/g;function Yr(e){return("string"==typeof e?e:""+e).replace(Kr,"\n").replace(Zr,"")}function Xr(e,t,n){if(t=Yr(t),Yr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);Ut(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(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 po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,ho="__reactProps$"+po,bo="__reactContainer$"+po,mo="__reactEvents$"+po,go="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[bo]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[bo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function xo(e){return e[ho]||null}var So=[],_o=-1;function Eo(e){return{current:e}}function Co(e){0>_o||(e.current=So[_o],So[_o]=null,_o--)}function To(e,t){_o++,So[_o]=e.current,e.current=t}var Ao={},Do=Eo(Ao),jo=Eo(!1),Po=Ao;function Lo(e,t){var n=e.type.contextTypes;if(!n)return Ao;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 No(e){return null!=(e=e.childContextTypes)}function Oo(){Co(jo),Co(Do)}function Ro(e,t,n){if(Do.current!==Ao)throw Error(a(168));To(Do,t),To(jo,n)}function Io(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,H(e)||"Unknown",o));return F({},n,r)}function Fo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ao,Po=Do.current,To(Do,e),To(jo,jo.current),!0}function Mo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Io(e,t,Po),r.__reactInternalMemoizedMergedChildContext=e,Co(jo),Co(Do),To(Do,e)):Co(jo),To(jo,n)}var zo=null,Bo=!1,$o=!1;function Uo(e){null===zo?zo=[e]:zo.push(e)}function Ho(){if(!$o&&null!==zo){$o=!0;var e=0,t=yt;try{var n=zo;for(yt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}zo=null,Bo=!1}catch(o){throw null!==zo&&(zo=zo.slice(e+1)),We(Je,Ho),o}finally{yt=t,$o=!1}}return null}var Qo=[],Vo=0,qo=null,Wo=0,Go=[],Ko=0,Zo=null,Yo=1,Xo="";function Jo(e,t){Qo[Vo++]=Wo,Qo[Vo++]=qo,qo=e,Wo=t}function ea(e,t,n){Go[Ko++]=Yo,Go[Ko++]=Xo,Go[Ko++]=Zo,Zo=e;var r=Yo;e=Xo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Yo=1<<32-it(t)+o|n<<o|r,Xo=a+e}else Yo=1<<a|n<<o|r,Xo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===qo;)qo=Qo[--Vo],Qo[Vo]=null,Wo=Qo[--Vo],Qo[Vo]=null;for(;e===Zo;)Zo=Go[--Ko],Go[Ko]=null,Xo=Go[--Ko],Go[Ko]=null,Yo=Go[--Ko],Go[Ko]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Pc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(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,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Zo?{id:Yo,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Pc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return!(!(1&e.mode)||128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ha(){oa=ra=null,aa=!1}function ba(e){null===ia?ia=[e]:ia.push(e)}var ma=w.ReactCurrentBatchConfig;function ga(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function va(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function ya(e){return(0,e._init)(e._payload)}function wa(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}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=Nc(e,t)).index=0,e.sibling=null,e}function i(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):(t.flags|=1048576,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=Fc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===L&&ya(a)===t.type)?((r=o(t,n.props)).ref=ga(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=ga(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=Mc(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=Rc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=ga(e,null,t),n.return=e,n;case x:return(t=Mc(t,e.mode,n)).return=e,t;case L:return p(e,(0,t._init)(t._payload),n)}if(te(t)||R(t))return(t=Rc(t,e.mode,n,null)).return=e,t;va(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?c(e,t,n,r):null;case x:return n.key===o?u(e,t,n,r):null;case L:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||R(n))return null!==o?null:d(e,t,n,r,null);va(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case L:return h(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||R(r))return d(t,e=e.get(n)||null,r,o,null);va(t,r)}return null}function b(o,a,s,l){for(var c=null,u=null,d=a,b=a=0,m=null;null!==d&&b<s.length;b++){d.index>b?(m=d,d=null):m=d.sibling;var g=f(o,d,s[b],l);if(null===g){null===d&&(d=m);break}e&&d&&null===g.alternate&&t(o,d),a=i(g,a,b),null===u?c=g:u.sibling=g,u=g,d=m}if(b===s.length)return n(o,d),aa&&Jo(o,b),c;if(null===d){for(;b<s.length;b++)null!==(d=p(o,s[b],l))&&(a=i(d,a,b),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,b),c}for(d=r(o,d);b<s.length;b++)null!==(m=h(d,o,b,s[b],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?b:m.key),a=i(m,a,b),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,b),c}function m(o,s,l,c){var u=R(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,b=s,m=s=0,g=null,v=l.next();null!==b&&!v.done;m++,v=l.next()){b.index>m?(g=b,b=null):g=b.sibling;var y=f(o,b,v.value,c);if(null===y){null===b&&(b=g);break}e&&b&&null===y.alternate&&t(o,b),s=i(y,s,m),null===d?u=y:d.sibling=y,d=y,b=g}if(v.done)return n(o,b),aa&&Jo(o,m),u;if(null===b){for(;!v.done;m++,v=l.next())null!==(v=p(o,v.value,c))&&(s=i(v,s,m),null===d?u=v:d.sibling=v,d=v);return aa&&Jo(o,m),u}for(b=r(o,b);!v.done;m++,v=l.next())null!==(v=h(b,o,m,v.value,c))&&(e&&null!==v.alternate&&b.delete(null===v.key?m:v.key),s=i(v,s,m),null===d?u=v:d.sibling=v,d=v);return e&&b.forEach((function(e){return t(o,e)})),aa&&Jo(o,m),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===L&&ya(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=ga(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Rc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Oc(i.type,i.key,i.props,null,r.mode,l)).ref=ga(r,a,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case L:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return b(r,a,i,l);if(R(i))return m(r,a,i,l);va(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Fc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var ka=wa(!0),xa=wa(!1),Sa=Eo(null),_a=null,Ea=null,Ca=null;function Ta(){Ca=Ea=_a=null}function Aa(e){var t=Sa.current;Co(Sa),e._currentValue=t}function Da(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ja(e,t){_a=e,Ca=Ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(!!(e.lanes&t)&&(ys=!0),e.firstContext=null)}function Pa(e){var t=e._currentValue;if(Ca!==e)if(e={context:e,memoizedValue:t,next:null},null===Ea){if(null===_a)throw Error(a(308));Ea=e,_a.dependencies={lanes:0,firstContext:e}}else Ea=Ea.next=e;return t}var La=null;function Na(e){null===La?La=[e]:La.push(e)}function Oa(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Na(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ra(e,r)}function Ra(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}var Ia=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ma(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 za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,2&Al){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ra(e,n)}return null===(o=r.interleaved)?(t.next=t,Na(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ra(e,n)}function $a(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}function Ua(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 Ha(e,t,n,r){var o=e.updateQueue;Ia=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,b=s;switch(p=t,f=n,b.tag){case 1:if("function"==typeof(h=b.payload)){d=h.call(f,d,p);break e}d=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(p="function"==typeof(h=b.payload)?h.call(f,d,p):h))break e;d=F({},d,p);break e;case 2:Ia=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Il|=i,e.lanes=i,e.memoizedState=d}}function Qa(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(a(191,o));o.call(r)}}}var Va={},qa=Eo(Va),Wa=Eo(Va),Ga=Eo(Va);function Ka(e){if(e===Va)throw Error(a(174));return e}function Za(e,t){switch(To(Ga,t),To(Wa,e),To(qa,Va),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(qa),To(qa,t)}function Ya(){Co(qa),Co(Wa),Co(Ga)}function Xa(e){Ka(Ga.current);var t=Ka(qa.current),n=le(t,e.type);t!==n&&(To(Wa,e),To(qa,n))}function Ja(e){Wa.current===e&&(Co(qa),Co(Wa))}var ei=Eo(0);function ti(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(128&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 ni=[];function ri(){for(var e=0;e<ni.length;e++)ni[e]._workInProgressVersionPrimary=null;ni.length=0}var oi=w.ReactCurrentDispatcher,ai=w.ReactCurrentBatchConfig,ii=0,si=null,li=null,ci=null,ui=!1,di=!1,pi=0,fi=0;function hi(){throw Error(a(321))}function bi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function mi(e,t,n,r,o,i){if(ii=i,si=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,oi.current=null===e||null===e.memoizedState?Ji:es,e=n(r,o),di){i=0;do{if(di=!1,pi=0,25<=i)throw Error(a(301));i+=1,ci=li=null,t.updateQueue=null,oi.current=ts,e=n(r,o)}while(di)}if(oi.current=Xi,t=null!==li&&null!==li.next,ii=0,ci=li=si=null,ui=!1,t)throw Error(a(300));return e}function gi(){var e=0!==pi;return pi=0,e}function vi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ci?si.memoizedState=ci=e:ci=ci.next=e,ci}function yi(){if(null===li){var e=si.alternate;e=null!==e?e.memoizedState:null}else e=li.next;var t=null===ci?si.memoizedState:ci.next;if(null!==t)ci=t,li=e;else{if(null===e)throw Error(a(310));e={memoizedState:(li=e).memoizedState,baseState:li.baseState,baseQueue:li.baseQueue,queue:li.queue,next:null},null===ci?si.memoizedState=ci=e:ci=ci.next=e}return ci}function wi(e,t){return"function"==typeof t?t(e):t}function ki(e){var t=yi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=li,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((ii&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,si.lanes|=d,Il|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ys=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,si.lanes|=i,Il|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function xi(e){var t=yi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ys=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Si(){}function _i(e,t){var n=si,r=yi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ys=!0),r=r.queue,Ii(Ti.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==ci&&1&ci.memoizedState.tag){if(n.flags|=2048,Pi(9,Ci.bind(null,n,r,o,t),void 0,null),null===Dl)throw Error(a(349));30&ii||Ei(n,t,o)}return o}function Ei(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ci(e,t,n,r){t.value=n,t.getSnapshot=r,Ai(t)&&Di(e)}function Ti(e,t,n){return n((function(){Ai(t)&&Di(e)}))}function Ai(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Di(e){var t=Ra(e,1);null!==t&&nc(t,e,1,-1)}function ji(e){var t=vi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wi,lastRenderedState:e},t.queue=e,e=e.dispatch=Gi.bind(null,si,e),[t.memoizedState,e]}function Pi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.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 Li(){return yi().memoizedState}function Ni(e,t,n,r){var o=vi();si.flags|=e,o.memoizedState=Pi(1|t,n,void 0,void 0===r?null:r)}function Oi(e,t,n,r){var o=yi();r=void 0===r?null:r;var a=void 0;if(null!==li){var i=li.memoizedState;if(a=i.destroy,null!==r&&bi(r,i.deps))return void(o.memoizedState=Pi(t,n,a,r))}si.flags|=e,o.memoizedState=Pi(1|t,n,a,r)}function Ri(e,t){return Ni(8390656,8,e,t)}function Ii(e,t){return Oi(2048,8,e,t)}function Fi(e,t){return Oi(4,2,e,t)}function Mi(e,t){return Oi(4,4,e,t)}function zi(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 Bi(e,t,n){return n=null!=n?n.concat([e]):null,Oi(4,4,zi.bind(null,t,e),n)}function $i(){}function Ui(e,t){var n=yi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&bi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Hi(e,t){var n=yi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&bi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Qi(e,t,n){return 21&ii?(sr(n,t)||(n=bt(),si.lanes|=n,Il|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,ys=!0),e.memoizedState=n)}function Vi(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var r=ai.transition;ai.transition={};try{e(!1),t()}finally{yt=n,ai.transition=r}}function qi(){return yi().memoizedState}function Wi(e,t,n){var r=tc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ki(e))Zi(t,n);else if(null!==(n=Oa(e,t,n,r))){nc(n,e,r,ec()),Yi(n,t,r)}}function Gi(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ki(e))Zi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Na(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Oa(e,t,o,r))&&(nc(n,e,r,o=ec()),Yi(n,t,r))}}function Ki(e){var t=e.alternate;return e===si||null!==t&&t===si}function Zi(e,t){di=ui=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Yi(e,t,n){if(4194240&n){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}var Xi={readContext:Pa,useCallback:hi,useContext:hi,useEffect:hi,useImperativeHandle:hi,useInsertionEffect:hi,useLayoutEffect:hi,useMemo:hi,useReducer:hi,useRef:hi,useState:hi,useDebugValue:hi,useDeferredValue:hi,useTransition:hi,useMutableSource:hi,useSyncExternalStore:hi,useId:hi,unstable_isNewReconciler:!1},Ji={readContext:Pa,useCallback:function(e,t){return vi().memoizedState=[e,void 0===t?null:t],e},useContext:Pa,useEffect:Ri,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ni(4194308,4,zi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ni(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ni(4,2,e,t)},useMemo:function(e,t){var n=vi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=vi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Wi.bind(null,si,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},vi().memoizedState=e},useState:ji,useDebugValue:$i,useDeferredValue:function(e){return vi().memoizedState=e},useTransition:function(){var e=ji(!1),t=e[0];return e=Vi.bind(null,e[1]),vi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=si,o=vi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Dl)throw Error(a(349));30&ii||Ei(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Ri(Ti.bind(null,r,i,e),[e]),r.flags|=2048,Pi(9,Ci.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=vi(),t=Dl.identifierPrefix;if(aa){var n=Xo;t=":"+t+"R"+(n=(Yo&~(1<<32-it(Yo)-1)).toString(32)+n),0<(n=pi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=fi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},es={readContext:Pa,useCallback:Ui,useContext:Pa,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:Hi,useReducer:ki,useRef:Li,useState:function(){return ki(wi)},useDebugValue:$i,useDeferredValue:function(e){return Qi(yi(),li.memoizedState,e)},useTransition:function(){return[ki(wi)[0],yi().memoizedState]},useMutableSource:Si,useSyncExternalStore:_i,useId:qi,unstable_isNewReconciler:!1},ts={readContext:Pa,useCallback:Ui,useContext:Pa,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:Hi,useReducer:xi,useRef:Li,useState:function(){return xi(wi)},useDebugValue:$i,useDeferredValue:function(e){var t=yi();return null===li?t.memoizedState=e:Qi(t,li.memoizedState,e)},useTransition:function(){return[xi(wi)[0],yi().memoizedState]},useMutableSource:Si,useSyncExternalStore:_i,useId:qi,unstable_isNewReconciler:!1};function ns(e,t){if(e&&e.defaultProps){for(var n in t=F({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}function rs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:F({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var os={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=za(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ba(e,o,r))&&(nc(t,e,r,n),$a(t,e,r))}};function as(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function is(e,t,n){var r=!1,o=Ao,a=t.contextType;return"object"==typeof a&&null!==a?a=Pa(a):(o=No(t)?Po:Do.current,a=(r=null!=(r=t.contextTypes))?Lo(e,o):Ao),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=os,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function ss(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&&os.enqueueReplaceState(t,t.state,null)}function ls(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs={},Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Pa(a):(a=No(t)?Po:Do.current,o.context=Lo(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(rs(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&&os.enqueueReplaceState(o,o.state,null),Ha(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function cs(e,t){try{var n="",r=t;do{n+=$(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,digest:null}}function us(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ds(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function fs(e,t,n){(n=za(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ql||(Ql=!0,Vl=r),ds(0,t)},n}function hs(e,t,n){(n=za(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ds(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ds(0,t),"function"!=typeof r&&(null===ql?ql=new Set([this]):ql.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function bs(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ps;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Ec.bind(null,e,t,n),t.then(e,e))}function ms(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function gs(e,t,n,r,o){return 1&e.mode?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=za(-1,1)).tag=2,Ba(n,t,1))),n.lanes|=1),e)}var vs=w.ReactCurrentOwner,ys=!1;function ws(e,t,n,r){t.child=null===e?xa(t,null,n,r):ka(t,e.child,n,r)}function ks(e,t,n,r,o){n=n.render;var a=t.ref;return ja(t,o),r=mi(e,t,n,r,a,o),n=gi(),null===e||ys?(aa&&n&&ta(t),t.flags|=1,ws(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Qs(e,t,o))}function xs(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Lc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Ss(e,t,a,r,o))}if(a=e.child,!(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Qs(e,t,o)}return t.flags|=1,(e=Nc(a,r)).ref=t.ref,e.return=t,t.child=e}function Ss(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ys=!1,t.pendingProps=r=a,!(e.lanes&o))return t.lanes=e.lanes,Qs(e,t,o);131072&e.flags&&(ys=!0)}}return Cs(e,t,n,r,o)}function _s(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(1&t.mode){if(!(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,To(Nl,Ll),Ll|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,To(Nl,Ll),Ll|=r}else t.memoizedState={baseLanes:0,cachePool:null,transitions:null},To(Nl,Ll),Ll|=n;else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,To(Nl,Ll),Ll|=r;return ws(e,t,o,n),t.child}function Es(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Cs(e,t,n,r,o){var a=No(n)?Po:Do.current;return a=Lo(t,a),ja(t,o),n=mi(e,t,n,r,a,o),r=gi(),null===e||ys?(aa&&r&&ta(t),t.flags|=1,ws(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Qs(e,t,o))}function Ts(e,t,n,r,o){if(No(n)){var a=!0;Fo(t)}else a=!1;if(ja(t,o),null===t.stateNode)Hs(e,t),is(t,n,r),ls(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=Pa(c):c=Lo(t,c=No(n)?Po:Do.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)&&ss(t,i,r,c),Ia=!1;var p=t.memoizedState;i.state=p,Ha(t,r,i,o),l=t.memoizedState,s!==r||p!==l||jo.current||Ia?("function"==typeof u&&(rs(t,n,u,r),l=t.memoizedState),(s=Ia||as(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|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Ma(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ns(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Pa(l):l=Lo(t,l=No(n)?Po:Do.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)&&ss(t,i,r,l),Ia=!1,p=t.memoizedState,i.state=p,Ha(t,r,i,o);var h=t.memoizedState;s!==d||p!==h||jo.current||Ia?("function"==typeof f&&(rs(t,n,f,r),h=t.memoizedState),(c=Ia||as(t,n,c,r,p,h,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("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|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,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|=1024),r=!1)}return As(e,t,n,r,a,o)}function As(e,t,n,r,o,a){Es(e,t);var i=!!(128&t.flags);if(!r&&!i)return o&&Mo(t,n,!1),Qs(e,t,a);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=ka(t,e.child,null,a),t.child=ka(t,null,s,a)):ws(e,t,s,a),t.memoizedState=r.state,o&&Mo(t,n,!0),t.child}function Ds(e){var t=e.stateNode;t.pendingContext?Ro(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ro(0,t.context,!1),Za(e,t.containerInfo)}function js(e,t,n,r,o){return ha(),ba(o),t.flags|=256,ws(e,t,n,r),t.child}var Ps,Ls,Ns,Os,Rs={dehydrated:null,treeContext:null,retryLane:0};function Is(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fs(e,t,n){var r,o=t.pendingProps,i=ei.current,s=!1,l=!!(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&!!(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),To(ei,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(1&t.mode?"$!"===e.data?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},1&o||null===s?s=Ic(l,o,0,null):(s.childLanes=0,s.pendingProps=l),e=Rc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Is(n),t.memoizedState=Rs,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=us(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Rc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,1&t.mode&&ka(t,e.child,null,s),t.child.memoizedState=Is(s),t.memoizedState=Rs,i);if(!(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=us(i=Error(a(419)),r,void 0))}if(l=!!(s&e.childLanes),ys||l){if(null!==(r=Dl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=o&(r.suspendedLanes|s)?0:o)&&o!==i.retryLane&&(i.retryLane=o,Ra(e,o),nc(r,e,o,-1))}return bc(),zs(e,t,s,r=us(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Go[Ko++]=Yo,Go[Ko++]=Xo,Go[Ko++]=Zo,Yo=e.id,Xo=e.overflow,Zo=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 1&l||t.child===i?(o=Nc(i,c)).subtreeFlags=14680064&i.subtreeFlags:((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null),null!==r?s=Nc(r,s):(s=Rc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Is(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Rs,o}return e=(s=e.child).sibling,o=Nc(s,{mode:"visible",children:o.children}),!(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ba(r),ka(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Da(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Us(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(ws(e,t,r.children,n),2&(r=ei.current))r=1&r|2,t.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);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(To(ei,r),1&t.mode)switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ti(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ti(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}else t.memoizedState=null;return t.child}function Hs(e,t){!(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Qs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Il|=t.lanes,!(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Nc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Nc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vs(e,t){if(!aa)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 qs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ws(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qs(t),null;case 1:case 17:return No(t.type)&&Oo(),qs(t),null;case 3:return r=t.stateNode,Ya(),Co(jo),Co(Do),ri(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&!(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),Ls(e,t),qs(t),null;case 5:Ja(t);var o=Ka(Ga.current);if(n=t.type,null!==e&&null!=t.stateNode)Ns(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return qs(t),null}if(e=Ka(qa.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[ho]=i,e=!!(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o<Rr.length;o++)zr(Rr[o],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":Z(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":oe(r,i),zr("invalid",r)}for(var l in ve(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":q(r),J(r,i,!0);break;case"textarea":q(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[ho]=r,Ps(e,t,!1,!1),t.stateNode=e;e:{switch(l=ye(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Rr.length;o++)zr(Rr[o],e);o=r;break;case"source":zr("error",e),o=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),o=r;break;case"details":zr("toggle",e),o=r;break;case"input":Z(e,r),o=K(e,r),zr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=F({},r,{value:void 0}),zr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),zr("invalid",e)}for(i in ve(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?me(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&zr("scroll",e):null!=u&&y(e,i,u,l))}switch(n){case"input":q(e),J(e,r,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return qs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=Ka(Ga.current),Ka(qa.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Xr(r.nodeValue,n,!!(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,!!(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return qs(t),null;case 13:if(Co(ei),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&1&t.mode&&!(128&t.flags))fa(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ha(),!(128&t.flags)&&(t.memoizedState=null),t.flags|=4;qs(t),i=!1}else null!==ia&&(ic(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 128&t.flags?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,1&t.mode&&(null===e||1&ei.current?0===Ol&&(Ol=3):bc())),null!==t.updateQueue&&(t.flags|=4),qs(t),null);case 4:return Ya(),Ls(e,t),null===e&&Ur(t.stateNode.containerInfo),qs(t),null;case 10:return Aa(t.type._context),qs(t),null;case 19:if(Co(ei),null===(i=t.memoizedState))return qs(t),null;if(r=!!(128&t.flags),null===(l=i.rendering))if(r)Vs(i,!1);else{if(0!==Ol||null!==e&&128&e.flags)for(e=t.child;null!==e;){if(null!==(l=ti(e))){for(t.flags|=128,Vs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return To(ei,1&ei.current|2),t.child}e=e.sibling}null!==i.tail&&Ye()>Ul&&(t.flags|=128,r=!0,Vs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ti(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return qs(t),null}else 2*Ye()-i.renderingStartTime>Ul&&1073741824!==n&&(t.flags|=128,r=!0,Vs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ye(),t.sibling=null,n=ei.current,To(ei,r?1&n|2:1&n),t):(qs(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&1&t.mode?!!(1073741824&Ll)&&(qs(t),6&t.subtreeFlags&&(t.flags|=8192)):qs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Gs(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Oo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return Ya(),Co(jo),Co(Do),ri(),65536&(e=t.flags)&&!(128&e)?(t.flags=-65537&e|128,t):null;case 5:return Ja(t),null;case 13:if(Co(ei),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(ei),null;case 4:return Ya(),null;case 10:return Aa(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Ps=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}},Ls=function(){},Ns=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Ka(qa.current);var a,i=null;switch(n){case"input":o=K(e,o),r=K(e,r),i=[];break;case"select":o=F({},o,{value:void 0}),r=F({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ve(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Os=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ks=!1,Zs=!1,Ys="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function el(e,t,n){try{n()}catch(r){_c(e,t,r)}}var tl=!1;function nl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&el(t,n,a)}o=o.next}while(o!==r)}}function rl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function al(e){var t=e.alternate;null!==t&&(e.alternate=null,al(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[ho],delete t[mo],delete t[go],delete t[vo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,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=Jr));else if(4!==r&&null!==(e=e.child))for(ll(e,t,n),e=e.sibling;null!==e;)ll(e,t,n),e=e.sibling}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}var ul=null,dl=!1;function pl(e,t,n){for(n=n.child;null!==n;)fl(e,t,n),n=n.sibling}function fl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Zs||Js(n,t);case 6:var r=ul,o=dl;ul=null,pl(e,t,n),dl=o,null!==(ul=r)&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):ul.removeChild(n.stateNode));break;case 18:null!==ul&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),Ut(e)):lo(ul,n.stateNode));break;case 4:r=ul,o=dl,ul=n.stateNode.containerInfo,dl=!0,pl(e,t,n),ul=r,dl=o;break;case 0:case 11:case 14:case 15:if(!Zs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(2&a||4&a)&&el(n,t,i),o=o.next}while(o!==r)}pl(e,t,n);break;case 1:if(!Zs&&(Js(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_c(n,t,s)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Zs=(r=Zs)||null!==n.memoizedState,pl(e,t,n),Zs=r):pl(e,t,n);break;default:pl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ys),t.forEach((function(t){var r=Ac.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function bl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,dl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,dl=!0;break e}l=l.return}if(null===ul)throw Error(a(160));fl(i,s,o),ul=null,dl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){_c(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)ml(t,e),t=t.sibling}function ml(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(bl(t,e),gl(e),4&r){try{nl(3,e,e.return),rl(3,e)}catch(m){_c(e,e.return,m)}try{nl(5,e,e.return)}catch(m){_c(e,e.return,m)}}break;case 1:bl(t,e),gl(e),512&r&&null!==n&&Js(n,n.return);break;case 5:if(bl(t,e),gl(e),512&r&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(m){_c(e,e.return,m)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&Y(o,i),ye(l,s);var u=ye(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?me(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):y(o,d,p,u)}switch(l){case"input":X(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var h=i.value;null!=h?ne(o,!!i.multiple,h,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(m){_c(e,e.return,m)}}break;case 6:if(bl(t,e),gl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(m){_c(e,e.return,m)}}break;case 3:if(bl(t,e),gl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(m){_c(e,e.return,m)}break;case 4:default:bl(t,e),gl(e);break;case 13:bl(t,e),gl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Ye())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Zs=(u=Zs)||d,bl(t,e),Zs=u):bl(t,e),gl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&1&e.mode)for(Xs=e,d=e.child;null!==d;){for(p=Xs=d;null!==Xs;){switch(h=(f=Xs).child,f.tag){case 0:case 11:case 14:case 15:nl(4,f,f.return);break;case 1:Js(f,f.return);var b=f.stateNode;if("function"==typeof b.componentWillUnmount){r=f,n=f.return;try{t=r,b.props=t.memoizedProps,b.state=t.memoizedState,b.componentWillUnmount()}catch(m){_c(r,n,m)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==h?(h.return=f,Xs=h):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=be("display",s))}catch(m){_c(e,e.return,m)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(m){_c(e,e.return,m)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:bl(t,e),gl(e),4&r&&hl(e);case 21:}}function gl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),cl(e,sl(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;ll(e,sl(e),i);break;default:throw Error(a(161))}}catch(s){_c(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Xs=e,yl(e,t,n)}function yl(e,t,n){for(var r=!!(1&e.mode);null!==Xs;){var o=Xs,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Ks;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Zs;s=Ks;var c=Zs;if(Ks=i,(Zs=l)&&!c)for(Xs=o;null!==Xs;)l=(i=Xs).child,22===i.tag&&null!==i.memoizedState?xl(o):null!==l?(l.return=i,Xs=l):xl(o);for(;null!==a;)Xs=a,yl(a,t,n),a=a.sibling;Xs=o,Ks=s,Zs=c}wl(e)}else 8772&o.subtreeFlags&&null!==a?(a.return=o,Xs=a):wl(e)}}function wl(e){for(;null!==Xs;){var t=Xs;if(8772&t.flags){var n=t.alternate;try{if(8772&t.flags)switch(t.tag){case 0:case 11:case 15:Zs||rl(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Zs)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ns(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Qa(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Qa(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(a(163))}Zs||512&t.flags&&ol(t)}catch(f){_c(t,t.return,f)}}if(t===e){Xs=null;break}if(null!==(n=t.sibling)){n.return=t.return,Xs=n;break}Xs=t.return}}function kl(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Xs=n;break}Xs=t.return}}function xl(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{rl(4,t)}catch(l){_c(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){_c(t,o,l)}}var a=t.return;try{ol(t)}catch(l){_c(t,a,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){_c(t,i,l)}}}catch(l){_c(t,t.return,l)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var Sl,_l=Math.ceil,El=w.ReactCurrentDispatcher,Cl=w.ReactCurrentOwner,Tl=w.ReactCurrentBatchConfig,Al=0,Dl=null,jl=null,Pl=0,Ll=0,Nl=Eo(0),Ol=0,Rl=null,Il=0,Fl=0,Ml=0,zl=null,Bl=null,$l=0,Ul=1/0,Hl=null,Ql=!1,Vl=null,ql=null,Wl=!1,Gl=null,Kl=0,Zl=0,Yl=null,Xl=-1,Jl=0;function ec(){return 6&Al?Ye():-1!==Xl?Xl:Xl=Ye()}function tc(e){return 1&e.mode?2&Al&&0!==Pl?Pl&-Pl:null!==ma.transition?(0===Jl&&(Jl=bt()),Jl):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Zt(e.type):1}function nc(e,t,n,r){if(50<Zl)throw Zl=0,Yl=null,Error(a(185));gt(e,n,r),2&Al&&e===Dl||(e===Dl&&(!(2&Al)&&(Fl|=n),4===Ol&&sc(e,Pl)),rc(e,r),1===n&&0===Al&&!(1&t.mode)&&(Ul=Ye()+500,Bo&&Ho()))}function rc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?s&n&&!(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===Dl?Pl:0);if(0===r)null!==n&&Ge(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ge(n),1===t)0===e.tag?function(e){Bo=!0,Uo(e)}(lc.bind(null,e)):Uo(lc.bind(null,e)),io((function(){!(6&Al)&&Ho()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Dc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Xl=-1,Jl=0,6&Al)throw Error(a(327));var n=e.callbackNode;if(xc()&&e.callbackNode!==n)return null;var r=pt(e,e===Dl?Pl:0);if(0===r)return null;if(30&r||r&e.expiredLanes||t)t=mc(e,r);else{t=r;var o=Al;Al|=2;var i=hc();for(Dl===e&&Pl===t||(Hl=null,Ul=Ye()+500,pc(e,t));;)try{vc();break}catch(l){fc(e,l)}Ta(),El.current=i,Al=o,null!==jl?t=0:(Dl=null,Pl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(o=ht(e))&&(r=o,t=ac(e,o))),1===t)throw n=Rl,pc(e,0),sc(e,r),rc(e,Ye()),n;if(6===t)sc(e,r);else{if(o=e.current.alternate,!(30&r||function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)||(t=mc(e,r),2===t&&(i=ht(e),0!==i&&(r=i,t=ac(e,i))),1!==t)))throw n=Rl,pc(e,0),sc(e,r),rc(e,Ye()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,Bl,Hl);break;case 3:if(sc(e,r),(130023424&r)===r&&10<(t=$l+500-Ye())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,Bl,Hl),t);break}kc(e,Bl,Hl);break;case 4:if(sc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Ye()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,Bl,Hl),r);break}kc(e,Bl,Hl);break;default:throw Error(a(329))}}}return rc(e,Ye()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=mc(e,t))&&(t=Bl,Bl=n,null!==t&&ic(t)),e}function ic(e){null===Bl?Bl=e:Bl.push.apply(Bl,e)}function sc(e,t){for(t&=~Ml,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function lc(e){if(6&Al)throw Error(a(327));xc();var t=pt(e,0);if(!(1&t))return rc(e,Ye()),null;var n=mc(e,t);if(0!==e.tag&&2===n){var r=ht(e);0!==r&&(t=r,n=ac(e,r))}if(1===n)throw n=Rl,pc(e,0),sc(e,t),rc(e,Ye()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Bl,Hl),rc(e,Ye()),null}function cc(e,t){var n=Al;Al|=1;try{return e(t)}finally{0===(Al=n)&&(Ul=Ye()+500,Bo&&Ho())}}function uc(e){null!==Gl&&0===Gl.tag&&!(6&Al)&&xc();var t=Al;Al|=1;var n=Tl.transition,r=yt;try{if(Tl.transition=null,yt=1,e)return e()}finally{yt=r,Tl.transition=n,!(6&(Al=t))&&Ho()}}function dc(){Ll=Nl.current,Co(Nl)}function pc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Oo();break;case 3:Ya(),Co(jo),Co(Do),ri();break;case 5:Ja(r);break;case 4:Ya();break;case 13:case 19:Co(ei);break;case 10:Aa(r.type._context);break;case 22:case 23:dc()}n=n.return}if(Dl=e,jl=e=Nc(e.current,null),Pl=Ll=t,Ol=0,Rl=null,Ml=Fl=Il=0,Bl=zl=null,null!==La){for(t=0;t<La.length;t++)if(null!==(r=(n=La[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}La=null}return e}function fc(e,t){for(;;){var n=jl;try{if(Ta(),oi.current=Xi,ui){for(var r=si.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ui=!1}if(ii=0,ci=li=si=null,di=!1,pi=0,Cl.current=null,null===n||null===n.return){Ol=1,Rl=t,jl=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Pl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(!(1&d.mode||0!==p&&11!==p&&15!==p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var h=ms(s);if(null!==h){h.flags&=-257,gs(h,s,l,0,t),1&h.mode&&bs(i,u,t),c=u;var b=(t=h).updateQueue;if(null===b){var m=new Set;m.add(c),t.updateQueue=m}else b.add(c);break e}if(!(1&t)){bs(i,u,t),bc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var g=ms(s);if(null!==g){!(65536&g.flags)&&(g.flags|=256),gs(g,s,l,0,t),ba(cs(c,l));break e}}i=c=cs(c,l),4!==Ol&&(Ol=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,fs(0,c,t));break e;case 1:l=c;var v=i.type,y=i.stateNode;if(!(128&i.flags||"function"!=typeof v.getDerivedStateFromError&&(null===y||"function"!=typeof y.componentDidCatch||null!==ql&&ql.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}wc(n)}catch(w){t=w,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function hc(){var e=El.current;return El.current=Xi,null===e?Xi:e}function bc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===Dl||!(268435455&Il)&&!(268435455&Fl)||sc(Dl,Pl)}function mc(e,t){var n=Al;Al|=2;var r=hc();for(Dl===e&&Pl===t||(Hl=null,pc(e,t));;)try{gc();break}catch(o){fc(e,o)}if(Ta(),Al=n,El.current=r,null!==jl)throw Error(a(261));return Dl=null,Pl=0,Ol}function gc(){for(;null!==jl;)yc(jl)}function vc(){for(;null!==jl&&!Ke();)yc(jl)}function yc(e){var t=Sl(e.alternate,e,Ll);e.memoizedProps=e.pendingProps,null===t?wc(e):jl=t,Cl.current=null}function wc(e){var t=e;do{var n=t.alternate;if(e=t.return,32768&t.flags){if(null!==(n=Gs(n,t)))return n.flags&=32767,void(jl=n);if(null===e)return Ol=6,void(jl=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}else if(null!==(n=Ws(n,t,Ll)))return void(jl=n);if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Ol&&(Ol=5)}function kc(e,t,n){var r=yt,o=Tl.transition;try{Tl.transition=null,yt=1,function(e,t,n,r){do{xc()}while(null!==Gl);if(6&Al)throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Dl&&(jl=Dl=null,Pl=0),!(2064&n.subtreeFlags)&&!(2064&n.flags)||Wl||(Wl=!0,Dc(tt,(function(){return xc(),null}))),i=!!(15990&n.flags),!!(15990&n.subtreeFlags)||i){i=Tl.transition,Tl.transition=null;var s=yt;yt=1;var l=Al;Al|=4,Cl.current=null,function(e,t){if(eo=Qt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var h;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(h=p.firstChild);)f=p,p=h;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(h=p.nextSibling))break;f=(p=f).parentNode}p=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Qt=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,1028&t.subtreeFlags&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var b=t.alternate;if(1024&t.flags)switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==b){var m=b.memoizedProps,g=b.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:ns(t.type,m),g);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(k){_c(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}b=tl,tl=!1}(e,n),ml(n,e),hr(to),Qt=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ze(),Al=l,yt=s,Tl.transition=i}else e.current=n;if(Wl&&(Wl=!1,Gl=e,Kl=o),i=e.pendingLanes,0===i&&(ql=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,!(128&~e.current.flags))}catch(t){}}(n.stateNode),rc(e,Ye()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Ql)throw Ql=!1,e=Vl,Vl=null,e;!!(1&Kl)&&0!==e.tag&&xc(),i=e.pendingLanes,1&i?e===Yl?Zl++:(Zl=0,Yl=e):Zl=0,Ho()}(e,t,n,r)}finally{Tl.transition=o,yt=r}return null}function xc(){if(null!==Gl){var e=wt(Kl),t=Tl.transition,n=yt;try{if(Tl.transition=null,yt=16>e?16:e,null===Gl)var r=!1;else{if(e=Gl,Gl=null,Kl=0,6&Al)throw Error(a(331));var o=Al;for(Al|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(16&Xs.flags){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Xs=u;null!==Xs;){var d=Xs;switch(d.tag){case 0:case 11:case 15:nl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Xs=p;else for(;null!==Xs;){var f=(d=Xs).sibling,h=d.return;if(al(d),d===u){Xs=null;break}if(null!==f){f.return=h,Xs=f;break}Xs=h}}}var b=i.alternate;if(null!==b){var m=b.child;if(null!==m){b.child=null;do{var g=m.sibling;m.sibling=null,m=g}while(null!==m)}}Xs=i}}if(2064&i.subtreeFlags&&null!==s)s.return=i,Xs=s;else e:for(;null!==Xs;){if(2048&(i=Xs).flags)switch(i.tag){case 0:case 11:case 15:nl(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Xs=v;break e}Xs=i.return}}var y=e.current;for(Xs=y;null!==Xs;){var w=(s=Xs).child;if(2064&s.subtreeFlags&&null!==w)w.return=s,Xs=w;else e:for(s=y;null!==Xs;){if(2048&(l=Xs).flags)try{switch(l.tag){case 0:case 11:case 15:rl(9,l)}}catch(x){_c(l,l.return,x)}if(l===s){Xs=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Xs=k;break e}Xs=l.return}}if(Al=o,Ho(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(x){}r=!0}return r}finally{yt=n,Tl.transition=t}}return!1}function Sc(e,t,n){e=Ba(e,t=fs(0,t=cs(n,t),1),1),t=ec(),null!==e&&(gt(e,1,t),rc(e,t))}function _c(e,t,n){if(3===e.tag)Sc(e,e,n);else for(;null!==t;){if(3===t.tag){Sc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===ql||!ql.has(r))){t=Ba(t,e=hs(t,e=cs(n,e),1),1),e=ec(),null!==t&&(gt(t,1,e),rc(t,e));break}}t=t.return}}function Ec(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&n,Dl===e&&(Pl&n)===n&&(4===Ol||3===Ol&&(130023424&Pl)===Pl&&500>Ye()-$l?pc(e,0):Ml|=n),rc(e,t)}function Cc(e,t){0===t&&(1&e.mode?(t=ut,!(130023424&(ut<<=1))&&(ut=4194304)):t=1);var n=ec();null!==(e=Ra(e,t))&&(gt(e,t,n),rc(e,n))}function Tc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cc(e,n)}function Ac(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Cc(e,n)}function Dc(e,t){return We(e,t)}function jc(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.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pc(e,t,n,r){return new jc(e,t,n,r)}function Lc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Nc(e,t){var n=e.alternate;return null===n?((n=Pc(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.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,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 Oc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Lc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Rc(n.children,o,i,t);case _:s=8,o|=8;break;case E:return(e=Pc(12,n,t,2|o)).elementType=E,e.lanes=i,e;case D:return(e=Pc(13,n,t,o)).elementType=D,e.lanes=i,e;case j:return(e=Pc(19,n,t,o)).elementType=j,e.lanes=i,e;case N:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case A:s=11;break e;case P:s=14;break e;case L:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Pc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Rc(e,t,n,r){return(e=Pc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Pc(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Pc(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Pc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=mt(0),this.expirationTimes=mt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Pc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return Ao;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Io(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,s,l){return(e=Bc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=za(r=ec(),o=tc(n))).callback=null!=t?t:null,Ba(n,a,o),e.current.lanes=o,gt(e,o,r),rc(e,r),e}function Hc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=za(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ba(o,t,i))&&(nc(e,o,i,a),$a(e,o,i)),i}function Qc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function qc(e,t){Vc(e,t),(e=e.alternate)&&Vc(e,t)}Sl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||jo.current)ys=!0;else{if(!(e.lanes&n||128&t.flags))return ys=!1,function(e,t,n){switch(t.tag){case 3:Ds(t),ha();break;case 5:Xa(t);break;case 1:No(t.type)&&Fo(t);break;case 4:Za(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;To(Sa,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(To(ei,1&ei.current),t.flags|=128,null):n&t.child.childLanes?Fs(e,t,n):(To(ei,1&ei.current),null!==(e=Qs(e,t,n))?e.sibling:null);To(ei,1&ei.current);break;case 19:if(r=!!(n&t.childLanes),128&e.flags){if(r)return Us(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),To(ei,ei.current),r)break;return null;case 22:case 23:return t.lanes=0,_s(e,t,n)}return Qs(e,t,n)}(e,t,n);ys=!!(131072&e.flags)}else ys=!1,aa&&1048576&t.flags&&ea(t,Wo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Hs(e,t),e=t.pendingProps;var o=Lo(t,Do.current);ja(t,n),o=mi(null,t,r,e,o,n);var i=gi();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(r)?(i=!0,Fo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Fa(t),o.updater=os,t.stateNode=o,o._reactInternals=t,ls(t,r,e,n),t=As(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),ws(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Hs(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Lc(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===P)return 14}return 2}(r),e=ns(r,e),o){case 0:t=Cs(null,t,r,e,n);break e;case 1:t=Ts(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=xs(null,t,r,ns(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Cs(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ts(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 3:e:{if(Ds(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Ma(e,t),Ha(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=js(e,t,r,n,o=cs(Error(a(423)),t));break e}if(r!==o){t=js(e,t,r,n,o=cs(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=xa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=Qs(e,t,n);break e}ws(e,t,r,n)}t=t.child}return t;case 5:return Xa(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),Es(e,t),ws(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Fs(e,t,n);case 4:return Za(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ka(t,null,r,n):ws(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ks(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 7:return ws(e,t,t.pendingProps,n),t.child;case 8:case 12:return ws(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,To(Sa,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!jo.current){t=Qs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=za(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),Da(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),Da(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ws(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,ja(t,n),r=r(o=Pa(o)),t.flags|=1,ws(e,t,r,n),t.child;case 14:return o=ns(r=t.type,t.pendingProps),xs(e,t,r,o=ns(r.type,o),n);case 15:return Ss(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ns(r,o),Hs(e,t),t.tag=1,No(r)?(e=!0,Fo(t)):e=!1,ja(t,n),is(t,r,o),ls(t,r,o,n),As(null,t,r,!0,e,n);case 19:return Us(e,t,n);case 22:return _s(e,t,n)}throw Error(a(156,t.tag))};var Wc="function"==typeof reportError?reportError:function(e){console.error(e)};function Gc(e){this._internalRoot=e}function Kc(e){this._internalRoot=e}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Yc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Xc(){}function Jc(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Qc(i);s.call(e)}}Hc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Qc(i);a.call(e)}}var i=Uc(t,r,e,0,null,!1,0,"",Xc);return e._reactRootContainer=i,e[bo]=i.current,Ur(8===e.nodeType?e.parentNode:e),uc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Qc(l);s.call(e)}}var l=Bc(e,0,!1,null,0,!1,0,"",Xc);return e._reactRootContainer=l,e[bo]=l.current,Ur(8===e.nodeType?e.parentNode:e),uc((function(){Hc(t,l,n,r)})),l}(n,t,e,o,r);return Qc(i)}Kc.prototype.render=Gc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Hc(e,t,null,null)},Kc.prototype.unmount=Gc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){Hc(null,e,null,null)})),t[bo]=null}},Kc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Nt.length&&0!==t&&t<Nt[n].priority;n++);Nt.splice(n,0,e),0===n&&Ft(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),rc(t,Ye()),!(6&Al)&&(Ul=Ye()+500,Ho()))}break;case 13:uc((function(){var t=Ra(e,1);if(null!==t){var n=ec();nc(t,e,1,n)}})),qc(e,1)}},xt=function(e){if(13===e.tag){var t=Ra(e,134217728);if(null!==t)nc(t,e,134217728,ec());qc(e,134217728)}},St=function(e){if(13===e.tag){var t=tc(e),n=Ra(e,t);if(null!==n)nc(n,e,t,ec());qc(e,t)}},_t=function(){return yt},Et=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},xe=function(e,t,n){switch(t){case"input":if(X(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=xo(r);if(!o)throw Error(a(90));W(r),X(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ae=cc,De=uc;var eu={usingClientEntryPoint:!1,Events:[wo,ko,xo,Ce,Te,cc]},tu={findFiberByHostInstance:yo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},nu={bundleType:tu.bundleType,version:tu.version,rendererPackageName:tu.rendererPackageName,rendererConfig:tu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ve(e))?null:e.stateNode},findFiberByHostInstance:tu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ru=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ru.isDisabled&&ru.supportsFiber)try{ot=ru.inject(nu),at=ru}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Zc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Zc(e))throw Error(a(299));var n=!1,r="",o=Wc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Bc(e,1,!1,null,0,n,0,r,o),e[bo]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Gc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=Ve(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,n){if(!Yc(t))throw Error(a(200));return Jc(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Zc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Wc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Uc(t,null,e,1,null!=n?n:null,o,0,i,s),e[bo]=t.current,Ur(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Kc(t)},t.render=function(e,t,n){if(!Yc(t))throw Error(a(200));return Jc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Yc(e))throw Error(a(40));return!!e._reactRootContainer&&(uc((function(){Jc(null,null,e,!1,(function(){e._reactRootContainer=null,e[bo]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Yc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return Jc(e,t,n,!1,r)},t.version="18.3.1-next-f1338f8080-20240426"},5338:(e,t,n)=>{"use strict";var r=n(40961);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},40961:(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(22551)},30115: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&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.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}}},80545:(e,t,n)=>{"use strict";n.d(t,{mg:()=>J,vd:()=>V});var r=n(96540),o=n(5556),a=n.n(o),i=n(30115),s=n.n(i),l=n(20311),c=n.n(l),u=n(2833),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,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function b(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 m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},g={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={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(m).map((function(e){return m[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=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},_=function(e){var t=S(e,m.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},C=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)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.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}),[])},A=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()},D=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},j=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}},L=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},N=[m.NOSCRIPT,m.SCRIPT,m.STYLE],O=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,"'")},R=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}),"")},I=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[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=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},M=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=I(n,o),[r.createElement(m.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=j(t);return o?"<"+e+' data-rh="true" '+o+">"+O(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+O(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return I(t)},toString:function(){return R(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+'="'+O(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},z=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 h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=P(e.metaTags,y),a=P(t,g),i=P(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(m.META,o.priority),F(m.LINK,a.priority),F(m.SCRIPT,i.priority))},toString:function(){return M(m.META,o.priority,r)+" "+M(m.LINK,a.priority,r)+" "+M(m.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=h.priorityMethods,u=h.linkTags,d=h.metaTags,p=h.scriptTags}return{priority:f,base:M(m.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(m.LINK,u,r),meta:M(m.META,d,r),noscript:M(m.NOSCRIPT,a,r),script:M(m.SCRIPT,p,r),style:M(m.STYLE,i,r),title:M(m.TITLE,{title:l,titleAttributes:c},r)}},B=[],$=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?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Q="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=Q,V.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var q=function(e,t){var n,r=document.head||document.querySelector(m.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}},W=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(","))}},G=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;W(m.BODY,e.bodyAttributes),W(m.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=j(e)),W(m.TITLE,t)}(u,d);var p={baseTag:q(m.BASE,n),linkTags:q(m.LINK,o),metaTags:q(m.META,a),noscriptTags:q(m.NOSCRIPT,i),scriptTags:q(m.SCRIPT,l),styleTags:q(m.STYLE,c)},f={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),s(e,f,h)},K=null,Z=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:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:A(m.LINK,["rel","href"],e),metaTags:A(m.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(m.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:A(m.SCRIPT,["src","innerHTML"],e),styleTags:A(m.STYLE,["cssText"],e),title:_(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:D(e,"prioritizeSeoTags")});V.canUseDOM?(t=a,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){G(t,(function(){K=null}))})):(G(t),K=null)):z&&(o=z(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);Z.propTypes={context:H.isRequired},Z.displayName="HelmetDispatcher";var Y=["children"],X=["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()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:t};case m.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 m.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case m.BODY:return p({},o,{bodyAttributes:p({},a)});case m.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=b(r,Y),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case m.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.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=b(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Z,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Z,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"},22799:(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,h=n?Symbol.for("react.suspense_list"):60120,b=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,g=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(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 m:case b:case l:return e;default:return t}}case o:return t}}}function x(e){return k(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=m,t.Memo=b,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===m},t.isMemo=function(e){return k(e)===b},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===b||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===g)},t.typeOf=k},44363:(e,t,n)=>{"use strict";e.exports=n(22799)},53259:(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(96540),l=[],c=[];var u=s.createContext(null);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 h(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),b=null;function m(){return b||(b=e(h.loader)),b.promise}return l.push(m),"function"==typeof h.webpack&&c.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return m()})),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}),b=e(h.loader),r._loadModule()})),m(),r.state={error:b.error,pastDelay:!1,timedOut:!1,loading:b.loading,loaded:b.loaded},r}r(n,t),n.preload=function(){return m()};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&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.report(t)})),b.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:b.error,loaded:b.loaded,loading:b.loading}),e._clearTimeouts()};b.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(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextType",u),p}function b(e){return h(d,e)}b.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(p,e)};var m=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return s.createElement(u.Provider,{value:{report:this.props.report}},s.Children.only(this.props.children))},t}(s.Component);function g(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return g(e)}))}b.Capture=m,b.preloadAll=function(){return new Promise((function(e,t){g(l).then(e,t)}))},b.preloadReady=function(){return new Promise((function(e,t){g(c).then(e,e)}))},e.exports=b},22831:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,v:()=>s});var r=n(56347),o=n(58168),a=n(96540);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.B6)(t,e):n.length?n[n.length-1].match:r.Ix.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.dO,n,e.map((function(e,n){return a.createElement(r.qh,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.A)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.A)({},n,t,{route:e}))}})}))):null}},54625:(e,t,n)=>{"use strict";n.d(t,{I9:()=>d,Kd:()=>u,N_:()=>g,k2:()=>w});var r=n(56347),o=n(42892),a=n(96540),i=n(31513),s=n(58168),l=n(98587),c=n(11561),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.zR)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var d=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.TM)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var p=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.yJ)(e,null,null,t):e},h=function(e){return e},b=a.forwardRef;void 0===b&&(b=h);var m=b((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.A)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.A)({},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=h!==b&&t||n,a.createElement("a",u)}));var g=b((function(e,t){var n=e.component,o=void 0===n?m:n,u=e.replace,d=e.to,g=e.innerRef,v=(0,l.A)(e,["component","replace","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,(function(e){e||(0,c.A)(!1);var n=e.history,r=f(p(d,e.location),e.location),l=r?n.createHref(r):"",m=(0,s.A)({},v,{href:l,navigate:function(){var t=p(d,e.location),r=(0,i.AO)(e.location)===(0,i.AO)(f(t));(u||r?n.replace:n.push)(t)}});return h!==b?m.ref=t||g:m.innerRef=g,a.createElement(o,m)}))})),v=function(e){return e},y=a.forwardRef;void 0===y&&(y=v);var w=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,h=e.className,b=e.exact,m=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,_=e.to,E=e.innerRef,C=(0,l.A)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,(function(e){e||(0,c.A)(!1);var n=w||e.location,i=f(p(_,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.B6)(n.pathname,{path:T,exact:b,sensitive:k,strict:x}):null,D=!!(m?m(A,n):A),j="function"==typeof h?h(D):h,P="function"==typeof S?S(D):S;D&&(j=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(" ")}(j,u),P=(0,s.A)({},P,d));var L=(0,s.A)({"aria-current":D&&o||null,className:j,style:P,to:i},C);return v!==y?L.ref=t||E:L.innerRef=E,a.createElement(g,L)}))}))},56347:(e,t,n)=>{"use strict";n.d(t,{B6:()=>S,Ix:()=>y,W6:()=>L,XZ:()=>v,dO:()=>j,qh:()=>_,zy:()=>N});var r=n(42892),o=n(96540),a=n(5556),i=n.n(a),s=n(31513),l=n(11561),c=n(58168),u=n(35302),d=n.n(u),p=(n(44363),n(98587)),f=(n(4146),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var b=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[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.A)(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|e.observedBits)&n&&e.setState({value:e.getValue()})},e}(0,r.A)(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}},m=function(e){var t=b();return t.displayName=e,t},g=m("Router-History"),v=m("Router"),y=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.A)(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(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(g.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,x=0;function S(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=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return x<k&&(r[e]=a,x++),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 _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,l.A)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.A)({},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(v.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 E(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,c.A)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.AO)(e)}function A(e){return function(){(0,l.A)(!1)}}function D(){}o.Component;var j=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,l.A)(!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?S(a.pathname,(0,c.A)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var P=o.useContext;function L(){return P(g)}function N(){return P(v).location}},21020:(e,t,n)=>{"use strict";var r=n(96540),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},15287:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var w=y.prototype=new v;w.constructor=y,b(w,g.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,o)&&!_.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;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(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function A(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 D(e,t,o,a,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 n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+A(l,0):a,k(i)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),D(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",k(e))for(var c=0;c<e.length;c++){var u=a+A(s=e[c],c);l+=D(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=D(s=s.value,t,o,u=a+A(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function j(e,t,n){if(null==e)return e;var r=[],o=0;return D(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function P(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var L={current:null},N={transition:null},O={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:N,ReactCurrentOwner:S};function R(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:j,forEach:function(e,t,n){j(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return j(e,(function(){t++})),t},toArray:function(e){return j(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=O,t.act=R,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=b({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=R,t.useCallback=function(e,t){return L.current.useCallback(e,t)},t.useContext=function(e){return L.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return L.current.useDeferredValue(e)},t.useEffect=function(e,t){return L.current.useEffect(e,t)},t.useId=function(){return L.current.useId()},t.useImperativeHandle=function(e,t,n){return L.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return L.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return L.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return L.current.useMemo(e,t)},t.useReducer=function(e,t,n){return L.current.useReducer(e,t,n)},t.useRef=function(e){return L.current.useRef(e)},t.useState=function(e){return L.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return L.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return L.current.useTransition()},t.version="18.3.1"},96540:(e,t,n)=>{"use strict";e.exports=n(15287)},74848:(e,t,n)=>{"use strict";e.exports=n(21020)},7463:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}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}}var c=[],u=[],d=1,p=null,f=3,h=!1,b=!1,m=!1,g="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(m=!1,w(e),!b)if(null!==r(c))b=!0,N(x);else{var t=r(u);null!==t&&O(k,t.startTime-e)}}function x(e,n){b=!1,m&&(m=!1,v(C),C=-1),h=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!D());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&O(k,d.startTime-n),l=!1}return l}finally{p=null,f=a,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,_=!1,E=null,C=-1,T=5,A=-1;function D(){return!(t.unstable_now()-A<T)}function j(){if(null!==E){var e=t.unstable_now();A=e;var n=!0;try{n=E(!0,e)}finally{n?S():(_=!1,E=null)}}else _=!1}if("function"==typeof y)S=function(){y(j)};else if("undefined"!=typeof MessageChannel){var P=new MessageChannel,L=P.port2;P.port1.onmessage=j,S=function(){L.postMessage(null)}}else S=function(){g(j,0)};function N(e){E=e,_||(_=!0,S())}function O(e,n){C=g((function(){e(t.unstable_now())}),n)}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(){b||h||(b=!0,N(x))},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"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(m?(v(C),C=-1):m=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),b||h||(b=!0,N(x))),e},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},69982:(e,t,n)=>{"use strict";e.exports=n(7463)},2833: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}},4784:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Besu documentation",url:"https://besu.hyperledger.org",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon.svg",trailingSlash:!1,organizationName:"hyperledger",projectName:"besu-docs",deploymentBranch:"gh-pages",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},markdown:{mermaid:!0,format:"mdx",mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}},presets:[["classic",{docs:{breadcrumbs:!1,sidebarPath:"/home/runner/work/besu-docs/besu-docs/sidebars.js",editUrl:"https://github.com/hyperledger/besu-docs/tree/main/",path:"./docs",routeBasePath:"/",include:["**/*.md","**/*.mdx"],exclude:["**/_*.{js,jsx,ts,tsx,md,mdx}","**/_*/**","**/*.test.{js,jsx,ts,tsx}","**/__tests__/**"],showLastUpdateAuthor:!1,showLastUpdateTime:!0,includeCurrentVersion:!0},theme:{customCss:"/home/runner/work/besu-docs/besu-docs/src/css/custom.css"}}]],themeConfig:{colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!0},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:5},docs:{sidebar:{hideable:!0,autoCollapseCategories:!0},versionPersistence:"localStorage"},navbar:{logo:{alt:"Besu",src:"img/logo-reversed.svg",srcDark:"img/logo-reversed.svg",width:100},items:[{type:"docSidebar",sidebarId:"publicDocSidebar",docId:"index",position:"left",label:"Public networks"},{type:"docSidebar",sidebarId:"privateDocSidebar",docId:"index",position:"left",label:"Private networks"},{href:"/public-networks/chatbot",className:"header-chatbot-link",position:"right"},{href:"https://github.com/hyperledger/besu/",className:"header-github-link",position:"right"},{href:"https://discord.gg/hyperledger",className:"header-discord-link",position:"right"},{href:"https://twitter.com/HyperledgerBesu",className:"header-twitter-link",position:"right"}],hideOnScroll:!1},footer:{copyright:"Besu and its documentation are licensed under the Apache 2.0 license.",logo:{alt:"Besu logo",src:"img/logo.svg",srcDark:"img/logo-reversed.svg",href:"https://www.hyperledger.org/use/besu",width:250},links:[{title:"Public networks",items:[{label:"Introduction",to:"/public-networks"},{label:"How to guides",to:"/public-networks/how-to"},{label:"Concepts",to:"/public-networks/concepts"},{label:"Tutorials",to:"/public-networks/tutorials"},{label:"Reference",to:"/public-networks/reference"}]},{title:"Private networks",items:[{label:"Introduction",to:"/private-networks"},{label:"How to guides",to:"/private-networks/how-to"},{label:"Concepts",to:"/private-networks/concepts"},{label:"Tutorials",to:"/private-networks/tutorials"},{label:"Reference",to:"/private-networks/reference"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.gg/hyperledger"},{label:"Besu Wiki",href:"https://wiki.hyperledger.org/display/BESU/Hyperledger+Besu"},{label:"Besu Twitter",href:"https://twitter.com/HyperledgerBesu"},{label:"Besu GitHub",href:"https://github.com/hyperledger/besu/"},{label:"Besu documentation GitHub",href:"https://github.com/hyperledger/besu-docs"}]}],style:"light"},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)"}}]},additionalLanguages:["solidity","toml","java"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},mermaid:{options:{fontFamily:"arial, verdana, sans-serif;",wrap:!0,sequence:{diagramMarginX:25,diagramMarginY:25},flowchart:{diagramPadding:5,nodeSpacing:75}},theme:{dark:"dark",light:"default"}},languageTabs:[{highlight:"bash",language:"curl",logoClass:"bash"},{highlight:"python",language:"python",logoClass:"python"},{highlight:"go",language:"go",logoClass:"go"},{highlight:"javascript",language:"nodejs",logoClass:"nodejs"}],blog:{sidebar:{groupByYear:!0}},metadata:[]},plugins:[["@docusaurus/plugin-google-gtag",{trackingID:"G-KD07N5GM2B",anonymizeIP:!0}],["@docusaurus/plugin-google-tag-manager",{containerId:"GTM-THG37T4"}],["@docusaurus/plugin-client-redirects",{redirects:[{from:["/en/latest","/en/development","/latest","/development"],to:"/public-networks"},{from:"/public-networks/concepts/the-merge",to:"/public-networks/concepts/node-clients"},{from:"/public-networks/how-to/configuration-file",to:"/public-networks/how-to/configure-besu"},{from:"/public-networks/how-to/use-configuration-file",to:"/public-networks/how-to/configure-besu"},{from:"/private-networks/tutorials/permissioning/onchain",to:"/private-networks/how-to/use-permissioning/onchain"},{from:"/private-networks/tutorials/permissioning/upgrade-contracts",to:"/private-networks/how-to/use-permissioning/onchain"}]}]],themes:[["/home/runner/work/besu-docs/besu-docs/node_modules/@easyops-cn/docusaurus-search-local/dist/server/server/index.js",{hashed:!0,docsRouteBasePath:"/",indexBlog:!1}],"@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},scripts:[],headTags:[],stylesheets:[],clientModules:[],tagline:"",titleDelimiter:"|",noIndex:!1}},58168:(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)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}n.d(t,{A:()=>r})},42892:(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,{A:()=>o})},98587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}n.d(t,{A:()=>r})},18215:(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)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},15066:(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)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},78181:(e,t,n)=>{"use strict";n.d(t,{f4:()=>te,My:()=>C});var r=n(96540);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,h=Object.getOwnPropertyDescriptor,b=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertyNames,g=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))y.call(t,n)&&k(e,n,t[n]);if(g)for(var n of g(t))w.call(t,n)&&k(e,n,t[n]);return e},S=(e,t)=>f(e,b(t)),_=(e,t)=>{var n={};for(var r in e)y.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&g)for(var r of g(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},E=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=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};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return 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){for(var t=[],n=e.head.next;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 h=0;h<f.length;++h){if(d&&d.cause==p+","+h)return;var b=f[h],m=b.inside,g=!!b.lookbehind,v=!!b.greedy,y=b.alias;if(v&&!b.pattern.global){var w=b.pattern.toString().match(/[imsuy]*$/)[0];b.pattern=RegExp(b.pattern.source,w+"g")}for(var k=b.pattern||b,x=s.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var _=x.value;if(t.length>e.length)return;if(!(_ instanceof o)){var E,C=1;if(v){if(!(E=a(k,S,e,g))||E.index>=e.length)break;var T=E.index,A=E.index+E[0].length,D=S;for(D+=x.value.length;T>=D;)D+=(x=x.next).value.length;if(S=D-=x.value.length,x.value instanceof o)continue;for(var j=x;j!==t.tail&&(D<A||"string"==typeof j.value);j=j.next)C++,D+=j.value.length;C--,_=e.slice(S,D),E.index-=S}else if(!(E=a(k,0,_,g)))continue;T=E.index;var P=E[0],L=_.slice(0,T),N=_.slice(T+P.length),O=S+_.length;d&&O>d.reach&&(d.reach=O);var R=x.prev;if(L&&(R=l(t,R,L),S+=L.length),c(t,R,C),x=l(t,R,new o(p,m?r.tokenize(P,m):P,y,P)),N&&l(t,x,N),C>1){var I={cause:p+","+h,reach:O};i(e,t,n,x.prev,S,I),d&&I.reach>d.reach&&(d.reach=I.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}();t.exports=n,n.default=n}},function(){return s||(0,i[m(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of m(t))y.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(E());C.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"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.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:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.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:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.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}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.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:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.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:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.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:C.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"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.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")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],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"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),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,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(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("\\[(?:[^[\\]\"']|"+t.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":[t,{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}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{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|RebeccaPurple|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:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),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}(C),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,i=(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,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(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];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.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:C.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+/},C.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"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&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}return 1}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)}})),C.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(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,h,b,m,g=n[a];"string"==typeof g||"string"==typeof g.content?(i=d[c],-1!==(m=(b="string"==typeof g?g:g.content).indexOf(i))&&(++c,l=b.substring(0,m),h=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(h,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,h),f=b.substring(m+i.length),h=[],l&&h.push(l),h.push(p),f&&(t(b=[f]),h.push.apply(h,b)),"string"==typeof g?(n.splice.apply(n,[a,1].concat(h)),a+=h.length-1):g.content=h)):(m=g.content,Array.isArray(m)?t(m):t([m]))}}(l),new e.Token(i,l,"language-"+i,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 c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(C),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}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,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];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),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)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}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 s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.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|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.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},C.languages.c.string],char:C.languages.c.char,comment:C.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:C.languages.c}}}}),C.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 C.languages.c.boolean,C.languages.objectivec=C.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 C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.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/}),C.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 C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.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/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],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"])}(C),C.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:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python,C.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"}},C.languages.webmanifest=C.languages.json;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>A,duotoneLight:()=>D,github:()=>j,gruvboxMaterialDark:()=>W,gruvboxMaterialLight:()=>G,jettwaveDark:()=>H,jettwaveLight:()=>Q,nightOwl:()=>P,nightOwlLight:()=>L,oceanicNext:()=>R,okaidia:()=>I,oneDark:()=>V,oneLight:()=>q,palenight:()=>F,shadesOfPurple:()=>M,synthwave84:()=>z,ultramin:()=>B,vsDark:()=>$,vsLight:()=>U});var T={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)"}}]},A={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"}}]},D={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{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:"#896724"}}]},j={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"}}]},P={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},L={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},N="#c5a5c5",O="#8dc891",R={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:N}},{types:["attr-value"],style:{color:O}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:O}},{types:["punctuation"],style:{color:O}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:N}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},I={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},M={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},z={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},B={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},Q={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{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:"hsl(220, 14%, 71%)"}}]},q={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{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:"hsl(230, 8%, 24%)"}}]},W={plain:{color:"#ebdbb2",backgroundColor:"#292828"},styles:[{types:["imports","class-name","maybe-class-name","constant","doctype","builtin","function"],style:{color:"#d8a657"}},{types:["property-access"],style:{color:"#7daea3"}},{types:["tag"],style:{color:"#e78a4e"}},{types:["attr-name","char","url","regex"],style:{color:"#a9b665"}},{types:["attr-value","string"],style:{color:"#89b482"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#ea6962"}},{types:["entity","number","symbol"],style:{color:"#d3869b"}}]},G={plain:{color:"#654735",backgroundColor:"#f9f5d7"},styles:[{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#af2528"}},{types:["imports","class-name","maybe-class-name","constant","doctype","builtin"],style:{color:"#b4730e"}},{types:["string","attr-value"],style:{color:"#477a5b"}},{types:["property-access"],style:{color:"#266b79"}},{types:["function","attr-name","char","url"],style:{color:"#72761e"}},{types:["tag"],style:{color:"#b94c07"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["entity","number","symbol"],style:{color:"#924f79"}}]},K=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=x(x({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=S(x({},n),{backgroundColor:void 0}),r},Z=/\r\n|\r|\n/,Y=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)},X=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},J=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=X(c,u.type),u.alias&&(c=X(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(Z),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)Y(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return Y(s),l},ee=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(K(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(K(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=_(n,["className","style","line"]);const l=S(x({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=x(x({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=_(n,["token","className","style"]);const l=S(x({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=x(x({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return J([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),J(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},te=e=>(0,r.createElement)(ee,S(x({},e),{prism:e.prism||C,theme:e.theme||$,code:e.code,language:e.language}))},11561:(e,t,n)=>{"use strict";n.d(t,{A:()=>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)}}},31635:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>O,__assign:()=>a,__asyncDelegator:()=>E,__asyncGenerator:()=>_,__asyncValues:()=>C,__await:()=>S,__awaiter:()=>h,__classPrivateFieldGet:()=>P,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>L,__createBinding:()=>m,__decorate:()=>s,__disposeResources:()=>I,__esDecorate:()=>c,__exportStar:()=>g,__extends:()=>o,__generator:()=>b,__importDefault:()=>j,__importStar:()=>D,__makeTemplateObject:()=>T,__metadata:()=>f,__param:()=>l,__propKey:()=>d,__read:()=>y,__rest:()=>i,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>w,__spreadArray:()=>x,__spreadArrays:()=>k,__values:()=>v,default:()=>F});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function s(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var h={};for(var b in r)h[b]="access"===b?{}:r[b];for(var b in r.access)h.access[b]=r.access[b];h.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var m=(0,n[f])("accessor"===l?{get:d.get,set:d.set}:d[c],h);if("accessor"===l){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(s=i(m.get))&&(d.get=s),(s=i(m.set))&&(d.set=s),(s=i(m.init))&&o.unshift(s)}else(s=i(m))&&("field"===l?o.unshift(s):d[c]=s)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function h(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(t){a(t)}}function s(e){try{l(r.throw(e))}catch(t){a(t)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}function b(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(l){s=[6,l],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}var m=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function g(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||m(t,e,n)}function v(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function y(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(y(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,s=a.length;i<s;i++,o++)r[o]=a[i];return r}function x(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function S(e){return this instanceof S?(this.v=e,this):new S(e)}function _(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),i("next"),i("throw"),i("return",(function(e){return function(t){return Promise.resolve(t).then(e,c)}})),r[Symbol.asyncIterator]=function(){return this},r;function i(e,t){o[e]&&(r[e]=function(t){return new Promise((function(n,r){a.push([e,t,n,r])>1||s(e,t)}))},t&&(r[e]=t(r[e])))}function s(e,t){try{(n=o[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}}function E(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:o?o(t):t}:o}}function C(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=v(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function T(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var A=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function D(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&m(t,e,n);return A(t,e),t}function j(e){return e&&e.__esModule?e:{default:e}}function P(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function L(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function N(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function O(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r,o;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],n&&(o=r)}if("function"!=typeof r)throw new TypeError("Object not disposable.");o&&(r=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var R="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function I(e){function t(t){e.error=e.hasError?new R(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}var n,r=0;return function o(){for(;n=e.stack.pop();)try{if(!n.async&&1===r)return r=0,e.stack.push(n),Promise.resolve().then(o);if(n.dispose){var a=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(a).then(o,(function(e){return t(e),o()}))}else r|=1}catch(i){t(i)}if(1===r)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}const F={__extends:o,__assign:a,__rest:i,__decorate:s,__param:l,__metadata:f,__awaiter:h,__generator:b,__createBinding:m,__exportStar:g,__values:v,__read:y,__spread:w,__spreadArrays:k,__spreadArray:x,__await:S,__asyncGenerator:_,__asyncDelegator:E,__asyncValues:C,__makeTemplateObject:T,__importStar:D,__importDefault:j,__classPrivateFieldGet:P,__classPrivateFieldSet:L,__classPrivateFieldIn:N,__addDisposableResource:O,__disposeResources:I}},22654:e=>{"use strict";e.exports={}},84054:e=>{"use strict";e.exports=JSON.parse('{"/search-822":{"__comp":"1a4e3797","__context":{"plugin":"138e0e15"}},"/-e5f":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"},"/-18e":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/-19c":{"__comp":"a7bd4aaa","__props":"22dd74f7"},"/tags-ce1":{"__comp":"3720c009","__props":"59af61a6"},"/tags/private-networks-e59":{"__comp":"df203c0f","__props":"f46f4beb"},"/tags/public-networks-41a":{"__comp":"df203c0f","__props":"c14ba340"},"/-4cc":{"__comp":"a94703ab"},"/global/postman-ee4":{"__comp":"17896441","content":"7ea61495"},"/global/test_accounts-28e":{"__comp":"17896441","content":"8a886138"},"/private-networks-eb2":{"__comp":"17896441","content":"ebb34ddb"},"/private-networks/chatbot-048":{"__comp":"17896441","content":"2712d2e6"},"/private-networks/concepts-4a8":{"__comp":"17896441","content":"28249022"},"/private-networks/concepts/permissioning-64e":{"__comp":"17896441","content":"5ec0198e"},"/private-networks/concepts/permissioning/onchain-41d":{"__comp":"17896441","content":"c6c17076"},"/private-networks/concepts/permissioning/plugin-b94":{"__comp":"17896441","content":"a2bd30e6"},"/private-networks/concepts/pki-cdc":{"__comp":"17896441","content":"0f2e6691"},"/private-networks/concepts/plugins-f6a":{"__comp":"17896441","content":"c69ab138"},"/private-networks/concepts/poa-a52":{"__comp":"17896441","content":"3a4520c6"},"/private-networks/concepts/privacy-a25":{"__comp":"17896441","content":"bd3642f6"},"/private-networks/concepts/privacy/flexible-privacy-8dc":{"__comp":"17896441","content":"fb8ebc35"},"/private-networks/concepts/privacy/multi-tenancy-bf3":{"__comp":"17896441","content":"02fd2e39"},"/private-networks/concepts/privacy/plugin-d02":{"__comp":"17896441","content":"f606b5b5"},"/private-networks/concepts/privacy/privacy-groups-88a":{"__comp":"17896441","content":"7a44c711"},"/private-networks/concepts/privacy/private-transactions-b2c":{"__comp":"17896441","content":"d94d9a73"},"/private-networks/concepts/privacy/private-transactions/processing-d76":{"__comp":"17896441","content":"715197f0"},"/private-networks/get-started-ea9":{"__comp":"14eb3368","__props":"f7a0d716"},"/private-networks/get-started/install-dcb":{"__comp":"17896441","content":"5576e3f0"},"/private-networks/get-started/install/binary-distribution-925":{"__comp":"17896441","content":"27b89368"},"/private-networks/get-started/install/run-docker-image-b68":{"__comp":"17896441","content":"37906014"},"/private-networks/get-started/start-node-596":{"__comp":"17896441","content":"b4b83649"},"/private-networks/get-started/system-requirements-63a":{"__comp":"17896441","content":"0c3b97c4"},"/private-networks/how-to-b9b":{"__comp":"17896441","content":"1b73c7ba"},"/private-networks/how-to/backup-f0c":{"__comp":"17896441","content":"c029b5c7"},"/private-networks/how-to/configure/block-proposal-permissioning-7a2":{"__comp":"17896441","content":"10d3d954"},"/private-networks/how-to/configure/bootnodes-d2d":{"__comp":"17896441","content":"5b178458"},"/private-networks/how-to/configure/consensus-f2d":{"__comp":"17896441","content":"9ffeb22a"},"/private-networks/how-to/configure/consensus/add-validators-without-voting-ed4":{"__comp":"17896441","content":"887b6037"},"/private-networks/how-to/configure/consensus/clique-b9b":{"__comp":"17896441","content":"6ea682ce"},"/private-networks/how-to/configure/consensus/ibft-9c3":{"__comp":"17896441","content":"166cf840"},"/private-networks/how-to/configure/consensus/qbft-1f4":{"__comp":"17896441","content":"b5388cc7"},"/private-networks/how-to/configure/contracts-843":{"__comp":"17896441","content":"dbf86eb1"},"/private-networks/how-to/configure/curves-65a":{"__comp":"17896441","content":"8b8c93ab"},"/private-networks/how-to/configure/free-gas-bb6":{"__comp":"17896441","content":"7b0f9452"},"/private-networks/how-to/configure/tls/client-and-server-d10":{"__comp":"17896441","content":"55b6f436"},"/private-networks/how-to/configure/tls/p2p-910":{"__comp":"17896441","content":"833497ee"},"/private-networks/how-to/configure/validators-a15":{"__comp":"17896441","content":"f0bf0af8"},"/private-networks/how-to/deploy/ansible-f49":{"__comp":"17896441","content":"714c5be8"},"/private-networks/how-to/deploy/cloud-3bb":{"__comp":"17896441","content":"9bb932b9"},"/private-networks/how-to/deploy/ethstats-444":{"__comp":"17896441","content":"43d83ec4"},"/private-networks/how-to/deploy/kubernetes-720":{"__comp":"17896441","content":"ecc00064"},"/private-networks/how-to/monitor-402":{"__comp":"17896441","content":"8161613e"},"/private-networks/how-to/monitor/chainlens-a00":{"__comp":"17896441","content":"306048a3"},"/private-networks/how-to/monitor/elastic-stack-82f":{"__comp":"17896441","content":"d4c8fb26"},"/private-networks/how-to/monitor/loki-920":{"__comp":"17896441","content":"b2d12fc2"},"/private-networks/how-to/monitor/opentelemetry-914":{"__comp":"17896441","content":"2de980e5"},"/private-networks/how-to/monitor/quorum-hibernate-3dc":{"__comp":"17896441","content":"88771ea1"},"/private-networks/how-to/monitor/splunk-4d2":{"__comp":"17896441","content":"7b4961ca"},"/private-networks/how-to/send-transactions-e65":{"__comp":"17896441","content":"3624528b"},"/private-networks/how-to/send-transactions/concurrent-private-transactions-185":{"__comp":"17896441","content":"d13d7343"},"/private-networks/how-to/send-transactions/private-transactions-635":{"__comp":"17896441","content":"3b05cdc2"},"/private-networks/how-to/send-transactions/revert-reason-704":{"__comp":"17896441","content":"6c6be066"},"/private-networks/how-to/upgrade-3c6":{"__comp":"17896441","content":"edcc188d"},"/private-networks/how-to/use-permissioning/local-33e":{"__comp":"17896441","content":"f3adc880"},"/private-networks/how-to/use-permissioning/onchain-fca":{"__comp":"17896441","content":"d1f22a5a"},"/private-networks/how-to/use-privacy/access-private-transactions-53d":{"__comp":"17896441","content":"3234314a"},"/private-networks/how-to/use-privacy/besu-extended-9de":{"__comp":"17896441","content":"e8e619e2"},"/private-networks/how-to/use-privacy/eea-compliant-981":{"__comp":"17896441","content":"f834d930"},"/private-networks/how-to/use-privacy/flexible-3b9":{"__comp":"17896441","content":"4f63be9c"},"/private-networks/how-to/use-privacy/performance-best-practices-3b9":{"__comp":"17896441","content":"e6ca27ec"},"/private-networks/how-to/use-privacy/privacy-groups-323":{"__comp":"17896441","content":"9213a1f9"},"/private-networks/how-to/use-privacy/sign-pmts-07f":{"__comp":"17896441","content":"fe1d21e1"},"/private-networks/how-to/use-privacy/tessera-d45":{"__comp":"17896441","content":"dd900a84"},"/private-networks/how-to/use-privacy/web3js-quorum-e49":{"__comp":"17896441","content":"4d94bde1"},"/private-networks/reference-f52":{"__comp":"17896441","content":"bbdbb161"},"/private-networks/reference/accounts-for-testing-df1":{"__comp":"17896441","content":"e0a6c7d4"},"/private-networks/reference/api-ff9":{"__comp":"17896441","content":"d78c9adf"},"/private-networks/reference/api/objects-351":{"__comp":"17896441","content":"c8cab34c"},"/private-networks/reference/cli/options-1be":{"__comp":"17896441","content":"06aa37f3"},"/private-networks/reference/cli/subcommands-174":{"__comp":"17896441","content":"ee5d8003"},"/private-networks/reference/plugin-api-interfaces-031":{"__comp":"17896441","content":"6e493491"},"/private-networks/tutorials-ec3":{"__comp":"14eb3368","__props":"6ec2af53"},"/private-networks/tutorials/azure-60f":{"__comp":"17896441","content":"bea70e21"},"/private-networks/tutorials/clique-956":{"__comp":"17896441","content":"8d677f34"},"/private-networks/tutorials/contracts-bde":{"__comp":"17896441","content":"4a41aaaf"},"/private-networks/tutorials/contracts/interact-b8b":{"__comp":"17896441","content":"bd4880eb"},"/private-networks/tutorials/contracts/transfer-funds-056":{"__comp":"17896441","content":"d7914a50"},"/private-networks/tutorials/ethash-f5c":{"__comp":"17896441","content":"9a50decc"},"/private-networks/tutorials/ibft-edc":{"__comp":"17896441","content":"3f04f830"},"/private-networks/tutorials/ibft/validators-5aa":{"__comp":"17896441","content":"1f29a5e5"},"/private-networks/tutorials/kubernetes-0d7":{"__comp":"17896441","content":"b7759d8d"},"/private-networks/tutorials/kubernetes/charts-695":{"__comp":"17896441","content":"89f1fe89"},"/private-networks/tutorials/kubernetes/cluster-301":{"__comp":"17896441","content":"ce4c8b54"},"/private-networks/tutorials/kubernetes/maintenance-06d":{"__comp":"17896441","content":"a626427b"},"/private-networks/tutorials/kubernetes/nat-manager-2fd":{"__comp":"17896441","content":"f2142509"},"/private-networks/tutorials/kubernetes/playground-c97":{"__comp":"17896441","content":"79bb8117"},"/private-networks/tutorials/kubernetes/production-93b":{"__comp":"17896441","content":"71635f7b"},"/private-networks/tutorials/kubernetes/quorum-explorer-ec3":{"__comp":"17896441","content":"ce515f1b"},"/private-networks/tutorials/permissioning-456":{"__comp":"17896441","content":"dd3e5b84"},"/private-networks/tutorials/privacy-83c":{"__comp":"17896441","content":"030f9ebf"},"/private-networks/tutorials/privacy/multi-tenancy-4fd":{"__comp":"17896441","content":"c41908c3"},"/private-networks/tutorials/privacy/quickstart-16b":{"__comp":"17896441","content":"93e76459"},"/private-networks/tutorials/privacy/web3js-quorum-c63":{"__comp":"17896441","content":"5c820069"},"/private-networks/tutorials/qbft-5be":{"__comp":"17896441","content":"8ef40281"},"/private-networks/tutorials/quickstart-e95":{"__comp":"17896441","content":"297e0bb4"},"/public-networks-88b":{"__comp":"17896441","content":"2ce131d7"},"/public-networks/chatbot-cff":{"__comp":"17896441","content":"cf53573e"},"/public-networks/concepts-66b":{"__comp":"14eb3368","__props":"4b21c0d5"},"/public-networks/concepts/data-storage-formats-4f0":{"__comp":"17896441","content":"0145acbf"},"/public-networks/concepts/events-and-logs-d70":{"__comp":"17896441","content":"248beabf"},"/public-networks/concepts/genesis-file-5ff":{"__comp":"17896441","content":"0ea635c0"},"/public-networks/concepts/network-and-chain-id-680":{"__comp":"17896441","content":"7e9c70a7"},"/public-networks/concepts/node-clients-778":{"__comp":"17896441","content":"b0eb7c42"},"/public-networks/concepts/node-keys-c51":{"__comp":"17896441","content":"87114070"},"/public-networks/concepts/parallel-transaction-execution-d04":{"__comp":"17896441","content":"12718c4a"},"/public-networks/concepts/proof-of-stake-2f1":{"__comp":"17896441","content":"3868ebe2"},"/public-networks/concepts/proof-of-stake/attestations-154":{"__comp":"17896441","content":"d86228ad"},"/public-networks/concepts/transactions/pool-cc4":{"__comp":"17896441","content":"dfe7f568"},"/public-networks/concepts/transactions/types-1c3":{"__comp":"17896441","content":"083d4b51"},"/public-networks/concepts/transactions/validation-639":{"__comp":"17896441","content":"a99a03ac"},"/public-networks/get-started-bcb":{"__comp":"14eb3368","__props":"608f60e4"},"/public-networks/get-started/connect-8e3":{"__comp":"17896441","content":"bc60af12"},"/public-networks/get-started/connect/mainnet-8b3":{"__comp":"17896441","content":"7bb2e71b"},"/public-networks/get-started/connect/sync-node-6be":{"__comp":"17896441","content":"0ef1fb3f"},"/public-networks/get-started/connect/testnet-acf":{"__comp":"17896441","content":"6d0a1147"},"/public-networks/get-started/install-8a7":{"__comp":"17896441","content":"91cde904"},"/public-networks/get-started/install/binary-distribution-dbb":{"__comp":"17896441","content":"25537021"},"/public-networks/get-started/install/run-docker-image-637":{"__comp":"17896441","content":"b658262b"},"/public-networks/get-started/migrate-to-besu-b61":{"__comp":"17896441","content":"c48436f6"},"/public-networks/get-started/start-node-b90":{"__comp":"17896441","content":"0821166d"},"/public-networks/get-started/system-requirements-71a":{"__comp":"17896441","content":"981fdc44"},"/public-networks/how-to-daf":{"__comp":"14eb3368","__props":"a0520cc7"},"/public-networks/how-to/bonsai-limit-trie-logs-2e1":{"__comp":"17896441","content":"eeceef6b"},"/public-networks/how-to/configure-besu-059":{"__comp":"17896441","content":"ca90dbf4"},"/public-networks/how-to/configure-besu/profile-93b":{"__comp":"17896441","content":"fb537116"},"/public-networks/how-to/configure-ha-3ed":{"__comp":"17896441","content":"2039806a"},"/public-networks/how-to/configure-ha/sample-configuration-d3f":{"__comp":"17896441","content":"88996aea"},"/public-networks/how-to/configure-java/install-update-java-4b9":{"__comp":"17896441","content":"8c0ee333"},"/public-networks/how-to/configure-java/java-flight-recorder-7c1":{"__comp":"17896441","content":"91f929bc"},"/public-networks/how-to/configure-java/manage-memory-32b":{"__comp":"17896441","content":"13034d1e"},"/public-networks/how-to/configure-java/pass-jvm-options-53d":{"__comp":"17896441","content":"66bba352"},"/public-networks/how-to/connect/configure-ports-d35":{"__comp":"17896441","content":"16350423"},"/public-networks/how-to/connect/manage-peers-ae2":{"__comp":"17896441","content":"1a78f042"},"/public-networks/how-to/connect/specify-nat-ca4":{"__comp":"17896441","content":"ee08513e"},"/public-networks/how-to/connect/static-nodes-4dc":{"__comp":"17896441","content":"810074cd"},"/public-networks/how-to/develop/client-libraries-2c1":{"__comp":"17896441","content":"1b2e0ee9"},"/public-networks/how-to/develop/hardhat-f60":{"__comp":"17896441","content":"01562474"},"/public-networks/how-to/monitor-b53":{"__comp":"17896441","content":"680b46ee"},"/public-networks/how-to/monitor/logging-ea3":{"__comp":"17896441","content":"3e86fe35"},"/public-networks/how-to/monitor/metrics-ada":{"__comp":"17896441","content":"bc69a950"},"/public-networks/how-to/monitor/understand-metrics-21e":{"__comp":"17896441","content":"1719a32c"},"/public-networks/how-to/send-transactions-a24":{"__comp":"17896441","content":"e1c9c46b"},"/public-networks/how-to/troubleshoot/evm-tool-dc1":{"__comp":"17896441","content":"cdbaa4c0"},"/public-networks/how-to/troubleshoot/peering-dd0":{"__comp":"17896441","content":"3aaf4567"},"/public-networks/how-to/troubleshoot/performance-b5e":{"__comp":"17896441","content":"84b35613"},"/public-networks/how-to/troubleshoot/trace-transactions-202":{"__comp":"17896441","content":"b5e9b728"},"/public-networks/how-to/upgrade-node-a31":{"__comp":"17896441","content":"13912882"},"/public-networks/how-to/use-besu-api-f72":{"__comp":"17896441","content":"1b5bfdea"},"/public-networks/how-to/use-besu-api/access-logs-38e":{"__comp":"17896441","content":"67359d90"},"/public-networks/how-to/use-besu-api/authenticate-d0f":{"__comp":"17896441","content":"c6a4c9bf"},"/public-networks/how-to/use-besu-api/graphql-787":{"__comp":"17896441","content":"af3555a6"},"/public-networks/how-to/use-besu-api/json-rpc-f81":{"__comp":"17896441","content":"8b137bfa"},"/public-networks/how-to/use-besu-api/rpc-pubsub-0be":{"__comp":"17896441","content":"4ba08559"},"/public-networks/how-to/use-engine-api-ec1":{"__comp":"17896441","content":"563e4b8b"},"/public-networks/how-to/use-pow/mining-e56":{"__comp":"17896441","content":"46ff6f7b"},"/public-networks/reference-236":{"__comp":"14eb3368","__props":"d333d0b1"},"/public-networks/reference/api-ecd":{"__comp":"17896441","content":"76a5e22a"},"/public-networks/reference/api/objects-371":{"__comp":"17896441","content":"5af5c663"},"/public-networks/reference/cli/options-1a6":{"__comp":"17896441","content":"71e3c29d"},"/public-networks/reference/cli/subcommands-67d":{"__comp":"17896441","content":"a0f949fc"},"/public-networks/reference/disclosure-ea0":{"__comp":"17896441","content":"e12df8e0"},"/public-networks/reference/engine-api-ce3":{"__comp":"17896441","content":"dd5955a1"},"/public-networks/reference/engine-api/objects-112":{"__comp":"17896441","content":"99a5eb2e"},"/public-networks/reference/evm-tool-73b":{"__comp":"17896441","content":"aa612600"},"/public-networks/reference/genesis-items-481":{"__comp":"17896441","content":"3917f523"},"/public-networks/reference/projects-using-besu-5a4":{"__comp":"17896441","content":"d7b72fb9"},"/public-networks/reference/trace-types-a9a":{"__comp":"17896441","content":"b6b2f0db"},"/public-networks/tutorials-bf7":{"__comp":"14eb3368","__props":"d97c1e1b"},"/public-networks/tutorials/besu-teku-mainnet-11f":{"__comp":"17896441","content":"aa0c6744"},"/public-networks/tutorials/besu-teku-testnet-3fd":{"__comp":"17896441","content":"ec4f4180"},"/public-networks/tutorials/kubernetes-c26":{"__comp":"17896441","content":"6cafcc6f"}}')}},e=>{e.O(0,[1869],(()=>{return t=77815,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.3fdf14f6.js.LICENSE.txt b/assets/js/main.3fdf14f6.js.LICENSE.txt new file mode 100644 index 00000000000..5b49ae63638 --- /dev/null +++ b/assets/js/main.3fdf14f6.js.LICENSE.txt @@ -0,0 +1,126 @@ +/* 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 + */ + +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + +/** + * @license React + * 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 + * react-jsx-runtime.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 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * 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. + */ + +/** + * 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 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. + */ diff --git a/assets/js/runtime~main.20e90f8d.js b/assets/js/runtime~main.20e90f8d.js new file mode 100644 index 00000000000..f3f64854f8f --- /dev/null +++ b/assets/js/runtime~main.20e90f8d.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,b,c,f,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var b=t[e]={exports:{}};return d[e].call(b.exports,b,b.exports,r),b.exports}r.m=d,e=[],r.O=(a,b,c,f)=>{if(!b){var d=1/0;for(i=0;i<e.length;i++){b=e[i][0],c=e[i][1],f=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&f||d>=f)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,f<d&&(d=f));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[b,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};a=a||[null,b({}),b([]),b(b)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(f,d),f},r.d=(e,a)=>{for(var b in a)r.o(a,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:a[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,b)=>(r.f[b](e,a),a)),[])),r.u=e=>"assets/js/"+({23:"93e76459",68:"5576e3f0",76:"28249022",132:"76a5e22a",198:"d86228ad",231:"e6ca27ec",370:"0ef1fb3f",379:"8c0ee333",389:"edcc188d",499:"b6b2f0db",510:"5c820069",609:"166cf840",779:"a626427b",841:"7bb2e71b",849:"af3555a6",903:"1b5bfdea",973:"1b73c7ba",1023:"2ce131d7",1157:"c14ba340",1178:"e8e619e2",1207:"cdbaa4c0",1235:"a7456010",1275:"3a4520c6",1283:"7a44c711",1384:"b658262b",1524:"306048a3",1567:"22dd74f7",1572:"bd4880eb",1589:"9bb932b9",1625:"b7759d8d",1639:"ee08513e",1701:"3624528b",1703:"8ef40281",1816:"dfe7f568",1874:"3e86fe35",1903:"3f04f830",1941:"6cafcc6f",1942:"f0bf0af8",1975:"87114070",2056:"8d677f34",2077:"f606b5b5",2080:"ca90dbf4",2093:"1f29a5e5",2138:"1a4e3797",2180:"c8cab34c",2460:"1a78f042",2554:"563e4b8b",2559:"84b35613",2587:"fb8ebc35",2593:"c48436f6",2618:"25537021",2622:"083d4b51",2668:"1719a32c",2682:"0c3b97c4",2735:"8b8c93ab",2764:"297e0bb4",2778:"aa612600",2812:"d7914a50",2868:"bd3642f6",2953:"dd900a84",3005:"13912882",3034:"7b4961ca",3078:"fe1d21e1",3108:"71635f7b",3164:"eeceef6b",3474:"810074cd",3522:"d94d9a73",3623:"89f1fe89",3677:"ce515f1b",3691:"d97c1e1b",3824:"06aa37f3",4029:"43d83ec4",4068:"887b6037",4107:"71e3c29d",4265:"88771ea1",4279:"df203c0f",4340:"91f929bc",4353:"99a5eb2e",4397:"b4b83649",4417:"6c6be066",4524:"0f2e6691",4546:"66bba352",4567:"e1c9c46b",4583:"1df93b7f",4597:"b5e9b728",4656:"030f9ebf",4717:"5b178458",4787:"3720c009",4852:"8a886138",4872:"b5388cc7",4921:"138e0e15",4978:"c41908c3",4990:"981fdc44",5003:"f7a0d716",5058:"d4c8fb26",5193:"ee5d8003",5201:"10d3d954",5303:"9213a1f9",5305:"248beabf",5327:"7ea61495",5398:"3aaf4567",5407:"37906014",5430:"1b2e0ee9",5434:"67359d90",5487:"715197f0",5580:"b0eb7c42",5742:"aba21aa0",5769:"3917f523",5936:"a0520cc7",5946:"13034d1e",5953:"2de980e5",5954:"fb537116",6048:"c69ab138",6116:"3868ebe2",6126:"0ea635c0",6162:"d7b72fb9",6271:"d1f22a5a",6384:"ecc00064",6410:"4ba08559",6414:"4b21c0d5",6436:"4a41aaaf",6493:"dd5955a1",6563:"3b05cdc2",6567:"d78c9adf",6626:"6ec2af53",6627:"0821166d",6792:"a2bd30e6",6867:"aa0c6744",6944:"55b6f436",6948:"2712d2e6",6969:"14eb3368",7019:"6ea682ce",7044:"bc69a950",7045:"8b137bfa",7098:"a7bd4aaa",7208:"4d94bde1",7343:"833497ee",7372:"ec4f4180",7448:"f3adc880",7516:"cf53573e",7618:"bea70e21",7643:"c6a4c9bf",7650:"91cde904",7698:"2039806a",7738:"46ff6f7b",7800:"c029b5c7",7806:"dd3e5b84",7882:"8161613e",7936:"02fd2e39",7949:"b2d12fc2",7952:"88996aea",8077:"ce4c8b54",8088:"3234314a",8090:"7e9c70a7",8096:"f834d930",8139:"e0a6c7d4",8182:"f46f4beb",8230:"79bb8117",8235:"0145acbf",8251:"16350423",8344:"7b0f9452",8401:"17896441",8472:"12718c4a",8521:"bbdbb161",8546:"c6c17076",8573:"6d0a1147",8587:"a0f949fc",8620:"5af5c663",8715:"5ec0198e",8721:"9a50decc",8814:"714c5be8",8862:"f2142509",8882:"e12df8e0",9022:"27b89368",9048:"a94703ab",9084:"bc60af12",9174:"59af61a6",9222:"d13d7343",9291:"dbf86eb1",9334:"9ffeb22a",9399:"680b46ee",9489:"d333d0b1",9558:"608f60e4",9624:"a99a03ac",9647:"5e95c892",9670:"6e493491",9729:"ebb34ddb",9779:"4f63be9c",9812:"01562474"}[e]||e)+"."+{23:"524fd05d",68:"679fbdc4",76:"9e6906e9",132:"fc8fb787",198:"04e46fc2",231:"eb3396ab",370:"ecd4d212",379:"86633b3b",389:"270a02da",489:"ecb90ce5",499:"e7ee8e7b",510:"f9a6f71b",609:"57a72276",779:"ae5b558b",841:"0d7a41fe",849:"8d8c4ead",903:"4fa33498",973:"ff90cfe1",1023:"bddba6d1",1157:"b183a95c",1169:"474111bd",1176:"9a7d92ce",1178:"2fdd8d20",1207:"6b1c2e3e",1235:"396c4ea2",1245:"c61e13ed",1275:"18bf9121",1283:"94783d97",1303:"f001da5d",1331:"f052e86d",1384:"4407836a",1398:"ddcb09a0",1524:"bbdcd5ec",1567:"d86165fd",1572:"01b716ea",1589:"afa89081",1625:"db359485",1639:"fec2f54e",1701:"a6c81356",1703:"aaa3c872",1721:"c0b53a15",1816:"05d882cb",1874:"34ea8d39",1903:"f8a14c73",1941:"99884b59",1942:"e4baebc0",1946:"457004ff",1975:"258aec83",2056:"fd46d48d",2077:"9a7c8ae3",2080:"78a640a1",2093:"194d5ac0",2130:"95fd4ec8",2138:"4b5826b5",2180:"2e679808",2237:"765a0d7b",2376:"23ec1be8",2453:"6e208534",2460:"7689b480",2548:"4854bfbf",2554:"e9d64ed4",2559:"46c0e03d",2587:"3ded177c",2593:"ceedba4d",2618:"4c3c521d",2622:"bd7608aa",2668:"2407471c",2682:"56a83f3e",2735:"2009f544",2764:"9209a15a",2778:"83b9921f",2812:"222188a7",2843:"796ce40c",2868:"1f7a447c",2925:"c1de506f",2953:"4a6a9763",2983:"b4a09367",3005:"2ce4e4ef",3034:"d2b3a768",3068:"62732554",3078:"674e5808",3108:"913be7fe",3164:"38bac9b2",3474:"228e5b7c",3522:"aad3c4bc",3623:"bb340bbd",3626:"567734c0",3677:"30380617",3691:"59b77cac",3706:"2daa6e9b",3824:"3638157d",4029:"e7e0e97f",4068:"03b4e162",4107:"66b02934",4162:"d948d9a1",4265:"3718db6e",4279:"15aaaa71",4340:"db1ffe3e",4353:"e27a7309",4397:"29e393a4",4417:"7b55fcc0",4524:"47b9d6f1",4546:"d596c93b",4567:"f63b7265",4583:"310ae4b5",4597:"2405688b",4656:"652fe6a1",4717:"4de7b538",4741:"a4c1664e",4787:"051c303d",4852:"8a9eb2e0",4872:"8e4ba5ca",4921:"3444b433",4943:"7a968dfc",4978:"1f525574",4990:"2631aab4",5003:"4949904b",5058:"65039764",5193:"8490affb",5201:"257e6510",5303:"f3841e84",5305:"8a43592f",5327:"8ff9c14b",5398:"090eadec",5407:"e96042f4",5430:"74c7a494",5434:"9c6a5c3f",5487:"9996b344",5580:"5a8a020d",5741:"f2309677",5742:"f74b2f51",5769:"54520b57",5936:"101b9a64",5946:"27bd5583",5953:"97c724a4",5954:"7649b17a",6048:"d760b4a7",6116:"94fe7a15",6126:"dc4c9db9",6162:"232604a9",6271:"9f8374b5",6384:"1f415c88",6410:"41f62f60",6414:"59ec311d",6420:"1d302b6f",6436:"0fbde342",6493:"57842f6a",6563:"ee641190",6567:"670895a9",6626:"ce63d27b",6627:"eae161cf",6788:"582b9064",6792:"b9419280",6803:"5c976ee3",6867:"5bbc0d85",6944:"fd934fa0",6948:"08a6a92d",6969:"ec56410f",7019:"33f2b314",7044:"d52a0855",7045:"9dfb2f95",7098:"3a315759",7208:"fea2dde3",7343:"be45d96a",7372:"84b21fd8",7426:"b60c03d2",7448:"1e05bd0a",7516:"1cf4a868",7618:"81bfac1d",7643:"0ba2d938",7650:"d5d26aec",7698:"d6ddf1ad",7738:"f215fe24",7800:"f8626ecd",7806:"1cd1b92a",7882:"62808094",7936:"26c38d69",7949:"1317c4e3",7952:"b118aeda",8055:"e84c6b8b",8077:"661eac58",8088:"23d59e51",8090:"b09bb89b",8096:"96d7377e",8139:"d1acdf63",8182:"ad1162b3",8230:"c7ab0d00",8235:"d16da2ab",8251:"a3ada36e",8337:"8688ca06",8344:"7847efd5",8401:"3e61c7b1",8472:"9364ef40",8478:"640fe2ec",8521:"99f8c8f5",8546:"d07d2dbd",8573:"de68ac01",8587:"bcd58d85",8620:"2609a21a",8635:"9e01011f",8715:"0b38fe62",8721:"b6c64dc3",8810:"8e349140",8814:"16fbbdd7",8862:"56209469",8869:"12b38637",8882:"862983c0",9022:"97dda751",9048:"98eb17a6",9084:"60d23579",9174:"c622703e",9222:"f36b83d7",9291:"25be7d49",9334:"49801fbd",9399:"09961d1c",9489:"8068ca24",9558:"12fd1aea",9624:"f53b1c99",9647:"6dac57bd",9670:"b4f3819f",9689:"252d8165",9729:"01a618cd",9779:"0c0a113e",9812:"3dba0cc2"}[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,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="doc.besu:",r.l=(e,a,b,d)=>{if(c[e])c[e].push(a);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),c[e]=[a];var l=(a,b)=>{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(b))),a)return a(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="/",r.gca=function(e){return e={13912882:"3005",16350423:"8251",17896441:"8401",25537021:"2618",28249022:"76",37906014:"5407",87114070:"1975","93e76459":"23","5576e3f0":"68","76a5e22a":"132",d86228ad:"198",e6ca27ec:"231","0ef1fb3f":"370","8c0ee333":"379",edcc188d:"389",b6b2f0db:"499","5c820069":"510","166cf840":"609",a626427b:"779","7bb2e71b":"841",af3555a6:"849","1b5bfdea":"903","1b73c7ba":"973","2ce131d7":"1023",c14ba340:"1157",e8e619e2:"1178",cdbaa4c0:"1207",a7456010:"1235","3a4520c6":"1275","7a44c711":"1283",b658262b:"1384","306048a3":"1524","22dd74f7":"1567",bd4880eb:"1572","9bb932b9":"1589",b7759d8d:"1625",ee08513e:"1639","3624528b":"1701","8ef40281":"1703",dfe7f568:"1816","3e86fe35":"1874","3f04f830":"1903","6cafcc6f":"1941",f0bf0af8:"1942","8d677f34":"2056",f606b5b5:"2077",ca90dbf4:"2080","1f29a5e5":"2093","1a4e3797":"2138",c8cab34c:"2180","1a78f042":"2460","563e4b8b":"2554","84b35613":"2559",fb8ebc35:"2587",c48436f6:"2593","083d4b51":"2622","1719a32c":"2668","0c3b97c4":"2682","8b8c93ab":"2735","297e0bb4":"2764",aa612600:"2778",d7914a50:"2812",bd3642f6:"2868",dd900a84:"2953","7b4961ca":"3034",fe1d21e1:"3078","71635f7b":"3108",eeceef6b:"3164","810074cd":"3474",d94d9a73:"3522","89f1fe89":"3623",ce515f1b:"3677",d97c1e1b:"3691","06aa37f3":"3824","43d83ec4":"4029","887b6037":"4068","71e3c29d":"4107","88771ea1":"4265",df203c0f:"4279","91f929bc":"4340","99a5eb2e":"4353",b4b83649:"4397","6c6be066":"4417","0f2e6691":"4524","66bba352":"4546",e1c9c46b:"4567","1df93b7f":"4583",b5e9b728:"4597","030f9ebf":"4656","5b178458":"4717","3720c009":"4787","8a886138":"4852",b5388cc7:"4872","138e0e15":"4921",c41908c3:"4978","981fdc44":"4990",f7a0d716:"5003",d4c8fb26:"5058",ee5d8003:"5193","10d3d954":"5201","9213a1f9":"5303","248beabf":"5305","7ea61495":"5327","3aaf4567":"5398","1b2e0ee9":"5430","67359d90":"5434","715197f0":"5487",b0eb7c42:"5580",aba21aa0:"5742","3917f523":"5769",a0520cc7:"5936","13034d1e":"5946","2de980e5":"5953",fb537116:"5954",c69ab138:"6048","3868ebe2":"6116","0ea635c0":"6126",d7b72fb9:"6162",d1f22a5a:"6271",ecc00064:"6384","4ba08559":"6410","4b21c0d5":"6414","4a41aaaf":"6436",dd5955a1:"6493","3b05cdc2":"6563",d78c9adf:"6567","6ec2af53":"6626","0821166d":"6627",a2bd30e6:"6792",aa0c6744:"6867","55b6f436":"6944","2712d2e6":"6948","14eb3368":"6969","6ea682ce":"7019",bc69a950:"7044","8b137bfa":"7045",a7bd4aaa:"7098","4d94bde1":"7208","833497ee":"7343",ec4f4180:"7372",f3adc880:"7448",cf53573e:"7516",bea70e21:"7618",c6a4c9bf:"7643","91cde904":"7650","2039806a":"7698","46ff6f7b":"7738",c029b5c7:"7800",dd3e5b84:"7806","8161613e":"7882","02fd2e39":"7936",b2d12fc2:"7949","88996aea":"7952",ce4c8b54:"8077","3234314a":"8088","7e9c70a7":"8090",f834d930:"8096",e0a6c7d4:"8139",f46f4beb:"8182","79bb8117":"8230","0145acbf":"8235","7b0f9452":"8344","12718c4a":"8472",bbdbb161:"8521",c6c17076:"8546","6d0a1147":"8573",a0f949fc:"8587","5af5c663":"8620","5ec0198e":"8715","9a50decc":"8721","714c5be8":"8814",f2142509:"8862",e12df8e0:"8882","27b89368":"9022",a94703ab:"9048",bc60af12:"9084","59af61a6":"9174",d13d7343:"9222",dbf86eb1:"9291","9ffeb22a":"9334","680b46ee":"9399",d333d0b1:"9489","608f60e4":"9558",a99a03ac:"9624","5e95c892":"9647","6e493491":"9670",ebb34ddb:"9729","4f63be9c":"9779","01562474":"9812"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,b)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)b.push(c[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var f=new Promise(((b,f)=>c=e[a]=[b,f]));b.push(c[2]=f);var d=r.p+r.u(a),t=new Error;r.l(d,(b=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=b&&("load"===b.type?"missing":b.type),d=b&&b.target&&b.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,b)=>{var c,f,d=b[0],t=b[1],o=b[2],n=0;if(d.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(b);n<d.length;n++)f=d[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},b=self.webpackChunkdoc_besu=self.webpackChunkdoc_besu||[];b.forEach(a.bind(null,0)),b.push=a.bind(null,b.push.bind(b))})()})(); \ No newline at end of file diff --git a/development/index.html b/development/index.html index ab925305d82..800d41449fc 100644 --- a/development/index.html +++ b/development/index.html @@ -2,10 +2,10 @@ <html> <head> <meta charset="UTF-8"> - <meta http-equiv="refresh" content="0; url=/development/public-networks"> - <link rel="canonical" href="/development/public-networks" /> + <meta http-equiv="refresh" content="0; url=/public-networks"> + <link rel="canonical" href="/public-networks" /> </head> <script> - window.location.href = '/development/public-networks' + window.location.search + window.location.hash; + window.location.href = '/public-networks' + window.location.search + window.location.hash; </script> </html> \ No newline at end of file diff --git a/en/development/index.html b/en/development/index.html index ab925305d82..800d41449fc 100644 --- a/en/development/index.html +++ b/en/development/index.html @@ -2,10 +2,10 @@ <html> <head> <meta charset="UTF-8"> - <meta http-equiv="refresh" content="0; url=/development/public-networks"> - <link rel="canonical" href="/development/public-networks" /> + <meta http-equiv="refresh" content="0; url=/public-networks"> + <link rel="canonical" href="/public-networks" /> </head> <script> - window.location.href = '/development/public-networks' + window.location.search + window.location.hash; + window.location.href = '/public-networks' + window.location.search + window.location.hash; </script> </html> \ No newline at end of file diff --git a/en/latest/index.html b/en/latest/index.html index ab925305d82..800d41449fc 100644 --- a/en/latest/index.html +++ b/en/latest/index.html @@ -2,10 +2,10 @@ <html> <head> <meta charset="UTF-8"> - <meta http-equiv="refresh" content="0; url=/development/public-networks"> - <link rel="canonical" href="/development/public-networks" /> + <meta http-equiv="refresh" content="0; url=/public-networks"> + <link rel="canonical" href="/public-networks" /> </head> <script> - window.location.href = '/development/public-networks' + window.location.search + window.location.hash; + window.location.href = '/public-networks' + window.location.search + window.location.hash; </script> </html> \ No newline at end of file diff --git a/global/postman.html b/global/postman.html index 396d09488c2..bb4383f23f3 100644 --- a/global/postman.html +++ b/global/postman.html @@ -1,21 +1,21 @@ <!doctype html> -<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-24.9.1 docs-doc-page docs-doc-id-global/postman" data-has-hydrated="false"> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-global/postman" data-has-hydrated="false"> <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.5.2"> -<title data-rh="true">postman | Besu documentation +postman | Besu documentation - - + + -

postman

Besu JSON-RPC APIs documentation in Postman format

View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.

Run in Postman

Click the following button to fork the collection and run requests directly on your local network.

Run in Postman.

Download collection

Alternatively you can download the JSON collection file.

+

postman

Besu JSON-RPC APIs documentation in Postman format

View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.

Run in Postman

Click the following button to fork the collection and run requests directly on your local network.

Run in Postman.

Download collection

Alternatively you can download the JSON collection file.

\ No newline at end of file diff --git a/global/test_accounts.html b/global/test_accounts.html index 5c9faf822b5..8b1d4164f0d 100644 --- a/global/test_accounts.html +++ b/global/test_accounts.html @@ -1,24 +1,24 @@ - + -test_accounts | Besu documentation +test_accounts | Besu documentation - - + + -

test_accounts

Do not use the test accounts on Ethereum Mainnet or any production network.

The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.

They are not secure and everyone can use them.

Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud.

In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes.

Always secure your Ethereum Mainnet and any production account properly.

See for instance MyCrypto "Protecting Yourself and Your Funds" guide.

+

test_accounts

Do not use the test accounts on Ethereum Mainnet or any production network.

The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.

They are not secure and everyone can use them.

Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud.

In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes.

Always secure your Ethereum Mainnet and any production account properly.

See for instance MyCrypto "Protecting Yourself and Your Funds" guide.

"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)"

Private key to copy :

0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63

Initial balance : 200 Eth (200000000000000000000 Wei)

"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)"

Private key to copy :

0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3

Initial balance : 90000 Eth (90000000000000000000000 Wei)

-
"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)"

Private key to copy :

0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f

Initial balance : 90000 Eth (90000000000000000000000 Wei)

+
"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)"

Private key to copy :

0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f

Initial balance : 90000 Eth (90000000000000000000000 Wei)

\ No newline at end of file diff --git a/index.html b/index.html index 8695bdf3f47..5d11df9a316 100644 --- a/index.html +++ b/index.html @@ -10,12 +10,12 @@ - - + + -

Hyperledger Besu Ethereum client

Hyperledger Besu is an open source Ethereum client developed under the Apache 2.0 license and written in Java. It runs on public and private networks:

🌐 Public networks

Run Besu as an execution client on Ethereum Mainnet and Ethereum public testnets, such as Holesky and Sepolia.

🔐 Private networks

Use private networks for enterprise applications requiring secure, high-performance transaction processing.

What does Besu support?

Besu includes a command line interface and JSON-RPC API for running, maintaining, debugging, and monitoring nodes in an Ethereum network. You can use the API via RPC over HTTP or via WebSocket. Besu also supports Pub/Sub.

Besu supports common smart contract and dapp development, deployment, and operational use cases, using tools such as Hardhat, Remix, and web3j. The client supports common JSON-RPC API methods such as eth, net, web3, debug, and miner.

Besu doesn't support key management inside the client. You can use Web3Signer with Besu to access your keystore and sign transactions.

Questions?

If you have any questions about Besu, ask on the besu channel on Hyperledger Discord.

Learn more about the Hyperledger Foundation. You can contribute to the documentation or to Besu itself.

+

Hyperledger Besu Ethereum client

Hyperledger Besu is an open source Ethereum client developed under the Apache 2.0 license and written in Java. It runs on public and private networks:

🌐 Public networks

Run Besu as an execution client on Ethereum Mainnet and Ethereum public testnets, such as Holesky and Sepolia.

🔐 Private networks

Use private networks for enterprise applications requiring secure, high-performance transaction processing.

What does Besu support?

Besu includes a command line interface and JSON-RPC API for running, maintaining, debugging, and monitoring nodes in an Ethereum network. You can use the API via RPC over HTTP or via WebSocket. Besu also supports Pub/Sub.

Besu supports common smart contract and dapp development, deployment, and operational use cases, using tools such as Hardhat, Remix, and web3j. The client supports common JSON-RPC API methods such as eth, net, web3, debug, and miner.

Besu doesn't support key management inside the client. You can use Web3Signer with Besu to access your keystore and sign transactions.

Questions?

If you have any questions about Besu, ask on the besu channel on Hyperledger Discord.

Learn more about the Hyperledger Foundation. You can contribute to the documentation or to Besu itself.

\ No newline at end of file diff --git a/latest/index.html b/latest/index.html index ab925305d82..800d41449fc 100644 --- a/latest/index.html +++ b/latest/index.html @@ -2,10 +2,10 @@ - - + + \ No newline at end of file diff --git a/private-networks.html b/private-networks.html index 9315c5af1e8..d9ae9316b37 100644 --- a/private-networks.html +++ b/private-networks.html @@ -1,22 +1,22 @@ - + -Private networks | Besu documentation +Private networks | Besu documentation - - + + -

Besu for private networks

+

Besu for private networks

You can use Besu to develop enterprise applications requiring secure, high-performance transaction processing in a private network.

A private network is a network not connected to Ethereum Mainnet or an Ethereum testnet. Private networks typically use a different chain ID and proof of authority consensus (QBFT, IBFT 2.0, or Clique).

You can also create a local development network using proof of work (Ethash).

@@ -26,6 +26,6 @@

ArchitectureThe following diagram outlines the high-level architecture of Besu for private networks.

Private architecture

If you have any questions about Besu for private networks, ask on the besu channel on -Discord.

+Discord.

\ No newline at end of file diff --git a/private-networks/chatbot.html b/private-networks/chatbot.html index d88663373c2..d04b3e954d1 100644 --- a/private-networks/chatbot.html +++ b/private-networks/chatbot.html @@ -1,22 +1,22 @@ - + -Chatbot | Besu documentation +Chatbot | Besu documentation - - + + - + \ No newline at end of file diff --git a/private-networks/concepts.html b/private-networks/concepts.html index 6ab4b1998e5..684a2e62cb1 100644 --- a/private-networks/concepts.html +++ b/private-networks/concepts.html @@ -1,22 +1,22 @@ - + -Concepts | Besu documentation +Concepts | Besu documentation - - + + -
\ No newline at end of file diff --git a/private-networks/concepts/permissioning.html b/private-networks/concepts/permissioning.html index 7edd1ad4fe2..5dd3f193c67 100644 --- a/private-networks/concepts/permissioning.html +++ b/private-networks/concepts/permissioning.html @@ -1,22 +1,22 @@ - + -Permissioning | Besu documentation +Permissioning | Besu documentation - - + + -

Permissioning

+

Permissioning

A permissioned network enables node permissioning and account permissioning, allowing only specified nodes and accounts to access the network.

Permissioning is not privacy

In peer-to-peer networks, node permissioning enforces rules on nodes you control.

Permissioning requires a distributed network of trust across the network where participants agree to follow the rules. One bad actor can decide not to follow the rules. Nodes can take action to prevent the bad actor adding to the chain but they cannot prevent the bad actor from allowing access to the chain.

Besu also implements privacy.

Node permissioning

@@ -41,6 +41,6 @@

Onchain

+

Permissioning Flow

\ No newline at end of file diff --git a/private-networks/concepts/permissioning/onchain.html b/private-networks/concepts/permissioning/onchain.html index 90243b82188..8ab2fbeee74 100644 --- a/private-networks/concepts/permissioning/onchain.html +++ b/private-networks/concepts/permissioning/onchain.html @@ -1,22 +1,22 @@ - + -Onchain permissioning | Besu documentation +Onchain permissioning | Besu documentation - - + + -

Onchain permissioning

+

Onchain permissioning

Onchain permissioning uses smart contracts to store and administer the node, account, and admin allowlists. Using onchain permissioning enables all nodes to read the allowlists from a single source, the blockchain.

danger

When using onchain account permissioning, a node checks permissions when importing blocks. Meaning, a node only imports blocks in which all transactions are from authorized senders. If you disable onchain account permissioning and your node accepts blocks without enforcing this rule, your node cannot re-synchronize with other nodes that enforce onchain account permissioning rules (your node goes into forked state).

note

Custom smart contracts and dapps can be implemented to work with onchain permissioning.

@@ -34,6 +34,6 @@

AllowlistsBootnodes

When a node joins the network, the node connects to the bootnodes until it synchronizes to the chain head, regardless of node permissions. After synchronization, the Account Rules and Node Rules smart contracts apply the permissioning rules.

If a synchronized node loses all peer connections (that is, it has zero peers), it reconnects to the bootnodes to rediscover peers.

-
info

All bootnodes must be on the nodes allowlist.

+
info

All bootnodes must be on the nodes allowlist.

\ No newline at end of file diff --git a/private-networks/concepts/permissioning/plugin.html b/private-networks/concepts/permissioning/plugin.html index 9be60fa3af9..91692ff992f 100644 --- a/private-networks/concepts/permissioning/plugin.html +++ b/private-networks/concepts/permissioning/plugin.html @@ -1,22 +1,22 @@ - + -Permissioning plugin | Besu documentation +Permissioning plugin | Besu documentation - - + + -

Permissioning plugin

+

Permissioning plugin

You can define complex permissioning solutions by building a plugin that extends Besu functionality.

The plugin API provides a PermissioningService interface that currently supports connection permissioning and message permissioning.

Connection permissioning

@@ -25,6 +25,6 @@

Messag

Use message permissioning to propagate different types of devP2P messages to particular nodes. For example, this can be used to prevent pending transactions from being forwarded to other nodes.

Register your plugin

To enable permissioning in your plugin, implement the PermissioningService interface and register your providers.

-
@AutoService(BesuPlugin.class)
public class TestPermissioningPlugin implements BesuPlugin {
PermissioningService service;
@Override
public void register(final BesuContext context) {
service = context.getService(PermissioningService.class).get();
}
@Override
public void start() {
service.registerNodePermissioningProvider((sourceEnode, destinationEnode) -> {
// perform logic for node permissioning
return true;
});
service.registerNodeMessagePermissioningProvider((destinationEnode, code) -> {
// perform logic for message permissioning
return true;
});
}
@Override
public void stop() {}
}
+
@AutoService(BesuPlugin.class)
public class TestPermissioningPlugin implements BesuPlugin {
PermissioningService service;
@Override
public void register(final BesuContext context) {
service = context.getService(PermissioningService.class).get();
}
@Override
public void start() {
service.registerNodePermissioningProvider((sourceEnode, destinationEnode) -> {
// perform logic for node permissioning
return true;
});
service.registerNodeMessagePermissioningProvider((destinationEnode, code) -> {
// perform logic for message permissioning
return true;
});
}
@Override
public void stop() {}
}
\ No newline at end of file diff --git a/private-networks/concepts/pki.html b/private-networks/concepts/pki.html index d3dda43fe5c..48be2876ef4 100644 --- a/private-networks/concepts/pki.html +++ b/private-networks/concepts/pki.html @@ -1,22 +1,22 @@ - + -Public key infrastructure | Besu documentation +Public key infrastructure | Besu documentation - - + + -

Public key infrastructure

+

Public key infrastructure

warning

Public key infrastructure (PKI) support is an early access feature, and functionality and options may be updated between releases.

Besu's public key infrastructure allows you to use certificates issued by a trusted authority to manage node and account identities in the following ways:

+

Configure block proposal permissioning using the Besu command line options.

\ No newline at end of file diff --git a/private-networks/concepts/plugins.html b/private-networks/concepts/plugins.html index 37cdff75f10..c0b3429fc70 100644 --- a/private-networks/concepts/plugins.html +++ b/private-networks/concepts/plugins.html @@ -1,22 +1,22 @@ - + -Plugins | Besu documentation +Plugins | Besu documentation - - + + -

Plugins

+

Plugins

You can extend Besu functionality by building Java plugins or using existing open source Besu plugins. Use the Plugin API to take data from any Besu network, public or permissioned, and feed it into an application or system.

For example, create a plugin to add more monitoring functionality or stream event data to a third-party application. The API exposes data about the following components:

    @@ -40,6 +40,6 @@

    Install plug
  • Start - Plugins start after being successfully registered.
  • Stop - Besu stops plugins.
-
note

The order in which Besu calls plugins during lifecycle events is not guaranteed.

+
note

The order in which Besu calls plugins during lifecycle events is not guaranteed.

\ No newline at end of file diff --git a/private-networks/concepts/poa.html b/private-networks/concepts/poa.html index bbc3b8ac107..3a22857e3e2 100644 --- a/private-networks/concepts/poa.html +++ b/private-networks/concepts/poa.html @@ -1,22 +1,22 @@ - + -Proof of authority consensus | Besu documentation +Proof of authority consensus | Besu documentation - - + + -

Proof of authority consensus

+

Proof of authority consensus

Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) consensus protocols. PoA consensus protocols work when participants know each other and there is a level of trust between them. For example, in a permissioned consortium network.

PoA consensus protocols have faster block times and a much greater transaction throughput than the Ethash proof of work consensus protocol used on the Ethereum Mainnet.

In QBFT, IBFT 2.0, or Clique, a group of nodes in the network act as validators (QBFT and IBFT 2.0) or signers (Clique). The existing nodes in the signer/validator pool vote to add nodes to or remove nodes from the pool.

@@ -46,6 +46,6 @@

Liveness
caution

We recommend using QBFT or IBFT 2.0 networks with at least four nodes in production environments.

Speed

Reaching consensus and adding blocks is faster in Clique networks. For Clique, the probability of a fork increases as the number of validators increases.

-

For QBFT and IBFT 2.0, the time to add new blocks increases as the number of validators increases.

+

For QBFT and IBFT 2.0, the time to add new blocks increases as the number of validators increases.

\ No newline at end of file diff --git a/private-networks/concepts/privacy.html b/private-networks/concepts/privacy.html index 404f995af8c..f911cc87648 100644 --- a/private-networks/concepts/privacy.html +++ b/private-networks/concepts/privacy.html @@ -1,22 +1,22 @@ - + -Privacy | Besu documentation +Privacy | Besu documentation - - + + -

Privacy

+

Privacy

In Besu, privacy refers to the ability to keep transactions private between the involved participants. Other participants cannot access the transaction content or list of participants.

danger

For production environments requiring private transactions:

  • We recommend using a network with a consensus mechanism supporting transaction finality. For example, IBFT 2.0.
  • @@ -41,6 +41,6 @@

    Pri

    Privacy-enabled networks should run development and test environments that closely resemble production, so contracts can be tested, and potential issues can be found before they're deployed in production.

    Reorg-compatible privacy

    In v1.4, using private transactions in a network using a consensus mechanism where forks occur (that is, PoW algorithms or Clique) is an early access feature.

    -

    Do not use private transactions in production environments using consensus mechanisms where forks occur.

+

Do not use private transactions in production environments using consensus mechanisms where forks occur.

\ No newline at end of file diff --git a/private-networks/concepts/privacy/flexible-privacy.html b/private-networks/concepts/privacy/flexible-privacy.html index fb178ecfc9a..b272148adce 100644 --- a/private-networks/concepts/privacy/flexible-privacy.html +++ b/private-networks/concepts/privacy/flexible-privacy.html @@ -1,22 +1,22 @@ - + -Flexible privacy groups | Besu documentation +Flexible privacy groups | Besu documentation - - + + -

Flexible privacy groups

+

Flexible privacy groups

Flexible privacy groups use smart contracts to store and maintain the group membership. You can add and remove members to and from flexible privacy groups.

tip

Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups.

danger

Flexible privacy groups are an early access feature. Don't use in production networks.

The flexible privacy group interfaces might change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions.

We don't recommended creating flexible privacy groups in a chain with existing offchain privacy groups.

@@ -46,6 +46,6 @@

Multi-tenancy<
note

When a user is removed from a privacy group, any log filters they've created are also removed and can't be accessed. A user can only create and access filters for a privacy group they are currently a member of.

-

All other PRIV API methods fail for the removed group member.

+

All other PRIV API methods fail for the removed group member.

\ No newline at end of file diff --git a/private-networks/concepts/privacy/multi-tenancy.html b/private-networks/concepts/privacy/multi-tenancy.html index 79b6f37eb17..f38128a139f 100644 --- a/private-networks/concepts/privacy/multi-tenancy.html +++ b/private-networks/concepts/privacy/multi-tenancy.html @@ -1,28 +1,28 @@ - + -Multi-tenancy | Besu documentation +Multi-tenancy | Besu documentation - - + + -

Multi-tenancy

+

Multi-tenancy

By default, each participant in a privacy network uses its own Besu and Tessera node.

Multi-tenancy allows multiple participants to use the same Besu and Tessera node. Each participant is a tenant, and the operator is the owner of the Besu and Tessera node.

info

The operator is responsible for configuring multi-tenancy, and has access to all tenant data.

Multi-tenancy

tip

Ensure the multi-tenant Tessera node client API is configured to allow access only by the multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode.

If not configured to allow access only by the multi-tenant Besu node, other Tessera clients, including other Besu nodes, might be able to access tenant data.

To secure access, you can configure TLS between Besu and Tessera with the WHITELIST trust mode.

Multi-tenancy validates that tenants have permission to use the specified HTTP or WebSocket JSON-RPC requests, and the tenant has access to the requested privacy data. Private data is isolated and each tenant uses a JSON Web Token (JWT) for authentication.

-

You can create the JWT either externally or internally.

+

You can create the JWT either externally or internally.

\ No newline at end of file diff --git a/private-networks/concepts/privacy/plugin.html b/private-networks/concepts/privacy/plugin.html index 334821a668a..6ec176329f7 100644 --- a/private-networks/concepts/privacy/plugin.html +++ b/private-networks/concepts/privacy/plugin.html @@ -1,22 +1,22 @@ - + -Privacy plugin | Besu documentation +Privacy plugin | Besu documentation - - + + -

Privacy plugin

+

Privacy plugin

You can define your own strategy for private transactions by building a plugin that extends Besu functionality.

The plugin can take many forms, but it must provide Besu with a private transaction when required.

danger

The privacy plugin is an early access feature and plugin interfaces are subject to change between releases.

@@ -58,6 +58,6 @@

Transact

Your plugin needs to register the PrivateMarkerTransactionFactory interface which is called before submitting a PMT to the transaction pool. The responsibility then lies with the plugin to sign and serialize the PMT.

Register your plugin

To enable Besu to use your privacy plugin, implement the PrivacyPluginService interface and call setPayloadProvider.

-
@AutoService(BesuPlugin.class)
public class TestPrivacyPlugin implements BesuPlugin {
private PrivacyPluginService service;
@Override
public void register(BesuContext context) {
service = context.getService(PrivacyPluginService.class).get();
}
@Override
public void start() {
service.setPayloadProvider(new PrivacyPluginPayloadProvider() {
@Override
public Bytes generateMarkerPayload(PrivateTransaction privateTransaction, String privacyUserId) {
// perform logic to serialize the payload of the marker transaction
// in this example we are serialising the private transaction using rlp https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/
return org.hyperledger.besu.ethereum.privacy.PrivateTransaction.serialize(privateTransaction).encoded();
}
@Override
public Optional<PrivateTransaction> getPrivateTransactionFromPayload(Transaction transaction) {
// perform logic to deserialize payload from the marker transaction
final BytesValueRLPInput bytesValueRLPInput =
new BytesValueRLPInput(transaction.getPayload(), false);
return Optional.of(org.hyperledger.besu.ethereum.privacy.PrivateTransaction.readFrom(bytesValueRLPInput));
}
});
}
@Override
public void stop() {}
}
+
@AutoService(BesuPlugin.class)
public class TestPrivacyPlugin implements BesuPlugin {
private PrivacyPluginService service;
@Override
public void register(BesuContext context) {
service = context.getService(PrivacyPluginService.class).get();
}
@Override
public void start() {
service.setPayloadProvider(new PrivacyPluginPayloadProvider() {
@Override
public Bytes generateMarkerPayload(PrivateTransaction privateTransaction, String privacyUserId) {
// perform logic to serialize the payload of the marker transaction
// in this example we are serialising the private transaction using rlp https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/
return org.hyperledger.besu.ethereum.privacy.PrivateTransaction.serialize(privateTransaction).encoded();
}
@Override
public Optional<PrivateTransaction> getPrivateTransactionFromPayload(Transaction transaction) {
// perform logic to deserialize payload from the marker transaction
final BytesValueRLPInput bytesValueRLPInput =
new BytesValueRLPInput(transaction.getPayload(), false);
return Optional.of(org.hyperledger.besu.ethereum.privacy.PrivateTransaction.readFrom(bytesValueRLPInput));
}
});
}
@Override
public void stop() {}
}
\ No newline at end of file diff --git a/private-networks/concepts/privacy/privacy-groups.html b/private-networks/concepts/privacy/privacy-groups.html index b079cc5b1ad..3f83d69dd92 100644 --- a/private-networks/concepts/privacy/privacy-groups.html +++ b/private-networks/concepts/privacy/privacy-groups.html @@ -1,22 +1,22 @@ - + -Privacy groups | Besu documentation +Privacy groups | Besu documentation - - + + -

Privacy groups

+

Privacy groups

A privacy group is a group of nodes identified by a unique privacy group ID by Tessera. Tessera stores each private transaction with the privacy group ID.

The Besu nodes maintain the public world state for the blockchain and a private state for each privacy group. The private states contain data that is not shared in the globally replicated world state.

caution

The privacy group implementations described below are offchain privacy groups and cannot have their group membership updated.

Flexible privacy groups are an early access feature.

@@ -52,6 +52,6 @@

Besu-e

Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a privacy group consisting of A, B, and C. The privacy group ID is specified when sending private transactions and A, B, and C are recipients of all private transactions sent to the privacy group.

To send private transactions between A, C, and D, A creates a privacy group consisting of A, C, and D. The privacy group ID of this group is specified when sending private transactions with A, C, and D as recipients.

Multi-tenancy

-

When using multi-tenancy with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group.

+

When using multi-tenancy with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group.

\ No newline at end of file diff --git a/private-networks/concepts/privacy/private-transactions.html b/private-networks/concepts/privacy/private-transactions.html index 7fef728aa54..f0bb9b12d18 100644 --- a/private-networks/concepts/privacy/private-transactions.html +++ b/private-networks/concepts/privacy/private-transactions.html @@ -1,22 +1,22 @@ - + -Private transactions | Besu documentation +Private transactions | Besu documentation - - + + -

Private transactions

+ +
tip

The web3js-quorum library includes an example of nonce management when sending concurrent private transactions. The example calculates the correct nonces for the private transactions and PMTs outside of Besu.

\ No newline at end of file diff --git a/private-networks/concepts/privacy/private-transactions/processing.html b/private-networks/concepts/privacy/private-transactions/processing.html index 368236c9acb..ba440484c30 100644 --- a/private-networks/concepts/privacy/private-transactions/processing.html +++ b/private-networks/concepts/privacy/private-transactions/processing.html @@ -1,22 +1,22 @@ - + -Private transaction processing | Besu documentation +Private transaction processing | Besu documentation - - + + -

Private transaction processing

+ +

Using private transactions with pruning or fast sync is not supported.

\ No newline at end of file diff --git a/private-networks/get-started.html b/private-networks/get-started.html index 60dc52fe983..6a9db92c147 100644 --- a/private-networks/get-started.html +++ b/private-networks/get-started.html @@ -1,21 +1,21 @@ - + -Get started | Besu documentation +Get started | Besu documentation - - + + - + \ No newline at end of file diff --git a/private-networks/get-started/install.html b/private-networks/get-started/install.html index 06b91542877..30a5d2ebf5c 100644 --- a/private-networks/get-started/install.html +++ b/private-networks/get-started/install.html @@ -1,22 +1,22 @@ - + -Installation options | Besu documentation +Installation options | Besu documentation - - + + -

Installation options

+

Installation options

Get started with the Developer Quickstart. Use the quickstart to rapidly generate local blockchain networks.

You can also install the following:

    @@ -25,6 +25,6 @@

Build from source

If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the binary or Docker image for more stable versions.

-

View the Wiki for instructions to install Besu from source.

+

View the Wiki for instructions to install Besu from source.

\ No newline at end of file diff --git a/private-networks/get-started/install/binary-distribution.html b/private-networks/get-started/install/binary-distribution.html index 3f9199a4242..ec475057bd3 100644 --- a/private-networks/get-started/install/binary-distribution.html +++ b/private-networks/get-started/install/binary-distribution.html @@ -1,22 +1,22 @@ - + -Install binary distribution | Besu documentation +Install binary distribution | Besu documentation - - + + -
\ No newline at end of file diff --git a/private-networks/get-started/install/run-docker-image.html b/private-networks/get-started/install/run-docker-image.html index b539d7456e3..7cca1193804 100644 --- a/private-networks/get-started/install/run-docker-image.html +++ b/private-networks/get-started/install/run-docker-image.html @@ -1,22 +1,22 @@ - + -Run Besu from Docker image | Besu documentation +Run Besu from Docker image | Besu documentation - - + + - +
docker rm <container-name>
\ No newline at end of file diff --git a/private-networks/get-started/start-node.html b/private-networks/get-started/start-node.html index a9be2cf5a77..819e7cb13c7 100644 --- a/private-networks/get-started/start-node.html +++ b/private-networks/get-started/start-node.html @@ -1,22 +1,22 @@ - + -Start Besu | Besu documentation +Start Besu | Besu documentation - - + + -

Start Besu

+

Start Besu

Use the besu command with the required command line options to start a node.

Prerequisites

Besu installed

@@ -56,6 +56,6 @@

besu --genesis-file=<path>/genesis.json --data-path=<data-path> --rpc-http-enabled --bootnodes=<bootnodes>

Where <data-path> is the path to the directory to save the chain data to. Ensure you configure a peer discovery method, such as bootnodes.

note

You might need to set --tx-pool-limit-by-account-percentage to 1. The default value is suitable for Mainnet, but may cause issues on private networks.

-
Sync nodes for BFT

If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync.

Full sync is set by default.

+
Sync nodes for BFT

If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync.

Full sync is set by default.

\ No newline at end of file diff --git a/private-networks/get-started/system-requirements.html b/private-networks/get-started/system-requirements.html index f92eecc8c02..ceb467936e7 100644 --- a/private-networks/get-started/system-requirements.html +++ b/private-networks/get-started/system-requirements.html @@ -1,22 +1,22 @@ - + -System requirements | Besu documentation +System requirements | Besu documentation - - + + -

System requirements

+

System requirements

Private network system requirements depend on many factors, including:

  • Size of the world state for the network.
  • @@ -45,6 +45,6 @@

    VM requireme

Disk type

Use local SSD storage for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup.

-

You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.

+

You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.

\ No newline at end of file diff --git a/private-networks/how-to.html b/private-networks/how-to.html index 3c751bd4bc5..4f7a18d13c1 100644 --- a/private-networks/how-to.html +++ b/private-networks/how-to.html @@ -1,22 +1,22 @@ - + -How to | Besu documentation +How to | Besu documentation - - + + -
\ No newline at end of file diff --git a/private-networks/how-to/backup.html b/private-networks/how-to/backup.html index aaca1ee214e..98fdeaba633 100644 --- a/private-networks/how-to/backup.html +++ b/private-networks/how-to/backup.html @@ -1,22 +1,22 @@ - + -Backup and restore | Besu documentation +Backup and restore | Besu documentation - - + + -

Backup and restore Besu

+

Backup and restore Besu

In a decentralized blockchain, data replicates between nodes so it is not lost. But backing up configuration and data ensures a smoother recovery from corrupted data or other failures.

Genesis file

The genesis file for a network must be accessible on every node. We recommend storing the genesis file under source control.

@@ -47,6 +47,6 @@

--version-compatibility-protection option to true.

Find peers after restarting

-

The process for finding peers after restarting is the same as for finding peers after upgrading and restarting.

+

The process for finding peers after restarting is the same as for finding peers after upgrading and restarting.

\ No newline at end of file diff --git a/private-networks/how-to/configure/block-proposal-permissioning.html b/private-networks/how-to/configure/block-proposal-permissioning.html index 38ddc95c6d0..2759a62511b 100644 --- a/private-networks/how-to/configure/block-proposal-permissioning.html +++ b/private-networks/how-to/configure/block-proposal-permissioning.html @@ -1,22 +1,22 @@ - + -Block proposal permissioning | Besu documentation +Block proposal permissioning | Besu documentation - - + + -

Block proposal permissioning

+

Block proposal permissioning

info

Only private networks using the QBFT consensus protocol support block proposal permissioning.

Block proposal permissioning is an early access feature, and functionality and options may be updated between releases.

You can configure block proposal permissioning to ensure only authorized validator nodes can propose blocks in the network.

Use certificates issued by a trusted authority to ensure validators are authorized to propose blocks.

@@ -66,6 +66,6 @@

Xpki-block-creation-truststore-type

--Xpki-block-creation-truststore-type=<TYPE>
-

PKI truststore type. Valid options are JKS and PKCS12. The default is JKS.

+

PKI truststore type. Valid options are JKS and PKCS12. The default is JKS.

\ No newline at end of file diff --git a/private-networks/how-to/configure/bootnodes.html b/private-networks/how-to/configure/bootnodes.html index 77214976bd8..9677f3627ee 100644 --- a/private-networks/how-to/configure/bootnodes.html +++ b/private-networks/how-to/configure/bootnodes.html @@ -1,22 +1,22 @@ - + -Bootnodes | Besu documentation +Bootnodes | Besu documentation - - + + -

Configure bootnodes

+

Configure bootnodes

You can use bootnodes to initially discover peers. Bootnodes are regular nodes used to discover other nodes.

In private networks for development or testing purposes, specify at least one bootnode.

In production networks, configure two or more nodes as bootnodes.

@@ -48,6 +48,6 @@

tip

Having each bootnode list the other bootnodes increases the speed of discovery. Nodes ignore their own enode in the bootnodes list so it isn't required to specify different bootnode lists to the bootnodes themselves.

Add and remove bootnodes

Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and adding them to the network, update the --bootnodes command line option for each node to include the new bootnodes.

-

When adding bootnodes, you don't need to restart running nodes. By updating the --bootnodes option, the next time you restart the nodes (for example, when upgrading), the nodes connect to the new bootnodes.

+

When adding bootnodes, you don't need to restart running nodes. By updating the --bootnodes option, the next time you restart the nodes (for example, when upgrading), the nodes connect to the new bootnodes.

\ No newline at end of file diff --git a/private-networks/how-to/configure/consensus.html b/private-networks/how-to/configure/consensus.html index 9b4c3f5ec69..c516923bb96 100644 --- a/private-networks/how-to/configure/consensus.html +++ b/private-networks/how-to/configure/consensus.html @@ -1,22 +1,22 @@ - + -Consensus protocols | Besu documentation +Consensus protocols | Besu documentation - - + + -

Consensus protocols

+

Consensus protocols

Besu supports the following consensus protocols:

  • QBFT (proof of authority) - The recommended enterprise-grade consensus protocol for private networks.
  • @@ -27,6 +27,6 @@

See a comparison of the proof of authority consensus protocols.

The config property in the genesis file specifies the consensus protocol for a chain.

-
{
"config": {
...
"ethash": {
...
}
},
...
}
+
{
"config": {
...
"ethash": {
...
}
},
...
}
\ No newline at end of file diff --git a/private-networks/how-to/configure/consensus/add-validators-without-voting.html b/private-networks/how-to/configure/consensus/add-validators-without-voting.html index 7fbdce20634..08bf8a1e145 100644 --- a/private-networks/how-to/configure/consensus/add-validators-without-voting.html +++ b/private-networks/how-to/configure/consensus/add-validators-without-voting.html @@ -1,22 +1,22 @@ - + -Add and remove validators without voting | Besu documentation +Add and remove validators without voting | Besu documentation - - + + -

Add and remove validators without voting

+

Add and remove validators without voting

QBFT or IBFT 2.0 network conditions might not allow voting to change validators. For example, if a majority of the current validators are no longer participating in the network, a vote to add or remove validators won't be successful. You can bypass voting and specify new validators using a transition in the genesis file.

caution
  • In most cases, add or remove validators by voting or smart contract for QBFT; or by voting for IBFT 2.0. Use transitions only when voting isn't possible. Using transitions requires coordinating a rolling update of all the nodes in order to pick up the configuration at the correct block height. Using transitions also leaves the validator overrides permanently in your genesis configuration.
  • @@ -72,6 +72,6 @@

+
\ No newline at end of file diff --git a/private-networks/how-to/configure/consensus/clique.html b/private-networks/how-to/configure/consensus/clique.html index 5a604e612dd..46cd923fcee 100644 --- a/private-networks/how-to/configure/consensus/clique.html +++ b/private-networks/how-to/configure/consensus/clique.html @@ -1,22 +1,22 @@ - + -Clique | Besu documentation +Clique | Besu documentation - - + + -

Configure Clique consensus

+

Configure Clique consensus

Besu implements the Clique proof of authority (PoA) consensus protocol. Private networks can use Clique.

danger

Clique is not suitable for production environments. Use only in development environments.

In Clique networks, approved accounts, known as signers, validate transactions and blocks. Signers take turns to create the next block. Existing signers propose and vote to add or remove signers.

@@ -130,6 +130,6 @@

Limitations

In Clique, blocks created by in-turn validators are published immediately. Out-of-turn validators create blocks that are published after a short delay. In-turn blocks have a higher difficulty than out-of-turn blocks, which allows small forks to resolve to the chain with more in-turn blocks.

However, when the out-of-turn delay is shorter than the block propagation delay, out-of-turn blocks may be published before in-turn blocks. This may cause large, irresolvable forks in a network.

-
tip

We recommend using a more updated consensus protocol such as IBFT 2.0 or QBFT.

+
tip

We recommend using a more updated consensus protocol such as IBFT 2.0 or QBFT.

\ No newline at end of file diff --git a/private-networks/how-to/configure/consensus/ibft.html b/private-networks/how-to/configure/consensus/ibft.html index 9df06f47d86..08da3344310 100644 --- a/private-networks/how-to/configure/consensus/ibft.html +++ b/private-networks/how-to/configure/consensus/ibft.html @@ -1,22 +1,22 @@ - + -IBFT 2.0 | Besu documentation +IBFT 2.0 | Besu documentation - - + + -

Configure IBFT 2.0 consensus

+

Configure IBFT 2.0 consensus

Besu implements the IBFT 2.0 proof of authority (PoA) consensus protocol. IBFT 2.0 is supported for existing private networks, but QBFT is the recommended enterprise-grade consensus protocol for private networks.

In IBFT 2.0 networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block.

Existing validators propose and vote to add or remove validators.

@@ -189,6 +189,6 @@

+
\ No newline at end of file diff --git a/private-networks/how-to/configure/consensus/qbft.html b/private-networks/how-to/configure/consensus/qbft.html index bcb1604b7e0..4e9ee76026a 100644 --- a/private-networks/how-to/configure/consensus/qbft.html +++ b/private-networks/how-to/configure/consensus/qbft.html @@ -1,22 +1,22 @@ - + -QBFT | Besu documentation +QBFT | Besu documentation - - + + -

Configure QBFT consensus

+

Configure QBFT consensus

Besu implements the QBFT proof of authority (PoA) consensus protocol. QBFT is the recommended enterprise-grade consensus protocol for private networks.

In QBFT networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block.

Existing validators propose and vote to add or remove validators.

@@ -238,6 +238,6 @@

+
\ No newline at end of file diff --git a/private-networks/how-to/configure/contracts.html b/private-networks/how-to/configure/contracts.html index 81b3856f016..a9c941f6f59 100644 --- a/private-networks/how-to/configure/contracts.html +++ b/private-networks/how-to/configure/contracts.html @@ -1,22 +1,22 @@ - + -Pre-deploy a contract | Besu documentation +Pre-deploy a contract | Besu documentation - - + + -

Pre-deploy contracts in the genesis file

+

Pre-deploy contracts in the genesis file

To pre-deploy contracts when starting Besu, specify the contract code in the genesis file.

Contract code in the genesis file
{
...
"alloc": {
"0x0ffd23af8eebc60b3cfdeed6f814988757237314": {
"balance": "0x100000000000000000000000000000000000000000000000000",
"code": "0x6080604052600436106043576000357c010000000000000000000000000000000000000000000000000000000090048063010fc84214604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b80600081905550807f04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce360405160405180910390a25056fea165627a7a7230582038cb7ea327af8f73feabcfbff64498f1e74831e67f7c75286760d3845c6747c70029",
"storage": {
"7aa07e0c924147697605046b7c2c32645b7bbfb41e0ac5d0a84ac93cbb759798": "0000000000000000000000000000000000000000000000000000000000000001",
"cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb": "0000000000000000000000000000000000000000000000000000000000000001",
}
}
},
...
}

The contract code in the genesis file defines the:

@@ -25,6 +25,6 @@
  • Balance.
  • Bytecode.
  • Key value pairs for contract storage.
  • -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/configure/curves.html b/private-networks/how-to/configure/curves.html index 8013c8f03a7..a1c88c3c0ad 100644 --- a/private-networks/how-to/configure/curves.html +++ b/private-networks/how-to/configure/curves.html @@ -1,22 +1,22 @@ - + -Alternative elliptic curves | Besu documentation +Alternative elliptic curves | Besu documentation - - + + -

    Configure alternative elliptic curves

    +

    Configure alternative elliptic curves

    caution

    Configuring alternative elliptic curves is an early access feature.

    By default, Besu uses the Ethereum standard secp256k1 elliptic curve (EC). However, when running nodes in a private network, it is possible to configure an alternative elliptic curve.

    The configuration for what elliptic curve Besu will use is done in the network configuration section of genesis file, using the ecCurve key:

    @@ -26,6 +26,6 @@
    • secp256k1 (Ethereum default)
    • secp256r1
    • -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/configure/free-gas.html b/private-networks/how-to/configure/free-gas.html index fdbb0fea98a..6ac3c683d8c 100644 --- a/private-networks/how-to/configure/free-gas.html +++ b/private-networks/how-to/configure/free-gas.html @@ -1,22 +1,22 @@ - + -Free gas network | Besu documentation +Free gas network | Besu documentation - - + + -

    Configure free gas networks

    +

    Configure free gas networks

    Transactions use computational resources so have an associated cost. Gas is the cost unit and the gas price is the price per gas unit. The transaction cost is the gas used * gas price.

    In public networks, the account submitting the transaction pays the transaction cost, in Ether. The miner (or validator in PoA networks) that includes the transaction in a block receives transaction cost.

    In many private networks, network participants run the validators and do not require gas as an incentive. Networks that don't require gas as an incentive usually configure the gas price to be zero (that is, free gas). Some private networks might allocate Ether and use a non-zero gas price to limit resource use.

    @@ -60,6 +60,6 @@

    Updat

    Specify evmVersion when using the latest Solidity version.

    solidity: {
    version: "0.8.20",
    settings: {
    evmVersion: "london", // required for Besu
    optimizer: {...},
    },
    },
    -

    +
    \ No newline at end of file diff --git a/private-networks/how-to/configure/tls/client-and-server.html b/private-networks/how-to/configure/tls/client-and-server.html index 2893337017d..2fb6b4d1c73 100644 --- a/private-networks/how-to/configure/tls/client-and-server.html +++ b/private-networks/how-to/configure/tls/client-and-server.html @@ -1,22 +1,22 @@ - + -Client and server TLS | Besu documentation +Client and server TLS | Besu documentation - - + + -

    Configure client and server TLS

    +
    +
    \ No newline at end of file diff --git a/private-networks/how-to/configure/tls/p2p.html b/private-networks/how-to/configure/tls/p2p.html index 8fe697c8f1b..d89b3883173 100644 --- a/private-networks/how-to/configure/tls/p2p.html +++ b/private-networks/how-to/configure/tls/p2p.html @@ -1,22 +1,22 @@ - + -Peer-to-peer TLS | Besu documentation +Peer-to-peer TLS | Besu documentation - - + + -

    Configure P2P TLS

    +

    Configure P2P TLS

    You can configure TLS to secure the P2P communication between nodes by ensuring only authorized nodes can communicate with each other. Use certificates issued by a trusted authority to connect authorized nodes in the network.

    caution

    P2P TLS is an early access feature, and functionality and options may be updated between releases.

    Besu supports PKCS11, PKCS12, and JKS keystore and truststore types for P2P TLS.

    @@ -62,6 +62,6 @@

    Xp2p-tls-truststore-type

    --Xp2p-tls-truststore-type=<TYPE>
    -

    Truststore type. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.

    +

    Truststore type. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.

    \ No newline at end of file diff --git a/private-networks/how-to/configure/validators.html b/private-networks/how-to/configure/validators.html index f60cc3e40f9..b71f3eb13da 100644 --- a/private-networks/how-to/configure/validators.html +++ b/private-networks/how-to/configure/validators.html @@ -1,22 +1,22 @@ - + -Validators | Besu documentation +Validators | Besu documentation - - + + -

    Configure validators in a production network

    +

    Configure validators in a production network

    As when configuring bootnodes:

    1. @@ -41,6 +41,6 @@

      vote validators in or out of the validator pool.

      Validators as bootnodes

      Validators can also be bootnodes. Other than the usual configuration for bootnodes, you do not need to specify any extra configuration when a validator is also a bootnode.

      -

      If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network.

    +

    If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network.

    \ No newline at end of file diff --git a/private-networks/how-to/deploy/ansible.html b/private-networks/how-to/deploy/ansible.html index c16fccd57e1..4fbad87c6d7 100644 --- a/private-networks/how-to/deploy/ansible.html +++ b/private-networks/how-to/deploy/ansible.html @@ -1,24 +1,24 @@ - + -Use Ansible | Besu documentation +Use Ansible | Besu documentation - - + + -

    Deploy Besu with Ansible

    +

    Deploy Besu with Ansible

    To deploy Besu using Ansible, use the Besu role published on Galaxy.

    For more information, see the "Read Me" button on the Ansible Galaxy Besu page.

    -
    tip

    We strongly recommend automating network creation. Automating makes updates easier and ensures your configuration is synchronized across the network.

    +
    tip

    We strongly recommend automating network creation. Automating makes updates easier and ensures your configuration is synchronized across the network.

    \ No newline at end of file diff --git a/private-networks/how-to/deploy/cloud.html b/private-networks/how-to/deploy/cloud.html index 2e58a33ee80..9f7dba27576 100644 --- a/private-networks/how-to/deploy/cloud.html +++ b/private-networks/how-to/deploy/cloud.html @@ -1,28 +1,28 @@ - + -Deploy to the cloud | Besu documentation +Deploy to the cloud | Besu documentation - - + + -

    Deploy Besu to the cloud

    +

    Deploy Besu to the cloud

    When deploying Besu to the cloud:

    • Ensure you have enough spread across Availability Zones (AZs) and Regions, especially for bootnodes and validators.
    • If your network is a multi-region network, consider using VPC Peering to reduce latency.
    • Where required, use VPNs to connect to your on premise systems, or single private chains.
    • If deploying to Kubernetes, please refer to the tutorial.
    • -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/deploy/ethstats.html b/private-networks/how-to/deploy/ethstats.html index 86bbfe0287f..b1f0837a577 100644 --- a/private-networks/how-to/deploy/ethstats.html +++ b/private-networks/how-to/deploy/ethstats.html @@ -1,22 +1,22 @@ - + -Use Ethstats network monitor | Besu documentation +Use Ethstats network monitor | Besu documentation - - + + -

    Connect to Ethstats network monitor

    +

    Connect to Ethstats network monitor

    Connect to Ethstats to display real time and historical statistics about the network and nodes. You can connect to the Ethstats dashboard by connecting to a client and server or by connecting through the command line.

    Components

    Ethstats consists of:

    @@ -47,6 +47,6 @@

    besu --ethstats=Dev-Node-1:secret@127.0.0.1:3001 --ethstats-contact=contact@mail.com

    note

    A server must be specified by --ethstats in order to use --ethstats-contact.

    Open the selected dashboard website. Find your node under the list of nodes to see the statistics for the node and the network.

    -

    dashboard

    +

    dashboard

    \ No newline at end of file diff --git a/private-networks/how-to/deploy/kubernetes.html b/private-networks/how-to/deploy/kubernetes.html index 58c83d5d31a..fad7acb2851 100644 --- a/private-networks/how-to/deploy/kubernetes.html +++ b/private-networks/how-to/deploy/kubernetes.html @@ -1,23 +1,23 @@ - + -Use Kubernetes | Besu documentation +Use Kubernetes | Besu documentation - - + + -

    Deploy Besu with Kubernetes

    +

    Deploy Besu with Kubernetes

    Use the reference implementations to install private networks using Kubernetes (K8s). The repository has full support for cloud providers like AWS, Azure, GCP, and IBM, and has production setups that use of identities and cloud-native secret storage services like Azure KeyVault and AWS Secrets Manager.

    -

    Refer to the tutorial and familiarize yourself with the reference implementations, and customize them to your requirements.

    +

    Refer to the tutorial and familiarize yourself with the reference implementations, and customize them to your requirements.

    \ No newline at end of file diff --git a/private-networks/how-to/monitor.html b/private-networks/how-to/monitor.html index 0bd30e9fa3f..2c5b00370f1 100644 --- a/private-networks/how-to/monitor.html +++ b/private-networks/how-to/monitor.html @@ -1,22 +1,22 @@ - + -Monitoring | Besu documentation +Monitoring | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/chainlens.html b/private-networks/how-to/monitor/chainlens.html index 009295089dd..96b89cc4769 100644 --- a/private-networks/how-to/monitor/chainlens.html +++ b/private-networks/how-to/monitor/chainlens.html @@ -1,22 +1,22 @@ - + -Use Chainlens Explorer | Besu documentation +Use Chainlens Explorer | Besu documentation - - + + -

    Use Chainlens Blockchain Explorer

    + +
    docker-compose down
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/elastic-stack.html b/private-networks/how-to/monitor/elastic-stack.html index b11e12dc0d3..a4370903f5d 100644 --- a/private-networks/how-to/monitor/elastic-stack.html +++ b/private-networks/how-to/monitor/elastic-stack.html @@ -1,22 +1,22 @@ - + -Use Elastic Stack | Besu documentation +Use Elastic Stack | Besu documentation - - + + -

    Use Elastic Stack

    +

    Use Elastic Stack

    Elastic Stack (ELK) is an open-source log management platform that is available when using the Developer Quickstart.

    The Filebeat configuration ingests logs and the Metricbeat configuration collects metrics from the nodes at regular defined intervals and outputs them to Redis for storage. Redis provides a highly available mechanism enabling storage by any of the Elastic Beats and pulled by Logstash as required.

    The pipeline configuration defines the JSON format used for Besu logs and automatically picks up any new log fields.

    @@ -30,6 +30,6 @@

    Open the Kibana logs address listed by the sample networks list.sh script. The logs display in Kibana.

    Kibana

    -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/loki.html b/private-networks/how-to/monitor/loki.html index 82abfdedbf5..857cb02547b 100644 --- a/private-networks/how-to/monitor/loki.html +++ b/private-networks/how-to/monitor/loki.html @@ -1,22 +1,22 @@ - + -Use Grafana Loki | Besu documentation +Use Grafana Loki | Besu documentation - - + + -

    Grafana Loki

    +

    Grafana Loki

    Grafana Loki is an open-source log management platform that is available when using the Developer Quickstart.

    The Promtail configuration ingests logs at regular defined intervals and outputs them to Loki for storage.

    The pipeline configuration in Promtail defines pipeline stages that can collate logs natively or using the JSON format.

    @@ -31,6 +31,6 @@

    The logs display in Loki.

    Loki logs

    -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/opentelemetry.html b/private-networks/how-to/monitor/opentelemetry.html index 6a9017ed637..87936aeb8a3 100644 --- a/private-networks/how-to/monitor/opentelemetry.html +++ b/private-networks/how-to/monitor/opentelemetry.html @@ -1,22 +1,22 @@ - + -Use OpenTelemetry | Besu documentation +Use OpenTelemetry | Besu documentation - - + + -

    Use OpenTelemetry

    +

    Use OpenTelemetry

    You can use the OpenTelemetry monitoring and tracing service to gather node metrics and traces. To enable OpenTelemetry to access Besu, use the --metrics-enabled and --metrics-protocol=opentelemetry options. Use Splunk to visualize the collected data. A Besu Sync example is available.

    tip

    Use OpenTelemetry to monitor the sync time of your Besu node and show where time is spent internally and over the JSON-RPC interface.

    This office hours recording shows examples of monitoring Besu.

    Install OpenTelemetry Collector

    @@ -38,6 +38,6 @@

    +
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/quorum-hibernate.html b/private-networks/how-to/monitor/quorum-hibernate.html index a93ddbda1ae..97072c0a7fb 100644 --- a/private-networks/how-to/monitor/quorum-hibernate.html +++ b/private-networks/how-to/monitor/quorum-hibernate.html @@ -1,27 +1,27 @@ - + -Use Quorum Hibernate | Besu documentation +Use Quorum Hibernate | Besu documentation - - + + -

    Use Quorum Hibernate

    +

    Use Quorum Hibernate

    Quorum Hibernate is a proxy that monitors a node's API traffic and hibernates the node when inactive. This reduces infrastructure costs by ensuring only nodes receiving API requests or nodes required to establish consensus are running.

    Quorum Hibernate wakes up hibernating nodes:

    • When a new transaction or API request is received.
    • To allow it to periodically sync with the network.
    • -
    +
    \ No newline at end of file diff --git a/private-networks/how-to/monitor/splunk.html b/private-networks/how-to/monitor/splunk.html index 4fba7992d89..675012638c6 100644 --- a/private-networks/how-to/monitor/splunk.html +++ b/private-networks/how-to/monitor/splunk.html @@ -1,22 +1,22 @@ - + -Use Splunk | Besu documentation +Use Splunk | Besu documentation - - + + -

    Use Splunk

    +

    Use Splunk

    Splunk is a third-party monitoring solution compatible with Besu. A Splunk server can receive Besu logs and enable complex search, visualization, and analysis.

    Splunk can aggregate multiple logs in one place and run complex queries without being connected to the machine running Besu to read the standard output.

    Options for running Splunk and Besu are:

    @@ -114,6 +114,6 @@

    StepsSplunk options reference

    -
    NameDescriptionRequired
    LOGGERSet to Splunk to activate sending logs to Splunk.Yes
    HOSTCurrent host. If in a Docker environment, the default value is the docker container ID. Otherwise, the default value is localhost.No
    SPLUNK_URLURL of the Splunk HTTP Event Collector. For example, use https://localhost:8088Yes
    SPLUNK_TOKENAuthentication token, usually of the form 11111111-1111-1111-1111-111111111111Yes
    SPLUNK_INDEXIndex to store logs. Defaults to besuNo
    SPLUNK_SOURCESource of the logs. Defaults to besuNo
    SPLUNK_SOURCETYPESource type of the logs. Defaults to besuNo
    SPLUNK_BATCH_SIZE_BYTESSize of a log batch in bytes. Defaults to 65536No
    SPLUNK_BATCH_SIZE_COUNTSize of a log batch in number of events. Defaults to 1000No
    SPLUNK_BATCH_INTERVALInterval at which to send log batches. Defaults to 500No
    SPLUNK_SKIPTLSVERIFYWhether to check the Splunk instance TLS certificate when sending data. Defaults to falseNo
    +
    NameDescriptionRequired
    LOGGERSet to Splunk to activate sending logs to Splunk.Yes
    HOSTCurrent host. If in a Docker environment, the default value is the docker container ID. Otherwise, the default value is localhost.No
    SPLUNK_URLURL of the Splunk HTTP Event Collector. For example, use https://localhost:8088Yes
    SPLUNK_TOKENAuthentication token, usually of the form 11111111-1111-1111-1111-111111111111Yes
    SPLUNK_INDEXIndex to store logs. Defaults to besuNo
    SPLUNK_SOURCESource of the logs. Defaults to besuNo
    SPLUNK_SOURCETYPESource type of the logs. Defaults to besuNo
    SPLUNK_BATCH_SIZE_BYTESSize of a log batch in bytes. Defaults to 65536No
    SPLUNK_BATCH_SIZE_COUNTSize of a log batch in number of events. Defaults to 1000No
    SPLUNK_BATCH_INTERVALInterval at which to send log batches. Defaults to 500No
    SPLUNK_SKIPTLSVERIFYWhether to check the Splunk instance TLS certificate when sending data. Defaults to falseNo
    \ No newline at end of file diff --git a/private-networks/how-to/send-transactions.html b/private-networks/how-to/send-transactions.html index 3b841676160..f2eacbbab01 100644 --- a/private-networks/how-to/send-transactions.html +++ b/private-networks/how-to/send-transactions.html @@ -1,22 +1,22 @@ - + -Create and send transactions | Besu documentation +Create and send transactions | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/how-to/send-transactions/concurrent-private-transactions.html b/private-networks/how-to/send-transactions/concurrent-private-transactions.html index 158b6c03a61..2930d0e11aa 100644 --- a/private-networks/how-to/send-transactions/concurrent-private-transactions.html +++ b/private-networks/how-to/send-transactions/concurrent-private-transactions.html @@ -1,28 +1,28 @@ - + -Send concurrent private transactions | Besu documentation +Send concurrent private transactions | Besu documentation - - + + -

    Send concurrent private transactions

    +

    Send concurrent private transactions

    Private transaction processing involves two transactions, the private transaction and the privacy marker transaction (PMT). The private transaction and the PMT each have their own nonce.

    If your private transaction rate requires sending private transactions without waiting for the previous private transaction to be mined, using eth_getTransactionCount and eea_sendRawTransaction may result in incorrect nonces.

    In this case, use priv_distributeRawTransaction instead of eea_sendRawTransaction.

    note

    You can use priv_getTransactionCount or priv_getEeaTransactionCount to get the nonce for an account for the specified privacy group or participants.

    Send the corresponding PMT using eth_sendRawTransaction, specifying the public PMT nonce. This method allows you to create and send the PMT yourself rather than eea_sendRawTransaction handling the PMT.

    caution

    When using priv_distributeRawTransaction to distribute transactions with consecutive nonces for the same account, the corresponding PMTs must use one account with the nonces in the same order as the private transactions.

    This is to ensure that the private transactions are executed in the correct order.

    -
    info

    The web3js-quorum library includes an example of how to send concurrent private transactions. The example uses offchain privacy groups. Use priv_getPrivacyPrecompileAddress to get the precompile address to specify in the to field when creating the PMT.

    +
    info

    The web3js-quorum library includes an example of how to send concurrent private transactions. The example uses offchain privacy groups. Use priv_getPrivacyPrecompileAddress to get the precompile address to specify in the to field when creating the PMT.

    \ No newline at end of file diff --git a/private-networks/how-to/send-transactions/private-transactions.html b/private-networks/how-to/send-transactions/private-transactions.html index a02452b49e7..eee8b6f5197 100644 --- a/private-networks/how-to/send-transactions/private-transactions.html +++ b/private-networks/how-to/send-transactions/private-transactions.html @@ -1,22 +1,22 @@ - + -Create and send private transactions | Besu documentation +Create and send private transactions | Besu documentation - - + + -

    Create and send private transactions

    +

    Create and send private transactions

    Create and send private transactions using:

    • web3js-quorum client library or web3j client library
    • @@ -46,6 +46,6 @@

      eea_sendRawTransaction parameter is a signed RLP-encoded private transaction. Shown below are examples of unsigned and unencoded private transactions to create a contract.

      Unencoded and unsigned EEA-compliant private transaction
      {
      "to": null,
      "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",
      "gas": "0x7600",
      "gasPrice": "0x0",
      "data": "0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",
      "nonce": "0x0",
      "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",
      "privateFor": [
      "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=",
      "6fg8q5rWMBoAT2oIiU3tYJbk4b7oAr7dxaaVY7TeM3U="
      ],
      "restriction": "restricted"
      }
      Unencoded and unsigned Besu-extended private transaction
      {
      "to": null,
      "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",
      "gas": "0x7600",
      "gasPrice": "0x0",
      "data": "0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",
      "nonce": "0x0",
      "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",
      "privacyGroupId": "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=",
      "restriction": "restricted"
      }
      -
      tip

      The example directory in the web3js-quorum client library contains examples of signing and encoding private transactions.

    +
    tip

    The example directory in the web3js-quorum client library contains examples of signing and encoding private transactions.

    \ No newline at end of file diff --git a/private-networks/how-to/send-transactions/revert-reason.html b/private-networks/how-to/send-transactions/revert-reason.html index d24a97ca37e..26666b06d39 100644 --- a/private-networks/how-to/send-transactions/revert-reason.html +++ b/private-networks/how-to/send-transactions/revert-reason.html @@ -1,22 +1,22 @@ - + -Include revert reason | Besu documentation +Include revert reason | Besu documentation - - + + -

    Revert reason

    +

    Revert reason

    In smart contracts, the revert operation triggers an exception to flag an error and revert the current call. The EVM passes back to the client an optional string message containing information about the error.

    pragma solidity ^0.8.4;

    contract VendingMachine {
    address owner;
    constructor() {
    owner = msg.sender;
    }
    error Unauthorized();
    function buy(uint amount) public payable {
    if (amount > msg.value / 2 ether)
    revert("Not enough Ether provided.");
    // Alternative way to do it:
    require(
    amount <= msg.value / 2 ether,
    "Not enough Ether provided."
    );
    // Perform the purchase.
    }
    function withdraw() public {
    if (msg.sender != owner)
    revert Unauthorized();

    payable(msg.sender).transfer(address(this).balance);
    }
    }

    Enable revert reason

    @@ -35,6 +35,6 @@

    Revert
    0x08c379a0                                                         // Function selector for Error(string)
    0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset
    0x000000000000000000000000000000000000000000000000000000000000001a // String length
    0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data
    Example of revert reason string for 'Not enough Ether provided'
    "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000"

    Dapp support

    -

    Client libraries, such as web3j, do not support extracting the revert reason from the transaction receipt. To extract the revert reason your dapp must interact directly with Besu using a custom JSON -> Object converter.

    +

    Client libraries, such as web3j, do not support extracting the revert reason from the transaction receipt. To extract the revert reason your dapp must interact directly with Besu using a custom JSON -> Object converter.

    \ No newline at end of file diff --git a/private-networks/how-to/upgrade.html b/private-networks/how-to/upgrade.html index a743b01530e..2984fe51529 100644 --- a/private-networks/how-to/upgrade.html +++ b/private-networks/how-to/upgrade.html @@ -1,22 +1,22 @@ - + -Upgrade | Besu documentation +Upgrade | Besu documentation - - + + -

    Network and protocol upgrades

    +

    Network and protocol upgrades

    info

    Node upgrades upgrade your Besu client to a later version. In private networks, you can upgrade your node as in public networks.

    Network upgrades are the mechanism for upgrading the Ethereum protocol. Protocol upgrades occur during the network upgrades.

    For Ethereum Mainnet and public testnets, the milestone block definitions are included in Besu. Upgrading your Besu client applies the network upgrade.

    @@ -37,6 +37,6 @@

    Upgrade
    tip
    • For compatibility with future protocol upgrades, don't hardcode any gas price assumptions.
    • Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does include breaking changes.
    • -

    +
    \ No newline at end of file diff --git a/private-networks/how-to/use-permissioning/local.html b/private-networks/how-to/use-permissioning/local.html index 32bac009e28..c31eb72cc53 100644 --- a/private-networks/how-to/use-permissioning/local.html +++ b/private-networks/how-to/use-permissioning/local.html @@ -1,22 +1,22 @@ - + -Use local permissioning | Besu documentation +Use local permissioning | Besu documentation - - + + -

    Use local permissioning

    +

    Use local permissioning

    Local permissioning supports node and account allowlisting.

    Node allowlisting

    You can allow access to specified nodes in the permissions configuration file. With node allowlisting enabled, communication is only between nodes in the allowlist.

    @@ -79,6 +79,6 @@

    --permissions-accounts-config-file and --permissions-nodes-config-file options.

    note
    -
    Sample permissions configuration file
    accounts-allowlist=["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]

    nodes-allowlist=["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304","enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305"]

    +
    Sample permissions configuration file
    accounts-allowlist=["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]

    nodes-allowlist=["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304","enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305"]
    \ No newline at end of file diff --git a/private-networks/how-to/use-permissioning/onchain.html b/private-networks/how-to/use-permissioning/onchain.html index 0f3b20d8937..e761bb50bb9 100644 --- a/private-networks/how-to/use-permissioning/onchain.html +++ b/private-networks/how-to/use-permissioning/onchain.html @@ -1,22 +1,22 @@ - + -Use onchain permissioning | Besu documentation +Use onchain permissioning | Besu documentation - - + + -

    Use onchain permissioning

    +

    Use onchain permissioning

    This page contains some extra info if you're using onchain permissioning.

    tip

    If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect.

    important

    Node allowlists support domain names in enode URLs as an early access feature. Use the --Xdns-enabled option to enable domain name support.

    If using Kubernetes, enable domain name support and use the --Xdns-update-enabled option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes.

    @@ -26,6 +26,6 @@

    --permissions-nodes-contract-version command line option to specify the version of the permissioning contract interface. The default is 1.

    Specify the contract interface version that maps to the version of the Enterprise Ethereum Alliance Client Specification the contract interface implements.

    EEA Client SpecificationContract interface
    Version51
    Version62
    -

    The permissioning contracts in the ConsenSys/permissioning-smart-contracts repository implement the version 2 contract interface.

    +

    The permissioning contracts in the ConsenSys/permissioning-smart-contracts repository implement the version 2 contract interface.

    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/access-private-transactions.html b/private-networks/how-to/use-privacy/access-private-transactions.html index 5c646eb288a..3a9ab8059e5 100644 --- a/private-networks/how-to/use-privacy/access-private-transactions.html +++ b/private-networks/how-to/use-privacy/access-private-transactions.html @@ -1,22 +1,22 @@ - + -Access private and privacy marker transactions | Besu documentation +Access private and privacy marker transactions | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/besu-extended.html b/private-networks/how-to/use-privacy/besu-extended.html index 24a644b1cb2..e94466b0301 100644 --- a/private-networks/how-to/use-privacy/besu-extended.html +++ b/private-networks/how-to/use-privacy/besu-extended.html @@ -1,28 +1,28 @@ - + -Use Besu-extended privacy | Besu documentation +Use Besu-extended privacy | Besu documentation - - + + -

    Use Besu-extended privacy

    +

    Use Besu-extended privacy

    Besu provides an extended implementation of privacy allowing you to create a privacy group for a set of participants. You must specify the privacy group ID when sending private transactions.

    To enable the PRIV API methods, use the --rpc-http-api or --rpc-ws-api command line options.

    To create the privacy group containing the recipients of a private transaction, use priv_createPrivacyGroup.

    To create an EEA-compliant private transaction, specify privacyGroupId when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.

    Privacy group type

    Privacy groups created using priv_createPrivacyGroup have a BESU privacy group type when returned by priv_findPrivacyGroup.

    -
    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": [
    {
    "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=",
    "name": "Group B",
    "description": "Description of Group B",
    "type": "BESU",
    "members": [
    "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",
    "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="
    ]
    }
    ]
    }
    +
    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": [
    {
    "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=",
    "name": "Group B",
    "description": "Description of Group B",
    "type": "BESU",
    "members": [
    "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",
    "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="
    ]
    }
    ]
    }
    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/eea-compliant.html b/private-networks/how-to/use-privacy/eea-compliant.html index 0892bf8101e..52b8777d02c 100644 --- a/private-networks/how-to/use-privacy/eea-compliant.html +++ b/private-networks/how-to/use-privacy/eea-compliant.html @@ -1,27 +1,27 @@ - + -Use EEA-compliant privacy | Besu documentation +Use EEA-compliant privacy | Besu documentation - - + + -

    Use EEA-compliant privacy

    +

    Use EEA-compliant privacy

    When using Besu EEA-compliant privacy, the group of nodes specified by privateFrom and privateFor form a privacy group, to which Tessera assigns a unique privacy group ID.

    To enable the EEA API methods, use the --rpc-http-api or --rpc-ws-api command line options.

    To create an EEA-compliant private transaction, specify privateFor when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.

    Privacy group type

    Privacy groups created when specifying privateFrom and privateFor have a LEGACY privacy group type when returned by priv_findPrivacyGroup.

    -
    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": [
    {
    "privacyGroupId": "68/Cq0mVjB8FbXDLE1tbDRAvD/srluIok137uFOaClM=",
    "name": "legacy",
    "description": "Privacy groups to support the creation of groups by privateFor and privateFrom",
    "type": "LEGACY",
    "members": [
    "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=",
    "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk="
    ]
    }
    ]
    }
    +
    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": [
    {
    "privacyGroupId": "68/Cq0mVjB8FbXDLE1tbDRAvD/srluIok137uFOaClM=",
    "name": "legacy",
    "description": "Privacy groups to support the creation of groups by privateFor and privateFrom",
    "type": "LEGACY",
    "members": [
    "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=",
    "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk="
    ]
    }
    ]
    }
    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/flexible.html b/private-networks/how-to/use-privacy/flexible.html index 8eb3de5b24a..91d8c5d51d7 100644 --- a/private-networks/how-to/use-privacy/flexible.html +++ b/private-networks/how-to/use-privacy/flexible.html @@ -1,22 +1,22 @@ - + -Use flexible privacy groups | Besu documentation +Use flexible privacy groups | Besu documentation - - + + -

    Use flexible privacy groups

    +

    Use flexible privacy groups

    Use the web3js-quorum library to create and update membership of flexible privacy groups.

    tip

    Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups.

    info

    Flexible privacy groups are an early access feature. Don't use in production networks.

    The flexible privacy group interfaces may change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions.

    We don't recommend creating flexible privacy groups in a chain with existing offchain privacy groups.

    @@ -37,6 +37,6 @@

    tip

    The Tessera logs for Tessera 1 and Tessera 2 display PrivacyGroupNotFound errors. This is expected behavior because private transactions check offchain and onchain to find the privacy group for a private transaction.

    Add and remove members

    To add and remove members from a flexible privacy group, use the addTo and removeFrom methods in the web3js-quorum library client library.

    -
    note

    When adding a member, Besu pushes all existing group transactions to the new member and processes them. If there are a large number of existing transactions, adding the member may take some time.

    +
    note

    When adding a member, Besu pushes all existing group transactions to the new member and processes them. If there are a large number of existing transactions, adding the member may take some time.

    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/performance-best-practices.html b/private-networks/how-to/use-privacy/performance-best-practices.html index 772f4a3122e..a4e8225fed3 100644 --- a/private-networks/how-to/use-privacy/performance-best-practices.html +++ b/private-networks/how-to/use-privacy/performance-best-practices.html @@ -1,22 +1,22 @@ - + -Performance best practices | Besu documentation +Performance best practices | Besu documentation - - + + -

    Performance best practices

    +

    Performance best practices

    This document collects deployment and usage tips to help you achieve high performance for private transactions. If transaction throughput or latency is not meeting your expectations, please consider the following before raising an issue.

    General performance

    Private transactions use the same facilities as public ones. General Besu performance tunings apply. Specific approaches are out of scope of this document, except for the following, which strongly impacts performance:

    @@ -45,6 +45,6 @@

    Limit the group size to reduce communication overhead

    Smaller groups need fewer communication for transaction propagation. If reducing the number of Tessera nodes involved in a transaction is an option, it will lead to slightly better tail latencies. Multi-tenancy Tessera can be used to have large groups with a small number of Tessera nodes (possibly only one).

    Limit group membership changes and make them quick

    -

    Groups are locked (prevented from executing transactions) during membership changes. Try to minimize the number of times the membership changes. When possible, spread load across multiple groups to always have some groups available while others are locked. Consider batching group membership changes if possible. Note however that this does not work with the default management contract, yet.

    +

    Groups are locked (prevented from executing transactions) during membership changes. Try to minimize the number of times the membership changes. When possible, spread load across multiple groups to always have some groups available while others are locked. Consider batching group membership changes if possible. Note however that this does not work with the default management contract, yet.

    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/privacy-groups.html b/private-networks/how-to/use-privacy/privacy-groups.html index ad5e263e419..555579f48bc 100644 --- a/private-networks/how-to/use-privacy/privacy-groups.html +++ b/private-networks/how-to/use-privacy/privacy-groups.html @@ -1,28 +1,28 @@ - + -Create and manage privacy groups | Besu documentation +Create and manage privacy groups | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/sign-pmts.html b/private-networks/how-to/use-privacy/sign-pmts.html index 23991578227..9c63008c7a9 100644 --- a/private-networks/how-to/use-privacy/sign-pmts.html +++ b/private-networks/how-to/use-privacy/sign-pmts.html @@ -1,27 +1,27 @@ - + -Sign privacy marker transactions | Besu documentation +Sign privacy marker transactions | Besu documentation - - + + -

    Sign privacy marker transactions

    +

    Sign privacy marker transactions

    You can sign privacy marker transactions (PMTs) with either a random key or a specified key. To sign privacy marker transactions with a specified private key, use --privacy-marker-transaction-signing-key-file when starting Besu.

    note

    The private key file can be the same file used by --node-private-key-file, or a different key file to identify who signed the privacy marker transaction.

    In networks where you pay gas, you must specify a key and the associated account must contain adequate funds.

    In free gas networks, to provide further anonymity by signing each privacy marker transaction with a different random key, exclude the --privacy-marker-transaction-signing-key-file command line option when starting Besu.

    "Using account permissioning and privacy"

    You can't use account permissioning with random key signing.

    If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist.

    -
    note

    Besu signs privacy marker transactions during the private transaction process.

    +
    note

    Besu signs privacy marker transactions during the private transaction process.

    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/tessera.html b/private-networks/how-to/use-privacy/tessera.html index 5b060102475..f76b2fcba62 100644 --- a/private-networks/how-to/use-privacy/tessera.html +++ b/private-networks/how-to/use-privacy/tessera.html @@ -1,22 +1,22 @@ - + -Run Tessera with Besu | Besu documentation +Run Tessera with Besu | Besu documentation - - + + -

    Run Tessera with Besu

    +

    Run Tessera with Besu

    To enable privacy functionality in production systems, Tessera must be highly available and run in a separate instance to Besu.

    Besu-Tessera-High-Availability

    note

    You can also configure Besu for high availability using load balancers.

    @@ -26,6 +26,6 @@

    High avail

    If a Tessera node is unavailable when Besu attempts to process a privacy marker transaction, the Besu node stops processing all new blocks until Tessera is available. The Besu node continually attempts to process the privacy marker transaction until Tessera is available again.

    caution

    If Tessera becomes available but has lost data, Besu resumes processing blocks and the private states in the Besu nodes might become inconsistent.

    Separate instances

    -

    For production systems, we recommend running Besu and Tessera in separate instances. If running Besu and Tessera in the same instance, restrict the amount of memory used by each JVM to ensure each has enough memory.

    +

    For production systems, we recommend running Besu and Tessera in separate instances. If running Besu and Tessera in the same instance, restrict the amount of memory used by each JVM to ensure each has enough memory.

    \ No newline at end of file diff --git a/private-networks/how-to/use-privacy/web3js-quorum.html b/private-networks/how-to/use-privacy/web3js-quorum.html index b536a59eb5f..bfde7f8d763 100644 --- a/private-networks/how-to/use-privacy/web3js-quorum.html +++ b/private-networks/how-to/use-privacy/web3js-quorum.html @@ -1,22 +1,22 @@ - + -Use the web3js-quorum library | Besu documentation +Use the web3js-quorum library | Besu documentation - - + + -

    Use the web3js-quorum client library

    +

    Use the web3js-quorum client library

    web3js-quorum is an Ethereum JavaScript library extending web3.js that adds support for Besu-specific JSON-RPC APIs and features. Use the library to create and send RLP-encoded transactions using JSON-RPC.

    important

    web3js-quorum supports JSON-RPC over HTTP only.

    note

    web3js-quorum includes all quorum.js and web3js-eea features.

    If migrating to web3js-quorum, update your JavaScript code as indicated in the following examples.

    Read the migration guide for more information about updating your code.

    @@ -40,6 +40,6 @@

    Deploying a contract with 'web3.priv.generateAndSendRawTransaction'
    const contractOptions = {
    data: `0x123`, // contract binary
    privateFrom: "tesseraNode1PublicKey",
    privateFor: ["tesseraNode3PublicKey"],
    privateKey: "besuNode1PrivateKey",
    };
    return web3.priv.generateAndSendRawTransaction(contractOptions);

    web3.priv.generateAndSendRawTransaction(contractOptions) returns the transaction hash. To get the private transaction receipt, use web3.priv.waitForTransactionReceipt(txHash).

    web3js-quorum methods

    -

    For more information about the web3js-quorum methods, see the web3js-quorum reference documentation.

    +

    For more information about the web3js-quorum methods, see the web3js-quorum reference documentation.

    \ No newline at end of file diff --git a/private-networks/reference.html b/private-networks/reference.html index 12417265feb..eebcfccd2b6 100644 --- a/private-networks/reference.html +++ b/private-networks/reference.html @@ -1,22 +1,22 @@ - + -Reference | Besu documentation +Reference | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/reference/accounts-for-testing.html b/private-networks/reference/accounts-for-testing.html index c79a7bfc6a9..b33e8a0b1d1 100644 --- a/private-networks/reference/accounts-for-testing.html +++ b/private-networks/reference/accounts-for-testing.html @@ -1,22 +1,22 @@ - + -Accounts for testing | Besu documentation +Accounts for testing | Besu documentation - - + + -

    Accounts for testing

    +

    Accounts for testing

    You can use existing accounts for testing by including them in the genesis file for a private network. Besu also provides predefined accounts for use in development mode.

    Development mode

    When you start Besu with the --network=dev command line option, Besu uses the dev.json genesis file by default.

    @@ -27,6 +27,6 @@

    Development
    "Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)"

    Private key to copy :

    0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f

    Initial balance : 90000 Eth (90000000000000000000000 Wei)

    Genesis file

    To use existing test accounts, specify the accounts and balances in a genesis file for your test network. For an example of how to define accounts in the genesis file, see dev.json.

    -

    To start Besu with the genesis file defining the existing accounts, use the --genesis-file command line option .

    +

    To start Besu with the genesis file defining the existing accounts, use the --genesis-file command line option .

    \ No newline at end of file diff --git a/private-networks/reference/api.html b/private-networks/reference/api.html index 0ccffb10624..0356b6a2495 100644 --- a/private-networks/reference/api.html +++ b/private-networks/reference/api.html @@ -1,22 +1,22 @@ - + -Private network API methods | Besu documentation +Private network API methods | Besu documentation - - + + -

    Private network API methods

    +

    Private network API methods

    Important
    • This reference contains API methods that apply to only private networks. For API methods that apply to both private and public networks, see the public network API reference.
    • All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint.
    • @@ -626,6 +626,6 @@

      ParametersReturns

      result: boolean - true

      curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}' http://127.0.0.1:8545
      -

      *[EEA]: Enterprise Ethereum Alliance

    +

    *[EEA]: Enterprise Ethereum Alliance

    \ No newline at end of file diff --git a/private-networks/reference/api/objects.html b/private-networks/reference/api/objects.html index 025e83c336b..7888c455da4 100644 --- a/private-networks/reference/api/objects.html +++ b/private-networks/reference/api/objects.html @@ -1,22 +1,22 @@ - + -Private network API objects | Besu documentation +Private network API objects | Besu documentation - - + + -

    Private network API objects

    +

    Private network API objects

    The following objects are parameters for or returned by Besu private network API methods.

    Important

    This reference contains API objects that apply to only private networks. For API objects that apply to both private and public networks, see the public network API objects reference.

    Private transaction object

    @@ -24,6 +24,6 @@

    P
    KeyTypeValue
    fromData, 20 bytesAddress of the sender.
    gasQuantityGas provided by the sender.
    gasPriceQuantityGas price, in Wei, provided by the sender.
    inputDataThe data to create or invoke a contract.
    nonceQuantityNumber of transactions made by the sender to the privacy group before this one.
    toData, 20 bytesnull if a contract creation transaction, otherwise, the contract address.
    valueQuantitynull because private transactions cannot transfer Ether.
    vQuantityECDSA Recovery ID.
    rData, 32 bytesECDSA signature r.
    sData, 32 bytesECDSA signature s.
    privateFromData, 32 bytesTessera public key of the sender.
    privateForArray of Data, 32 bytes eachTessera public keys of recipients. Not returned if using privacyGroupId to send the transaction.
    privacyGroupIdData, 32 bytesTessera privacy group ID of recipients. Not returned if using privateFor to send the transaction.
    restrictionStringMust be restricted.

    Private transaction receipt object

    Returned by priv_getTransactionReceipt.

    -
    KeyTypeValue
    blockHashData, 32 bytesHash of block containing this transaction.
    blockNumberQuantityBlock number of block containing this transaction.
    contractAddressData, 20 bytesContract address created if a contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value.
    fromData, 20 bytesAddress of the sender.
    logsArrayArray of log objects generated by this private transaction.
    toData, 20 bytesAddress of the receiver, if sending ether, otherwise, null.
    transactionIndexQuantity, IntegerIndex position of transaction in the block.
    revertReasonStringABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled.
    outputDataRLP-encoded return value of a contract call if a value returns, otherwise, null.
    commitmentHashData, 32 bytesHash of the privacy marker transaction.
    statusQuantityEither 0x1 (success) or 0x0 (failure).
    privateFromData, 32 bytesTessera public key of the sender.
    privateFor or privacyGroupIdArray or Data, 32 bytesTessera public keys or privacy group ID of the recipients.
    logsBloomData, 256 bytesBloom filter for light clients to quickly retrieve related logs.
    +
    KeyTypeValue
    blockHashData, 32 bytesHash of block containing this transaction.
    blockNumberQuantityBlock number of block containing this transaction.
    contractAddressData, 20 bytesContract address created if a contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value.
    fromData, 20 bytesAddress of the sender.
    logsArrayArray of log objects generated by this private transaction.
    toData, 20 bytesAddress of the receiver, if sending ether, otherwise, null.
    transactionIndexQuantity, IntegerIndex position of transaction in the block.
    revertReasonStringABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled.
    outputDataRLP-encoded return value of a contract call if a value returns, otherwise, null.
    commitmentHashData, 32 bytesHash of the privacy marker transaction.
    statusQuantityEither 0x1 (success) or 0x0 (failure).
    privateFromData, 32 bytesTessera public key of the sender.
    privateFor or privacyGroupIdArray or Data, 32 bytesTessera public keys or privacy group ID of the recipients.
    logsBloomData, 256 bytesBloom filter for light clients to quickly retrieve related logs.
    \ No newline at end of file diff --git a/private-networks/reference/cli/options.html b/private-networks/reference/cli/options.html index 76bd9ced2cb..4e547760e2f 100644 --- a/private-networks/reference/cli/options.html +++ b/private-networks/reference/cli/options.html @@ -1,22 +1,22 @@ - + -Private network options | Besu documentation +Private network options | Besu documentation - - + + -

    Private network command line options

    +

    Private network command line options

    This reference describes the syntax of the Besu private network command line interface (CLI) options.

    Important

    This reference contains options that apply to only private networks. For options that apply to both private and public networks, see the public network options reference.

    Specify options

    @@ -121,6 +121,6 @@

    authorized privacy enclave.

    privacy-url

    --privacy-url=<privacyUrl>
    -

    The URL on which the Tessera node is running.

    +

    The URL on which the Tessera node is running.

    \ No newline at end of file diff --git a/private-networks/reference/cli/subcommands.html b/private-networks/reference/cli/subcommands.html index 4a31a48f13a..9e1d579c2a4 100644 --- a/private-networks/reference/cli/subcommands.html +++ b/private-networks/reference/cli/subcommands.html @@ -1,22 +1,22 @@ - + -Private network subcommands | Besu documentation +Private network subcommands | Besu documentation - - + + -

    Private network subcommands

    +

    Private network subcommands

    This reference describes the syntax of the Besu private network command line interface (CLI) subcommands.

    Important

    This reference contains subcommands that apply to only private networks. For subcommands that apply to both private and public networks, see the public network subcommands reference.

    To start a Besu node using subcommands, run:

    @@ -63,6 +63,6 @@

    encode

    IBFT 2.0 extra data

    To generate the RLP encoded extraData string, specify a JSON input that is an array of validator addresses in ascending order.

    -
    JSON schema for IBFT_EXTRA_DATA

    Use the following JSON schema to validate that your JSON data is well-formatted. To validate your JSON content, use an online validation tool, such as JSON Schema Validator.

    {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",
    "type": "array",
    "definitions": {},
    "title": "IBFT extra data",
    "description": "JSON format used as input to generate an IBFT extra data RLP string",
    "items": {
    "$id": "#/address",
    "type": "string",
    "title": "Validator address",
    "description": "The validator node address",
    "default": "",
    "examples": [
    "be068f726a13c8d46c44be6ce9d275600e1735a4",
    "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"
    ],
    "pattern": "^([0-9a-f]{40})$"
    }
    }

    Example IBFT_EXTRA_DATA encoding:

    [
    "be068f726a13c8d46c44be6ce9d275600e1735a4",
    "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"
    ]

    +
    JSON schema for IBFT_EXTRA_DATA

    Use the following JSON schema to validate that your JSON data is well-formatted. To validate your JSON content, use an online validation tool, such as JSON Schema Validator.

    {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",
    "type": "array",
    "definitions": {},
    "title": "IBFT extra data",
    "description": "JSON format used as input to generate an IBFT extra data RLP string",
    "items": {
    "$id": "#/address",
    "type": "string",
    "title": "Validator address",
    "description": "The validator node address",
    "default": "",
    "examples": [
    "be068f726a13c8d46c44be6ce9d275600e1735a4",
    "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"
    ],
    "pattern": "^([0-9a-f]{40})$"
    }
    }

    Example IBFT_EXTRA_DATA encoding:

    [
    "be068f726a13c8d46c44be6ce9d275600e1735a4",
    "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193"
    ]
    \ No newline at end of file diff --git a/private-networks/reference/plugin-api-interfaces.html b/private-networks/reference/plugin-api-interfaces.html index dbc9d84a171..e158d6186de 100644 --- a/private-networks/reference/plugin-api-interfaces.html +++ b/private-networks/reference/plugin-api-interfaces.html @@ -1,22 +1,22 @@ - + -Plugin API interfaces | Besu documentation +Plugin API interfaces | Besu documentation - - + + -

    Plugin API interfaces

    +

    Plugin API interfaces

    API interfaces in Besu allow users to build plugins to extend Besu functionality.

    For more information about the available interfaces, see the Plugin API Javadoc.

    Javadoc issue

    The plugin API documentation is currently not being updated. We're working on a fix, but in the meantime, some links are temporarily pointing to wiki.hyperledger.org.

    @@ -27,6 +27,6 @@

    Plugin servi

    The following table lists interfaces providing services you can retrieve.

    InterfaceDescription
    BesuEventsAllows plugins to attach to events during Besu operation.
    BesuConfigurationProvides file system locations of Besu's storage.
    IbftQueryServiceAllows query of the IBFT 2.0 aspects of the blockchain.
    MetricCategoryRegistryAdds a new metrics category to the CLI.
    MetricsSystemRegister metrics with the Prometheus endpoint.
    PoaQueryServiceQuery the current state of Clique and IBFT 2.0 consensus protocols.
    PicoCLIOptionsAdds CLI commands to the Besu command line.
    SecurityModuleServiceAllows plugins to register a security module.
    StorageServiceAllows plugins to register as a storage engine. For example, to connect to a hardware security module (HSM).
    PermissioningServiceAllows for fine grain control of node connection and node messaging permissioning.
    PrivacyPluginServiceProvides a way to define how privacy marker transactions are created, and what private genesis to use.
    RpcEndpointServiceRegister custom RPC endpoints.

    To use the interfaces in your plugin, ensure the Gradle build file contains the https://hyperledger.jfrog.io/hyperledger/besu-maven repository and the plugin-api dependency.

    -
    Known issue

    As indicated in issue #406, plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage.

    It's in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the register step and store it in memory.

    The start step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available.

    +
    Known issue

    As indicated in issue #406, plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage.

    It's in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the register step and store it in memory.

    The start step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available.

    \ No newline at end of file diff --git a/private-networks/tutorials.html b/private-networks/tutorials.html index e67b789c6c1..54950984104 100644 --- a/private-networks/tutorials.html +++ b/private-networks/tutorials.html @@ -1,21 +1,21 @@ - + -Tutorials | Besu documentation +Tutorials | Besu documentation - - + + - + \ No newline at end of file diff --git a/private-networks/tutorials/azure.html b/private-networks/tutorials/azure.html index 0ad13e3b64f..7ea4a878585 100644 --- a/private-networks/tutorials/azure.html +++ b/private-networks/tutorials/azure.html @@ -1,22 +1,22 @@ - + -Deploy using Microsoft Azure | Besu documentation +Deploy using Microsoft Azure | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/tutorials/clique.html b/private-networks/tutorials/clique.html index 0b62335d71c..148521b83a9 100644 --- a/private-networks/tutorials/clique.html +++ b/private-networks/tutorials/clique.html @@ -1,22 +1,22 @@ - + -Create a Clique network | Besu documentation +Create a Clique network | Besu documentation - - + + -

    Create a private network using Clique

    +

    Create a private network using Clique

    A private network provides a configurable network for testing. This private network uses the Clique (proof of authority) consensus protocol.

    danger

    The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.

    Prerequisites

    @@ -90,6 +90,6 @@

    Next steps
    info

    Stop the nodes

    When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window.

    -
    tip

    To restart the Clique network in the future, start from 4. Start First Node as Bootnode.

    +
    tip

    To restart the Clique network in the future, start from 4. Start First Node as Bootnode.

    \ No newline at end of file diff --git a/private-networks/tutorials/contracts.html b/private-networks/tutorials/contracts.html index 9e76207730c..c8104eedfdb 100644 --- a/private-networks/tutorials/contracts.html +++ b/private-networks/tutorials/contracts.html @@ -1,22 +1,22 @@ - + -Deploy a smart contract | Besu documentation +Deploy a smart contract | Besu documentation - - + + -

    Deploy smart contracts to an Ethereum chain

    +

    Deploy smart contracts to an Ethereum chain

    This tutorial shows you how to deploy smart contracts as transactions to a network.

    Prerequisites

    This tutorial requires a local blockchain network. You can use the Developer Quickstart to rapidly generate one. If deploying a private contract, enable privacy on the network (public contracts can also be deployed on privacy-enabled networks).

    @@ -78,6 +78,6 @@

    note

    This example doesn't use a privacy group and makes a simple node-to-node transaction. To use a privacy group:

    • Create the privacy group using the public keys of the nodes in the group.
    • Specify the privacyGroupId instead of the privateFor option in the txOptions above and then send the transaction.
    • -

    The Developer Quickstart provides an example of a private transaction with a privacy group.

    +

    The Developer Quickstart provides an example of a private transaction with a privacy group.

    \ No newline at end of file diff --git a/private-networks/tutorials/contracts/interact.html b/private-networks/tutorials/contracts/interact.html index 357593e8f15..48f6ac31c27 100644 --- a/private-networks/tutorials/contracts/interact.html +++ b/private-networks/tutorials/contracts/interact.html @@ -1,22 +1,22 @@ - + -Interact with a deployed contract | Besu documentation +Interact with a deployed contract | Besu documentation - - + + -

    Interact with deployed smart contracts

    +

    Interact with deployed smart contracts

    You can get started with the Developer Quickstart to rapidly generate local blockchain networks.

    This tutorial shows you how to interact with smart contracts that have been deployed to a network.

    Prerequisites

    @@ -48,6 +48,6 @@

    async function setValueAtAddress(
    clientUrl,
    address,
    value,
    contractAbi,
    fromPrivateKey,
    fromPublicKey,
    toPublicKey,
    ) {
    const Web3 = require("web3");
    const Web3Quorum = require("web3js-quorum");
    const web3 = new Web3Quorum(new Web3("http://localhost:22000"));
    // eslint-disable-next-line no-underscore-dangle
    const functionAbi = contract._jsonInterface.find((e) => {
    return e.name === "set";
    });
    const functionArgs = web3quorum.eth.abi
    .encodeParameters(functionAbi.inputs, [value])
    .slice(2);
    const functionParams = {
    to: address,
    data: functionAbi.signature + functionArgs,
    privateKey: fromPrivateKey,
    privateFrom: fromPublicKey,
    privateFor: [toPublicKey],
    };
    const transactionHash = await web3quorum.priv.generateAndSendRawTransaction(
    functionParams,
    );
    console.log(`Transaction hash: ${transactionHash}`);
    const result = await web3quorum.priv.waitForTransactionReceipt(
    transactionHash,
    );
    return result;
    }

    3. Verify an updated value

    -

    To verify that a value has been updated, perform a get call after a set update call.

    +

    To verify that a value has been updated, perform a get call after a set update call.

    \ No newline at end of file diff --git a/private-networks/tutorials/contracts/transfer-funds.html b/private-networks/tutorials/contracts/transfer-funds.html index 93237473720..75488c0f2ee 100644 --- a/private-networks/tutorials/contracts/transfer-funds.html +++ b/private-networks/tutorials/contracts/transfer-funds.html @@ -1,22 +1,22 @@ - + -Transfer account funds | Besu documentation +Transfer account funds | Besu documentation - - + + -

    Transfer funds between accounts in a transaction

    +

    Transfer funds between accounts in a transaction

    You can get started with the Developer Quickstart to rapidly generate local blockchain networks.

    This tutorial shows you how to transfer funds (ETH) between accounts in a transaction.

    Prerequisites

    @@ -36,6 +36,6 @@

    Use eth_sendTransaction

    An alternative to using eth_sendSignedTransaction is eth_sendTransaction. However, Besu does not support the eth_sendTransaction API call and keeps account management separate for stronger security. Instead, Besu uses Web3Signer to make the eth_sendTransaction API call.

    Use eth_sendTransaction similarly to using eth_sendSignedTransaction (without the signing step which is done by Web3Signer):

    -
    const web3 = new Web3(host);
    // Pre-seeded account with 90000 ETH
    const privateKeyA = "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3";
    const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA);
    var accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address));
    console.log("Account A has balance of: " + accountABalance);

    // Create a new account to transfer ETH to
    var accountB = web3.eth.accounts.create();
    var accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address));
    console.log("Account B has balance of: " + accountBBalance);

    // Send some ETH from A to B
    const txOptions = {
    from: accountA.address,
    to: accountB.address,
    value: "0x100", // Amount of ETH to transfer
    gasPrice: "0x0", // ETH per unit of gas
    gasLimit: "0x24A22" // Max number of gas units the tx is allowed to use
    };
    console.log("Creating transaction...");
    const pTx = await web3.eth.sendTransaction(txOptions);
    console.log("tx transactionHash: " + pTx.transactionHash);

    // After the transaction, there should be some ETH transferred
    var accountABalance = await getAccountBalance(host, accountA);
    console.log("Account A has an updated balance of: " + accountABalance);
    var accountBBalance = await getAccountBalance(host, accountB);
    console.log("Account B has an updatedbalance of: " + accountBBalance);
    }
    +
    const web3 = new Web3(host);
    // Pre-seeded account with 90000 ETH
    const privateKeyA = "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3";
    const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA);
    var accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address));
    console.log("Account A has balance of: " + accountABalance);

    // Create a new account to transfer ETH to
    var accountB = web3.eth.accounts.create();
    var accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address));
    console.log("Account B has balance of: " + accountBBalance);

    // Send some ETH from A to B
    const txOptions = {
    from: accountA.address,
    to: accountB.address,
    value: "0x100", // Amount of ETH to transfer
    gasPrice: "0x0", // ETH per unit of gas
    gasLimit: "0x24A22" // Max number of gas units the tx is allowed to use
    };
    console.log("Creating transaction...");
    const pTx = await web3.eth.sendTransaction(txOptions);
    console.log("tx transactionHash: " + pTx.transactionHash);

    // After the transaction, there should be some ETH transferred
    var accountABalance = await getAccountBalance(host, accountA);
    console.log("Account A has an updated balance of: " + accountABalance);
    var accountBBalance = await getAccountBalance(host, accountB);
    console.log("Account B has an updatedbalance of: " + accountBBalance);
    }
    \ No newline at end of file diff --git a/private-networks/tutorials/ethash.html b/private-networks/tutorials/ethash.html index 2d9749b7552..b723a3bb94b 100644 --- a/private-networks/tutorials/ethash.html +++ b/private-networks/tutorials/ethash.html @@ -1,22 +1,22 @@ - + -Create an Ethash network | Besu documentation +Create an Ethash network | Besu documentation - - + + -

    Create a private network using Ethash

    +

    Create a private network using Ethash

    A private network provides a configurable network for testing. By configuring a low difficulty and enabling mining, this allows for fast block creation.

    You can test multi-block and multi-user scenarios on a private network before moving to one of the public testnets.

    danger

    The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.

    @@ -83,6 +83,6 @@

    Next stepsStart a node with the --rpc-ws-enabled option and use the RPC Pub/Sub API.

    Stop the nodes

    When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window.

    -
    tip

    To restart the private network in the future, start from 3. Start the first node as a bootnode.

    +
    tip

    To restart the private network in the future, start from 3. Start the first node as a bootnode.

    \ No newline at end of file diff --git a/private-networks/tutorials/ibft.html b/private-networks/tutorials/ibft.html index 830bbc43e9c..4a7b6edd678 100644 --- a/private-networks/tutorials/ibft.html +++ b/private-networks/tutorials/ibft.html @@ -1,22 +1,22 @@ - + -Create a private network using IBFT 2.0 | Besu documentation +Create a private network using IBFT 2.0 | Besu documentation - - + + -

    Create a private network using IBFT 2.0

    +

    Create a private network using IBFT 2.0

    A private network provides a configurable network for testing. This private network uses the IBFT 2.0 (proof of authority) consensus protocol.

    danger

    The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.

    This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant.

    Prerequisites

    @@ -113,6 +113,6 @@

    Next stepsStop the nodes

    When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window.

    tip

    To restart the IBFT 2.0 network in the future, start from 6. Start First Node as Bootnode.

    -

    *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.

    +

    *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.

    \ No newline at end of file diff --git a/private-networks/tutorials/ibft/validators.html b/private-networks/tutorials/ibft/validators.html index 491a8ee38c8..999f1ab6b8c 100644 --- a/private-networks/tutorials/ibft/validators.html +++ b/private-networks/tutorials/ibft/validators.html @@ -1,22 +1,22 @@ - + -Add and removing IBFT 2.0 validators | Besu documentation +Add and removing IBFT 2.0 validators | Besu documentation - - + + -

    Add and remove IBFT 2.0 validators

    +

    Add and remove IBFT 2.0 validators

    This example walks through adding and removing an IBFT 2.0 validator.

    Prerequisites

      @@ -51,6 +51,6 @@

      curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}' http://127.0.0.1:8545

    The list of validators contains 5 addresses now.

    Remove a validator

    -

    The process for removing a validator is similar to adding a validator starting from step 2, except you specify false as the second parameter of ibft_proposeValidatorVote.

    +

    The process for removing a validator is similar to adding a validator starting from step 2, except you specify false as the second parameter of ibft_proposeValidatorVote.

    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes.html b/private-networks/tutorials/kubernetes.html index 17b5a152bfe..2b140221905 100644 --- a/private-networks/tutorials/kubernetes.html +++ b/private-networks/tutorials/kubernetes.html @@ -1,22 +1,22 @@ - + -Deploy a Besu private network with Kubernetes | Besu documentation +Deploy a Besu private network with Kubernetes | Besu documentation - - + + -

    Deploy Besu using Kubernetes

    +
    +

    If you require the ingress controllers for the RPC calls or the monitoring dashboards, we have provided example rules that are pre-configured for common use cases. Use these as a reference and develop solutions to match your network topology and requirements.

    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/charts.html b/private-networks/tutorials/kubernetes/charts.html index 915d3db2ee1..9ca3a994fc0 100644 --- a/private-networks/tutorials/kubernetes/charts.html +++ b/private-networks/tutorials/kubernetes/charts.html @@ -1,22 +1,22 @@ - + -Deploy charts | Besu documentation +Deploy charts | Besu documentation - - + + -

    Deploy charts

    +
    +

    k8s-explorer

    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/cluster.html b/private-networks/tutorials/kubernetes/cluster.html index 036faa8241a..3b4e1023df9 100644 --- a/private-networks/tutorials/kubernetes/cluster.html +++ b/private-networks/tutorials/kubernetes/cluster.html @@ -1,22 +1,22 @@ - + -Create a cluster | Besu documentation +Create a cluster | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/maintenance.html b/private-networks/tutorials/kubernetes/maintenance.html index dfb859eb058..99066f700e6 100644 --- a/private-networks/tutorials/kubernetes/maintenance.html +++ b/private-networks/tutorials/kubernetes/maintenance.html @@ -1,22 +1,22 @@ - + -Maintenance | Besu documentation +Maintenance | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/nat-manager.html b/private-networks/tutorials/kubernetes/nat-manager.html index 145db300946..c6c2f7b97c7 100644 --- a/private-networks/tutorials/kubernetes/nat-manager.html +++ b/private-networks/tutorials/kubernetes/nat-manager.html @@ -1,22 +1,22 @@ - + -Configure Kubernetes mode in NAT manager | Besu documentation +Configure Kubernetes mode in NAT manager | Besu documentation - - + + -

    Configure Kubernetes mode in NAT Manager

    +

    Configure Kubernetes mode in NAT Manager

    Use --nat-method=AUTO or --nat-method=KUBERNETES CLI options to let the Besu node automatically configure its IP address and ports.

    Use mode --nat-method=NONE to be able to set your Besu ports and IP address manually.

    Default mode is AUTO but Besu will fallback to NONE mode if automatic configuration fails.

    @@ -79,6 +79,6 @@

    Check that the load balancer is properly deployed before launching Besu. -
    Example error log
    INFO  | KubernetesNatManager | Starting kubernetes NAT manager.
    DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.
    DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used
    INFO | NetworkRunner | Starting Network.

    +
    Example error log
    INFO  | KubernetesNatManager | Starting kubernetes NAT manager.
    DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK.
    DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used
    INFO | NetworkRunner | Starting Network.
    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/playground.html b/private-networks/tutorials/kubernetes/playground.html index 05b367fa898..8190400af8c 100644 --- a/private-networks/tutorials/kubernetes/playground.html +++ b/private-networks/tutorials/kubernetes/playground.html @@ -1,22 +1,22 @@ - + -Local playground | Besu documentation +Local playground | Besu documentation - - + + -

    Deploy in a local environment

    +

    Deploy in a local environment

    The playground was created to provide an opportunity to deploy quorum-kubernetes in a local environment before attempting in a live environment (such as in the cloud or on-premise). Local deployment can be done with any local Kubernetes tool. Minikube and Rancher Desktop have been tested to work, but any complete Kubernetes solution with support for kubectl should suffice.

    Steps

      @@ -33,6 +33,6 @@

      Important no
    1. The playground is not a complete reflection of the helm charts as it does not use Helm, but rather static or non-templated code that is deployed through kubectl apply -f. This means that without Helm there's a significant amount of repeated code. This is fine for development but not ideal for a production environment.
    2. The playground uses static/hard-coded keys. Automatic key generation is only supported in helm charts.
    3. As the playground is for local development, no cloud integration or lifecycle support is offered.
    4. -

    +
    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/production.html b/private-networks/tutorials/kubernetes/production.html index 40b57867477..11c063f5917 100644 --- a/private-networks/tutorials/kubernetes/production.html +++ b/private-networks/tutorials/kubernetes/production.html @@ -1,22 +1,22 @@ - + -Production | Besu documentation +Production | Besu documentation - - + + -

    Deploy for production

    +

    Deploy for production

    You can deploy Besu for production on a Kubernetes cluster.

    Prerequisites

      @@ -50,6 +50,6 @@

      Multi-

      multi-cluster

      When you spin up clusters, use CNI and CIDR blocks to match the subnet's CIDR settings. Then deploy the genesis chart on one cluster and copy across the genesis file and static nodes config maps. Depending on your DNS settings, they might be fine as is, or they might need to be actual IP addresses. That is, you can provision cluster B only after cluster A has Besu nodes up and running.

      Deploy the network on cluster A, and then on cluster B. Besu nodes on cluster A should work as expected, and Besu nodes on cluster B should use the list of peers provided to communicate with the nodes on cluster A.

      -

      Keeping the list of peers on the clusters live and up to date can be challenging, so we recommend using the cloud service provider's DNS service such as Route 53 or Azure DNS and adapting the charts to create entries for each node when it comes up.

    +

    Keeping the list of peers on the clusters live and up to date can be challenging, so we recommend using the cloud service provider's DNS service such as Route 53 or Azure DNS and adapting the charts to create entries for each node when it comes up.

    \ No newline at end of file diff --git a/private-networks/tutorials/kubernetes/quorum-explorer.html b/private-networks/tutorials/kubernetes/quorum-explorer.html index 939c61eea21..a90919010f8 100644 --- a/private-networks/tutorials/kubernetes/quorum-explorer.html +++ b/private-networks/tutorials/kubernetes/quorum-explorer.html @@ -1,22 +1,22 @@ - + -Use the Quorum Explorer | Besu documentation +Use the Quorum Explorer | Besu documentation - - + + -
    \ No newline at end of file diff --git a/private-networks/tutorials/permissioning.html b/private-networks/tutorials/permissioning.html index 7ed6267c81b..433b0b40a69 100644 --- a/private-networks/tutorials/permissioning.html +++ b/private-networks/tutorials/permissioning.html @@ -1,22 +1,22 @@ - + -Create a permissioned network | Besu documentation +Create a permissioned network | Besu documentation - - + + -

    Create a permissioned network

    +

    Create a permissioned network

    The following steps set up a permissioned network with local node and account permissions. The network uses the IBFT 2.0 proof of authority consensus protocol.

    danger

    A permissioned Ethereum network as described here is not protected against all attack vectors. We recommend applying defense in depth to protect your infrastructure.

    Prerequisites

    @@ -146,6 +146,6 @@

    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": "0x0"
    }

    Stop nodes

    When finished using the permissioned network, stop all nodes using Ctrl+C in each terminal window.

    -
    tip

    To restart the permissioned network in the future, start from step 7.

    +
    tip

    To restart the permissioned network in the future, start from step 7.

    \ No newline at end of file diff --git a/private-networks/tutorials/privacy.html b/private-networks/tutorials/privacy.html index 601348432dc..d3c6a0697b5 100644 --- a/private-networks/tutorials/privacy.html +++ b/private-networks/tutorials/privacy.html @@ -1,22 +1,22 @@ - + -Create a privacy enabled network using the Quickstart | Besu documentation +Create a privacy enabled network using the Quickstart | Besu documentation - - + + -

    Create a privacy-enabled network

    +

    Create a privacy-enabled network

    Configuring a network that supports private transactions requires starting a Tessera node for each Besu node. Besu command line options associate the Besu node with the Tessera node.

    This tutorial assumes you have completed setting up an IBFT 2.0 network to the point where you have created the genesis file and copied the private keys. If not, complete steps 1 to 5 of the Create an IBFT 2.0 tutorial before continuing.

    important

    To support privacy, ensure your genesis file includes at least the byzantium milestone.

    This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant.

    @@ -75,6 +75,6 @@

    7. Start

    8. Start Besu Node-4

    In the Node-4 directory, start Besu Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode:

    besu --data-path=data --genesis-file=../genesis.json --bootnodes=<Node-1 Enode URL> --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0
    -

    The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.

    +

    The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.

    \ No newline at end of file diff --git a/private-networks/tutorials/privacy/multi-tenancy.html b/private-networks/tutorials/privacy/multi-tenancy.html index 685cedc839a..40373cda278 100644 --- a/private-networks/tutorials/privacy/multi-tenancy.html +++ b/private-networks/tutorials/privacy/multi-tenancy.html @@ -1,22 +1,22 @@ - + -Create a multi-tenant network | Besu documentation +Create a multi-tenant network | Besu documentation - - + + -

    Configure a multi-tenant node

    +

    Configure a multi-tenant node

    You can configure Besu and associated Tessera node in a privacy-enabled network to host multiple tenants.

    In this tutorial we'll add tenants to the Node-1 Besu and Tessera node in a privacy-enabled network.

    IBFT-Network/
    ├── Node-1
    │   ├── data
    │ ├── Tessera
    ├── Node-2
    │   ├── data
    │ ├── Tessera
    ├── Node-3
    │   ├── data
    │ ├── Tessera
    └── Node-4
    ├── data
    ├── Tessera
    @@ -56,6 +56,6 @@

    6

    Generate the JWT for each tenant and specify the tenant's Tessera public key in the privacyPublicKey field.

    Ensure you apply the appropriate JSON-RPC API permissions to the token. For example, ensure you enable the PRIV and EEA APIs for privacy.

    note

    This step is not required when using username and password authentication to create the required JWTs.

    -

    Use the authentication token to make requests.

    +

    Use the authentication token to make requests.

    \ No newline at end of file diff --git a/private-networks/tutorials/privacy/quickstart.html b/private-networks/tutorials/privacy/quickstart.html index bf565e79046..d9ef2454dc1 100644 --- a/private-networks/tutorials/privacy/quickstart.html +++ b/private-networks/tutorials/privacy/quickstart.html @@ -1,22 +1,22 @@ - + -Create a privacy-enabled network using the Quorum Developer Quickstart | Besu documentation +Create a privacy-enabled network using the Quorum Developer Quickstart | Besu documentation - - + + -

    Create a privacy-enabled network using the Quorum Developer Quickstart

    +

    Create a privacy-enabled network using the Quorum Developer Quickstart

    You can create a privacy-enabled network using the Quorum Developer Quickstart. It runs a private Besu network that uses Tessera as its private transaction manager.

    You can use the Block Explorer, make JSON-RPC requests, and create transactions using MetaMask. This tutorial describes how to make private transactions between nodes, and perform read and write operations on private contracts.

    important

    This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.

    @@ -85,6 +85,6 @@

    More examples< code examples.

    You can also test the ERC-20 token example by executing erc20.js, which deploys a HumanStandardToken contract and transfers one token to Node-2.

    -

    You can verify this by observing the data field of the logs, which is 1.

    +

    You can verify this by observing the data field of the logs, which is 1.

    \ No newline at end of file diff --git a/private-networks/tutorials/privacy/web3js-quorum.html b/private-networks/tutorials/privacy/web3js-quorum.html index 35f276f483d..04615750b55 100644 --- a/private-networks/tutorials/privacy/web3js-quorum.html +++ b/private-networks/tutorials/privacy/web3js-quorum.html @@ -1,22 +1,22 @@ - + -Use the web3js-quorum multi-node example | Besu documentation +Use the web3js-quorum multi-node example | Besu documentation - - + + -

    Use the multi-node example in the web3js-quorum client library

    +

    Use the multi-node example in the web3js-quorum client library

    To use the examples provided in the web3js-quorum library with your privacy network:

    note

    This example uses 3 of the 4 nodes configured in the privacy tutorial.

      @@ -62,6 +62,6 @@
      Transaction Hash: 0xa025433aec47a71b0230f12f43708812fd38ff7b7c1dc89a715f71dcbd5fbdbf
      Waiting for transaction to be mined ...
      Event Emited: 0x000000000000000000000000372a70ace72b02cc7f1757183f98c620254f9c8d000000000000000000000000000000000000000000000000000000000000002a
      Waiting for transaction to be mined ...
      Get Value from http://localhost:8545: 0x000000000000000000000000000000000000000000000000000000000000002a
      Waiting for transaction to be mined ...
      Get Value from http://localhost:8546: 0x000000000000000000000000000000000000000000000000000000000000002a
      Waiting for transaction to be mined ...
      Get Value from http://localhost:8547: 0x
      note

      As expected, log messages indicate that Node 3 Tessera cannot find payloads because Node 3 does not have access to the private transactions between Node 1 and Node 2.

      -
    +
    \ No newline at end of file diff --git a/private-networks/tutorials/qbft.html b/private-networks/tutorials/qbft.html index 17ef3475203..899abbbea1f 100644 --- a/private-networks/tutorials/qbft.html +++ b/private-networks/tutorials/qbft.html @@ -1,22 +1,22 @@ - + -Create a QBFT network | Besu documentation +Create a QBFT network | Besu documentation - - + + -

    Create a private network using QBFT

    +

    Create a private network using QBFT

    A private network provides a configurable network for testing. This private network uses the QBFT (proof of authority) consensus protocol.

    The QBFT network in this tutorial implements the block header validator selection method to manage validators. For a tutorial on how to implement the contract validator selection method, follow the steps in the example smart contract repository.

    important

    The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.

    This tutorial configures a private network using QBFT for educational purposes only. QBFT requires 4 validators to be Byzantine fault tolerant.

    @@ -113,6 +113,6 @@

    Next stepsStop the nodes

    When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window.

    tip

    To restart the QBFT network in the future, start from step 6.

    -

    *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.

    +

    *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.

    \ No newline at end of file diff --git a/private-networks/tutorials/quickstart.html b/private-networks/tutorials/quickstart.html index ff6388d90ae..7c7ba231f4a 100644 --- a/private-networks/tutorials/quickstart.html +++ b/private-networks/tutorials/quickstart.html @@ -1,22 +1,22 @@ - + -Quorum Developer Quickstart | Besu documentation +Quorum Developer Quickstart | Besu documentation - - + + -

    Developer Quickstart

    +

    Developer Quickstart

    The Quorum Developer Quickstart uses the Besu Docker image to run a private IBFT 2.0 network of Besu nodes managed by Docker Compose.

    caution

    This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.

    Prerequisites

    @@ -259,6 +259,6 @@

    perm_addNodesToAllowlist API method on existing nodes to add the new node without restarting.

    note

    Calling the API method by itself only persists for as long as the nodes remain online and is lost on the next restart.

    On a live network, the new node must be added to the permissions file so that subsequent restarts of the nodes are aware of the change.

    6. Start the network

    -

    Once complete, start the network up with ./run.sh. When using the smart contract you can either make changes via a dapp or via RPC API calls.

    +

    Once complete, start the network up with ./run.sh. When using the smart contract you can either make changes via a dapp or via RPC API calls.

    \ No newline at end of file diff --git a/public-networks.html b/public-networks.html index 6d75de8b808..42603308d04 100644 --- a/public-networks.html +++ b/public-networks.html @@ -1,22 +1,22 @@ - + -Public networks | Besu documentation +Public networks | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/chatbot.html b/public-networks/chatbot.html index 5b58fd226f0..4de0fdb5b2a 100644 --- a/public-networks/chatbot.html +++ b/public-networks/chatbot.html @@ -1,22 +1,22 @@ - + -Chatbot | Besu documentation +Chatbot | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/concepts.html b/public-networks/concepts.html index cfda2b2eb25..ab13434eeeb 100644 --- a/public-networks/concepts.html +++ b/public-networks/concepts.html @@ -1,21 +1,21 @@ - + -Concepts | Besu documentation +Concepts | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/concepts/data-storage-formats.html b/public-networks/concepts/data-storage-formats.html index cd511bb8e5c..7cd61db07e4 100644 --- a/public-networks/concepts/data-storage-formats.html +++ b/public-networks/concepts/data-storage-formats.html @@ -1,22 +1,22 @@ - + -Data storage formats | Besu documentation +Data storage formats | Besu documentation - - + + -

    Data storage formats

    +

    Data storage formats

    Besu offers two formats for storing the world state, Bonsai Tries and Forest of Tries.

    Bonsai Tries

    Bonsai Tries is a data storage layout policy designed to reduce storage requirements and increase read performance. This is the default for Besu.

    @@ -46,6 +46,6 @@

    Accessing dat

    Syncing nodes

    The following table shows the ways you can sync a full node with the different data storage formats using fast and snap sync.

    Data storage formatSync modeStorage estimateCan other nodes sync to your node?
    BonsaiFast1140 GBNo
    BonsaiSnap1090 GBYes
    BonsaiCheckpoint840 GBNo
    ForestFast1200 GBYes
    -
    tip

    We recommend using snap sync with Bonsai for the fastest sync and lowest storage requirements.

    +
    tip

    We recommend using snap sync with Bonsai for the fastest sync and lowest storage requirements.

    \ No newline at end of file diff --git a/public-networks/concepts/events-and-logs.html b/public-networks/concepts/events-and-logs.html index 05ce4255b5b..44f3a143517 100644 --- a/public-networks/concepts/events-and-logs.html +++ b/public-networks/concepts/events-and-logs.html @@ -1,22 +1,22 @@ - + -Events and logs | Besu documentation +Events and logs | Besu documentation - - + + -

    Events and logs

    +

    Events and logs

    Transaction mining causes smart contracts to emit events and write logs to the blockchain.

    The smart contract address is the link to the logs and the blockchain includes the logs, but contracts cannot access logs. Log storage is cheaper than contract storage (that is, it costs less gas) so storing and accessing the required data in logs reduces the cost. For example, use logs to display all transfers made using a specific contract, but not the current state of the contract.

    A Dapp front end can either access logs using the JSON-RPC API filter methods or subscribe to logs using the RPC Pub/Sub API.

    @@ -55,6 +55,6 @@

    Topic filters<
  • [[A, C], [B, D]] - Match (A OR C) in first position AND (B OR D) in second position.
  • The following filter option object returns log entries for the Event Parameters example contract with valueIndexed set to 5 or 9:

    -
    {
    "fromBlock": "earliest",
    "toBlock": "latest",
    "address": "0x43d1f9096674b5722d359b6402381816d5b22f28",
    "topics": [
    ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],
    [
    "0x0000000000000000000000000000000000000000000000000000000000000005",
    "0x0000000000000000000000000000000000000000000000000000000000000009"
    ]
    ]
    }

    +
    {
    "fromBlock": "earliest",
    "toBlock": "latest",
    "address": "0x43d1f9096674b5722d359b6402381816d5b22f28",
    "topics": [
    ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],
    [
    "0x0000000000000000000000000000000000000000000000000000000000000005",
    "0x0000000000000000000000000000000000000000000000000000000000000009"
    ]
    ]
    }
    \ No newline at end of file diff --git a/public-networks/concepts/genesis-file.html b/public-networks/concepts/genesis-file.html index a7d47476266..e95699e2109 100644 --- a/public-networks/concepts/genesis-file.html +++ b/public-networks/concepts/genesis-file.html @@ -1,27 +1,27 @@ - + -Genesis file | Besu documentation +Genesis file | Besu documentation - - + + -

    Genesis file

    +

    Genesis file

    The genesis file defines the first block in the chain, and the first block defines which chain you want to join.

    For Ethereum Mainnet and public testnets (for example, Holesky) the genesis configuration definition is in Besu and used when specifying a public network using the --network command line option.

    For private networks, create a JSON genesis file, then specify the genesis file using the --genesis-file command line option.

    The genesis file specifies the network-wide settings, such as those for a free gas network, so all nodes in a network must use the same genesis file.

    note

    You can specify node-level settings on the command line or in the node configuration file.

    -
    Example IBFT 2.0 genesis file
    {
    "config": {
    "chainId": 2018,
    "berlinBlock": 0,
    "ibft2": {
    "blockperiodseconds": 2,
    "epochlength": 30000,
    "requesttimeoutseconds": 4
    }
    },
    "nonce": "0x0",
    "timestamp": "0x58ee40ba",
    "extraData": "0xf83ea00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000c0",
    "gasLimit": "0x1fffffffffffff",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "alloc": {
    "9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb": {
    "balance": "0xad78ebc5ac6200000"
    }
    }
    }
    +
    Example IBFT 2.0 genesis file
    {
    "config": {
    "chainId": 2018,
    "berlinBlock": 0,
    "ibft2": {
    "blockperiodseconds": 2,
    "epochlength": 30000,
    "requesttimeoutseconds": 4
    }
    },
    "nonce": "0x0",
    "timestamp": "0x58ee40ba",
    "extraData": "0xf83ea00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000c0",
    "gasLimit": "0x1fffffffffffff",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "alloc": {
    "9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb": {
    "balance": "0xad78ebc5ac6200000"
    }
    }
    }
    \ No newline at end of file diff --git a/public-networks/concepts/network-and-chain-id.html b/public-networks/concepts/network-and-chain-id.html index c2ea44389b6..c29074da9d2 100644 --- a/public-networks/concepts/network-and-chain-id.html +++ b/public-networks/concepts/network-and-chain-id.html @@ -1,22 +1,22 @@ - + -Network ID and chain ID | Besu documentation +Network ID and chain ID | Besu documentation - - + + -

    Network ID and chain ID

    +

    Network ID and chain ID

    Ethereum networks have two identifiers, a network ID and a chain ID. Although they often have the same value, they have different uses.

    Peer-to-peer communication between nodes uses the network ID, while the transaction signature process uses the chain ID.

    note

    EIP-155 introduced using the chain ID as part of the transaction signing process to protect against transaction replay attacks.

    @@ -37,6 +37,6 @@

    Restart the nodes. -
    Warning

    Starting a new chain is starting from block zero.

    This means when you start a new chain with a new chain ID, you lose all previous data.

    +
    Warning

    Starting a new chain is starting from block zero.

    This means when you start a new chain with a new chain ID, you lose all previous data.

    \ No newline at end of file diff --git a/public-networks/concepts/node-clients.html b/public-networks/concepts/node-clients.html index eafd018730d..2346714035b 100644 --- a/public-networks/concepts/node-clients.html +++ b/public-networks/concepts/node-clients.html @@ -1,22 +1,22 @@ - + -Node clients | Besu documentation +Node clients | Besu documentation - - + + -

    Node clients

    +

    Node clients

    Ethereum's Proof of Stake (PoS) protocol leverages two separate P2P networks supporting separate clients. Execution clients gossip transactions over their network, enabling them to manage their local transaction pool. Consensus clients gossip blocks over their network, enabling consensus @@ -62,6 +62,6 @@

    Validator

    Validators earn rewards for performing validator duties, and fee recipients -also earn rewards for the inclusion of execution layer transactions.

    +also earn rewards for the inclusion of execution layer transactions.

    \ No newline at end of file diff --git a/public-networks/concepts/node-keys.html b/public-networks/concepts/node-keys.html index ee47f1d4378..996e7f2e3cf 100644 --- a/public-networks/concepts/node-keys.html +++ b/public-networks/concepts/node-keys.html @@ -1,22 +1,22 @@ - + -Node keys | Besu documentation +Node keys | Besu documentation - - + + -

    Node keys and node address

    +

    Node keys and node address

    Each node has a private and public key pair, and a node address. Besu uses the private and public key pair to sign and verify transactions, and the node address as an identifier for the node.

    Node private key

    When starting Besu, if the --node-private-key-file option is not specified and a key file does not exist in the data directory for the node, Besu generates a node private key and writes it to the key file.

    @@ -60,6 +60,6 @@

    Domain n
    Example enode URL using a domain name
    enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@mydomain.dev.example.net:30301
    tip

    If deploying Besu using Kubernetes in private permissioned networks, use the --Xdns-enabled and --Xdns-update-enabled options to ensure that Besu can connect to a container after restarting even if the IP address of the container changes.

    Use the --Xhelp command line option to view early access options and their descriptions.

    -

    If nodes are not connecting as expected, set the log level to TRACE to help troubleshoot the issue.

    +

    If nodes are not connecting as expected, set the log level to TRACE to help troubleshoot the issue.

    \ No newline at end of file diff --git a/public-networks/concepts/parallel-transaction-execution.html b/public-networks/concepts/parallel-transaction-execution.html index e7a12962486..d99bef98b23 100644 --- a/public-networks/concepts/parallel-transaction-execution.html +++ b/public-networks/concepts/parallel-transaction-execution.html @@ -1,22 +1,22 @@ - + -Parallel transaction execution | Besu documentation +Parallel transaction execution | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/concepts/proof-of-stake.html b/public-networks/concepts/proof-of-stake.html index 6b029d3c9cd..78bc376988f 100644 --- a/public-networks/concepts/proof-of-stake.html +++ b/public-networks/concepts/proof-of-stake.html @@ -1,22 +1,22 @@ - + -Proof of stake consensus | Besu documentation +Proof of stake consensus | Besu documentation - - + + -

    Proof of stake consensus

    +

    Proof of stake consensus

    The Merge transitioned Ethereum Mainnet to Proof of Stake (PoS) consensus.

    Under Ethereum's PoS, you must run a full node and @@ -45,6 +45,6 @@

  • Sends the validity result back to the consensus client.
  • If the block is valid, the execution client includes it in the execution chain and stores the new state in execution state storage.

    -

    If a consensus block receives attestations backed by enough staked ETH, the block is included in the Beacon Chain. In the case of competing chains, the chain with the highest number of validator votes is selected.

    +

    If a consensus block receives attestations backed by enough staked ETH, the block is included in the Beacon Chain. In the case of competing chains, the chain with the highest number of validator votes is selected.

    \ No newline at end of file diff --git a/public-networks/concepts/proof-of-stake/attestations.html b/public-networks/concepts/proof-of-stake/attestations.html index a455df851e4..76c6eee0dba 100644 --- a/public-networks/concepts/proof-of-stake/attestations.html +++ b/public-networks/concepts/proof-of-stake/attestations.html @@ -1,22 +1,22 @@ - + -Attestations | Besu documentation +Attestations | Besu documentation - - + + -

    Attestations

    +

    Attestations

    Ethereum's move to proof of stake consensus has brought many changes to the way the network operates. An important aspect of proof of stake is the need for validators to provide attestations in a timely and accurate manner. However, missed attestations have become a common occurrence among validators, leading to a loss of rewards and earnings. This page explores the context behind missing attestations.

    What are attestations?

    Every epoch (6.4 minutes), a validator proposes an attestation to the network. The attestation is for a specific slot (every 12 seconds) in the epoch. The attestation votes in favor of the validator's view of the chain, in particular, the most recent justified block and the first block in the current epoch (known as source and target checkpoints). This information is collected for all participating validators, enabling the network to reach consensus about the state of the blockchain.

    @@ -56,6 +56,6 @@

    ReferencesUnderstanding Attestation Misses
  • Block production in Ethereum after the Merge
  • Ethereum Consensus Specs
  • -

    +
    \ No newline at end of file diff --git a/public-networks/concepts/transactions/pool.html b/public-networks/concepts/transactions/pool.html index 2c406f1f21d..cdbb39b6ac8 100644 --- a/public-networks/concepts/transactions/pool.html +++ b/public-networks/concepts/transactions/pool.html @@ -1,22 +1,22 @@ - + -Transaction pool | Besu documentation +Transaction pool | Besu documentation - - + + -

    Transaction pool

    +

    Transaction pool

    All nodes maintain a transaction pool to store pending transactions before processing.

    Transaction pools are categorized into the following two types:

    +
    note

    The option --tx-pool-layer-max-capacity is applicable only for layered transaction pools.

    \ No newline at end of file diff --git a/public-networks/concepts/transactions/types.html b/public-networks/concepts/transactions/types.html index 6960e5d2446..0a5e0cfbf2d 100644 --- a/public-networks/concepts/transactions/types.html +++ b/public-networks/concepts/transactions/types.html @@ -1,22 +1,22 @@ - + -Transaction types | Besu documentation +Transaction types | Besu documentation - - + + -

    Transaction types

    + +blob transaction cost details.

    \ No newline at end of file diff --git a/public-networks/concepts/transactions/validation.html b/public-networks/concepts/transactions/validation.html index 5b248593250..7866e7a3af8 100644 --- a/public-networks/concepts/transactions/validation.html +++ b/public-networks/concepts/transactions/validation.html @@ -1,27 +1,27 @@ - + -Transaction validation | Besu documentation +Transaction validation | Besu documentation - - + + -

    Transaction validation

    +

    Transaction validation

    For transactions submitted and added to a block, Besu validates the transactions, as illustrated in the following diagram.

    Transaction Validation

    Besu repeats the set of transaction pool validations after propagating the transaction. Besu repeats the same set of validations when importing the block that includes the transaction, except the nonce must be exactly right when importing the block.

    tip

    Private transactions are not added to the transaction pool. The privacy marker transaction is submitted to the transaction pool but the private transaction itself is directly distributed to the transaction participants.

    When adding the transaction to a block, Besu performs an additional validation to check that the transaction gas limit is less than the remaining block gas limit. After creating a block, the node imports the block and then repeats the transaction pool validations.

    -
    info

    The transaction is only added if the entire transaction gas limit is less than the remaining gas for the block. The total gas used by the transaction is not relevant to this validation. That is, if the total gas used by the transaction is less than the remaining block gas, but the transaction gas limit is more than the remaining block gas, the transaction is not added.

    +
    info

    The transaction is only added if the entire transaction gas limit is less than the remaining gas for the block. The total gas used by the transaction is not relevant to this validation. That is, if the total gas used by the transaction is less than the remaining block gas, but the transaction gas limit is more than the remaining block gas, the transaction is not added.

    \ No newline at end of file diff --git a/public-networks/get-started.html b/public-networks/get-started.html index 2df7d26b97d..0b93008da73 100644 --- a/public-networks/get-started.html +++ b/public-networks/get-started.html @@ -1,21 +1,21 @@ - + -Get started | Besu documentation +Get started | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/get-started/connect.html b/public-networks/get-started/connect.html index 585039d8ef3..6076d27b4d6 100644 --- a/public-networks/get-started/connect.html +++ b/public-networks/get-started/connect.html @@ -1,22 +1,22 @@ - + -Connect to a network overview | Besu documentation +Connect to a network overview | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/get-started/connect/mainnet.html b/public-networks/get-started/connect/mainnet.html index 6fdb35c86a3..d5ea251d49d 100644 --- a/public-networks/get-started/connect/mainnet.html +++ b/public-networks/get-started/connect/mainnet.html @@ -1,22 +1,22 @@ - + -Connect to Mainnet | Besu documentation +Connect to Mainnet | Besu documentation - - + + -

    Connect to Mainnet

    +

    Connect to Mainnet

    info

    As a Proof of Stake network, running a full Ethereum node requires both an execution client and a consensus client.

    Run Besu as an execution client with any consensus client on Ethereum Mainnet.

    If you're using Teku as a consensus client, you can follow the Besu and Teku Mainnet tutorial.

    @@ -62,6 +62,6 @@

    6. Stake ETH

    Stake your ETH for one or more validators using the Staking Launchpad.

    -

    You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    +

    You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    \ No newline at end of file diff --git a/public-networks/get-started/connect/sync-node.html b/public-networks/get-started/connect/sync-node.html index 2ff9eb89ab8..9b2036f8db9 100644 --- a/public-networks/get-started/connect/sync-node.html +++ b/public-networks/get-started/connect/sync-node.html @@ -1,22 +1,22 @@ - + -Sync Besu | Besu documentation +Sync Besu | Besu documentation - - + + -

    Sync Besu

    +

    Sync Besu

    Besu supports two node types, commonly referred to as full nodes and archive nodes.

    A full node consists of an @@ -135,6 +135,6 @@

    Run an a

    Full sync starts from the genesis block and reprocesses all transactions.

    important

    Do not run an archive node with the Bonsai Tries data storage format. -Bonsai is designed for retrieving recent data only.

    +Bonsai is designed for retrieving recent data only.

    \ No newline at end of file diff --git a/public-networks/get-started/connect/testnet.html b/public-networks/get-started/connect/testnet.html index af17c650722..b0e57c47060 100644 --- a/public-networks/get-started/connect/testnet.html +++ b/public-networks/get-started/connect/testnet.html @@ -1,22 +1,22 @@ - + -Connect to a testnet | Besu documentation +Connect to a testnet | Besu documentation - - + + -

    Connect to a testnet

    +

    Connect to a testnet

    Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.

    If you're using Teku as a consensus client, you can follow the Besu and Teku testnet tutorial.

    note

    Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.

    @@ -51,6 +51,6 @@

    6. Stake ETH

    Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad.

    -

    You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    +

    You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    \ No newline at end of file diff --git a/public-networks/get-started/install.html b/public-networks/get-started/install.html index 20ba77773ad..6746b9a292c 100644 --- a/public-networks/get-started/install.html +++ b/public-networks/get-started/install.html @@ -1,28 +1,28 @@ - + -Installation options | Besu documentation +Installation options | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/get-started/install/binary-distribution.html b/public-networks/get-started/install/binary-distribution.html index 542ab1cab28..cea01d2e94f 100644 --- a/public-networks/get-started/install/binary-distribution.html +++ b/public-networks/get-started/install/binary-distribution.html @@ -1,22 +1,22 @@ - + -Install binary distribution | Besu documentation +Install binary distribution | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/get-started/install/run-docker-image.html b/public-networks/get-started/install/run-docker-image.html index b82d3d7fbcc..327825ae6e9 100644 --- a/public-networks/get-started/install/run-docker-image.html +++ b/public-networks/get-started/install/run-docker-image.html @@ -1,22 +1,22 @@ - + -Run Besu from Docker image | Besu documentation +Run Besu from Docker image | Besu documentation - - + + - +
    docker rm <container-name>
    \ No newline at end of file diff --git a/public-networks/get-started/migrate-to-besu.html b/public-networks/get-started/migrate-to-besu.html index 156c8793552..66e3e0c0fa4 100644 --- a/public-networks/get-started/migrate-to-besu.html +++ b/public-networks/get-started/migrate-to-besu.html @@ -1,25 +1,25 @@ - + -Migrate to Besu | Besu documentation +Migrate to Besu | Besu documentation - - + + -

    Migrate to Besu

    +

    Migrate to Besu

    Migrate from a different Ethereum execution client to Besu to contribute to client diversity.

    To migrate from a different client, configure Besu as an execution client and connect your consensus client to Besu instead of your original execution client.

    To minimize downtime while Besu syncs and avoid downtime penalties, you can sync Besu with a new consensus layer instance. Once Besu has fully synced you can connect it to your existing consensus client.

    -

    Find guides to switch from specific clients on the client diversity website.

    +

    Find guides to switch from specific clients on the client diversity website.

    \ No newline at end of file diff --git a/public-networks/get-started/start-node.html b/public-networks/get-started/start-node.html index 39332751007..0e41e8765ae 100644 --- a/public-networks/get-started/start-node.html +++ b/public-networks/get-started/start-node.html @@ -1,22 +1,22 @@ - + -Start Besu | Besu documentation +Start Besu | Besu documentation - - + + -

    Start Besu

    +

    Start Besu

    Nodes can connect to Ethereum Mainnet and public testnets.

    Use the besu command with the required command line options to start a node.

    Prerequisites

    @@ -77,6 +77,6 @@

    Conf

    For example, after connecting to Mainnet, eth_syncing will return something similar to:

    {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
    "startingBlock": "0x0",
    "currentBlock": "0x2d0",
    "highestBlock": "0x66c0"
    }
    }
    -

    +
    \ No newline at end of file diff --git a/public-networks/get-started/system-requirements.html b/public-networks/get-started/system-requirements.html index 8ea280c5f05..e3f22eed197 100644 --- a/public-networks/get-started/system-requirements.html +++ b/public-networks/get-started/system-requirements.html @@ -1,22 +1,22 @@ - + -System requirements | Besu documentation +System requirements | Besu documentation - - + + -

    System requirements

    +

    System requirements

    Determine public network system requirements by checking CPU and disk space requirements using Prometheus. Grafana provides a sample dashboard for Besu.

    tip

    CPU requirements are highest when syncing to the network and typically reduce after the node is synchronized to the chain head.

    Java distribution and installation

    @@ -68,6 +68,6 @@

    AWS require

    We are running 22.4.2 Mainnet nodes using m6gd.2xlarge boxes.

    We synchronized the 22.4.2 Mainnet nodes using m6gd.2xlarge boxes.

    Using a larger box while synchronizing speeds up the sync process by giving it more resources. When the sync is completed, the box size can be reduced.

    -
    caution

    If you are using a more recent release than 22.4.2, resource requirements may have increased.

    +
    caution

    If you are using a more recent release than 22.4.2, resource requirements may have increased.

    \ No newline at end of file diff --git a/public-networks/how-to.html b/public-networks/how-to.html index 9832132db3e..708f2813d52 100644 --- a/public-networks/how-to.html +++ b/public-networks/how-to.html @@ -1,21 +1,21 @@ - + -How to | Besu documentation +How to | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/how-to/bonsai-limit-trie-logs.html b/public-networks/how-to/bonsai-limit-trie-logs.html index 1268a155d41..2c699b42b66 100644 --- a/public-networks/how-to/bonsai-limit-trie-logs.html +++ b/public-networks/how-to/bonsai-limit-trie-logs.html @@ -1,22 +1,22 @@ - + -Reduce storage for Bonsai Tries | Besu documentation +Reduce storage for Bonsai Tries | Besu documentation - - + + -
    +
    sudo /usr/local/bin/besu/bin/besu --network=holesky --sync-mode=SNAP --data-storage-format=BONSAI --data-path=/var/lib/besu storage trie-log prune
    \ No newline at end of file diff --git a/public-networks/how-to/configure-besu.html b/public-networks/how-to/configure-besu.html index 3021e75641e..7a9b289475a 100644 --- a/public-networks/how-to/configure-besu.html +++ b/public-networks/how-to/configure-besu.html @@ -1,22 +1,22 @@ - + -Configure Besu | Besu documentation +Configure Besu | Besu documentation - - + + -

    Configure Besu

    +

    Configure Besu

    Besu comes with a default configuration that is suitable for staking.

    You can override the default values by specifying configuration options on the command line, as environment variables, or in a TOML configuration file that can be reused across node startups.

    You can also use a pre-configured profile for some common use cases or create and apply a custom profile.

    @@ -57,6 +57,6 @@

    Storagedata-storage-formatBONSAIBesu uses Bonsai Tries, the most space-efficient data storage format.

    Sync

    Configuration optionDefaultDescription
    sync-modeSNAPBesu syncs using snap sync, the most time-efficient sync method.
    -
    note

    You can see all default configuration values in the configuration options reference.

    +
    note

    You can see all default configuration values in the configuration options reference.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-besu/profile.html b/public-networks/how-to/configure-besu/profile.html index 1a01d142cd3..5ad35d99d03 100644 --- a/public-networks/how-to/configure-besu/profile.html +++ b/public-networks/how-to/configure-besu/profile.html @@ -1,22 +1,22 @@ - + -Use a profile | Besu documentation +Use a profile | Besu documentation - - + + -

    Use a profile

    +

    Use a profile

    You can load a profile to extend Besu's default configuration, using the --profile option.

    Profiles simplify the process of configuring Besu for common use cases. Besu provides the following pre-configured profiles:

      @@ -54,6 +54,6 @@

      Load For example, to load the profiles/custom_profile.toml profile, run:

      besu --profile=custom_profile
      note

      You can overwrite the directory in which to place external profiles using the besu.profiles.dir -system property.

    +system property.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-ha.html b/public-networks/how-to/configure-ha.html index 72459937719..ba1a4702599 100644 --- a/public-networks/how-to/configure-ha.html +++ b/public-networks/how-to/configure-ha.html @@ -1,22 +1,22 @@ - + -High availability of JSON-RPC and RPC Pub/Sub APIs | Besu documentation +High availability of JSON-RPC and RPC Pub/Sub APIs | Besu documentation - - + + -

    High availability of JSON-RPC and RPC Pub/Sub APIs

    +

    High availability of JSON-RPC and RPC Pub/Sub APIs

    To enable high availability to the RPC Pub/Sub API over WebSocket or the JSON-RPC API, run and synchronize more than one Besu node to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests.

    Load Balancer

    tip

    We don't recommend putting bootnodes behind a load balancer.

    @@ -65,6 +65,6 @@

    To request all pending transactions for the new node, use txpool_besuTransactions.

    note

    Nodes do not all store the same pending transactions.

    Syncing

    -

    The syncing state of each node is specific to that node. To retrieve the syncing state of the new node, use eth_syncing.

    +

    The syncing state of each node is specific to that node. To retrieve the syncing state of the new node, use eth_syncing.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-ha/sample-configuration.html b/public-networks/how-to/configure-ha/sample-configuration.html index c25eb9aa0d7..6781e1bb69d 100644 --- a/public-networks/how-to/configure-ha/sample-configuration.html +++ b/public-networks/how-to/configure-ha/sample-configuration.html @@ -1,22 +1,22 @@ - + -Sample load balancer configurations | Besu documentation +Sample load balancer configurations | Besu documentation - - + + -

    Sample load balancer configurations

    +

    Sample load balancer configurations

    AWS

    For AWS, we recommend the Classic Load Balancer. The Classic Load Balancer is the easiest to configure and work with. Register the Besu instances to the load balancer and use the liveness endpoint for health checks.

    For finer grain control, use the Application Load Balancer:

    @@ -37,6 +37,6 @@

    Manual

    For HAProxy, create multiple backend and frontend sets.

    Multiple backend and frontend sets
    frontend discovery-tcp-30303
    bind *:30303
    acl ...
    ...
    default_backend back-discovery-tcp-30303

    frontend rpc-tcp-8545
    bind *:8545
    acl ...
    ...
    default_backend back-rpc-tcp-8545

    backend back-discovery-tcp-30303
    balance leastconn
    server node-01 10.0.1.1:30303 weight 1 check
    server node-02 10.0.1.2:30303 weight 1 check
    option ...
    timeout server 600s

    backend back-rpc-tcp-8545
    balance leastconn
    server node-01 10.0.1.1:8545 weight 1 check
    server node-02 10.0.1.2:8545 weight 1 check
    option ....
    timeout server 600s
    ...

    HTTPS redirection

    -

    To add HTTPS capability, update the above server blocks to include the certificates and specific ciphers. If you require an HTTP to HTTPS redirection, add separate blocks to return a 301 code with the new URI.

    +

    To add HTTPS capability, update the above server blocks to include the certificates and specific ciphers. If you require an HTTP to HTTPS redirection, add separate blocks to return a 301 code with the new URI.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-java/install-update-java.html b/public-networks/how-to/configure-java/install-update-java.html index c66cb75b439..d9d2d399f65 100644 --- a/public-networks/how-to/configure-java/install-update-java.html +++ b/public-networks/how-to/configure-java/install-update-java.html @@ -1,22 +1,22 @@ - + -Install and update Java | Besu documentation +Install and update Java | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/how-to/configure-java/java-flight-recorder.html b/public-networks/how-to/configure-java/java-flight-recorder.html index 057fd374cbf..89140317629 100644 --- a/public-networks/how-to/configure-java/java-flight-recorder.html +++ b/public-networks/how-to/configure-java/java-flight-recorder.html @@ -1,28 +1,28 @@ - + -Use Java Flight Recorder | Besu documentation +Use Java Flight Recorder | Besu documentation - - + + -

    Use Java Flight Recorder

    +

    Use Java Flight Recorder

    Java Flight Recorder (JFR) is a monitoring tool that collects information about the Java Virtual Machine (JVM) when Besu is running. Use the JFR as a tool to analyze Besu performance.

    Enable Java Flight Recorder

    To enable JFR, set BESU_OPTS to the JFR tags as follows:

    export BESU_OPTS=-XX:StartFlightRecording=disk=true,delay=15s,dumponexit=true,\
    filename=/tmp/recording.jfr,maxsize=1024m,maxage=1d,\
    settings=profile,path-to-gc-roots=true
    tip

    When recording, cleanly exiting Besu results in better data. If not possible to cleanly exit, the file may be missing some information not flushed to disk.

    Inspect the file written to /tmp/recording.jfr with tools such as Mission Control.

    -
    danger

    If providing the output file to ConsenSys Quorum support, be aware that while JFR files don't contain secrets such as private keys, some details about the user configuration can be inferred from the JFR output.

    +
    danger

    If providing the output file to ConsenSys Quorum support, be aware that while JFR files don't contain secrets such as private keys, some details about the user configuration can be inferred from the JFR output.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-java/manage-memory.html b/public-networks/how-to/configure-java/manage-memory.html index c96dd7e7b37..a2d441cf65f 100644 --- a/public-networks/how-to/configure-java/manage-memory.html +++ b/public-networks/how-to/configure-java/manage-memory.html @@ -1,22 +1,22 @@ - + -Manage JVM memory | Besu documentation +Manage JVM memory | Besu documentation - - + + -

    Manage JVM memory

    +

    Manage JVM memory

    You can manage Java Virtual Machine (JVM) memory usage for Besu by modifying the maximum heap size.

    By default, the JVM uses 25% of system RAM. For example, if you have 16 GB RAM installed, the JVM uses 4 GB by default.

    On public networks, we recommend setting the maximum heap size to:

    @@ -37,6 +37,6 @@

    Manage

    Default options

    To reduce Besu memory footprint, the following G1GC Java options are enabled by default:

    -XX:G1ConcRefinementThreads=2
    -XX:G1HeapWastePercent=15
    -XX:MaxGCPauseMillis=100
    -

    To run Besu without the default G1GC options, use the besu-untuned start script.

    +

    To run Besu without the default G1GC options, use the besu-untuned start script.

    \ No newline at end of file diff --git a/public-networks/how-to/configure-java/pass-jvm-options.html b/public-networks/how-to/configure-java/pass-jvm-options.html index 8a57bf97d16..d149fa1c344 100644 --- a/public-networks/how-to/configure-java/pass-jvm-options.html +++ b/public-networks/how-to/configure-java/pass-jvm-options.html @@ -1,25 +1,25 @@ - + -Pass JVM options | Besu documentation +Pass JVM options | Besu documentation - - + + -

    Pass JVM options

    +

    Pass JVM options

    To perform tasks such as attaching a debugger or configuring the garbage collector, pass Java Virtual Machine (JVM) options to Besu.

    Besu passes the contents of the BESU_OPTS environment variable to the JVM. Set standard JVM options in the BESU_OPTS variable.

    For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu.

    -
    BESU_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
    besu --network=holesky
    +
    BESU_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
    besu --network=holesky
    \ No newline at end of file diff --git a/public-networks/how-to/connect/configure-ports.html b/public-networks/how-to/connect/configure-ports.html index db84260d08e..4b9a7cf390f 100644 --- a/public-networks/how-to/connect/configure-ports.html +++ b/public-networks/how-to/connect/configure-ports.html @@ -1,22 +1,22 @@ - + -Configure ports | Besu documentation +Configure ports | Besu documentation - - + + -

    Configure ports

    +

    Configure ports

    To enable communication you must expose Besu ports appropriately. The following shows an example port configuration for a Besu node on AWS.

    Port Configuration

    When running Besu from the Docker image, expose ports.

    @@ -32,6 +32,6 @@

    JSON-RPC APISpecify the HTTP and WebSockets JSON-RPC ports using the --rpc-http-port and --rpc-ws-port options. The defaults are 8545 and 8546.

    Metrics

    To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP.

    -

    Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.

    +

    Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.

    \ No newline at end of file diff --git a/public-networks/how-to/connect/manage-peers.html b/public-networks/how-to/connect/manage-peers.html index 20e0a23cb4d..9614430b365 100644 --- a/public-networks/how-to/connect/manage-peers.html +++ b/public-networks/how-to/connect/manage-peers.html @@ -1,22 +1,22 @@ - + -Manage peers | Besu documentation +Manage peers | Besu documentation - - + + -

    Manage peers

    +

    Manage peers

    Besu peer-to-peer (P2P) discovery happens periodically based on the number of peers in a network and the node's peer limit.

    The frequency of discovery isn't configurable, but you can:

    @@ -109,6 +109,6 @@

    Disable di

    To disable P2P discovery, set the --discovery-enabled option to false.

    With discovery disabled, peers can't open connections with the node unless they were previously discovered or manually peered (for example, using admin_addPeer). Static nodes can also open connections.

    Troubleshoot

    -

    If you encounter issues with peering, see the troubleshoot peering documentation, which helps you identify and resolve common problems that can occur during the peering process.

    +

    If you encounter issues with peering, see the troubleshoot peering documentation, which helps you identify and resolve common problems that can occur during the peering process.

    \ No newline at end of file diff --git a/public-networks/how-to/connect/specify-nat.html b/public-networks/how-to/connect/specify-nat.html index c71f6f31457..51a74225063 100644 --- a/public-networks/how-to/connect/specify-nat.html +++ b/public-networks/how-to/connect/specify-nat.html @@ -1,22 +1,22 @@ - + -Specify NAT method | Besu documentation +Specify NAT method | Besu documentation - - + + -

    Specify the NAT method

    +

    Specify the NAT method

    Use the --nat-method option to specify the NAT method. Options are: UPNP, KUBERNETES, DOCKER, AUTO, and NONE.

    The enode advertised to other nodes during discovery is the external IP address and port. The admin_nodeInfo JSON-RPC API method returns the external address and port for the enode and listenAddr properties.

    While Besu is running, the following are not supported:

    @@ -55,6 +55,6 @@

    None--rpc-http-host and --rpc-http-port for the JSON-RPC HTTP service.

    The P2P and JSON-RPC HTTP hosts and ports are advertised in the net_services method.

    -
    tip

    When the NAT method is set to NONE, the advertised port is the same as the listening port.

    +
    tip

    When the NAT method is set to NONE, the advertised port is the same as the listening port.

    \ No newline at end of file diff --git a/public-networks/how-to/connect/static-nodes.html b/public-networks/how-to/connect/static-nodes.html index 08003c87839..09e874f735d 100644 --- a/public-networks/how-to/connect/static-nodes.html +++ b/public-networks/how-to/connect/static-nodes.html @@ -1,22 +1,22 @@ - + -Configure static nodes | Besu documentation +Configure static nodes | Besu documentation - - + + -

    Static nodes

    +

    Static nodes

    Static nodes are a configured set of trusted nodes. Static nodes are exempt from maximum peer and remote connection limits.

    Besu periodically initiates a connection to any unconnected static node. To mitigate low peer count issues in small networks, we recommend using static nodes, or static nodes and bootnodes.

    tip

    Bootnodes and static nodes are both methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes.

    For example:

      @@ -42,6 +42,6 @@

      Confi

      static-nodes.json file

      The static-nodes.json file must be in the data directory (specified by --data-path) and contain a JSON array of enode URLs.

      Example
      [
      "enode://cea71cb65a471037e01508cebcc178f176f9d5267bf29507ea1f6431eb6a5dc67d086dc8dc54358a72299dab1161febc5d7af49d1609c69b42b5e54544145d4f@127.0.0.1:30303",
      "enode://ca05e940488614402705a6b6836288ea902169ecc67a89e1bd5ef94bc0d1933f20be16bc881ffb4be59f521afa8718fc26eec2b0e90f2cd0f44f99bc8103e60f@127.0.0.1:30304"
      ]
      -
      note

      Each node has a static-nodes.json file. We recommend each node in the network has the same static-nodes.json file.

    +
    note

    Each node has a static-nodes.json file. We recommend each node in the network has the same static-nodes.json file.

    \ No newline at end of file diff --git a/public-networks/how-to/develop/client-libraries.html b/public-networks/how-to/develop/client-libraries.html index 05ed1ad2134..742cdea1552 100644 --- a/public-networks/how-to/develop/client-libraries.html +++ b/public-networks/how-to/develop/client-libraries.html @@ -1,22 +1,22 @@ - + -Use client libraries | Besu documentation +Use client libraries | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/how-to/develop/hardhat.html b/public-networks/how-to/develop/hardhat.html index 03d564cd49d..68f1ac7c6e4 100644 --- a/public-networks/how-to/develop/hardhat.html +++ b/public-networks/how-to/develop/hardhat.html @@ -1,22 +1,22 @@ - + -Use Hardhat | Besu documentation +Use Hardhat | Besu documentation - - + + -

    Use Hardhat

    +

    Use Hardhat

    Developing for Besu using Hardhat is the same as developing for public Ethereum networks using Hardhat. Hardhat supports Besu with the only difference being Besu does not support private key management.

    You can therefore use a wallet provider, or specify your private key in the code.

    @@ -38,6 +38,6 @@

    Start a Be

    Start a Besu node with JSON-RPC enabled on the endpoint specified in the Hardhat configuration file.

    Deploy a contract

    To deploy a contract onto the Besu network:

    -
    npx hardhat scripts run ./scripts/deploy_my_contract.ts --network besuWallet
    +
    npx hardhat scripts run ./scripts/deploy_my_contract.ts --network besuWallet
    \ No newline at end of file diff --git a/public-networks/how-to/monitor.html b/public-networks/how-to/monitor.html index d80afada497..8938b9c1836 100644 --- a/public-networks/how-to/monitor.html +++ b/public-networks/how-to/monitor.html @@ -1,27 +1,27 @@ - + -Monitor Besu | Besu documentation +Monitor Besu | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/how-to/monitor/logging.html b/public-networks/how-to/monitor/logging.html index 65deb870ccc..63d585aac9e 100644 --- a/public-networks/how-to/monitor/logging.html +++ b/public-networks/how-to/monitor/logging.html @@ -1,22 +1,22 @@ - + -Configure logging | Besu documentation +Configure logging | Besu documentation - - + + -

    Use logging

    +

    Use logging

    Besu uses Log4j 2 for logging and provides two methods to configure logging behavior:

    • Basic - Changes the log level.
    • @@ -47,6 +47,6 @@

      Log

      For example, the following Log4j 2 configuration enables logging of invalid transactions:

      debug.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <Configuration monitorInterval="30" status="INFO">
      <Properties>
      <Property name="root.log.level">INFO</Property>
      </Properties>
      <Appenders>
      <Console name="Console">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSSZZZ} | %t | %-5level | %c{1} | %msg%n"/>
      </Console>
      <Routing name="Router">
      <Routes pattern="$${event:Marker}">
      <Route key="INVALID_TX_REMOVED">
      <Console name="ConsoleITR" target="SYSTEM_OUT">
      <PatternLayout pattern="Invalid tx removed:%X{txlog}, reason:%X{reason}; RLP={%X{txrlp}}}%n"/>
      </Console>
      </Route>
      <Route ref="Console"/>
      </Routes>
      </Routing>
      </Appenders>
      <Loggers>
      <Logger additivity="false" name="org.hyperledger.besu.ethereum.eth.transactions">
      <AppenderRef ref="Router"/>
      </Logger>
      <Root level="${sys:root.log.level}">
      <AppenderRef ref="Console"/>
      </Root>
      </Loggers>
      </Configuration>

      Log rotation

      -

      The Quorum Developer Quickstart logging configuration defines a log rotation to restrict the size of the log files.

    +

    The Quorum Developer Quickstart logging configuration defines a log rotation to restrict the size of the log files.

    \ No newline at end of file diff --git a/public-networks/how-to/monitor/metrics.html b/public-networks/how-to/monitor/metrics.html index f67b44f67ed..1040596dcca 100644 --- a/public-networks/how-to/monitor/metrics.html +++ b/public-networks/how-to/monitor/metrics.html @@ -1,22 +1,22 @@ - + -Use metrics | Besu documentation +Use metrics | Besu documentation - - + + -

    Use metrics to monitor node performance

    +

    Use metrics to monitor node performance

    To enable the Prometheus monitoring and alerting service to access Besu metrics, use the --metrics-enabled option. Use Grafana to visualize the collected data. See the sample Besu Full Grafana dashboard.

    The Besu example networks have monitoring with Prometheus and Grafana configured.

    Use Prometheus to monitor the number of blocks your Besu node is behind the chain head, and to alert you that your node is not keeping up with the chain head.

    @@ -112,6 +112,6 @@

    View t

    Each metric, such as besu_blockchain_chain_head_gas_limit, starts with a metric category prefix. Metrics specific to Besu use the besu_ prefix, followed by another metric category. You can enable metric categories using the ---metrics-category command line option.

    +--metrics-category command line option.

    \ No newline at end of file diff --git a/public-networks/how-to/monitor/understand-metrics.html b/public-networks/how-to/monitor/understand-metrics.html index f43d0d77873..2bbac58555b 100644 --- a/public-networks/how-to/monitor/understand-metrics.html +++ b/public-networks/how-to/monitor/understand-metrics.html @@ -1,22 +1,22 @@ - + -Understand metrics | Besu documentation +Understand metrics | Besu documentation - - + + -

    Understand metrics

    +
    +
    \ No newline at end of file diff --git a/public-networks/how-to/send-transactions.html b/public-networks/how-to/send-transactions.html index 89869a8b5e4..41277c0a5f4 100644 --- a/public-networks/how-to/send-transactions.html +++ b/public-networks/how-to/send-transactions.html @@ -1,22 +1,22 @@ - + -Create and send transactions | Besu documentation +Create and send transactions | Besu documentation - - + + -

    Create and send transactions

    +

    Create and send transactions

    You can send signed transactions using the eth_sendRawTransaction JSON-RPC API method.

    Signed transactions can be simple value transfers, contract creation, or contract invocation. Set the maximum transaction fee for transactions using the --rpc-tx-feecap CLI option.

    To accept signed transactions from remote connections, set the API listening host to 0.0.0.0.

    @@ -32,6 +32,6 @@

    Web3Signer with Besu to provide access to your key store and sign transactions.
  • Third-party tools (for example, MetaMask and web3j) for creating accounts.
  • -

    +
    \ No newline at end of file diff --git a/public-networks/how-to/troubleshoot/evm-tool.html b/public-networks/how-to/troubleshoot/evm-tool.html index 364ecf16f46..85858eddcb0 100644 --- a/public-networks/how-to/troubleshoot/evm-tool.html +++ b/public-networks/how-to/troubleshoot/evm-tool.html @@ -1,22 +1,22 @@ - + -Use EVM tool | Besu documentation +Use EVM tool | Besu documentation - - + + -

    Use the EVM tool

    + +These subcommands are not meant for typical user interactions.

    \ No newline at end of file diff --git a/public-networks/how-to/troubleshoot/peering.html b/public-networks/how-to/troubleshoot/peering.html index 8ee9e6f78cc..18fe847eaf6 100644 --- a/public-networks/how-to/troubleshoot/peering.html +++ b/public-networks/how-to/troubleshoot/peering.html @@ -1,22 +1,22 @@ - + -Troubleshoot peering | Besu documentation +Troubleshoot peering | Besu documentation - - + + -

    Troubleshoot peering

    +

    Troubleshoot peering

    Many factors can affect the ability of your node to find and maintain peers. Your network router, machine environment, and node configuration are all important. If you have peering issues, start by configuring your ports and managing peers.

    Peering FAQ

    "Why can’t I find enough peers to sync?"

    @@ -62,6 +62,6 @@

    Metrics

    Capture metrics to gain insights into peering behavior over time.

    To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP.

    -

    Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.

    +

    Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.

    \ No newline at end of file diff --git a/public-networks/how-to/troubleshoot/performance.html b/public-networks/how-to/troubleshoot/performance.html index ecb6572a5fe..b5365c7c723 100644 --- a/public-networks/how-to/troubleshoot/performance.html +++ b/public-networks/how-to/troubleshoot/performance.html @@ -1,22 +1,22 @@ - + -Troubleshoot poor performance and resource constraints | Besu documentation +Troubleshoot poor performance and resource constraints | Besu documentation - - + + -

    Troubleshoot poor performance and resource constraints

    +

    Troubleshoot poor performance and resource constraints

    Your hardware, machine environment, and node configuration can affect your node's ability to serve requests and perform validator duties, including attestation performance.

    @@ -56,6 +56,6 @@ You can run your consensus client on the same machine, but this adds overhead on Besu, and vice versa (on CPU cache misses, CPU scheduler latency, IO, etc.). -

    You should continue to monitor your node after following these suggestions.

    +

    You should continue to monitor your node after following these suggestions.

    \ No newline at end of file diff --git a/public-networks/how-to/troubleshoot/trace-transactions.html b/public-networks/how-to/troubleshoot/trace-transactions.html index 836bd836305..3088a0b3401 100644 --- a/public-networks/how-to/troubleshoot/trace-transactions.html +++ b/public-networks/how-to/troubleshoot/trace-transactions.html @@ -1,22 +1,22 @@ - + -Trace transactions | Besu documentation +Trace transactions | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/how-to/upgrade-node.html b/public-networks/how-to/upgrade-node.html index 553d4ecffc4..9e04a4528c9 100644 --- a/public-networks/how-to/upgrade-node.html +++ b/public-networks/how-to/upgrade-node.html @@ -1,22 +1,22 @@ - + -Upgrade Besu | Besu documentation +Upgrade Besu | Besu documentation - - + + -

    Upgrade your Besu node

    +

    Upgrade your Besu node

    When upgrading your Besu node, we recommend:

    • Using an orchestration method (for example, Ansible or Chef) to keep all nodes in sync with your desired configuration.
    • @@ -34,6 +34,6 @@

      AnsibleFind peers on restarting

      Nodes store known peers in the peer table. The peer table is not persisted to disk. When a node restarts, the node connects to the specified bootnodes and discovers other nodes through the peer discovery process. The node continues collecting data from where it left off before the restart (assuming there was no data corruption in a failure scenario).

      -

      Before the node restarted, connected peers saved the node details in their peer tables. These peers can reconnect to the restarted node. The restarted node uses these peers and the bootnodes, to discover more peers. To ensure that the restarted node successfully rejoins the network, ensure you specify at least one operational bootnode.

    +

    Before the node restarted, connected peers saved the node details in their peer tables. These peers can reconnect to the restarted node. The restarted node uses these peers and the bootnodes, to discover more peers. To ensure that the restarted node successfully rejoins the network, ensure you specify at least one operational bootnode.

    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api.html b/public-networks/how-to/use-besu-api.html index cdb3d376f9d..e601ffa714f 100644 --- a/public-networks/how-to/use-besu-api.html +++ b/public-networks/how-to/use-besu-api.html @@ -1,22 +1,22 @@ - + -Access the Besu API | Besu documentation +Access the Besu API | Besu documentation - - + + -

    Access the Besu API

    + +

    Besu does not support the Whisper and Swarm protocols.

    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api/access-logs.html b/public-networks/how-to/use-besu-api/access-logs.html index cd736be0d32..7e8786d2906 100644 --- a/public-networks/how-to/use-besu-api/access-logs.html +++ b/public-networks/how-to/use-besu-api/access-logs.html @@ -1,22 +1,22 @@ - + -Access logs using JSON-RPC | Besu documentation +Access logs using JSON-RPC | Besu documentation - - + + -

    Access logs using the Besu API

    +

    Access logs using the Besu API

    Subscribe to events, such as logs, using either RPC Pub/Sub over WebSockets or filters over HTTP.

    Access logs using the following Besu API methods:

      @@ -58,6 +58,6 @@

      eth_getLogs or priv_getLogs for a private contract.

      The following request for eth_getLogs returns all the logs where the example contract has been deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b and executed with valueIndexed set to 5.

      {
      "jsonrpc": "2.0",
      "method": "eth_getLogs",
      "params": [
      {
      "fromBlock": "earliest",
      "toBlock": "latest",
      "address": "0x42699a7612a82f1d9c36148af9c77354759b210b",
      "topics": [
      ["0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8"],
      ["0x0000000000000000000000000000000000000000000000000000000000000005"]
      ]
      }
      ],
      "id": 1
      }
      -

      The above example returns the same result as calling eth_newFilter followed by eth_getFilterLogs.

    +

    The above example returns the same result as calling eth_newFilter followed by eth_getFilterLogs.

    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api/authenticate.html b/public-networks/how-to/use-besu-api/authenticate.html index 433bd773f36..e3707b5f750 100644 --- a/public-networks/how-to/use-besu-api/authenticate.html +++ b/public-networks/how-to/use-besu-api/authenticate.html @@ -1,22 +1,22 @@ - + -Authenticate over JSON-RPC requests | Besu documentation +Authenticate over JSON-RPC requests | Besu documentation - - + + -

    Authenticate and authorize JSON-RPC

    +
    +
    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api/graphql.html b/public-networks/how-to/use-besu-api/graphql.html index 3a73b795585..93efc6dbc90 100644 --- a/public-networks/how-to/use-besu-api/graphql.html +++ b/public-networks/how-to/use-besu-api/graphql.html @@ -1,22 +1,22 @@ - + -Use GraphQL over HTTP | Besu documentation +Use GraphQL over HTTP | Besu documentation - - + + -

    Use GraphQL over HTTP

    +
    +
    curl -X POST -H "Content-Type: application/json" --data '{ "query": "{pending {transactions{hash}}}"}' http://localhost:8547/graphql
    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api/json-rpc.html b/public-networks/how-to/use-besu-api/json-rpc.html index 23c22f07349..0762b1d9bae 100644 --- a/public-networks/how-to/use-besu-api/json-rpc.html +++ b/public-networks/how-to/use-besu-api/json-rpc.html @@ -1,22 +1,22 @@ - + -Use JSON-RPC over HTTP, WS, and IPC | Besu documentation +Use JSON-RPC over HTTP, WS, and IPC | Besu documentation - - + + -

    Use JSON-RPC over HTTP, WebSocket, and IPC

    +

    Use JSON-RPC over HTTP, WebSocket, and IPC

    JSON-RPC APIs allow you to interact with your node. JSON-RPC endpoints are not enabled by default.

    caution

    You should secure access to your node's JSON-RPC endpoints. Users with access to your node via JSON-RPC can make calls directly to your node, causing your node to consume resources.

    To enable JSON-RPC over HTTP or WebSocket, use the --rpc-http-enabled and --rpc-ws-enabled options.

    @@ -117,6 +117,6 @@

    Block parame

    safe : tag - The most recent block that is safe from reorganization under honest majority and certain synchronicity assumptions.

    -

    +
    \ No newline at end of file diff --git a/public-networks/how-to/use-besu-api/rpc-pubsub.html b/public-networks/how-to/use-besu-api/rpc-pubsub.html index b4a5957f52a..0132d6eaa29 100644 --- a/public-networks/how-to/use-besu-api/rpc-pubsub.html +++ b/public-networks/how-to/use-besu-api/rpc-pubsub.html @@ -1,22 +1,22 @@ - + -Use RPC Pub/Sub over WS | Besu documentation +Use RPC Pub/Sub over WS | Besu documentation - - + + -

    Use RPC Pub/Sub over WebSockets

    +
    +
    { "jsonrpc": "2.0", "id": 1, "result": true }
    \ No newline at end of file diff --git a/public-networks/how-to/use-engine-api.html b/public-networks/how-to/use-engine-api.html index d27a6baa306..b4dca65431c 100644 --- a/public-networks/how-to/use-engine-api.html +++ b/public-networks/how-to/use-engine-api.html @@ -1,22 +1,22 @@ - + -Use the Engine API | Besu documentation +Use the Engine API | Besu documentation - - + + -

    Use the Engine API

    +

    Use the Engine API

    Consensus and execution clients communicate with each other using the Engine API. These API methods are a separate subsection of the JSON-RPC API.

    Configure the Engine API

    The Engine API is enabled by default even if no consensus client configuration exists. You can configure the Engine API to:

    @@ -49,6 +49,6 @@

    3. Exe
    curl -X POST --data '{"jsonrpc":"2.0","method":"engine_newPayloadV1","params":[
    {
    "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",
    "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
    "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",
    "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "blockNumber": "0x1",
    "gasLimit": "0x1c9c380",
    "gasUsed": "0x0",
    "timestamp": "0x5",
    "extraData": "0x",
    "baseFeePerGas": "0x7",
    "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",
    "transactions": []
    }
    ],"id":67}' http://127.0.0.1:8550

    4. Update the fork choice

    Update the fork choice using engine_forkchoiceUpdatedV1 again.

    -
    curl -X POST --data '{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "safeBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "finalizedBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"},null],"id":67}' http://127.0.0.1:8550
    +
    curl -X POST --data '{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "safeBlockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "finalizedBlockHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"},null],"id":67}' http://127.0.0.1:8550
    \ No newline at end of file diff --git a/public-networks/how-to/use-pow/mining.html b/public-networks/how-to/use-pow/mining.html index b07185e43b8..66542d2405d 100644 --- a/public-networks/how-to/use-pow/mining.html +++ b/public-networks/how-to/use-pow/mining.html @@ -1,22 +1,22 @@ - + -Configure mining | Besu documentation +Configure mining | Besu documentation - - + + -

    Configure mining

    +

    Configure mining

    Besu supports CPU and GPU mining, which are configured using command line options.

    GPU mining tests used Ethminer with the stratum+tcp and getwork schemes.

    Ethminer has been used with Besu to mine blocks on the Ropsten testnet, ETC Mainnet (uncle block only) and Mordor ETC testnet.

    @@ -62,6 +62,6 @@

    Check b

    If there's no block creation in Clique or IBFT 2.0 networks, ensure the validator addresses in the genesis file match running nodes.

    No mined transactions

    If you add a transaction to the transaction pool and the transaction hash returns, but the transaction is never mined, check the --min-gas-price option on mining nodes. If the gasPrice on a transaction is lower than the min-gas-price for the mining node, the transaction will never mine.

    -

    In free gas networks, you must set --min-gas-price to zero.

    +

    In free gas networks, you must set --min-gas-price to zero.

    \ No newline at end of file diff --git a/public-networks/reference.html b/public-networks/reference.html index fc0128fc619..a01dc9af114 100644 --- a/public-networks/reference.html +++ b/public-networks/reference.html @@ -1,21 +1,21 @@ - + -Reference | Besu documentation +Reference | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/reference/api.html b/public-networks/reference/api.html index f83f70275a1..c40b975499e 100644 --- a/public-networks/reference/api.html +++ b/public-networks/reference/api.html @@ -1,22 +1,22 @@ - + -Besu API | Besu documentation +Besu API | Besu documentation - - + + -

    Besu API methods

    +

    Besu API methods

    caution
    • This reference contains API methods that apply to both public and private networks. For private-network-specific API methods, see the private network API reference.
    • All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint.
    • @@ -1532,6 +1532,6 @@

      ParametersNone

      Returns

      result: map of strings to strings - enabled APIs and their versions

      -
      curl -X POST --data '{"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":1}' http://127.0.0.1:8545

    +
    curl -X POST --data '{"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":1}' http://127.0.0.1:8545
    \ No newline at end of file diff --git a/public-networks/reference/api/objects.html b/public-networks/reference/api/objects.html index 8a9743491d8..fc3d91d8237 100644 --- a/public-networks/reference/api/objects.html +++ b/public-networks/reference/api/objects.html @@ -1,22 +1,22 @@ - + -Objects | Besu documentation +Objects | Besu documentation - - + + -

    Besu API objects

    +

    Besu API objects

    The following objects are parameters for or returned by Besu API methods.

    info

    This reference contains API objects that apply to both public and private networks. For private-network-specific API objects, see the private network API object reference.

    Block object

    @@ -64,6 +64,6 @@

    T
    note

    For pre-Byzantium transactions, the transaction receipt object includes the following instead of status:

    KeyTypeValue
    rootData, 32 bytesPost-transaction state root

    Transaction trace object

    Returned by trace_replayBlockTransactions.

    -
    KeyTypeValue
    outputBooleanTransaction result. 1 for success and 0 for failure.
    stateDiffObjectState changes in the requested block.
    traceArrayOrdered list of calls to other contracts.
    vmTraceObjectOrdered list of EVM actions.
    transactionHashData, 32 bytesHash of the replayed transaction.
    +
    KeyTypeValue
    outputBooleanTransaction result. 1 for success and 0 for failure.
    stateDiffObjectState changes in the requested block.
    traceArrayOrdered list of calls to other contracts.
    vmTraceObjectOrdered list of EVM actions.
    transactionHashData, 32 bytesHash of the replayed transaction.
    \ No newline at end of file diff --git a/public-networks/reference/cli/options.html b/public-networks/reference/cli/options.html index 9ce17ccfb34..07acca2507a 100644 --- a/public-networks/reference/cli/options.html +++ b/public-networks/reference/cli/options.html @@ -1,22 +1,22 @@ - + -Options | Besu documentation +Options | Besu documentation - - + + -

    Options

    This reference describes the syntax of the Besu configuration options.

    +

    Options

    This reference describes the syntax of the Besu configuration options.

    info

    This reference contains options that apply to both public and private networks. For private-network-specific options, see the private network options reference.

    Specify options

    You can specify Besu options:

    @@ -695,6 +695,6 @@

    Xhelp

    -X, --Xhelp

    Displays the early access options and their descriptions, and exits.

    -
    caution

    The displayed options are unstable and may change between releases.

    +
    caution

    The displayed options are unstable and may change between releases.

    \ No newline at end of file diff --git a/public-networks/reference/cli/subcommands.html b/public-networks/reference/cli/subcommands.html index 4cc9fbafac3..4c2f11194f8 100644 --- a/public-networks/reference/cli/subcommands.html +++ b/public-networks/reference/cli/subcommands.html @@ -1,22 +1,22 @@ - + -Subcommands | Besu documentation +Subcommands | Besu documentation - - + + -

    Subcommands

    +

    Subcommands

    This reference describes the syntax of the Besu command line interface (CLI) subcommands.

    note

    This reference contains subcommands that apply to both public and private networks. For private-network-specific subcommands, see the private network subcommands reference.

    To start a Besu node using subcommands, run:

    @@ -106,6 +106,6 @@

    prune512.

    validate-config

    besu validate-config --config-file <PATH-TO-CONFIG-FILE>
    -

    Performs basic syntax validation of the specified configuration file. Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup).

    +

    Performs basic syntax validation of the specified configuration file. Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup).

    \ No newline at end of file diff --git a/public-networks/reference/disclosure.html b/public-networks/reference/disclosure.html index d36cd26ecc9..e13ddedfa39 100644 --- a/public-networks/reference/disclosure.html +++ b/public-networks/reference/disclosure.html @@ -1,23 +1,23 @@ - + -Security disclosure policy | Besu documentation +Security disclosure policy | Besu documentation - - + + -

    Security disclosure policy

    +

    Security disclosure policy

    At Besu, security is a priority. But regardless of how much effort we put into system security, there might still be vulnerabilities present. If you discover a vulnerability, we need to know about it so we can take steps to address it as quickly as possible. We would like you to help us better protect our clients and our systems.

    -

    Please follow the process explained on defect response wiki page.

    +

    Please follow the process explained on defect response wiki page.

    \ No newline at end of file diff --git a/public-networks/reference/engine-api.html b/public-networks/reference/engine-api.html index b4a339c618c..50bfbb83b39 100644 --- a/public-networks/reference/engine-api.html +++ b/public-networks/reference/engine-api.html @@ -1,22 +1,22 @@ - + -Engine API | Besu documentation +Engine API | Besu documentation - - + + -

    Engine API methods

    +

    Engine API methods

    Consensus and execution clients communicate with each other using the Engine API. When running Besu as an execution client, use these API calls to communicate with a consensus client.

    info

    The engine API is enabled by default.

    See the Ethereum Engine API specification for more information. Not all changes to the Engine API are documented on this page.

    @@ -93,6 +93,6 @@

    ReturnsPayload status object -
    curl -X POST --data '{"jsonrpc":"2.0","method":"engine_newPayloadV1","params":[
    {
    "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",
    "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
    "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",
    "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "blockNumber": "0x1",
    "gasLimit": "0x1c9c380",
    "gasUsed": "0x0",
    "timestamp": "0x5",
    "extraData": "0x",
    "baseFeePerGas": "0x7",
    "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",
    "transactions": []
    }
    ],"id":67}' http://127.0.0.1:8550

    +
    curl -X POST --data '{"jsonrpc":"2.0","method":"engine_newPayloadV1","params":[
    {
    "parentHash": "0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a",
    "feeRecipient": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
    "stateRoot": "0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45",
    "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "blockNumber": "0x1",
    "gasLimit": "0x1c9c380",
    "gasUsed": "0x0",
    "timestamp": "0x5",
    "extraData": "0x",
    "baseFeePerGas": "0x7",
    "blockHash": "0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858",
    "transactions": []
    }
    ],"id":67}' http://127.0.0.1:8550
    \ No newline at end of file diff --git a/public-networks/reference/engine-api/objects.html b/public-networks/reference/engine-api/objects.html index 058778dc25e..0103b73f3f1 100644 --- a/public-networks/reference/engine-api/objects.html +++ b/public-networks/reference/engine-api/objects.html @@ -1,22 +1,22 @@ - + -Objects | Besu documentation +Objects | Besu documentation - - + + -

    Engine API objects

    +

    Engine API objects

    The following objects are parameters for or returned by the Engine API methods.

    Execution payload object

    Parameter for engine_newPayloadV1. Returned by engine_getPayloadV1.

    @@ -32,6 +32,6 @@

    Payloa
    KeyTypeValue
    statusEnumerationEither "VALID", "INVALID", "SYNCING", "ACCEPTED", "INVALID_BLOCK_HASH", or "INVALID_TERMINAL_BLOCK".
    latestValidHashData, 32 BytesHash of the most recent valid block in the branch defined by payload and its ancestors.
    validationErrorStringMessage providing additional details on the validation error if the payload is classified as INVALID, INVALID_BLOCK_HASH or INVALID_TERMINAL_BLOCK.

    Transition configuration object

    Parameter for and returned by engine_exchangeTransitionConfigurationV1.

    -
    KeyTypeValue
    terminalTotalDifficultyQuantity, 256 BitsMaps on the TERMINAL_TOTAL_DIFFICULTY parameter of EIP-3675.
    terminalBlockHashData, 32 BytesMaps on the TERMINAL_BLOCK_HASH parameter of EIP-3675.
    terminalBlockNumberQuantity, 64 BitsMaps on the TERMINAL_BLOCK_NUMBER parameter of EIP-3675.
    +
    KeyTypeValue
    terminalTotalDifficultyQuantity, 256 BitsMaps on the TERMINAL_TOTAL_DIFFICULTY parameter of EIP-3675.
    terminalBlockHashData, 32 BytesMaps on the TERMINAL_BLOCK_HASH parameter of EIP-3675.
    terminalBlockNumberQuantity, 64 BitsMaps on the TERMINAL_BLOCK_NUMBER parameter of EIP-3675.
    \ No newline at end of file diff --git a/public-networks/reference/evm-tool.html b/public-networks/reference/evm-tool.html index a79c18e8503..8d0cd0a3f85 100644 --- a/public-networks/reference/evm-tool.html +++ b/public-networks/reference/evm-tool.html @@ -1,22 +1,22 @@ - + -EVM tool options | Besu documentation +EVM tool options | Besu documentation - - + + -

    EVM tool reference

    + +information about this subcommand.

    \ No newline at end of file diff --git a/public-networks/reference/genesis-items.html b/public-networks/reference/genesis-items.html index ebee7c60ca5..cbbf5e59284 100644 --- a/public-networks/reference/genesis-items.html +++ b/public-networks/reference/genesis-items.html @@ -1,22 +1,22 @@ - + -Genesis file items | Besu documentation +Genesis file items | Besu documentation - - + + -

    Genesis file items

    +

    Genesis file items

    The Besu genesis file contains network configuration items and genesis block parameters.

    Configuration items

    Network configuration items are specified in the genesis file in the config object.

    @@ -44,6 +44,6 @@

    Fixed diffi
    tip

    Using fixeddifficulty is not recommended for use with Ethash outside of test environments. For production networks using Ethash, we recommend setting a low difficulty value in the genesis file instead. Ethash will adjust the difficulty of the network based on hashrate to produce blocks at the targeted frequency.

    Discovery configuration items

    Use the discovery configuration items to specify the bootnodes and discovery-dns-url in the genesis file, in place of using CLI options or listing them in the configuration file. If either CLI option is used, it takes precedence over the genesis file. Anything listed in the configuration file also takes precedence.

    -
    {
    "config": {
    "discovery": {
    "bootnodes": [
    "enode://c35c3...d615f@1.2.3.4:30303",
    "enode://f42c13...fc456@1.2.3.5:30303"
    ],
    "dns": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org"
    }
    }
    }
    +
    {
    "config": {
    "discovery": {
    "bootnodes": [
    "enode://c35c3...d615f@1.2.3.4:30303",
    "enode://f42c13...fc456@1.2.3.5:30303"
    ],
    "dns": "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org"
    }
    }
    }
    \ No newline at end of file diff --git a/public-networks/reference/projects-using-besu.html b/public-networks/reference/projects-using-besu.html index 27c6bdd066e..5ad67a9527f 100644 --- a/public-networks/reference/projects-using-besu.html +++ b/public-networks/reference/projects-using-besu.html @@ -1,22 +1,22 @@ - + -Projects using Besu | Besu documentation +Projects using Besu | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/reference/trace-types.html b/public-networks/reference/trace-types.html index 66dfb62f81e..25a2991fa9a 100644 --- a/public-networks/reference/trace-types.html +++ b/public-networks/reference/trace-types.html @@ -1,22 +1,22 @@ - + -Transaction trace types | Besu documentation +Transaction trace types | Besu documentation - - + + -
    \ No newline at end of file diff --git a/public-networks/tutorials.html b/public-networks/tutorials.html index a13073ce441..75ea73c6bc7 100644 --- a/public-networks/tutorials.html +++ b/public-networks/tutorials.html @@ -1,21 +1,21 @@ - + -Tutorials | Besu documentation +Tutorials | Besu documentation - - + + - + \ No newline at end of file diff --git a/public-networks/tutorials/besu-teku-mainnet.html b/public-networks/tutorials/besu-teku-mainnet.html index 5f7c712e1f8..50424129caf 100644 --- a/public-networks/tutorials/besu-teku-mainnet.html +++ b/public-networks/tutorials/besu-teku-mainnet.html @@ -1,22 +1,22 @@ - + -Run Besu and Teku on Mainnet | Besu documentation +Run Besu and Teku on Mainnet | Besu documentation - - + + -

    Run Besu and Teku on Mainnet

    + +

    You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    \ No newline at end of file diff --git a/public-networks/tutorials/besu-teku-testnet.html b/public-networks/tutorials/besu-teku-testnet.html index a175ebc51df..da97a16f6a2 100644 --- a/public-networks/tutorials/besu-teku-testnet.html +++ b/public-networks/tutorials/besu-teku-testnet.html @@ -1,22 +1,22 @@ - + -Run Besu and Teku on a testnet | Besu documentation +Run Besu and Teku on a testnet | Besu documentation - - + + -

    Run Besu and Teku on a testnet

    +

    Run Besu and Teku on a testnet

    Run Besu as an execution client and Teku as a consensus client on the Holesky and Sepolia Ethereum testnets.

    note

    Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.

    1. Install Besu and Teku

    @@ -80,6 +80,6 @@

    7. Stake ETH

    Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad.

    -

    You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    +

    You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.

    \ No newline at end of file diff --git a/public-networks/tutorials/kubernetes.html b/public-networks/tutorials/kubernetes.html index 053c4afadbe..82d07692d6d 100644 --- a/public-networks/tutorials/kubernetes.html +++ b/public-networks/tutorials/kubernetes.html @@ -1,22 +1,22 @@ - + -Deploy Besu using Kubernetes | Besu documentation +Deploy Besu using Kubernetes | Besu documentation - - + + -

    Deploy a Besu public node using Kubernetes

    + +the CSI drivers are provisioned automatically for you.

    \ No newline at end of file diff --git a/search-index.json b/search-index.json index 4aafef362e5..9a7629b4aad 100644 --- a/search-index.json +++ b/search-index.json @@ -1 +1 @@ -[{"documents":[{"i":2558,"t":"postman","u":"/global/postman","b":[]},{"i":2560,"t":"test_accounts","u":"/global/test_accounts","b":[]},{"i":2562,"t":"Besu for private networks","u":"/private-networks","b":["Private networks"]},{"i":2566,"t":"Permissioning","u":"/private-networks/concepts/permissioning","b":["Private networks","Concepts","Permissioning"]},{"i":2578,"t":"Concepts","u":"/private-networks/concepts","b":["Private networks","Concepts"]},{"i":2580,"t":"Chatbot","u":"/private-networks/chatbot","b":["Private networks"]},{"i":2581,"t":"Onchain permissioning","u":"/private-networks/concepts/permissioning/onchain","b":["Private networks","Concepts","Permissioning"]},{"i":2589,"t":"Plugins","u":"/private-networks/concepts/plugins","b":["Private networks","Concepts"]},{"i":2593,"t":"Permissioning plugin","u":"/private-networks/concepts/permissioning/plugin","b":["Private networks","Concepts","Permissioning"]},{"i":2601,"t":"Public key infrastructure","u":"/private-networks/concepts/pki","b":["Private networks","Concepts"]},{"i":2607,"t":"Proof of authority consensus","u":"/private-networks/concepts/poa","b":["Private networks","Concepts"]},{"i":2619,"t":"Multi-tenancy","u":"/private-networks/concepts/privacy/multi-tenancy","b":["Private networks","Concepts","Privacy"]},{"i":2621,"t":"Flexible privacy groups","u":"/private-networks/concepts/privacy/flexible-privacy","b":["Private networks","Concepts","Privacy"]},{"i":2629,"t":"Privacy plugin","u":"/private-networks/concepts/privacy/plugin","b":["Private networks","Concepts","Privacy"]},{"i":2643,"t":"Privacy groups","u":"/private-networks/concepts/privacy/privacy-groups","b":["Private networks","Concepts","Privacy"]},{"i":2655,"t":"Private transactions","u":"/private-networks/concepts/privacy/private-transactions","b":["Private networks","Concepts","Privacy","Private transactions"]},{"i":2667,"t":"Privacy","u":"/private-networks/concepts/privacy","b":["Private networks","Concepts","Privacy"]},{"i":2675,"t":"Private transaction processing","u":"/private-networks/concepts/privacy/private-transactions/processing","b":["Private networks","Concepts","Privacy","Private transactions"]},{"i":2677,"t":"Installation options","u":"/private-networks/get-started/install","b":["Private networks","Get started","Install Besu"]},{"i":2681,"t":"Install binary distribution","u":"/private-networks/get-started/install/binary-distribution","b":["Private networks","Get started","Install Besu"]},{"i":2692,"t":"System requirements","u":"/private-networks/get-started/system-requirements","b":["Private networks","Get started"]},{"i":2702,"t":"Run Besu from a Docker image","u":"/private-networks/get-started/install/run-docker-image","b":["Private networks","Get started","Install Besu"]},{"i":2714,"t":"How to","u":"/private-networks/how-to","b":["Private networks","How to"]},{"i":2716,"t":"Start Besu","u":"/private-networks/get-started/start-node","b":["Private networks","Get started"]},{"i":2730,"t":"Backup and restore Besu","u":"/private-networks/how-to/backup","b":["Private networks","How to"]},{"i":2744,"t":"Configure bootnodes","u":"/private-networks/how-to/configure/bootnodes","b":["Private networks","How to","Configure"]},{"i":2752,"t":"Consensus protocols","u":"/private-networks/how-to/configure/consensus","b":["Private networks","How to","Configure","Consensus"]},{"i":2754,"t":"Block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","b":["Private networks","How to","Configure"]},{"i":2777,"t":"Add and remove validators without voting","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","b":["Private networks","How to","Configure","Consensus"]},{"i":2781,"t":"Pre-deploy contracts in the genesis file","u":"/private-networks/how-to/configure/contracts","b":["Private networks","How to","Configure"]},{"i":2783,"t":"Configure IBFT 2.0 consensus","u":"/private-networks/how-to/configure/consensus/ibft","b":["Private networks","How to","Configure","Consensus"]},{"i":2815,"t":"Configure alternative elliptic curves","u":"/private-networks/how-to/configure/curves","b":["Private networks","How to","Configure"]},{"i":2817,"t":"Configure client and server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","b":["Private networks","How to","Configure","TLS"]},{"i":2833,"t":"Configure free gas networks","u":"/private-networks/how-to/configure/free-gas","b":["Private networks","How to","Configure"]},{"i":2849,"t":"Configure QBFT consensus","u":"/private-networks/how-to/configure/consensus/qbft","b":["Private networks","How to","Configure","Consensus"]},{"i":2879,"t":"Configure Clique consensus","u":"/private-networks/how-to/configure/consensus/clique","b":["Private networks","How to","Configure","Consensus"]},{"i":2909,"t":"Configure validators in a production network","u":"/private-networks/how-to/configure/validators","b":["Private networks","How to","Configure"]},{"i":2917,"t":"Deploy Besu with Ansible","u":"/private-networks/how-to/deploy/ansible","b":["Private networks","How to","Deploy for production"]},{"i":2919,"t":"Connect to Ethstats network monitor","u":"/private-networks/how-to/deploy/ethstats","b":["Private networks","How to","Deploy for production"]},{"i":2929,"t":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","b":["Private networks","How to","Configure","TLS"]},{"i":2949,"t":"Deploy Besu with Kubernetes","u":"/private-networks/how-to/deploy/kubernetes","b":["Private networks","How to","Deploy for production"]},{"i":2951,"t":"Deploy Besu to the cloud","u":"/private-networks/how-to/deploy/cloud","b":["Private networks","How to","Deploy for production"]},{"i":2953,"t":"Monitoring","u":"/private-networks/how-to/monitor","b":["Private networks","How to","Monitor nodes"]},{"i":2955,"t":"Use Elastic Stack","u":"/private-networks/how-to/monitor/elastic-stack","b":["Private networks","How to","Monitor nodes"]},{"i":2957,"t":"Use Chainlens Blockchain Explorer","u":"/private-networks/how-to/monitor/chainlens","b":["Private networks","How to","Monitor nodes"]},{"i":2967,"t":"Use Quorum Hibernate","u":"/private-networks/how-to/monitor/quorum-hibernate","b":["Private networks","How to","Monitor nodes"]},{"i":2969,"t":"Create and send transactions","u":"/private-networks/how-to/send-transactions","b":["Private networks","How to","Create and send transactions"]},{"i":2971,"t":"Use OpenTelemetry","u":"/private-networks/how-to/monitor/opentelemetry","b":["Private networks","How to","Monitor nodes"]},{"i":2977,"t":"Use Splunk","u":"/private-networks/how-to/monitor/splunk","b":["Private networks","How to","Monitor nodes"]},{"i":2999,"t":"Send concurrent private transactions","u":"/private-networks/how-to/send-transactions/concurrent-private-transactions","b":["Private networks","How to","Create and send transactions"]},{"i":3001,"t":"Grafana Loki","u":"/private-networks/how-to/monitor/loki","b":["Private networks","How to","Monitor nodes"]},{"i":3003,"t":"Network and protocol upgrades","u":"/private-networks/how-to/upgrade","b":["Private networks","How to"]},{"i":3007,"t":"Create and send private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","b":["Private networks","How to","Create and send transactions"]},{"i":3017,"t":"Revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","b":["Private networks","How to","Create and send transactions"]},{"i":3027,"t":"Use onchain permissioning","u":"/private-networks/how-to/use-permissioning/onchain","b":["Private networks","How to","Use permissioning"]},{"i":3031,"t":"Use local permissioning","u":"/private-networks/how-to/use-permissioning/local","b":["Private networks","How to","Use permissioning"]},{"i":3053,"t":"Access private and privacy marker transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","b":["Private networks","How to","Use privacy"]},{"i":3059,"t":"Use EEA-compliant privacy","u":"/private-networks/how-to/use-privacy/eea-compliant","b":["Private networks","How to","Use privacy"]},{"i":3063,"t":"Use Besu-extended privacy","u":"/private-networks/how-to/use-privacy/besu-extended","b":["Private networks","How to","Use privacy"]},{"i":3067,"t":"Use flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","b":["Private networks","How to","Use privacy"]},{"i":3075,"t":"Performance best practices","u":"/private-networks/how-to/use-privacy/performance-best-practices","b":["Private networks","How to","Use privacy"]},{"i":3098,"t":"Create and manage privacy groups","u":"/private-networks/how-to/use-privacy/privacy-groups","b":["Private networks","How to","Use privacy"]},{"i":3100,"t":"Run Tessera with Besu","u":"/private-networks/how-to/use-privacy/tessera","b":["Private networks","How to","Use privacy"]},{"i":3106,"t":"Sign privacy marker transactions","u":"/private-networks/how-to/use-privacy/sign-pmts","b":["Private networks","How to","Use privacy"]},{"i":3108,"t":"Reference","u":"/private-networks/reference","b":["Private networks","Reference"]},{"i":3110,"t":"Accounts for testing","u":"/private-networks/reference/accounts-for-testing","b":["Private networks","Reference"]},{"i":3116,"t":"Use the web3js-quorum client library","u":"/private-networks/how-to/use-privacy/web3js-quorum","b":["Private networks","How to","Use privacy"]},{"i":3128,"t":"Private network API objects","u":"/private-networks/reference/api/objects","b":["Private networks","Reference","Besu API"]},{"i":3134,"t":"Plugin API interfaces","u":"/private-networks/reference/plugin-api-interfaces","b":["Private networks","Reference"]},{"i":3140,"t":"Private network subcommands","u":"/private-networks/reference/cli/subcommands","b":["Private networks","Reference","Besu CLI"]},{"i":3154,"t":"Private network command line options","u":"/private-networks/reference/cli/options","b":["Private networks","Reference","Besu CLI"]},{"i":3199,"t":"Deploy private network example on Azure","u":"/private-networks/tutorials/azure","b":["Private networks","Tutorials"]},{"i":3213,"t":"Create a private network using Clique","u":"/private-networks/tutorials/clique","b":["Private networks","Tutorials"]},{"i":3237,"t":"Transfer funds between accounts in a transaction","u":"/private-networks/tutorials/contracts/transfer-funds","b":["Private networks","Tutorials","Deploy a smart contract"]},{"i":3245,"t":"Deploy smart contracts to an Ethereum chain","u":"/private-networks/tutorials/contracts","b":["Private networks","Tutorials","Deploy a smart contract"]},{"i":3255,"t":"Create a private network using Ethash","u":"/private-networks/tutorials/ethash","b":["Private networks","Tutorials"]},{"i":3277,"t":"Add and remove IBFT 2.0 validators","u":"/private-networks/tutorials/ibft/validators","b":["Private networks","Tutorials","Create an IBFT 2.0 network"]},{"i":3294,"t":"Create a private network using IBFT 2.0","u":"/private-networks/tutorials/ibft","b":["Private networks","Tutorials","Create an IBFT 2.0 network"]},{"i":3324,"t":"Interact with deployed smart contracts","u":"/private-networks/tutorials/contracts/interact","b":["Private networks","Tutorials","Deploy a smart contract"]},{"i":3344,"t":"Deploy Besu using Kubernetes","u":"/private-networks/tutorials/kubernetes","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3369,"t":"Create a cluster","u":"/private-networks/tutorials/kubernetes/cluster","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3386,"t":"Private network API methods","u":"/private-networks/reference/api","b":["Private networks","Reference","Besu API"]},{"i":3488,"t":"Maintenance","u":"/private-networks/tutorials/kubernetes/maintenance","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3496,"t":"Deploy in a local environment","u":"/private-networks/tutorials/kubernetes/playground","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3502,"t":"Use the Quorum Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3518,"t":"Deploy for production","u":"/private-networks/tutorials/kubernetes/production","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3533,"t":"Configure Kubernetes mode in NAT Manager","u":"/private-networks/tutorials/kubernetes/nat-manager","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3551,"t":"Configure a multi-tenant node","u":"/private-networks/tutorials/privacy/multi-tenancy","b":["Private networks","Tutorials","Create a privacy enabled network"]},{"i":3568,"t":"Create a permissioned network","u":"/private-networks/tutorials/permissioning","b":["Private networks","Tutorials"]},{"i":3601,"t":"Deploy charts","u":"/private-networks/tutorials/kubernetes/charts","b":["Private networks","Tutorials","Deploy using Kubernetes"]},{"i":3627,"t":"Use the multi-node example in the web3js-quorum client library","u":"/private-networks/tutorials/privacy/web3js-quorum","b":["Private networks","Tutorials","Create a privacy enabled network"]},{"i":3629,"t":"Create a privacy-enabled network using the Quorum Developer Quickstart","u":"/private-networks/tutorials/privacy/quickstart","b":["Private networks","Tutorials","Create a privacy enabled network"]},{"i":3644,"t":"Besu for public networks","u":"/public-networks","b":["Public networks"]},{"i":3648,"t":"Chatbot","u":"/public-networks/chatbot","b":["Public networks"]},{"i":3649,"t":"Create a private network using QBFT","u":"/private-networks/tutorials/qbft","b":["Private networks","Tutorials"]},{"i":3679,"t":"Create a privacy-enabled network","u":"/private-networks/tutorials/privacy","b":["Private networks","Tutorials","Create a privacy enabled network"]},{"i":3700,"t":"Data storage formats","u":"/public-networks/concepts/data-storage-formats","b":["Public networks","Concepts"]},{"i":3713,"t":"Network ID and chain ID","u":"/public-networks/concepts/network-and-chain-id","b":["Public networks","Concepts"]},{"i":3719,"t":"Events and logs","u":"/public-networks/concepts/events-and-logs","b":["Public networks","Concepts"]},{"i":3729,"t":"Developer Quickstart","u":"/private-networks/tutorials/quickstart","b":["Private networks","Tutorials"]},{"i":3783,"t":"Genesis file","u":"/public-networks/concepts/genesis-file","b":["Public networks","Concepts"]},{"i":3785,"t":"Proof of stake consensus","u":"/public-networks/concepts/proof-of-stake","b":["Public networks","Concepts","Proof of stake consensus"]},{"i":3787,"t":"Node clients","u":"/public-networks/concepts/node-clients","b":["Public networks","Concepts"]},{"i":3795,"t":"Node keys and node address","u":"/public-networks/concepts/node-keys","b":["Public networks","Concepts"]},{"i":3809,"t":"Transaction pool","u":"/public-networks/concepts/transactions/pool","b":["Public networks","Concepts","Transactions"]},{"i":3824,"t":"Transaction types","u":"/public-networks/concepts/transactions/types","b":["Public networks","Concepts","Transactions"]},{"i":3836,"t":"Attestations","u":"/public-networks/concepts/proof-of-stake/attestations","b":["Public networks","Concepts","Proof of stake consensus"]},{"i":3848,"t":"Transaction validation","u":"/public-networks/concepts/transactions/validation","b":["Public networks","Concepts","Transactions"]},{"i":3850,"t":"Connect to a network","u":"/public-networks/get-started/connect","b":["Public networks","Get started","Connect to a network"]},{"i":3852,"t":"Connect to Mainnet","u":"/public-networks/get-started/connect/mainnet","b":["Public networks","Get started","Connect to a network"]},{"i":3869,"t":"Parallel transaction execution","u":"/public-networks/concepts/parallel-transaction-execution","b":["Public networks","Concepts"]},{"i":3877,"t":"Install binary distribution","u":"/public-networks/get-started/install/binary-distribution","b":["Public networks","Get started","Install Besu"]},{"i":3888,"t":"Connect to a testnet","u":"/public-networks/get-started/connect/testnet","b":["Public networks","Get started","Connect to a network"]},{"i":3905,"t":"Sync Besu","u":"/public-networks/get-started/connect/sync-node","b":["Public networks","Get started","Connect to a network"]},{"i":3921,"t":"Migrate to Besu","u":"/public-networks/get-started/migrate-to-besu","b":["Public networks","Get started"]},{"i":3923,"t":"Installation options","u":"/public-networks/get-started/install","b":["Public networks","Get started","Install Besu"]},{"i":3927,"t":"Start Besu","u":"/public-networks/get-started/start-node","b":["Public networks","Get started"]},{"i":3947,"t":"Run Besu from a Docker image","u":"/public-networks/get-started/install/run-docker-image","b":["Public networks","Get started","Install Besu"]},{"i":3965,"t":"System requirements","u":"/public-networks/get-started/system-requirements","b":["Public networks","Get started"]},{"i":3977,"t":"Configure Besu","u":"/public-networks/how-to/configure-besu","b":["Public networks","How to","Configure Besu"]},{"i":3991,"t":"Use a profile","u":"/public-networks/how-to/configure-besu/profile","b":["Public networks","How to","Configure Besu"]},{"i":4001,"t":"High availability of JSON-RPC and RPC Pub/Sub APIs","u":"/public-networks/how-to/configure-ha","b":["Public networks","How to","Configure high availability"]},{"i":4021,"t":"Sample load balancer configurations","u":"/public-networks/how-to/configure-ha/sample-configuration","b":["Public networks","How to","Configure high availability"]},{"i":4032,"t":"Use Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","b":["Public networks","How to","Configure Java"]},{"i":4036,"t":"Install and update Java","u":"/public-networks/how-to/configure-java/install-update-java","b":["Public networks","How to","Configure Java"]},{"i":4049,"t":"Manage JVM memory","u":"/public-networks/how-to/configure-java/manage-memory","b":["Public networks","How to","Configure Java"]},{"i":4055,"t":"Pass JVM options","u":"/public-networks/how-to/configure-java/pass-jvm-options","b":["Public networks","How to","Configure Java"]},{"i":4057,"t":"Reduce storage for Bonsai Tries","u":"/public-networks/how-to/bonsai-limit-trie-logs","b":["Public networks","How to"]},{"i":4087,"t":"Configure ports","u":"/public-networks/how-to/connect/configure-ports","b":["Public networks","How to","Find and connect to peers"]},{"i":4095,"t":"Specify the NAT method","u":"/public-networks/how-to/connect/specify-nat","b":["Public networks","How to","Find and connect to peers"]},{"i":4107,"t":"Manage peers","u":"/public-networks/how-to/connect/manage-peers","b":["Public networks","How to","Find and connect to peers"]},{"i":4125,"t":"Use client libraries","u":"/public-networks/how-to/develop/client-libraries","b":["Public networks","How to","Develop dapps"]},{"i":4127,"t":"Use Hardhat","u":"/public-networks/how-to/develop/hardhat","b":["Public networks","How to","Develop dapps"]},{"i":4138,"t":"Monitor Besu","u":"/public-networks/how-to/monitor","b":["Public networks","How to","Monitor nodes"]},{"i":4140,"t":"Static nodes","u":"/public-networks/how-to/connect/static-nodes","b":["Public networks","How to","Find and connect to peers"]},{"i":4146,"t":"Use metrics to monitor node performance","u":"/public-networks/how-to/monitor/metrics","b":["Public networks","How to","Monitor nodes"]},{"i":4158,"t":"Use logging","u":"/public-networks/how-to/monitor/logging","b":["Public networks","How to","Monitor nodes"]},{"i":4168,"t":"Understand metrics","u":"/public-networks/how-to/monitor/understand-metrics","b":["Public networks","How to","Monitor nodes"]},{"i":4192,"t":"Use the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","b":["Public networks","How to","Troubleshoot"]},{"i":4202,"t":"Create and send transactions","u":"/public-networks/how-to/send-transactions","b":["Public networks","How to"]},{"i":4208,"t":"Troubleshoot poor performance and resource constraints","u":"/public-networks/how-to/troubleshoot/performance","b":["Public networks","How to","Troubleshoot"]},{"i":4210,"t":"Trace transactions","u":"/public-networks/how-to/troubleshoot/trace-transactions","b":["Public networks","How to","Troubleshoot"]},{"i":4216,"t":"Troubleshoot peering","u":"/public-networks/how-to/troubleshoot/peering","b":["Public networks","How to","Troubleshoot"]},{"i":4235,"t":"Upgrade your Besu node","u":"/public-networks/how-to/upgrade-node","b":["Public networks","How to"]},{"i":4241,"t":"Access the Besu API","u":"/public-networks/how-to/use-besu-api","b":["Public networks","How to","Use the Besu API"]},{"i":4258,"t":"Access logs using the Besu API","u":"/public-networks/how-to/use-besu-api/access-logs","b":["Public networks","How to","Use the Besu API"]},{"i":4272,"t":"Use GraphQL over HTTP","u":"/public-networks/how-to/use-besu-api/graphql","b":["Public networks","How to","Use the Besu API"]},{"i":4280,"t":"Authenticate and authorize JSON-RPC","u":"/public-networks/how-to/use-besu-api/authenticate","b":["Public networks","How to","Use the Besu API"]},{"i":4308,"t":"Use JSON-RPC over HTTP, WebSocket, and IPC","u":"/public-networks/how-to/use-besu-api/json-rpc","b":["Public networks","How to","Use the Besu API"]},{"i":4329,"t":"Use the Engine API","u":"/public-networks/how-to/use-engine-api","b":["Public networks","How to"]},{"i":4348,"t":"Configure mining","u":"/public-networks/how-to/use-pow/mining","b":["Public networks","How to","Use proof of work"]},{"i":4361,"t":"Use RPC Pub/Sub over WebSockets","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","b":["Public networks","How to","Use the Besu API"]},{"i":4384,"t":"Besu API objects","u":"/public-networks/reference/api/objects","b":["Public networks","Reference","Besu API"]},{"i":4414,"t":"Subcommands","u":"/public-networks/reference/cli/subcommands","b":["Public networks","Reference","Besu command line"]},{"i":4450,"t":"Security disclosure policy","u":"/public-networks/reference/disclosure","b":["Public networks","Reference"]},{"i":4452,"t":"EVM tool reference","u":"/public-networks/reference/evm-tool","b":["Public networks","Reference"]},{"i":4507,"t":"Engine API objects","u":"/public-networks/reference/engine-api/objects","b":["Public networks","Reference","Engine API"]},{"i":4519,"t":"Engine API methods","u":"/public-networks/reference/engine-api","b":["Public networks","Reference","Engine API"]},{"i":4536,"t":"Genesis file items","u":"/public-networks/reference/genesis-items","b":["Public networks","Reference"]},{"i":4548,"t":"Transaction trace types","u":"/public-networks/reference/trace-types","b":["Public networks","Reference"]},{"i":4558,"t":"Run Besu and Teku on Mainnet","u":"/public-networks/tutorials/besu-teku-mainnet","b":["Public networks","Tutorials"]},{"i":4578,"t":"Run Besu and Teku on a testnet","u":"/public-networks/tutorials/besu-teku-testnet","b":["Public networks","Tutorials"]},{"i":4598,"t":"Projects using Besu","u":"/public-networks/reference/projects-using-besu","b":["Public networks","Reference"]},{"i":4601,"t":"Deploy a Besu public node using Kubernetes","u":"/public-networks/tutorials/kubernetes","b":["Public networks","Tutorials"]},{"i":4610,"t":"Options","u":"/public-networks/reference/cli/options","b":["Public networks","Reference","Besu command line"]},{"i":4886,"t":"Besu API methods","u":"/public-networks/reference/api","b":["Public networks","Reference","Besu API"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2558",[0,6.508]],["t/2560",[1,6.508]],["t/2562",[2,1.859,3,2.4,4,2.118]],["t/2566",[5,4.286]],["t/2578",[6,6.508]],["t/2580",[7,5.803]],["t/2581",[5,3.62,8,4.902]],["t/2589",[9,4.991]],["t/2593",[5,3.62,9,4.216]],["t/2601",[10,3.903,11,4.243,12,4.758]],["t/2607",[13,4.243,14,4.243,15,3.278]],["t/2619",[16,4.509,17,5.497]],["t/2621",[18,4.243,19,2.617,20,3.649]],["t/2629",[9,4.216,19,3.024]],["t/2643",[19,3.024,20,4.216]],["t/2655",[3,2.773,21,2.773]],["t/2667",[19,3.58]],["t/2675",[3,2.4,21,2.4,22,4.758]],["t/2677",[23,3.982,24,3.982]],["t/2681",[23,3.446,25,4.243,26,4.243]],["t/2692",[27,4.902,28,4.902]],["t/2702",[2,1.638,29,3.038,30,3.74,31,3.74]],["t/2714",[]],["t/2716",[2,2.147,32,4.902]],["t/2730",[2,1.859,33,4.758,34,4.758]],["t/2744",[35,2.773,36,5.497]],["t/2752",[15,3.787,37,4.902]],["t/2754",[5,3.133,38,4.758,39,4.758]],["t/2777",[40,3.343,41,3.343,42,2.876,43,3.75,44,3.75]],["t/2781",[45,3.75,46,2.063,47,3.076,48,3.076,49,3.076]],["t/2783",[15,2.889,35,2.116,50,3.44,51,3.44]],["t/2815",[35,2.116,52,4.194,53,4.194,54,4.194]],["t/2817",[35,2.116,55,3.038,56,4.194,57,3.74]],["t/2833",[4,1.867,35,2.116,58,4.194,59,4.194]],["t/2849",[15,3.278,35,2.4,60,4.243]],["t/2879",[15,3.278,35,2.4,61,4.243]],["t/2909",[4,1.867,35,2.116,42,3.217,62,3.74]],["t/2917",[2,1.859,46,2.617,63,4.758]],["t/2919",[4,1.867,64,3.217,65,4.194,66,3.217]],["t/2929",[35,2.4,57,4.243,67,4.758]],["t/2949",[2,1.859,46,2.617,68,3.649]],["t/2951",[2,1.859,46,2.617,69,4.758]],["t/2953",[66,4.991]],["t/2955",[70,1.622,71,4.758,72,4.758]],["t/2957",[70,1.43,73,4.194,74,4.194,75,3.74]],["t/2967",[70,1.622,76,3.446,77,4.758]],["t/2969",[21,2.4,78,2.617,79,3.649]],["t/2971",[70,1.874,80,5.497]],["t/2977",[70,1.874,81,5.497]],["t/2999",[3,2.116,21,2.116,79,3.217,82,4.194]],["t/3001",[83,5.497,84,5.497]],["t/3003",[4,2.118,37,4.243,85,4.243]],["t/3007",[3,2.116,21,2.116,78,2.307,79,3.217]],["t/3017",[86,5.497,87,5.497]],["t/3027",[5,3.133,8,4.243,70,1.622]],["t/3031",[5,3.133,70,1.622,88,4.243]],["t/3053",[3,1.892,19,2.063,21,1.892,89,3.076,90,3.343]],["t/3059",[19,2.307,70,1.43,91,4.194,92,4.194]],["t/3063",[2,1.638,19,2.307,70,1.43,93,4.194]],["t/3067",[18,3.74,19,2.307,20,3.217,70,1.43]],["t/3075",[94,3.903,95,4.758,96,4.758]],["t/3098",[19,2.307,20,3.217,78,2.307,97,3.217]],["t/3100",[2,1.859,29,3.446,98,4.758]],["t/3106",[19,2.307,21,2.116,90,3.74,99,4.194]],["t/3108",[100,5.803]],["t/3110",[101,4.902,102,5.497]],["t/3116",[55,2.716,70,1.278,76,2.716,103,3.343,104,3.076]],["t/3128",[3,2.116,4,1.867,105,2.381,106,3.44]],["t/3134",[9,3.649,105,2.702,107,4.758]],["t/3140",[3,2.4,4,2.118,108,4.243]],["t/3154",[3,1.892,4,1.669,24,2.716,109,3.75,110,3.75]],["t/3199",[3,1.892,4,1.669,46,2.063,111,3.343,112,3.75]],["t/3213",[3,1.892,4,1.669,61,3.343,70,1.278,78,2.063]],["t/3237",[21,1.892,101,3.343,113,3.75,114,3.75,115,3.75]],["t/3245",[46,2.063,47,3.076,116,3.343,117,3.75,118,3.343]],["t/3255",[3,1.892,4,1.669,70,1.278,78,2.063,119,3.75]],["t/3277",[40,3.343,41,3.343,42,2.876,50,3.076,51,3.076]],["t/3294",[3,1.71,4,1.509,50,2.781,51,2.781,70,1.156,78,1.865]],["t/3324",[46,2.307,47,3.44,116,3.74,120,4.194]],["t/3344",[2,1.638,46,2.307,68,3.217,70,1.43]],["t/3369",[78,3.024,121,5.497]],["t/3386",[3,2.116,4,1.867,105,2.381,122,3.217]],["t/3488",[123,6.508]],["t/3496",[46,2.617,88,4.243,124,4.758]],["t/3502",[70,1.622,75,4.243,76,3.446]],["t/3518",[46,3.024,62,4.902]],["t/3533",[35,1.892,68,2.876,97,2.876,125,3.75,126,3.343]],["t/3551",[16,3.44,35,2.116,127,4.194,128,2.651]],["t/3568",[4,2.118,5,3.133,78,2.617]],["t/3601",[46,3.024,129,5.497]],["t/3627",[16,2.334,55,2.061,70,0.97,76,2.061,103,2.537,104,2.334,111,2.537,128,1.798]],["t/3629",[4,1.267,19,1.565,70,0.97,76,2.061,78,1.565,130,2.537,131,2.537,132,2.537]],["t/3644",[2,1.859,4,2.118,10,3.903]],["t/3648",[7,5.803]],["t/3649",[3,1.892,4,1.669,60,3.343,70,1.278,78,2.063]],["t/3679",[4,1.867,19,2.307,78,2.307,130,3.74]],["t/3700",[133,4.758,134,4.243,135,4.758]],["t/3713",[4,1.867,118,3.74,136,5.973]],["t/3719",[137,5.497,138,4.509]],["t/3729",[131,4.902,132,4.902]],["t/3783",[48,4.509,49,4.509]],["t/3785",[13,4.243,15,3.278,139,4.758]],["t/3787",[55,3.982,128,3.474]],["t/3795",[11,3.74,128,3.774,140,4.194]],["t/3809",[21,2.773,141,5.497]],["t/3824",[21,2.773,142,4.902]],["t/3836",[143,6.508]],["t/3848",[21,2.773,42,4.216]],["t/3850",[4,2.447,64,4.216]],["t/3852",[64,4.216,144,4.902]],["t/3869",[21,2.4,145,4.758,146,4.758]],["t/3877",[23,3.446,25,4.243,26,4.243]],["t/3888",[64,4.216,147,4.902]],["t/3905",[2,2.147,148,5.497]],["t/3921",[2,2.147,149,5.497]],["t/3923",[23,3.982,24,3.982]],["t/3927",[2,2.147,32,4.902]],["t/3947",[2,1.638,29,3.038,30,3.74,31,3.74]],["t/3965",[27,4.902,28,4.902]],["t/3977",[2,2.147,35,2.773]],["t/3991",[70,1.874,150,5.497]],["t/4001",[105,1.757,151,3.094,152,3.094,153,2.538,154,3.655,155,2.759]],["t/4021",[35,2.116,156,4.194,157,4.194,158,4.194]],["t/4032",[70,1.43,159,3.74,160,4.194,161,4.194]],["t/4036",[23,3.446,159,4.243,162,4.758]],["t/4049",[97,3.649,163,4.243,164,4.758]],["t/4055",[24,3.446,163,4.243,165,4.758]],["t/4057",[134,3.74,166,4.194,167,4.194,168,4.194]],["t/4087",[35,2.773,169,5.497]],["t/4095",[122,3.649,126,4.243,170,4.758]],["t/4107",[97,4.216,171,4.902]],["t/4125",[55,3.446,70,1.622,104,3.903]],["t/4127",[70,1.874,172,5.497]],["t/4138",[2,2.147,66,4.216]],["t/4140",[128,3.474,173,5.497]],["t/4146",[66,2.876,70,1.278,94,3.076,128,2.37,174,3.343]],["t/4158",[70,1.874,138,4.509]],["t/4168",[174,4.902,175,5.497]],["t/4192",[70,1.622,176,4.243,177,4.243]],["t/4202",[21,2.4,78,2.617,79,3.649]],["t/4208",[94,3.076,178,3.343,179,3.75,180,3.75,181,3.75]],["t/4210",[21,2.773,182,4.902]],["t/4216",[171,4.902,178,4.902]],["t/4235",[2,1.859,85,4.243,128,3.007]],["t/4241",[2,1.859,89,3.903,105,2.702]],["t/4258",[2,1.465,70,1.278,89,3.076,105,2.129,138,3.076]],["t/4272",[70,1.43,183,4.194,184,3.44,185,3.74]],["t/4280",[14,3.74,153,3.44,154,3.217,186,4.194]],["t/4308",[70,1.055,153,2.538,154,2.373,184,2.538,185,2.759,187,2.759,188,3.094]],["t/4329",[70,1.622,105,2.702,189,3.903]],["t/4348",[35,2.773,190,5.497]],["t/4361",[70,1.278,154,2.876,155,3.343,184,3.076,187,3.343]],["t/4384",[2,1.859,105,2.702,106,3.903]],["t/4414",[108,5.803]],["t/4450",[191,4.758,192,4.758,193,4.758]],["t/4452",[100,4.243,176,4.243,177,4.243]],["t/4507",[105,2.702,106,3.903,189,3.903]],["t/4519",[105,2.702,122,3.649,189,3.903]],["t/4536",[48,3.903,49,3.903,194,4.758]],["t/4548",[21,2.4,142,4.243,182,4.243]],["t/4558",[2,1.638,29,3.038,144,3.74,195,3.74]],["t/4578",[2,1.638,29,3.038,147,3.74,195,3.74]],["t/4598",[2,1.859,70,1.622,196,4.758]],["t/4601",[2,1.325,10,2.781,46,1.865,68,2.6,70,1.156,128,2.143]],["t/4610",[24,4.714]],["t/4886",[2,1.859,105,2.702,122,3.649]]],"invertedIndex":[["2.0",{"_index":51,"t":{"2783":{"position":[[15,3]]},"3277":{"position":[[20,3]]},"3294":{"position":[[36,3]]}}}],["access",{"_index":89,"t":{"3053":{"position":[[0,6]]},"4241":{"position":[[0,6]]},"4258":{"position":[[0,6]]}}}],["account",{"_index":101,"t":{"3110":{"position":[[0,8]]},"3237":{"position":[[23,8]]}}}],["add",{"_index":40,"t":{"2777":{"position":[[0,3]]},"3277":{"position":[[0,3]]}}}],["address",{"_index":140,"t":{"3795":{"position":[[19,7]]}}}],["altern",{"_index":52,"t":{"2815":{"position":[[10,11]]}}}],["ansibl",{"_index":63,"t":{"2917":{"position":[[17,7]]}}}],["api",{"_index":105,"t":{"3128":{"position":[[16,3]]},"3134":{"position":[[7,3]]},"3386":{"position":[[16,3]]},"4001":{"position":[[46,4]]},"4241":{"position":[[16,3]]},"4258":{"position":[[27,3]]},"4329":{"position":[[15,3]]},"4384":{"position":[[5,3]]},"4507":{"position":[[7,3]]},"4519":{"position":[[7,3]]},"4886":{"position":[[5,3]]}}}],["attest",{"_index":143,"t":{"3836":{"position":[[0,12]]}}}],["authent",{"_index":186,"t":{"4280":{"position":[[0,12]]}}}],["author",{"_index":14,"t":{"2607":{"position":[[9,9]]},"4280":{"position":[[17,9]]}}}],["avail",{"_index":152,"t":{"4001":{"position":[[5,12]]}}}],["azur",{"_index":112,"t":{"3199":{"position":[[34,5]]}}}],["backup",{"_index":33,"t":{"2730":{"position":[[0,6]]}}}],["balanc",{"_index":158,"t":{"4021":{"position":[[12,8]]}}}],["best",{"_index":95,"t":{"3075":{"position":[[12,4]]}}}],["besu",{"_index":2,"t":{"2562":{"position":[[0,4]]},"2702":{"position":[[4,4]]},"2716":{"position":[[6,4]]},"2730":{"position":[[19,4]]},"2917":{"position":[[7,4]]},"2949":{"position":[[7,4]]},"2951":{"position":[[7,4]]},"3063":{"position":[[4,4]]},"3100":{"position":[[17,4]]},"3344":{"position":[[7,4]]},"3644":{"position":[[0,4]]},"3905":{"position":[[5,4]]},"3921":{"position":[[11,4]]},"3927":{"position":[[6,4]]},"3947":{"position":[[4,4]]},"3977":{"position":[[10,4]]},"4138":{"position":[[8,4]]},"4235":{"position":[[13,4]]},"4241":{"position":[[11,4]]},"4258":{"position":[[22,4]]},"4384":{"position":[[0,4]]},"4558":{"position":[[4,4]]},"4578":{"position":[[4,4]]},"4598":{"position":[[15,4]]},"4601":{"position":[[9,4]]},"4886":{"position":[[0,4]]}}}],["between",{"_index":115,"t":{"3237":{"position":[[15,7]]}}}],["binari",{"_index":25,"t":{"2681":{"position":[[8,6]]},"3877":{"position":[[8,6]]}}}],["block",{"_index":38,"t":{"2754":{"position":[[0,5]]}}}],["blockchain",{"_index":74,"t":{"2957":{"position":[[14,10]]}}}],["bonsai",{"_index":167,"t":{"4057":{"position":[[19,6]]}}}],["bootnod",{"_index":36,"t":{"2744":{"position":[[10,9]]}}}],["chain",{"_index":118,"t":{"3245":{"position":[[38,5]]},"3713":{"position":[[15,5]]}}}],["chainlen",{"_index":73,"t":{"2957":{"position":[[4,9]]}}}],["chart",{"_index":129,"t":{"3601":{"position":[[7,6]]}}}],["chatbot",{"_index":7,"t":{"2580":{"position":[[0,7]]},"3648":{"position":[[0,7]]}}}],["client",{"_index":55,"t":{"2817":{"position":[[10,6]]},"3116":{"position":[[22,6]]},"3627":{"position":[[48,6]]},"3787":{"position":[[5,7]]},"4125":{"position":[[4,6]]}}}],["cliqu",{"_index":61,"t":{"2879":{"position":[[10,6]]},"3213":{"position":[[31,6]]}}}],["cloud",{"_index":69,"t":{"2951":{"position":[[19,5]]}}}],["cluster",{"_index":121,"t":{"3369":{"position":[[9,7]]}}}],["command",{"_index":109,"t":{"3154":{"position":[[16,7]]}}}],["compliant",{"_index":92,"t":{"3059":{"position":[[8,9]]}}}],["concept",{"_index":6,"t":{"2578":{"position":[[0,8]]}}}],["concurr",{"_index":82,"t":{"2999":{"position":[[5,10]]}}}],["configur",{"_index":35,"t":{"2744":{"position":[[0,9]]},"2783":{"position":[[0,9]]},"2815":{"position":[[0,9]]},"2817":{"position":[[0,9]]},"2833":{"position":[[0,9]]},"2849":{"position":[[0,9]]},"2879":{"position":[[0,9]]},"2909":{"position":[[0,9]]},"2929":{"position":[[0,9]]},"3533":{"position":[[0,9]]},"3551":{"position":[[0,9]]},"3977":{"position":[[0,9]]},"4021":{"position":[[21,14]]},"4087":{"position":[[0,9]]},"4348":{"position":[[0,9]]}}}],["connect",{"_index":64,"t":{"2919":{"position":[[0,7]]},"3850":{"position":[[0,7]]},"3852":{"position":[[0,7]]},"3888":{"position":[[0,7]]}}}],["consensu",{"_index":15,"t":{"2607":{"position":[[19,9]]},"2752":{"position":[[0,9]]},"2783":{"position":[[19,9]]},"2849":{"position":[[15,9]]},"2879":{"position":[[17,9]]},"3785":{"position":[[15,9]]}}}],["constraint",{"_index":181,"t":{"4208":{"position":[[43,11]]}}}],["contract",{"_index":47,"t":{"2781":{"position":[[11,9]]},"3245":{"position":[[13,9]]},"3324":{"position":[[29,9]]}}}],["creat",{"_index":78,"t":{"2969":{"position":[[0,6]]},"3007":{"position":[[0,6]]},"3098":{"position":[[0,6]]},"3213":{"position":[[0,6]]},"3255":{"position":[[0,6]]},"3294":{"position":[[0,6]]},"3369":{"position":[[0,6]]},"3568":{"position":[[0,6]]},"3629":{"position":[[0,6]]},"3649":{"position":[[0,6]]},"3679":{"position":[[0,6]]},"4202":{"position":[[0,6]]}}}],["curv",{"_index":54,"t":{"2815":{"position":[[31,6]]}}}],["data",{"_index":133,"t":{"3700":{"position":[[0,4]]}}}],["deploy",{"_index":46,"t":{"2781":{"position":[[4,6]]},"2917":{"position":[[0,6]]},"2949":{"position":[[0,6]]},"2951":{"position":[[0,6]]},"3199":{"position":[[0,6]]},"3245":{"position":[[0,6]]},"3324":{"position":[[14,8]]},"3344":{"position":[[0,6]]},"3496":{"position":[[0,6]]},"3518":{"position":[[0,6]]},"3601":{"position":[[0,6]]},"4601":{"position":[[0,6]]}}}],["develop",{"_index":131,"t":{"3629":{"position":[[50,9]]},"3729":{"position":[[0,9]]}}}],["disclosur",{"_index":192,"t":{"4450":{"position":[[9,10]]}}}],["distribut",{"_index":26,"t":{"2681":{"position":[[15,12]]},"3877":{"position":[[15,12]]}}}],["docker",{"_index":30,"t":{"2702":{"position":[[16,6]]},"3947":{"position":[[16,6]]}}}],["eea",{"_index":91,"t":{"3059":{"position":[[4,3]]}}}],["elast",{"_index":71,"t":{"2955":{"position":[[4,7]]}}}],["ellipt",{"_index":53,"t":{"2815":{"position":[[22,8]]}}}],["enabl",{"_index":130,"t":{"3629":{"position":[[17,7]]},"3679":{"position":[[17,7]]}}}],["engin",{"_index":189,"t":{"4329":{"position":[[8,6]]},"4507":{"position":[[0,6]]},"4519":{"position":[[0,6]]}}}],["environ",{"_index":124,"t":{"3496":{"position":[[18,11]]}}}],["ethash",{"_index":119,"t":{"3255":{"position":[[31,6]]}}}],["ethereum",{"_index":117,"t":{"3245":{"position":[[29,8]]}}}],["ethstat",{"_index":65,"t":{"2919":{"position":[[11,8]]}}}],["event",{"_index":137,"t":{"3719":{"position":[[0,6]]}}}],["evm",{"_index":176,"t":{"4192":{"position":[[8,3]]},"4452":{"position":[[0,3]]}}}],["exampl",{"_index":111,"t":{"3199":{"position":[[23,7]]},"3627":{"position":[[19,7]]}}}],["execut",{"_index":146,"t":{"3869":{"position":[[21,9]]}}}],["explor",{"_index":75,"t":{"2957":{"position":[[25,8]]},"3502":{"position":[[15,8]]}}}],["extend",{"_index":93,"t":{"3063":{"position":[[9,8]]}}}],["file",{"_index":49,"t":{"2781":{"position":[[36,4]]},"3783":{"position":[[8,4]]},"4536":{"position":[[8,4]]}}}],["flexibl",{"_index":18,"t":{"2621":{"position":[[0,8]]},"3067":{"position":[[4,8]]}}}],["flight",{"_index":160,"t":{"4032":{"position":[[9,6]]}}}],["format",{"_index":135,"t":{"3700":{"position":[[13,7]]}}}],["free",{"_index":58,"t":{"2833":{"position":[[10,4]]}}}],["fund",{"_index":114,"t":{"3237":{"position":[[9,5]]}}}],["ga",{"_index":59,"t":{"2833":{"position":[[15,3]]}}}],["genesi",{"_index":48,"t":{"2781":{"position":[[28,7]]},"3783":{"position":[[0,7]]},"4536":{"position":[[0,7]]}}}],["grafana",{"_index":83,"t":{"3001":{"position":[[0,7]]}}}],["graphql",{"_index":183,"t":{"4272":{"position":[[4,7]]}}}],["group",{"_index":20,"t":{"2621":{"position":[[17,6]]},"2643":{"position":[[8,6]]},"3067":{"position":[[21,6]]},"3098":{"position":[[26,6]]}}}],["hardhat",{"_index":172,"t":{"4127":{"position":[[4,7]]}}}],["hibern",{"_index":77,"t":{"2967":{"position":[[11,9]]}}}],["high",{"_index":151,"t":{"4001":{"position":[[0,4]]}}}],["http",{"_index":185,"t":{"4272":{"position":[[17,4]]},"4308":{"position":[[18,5]]}}}],["ibft",{"_index":50,"t":{"2783":{"position":[[10,4]]},"3277":{"position":[[15,4]]},"3294":{"position":[[31,4]]}}}],["id",{"_index":136,"t":{"3713":{"position":[[8,2],[21,2]]}}}],["imag",{"_index":31,"t":{"2702":{"position":[[23,5]]},"3947":{"position":[[23,5]]}}}],["infrastructur",{"_index":12,"t":{"2601":{"position":[[11,14]]}}}],["instal",{"_index":23,"t":{"2677":{"position":[[0,12]]},"2681":{"position":[[0,7]]},"3877":{"position":[[0,7]]},"3923":{"position":[[0,12]]},"4036":{"position":[[0,7]]}}}],["interact",{"_index":120,"t":{"3324":{"position":[[0,8]]}}}],["interfac",{"_index":107,"t":{"3134":{"position":[[11,10]]}}}],["ipc",{"_index":188,"t":{"4308":{"position":[[39,3]]}}}],["item",{"_index":194,"t":{"4536":{"position":[[13,5]]}}}],["java",{"_index":159,"t":{"4032":{"position":[[4,4]]},"4036":{"position":[[19,4]]}}}],["json",{"_index":153,"t":{"4001":{"position":[[21,4]]},"4280":{"position":[[27,4]]},"4308":{"position":[[4,4]]}}}],["jvm",{"_index":163,"t":{"4049":{"position":[[7,3]]},"4055":{"position":[[5,3]]}}}],["key",{"_index":11,"t":{"2601":{"position":[[7,3]]},"3795":{"position":[[5,4]]}}}],["kubernet",{"_index":68,"t":{"2949":{"position":[[17,10]]},"3344":{"position":[[18,10]]},"3533":{"position":[[10,10]]},"4601":{"position":[[32,10]]}}}],["librari",{"_index":104,"t":{"3116":{"position":[[29,7]]},"3627":{"position":[[55,7]]},"4125":{"position":[[11,9]]}}}],["line",{"_index":110,"t":{"3154":{"position":[[24,4]]}}}],["load",{"_index":157,"t":{"4021":{"position":[[7,4]]}}}],["local",{"_index":88,"t":{"3031":{"position":[[4,5]]},"3496":{"position":[[12,5]]}}}],["log",{"_index":138,"t":{"3719":{"position":[[11,4]]},"4158":{"position":[[4,7]]},"4258":{"position":[[7,4]]}}}],["loki",{"_index":84,"t":{"3001":{"position":[[8,4]]}}}],["mainnet",{"_index":144,"t":{"3852":{"position":[[11,7]]},"4558":{"position":[[21,7]]}}}],["mainten",{"_index":123,"t":{"3488":{"position":[[0,11]]}}}],["manag",{"_index":97,"t":{"3098":{"position":[[11,6]]},"3533":{"position":[[33,7]]},"4049":{"position":[[0,6]]},"4107":{"position":[[0,6]]}}}],["marker",{"_index":90,"t":{"3053":{"position":[[27,6]]},"3106":{"position":[[13,6]]}}}],["memori",{"_index":164,"t":{"4049":{"position":[[11,6]]}}}],["method",{"_index":122,"t":{"3386":{"position":[[20,7]]},"4095":{"position":[[16,6]]},"4519":{"position":[[11,7]]},"4886":{"position":[[9,7]]}}}],["metric",{"_index":174,"t":{"4146":{"position":[[4,7]]},"4168":{"position":[[11,7]]}}}],["migrat",{"_index":149,"t":{"3921":{"position":[[0,7]]}}}],["mine",{"_index":190,"t":{"4348":{"position":[[10,6]]}}}],["mode",{"_index":125,"t":{"3533":{"position":[[21,4]]}}}],["monitor",{"_index":66,"t":{"2919":{"position":[[28,7]]},"2953":{"position":[[0,10]]},"4138":{"position":[[0,7]]},"4146":{"position":[[15,7]]}}}],["multi",{"_index":16,"t":{"2619":{"position":[[0,5]]},"3551":{"position":[[12,5]]},"3627":{"position":[[8,5]]}}}],["nat",{"_index":126,"t":{"3533":{"position":[[29,3]]},"4095":{"position":[[12,3]]}}}],["network",{"_index":4,"t":{"2562":{"position":[[17,8]]},"2833":{"position":[[19,8]]},"2909":{"position":[[37,7]]},"2919":{"position":[[20,7]]},"3003":{"position":[[0,7]]},"3128":{"position":[[8,7]]},"3140":{"position":[[8,7]]},"3154":{"position":[[8,7]]},"3199":{"position":[[15,7]]},"3213":{"position":[[17,7]]},"3255":{"position":[[17,7]]},"3294":{"position":[[17,7]]},"3386":{"position":[[8,7]]},"3568":{"position":[[22,7]]},"3629":{"position":[[25,7]]},"3644":{"position":[[16,8]]},"3649":{"position":[[17,7]]},"3679":{"position":[[25,7]]},"3713":{"position":[[0,7]]},"3850":{"position":[[13,7]]}}}],["node",{"_index":128,"t":{"3551":{"position":[[25,4]]},"3627":{"position":[[14,4]]},"3787":{"position":[[0,4]]},"3795":{"position":[[0,4],[14,4]]},"4140":{"position":[[7,5]]},"4146":{"position":[[23,4]]},"4235":{"position":[[18,4]]},"4601":{"position":[[21,4]]}}}],["object",{"_index":106,"t":{"3128":{"position":[[20,7]]},"4384":{"position":[[9,7]]},"4507":{"position":[[11,7]]}}}],["onchain",{"_index":8,"t":{"2581":{"position":[[0,7]]},"3027":{"position":[[4,7]]}}}],["opentelemetri",{"_index":80,"t":{"2971":{"position":[[4,13]]}}}],["option",{"_index":24,"t":{"2677":{"position":[[13,7]]},"3154":{"position":[[29,7]]},"3923":{"position":[[13,7]]},"4055":{"position":[[9,7]]},"4610":{"position":[[0,7]]}}}],["over",{"_index":184,"t":{"4272":{"position":[[12,4]]},"4308":{"position":[[13,4]]},"4361":{"position":[[16,4]]}}}],["p2p",{"_index":67,"t":{"2929":{"position":[[10,3]]}}}],["parallel",{"_index":145,"t":{"3869":{"position":[[0,8]]}}}],["pass",{"_index":165,"t":{"4055":{"position":[[0,4]]}}}],["peer",{"_index":171,"t":{"4107":{"position":[[7,5]]},"4216":{"position":[[13,7]]}}}],["perform",{"_index":94,"t":{"3075":{"position":[[0,11]]},"4146":{"position":[[28,11]]},"4208":{"position":[[18,11]]}}}],["permiss",{"_index":5,"t":{"2566":{"position":[[0,13]]},"2581":{"position":[[8,13]]},"2593":{"position":[[0,13]]},"2754":{"position":[[15,13]]},"3027":{"position":[[12,13]]},"3031":{"position":[[10,13]]},"3568":{"position":[[9,12]]}}}],["plugin",{"_index":9,"t":{"2589":{"position":[[0,7]]},"2593":{"position":[[14,6]]},"2629":{"position":[[8,6]]},"3134":{"position":[[0,6]]}}}],["polici",{"_index":193,"t":{"4450":{"position":[[20,6]]}}}],["pool",{"_index":141,"t":{"3809":{"position":[[12,4]]}}}],["poor",{"_index":179,"t":{"4208":{"position":[[13,4]]}}}],["port",{"_index":169,"t":{"4087":{"position":[[10,5]]}}}],["postman",{"_index":0,"t":{"2558":{"position":[[0,7]]}}}],["practic",{"_index":96,"t":{"3075":{"position":[[17,9]]}}}],["pre",{"_index":45,"t":{"2781":{"position":[[0,3]]}}}],["privaci",{"_index":19,"t":{"2621":{"position":[[9,7]]},"2629":{"position":[[0,7]]},"2643":{"position":[[0,7]]},"2667":{"position":[[0,7]]},"3053":{"position":[[19,7]]},"3059":{"position":[[18,7]]},"3063":{"position":[[18,7]]},"3067":{"position":[[13,7]]},"3098":{"position":[[18,7]]},"3106":{"position":[[5,7]]},"3629":{"position":[[9,7]]},"3679":{"position":[[9,7]]}}}],["privat",{"_index":3,"t":{"2562":{"position":[[9,7]]},"2655":{"position":[[0,7]]},"2675":{"position":[[0,7]]},"2999":{"position":[[16,7]]},"3007":{"position":[[16,7]]},"3053":{"position":[[7,7]]},"3128":{"position":[[0,7]]},"3140":{"position":[[0,7]]},"3154":{"position":[[0,7]]},"3199":{"position":[[7,7]]},"3213":{"position":[[9,7]]},"3255":{"position":[[9,7]]},"3294":{"position":[[9,7]]},"3386":{"position":[[0,7]]},"3649":{"position":[[9,7]]}}}],["process",{"_index":22,"t":{"2675":{"position":[[20,10]]}}}],["product",{"_index":62,"t":{"2909":{"position":[[26,10]]},"3518":{"position":[[11,10]]}}}],["profil",{"_index":150,"t":{"3991":{"position":[[6,7]]}}}],["project",{"_index":196,"t":{"4598":{"position":[[0,8]]}}}],["proof",{"_index":13,"t":{"2607":{"position":[[0,5]]},"3785":{"position":[[0,5]]}}}],["propos",{"_index":39,"t":{"2754":{"position":[[6,8]]}}}],["protocol",{"_index":37,"t":{"2752":{"position":[[10,9]]},"3003":{"position":[[12,8]]}}}],["pub/sub",{"_index":155,"t":{"4001":{"position":[[38,7]]},"4361":{"position":[[8,7]]}}}],["public",{"_index":10,"t":{"2601":{"position":[[0,6]]},"3644":{"position":[[9,6]]},"4601":{"position":[[14,6]]}}}],["qbft",{"_index":60,"t":{"2849":{"position":[[10,4]]},"3649":{"position":[[31,4]]}}}],["quickstart",{"_index":132,"t":{"3629":{"position":[[60,10]]},"3729":{"position":[[10,10]]}}}],["quorum",{"_index":76,"t":{"2967":{"position":[[4,6]]},"3116":{"position":[[15,6]]},"3502":{"position":[[8,6]]},"3627":{"position":[[41,6]]},"3629":{"position":[[43,6]]}}}],["reason",{"_index":87,"t":{"3017":{"position":[[7,6]]}}}],["record",{"_index":161,"t":{"4032":{"position":[[16,8]]}}}],["reduc",{"_index":166,"t":{"4057":{"position":[[0,6]]}}}],["refer",{"_index":100,"t":{"3108":{"position":[[0,9]]},"4452":{"position":[[9,9]]}}}],["remov",{"_index":41,"t":{"2777":{"position":[[8,6]]},"3277":{"position":[[8,6]]}}}],["requir",{"_index":28,"t":{"2692":{"position":[[7,12]]},"3965":{"position":[[7,12]]}}}],["resourc",{"_index":180,"t":{"4208":{"position":[[34,8]]}}}],["restor",{"_index":34,"t":{"2730":{"position":[[11,7]]}}}],["revert",{"_index":86,"t":{"3017":{"position":[[0,6]]}}}],["rpc",{"_index":154,"t":{"4001":{"position":[[26,3],[34,3]]},"4280":{"position":[[32,3]]},"4308":{"position":[[9,3]]},"4361":{"position":[[4,3]]}}}],["run",{"_index":29,"t":{"2702":{"position":[[0,3]]},"3100":{"position":[[0,3]]},"3947":{"position":[[0,3]]},"4558":{"position":[[0,3]]},"4578":{"position":[[0,3]]}}}],["sampl",{"_index":156,"t":{"4021":{"position":[[0,6]]}}}],["secur",{"_index":191,"t":{"4450":{"position":[[0,8]]}}}],["send",{"_index":79,"t":{"2969":{"position":[[11,4]]},"2999":{"position":[[0,4]]},"3007":{"position":[[11,4]]},"4202":{"position":[[11,4]]}}}],["server",{"_index":56,"t":{"2817":{"position":[[21,6]]}}}],["sign",{"_index":99,"t":{"3106":{"position":[[0,4]]}}}],["smart",{"_index":116,"t":{"3245":{"position":[[7,5]]},"3324":{"position":[[23,5]]}}}],["specifi",{"_index":170,"t":{"4095":{"position":[[0,7]]}}}],["splunk",{"_index":81,"t":{"2977":{"position":[[4,6]]}}}],["stack",{"_index":72,"t":{"2955":{"position":[[12,5]]}}}],["stake",{"_index":139,"t":{"3785":{"position":[[9,5]]}}}],["start",{"_index":32,"t":{"2716":{"position":[[0,5]]},"3927":{"position":[[0,5]]}}}],["static",{"_index":173,"t":{"4140":{"position":[[0,6]]}}}],["storag",{"_index":134,"t":{"3700":{"position":[[5,7]]},"4057":{"position":[[7,7]]}}}],["subcommand",{"_index":108,"t":{"3140":{"position":[[16,11]]},"4414":{"position":[[0,11]]}}}],["sync",{"_index":148,"t":{"3905":{"position":[[0,4]]}}}],["system",{"_index":27,"t":{"2692":{"position":[[0,6]]},"3965":{"position":[[0,6]]}}}],["teku",{"_index":195,"t":{"4558":{"position":[[13,4]]},"4578":{"position":[[13,4]]}}}],["tenanc",{"_index":17,"t":{"2619":{"position":[[6,7]]}}}],["tenant",{"_index":127,"t":{"3551":{"position":[[18,6]]}}}],["tessera",{"_index":98,"t":{"3100":{"position":[[4,7]]}}}],["test",{"_index":102,"t":{"3110":{"position":[[13,7]]}}}],["test_account",{"_index":1,"t":{"2560":{"position":[[0,13]]}}}],["testnet",{"_index":147,"t":{"3888":{"position":[[13,7]]},"4578":{"position":[[23,7]]}}}],["tl",{"_index":57,"t":{"2817":{"position":[[28,3]]},"2929":{"position":[[14,3]]}}}],["tool",{"_index":177,"t":{"4192":{"position":[[12,4]]},"4452":{"position":[[4,4]]}}}],["trace",{"_index":182,"t":{"4210":{"position":[[0,5]]},"4548":{"position":[[12,5]]}}}],["transact",{"_index":21,"t":{"2655":{"position":[[8,12]]},"2675":{"position":[[8,11]]},"2969":{"position":[[16,12]]},"2999":{"position":[[24,12]]},"3007":{"position":[[24,12]]},"3053":{"position":[[34,12]]},"3106":{"position":[[20,12]]},"3237":{"position":[[37,11]]},"3809":{"position":[[0,11]]},"3824":{"position":[[0,11]]},"3848":{"position":[[0,11]]},"3869":{"position":[[9,11]]},"4202":{"position":[[16,12]]},"4210":{"position":[[6,12]]},"4548":{"position":[[0,11]]}}}],["transfer",{"_index":113,"t":{"3237":{"position":[[0,8]]}}}],["tri",{"_index":168,"t":{"4057":{"position":[[26,5]]}}}],["troubleshoot",{"_index":178,"t":{"4208":{"position":[[0,12]]},"4216":{"position":[[0,12]]}}}],["type",{"_index":142,"t":{"3824":{"position":[[12,5]]},"4548":{"position":[[18,5]]}}}],["understand",{"_index":175,"t":{"4168":{"position":[[0,10]]}}}],["updat",{"_index":162,"t":{"4036":{"position":[[12,6]]}}}],["upgrad",{"_index":85,"t":{"3003":{"position":[[21,8]]},"4235":{"position":[[0,7]]}}}],["us",{"_index":70,"t":{"2955":{"position":[[0,3]]},"2957":{"position":[[0,3]]},"2967":{"position":[[0,3]]},"2971":{"position":[[0,3]]},"2977":{"position":[[0,3]]},"3027":{"position":[[0,3]]},"3031":{"position":[[0,3]]},"3059":{"position":[[0,3]]},"3063":{"position":[[0,3]]},"3067":{"position":[[0,3]]},"3116":{"position":[[0,3]]},"3213":{"position":[[25,5]]},"3255":{"position":[[25,5]]},"3294":{"position":[[25,5]]},"3344":{"position":[[12,5]]},"3502":{"position":[[0,3]]},"3627":{"position":[[0,3]]},"3629":{"position":[[33,5]]},"3649":{"position":[[25,5]]},"3991":{"position":[[0,3]]},"4032":{"position":[[0,3]]},"4125":{"position":[[0,3]]},"4127":{"position":[[0,3]]},"4146":{"position":[[0,3]]},"4158":{"position":[[0,3]]},"4192":{"position":[[0,3]]},"4258":{"position":[[12,5]]},"4272":{"position":[[0,3]]},"4308":{"position":[[0,3]]},"4329":{"position":[[0,3]]},"4361":{"position":[[0,3]]},"4598":{"position":[[9,5]]},"4601":{"position":[[26,5]]}}}],["valid",{"_index":42,"t":{"2777":{"position":[[15,10]]},"2909":{"position":[[10,10]]},"3277":{"position":[[24,10]]},"3848":{"position":[[12,10]]}}}],["vote",{"_index":44,"t":{"2777":{"position":[[34,6]]}}}],["web3j",{"_index":103,"t":{"3116":{"position":[[8,6]]},"3627":{"position":[[34,6]]}}}],["websocket",{"_index":187,"t":{"4308":{"position":[[24,10]]},"4361":{"position":[[21,10]]}}}],["without",{"_index":43,"t":{"2777":{"position":[[26,7]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2564,"t":"Architecture","u":"/private-networks","h":"#architecture","p":2562},{"i":2568,"t":"Node permissioning","u":"/private-networks/concepts/permissioning","h":"#node-permissioning","p":2566},{"i":2570,"t":"Account permissioning","u":"/private-networks/concepts/permissioning","h":"#account-permissioning","p":2566},{"i":2572,"t":"Specify permissioning","u":"/private-networks/concepts/permissioning","h":"#specify-permissioning","p":2566},{"i":2574,"t":"Local","u":"/private-networks/concepts/permissioning","h":"#local","p":2566},{"i":2576,"t":"Onchain","u":"/private-networks/concepts/permissioning","h":"#onchain","p":2566},{"i":2583,"t":"Permissioning contracts","u":"/private-networks/concepts/permissioning/onchain","h":"#permissioning-contracts","p":2581},{"i":2585,"t":"Allowlists","u":"/private-networks/concepts/permissioning/onchain","h":"#allowlists","p":2581},{"i":2587,"t":"Bootnodes","u":"/private-networks/concepts/permissioning/onchain","h":"#bootnodes","p":2581},{"i":2591,"t":"Install plugins","u":"/private-networks/concepts/plugins","h":"#install-plugins","p":2589},{"i":2595,"t":"Connection permissioning","u":"/private-networks/concepts/permissioning/plugin","h":"#connection-permissioning","p":2593},{"i":2597,"t":"Message permissioning","u":"/private-networks/concepts/permissioning/plugin","h":"#message-permissioning","p":2593},{"i":2599,"t":"Register your plugin","u":"/private-networks/concepts/permissioning/plugin","h":"#register-your-plugin","p":2593},{"i":2603,"t":"Node permissioning","u":"/private-networks/concepts/pki","h":"#node-permissioning","p":2601},{"i":2605,"t":"Block proposal permissioning","u":"/private-networks/concepts/pki","h":"#block-proposal-permissioning","p":2601},{"i":2609,"t":"Properties","u":"/private-networks/concepts/poa","h":"#properties","p":2607},{"i":2611,"t":"Immediate finality","u":"/private-networks/concepts/poa","h":"#immediate-finality","p":2607},{"i":2613,"t":"Minimum number of validators","u":"/private-networks/concepts/poa","h":"#minimum-number-of-validators","p":2607},{"i":2615,"t":"Liveness","u":"/private-networks/concepts/poa","h":"#liveness","p":2607},{"i":2617,"t":"Speed","u":"/private-networks/concepts/poa","h":"#speed","p":2607},{"i":2623,"t":"Group management contracts","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#group-management-contracts","p":2621},{"i":2625,"t":"Flexible privacy group IDs","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#flexible-privacy-group-ids","p":2621},{"i":2627,"t":"Multi-tenancy","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#multi-tenancy","p":2621},{"i":2631,"t":"Configuration","u":"/private-networks/concepts/privacy/plugin","h":"#configuration","p":2629},{"i":2633,"t":"Use the payload provider interface","u":"/private-networks/concepts/privacy/plugin","h":"#use-the-payload-provider-interface","p":2629},{"i":2635,"t":"Send transactions","u":"/private-networks/concepts/privacy/plugin","h":"#send-transactions","p":2629},{"i":2637,"t":"Mine transactions","u":"/private-networks/concepts/privacy/plugin","h":"#mine-transactions","p":2629},{"i":2639,"t":"Transaction factory","u":"/private-networks/concepts/privacy/plugin","h":"#transaction-factory","p":2629},{"i":2641,"t":"Register your plugin","u":"/private-networks/concepts/privacy/plugin","h":"#register-your-plugin","p":2629},{"i":2645,"t":"Privacy types","u":"/private-networks/concepts/privacy/privacy-groups","h":"#privacy-types","p":2643},{"i":2647,"t":"Access between states","u":"/private-networks/concepts/privacy/privacy-groups","h":"#access-between-states","p":2643},{"i":2649,"t":"Enterprise Ethereum Alliance privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#enterprise-ethereum-alliance-privacy","p":2643},{"i":2651,"t":"Besu-extended privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#besu-extended-privacy","p":2643},{"i":2653,"t":"Multi-tenancy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#multi-tenancy","p":2643},{"i":2657,"t":"Besu and Tessera keys","u":"/private-networks/concepts/privacy/private-transactions","h":"#besu-and-tessera-keys","p":2655},{"i":2659,"t":"Nonces","u":"/private-networks/concepts/privacy/private-transactions","h":"#nonces","p":2655},{"i":2661,"t":"Private transaction nonce","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-transaction-nonce","p":2655},{"i":2663,"t":"Private nonce validation","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-validation","p":2655},{"i":2665,"t":"Private nonce management","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-management","p":2655},{"i":2669,"t":"Private transaction manager","u":"/private-networks/concepts/privacy","h":"#private-transaction-manager","p":2667},{"i":2671,"t":"Privacy-enabled networks","u":"/private-networks/concepts/privacy","h":"#privacy-enabled-networks","p":2667},{"i":2673,"t":"Reorg-compatible privacy","u":"/private-networks/concepts/privacy","h":"#reorg-compatible-privacy","p":2667},{"i":2679,"t":"Build from source","u":"/private-networks/get-started/install","h":"#build-from-source","p":2677},{"i":2682,"t":"MacOS with Homebrew","u":"/private-networks/get-started/install/binary-distribution","h":"#macos-with-homebrew","p":2681},{"i":2683,"t":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites","p":2681},{"i":2685,"t":"Install (or upgrade) using Homebrew","u":"/private-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":2681},{"i":2687,"t":"Linux / Unix","u":"/private-networks/get-started/install/binary-distribution","h":"#linux--unix","p":2681},{"i":2688,"t":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":2681},{"i":2690,"t":"Install from packaged binaries","u":"/private-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":2681},{"i":2694,"t":"Determining system requirements","u":"/private-networks/get-started/system-requirements","h":"#determining-system-requirements","p":2692},{"i":2696,"t":"Java Virtual Machine size","u":"/private-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":2692},{"i":2698,"t":"VM requirements","u":"/private-networks/get-started/system-requirements","h":"#vm-requirements","p":2692},{"i":2700,"t":"Disk type","u":"/private-networks/get-started/system-requirements","h":"#disk-type","p":2692},{"i":2704,"t":"Prerequisites","u":"/private-networks/get-started/install/run-docker-image","h":"#prerequisites","p":2702},{"i":2706,"t":"Expose ports","u":"/private-networks/get-started/install/run-docker-image","h":"#expose-ports","p":2702},{"i":2708,"t":"Start Besu","u":"/private-networks/get-started/install/run-docker-image","h":"#start-besu","p":2702},{"i":2710,"t":"Run a node for testing","u":"/private-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":2702},{"i":2712,"t":"Stop Besu and clean up resources","u":"/private-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":2702},{"i":2718,"t":"Prerequisites","u":"/private-networks/get-started/start-node","h":"#prerequisites","p":2716},{"i":2720,"t":"Local block data","u":"/private-networks/get-started/start-node","h":"#local-block-data","p":2716},{"i":2722,"t":"Genesis configuration","u":"/private-networks/get-started/start-node","h":"#genesis-configuration","p":2716},{"i":2724,"t":"Confirm node is running","u":"/private-networks/get-started/start-node","h":"#confirm-node-is-running","p":2716},{"i":2726,"t":"Run a node for testing","u":"/private-networks/get-started/start-node","h":"#run-a-node-for-testing","p":2716},{"i":2728,"t":"Run a node on a private network","u":"/private-networks/get-started/start-node","h":"#run-a-node-on-a-private-network","p":2716},{"i":2732,"t":"Genesis file","u":"/private-networks/how-to/backup","h":"#genesis-file","p":2730},{"i":2734,"t":"Data backups","u":"/private-networks/how-to/backup","h":"#data-backups","p":2730},{"i":2736,"t":"Data restores","u":"/private-networks/how-to/backup","h":"#data-restores","p":2730},{"i":2738,"t":"Corrupted data","u":"/private-networks/how-to/backup","h":"#corrupted-data","p":2730},{"i":2740,"t":"Prevent accidental downgrade","u":"/private-networks/how-to/backup","h":"#prevent-accidental-downgrade","p":2730},{"i":2742,"t":"Find peers after restarting","u":"/private-networks/how-to/backup","h":"#find-peers-after-restarting","p":2730},{"i":2746,"t":"Specify a bootnode","u":"/private-networks/how-to/configure/bootnodes","h":"#specify-a-bootnode","p":2744},{"i":2748,"t":"Configure bootnodes in a production network","u":"/private-networks/how-to/configure/bootnodes","h":"#configure-bootnodes-in-a-production-network","p":2744},{"i":2750,"t":"Add and remove bootnodes","u":"/private-networks/how-to/configure/bootnodes","h":"#add-and-remove-bootnodes","p":2744},{"i":2756,"t":"Configure block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#configure-block-proposal-permissioning","p":2754},{"i":2758,"t":"Command line options","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#command-line-options","p":2754},{"i":2759,"t":"Xpki-block-creation-crl-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-crl-file","p":2754},{"i":2761,"t":"Xpki-block-creation-enabled","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-enabled","p":2754},{"i":2763,"t":"Xpki-block-creation-keystore-certificate-alias","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-certificate-alias","p":2754},{"i":2765,"t":"Xpki-block-creation-keystore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-file","p":2754},{"i":2767,"t":"Xpki-block-creation-keystore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-password-file","p":2754},{"i":2769,"t":"Xpki-block-creation-keystore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-type","p":2754},{"i":2771,"t":"Xpki-block-creation-truststore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-file","p":2754},{"i":2773,"t":"Xpki-block-creation-truststore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-password-file","p":2754},{"i":2775,"t":"Xpki-block-creation-truststore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-type","p":2754},{"i":2779,"t":"Override smart contract validators","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","h":"#override-smart-contract-validators","p":2777},{"i":2785,"t":"Genesis file","u":"/private-networks/how-to/configure/consensus/ibft","h":"#genesis-file","p":2783},{"i":2787,"t":"Extra data","u":"/private-networks/how-to/configure/consensus/ibft","h":"#extra-data","p":2783},{"i":2789,"t":"Block time","u":"/private-networks/how-to/configure/consensus/ibft","h":"#block-time","p":2783},{"i":2791,"t":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/ibft","h":"#optional-configuration-options","p":2783},{"i":2793,"t":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/ibft","h":"#post-merge-configuration","p":2783},{"i":2795,"t":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-and-remove-validators","p":2783},{"i":2797,"t":"Add a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-a-validator","p":2783},{"i":2799,"t":"Remove a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#remove-a-validator","p":2783},{"i":2801,"t":"Epoch transition","u":"/private-networks/how-to/configure/consensus/ibft","h":"#epoch-transition","p":2783},{"i":2803,"t":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#minimum-number-of-validators","p":2783},{"i":2805,"t":"Maximum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#maximum-number-of-validators","p":2783},{"i":2807,"t":"Transitions","u":"/private-networks/how-to/configure/consensus/ibft","h":"#transitions","p":2783},{"i":2809,"t":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-time-on-an-existing-network","p":2783},{"i":2811,"t":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-rewards-on-an-existing-network","p":2783},{"i":2813,"t":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":2783},{"i":2819,"t":"Prerequisites","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#prerequisites","p":2817},{"i":2821,"t":"Configure client TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-client-tls","p":2817},{"i":2823,"t":"Create the known clients file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-clients-file","p":2817},{"i":2825,"t":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu","p":2817},{"i":2827,"t":"Configure server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-server-tls","p":2817},{"i":2829,"t":"Create the known servers file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-servers-file","p":2817},{"i":2831,"t":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu-1","p":2817},{"i":2835,"t":"Configure free gas in Besu","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-besu","p":2833},{"i":2837,"t":"1. Set the block size","u":"/private-networks/how-to/configure/free-gas","h":"#1-set-the-block-size","p":2833},{"i":2839,"t":"2. Set the contract size","u":"/private-networks/how-to/configure/free-gas","h":"#2-set-the-contract-size","p":2833},{"i":2841,"t":"3. Start Besu with a minimum gas price of zero","u":"/private-networks/how-to/configure/free-gas","h":"#3-start-besu-with-a-minimum-gas-price-of-zero","p":2833},{"i":2843,"t":"4. Enable zero base fee if using London fork or later","u":"/private-networks/how-to/configure/free-gas","h":"#4-enable-zero-base-fee-if-using-london-fork-or-later","p":2833},{"i":2845,"t":"Configure free gas in Hardhat","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-hardhat","p":2833},{"i":2847,"t":"Update hardhat.config.js","u":"/private-networks/how-to/configure/free-gas","h":"#update-hardhatconfigjs","p":2833},{"i":2851,"t":"Genesis file","u":"/private-networks/how-to/configure/consensus/qbft","h":"#genesis-file","p":2849},{"i":2853,"t":"Extra data","u":"/private-networks/how-to/configure/consensus/qbft","h":"#extra-data","p":2849},{"i":2855,"t":"Block time","u":"/private-networks/how-to/configure/consensus/qbft","h":"#block-time","p":2849},{"i":2857,"t":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/qbft","h":"#optional-configuration-options","p":2849},{"i":2859,"t":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/qbft","h":"#post-merge-configuration","p":2849},{"i":2861,"t":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators","p":2849},{"i":2863,"t":"Add and remove validators using block headers","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-block-headers","p":2849},{"i":2865,"t":"Add and remove validators using a smart contract","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-a-smart-contract","p":2849},{"i":2867,"t":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#minimum-number-of-validators","p":2849},{"i":2869,"t":"Transitions","u":"/private-networks/how-to/configure/consensus/qbft","h":"#transitions","p":2849},{"i":2871,"t":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-time-on-an-existing-network","p":2849},{"i":2873,"t":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-rewards-on-an-existing-network","p":2849},{"i":2875,"t":"Swap validator management methods","u":"/private-networks/how-to/configure/consensus/qbft","h":"#swap-validator-management-methods","p":2849},{"i":2877,"t":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":2849},{"i":2881,"t":"Genesis file","u":"/private-networks/how-to/configure/consensus/clique","h":"#genesis-file","p":2879},{"i":2883,"t":"Skip empty blocks","u":"/private-networks/how-to/configure/consensus/clique","h":"#skip-empty-blocks","p":2879},{"i":2885,"t":"Extra data","u":"/private-networks/how-to/configure/consensus/clique","h":"#extra-data","p":2879},{"i":2887,"t":"One initial signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#one-initial-signer","p":2879},{"i":2888,"t":"Two initial signers","u":"/private-networks/how-to/configure/consensus/clique","h":"#two-initial-signers","p":2879},{"i":2889,"t":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/clique","h":"#post-merge-configuration","p":2879},{"i":2891,"t":"Connect to a Clique network","u":"/private-networks/how-to/configure/consensus/clique","h":"#connect-to-a-clique-network","p":2879},{"i":2893,"t":"Add and remove signers","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-and-remove-signers","p":2879},{"i":2895,"t":"Add a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-a-signer","p":2879},{"i":2897,"t":"Remove a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#remove-a-signer","p":2879},{"i":2899,"t":"Epoch transition","u":"/private-networks/how-to/configure/consensus/clique","h":"#epoch-transition","p":2879},{"i":2901,"t":"Transitions","u":"/private-networks/how-to/configure/consensus/clique","h":"#transitions","p":2879},{"i":2903,"t":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-block-time-on-an-existing-network","p":2879},{"i":2905,"t":"Configure empty blocks on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-empty-blocks-on-an-existing-network","p":2879},{"i":2907,"t":"Limitations","u":"/private-networks/how-to/configure/consensus/clique","h":"#limitations","p":2879},{"i":2911,"t":"Number of validators required","u":"/private-networks/how-to/configure/validators","h":"#number-of-validators-required","p":2909},{"i":2913,"t":"Adding and removing validators","u":"/private-networks/how-to/configure/validators","h":"#adding-and-removing-validators","p":2909},{"i":2915,"t":"Validators as bootnodes","u":"/private-networks/how-to/configure/validators","h":"#validators-as-bootnodes","p":2909},{"i":2921,"t":"Components","u":"/private-networks/how-to/deploy/ethstats","h":"#components","p":2919},{"i":2923,"t":"Statistics","u":"/private-networks/how-to/deploy/ethstats","h":"#statistics","p":2919},{"i":2925,"t":"Connect through a client and server","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-a-client-and-server","p":2919},{"i":2927,"t":"Connect through the command line","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-the-command-line","p":2919},{"i":2932,"t":"Command line options","u":"/private-networks/how-to/configure/tls/p2p","h":"#command-line-options","p":2929},{"i":2933,"t":"Xp2p-tls-crl-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-crl-file","p":2929},{"i":2935,"t":"Xp2p-tls-enabled","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-enabled","p":2929},{"i":2937,"t":"Xp2p-tls-keystore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-file","p":2929},{"i":2939,"t":"Xp2p-tls-keystore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-password-file","p":2929},{"i":2941,"t":"Xp2p-tls-keystore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-type","p":2929},{"i":2943,"t":"Xp2p-tls-truststore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-file","p":2929},{"i":2945,"t":"Xp2p-tls-truststore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-password-file","p":2929},{"i":2947,"t":"Xp2p-tls-truststore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-type","p":2929},{"i":2959,"t":"Prerequisites","u":"/private-networks/how-to/monitor/chainlens","h":"#prerequisites","p":2957},{"i":2961,"t":"Start Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#start-chainlens","p":2957},{"i":2963,"t":"View on Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#view-on-chainlens","p":2957},{"i":2965,"t":"Stop Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#stop-chainlens","p":2957},{"i":2973,"t":"Install OpenTelemetry Collector","u":"/private-networks/how-to/monitor/opentelemetry","h":"#install-opentelemetry-collector","p":2971},{"i":2975,"t":"Setting up and running OpenTelemetry with Besu","u":"/private-networks/how-to/monitor/opentelemetry","h":"#setting-up-and-running-opentelemetry-with-besu","p":2971},{"i":2979,"t":"Developer Quickstart with Splunk","u":"/private-networks/how-to/monitor/splunk","h":"#developer-quickstart-with-splunk","p":2977},{"i":2981,"t":"Splunk Connect for Ethereum Docker Compose","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-connect-for-ethereum-docker-compose","p":2977},{"i":2983,"t":"Requirements","u":"/private-networks/how-to/monitor/splunk","h":"#requirements","p":2977},{"i":2985,"t":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps","p":2977},{"i":2987,"t":"Use Splunk Enterprise as a Docker container","u":"/private-networks/how-to/monitor/splunk","h":"#use-splunk-enterprise-as-a-docker-container","p":2977},{"i":2988,"t":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites","p":2977},{"i":2990,"t":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-1","p":2977},{"i":2992,"t":"Run a Splunk Enterprise instance","u":"/private-networks/how-to/monitor/splunk","h":"#run-a-splunk-enterprise-instance","p":2977},{"i":2993,"t":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites-1","p":2977},{"i":2995,"t":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-2","p":2977},{"i":2997,"t":"Splunk options reference","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-options-reference","p":2977},{"i":3005,"t":"Upgrade the protocol","u":"/private-networks/how-to/upgrade","h":"#upgrade-the-protocol","p":3003},{"i":3009,"t":"eea_sendRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea_sendrawtransaction","p":3007},{"i":3011,"t":"priv_distributeRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#priv_distributerawtransaction","p":3007},{"i":3013,"t":"EEA-compliant or Besu-extended privacy","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea-compliant-or-besu-extended-privacy","p":3007},{"i":3015,"t":"Unsigned and unencoded private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#unsigned-and-unencoded-private-transactions","p":3007},{"i":3019,"t":"Enable revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#enable-revert-reason","p":3017},{"i":3021,"t":"Where the revert reason is included","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#where-the-revert-reason-is-included","p":3017},{"i":3023,"t":"Revert reason format","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#revert-reason-format","p":3017},{"i":3025,"t":"Dapp support","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#dapp-support","p":3017},{"i":3029,"t":"Specify the permissioning contract interface version","u":"/private-networks/how-to/use-permissioning/onchain","h":"#specify-the-permissioning-contract-interface-version","p":3027},{"i":3033,"t":"Node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#node-allowlisting","p":3031},{"i":3035,"t":"Specify bootnodes in the allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#specify-bootnodes-in-the-allowlist","p":3031},{"i":3037,"t":"Enable node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-node-allowlisting","p":3031},{"i":3039,"t":"Update the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-node-allowlist","p":3031},{"i":3041,"t":"View the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-node-allowlist","p":3031},{"i":3043,"t":"Account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#account-allowlisting","p":3031},{"i":3045,"t":"Enable account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-account-allowlisting","p":3031},{"i":3047,"t":"Update the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-account-allowlist","p":3031},{"i":3049,"t":"View the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-account-allowlist","p":3031},{"i":3051,"t":"Permissions configuration file","u":"/private-networks/how-to/use-permissioning/local","h":"#permissions-configuration-file","p":3031},{"i":3055,"t":"Transaction receipts","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transaction-receipts","p":3053},{"i":3057,"t":"Transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transactions","p":3053},{"i":3061,"t":"Privacy group type","u":"/private-networks/how-to/use-privacy/eea-compliant","h":"#privacy-group-type","p":3059},{"i":3065,"t":"Privacy group type","u":"/private-networks/how-to/use-privacy/besu-extended","h":"#privacy-group-type","p":3063},{"i":3069,"t":"Enable flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","h":"#enable-flexible-privacy-groups","p":3067},{"i":3071,"t":"Simple flexible privacy group example","u":"/private-networks/how-to/use-privacy/flexible","h":"#simple-flexible-privacy-group-example","p":3067},{"i":3073,"t":"Add and remove members","u":"/private-networks/how-to/use-privacy/flexible","h":"#add-and-remove-members","p":3067},{"i":3077,"t":"General performance","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#general-performance","p":3075},{"i":3079,"t":"Use fast, local, solid state storage","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-fast-local-solid-state-storage","p":3075},{"i":3081,"t":"Private transaction performance","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#private-transaction-performance","p":3075},{"i":3082,"t":"Use concurrent submission","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-concurrent-submission","p":3075},{"i":3084,"t":"Co-locate Besu and Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#co-locate-besu-and-tessera","p":3075},{"i":3086,"t":"Optimize worst-case latency between Tessera nodes","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#optimize-worst-case-latency-between-tessera-nodes","p":3075},{"i":3088,"t":"Use stateful nonce management","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-stateful-nonce-management","p":3075},{"i":3090,"t":"Use random senders for privacy marker transactions","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-random-senders-for-privacy-marker-transactions","p":3075},{"i":3092,"t":"Avoid queuing transactions in Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#avoid-queuing-transactions-in-tessera","p":3075},{"i":3094,"t":"Limit the group size to reduce communication overhead","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-the-group-size-to-reduce-communication-overhead","p":3075},{"i":3096,"t":"Limit group membership changes and make them quick","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-group-membership-changes-and-make-them-quick","p":3075},{"i":3102,"t":"High availability","u":"/private-networks/how-to/use-privacy/tessera","h":"#high-availability","p":3100},{"i":3104,"t":"Separate instances","u":"/private-networks/how-to/use-privacy/tessera","h":"#separate-instances","p":3100},{"i":3112,"t":"Development mode","u":"/private-networks/reference/accounts-for-testing","h":"#development-mode","p":3110},{"i":3114,"t":"Genesis file","u":"/private-networks/reference/accounts-for-testing","h":"#genesis-file","p":3110},{"i":3118,"t":"Prerequisites","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#prerequisites","p":3116},{"i":3120,"t":"Add web3js-quorum to project","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#add-web3js-quorum-to-project","p":3116},{"i":3122,"t":"Initialize the web3js-quorum client","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#initialize-the-web3js-quorum-client","p":3116},{"i":3124,"t":"Deploy a contract with generateAndSendRawTransaction","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#deploy-a-contract-with-generateandsendrawtransaction","p":3116},{"i":3126,"t":"web3js-quorum methods","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#web3js-quorum-methods","p":3116},{"i":3130,"t":"Private transaction object","u":"/private-networks/reference/api/objects","h":"#private-transaction-object","p":3128},{"i":3132,"t":"Private transaction receipt object","u":"/private-networks/reference/api/objects","h":"#private-transaction-receipt-object","p":3128},{"i":3136,"t":"Core plugin classes","u":"/private-networks/reference/plugin-api-interfaces","h":"#core-plugin-classes","p":3134},{"i":3138,"t":"Plugin services","u":"/private-networks/reference/plugin-api-interfaces","h":"#plugin-services","p":3134},{"i":3142,"t":"operator","u":"/private-networks/reference/cli/subcommands","h":"#operator","p":3140},{"i":3144,"t":"generate-blockchain-config","u":"/private-networks/reference/cli/subcommands","h":"#generate-blockchain-config","p":3140},{"i":3146,"t":"rlp","u":"/private-networks/reference/cli/subcommands","h":"#rlp","p":3140},{"i":3148,"t":"decode","u":"/private-networks/reference/cli/subcommands","h":"#decode","p":3140},{"i":3150,"t":"encode","u":"/private-networks/reference/cli/subcommands","h":"#encode","p":3140},{"i":3152,"t":"IBFT 2.0 extra data","u":"/private-networks/reference/cli/subcommands","h":"#ibft-20-extra-data","p":3140},{"i":3156,"t":"Specify options","u":"/private-networks/reference/cli/options","h":"#specify-options","p":3154},{"i":3158,"t":"Options","u":"/private-networks/reference/cli/options","h":"#options","p":3154},{"i":3159,"t":"permissions-accounts-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file","p":3154},{"i":3161,"t":"permissions-accounts-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file-enabled","p":3154},{"i":3163,"t":"permissions-accounts-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-address","p":3154},{"i":3165,"t":"permissions-accounts-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-enabled","p":3154},{"i":3167,"t":"permissions-nodes-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file","p":3154},{"i":3169,"t":"permissions-nodes-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file-enabled","p":3154},{"i":3171,"t":"permissions-nodes-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-address","p":3154},{"i":3173,"t":"permissions-nodes-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-enabled","p":3154},{"i":3175,"t":"permissions-nodes-contract-version","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-version","p":3154},{"i":3177,"t":"poa-block-txs-selection-max-time","u":"/private-networks/reference/cli/options","h":"#poa-block-txs-selection-max-time","p":3154},{"i":3179,"t":"privacy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-enabled","p":3154},{"i":3181,"t":"privacy-marker-transaction-signing-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-marker-transaction-signing-key-file","p":3154},{"i":3183,"t":"privacy-multi-tenancy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-multi-tenancy-enabled","p":3154},{"i":3185,"t":"privacy-flexible-groups-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-flexible-groups-enabled","p":3154},{"i":3187,"t":"privacy-public-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-public-key-file","p":3154},{"i":3189,"t":"privacy-tls-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-tls-enabled","p":3154},{"i":3191,"t":"privacy-tls-keystore-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-file","p":3154},{"i":3193,"t":"privacy-tls-keystore-password-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-password-file","p":3154},{"i":3195,"t":"privacy-tls-known-enclave-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-known-enclave-file","p":3154},{"i":3197,"t":"privacy-url","u":"/private-networks/reference/cli/options","h":"#privacy-url","p":3154},{"i":3201,"t":"Overview","u":"/private-networks/tutorials/azure","h":"#overview","p":3199},{"i":3203,"t":"Deploy","u":"/private-networks/tutorials/azure","h":"#deploy","p":3199},{"i":3205,"t":"Block explorer","u":"/private-networks/tutorials/azure","h":"#block-explorer","p":3199},{"i":3207,"t":"Metrics","u":"/private-networks/tutorials/azure","h":"#metrics","p":3199},{"i":3209,"t":"Connect to VM RPC endpoint","u":"/private-networks/tutorials/azure","h":"#connect-to-vm-rpc-endpoint","p":3199},{"i":3211,"t":"SSH","u":"/private-networks/tutorials/azure","h":"#ssh","p":3199},{"i":3215,"t":"Prerequisites","u":"/private-networks/tutorials/clique","h":"#prerequisites","p":3213},{"i":3217,"t":"Steps","u":"/private-networks/tutorials/clique","h":"#steps","p":3213},{"i":3219,"t":"1. Create directories","u":"/private-networks/tutorials/clique","h":"#1-create-directories","p":3213},{"i":3221,"t":"2. Get the address for Node-1","u":"/private-networks/tutorials/clique","h":"#2-get-the-address-for-node-1","p":3213},{"i":3223,"t":"3. Create the genesis file","u":"/private-networks/tutorials/clique","h":"#3-create-the-genesis-file","p":3213},{"i":3225,"t":"4. Start the first node as the bootnode","u":"/private-networks/tutorials/clique","h":"#4-start-the-first-node-as-the-bootnode","p":3213},{"i":3227,"t":"5. Start Node-2","u":"/private-networks/tutorials/clique","h":"#5-start-node-2","p":3213},{"i":3229,"t":"6. Start Node-3","u":"/private-networks/tutorials/clique","h":"#6-start-node-3","p":3213},{"i":3231,"t":"7. Confirm the private network is working","u":"/private-networks/tutorials/clique","h":"#7-confirm-the-private-network-is-working","p":3213},{"i":3233,"t":"Next steps","u":"/private-networks/tutorials/clique","h":"#next-steps","p":3213},{"i":3235,"t":"Stop the nodes","u":"/private-networks/tutorials/clique","h":"#stop-the-nodes","p":3213},{"i":3239,"t":"Prerequisites","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#prerequisites","p":3237},{"i":3241,"t":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendsignedtransaction","p":3237},{"i":3243,"t":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendtransaction","p":3237},{"i":3247,"t":"Prerequisites","u":"/private-networks/tutorials/contracts","h":"#prerequisites","p":3245},{"i":3249,"t":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendsignedtransaction","p":3245},{"i":3251,"t":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendtransaction","p":3245},{"i":3253,"t":"Use eea_sendRawTransaction for private contracts with web3js-quorum","u":"/private-networks/tutorials/contracts","h":"#use-eea_sendrawtransaction-for-private-contracts-with-web3js-quorum","p":3245},{"i":3257,"t":"Prerequisites","u":"/private-networks/tutorials/ethash","h":"#prerequisites","p":3255},{"i":3259,"t":"Steps","u":"/private-networks/tutorials/ethash","h":"#steps","p":3255},{"i":3261,"t":"1. Create directories","u":"/private-networks/tutorials/ethash","h":"#1-create-directories","p":3255},{"i":3263,"t":"2. Create a genesis file","u":"/private-networks/tutorials/ethash","h":"#2-create-a-genesis-file","p":3255},{"i":3265,"t":"3. Start the first node as a bootnode","u":"/private-networks/tutorials/ethash","h":"#3-start-the-first-node-as-a-bootnode","p":3255},{"i":3267,"t":"4. Start Node-2","u":"/private-networks/tutorials/ethash","h":"#4-start-node-2","p":3255},{"i":3269,"t":"5. Start Node-3","u":"/private-networks/tutorials/ethash","h":"#5-start-node-3","p":3255},{"i":3271,"t":"6. Confirm the private network is working","u":"/private-networks/tutorials/ethash","h":"#6-confirm-the-private-network-is-working","p":3255},{"i":3273,"t":"Next steps","u":"/private-networks/tutorials/ethash","h":"#next-steps","p":3255},{"i":3275,"t":"Stop the nodes","u":"/private-networks/tutorials/ethash","h":"#stop-the-nodes","p":3255},{"i":3279,"t":"Prerequisites","u":"/private-networks/tutorials/ibft/validators","h":"#prerequisites","p":3277},{"i":3281,"t":"Add a validator","u":"/private-networks/tutorials/ibft/validators","h":"#add-a-validator","p":3277},{"i":3282,"t":"1. Create directories","u":"/private-networks/tutorials/ibft/validators","h":"#1-create-directories","p":3277},{"i":3284,"t":"2. Start the node","u":"/private-networks/tutorials/ibft/validators","h":"#2-start-the-node","p":3277},{"i":3286,"t":"3. Copy the address of the node","u":"/private-networks/tutorials/ibft/validators","h":"#3-copy-the-address-of-the-node","p":3277},{"i":3288,"t":"4. Propose adding the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#4-propose-adding-the-new-validator","p":3277},{"i":3290,"t":"5. Verify the addition of the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#5-verify-the-addition-of-the-new-validator","p":3277},{"i":3292,"t":"Remove a validator","u":"/private-networks/tutorials/ibft/validators","h":"#remove-a-validator","p":3277},{"i":3296,"t":"Prerequisites","u":"/private-networks/tutorials/ibft","h":"#prerequisites","p":3294},{"i":3298,"t":"Steps","u":"/private-networks/tutorials/ibft","h":"#steps","p":3294},{"i":3300,"t":"1. Create directories","u":"/private-networks/tutorials/ibft","h":"#1-create-directories","p":3294},{"i":3302,"t":"2. Create a configuration file","u":"/private-networks/tutorials/ibft","h":"#2-create-a-configuration-file","p":3294},{"i":3304,"t":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/ibft","h":"#3-generate-node-keys-and-a-genesis-file","p":3294},{"i":3306,"t":"4. Copy the genesis file to the IBFT-Network directory","u":"/private-networks/tutorials/ibft","h":"#4-copy-the-genesis-file-to-the-ibft-network-directory","p":3294},{"i":3308,"t":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/ibft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3294},{"i":3310,"t":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/ibft","h":"#6-start-the-first-node-as-the-bootnode","p":3294},{"i":3312,"t":"7. Start Node-2","u":"/private-networks/tutorials/ibft","h":"#7-start-node-2","p":3294},{"i":3314,"t":"8. Start Node-3","u":"/private-networks/tutorials/ibft","h":"#8-start-node-3","p":3294},{"i":3316,"t":"9. Start Node-4","u":"/private-networks/tutorials/ibft","h":"#9-start-node-4","p":3294},{"i":3318,"t":"10. Confirm the private network is working","u":"/private-networks/tutorials/ibft","h":"#10-confirm-the-private-network-is-working","p":3294},{"i":3320,"t":"Next steps","u":"/private-networks/tutorials/ibft","h":"#next-steps","p":3294},{"i":3322,"t":"Stop the nodes","u":"/private-networks/tutorials/ibft","h":"#stop-the-nodes","p":3294},{"i":3326,"t":"Prerequisites","u":"/private-networks/tutorials/contracts/interact","h":"#prerequisites","p":3324},{"i":3328,"t":"Interact with public contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-public-contracts","p":3324},{"i":3330,"t":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation","p":3324},{"i":3332,"t":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation","p":3324},{"i":3334,"t":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value","p":3324},{"i":3336,"t":"Interact with private contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-private-contracts","p":3324},{"i":3338,"t":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation-1","p":3324},{"i":3340,"t":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation-1","p":3324},{"i":3342,"t":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value-1","p":3324},{"i":3346,"t":"Quorum-Kubernetes","u":"/private-networks/tutorials/kubernetes","h":"#quorum-kubernetes","p":3344},{"i":3348,"t":"Cloud support","u":"/private-networks/tutorials/kubernetes","h":"#cloud-support","p":3344},{"i":3350,"t":"Limitations","u":"/private-networks/tutorials/kubernetes","h":"#limitations","p":3344},{"i":3352,"t":"CNI","u":"/private-networks/tutorials/kubernetes","h":"#cni","p":3344},{"i":3354,"t":"Multi-cluster","u":"/private-networks/tutorials/kubernetes","h":"#multi-cluster","p":3344},{"i":3356,"t":"Concepts","u":"/private-networks/tutorials/kubernetes","h":"#concepts","p":3344},{"i":3357,"t":"Namespaces","u":"/private-networks/tutorials/kubernetes","h":"#namespaces","p":3344},{"i":3359,"t":"Nodes","u":"/private-networks/tutorials/kubernetes","h":"#nodes","p":3344},{"i":3361,"t":"Role-based access controls","u":"/private-networks/tutorials/kubernetes","h":"#role-based-access-controls","p":3344},{"i":3363,"t":"Storage","u":"/private-networks/tutorials/kubernetes","h":"#storage","p":3344},{"i":3365,"t":"Monitoring","u":"/private-networks/tutorials/kubernetes","h":"#monitoring","p":3344},{"i":3367,"t":"Ingress Controllers","u":"/private-networks/tutorials/kubernetes","h":"#ingress-controllers","p":3344},{"i":3371,"t":"Prerequisites","u":"/private-networks/tutorials/kubernetes/cluster","h":"#prerequisites","p":3369},{"i":3373,"t":"Local Clusters","u":"/private-networks/tutorials/kubernetes/cluster","h":"#local-clusters","p":3369},{"i":3375,"t":"Minikube","u":"/private-networks/tutorials/kubernetes/cluster","h":"#minikube","p":3369},{"i":3377,"t":"kind","u":"/private-networks/tutorials/kubernetes/cluster","h":"#kind","p":3369},{"i":3379,"t":"Rancher","u":"/private-networks/tutorials/kubernetes/cluster","h":"#rancher","p":3369},{"i":3381,"t":"Cloud clusters","u":"/private-networks/tutorials/kubernetes/cluster","h":"#cloud-clusters","p":3369},{"i":3382,"t":"AWS EKS","u":"/private-networks/tutorials/kubernetes/cluster","h":"#aws-eks","p":3369},{"i":3384,"t":"Azure Kubernetes Service","u":"/private-networks/tutorials/kubernetes/cluster","h":"#azure-kubernetes-service","p":3369},{"i":3388,"t":"CLIQUE methods","u":"/private-networks/reference/api","h":"#clique-methods","p":3386},{"i":3390,"t":"clique_discard","u":"/private-networks/reference/api","h":"#clique_discard","p":3386},{"i":3392,"t":"clique_getSigners","u":"/private-networks/reference/api","h":"#clique_getsigners","p":3386},{"i":3394,"t":"clique_getSignerMetrics","u":"/private-networks/reference/api","h":"#clique_getsignermetrics","p":3386},{"i":3396,"t":"clique_getSignersAtHash","u":"/private-networks/reference/api","h":"#clique_getsignersathash","p":3386},{"i":3398,"t":"clique_proposals","u":"/private-networks/reference/api","h":"#clique_proposals","p":3386},{"i":3400,"t":"clique_propose","u":"/private-networks/reference/api","h":"#clique_propose","p":3386},{"i":3402,"t":"EEA methods","u":"/private-networks/reference/api","h":"#eea-methods","p":3386},{"i":3404,"t":"eea_sendRawTransaction","u":"/private-networks/reference/api","h":"#eea_sendrawtransaction","p":3386},{"i":3406,"t":"IBFT 2.0 methods","u":"/private-networks/reference/api","h":"#ibft-20-methods","p":3386},{"i":3408,"t":"ibft_discardValidatorVote","u":"/private-networks/reference/api","h":"#ibft_discardvalidatorvote","p":3386},{"i":3410,"t":"ibft_getPendingVotes","u":"/private-networks/reference/api","h":"#ibft_getpendingvotes","p":3386},{"i":3412,"t":"ibft_getSignerMetrics","u":"/private-networks/reference/api","h":"#ibft_getsignermetrics","p":3386},{"i":3414,"t":"ibft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblockhash","p":3386},{"i":3416,"t":"ibft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblocknumber","p":3386},{"i":3418,"t":"ibft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#ibft_proposevalidatorvote","p":3386},{"i":3420,"t":"PERM (Permissioning) methods","u":"/private-networks/reference/api","h":"#perm-permissioning-methods","p":3386},{"i":3422,"t":"perm_addAccountsToAllowlist","u":"/private-networks/reference/api","h":"#perm_addaccountstoallowlist","p":3386},{"i":3424,"t":"perm_addNodesToAllowlist","u":"/private-networks/reference/api","h":"#perm_addnodestoallowlist","p":3386},{"i":3426,"t":"perm_getAccountsAllowlist","u":"/private-networks/reference/api","h":"#perm_getaccountsallowlist","p":3386},{"i":3428,"t":"perm_getNodesAllowlist","u":"/private-networks/reference/api","h":"#perm_getnodesallowlist","p":3386},{"i":3430,"t":"perm_reloadPermissionsFromFile","u":"/private-networks/reference/api","h":"#perm_reloadpermissionsfromfile","p":3386},{"i":3432,"t":"perm_removeAccountsFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removeaccountsfromallowlist","p":3386},{"i":3434,"t":"perm_removeNodesFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removenodesfromallowlist","p":3386},{"i":3436,"t":"PRIV methods","u":"/private-networks/reference/api","h":"#priv-methods","p":3386},{"i":3438,"t":"priv_call","u":"/private-networks/reference/api","h":"#priv_call","p":3386},{"i":3440,"t":"priv_createPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_createprivacygroup","p":3386},{"i":3442,"t":"priv_debugGetStateRoot","u":"/private-networks/reference/api","h":"#priv_debuggetstateroot","p":3386},{"i":3444,"t":"priv_deletePrivacyGroup","u":"/private-networks/reference/api","h":"#priv_deleteprivacygroup","p":3386},{"i":3446,"t":"priv_distributeRawTransaction","u":"/private-networks/reference/api","h":"#priv_distributerawtransaction","p":3386},{"i":3448,"t":"priv_findPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_findprivacygroup","p":3386},{"i":3450,"t":"priv_getCode","u":"/private-networks/reference/api","h":"#priv_getcode","p":3386},{"i":3452,"t":"priv_getEeaTransactionCount","u":"/private-networks/reference/api","h":"#priv_geteeatransactioncount","p":3386},{"i":3454,"t":"priv_getFilterChanges","u":"/private-networks/reference/api","h":"#priv_getfilterchanges","p":3386},{"i":3456,"t":"priv_getFilterLogs","u":"/private-networks/reference/api","h":"#priv_getfilterlogs","p":3386},{"i":3458,"t":"priv_getLogs","u":"/private-networks/reference/api","h":"#priv_getlogs","p":3386},{"i":3460,"t":"priv_getPrivacyPrecompileAddress","u":"/private-networks/reference/api","h":"#priv_getprivacyprecompileaddress","p":3386},{"i":3462,"t":"priv_getPrivateTransaction","u":"/private-networks/reference/api","h":"#priv_getprivatetransaction","p":3386},{"i":3464,"t":"priv_getTransactionCount","u":"/private-networks/reference/api","h":"#priv_gettransactioncount","p":3386},{"i":3466,"t":"priv_getTransactionReceipt","u":"/private-networks/reference/api","h":"#priv_gettransactionreceipt","p":3386},{"i":3468,"t":"priv_newFilter","u":"/private-networks/reference/api","h":"#priv_newfilter","p":3386},{"i":3470,"t":"priv_traceTransaction","u":"/private-networks/reference/api","h":"#priv_tracetransaction","p":3386},{"i":3472,"t":"priv_uninstallFilter","u":"/private-networks/reference/api","h":"#priv_uninstallfilter","p":3386},{"i":3474,"t":"QBFT methods","u":"/private-networks/reference/api","h":"#qbft-methods","p":3386},{"i":3476,"t":"qbft_discardValidatorVote","u":"/private-networks/reference/api","h":"#qbft_discardvalidatorvote","p":3386},{"i":3478,"t":"qbft_getPendingVotes","u":"/private-networks/reference/api","h":"#qbft_getpendingvotes","p":3386},{"i":3480,"t":"qbft_getSignerMetrics","u":"/private-networks/reference/api","h":"#qbft_getsignermetrics","p":3386},{"i":3482,"t":"qbft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblockhash","p":3386},{"i":3484,"t":"qbft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblocknumber","p":3386},{"i":3486,"t":"qbft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#qbft_proposevalidatorvote","p":3386},{"i":3490,"t":"Prerequisites","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#prerequisites","p":3488},{"i":3492,"t":"Update a persistent volume claim size","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-a-persistent-volume-claim-size","p":3488},{"i":3494,"t":"Update Besu versions","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-besu-versions","p":3488},{"i":3498,"t":"Steps","u":"/private-networks/tutorials/kubernetes/playground","h":"#steps","p":3496},{"i":3500,"t":"Important notes","u":"/private-networks/tutorials/kubernetes/playground","h":"#important-notes","p":3496},{"i":3504,"t":"Prerequisites","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#prerequisites","p":3502},{"i":3506,"t":"Deploy the Quorum Explorer helm chart","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#deploy-the-quorum-explorer-helm-chart","p":3502},{"i":3508,"t":"Nodes","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#nodes","p":3502},{"i":3510,"t":"Validators","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#validators","p":3502},{"i":3512,"t":"Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#explorer","p":3502},{"i":3514,"t":"Contracts","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#contracts","p":3502},{"i":3516,"t":"Wallet","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#wallet","p":3502},{"i":3520,"t":"Prerequisites","u":"/private-networks/tutorials/kubernetes/production","h":"#prerequisites","p":3518},{"i":3522,"t":"Overview","u":"/private-networks/tutorials/kubernetes/production","h":"#overview","p":3518},{"i":3524,"t":"Deploy","u":"/private-networks/tutorials/kubernetes/production","h":"#deploy","p":3518},{"i":3525,"t":"Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/production","h":"#check-that-you-can-connect-to-the-cluster-with-kubectl","p":3518},{"i":3527,"t":"Deploy the network","u":"/private-networks/tutorials/kubernetes/production","h":"#deploy-the-network","p":3518},{"i":3529,"t":"Best practices","u":"/private-networks/tutorials/kubernetes/production","h":"#best-practices","p":3518},{"i":3531,"t":"Multi-cluster support","u":"/private-networks/tutorials/kubernetes/production","h":"#multi-cluster-support","p":3518},{"i":3535,"t":"Automatic configuration","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-configuration","p":3533},{"i":3537,"t":"1. Create a load balancer","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#1-create-a-load-balancer","p":3533},{"i":3539,"t":"2. Check if the load balancer is properly deployed","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#2-check-if-the-load-balancer-is-properly-deployed","p":3533},{"i":3541,"t":"3. Deploy Besu","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#3-deploy-besu","p":3533},{"i":3543,"t":"Automatic detection errors","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-detection-errors","p":3533},{"i":3545,"t":"Service not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#service-not-found-error-message","p":3533},{"i":3547,"t":"Forbidden error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#forbidden-error-message","p":3533},{"i":3549,"t":"Ingress not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#ingress-not-found-error-message","p":3533},{"i":3553,"t":"Prerequisites","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#prerequisites","p":3551},{"i":3555,"t":"Steps","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#steps","p":3551},{"i":3556,"t":"1. Generate a private and public key pair","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#1-generate-a-private-and-public-key-pair","p":3551},{"i":3558,"t":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#2-generate-tessera-keys","p":3551},{"i":3560,"t":"3. Update the Tessera configuration file","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#3-update-the-tessera-configuration-file","p":3551},{"i":3562,"t":"4. Start Tessera","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#4-start-tessera","p":3551},{"i":3564,"t":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#5-start-besu-node-1","p":3551},{"i":3566,"t":"6. Generate the tenant JWTs","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#6-generate-the-tenant-jwts","p":3551},{"i":3570,"t":"Prerequisites","u":"/private-networks/tutorials/permissioning","h":"#prerequisites","p":3568},{"i":3572,"t":"Steps","u":"/private-networks/tutorials/permissioning","h":"#steps","p":3568},{"i":3573,"t":"1. Create folders","u":"/private-networks/tutorials/permissioning","h":"#1-create-folders","p":3568},{"i":3575,"t":"2. Create the configuration file","u":"/private-networks/tutorials/permissioning","h":"#2-create-the-configuration-file","p":3568},{"i":3577,"t":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/permissioning","h":"#3-generate-node-keys-and-a-genesis-file","p":3568},{"i":3579,"t":"4. Copy the genesis file to the Permissioned-Network directory","u":"/private-networks/tutorials/permissioning","h":"#4-copy-the-genesis-file-to-the-permissioned-network-directory","p":3568},{"i":3581,"t":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/permissioning","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3568},{"i":3583,"t":"6. Create the permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#6-create-the-permissions-configuration-file","p":3568},{"i":3585,"t":"7. Start Node-1","u":"/private-networks/tutorials/permissioning","h":"#7-start-node-1","p":3568},{"i":3587,"t":"8. Start Node-2","u":"/private-networks/tutorials/permissioning","h":"#8-start-node-2","p":3568},{"i":3589,"t":"9. Start Node-3","u":"/private-networks/tutorials/permissioning","h":"#9-start-node-3","p":3568},{"i":3591,"t":"10. Start Node-4","u":"/private-networks/tutorials/permissioning","h":"#10-start-node-4","p":3568},{"i":3593,"t":"11. Add enode URLs for nodes to permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#11-add-enode-urls-for-nodes-to-permissions-configuration-file","p":3568},{"i":3595,"t":"12. Add nodes as peers","u":"/private-networks/tutorials/permissioning","h":"#12-add-nodes-as-peers","p":3568},{"i":3597,"t":"13. Confirm permissioned network is working","u":"/private-networks/tutorials/permissioning","h":"#13-confirm-permissioned-network-is-working","p":3568},{"i":3599,"t":"Stop nodes","u":"/private-networks/tutorials/permissioning","h":"#stop-nodes","p":3568},{"i":3603,"t":"Prerequisites","u":"/private-networks/tutorials/kubernetes/charts","h":"#prerequisites","p":3601},{"i":3605,"t":"Provision with Helm charts","u":"/private-networks/tutorials/kubernetes/charts","h":"#provision-with-helm-charts","p":3601},{"i":3607,"t":"1. Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/charts","h":"#1-check-that-you-can-connect-to-the-cluster-with-kubectl","p":3601},{"i":3609,"t":"2. Create the namespace","u":"/private-networks/tutorials/kubernetes/charts","h":"#2-create-the-namespace","p":3601},{"i":3611,"t":"3. Deploy the monitoring chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#3-deploy-the-monitoring-chart","p":3601},{"i":3613,"t":"4. Deploy the genesis chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#4-deploy-the-genesis-chart","p":3601},{"i":3615,"t":"5. Deploy the bootnodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#5-deploy-the-bootnodes","p":3601},{"i":3617,"t":"6. Deploy the validators","u":"/private-networks/tutorials/kubernetes/charts","h":"#6-deploy-the-validators","p":3601},{"i":3619,"t":"7. Add/Remove additional validators to the validator pool","u":"/private-networks/tutorials/kubernetes/charts","h":"#7-addremove-additional-validators-to-the-validator-pool","p":3601},{"i":3621,"t":"8. Deploy RPC or Transaction nodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#8-deploy-rpc-or-transaction-nodes","p":3601},{"i":3623,"t":"9. Connect to the node from your local machine via an ingress","u":"/private-networks/tutorials/kubernetes/charts","h":"#9-connect-to-the-node-from-your-local-machine-via-an-ingress","p":3601},{"i":3625,"t":"10. Blockchain explorer","u":"/private-networks/tutorials/kubernetes/charts","h":"#10-blockchain-explorer","p":3601},{"i":3631,"t":"Prerequisites","u":"/private-networks/tutorials/privacy/quickstart","h":"#prerequisites","p":3629},{"i":3633,"t":"Steps","u":"/private-networks/tutorials/privacy/quickstart","h":"#steps","p":3629},{"i":3634,"t":"1. Create Docker-compose file","u":"/private-networks/tutorials/privacy/quickstart","h":"#1-create-docker-compose-file","p":3629},{"i":3636,"t":"2. Start the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#2-start-the-network","p":3629},{"i":3638,"t":"3. Deploy the private contract and interact with the nodes","u":"/private-networks/tutorials/privacy/quickstart","h":"#3-deploy-the-private-contract-and-interact-with-the-nodes","p":3629},{"i":3640,"t":"4. Stop the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#4--stop-the-network","p":3629},{"i":3642,"t":"More examples","u":"/private-networks/tutorials/privacy/quickstart","h":"#more-examples","p":3629},{"i":3646,"t":"Architecture","u":"/public-networks","h":"#architecture","p":3644},{"i":3651,"t":"Prerequisites","u":"/private-networks/tutorials/qbft","h":"#prerequisites","p":3649},{"i":3653,"t":"Steps","u":"/private-networks/tutorials/qbft","h":"#steps","p":3649},{"i":3655,"t":"1. Create directories","u":"/private-networks/tutorials/qbft","h":"#1-create-directories","p":3649},{"i":3657,"t":"2. Create a configuration file","u":"/private-networks/tutorials/qbft","h":"#2-create-a-configuration-file","p":3649},{"i":3659,"t":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/qbft","h":"#3-generate-node-keys-and-a-genesis-file","p":3649},{"i":3661,"t":"4. Copy the genesis file to the QBFT-Network directory","u":"/private-networks/tutorials/qbft","h":"#4-copy-the-genesis-file-to-the-qbft-network-directory","p":3649},{"i":3663,"t":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/qbft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3649},{"i":3665,"t":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/qbft","h":"#6-start-the-first-node-as-the-bootnode","p":3649},{"i":3667,"t":"7. Start Node-2","u":"/private-networks/tutorials/qbft","h":"#7-start-node-2","p":3649},{"i":3669,"t":"8. Start Node-3","u":"/private-networks/tutorials/qbft","h":"#8-start-node-3","p":3649},{"i":3671,"t":"9. Start Node-4","u":"/private-networks/tutorials/qbft","h":"#9-start-node-4","p":3649},{"i":3673,"t":"10. Confirm the private network is working","u":"/private-networks/tutorials/qbft","h":"#10-confirm-the-private-network-is-working","p":3649},{"i":3675,"t":"Next steps","u":"/private-networks/tutorials/qbft","h":"#next-steps","p":3649},{"i":3677,"t":"Stop the nodes","u":"/private-networks/tutorials/qbft","h":"#stop-the-nodes","p":3649},{"i":3681,"t":"Prerequisites","u":"/private-networks/tutorials/privacy","h":"#prerequisites","p":3679},{"i":3683,"t":"Steps","u":"/private-networks/tutorials/privacy","h":"#steps","p":3679},{"i":3684,"t":"1. Create Tessera directories","u":"/private-networks/tutorials/privacy","h":"#1-create-tessera-directories","p":3679},{"i":3686,"t":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy","h":"#2-generate-tessera-keys","p":3679},{"i":3688,"t":"3. Create Tessera configuration files","u":"/private-networks/tutorials/privacy","h":"#3-create-tessera-configuration-files","p":3679},{"i":3690,"t":"4. Start the Tessera nodes","u":"/private-networks/tutorials/privacy","h":"#4-start-the-tessera-nodes","p":3679},{"i":3692,"t":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy","h":"#5-start-besu-node-1","p":3679},{"i":3694,"t":"6. Start Besu Node-2","u":"/private-networks/tutorials/privacy","h":"#6-start-besu-node-2","p":3679},{"i":3696,"t":"7. Start Besu Node-3","u":"/private-networks/tutorials/privacy","h":"#7-start-besu-node-3","p":3679},{"i":3698,"t":"8. Start Besu Node-4","u":"/private-networks/tutorials/privacy","h":"#8-start-besu-node-4","p":3679},{"i":3702,"t":"Bonsai Tries","u":"/public-networks/concepts/data-storage-formats","h":"#bonsai-tries","p":3700},{"i":3704,"t":"Forest of Tries","u":"/public-networks/concepts/data-storage-formats","h":"#forest-of-tries","p":3700},{"i":3706,"t":"Forest of Tries vs. Bonsai Tries","u":"/public-networks/concepts/data-storage-formats","h":"#forest-of-tries-vs-bonsai-tries","p":3700},{"i":3707,"t":"Storage requirements","u":"/public-networks/concepts/data-storage-formats","h":"#storage-requirements","p":3700},{"i":3709,"t":"Accessing data","u":"/public-networks/concepts/data-storage-formats","h":"#accessing-data","p":3700},{"i":3711,"t":"Syncing nodes","u":"/public-networks/concepts/data-storage-formats","h":"#syncing-nodes","p":3700},{"i":3715,"t":"Specify a different network ID","u":"/public-networks/concepts/network-and-chain-id","h":"#specify-a-different-network-id","p":3713},{"i":3717,"t":"Start a new chain with a new chain ID","u":"/public-networks/concepts/network-and-chain-id","h":"#start-a-new-chain-with-a-new-chain-id","p":3713},{"i":3721,"t":"Topics","u":"/public-networks/concepts/events-and-logs","h":"#topics","p":3719},{"i":3723,"t":"Event parameters","u":"/public-networks/concepts/events-and-logs","h":"#event-parameters","p":3719},{"i":3725,"t":"Event signature hash","u":"/public-networks/concepts/events-and-logs","h":"#event-signature-hash","p":3719},{"i":3727,"t":"Topic filters","u":"/public-networks/concepts/events-and-logs","h":"#topic-filters","p":3719},{"i":3731,"t":"Prerequisites","u":"/private-networks/tutorials/quickstart","h":"#prerequisites","p":3729},{"i":3733,"t":"Generate the tutorial blockchain configuration files","u":"/private-networks/tutorials/quickstart","h":"#generate-the-tutorial-blockchain-configuration-files","p":3729},{"i":3735,"t":"Start the network","u":"/private-networks/tutorials/quickstart","h":"#start-the-network","p":3729},{"i":3737,"t":"Use a block explorer","u":"/private-networks/tutorials/quickstart","h":"#use-a-block-explorer","p":3729},{"i":3739,"t":"Monitor nodes with Prometheus and Grafana","u":"/private-networks/tutorials/quickstart","h":"#monitor-nodes-with-prometheus-and-grafana","p":3729},{"i":3741,"t":"Run JSON-RPC requests","u":"/private-networks/tutorials/quickstart","h":"#run-json-rpc-requests","p":3729},{"i":3743,"t":"Run with cURL","u":"/private-networks/tutorials/quickstart","h":"#run-with-curl","p":3729},{"i":3745,"t":"Run with Postman","u":"/private-networks/tutorials/quickstart","h":"#run-with-postman","p":3729},{"i":3747,"t":"Request the node version","u":"/private-networks/tutorials/quickstart","h":"#request-the-node-version","p":3729},{"i":3749,"t":"Count the peers","u":"/private-networks/tutorials/quickstart","h":"#count-the-peers","p":3729},{"i":3751,"t":"Request the most recent block number","u":"/private-networks/tutorials/quickstart","h":"#request-the-most-recent-block-number","p":3729},{"i":3753,"t":"Public transactions","u":"/private-networks/tutorials/quickstart","h":"#public-transactions","p":3729},{"i":3755,"t":"Create a transaction using MetaMask","u":"/private-networks/tutorials/quickstart","h":"#create-a-transaction-using-metamask","p":3729},{"i":3757,"t":"Smart contract and dapp usage","u":"/private-networks/tutorials/quickstart","h":"#smart-contract-and-dapp-usage","p":3729},{"i":3759,"t":"Deploy the contract","u":"/private-networks/tutorials/quickstart","h":"#deploy-the-contract","p":3729},{"i":3761,"t":"Run the dapp","u":"/private-networks/tutorials/quickstart","h":"#run-the-dapp","p":3729},{"i":3763,"t":"Deploy your own dapp","u":"/private-networks/tutorials/quickstart","h":"#deploy-your-own-dapp","p":3729},{"i":3765,"t":"Stop and restart the private network without removing containers","u":"/private-networks/tutorials/quickstart","h":"#stop-and-restart-the-private-network-without-removing-containers","p":3729},{"i":3767,"t":"Stop the private network and remove containers","u":"/private-networks/tutorials/quickstart","h":"#stop-the-private-network-and-remove-containers","p":3729},{"i":3769,"t":"Add a new node to the network","u":"/private-networks/tutorials/quickstart","h":"#add-a-new-node-to-the-network","p":3729},{"i":3771,"t":"1. Create the node key files","u":"/private-networks/tutorials/quickstart","h":"#1-create-the-node-key-files","p":3729},{"i":3773,"t":"2. Create new node directory","u":"/private-networks/tutorials/quickstart","h":"#2-create-new-node-directory","p":3729},{"i":3775,"t":"3. Update docker-compose","u":"/private-networks/tutorials/quickstart","h":"#3-update-docker-compose","p":3729},{"i":3777,"t":"4. Update Prometheus configuration","u":"/private-networks/tutorials/quickstart","h":"#4-update-prometheus-configuration","p":3729},{"i":3779,"t":"5. Update files with the enode address","u":"/private-networks/tutorials/quickstart","h":"#5-update-files-with-the-enode-address","p":3729},{"i":3781,"t":"6. Start the network","u":"/private-networks/tutorials/quickstart","h":"#6-start-the-network","p":3729},{"i":3789,"t":"Execution and consensus clients","u":"/public-networks/concepts/node-clients","h":"#execution-and-consensus-clients","p":3787},{"i":3791,"t":"Execution clients","u":"/public-networks/concepts/node-clients","h":"#execution-clients","p":3787},{"i":3793,"t":"Consensus clients","u":"/public-networks/concepts/node-clients","h":"#consensus-clients","p":3787},{"i":3797,"t":"Node private key","u":"/public-networks/concepts/node-keys","h":"#node-private-key","p":3795},{"i":3799,"t":"Node public key","u":"/public-networks/concepts/node-keys","h":"#node-public-key","p":3795},{"i":3801,"t":"Node address","u":"/public-networks/concepts/node-keys","h":"#node-address","p":3795},{"i":3803,"t":"Specify a custom node private key file","u":"/public-networks/concepts/node-keys","h":"#specify-a-custom-node-private-key-file","p":3795},{"i":3805,"t":"Enode URL","u":"/public-networks/concepts/node-keys","h":"#enode-url","p":3795},{"i":3807,"t":"Domain name support","u":"/public-networks/concepts/node-keys","h":"#domain-name-support","p":3795},{"i":3811,"t":"Layered transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#layered-transaction-pool","p":3809},{"i":3813,"t":"Sequenced transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#sequenced-transaction-pool","p":3809},{"i":3815,"t":"Dropping transactions when the layered transaction pool is full","u":"/public-networks/concepts/transactions/pool","h":"#dropping-transactions-when-the-layered-transaction-pool-is-full","p":3809},{"i":3817,"t":"Replacing transactions with the same sender and nonce","u":"/public-networks/concepts/transactions/pool","h":"#replacing-transactions-with-the-same-sender-and-nonce","p":3809},{"i":3818,"t":"In networks with a base fee and priced gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-a-base-fee-and-priced-gas","p":3809},{"i":3820,"t":"In networks with zero base base or free gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-zero-base-base-or-free-gas","p":3809},{"i":3822,"t":"Transaction pool methods and options","u":"/public-networks/concepts/transactions/pool","h":"#transaction-pool-methods-and-options","p":3809},{"i":3826,"t":"FRONTIER transactions","u":"/public-networks/concepts/transactions/types","h":"#frontier-transactions","p":3824},{"i":3828,"t":"ACCESS_LIST transactions","u":"/public-networks/concepts/transactions/types","h":"#access_list-transactions","p":3824},{"i":3830,"t":"EIP1559 transactions","u":"/public-networks/concepts/transactions/types","h":"#eip1559-transactions","p":3824},{"i":3832,"t":"BLOB transactions","u":"/public-networks/concepts/transactions/types","h":"#blob-transactions","p":3824},{"i":3834,"t":"View blob transaction costs","u":"/public-networks/concepts/transactions/types","h":"#view-blob-transaction-costs","p":3824},{"i":3838,"t":"What are attestations?","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#what-are-attestations","p":3836},{"i":3840,"t":"Attestation rewards","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#attestation-rewards","p":3836},{"i":3842,"t":"Incorrect attestations","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#incorrect-attestations","p":3836},{"i":3844,"t":"Conclusion","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#conclusion","p":3836},{"i":3846,"t":"References","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#references","p":3836},{"i":3854,"t":"Prerequisites","u":"/public-networks/get-started/connect/mainnet","h":"#prerequisites","p":3852},{"i":3856,"t":"Steps","u":"/public-networks/get-started/connect/mainnet","h":"#steps","p":3852},{"i":3857,"t":"1. Generate the shared secret","u":"/public-networks/get-started/connect/mainnet","h":"#1-generate-the-shared-secret","p":3852},{"i":3859,"t":"2. Generate validator keys","u":"/public-networks/get-started/connect/mainnet","h":"#2-generate-validator-keys","p":3852},{"i":3861,"t":"3. Start Besu","u":"/public-networks/get-started/connect/mainnet","h":"#3-start-besu","p":3852},{"i":3863,"t":"4. Start the consensus client","u":"/public-networks/get-started/connect/mainnet","h":"#4-start-the-consensus-client","p":3852},{"i":3865,"t":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/mainnet","h":"#5-wait-for-the-clients-to-sync","p":3852},{"i":3867,"t":"6. Stake ETH","u":"/public-networks/get-started/connect/mainnet","h":"#6-stake-eth","p":3852},{"i":3871,"t":"Parallelization mechanism overview","u":"/public-networks/concepts/parallel-transaction-execution","h":"#parallelization-mechanism-overview","p":3869},{"i":3873,"t":"Conflict detection strategy","u":"/public-networks/concepts/parallel-transaction-execution","h":"#conflict-detection-strategy","p":3869},{"i":3875,"t":"Metrics","u":"/public-networks/concepts/parallel-transaction-execution","h":"#metrics","p":3869},{"i":3878,"t":"MacOS with Homebrew","u":"/public-networks/get-started/install/binary-distribution","h":"#macos-with-homebrew","p":3877},{"i":3879,"t":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites","p":3877},{"i":3881,"t":"Install (or upgrade) using Homebrew","u":"/public-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":3877},{"i":3883,"t":"Linux / Unix","u":"/public-networks/get-started/install/binary-distribution","h":"#linux--unix","p":3877},{"i":3884,"t":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":3877},{"i":3886,"t":"Install from packaged binaries","u":"/public-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":3877},{"i":3890,"t":"Prerequisites","u":"/public-networks/get-started/connect/testnet","h":"#prerequisites","p":3888},{"i":3892,"t":"Steps","u":"/public-networks/get-started/connect/testnet","h":"#steps","p":3888},{"i":3893,"t":"1. Generate the shared secret","u":"/public-networks/get-started/connect/testnet","h":"#1-generate-the-shared-secret","p":3888},{"i":3895,"t":"2. Generate validator keys","u":"/public-networks/get-started/connect/testnet","h":"#2-generate-validator-keys","p":3888},{"i":3897,"t":"3. Start Besu","u":"/public-networks/get-started/connect/testnet","h":"#3-start-besu","p":3888},{"i":3899,"t":"4. Start the consensus client","u":"/public-networks/get-started/connect/testnet","h":"#4-start-the-consensus-client","p":3888},{"i":3901,"t":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/testnet","h":"#5-wait-for-the-clients-to-sync","p":3888},{"i":3903,"t":"6. Stake ETH","u":"/public-networks/get-started/connect/testnet","h":"#6-stake-eth","p":3888},{"i":3907,"t":"Sync times","u":"/public-networks/get-started/connect/sync-node","h":"#sync-times","p":3905},{"i":3909,"t":"Storage","u":"/public-networks/get-started/connect/sync-node","h":"#storage","p":3905},{"i":3911,"t":"Run a full node","u":"/public-networks/get-started/connect/sync-node","h":"#run-a-full-node","p":3905},{"i":3913,"t":"Snap synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#snap-synchronization","p":3905},{"i":3915,"t":"Checkpoint synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#checkpoint-synchronization","p":3905},{"i":3917,"t":"Fast synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#fast-synchronization","p":3905},{"i":3919,"t":"Run an archive node","u":"/public-networks/get-started/connect/sync-node","h":"#run-an-archive-node","p":3905},{"i":3925,"t":"Build from source","u":"/public-networks/get-started/install","h":"#build-from-source","p":3923},{"i":3929,"t":"Prerequisites","u":"/public-networks/get-started/start-node","h":"#prerequisites","p":3927},{"i":3931,"t":"Local block data","u":"/public-networks/get-started/start-node","h":"#local-block-data","p":3927},{"i":3933,"t":"Genesis configuration","u":"/public-networks/get-started/start-node","h":"#genesis-configuration","p":3927},{"i":3935,"t":"Syncing and storage","u":"/public-networks/get-started/start-node","h":"#syncing-and-storage","p":3927},{"i":3937,"t":"Run a node for testing","u":"/public-networks/get-started/start-node","h":"#run-a-node-for-testing","p":3927},{"i":3939,"t":"Run a node on Holesky testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-holesky-testnet","p":3927},{"i":3941,"t":"Run a node on Sepolia testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-sepolia-testnet","p":3927},{"i":3943,"t":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-ethereum-mainnet","p":3927},{"i":3945,"t":"Confirm node is running","u":"/public-networks/get-started/start-node","h":"#confirm-node-is-running","p":3927},{"i":3949,"t":"Prerequisites","u":"/public-networks/get-started/install/run-docker-image","h":"#prerequisites","p":3947},{"i":3951,"t":"Default node for Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#default-node-for-mainnet","p":3947},{"i":3953,"t":"Expose ports","u":"/public-networks/get-started/install/run-docker-image","h":"#expose-ports","p":3947},{"i":3955,"t":"Start Besu","u":"/public-networks/get-started/install/run-docker-image","h":"#start-besu","p":3947},{"i":3957,"t":"Run a node for testing","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":3947},{"i":3959,"t":"Run a node on Holesky testnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-holesky-testnet","p":3947},{"i":3961,"t":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-ethereum-mainnet","p":3947},{"i":3963,"t":"Stop Besu and clean up resources","u":"/public-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":3947},{"i":3967,"t":"Java distribution and installation","u":"/public-networks/get-started/system-requirements","h":"#java-distribution-and-installation","p":3965},{"i":3969,"t":"Java Virtual Machine size","u":"/public-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":3965},{"i":3971,"t":"Disk space","u":"/public-networks/get-started/system-requirements","h":"#disk-space","p":3965},{"i":3973,"t":"Disk type","u":"/public-networks/get-started/system-requirements","h":"#disk-type","p":3965},{"i":3975,"t":"AWS requirements","u":"/public-networks/get-started/system-requirements","h":"#aws-requirements","p":3965},{"i":3979,"t":"Configuration order of precedence","u":"/public-networks/how-to/configure-besu","h":"#configuration-order-of-precedence","p":3977},{"i":3981,"t":"TOML configuration file","u":"/public-networks/how-to/configure-besu","h":"#toml-configuration-file","p":3977},{"i":3983,"t":"Default configuration","u":"/public-networks/how-to/configure-besu","h":"#default-configuration","p":3977},{"i":3985,"t":"Peering","u":"/public-networks/how-to/configure-besu","h":"#peering","p":3977},{"i":3987,"t":"Storage","u":"/public-networks/how-to/configure-besu","h":"#storage","p":3977},{"i":3989,"t":"Sync","u":"/public-networks/how-to/configure-besu","h":"#sync","p":3977},{"i":3993,"t":"Minimalist staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#minimalist-staker-profile","p":3991},{"i":3995,"t":"Staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#staker-profile","p":3991},{"i":3997,"t":"Enterprise/Private profile","u":"/public-networks/how-to/configure-besu/profile","h":"#enterpriseprivate-profile","p":3991},{"i":3999,"t":"Load external profiles","u":"/public-networks/how-to/configure-besu/profile","h":"#load-external-profiles","p":3991},{"i":4003,"t":"Determine when a node is ready","u":"/public-networks/how-to/configure-ha","h":"#determine-when-a-node-is-ready","p":4001},{"i":4005,"t":"Transaction nonces","u":"/public-networks/how-to/configure-ha","h":"#transaction-nonces","p":4001},{"i":4007,"t":"Subscriptions","u":"/public-networks/how-to/configure-ha","h":"#subscriptions","p":4001},{"i":4009,"t":"Recover from dropped subscriptions","u":"/public-networks/how-to/configure-ha","h":"#recover-from-dropped-subscriptions","p":4001},{"i":4011,"t":"New headers","u":"/public-networks/how-to/configure-ha","h":"#new-headers","p":4001},{"i":4013,"t":"Logs","u":"/public-networks/how-to/configure-ha","h":"#logs","p":4001},{"i":4015,"t":"New pending transactions","u":"/public-networks/how-to/configure-ha","h":"#new-pending-transactions","p":4001},{"i":4017,"t":"Dropped pending transactions","u":"/public-networks/how-to/configure-ha","h":"#dropped-pending-transactions","p":4001},{"i":4019,"t":"Syncing","u":"/public-networks/how-to/configure-ha","h":"#syncing","p":4001},{"i":4022,"t":"AWS","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#aws","p":4021},{"i":4024,"t":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection","p":4021},{"i":4026,"t":"Elastic Kubernetes Service","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#elastic-kubernetes-service","p":4021},{"i":4028,"t":"Manual configurations","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#manual-configurations","p":4021},{"i":4030,"t":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection-1","p":4021},{"i":4034,"t":"Enable Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","h":"#enable-java-flight-recorder","p":4032},{"i":4038,"t":"Install Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java","p":4036},{"i":4040,"t":"Install Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-ubuntu","p":4036},{"i":4042,"t":"Install Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-macos","p":4036},{"i":4044,"t":"Update Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java","p":4036},{"i":4045,"t":"Update Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-ubuntu","p":4036},{"i":4047,"t":"Update Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-macos","p":4036},{"i":4051,"t":"Manage the heap dump","u":"/public-networks/how-to/configure-java/manage-memory","h":"#manage-the-heap-dump","p":4049},{"i":4053,"t":"Default options","u":"/public-networks/how-to/configure-java/manage-memory","h":"#default-options","p":4049},{"i":4059,"t":"Limit and prune trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#limit-and-prune-trie-logs","p":4057},{"i":4061,"t":"Prune outdated trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-outdated-trie-logs","p":4057},{"i":4063,"t":"Troubleshoot","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#troubleshoot","p":4057},{"i":4065,"t":"Prune command for Mainnet","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-command-for-mainnet","p":4057},{"i":4067,"t":"Subcommand not working","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#subcommand-not-working","p":4057},{"i":4069,"t":"Column handle not found for segment TRIE_BRANCH_STORAGE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-trie_branch_storage","p":4057},{"i":4071,"t":"Database not detected","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#database-not-detected","p":4057},{"i":4073,"t":"Cannot store generated private key","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-store-generated-private-key","p":4057},{"i":4075,"t":"Valid keypair not provided","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#valid-keypair-not-provided","p":4057},{"i":4077,"t":"Column handle not found for segment WORLD_STATE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-world_state","p":4057},{"i":4079,"t":"Resource temporarily unavailable","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#resource-temporarily-unavailable","p":4057},{"i":4081,"t":"Unable to change the sync mode","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#unable-to-change-the-sync-mode","p":4057},{"i":4083,"t":"Cannot run trie log prune","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-run-trie-log-prune","p":4057},{"i":4085,"t":"Block does not match stored chain data","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#block-does-not-match-stored-chain-data","p":4057},{"i":4089,"t":"P2P networking","u":"/public-networks/how-to/connect/configure-ports","h":"#p2p-networking","p":4087},{"i":4091,"t":"JSON-RPC API","u":"/public-networks/how-to/connect/configure-ports","h":"#json-rpc-api","p":4087},{"i":4093,"t":"Metrics","u":"/public-networks/how-to/connect/configure-ports","h":"#metrics","p":4087},{"i":4097,"t":"Auto","u":"/public-networks/how-to/connect/specify-nat","h":"#auto","p":4095},{"i":4099,"t":"UPnP","u":"/public-networks/how-to/connect/specify-nat","h":"#upnp","p":4095},{"i":4101,"t":"Kubernetes","u":"/public-networks/how-to/connect/specify-nat","h":"#kubernetes","p":4095},{"i":4103,"t":"Docker","u":"/public-networks/how-to/connect/specify-nat","h":"#docker","p":4095},{"i":4105,"t":"None","u":"/public-networks/how-to/connect/specify-nat","h":"#none","p":4095},{"i":4109,"t":"P2P discovery process","u":"/public-networks/how-to/connect/manage-peers","h":"#p2p-discovery-process","p":4107},{"i":4111,"t":"Limit peers","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-peers","p":4107},{"i":4113,"t":"Allowlist peers","u":"/public-networks/how-to/connect/manage-peers","h":"#allowlist-peers","p":4107},{"i":4115,"t":"Limit remote connections","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-remote-connections","p":4107},{"i":4117,"t":"Monitor peer connections","u":"/public-networks/how-to/connect/manage-peers","h":"#monitor-peer-connections","p":4107},{"i":4119,"t":"List node connections","u":"/public-networks/how-to/connect/manage-peers","h":"#list-node-connections","p":4107},{"i":4121,"t":"Disable discovery","u":"/public-networks/how-to/connect/manage-peers","h":"#disable-discovery","p":4107},{"i":4123,"t":"Troubleshoot","u":"/public-networks/how-to/connect/manage-peers","h":"#troubleshoot","p":4107},{"i":4129,"t":"Private key management","u":"/public-networks/how-to/develop/hardhat","h":"#private-key-management","p":4127},{"i":4130,"t":"Use an HD wallet","u":"/public-networks/how-to/develop/hardhat","h":"#use-an-hd-wallet","p":4127},{"i":4132,"t":"Specify your private key in code","u":"/public-networks/how-to/develop/hardhat","h":"#specify-your-private-key-in-code","p":4127},{"i":4134,"t":"Start a Besu node","u":"/public-networks/how-to/develop/hardhat","h":"#start-a-besu-node","p":4127},{"i":4136,"t":"Deploy a contract","u":"/public-networks/how-to/develop/hardhat","h":"#deploy-a-contract","p":4127},{"i":4142,"t":"Configure static nodes","u":"/public-networks/how-to/connect/static-nodes","h":"#configure-static-nodes","p":4140},{"i":4144,"t":"static-nodes.json file","u":"/public-networks/how-to/connect/static-nodes","h":"#static-nodesjson-file","p":4140},{"i":4148,"t":"Install Prometheus","u":"/public-networks/how-to/monitor/metrics","h":"#install-prometheus","p":4146},{"i":4150,"t":"Set up and run Prometheus with Besu","u":"/public-networks/how-to/monitor/metrics","h":"#set-up-and-run-prometheus-with-besu","p":4146},{"i":4152,"t":"Run Prometheus with Besu in push mode","u":"/public-networks/how-to/monitor/metrics","h":"#run-prometheus-with-besu-in-push-mode","p":4146},{"i":4154,"t":"View Prometheus graphical interface","u":"/public-networks/how-to/monitor/metrics","h":"#view-prometheus-graphical-interface","p":4146},{"i":4156,"t":"View the metrics list","u":"/public-networks/how-to/monitor/metrics","h":"#view-the-metrics-list","p":4146},{"i":4160,"t":"Basic logging","u":"/public-networks/how-to/monitor/logging","h":"#basic-logging","p":4158},{"i":4162,"t":"Advanced logging","u":"/public-networks/how-to/monitor/logging","h":"#advanced-logging","p":4158},{"i":4164,"t":"Log invalid transactions","u":"/public-networks/how-to/monitor/logging","h":"#log-invalid-transactions","p":4158},{"i":4166,"t":"Log rotation","u":"/public-networks/how-to/monitor/logging","h":"#log-rotation","p":4158},{"i":4170,"t":"CPU usage","u":"/public-networks/how-to/monitor/understand-metrics","h":"#cpu-usage","p":4168},{"i":4172,"t":"1. Blocks import and world state download","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-blocks-import-and-world-state-download","p":4168},{"i":4174,"t":"2. World state healing","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-world-state-healing","p":4168},{"i":4176,"t":"3. Blocks import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-blocks-import","p":4168},{"i":4178,"t":"4. Blocks full import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#4-blocks-full-import","p":4168},{"i":4180,"t":"5. Blocks production and propagation","u":"/public-networks/how-to/monitor/understand-metrics","h":"#5-blocks-production-and-propagation","p":4168},{"i":4182,"t":"Block time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#block-time","p":4168},{"i":4184,"t":"1. Block import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-block-import-time","p":4168},{"i":4186,"t":"2. Block full import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-block-full-import-time","p":4168},{"i":4188,"t":"3. Block network time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-block-network-time","p":4168},{"i":4190,"t":"Footnotes","u":"/public-networks/how-to/monitor/understand-metrics","h":"#footnote-label","p":4168},{"i":4194,"t":"Get the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#get-the-evm-tool","p":4192},{"i":4196,"t":"Build from source","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#build-from-source","p":4192},{"i":4198,"t":"Execute with Docker","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#execute-with-docker","p":4192},{"i":4200,"t":"EVM tool options","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#evm-tool-options","p":4192},{"i":4204,"t":"eth_call vs eth_sendRawTransaction","u":"/public-networks/how-to/send-transactions","h":"#eth_call-vs-eth_sendrawtransaction","p":4202},{"i":4206,"t":"Use wallets for key management","u":"/public-networks/how-to/send-transactions","h":"#use-wallets-for-key-management","p":4202},{"i":4212,"t":"Ad-hoc tracing APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#ad-hoc-tracing-apis","p":4210},{"i":4214,"t":"Transaction-trace filtering APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#transaction-trace-filtering-apis","p":4210},{"i":4218,"t":"Peering FAQ","u":"/public-networks/how-to/troubleshoot/peering","h":"#peering-faq","p":4216},{"i":4219,"t":"\"Why can’t I find enough peers to sync?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#why-cant-i-find-enough-peers-to-sync","p":4216},{"i":4221,"t":"\"What network or router/modem settings should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#what-network-or-routermodem-settings-should-i-check","p":4216},{"i":4223,"t":"\"Which URLs should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#which-urls-should-i-check","p":4216},{"i":4225,"t":"\"How do I open/forward my ports?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-openforward-my-ports","p":4216},{"i":4227,"t":"\"How do I test that my ports are open?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-test-that-my-ports-are-open","p":4216},{"i":4229,"t":"\"What's the ideal number of peers for Besu?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-ideal-number-of-peers-for-besu","p":4216},{"i":4231,"t":"\"What's the benefit of increasing the number of peers?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-benefit-of-increasing-the-number-of-peers","p":4216},{"i":4233,"t":"Metrics","u":"/public-networks/how-to/troubleshoot/peering","h":"#metrics","p":4216},{"i":4237,"t":"Ansible","u":"/public-networks/how-to/upgrade-node","h":"#ansible","p":4235},{"i":4239,"t":"Find peers on restarting","u":"/public-networks/how-to/upgrade-node","h":"#find-peers-on-restarting","p":4235},{"i":4243,"t":"Enable API access","u":"/public-networks/how-to/use-besu-api","h":"#enable-api-access","p":4241},{"i":4245,"t":"Service hosts","u":"/public-networks/how-to/use-besu-api","h":"#service-hosts","p":4241},{"i":4247,"t":"Service ports","u":"/public-networks/how-to/use-besu-api","h":"#service-ports","p":4241},{"i":4249,"t":"Socket path","u":"/public-networks/how-to/use-besu-api","h":"#socket-path","p":4241},{"i":4251,"t":"Host allowlist","u":"/public-networks/how-to/use-besu-api","h":"#host-allowlist","p":4241},{"i":4253,"t":"Not supported by Besu","u":"/public-networks/how-to/use-besu-api","h":"#not-supported-by-besu","p":4241},{"i":4254,"t":"Account management","u":"/public-networks/how-to/use-besu-api","h":"#account-management","p":4241},{"i":4256,"t":"Protocols","u":"/public-networks/how-to/use-besu-api","h":"#protocols","p":4241},{"i":4260,"t":"Create a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#create-a-filter","p":4258},{"i":4262,"t":"Poll a filter for changes","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#poll-a-filter-for-changes","p":4258},{"i":4264,"t":"Get all logs for a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-all-logs-for-a-filter","p":4258},{"i":4266,"t":"Uninstall a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#uninstall-a-filter","p":4258},{"i":4268,"t":"Filters for private contracts","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#filters-for-private-contracts","p":4258},{"i":4270,"t":"Get logs using a filter options object","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-logs-using-a-filter-options-object","p":4258},{"i":4274,"t":"GraphQL requests with cURL","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-curl","p":4272},{"i":4276,"t":"GraphQL requests with GraphiQL app","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-graphiql-app","p":4272},{"i":4278,"t":"Pending","u":"/public-networks/how-to/use-besu-api/graphql","h":"#pending","p":4272},{"i":4282,"t":"Username and password authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#username-and-password-authentication","p":4280},{"i":4284,"t":"1. Create the credentials file","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-create-the-credentials-file","p":4280},{"i":4286,"t":"2. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-enable-authentication","p":4280},{"i":4288,"t":"3. Generate an authentication token","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-generate-an-authentication-token","p":4280},{"i":4290,"t":"JWT public key authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#jwt-public-key-authentication","p":4280},{"i":4292,"t":"1. Generate a private and public key pair","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-generate-a-private-and-public-key-pair","p":4280},{"i":4294,"t":"2. Create the JWT","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-create-the-jwt","p":4280},{"i":4296,"t":"3. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-enable-authentication","p":4280},{"i":4298,"t":"JSON-RPC permissions","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#json-rpc-permissions","p":4280},{"i":4300,"t":"Use an authentication token to make requests","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#use-an-authentication-token-to-make-requests","p":4280},{"i":4302,"t":"Postman","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#postman","p":4280},{"i":4304,"t":"cURL","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#curl","p":4280},{"i":4306,"t":"Footnotes","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#footnote-label","p":4280},{"i":4310,"t":"Geth console","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#geth-console","p":4308},{"i":4312,"t":"JSON-RPC authentication","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#json-rpc-authentication","p":4308},{"i":4314,"t":"HTTP and WebSocket requests","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#http-and-websocket-requests","p":4308},{"i":4315,"t":"HTTP","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#http","p":4308},{"i":4317,"t":"WebSocket","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#websocket","p":4308},{"i":4319,"t":"Readiness and liveness endpoints","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness-and-liveness-endpoints","p":4308},{"i":4321,"t":"Readiness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness","p":4308},{"i":4323,"t":"Liveness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#liveness","p":4308},{"i":4325,"t":"API methods enabled by default","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#api-methods-enabled-by-default","p":4308},{"i":4327,"t":"Block parameter","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#block-parameter","p":4308},{"i":4331,"t":"Configure the Engine API","u":"/public-networks/how-to/use-engine-api","h":"#configure-the-engine-api","p":4329},{"i":4333,"t":"Service ports","u":"/public-networks/how-to/use-engine-api","h":"#service-ports","p":4329},{"i":4335,"t":"Host allowlist","u":"/public-networks/how-to/use-engine-api","h":"#host-allowlist","p":4329},{"i":4337,"t":"Authentication","u":"/public-networks/how-to/use-engine-api","h":"#authentication","p":4329},{"i":4339,"t":"Send a payload using the Engine API","u":"/public-networks/how-to/use-engine-api","h":"#send-a-payload-using-the-engine-api","p":4329},{"i":4340,"t":"1. Prepare a payload","u":"/public-networks/how-to/use-engine-api","h":"#1-prepare-a-payload","p":4329},{"i":4342,"t":"2. Get the payload","u":"/public-networks/how-to/use-engine-api","h":"#2-get-the-payload","p":4329},{"i":4344,"t":"3. Execute the payload","u":"/public-networks/how-to/use-engine-api","h":"#3-execute-the-payload","p":4329},{"i":4346,"t":"4. Update the fork choice","u":"/public-networks/how-to/use-engine-api","h":"#4-update-the-fork-choice","p":4329},{"i":4350,"t":"Configure CPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-cpu-mining","p":4348},{"i":4352,"t":"Configure GPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-gpu-mining","p":4348},{"i":4354,"t":"Mining APIs","u":"/public-networks/how-to/use-pow/mining","h":"#mining-apis","p":4348},{"i":4356,"t":"Troubleshoot","u":"/public-networks/how-to/use-pow/mining","h":"#troubleshoot","p":4348},{"i":4357,"t":"Check block creation","u":"/public-networks/how-to/use-pow/mining","h":"#check-block-creation","p":4348},{"i":4359,"t":"No mined transactions","u":"/public-networks/how-to/use-pow/mining","h":"#no-mined-transactions","p":4348},{"i":4362,"t":"Introduction","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#introduction","p":4361},{"i":4364,"t":"Use RPC Pub/Sub","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#use-rpc-pubsub","p":4361},{"i":4366,"t":"Subscription ID","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscription-id","p":4361},{"i":4368,"t":"Notifications when synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#notifications-when-synchronizing","p":4361},{"i":4370,"t":"Subscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscribe","p":4361},{"i":4372,"t":"New headers","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#new-headers","p":4361},{"i":4374,"t":"Logs","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#logs","p":4361},{"i":4376,"t":"Pending transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#pending-transactions","p":4361},{"i":4378,"t":"Dropped transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#dropped-transactions","p":4361},{"i":4380,"t":"Synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#synchronizing","p":4361},{"i":4382,"t":"Unsubscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#unsubscribe","p":4361},{"i":4386,"t":"Block object","u":"/public-networks/reference/api/objects","h":"#block-object","p":4384},{"i":4388,"t":"Fee history results object","u":"/public-networks/reference/api/objects","h":"#fee-history-results-object","p":4384},{"i":4390,"t":"Filter options object","u":"/public-networks/reference/api/objects","h":"#filter-options-object","p":4384},{"i":4392,"t":"Log object","u":"/public-networks/reference/api/objects","h":"#log-object","p":4384},{"i":4394,"t":"Miner data object","u":"/public-networks/reference/api/objects","h":"#miner-data-object","p":4384},{"i":4396,"t":"Pending transaction object","u":"/public-networks/reference/api/objects","h":"#pending-transaction-object","p":4384},{"i":4398,"t":"Range object","u":"/public-networks/reference/api/objects","h":"#range-object","p":4384},{"i":4400,"t":"Structured log object","u":"/public-networks/reference/api/objects","h":"#structured-log-object","p":4384},{"i":4402,"t":"Trace object","u":"/public-networks/reference/api/objects","h":"#trace-object","p":4384},{"i":4404,"t":"Trace filter options object","u":"/public-networks/reference/api/objects","h":"#trace-filter-options-object","p":4384},{"i":4406,"t":"Transaction object","u":"/public-networks/reference/api/objects","h":"#transaction-object","p":4384},{"i":4408,"t":"Transaction call object","u":"/public-networks/reference/api/objects","h":"#transaction-call-object","p":4384},{"i":4410,"t":"Transaction receipt object","u":"/public-networks/reference/api/objects","h":"#transaction-receipt-object","p":4384},{"i":4412,"t":"Transaction trace object","u":"/public-networks/reference/api/objects","h":"#transaction-trace-object","p":4384},{"i":4416,"t":"blocks","u":"/public-networks/reference/cli/subcommands","h":"#blocks","p":4414},{"i":4418,"t":"import","u":"/public-networks/reference/cli/subcommands","h":"#import","p":4414},{"i":4420,"t":"export","u":"/public-networks/reference/cli/subcommands","h":"#export","p":4414},{"i":4422,"t":"operator","u":"/public-networks/reference/cli/subcommands","h":"#operator","p":4414},{"i":4424,"t":"generate-log-bloom-cache","u":"/public-networks/reference/cli/subcommands","h":"#generate-log-bloom-cache","p":4414},{"i":4426,"t":"password","u":"/public-networks/reference/cli/subcommands","h":"#password","p":4414},{"i":4428,"t":"hash","u":"/public-networks/reference/cli/subcommands","h":"#hash","p":4414},{"i":4430,"t":"public-key","u":"/public-networks/reference/cli/subcommands","h":"#public-key","p":4414},{"i":4432,"t":"export","u":"/public-networks/reference/cli/subcommands","h":"#export-1","p":4414},{"i":4434,"t":"export-address","u":"/public-networks/reference/cli/subcommands","h":"#export-address","p":4414},{"i":4436,"t":"retesteth","u":"/public-networks/reference/cli/subcommands","h":"#retesteth","p":4414},{"i":4438,"t":"storage","u":"/public-networks/reference/cli/subcommands","h":"#storage","p":4414},{"i":4440,"t":"revert-metadata","u":"/public-networks/reference/cli/subcommands","h":"#revert-metadata","p":4414},{"i":4442,"t":"revert-variables","u":"/public-networks/reference/cli/subcommands","h":"#revert-variables","p":4414},{"i":4444,"t":"rocksdb usage","u":"/public-networks/reference/cli/subcommands","h":"#rocksdb-usage","p":4414},{"i":4446,"t":"trie-log","u":"/public-networks/reference/cli/subcommands","h":"#trie-log","p":4414},{"i":4448,"t":"validate-config","u":"/public-networks/reference/cli/subcommands","h":"#validate-config","p":4414},{"i":4454,"t":"Options","u":"/public-networks/reference/evm-tool","h":"#options","p":4452},{"i":4455,"t":"code","u":"/public-networks/reference/evm-tool","h":"#code","p":4452},{"i":4457,"t":"gas","u":"/public-networks/reference/evm-tool","h":"#gas","p":4452},{"i":4459,"t":"price","u":"/public-networks/reference/evm-tool","h":"#price","p":4452},{"i":4461,"t":"sender","u":"/public-networks/reference/evm-tool","h":"#sender","p":4452},{"i":4463,"t":"receiver","u":"/public-networks/reference/evm-tool","h":"#receiver","p":4452},{"i":4465,"t":"input","u":"/public-networks/reference/evm-tool","h":"#input","p":4452},{"i":4467,"t":"value","u":"/public-networks/reference/evm-tool","h":"#value","p":4452},{"i":4469,"t":"json, trace","u":"/public-networks/reference/evm-tool","h":"#json-trace","p":4452},{"i":4471,"t":"json-alloc","u":"/public-networks/reference/evm-tool","h":"#json-alloc","p":4452},{"i":4473,"t":"[no]memory, trace.[no]memory","u":"/public-networks/reference/evm-tool","h":"#nomemory-tracenomemory","p":4452},{"i":4475,"t":"trace.[no]stack","u":"/public-networks/reference/evm-tool","h":"#tracenostack","p":4452},{"i":4477,"t":"trace.[no]returndata","u":"/public-networks/reference/evm-tool","h":"#tracenoreturndata","p":4452},{"i":4479,"t":"[no]time","u":"/public-networks/reference/evm-tool","h":"#notime","p":4452},{"i":4481,"t":"genesis","u":"/public-networks/reference/evm-tool","h":"#genesis","p":4452},{"i":4483,"t":"chain","u":"/public-networks/reference/evm-tool","h":"#chain","p":4452},{"i":4485,"t":"repeat","u":"/public-networks/reference/evm-tool","h":"#repeat","p":4452},{"i":4487,"t":"revert-reason-enabled","u":"/public-networks/reference/evm-tool","h":"#revert-reason-enabled","p":4452},{"i":4489,"t":"fork","u":"/public-networks/reference/evm-tool","h":"#fork","p":4452},{"i":4491,"t":"key-value-storage","u":"/public-networks/reference/evm-tool","h":"#key-value-storage","p":4452},{"i":4493,"t":"data-path","u":"/public-networks/reference/evm-tool","h":"#data-path","p":4452},{"i":4495,"t":"block-number","u":"/public-networks/reference/evm-tool","h":"#block-number","p":4452},{"i":4497,"t":"version","u":"/public-networks/reference/evm-tool","h":"#version","p":4452},{"i":4499,"t":"Subcommands","u":"/public-networks/reference/evm-tool","h":"#subcommands","p":4452},{"i":4501,"t":"code-validate","u":"/public-networks/reference/evm-tool","h":"#code-validate","p":4452},{"i":4503,"t":"state-test","u":"/public-networks/reference/evm-tool","h":"#state-test","p":4452},{"i":4505,"t":"transition, t8n, t8n-server","u":"/public-networks/reference/evm-tool","h":"#transition-t8n-t8n-server","p":4452},{"i":4509,"t":"Execution payload object","u":"/public-networks/reference/engine-api/objects","h":"#execution-payload-object","p":4507},{"i":4511,"t":"Fork choice state object","u":"/public-networks/reference/engine-api/objects","h":"#fork-choice-state-object","p":4507},{"i":4513,"t":"Payload attributes object","u":"/public-networks/reference/engine-api/objects","h":"#payload-attributes-object","p":4507},{"i":4515,"t":"Payload status object","u":"/public-networks/reference/engine-api/objects","h":"#payload-status-object","p":4507},{"i":4517,"t":"Transition configuration object","u":"/public-networks/reference/engine-api/objects","h":"#transition-configuration-object","p":4507},{"i":4521,"t":"Methods","u":"/public-networks/reference/engine-api","h":"#methods","p":4519},{"i":4522,"t":"engine_exchangeCapabilities","u":"/public-networks/reference/engine-api","h":"#engine_exchangecapabilities","p":4519},{"i":4524,"t":"engine_exchangeTransitionConfigurationV1","u":"/public-networks/reference/engine-api","h":"#engine_exchangetransitionconfigurationv1","p":4519},{"i":4526,"t":"engine_forkchoiceUpdatedV1","u":"/public-networks/reference/engine-api","h":"#engine_forkchoiceupdatedv1","p":4519},{"i":4528,"t":"engine_getPayloadBodiesByHashV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyhashv1","p":4519},{"i":4530,"t":"engine_getPayloadBodiesByRangeV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyrangev1","p":4519},{"i":4532,"t":"engine_getPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadv1","p":4519},{"i":4534,"t":"engine_newPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_newpayloadv1","p":4519},{"i":4538,"t":"Configuration items","u":"/public-networks/reference/genesis-items","h":"#configuration-items","p":4536},{"i":4540,"t":"Genesis block parameters","u":"/public-networks/reference/genesis-items","h":"#genesis-block-parameters","p":4536},{"i":4542,"t":"Milestone blocks","u":"/public-networks/reference/genesis-items","h":"#milestone-blocks","p":4536},{"i":4544,"t":"Fixed difficulty","u":"/public-networks/reference/genesis-items","h":"#fixed-difficulty","p":4536},{"i":4546,"t":"Discovery configuration items","u":"/public-networks/reference/genesis-items","h":"#discovery-configuration-items","p":4536},{"i":4550,"t":"trace","u":"/public-networks/reference/trace-types","h":"#trace","p":4548},{"i":4552,"t":"vmTrace","u":"/public-networks/reference/trace-types","h":"#vmtrace","p":4548},{"i":4554,"t":"stateDiff","u":"/public-networks/reference/trace-types","h":"#statediff","p":4548},{"i":4556,"t":"Applicable API methods","u":"/public-networks/reference/trace-types","h":"#applicable-api-methods","p":4548},{"i":4560,"t":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#1-install-besu-and-teku","p":4558},{"i":4562,"t":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#2-generate-the-shared-secret","p":4558},{"i":4564,"t":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#3-generate-validator-keys","p":4558},{"i":4566,"t":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#4-start-besu","p":4558},{"i":4568,"t":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#5-start-teku","p":4558},{"i":4570,"t":"Beacon node only","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-only","p":4558},{"i":4572,"t":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-and-validator-client","p":4558},{"i":4574,"t":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#6-wait-for-besu-and-teku-to-sync","p":4558},{"i":4576,"t":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#7-stake-eth","p":4558},{"i":4580,"t":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#1-install-besu-and-teku","p":4578},{"i":4582,"t":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-testnet","h":"#2-generate-the-shared-secret","p":4578},{"i":4584,"t":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-testnet","h":"#3-generate-validator-keys","p":4578},{"i":4586,"t":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-testnet","h":"#4-start-besu","p":4578},{"i":4588,"t":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#5-start-teku","p":4578},{"i":4590,"t":"Beacon node only","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-only","p":4578},{"i":4592,"t":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-and-validator-client","p":4578},{"i":4594,"t":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-testnet","h":"#6-wait-for-besu-and-teku-to-sync","p":4578},{"i":4596,"t":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-testnet","h":"#7-stake-eth","p":4578},{"i":4599,"t":"Block explorers","u":"/public-networks/reference/projects-using-besu","h":"#block-explorers","p":4598},{"i":4603,"t":"AWS EKS","u":"/public-networks/tutorials/kubernetes","h":"#aws-eks","p":4601},{"i":4604,"t":"Prerequisites","u":"/public-networks/tutorials/kubernetes","h":"#prerequisites","p":4601},{"i":4606,"t":"Steps","u":"/public-networks/tutorials/kubernetes","h":"#steps","p":4601},{"i":4608,"t":"Azure AKS","u":"/public-networks/tutorials/kubernetes","h":"#azure-aks","p":4601},{"i":4612,"t":"Specify options","u":"/public-networks/reference/cli/options","h":"#specify-options","p":4610},{"i":4614,"t":"api-gas-price-blocks","u":"/public-networks/reference/cli/options","h":"#api-gas-price-blocks","p":4610},{"i":4616,"t":"api-gas-price-max","u":"/public-networks/reference/cli/options","h":"#api-gas-price-max","p":4610},{"i":4618,"t":"api-gas-price-percentile","u":"/public-networks/reference/cli/options","h":"#api-gas-price-percentile","p":4610},{"i":4620,"t":"auto-log-bloom-caching-enabled","u":"/public-networks/reference/cli/options","h":"#auto-log-bloom-caching-enabled","p":4610},{"i":4622,"t":"banned-node-ids","u":"/public-networks/reference/cli/options","h":"#banned-node-ids","p":4610},{"i":4624,"t":"block-txs-selection-max-time","u":"/public-networks/reference/cli/options","h":"#block-txs-selection-max-time","p":4610},{"i":4626,"t":"bonsai-historical-block-limit","u":"/public-networks/reference/cli/options","h":"#bonsai-historical-block-limit","p":4610},{"i":4628,"t":"bonsai-limit-trie-logs-enabled","u":"/public-networks/reference/cli/options","h":"#bonsai-limit-trie-logs-enabled","p":4610},{"i":4630,"t":"bonsai-trie-logs-pruning-window-size","u":"/public-networks/reference/cli/options","h":"#bonsai-trie-logs-pruning-window-size","p":4610},{"i":4632,"t":"bootnodes","u":"/public-networks/reference/cli/options","h":"#bootnodes","p":4610},{"i":4634,"t":"cache-last-blocks","u":"/public-networks/reference/cli/options","h":"#cache-last-blocks","p":4610},{"i":4636,"t":"color-enabled","u":"/public-networks/reference/cli/options","h":"#color-enabled","p":4610},{"i":4638,"t":"compatibility-eth64-forkid-enabled","u":"/public-networks/reference/cli/options","h":"#compatibility-eth64-forkid-enabled","p":4610},{"i":4640,"t":"config-file","u":"/public-networks/reference/cli/options","h":"#config-file","p":4610},{"i":4642,"t":"data-path","u":"/public-networks/reference/cli/options","h":"#data-path","p":4610},{"i":4644,"t":"data-storage-format","u":"/public-networks/reference/cli/options","h":"#data-storage-format","p":4610},{"i":4646,"t":"discovery-dns-url","u":"/public-networks/reference/cli/options","h":"#discovery-dns-url","p":4610},{"i":4648,"t":"discovery-enabled","u":"/public-networks/reference/cli/options","h":"#discovery-enabled","p":4610},{"i":4650,"t":"engine-host-allowlist","u":"/public-networks/reference/cli/options","h":"#engine-host-allowlist","p":4610},{"i":4652,"t":"engine-jwt-disabled","u":"/public-networks/reference/cli/options","h":"#engine-jwt-disabled","p":4610},{"i":4654,"t":"engine-jwt-secret","u":"/public-networks/reference/cli/options","h":"#engine-jwt-secret","p":4610},{"i":4656,"t":"engine-rpc-enabled","u":"/public-networks/reference/cli/options","h":"#engine-rpc-enabled","p":4610},{"i":4658,"t":"engine-rpc-port","u":"/public-networks/reference/cli/options","h":"#engine-rpc-port","p":4610},{"i":4660,"t":"ethstats","u":"/public-networks/reference/cli/options","h":"#ethstats","p":4610},{"i":4662,"t":"ethstats-cacert-file","u":"/public-networks/reference/cli/options","h":"#ethstats-cacert-file","p":4610},{"i":4664,"t":"ethstats-contact","u":"/public-networks/reference/cli/options","h":"#ethstats-contact","p":4610},{"i":4666,"t":"genesis-file","u":"/public-networks/reference/cli/options","h":"#genesis-file","p":4610},{"i":4668,"t":"genesis-state-hash-cache-enabled","u":"/public-networks/reference/cli/options","h":"#genesis-state-hash-cache-enabled","p":4610},{"i":4670,"t":"graphql-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#graphql-http-cors-origins","p":4610},{"i":4672,"t":"graphql-http-enabled","u":"/public-networks/reference/cli/options","h":"#graphql-http-enabled","p":4610},{"i":4674,"t":"graphql-http-host","u":"/public-networks/reference/cli/options","h":"#graphql-http-host","p":4610},{"i":4676,"t":"graphql-http-port","u":"/public-networks/reference/cli/options","h":"#graphql-http-port","p":4610},{"i":4678,"t":"help","u":"/public-networks/reference/cli/options","h":"#help","p":4610},{"i":4680,"t":"host-allowlist","u":"/public-networks/reference/cli/options","h":"#host-allowlist","p":4610},{"i":4682,"t":"identity","u":"/public-networks/reference/cli/options","h":"#identity","p":4610},{"i":4684,"t":"json-pretty-print-enabled","u":"/public-networks/reference/cli/options","h":"#json-pretty-print-enabled","p":4610},{"i":4686,"t":"key-value-storage","u":"/public-networks/reference/cli/options","h":"#key-value-storage","p":4610},{"i":4688,"t":"kzg-trusted-setup","u":"/public-networks/reference/cli/options","h":"#kzg-trusted-setup","p":4610},{"i":4690,"t":"logging","u":"/public-networks/reference/cli/options","h":"#logging","p":4610},{"i":4692,"t":"max-peers","u":"/public-networks/reference/cli/options","h":"#max-peers","p":4610},{"i":4694,"t":"metrics-category","u":"/public-networks/reference/cli/options","h":"#metrics-category","p":4610},{"i":4696,"t":"metrics-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-enabled","p":4610},{"i":4698,"t":"metrics-host","u":"/public-networks/reference/cli/options","h":"#metrics-host","p":4610},{"i":4700,"t":"metrics-port","u":"/public-networks/reference/cli/options","h":"#metrics-port","p":4610},{"i":4702,"t":"metrics-protocol","u":"/public-networks/reference/cli/options","h":"#metrics-protocol","p":4610},{"i":4704,"t":"metrics-push-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-push-enabled","p":4610},{"i":4706,"t":"metrics-push-host","u":"/public-networks/reference/cli/options","h":"#metrics-push-host","p":4610},{"i":4708,"t":"metrics-push-interval","u":"/public-networks/reference/cli/options","h":"#metrics-push-interval","p":4610},{"i":4710,"t":"metrics-push-port","u":"/public-networks/reference/cli/options","h":"#metrics-push-port","p":4610},{"i":4712,"t":"metrics-push-prometheus-job","u":"/public-networks/reference/cli/options","h":"#metrics-push-prometheus-job","p":4610},{"i":4714,"t":"min-block-occupancy-ratio","u":"/public-networks/reference/cli/options","h":"#min-block-occupancy-ratio","p":4610},{"i":4716,"t":"min-gas-price","u":"/public-networks/reference/cli/options","h":"#min-gas-price","p":4610},{"i":4718,"t":"min-priority-fee","u":"/public-networks/reference/cli/options","h":"#min-priority-fee","p":4610},{"i":4720,"t":"miner-coinbase","u":"/public-networks/reference/cli/options","h":"#miner-coinbase","p":4610},{"i":4722,"t":"miner-enabled","u":"/public-networks/reference/cli/options","h":"#miner-enabled","p":4610},{"i":4724,"t":"miner-extra-data","u":"/public-networks/reference/cli/options","h":"#miner-extra-data","p":4610},{"i":4726,"t":"miner-stratum-enabled","u":"/public-networks/reference/cli/options","h":"#miner-stratum-enabled","p":4610},{"i":4728,"t":"miner-stratum-host","u":"/public-networks/reference/cli/options","h":"#miner-stratum-host","p":4610},{"i":4730,"t":"miner-stratum-port","u":"/public-networks/reference/cli/options","h":"#miner-stratum-port","p":4610},{"i":4732,"t":"nat-method","u":"/public-networks/reference/cli/options","h":"#nat-method","p":4610},{"i":4734,"t":"net-restrict","u":"/public-networks/reference/cli/options","h":"#net-restrict","p":4610},{"i":4736,"t":"network","u":"/public-networks/reference/cli/options","h":"#network","p":4610},{"i":4738,"t":"network-id","u":"/public-networks/reference/cli/options","h":"#network-id","p":4610},{"i":4740,"t":"node-private-key-file","u":"/public-networks/reference/cli/options","h":"#node-private-key-file","p":4610},{"i":4742,"t":"p2p-enabled","u":"/public-networks/reference/cli/options","h":"#p2p-enabled","p":4610},{"i":4744,"t":"p2p-host","u":"/public-networks/reference/cli/options","h":"#p2p-host","p":4610},{"i":4746,"t":"p2p-interface","u":"/public-networks/reference/cli/options","h":"#p2p-interface","p":4610},{"i":4748,"t":"p2p-port","u":"/public-networks/reference/cli/options","h":"#p2p-port","p":4610},{"i":4750,"t":"profile","u":"/public-networks/reference/cli/options","h":"#profile","p":4610},{"i":4752,"t":"random-peer-priority-enabled","u":"/public-networks/reference/cli/options","h":"#random-peer-priority-enabled","p":4610},{"i":4754,"t":"receipt-compaction-enabled","u":"/public-networks/reference/cli/options","h":"#receipt-compaction-enabled","p":4610},{"i":4756,"t":"remote-connections-limit-enabled","u":"/public-networks/reference/cli/options","h":"#remote-connections-limit-enabled","p":4610},{"i":4758,"t":"remote-connections-max-percentage","u":"/public-networks/reference/cli/options","h":"#remote-connections-max-percentage","p":4610},{"i":4760,"t":"reorg-logging-threshold","u":"/public-networks/reference/cli/options","h":"#reorg-logging-threshold","p":4610},{"i":4762,"t":"required-block","u":"/public-networks/reference/cli/options","h":"#required-block","p":4610},{"i":4764,"t":"revert-reason-enabled","u":"/public-networks/reference/cli/options","h":"#revert-reason-enabled","p":4610},{"i":4766,"t":"rpc-gas-cap","u":"/public-networks/reference/cli/options","h":"#rpc-gas-cap","p":4610},{"i":4768,"t":"rpc-http-api","u":"/public-networks/reference/cli/options","h":"#rpc-http-api","p":4610},{"i":4770,"t":"rpc-http-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-http-api-methods-no-auth","p":4610},{"i":4772,"t":"rpc-http-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-credentials-file","p":4610},{"i":4774,"t":"rpc-http-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-enabled","p":4610},{"i":4776,"t":"rpc-http-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-algorithm","p":4610},{"i":4778,"t":"rpc-http-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-public-key-file","p":4610},{"i":4780,"t":"rpc-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#rpc-http-cors-origins","p":4610},{"i":4782,"t":"rpc-http-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-enabled","p":4610},{"i":4784,"t":"rpc-http-host","u":"/public-networks/reference/cli/options","h":"#rpc-http-host","p":4610},{"i":4786,"t":"rpc-http-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-active-connections","p":4610},{"i":4788,"t":"rpc-http-max-request-content-length","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-request-content-length","p":4610},{"i":4790,"t":"rpc-http-max-batch-size","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-batch-size","p":4610},{"i":4792,"t":"rpc-http-port","u":"/public-networks/reference/cli/options","h":"#rpc-http-port","p":4610},{"i":4794,"t":"rpc-http-tls-ca-clients-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-ca-clients-enabled","p":4610},{"i":4796,"t":"rpc-http-tls-client-auth-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-client-auth-enabled","p":4610},{"i":4798,"t":"rpc-http-tls-cipher-suite","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-cipher-suite","p":4610},{"i":4800,"t":"rpc-http-tls-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-enabled","p":4610},{"i":4802,"t":"rpc-http-tls-keystore-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-file","p":4610},{"i":4804,"t":"rpc-http-tls-keystore-password-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-password-file","p":4610},{"i":4806,"t":"rpc-http-tls-known-clients-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-known-clients-file","p":4610},{"i":4808,"t":"rpc-http-tls-protocol","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-protocol","p":4610},{"i":4810,"t":"rpc-max-logs-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-logs-range","p":4610},{"i":4812,"t":"rpc-max-trace-filter-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-trace-filter-range","p":4610},{"i":4814,"t":"rpc-tx-feecap","u":"/public-networks/reference/cli/options","h":"#rpc-tx-feecap","p":4610},{"i":4816,"t":"rpc-ws-api","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api","p":4610},{"i":4818,"t":"rpc-ws-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api-methods-no-auth","p":4610},{"i":4820,"t":"rpc-ws-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-credentials-file","p":4610},{"i":4822,"t":"rpc-ws-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-enabled","p":4610},{"i":4824,"t":"rpc-ws-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-algorithm","p":4610},{"i":4826,"t":"rpc-ws-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-public-key-file","p":4610},{"i":4828,"t":"rpc-ws-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-enabled","p":4610},{"i":4830,"t":"rpc-ws-host","u":"/public-networks/reference/cli/options","h":"#rpc-ws-host","p":4610},{"i":4832,"t":"rpc-ws-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-active-connections","p":4610},{"i":4834,"t":"rpc-ws-max-frame-size","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-frame-size","p":4610},{"i":4836,"t":"rpc-ws-port","u":"/public-networks/reference/cli/options","h":"#rpc-ws-port","p":4610},{"i":4838,"t":"security-module","u":"/public-networks/reference/cli/options","h":"#security-module","p":4610},{"i":4840,"t":"static-nodes-file","u":"/public-networks/reference/cli/options","h":"#static-nodes-file","p":4610},{"i":4842,"t":"strict-tx-replay-protection-enabled","u":"/public-networks/reference/cli/options","h":"#strict-tx-replay-protection-enabled","p":4610},{"i":4844,"t":"sync-min-peers, fast-sync-min-peers","u":"/public-networks/reference/cli/options","h":"#sync-min-peers-fast-sync-min-peers","p":4610},{"i":4846,"t":"sync-mode","u":"/public-networks/reference/cli/options","h":"#sync-mode","p":4610},{"i":4848,"t":"target-gas-limit","u":"/public-networks/reference/cli/options","h":"#target-gas-limit","p":4610},{"i":4850,"t":"tx-pool","u":"/public-networks/reference/cli/options","h":"#tx-pool","p":4610},{"i":4852,"t":"tx-pool-blob-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-blob-price-bump","p":4610},{"i":4854,"t":"tx-pool-enable-save-restore","u":"/public-networks/reference/cli/options","h":"#tx-pool-enable-save-restore","p":4610},{"i":4856,"t":"tx-pool-layer-max-capacity","u":"/public-networks/reference/cli/options","h":"#tx-pool-layer-max-capacity","p":4610},{"i":4858,"t":"tx-pool-limit-by-account-percentage","u":"/public-networks/reference/cli/options","h":"#tx-pool-limit-by-account-percentage","p":4610},{"i":4860,"t":"tx-pool-max-future-by-sender","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-future-by-sender","p":4610},{"i":4862,"t":"tx-pool-max-prioritized","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized","p":4610},{"i":4864,"t":"tx-pool-max-prioritized-by-type","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized-by-type","p":4610},{"i":4866,"t":"tx-pool-max-size","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-size","p":4610},{"i":4868,"t":"tx-pool-min-gas-price","u":"/public-networks/reference/cli/options","h":"#tx-pool-min-gas-price","p":4610},{"i":4870,"t":"tx-pool-no-local-priority","u":"/public-networks/reference/cli/options","h":"#tx-pool-no-local-priority","p":4610},{"i":4872,"t":"tx-pool-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-price-bump","p":4610},{"i":4874,"t":"tx-pool-priority-senders","u":"/public-networks/reference/cli/options","h":"#tx-pool-priority-senders","p":4610},{"i":4876,"t":"tx-pool-retention-hours","u":"/public-networks/reference/cli/options","h":"#tx-pool-retention-hours","p":4610},{"i":4878,"t":"tx-pool-save-file","u":"/public-networks/reference/cli/options","h":"#tx-pool-save-file","p":4610},{"i":4880,"t":"version","u":"/public-networks/reference/cli/options","h":"#version","p":4610},{"i":4882,"t":"version-compatibility-protection","u":"/public-networks/reference/cli/options","h":"#version-compatibility-protection","p":4610},{"i":4884,"t":"Xhelp","u":"/public-networks/reference/cli/options","h":"#xhelp","p":4610},{"i":4888,"t":"ADMIN methods","u":"/public-networks/reference/api","h":"#admin-methods","p":4886},{"i":4890,"t":"admin_addPeer","u":"/public-networks/reference/api","h":"#admin_addpeer","p":4886},{"i":4892,"t":"admin_changeLogLevel","u":"/public-networks/reference/api","h":"#admin_changeloglevel","p":4886},{"i":4894,"t":"admin_generateLogBloomCache","u":"/public-networks/reference/api","h":"#admin_generatelogbloomcache","p":4886},{"i":4896,"t":"admin_logsRemoveCache","u":"/public-networks/reference/api","h":"#admin_logsremovecache","p":4886},{"i":4898,"t":"admin_logsRepairCache","u":"/public-networks/reference/api","h":"#admin_logsrepaircache","p":4886},{"i":4900,"t":"admin_nodeInfo","u":"/public-networks/reference/api","h":"#admin_nodeinfo","p":4886},{"i":4902,"t":"admin_peers","u":"/public-networks/reference/api","h":"#admin_peers","p":4886},{"i":4904,"t":"admin_removePeer","u":"/public-networks/reference/api","h":"#admin_removepeer","p":4886},{"i":4906,"t":"DEBUG methods","u":"/public-networks/reference/api","h":"#debug-methods","p":4886},{"i":4908,"t":"debug_accountAt","u":"/public-networks/reference/api","h":"#debug_accountat","p":4886},{"i":4910,"t":"debug_accountRange","u":"/public-networks/reference/api","h":"#debug_accountrange","p":4886},{"i":4912,"t":"debug_batchSendRawTransaction","u":"/public-networks/reference/api","h":"#debug_batchsendrawtransaction","p":4886},{"i":4914,"t":"debug_getBadBlocks","u":"/public-networks/reference/api","h":"#debug_getbadblocks","p":4886},{"i":4916,"t":"debug_getRawBlock","u":"/public-networks/reference/api","h":"#debug_getrawblock","p":4886},{"i":4918,"t":"debug_getRawHeader","u":"/public-networks/reference/api","h":"#debug_getrawheader","p":4886},{"i":4920,"t":"debug_getRawReceipts","u":"/public-networks/reference/api","h":"#debug_getrawreceipts","p":4886},{"i":4922,"t":"debug_getRawTransaction","u":"/public-networks/reference/api","h":"#debug_getrawtransaction","p":4886},{"i":4924,"t":"debug_metrics","u":"/public-networks/reference/api","h":"#debug_metrics","p":4886},{"i":4926,"t":"debug_replayBlock","u":"/public-networks/reference/api","h":"#debug_replayblock","p":4886},{"i":4928,"t":"debug_resyncWorldState","u":"/public-networks/reference/api","h":"#debug_resyncworldstate","p":4886},{"i":4930,"t":"debug_setHead","u":"/public-networks/reference/api","h":"#debug_sethead","p":4886},{"i":4932,"t":"debug_standardTraceBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtraceblocktofile","p":4886},{"i":4934,"t":"debug_standardTraceBadBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtracebadblocktofile","p":4886},{"i":4936,"t":"debug_storageRangeAt","u":"/public-networks/reference/api","h":"#debug_storagerangeat","p":4886},{"i":4938,"t":"debug_traceTransaction","u":"/public-networks/reference/api","h":"#debug_tracetransaction","p":4886},{"i":4940,"t":"debug_traceBlock","u":"/public-networks/reference/api","h":"#debug_traceblock","p":4886},{"i":4942,"t":"debug_traceBlockByHash","u":"/public-networks/reference/api","h":"#debug_traceblockbyhash","p":4886},{"i":4944,"t":"debug_traceBlockByNumber","u":"/public-networks/reference/api","h":"#debug_traceblockbynumber","p":4886},{"i":4946,"t":"debug_traceCall","u":"/public-networks/reference/api","h":"#debug_tracecall","p":4886},{"i":4948,"t":"ETH methods","u":"/public-networks/reference/api","h":"#eth-methods","p":4886},{"i":4950,"t":"eth_accounts","u":"/public-networks/reference/api","h":"#eth_accounts","p":4886},{"i":4952,"t":"eth_blobBaseFee","u":"/public-networks/reference/api","h":"#eth_blobbasefee","p":4886},{"i":4954,"t":"eth_blockNumber","u":"/public-networks/reference/api","h":"#eth_blocknumber","p":4886},{"i":4956,"t":"eth_call","u":"/public-networks/reference/api","h":"#eth_call","p":4886},{"i":4958,"t":"eth_chainId","u":"/public-networks/reference/api","h":"#eth_chainid","p":4886},{"i":4960,"t":"eth_coinbase","u":"/public-networks/reference/api","h":"#eth_coinbase","p":4886},{"i":4962,"t":"eth_createAccessList","u":"/public-networks/reference/api","h":"#eth_createaccesslist","p":4886},{"i":4964,"t":"eth_estimateGas","u":"/public-networks/reference/api","h":"#eth_estimategas","p":4886},{"i":4966,"t":"eth_feeHistory","u":"/public-networks/reference/api","h":"#eth_feehistory","p":4886},{"i":4968,"t":"eth_gasPrice","u":"/public-networks/reference/api","h":"#eth_gasprice","p":4886},{"i":4970,"t":"eth_getBalance","u":"/public-networks/reference/api","h":"#eth_getbalance","p":4886},{"i":4972,"t":"eth_getBlockByHash","u":"/public-networks/reference/api","h":"#eth_getblockbyhash","p":4886},{"i":4974,"t":"eth_getBlockByNumber","u":"/public-networks/reference/api","h":"#eth_getblockbynumber","p":4886},{"i":4976,"t":"eth_getBlockReceipts","u":"/public-networks/reference/api","h":"#eth_getblockreceipts","p":4886},{"i":4978,"t":"eth_getBlockTransactionCountByHash","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbyhash","p":4886},{"i":4980,"t":"eth_getBlockTransactionCountByNumber","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbynumber","p":4886},{"i":4982,"t":"eth_getCode","u":"/public-networks/reference/api","h":"#eth_getcode","p":4886},{"i":4984,"t":"eth_getFilterChanges","u":"/public-networks/reference/api","h":"#eth_getfilterchanges","p":4886},{"i":4986,"t":"eth_getFilterLogs","u":"/public-networks/reference/api","h":"#eth_getfilterlogs","p":4886},{"i":4988,"t":"eth_getLogs","u":"/public-networks/reference/api","h":"#eth_getlogs","p":4886},{"i":4990,"t":"eth_getMinerDataByBlockHash","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblockhash","p":4886},{"i":4992,"t":"eth_getMinerDataByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblocknumber","p":4886},{"i":4994,"t":"eth_getProof","u":"/public-networks/reference/api","h":"#eth_getproof","p":4886},{"i":4996,"t":"eth_getStorageAt","u":"/public-networks/reference/api","h":"#eth_getstorageat","p":4886},{"i":4998,"t":"eth_getTransactionByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblockhashandindex","p":4886},{"i":5000,"t":"eth_getTransactionByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblocknumberandindex","p":4886},{"i":5002,"t":"eth_getTransactionByHash","u":"/public-networks/reference/api","h":"#eth_gettransactionbyhash","p":4886},{"i":5004,"t":"eth_getTransactionCount","u":"/public-networks/reference/api","h":"#eth_gettransactioncount","p":4886},{"i":5006,"t":"eth_getTransactionReceipt","u":"/public-networks/reference/api","h":"#eth_gettransactionreceipt","p":4886},{"i":5008,"t":"eth_getUncleByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblockhashandindex","p":4886},{"i":5010,"t":"eth_getUncleByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblocknumberandindex","p":4886},{"i":5012,"t":"eth_getUncleCountByBlockHash","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblockhash","p":4886},{"i":5014,"t":"eth_getUncleCountByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblocknumber","p":4886},{"i":5016,"t":"eth_getWork","u":"/public-networks/reference/api","h":"#eth_getwork","p":4886},{"i":5018,"t":"eth_hashrate","u":"/public-networks/reference/api","h":"#eth_hashrate","p":4886},{"i":5020,"t":"eth_maxPriorityFeePerGas","u":"/public-networks/reference/api","h":"#eth_maxpriorityfeepergas","p":4886},{"i":5022,"t":"eth_mining","u":"/public-networks/reference/api","h":"#eth_mining","p":4886},{"i":5024,"t":"eth_newBlockFilter","u":"/public-networks/reference/api","h":"#eth_newblockfilter","p":4886},{"i":5026,"t":"eth_newFilter","u":"/public-networks/reference/api","h":"#eth_newfilter","p":4886},{"i":5028,"t":"eth_newPendingTransactionFilter","u":"/public-networks/reference/api","h":"#eth_newpendingtransactionfilter","p":4886},{"i":5030,"t":"eth_protocolVersion","u":"/public-networks/reference/api","h":"#eth_protocolversion","p":4886},{"i":5032,"t":"eth_sendRawTransaction","u":"/public-networks/reference/api","h":"#eth_sendrawtransaction","p":4886},{"i":5034,"t":"eth_submitHashrate","u":"/public-networks/reference/api","h":"#eth_submithashrate","p":4886},{"i":5036,"t":"eth_submitWork","u":"/public-networks/reference/api","h":"#eth_submitwork","p":4886},{"i":5038,"t":"eth_syncing","u":"/public-networks/reference/api","h":"#eth_syncing","p":4886},{"i":5040,"t":"eth_uninstallFilter","u":"/public-networks/reference/api","h":"#eth_uninstallfilter","p":4886},{"i":5042,"t":"MINER methods","u":"/public-networks/reference/api","h":"#miner-methods","p":4886},{"i":5044,"t":"miner_changeTargetGasLimit","u":"/public-networks/reference/api","h":"#miner_changetargetgaslimit","p":4886},{"i":5046,"t":"miner_getExtraData","u":"/public-networks/reference/api","h":"#miner_getextradata","p":4886},{"i":5048,"t":"miner_getMinGasPrice","u":"/public-networks/reference/api","h":"#miner_getmingasprice","p":4886},{"i":5050,"t":"miner_getMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_getminpriorityfee","p":4886},{"i":5052,"t":"miner_setCoinbase","u":"/public-networks/reference/api","h":"#miner_setcoinbase","p":4886},{"i":5054,"t":"miner_setExtraData","u":"/public-networks/reference/api","h":"#miner_setextradata","p":4886},{"i":5056,"t":"miner_setMinGasPrice","u":"/public-networks/reference/api","h":"#miner_setmingasprice","p":4886},{"i":5058,"t":"miner_setMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_setminpriorityfee","p":4886},{"i":5060,"t":"miner_start","u":"/public-networks/reference/api","h":"#miner_start","p":4886},{"i":5062,"t":"miner_stop","u":"/public-networks/reference/api","h":"#miner_stop","p":4886},{"i":5064,"t":"NET methods","u":"/public-networks/reference/api","h":"#net-methods","p":4886},{"i":5066,"t":"net_enode","u":"/public-networks/reference/api","h":"#net_enode","p":4886},{"i":5068,"t":"net_listening","u":"/public-networks/reference/api","h":"#net_listening","p":4886},{"i":5070,"t":"net_peerCount","u":"/public-networks/reference/api","h":"#net_peercount","p":4886},{"i":5072,"t":"net_services","u":"/public-networks/reference/api","h":"#net_services","p":4886},{"i":5074,"t":"net_version","u":"/public-networks/reference/api","h":"#net_version","p":4886},{"i":5076,"t":"PLUGINS methods","u":"/public-networks/reference/api","h":"#plugins-methods","p":4886},{"i":5078,"t":"plugins_reloadPluginConfig","u":"/public-networks/reference/api","h":"#plugins_reloadpluginconfig","p":4886},{"i":5080,"t":"TRACE methods","u":"/public-networks/reference/api","h":"#trace-methods","p":4886},{"i":5082,"t":"trace_block","u":"/public-networks/reference/api","h":"#trace_block","p":4886},{"i":5084,"t":"trace_call","u":"/public-networks/reference/api","h":"#trace_call","p":4886},{"i":5086,"t":"trace_callMany","u":"/public-networks/reference/api","h":"#trace_callmany","p":4886},{"i":5088,"t":"trace_filter","u":"/public-networks/reference/api","h":"#trace_filter","p":4886},{"i":5090,"t":"trace_get","u":"/public-networks/reference/api","h":"#trace_get","p":4886},{"i":5092,"t":"trace_rawTransaction","u":"/public-networks/reference/api","h":"#trace_rawtransaction","p":4886},{"i":5094,"t":"trace_replayBlockTransactions","u":"/public-networks/reference/api","h":"#trace_replayblocktransactions","p":4886},{"i":5096,"t":"trace_transaction","u":"/public-networks/reference/api","h":"#trace_transaction","p":4886},{"i":5098,"t":"TXPOOL methods","u":"/public-networks/reference/api","h":"#txpool-methods","p":4886},{"i":5100,"t":"txpool_besuPendingTransactions","u":"/public-networks/reference/api","h":"#txpool_besupendingtransactions","p":4886},{"i":5102,"t":"txpool_besuStatistics","u":"/public-networks/reference/api","h":"#txpool_besustatistics","p":4886},{"i":5104,"t":"txpool_besuTransactions","u":"/public-networks/reference/api","h":"#txpool_besutransactions","p":4886},{"i":5106,"t":"WEB3 methods","u":"/public-networks/reference/api","h":"#web3-methods","p":4886},{"i":5108,"t":"web3_clientVersion","u":"/public-networks/reference/api","h":"#web3_clientversion","p":4886},{"i":5110,"t":"web3_sha3","u":"/public-networks/reference/api","h":"#web3_sha3","p":4886},{"i":5112,"t":"Miscellaneous methods","u":"/public-networks/reference/api","h":"#miscellaneous-methods","p":4886},{"i":5113,"t":"rpc_modules","u":"/public-networks/reference/api","h":"#rpc_modules","p":4886}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2564",[0,8.216]],["t/2568",[1,2.778,2,4.182]],["t/2570",[2,4.182,3,5.111]],["t/2572",[2,4.182,4,5.324]],["t/2574",[5,6.74]],["t/2576",[6,8.902]],["t/2583",[2,4.182,7,4.415]],["t/2585",[8,5.765]],["t/2587",[9,6.054]],["t/2591",[10,4.933,11,5.746]],["t/2595",[2,4.182,12,4.709]],["t/2597",[2,4.182,13,6.156]],["t/2599",[11,5.746,14,6.81]],["t/2603",[1,2.778,2,4.182]],["t/2605",[2,3.571,15,2.939,16,5.495]],["t/2609",[17,8.902]],["t/2611",[18,7.379,19,7.379]],["t/2613",[20,5.256,21,4.546,22,3.377]],["t/2615",[23,7.764]],["t/2617",[24,8.902]],["t/2623",[7,3.77,25,4.546,26,4.546]],["t/2625",[25,3.967,27,4.586,28,3.251,29,4.281]],["t/2627",[30,5.932,31,6.435]],["t/2631",[32,4.349]],["t/2633",[33,3.181,34,4.059,35,5.074,36,4.586]],["t/2635",[37,6.81,38,3.71]],["t/2637",[38,3.71,39,5.587]],["t/2639",[38,3.71,40,7.379]],["t/2641",[11,5.746,14,6.81]],["t/2645",[28,4.364,41,5.212]],["t/2647",[42,5.256,43,5.815,44,4.652]],["t/2649",[28,3.251,45,4.795,46,4.586,47,5.498]],["t/2651",[28,3.726,48,3.348,49,5.815]],["t/2653",[30,5.932,31,6.435]],["t/2657",[48,3.348,50,4.364,51,3.377]],["t/2659",[52,6.74]],["t/2661",[38,3.168,52,4.771,53,3.437]],["t/2663",[22,3.377,52,4.771,53,3.437]],["t/2665",[26,4.546,52,4.771,53,3.437]],["t/2669",[26,4.546,38,3.168,53,3.437]],["t/2671",[28,3.726,54,2.977,55,3.266]],["t/2673",[28,3.726,56,5.815,57,5.495]],["t/2679",[58,6.435,59,6.435]],["t/2682",[60,6.156,61,6.156]],["t/2683",[62,4.691]],["t/2685",[10,3.675,33,3.181,61,4.586,63,4.795]],["t/2687",[64,5.815,65,5.815,66,5.815]],["t/2688",[62,4.691]],["t/2690",[10,4.212,67,5.815,68,5.815]],["t/2694",[69,5.815,70,6.301,71,4.771]],["t/2696",[72,3.884,73,5.074,74,4.795,75,3.884]],["t/2698",[71,5.587,76,6.81]],["t/2700",[41,5.212,77,6.435]],["t/2704",[62,4.691]],["t/2706",[78,6.81,79,4.853]],["t/2708",[48,3.921,80,3.58]],["t/2710",[1,2.372,81,3.685,82,4.907]],["t/2712",[48,2.591,83,3.378,84,4.5,85,4.068,86,4.253]],["t/2718",[62,4.691]],["t/2720",[5,4.771,15,2.939,87,4.021]],["t/2722",[32,3.605,88,4.468]],["t/2724",[1,2.372,81,3.685,89,4.771]],["t/2726",[1,2.372,81,3.685,82,4.907]],["t/2728",[1,2.07,53,2.999,55,2.85,81,3.215]],["t/2732",[88,4.468,90,3.209]],["t/2734",[87,4.709,91,7.379]],["t/2736",[87,4.709,92,6.81]],["t/2738",[87,4.709,93,7.379]],["t/2740",[94,6.301,95,6.301,96,6.301]],["t/2742",[97,5.495,98,4.081,99,5.495]],["t/2746",[4,5.324,9,5.018]],["t/2748",[9,3.739,32,2.686,55,2.85,100,5.074]],["t/2750",[9,4.285,101,4.144,102,4.212]],["t/2756",[2,3.116,15,2.565,16,4.795,32,2.686]],["t/2758",[103,5.256,104,5.495,105,4.081]],["t/2759",[15,2.275,90,2.121,106,3.518,107,3.444,108,4.5]],["t/2761",[15,2.565,54,2.597,106,3.967,107,3.884]],["t/2763",[15,2.044,106,3.161,107,3.095,109,3.034,110,4.381,111,4.381]],["t/2765",[15,2.275,90,2.121,106,3.518,107,3.444,109,3.378]],["t/2767",[15,2.044,90,1.905,106,3.161,107,3.095,109,3.034,112,3.234]],["t/2769",[15,2.275,41,3.444,106,3.518,107,3.444,109,3.378]],["t/2771",[15,2.275,90,2.121,106,3.518,107,3.444,113,3.797]],["t/2773",[15,2.044,90,1.905,106,3.161,107,3.095,112,3.234,113,3.412]],["t/2775",[15,2.275,41,3.444,106,3.518,107,3.444,113,3.797]],["t/2779",[7,3.289,22,2.946,114,5.498,115,4.795]],["t/2785",[88,4.468,90,3.209]],["t/2787",[87,4.709,116,5.932]],["t/2789",[15,3.442,117,5.018]],["t/2791",[32,3.078,105,5.699]],["t/2793",[32,3.078,118,5.495,119,5.495]],["t/2795",[22,3.377,101,4.144,102,4.212]],["t/2797",[22,3.955,101,4.853]],["t/2799",[22,3.955,102,4.933]],["t/2801",[120,6.81,121,5.587]],["t/2803",[20,5.256,21,4.546,22,3.377]],["t/2805",[21,4.546,22,3.377,122,6.301]],["t/2807",[121,6.74]],["t/2809",[15,2.275,32,2.382,55,2.528,117,3.316,123,3.6]],["t/2811",[15,2.275,32,2.382,55,2.528,123,3.6,124,4.253]],["t/2813",[32,2.382,39,3.692,55,2.528,123,3.6,125,4.5]],["t/2819",[62,4.691]],["t/2821",[32,3.078,126,4.021,127,3.726]],["t/2823",[90,2.391,126,3.509,128,3.148,129,4.586]],["t/2825",[48,3.921,80,3.58]],["t/2827",[32,3.078,127,3.726,130,5.256]],["t/2829",[90,2.391,128,3.148,129,4.586,130,4.586]],["t/2831",[48,3.921,80,3.58]],["t/2835",[32,2.686,48,2.921,131,4.795,132,3.675]],["t/2837",[15,2.565,75,3.884,133,3.055,134,4.42]],["t/2839",[7,3.289,75,3.884,134,4.42,135,2.999]],["t/2841",[20,3.318,48,2.113,80,1.929,132,2.658,136,2.169,137,2.809,138,3.468]],["t/2843",[33,1.943,54,1.586,138,2.928,139,1.986,140,2.801,141,2.801,142,3.358,143,2.801,144,3.358]],["t/2845",[32,2.686,131,4.795,132,3.675,145,5.498]],["t/2847",[146,4.779,147,7.379]],["t/2851",[88,4.468,90,3.209]],["t/2853",[87,4.709,116,5.932]],["t/2855",[15,3.442,117,5.018]],["t/2857",[32,3.078,105,5.699]],["t/2859",[32,3.078,118,5.495,119,5.495]],["t/2861",[22,3.377,101,4.144,102,4.212]],["t/2863",[15,2.044,22,2.348,33,2.535,101,2.881,102,2.929,148,3.821]],["t/2865",[7,2.621,22,2.348,33,2.535,101,2.881,102,2.929,115,3.821]],["t/2867",[20,5.256,21,4.546,22,3.377]],["t/2869",[121,6.74]],["t/2871",[15,2.275,32,2.382,55,2.528,117,3.316,123,3.6]],["t/2873",[15,2.275,32,2.382,55,2.528,123,3.6,124,4.253]],["t/2875",[22,2.946,26,3.967,149,5.498,150,3.148]],["t/2877",[32,2.382,39,3.692,55,2.528,123,3.6,125,4.5]],["t/2881",[88,4.468,90,3.209]],["t/2883",[15,2.939,151,6.301,152,5.815]],["t/2885",[87,4.709,116,5.932]],["t/2887",[153,6.301,154,5.495,155,5.066]],["t/2888",[154,5.495,155,5.066,156,6.301]],["t/2889",[32,3.078,118,5.495,119,5.495]],["t/2891",[12,4.021,55,3.266,157,5.815]],["t/2893",[101,4.144,102,4.212,155,5.066]],["t/2895",[101,4.853,155,5.932]],["t/2897",[102,4.933,155,5.932]],["t/2899",[120,6.81,121,5.587]],["t/2901",[121,6.74]],["t/2903",[15,2.275,32,2.382,55,2.528,117,3.316,123,3.6]],["t/2905",[15,2.275,32,2.382,55,2.528,123,3.6,152,4.5]],["t/2907",[158,6.054]],["t/2911",[21,4.546,22,3.377,71,4.771]],["t/2913",[22,3.377,102,4.212,159,5.495]],["t/2915",[9,5.018,22,3.955]],["t/2921",[160,8.902]],["t/2923",[161,8.902]],["t/2925",[12,3.509,126,3.509,130,4.586,162,5.074]],["t/2927",[12,3.509,103,4.586,104,4.795,162,5.074]],["t/2932",[103,5.256,104,5.495,105,4.081]],["t/2933",[90,2.391,108,5.074,127,3.251,163,4.059]],["t/2935",[54,2.977,127,3.726,163,4.652]],["t/2937",[90,2.391,109,3.808,127,3.251,163,4.059]],["t/2939",[90,2.121,109,3.378,112,3.6,127,2.884,163,3.6]],["t/2941",[41,3.884,109,3.808,127,3.251,163,4.059]],["t/2943",[90,2.391,113,4.281,127,3.251,163,4.059]],["t/2945",[90,2.121,112,3.6,113,3.797,127,2.884,163,3.6]],["t/2947",[41,3.884,113,4.281,127,3.251,163,4.059]],["t/2959",[62,4.691]],["t/2961",[80,3.58,164,6.435]],["t/2963",[164,6.435,165,5.746]],["t/2965",[83,5.111,164,6.435]],["t/2973",[10,4.212,166,5.815,167,6.301]],["t/2975",[48,2.591,81,2.852,85,4.068,134,3.92,166,4.5]],["t/2979",[168,5.815,169,6.301,170,5.066]],["t/2981",[12,3.112,46,4.068,170,3.92,171,3.797,172,4.253]],["t/2983",[71,6.74]],["t/2985",[173,5.457]],["t/2987",[33,2.821,45,4.253,170,3.92,171,3.797,174,4.253]],["t/2988",[62,4.691]],["t/2990",[173,5.457]],["t/2992",[45,4.795,81,3.215,170,4.42,175,5.074]],["t/2993",[62,4.691]],["t/2995",[173,5.457]],["t/2997",[105,4.081,170,5.066,176,5.815]],["t/3005",[63,6.435,177,6.156]],["t/3009",[178,7.764]],["t/3011",[179,8.216]],["t/3013",[28,2.884,48,2.591,49,4.5,180,4.5,181,4.876]],["t/3015",[38,2.764,53,2.999,182,5.498,183,5.498]],["t/3019",[54,2.977,184,4.771,185,5.066]],["t/3021",[184,4.771,185,5.066,186,6.301]],["t/3023",[184,4.771,185,5.066,187,5.815]],["t/3025",[188,6.156,189,5.932]],["t/3029",[2,2.763,4,3.518,7,2.917,36,4.068,190,3.692]],["t/3033",[1,2.778,8,4.779]],["t/3035",[4,4.546,8,4.081,9,4.285]],["t/3037",[1,2.372,8,4.081,54,2.977]],["t/3039",[1,2.372,8,4.081,146,4.081]],["t/3041",[1,2.372,8,4.081,165,4.907]],["t/3043",[3,5.111,8,4.779]],["t/3045",[3,4.364,8,4.081,54,2.977]],["t/3047",[3,4.364,8,4.081,146,4.081]],["t/3049",[3,4.364,8,4.081,165,4.907]],["t/3051",[2,3.571,32,3.078,90,2.74]],["t/3055",[38,3.71,191,6.156]],["t/3057",[38,4.475]],["t/3061",[25,4.546,28,3.726,41,4.451]],["t/3065",[25,4.546,28,3.726,41,4.451]],["t/3069",[25,3.967,27,4.586,28,3.251,54,2.597]],["t/3071",[25,3.518,27,4.068,28,2.884,192,4.876,193,4.5]],["t/3073",[101,4.144,102,4.212,194,6.301]],["t/3077",[195,4.364,196,5.746]],["t/3079",[5,3.317,33,2.535,44,3.234,197,3.821,198,4.381,199,3.095]],["t/3081",[38,3.168,53,3.437,196,4.907]],["t/3082",[33,3.645,200,6.301,201,6.301]],["t/3084",[48,2.921,50,3.808,202,5.498,203,5.498]],["t/3086",[1,1.497,43,3.67,50,2.755,204,3.977,205,3.977,206,3.977,207,3.977]],["t/3088",[26,3.967,33,3.181,44,4.059,52,4.163]],["t/3090",[28,2.591,33,2.535,38,2.202,208,4.043,209,3.522,210,4.043]],["t/3092",[38,2.764,50,3.808,211,5.498,212,5.498]],["t/3094",[25,3.161,75,3.095,158,2.979,213,4.381,214,4.381,215,4.381]],["t/3096",[25,3.161,158,2.979,216,4.381,217,3.821,218,4.043,219,4.381]],["t/3102",[220,7.379,221,7.379]],["t/3104",[175,6.81,222,7.379]],["t/3112",[168,6.81,223,6.156]],["t/3114",[88,4.468,90,3.209]],["t/3118",[62,4.691]],["t/3120",[101,3.616,224,4.586,225,4.281,226,5.498]],["t/3122",[126,3.509,154,4.795,224,4.586,225,4.281]],["t/3124",[7,3.77,227,4.021,228,6.301]],["t/3126",[150,3.607,224,5.256,225,4.907]],["t/3130",[38,3.168,53,3.437,229,3.726]],["t/3132",[38,2.764,53,2.999,191,4.586,229,3.251]],["t/3136",[11,4.907,230,6.301,231,6.301]],["t/3138",[11,5.746,232,5.587]],["t/3142",[233,6.932]],["t/3144",[195,3.726,234,5.495,235,4.771]],["t/3146",[236,8.902]],["t/3148",[237,8.902]],["t/3150",[238,8.902]],["t/3152",[87,3.509,116,4.42,239,4.795,240,5.074]],["t/3156",[4,5.324,105,4.779]],["t/3158",[105,5.765]],["t/3159",[2,3.116,3,3.808,90,2.391,235,4.163]],["t/3161",[2,2.763,3,3.378,54,2.304,90,2.121,235,3.692]],["t/3163",[2,3.116,3,3.808,7,3.289,241,4.163]],["t/3165",[2,3.116,3,3.808,7,3.289,54,2.597]],["t/3167",[1,2.07,2,3.116,90,2.391,235,4.163]],["t/3169",[1,1.836,2,2.763,54,2.304,90,2.121,235,3.692]],["t/3171",[1,2.07,2,3.116,7,3.289,241,4.163]],["t/3173",[1,2.07,2,3.116,7,3.289,54,2.597]],["t/3175",[1,2.07,2,3.116,7,3.289,190,4.163]],["t/3177",[15,2.044,117,2.979,242,4.381,243,2.685,244,4.043,245,2.757]],["t/3179",[28,4.364,54,3.486]],["t/3181",[28,2.591,38,2.202,51,2.348,90,1.905,210,4.043,246,4.381]],["t/3183",[28,3.251,30,4.42,31,4.795,54,2.597]],["t/3185",[25,3.967,27,4.586,28,3.251,54,2.597]],["t/3187",[28,3.251,51,2.946,90,2.391,247,3.884]],["t/3189",[28,3.726,54,2.977,127,3.726]],["t/3191",[28,3.251,90,2.391,109,3.808,127,3.251]],["t/3193",[28,2.884,90,2.121,109,3.378,112,3.6,127,2.884]],["t/3195",[28,2.884,90,2.121,127,2.884,129,4.068,248,4.876]],["t/3197",[28,4.364,249,5.932]],["t/3201",[250,7.764]],["t/3203",[227,5.681]],["t/3205",[15,3.442,251,5.746]],["t/3207",[252,5.765]],["t/3209",[12,3.509,76,5.074,253,2.667,254,5.074]],["t/3211",[255,8.902]],["t/3215",[62,4.691]],["t/3217",[173,5.457]],["t/3219",[128,3.607,133,3.502,256,4.212]],["t/3221",[1,2.07,133,3.055,135,2.999,241,4.163]],["t/3223",[88,3.329,90,2.391,128,3.148,136,2.999]],["t/3225",[1,1.836,9,3.316,80,2.366,139,2.884,257,4.068]],["t/3227",[1,2.07,80,2.667,135,2.999,258,3.561]],["t/3229",[1,2.07,80,2.667,136,2.999,259,3.675]],["t/3231",[53,2.66,55,2.528,89,3.692,260,3.6,261,3.797]],["t/3233",[173,4.523,262,6.156]],["t/3235",[1,2.778,83,5.111]],["t/3239",[62,4.691]],["t/3241",[33,4.269,263,6.81]],["t/3243",[33,4.269,264,6.81]],["t/3247",[62,4.691]],["t/3249",[33,4.269,263,6.81]],["t/3251",[33,4.269,264,6.81]],["t/3253",[7,2.621,33,2.535,53,2.39,178,3.821,224,3.655,225,3.412]],["t/3257",[62,4.691]],["t/3259",[173,5.457]],["t/3261",[128,3.607,133,3.502,256,4.212]],["t/3263",[88,3.329,90,2.391,128,3.148,135,2.999]],["t/3265",[1,1.836,9,3.316,80,2.366,136,2.66,257,4.068]],["t/3267",[1,2.07,80,2.667,135,2.999,139,3.251]],["t/3269",[1,2.07,80,2.667,136,2.999,258,3.561]],["t/3271",[53,2.66,55,2.528,89,3.692,259,3.26,261,3.797]],["t/3273",[173,4.523,262,6.156]],["t/3275",[1,2.778,83,5.111]],["t/3279",[62,4.691]],["t/3281",[22,3.955,101,4.853]],["t/3282",[128,3.607,133,3.502,256,4.212]],["t/3284",[1,2.372,80,3.057,135,3.437]],["t/3286",[1,2.07,136,2.999,241,4.163,265,4.163]],["t/3288",[16,4.253,22,2.613,139,2.884,159,4.253,266,3.6]],["t/3290",[22,2.613,258,3.158,266,3.6,267,4.253,268,4.5]],["t/3292",[22,3.955,102,4.933]],["t/3296",[62,4.691]],["t/3298",[173,5.457]],["t/3300",[128,3.607,133,3.502,256,4.212]],["t/3302",[32,2.686,90,2.391,128,3.148,135,2.999]],["t/3304",[1,1.649,51,2.348,88,2.652,90,1.905,136,2.39,195,2.591]],["t/3306",[55,2.062,88,2.408,90,1.729,139,2.352,239,3.468,256,2.658,265,3.011]],["t/3308",[1,2.353,51,2.131,53,2.169,256,2.658,258,2.576,265,3.011]],["t/3310",[1,1.836,9,3.316,80,2.366,257,4.068,259,3.26]],["t/3312",[1,2.07,80,2.667,135,2.999,260,4.059]],["t/3314",[1,2.07,80,2.667,136,2.999,269,4.42]],["t/3316",[1,2.07,80,2.667,139,3.251,270,4.586]],["t/3318",[53,2.66,55,2.528,89,3.692,261,3.797,271,4.068]],["t/3320",[173,4.523,262,6.156]],["t/3322",[1,2.778,83,5.111]],["t/3326",[62,4.691]],["t/3328",[7,3.77,247,4.451,272,5.495]],["t/3330",[133,3.055,196,4.281,233,4.281,273,5.074]],["t/3332",[135,2.999,196,4.281,233,4.281,274,5.074]],["t/3334",[136,2.999,146,3.561,267,4.795,275,4.42]],["t/3336",[7,3.77,53,3.437,272,5.495]],["t/3338",[133,3.055,196,4.281,233,4.281,273,5.074]],["t/3340",[135,2.999,196,4.281,233,4.281,274,5.074]],["t/3342",[136,2.999,146,3.561,267,4.795,275,4.42]],["t/3346",[225,5.746,276,6.156]],["t/3348",[189,5.932,277,6.81]],["t/3350",[158,6.054]],["t/3352",[278,8.902]],["t/3354",[30,5.932,279,5.746]],["t/3356",[280,8.902]],["t/3357",[281,8.216]],["t/3359",[1,3.352]],["t/3361",[42,4.586,140,4.586,282,5.498,283,5.074]],["t/3363",[199,6.288]],["t/3365",[284,7.426]],["t/3367",[283,6.81,285,6.435]],["t/3371",[62,4.691]],["t/3373",[5,5.587,279,5.746]],["t/3375",[286,8.902]],["t/3377",[287,8.902]],["t/3379",[288,8.902]],["t/3381",[277,6.81,279,5.746]],["t/3382",[289,6.156,290,6.81]],["t/3384",[232,4.771,276,5.256,291,5.815]],["t/3388",[150,4.225,157,6.81]],["t/3390",[292,8.902]],["t/3392",[293,8.902]],["t/3394",[294,8.902]],["t/3396",[295,8.902]],["t/3398",[296,8.216]],["t/3400",[296,8.216]],["t/3402",[150,4.225,180,6.81]],["t/3404",[178,7.764]],["t/3406",[150,3.607,239,5.495,240,5.815]],["t/3408",[297,8.902]],["t/3410",[298,8.902]],["t/3412",[299,8.902]],["t/3414",[300,8.902]],["t/3416",[301,8.902]],["t/3418",[302,8.902]],["t/3420",[2,3.571,150,3.607,303,6.301]],["t/3422",[304,8.902]],["t/3424",[305,8.902]],["t/3426",[306,8.902]],["t/3428",[307,8.902]],["t/3430",[308,8.902]],["t/3432",[309,8.902]],["t/3434",[310,8.902]],["t/3436",[150,4.225,311,7.379]],["t/3438",[312,8.902]],["t/3440",[313,8.902]],["t/3442",[314,8.902]],["t/3444",[315,8.902]],["t/3446",[179,8.216]],["t/3448",[316,8.902]],["t/3450",[317,8.902]],["t/3452",[318,8.902]],["t/3454",[319,8.902]],["t/3456",[320,8.902]],["t/3458",[321,8.902]],["t/3460",[322,8.902]],["t/3462",[323,8.902]],["t/3464",[324,8.902]],["t/3466",[325,8.902]],["t/3468",[326,8.902]],["t/3470",[327,8.902]],["t/3472",[328,8.902]],["t/3474",[150,4.225,329,6.81]],["t/3476",[330,8.902]],["t/3478",[331,8.902]],["t/3480",[332,8.902]],["t/3482",[333,8.902]],["t/3484",[334,8.902]],["t/3486",[335,8.902]],["t/3490",[62,4.691]],["t/3492",[75,3.444,146,3.158,336,4.876,337,4.876,338,4.876]],["t/3494",[48,3.348,146,4.081,190,4.771]],["t/3498",[173,5.457]],["t/3500",[339,5.587,340,7.379]],["t/3504",[62,4.691]],["t/3506",[225,3.797,227,3.112,251,3.797,341,4.5,342,4.068]],["t/3508",[1,3.352]],["t/3510",[22,4.771]],["t/3512",[251,6.932]],["t/3514",[7,5.326]],["t/3516",[343,7.764]],["t/3520",[62,4.691]],["t/3522",[250,7.764]],["t/3524",[227,5.681]],["t/3525",[12,3.509,279,4.281,344,4.281,345,5.074]],["t/3527",[55,3.825,227,4.709]],["t/3529",[346,7.379,347,7.379]],["t/3531",[30,5.066,189,5.066,279,4.907]],["t/3535",[32,3.605,348,6.81]],["t/3537",[128,3.148,133,3.055,349,4.795,350,5.074]],["t/3539",[135,2.39,227,2.796,344,3.412,349,3.821,350,4.043,351,4.381]],["t/3541",[48,3.348,136,3.437,227,4.021]],["t/3543",[348,5.815,352,5.495,353,5.256]],["t/3545",[13,4.586,232,4.163,353,4.586,354,4.586]],["t/3547",[13,5.256,353,5.256,355,6.301]],["t/3549",[13,4.586,285,4.795,353,4.586,354,4.586]],["t/3553",[62,4.691]],["t/3555",[173,5.457]],["t/3556",[51,2.348,53,2.39,133,2.435,195,2.591,247,3.095,356,4.043]],["t/3558",[50,3.808,51,2.946,135,2.999,195,3.251]],["t/3560",[32,2.382,50,3.378,90,2.121,136,2.66,146,3.158]],["t/3562",[50,4.364,80,3.057,139,3.726]],["t/3564",[1,1.836,48,2.591,80,2.366,133,2.71,258,3.158]],["t/3566",[195,3.251,259,3.675,357,5.498,358,3.967]],["t/3570",[62,4.691]],["t/3572",[173,5.457]],["t/3573",[128,3.607,133,3.502,359,6.301]],["t/3575",[32,2.686,90,2.391,128,3.148,135,2.999]],["t/3577",[1,1.649,51,2.348,88,2.652,90,1.905,136,2.39,195,2.591]],["t/3579",[2,2.254,55,2.062,88,2.408,90,1.729,139,2.352,256,2.658,265,3.011]],["t/3581",[1,2.353,51,2.131,53,2.169,256,2.658,258,2.576,265,3.011]],["t/3583",[2,2.763,32,2.382,90,2.121,128,2.792,259,3.26]],["t/3585",[1,2.07,80,2.667,133,3.055,260,4.059]],["t/3587",[1,2.07,80,2.667,135,2.999,269,4.42]],["t/3589",[1,2.07,80,2.667,136,2.999,270,4.586]],["t/3591",[1,2.07,80,2.667,139,3.251,271,4.586]],["t/3593",[1,1.371,2,2.064,32,1.779,90,1.583,101,2.395,249,2.927,360,3.641,361,3.176]],["t/3595",[1,2.07,98,3.561,101,3.616,362,5.498]],["t/3597",[2,2.763,55,2.528,89,3.692,261,3.797,363,4.876]],["t/3599",[1,2.778,83,5.111]],["t/3603",[62,4.691]],["t/3605",[341,5.815,342,5.256,364,6.301]],["t/3607",[12,3.112,133,2.71,279,3.797,344,3.797,345,4.5]],["t/3609",[128,3.607,135,3.437,281,5.815]],["t/3611",[136,2.999,227,3.509,284,4.586,342,4.586]],["t/3613",[88,3.329,139,3.251,227,3.509,342,4.586]],["t/3615",[9,4.285,227,4.021,258,4.081]],["t/3617",[22,3.377,227,4.021,259,4.212]],["t/3619",[22,3.611,260,3.234,268,4.043,365,4.381,366,2.652]],["t/3621",[1,1.836,38,2.451,227,3.112,253,2.366,269,3.92]],["t/3623",[1,1.497,5,3.011,12,2.538,74,3.468,270,3.318,285,3.468,367,3.977]],["t/3625",[234,5.495,251,4.907,271,5.256]],["t/3631",[62,4.691]],["t/3633",[173,5.457]],["t/3634",[90,2.121,128,2.792,133,2.71,171,3.797,172,4.253]],["t/3636",[55,3.266,80,3.057,135,3.437]],["t/3638",[1,1.649,7,2.621,53,2.39,136,2.39,227,2.796,272,3.821]],["t/3640",[55,3.266,83,4.364,139,3.726]],["t/3642",[193,6.81,368,7.379]],["t/3646",[0,8.216]],["t/3651",[62,4.691]],["t/3653",[173,5.457]],["t/3655",[128,3.607,133,3.502,256,4.212]],["t/3657",[32,2.686,90,2.391,128,3.148,135,2.999]],["t/3659",[1,1.649,51,2.348,88,2.652,90,1.905,136,2.39,195,2.591]],["t/3661",[55,2.062,88,2.408,90,1.729,139,2.352,256,2.658,265,3.011,329,3.67]],["t/3663",[1,2.353,51,2.131,53,2.169,256,2.658,258,2.576,265,3.011]],["t/3665",[1,1.836,9,3.316,80,2.366,257,4.068,259,3.26]],["t/3667",[1,2.07,80,2.667,135,2.999,260,4.059]],["t/3669",[1,2.07,80,2.667,136,2.999,269,4.42]],["t/3671",[1,2.07,80,2.667,139,3.251,270,4.586]],["t/3673",[53,2.66,55,2.528,89,3.692,261,3.797,271,4.068]],["t/3675",[173,4.523,262,6.156]],["t/3677",[1,2.778,83,5.111]],["t/3681",[62,4.691]],["t/3683",[173,5.457]],["t/3684",[50,3.808,128,3.148,133,3.055,256,3.675]],["t/3686",[50,3.808,51,2.946,135,2.999,195,3.251]],["t/3688",[32,2.382,50,3.378,90,2.121,128,2.792,136,2.66]],["t/3690",[1,2.07,50,3.808,80,2.667,139,3.251]],["t/3692",[1,1.836,48,2.591,80,2.366,133,2.71,258,3.158]],["t/3694",[1,1.836,48,2.591,80,2.366,135,2.66,259,3.26]],["t/3696",[1,1.836,48,2.591,80,2.366,136,2.66,260,3.6]],["t/3698",[1,1.836,48,2.591,80,2.366,139,2.884,269,3.92]],["t/3702",[369,5.932,370,6.435]],["t/3704",[370,6.435,371,6.81]],["t/3706",[369,3.92,370,6.374,371,4.5,372,4.5]],["t/3707",[71,5.587,199,5.212]],["t/3709",[42,6.156,87,4.709]],["t/3711",[1,2.778,373,4.933]],["t/3715",[4,3.967,29,4.281,55,2.85,374,5.498]],["t/3717",[29,3.412,80,2.125,266,4.974,375,5.876]],["t/3721",[376,8.216]],["t/3723",[377,6.81,378,6.435]],["t/3725",[377,5.815,379,6.301,380,5.495]],["t/3727",[376,6.81,381,5.111]],["t/3731",[62,4.691]],["t/3733",[32,2.382,90,2.121,195,2.884,234,4.253,382,4.876]],["t/3735",[55,3.825,80,3.58]],["t/3737",[15,2.939,33,3.645,251,4.907]],["t/3739",[1,2.07,284,4.586,383,4.163,384,5.498]],["t/3741",[81,3.215,253,2.667,385,4.163,386,4.059]],["t/3743",[81,4.316,387,6.435]],["t/3745",[81,4.316,388,6.81]],["t/3747",[1,2.372,190,4.771,386,4.652]],["t/3749",[98,4.779,389,7.379]],["t/3751",[15,2.565,21,3.967,386,4.059,390,5.498]],["t/3753",[38,3.71,247,5.212]],["t/3755",[33,3.181,38,2.764,128,3.148,391,5.498]],["t/3757",[7,3.289,115,4.795,188,4.586,392,4.795]],["t/3759",[7,4.415,227,4.709]],["t/3761",[81,4.316,188,6.156]],["t/3763",[188,6.156,227,4.709]],["t/3765",[53,2.169,55,2.062,83,2.755,99,3.468,102,2.658,174,3.468,393,3.977]],["t/3767",[53,2.66,55,2.528,83,3.378,102,3.26,174,4.253]],["t/3769",[1,2.07,55,2.85,101,3.616,266,4.059]],["t/3771",[1,1.836,51,2.613,90,2.121,128,2.792,133,2.71]],["t/3773",[1,1.836,128,2.792,135,2.66,256,3.26,266,3.6]],["t/3775",[136,2.999,146,3.561,171,4.281,172,4.795]],["t/3777",[32,2.686,139,3.251,146,3.561,383,4.163]],["t/3779",[90,2.121,146,3.158,241,3.692,258,3.158,361,4.253]],["t/3781",[55,3.266,80,3.057,259,4.212]],["t/3789",[126,4.021,394,5.066,395,5.256]],["t/3791",[126,4.709,394,5.932]],["t/3793",[126,4.709,395,6.156]],["t/3797",[1,2.372,51,3.377,53,3.437]],["t/3799",[1,2.372,51,3.377,247,4.451]],["t/3801",[1,2.778,241,5.587]],["t/3803",[1,1.649,4,3.161,51,2.348,53,2.39,90,1.905,396,4.381]],["t/3805",[249,5.932,361,6.435]],["t/3807",[189,5.066,397,6.301,398,6.301]],["t/3811",[38,3.168,366,3.815,399,5.495]],["t/3813",[38,3.168,366,3.815,400,6.301]],["t/3815",[38,3.387,366,2.652,399,3.821,401,3.655,402,3.655]],["t/3817",[38,2.451,52,3.692,209,3.92,403,4.876,404,4.876]],["t/3818",[55,2.528,132,3.26,137,3.444,140,4.068,141,4.068]],["t/3820",[55,2.271,131,3.821,132,2.929,138,3.821,140,5.621]],["t/3822",[38,2.764,105,3.561,150,3.148,366,3.329]],["t/3826",[38,3.71,405,7.379]],["t/3828",[38,3.71,406,7.379]],["t/3830",[38,3.71,407,7.379]],["t/3832",[38,3.71,408,6.435]],["t/3834",[38,2.764,165,4.281,408,4.795,409,5.498]],["t/3838",[410,7.764]],["t/3840",[124,6.435,410,6.435]],["t/3842",[410,6.435,411,7.379]],["t/3844",[412,8.902]],["t/3846",[176,8.216]],["t/3854",[62,4.691]],["t/3856",[173,5.457]],["t/3857",[133,3.055,195,3.251,413,4.586,414,4.42]],["t/3859",[22,2.946,51,2.946,135,2.999,195,3.251]],["t/3861",[48,3.348,80,3.057,136,3.437]],["t/3863",[80,2.667,126,3.509,139,3.251,395,4.586]],["t/3865",[126,3.509,258,3.561,373,3.675,415,4.586]],["t/3867",[259,4.212,416,5.256,417,5.066]],["t/3871",[250,5.495,418,6.301,419,6.301]],["t/3873",[352,5.495,420,6.301,421,6.301]],["t/3875",[252,5.765]],["t/3878",[60,6.156,61,6.156]],["t/3879",[62,4.691]],["t/3881",[10,3.675,33,3.181,61,4.586,63,4.795]],["t/3883",[64,5.815,65,5.815,66,5.815]],["t/3884",[62,4.691]],["t/3886",[10,4.212,67,5.815,68,5.815]],["t/3890",[62,4.691]],["t/3892",[173,5.457]],["t/3893",[133,3.055,195,3.251,413,4.586,414,4.42]],["t/3895",[22,2.946,51,2.946,135,2.999,195,3.251]],["t/3897",[48,3.348,80,3.057,136,3.437]],["t/3899",[80,2.667,126,3.509,139,3.251,395,4.586]],["t/3901",[126,3.509,258,3.561,373,3.675,415,4.586]],["t/3903",[259,4.212,416,5.256,417,5.066]],["t/3907",[117,5.018,373,4.933]],["t/3909",[199,6.288]],["t/3911",[1,2.372,81,3.685,402,5.256]],["t/3913",[422,7.379,423,5.932]],["t/3915",[423,5.932,424,7.379]],["t/3917",[197,6.435,423,5.932]],["t/3919",[1,2.372,81,3.685,425,6.301]],["t/3925",[58,6.435,59,6.435]],["t/3929",[62,4.691]],["t/3931",[5,4.771,15,2.939,87,4.021]],["t/3933",[32,3.605,88,4.468]],["t/3935",[199,5.212,373,4.933]],["t/3937",[1,2.372,81,3.685,82,4.907]],["t/3939",[1,2.07,81,3.215,426,5.074,427,4.795]],["t/3941",[1,2.07,81,3.215,427,4.795,428,5.498]],["t/3943",[1,2.07,46,4.586,81,3.215,429,4.586]],["t/3945",[1,2.372,81,3.685,89,4.771]],["t/3949",[62,4.691]],["t/3951",[1,2.372,429,5.256,430,5.256]],["t/3953",[78,6.81,79,4.853]],["t/3955",[48,3.921,80,3.58]],["t/3957",[1,2.372,81,3.685,82,4.907]],["t/3959",[1,2.07,81,3.215,426,5.074,427,4.795]],["t/3961",[1,2.07,46,4.586,81,3.215,429,4.586]],["t/3963",[48,2.591,83,3.378,84,4.5,85,4.068,86,4.253]],["t/3967",[10,4.212,72,4.451,431,6.301]],["t/3969",[72,3.884,73,5.074,74,4.795,75,3.884]],["t/3971",[77,6.435,432,7.379]],["t/3973",[41,5.212,77,6.435]],["t/3975",[71,5.587,289,6.156]],["t/3979",[32,3.078,433,6.301,434,6.301]],["t/3981",[32,3.078,90,2.74,435,6.301]],["t/3983",[32,3.605,430,6.156]],["t/3985",[98,5.765]],["t/3987",[199,6.288]],["t/3989",[373,5.951]],["t/3993",[436,6.301,437,5.815,438,5.066]],["t/3995",[437,6.81,438,5.932]],["t/3997",[438,5.932,439,7.379]],["t/3999",[349,5.495,438,5.066,440,6.301]],["t/4003",[1,2.372,69,5.815,441,5.495]],["t/4005",[38,3.71,52,5.587]],["t/4007",[442,7.764]],["t/4009",[401,5.256,442,5.495,443,6.301]],["t/4011",[148,6.435,266,5.448]],["t/4013",[444,5.326]],["t/4015",[38,3.168,266,4.652,445,5.066]],["t/4017",[38,3.168,401,5.256,445,5.066]],["t/4019",[373,5.951]],["t/4022",[289,7.426]],["t/4024",[446,4.062,447,6.81]],["t/4026",[232,4.771,276,5.256,448,6.301]],["t/4028",[32,3.605,449,7.379]],["t/4030",[446,4.062,447,6.81]],["t/4034",[54,2.597,72,3.884,450,5.498,451,5.498]],["t/4038",[10,4.933,72,5.212]],["t/4040",[10,4.212,72,4.451,452,5.815]],["t/4042",[10,4.212,60,5.256,72,4.451]],["t/4044",[72,5.212,146,4.779]],["t/4045",[72,4.451,146,4.081,452,5.815]],["t/4047",[60,5.256,72,4.451,146,4.081]],["t/4051",[26,4.546,453,6.301,454,6.301]],["t/4053",[105,4.779,430,6.156]],["t/4059",[158,3.739,444,3.289,455,4.42,456,4.281]],["t/4061",[444,3.289,455,4.42,456,4.281,457,5.498]],["t/4063",[458,7.764]],["t/4065",[103,5.256,429,5.256,455,5.066]],["t/4067",[261,5.746,459,6.81]],["t/4069",[354,4.068,460,4.5,461,4.5,462,4.5,463,4.876]],["t/4071",[352,6.435,464,7.379]],["t/4073",[51,2.946,53,2.999,195,3.251,465,5.074]],["t/4075",[22,3.377,35,5.815,466,6.301]],["t/4077",[354,4.068,460,4.5,461,4.5,462,4.5,467,4.876]],["t/4079",[86,5.495,468,6.301,469,6.301]],["t/4081",[217,4.795,223,4.586,373,3.675,470,5.498]],["t/4083",[81,3.215,444,3.289,455,4.42,456,4.281]],["t/4085",[15,2.275,87,3.112,375,4.253,465,4.5,471,4.876]],["t/4089",[55,3.825,472,5.746]],["t/4091",[253,3.057,385,4.771,473,4.021]],["t/4093",[252,5.765]],["t/4097",[474,8.216]],["t/4099",[475,8.902]],["t/4101",[276,7.426]],["t/4103",[171,6.932]],["t/4105",[476,8.902]],["t/4109",[472,4.907,477,5.066,478,6.301]],["t/4111",[98,4.779,158,5.018]],["t/4113",[8,4.779,98,4.779]],["t/4115",[12,4.021,158,4.285,479,5.495]],["t/4117",[12,4.021,98,4.081,284,5.256]],["t/4119",[1,2.372,12,4.021,480,5.815]],["t/4121",[477,5.932,481,6.81]],["t/4123",[458,7.764]],["t/4129",[26,4.546,51,3.377,53,3.437]],["t/4130",[33,3.645,343,5.495,482,6.301]],["t/4132",[4,3.967,51,2.946,53,2.999,483,4.795]],["t/4134",[1,2.372,48,3.348,80,3.057]],["t/4136",[7,4.415,227,4.709]],["t/4142",[1,2.372,32,3.078,484,5.495]],["t/4144",[90,2.74,484,5.495,485,6.301]],["t/4148",[10,4.933,383,5.587]],["t/4150",[48,2.591,81,2.852,85,4.068,134,3.92,383,3.692]],["t/4152",[48,2.591,81,2.852,223,4.068,383,3.692,486,3.797]],["t/4154",[36,4.586,165,4.281,383,4.163,487,5.498]],["t/4156",[165,4.907,252,4.081,480,5.815]],["t/4160",[444,4.415,488,7.379]],["t/4162",[444,4.415,489,7.379]],["t/4164",[38,3.168,444,3.77,490,6.301]],["t/4166",[444,4.415,491,7.379]],["t/4170",[392,6.435,492,6.81]],["t/4172",[15,2.044,44,3.234,133,2.435,339,3.317,493,4.043,494,4.381]],["t/4174",[44,4.059,135,2.999,493,5.074,495,5.498]],["t/4176",[15,2.939,136,3.437,339,4.771]],["t/4178",[15,2.565,139,3.251,339,4.163,402,4.586]],["t/4180",[15,2.565,100,5.074,258,3.561,496,5.498]],["t/4182",[15,3.442,117,5.018]],["t/4184",[15,2.565,117,3.739,133,3.055,339,4.163]],["t/4186",[15,2.275,117,3.316,135,2.66,339,3.692,402,4.068]],["t/4188",[15,2.565,55,2.85,117,3.739,136,2.999]],["t/4190",[497,8.216]],["t/4194",[498,6.81,499,6.81]],["t/4196",[58,6.435,59,6.435]],["t/4198",[171,5.746,394,5.932]],["t/4200",[105,4.081,498,5.815,499,5.815]],["t/4204",[372,5.815,500,5.815,501,5.815]],["t/4206",[26,3.967,33,3.181,51,2.946,343,4.795]],["t/4212",[159,4.795,473,3.509,502,5.498,503,3.967]],["t/4214",[38,2.764,381,3.808,473,3.509,503,3.967]],["t/4218",[98,4.779,504,7.379]],["t/4219",[97,4.253,98,3.158,373,3.26,505,4.876,506,4.876]],["t/4221",[55,2.85,134,4.42,344,4.281,507,5.498]],["t/4223",[249,5.932,344,5.746]],["t/4225",[79,4.853,508,7.379]],["t/4227",[79,4.144,82,4.907,509,6.301]],["t/4229",[21,3.518,48,2.591,98,3.158,510,4.5,511,4.876]],["t/4231",[21,3.518,98,3.158,510,4.5,512,4.876,513,4.876]],["t/4233",[252,5.765]],["t/4237",[514,8.902]],["t/4239",[97,5.495,98,4.081,99,5.495]],["t/4243",[42,5.256,54,2.977,473,4.021]],["t/4245",[232,5.587,515,5.018]],["t/4247",[79,4.853,232,5.587]],["t/4249",[516,7.379,517,6.435]],["t/4251",[8,4.779,515,5.018]],["t/4253",[48,3.921,189,5.932]],["t/4254",[3,5.111,26,5.324]],["t/4256",[177,7.426]],["t/4260",[128,4.225,381,5.111]],["t/4262",[217,5.495,381,4.364,518,6.301]],["t/4264",[381,5.111,444,4.415]],["t/4266",[381,5.111,519,7.379]],["t/4268",[7,3.77,53,3.437,381,4.364]],["t/4270",[33,2.821,105,3.158,229,2.884,381,3.378,444,2.917]],["t/4274",[386,4.652,387,5.495,520,4.907]],["t/4276",[386,4.059,520,4.281,521,5.498,522,5.498]],["t/4278",[445,7.157]],["t/4282",[112,4.652,523,6.301,524,4.021]],["t/4284",[90,2.391,128,3.148,133,3.055,525,4.795]],["t/4286",[54,2.977,135,3.437,524,4.021]],["t/4288",[136,2.999,195,3.251,524,3.509,526,5.074]],["t/4290",[51,2.946,247,3.884,358,3.967,524,3.509]],["t/4292",[51,2.348,53,2.39,133,2.435,195,2.591,247,3.095,356,4.043]],["t/4294",[128,3.607,135,3.437,358,4.546]],["t/4296",[54,2.977,136,3.437,524,4.021]],["t/4298",[2,3.571,253,3.057,385,4.771]],["t/4300",[33,2.821,218,4.5,386,3.6,524,3.112,526,4.5]],["t/4302",[388,8.216]],["t/4304",[387,7.764]],["t/4306",[497,8.216]],["t/4310",[527,7.379,528,7.379]],["t/4312",[253,3.057,385,4.771,524,4.021]],["t/4314",[386,4.652,446,3.469,529,5.815]],["t/4315",[446,4.901]],["t/4317",[529,8.216]],["t/4319",[23,5.495,254,5.815,441,5.495]],["t/4321",[441,7.764]],["t/4323",[23,7.764]],["t/4325",[54,2.597,150,3.148,430,4.586,473,3.509]],["t/4327",[15,3.442,378,6.435]],["t/4331",[32,3.078,473,4.021,530,4.771]],["t/4333",[79,4.853,232,5.587]],["t/4335",[8,4.779,515,5.018]],["t/4337",[524,5.681]],["t/4339",[33,2.821,34,3.6,37,4.5,473,3.112,530,3.692]],["t/4340",[34,4.652,133,3.502,531,6.301]],["t/4342",[34,5.448,135,4.025]],["t/4344",[34,4.652,136,3.437,394,5.066]],["t/4346",[139,3.251,143,4.586,146,3.561,532,5.074]],["t/4350",[32,3.078,39,4.771,492,5.815]],["t/4352",[32,3.078,39,4.771,533,6.301]],["t/4354",[39,5.587,473,4.709]],["t/4356",[458,7.764]],["t/4357",[15,2.939,107,4.451,344,4.907]],["t/4359",[38,3.71,39,5.587]],["t/4362",[534,8.902]],["t/4364",[33,3.645,253,3.057,535,6.301]],["t/4366",[29,5.746,442,6.435]],["t/4368",[423,5.932,536,7.379]],["t/4370",[537,8.902]],["t/4372",[148,6.435,266,5.448]],["t/4374",[444,5.326]],["t/4376",[38,3.71,445,5.932]],["t/4378",[38,3.71,401,6.156]],["t/4380",[423,7.157]],["t/4382",[538,8.902]],["t/4386",[15,3.442,229,4.364]],["t/4388",[141,4.586,229,3.251,539,5.498,540,5.498]],["t/4390",[105,4.081,229,3.726,381,4.364]],["t/4392",[229,4.364,444,4.415]],["t/4394",[87,4.021,229,3.726,541,4.652]],["t/4396",[38,3.168,229,3.726,445,5.066]],["t/4398",[229,4.364,542,6.435]],["t/4400",[229,3.726,444,3.77,543,6.301]],["t/4402",[229,4.364,503,5.324]],["t/4404",[105,3.561,229,3.251,381,3.808,503,3.967]],["t/4406",[38,3.71,229,4.364]],["t/4408",[38,3.168,229,3.726,544,6.301]],["t/4410",[38,3.168,191,5.256,229,3.726]],["t/4412",[38,3.168,229,3.726,503,4.546]],["t/4416",[15,4.153]],["t/4418",[339,6.74]],["t/4420",[545,7.764]],["t/4422",[233,6.932]],["t/4424",[195,3.251,444,3.289,546,5.074,547,4.586]],["t/4426",[112,6.572]],["t/4428",[380,7.764]],["t/4430",[51,3.955,247,5.212]],["t/4432",[545,7.764]],["t/4434",[241,5.587,545,6.435]],["t/4436",[548,8.902]],["t/4438",[199,6.288]],["t/4440",[184,5.587,549,7.379]],["t/4442",[184,5.587,550,7.379]],["t/4444",[392,6.435,551,7.379]],["t/4446",[444,4.415,456,5.746]],["t/4448",[22,3.955,235,5.587]],["t/4454",[105,5.765]],["t/4455",[483,7.764]],["t/4457",[132,5.951]],["t/4459",[137,6.288]],["t/4461",[209,7.157]],["t/4463",[552,8.902]],["t/4465",[553,8.902]],["t/4467",[275,7.157]],["t/4469",[385,5.587,503,5.324]],["t/4471",[385,5.587,554,7.379]],["t/4473",[555,7.379,556,7.379]],["t/4475",[557,8.902]],["t/4477",[558,8.902]],["t/4479",[559,8.902]],["t/4481",[88,5.39]],["t/4483",[375,7.764]],["t/4485",[560,8.902]],["t/4487",[54,2.977,184,4.771,185,5.066]],["t/4489",[143,7.426]],["t/4491",[51,3.377,199,4.451,275,5.066]],["t/4493",[87,4.709,517,6.435]],["t/4495",[15,3.442,21,5.324]],["t/4497",[190,6.74]],["t/4499",[459,8.216]],["t/4501",[22,3.955,483,6.435]],["t/4503",[44,5.448,82,5.746]],["t/4505",[121,4.163,130,4.586,561,7.985]],["t/4509",[34,4.652,229,3.726,394,5.066]],["t/4511",[44,4.059,143,4.586,229,3.251,532,5.074]],["t/4513",[34,4.652,229,3.726,562,6.301]],["t/4515",[34,4.652,229,3.726,563,6.301]],["t/4517",[32,3.078,121,4.771,229,3.726]],["t/4521",[150,5.097]],["t/4522",[564,8.902]],["t/4524",[565,8.902]],["t/4526",[566,8.902]],["t/4528",[567,8.902]],["t/4530",[568,8.902]],["t/4532",[569,8.902]],["t/4534",[570,8.902]],["t/4538",[32,3.605,571,6.81]],["t/4540",[15,2.939,88,3.815,378,5.495]],["t/4542",[15,3.442,572,7.379]],["t/4544",[573,7.379,574,7.379]],["t/4546",[32,3.078,477,5.066,571,5.815]],["t/4550",[503,6.423]],["t/4552",[575,8.902]],["t/4554",[576,8.902]],["t/4556",[150,3.607,473,4.021,577,6.301]],["t/4560",[10,3.675,48,2.921,133,3.055,578,4.281]],["t/4562",[135,2.999,195,3.251,413,4.586,414,4.42]],["t/4564",[22,2.946,51,2.946,136,2.999,195,3.251]],["t/4566",[48,3.348,80,3.057,139,3.726]],["t/4568",[80,3.057,258,4.081,578,4.907]],["t/4570",[1,2.778,579,6.156]],["t/4572",[1,2.07,22,2.946,126,3.509,579,4.586]],["t/4574",[48,2.591,259,3.26,373,3.26,415,4.068,578,3.797]],["t/4576",[260,4.652,416,5.256,417,5.066]],["t/4580",[10,3.675,48,2.921,133,3.055,578,4.281]],["t/4582",[135,2.999,195,3.251,413,4.586,414,4.42]],["t/4584",[22,2.946,51,2.946,136,2.999,195,3.251]],["t/4586",[48,3.348,80,3.057,139,3.726]],["t/4588",[80,3.057,258,4.081,578,4.907]],["t/4590",[1,2.778,579,6.156]],["t/4592",[1,2.07,22,2.946,126,3.509,579,4.586]],["t/4594",[48,2.591,259,3.26,373,3.26,415,4.068,578,3.797]],["t/4596",[260,4.652,416,5.256,417,5.066]],["t/4599",[15,3.442,251,5.746]],["t/4603",[289,6.156,290,6.81]],["t/4604",[62,4.691]],["t/4606",[173,5.457]],["t/4608",[291,6.81,580,7.379]],["t/4612",[4,5.324,105,4.779]],["t/4614",[15,2.565,132,3.675,137,3.884,473,3.509]],["t/4616",[132,3.675,137,3.884,245,3.46,473,3.509]],["t/4618",[132,3.675,137,3.884,473,3.509,581,5.498]],["t/4620",[54,2.304,444,2.917,474,4.5,546,4.5,547,4.068]],["t/4622",[1,2.372,29,4.907,582,6.301]],["t/4624",[15,2.275,117,3.316,243,2.989,244,4.5,245,3.069]],["t/4626",[15,2.565,158,3.739,369,4.42,583,5.498]],["t/4628",[54,2.304,158,3.316,369,3.92,444,2.917,456,3.797]],["t/4630",[75,3.095,369,3.522,444,2.621,455,3.522,456,3.412,584,4.381]],["t/4632",[9,6.054]],["t/4634",[15,2.939,547,5.256,585,6.301]],["t/4636",[54,3.486,586,7.379]],["t/4638",[54,2.597,57,4.795,587,5.498,588,5.498]],["t/4640",[90,3.209,235,5.587]],["t/4642",[87,4.709,517,6.435]],["t/4644",[87,4.021,187,5.815,199,4.451]],["t/4646",[249,5.066,477,5.066,589,6.301]],["t/4648",[54,3.486,477,5.932]],["t/4650",[8,4.081,515,4.285,530,4.771]],["t/4652",[358,4.546,481,5.815,530,4.771]],["t/4654",[358,4.546,414,5.066,530,4.771]],["t/4656",[54,2.977,253,3.057,530,4.771]],["t/4658",[79,4.144,253,3.057,530,4.771]],["t/4660",[590,7.764]],["t/4662",[90,2.74,590,5.495,591,6.301]],["t/4664",[590,6.435,592,7.379]],["t/4666",[88,4.468,90,3.209]],["t/4668",[44,3.6,54,2.304,88,2.952,380,4.253,547,4.068]],["t/4670",[446,3.027,520,4.281,593,5.074,594,5.074]],["t/4672",[54,2.977,446,3.469,520,4.907]],["t/4674",[446,3.469,515,4.285,520,4.907]],["t/4676",[79,4.144,446,3.469,520,4.907]],["t/4678",[595,8.902]],["t/4680",[8,4.779,515,5.018]],["t/4682",[596,8.902]],["t/4684",[54,2.597,385,4.163,597,5.498,598,5.498]],["t/4686",[51,3.377,199,4.451,275,5.066]],["t/4688",[599,6.301,600,6.301,601,6.301]],["t/4690",[444,5.326]],["t/4692",[98,4.779,245,4.644]],["t/4694",[252,4.779,602,7.379]],["t/4696",[54,3.486,252,4.779]],["t/4698",[252,4.779,515,5.018]],["t/4700",[79,4.853,252,4.779]],["t/4702",[177,6.156,252,4.779]],["t/4704",[54,2.977,252,4.081,486,4.907]],["t/4706",[252,4.081,486,4.907,515,4.285]],["t/4708",[252,4.081,486,4.907,603,6.301]],["t/4710",[79,4.144,252,4.081,486,4.907]],["t/4712",[252,3.561,383,4.163,486,4.281,604,5.498]],["t/4714",[15,2.565,605,4.42,606,5.498,607,5.498]],["t/4716",[132,4.212,137,4.451,605,5.066]],["t/4718",[141,5.256,605,5.066,608,5.256]],["t/4720",[541,5.448,609,7.379]],["t/4722",[54,3.486,541,5.448]],["t/4724",[87,4.021,116,5.066,541,4.652]],["t/4726",[54,2.977,541,4.652,610,5.495]],["t/4728",[515,4.285,541,4.652,610,5.495]],["t/4730",[79,4.144,541,4.652,610,5.495]],["t/4732",[150,4.225,611,7.379]],["t/4734",[612,6.81,613,7.379]],["t/4736",[55,4.615]],["t/4738",[29,5.746,55,3.825]],["t/4740",[1,2.07,51,2.946,53,2.999,90,2.391]],["t/4742",[54,3.486,472,5.746]],["t/4744",[472,5.746,515,5.018]],["t/4746",[36,6.156,472,5.746]],["t/4748",[79,4.853,472,5.746]],["t/4750",[438,7.157]],["t/4752",[54,2.597,98,3.561,208,5.074,608,4.586]],["t/4754",[54,2.977,191,5.256,614,6.301]],["t/4756",[12,3.509,54,2.597,158,3.739,479,4.795]],["t/4758",[12,3.509,245,3.46,479,4.795,615,5.074]],["t/4760",[56,5.815,444,3.77,616,6.301]],["t/4762",[15,3.442,71,5.587]],["t/4764",[54,2.977,184,4.771,185,5.066]],["t/4766",[132,4.212,253,3.057,617,6.301]],["t/4768",[253,3.057,446,3.469,473,4.021]],["t/4770",[150,2.792,253,2.366,446,2.685,473,3.112,618,4.253]],["t/4772",[90,2.121,253,2.366,446,2.685,524,3.112,525,4.253]],["t/4774",[54,2.597,253,2.667,446,3.027,524,3.509]],["t/4776",[253,2.366,358,3.518,446,2.685,524,3.112,619,4.5]],["t/4778",[51,2.131,90,1.729,247,2.809,253,1.929,358,2.869,446,2.189,524,2.538]],["t/4780",[253,2.667,446,3.027,593,5.074,594,5.074]],["t/4782",[54,2.977,253,3.057,446,3.469]],["t/4784",[253,3.057,446,3.469,515,4.285]],["t/4786",[12,3.112,245,3.069,253,2.366,446,2.685,620,4.5]],["t/4788",[245,2.757,253,2.125,386,3.234,446,2.412,621,4.381,622,4.381]],["t/4790",[75,3.444,245,3.069,253,2.366,446,2.685,623,4.876]],["t/4792",[79,4.144,253,3.057,446,3.469]],["t/4794",[54,2.07,126,2.796,127,2.591,253,2.125,446,2.412,624,4.381]],["t/4796",[54,2.07,126,2.796,127,2.591,253,2.125,446,2.412,618,3.821]],["t/4798",[127,2.884,253,2.366,446,2.685,625,4.876,626,4.876]],["t/4800",[54,2.597,127,3.251,253,2.667,446,3.027]],["t/4802",[90,2.121,109,3.378,127,2.884,253,2.366,446,2.685]],["t/4804",[90,1.905,109,3.034,112,3.234,127,2.591,253,2.125,446,2.412]],["t/4806",[90,1.905,126,2.796,127,2.591,129,3.655,253,2.125,446,2.412]],["t/4808",[127,3.251,177,4.586,253,2.667,446,3.027]],["t/4810",[245,3.46,253,2.667,444,3.289,542,4.795]],["t/4812",[245,3.069,253,2.366,381,3.378,503,3.518,542,4.253]],["t/4814",[243,3.862,253,3.057,627,6.301]],["t/4816",[253,3.057,473,4.021,628,4.364]],["t/4818",[150,2.792,253,2.366,473,3.112,618,4.253,628,3.378]],["t/4820",[90,2.121,253,2.366,524,3.112,525,4.253,628,3.378]],["t/4822",[54,2.597,253,2.667,524,3.509,628,3.808]],["t/4824",[253,2.366,358,3.518,524,3.112,619,4.5,628,3.378]],["t/4826",[51,2.131,90,1.729,247,2.809,253,1.929,358,2.869,524,2.538,628,2.755]],["t/4828",[54,2.977,253,3.057,628,4.364]],["t/4830",[253,3.057,515,4.285,628,4.364]],["t/4832",[12,3.112,245,3.069,253,2.366,620,4.5,628,3.378]],["t/4834",[75,3.444,245,3.069,253,2.366,628,3.378,629,4.876]],["t/4836",[79,4.144,253,3.057,628,4.364]],["t/4838",[630,7.379,631,7.379]],["t/4840",[1,2.372,90,2.74,484,5.495]],["t/4842",[54,2.304,243,2.989,632,4.876,633,4.876,634,4.5]],["t/4844",[98,4.047,197,3.468,373,4.178,605,5.024]],["t/4846",[223,6.156,373,4.933]],["t/4848",[132,4.212,158,4.285,635,6.301]],["t/4850",[243,4.523,366,4.468]],["t/4852",[137,3.444,243,2.989,366,2.952,408,4.253,636,4.5]],["t/4854",[54,2.304,92,4.5,243,2.989,366,2.952,637,4.5]],["t/4856",[243,2.989,245,3.069,366,2.952,399,4.253,638,4.876]],["t/4858",[3,3.378,158,3.316,243,2.989,366,2.952,615,4.5]],["t/4860",[209,3.92,243,2.989,245,3.069,366,2.952,639,4.876]],["t/4862",[243,3.37,245,3.46,366,3.329,640,5.074]],["t/4864",[41,3.444,243,2.989,245,3.069,366,2.952,640,4.5]],["t/4866",[75,3.884,243,3.37,245,3.46,366,3.329]],["t/4868",[132,3.26,137,3.444,243,2.989,366,2.952,605,3.92]],["t/4870",[5,4.163,243,3.37,366,3.329,608,4.586]],["t/4872",[137,3.884,243,3.37,366,3.329,636,5.074]],["t/4874",[209,4.42,243,3.37,366,3.329,608,4.586]],["t/4876",[243,3.37,366,3.329,641,5.498,642,5.498]],["t/4878",[90,2.391,243,3.37,366,3.329,637,5.074]],["t/4880",[190,6.74]],["t/4882",[57,5.495,190,4.771,634,5.815]],["t/4884",[643,8.902]],["t/4888",[150,4.225,644,7.379]],["t/4890",[645,8.902]],["t/4892",[646,8.902]],["t/4894",[647,8.902]],["t/4896",[648,8.902]],["t/4898",[649,8.902]],["t/4900",[650,8.902]],["t/4902",[651,8.902]],["t/4904",[652,8.902]],["t/4906",[150,4.225,653,7.379]],["t/4908",[654,8.902]],["t/4910",[655,8.902]],["t/4912",[656,8.902]],["t/4914",[657,8.902]],["t/4916",[658,8.902]],["t/4918",[659,8.902]],["t/4920",[660,8.902]],["t/4922",[661,8.902]],["t/4924",[662,8.902]],["t/4926",[663,8.902]],["t/4928",[664,8.902]],["t/4930",[665,8.902]],["t/4932",[666,8.902]],["t/4934",[667,8.902]],["t/4936",[668,8.902]],["t/4938",[669,8.902]],["t/4940",[670,8.902]],["t/4942",[671,8.902]],["t/4944",[672,8.902]],["t/4946",[673,8.902]],["t/4948",[150,4.225,417,5.932]],["t/4950",[674,8.902]],["t/4952",[675,8.902]],["t/4954",[676,8.902]],["t/4956",[500,8.216]],["t/4958",[677,8.902]],["t/4960",[678,8.902]],["t/4962",[679,8.902]],["t/4964",[680,8.902]],["t/4966",[681,8.902]],["t/4968",[682,8.902]],["t/4970",[683,8.902]],["t/4972",[684,8.902]],["t/4974",[685,8.902]],["t/4976",[686,8.902]],["t/4978",[687,8.902]],["t/4980",[688,8.902]],["t/4982",[689,8.902]],["t/4984",[690,8.902]],["t/4986",[691,8.902]],["t/4988",[692,8.902]],["t/4990",[693,8.902]],["t/4992",[694,8.902]],["t/4994",[695,8.902]],["t/4996",[696,8.902]],["t/4998",[697,8.902]],["t/5000",[698,8.902]],["t/5002",[699,8.902]],["t/5004",[700,8.902]],["t/5006",[701,8.902]],["t/5008",[702,8.902]],["t/5010",[703,8.902]],["t/5012",[704,8.902]],["t/5014",[705,8.902]],["t/5016",[706,8.902]],["t/5018",[707,8.902]],["t/5020",[708,8.902]],["t/5022",[709,8.902]],["t/5024",[710,8.902]],["t/5026",[711,8.902]],["t/5028",[712,8.902]],["t/5030",[713,8.902]],["t/5032",[501,8.216]],["t/5034",[714,8.902]],["t/5036",[715,8.902]],["t/5038",[716,8.902]],["t/5040",[717,8.902]],["t/5042",[150,4.225,541,5.448]],["t/5044",[718,8.902]],["t/5046",[719,8.902]],["t/5048",[720,8.902]],["t/5050",[721,8.902]],["t/5052",[722,8.902]],["t/5054",[723,8.902]],["t/5056",[724,8.902]],["t/5058",[725,8.902]],["t/5060",[726,8.902]],["t/5062",[727,8.902]],["t/5064",[150,4.225,612,6.81]],["t/5066",[728,8.902]],["t/5068",[729,8.902]],["t/5070",[730,8.902]],["t/5072",[731,8.902]],["t/5074",[732,8.902]],["t/5076",[11,5.746,150,4.225]],["t/5078",[733,8.902]],["t/5080",[150,4.225,503,5.324]],["t/5082",[734,8.902]],["t/5084",[735,8.902]],["t/5086",[736,8.902]],["t/5088",[737,8.902]],["t/5090",[738,8.902]],["t/5092",[739,8.902]],["t/5094",[740,8.902]],["t/5096",[741,8.902]],["t/5098",[150,4.225,742,7.379]],["t/5100",[743,8.902]],["t/5102",[744,8.902]],["t/5104",[745,8.902]],["t/5106",[150,4.225,746,7.379]],["t/5108",[747,8.902]],["t/5110",[748,8.902]],["t/5112",[150,4.225,749,7.379]],["t/5113",[750,8.902]]],"invertedIndex":[["",{"_index":65,"t":{"2687":{"position":[[6,1]]},"3883":{"position":[[6,1]]}}}],["1",{"_index":133,"t":{"2837":{"position":[[0,2]]},"3219":{"position":[[0,2]]},"3221":{"position":[[28,1]]},"3261":{"position":[[0,2]]},"3282":{"position":[[0,2]]},"3300":{"position":[[0,2]]},"3330":{"position":[[0,2]]},"3338":{"position":[[0,2]]},"3537":{"position":[[0,2]]},"3556":{"position":[[0,2]]},"3564":{"position":[[19,1]]},"3573":{"position":[[0,2]]},"3585":{"position":[[14,1]]},"3607":{"position":[[0,2]]},"3634":{"position":[[0,2]]},"3655":{"position":[[0,2]]},"3684":{"position":[[0,2]]},"3692":{"position":[[19,1]]},"3771":{"position":[[0,2]]},"3857":{"position":[[0,2]]},"3893":{"position":[[0,2]]},"4172":{"position":[[0,2]]},"4184":{"position":[[0,2]]},"4284":{"position":[[0,2]]},"4292":{"position":[[0,2]]},"4340":{"position":[[0,2]]},"4560":{"position":[[0,2]]},"4580":{"position":[[0,2]]}}}],["10",{"_index":271,"t":{"3318":{"position":[[0,3]]},"3591":{"position":[[0,3]]},"3625":{"position":[[0,3]]},"3673":{"position":[[0,3]]}}}],["11",{"_index":360,"t":{"3593":{"position":[[0,3]]}}}],["12",{"_index":362,"t":{"3595":{"position":[[0,3]]}}}],["13",{"_index":363,"t":{"3597":{"position":[[0,3]]}}}],["2",{"_index":135,"t":{"2839":{"position":[[0,2]]},"3221":{"position":[[0,2]]},"3227":{"position":[[14,1]]},"3263":{"position":[[0,2]]},"3267":{"position":[[14,1]]},"3284":{"position":[[0,2]]},"3302":{"position":[[0,2]]},"3312":{"position":[[14,1]]},"3332":{"position":[[0,2]]},"3340":{"position":[[0,2]]},"3539":{"position":[[0,2]]},"3558":{"position":[[0,2]]},"3575":{"position":[[0,2]]},"3587":{"position":[[14,1]]},"3609":{"position":[[0,2]]},"3636":{"position":[[0,2]]},"3657":{"position":[[0,2]]},"3667":{"position":[[14,1]]},"3686":{"position":[[0,2]]},"3694":{"position":[[19,1]]},"3773":{"position":[[0,2]]},"3859":{"position":[[0,2]]},"3895":{"position":[[0,2]]},"4174":{"position":[[0,2]]},"4186":{"position":[[0,2]]},"4286":{"position":[[0,2]]},"4294":{"position":[[0,2]]},"4342":{"position":[[0,2]]},"4562":{"position":[[0,2]]},"4582":{"position":[[0,2]]}}}],["2.0",{"_index":240,"t":{"3152":{"position":[[5,3]]},"3406":{"position":[[5,3]]}}}],["3",{"_index":136,"t":{"2841":{"position":[[0,2]]},"3223":{"position":[[0,2]]},"3229":{"position":[[14,1]]},"3265":{"position":[[0,2]]},"3269":{"position":[[14,1]]},"3286":{"position":[[0,2]]},"3304":{"position":[[0,2]]},"3314":{"position":[[14,1]]},"3334":{"position":[[0,2]]},"3342":{"position":[[0,2]]},"3541":{"position":[[0,2]]},"3560":{"position":[[0,2]]},"3577":{"position":[[0,2]]},"3589":{"position":[[14,1]]},"3611":{"position":[[0,2]]},"3638":{"position":[[0,2]]},"3659":{"position":[[0,2]]},"3669":{"position":[[14,1]]},"3688":{"position":[[0,2]]},"3696":{"position":[[19,1]]},"3775":{"position":[[0,2]]},"3861":{"position":[[0,2]]},"3897":{"position":[[0,2]]},"4176":{"position":[[0,2]]},"4188":{"position":[[0,2]]},"4288":{"position":[[0,2]]},"4296":{"position":[[0,2]]},"4344":{"position":[[0,2]]},"4564":{"position":[[0,2]]},"4584":{"position":[[0,2]]}}}],["4",{"_index":139,"t":{"2843":{"position":[[0,2]]},"3225":{"position":[[0,2]]},"3267":{"position":[[0,2]]},"3288":{"position":[[0,2]]},"3306":{"position":[[0,2]]},"3316":{"position":[[14,1]]},"3562":{"position":[[0,2]]},"3579":{"position":[[0,2]]},"3591":{"position":[[15,1]]},"3613":{"position":[[0,2]]},"3640":{"position":[[0,2]]},"3661":{"position":[[0,2]]},"3671":{"position":[[14,1]]},"3690":{"position":[[0,2]]},"3698":{"position":[[19,1]]},"3777":{"position":[[0,2]]},"3863":{"position":[[0,2]]},"3899":{"position":[[0,2]]},"4178":{"position":[[0,2]]},"4346":{"position":[[0,2]]},"4566":{"position":[[0,2]]},"4586":{"position":[[0,2]]}}}],["5",{"_index":258,"t":{"3227":{"position":[[0,2]]},"3269":{"position":[[0,2]]},"3290":{"position":[[0,2]]},"3308":{"position":[[0,2]]},"3564":{"position":[[0,2]]},"3581":{"position":[[0,2]]},"3615":{"position":[[0,2]]},"3663":{"position":[[0,2]]},"3692":{"position":[[0,2]]},"3779":{"position":[[0,2]]},"3865":{"position":[[0,2]]},"3901":{"position":[[0,2]]},"4180":{"position":[[0,2]]},"4568":{"position":[[0,2]]},"4588":{"position":[[0,2]]}}}],["6",{"_index":259,"t":{"3229":{"position":[[0,2]]},"3271":{"position":[[0,2]]},"3310":{"position":[[0,2]]},"3566":{"position":[[0,2]]},"3583":{"position":[[0,2]]},"3617":{"position":[[0,2]]},"3665":{"position":[[0,2]]},"3694":{"position":[[0,2]]},"3781":{"position":[[0,2]]},"3867":{"position":[[0,2]]},"3903":{"position":[[0,2]]},"4574":{"position":[[0,2]]},"4594":{"position":[[0,2]]}}}],["7",{"_index":260,"t":{"3231":{"position":[[0,2]]},"3312":{"position":[[0,2]]},"3585":{"position":[[0,2]]},"3619":{"position":[[0,2]]},"3667":{"position":[[0,2]]},"3696":{"position":[[0,2]]},"4576":{"position":[[0,2]]},"4596":{"position":[[0,2]]}}}],["8",{"_index":269,"t":{"3314":{"position":[[0,2]]},"3587":{"position":[[0,2]]},"3621":{"position":[[0,2]]},"3669":{"position":[[0,2]]},"3698":{"position":[[0,2]]}}}],["9",{"_index":270,"t":{"3316":{"position":[[0,2]]},"3589":{"position":[[0,2]]},"3623":{"position":[[0,2]]},"3671":{"position":[[0,2]]}}}],["access",{"_index":42,"t":{"2647":{"position":[[0,6]]},"3361":{"position":[[11,6]]},"3709":{"position":[[0,9]]},"4243":{"position":[[11,6]]}}}],["access_list",{"_index":406,"t":{"3828":{"position":[[0,11]]}}}],["accident",{"_index":95,"t":{"2740":{"position":[[8,10]]}}}],["account",{"_index":3,"t":{"2570":{"position":[[0,7]]},"3043":{"position":[[0,7]]},"3045":{"position":[[7,7]]},"3047":{"position":[[11,7]]},"3049":{"position":[[9,7]]},"3159":{"position":[[12,8]]},"3161":{"position":[[12,8]]},"3163":{"position":[[12,8]]},"3165":{"position":[[12,8]]},"4254":{"position":[[0,7]]},"4858":{"position":[[17,7]]}}}],["activ",{"_index":620,"t":{"4786":{"position":[[13,6]]},"4832":{"position":[[11,6]]}}}],["ad",{"_index":159,"t":{"2913":{"position":[[0,6]]},"3288":{"position":[[11,6]]},"4212":{"position":[[0,2]]}}}],["add",{"_index":101,"t":{"2750":{"position":[[0,3]]},"2795":{"position":[[0,3]]},"2797":{"position":[[0,3]]},"2861":{"position":[[0,3]]},"2863":{"position":[[0,3]]},"2865":{"position":[[0,3]]},"2893":{"position":[[0,3]]},"2895":{"position":[[0,3]]},"3073":{"position":[[0,3]]},"3120":{"position":[[0,3]]},"3281":{"position":[[0,3]]},"3593":{"position":[[4,3]]},"3595":{"position":[[4,3]]},"3769":{"position":[[0,3]]}}}],["add/remov",{"_index":365,"t":{"3619":{"position":[[3,10]]}}}],["addit",{"_index":268,"t":{"3290":{"position":[[14,8]]},"3619":{"position":[[14,10]]}}}],["address",{"_index":241,"t":{"3163":{"position":[[30,7]]},"3171":{"position":[[27,7]]},"3221":{"position":[[11,7]]},"3286":{"position":[[12,7]]},"3779":{"position":[[31,7]]},"3801":{"position":[[5,7]]},"4434":{"position":[[7,7]]}}}],["admin",{"_index":644,"t":{"4888":{"position":[[0,5]]}}}],["admin_addp",{"_index":645,"t":{"4890":{"position":[[0,13]]}}}],["admin_changeloglevel",{"_index":646,"t":{"4892":{"position":[[0,20]]}}}],["admin_generatelogbloomcach",{"_index":647,"t":{"4894":{"position":[[0,27]]}}}],["admin_logsremovecach",{"_index":648,"t":{"4896":{"position":[[0,21]]}}}],["admin_logsrepaircach",{"_index":649,"t":{"4898":{"position":[[0,21]]}}}],["admin_nodeinfo",{"_index":650,"t":{"4900":{"position":[[0,14]]}}}],["admin_p",{"_index":651,"t":{"4902":{"position":[[0,11]]}}}],["admin_removep",{"_index":652,"t":{"4904":{"position":[[0,16]]}}}],["advanc",{"_index":489,"t":{"4162":{"position":[[0,8]]}}}],["ak",{"_index":580,"t":{"4608":{"position":[[6,3]]}}}],["algorithm",{"_index":619,"t":{"4776":{"position":[[28,9]]},"4824":{"position":[[26,9]]}}}],["alia",{"_index":111,"t":{"2763":{"position":[[41,5]]}}}],["allianc",{"_index":47,"t":{"2649":{"position":[[20,8]]}}}],["alloc",{"_index":554,"t":{"4471":{"position":[[5,5]]}}}],["allowlist",{"_index":8,"t":{"2585":{"position":[[0,10]]},"3033":{"position":[[5,12]]},"3035":{"position":[[25,9]]},"3037":{"position":[[12,12]]},"3039":{"position":[[16,9]]},"3041":{"position":[[14,9]]},"3043":{"position":[[8,12]]},"3045":{"position":[[15,12]]},"3047":{"position":[[19,9]]},"3049":{"position":[[17,9]]},"4113":{"position":[[0,9]]},"4251":{"position":[[5,9]]},"4335":{"position":[[5,9]]},"4650":{"position":[[12,9]]},"4680":{"position":[[5,9]]}}}],["ansibl",{"_index":514,"t":{"4237":{"position":[[0,7]]}}}],["api",{"_index":473,"t":{"4091":{"position":[[9,3]]},"4212":{"position":[[15,4]]},"4214":{"position":[[28,4]]},"4243":{"position":[[7,3]]},"4325":{"position":[[0,3]]},"4331":{"position":[[21,3]]},"4339":{"position":[[32,3]]},"4354":{"position":[[7,4]]},"4556":{"position":[[11,3]]},"4614":{"position":[[0,3]]},"4616":{"position":[[0,3]]},"4618":{"position":[[0,3]]},"4768":{"position":[[9,3]]},"4770":{"position":[[9,3]]},"4816":{"position":[[7,3]]},"4818":{"position":[[7,3]]}}}],["app",{"_index":522,"t":{"4276":{"position":[[31,3]]}}}],["applic",{"_index":577,"t":{"4556":{"position":[[0,10]]}}}],["architectur",{"_index":0,"t":{"2564":{"position":[[0,12]]},"3646":{"position":[[0,12]]}}}],["archiv",{"_index":425,"t":{"3919":{"position":[[7,7]]}}}],["attest",{"_index":410,"t":{"3838":{"position":[[9,13]]},"3840":{"position":[[0,11]]},"3842":{"position":[[10,12]]}}}],["attribut",{"_index":562,"t":{"4513":{"position":[[8,10]]}}}],["auth",{"_index":618,"t":{"4770":{"position":[[24,4]]},"4796":{"position":[[20,4]]},"4818":{"position":[[22,4]]}}}],["authent",{"_index":524,"t":{"4282":{"position":[[22,14]]},"4286":{"position":[[10,14]]},"4288":{"position":[[15,14]]},"4290":{"position":[[15,14]]},"4296":{"position":[[10,14]]},"4300":{"position":[[7,14]]},"4312":{"position":[[9,14]]},"4337":{"position":[[0,14]]},"4772":{"position":[[9,14]]},"4774":{"position":[[9,14]]},"4776":{"position":[[9,14]]},"4778":{"position":[[9,14]]},"4820":{"position":[[7,14]]},"4822":{"position":[[7,14]]},"4824":{"position":[[7,14]]},"4826":{"position":[[7,14]]}}}],["auto",{"_index":474,"t":{"4097":{"position":[[0,4]]},"4620":{"position":[[0,4]]}}}],["automat",{"_index":348,"t":{"3535":{"position":[[0,9]]},"3543":{"position":[[0,9]]}}}],["avail",{"_index":221,"t":{"3102":{"position":[[5,12]]}}}],["avoid",{"_index":211,"t":{"3092":{"position":[[0,5]]}}}],["aw",{"_index":289,"t":{"3382":{"position":[[0,3]]},"3975":{"position":[[0,3]]},"4022":{"position":[[0,3]]},"4603":{"position":[[0,3]]}}}],["azur",{"_index":291,"t":{"3384":{"position":[[0,5]]},"4608":{"position":[[0,5]]}}}],["backup",{"_index":91,"t":{"2734":{"position":[[5,7]]}}}],["balanc",{"_index":350,"t":{"3537":{"position":[[17,8]]},"3539":{"position":[[21,8]]}}}],["ban",{"_index":582,"t":{"4622":{"position":[[0,6]]}}}],["base",{"_index":140,"t":{"2843":{"position":[[15,4]]},"3361":{"position":[[5,5]]},"3818":{"position":[[19,4]]},"3820":{"position":[[22,4],[27,4]]}}}],["basic",{"_index":488,"t":{"4160":{"position":[[0,5]]}}}],["batch",{"_index":623,"t":{"4790":{"position":[[13,5]]}}}],["beacon",{"_index":579,"t":{"4570":{"position":[[0,6]]},"4572":{"position":[[0,6]]},"4590":{"position":[[0,6]]},"4592":{"position":[[0,6]]}}}],["beneficiari",{"_index":125,"t":{"2813":{"position":[[21,11]]},"2877":{"position":[[21,11]]}}}],["benefit",{"_index":512,"t":{"4231":{"position":[[12,7]]}}}],["best",{"_index":346,"t":{"3529":{"position":[[0,4]]}}}],["besu",{"_index":48,"t":{"2651":{"position":[[0,4]]},"2657":{"position":[[0,4]]},"2708":{"position":[[6,4]]},"2712":{"position":[[5,4]]},"2825":{"position":[[6,4]]},"2831":{"position":[[6,4]]},"2835":{"position":[[22,4]]},"2841":{"position":[[9,4]]},"2975":{"position":[[42,4]]},"3013":{"position":[[17,4]]},"3084":{"position":[[10,4]]},"3494":{"position":[[7,4]]},"3541":{"position":[[10,4]]},"3564":{"position":[[9,4]]},"3692":{"position":[[9,4]]},"3694":{"position":[[9,4]]},"3696":{"position":[[9,4]]},"3698":{"position":[[9,4]]},"3861":{"position":[[9,4]]},"3897":{"position":[[9,4]]},"3955":{"position":[[6,4]]},"3963":{"position":[[5,4]]},"4134":{"position":[[8,4]]},"4150":{"position":[[31,4]]},"4152":{"position":[[20,4]]},"4229":{"position":[[38,6]]},"4253":{"position":[[17,4]]},"4560":{"position":[[11,4]]},"4566":{"position":[[9,4]]},"4574":{"position":[[12,4]]},"4580":{"position":[[11,4]]},"4586":{"position":[[9,4]]},"4594":{"position":[[12,4]]}}}],["between",{"_index":43,"t":{"2647":{"position":[[7,7]]},"3086":{"position":[[28,7]]}}}],["binari",{"_index":68,"t":{"2690":{"position":[[22,8]]},"3886":{"position":[[22,8]]}}}],["blob",{"_index":408,"t":{"3832":{"position":[[0,4]]},"3834":{"position":[[5,4]]},"4852":{"position":[[8,4]]}}}],["block",{"_index":15,"t":{"2605":{"position":[[0,5]]},"2720":{"position":[[6,5]]},"2756":{"position":[[10,5]]},"2759":{"position":[[5,5]]},"2761":{"position":[[5,5]]},"2763":{"position":[[5,5]]},"2765":{"position":[[5,5]]},"2767":{"position":[[5,5]]},"2769":{"position":[[5,5]]},"2771":{"position":[[5,5]]},"2773":{"position":[[5,5]]},"2775":{"position":[[5,5]]},"2789":{"position":[[0,5]]},"2809":{"position":[[10,5]]},"2811":{"position":[[10,5]]},"2837":{"position":[[11,5]]},"2855":{"position":[[0,5]]},"2863":{"position":[[32,5]]},"2871":{"position":[[10,5]]},"2873":{"position":[[10,5]]},"2883":{"position":[[11,6]]},"2903":{"position":[[10,5]]},"2905":{"position":[[16,6]]},"3177":{"position":[[4,5]]},"3205":{"position":[[0,5]]},"3737":{"position":[[6,5]]},"3751":{"position":[[24,5]]},"3931":{"position":[[6,5]]},"4085":{"position":[[0,5]]},"4172":{"position":[[3,6]]},"4176":{"position":[[3,6]]},"4178":{"position":[[3,6]]},"4180":{"position":[[3,6]]},"4182":{"position":[[0,5]]},"4184":{"position":[[3,5]]},"4186":{"position":[[3,5]]},"4188":{"position":[[3,5]]},"4327":{"position":[[0,5]]},"4357":{"position":[[6,5]]},"4386":{"position":[[0,5]]},"4416":{"position":[[0,6]]},"4495":{"position":[[0,5]]},"4540":{"position":[[8,5]]},"4542":{"position":[[10,6]]},"4599":{"position":[[0,5]]},"4614":{"position":[[14,6]]},"4624":{"position":[[0,5]]},"4626":{"position":[[18,5]]},"4634":{"position":[[11,6]]},"4714":{"position":[[4,5]]},"4762":{"position":[[9,5]]}}}],["blockchain",{"_index":234,"t":{"3144":{"position":[[9,10]]},"3625":{"position":[[4,10]]},"3733":{"position":[[22,10]]}}}],["bloom",{"_index":546,"t":{"4424":{"position":[[13,5]]},"4620":{"position":[[9,5]]}}}],["bonsai",{"_index":369,"t":{"3702":{"position":[[0,6]]},"3706":{"position":[[20,6]]},"4626":{"position":[[0,6]]},"4628":{"position":[[0,6]]},"4630":{"position":[[0,6]]}}}],["bootnod",{"_index":9,"t":{"2587":{"position":[[0,9]]},"2746":{"position":[[10,8]]},"2748":{"position":[[10,9]]},"2750":{"position":[[15,9]]},"2915":{"position":[[14,9]]},"3035":{"position":[[8,9]]},"3225":{"position":[[31,8]]},"3265":{"position":[[29,8]]},"3310":{"position":[[31,8]]},"3615":{"position":[[14,9]]},"3665":{"position":[[31,8]]},"4632":{"position":[[0,9]]}}}],["build",{"_index":58,"t":{"2679":{"position":[[0,5]]},"3925":{"position":[[0,5]]},"4196":{"position":[[0,5]]}}}],["bump",{"_index":636,"t":{"4852":{"position":[[19,4]]},"4872":{"position":[[14,4]]}}}],["ca",{"_index":624,"t":{"4794":{"position":[[13,2]]}}}],["cacert",{"_index":591,"t":{"4662":{"position":[[9,6]]}}}],["cach",{"_index":547,"t":{"4424":{"position":[[19,5]]},"4620":{"position":[[15,7]]},"4634":{"position":[[0,5]]},"4668":{"position":[[19,5]]}}}],["call",{"_index":544,"t":{"4408":{"position":[[12,4]]}}}],["can’t",{"_index":505,"t":{"4219":{"position":[[5,5]]}}}],["cap",{"_index":617,"t":{"4766":{"position":[[8,3]]}}}],["capac",{"_index":638,"t":{"4856":{"position":[[18,8]]}}}],["case",{"_index":206,"t":{"3086":{"position":[[15,4]]}}}],["categori",{"_index":602,"t":{"4694":{"position":[[8,8]]}}}],["certif",{"_index":110,"t":{"2763":{"position":[[29,11]]}}}],["chain",{"_index":375,"t":{"3717":{"position":[[12,5],[29,5]]},"4085":{"position":[[28,5]]},"4483":{"position":[[0,5]]}}}],["chainlen",{"_index":164,"t":{"2961":{"position":[[6,9]]},"2963":{"position":[[8,9]]},"2965":{"position":[[5,9]]}}}],["chang",{"_index":217,"t":{"3096":{"position":[[23,7]]},"4081":{"position":[[10,6]]},"4262":{"position":[[18,7]]}}}],["chart",{"_index":342,"t":{"3506":{"position":[[32,5]]},"3605":{"position":[[20,6]]},"3611":{"position":[[25,5]]},"3613":{"position":[[22,5]]}}}],["check",{"_index":344,"t":{"3525":{"position":[[0,5]]},"3539":{"position":[[3,5]]},"3607":{"position":[[3,5]]},"4221":{"position":[[48,7]]},"4223":{"position":[[21,7]]},"4357":{"position":[[0,5]]}}}],["checkpoint",{"_index":424,"t":{"3915":{"position":[[0,10]]}}}],["choic",{"_index":532,"t":{"4346":{"position":[[19,6]]},"4511":{"position":[[5,6]]}}}],["cipher",{"_index":625,"t":{"4798":{"position":[[13,6]]}}}],["claim",{"_index":338,"t":{"3492":{"position":[[27,5]]}}}],["class",{"_index":231,"t":{"3136":{"position":[[12,7]]}}}],["clean",{"_index":84,"t":{"2712":{"position":[[14,5]]},"3963":{"position":[[14,5]]}}}],["client",{"_index":126,"t":{"2821":{"position":[[10,6]]},"2823":{"position":[[17,7]]},"2925":{"position":[[18,6]]},"3122":{"position":[[29,6]]},"3789":{"position":[[24,7]]},"3791":{"position":[[10,7]]},"3793":{"position":[[10,7]]},"3863":{"position":[[23,6]]},"3865":{"position":[[16,7]]},"3899":{"position":[[23,6]]},"3901":{"position":[[16,7]]},"4572":{"position":[[26,6]]},"4592":{"position":[[26,6]]},"4794":{"position":[[16,7]]},"4796":{"position":[[13,6]]},"4806":{"position":[[19,7]]}}}],["cliqu",{"_index":157,"t":{"2891":{"position":[[13,6]]},"3388":{"position":[[0,6]]}}}],["clique_discard",{"_index":292,"t":{"3390":{"position":[[0,14]]}}}],["clique_getsign",{"_index":293,"t":{"3392":{"position":[[0,17]]}}}],["clique_getsignermetr",{"_index":294,"t":{"3394":{"position":[[0,23]]}}}],["clique_getsignersathash",{"_index":295,"t":{"3396":{"position":[[0,23]]}}}],["clique_propos",{"_index":296,"t":{"3398":{"position":[[0,16]]},"3400":{"position":[[0,14]]}}}],["cloud",{"_index":277,"t":{"3348":{"position":[[0,5]]},"3381":{"position":[[0,5]]}}}],["cluster",{"_index":279,"t":{"3354":{"position":[[6,7]]},"3373":{"position":[[6,8]]},"3381":{"position":[[6,8]]},"3525":{"position":[[34,7]]},"3531":{"position":[[6,7]]},"3607":{"position":[[37,7]]}}}],["cni",{"_index":278,"t":{"3352":{"position":[[0,3]]}}}],["co",{"_index":202,"t":{"3084":{"position":[[0,2]]}}}],["code",{"_index":483,"t":{"4132":{"position":[[28,4]]},"4455":{"position":[[0,4]]},"4501":{"position":[[0,4]]}}}],["coinbas",{"_index":609,"t":{"4720":{"position":[[6,8]]}}}],["collector",{"_index":167,"t":{"2973":{"position":[[22,9]]}}}],["color",{"_index":586,"t":{"4636":{"position":[[0,5]]}}}],["column",{"_index":460,"t":{"4069":{"position":[[0,6]]},"4077":{"position":[[0,6]]}}}],["command",{"_index":103,"t":{"2758":{"position":[[0,7]]},"2927":{"position":[[20,7]]},"2932":{"position":[[0,7]]},"4065":{"position":[[6,7]]}}}],["commun",{"_index":214,"t":{"3094":{"position":[[31,13]]}}}],["compact",{"_index":614,"t":{"4754":{"position":[[8,10]]}}}],["compat",{"_index":57,"t":{"2673":{"position":[[6,10]]},"4638":{"position":[[0,13]]},"4882":{"position":[[8,13]]}}}],["compliant",{"_index":181,"t":{"3013":{"position":[[4,9]]}}}],["compon",{"_index":160,"t":{"2921":{"position":[[0,10]]}}}],["compos",{"_index":172,"t":{"2981":{"position":[[35,7]]},"3634":{"position":[[17,7]]},"3775":{"position":[[17,7]]}}}],["concept",{"_index":280,"t":{"3356":{"position":[[0,8]]}}}],["conclus",{"_index":412,"t":{"3844":{"position":[[0,10]]}}}],["concurr",{"_index":200,"t":{"3082":{"position":[[4,10]]}}}],["config",{"_index":235,"t":{"3144":{"position":[[20,6]]},"3159":{"position":[[21,6]]},"3161":{"position":[[21,6]]},"3167":{"position":[[18,6]]},"3169":{"position":[[18,6]]},"4448":{"position":[[9,6]]},"4640":{"position":[[0,6]]}}}],["configur",{"_index":32,"t":{"2631":{"position":[[0,13]]},"2722":{"position":[[8,13]]},"2748":{"position":[[0,9]]},"2756":{"position":[[0,9]]},"2791":{"position":[[9,13]]},"2793":{"position":[[11,13]]},"2809":{"position":[[0,9]]},"2811":{"position":[[0,9]]},"2813":{"position":[[0,9]]},"2821":{"position":[[0,9]]},"2827":{"position":[[0,9]]},"2835":{"position":[[0,9]]},"2845":{"position":[[0,9]]},"2857":{"position":[[9,13]]},"2859":{"position":[[11,13]]},"2871":{"position":[[0,9]]},"2873":{"position":[[0,9]]},"2877":{"position":[[0,9]]},"2889":{"position":[[11,13]]},"2903":{"position":[[0,9]]},"2905":{"position":[[0,9]]},"3051":{"position":[[12,13]]},"3302":{"position":[[12,13]]},"3535":{"position":[[10,13]]},"3560":{"position":[[22,13]]},"3575":{"position":[[14,13]]},"3583":{"position":[[26,13]]},"3593":{"position":[[44,13]]},"3657":{"position":[[12,13]]},"3688":{"position":[[18,13]]},"3733":{"position":[[33,13]]},"3777":{"position":[[21,13]]},"3933":{"position":[[8,13]]},"3979":{"position":[[0,13]]},"3981":{"position":[[5,13]]},"3983":{"position":[[8,13]]},"4028":{"position":[[7,14]]},"4142":{"position":[[0,9]]},"4331":{"position":[[0,9]]},"4350":{"position":[[0,9]]},"4352":{"position":[[0,9]]},"4517":{"position":[[11,13]]},"4538":{"position":[[0,13]]},"4546":{"position":[[10,13]]}}}],["confirm",{"_index":89,"t":{"2724":{"position":[[0,7]]},"3231":{"position":[[3,7]]},"3271":{"position":[[3,7]]},"3318":{"position":[[4,7]]},"3597":{"position":[[4,7]]},"3673":{"position":[[4,7]]},"3945":{"position":[[0,7]]}}}],["conflict",{"_index":420,"t":{"3873":{"position":[[0,8]]}}}],["connect",{"_index":12,"t":{"2595":{"position":[[0,10]]},"2891":{"position":[[0,7]]},"2925":{"position":[[0,7]]},"2927":{"position":[[0,7]]},"2981":{"position":[[7,7]]},"3209":{"position":[[0,7]]},"3525":{"position":[[19,7]]},"3607":{"position":[[22,7]]},"3623":{"position":[[3,7]]},"4115":{"position":[[13,11]]},"4117":{"position":[[13,11]]},"4119":{"position":[[10,11]]},"4756":{"position":[[7,11]]},"4758":{"position":[[7,11]]},"4786":{"position":[[20,11]]},"4832":{"position":[[18,11]]}}}],["consensu",{"_index":395,"t":{"3789":{"position":[[14,9]]},"3793":{"position":[[0,9]]},"3863":{"position":[[13,9]]},"3899":{"position":[[13,9]]}}}],["consol",{"_index":528,"t":{"4310":{"position":[[5,7]]}}}],["contact",{"_index":592,"t":{"4664":{"position":[[9,7]]}}}],["contain",{"_index":174,"t":{"2987":{"position":[[34,9]]},"3765":{"position":[[54,10]]},"3767":{"position":[[36,10]]}}}],["content",{"_index":621,"t":{"4788":{"position":[[21,7]]}}}],["contract",{"_index":7,"t":{"2583":{"position":[[14,9]]},"2623":{"position":[[17,9]]},"2779":{"position":[[15,8]]},"2839":{"position":[[11,8]]},"2865":{"position":[[40,8]]},"3029":{"position":[[26,8]]},"3124":{"position":[[9,8]]},"3163":{"position":[[21,8]]},"3165":{"position":[[21,8]]},"3171":{"position":[[18,8]]},"3173":{"position":[[18,8]]},"3175":{"position":[[18,8]]},"3253":{"position":[[39,9]]},"3328":{"position":[[21,9]]},"3336":{"position":[[22,9]]},"3514":{"position":[[0,9]]},"3638":{"position":[[22,8]]},"3757":{"position":[[6,8]]},"3759":{"position":[[11,8]]},"4136":{"position":[[9,8]]},"4268":{"position":[[20,9]]}}}],["control",{"_index":283,"t":{"3361":{"position":[[18,8]]},"3367":{"position":[[8,11]]}}}],["copi",{"_index":265,"t":{"3286":{"position":[[3,4]]},"3306":{"position":[[3,4]]},"3308":{"position":[[3,4]]},"3579":{"position":[[3,4]]},"3581":{"position":[[3,4]]},"3661":{"position":[[3,4]]},"3663":{"position":[[3,4]]}}}],["cor",{"_index":593,"t":{"4670":{"position":[[13,4]]},"4780":{"position":[[9,4]]}}}],["core",{"_index":230,"t":{"3136":{"position":[[0,4]]}}}],["corrupt",{"_index":93,"t":{"2738":{"position":[[0,9]]}}}],["cost",{"_index":409,"t":{"3834":{"position":[[22,5]]}}}],["count",{"_index":389,"t":{"3749":{"position":[[0,5]]}}}],["cpu",{"_index":492,"t":{"4170":{"position":[[0,3]]},"4350":{"position":[[10,3]]}}}],["creat",{"_index":128,"t":{"2823":{"position":[[0,6]]},"2829":{"position":[[0,6]]},"3219":{"position":[[3,6]]},"3223":{"position":[[3,6]]},"3261":{"position":[[3,6]]},"3263":{"position":[[3,6]]},"3282":{"position":[[3,6]]},"3300":{"position":[[3,6]]},"3302":{"position":[[3,6]]},"3537":{"position":[[3,6]]},"3573":{"position":[[3,6]]},"3575":{"position":[[3,6]]},"3583":{"position":[[3,6]]},"3609":{"position":[[3,6]]},"3634":{"position":[[3,6]]},"3655":{"position":[[3,6]]},"3657":{"position":[[3,6]]},"3684":{"position":[[3,6]]},"3688":{"position":[[3,6]]},"3755":{"position":[[0,6]]},"3771":{"position":[[3,6]]},"3773":{"position":[[3,6]]},"4260":{"position":[[0,6]]},"4284":{"position":[[3,6]]},"4294":{"position":[[3,6]]}}}],["creation",{"_index":107,"t":{"2759":{"position":[[11,8]]},"2761":{"position":[[11,8]]},"2763":{"position":[[11,8]]},"2765":{"position":[[11,8]]},"2767":{"position":[[11,8]]},"2769":{"position":[[11,8]]},"2771":{"position":[[11,8]]},"2773":{"position":[[11,8]]},"2775":{"position":[[11,8]]},"4357":{"position":[[12,8]]}}}],["credenti",{"_index":525,"t":{"4284":{"position":[[14,11]]},"4772":{"position":[[24,11]]},"4820":{"position":[[22,11]]}}}],["crl",{"_index":108,"t":{"2759":{"position":[[20,3]]},"2933":{"position":[[9,3]]}}}],["curl",{"_index":387,"t":{"3743":{"position":[[9,4]]},"4274":{"position":[[22,4]]},"4304":{"position":[[0,4]]}}}],["custom",{"_index":396,"t":{"3803":{"position":[[10,6]]}}}],["dapp",{"_index":188,"t":{"3025":{"position":[[0,4]]},"3757":{"position":[[19,4]]},"3761":{"position":[[8,4]]},"3763":{"position":[[16,4]]}}}],["data",{"_index":87,"t":{"2720":{"position":[[12,4]]},"2734":{"position":[[0,4]]},"2736":{"position":[[0,4]]},"2738":{"position":[[10,4]]},"2787":{"position":[[6,4]]},"2853":{"position":[[6,4]]},"2885":{"position":[[6,4]]},"3152":{"position":[[15,4]]},"3709":{"position":[[10,4]]},"3931":{"position":[[12,4]]},"4085":{"position":[[34,4]]},"4394":{"position":[[6,4]]},"4493":{"position":[[0,4]]},"4642":{"position":[[0,4]]},"4644":{"position":[[0,4]]},"4724":{"position":[[12,4]]}}}],["databas",{"_index":464,"t":{"4071":{"position":[[0,8]]}}}],["debug",{"_index":653,"t":{"4906":{"position":[[0,5]]}}}],["debug_accountat",{"_index":654,"t":{"4908":{"position":[[0,15]]}}}],["debug_accountrang",{"_index":655,"t":{"4910":{"position":[[0,18]]}}}],["debug_batchsendrawtransact",{"_index":656,"t":{"4912":{"position":[[0,29]]}}}],["debug_getbadblock",{"_index":657,"t":{"4914":{"position":[[0,18]]}}}],["debug_getrawblock",{"_index":658,"t":{"4916":{"position":[[0,17]]}}}],["debug_getrawhead",{"_index":659,"t":{"4918":{"position":[[0,18]]}}}],["debug_getrawreceipt",{"_index":660,"t":{"4920":{"position":[[0,20]]}}}],["debug_getrawtransact",{"_index":661,"t":{"4922":{"position":[[0,23]]}}}],["debug_metr",{"_index":662,"t":{"4924":{"position":[[0,13]]}}}],["debug_replayblock",{"_index":663,"t":{"4926":{"position":[[0,17]]}}}],["debug_resyncworldst",{"_index":664,"t":{"4928":{"position":[[0,22]]}}}],["debug_sethead",{"_index":665,"t":{"4930":{"position":[[0,13]]}}}],["debug_standardtracebadblocktofil",{"_index":667,"t":{"4934":{"position":[[0,33]]}}}],["debug_standardtraceblocktofil",{"_index":666,"t":{"4932":{"position":[[0,30]]}}}],["debug_storagerangeat",{"_index":668,"t":{"4936":{"position":[[0,20]]}}}],["debug_traceblock",{"_index":670,"t":{"4940":{"position":[[0,16]]}}}],["debug_traceblockbyhash",{"_index":671,"t":{"4942":{"position":[[0,22]]}}}],["debug_traceblockbynumb",{"_index":672,"t":{"4944":{"position":[[0,24]]}}}],["debug_tracecal",{"_index":673,"t":{"4946":{"position":[[0,15]]}}}],["debug_tracetransact",{"_index":669,"t":{"4938":{"position":[[0,22]]}}}],["decod",{"_index":237,"t":{"3148":{"position":[[0,6]]}}}],["default",{"_index":430,"t":{"3951":{"position":[[0,7]]},"3983":{"position":[[0,7]]},"4053":{"position":[[0,7]]},"4325":{"position":[[23,7]]}}}],["deploy",{"_index":227,"t":{"3124":{"position":[[0,6]]},"3203":{"position":[[0,6]]},"3506":{"position":[[0,6]]},"3524":{"position":[[0,6]]},"3527":{"position":[[0,6]]},"3539":{"position":[[42,8]]},"3541":{"position":[[3,6]]},"3611":{"position":[[3,6]]},"3613":{"position":[[3,6]]},"3615":{"position":[[3,6]]},"3617":{"position":[[3,6]]},"3621":{"position":[[3,6]]},"3638":{"position":[[3,6]]},"3759":{"position":[[0,6]]},"3763":{"position":[[0,6]]},"4136":{"position":[[0,6]]}}}],["detect",{"_index":352,"t":{"3543":{"position":[[10,9]]},"3873":{"position":[[9,9]]},"4071":{"position":[[13,8]]}}}],["determin",{"_index":69,"t":{"2694":{"position":[[0,11]]},"4003":{"position":[[0,9]]}}}],["develop",{"_index":168,"t":{"2979":{"position":[[0,9]]},"3112":{"position":[[0,11]]}}}],["differ",{"_index":374,"t":{"3715":{"position":[[10,9]]}}}],["difficulti",{"_index":574,"t":{"4544":{"position":[[6,10]]}}}],["directori",{"_index":256,"t":{"3219":{"position":[[10,11]]},"3261":{"position":[[10,11]]},"3282":{"position":[[10,11]]},"3300":{"position":[[10,11]]},"3306":{"position":[[45,9]]},"3308":{"position":[[42,11]]},"3579":{"position":[[53,9]]},"3581":{"position":[[42,11]]},"3655":{"position":[[10,11]]},"3661":{"position":[[45,9]]},"3663":{"position":[[42,11]]},"3684":{"position":[[18,11]]},"3773":{"position":[[19,9]]}}}],["disabl",{"_index":481,"t":{"4121":{"position":[[0,7]]},"4652":{"position":[[11,8]]}}}],["discoveri",{"_index":477,"t":{"4109":{"position":[[4,9]]},"4121":{"position":[[8,9]]},"4546":{"position":[[0,9]]},"4646":{"position":[[0,9]]},"4648":{"position":[[0,9]]}}}],["disk",{"_index":77,"t":{"2700":{"position":[[0,4]]},"3971":{"position":[[0,4]]},"3973":{"position":[[0,4]]}}}],["distribut",{"_index":431,"t":{"3967":{"position":[[5,12]]}}}],["dn",{"_index":589,"t":{"4646":{"position":[[10,3]]}}}],["docker",{"_index":171,"t":{"2981":{"position":[[28,6]]},"2987":{"position":[[27,6]]},"3634":{"position":[[10,6]]},"3775":{"position":[[10,6]]},"4103":{"position":[[0,6]]},"4198":{"position":[[13,6]]}}}],["domain",{"_index":397,"t":{"3807":{"position":[[0,6]]}}}],["downgrad",{"_index":96,"t":{"2740":{"position":[[19,9]]}}}],["download",{"_index":494,"t":{"4172":{"position":[[33,8]]}}}],["drop",{"_index":401,"t":{"3815":{"position":[[0,8]]},"4009":{"position":[[13,7]]},"4017":{"position":[[0,7]]},"4378":{"position":[[0,7]]}}}],["dump",{"_index":454,"t":{"4051":{"position":[[16,4]]}}}],["eea",{"_index":180,"t":{"3013":{"position":[[0,3]]},"3402":{"position":[[0,3]]}}}],["eea_sendrawtransact",{"_index":178,"t":{"3009":{"position":[[0,22]]},"3253":{"position":[[4,22]]},"3404":{"position":[[0,22]]}}}],["eip1559",{"_index":407,"t":{"3830":{"position":[[0,7]]}}}],["ek",{"_index":290,"t":{"3382":{"position":[[4,3]]},"4603":{"position":[[4,3]]}}}],["elast",{"_index":448,"t":{"4026":{"position":[[0,7]]}}}],["empti",{"_index":152,"t":{"2883":{"position":[[5,5]]},"2905":{"position":[[10,5]]}}}],["enabl",{"_index":54,"t":{"2671":{"position":[[8,7]]},"2761":{"position":[[20,7]]},"2843":{"position":[[3,6]]},"2935":{"position":[[9,7]]},"3019":{"position":[[0,6]]},"3037":{"position":[[0,6]]},"3045":{"position":[[0,6]]},"3069":{"position":[[0,6]]},"3161":{"position":[[33,7]]},"3165":{"position":[[30,7]]},"3169":{"position":[[30,7]]},"3173":{"position":[[27,7]]},"3179":{"position":[[8,7]]},"3183":{"position":[[22,7]]},"3185":{"position":[[24,7]]},"3189":{"position":[[12,7]]},"4034":{"position":[[0,6]]},"4243":{"position":[[0,6]]},"4286":{"position":[[3,6]]},"4296":{"position":[[3,6]]},"4325":{"position":[[12,7]]},"4487":{"position":[[14,7]]},"4620":{"position":[[23,7]]},"4628":{"position":[[23,7]]},"4636":{"position":[[6,7]]},"4638":{"position":[[27,7]]},"4648":{"position":[[10,7]]},"4656":{"position":[[11,7]]},"4668":{"position":[[25,7]]},"4672":{"position":[[13,7]]},"4684":{"position":[[18,7]]},"4696":{"position":[[8,7]]},"4704":{"position":[[13,7]]},"4722":{"position":[[6,7]]},"4726":{"position":[[14,7]]},"4742":{"position":[[4,7]]},"4752":{"position":[[21,7]]},"4754":{"position":[[19,7]]},"4756":{"position":[[25,7]]},"4764":{"position":[[14,7]]},"4774":{"position":[[24,7]]},"4782":{"position":[[9,7]]},"4794":{"position":[[24,7]]},"4796":{"position":[[25,7]]},"4800":{"position":[[13,7]]},"4822":{"position":[[22,7]]},"4828":{"position":[[7,7]]},"4842":{"position":[[28,7]]},"4854":{"position":[[8,6]]}}}],["enclav",{"_index":248,"t":{"3195":{"position":[[18,7]]}}}],["encod",{"_index":238,"t":{"3150":{"position":[[0,6]]}}}],["endpoint",{"_index":254,"t":{"3209":{"position":[[18,8]]},"4319":{"position":[[23,9]]}}}],["engin",{"_index":530,"t":{"4331":{"position":[[14,6]]},"4339":{"position":[[25,6]]},"4650":{"position":[[0,6]]},"4652":{"position":[[0,6]]},"4654":{"position":[[0,6]]},"4656":{"position":[[0,6]]},"4658":{"position":[[0,6]]}}}],["engine_exchangecap",{"_index":564,"t":{"4522":{"position":[[0,27]]}}}],["engine_exchangetransitionconfigurationv1",{"_index":565,"t":{"4524":{"position":[[0,40]]}}}],["engine_forkchoiceupdatedv1",{"_index":566,"t":{"4526":{"position":[[0,26]]}}}],["engine_getpayloadbodiesbyhashv1",{"_index":567,"t":{"4528":{"position":[[0,31]]}}}],["engine_getpayloadbodiesbyrangev1",{"_index":568,"t":{"4530":{"position":[[0,32]]}}}],["engine_getpayloadv1",{"_index":569,"t":{"4532":{"position":[[0,19]]}}}],["engine_newpayloadv1",{"_index":570,"t":{"4534":{"position":[[0,19]]}}}],["enod",{"_index":361,"t":{"3593":{"position":[[8,5]]},"3779":{"position":[[25,5]]},"3805":{"position":[[0,5]]}}}],["enough",{"_index":506,"t":{"4219":{"position":[[18,6]]}}}],["enterpris",{"_index":45,"t":{"2649":{"position":[[0,10]]},"2987":{"position":[[11,10]]},"2992":{"position":[[13,10]]}}}],["enterprise/priv",{"_index":439,"t":{"3997":{"position":[[0,18]]}}}],["epoch",{"_index":120,"t":{"2801":{"position":[[0,5]]},"2899":{"position":[[0,5]]}}}],["error",{"_index":353,"t":{"3543":{"position":[[20,6]]},"3545":{"position":[[18,5]]},"3547":{"position":[[10,5]]},"3549":{"position":[[18,5]]}}}],["eth",{"_index":417,"t":{"3867":{"position":[[9,3]]},"3903":{"position":[[9,3]]},"4576":{"position":[[9,3]]},"4596":{"position":[[9,3]]},"4948":{"position":[[0,3]]}}}],["eth64",{"_index":587,"t":{"4638":{"position":[[14,5]]}}}],["eth_account",{"_index":674,"t":{"4950":{"position":[[0,12]]}}}],["eth_blobbasefe",{"_index":675,"t":{"4952":{"position":[[0,15]]}}}],["eth_blocknumb",{"_index":676,"t":{"4954":{"position":[[0,15]]}}}],["eth_cal",{"_index":500,"t":{"4204":{"position":[[0,8]]},"4956":{"position":[[0,8]]}}}],["eth_chainid",{"_index":677,"t":{"4958":{"position":[[0,11]]}}}],["eth_coinbas",{"_index":678,"t":{"4960":{"position":[[0,12]]}}}],["eth_createaccesslist",{"_index":679,"t":{"4962":{"position":[[0,20]]}}}],["eth_estimatega",{"_index":680,"t":{"4964":{"position":[[0,15]]}}}],["eth_feehistori",{"_index":681,"t":{"4966":{"position":[[0,14]]}}}],["eth_gaspric",{"_index":682,"t":{"4968":{"position":[[0,12]]}}}],["eth_getbal",{"_index":683,"t":{"4970":{"position":[[0,14]]}}}],["eth_getblockbyhash",{"_index":684,"t":{"4972":{"position":[[0,18]]}}}],["eth_getblockbynumb",{"_index":685,"t":{"4974":{"position":[[0,20]]}}}],["eth_getblockreceipt",{"_index":686,"t":{"4976":{"position":[[0,20]]}}}],["eth_getblocktransactioncountbyhash",{"_index":687,"t":{"4978":{"position":[[0,34]]}}}],["eth_getblocktransactioncountbynumb",{"_index":688,"t":{"4980":{"position":[[0,36]]}}}],["eth_getcod",{"_index":689,"t":{"4982":{"position":[[0,11]]}}}],["eth_getfilterchang",{"_index":690,"t":{"4984":{"position":[[0,20]]}}}],["eth_getfilterlog",{"_index":691,"t":{"4986":{"position":[[0,17]]}}}],["eth_getlog",{"_index":692,"t":{"4988":{"position":[[0,11]]}}}],["eth_getminerdatabyblockhash",{"_index":693,"t":{"4990":{"position":[[0,27]]}}}],["eth_getminerdatabyblocknumb",{"_index":694,"t":{"4992":{"position":[[0,29]]}}}],["eth_getproof",{"_index":695,"t":{"4994":{"position":[[0,12]]}}}],["eth_getstorageat",{"_index":696,"t":{"4996":{"position":[[0,16]]}}}],["eth_gettransactionbyblockhashandindex",{"_index":697,"t":{"4998":{"position":[[0,37]]}}}],["eth_gettransactionbyblocknumberandindex",{"_index":698,"t":{"5000":{"position":[[0,39]]}}}],["eth_gettransactionbyhash",{"_index":699,"t":{"5002":{"position":[[0,24]]}}}],["eth_gettransactioncount",{"_index":700,"t":{"5004":{"position":[[0,23]]}}}],["eth_gettransactionreceipt",{"_index":701,"t":{"5006":{"position":[[0,25]]}}}],["eth_getunclebyblockhashandindex",{"_index":702,"t":{"5008":{"position":[[0,31]]}}}],["eth_getunclebyblocknumberandindex",{"_index":703,"t":{"5010":{"position":[[0,33]]}}}],["eth_getunclecountbyblockhash",{"_index":704,"t":{"5012":{"position":[[0,28]]}}}],["eth_getunclecountbyblocknumb",{"_index":705,"t":{"5014":{"position":[[0,30]]}}}],["eth_getwork",{"_index":706,"t":{"5016":{"position":[[0,11]]}}}],["eth_hashr",{"_index":707,"t":{"5018":{"position":[[0,12]]}}}],["eth_maxpriorityfeeperga",{"_index":708,"t":{"5020":{"position":[[0,24]]}}}],["eth_min",{"_index":709,"t":{"5022":{"position":[[0,10]]}}}],["eth_newblockfilt",{"_index":710,"t":{"5024":{"position":[[0,18]]}}}],["eth_newfilt",{"_index":711,"t":{"5026":{"position":[[0,13]]}}}],["eth_newpendingtransactionfilt",{"_index":712,"t":{"5028":{"position":[[0,31]]}}}],["eth_protocolvers",{"_index":713,"t":{"5030":{"position":[[0,19]]}}}],["eth_sendrawtransact",{"_index":501,"t":{"4204":{"position":[[12,22]]},"5032":{"position":[[0,22]]}}}],["eth_sendsignedtransact",{"_index":263,"t":{"3241":{"position":[[4,25]]},"3249":{"position":[[4,25]]}}}],["eth_sendtransact",{"_index":264,"t":{"3243":{"position":[[4,19]]},"3251":{"position":[[4,19]]}}}],["eth_submithashr",{"_index":714,"t":{"5034":{"position":[[0,18]]}}}],["eth_submitwork",{"_index":715,"t":{"5036":{"position":[[0,14]]}}}],["eth_sync",{"_index":716,"t":{"5038":{"position":[[0,11]]}}}],["eth_uninstallfilt",{"_index":717,"t":{"5040":{"position":[[0,19]]}}}],["ethereum",{"_index":46,"t":{"2649":{"position":[[11,8]]},"2981":{"position":[[19,8]]},"3943":{"position":[[14,8]]},"3961":{"position":[[14,8]]}}}],["ethstat",{"_index":590,"t":{"4660":{"position":[[0,8]]},"4662":{"position":[[0,8]]},"4664":{"position":[[0,8]]}}}],["event",{"_index":377,"t":{"3723":{"position":[[0,5]]},"3725":{"position":[[0,5]]}}}],["evm",{"_index":498,"t":{"4194":{"position":[[8,3]]},"4200":{"position":[[0,3]]}}}],["exampl",{"_index":193,"t":{"3071":{"position":[[30,7]]},"3642":{"position":[[5,8]]}}}],["execut",{"_index":394,"t":{"3789":{"position":[[0,9]]},"3791":{"position":[[0,9]]},"4198":{"position":[[0,7]]},"4344":{"position":[[3,7]]},"4509":{"position":[[0,9]]}}}],["exist",{"_index":123,"t":{"2809":{"position":[[27,8]]},"2811":{"position":[[30,8]]},"2813":{"position":[[39,8]]},"2871":{"position":[[27,8]]},"2873":{"position":[[30,8]]},"2877":{"position":[[39,8]]},"2903":{"position":[[27,8]]},"2905":{"position":[[29,8]]}}}],["explor",{"_index":251,"t":{"3205":{"position":[[6,8]]},"3506":{"position":[[18,8]]},"3512":{"position":[[0,8]]},"3625":{"position":[[15,8]]},"3737":{"position":[[12,8]]},"4599":{"position":[[6,9]]}}}],["export",{"_index":545,"t":{"4420":{"position":[[0,6]]},"4432":{"position":[[0,6]]},"4434":{"position":[[0,6]]}}}],["expos",{"_index":78,"t":{"2706":{"position":[[0,6]]},"3953":{"position":[[0,6]]}}}],["extend",{"_index":49,"t":{"2651":{"position":[[5,8]]},"3013":{"position":[[22,8]]}}}],["extern",{"_index":440,"t":{"3999":{"position":[[5,8]]}}}],["extra",{"_index":116,"t":{"2787":{"position":[[0,5]]},"2853":{"position":[[0,5]]},"2885":{"position":[[0,5]]},"3152":{"position":[[9,5]]},"4724":{"position":[[6,5]]}}}],["factori",{"_index":40,"t":{"2639":{"position":[[12,7]]}}}],["faq",{"_index":504,"t":{"4218":{"position":[[8,3]]}}}],["fast",{"_index":197,"t":{"3079":{"position":[[4,5]]},"3917":{"position":[[0,4]]},"4844":{"position":[[16,4]]}}}],["fee",{"_index":141,"t":{"2843":{"position":[[20,3]]},"3818":{"position":[[24,3]]},"4388":{"position":[[0,3]]},"4718":{"position":[[13,3]]}}}],["feecap",{"_index":627,"t":{"4814":{"position":[[7,6]]}}}],["file",{"_index":90,"t":{"2732":{"position":[[8,4]]},"2759":{"position":[[24,4]]},"2765":{"position":[[29,4]]},"2767":{"position":[[38,4]]},"2771":{"position":[[31,4]]},"2773":{"position":[[40,4]]},"2785":{"position":[[8,4]]},"2823":{"position":[[25,4]]},"2829":{"position":[[25,4]]},"2851":{"position":[[8,4]]},"2881":{"position":[[8,4]]},"2933":{"position":[[13,4]]},"2937":{"position":[[18,4]]},"2939":{"position":[[27,4]]},"2943":{"position":[[20,4]]},"2945":{"position":[[29,4]]},"3051":{"position":[[26,4]]},"3114":{"position":[[8,4]]},"3159":{"position":[[28,4]]},"3161":{"position":[[28,4]]},"3167":{"position":[[25,4]]},"3169":{"position":[[25,4]]},"3181":{"position":[[39,4]]},"3187":{"position":[[19,4]]},"3191":{"position":[[21,4]]},"3193":{"position":[[30,4]]},"3195":{"position":[[26,4]]},"3223":{"position":[[22,4]]},"3263":{"position":[[20,4]]},"3302":{"position":[[26,4]]},"3304":{"position":[[36,4]]},"3306":{"position":[[20,4]]},"3560":{"position":[[36,4]]},"3575":{"position":[[28,4]]},"3577":{"position":[[36,4]]},"3579":{"position":[[20,4]]},"3583":{"position":[[40,4]]},"3593":{"position":[[58,4]]},"3634":{"position":[[25,4]]},"3657":{"position":[[26,4]]},"3659":{"position":[[36,4]]},"3661":{"position":[[20,4]]},"3688":{"position":[[32,5]]},"3733":{"position":[[47,5]]},"3771":{"position":[[23,5]]},"3779":{"position":[[10,5]]},"3803":{"position":[[34,4]]},"3981":{"position":[[19,4]]},"4144":{"position":[[18,4]]},"4284":{"position":[[26,4]]},"4640":{"position":[[7,4]]},"4662":{"position":[[16,4]]},"4666":{"position":[[8,4]]},"4740":{"position":[[17,4]]},"4772":{"position":[[36,4]]},"4778":{"position":[[39,4]]},"4802":{"position":[[22,4]]},"4804":{"position":[[31,4]]},"4806":{"position":[[27,4]]},"4820":{"position":[[34,4]]},"4826":{"position":[[37,4]]},"4840":{"position":[[13,4]]},"4878":{"position":[[13,4]]}}}],["filter",{"_index":381,"t":{"3727":{"position":[[6,7]]},"4214":{"position":[[18,9]]},"4260":{"position":[[9,6]]},"4262":{"position":[[7,6]]},"4264":{"position":[[19,6]]},"4266":{"position":[[12,6]]},"4268":{"position":[[0,7]]},"4270":{"position":[[17,6]]},"4390":{"position":[[0,6]]},"4404":{"position":[[6,6]]},"4812":{"position":[[14,6]]}}}],["final",{"_index":19,"t":{"2611":{"position":[[10,8]]}}}],["find",{"_index":97,"t":{"2742":{"position":[[0,4]]},"4219":{"position":[[13,4]]},"4239":{"position":[[0,4]]}}}],["first",{"_index":257,"t":{"3225":{"position":[[13,5]]},"3265":{"position":[[13,5]]},"3310":{"position":[[13,5]]},"3665":{"position":[[13,5]]}}}],["fix",{"_index":573,"t":{"4544":{"position":[[0,5]]}}}],["flexibl",{"_index":27,"t":{"2625":{"position":[[0,8]]},"3069":{"position":[[7,8]]},"3071":{"position":[[7,8]]},"3185":{"position":[[8,8]]}}}],["flight",{"_index":450,"t":{"4034":{"position":[[12,6]]}}}],["folder",{"_index":359,"t":{"3573":{"position":[[10,7]]}}}],["footnot",{"_index":497,"t":{"4190":{"position":[[0,9]]},"4306":{"position":[[0,9]]}}}],["forbidden",{"_index":355,"t":{"3547":{"position":[[0,9]]}}}],["forest",{"_index":371,"t":{"3704":{"position":[[0,6]]},"3706":{"position":[[0,6]]}}}],["fork",{"_index":143,"t":{"2843":{"position":[[40,4]]},"4346":{"position":[[14,4]]},"4489":{"position":[[0,4]]},"4511":{"position":[[0,4]]}}}],["forkid",{"_index":588,"t":{"4638":{"position":[[20,6]]}}}],["format",{"_index":187,"t":{"3023":{"position":[[14,6]]},"4644":{"position":[[13,6]]}}}],["found",{"_index":354,"t":{"3545":{"position":[[12,5]]},"3549":{"position":[[12,5]]},"4069":{"position":[[18,5]]},"4077":{"position":[[18,5]]}}}],["frame",{"_index":629,"t":{"4834":{"position":[[11,5]]}}}],["free",{"_index":131,"t":{"2835":{"position":[[10,4]]},"2845":{"position":[[10,4]]},"3820":{"position":[[35,4]]}}}],["frontier",{"_index":405,"t":{"3826":{"position":[[0,8]]}}}],["full",{"_index":402,"t":{"3815":{"position":[[59,4]]},"3911":{"position":[[6,4]]},"4178":{"position":[[10,4]]},"4186":{"position":[[9,4]]}}}],["futur",{"_index":639,"t":{"4860":{"position":[[12,6]]}}}],["ga",{"_index":132,"t":{"2835":{"position":[[15,3]]},"2841":{"position":[[29,3]]},"2845":{"position":[[15,3]]},"3818":{"position":[[39,3]]},"3820":{"position":[[40,3]]},"4457":{"position":[[0,3]]},"4614":{"position":[[4,3]]},"4616":{"position":[[4,3]]},"4618":{"position":[[4,3]]},"4716":{"position":[[4,3]]},"4766":{"position":[[4,3]]},"4848":{"position":[[7,3]]},"4868":{"position":[[12,3]]}}}],["gener",{"_index":195,"t":{"3077":{"position":[[0,7]]},"3144":{"position":[[0,8]]},"3304":{"position":[[3,8]]},"3556":{"position":[[3,8]]},"3558":{"position":[[3,8]]},"3566":{"position":[[3,8]]},"3577":{"position":[[3,8]]},"3659":{"position":[[3,8]]},"3686":{"position":[[3,8]]},"3733":{"position":[[0,8]]},"3857":{"position":[[3,8]]},"3859":{"position":[[3,8]]},"3893":{"position":[[3,8]]},"3895":{"position":[[3,8]]},"4073":{"position":[[13,9]]},"4288":{"position":[[3,8]]},"4292":{"position":[[3,8]]},"4424":{"position":[[0,8]]},"4562":{"position":[[3,8]]},"4564":{"position":[[3,8]]},"4582":{"position":[[3,8]]},"4584":{"position":[[3,8]]}}}],["generateandsendrawtransact",{"_index":228,"t":{"3124":{"position":[[23,29]]}}}],["genesi",{"_index":88,"t":{"2722":{"position":[[0,7]]},"2732":{"position":[[0,7]]},"2785":{"position":[[0,7]]},"2851":{"position":[[0,7]]},"2881":{"position":[[0,7]]},"3114":{"position":[[0,7]]},"3223":{"position":[[14,7]]},"3263":{"position":[[12,7]]},"3304":{"position":[[28,7]]},"3306":{"position":[[12,7]]},"3577":{"position":[[28,7]]},"3579":{"position":[[12,7]]},"3613":{"position":[[14,7]]},"3659":{"position":[[28,7]]},"3661":{"position":[[12,7]]},"3933":{"position":[[0,7]]},"4481":{"position":[[0,7]]},"4540":{"position":[[0,7]]},"4666":{"position":[[0,7]]},"4668":{"position":[[0,7]]}}}],["geth",{"_index":527,"t":{"4310":{"position":[[0,4]]}}}],["gpu",{"_index":533,"t":{"4352":{"position":[[10,3]]}}}],["grafana",{"_index":384,"t":{"3739":{"position":[[34,7]]}}}],["graphic",{"_index":487,"t":{"4154":{"position":[[16,9]]}}}],["graphiql",{"_index":521,"t":{"4276":{"position":[[22,8]]}}}],["graphql",{"_index":520,"t":{"4274":{"position":[[0,7]]},"4276":{"position":[[0,7]]},"4670":{"position":[[0,7]]},"4672":{"position":[[0,7]]},"4674":{"position":[[0,7]]},"4676":{"position":[[0,7]]}}}],["group",{"_index":25,"t":{"2623":{"position":[[0,5]]},"2625":{"position":[[17,5]]},"3061":{"position":[[8,5]]},"3065":{"position":[[8,5]]},"3069":{"position":[[24,6]]},"3071":{"position":[[24,5]]},"3094":{"position":[[10,5]]},"3096":{"position":[[6,5]]},"3185":{"position":[[17,6]]}}}],["handl",{"_index":461,"t":{"4069":{"position":[[7,6]]},"4077":{"position":[[7,6]]}}}],["hardhat",{"_index":145,"t":{"2845":{"position":[[22,7]]}}}],["hardhat.config.j",{"_index":147,"t":{"2847":{"position":[[7,17]]}}}],["hash",{"_index":380,"t":{"3725":{"position":[[16,4]]},"4428":{"position":[[0,4]]},"4668":{"position":[[14,4]]}}}],["hd",{"_index":482,"t":{"4130":{"position":[[7,2]]}}}],["header",{"_index":148,"t":{"2863":{"position":[[38,7]]},"4011":{"position":[[4,7]]},"4372":{"position":[[4,7]]}}}],["heal",{"_index":495,"t":{"4174":{"position":[[15,7]]}}}],["heap",{"_index":453,"t":{"4051":{"position":[[11,4]]}}}],["helm",{"_index":341,"t":{"3506":{"position":[[27,4]]},"3605":{"position":[[15,4]]}}}],["help",{"_index":595,"t":{"4678":{"position":[[0,4]]}}}],["high",{"_index":220,"t":{"3102":{"position":[[0,4]]}}}],["histor",{"_index":583,"t":{"4626":{"position":[[7,10]]}}}],["histori",{"_index":539,"t":{"4388":{"position":[[4,7]]}}}],["hoc",{"_index":502,"t":{"4212":{"position":[[3,3]]}}}],["holeski",{"_index":426,"t":{"3939":{"position":[[14,7]]},"3959":{"position":[[14,7]]}}}],["homebrew",{"_index":61,"t":{"2682":{"position":[[11,8]]},"2685":{"position":[[27,8]]},"3878":{"position":[[11,8]]},"3881":{"position":[[27,8]]}}}],["host",{"_index":515,"t":{"4245":{"position":[[8,5]]},"4251":{"position":[[0,4]]},"4335":{"position":[[0,4]]},"4650":{"position":[[7,4]]},"4674":{"position":[[13,4]]},"4680":{"position":[[0,4]]},"4698":{"position":[[8,4]]},"4706":{"position":[[13,4]]},"4728":{"position":[[14,4]]},"4744":{"position":[[4,4]]},"4784":{"position":[[9,4]]},"4830":{"position":[[7,4]]}}}],["hour",{"_index":642,"t":{"4876":{"position":[[18,5]]}}}],["http",{"_index":446,"t":{"4024":{"position":[[0,5]]},"4030":{"position":[[0,5]]},"4314":{"position":[[0,4]]},"4315":{"position":[[0,4]]},"4670":{"position":[[8,4]]},"4672":{"position":[[8,4]]},"4674":{"position":[[8,4]]},"4676":{"position":[[8,4]]},"4768":{"position":[[4,4]]},"4770":{"position":[[4,4]]},"4772":{"position":[[4,4]]},"4774":{"position":[[4,4]]},"4776":{"position":[[4,4]]},"4778":{"position":[[4,4]]},"4780":{"position":[[4,4]]},"4782":{"position":[[4,4]]},"4784":{"position":[[4,4]]},"4786":{"position":[[4,4]]},"4788":{"position":[[4,4]]},"4790":{"position":[[4,4]]},"4792":{"position":[[4,4]]},"4794":{"position":[[4,4]]},"4796":{"position":[[4,4]]},"4798":{"position":[[4,4]]},"4800":{"position":[[4,4]]},"4802":{"position":[[4,4]]},"4804":{"position":[[4,4]]},"4806":{"position":[[4,4]]},"4808":{"position":[[4,4]]}}}],["ibft",{"_index":239,"t":{"3152":{"position":[[0,4]]},"3306":{"position":[[32,4]]},"3406":{"position":[[0,4]]}}}],["ibft_discardvalidatorvot",{"_index":297,"t":{"3408":{"position":[[0,25]]}}}],["ibft_getpendingvot",{"_index":298,"t":{"3410":{"position":[[0,20]]}}}],["ibft_getsignermetr",{"_index":299,"t":{"3412":{"position":[[0,21]]}}}],["ibft_getvalidatorsbyblockhash",{"_index":300,"t":{"3414":{"position":[[0,29]]}}}],["ibft_getvalidatorsbyblocknumb",{"_index":301,"t":{"3416":{"position":[[0,31]]}}}],["ibft_proposevalidatorvot",{"_index":302,"t":{"3418":{"position":[[0,25]]}}}],["id",{"_index":29,"t":{"2625":{"position":[[23,3]]},"3715":{"position":[[28,2]]},"3717":{"position":[[35,2]]},"4366":{"position":[[13,2]]},"4622":{"position":[[12,3]]},"4738":{"position":[[8,2]]}}}],["ideal",{"_index":511,"t":{"4229":{"position":[[12,5]]}}}],["ident",{"_index":596,"t":{"4682":{"position":[[0,8]]}}}],["immedi",{"_index":18,"t":{"2611":{"position":[[0,9]]}}}],["import",{"_index":339,"t":{"3500":{"position":[[0,9]]},"4172":{"position":[[10,6]]},"4176":{"position":[[10,6]]},"4178":{"position":[[15,6]]},"4184":{"position":[[9,6]]},"4186":{"position":[[14,6]]},"4418":{"position":[[0,6]]}}}],["includ",{"_index":186,"t":{"3021":{"position":[[27,8]]}}}],["incorrect",{"_index":411,"t":{"3842":{"position":[[0,9]]}}}],["increas",{"_index":513,"t":{"4231":{"position":[[23,10]]}}}],["ingress",{"_index":285,"t":{"3367":{"position":[[0,7]]},"3549":{"position":[[0,7]]},"3623":{"position":[[54,7]]}}}],["initi",{"_index":154,"t":{"2887":{"position":[[4,7]]},"2888":{"position":[[4,7]]},"3122":{"position":[[0,10]]}}}],["input",{"_index":553,"t":{"4465":{"position":[[0,5]]}}}],["instal",{"_index":10,"t":{"2591":{"position":[[0,7]]},"2685":{"position":[[0,7]]},"2690":{"position":[[0,7]]},"2973":{"position":[[0,7]]},"3881":{"position":[[0,7]]},"3886":{"position":[[0,7]]},"3967":{"position":[[22,12]]},"4038":{"position":[[0,7]]},"4040":{"position":[[0,7]]},"4042":{"position":[[0,7]]},"4148":{"position":[[0,7]]},"4560":{"position":[[3,7]]},"4580":{"position":[[3,7]]}}}],["instanc",{"_index":175,"t":{"2992":{"position":[[24,8]]},"3104":{"position":[[9,9]]}}}],["interact",{"_index":272,"t":{"3328":{"position":[[0,8]]},"3336":{"position":[[0,8]]},"3638":{"position":[[35,8]]}}}],["interfac",{"_index":36,"t":{"2633":{"position":[[25,9]]},"3029":{"position":[[35,9]]},"4154":{"position":[[26,9]]},"4746":{"position":[[4,9]]}}}],["interv",{"_index":603,"t":{"4708":{"position":[[13,8]]}}}],["introduct",{"_index":534,"t":{"4362":{"position":[[0,12]]}}}],["invalid",{"_index":490,"t":{"4164":{"position":[[4,7]]}}}],["item",{"_index":571,"t":{"4538":{"position":[[14,5]]},"4546":{"position":[[24,5]]}}}],["java",{"_index":72,"t":{"2696":{"position":[[0,4]]},"3967":{"position":[[0,4]]},"3969":{"position":[[0,4]]},"4034":{"position":[[7,4]]},"4038":{"position":[[8,4]]},"4040":{"position":[[8,4]]},"4042":{"position":[[8,4]]},"4044":{"position":[[7,4]]},"4045":{"position":[[7,4]]},"4047":{"position":[[7,4]]}}}],["job",{"_index":604,"t":{"4712":{"position":[[24,3]]}}}],["json",{"_index":385,"t":{"3741":{"position":[[4,4]]},"4091":{"position":[[0,4]]},"4298":{"position":[[0,4]]},"4312":{"position":[[0,4]]},"4469":{"position":[[0,5]]},"4471":{"position":[[0,4]]},"4684":{"position":[[0,4]]}}}],["jwt",{"_index":358,"t":{"3566":{"position":[[23,4]]},"4290":{"position":[[0,3]]},"4294":{"position":[[14,3]]},"4652":{"position":[[7,3]]},"4654":{"position":[[7,3]]},"4776":{"position":[[24,3]]},"4778":{"position":[[24,3]]},"4824":{"position":[[22,3]]},"4826":{"position":[[22,3]]}}}],["key",{"_index":51,"t":{"2657":{"position":[[17,4]]},"3181":{"position":[[35,3]]},"3187":{"position":[[15,3]]},"3304":{"position":[[17,4]]},"3308":{"position":[[25,4]]},"3556":{"position":[[33,3]]},"3558":{"position":[[20,4]]},"3577":{"position":[[17,4]]},"3581":{"position":[[25,4]]},"3659":{"position":[[17,4]]},"3663":{"position":[[25,4]]},"3686":{"position":[[20,4]]},"3771":{"position":[[19,3]]},"3797":{"position":[[13,3]]},"3799":{"position":[[12,3]]},"3803":{"position":[[30,3]]},"3859":{"position":[[22,4]]},"3895":{"position":[[22,4]]},"4073":{"position":[[31,3]]},"4129":{"position":[[8,3]]},"4132":{"position":[[21,3]]},"4206":{"position":[[16,3]]},"4290":{"position":[[11,3]]},"4292":{"position":[[33,3]]},"4430":{"position":[[7,3]]},"4491":{"position":[[0,3]]},"4564":{"position":[[22,4]]},"4584":{"position":[[22,4]]},"4686":{"position":[[0,3]]},"4740":{"position":[[13,3]]},"4778":{"position":[[35,3]]},"4826":{"position":[[33,3]]}}}],["keypair",{"_index":466,"t":{"4075":{"position":[[6,7]]}}}],["keystor",{"_index":109,"t":{"2763":{"position":[[20,8]]},"2765":{"position":[[20,8]]},"2767":{"position":[[20,8]]},"2769":{"position":[[20,8]]},"2937":{"position":[[9,8]]},"2939":{"position":[[9,8]]},"2941":{"position":[[9,8]]},"3191":{"position":[[12,8]]},"3193":{"position":[[12,8]]},"4802":{"position":[[13,8]]},"4804":{"position":[[13,8]]}}}],["kind",{"_index":287,"t":{"3377":{"position":[[0,4]]}}}],["known",{"_index":129,"t":{"2823":{"position":[[11,5]]},"2829":{"position":[[11,5]]},"3195":{"position":[[12,5]]},"4806":{"position":[[13,5]]}}}],["kubectl",{"_index":345,"t":{"3525":{"position":[[47,7]]},"3607":{"position":[[50,7]]}}}],["kubernet",{"_index":276,"t":{"3346":{"position":[[7,10]]},"3384":{"position":[[6,10]]},"4026":{"position":[[8,10]]},"4101":{"position":[[0,10]]}}}],["kzg",{"_index":599,"t":{"4688":{"position":[[0,3]]}}}],["last",{"_index":585,"t":{"4634":{"position":[[6,4]]}}}],["latenc",{"_index":207,"t":{"3086":{"position":[[20,7]]}}}],["later",{"_index":144,"t":{"2843":{"position":[[48,5]]}}}],["layer",{"_index":399,"t":{"3811":{"position":[[0,7]]},"3815":{"position":[[31,7]]},"4856":{"position":[[8,5]]}}}],["length",{"_index":622,"t":{"4788":{"position":[[29,6]]}}}],["limit",{"_index":158,"t":{"2907":{"position":[[0,11]]},"3094":{"position":[[0,5]]},"3096":{"position":[[0,5]]},"3350":{"position":[[0,11]]},"4059":{"position":[[0,5]]},"4111":{"position":[[0,5]]},"4115":{"position":[[0,5]]},"4626":{"position":[[24,5]]},"4628":{"position":[[7,5]]},"4756":{"position":[[19,5]]},"4848":{"position":[[11,5]]},"4858":{"position":[[8,5]]}}}],["line",{"_index":104,"t":{"2758":{"position":[[8,4]]},"2927":{"position":[[28,4]]},"2932":{"position":[[8,4]]}}}],["linux",{"_index":64,"t":{"2687":{"position":[[0,5]]},"3883":{"position":[[0,5]]}}}],["list",{"_index":480,"t":{"4119":{"position":[[0,4]]},"4156":{"position":[[17,4]]}}}],["live",{"_index":23,"t":{"2615":{"position":[[0,8]]},"4319":{"position":[[14,8]]},"4323":{"position":[[0,8]]}}}],["load",{"_index":349,"t":{"3537":{"position":[[12,4]]},"3539":{"position":[[16,4]]},"3999":{"position":[[0,4]]}}}],["local",{"_index":5,"t":{"2574":{"position":[[0,5]]},"2720":{"position":[[0,5]]},"3079":{"position":[[10,6]]},"3373":{"position":[[0,5]]},"3623":{"position":[[33,5]]},"3931":{"position":[[0,5]]},"4870":{"position":[[11,5]]}}}],["locat",{"_index":203,"t":{"3084":{"position":[[3,6]]}}}],["log",{"_index":444,"t":{"4013":{"position":[[0,4]]},"4059":{"position":[[21,4]]},"4061":{"position":[[20,4]]},"4083":{"position":[[16,3]]},"4160":{"position":[[6,7]]},"4162":{"position":[[9,7]]},"4164":{"position":[[0,3]]},"4166":{"position":[[0,3]]},"4264":{"position":[[8,4]]},"4270":{"position":[[4,4]]},"4374":{"position":[[0,4]]},"4392":{"position":[[0,3]]},"4400":{"position":[[11,3]]},"4424":{"position":[[9,3]]},"4446":{"position":[[5,3]]},"4620":{"position":[[5,3]]},"4628":{"position":[[18,4]]},"4630":{"position":[[12,4]]},"4690":{"position":[[0,7]]},"4760":{"position":[[6,7]]},"4810":{"position":[[8,4]]}}}],["london",{"_index":142,"t":{"2843":{"position":[[33,6]]}}}],["machin",{"_index":74,"t":{"2696":{"position":[[13,7]]},"3623":{"position":[[39,7]]},"3969":{"position":[[13,7]]}}}],["maco",{"_index":60,"t":{"2682":{"position":[[0,5]]},"3878":{"position":[[0,5]]},"4042":{"position":[[16,5]]},"4047":{"position":[[15,5]]}}}],["mainnet",{"_index":429,"t":{"3943":{"position":[[23,7]]},"3951":{"position":[[17,7]]},"3961":{"position":[[23,7]]},"4065":{"position":[[18,7]]}}}],["make",{"_index":218,"t":{"3096":{"position":[[35,4]]},"4300":{"position":[[31,4]]}}}],["manag",{"_index":26,"t":{"2623":{"position":[[6,10]]},"2665":{"position":[[14,10]]},"2669":{"position":[[20,7]]},"2875":{"position":[[15,10]]},"3088":{"position":[[19,10]]},"4051":{"position":[[0,6]]},"4129":{"position":[[12,10]]},"4206":{"position":[[20,10]]},"4254":{"position":[[8,10]]}}}],["manual",{"_index":449,"t":{"4028":{"position":[[0,6]]}}}],["marker",{"_index":210,"t":{"3090":{"position":[[31,6]]},"3181":{"position":[[8,6]]}}}],["match",{"_index":471,"t":{"4085":{"position":[[15,5]]}}}],["max",{"_index":245,"t":{"3177":{"position":[[24,3]]},"4616":{"position":[[14,3]]},"4624":{"position":[[20,3]]},"4692":{"position":[[0,3]]},"4758":{"position":[[19,3]]},"4786":{"position":[[9,3]]},"4788":{"position":[[9,3]]},"4790":{"position":[[9,3]]},"4810":{"position":[[4,3]]},"4812":{"position":[[4,3]]},"4832":{"position":[[7,3]]},"4834":{"position":[[7,3]]},"4856":{"position":[[14,3]]},"4860":{"position":[[8,3]]},"4862":{"position":[[8,3]]},"4864":{"position":[[8,3]]},"4866":{"position":[[8,3]]}}}],["maximum",{"_index":122,"t":{"2805":{"position":[[0,7]]}}}],["mechan",{"_index":419,"t":{"3871":{"position":[[16,9]]}}}],["member",{"_index":194,"t":{"3073":{"position":[[15,7]]}}}],["membership",{"_index":216,"t":{"3096":{"position":[[12,10]]}}}],["merg",{"_index":119,"t":{"2793":{"position":[[5,5]]},"2859":{"position":[[5,5]]},"2889":{"position":[[5,5]]}}}],["messag",{"_index":13,"t":{"2597":{"position":[[0,7]]},"3545":{"position":[[24,7]]},"3547":{"position":[[16,7]]},"3549":{"position":[[24,7]]}}}],["metadata",{"_index":549,"t":{"4440":{"position":[[7,8]]}}}],["metamask",{"_index":391,"t":{"3755":{"position":[[27,8]]}}}],["method",{"_index":150,"t":{"2875":{"position":[[26,7]]},"3126":{"position":[[14,7]]},"3388":{"position":[[7,7]]},"3402":{"position":[[4,7]]},"3406":{"position":[[9,7]]},"3420":{"position":[[21,7]]},"3436":{"position":[[5,7]]},"3474":{"position":[[5,7]]},"3822":{"position":[[17,7]]},"4325":{"position":[[4,7]]},"4521":{"position":[[0,7]]},"4556":{"position":[[15,7]]},"4732":{"position":[[4,6]]},"4770":{"position":[[13,7]]},"4818":{"position":[[11,7]]},"4888":{"position":[[6,7]]},"4906":{"position":[[6,7]]},"4948":{"position":[[4,7]]},"5042":{"position":[[6,7]]},"5064":{"position":[[4,7]]},"5076":{"position":[[8,7]]},"5080":{"position":[[6,7]]},"5098":{"position":[[7,7]]},"5106":{"position":[[5,7]]},"5112":{"position":[[14,7]]}}}],["metric",{"_index":252,"t":{"3207":{"position":[[0,7]]},"3875":{"position":[[0,7]]},"4093":{"position":[[0,7]]},"4156":{"position":[[9,7]]},"4233":{"position":[[0,7]]},"4694":{"position":[[0,7]]},"4696":{"position":[[0,7]]},"4698":{"position":[[0,7]]},"4700":{"position":[[0,7]]},"4702":{"position":[[0,7]]},"4704":{"position":[[0,7]]},"4706":{"position":[[0,7]]},"4708":{"position":[[0,7]]},"4710":{"position":[[0,7]]},"4712":{"position":[[0,7]]}}}],["mileston",{"_index":572,"t":{"4542":{"position":[[0,9]]}}}],["min",{"_index":605,"t":{"4714":{"position":[[0,3]]},"4716":{"position":[[0,3]]},"4718":{"position":[[0,3]]},"4844":{"position":[[5,3],[26,3]]},"4868":{"position":[[8,3]]}}}],["mine",{"_index":39,"t":{"2637":{"position":[[0,4]]},"2813":{"position":[[14,6]]},"2877":{"position":[[14,6]]},"4350":{"position":[[14,6]]},"4352":{"position":[[14,6]]},"4354":{"position":[[0,6]]},"4359":{"position":[[3,5]]}}}],["miner",{"_index":541,"t":{"4394":{"position":[[0,5]]},"4720":{"position":[[0,5]]},"4722":{"position":[[0,5]]},"4724":{"position":[[0,5]]},"4726":{"position":[[0,5]]},"4728":{"position":[[0,5]]},"4730":{"position":[[0,5]]},"5042":{"position":[[0,5]]}}}],["miner_changetargetgaslimit",{"_index":718,"t":{"5044":{"position":[[0,26]]}}}],["miner_getextradata",{"_index":719,"t":{"5046":{"position":[[0,18]]}}}],["miner_getmingaspric",{"_index":720,"t":{"5048":{"position":[[0,20]]}}}],["miner_getminpriorityfe",{"_index":721,"t":{"5050":{"position":[[0,23]]}}}],["miner_setcoinbas",{"_index":722,"t":{"5052":{"position":[[0,17]]}}}],["miner_setextradata",{"_index":723,"t":{"5054":{"position":[[0,18]]}}}],["miner_setmingaspric",{"_index":724,"t":{"5056":{"position":[[0,20]]}}}],["miner_setminpriorityfe",{"_index":725,"t":{"5058":{"position":[[0,23]]}}}],["miner_start",{"_index":726,"t":{"5060":{"position":[[0,11]]}}}],["miner_stop",{"_index":727,"t":{"5062":{"position":[[0,10]]}}}],["minikub",{"_index":286,"t":{"3375":{"position":[[0,8]]}}}],["minimalist",{"_index":436,"t":{"3993":{"position":[[0,10]]}}}],["minimum",{"_index":20,"t":{"2613":{"position":[[0,7]]},"2803":{"position":[[0,7]]},"2841":{"position":[[21,7]]},"2867":{"position":[[0,7]]}}}],["miscellan",{"_index":749,"t":{"5112":{"position":[[0,13]]}}}],["mode",{"_index":223,"t":{"3112":{"position":[[12,4]]},"4081":{"position":[[26,4]]},"4152":{"position":[[33,4]]},"4846":{"position":[[5,4]]}}}],["modul",{"_index":631,"t":{"4838":{"position":[[9,6]]}}}],["monitor",{"_index":284,"t":{"3365":{"position":[[0,10]]},"3611":{"position":[[14,10]]},"3739":{"position":[[0,7]]},"4117":{"position":[[0,7]]}}}],["more",{"_index":368,"t":{"3642":{"position":[[0,4]]}}}],["multi",{"_index":30,"t":{"2627":{"position":[[0,5]]},"2653":{"position":[[0,5]]},"3183":{"position":[[8,5]]},"3354":{"position":[[0,5]]},"3531":{"position":[[0,5]]}}}],["name",{"_index":398,"t":{"3807":{"position":[[7,4]]}}}],["namespac",{"_index":281,"t":{"3357":{"position":[[0,10]]},"3609":{"position":[[14,9]]}}}],["nat",{"_index":611,"t":{"4732":{"position":[[0,3]]}}}],["net",{"_index":612,"t":{"4734":{"position":[[0,3]]},"5064":{"position":[[0,3]]}}}],["net_enod",{"_index":728,"t":{"5066":{"position":[[0,9]]}}}],["net_listen",{"_index":729,"t":{"5068":{"position":[[0,13]]}}}],["net_peercount",{"_index":730,"t":{"5070":{"position":[[0,13]]}}}],["net_servic",{"_index":731,"t":{"5072":{"position":[[0,12]]}}}],["net_vers",{"_index":732,"t":{"5074":{"position":[[0,11]]}}}],["network",{"_index":55,"t":{"2671":{"position":[[16,8]]},"2728":{"position":[[24,7]]},"2748":{"position":[[36,7]]},"2809":{"position":[[36,7]]},"2811":{"position":[[39,7]]},"2813":{"position":[[48,7]]},"2871":{"position":[[36,7]]},"2873":{"position":[[39,7]]},"2877":{"position":[[48,7]]},"2891":{"position":[[20,7]]},"2903":{"position":[[36,7]]},"2905":{"position":[[38,7]]},"3231":{"position":[[23,7]]},"3271":{"position":[[23,7]]},"3306":{"position":[[37,7]]},"3318":{"position":[[24,7]]},"3527":{"position":[[11,7]]},"3579":{"position":[[45,7]]},"3597":{"position":[[25,7]]},"3636":{"position":[[13,7]]},"3640":{"position":[[13,7]]},"3661":{"position":[[37,7]]},"3673":{"position":[[24,7]]},"3715":{"position":[[20,7]]},"3735":{"position":[[10,7]]},"3765":{"position":[[29,7]]},"3767":{"position":[[17,7]]},"3769":{"position":[[22,7]]},"3781":{"position":[[13,7]]},"3818":{"position":[[3,8]]},"3820":{"position":[[3,8]]},"4089":{"position":[[4,10]]},"4188":{"position":[[9,7]]},"4221":{"position":[[6,7]]},"4736":{"position":[[0,7]]},"4738":{"position":[[0,7]]}}}],["new",{"_index":266,"t":{"3288":{"position":[[22,3]]},"3290":{"position":[[30,3]]},"3717":{"position":[[8,3],[25,3]]},"3769":{"position":[[6,3]]},"3773":{"position":[[10,3]]},"4011":{"position":[[0,3]]},"4015":{"position":[[0,3]]},"4372":{"position":[[0,3]]}}}],["next",{"_index":262,"t":{"3233":{"position":[[0,4]]},"3273":{"position":[[0,4]]},"3320":{"position":[[0,4]]},"3675":{"position":[[0,4]]}}}],["no]memori",{"_index":555,"t":{"4473":{"position":[[0,11]]}}}],["no]tim",{"_index":559,"t":{"4479":{"position":[[0,8]]}}}],["node",{"_index":1,"t":{"2568":{"position":[[0,4]]},"2603":{"position":[[0,4]]},"2710":{"position":[[6,4]]},"2724":{"position":[[8,4]]},"2726":{"position":[[6,4]]},"2728":{"position":[[6,4]]},"3033":{"position":[[0,4]]},"3037":{"position":[[7,4]]},"3039":{"position":[[11,4]]},"3041":{"position":[[9,4]]},"3086":{"position":[[44,5]]},"3167":{"position":[[12,5]]},"3169":{"position":[[12,5]]},"3171":{"position":[[12,5]]},"3173":{"position":[[12,5]]},"3175":{"position":[[12,5]]},"3221":{"position":[[23,4]]},"3225":{"position":[[19,4]]},"3227":{"position":[[9,4]]},"3229":{"position":[[9,4]]},"3235":{"position":[[9,5]]},"3265":{"position":[[19,4]]},"3267":{"position":[[9,4]]},"3269":{"position":[[9,4]]},"3275":{"position":[[9,5]]},"3284":{"position":[[13,4]]},"3286":{"position":[[27,4]]},"3304":{"position":[[12,4]]},"3308":{"position":[[12,4],[37,4]]},"3310":{"position":[[19,4]]},"3312":{"position":[[9,4]]},"3314":{"position":[[9,4]]},"3316":{"position":[[9,4]]},"3322":{"position":[[9,5]]},"3359":{"position":[[0,5]]},"3508":{"position":[[0,5]]},"3564":{"position":[[14,4]]},"3577":{"position":[[12,4]]},"3581":{"position":[[12,4],[37,4]]},"3585":{"position":[[9,4]]},"3587":{"position":[[9,4]]},"3589":{"position":[[9,4]]},"3591":{"position":[[10,4]]},"3593":{"position":[[23,5]]},"3595":{"position":[[8,5]]},"3599":{"position":[[5,5]]},"3621":{"position":[[29,5]]},"3623":{"position":[[18,4]]},"3638":{"position":[[53,5]]},"3659":{"position":[[12,4]]},"3663":{"position":[[12,4],[37,4]]},"3665":{"position":[[19,4]]},"3667":{"position":[[9,4]]},"3669":{"position":[[9,4]]},"3671":{"position":[[9,4]]},"3677":{"position":[[9,5]]},"3690":{"position":[[21,5]]},"3692":{"position":[[14,4]]},"3694":{"position":[[14,4]]},"3696":{"position":[[14,4]]},"3698":{"position":[[14,4]]},"3711":{"position":[[8,5]]},"3739":{"position":[[8,5]]},"3747":{"position":[[12,4]]},"3769":{"position":[[10,4]]},"3771":{"position":[[14,4]]},"3773":{"position":[[14,4]]},"3797":{"position":[[0,4]]},"3799":{"position":[[0,4]]},"3801":{"position":[[0,4]]},"3803":{"position":[[17,4]]},"3911":{"position":[[11,4]]},"3919":{"position":[[15,4]]},"3937":{"position":[[6,4]]},"3939":{"position":[[6,4]]},"3941":{"position":[[6,4]]},"3943":{"position":[[6,4]]},"3945":{"position":[[8,4]]},"3951":{"position":[[8,4]]},"3957":{"position":[[6,4]]},"3959":{"position":[[6,4]]},"3961":{"position":[[6,4]]},"4003":{"position":[[17,4]]},"4119":{"position":[[5,4]]},"4134":{"position":[[13,4]]},"4142":{"position":[[17,5]]},"4570":{"position":[[7,4]]},"4572":{"position":[[7,4]]},"4590":{"position":[[7,4]]},"4592":{"position":[[7,4]]},"4622":{"position":[[7,4]]},"4740":{"position":[[0,4]]},"4840":{"position":[[7,5]]}}}],["nodes.json",{"_index":485,"t":{"4144":{"position":[[7,10]]}}}],["nonc",{"_index":52,"t":{"2659":{"position":[[0,6]]},"2661":{"position":[[20,5]]},"2663":{"position":[[8,5]]},"2665":{"position":[[8,5]]},"3088":{"position":[[13,5]]},"3817":{"position":[[48,5]]},"4005":{"position":[[12,6]]}}}],["none",{"_index":476,"t":{"4105":{"position":[[0,4]]}}}],["note",{"_index":340,"t":{"3500":{"position":[[10,5]]}}}],["notif",{"_index":536,"t":{"4368":{"position":[[0,13]]}}}],["number",{"_index":21,"t":{"2613":{"position":[[8,6]]},"2803":{"position":[[8,6]]},"2805":{"position":[[8,6]]},"2867":{"position":[[8,6]]},"2911":{"position":[[0,6]]},"3751":{"position":[[30,6]]},"4229":{"position":[[18,6]]},"4231":{"position":[[38,6]]},"4495":{"position":[[6,6]]}}}],["object",{"_index":229,"t":{"3130":{"position":[[20,6]]},"3132":{"position":[[28,6]]},"4270":{"position":[[32,6]]},"4386":{"position":[[6,6]]},"4388":{"position":[[20,6]]},"4390":{"position":[[15,6]]},"4392":{"position":[[4,6]]},"4394":{"position":[[11,6]]},"4396":{"position":[[20,6]]},"4398":{"position":[[6,6]]},"4400":{"position":[[15,6]]},"4402":{"position":[[6,6]]},"4404":{"position":[[21,6]]},"4406":{"position":[[12,6]]},"4408":{"position":[[17,6]]},"4410":{"position":[[20,6]]},"4412":{"position":[[18,6]]},"4509":{"position":[[18,6]]},"4511":{"position":[[18,6]]},"4513":{"position":[[19,6]]},"4515":{"position":[[15,6]]},"4517":{"position":[[25,6]]}}}],["occup",{"_index":606,"t":{"4714":{"position":[[10,9]]}}}],["on",{"_index":153,"t":{"2887":{"position":[[0,3]]}}}],["onchain",{"_index":6,"t":{"2576":{"position":[[0,7]]}}}],["open",{"_index":509,"t":{"4227":{"position":[[33,6]]}}}],["open/forward",{"_index":508,"t":{"4225":{"position":[[10,12]]}}}],["opentelemetri",{"_index":166,"t":{"2973":{"position":[[8,13]]},"2975":{"position":[[23,13]]}}}],["oper",{"_index":233,"t":{"3142":{"position":[[0,8]]},"3330":{"position":[[18,9]]},"3332":{"position":[[19,9]]},"3338":{"position":[[18,9]]},"3340":{"position":[[19,9]]},"4422":{"position":[[0,8]]}}}],["optim",{"_index":204,"t":{"3086":{"position":[[0,8]]}}}],["option",{"_index":105,"t":{"2758":{"position":[[13,7]]},"2791":{"position":[[0,8],[23,7]]},"2857":{"position":[[0,8],[23,7]]},"2932":{"position":[[13,7]]},"2997":{"position":[[7,7]]},"3156":{"position":[[8,7]]},"3158":{"position":[[0,7]]},"3822":{"position":[[29,7]]},"4053":{"position":[[8,7]]},"4200":{"position":[[9,7]]},"4270":{"position":[[24,7]]},"4390":{"position":[[7,7]]},"4404":{"position":[[13,7]]},"4454":{"position":[[0,7]]},"4612":{"position":[[8,7]]}}}],["order",{"_index":433,"t":{"3979":{"position":[[14,5]]}}}],["origin",{"_index":594,"t":{"4670":{"position":[[18,7]]},"4780":{"position":[[14,7]]}}}],["outdat",{"_index":457,"t":{"4061":{"position":[[6,8]]}}}],["overhead",{"_index":215,"t":{"3094":{"position":[[45,8]]}}}],["overrid",{"_index":114,"t":{"2779":{"position":[[0,8]]}}}],["overview",{"_index":250,"t":{"3201":{"position":[[0,8]]},"3522":{"position":[[0,8]]},"3871":{"position":[[26,8]]}}}],["p2p",{"_index":472,"t":{"4089":{"position":[[0,3]]},"4109":{"position":[[0,3]]},"4742":{"position":[[0,3]]},"4744":{"position":[[0,3]]},"4746":{"position":[[0,3]]},"4748":{"position":[[0,3]]}}}],["packag",{"_index":67,"t":{"2690":{"position":[[13,8]]},"3886":{"position":[[13,8]]}}}],["pair",{"_index":356,"t":{"3556":{"position":[[37,4]]},"4292":{"position":[[37,4]]}}}],["parallel",{"_index":418,"t":{"3871":{"position":[[0,15]]}}}],["paramet",{"_index":378,"t":{"3723":{"position":[[6,10]]},"4327":{"position":[[6,9]]},"4540":{"position":[[14,10]]}}}],["password",{"_index":112,"t":{"2767":{"position":[[29,8]]},"2773":{"position":[[31,8]]},"2939":{"position":[[18,8]]},"2945":{"position":[[20,8]]},"3193":{"position":[[21,8]]},"4282":{"position":[[13,8]]},"4426":{"position":[[0,8]]},"4804":{"position":[[22,8]]}}}],["path",{"_index":517,"t":{"4249":{"position":[[7,4]]},"4493":{"position":[[5,4]]},"4642":{"position":[[5,4]]}}}],["payload",{"_index":34,"t":{"2633":{"position":[[8,7]]},"4339":{"position":[[7,7]]},"4340":{"position":[[13,7]]},"4342":{"position":[[11,7]]},"4344":{"position":[[15,7]]},"4509":{"position":[[10,7]]},"4513":{"position":[[0,7]]},"4515":{"position":[[0,7]]}}}],["peer",{"_index":98,"t":{"2742":{"position":[[5,5]]},"3595":{"position":[[17,5]]},"3749":{"position":[[10,5]]},"3985":{"position":[[0,7]]},"4111":{"position":[[6,5]]},"4113":{"position":[[10,5]]},"4117":{"position":[[8,4]]},"4218":{"position":[[0,7]]},"4219":{"position":[[25,5]]},"4229":{"position":[[28,5]]},"4231":{"position":[[48,7]]},"4239":{"position":[[5,5]]},"4692":{"position":[[4,5]]},"4752":{"position":[[7,4]]},"4844":{"position":[[9,6],[30,5]]}}}],["pend",{"_index":445,"t":{"4015":{"position":[[4,7]]},"4017":{"position":[[8,7]]},"4278":{"position":[[0,7]]},"4376":{"position":[[0,7]]},"4396":{"position":[[0,7]]}}}],["percentag",{"_index":615,"t":{"4758":{"position":[[23,10]]},"4858":{"position":[[25,10]]}}}],["percentil",{"_index":581,"t":{"4618":{"position":[[14,10]]}}}],["perform",{"_index":196,"t":{"3077":{"position":[[8,11]]},"3081":{"position":[[20,11]]},"3330":{"position":[[3,7]]},"3332":{"position":[[3,7]]},"3338":{"position":[[3,7]]},"3340":{"position":[[3,7]]}}}],["perm",{"_index":303,"t":{"3420":{"position":[[0,4]]}}}],["perm_addaccountstoallowlist",{"_index":304,"t":{"3422":{"position":[[0,27]]}}}],["perm_addnodestoallowlist",{"_index":305,"t":{"3424":{"position":[[0,24]]}}}],["perm_getaccountsallowlist",{"_index":306,"t":{"3426":{"position":[[0,25]]}}}],["perm_getnodesallowlist",{"_index":307,"t":{"3428":{"position":[[0,22]]}}}],["perm_reloadpermissionsfromfil",{"_index":308,"t":{"3430":{"position":[[0,30]]}}}],["perm_removeaccountsfromallowlist",{"_index":309,"t":{"3432":{"position":[[0,32]]}}}],["perm_removenodesfromallowlist",{"_index":310,"t":{"3434":{"position":[[0,29]]}}}],["permiss",{"_index":2,"t":{"2568":{"position":[[5,13]]},"2570":{"position":[[8,13]]},"2572":{"position":[[8,13]]},"2583":{"position":[[0,13]]},"2595":{"position":[[11,13]]},"2597":{"position":[[8,13]]},"2603":{"position":[[5,13]]},"2605":{"position":[[15,13]]},"2756":{"position":[[25,13]]},"3029":{"position":[[12,13]]},"3051":{"position":[[0,11]]},"3159":{"position":[[0,11]]},"3161":{"position":[[0,11]]},"3163":{"position":[[0,11]]},"3165":{"position":[[0,11]]},"3167":{"position":[[0,11]]},"3169":{"position":[[0,11]]},"3171":{"position":[[0,11]]},"3173":{"position":[[0,11]]},"3175":{"position":[[0,11]]},"3420":{"position":[[5,15]]},"3579":{"position":[[32,12]]},"3583":{"position":[[14,11]]},"3593":{"position":[[32,11]]},"3597":{"position":[[12,12]]},"4298":{"position":[[9,11]]}}}],["persist",{"_index":336,"t":{"3492":{"position":[[9,10]]}}}],["plugin",{"_index":11,"t":{"2591":{"position":[[8,7]]},"2599":{"position":[[14,6]]},"2641":{"position":[[14,6]]},"3136":{"position":[[5,6]]},"3138":{"position":[[0,6]]},"5076":{"position":[[0,7]]}}}],["plugins_reloadpluginconfig",{"_index":733,"t":{"5078":{"position":[[0,26]]}}}],["poa",{"_index":242,"t":{"3177":{"position":[[0,3]]}}}],["poll",{"_index":518,"t":{"4262":{"position":[[0,4]]}}}],["pool",{"_index":366,"t":{"3619":{"position":[[53,4]]},"3811":{"position":[[20,4]]},"3813":{"position":[[22,4]]},"3815":{"position":[[51,4]]},"3822":{"position":[[12,4]]},"4850":{"position":[[3,4]]},"4852":{"position":[[3,4]]},"4854":{"position":[[3,4]]},"4856":{"position":[[3,4]]},"4858":{"position":[[3,4]]},"4860":{"position":[[3,4]]},"4862":{"position":[[3,4]]},"4864":{"position":[[3,4]]},"4866":{"position":[[3,4]]},"4868":{"position":[[3,4]]},"4870":{"position":[[3,4]]},"4872":{"position":[[3,4]]},"4874":{"position":[[3,4]]},"4876":{"position":[[3,4]]},"4878":{"position":[[3,4]]}}}],["port",{"_index":79,"t":{"2706":{"position":[[7,5]]},"3953":{"position":[[7,5]]},"4225":{"position":[[26,7]]},"4227":{"position":[[23,5]]},"4247":{"position":[[8,5]]},"4333":{"position":[[8,5]]},"4658":{"position":[[11,4]]},"4676":{"position":[[13,4]]},"4700":{"position":[[8,4]]},"4710":{"position":[[13,4]]},"4730":{"position":[[14,4]]},"4748":{"position":[[4,4]]},"4792":{"position":[[9,4]]},"4836":{"position":[[7,4]]}}}],["post",{"_index":118,"t":{"2793":{"position":[[0,4]]},"2859":{"position":[[0,4]]},"2889":{"position":[[0,4]]}}}],["postman",{"_index":388,"t":{"3745":{"position":[[9,7]]},"4302":{"position":[[0,7]]}}}],["practic",{"_index":347,"t":{"3529":{"position":[[5,9]]}}}],["preced",{"_index":434,"t":{"3979":{"position":[[23,10]]}}}],["prepar",{"_index":531,"t":{"4340":{"position":[[3,7]]}}}],["prerequisit",{"_index":62,"t":{"2683":{"position":[[0,13]]},"2688":{"position":[[0,13]]},"2704":{"position":[[0,13]]},"2718":{"position":[[0,13]]},"2819":{"position":[[0,13]]},"2959":{"position":[[0,13]]},"2988":{"position":[[0,13]]},"2993":{"position":[[0,13]]},"3118":{"position":[[0,13]]},"3215":{"position":[[0,13]]},"3239":{"position":[[0,13]]},"3247":{"position":[[0,13]]},"3257":{"position":[[0,13]]},"3279":{"position":[[0,13]]},"3296":{"position":[[0,13]]},"3326":{"position":[[0,13]]},"3371":{"position":[[0,13]]},"3490":{"position":[[0,13]]},"3504":{"position":[[0,13]]},"3520":{"position":[[0,13]]},"3553":{"position":[[0,13]]},"3570":{"position":[[0,13]]},"3603":{"position":[[0,13]]},"3631":{"position":[[0,13]]},"3651":{"position":[[0,13]]},"3681":{"position":[[0,13]]},"3731":{"position":[[0,13]]},"3854":{"position":[[0,13]]},"3879":{"position":[[0,13]]},"3884":{"position":[[0,13]]},"3890":{"position":[[0,13]]},"3929":{"position":[[0,13]]},"3949":{"position":[[0,13]]},"4604":{"position":[[0,13]]}}}],["pretti",{"_index":597,"t":{"4684":{"position":[[5,6]]}}}],["prevent",{"_index":94,"t":{"2740":{"position":[[0,7]]}}}],["price",{"_index":137,"t":{"2841":{"position":[[33,5]]},"3818":{"position":[[32,6]]},"4459":{"position":[[0,5]]},"4614":{"position":[[8,5]]},"4616":{"position":[[8,5]]},"4618":{"position":[[8,5]]},"4716":{"position":[[8,5]]},"4852":{"position":[[13,5]]},"4868":{"position":[[16,5]]},"4872":{"position":[[8,5]]}}}],["print",{"_index":598,"t":{"4684":{"position":[[12,5]]}}}],["priorit",{"_index":640,"t":{"4862":{"position":[[12,11]]},"4864":{"position":[[12,11]]}}}],["prioriti",{"_index":608,"t":{"4718":{"position":[[4,8]]},"4752":{"position":[[12,8]]},"4870":{"position":[[17,8]]},"4874":{"position":[[8,8]]}}}],["priv",{"_index":311,"t":{"3436":{"position":[[0,4]]}}}],["priv_cal",{"_index":312,"t":{"3438":{"position":[[0,9]]}}}],["priv_createprivacygroup",{"_index":313,"t":{"3440":{"position":[[0,23]]}}}],["priv_debuggetstateroot",{"_index":314,"t":{"3442":{"position":[[0,22]]}}}],["priv_deleteprivacygroup",{"_index":315,"t":{"3444":{"position":[[0,23]]}}}],["priv_distributerawtransact",{"_index":179,"t":{"3011":{"position":[[0,29]]},"3446":{"position":[[0,29]]}}}],["priv_findprivacygroup",{"_index":316,"t":{"3448":{"position":[[0,21]]}}}],["priv_getcod",{"_index":317,"t":{"3450":{"position":[[0,12]]}}}],["priv_geteeatransactioncount",{"_index":318,"t":{"3452":{"position":[[0,27]]}}}],["priv_getfilterchang",{"_index":319,"t":{"3454":{"position":[[0,21]]}}}],["priv_getfilterlog",{"_index":320,"t":{"3456":{"position":[[0,18]]}}}],["priv_getlog",{"_index":321,"t":{"3458":{"position":[[0,12]]}}}],["priv_getprivacyprecompileaddress",{"_index":322,"t":{"3460":{"position":[[0,32]]}}}],["priv_getprivatetransact",{"_index":323,"t":{"3462":{"position":[[0,26]]}}}],["priv_gettransactioncount",{"_index":324,"t":{"3464":{"position":[[0,24]]}}}],["priv_gettransactionreceipt",{"_index":325,"t":{"3466":{"position":[[0,26]]}}}],["priv_newfilt",{"_index":326,"t":{"3468":{"position":[[0,14]]}}}],["priv_tracetransact",{"_index":327,"t":{"3470":{"position":[[0,21]]}}}],["priv_uninstallfilt",{"_index":328,"t":{"3472":{"position":[[0,20]]}}}],["privaci",{"_index":28,"t":{"2625":{"position":[[9,7]]},"2645":{"position":[[0,7]]},"2649":{"position":[[29,7]]},"2651":{"position":[[14,7]]},"2671":{"position":[[0,7]]},"2673":{"position":[[17,7]]},"3013":{"position":[[31,7]]},"3061":{"position":[[0,7]]},"3065":{"position":[[0,7]]},"3069":{"position":[[16,7]]},"3071":{"position":[[16,7]]},"3090":{"position":[[23,7]]},"3179":{"position":[[0,7]]},"3181":{"position":[[0,7]]},"3183":{"position":[[0,7]]},"3185":{"position":[[0,7]]},"3187":{"position":[[0,7]]},"3189":{"position":[[0,7]]},"3191":{"position":[[0,7]]},"3193":{"position":[[0,7]]},"3195":{"position":[[0,7]]},"3197":{"position":[[0,7]]}}}],["privat",{"_index":53,"t":{"2661":{"position":[[0,7]]},"2663":{"position":[[0,7]]},"2665":{"position":[[0,7]]},"2669":{"position":[[0,7]]},"2728":{"position":[[16,7]]},"3015":{"position":[[23,7]]},"3081":{"position":[[0,7]]},"3130":{"position":[[0,7]]},"3132":{"position":[[0,7]]},"3231":{"position":[[15,7]]},"3253":{"position":[[31,7]]},"3271":{"position":[[15,7]]},"3308":{"position":[[17,7]]},"3318":{"position":[[16,7]]},"3336":{"position":[[14,7]]},"3556":{"position":[[14,7]]},"3581":{"position":[[17,7]]},"3638":{"position":[[14,7]]},"3663":{"position":[[17,7]]},"3673":{"position":[[16,7]]},"3765":{"position":[[21,7]]},"3767":{"position":[[9,7]]},"3797":{"position":[[5,7]]},"3803":{"position":[[22,7]]},"4073":{"position":[[23,7]]},"4129":{"position":[[0,7]]},"4132":{"position":[[13,7]]},"4268":{"position":[[12,7]]},"4292":{"position":[[14,7]]},"4740":{"position":[[5,7]]}}}],["process",{"_index":478,"t":{"4109":{"position":[[14,7]]}}}],["product",{"_index":100,"t":{"2748":{"position":[[25,10]]},"4180":{"position":[[10,10]]}}}],["profil",{"_index":438,"t":{"3993":{"position":[[18,7]]},"3995":{"position":[[7,7]]},"3997":{"position":[[19,7]]},"3999":{"position":[[14,8]]},"4750":{"position":[[0,7]]}}}],["project",{"_index":226,"t":{"3120":{"position":[[21,7]]}}}],["prometheu",{"_index":383,"t":{"3739":{"position":[[19,10]]},"3777":{"position":[[10,10]]},"4148":{"position":[[8,10]]},"4150":{"position":[[15,10]]},"4152":{"position":[[4,10]]},"4154":{"position":[[5,10]]},"4712":{"position":[[13,10]]}}}],["propag",{"_index":496,"t":{"4180":{"position":[[25,11]]}}}],["properli",{"_index":351,"t":{"3539":{"position":[[33,8]]}}}],["properti",{"_index":17,"t":{"2609":{"position":[[0,10]]}}}],["propos",{"_index":16,"t":{"2605":{"position":[[6,8]]},"2756":{"position":[[16,8]]},"3288":{"position":[[3,7]]}}}],["protect",{"_index":634,"t":{"4842":{"position":[[17,10]]},"4882":{"position":[[22,10]]}}}],["protocol",{"_index":177,"t":{"3005":{"position":[[12,8]]},"4256":{"position":[[0,9]]},"4702":{"position":[[8,8]]},"4808":{"position":[[13,8]]}}}],["provid",{"_index":35,"t":{"2633":{"position":[[16,8]]},"4075":{"position":[[18,8]]}}}],["provis",{"_index":364,"t":{"3605":{"position":[[0,9]]}}}],["prune",{"_index":455,"t":{"4059":{"position":[[10,5]]},"4061":{"position":[[0,5]]},"4065":{"position":[[0,5]]},"4083":{"position":[[20,5]]},"4630":{"position":[[17,7]]}}}],["pub/sub",{"_index":535,"t":{"4364":{"position":[[8,7]]}}}],["public",{"_index":247,"t":{"3187":{"position":[[8,6]]},"3328":{"position":[[14,6]]},"3556":{"position":[[26,6]]},"3753":{"position":[[0,6]]},"3799":{"position":[[5,6]]},"4290":{"position":[[4,6]]},"4292":{"position":[[26,6]]},"4430":{"position":[[0,6]]},"4778":{"position":[[28,6]]},"4826":{"position":[[26,6]]}}}],["push",{"_index":486,"t":{"4152":{"position":[[28,4]]},"4704":{"position":[[8,4]]},"4706":{"position":[[8,4]]},"4708":{"position":[[8,4]]},"4710":{"position":[[8,4]]},"4712":{"position":[[8,4]]}}}],["qbft",{"_index":329,"t":{"3474":{"position":[[0,4]]},"3661":{"position":[[32,4]]}}}],["qbft_discardvalidatorvot",{"_index":330,"t":{"3476":{"position":[[0,25]]}}}],["qbft_getpendingvot",{"_index":331,"t":{"3478":{"position":[[0,20]]}}}],["qbft_getsignermetr",{"_index":332,"t":{"3480":{"position":[[0,21]]}}}],["qbft_getvalidatorsbyblockhash",{"_index":333,"t":{"3482":{"position":[[0,29]]}}}],["qbft_getvalidatorsbyblocknumb",{"_index":334,"t":{"3484":{"position":[[0,31]]}}}],["qbft_proposevalidatorvot",{"_index":335,"t":{"3486":{"position":[[0,25]]}}}],["queu",{"_index":212,"t":{"3092":{"position":[[6,7]]}}}],["quick",{"_index":219,"t":{"3096":{"position":[[45,5]]}}}],["quickstart",{"_index":169,"t":{"2979":{"position":[[10,10]]}}}],["quorum",{"_index":225,"t":{"3120":{"position":[[11,6]]},"3122":{"position":[[22,6]]},"3126":{"position":[[7,6]]},"3253":{"position":[[61,6]]},"3346":{"position":[[0,6]]},"3506":{"position":[[11,6]]}}}],["rancher",{"_index":288,"t":{"3379":{"position":[[0,7]]}}}],["random",{"_index":208,"t":{"3090":{"position":[[4,6]]},"4752":{"position":[[0,6]]}}}],["rang",{"_index":542,"t":{"4398":{"position":[[0,5]]},"4810":{"position":[[13,5]]},"4812":{"position":[[21,5]]}}}],["ratio",{"_index":607,"t":{"4714":{"position":[[20,5]]}}}],["read",{"_index":273,"t":{"3330":{"position":[[13,4]]},"3338":{"position":[[13,4]]}}}],["readi",{"_index":441,"t":{"4003":{"position":[[25,5]]},"4319":{"position":[[0,9]]},"4321":{"position":[[0,9]]}}}],["reason",{"_index":185,"t":{"3019":{"position":[[14,6]]},"3021":{"position":[[17,6]]},"3023":{"position":[[7,6]]},"4487":{"position":[[7,6]]},"4764":{"position":[[7,6]]}}}],["receipt",{"_index":191,"t":{"3055":{"position":[[12,8]]},"3132":{"position":[[20,7]]},"4410":{"position":[[12,7]]},"4754":{"position":[[0,7]]}}}],["receiv",{"_index":552,"t":{"4463":{"position":[[0,8]]}}}],["recent",{"_index":390,"t":{"3751":{"position":[[17,6]]}}}],["record",{"_index":451,"t":{"4034":{"position":[[19,8]]}}}],["recov",{"_index":443,"t":{"4009":{"position":[[0,7]]}}}],["redirect",{"_index":447,"t":{"4024":{"position":[[6,11]]},"4030":{"position":[[6,11]]}}}],["reduc",{"_index":213,"t":{"3094":{"position":[[24,6]]}}}],["refer",{"_index":176,"t":{"2997":{"position":[[15,9]]},"3846":{"position":[[0,10]]}}}],["regist",{"_index":14,"t":{"2599":{"position":[[0,8]]},"2641":{"position":[[0,8]]}}}],["remot",{"_index":479,"t":{"4115":{"position":[[6,6]]},"4756":{"position":[[0,6]]},"4758":{"position":[[0,6]]}}}],["remov",{"_index":102,"t":{"2750":{"position":[[8,6]]},"2795":{"position":[[8,6]]},"2799":{"position":[[0,6]]},"2861":{"position":[[8,6]]},"2863":{"position":[[8,6]]},"2865":{"position":[[8,6]]},"2893":{"position":[[8,6]]},"2897":{"position":[[0,6]]},"2913":{"position":[[11,8]]},"3073":{"position":[[8,6]]},"3292":{"position":[[0,6]]},"3765":{"position":[[45,8]]},"3767":{"position":[[29,6]]}}}],["reorg",{"_index":56,"t":{"2673":{"position":[[0,5]]},"4760":{"position":[[0,5]]}}}],["repeat",{"_index":560,"t":{"4485":{"position":[[0,6]]}}}],["replac",{"_index":403,"t":{"3817":{"position":[[0,9]]}}}],["replay",{"_index":633,"t":{"4842":{"position":[[10,6]]}}}],["request",{"_index":386,"t":{"3741":{"position":[[13,8]]},"3747":{"position":[[0,7]]},"3751":{"position":[[0,7]]},"4274":{"position":[[8,8]]},"4276":{"position":[[8,8]]},"4300":{"position":[[36,8]]},"4314":{"position":[[19,8]]},"4788":{"position":[[13,7]]}}}],["requir",{"_index":71,"t":{"2694":{"position":[[19,12]]},"2698":{"position":[[3,12]]},"2911":{"position":[[21,8]]},"2983":{"position":[[0,12]]},"3707":{"position":[[8,12]]},"3975":{"position":[[4,12]]},"4762":{"position":[[0,8]]}}}],["resourc",{"_index":86,"t":{"2712":{"position":[[23,9]]},"3963":{"position":[[23,9]]},"4079":{"position":[[0,8]]}}}],["restart",{"_index":99,"t":{"2742":{"position":[[17,10]]},"3765":{"position":[[9,7]]},"4239":{"position":[[14,10]]}}}],["restor",{"_index":92,"t":{"2736":{"position":[[5,8]]},"4854":{"position":[[20,7]]}}}],["restrict",{"_index":613,"t":{"4734":{"position":[[4,8]]}}}],["result",{"_index":540,"t":{"4388":{"position":[[12,7]]}}}],["retent",{"_index":641,"t":{"4876":{"position":[[8,9]]}}}],["retesteth",{"_index":548,"t":{"4436":{"position":[[0,9]]}}}],["revert",{"_index":184,"t":{"3019":{"position":[[7,6]]},"3021":{"position":[[10,6]]},"3023":{"position":[[0,6]]},"4440":{"position":[[0,6]]},"4442":{"position":[[0,6]]},"4487":{"position":[[0,6]]},"4764":{"position":[[0,6]]}}}],["reward",{"_index":124,"t":{"2811":{"position":[[16,7]]},"2873":{"position":[[16,7]]},"3840":{"position":[[12,7]]}}}],["rlp",{"_index":236,"t":{"3146":{"position":[[0,3]]}}}],["rocksdb",{"_index":551,"t":{"4444":{"position":[[0,7]]}}}],["role",{"_index":282,"t":{"3361":{"position":[[0,4]]}}}],["rotat",{"_index":491,"t":{"4166":{"position":[[4,8]]}}}],["router/modem",{"_index":507,"t":{"4221":{"position":[[17,12]]}}}],["rpc",{"_index":253,"t":{"3209":{"position":[[14,3]]},"3621":{"position":[[10,3]]},"3741":{"position":[[9,3]]},"4091":{"position":[[5,3]]},"4298":{"position":[[5,3]]},"4312":{"position":[[5,3]]},"4364":{"position":[[4,3]]},"4656":{"position":[[7,3]]},"4658":{"position":[[7,3]]},"4766":{"position":[[0,3]]},"4768":{"position":[[0,3]]},"4770":{"position":[[0,3]]},"4772":{"position":[[0,3]]},"4774":{"position":[[0,3]]},"4776":{"position":[[0,3]]},"4778":{"position":[[0,3]]},"4780":{"position":[[0,3]]},"4782":{"position":[[0,3]]},"4784":{"position":[[0,3]]},"4786":{"position":[[0,3]]},"4788":{"position":[[0,3]]},"4790":{"position":[[0,3]]},"4792":{"position":[[0,3]]},"4794":{"position":[[0,3]]},"4796":{"position":[[0,3]]},"4798":{"position":[[0,3]]},"4800":{"position":[[0,3]]},"4802":{"position":[[0,3]]},"4804":{"position":[[0,3]]},"4806":{"position":[[0,3]]},"4808":{"position":[[0,3]]},"4810":{"position":[[0,3]]},"4812":{"position":[[0,3]]},"4814":{"position":[[0,3]]},"4816":{"position":[[0,3]]},"4818":{"position":[[0,3]]},"4820":{"position":[[0,3]]},"4822":{"position":[[0,3]]},"4824":{"position":[[0,3]]},"4826":{"position":[[0,3]]},"4828":{"position":[[0,3]]},"4830":{"position":[[0,3]]},"4832":{"position":[[0,3]]},"4834":{"position":[[0,3]]},"4836":{"position":[[0,3]]}}}],["rpc_modul",{"_index":750,"t":{"5113":{"position":[[0,11]]}}}],["run",{"_index":81,"t":{"2710":{"position":[[0,3]]},"2724":{"position":[[16,7]]},"2726":{"position":[[0,3]]},"2728":{"position":[[0,3]]},"2975":{"position":[[15,7]]},"2992":{"position":[[0,3]]},"3741":{"position":[[0,3]]},"3743":{"position":[[0,3]]},"3745":{"position":[[0,3]]},"3761":{"position":[[0,3]]},"3911":{"position":[[0,3]]},"3919":{"position":[[0,3]]},"3937":{"position":[[0,3]]},"3939":{"position":[[0,3]]},"3941":{"position":[[0,3]]},"3943":{"position":[[0,3]]},"3945":{"position":[[16,7]]},"3957":{"position":[[0,3]]},"3959":{"position":[[0,3]]},"3961":{"position":[[0,3]]},"4083":{"position":[[7,3]]},"4150":{"position":[[11,3]]},"4152":{"position":[[0,3]]}}}],["same",{"_index":404,"t":{"3817":{"position":[[32,4]]}}}],["save",{"_index":637,"t":{"4854":{"position":[[15,4]]},"4878":{"position":[[8,4]]}}}],["secret",{"_index":414,"t":{"3857":{"position":[[23,6]]},"3893":{"position":[[23,6]]},"4562":{"position":[[23,6]]},"4582":{"position":[[23,6]]},"4654":{"position":[[11,6]]}}}],["secur",{"_index":630,"t":{"4838":{"position":[[0,8]]}}}],["segment",{"_index":462,"t":{"4069":{"position":[[28,7]]},"4077":{"position":[[28,7]]}}}],["select",{"_index":244,"t":{"3177":{"position":[[14,9]]},"4624":{"position":[[10,9]]}}}],["send",{"_index":37,"t":{"2635":{"position":[[0,4]]},"4339":{"position":[[0,4]]}}}],["sender",{"_index":209,"t":{"3090":{"position":[[11,7]]},"3817":{"position":[[37,6]]},"4461":{"position":[[0,6]]},"4860":{"position":[[22,6]]},"4874":{"position":[[17,7]]}}}],["separ",{"_index":222,"t":{"3104":{"position":[[0,8]]}}}],["sepolia",{"_index":428,"t":{"3941":{"position":[[14,7]]}}}],["sequenc",{"_index":400,"t":{"3813":{"position":[[0,9]]}}}],["server",{"_index":130,"t":{"2827":{"position":[[10,6]]},"2829":{"position":[[17,7]]},"2925":{"position":[[29,6]]},"4505":{"position":[[21,6]]}}}],["servic",{"_index":232,"t":{"3138":{"position":[[7,8]]},"3384":{"position":[[17,7]]},"3545":{"position":[[0,7]]},"4026":{"position":[[19,7]]},"4245":{"position":[[0,7]]},"4247":{"position":[[0,7]]},"4333":{"position":[[0,7]]}}}],["set",{"_index":134,"t":{"2837":{"position":[[3,3]]},"2839":{"position":[[3,3]]},"2975":{"position":[[0,7]]},"4150":{"position":[[0,3]]},"4221":{"position":[[30,8]]}}}],["setup",{"_index":601,"t":{"4688":{"position":[[12,5]]}}}],["share",{"_index":413,"t":{"3857":{"position":[[16,6]]},"3893":{"position":[[16,6]]},"4562":{"position":[[16,6]]},"4582":{"position":[[16,6]]}}}],["sign",{"_index":246,"t":{"3181":{"position":[[27,7]]}}}],["signatur",{"_index":379,"t":{"3725":{"position":[[6,9]]}}}],["signer",{"_index":155,"t":{"2887":{"position":[[12,6]]},"2888":{"position":[[12,7]]},"2893":{"position":[[15,7]]},"2895":{"position":[[6,6]]},"2897":{"position":[[9,6]]}}}],["simpl",{"_index":192,"t":{"3071":{"position":[[0,6]]}}}],["size",{"_index":75,"t":{"2696":{"position":[[21,4]]},"2837":{"position":[[17,4]]},"2839":{"position":[[20,4]]},"3094":{"position":[[16,4]]},"3492":{"position":[[33,4]]},"3969":{"position":[[21,4]]},"4630":{"position":[[32,4]]},"4790":{"position":[[19,4]]},"4834":{"position":[[17,4]]},"4866":{"position":[[12,4]]}}}],["skip",{"_index":151,"t":{"2883":{"position":[[0,4]]}}}],["smart",{"_index":115,"t":{"2779":{"position":[[9,5]]},"2865":{"position":[[34,5]]},"3757":{"position":[[0,5]]}}}],["snap",{"_index":422,"t":{"3913":{"position":[[0,4]]}}}],["socket",{"_index":516,"t":{"4249":{"position":[[0,6]]}}}],["solid",{"_index":198,"t":{"3079":{"position":[[17,5]]}}}],["sourc",{"_index":59,"t":{"2679":{"position":[[11,6]]},"3925":{"position":[[11,6]]},"4196":{"position":[[11,6]]}}}],["space",{"_index":432,"t":{"3971":{"position":[[5,5]]}}}],["specifi",{"_index":4,"t":{"2572":{"position":[[0,7]]},"2746":{"position":[[0,7]]},"3029":{"position":[[0,7]]},"3035":{"position":[[0,7]]},"3156":{"position":[[0,7]]},"3715":{"position":[[0,7]]},"3803":{"position":[[0,7]]},"4132":{"position":[[0,7]]},"4612":{"position":[[0,7]]}}}],["speed",{"_index":24,"t":{"2617":{"position":[[0,5]]}}}],["splunk",{"_index":170,"t":{"2979":{"position":[[26,6]]},"2981":{"position":[[0,6]]},"2987":{"position":[[4,6]]},"2992":{"position":[[6,6]]},"2997":{"position":[[0,6]]}}}],["ssh",{"_index":255,"t":{"3211":{"position":[[0,3]]}}}],["stake",{"_index":416,"t":{"3867":{"position":[[3,5]]},"3903":{"position":[[3,5]]},"4576":{"position":[[3,5]]},"4596":{"position":[[3,5]]}}}],["staker",{"_index":437,"t":{"3993":{"position":[[11,6]]},"3995":{"position":[[0,6]]}}}],["start",{"_index":80,"t":{"2708":{"position":[[0,5]]},"2825":{"position":[[0,5]]},"2831":{"position":[[0,5]]},"2841":{"position":[[3,5]]},"2961":{"position":[[0,5]]},"3225":{"position":[[3,5]]},"3227":{"position":[[3,5]]},"3229":{"position":[[3,5]]},"3265":{"position":[[3,5]]},"3267":{"position":[[3,5]]},"3269":{"position":[[3,5]]},"3284":{"position":[[3,5]]},"3310":{"position":[[3,5]]},"3312":{"position":[[3,5]]},"3314":{"position":[[3,5]]},"3316":{"position":[[3,5]]},"3562":{"position":[[3,5]]},"3564":{"position":[[3,5]]},"3585":{"position":[[3,5]]},"3587":{"position":[[3,5]]},"3589":{"position":[[3,5]]},"3591":{"position":[[4,5]]},"3636":{"position":[[3,5]]},"3665":{"position":[[3,5]]},"3667":{"position":[[3,5]]},"3669":{"position":[[3,5]]},"3671":{"position":[[3,5]]},"3690":{"position":[[3,5]]},"3692":{"position":[[3,5]]},"3694":{"position":[[3,5]]},"3696":{"position":[[3,5]]},"3698":{"position":[[3,5]]},"3717":{"position":[[0,5]]},"3735":{"position":[[0,5]]},"3781":{"position":[[3,5]]},"3861":{"position":[[3,5]]},"3863":{"position":[[3,5]]},"3897":{"position":[[3,5]]},"3899":{"position":[[3,5]]},"3955":{"position":[[0,5]]},"4134":{"position":[[0,5]]},"4566":{"position":[[3,5]]},"4568":{"position":[[3,5]]},"4586":{"position":[[3,5]]},"4588":{"position":[[3,5]]}}}],["state",{"_index":44,"t":{"2647":{"position":[[15,6]]},"3079":{"position":[[23,5]]},"3088":{"position":[[4,8]]},"4172":{"position":[[27,5]]},"4174":{"position":[[9,5]]},"4503":{"position":[[0,5]]},"4511":{"position":[[12,5]]},"4668":{"position":[[8,5]]}}}],["statediff",{"_index":576,"t":{"4554":{"position":[[0,9]]}}}],["static",{"_index":484,"t":{"4142":{"position":[[10,6]]},"4144":{"position":[[0,6]]},"4840":{"position":[[0,6]]}}}],["statist",{"_index":161,"t":{"2923":{"position":[[0,10]]}}}],["statu",{"_index":563,"t":{"4515":{"position":[[8,6]]}}}],["step",{"_index":173,"t":{"2985":{"position":[[0,5]]},"2990":{"position":[[0,5]]},"2995":{"position":[[0,5]]},"3217":{"position":[[0,5]]},"3233":{"position":[[5,5]]},"3259":{"position":[[0,5]]},"3273":{"position":[[5,5]]},"3298":{"position":[[0,5]]},"3320":{"position":[[5,5]]},"3498":{"position":[[0,5]]},"3555":{"position":[[0,5]]},"3572":{"position":[[0,5]]},"3633":{"position":[[0,5]]},"3653":{"position":[[0,5]]},"3675":{"position":[[5,5]]},"3683":{"position":[[0,5]]},"3856":{"position":[[0,5]]},"3892":{"position":[[0,5]]},"4606":{"position":[[0,5]]}}}],["stop",{"_index":83,"t":{"2712":{"position":[[0,4]]},"2965":{"position":[[0,4]]},"3235":{"position":[[0,4]]},"3275":{"position":[[0,4]]},"3322":{"position":[[0,4]]},"3599":{"position":[[0,4]]},"3640":{"position":[[4,4]]},"3677":{"position":[[0,4]]},"3765":{"position":[[0,4]]},"3767":{"position":[[0,4]]},"3963":{"position":[[0,4]]}}}],["storag",{"_index":199,"t":{"3079":{"position":[[29,7]]},"3363":{"position":[[0,7]]},"3707":{"position":[[0,7]]},"3909":{"position":[[0,7]]},"3935":{"position":[[12,7]]},"3987":{"position":[[0,7]]},"4438":{"position":[[0,7]]},"4491":{"position":[[10,7]]},"4644":{"position":[[5,7]]},"4686":{"position":[[10,7]]}}}],["store",{"_index":465,"t":{"4073":{"position":[[7,5]]},"4085":{"position":[[21,6]]}}}],["strategi",{"_index":421,"t":{"3873":{"position":[[19,8]]}}}],["stratum",{"_index":610,"t":{"4726":{"position":[[6,7]]},"4728":{"position":[[6,7]]},"4730":{"position":[[6,7]]}}}],["strict",{"_index":632,"t":{"4842":{"position":[[0,6]]}}}],["structur",{"_index":543,"t":{"4400":{"position":[[0,10]]}}}],["subcommand",{"_index":459,"t":{"4067":{"position":[[0,10]]},"4499":{"position":[[0,11]]}}}],["submiss",{"_index":201,"t":{"3082":{"position":[[15,10]]}}}],["subscrib",{"_index":537,"t":{"4370":{"position":[[0,9]]}}}],["subscript",{"_index":442,"t":{"4007":{"position":[[0,13]]},"4009":{"position":[[21,13]]},"4366":{"position":[[0,12]]}}}],["suit",{"_index":626,"t":{"4798":{"position":[[20,5]]}}}],["support",{"_index":189,"t":{"3025":{"position":[[5,7]]},"3348":{"position":[[6,7]]},"3531":{"position":[[14,7]]},"3807":{"position":[[12,7]]},"4253":{"position":[[4,9]]}}}],["swap",{"_index":149,"t":{"2875":{"position":[[0,4]]}}}],["sync",{"_index":373,"t":{"3711":{"position":[[0,7]]},"3865":{"position":[[27,4]]},"3901":{"position":[[27,4]]},"3907":{"position":[[0,4]]},"3935":{"position":[[0,7]]},"3989":{"position":[[0,4]]},"4019":{"position":[[0,7]]},"4081":{"position":[[21,4]]},"4219":{"position":[[34,6]]},"4574":{"position":[[29,4]]},"4594":{"position":[[29,4]]},"4844":{"position":[[0,4],[21,4]]},"4846":{"position":[[0,4]]}}}],["synchron",{"_index":423,"t":{"3913":{"position":[[5,15]]},"3915":{"position":[[11,15]]},"3917":{"position":[[5,15]]},"4368":{"position":[[19,13]]},"4380":{"position":[[0,13]]}}}],["system",{"_index":70,"t":{"2694":{"position":[[12,6]]}}}],["t8n",{"_index":561,"t":{"4505":{"position":[[12,4],[17,3]]}}}],["target",{"_index":635,"t":{"4848":{"position":[[0,6]]}}}],["teku",{"_index":578,"t":{"4560":{"position":[[20,4]]},"4568":{"position":[[9,4]]},"4574":{"position":[[21,4]]},"4580":{"position":[[20,4]]},"4588":{"position":[[9,4]]},"4594":{"position":[[21,4]]}}}],["temporarili",{"_index":468,"t":{"4079":{"position":[[9,11]]}}}],["tenanc",{"_index":31,"t":{"2627":{"position":[[6,7]]},"2653":{"position":[[6,7]]},"3183":{"position":[[14,7]]}}}],["tenant",{"_index":357,"t":{"3566":{"position":[[16,6]]}}}],["tessera",{"_index":50,"t":{"2657":{"position":[[9,7]]},"3084":{"position":[[19,7]]},"3086":{"position":[[36,7]]},"3092":{"position":[[30,7]]},"3558":{"position":[[12,7]]},"3560":{"position":[[14,7]]},"3562":{"position":[[9,7]]},"3684":{"position":[[10,7]]},"3686":{"position":[[12,7]]},"3688":{"position":[[10,7]]},"3690":{"position":[[13,7]]}}}],["test",{"_index":82,"t":{"2710":{"position":[[15,7]]},"2726":{"position":[[15,7]]},"3937":{"position":[[15,7]]},"3957":{"position":[[15,7]]},"4227":{"position":[[10,4]]},"4503":{"position":[[6,4]]}}}],["testnet",{"_index":427,"t":{"3939":{"position":[[22,7]]},"3941":{"position":[[22,7]]},"3959":{"position":[[22,7]]}}}],["threshold",{"_index":616,"t":{"4760":{"position":[[14,9]]}}}],["through",{"_index":162,"t":{"2925":{"position":[[8,7]]},"2927":{"position":[[8,7]]}}}],["time",{"_index":117,"t":{"2789":{"position":[[6,4]]},"2809":{"position":[[16,4]]},"2855":{"position":[[6,4]]},"2871":{"position":[[16,4]]},"2903":{"position":[[16,4]]},"3177":{"position":[[28,4]]},"3907":{"position":[[5,5]]},"4182":{"position":[[6,4]]},"4184":{"position":[[16,4]]},"4186":{"position":[[21,4]]},"4188":{"position":[[17,4]]},"4624":{"position":[[24,4]]}}}],["tl",{"_index":127,"t":{"2821":{"position":[[17,3]]},"2827":{"position":[[17,3]]},"2933":{"position":[[5,3]]},"2935":{"position":[[5,3]]},"2937":{"position":[[5,3]]},"2939":{"position":[[5,3]]},"2941":{"position":[[5,3]]},"2943":{"position":[[5,3]]},"2945":{"position":[[5,3]]},"2947":{"position":[[5,3]]},"3189":{"position":[[8,3]]},"3191":{"position":[[8,3]]},"3193":{"position":[[8,3]]},"3195":{"position":[[8,3]]},"4794":{"position":[[9,3]]},"4796":{"position":[[9,3]]},"4798":{"position":[[9,3]]},"4800":{"position":[[9,3]]},"4802":{"position":[[9,3]]},"4804":{"position":[[9,3]]},"4806":{"position":[[9,3]]},"4808":{"position":[[9,3]]}}}],["token",{"_index":526,"t":{"4288":{"position":[[30,5]]},"4300":{"position":[[22,5]]}}}],["toml",{"_index":435,"t":{"3981":{"position":[[0,4]]}}}],["tool",{"_index":499,"t":{"4194":{"position":[[12,4]]},"4200":{"position":[[4,4]]}}}],["topic",{"_index":376,"t":{"3721":{"position":[[0,6]]},"3727":{"position":[[0,5]]}}}],["trace",{"_index":503,"t":{"4212":{"position":[[7,7]]},"4214":{"position":[[12,5]]},"4402":{"position":[[0,5]]},"4404":{"position":[[0,5]]},"4412":{"position":[[12,5]]},"4469":{"position":[[6,5]]},"4550":{"position":[[0,5]]},"4812":{"position":[[8,5]]},"5080":{"position":[[0,5]]}}}],["trace.[no]memori",{"_index":556,"t":{"4473":{"position":[[12,16]]}}}],["trace.[no]returndata",{"_index":558,"t":{"4477":{"position":[[0,20]]}}}],["trace.[no]stack",{"_index":557,"t":{"4475":{"position":[[0,15]]}}}],["trace_block",{"_index":734,"t":{"5082":{"position":[[0,11]]}}}],["trace_cal",{"_index":735,"t":{"5084":{"position":[[0,10]]}}}],["trace_callmani",{"_index":736,"t":{"5086":{"position":[[0,14]]}}}],["trace_filt",{"_index":737,"t":{"5088":{"position":[[0,12]]}}}],["trace_get",{"_index":738,"t":{"5090":{"position":[[0,9]]}}}],["trace_rawtransact",{"_index":739,"t":{"5092":{"position":[[0,20]]}}}],["trace_replayblocktransact",{"_index":740,"t":{"5094":{"position":[[0,29]]}}}],["trace_transact",{"_index":741,"t":{"5096":{"position":[[0,17]]}}}],["transact",{"_index":38,"t":{"2635":{"position":[[5,12]]},"2637":{"position":[[5,12]]},"2639":{"position":[[0,11]]},"2661":{"position":[[8,11]]},"2669":{"position":[[8,11]]},"3015":{"position":[[31,12]]},"3055":{"position":[[0,11]]},"3057":{"position":[[0,12]]},"3081":{"position":[[8,11]]},"3090":{"position":[[38,12]]},"3092":{"position":[[14,12]]},"3130":{"position":[[8,11]]},"3132":{"position":[[8,11]]},"3181":{"position":[[15,11]]},"3621":{"position":[[17,11]]},"3753":{"position":[[7,12]]},"3755":{"position":[[9,11]]},"3811":{"position":[[8,11]]},"3813":{"position":[[10,11]]},"3815":{"position":[[9,12],[39,11]]},"3817":{"position":[[10,12]]},"3822":{"position":[[0,11]]},"3826":{"position":[[9,12]]},"3828":{"position":[[12,12]]},"3830":{"position":[[8,12]]},"3832":{"position":[[5,12]]},"3834":{"position":[[10,11]]},"4005":{"position":[[0,11]]},"4015":{"position":[[12,12]]},"4017":{"position":[[16,12]]},"4164":{"position":[[12,12]]},"4214":{"position":[[0,11]]},"4359":{"position":[[9,12]]},"4376":{"position":[[8,12]]},"4378":{"position":[[8,12]]},"4396":{"position":[[8,11]]},"4406":{"position":[[0,11]]},"4408":{"position":[[0,11]]},"4410":{"position":[[0,11]]},"4412":{"position":[[0,11]]}}}],["transit",{"_index":121,"t":{"2801":{"position":[[6,10]]},"2807":{"position":[[0,11]]},"2869":{"position":[[0,11]]},"2899":{"position":[[6,10]]},"2901":{"position":[[0,11]]},"4505":{"position":[[0,11]]},"4517":{"position":[[0,10]]}}}],["tri",{"_index":370,"t":{"3702":{"position":[[7,5]]},"3704":{"position":[[10,5]]},"3706":{"position":[[10,5],[27,5]]}}}],["trie",{"_index":456,"t":{"4059":{"position":[[16,4]]},"4061":{"position":[[15,4]]},"4083":{"position":[[11,4]]},"4446":{"position":[[0,4]]},"4628":{"position":[[13,4]]},"4630":{"position":[[7,4]]}}}],["trie_branch_storag",{"_index":463,"t":{"4069":{"position":[[36,19]]}}}],["troubleshoot",{"_index":458,"t":{"4063":{"position":[[0,12]]},"4123":{"position":[[0,12]]},"4356":{"position":[[0,12]]}}}],["trust",{"_index":600,"t":{"4688":{"position":[[4,7]]}}}],["truststor",{"_index":113,"t":{"2771":{"position":[[20,10]]},"2773":{"position":[[20,10]]},"2775":{"position":[[20,10]]},"2943":{"position":[[9,10]]},"2945":{"position":[[9,10]]},"2947":{"position":[[9,10]]}}}],["tutori",{"_index":382,"t":{"3733":{"position":[[13,8]]}}}],["two",{"_index":156,"t":{"2888":{"position":[[0,3]]}}}],["tx",{"_index":243,"t":{"3177":{"position":[[10,3]]},"4624":{"position":[[6,3]]},"4814":{"position":[[4,2]]},"4842":{"position":[[7,2]]},"4850":{"position":[[0,2]]},"4852":{"position":[[0,2]]},"4854":{"position":[[0,2]]},"4856":{"position":[[0,2]]},"4858":{"position":[[0,2]]},"4860":{"position":[[0,2]]},"4862":{"position":[[0,2]]},"4864":{"position":[[0,2]]},"4866":{"position":[[0,2]]},"4868":{"position":[[0,2]]},"4870":{"position":[[0,2]]},"4872":{"position":[[0,2]]},"4874":{"position":[[0,2]]},"4876":{"position":[[0,2]]},"4878":{"position":[[0,2]]}}}],["txpool",{"_index":742,"t":{"5098":{"position":[[0,6]]}}}],["txpool_besupendingtransact",{"_index":743,"t":{"5100":{"position":[[0,30]]}}}],["txpool_besustatist",{"_index":744,"t":{"5102":{"position":[[0,21]]}}}],["txpool_besutransact",{"_index":745,"t":{"5104":{"position":[[0,23]]}}}],["type",{"_index":41,"t":{"2645":{"position":[[8,5]]},"2700":{"position":[[5,4]]},"2769":{"position":[[29,4]]},"2775":{"position":[[31,4]]},"2941":{"position":[[18,4]]},"2947":{"position":[[20,4]]},"3061":{"position":[[14,4]]},"3065":{"position":[[14,4]]},"3973":{"position":[[5,4]]},"4864":{"position":[[27,4]]}}}],["ubuntu",{"_index":452,"t":{"4040":{"position":[[16,6]]},"4045":{"position":[[15,6]]}}}],["unabl",{"_index":470,"t":{"4081":{"position":[[0,6]]}}}],["unavail",{"_index":469,"t":{"4079":{"position":[[21,11]]}}}],["unencod",{"_index":183,"t":{"3015":{"position":[[13,9]]}}}],["uninstal",{"_index":519,"t":{"4266":{"position":[[0,9]]}}}],["unix",{"_index":66,"t":{"2687":{"position":[[8,4]]},"3883":{"position":[[8,4]]}}}],["unsign",{"_index":182,"t":{"3015":{"position":[[0,8]]}}}],["unsubscrib",{"_index":538,"t":{"4382":{"position":[[0,11]]}}}],["up",{"_index":85,"t":{"2712":{"position":[[20,2]]},"2975":{"position":[[8,2]]},"3963":{"position":[[20,2]]},"4150":{"position":[[4,2]]}}}],["updat",{"_index":146,"t":{"2847":{"position":[[0,6]]},"3039":{"position":[[0,6]]},"3047":{"position":[[0,6]]},"3334":{"position":[[13,7]]},"3342":{"position":[[13,7]]},"3492":{"position":[[0,6]]},"3494":{"position":[[0,6]]},"3560":{"position":[[3,6]]},"3775":{"position":[[3,6]]},"3777":{"position":[[3,6]]},"3779":{"position":[[3,6]]},"4044":{"position":[[0,6]]},"4045":{"position":[[0,6]]},"4047":{"position":[[0,6]]},"4346":{"position":[[3,6]]}}}],["upgrad",{"_index":63,"t":{"2685":{"position":[[12,8]]},"3005":{"position":[[0,7]]},"3881":{"position":[[12,8]]}}}],["upnp",{"_index":475,"t":{"4099":{"position":[[0,4]]}}}],["url",{"_index":249,"t":{"3197":{"position":[[8,3]]},"3593":{"position":[[14,4]]},"3805":{"position":[[6,3]]},"4223":{"position":[[7,4]]},"4646":{"position":[[14,3]]}}}],["us",{"_index":33,"t":{"2633":{"position":[[0,3]]},"2685":{"position":[[21,5]]},"2843":{"position":[[27,5]]},"2863":{"position":[[26,5]]},"2865":{"position":[[26,5]]},"2987":{"position":[[0,3]]},"3079":{"position":[[0,3]]},"3082":{"position":[[0,3]]},"3088":{"position":[[0,3]]},"3090":{"position":[[0,3]]},"3241":{"position":[[0,3]]},"3243":{"position":[[0,3]]},"3249":{"position":[[0,3]]},"3251":{"position":[[0,3]]},"3253":{"position":[[0,3]]},"3737":{"position":[[0,3]]},"3755":{"position":[[21,5]]},"3881":{"position":[[21,5]]},"4130":{"position":[[0,3]]},"4206":{"position":[[0,3]]},"4270":{"position":[[9,5]]},"4300":{"position":[[0,3]]},"4339":{"position":[[15,5]]},"4364":{"position":[[0,3]]}}}],["usag",{"_index":392,"t":{"3757":{"position":[[24,5]]},"4170":{"position":[[4,5]]},"4444":{"position":[[8,5]]}}}],["usernam",{"_index":523,"t":{"4282":{"position":[[0,8]]}}}],["valid",{"_index":22,"t":{"2613":{"position":[[18,10]]},"2663":{"position":[[14,10]]},"2779":{"position":[[24,10]]},"2795":{"position":[[15,10]]},"2797":{"position":[[6,9]]},"2799":{"position":[[9,9]]},"2803":{"position":[[18,10]]},"2805":{"position":[[18,10]]},"2861":{"position":[[15,10]]},"2863":{"position":[[15,10]]},"2865":{"position":[[15,10]]},"2867":{"position":[[18,10]]},"2875":{"position":[[5,9]]},"2911":{"position":[[10,10]]},"2913":{"position":[[20,10]]},"2915":{"position":[[0,10]]},"3281":{"position":[[6,9]]},"3288":{"position":[[26,9]]},"3290":{"position":[[34,9]]},"3292":{"position":[[9,9]]},"3510":{"position":[[0,10]]},"3617":{"position":[[14,10]]},"3619":{"position":[[25,10],[43,9]]},"3859":{"position":[[12,9]]},"3895":{"position":[[12,9]]},"4075":{"position":[[0,5]]},"4448":{"position":[[0,8]]},"4501":{"position":[[5,8]]},"4564":{"position":[[12,9]]},"4572":{"position":[[16,9]]},"4584":{"position":[[12,9]]},"4592":{"position":[[16,9]]}}}],["valu",{"_index":275,"t":{"3334":{"position":[[21,5]]},"3342":{"position":[[21,5]]},"4467":{"position":[[0,5]]},"4491":{"position":[[4,5]]},"4686":{"position":[[4,5]]}}}],["variabl",{"_index":550,"t":{"4442":{"position":[[7,9]]}}}],["verifi",{"_index":267,"t":{"3290":{"position":[[3,6]]},"3334":{"position":[[3,6]]},"3342":{"position":[[3,6]]}}}],["version",{"_index":190,"t":{"3029":{"position":[[45,7]]},"3175":{"position":[[27,7]]},"3494":{"position":[[12,8]]},"3747":{"position":[[17,7]]},"4497":{"position":[[0,7]]},"4880":{"position":[[0,7]]},"4882":{"position":[[0,7]]}}}],["via",{"_index":367,"t":{"3623":{"position":[[47,3]]}}}],["view",{"_index":165,"t":{"2963":{"position":[[0,4]]},"3041":{"position":[[0,4]]},"3049":{"position":[[0,4]]},"3834":{"position":[[0,4]]},"4154":{"position":[[0,4]]},"4156":{"position":[[0,4]]}}}],["virtual",{"_index":73,"t":{"2696":{"position":[[5,7]]},"3969":{"position":[[5,7]]}}}],["vm",{"_index":76,"t":{"2698":{"position":[[0,2]]},"3209":{"position":[[11,2]]}}}],["vmtrace",{"_index":575,"t":{"4552":{"position":[[0,7]]}}}],["volum",{"_index":337,"t":{"3492":{"position":[[20,6]]}}}],["vs",{"_index":372,"t":{"3706":{"position":[[16,3]]},"4204":{"position":[[9,2]]}}}],["wait",{"_index":415,"t":{"3865":{"position":[[3,4]]},"3901":{"position":[[3,4]]},"4574":{"position":[[3,4]]},"4594":{"position":[[3,4]]}}}],["wallet",{"_index":343,"t":{"3516":{"position":[[0,6]]},"4130":{"position":[[10,6]]},"4206":{"position":[[4,7]]}}}],["web3",{"_index":746,"t":{"5106":{"position":[[0,4]]}}}],["web3_clientvers",{"_index":747,"t":{"5108":{"position":[[0,18]]}}}],["web3_sha3",{"_index":748,"t":{"5110":{"position":[[0,9]]}}}],["web3j",{"_index":224,"t":{"3120":{"position":[[4,6]]},"3122":{"position":[[15,6]]},"3126":{"position":[[0,6]]},"3253":{"position":[[54,6]]}}}],["websocket",{"_index":529,"t":{"4314":{"position":[[9,9]]},"4317":{"position":[[0,9]]}}}],["what'",{"_index":510,"t":{"4229":{"position":[[0,7]]},"4231":{"position":[[0,7]]}}}],["window",{"_index":584,"t":{"4630":{"position":[[25,6]]}}}],["without",{"_index":393,"t":{"3765":{"position":[[37,7]]}}}],["work",{"_index":261,"t":{"3231":{"position":[[34,7]]},"3271":{"position":[[34,7]]},"3318":{"position":[[35,7]]},"3597":{"position":[[36,7]]},"3673":{"position":[[35,7]]},"4067":{"position":[[15,7]]}}}],["world",{"_index":493,"t":{"4172":{"position":[[21,5]]},"4174":{"position":[[3,5]]}}}],["world_stat",{"_index":467,"t":{"4077":{"position":[[36,11]]}}}],["worst",{"_index":205,"t":{"3086":{"position":[[9,5]]}}}],["write",{"_index":274,"t":{"3332":{"position":[[13,5]]},"3340":{"position":[[13,5]]}}}],["ws",{"_index":628,"t":{"4816":{"position":[[4,2]]},"4818":{"position":[[4,2]]},"4820":{"position":[[4,2]]},"4822":{"position":[[4,2]]},"4824":{"position":[[4,2]]},"4826":{"position":[[4,2]]},"4828":{"position":[[4,2]]},"4830":{"position":[[4,2]]},"4832":{"position":[[4,2]]},"4834":{"position":[[4,2]]},"4836":{"position":[[4,2]]}}}],["xhelp",{"_index":643,"t":{"4884":{"position":[[0,5]]}}}],["xp2p",{"_index":163,"t":{"2933":{"position":[[0,4]]},"2935":{"position":[[0,4]]},"2937":{"position":[[0,4]]},"2939":{"position":[[0,4]]},"2941":{"position":[[0,4]]},"2943":{"position":[[0,4]]},"2945":{"position":[[0,4]]},"2947":{"position":[[0,4]]}}}],["xpki",{"_index":106,"t":{"2759":{"position":[[0,4]]},"2761":{"position":[[0,4]]},"2763":{"position":[[0,4]]},"2765":{"position":[[0,4]]},"2767":{"position":[[0,4]]},"2769":{"position":[[0,4]]},"2771":{"position":[[0,4]]},"2773":{"position":[[0,4]]},"2775":{"position":[[0,4]]}}}],["zero",{"_index":138,"t":{"2841":{"position":[[42,4]]},"2843":{"position":[[10,4]]},"3820":{"position":[[17,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2558,"t":"View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages.","s":"postman","u":"/global/postman","p":2558},{"i":2560,"t":"The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code.","s":"test_accounts","u":"/global/test_accounts","p":2560},{"i":2562,"t":"Private networks overview","s":"Besu for private networks","u":"/private-networks","p":2562},{"i":2566,"t":"Besu permissioning feature","s":"Permissioning","u":"/private-networks/concepts/permissioning","p":2566},{"i":2578,"t":"private networks concepts overview","s":"Concepts","u":"/private-networks/concepts","p":2578},{"i":2580,"t":"Chatbot","s":"Chatbot","u":"/private-networks/chatbot","p":2580},{"i":2581,"t":"Onchain permissioning","s":"Onchain permissioning","u":"/private-networks/concepts/permissioning/onchain","p":2581},{"i":2589,"t":"Plugins overview","s":"Plugins","u":"/private-networks/concepts/plugins","p":2589},{"i":2593,"t":"Plugin based permissioning","s":"Permissioning plugin","u":"/private-networks/concepts/permissioning/plugin","p":2593},{"i":2601,"t":"Public key infrastructure","s":"Public key infrastructure","u":"/private-networks/concepts/pki","p":2601},{"i":2607,"t":"Besu proof of authority consensus protocols comparison","s":"Proof of authority consensus","u":"/private-networks/concepts/poa","p":2607},{"i":2619,"t":"Multi-tenancy","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/multi-tenancy","p":2619},{"i":2621,"t":"Flexible privacy groups","s":"Flexible privacy groups","u":"/private-networks/concepts/privacy/flexible-privacy","p":2621},{"i":2629,"t":"Privacy plugin","s":"Privacy plugin","u":"/private-networks/concepts/privacy/plugin","p":2629},{"i":2643,"t":"Privacy groups","s":"Privacy groups","u":"/private-networks/concepts/privacy/privacy-groups","p":2643},{"i":2655,"t":"Private transaction overview","s":"Private transactions","u":"/private-networks/concepts/privacy/private-transactions","p":2655},{"i":2667,"t":"Privacy","s":"Privacy","u":"/private-networks/concepts/privacy","p":2667},{"i":2675,"t":"Private transaction processing","s":"Private transaction processing","u":"/private-networks/concepts/privacy/private-transactions/processing","p":2675},{"i":2677,"t":"Options for getting started with Besu","s":"Installation options","u":"/private-networks/get-started/install","p":2677},{"i":2681,"t":"Install or upgrade Besu from binary distribution","s":"Install binary distribution","u":"/private-networks/get-started/install/binary-distribution","p":2681},{"i":2692,"t":"Ensure you meet the system requirements to sync and run Besu.","s":"System requirements","u":"/private-networks/get-started/system-requirements","p":2692},{"i":2702,"t":"Run Besu using the official docker image","s":"Run Besu from a Docker image","u":"/private-networks/get-started/install/run-docker-image","p":2702},{"i":2714,"t":"Private networks how to overview","s":"How to","u":"/private-networks/how-to","p":2714},{"i":2716,"t":"Start Besu on a private Ethereum network.","s":"Start Besu","u":"/private-networks/get-started/start-node","p":2716},{"i":2730,"t":"Backing up and restoring Besu","s":"Backup and restore Besu","u":"/private-networks/how-to/backup","p":2730},{"i":2744,"t":"Configuring bootnodes","s":"Configure bootnodes","u":"/private-networks/how-to/configure/bootnodes","p":2744},{"i":2752,"t":"Besu consensus protocols","s":"Consensus protocols","u":"/private-networks/how-to/configure/consensus","p":2752},{"i":2754,"t":"Block proposal permissioning","s":"Block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","p":2754},{"i":2777,"t":"How to add or remove validators without voting","s":"Add and remove validators without voting","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","p":2777},{"i":2781,"t":"Pre-deploying contracts in the genesis file","s":"Pre-deploy contracts in the genesis file","u":"/private-networks/how-to/configure/contracts","p":2781},{"i":2783,"t":"Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation","s":"Configure IBFT 2.0 consensus","u":"/private-networks/how-to/configure/consensus/ibft","p":2783},{"i":2815,"t":"Using alternative elliptic curves in Besu","s":"Configure alternative elliptic curves","u":"/private-networks/how-to/configure/curves","p":2815},{"i":2817,"t":"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.","s":"Configure client and server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","p":2817},{"i":2833,"t":"Configuring free gas networks","s":"Configure free gas networks","u":"/private-networks/how-to/configure/free-gas","p":2833},{"i":2849,"t":"Besu QBFT proof of authority (PoA) consensus protocol implementation","s":"Configure QBFT consensus","u":"/private-networks/how-to/configure/consensus/qbft","p":2849},{"i":2879,"t":"Besu Clique Proof-of-Authority (PoA) consensus protocol implementation","s":"Configure Clique consensus","u":"/private-networks/how-to/configure/consensus/clique","p":2879},{"i":2909,"t":"Configuring validators in production networks","s":"Configure validators in a production network","u":"/private-networks/how-to/configure/validators","p":2909},{"i":2917,"t":"Deploying Besu with Ansible role on Galaxy","s":"Deploy Besu with Ansible","u":"/private-networks/how-to/deploy/ansible","p":2917},{"i":2919,"t":"Ethstats network monitor","s":"Connect to Ethstats network monitor","u":"/private-networks/how-to/deploy/ethstats","p":2919},{"i":2929,"t":"Configure P2P TLS communication","s":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","p":2929},{"i":2949,"t":"Deploying Besu with Kubernetes","s":"Deploy Besu with Kubernetes","u":"/private-networks/how-to/deploy/kubernetes","p":2949},{"i":2951,"t":"Deploying Besu to the cloud","s":"Deploy Besu to the cloud","u":"/private-networks/how-to/deploy/cloud","p":2951},{"i":2953,"t":"Monitoring using metrics and logging","s":"Monitoring","u":"/private-networks/how-to/monitor","p":2953},{"i":2955,"t":"Using Elastic Stack (ELK) with Besu","s":"Use Elastic Stack","u":"/private-networks/how-to/monitor/elastic-stack","p":2955},{"i":2957,"t":"Use Chainlens Explorer on a privacy-enabled Besu network","s":"Use Chainlens Blockchain Explorer","u":"/private-networks/how-to/monitor/chainlens","p":2957},{"i":2967,"t":"Use Quorum Hibernate with Besu","s":"Use Quorum Hibernate","u":"/private-networks/how-to/monitor/quorum-hibernate","p":2967},{"i":2969,"t":"private networks send transactions overview","s":"Create and send transactions","u":"/private-networks/how-to/send-transactions","p":2969},{"i":2971,"t":"Collect Besu information with the OpenTelemetry Collector","s":"Use OpenTelemetry","u":"/private-networks/how-to/monitor/opentelemetry","p":2971},{"i":2977,"t":"Send Besu logs to Splunk","s":"Use Splunk","u":"/private-networks/how-to/monitor/splunk","p":2977},{"i":2999,"t":"Creating and sending concurrent private transactions with Besu","s":"Send concurrent private transactions","u":"/private-networks/how-to/send-transactions/concurrent-private-transactions","p":2999},{"i":3001,"t":"Using Grafana Loki log management platform with Besu","s":"Grafana Loki","u":"/private-networks/how-to/monitor/loki","p":3001},{"i":3003,"t":"Upgrading protocol versions","s":"Network and protocol upgrades","u":"/private-networks/how-to/upgrade","p":3003},{"i":3007,"t":"Creating and sending private transactions with Besu","s":"Create and send private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","p":3007},{"i":3017,"t":"Including revert reason in transactions with Besu","s":"Revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","p":3017},{"i":3027,"t":"Use onchain permissioning allowlists","s":"Use onchain permissioning","u":"/private-networks/how-to/use-permissioning/onchain","p":3027},{"i":3031,"t":"Besu local permissioning","s":"Use local permissioning","u":"/private-networks/how-to/use-permissioning/local","p":3031},{"i":3053,"t":"Methods for accessing and managing private transactions and privacy groups in Besu","s":"Access private and privacy marker transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","p":3053},{"i":3059,"t":"Besu JSON-RPC methods to use for EEA-compliant privacy","s":"Use EEA-compliant privacy","u":"/private-networks/how-to/use-privacy/eea-compliant","p":3059},{"i":3063,"t":"Besu-extended privacy","s":"Use Besu-extended privacy","u":"/private-networks/how-to/use-privacy/besu-extended","p":3063},{"i":3067,"t":"Use flexible privacy groups","s":"Use flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","p":3067},{"i":3075,"t":"Performance best practices","s":"Performance best practices","u":"/private-networks/how-to/use-privacy/performance-best-practices","p":3075},{"i":3098,"t":"Create and manage privacy groups with Besu","s":"Create and manage privacy groups","u":"/private-networks/how-to/use-privacy/privacy-groups","p":3098},{"i":3100,"t":"Running ConsenSys Quorum Tessera with Besu","s":"Run Tessera with Besu","u":"/private-networks/how-to/use-privacy/tessera","p":3100},{"i":3106,"t":"How to sign a privacy marker transaction with Besu","s":"Sign privacy marker transactions","u":"/private-networks/how-to/use-privacy/sign-pmts","p":3106},{"i":3108,"t":"private networks reference overview","s":"Reference","u":"/private-networks/reference","p":3108},{"i":3110,"t":"Ethereum accounts used for Besu testing only on private networks","s":"Accounts for testing","u":"/private-networks/reference/accounts-for-testing","p":3110},{"i":3116,"t":"web3js-quorum client library","s":"Use the web3js-quorum client library","u":"/private-networks/how-to/use-privacy/web3js-quorum","p":3116},{"i":3128,"t":"Besu private network API objects reference","s":"Private network API objects","u":"/private-networks/reference/api/objects","p":3128},{"i":3134,"t":"Plugin interfaces","s":"Plugin API interfaces","u":"/private-networks/reference/plugin-api-interfaces","p":3134},{"i":3140,"t":"Besu command line interface subcommands","s":"Private network subcommands","u":"/private-networks/reference/cli/subcommands","p":3140},{"i":3154,"t":"Besu private networks CLI reference","s":"Private network command line options","u":"/private-networks/reference/cli/options","p":3154},{"i":3199,"t":"Deploy a private IBFT 2.0 network using Microsoft Azure.","s":"Deploy private network example on Azure","u":"/private-networks/tutorials/azure","p":3199},{"i":3213,"t":"Create a private network using the Clique consensus protocol.","s":"Create a private network using Clique","u":"/private-networks/tutorials/clique","p":3213},{"i":3237,"t":"funds transfer transactions","s":"Transfer funds between accounts in a transaction","u":"/private-networks/tutorials/contracts/transfer-funds","p":3237},{"i":3245,"t":"deploying smart contracts","s":"Deploy smart contracts to an Ethereum chain","u":"/private-networks/tutorials/contracts","p":3245},{"i":3255,"t":"Create a private network using the Ethash consensus protocol.","s":"Create a private network using Ethash","u":"/private-networks/tutorials/ethash","p":3255},{"i":3277,"t":"Adding and removing IBFT 2.0 validators","s":"Add and remove IBFT 2.0 validators","u":"/private-networks/tutorials/ibft/validators","p":3277},{"i":3294,"t":"Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol","s":"Create a private network using IBFT 2.0","u":"/private-networks/tutorials/ibft","p":3294},{"i":3324,"t":"calling smart contracts functions","s":"Interact with deployed smart contracts","u":"/private-networks/tutorials/contracts/interact","p":3324},{"i":3344,"t":"Deploying Besu with Kubernetes","s":"Deploy Besu using Kubernetes","u":"/private-networks/tutorials/kubernetes","p":3344},{"i":3369,"t":"Create a cluster for deployment","s":"Create a cluster","u":"/private-networks/tutorials/kubernetes/cluster","p":3369},{"i":3386,"t":"Besu private network JSON-RPC API methods reference","s":"Private network API methods","u":"/private-networks/reference/api","p":3386},{"i":3488,"t":"Maintenance for Besu on a Kubernetes cluster","s":"Maintenance","u":"/private-networks/tutorials/kubernetes/maintenance","p":3488},{"i":3496,"t":"Deploying a Besu private network locally with Kubernetes","s":"Deploy in a local environment","u":"/private-networks/tutorials/kubernetes/playground","p":3496},{"i":3502,"t":"Using the Quorum Explorer on a Kubernetes cluster","s":"Use the Quorum Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","p":3502},{"i":3518,"t":"Deploying Besu Helm Charts for production on a Kubernetes cluster","s":"Deploy for production","u":"/private-networks/tutorials/kubernetes/production","p":3518},{"i":3533,"t":"Tutorial to configure Kubernetes mode for Besu Nat Manager","s":"Configure Kubernetes mode in NAT Manager","u":"/private-networks/tutorials/kubernetes/nat-manager","p":3533},{"i":3551,"t":"Configure multi-tenancy","s":"Configure a multi-tenant node","u":"/private-networks/tutorials/privacy/multi-tenancy","p":3551},{"i":3568,"t":"Besu create a permissioned network","s":"Create a permissioned network","u":"/private-networks/tutorials/permissioning","p":3568},{"i":3601,"t":"Deploying Besu Helm Charts for a Kubernetes cluster","s":"Deploy charts","u":"/private-networks/tutorials/kubernetes/charts","p":3601},{"i":3627,"t":"web3js-quorum client library multi-node example","s":"Use the multi-node example in the web3js-quorum client library","u":"/private-networks/tutorials/privacy/web3js-quorum","p":3627},{"i":3629,"t":"Besu privacy-enabled private network tutorial","s":"Create a privacy-enabled network using the Quorum Developer Quickstart","u":"/private-networks/tutorials/privacy/quickstart","p":3629},{"i":3644,"t":"Public networks overview","s":"Besu for public networks","u":"/public-networks","p":3644},{"i":3648,"t":"Chatbot","s":"Chatbot","u":"/public-networks/chatbot","p":3648},{"i":3649,"t":"Create a private network using the QBFT consensus protocol.","s":"Create a private network using QBFT","u":"/private-networks/tutorials/qbft","p":3649},{"i":3679,"t":"Configure Besu privacy","s":"Create a privacy-enabled network","u":"/private-networks/tutorials/privacy","p":3679},{"i":3700,"t":"Learn about storing data using Forest of Tries and Bonsai Tries.","s":"Data storage formats","u":"/public-networks/concepts/data-storage-formats","p":3700},{"i":3713,"t":"Learn about network ID and chain ID in Besu.","s":"Network ID and chain ID","u":"/public-networks/concepts/network-and-chain-id","p":3713},{"i":3719,"t":"Learn about events and logs in Besu.","s":"Events and logs","u":"/public-networks/concepts/events-and-logs","p":3719},{"i":3729,"t":"Rapidly generate a local blockchain network using the Quickstart.","s":"Developer Quickstart","u":"/private-networks/tutorials/quickstart","p":3729},{"i":3783,"t":"Learn about configuring a network using the genesis file.","s":"Genesis file","u":"/public-networks/concepts/genesis-file","p":3783},{"i":3785,"t":"Ethereum proof of stake consensus","s":"Proof of stake consensus","u":"/public-networks/concepts/proof-of-stake","p":3785},{"i":3787,"t":"Learn about execution and consensus clients.","s":"Node clients","u":"/public-networks/concepts/node-clients","p":3787},{"i":3795,"t":"Learn about node public and private keys, and the node address.","s":"Node keys and node address","u":"/public-networks/concepts/node-keys","p":3795},{"i":3809,"t":"Transaction pool overview","s":"Transaction pool","u":"/public-networks/concepts/transactions/pool","p":3809},{"i":3824,"t":"Description of the different transaction types","s":"Transaction types","u":"/public-networks/concepts/transactions/types","p":3824},{"i":3836,"t":"Proof of stake attestations","s":"Attestations","u":"/public-networks/concepts/proof-of-stake/attestations","p":3836},{"i":3848,"t":"What transaction validation and when","s":"Transaction validation","u":"/public-networks/concepts/transactions/validation","p":3848},{"i":3850,"t":"This section provides information on connecting Besu to a public Ethereum network.","s":"Connect to a network","u":"/public-networks/get-started/connect","p":3850},{"i":3852,"t":"How to connect to Mainnet","s":"Connect to Mainnet","u":"/public-networks/get-started/connect/mainnet","p":3852},{"i":3869,"t":"Learn about parallel transaction execution.","s":"Parallel transaction execution","u":"/public-networks/concepts/parallel-transaction-execution","p":3869},{"i":3877,"t":"Install or upgrade Besu from binary distribution","s":"Install binary distribution","u":"/public-networks/get-started/install/binary-distribution","p":3877},{"i":3888,"t":"Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.","s":"Connect to a testnet","u":"/public-networks/get-started/connect/testnet","p":3888},{"i":3905,"t":"Full and archive node types","s":"Sync Besu","u":"/public-networks/get-started/connect/sync-node","p":3905},{"i":3921,"t":"Migrate to Besu from a different Ethereum execution client.","s":"Migrate to Besu","u":"/public-networks/get-started/migrate-to-besu","p":3921},{"i":3923,"t":"Options for getting started with Besu","s":"Installation options","u":"/public-networks/get-started/install","p":3923},{"i":3927,"t":"Start Besu on a public Ethereum network.","s":"Start Besu","u":"/public-networks/get-started/start-node","p":3927},{"i":3947,"t":"Run Besu using the official docker image","s":"Run Besu from a Docker image","u":"/public-networks/get-started/install/run-docker-image","p":3947},{"i":3965,"t":"Ensure you meet the system requirements to sync and run Besu.","s":"System requirements","u":"/public-networks/get-started/system-requirements","p":3965},{"i":3977,"t":"Specify options in the Besu configuration file.","s":"Configure Besu","u":"/public-networks/how-to/configure-besu","p":3977},{"i":3991,"t":"You can load a profile to extend Besu's default configuration, using the --profile option.","s":"Use a profile","u":"/public-networks/how-to/configure-besu/profile","p":3991},{"i":4001,"t":"Besu high availability","s":"High availability of JSON-RPC and RPC Pub/Sub APIs","u":"/public-networks/how-to/configure-ha","p":4001},{"i":4021,"t":"Sample load balancers","s":"Sample load balancer configurations","u":"/public-networks/how-to/configure-ha/sample-configuration","p":4021},{"i":4032,"t":"Using Java Flight Recorder with Besu","s":"Use Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","p":4032},{"i":4036,"t":"Install or update Java for use with Besu","s":"Install and update Java","u":"/public-networks/how-to/configure-java/install-update-java","p":4036},{"i":4049,"t":"Besu memory management","s":"Manage JVM memory","u":"/public-networks/how-to/configure-java/manage-memory","p":4049},{"i":4055,"t":"Passing Java virtual machine JVM options to Besu at runtime","s":"Pass JVM options","u":"/public-networks/how-to/configure-java/pass-jvm-options","p":4055},{"i":4057,"t":"Reduce the size of your database when using Bonsai Tries","s":"Reduce storage for Bonsai Tries","u":"/public-networks/how-to/bonsai-limit-trie-logs","p":4057},{"i":4087,"t":"To enable communication you must expose Besu ports appropriately","s":"Configure ports","u":"/public-networks/how-to/connect/configure-ports","p":4087},{"i":4095,"t":"Configuring NAT with Besu","s":"Specify the NAT method","u":"/public-networks/how-to/connect/specify-nat","p":4095},{"i":4107,"t":"Managing Besu peers","s":"Manage peers","u":"/public-networks/how-to/connect/manage-peers","p":4107},{"i":4125,"t":"Besu client libraries","s":"Use client libraries","u":"/public-networks/how-to/develop/client-libraries","p":4125},{"i":4127,"t":"Using Besu with Hardhat","s":"Use Hardhat","u":"/public-networks/how-to/develop/hardhat","p":4127},{"i":4138,"t":"Monitoring using metrics and logging","s":"Monitor Besu","u":"/public-networks/how-to/monitor","p":4138},{"i":4140,"t":"Configuring static nodes","s":"Static nodes","u":"/public-networks/how-to/connect/static-nodes","p":4140},{"i":4146,"t":"Monitoring and metrics","s":"Use metrics to monitor node performance","u":"/public-networks/how-to/monitor/metrics","p":4146},{"i":4158,"t":"Besu log level setting and log formatting","s":"Use logging","u":"/public-networks/how-to/monitor/logging","p":4158},{"i":4168,"t":"Understand Besu performance metrics","s":"Understand metrics","u":"/public-networks/how-to/monitor/understand-metrics","p":4168},{"i":4192,"t":"Besu EVM tool","s":"Use the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","p":4192},{"i":4202,"t":"Send transactions using eth_call or eth_sendRawTransaction.","s":"Create and send transactions","u":"/public-networks/how-to/send-transactions","p":4202},{"i":4208,"t":"Troubleshoot poor performance and resource constraints.","s":"Troubleshoot poor performance and resource constraints","u":"/public-networks/how-to/troubleshoot/performance","p":4208},{"i":4210,"t":"How to trace transactions","s":"Trace transactions","u":"/public-networks/how-to/troubleshoot/trace-transactions","p":4210},{"i":4216,"t":"How to troubleshoot peering","s":"Troubleshoot peering","u":"/public-networks/how-to/troubleshoot/peering","p":4216},{"i":4235,"t":"Upgrade your Besu node to a new version.","s":"Upgrade your Besu node","u":"/public-networks/how-to/upgrade-node","p":4235},{"i":4241,"t":"Besu API","s":"Access the Besu API","u":"/public-networks/how-to/use-besu-api","p":4241},{"i":4258,"t":"Accessing logs using the Besu API","s":"Access logs using the Besu API","u":"/public-networks/how-to/use-besu-api/access-logs","p":4258},{"i":4272,"t":"How to access the Besu API using GraphQL","s":"Use GraphQL over HTTP","u":"/public-networks/how-to/use-besu-api/graphql","p":4272},{"i":4280,"t":"Besu authentication and authorization for JSON-RPC","s":"Authenticate and authorize JSON-RPC","u":"/public-networks/how-to/use-besu-api/authenticate","p":4280},{"i":4308,"t":"How to access the Besu API using JSON-RPC","s":"Use JSON-RPC over HTTP, WebSocket, and IPC","u":"/public-networks/how-to/use-besu-api/json-rpc","p":4308},{"i":4329,"t":"Use the Engine API to communicate with a consensus client.","s":"Use the Engine API","u":"/public-networks/how-to/use-engine-api","p":4329},{"i":4348,"t":"Using Besu for PoW CPU mining","s":"Configure mining","u":"/public-networks/how-to/use-pow/mining","p":4348},{"i":4361,"t":"Using RPC Pub/Sub with Besu WebSockets","s":"Use RPC Pub/Sub over WebSockets","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","p":4361},{"i":4384,"t":"Besu API objects reference","s":"Besu API objects","u":"/public-networks/reference/api/objects","p":4384},{"i":4414,"t":"Besu command line interface subcommands","s":"Subcommands","u":"/public-networks/reference/cli/subcommands","p":4414},{"i":4450,"t":"Besu responsible disclosure statement","s":"Security disclosure policy","u":"/public-networks/reference/disclosure","p":4450},{"i":4452,"t":"Besu EVM tool options reference","s":"EVM tool reference","u":"/public-networks/reference/evm-tool","p":4452},{"i":4507,"t":"Engine API objects reference","s":"Engine API objects","u":"/public-networks/reference/engine-api/objects","p":4507},{"i":4519,"t":"Engine API methods reference","s":"Engine API methods","u":"/public-networks/reference/engine-api","p":4519},{"i":4536,"t":"Genesis file configuration items reference","s":"Genesis file items","u":"/public-networks/reference/genesis-items","p":4536},{"i":4548,"t":"Transaction trace types reference","s":"Transaction trace types","u":"/public-networks/reference/trace-types","p":4548},{"i":4558,"t":"Run Besu and Teku on Ethereum Mainnet.","s":"Run Besu and Teku on Mainnet","u":"/public-networks/tutorials/besu-teku-mainnet","p":4558},{"i":4578,"t":"Run Besu and Teku on Holesky or Sepolia testnet.","s":"Run Besu and Teku on a testnet","u":"/public-networks/tutorials/besu-teku-testnet","p":4578},{"i":4598,"t":"List of projects using Besu","s":"Projects using Besu","u":"/public-networks/reference/projects-using-besu","p":4598},{"i":4601,"t":"Deploy a Besu node using Kubernetes.","s":"Deploy a Besu public node using Kubernetes","u":"/public-networks/tutorials/kubernetes","p":4601},{"i":4610,"t":"Besu command line interface reference","s":"Options","u":"/public-networks/reference/cli/options","p":4610},{"i":4886,"t":"Besu JSON-RPC API methods reference","s":"Besu API methods","u":"/public-networks/reference/api","p":4886}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2558",[0,2.633,1,0.336,2,1.814,3,1.734,4,1.448,5,2.348,6,2.633,7,2.348,8,2.633,9,2.16,10,2.633,11,2.633,12,2.348,13,2.633]],["t/2560",[5,2.466,12,2.466,14,2.765,15,3.893,16,2.466,17,1.126,18,2.268,19,4.366,20,2.765,21,2.466,22,2.765]],["t/2562",[17,2.264,23,2.085,24,3.381]],["t/2566",[1,0.71,25,3.66,26,5.558]],["t/2578",[17,2.056,23,1.894,24,3.071,27,5.048]],["t/2580",[28,6.211]],["t/2581",[25,4.071,29,5.513]],["t/2589",[24,3.761,30,4.742]],["t/2593",[25,3.66,30,4.263,31,5.558]],["t/2601",[18,4.559,32,4.026,33,5.558]],["t/2607",[1,0.545,34,2.809,35,2.938,36,2.277,37,2.504,38,4.266]],["t/2619",[39,5.071,40,5.513]],["t/2621",[41,4.956,42,2.967,43,4.026]],["t/2629",[30,4.742,42,3.3]],["t/2643",[42,3.3,43,4.478]],["t/2655",[17,2.264,24,3.381,44,2.73]],["t/2667",[42,3.718]],["t/2675",[17,2.264,44,2.73,45,5.558]],["t/2677",[1,0.645,46,3.478,47,4.501,48,3.872]],["t/2681",[1,0.59,49,3.793,50,3.546,51,4.123,52,4.123]],["t/2692",[1,0.505,53,3.53,54,3.53,55,3.53,56,3.53,57,3.53,58,2.502]],["t/2702",[1,0.545,58,2.696,59,1.377,60,3.803,61,3.803,62,3.803]],["t/2714",[17,2.264,23,2.085,24,3.381]],["t/2716",[1,0.59,17,1.883,23,1.735,48,3.546,63,3.045]],["t/2730",[1,0.645,64,5.048,65,5.048,66,5.048]],["t/2744",[67,3.206,68,6.183]],["t/2752",[1,0.71,36,2.967,37,3.263]],["t/2754",[25,3.66,69,5.558,70,5.558]],["t/2777",[71,4.624,72,4.123,73,3.546,74,4.624,75,4.624]],["t/2781",[76,4.624,77,2.544,78,3.793,79,3.793,80,3.546]],["t/2783",[1,0.442,34,2.279,35,2.384,36,1.847,37,2.032,81,2.654,82,2.654,83,2.839,84,2.839]],["t/2815",[1,0.59,59,1.492,85,4.624,86,4.624,87,4.624]],["t/2817",[1,0.648,9,2.061,67,1.303,88,2.513,89,3.607,90,1.588,91,2.513,92,3.102,93,2.513,94,2.513,95,2.24]],["t/2833",[23,1.894,67,2.618,96,5.048,97,5.048]],["t/2849",[1,0.472,34,2.432,35,2.544,36,1.971,37,2.168,83,3.029,84,3.029,98,3.293]],["t/2879",[1,0.472,34,2.432,35,2.544,36,1.971,37,2.168,83,3.029,84,3.029,99,3.293]],["t/2909",[23,1.894,67,2.618,73,3.872,100,4.501]],["t/2917",[1,0.59,77,2.544,101,4.624,102,4.624,103,4.624]],["t/2919",[23,2.085,104,5.558,105,4.263]],["t/2929",[67,2.618,89,4.501,92,3.872,106,5.048]],["t/2949",[1,0.71,77,3.058,107,3.381]],["t/2951",[1,0.71,77,3.058,108,5.558]],["t/2953",[59,1.629,105,3.872,109,3.872,110,3.324]],["t/2955",[1,0.59,59,1.492,111,4.624,112,4.624,113,4.624]],["t/2957",[1,0.505,23,1.485,42,2.113,59,1.277,114,3.959,115,3.53,116,3.247]],["t/2967",[1,0.645,59,1.629,117,3.657,118,5.048]],["t/2969",[17,1.883,23,1.735,24,2.813,44,2.271,119,3.349]],["t/2971",[1,0.59,120,4.624,121,4.123,122,4.624,123,4.624]],["t/2977",[1,0.645,110,3.324,119,3.657,124,5.048]],["t/2999",[1,0.545,17,1.737,44,2.095,119,3.09,125,2.696,126,4.266]],["t/3001",[1,0.505,59,1.277,110,2.607,127,3.959,128,3.959,129,2.727,130,3.959]],["t/3003",[37,3.263,50,4.263,131,4.956]],["t/3007",[1,0.59,17,1.883,44,2.271,119,3.349,125,2.922]],["t/3017",[1,0.59,44,2.271,132,4.624,133,4.624,134,4.624]],["t/3027",[25,3.324,29,4.501,59,1.629,135,5.048]],["t/3031",[1,0.71,25,3.66,136,4.559]],["t/3053",[1,0.472,17,1.504,42,1.971,43,2.675,44,1.814,129,2.544,137,2.675,138,2.832]],["t/3059",[1,0.472,2,2.544,3,2.432,42,1.971,59,1.192,137,2.675,139,3.693,140,3.693]],["t/3063",[1,0.71,42,2.967,141,4.956]],["t/3067",[41,4.501,42,2.695,43,3.657,59,1.629]],["t/3075",[142,4.559,143,5.558,144,5.558]],["t/3098",[1,0.59,42,2.468,43,3.349,125,2.922,129,3.185]],["t/3100",[1,0.59,58,2.922,95,4.123,117,3.349,145,4.624]],["t/3106",[1,0.59,42,2.468,44,2.271,146,4.624,147,4.624]],["t/3108",[17,2.056,23,1.894,24,3.071,148,2.777]],["t/3110",[1,0.505,15,3.53,16,3.53,17,1.612,23,1.485,59,1.277,63,2.607]],["t/3116",[90,3.19,117,3.657,149,4.501,150,4.141]],["t/3128",[1,0.545,4,2.347,17,1.737,23,1.6,148,2.347,151,3.499]],["t/3134",[30,4.742,152,4.742]],["t/3140",[1,0.59,152,3.546,153,3.793,154,3.793,155,4.123]],["t/3154",[1,0.59,17,1.883,23,1.735,148,2.544,156,4.624]],["t/3199",[17,1.504,23,1.386,59,1.192,77,2.032,81,2.832,82,2.832,157,3.693,158,3.693]],["t/3213",[17,1.612,23,1.485,36,2.113,37,2.324,59,1.277,99,3.53,125,2.502]],["t/3237",[44,2.73,159,5.558,160,5.558]],["t/3245",[77,3.058,78,4.559,161,4.956]],["t/3255",[17,1.612,23,1.485,36,2.113,37,2.324,59,1.277,125,2.502,162,3.959]],["t/3277",[72,4.123,73,3.546,81,3.546,82,3.546,163,4.624]],["t/3294",[1,0.416,17,1.326,23,1.222,34,2.144,35,2.243,36,1.738,37,1.912,59,1.051,81,2.497,82,2.497]],["t/3324",[78,4.141,161,4.501,164,5.048,165,5.048]],["t/3344",[1,0.71,77,3.058,107,3.381]],["t/3369",[77,3.058,125,3.512,166,4.026]],["t/3386",[1,0.472,2,2.544,3,2.432,4,2.032,17,1.504,23,1.386,137,2.675,148,2.032]],["t/3488",[1,0.645,107,3.071,166,3.657,167,5.048]],["t/3496",[1,0.545,17,1.737,23,1.6,77,2.347,107,2.595,136,3.499]],["t/3502",[59,1.492,107,2.813,115,4.123,117,3.349,166,3.349]],["t/3518",[1,0.505,77,2.178,100,3.53,107,2.408,166,2.867,168,3.53,169,3.53]],["t/3533",[1,0.505,67,2.053,107,2.408,129,2.727,170,3.53,171,3.959,172,3.53]],["t/3551",[39,4.559,40,4.956,67,2.883]],["t/3568",[1,0.645,23,1.894,25,3.324,125,3.19]],["t/3601",[1,0.545,77,2.347,107,2.595,166,3.09,168,3.803,169,3.803]],["t/3627",[9,3.247,39,3.247,90,2.502,117,2.867,149,3.53,150,3.247,173,2.727]],["t/3629",[1,0.545,17,1.737,23,1.6,42,2.277,116,3.499,170,3.803]],["t/3644",[23,2.085,24,3.381,32,4.026]],["t/3648",[28,6.211]],["t/3649",[17,1.612,23,1.485,36,2.113,37,2.324,59,1.277,98,3.53,125,2.502]],["t/3679",[1,0.71,42,2.967,67,2.883]],["t/3700",[59,1.192,174,2.432,175,3.693,176,3.693,177,3.693,178,4.856,179,3.293]],["t/3713",[1,0.545,23,1.6,174,2.809,180,6.045,181,4.266]],["t/3719",[1,0.645,110,3.324,174,3.324,182,5.048]],["t/3729",[23,1.485,59,1.277,136,3.247,183,3.959,184,3.959,185,3.959,186,3.959]],["t/3783",[23,1.6,59,1.377,67,2.212,79,3.499,80,3.271,174,2.809]],["t/3785",[34,3.324,36,2.695,63,3.324,187,4.501]],["t/3787",[36,2.695,90,3.19,174,3.324,188,3.872]],["t/3795",[17,1.612,18,3.247,32,2.867,173,3.947,174,2.607,189,3.959]],["t/3809",[24,3.381,44,2.73,190,5.558]],["t/3824",[44,2.48,191,5.048,192,4.501,193,4.141]],["t/3836",[34,3.66,187,4.956,194,5.558]],["t/3848",[44,3.037,73,4.742]],["t/3850",[1,0.472,23,1.386,32,2.675,63,2.432,121,3.293,195,3.693,196,3.693,197,3.293]],["t/3852",[197,5.513,198,5.513]],["t/3869",[44,2.48,174,3.324,188,3.872,199,5.048]],["t/3877",[1,0.59,49,3.793,50,3.546,51,4.123,52,4.123]],["t/3888",[1,0.442,36,1.847,58,2.187,90,3.279,188,2.654,200,3.086,201,3.086,202,3.086]],["t/3905",[173,3.478,193,4.141,203,5.048,204,5.048]],["t/3921",[1,0.545,63,2.809,90,2.696,188,3.271,192,3.803,205,4.266]],["t/3923",[1,0.645,46,3.478,47,4.501,48,3.872]],["t/3927",[1,0.59,23,1.735,32,3.349,48,3.546,63,3.045]],["t/3947",[1,0.545,58,2.696,59,1.377,60,3.803,61,3.803,62,3.803]],["t/3965",[1,0.505,53,3.53,54,3.53,55,3.53,56,3.53,57,3.53,58,2.502]],["t/3977",[1,0.59,46,3.185,67,2.398,80,3.546,206,4.624]],["t/3991",[46,2.384,59,1.117,67,1.795,141,3.086,207,3.086,208,5.19,209,3.461,210,3.461]],["t/4001",[1,0.71,21,4.956,211,5.558]],["t/4021",[207,4.956,212,5.558,213,5.558]],["t/4032",[1,0.59,59,1.492,214,3.793,215,4.624,216,4.624]],["t/4036",[1,0.59,49,3.793,59,1.492,214,3.793,217,4.624]],["t/4049",[1,0.71,129,3.829,218,5.558]],["t/4055",[1,0.472,46,2.544,214,3.029,219,3.693,220,3.693,221,3.693,222,3.693,223,3.693]],["t/4057",[59,1.377,178,3.803,179,3.803,224,4.266,225,4.266,226,4.266]],["t/4087",[1,0.545,92,3.271,116,3.499,227,4.266,228,4.266,229,4.266]],["t/4095",[1,0.71,67,2.883,172,4.956]],["t/4107",[1,0.71,129,3.829,230,4.956]],["t/4125",[1,0.71,90,3.512,150,4.559]],["t/4127",[1,0.71,59,1.794,231,5.558]],["t/4138",[59,1.629,105,3.872,109,3.872,110,3.324]],["t/4140",[67,2.883,173,3.829,232,5.558]],["t/4146",[105,4.742,109,4.742]],["t/4158",[1,0.545,7,3.803,110,3.98,233,4.266,234,4.266]],["t/4168",[1,0.645,109,3.872,142,4.141,235,5.048]],["t/4192",[1,0.71,236,4.956,237,4.956]],["t/4202",[44,2.271,59,1.492,119,3.349,238,4.624,239,4.624]],["t/4208",[142,3.793,240,4.123,241,4.624,242,4.624,243,4.624]],["t/4210",[44,3.037,244,5.513]],["t/4216",[230,5.513,240,5.513]],["t/4235",[1,0.59,50,3.546,131,4.123,173,3.185,245,4.624]],["t/4241",[1,0.789,4,3.401]],["t/4258",[1,0.59,4,2.544,59,1.492,110,3.045,138,3.546]],["t/4272",[1,0.59,4,2.544,59,1.492,138,3.546,246,4.624]],["t/4280",[1,0.59,2,3.185,3,3.045,35,3.185,247,4.624]],["t/4308",[1,0.545,2,2.938,3,2.809,4,2.347,59,1.377,138,3.271]],["t/4329",[4,2.347,36,2.277,59,1.377,90,2.696,92,3.271,248,3.499]],["t/4348",[1,0.59,59,1.492,249,4.624,250,4.624,251,4.624]],["t/4361",[1,0.59,3,3.045,59,1.492,252,4.624,253,4.624]],["t/4384",[1,0.645,4,2.777,148,2.777,151,4.141]],["t/4414",[1,0.59,152,3.546,153,3.793,154,3.793,155,4.123]],["t/4450",[1,0.645,254,5.048,255,5.048,256,5.048]],["t/4452",[1,0.59,46,3.185,148,2.544,236,4.123,237,4.123]],["t/4507",[4,2.777,148,2.777,151,4.141,248,4.141]],["t/4519",[4,2.777,137,3.657,148,2.777,248,4.141]],["t/4536",[67,2.398,79,3.793,80,3.546,148,2.544,257,4.624]],["t/4548",[44,2.48,148,2.777,193,4.141,244,4.501]],["t/4558",[1,0.59,58,2.922,63,3.045,198,4.123,258,4.123]],["t/4578",[1,0.545,58,2.696,200,3.803,201,3.803,202,3.803,258,3.803]],["t/4598",[1,0.645,59,1.629,259,5.048,260,5.048]],["t/4601",[1,0.59,59,1.492,77,2.544,107,2.813,173,3.185]],["t/4610",[1,0.59,148,2.544,152,3.546,153,3.793,154,3.793]],["t/4886",[1,0.545,2,2.938,3,2.809,4,2.347,137,3.09,148,2.347]]],"invertedIndex":[["2.0",{"_index":82,"t":{"2783":{"position":[[10,3]]},"3199":{"position":[[22,3]]},"3277":{"position":[[25,3]]},"3294":{"position":[[36,3]]}}}],["access",{"_index":138,"t":{"3053":{"position":[[12,9]]},"4258":{"position":[[0,9]]},"4272":{"position":[[7,6]]},"4308":{"position":[[7,6]]}}}],["account",{"_index":15,"t":{"2560":{"position":[[14,8],[32,8]]},"3110":{"position":[[9,8]]}}}],["ad",{"_index":163,"t":{"3277":{"position":[[0,6]]}}}],["add",{"_index":71,"t":{"2777":{"position":[[7,3]]}}}],["address",{"_index":189,"t":{"3795":{"position":[[55,8]]}}}],["allowlist",{"_index":135,"t":{"3027":{"position":[[26,10]]}}}],["altern",{"_index":85,"t":{"2815":{"position":[[6,11]]}}}],["ansibl",{"_index":101,"t":{"2917":{"position":[[20,7]]}}}],["api",{"_index":4,"t":{"2558":{"position":[[23,4]]},"3128":{"position":[[21,3]]},"3386":{"position":[[30,3]]},"4241":{"position":[[5,3]]},"4258":{"position":[[30,3]]},"4272":{"position":[[23,3]]},"4308":{"position":[[23,3]]},"4329":{"position":[[15,3]]},"4384":{"position":[[5,3]]},"4507":{"position":[[7,3]]},"4519":{"position":[[7,3]]},"4886":{"position":[[14,3]]}}}],["appropri",{"_index":229,"t":{"4087":{"position":[[51,13]]}}}],["archiv",{"_index":204,"t":{"3905":{"position":[[9,7]]}}}],["attest",{"_index":194,"t":{"3836":{"position":[[15,12]]}}}],["authent",{"_index":247,"t":{"4280":{"position":[[5,14]]}}}],["author",{"_index":35,"t":{"2607":{"position":[[14,9]]},"2783":{"position":[[23,9]]},"2849":{"position":[[19,9]]},"2879":{"position":[[21,9]]},"3294":{"position":[[50,10]]},"4280":{"position":[[24,13]]}}}],["avail",{"_index":21,"t":{"2560":{"position":[[123,9]]},"4001":{"position":[[10,12]]}}}],["azur",{"_index":158,"t":{"3199":{"position":[[50,6]]}}}],["back",{"_index":64,"t":{"2730":{"position":[[0,7]]}}}],["balanc",{"_index":213,"t":{"4021":{"position":[[12,9]]}}}],["base",{"_index":31,"t":{"2593":{"position":[[7,5]]}}}],["best",{"_index":143,"t":{"3075":{"position":[[12,4]]}}}],["besu",{"_index":1,"t":{"2558":{"position":[[9,4]]},"2566":{"position":[[0,4]]},"2607":{"position":[[0,4]]},"2677":{"position":[[33,4]]},"2681":{"position":[[19,4]]},"2692":{"position":[[56,5]]},"2702":{"position":[[4,4]]},"2716":{"position":[[6,4]]},"2730":{"position":[[25,4]]},"2752":{"position":[[0,4]]},"2783":{"position":[[0,4]]},"2815":{"position":[[37,4]]},"2817":{"position":[[0,4],[131,5],[141,4]]},"2849":{"position":[[0,4]]},"2879":{"position":[[0,4]]},"2917":{"position":[[10,4]]},"2949":{"position":[[10,4]]},"2951":{"position":[[10,4]]},"2955":{"position":[[31,4]]},"2957":{"position":[[44,4]]},"2967":{"position":[[26,4]]},"2971":{"position":[[8,4]]},"2977":{"position":[[5,4]]},"2999":{"position":[[58,4]]},"3001":{"position":[[48,4]]},"3007":{"position":[[47,4]]},"3017":{"position":[[45,4]]},"3031":{"position":[[0,4]]},"3053":{"position":[[78,4]]},"3059":{"position":[[0,4]]},"3063":{"position":[[0,4]]},"3098":{"position":[[38,4]]},"3100":{"position":[[38,4]]},"3106":{"position":[[46,4]]},"3110":{"position":[[27,4]]},"3128":{"position":[[0,4]]},"3140":{"position":[[0,4]]},"3154":{"position":[[0,4]]},"3294":{"position":[[0,4]]},"3344":{"position":[[10,4]]},"3386":{"position":[[0,4]]},"3488":{"position":[[16,4]]},"3496":{"position":[[12,4]]},"3518":{"position":[[10,4]]},"3533":{"position":[[42,4]]},"3568":{"position":[[0,4]]},"3601":{"position":[[10,4]]},"3629":{"position":[[0,4]]},"3679":{"position":[[10,4]]},"3713":{"position":[[39,5]]},"3719":{"position":[[31,5]]},"3850":{"position":[[48,4]]},"3877":{"position":[[19,4]]},"3888":{"position":[[4,4]]},"3921":{"position":[[11,4]]},"3923":{"position":[[33,4]]},"3927":{"position":[[6,4]]},"3947":{"position":[[4,4]]},"3965":{"position":[[56,5]]},"3977":{"position":[[23,4]]},"4001":{"position":[[0,4]]},"4032":{"position":[[32,4]]},"4036":{"position":[[36,4]]},"4049":{"position":[[0,4]]},"4055":{"position":[[44,4]]},"4087":{"position":[[40,4]]},"4095":{"position":[[21,4]]},"4107":{"position":[[9,4]]},"4125":{"position":[[0,4]]},"4127":{"position":[[6,4]]},"4158":{"position":[[0,4]]},"4168":{"position":[[11,4]]},"4192":{"position":[[0,4]]},"4235":{"position":[[13,4]]},"4241":{"position":[[0,4]]},"4258":{"position":[[25,4]]},"4272":{"position":[[18,4]]},"4280":{"position":[[0,4]]},"4308":{"position":[[18,4]]},"4348":{"position":[[6,4]]},"4361":{"position":[[23,4]]},"4384":{"position":[[0,4]]},"4414":{"position":[[0,4]]},"4450":{"position":[[0,4]]},"4452":{"position":[[0,4]]},"4558":{"position":[[4,4]]},"4578":{"position":[[4,4]]},"4598":{"position":[[23,4]]},"4601":{"position":[[9,4]]},"4610":{"position":[[0,4]]},"4886":{"position":[[0,4]]}}}],["besu'",{"_index":209,"t":{"3991":{"position":[[33,6]]}}}],["between",{"_index":93,"t":{"2817":{"position":[[108,7]]}}}],["binari",{"_index":51,"t":{"2681":{"position":[[29,6]]},"3877":{"position":[[29,6]]}}}],["block",{"_index":69,"t":{"2754":{"position":[[0,5]]}}}],["blockchain",{"_index":185,"t":{"3729":{"position":[[25,10]]}}}],["bonsai",{"_index":179,"t":{"3700":{"position":[[51,6]]},"4057":{"position":[[44,6]]}}}],["bootnod",{"_index":68,"t":{"2744":{"position":[[12,9]]}}}],["call",{"_index":164,"t":{"3324":{"position":[[0,7]]}}}],["chain",{"_index":181,"t":{"3713":{"position":[[27,5]]}}}],["chainlen",{"_index":114,"t":{"2957":{"position":[[4,9]]}}}],["chart",{"_index":169,"t":{"3518":{"position":[[20,6]]},"3601":{"position":[[20,6]]}}}],["chatbot",{"_index":28,"t":{"2580":{"position":[[0,7]]},"3648":{"position":[[0,7]]}}}],["cli",{"_index":156,"t":{"3154":{"position":[[22,3]]}}}],["client",{"_index":90,"t":{"2817":{"position":[[22,6]]},"3116":{"position":[[14,6]]},"3627":{"position":[[14,6]]},"3787":{"position":[[36,8]]},"3888":{"position":[[25,6],[51,6]]},"3921":{"position":[[52,7]]},"4125":{"position":[[5,6]]},"4329":{"position":[[51,7]]}}}],["cliqu",{"_index":99,"t":{"2879":{"position":[[5,6]]},"3213":{"position":[[35,6]]}}}],["cloud",{"_index":108,"t":{"2951":{"position":[[22,5]]}}}],["cluster",{"_index":166,"t":{"3369":{"position":[[9,7]]},"3488":{"position":[[37,7]]},"3502":{"position":[[42,7]]},"3518":{"position":[[58,7]]},"3601":{"position":[[44,7]]}}}],["code",{"_index":12,"t":{"2558":{"position":[[104,6]]},"2560":{"position":[[140,5]]}}}],["collect",{"_index":120,"t":{"2971":{"position":[[0,7]]}}}],["collector",{"_index":123,"t":{"2971":{"position":[[48,9]]}}}],["command",{"_index":153,"t":{"3140":{"position":[[5,7]]},"4414":{"position":[[5,7]]},"4610":{"position":[[5,7]]}}}],["commun",{"_index":92,"t":{"2817":{"position":[[40,14],[94,13]]},"2929":{"position":[[18,13]]},"4087":{"position":[[10,13]]},"4329":{"position":[[22,11]]}}}],["comparison",{"_index":38,"t":{"2607":{"position":[[44,10]]}}}],["compliant",{"_index":140,"t":{"3059":{"position":[[37,9]]}}}],["concept",{"_index":27,"t":{"2578":{"position":[[17,8]]}}}],["concurr",{"_index":126,"t":{"2999":{"position":[[21,10]]}}}],["configur",{"_index":67,"t":{"2744":{"position":[[0,11]]},"2817":{"position":[[76,9]]},"2833":{"position":[[0,11]]},"2909":{"position":[[0,11]]},"2929":{"position":[[0,9]]},"3533":{"position":[[12,9]]},"3551":{"position":[[0,9]]},"3679":{"position":[[0,9]]},"3783":{"position":[[12,11]]},"3977":{"position":[[28,13]]},"3991":{"position":[[48,14]]},"4095":{"position":[[0,11]]},"4140":{"position":[[0,11]]},"4536":{"position":[[13,13]]}}}],["connect",{"_index":197,"t":{"3850":{"position":[[37,10]]},"3852":{"position":[[7,7]]}}}],["consensi",{"_index":145,"t":{"3100":{"position":[[8,9]]}}}],["consensu",{"_index":36,"t":{"2607":{"position":[[24,9]]},"2752":{"position":[[5,9]]},"2783":{"position":[[39,9]]},"2849":{"position":[[35,9]]},"2879":{"position":[[37,9]]},"3213":{"position":[[42,9]]},"3255":{"position":[[42,9]]},"3294":{"position":[[61,9]]},"3649":{"position":[[40,9]]},"3785":{"position":[[24,9]]},"3787":{"position":[[26,9]]},"3888":{"position":[[41,9]]},"4329":{"position":[[41,9]]}}}],["constraint",{"_index":243,"t":{"4208":{"position":[[43,12]]}}}],["contract",{"_index":78,"t":{"2781":{"position":[[14,9]]},"3245":{"position":[[16,9]]},"3324":{"position":[[14,9]]}}}],["cpu",{"_index":250,"t":{"4348":{"position":[[19,3]]}}}],["creat",{"_index":125,"t":{"2999":{"position":[[0,8]]},"3007":{"position":[[0,8]]},"3098":{"position":[[0,6]]},"3213":{"position":[[0,6]]},"3255":{"position":[[0,6]]},"3369":{"position":[[0,6]]},"3568":{"position":[[5,6]]},"3649":{"position":[[0,6]]}}}],["curv",{"_index":87,"t":{"2815":{"position":[[27,6]]}}}],["data",{"_index":176,"t":{"3700":{"position":[[20,4]]}}}],["databas",{"_index":226,"t":{"4057":{"position":[[24,8]]}}}],["default",{"_index":210,"t":{"3991":{"position":[[40,7]]}}}],["deploy",{"_index":77,"t":{"2781":{"position":[[4,9]]},"2917":{"position":[[0,9]]},"2949":{"position":[[0,9]]},"2951":{"position":[[0,9]]},"3199":{"position":[[0,6]]},"3245":{"position":[[0,9]]},"3344":{"position":[[0,9]]},"3369":{"position":[[21,10]]},"3496":{"position":[[0,9]]},"3518":{"position":[[0,9]]},"3601":{"position":[[0,9]]},"4601":{"position":[[0,6]]}}}],["descript",{"_index":191,"t":{"3824":{"position":[[0,11]]}}}],["differ",{"_index":192,"t":{"3824":{"position":[[19,9]]},"3921":{"position":[[23,9]]}}}],["disclosur",{"_index":255,"t":{"4450":{"position":[[17,10]]}}}],["distribut",{"_index":52,"t":{"2681":{"position":[[36,12]]},"3877":{"position":[[36,12]]}}}],["docker",{"_index":61,"t":{"2702":{"position":[[28,6]]},"3947":{"position":[[28,6]]}}}],["document",{"_index":5,"t":{"2558":{"position":[[28,13]]},"2560":{"position":[[93,13]]}}}],["eea",{"_index":139,"t":{"3059":{"position":[[33,3]]}}}],["elast",{"_index":111,"t":{"2955":{"position":[[6,7]]}}}],["elk",{"_index":113,"t":{"2955":{"position":[[20,5]]}}}],["ellipt",{"_index":86,"t":{"2815":{"position":[[18,8]]}}}],["enabl",{"_index":116,"t":{"2957":{"position":[[36,7]]},"3629":{"position":[[13,7]]},"4087":{"position":[[3,6]]}}}],["engin",{"_index":248,"t":{"4329":{"position":[[8,6]]},"4507":{"position":[[0,6]]},"4519":{"position":[[0,6]]}}}],["ensur",{"_index":53,"t":{"2692":{"position":[[0,6]]},"3965":{"position":[[0,6]]}}}],["eth_cal",{"_index":238,"t":{"4202":{"position":[[24,8]]}}}],["eth_sendrawtransact",{"_index":239,"t":{"4202":{"position":[[36,23]]}}}],["ethash",{"_index":162,"t":{"3255":{"position":[[35,6]]}}}],["ethereum",{"_index":63,"t":{"2716":{"position":[[24,8]]},"3110":{"position":[[0,8]]},"3785":{"position":[[0,8]]},"3850":{"position":[[65,8]]},"3921":{"position":[[33,8]]},"3927":{"position":[[23,8]]},"4558":{"position":[[21,8]]}}}],["ethstat",{"_index":104,"t":{"2919":{"position":[[0,8]]}}}],["event",{"_index":182,"t":{"3719":{"position":[[12,6]]}}}],["evm",{"_index":236,"t":{"4192":{"position":[[5,3]]},"4452":{"position":[[5,3]]}}}],["exampl",{"_index":9,"t":{"2558":{"position":[[75,7]]},"2817":{"position":[[59,8]]},"3627":{"position":[[40,7]]}}}],["execut",{"_index":188,"t":{"3787":{"position":[[12,9]]},"3869":{"position":[[33,10]]},"3888":{"position":[[15,9]]},"3921":{"position":[[42,9]]}}}],["explor",{"_index":115,"t":{"2957":{"position":[[14,8]]},"3502":{"position":[[17,8]]}}}],["expos",{"_index":227,"t":{"4087":{"position":[[33,6]]}}}],["extend",{"_index":141,"t":{"3063":{"position":[[5,8]]},"3991":{"position":[[26,6]]}}}],["featur",{"_index":26,"t":{"2566":{"position":[[19,7]]}}}],["file",{"_index":80,"t":{"2781":{"position":[[39,4]]},"3783":{"position":[[52,5]]},"3977":{"position":[[42,5]]},"4536":{"position":[[8,4]]}}}],["flexibl",{"_index":41,"t":{"2621":{"position":[[0,8]]},"3067":{"position":[[4,8]]}}}],["flight",{"_index":215,"t":{"4032":{"position":[[11,6]]}}}],["follow",{"_index":14,"t":{"2560":{"position":[[4,9]]}}}],["forest",{"_index":177,"t":{"3700":{"position":[[31,6]]}}}],["format",{"_index":7,"t":{"2558":{"position":[[57,6]]},"4158":{"position":[[31,10]]}}}],["free",{"_index":96,"t":{"2833":{"position":[[12,4]]}}}],["full",{"_index":203,"t":{"3905":{"position":[[0,4]]}}}],["function",{"_index":165,"t":{"3324":{"position":[[24,9]]}}}],["fund",{"_index":159,"t":{"3237":{"position":[[0,5]]}}}],["ga",{"_index":97,"t":{"2833":{"position":[[17,3]]}}}],["galaxi",{"_index":103,"t":{"2917":{"position":[[36,6]]}}}],["gener",{"_index":184,"t":{"3729":{"position":[[8,8]]}}}],["genesi",{"_index":79,"t":{"2781":{"position":[[31,7]]},"3783":{"position":[[44,7]]},"4536":{"position":[[0,7]]}}}],["get",{"_index":47,"t":{"2677":{"position":[[12,7]]},"3923":{"position":[[12,7]]}}}],["grafana",{"_index":127,"t":{"3001":{"position":[[6,7]]}}}],["graphql",{"_index":246,"t":{"4272":{"position":[[33,7]]}}}],["group",{"_index":43,"t":{"2621":{"position":[[17,6]]},"2643":{"position":[[8,6]]},"3053":{"position":[[68,6]]},"3067":{"position":[[21,6]]},"3098":{"position":[[26,6]]}}}],["hardhat",{"_index":231,"t":{"4127":{"position":[[16,7]]}}}],["helm",{"_index":168,"t":{"3518":{"position":[[15,4]]},"3601":{"position":[[15,4]]}}}],["hibern",{"_index":118,"t":{"2967":{"position":[[11,9]]}}}],["high",{"_index":211,"t":{"4001":{"position":[[5,4]]}}}],["holeski",{"_index":200,"t":{"3888":{"position":[[65,7]]},"4578":{"position":[[21,7]]}}}],["ibft",{"_index":81,"t":{"2783":{"position":[[5,4]]},"3199":{"position":[[17,4]]},"3277":{"position":[[20,4]]},"3294":{"position":[[31,4]]}}}],["id",{"_index":180,"t":{"3713":{"position":[[20,2],[33,2]]}}}],["imag",{"_index":62,"t":{"2702":{"position":[[35,5]]},"3947":{"position":[[35,5]]}}}],["implement",{"_index":84,"t":{"2783":{"position":[[58,14]]},"2849":{"position":[[54,14]]},"2879":{"position":[[56,14]]}}}],["includ",{"_index":132,"t":{"3017":{"position":[[0,9]]}}}],["inform",{"_index":121,"t":{"2971":{"position":[[13,11]]},"3850":{"position":[[22,11]]}}}],["infrastructur",{"_index":33,"t":{"2601":{"position":[[11,14]]}}}],["instal",{"_index":49,"t":{"2681":{"position":[[0,7]]},"3877":{"position":[[0,7]]},"4036":{"position":[[0,7]]}}}],["interfac",{"_index":152,"t":{"3134":{"position":[[7,10]]},"3140":{"position":[[18,9]]},"4414":{"position":[[18,9]]},"4610":{"position":[[18,9]]}}}],["item",{"_index":257,"t":{"4536":{"position":[[27,5]]}}}],["java",{"_index":214,"t":{"4032":{"position":[[6,4]]},"4036":{"position":[[18,4]]},"4055":{"position":[[8,4]]}}}],["json",{"_index":2,"t":{"2558":{"position":[[14,4]]},"3059":{"position":[[5,4]]},"3386":{"position":[[21,4]]},"4280":{"position":[[42,4]]},"4308":{"position":[[33,4]]},"4886":{"position":[[5,4]]}}}],["jvm",{"_index":222,"t":{"4055":{"position":[[29,3]]}}}],["key",{"_index":18,"t":{"2560":{"position":[[59,4]]},"2601":{"position":[[7,3]]},"3795":{"position":[[36,5]]}}}],["kubernet",{"_index":107,"t":{"2949":{"position":[[20,10]]},"3344":{"position":[[20,10]]},"3488":{"position":[[26,10]]},"3496":{"position":[[46,10]]},"3502":{"position":[[31,10]]},"3518":{"position":[[47,10]]},"3533":{"position":[[22,10]]},"3601":{"position":[[33,10]]},"4601":{"position":[[25,11]]}}}],["languag",{"_index":13,"t":{"2558":{"position":[[111,10]]}}}],["learn",{"_index":174,"t":{"3700":{"position":[[0,5]]},"3713":{"position":[[0,5]]},"3719":{"position":[[0,5]]},"3783":{"position":[[0,5]]},"3787":{"position":[[0,5]]},"3795":{"position":[[0,5]]},"3869":{"position":[[0,5]]}}}],["level",{"_index":233,"t":{"4158":{"position":[[9,5]]}}}],["librari",{"_index":150,"t":{"3116":{"position":[[21,7]]},"3627":{"position":[[21,7]]},"4125":{"position":[[12,9]]}}}],["line",{"_index":154,"t":{"3140":{"position":[[13,4]]},"4414":{"position":[[13,4]]},"4610":{"position":[[13,4]]}}}],["list",{"_index":259,"t":{"4598":{"position":[[0,4]]}}}],["load",{"_index":207,"t":{"3991":{"position":[[8,4]]},"4021":{"position":[[7,4]]}}}],["local",{"_index":136,"t":{"3031":{"position":[[5,5]]},"3496":{"position":[[33,7]]},"3729":{"position":[[19,5]]}}}],["log",{"_index":110,"t":{"2953":{"position":[[29,7]]},"2977":{"position":[[10,4]]},"3001":{"position":[[19,3]]},"3719":{"position":[[23,4]]},"4138":{"position":[[29,7]]},"4158":{"position":[[5,3],[27,3]]},"4258":{"position":[[10,4]]}}}],["loki",{"_index":128,"t":{"3001":{"position":[[14,4]]}}}],["machin",{"_index":221,"t":{"4055":{"position":[[21,7]]}}}],["mainnet",{"_index":198,"t":{"3852":{"position":[[18,7]]},"4558":{"position":[[30,8]]}}}],["mainten",{"_index":167,"t":{"3488":{"position":[[0,11]]}}}],["manag",{"_index":129,"t":{"3001":{"position":[[23,10]]},"3053":{"position":[[26,8]]},"3098":{"position":[[11,6]]},"3533":{"position":[[51,7]]},"4049":{"position":[[12,10]]},"4107":{"position":[[0,8]]}}}],["marker",{"_index":147,"t":{"3106":{"position":[[22,6]]}}}],["meet",{"_index":54,"t":{"2692":{"position":[[11,4]]},"3965":{"position":[[11,4]]}}}],["memori",{"_index":218,"t":{"4049":{"position":[[5,6]]}}}],["method",{"_index":137,"t":{"3053":{"position":[[0,7]]},"3059":{"position":[[14,7]]},"3386":{"position":[[34,7]]},"4519":{"position":[[11,7]]},"4886":{"position":[[18,7]]}}}],["metric",{"_index":109,"t":{"2953":{"position":[[17,7]]},"4138":{"position":[[17,7]]},"4146":{"position":[[15,7]]},"4168":{"position":[[28,7]]}}}],["microsoft",{"_index":157,"t":{"3199":{"position":[[40,9]]}}}],["migrat",{"_index":205,"t":{"3921":{"position":[[0,7]]}}}],["mine",{"_index":251,"t":{"4348":{"position":[[23,6]]}}}],["mode",{"_index":171,"t":{"3533":{"position":[[33,4]]}}}],["monitor",{"_index":105,"t":{"2919":{"position":[[17,7]]},"2953":{"position":[[0,10]]},"4138":{"position":[[0,10]]},"4146":{"position":[[0,10]]}}}],["multi",{"_index":39,"t":{"2619":{"position":[[0,5]]},"3551":{"position":[[10,5]]},"3627":{"position":[[29,5]]}}}],["multipl",{"_index":11,"t":{"2558":{"position":[[95,8]]}}}],["nat",{"_index":172,"t":{"3533":{"position":[[47,3]]},"4095":{"position":[[12,3]]}}}],["network",{"_index":23,"t":{"2562":{"position":[[8,8]]},"2578":{"position":[[8,8]]},"2714":{"position":[[8,8]]},"2716":{"position":[[33,8]]},"2833":{"position":[[21,8]]},"2909":{"position":[[37,8]]},"2919":{"position":[[9,7]]},"2957":{"position":[[49,7]]},"2969":{"position":[[8,8]]},"3108":{"position":[[8,8]]},"3110":{"position":[[56,8]]},"3128":{"position":[[13,7]]},"3154":{"position":[[13,8]]},"3199":{"position":[[26,7]]},"3213":{"position":[[17,7]]},"3255":{"position":[[17,7]]},"3294":{"position":[[13,7]]},"3386":{"position":[[13,7]]},"3496":{"position":[[25,7]]},"3568":{"position":[[27,7]]},"3629":{"position":[[29,7]]},"3644":{"position":[[7,8]]},"3649":{"position":[[17,7]]},"3713":{"position":[[12,7]]},"3729":{"position":[[36,7]]},"3783":{"position":[[26,7]]},"3850":{"position":[[74,8]]},"3927":{"position":[[32,8]]}}}],["new",{"_index":245,"t":{"4235":{"position":[[28,3]]}}}],["node",{"_index":173,"t":{"3627":{"position":[[35,4]]},"3795":{"position":[[12,4],[50,4]]},"3905":{"position":[[17,4]]},"4140":{"position":[[19,5]]},"4235":{"position":[[18,4]]},"4601":{"position":[[14,4]]}}}],["object",{"_index":151,"t":{"3128":{"position":[[25,7]]},"4384":{"position":[[9,7]]},"4507":{"position":[[11,7]]}}}],["obtain",{"_index":8,"t":{"2558":{"position":[[68,6]]}}}],["offici",{"_index":60,"t":{"2702":{"position":[[19,8]]},"3947":{"position":[[19,8]]}}}],["onchain",{"_index":29,"t":{"2581":{"position":[[0,7]]},"3027":{"position":[[4,7]]}}}],["opentelemetri",{"_index":122,"t":{"2971":{"position":[[34,13]]}}}],["option",{"_index":46,"t":{"2677":{"position":[[0,7]]},"3923":{"position":[[0,7]]},"3977":{"position":[[8,7]]},"3991":{"position":[[83,7]]},"4055":{"position":[[33,7]]},"4452":{"position":[[14,7]]}}}],["overview",{"_index":24,"t":{"2562":{"position":[[17,8]]},"2578":{"position":[[26,8]]},"2589":{"position":[[8,8]]},"2655":{"position":[[20,8]]},"2714":{"position":[[24,8]]},"2969":{"position":[[35,8]]},"3108":{"position":[[27,8]]},"3644":{"position":[[16,8]]},"3809":{"position":[[17,8]]}}}],["p2p",{"_index":106,"t":{"2929":{"position":[[10,3]]}}}],["parallel",{"_index":199,"t":{"3869":{"position":[[12,8]]}}}],["pass",{"_index":219,"t":{"4055":{"position":[[0,7]]}}}],["peer",{"_index":230,"t":{"4107":{"position":[[14,5]]},"4216":{"position":[[20,7]]}}}],["perform",{"_index":142,"t":{"3075":{"position":[[0,11]]},"4168":{"position":[[16,11]]},"4208":{"position":[[18,11]]}}}],["permiss",{"_index":25,"t":{"2566":{"position":[[5,13]]},"2581":{"position":[[8,13]]},"2593":{"position":[[13,13]]},"2754":{"position":[[15,13]]},"3027":{"position":[[12,13]]},"3031":{"position":[[11,13]]},"3568":{"position":[[14,12]]}}}],["platform",{"_index":130,"t":{"3001":{"position":[[34,8]]}}}],["plugin",{"_index":30,"t":{"2589":{"position":[[0,7]]},"2593":{"position":[[0,6]]},"2629":{"position":[[8,6]]},"3134":{"position":[[0,6]]}}}],["poa",{"_index":83,"t":{"2783":{"position":[[33,5]]},"2849":{"position":[[29,5]]},"2879":{"position":[[31,5]]}}}],["pool",{"_index":190,"t":{"3809":{"position":[[12,4]]}}}],["poor",{"_index":241,"t":{"4208":{"position":[[13,4]]}}}],["port",{"_index":228,"t":{"4087":{"position":[[45,5]]}}}],["postman",{"_index":6,"t":{"2558":{"position":[[49,7]]}}}],["pow",{"_index":249,"t":{"4348":{"position":[[15,3]]}}}],["practic",{"_index":144,"t":{"3075":{"position":[[17,9]]}}}],["pre",{"_index":76,"t":{"2781":{"position":[[0,3]]}}}],["privaci",{"_index":42,"t":{"2621":{"position":[[9,7]]},"2629":{"position":[[0,7]]},"2643":{"position":[[0,7]]},"2667":{"position":[[0,7]]},"2957":{"position":[[28,7]]},"3053":{"position":[[60,7]]},"3059":{"position":[[47,7]]},"3063":{"position":[[14,7]]},"3067":{"position":[[13,7]]},"3098":{"position":[[18,7]]},"3106":{"position":[[14,7]]},"3629":{"position":[[5,7]]},"3679":{"position":[[15,7]]}}}],["privat",{"_index":17,"t":{"2560":{"position":[[51,7]]},"2562":{"position":[[0,7]]},"2578":{"position":[[0,7]]},"2655":{"position":[[0,7]]},"2675":{"position":[[0,7]]},"2714":{"position":[[0,7]]},"2716":{"position":[[16,7]]},"2969":{"position":[[0,7]]},"2999":{"position":[[32,7]]},"3007":{"position":[[21,7]]},"3053":{"position":[[35,7]]},"3108":{"position":[[0,7]]},"3110":{"position":[[48,7]]},"3128":{"position":[[5,7]]},"3154":{"position":[[5,7]]},"3199":{"position":[[9,7]]},"3213":{"position":[[9,7]]},"3255":{"position":[[9,7]]},"3294":{"position":[[5,7]]},"3386":{"position":[[5,7]]},"3496":{"position":[[17,7]]},"3629":{"position":[[21,7]]},"3649":{"position":[[9,7]]},"3795":{"position":[[28,7]]}}}],["process",{"_index":45,"t":{"2675":{"position":[[20,10]]}}}],["product",{"_index":100,"t":{"2909":{"position":[[26,10]]},"3518":{"position":[[31,10]]}}}],["profil",{"_index":208,"t":{"3991":{"position":[[15,7],[75,7]]}}}],["project",{"_index":260,"t":{"4598":{"position":[[8,8]]}}}],["proof",{"_index":34,"t":{"2607":{"position":[[5,5]]},"2783":{"position":[[14,5]]},"2849":{"position":[[10,5]]},"2879":{"position":[[12,5]]},"3294":{"position":[[40,6]]},"3785":{"position":[[9,5]]},"3836":{"position":[[0,5]]}}}],["propos",{"_index":70,"t":{"2754":{"position":[[6,8]]}}}],["protocol",{"_index":37,"t":{"2607":{"position":[[34,9]]},"2752":{"position":[[15,9]]},"2783":{"position":[[49,8]]},"2849":{"position":[[45,8]]},"2879":{"position":[[47,8]]},"3003":{"position":[[10,8]]},"3213":{"position":[[52,9]]},"3255":{"position":[[52,9]]},"3294":{"position":[[71,8]]},"3649":{"position":[[50,9]]}}}],["provid",{"_index":196,"t":{"3850":{"position":[[13,8]]}}}],["pub/sub",{"_index":252,"t":{"4361":{"position":[[10,7]]}}}],["public",{"_index":32,"t":{"2601":{"position":[[0,6]]},"3644":{"position":[[0,6]]},"3795":{"position":[[17,6]]},"3850":{"position":[[58,6]]},"3927":{"position":[[16,6]]}}}],["publicli",{"_index":19,"t":{"2560":{"position":[[68,8],[114,8]]}}}],["qbft",{"_index":98,"t":{"2849":{"position":[[5,4]]},"3649":{"position":[[35,4]]}}}],["quickstart",{"_index":186,"t":{"3729":{"position":[[54,11]]}}}],["quorum",{"_index":117,"t":{"2967":{"position":[[4,6]]},"3100":{"position":[[18,6]]},"3116":{"position":[[7,6]]},"3502":{"position":[[10,6]]},"3627":{"position":[[7,6]]}}}],["rapidli",{"_index":183,"t":{"3729":{"position":[[0,7]]}}}],["reason",{"_index":134,"t":{"3017":{"position":[[17,6]]}}}],["record",{"_index":216,"t":{"4032":{"position":[[18,8]]}}}],["reduc",{"_index":224,"t":{"4057":{"position":[[0,6]]}}}],["refer",{"_index":148,"t":{"3108":{"position":[[17,9]]},"3128":{"position":[[33,9]]},"3154":{"position":[[26,9]]},"3386":{"position":[[42,9]]},"4384":{"position":[[17,9]]},"4452":{"position":[[22,9]]},"4507":{"position":[[19,9]]},"4519":{"position":[[19,9]]},"4536":{"position":[[33,9]]},"4548":{"position":[[24,9]]},"4610":{"position":[[28,9]]},"4886":{"position":[[26,9]]}}}],["remov",{"_index":72,"t":{"2777":{"position":[[14,6]]},"3277":{"position":[[11,8]]}}}],["request",{"_index":10,"t":{"2558":{"position":[[83,8]]}}}],["requir",{"_index":56,"t":{"2692":{"position":[[27,12]]},"3965":{"position":[[27,12]]}}}],["resourc",{"_index":242,"t":{"4208":{"position":[[34,8]]}}}],["respons",{"_index":254,"t":{"4450":{"position":[[5,11]]}}}],["restor",{"_index":66,"t":{"2730":{"position":[[15,9]]}}}],["revert",{"_index":133,"t":{"3017":{"position":[[10,6]]}}}],["role",{"_index":102,"t":{"2917":{"position":[[28,4]]}}}],["rpc",{"_index":3,"t":{"2558":{"position":[[19,3]]},"3059":{"position":[[10,3]]},"3386":{"position":[[26,3]]},"4280":{"position":[[47,3]]},"4308":{"position":[[38,3]]},"4361":{"position":[[6,3]]},"4886":{"position":[[10,3]]}}}],["run",{"_index":58,"t":{"2692":{"position":[[52,3]]},"2702":{"position":[[0,3]]},"3100":{"position":[[0,7]]},"3888":{"position":[[0,3]]},"3947":{"position":[[0,3]]},"3965":{"position":[[52,3]]},"4558":{"position":[[0,3]]},"4578":{"position":[[0,3]]}}}],["runtim",{"_index":223,"t":{"4055":{"position":[[52,7]]}}}],["sampl",{"_index":212,"t":{"4021":{"position":[[0,6]]}}}],["section",{"_index":195,"t":{"3850":{"position":[[5,7]]}}}],["send",{"_index":119,"t":{"2969":{"position":[[17,4]]},"2977":{"position":[[0,4]]},"2999":{"position":[[13,7]]},"3007":{"position":[[13,7]]},"4202":{"position":[[0,4]]}}}],["sepolia",{"_index":201,"t":{"3888":{"position":[[77,7]]},"4578":{"position":[[32,7]]}}}],["server",{"_index":91,"t":{"2817":{"position":[[33,6]]}}}],["set",{"_index":234,"t":{"4158":{"position":[[15,7]]}}}],["sign",{"_index":146,"t":{"3106":{"position":[[7,4]]}}}],["size",{"_index":225,"t":{"4057":{"position":[[11,4]]}}}],["smart",{"_index":161,"t":{"3245":{"position":[[10,5]]},"3324":{"position":[[8,5]]}}}],["sourc",{"_index":22,"t":{"2560":{"position":[[133,6]]}}}],["specifi",{"_index":206,"t":{"3977":{"position":[[0,7]]}}}],["splunk",{"_index":124,"t":{"2977":{"position":[[18,6]]}}}],["stack",{"_index":112,"t":{"2955":{"position":[[14,5]]}}}],["stake",{"_index":187,"t":{"3785":{"position":[[18,5]]},"3836":{"position":[[9,5]]}}}],["start",{"_index":48,"t":{"2677":{"position":[[20,7]]},"2716":{"position":[[0,5]]},"3923":{"position":[[20,7]]},"3927":{"position":[[0,5]]}}}],["statement",{"_index":256,"t":{"4450":{"position":[[28,9]]}}}],["static",{"_index":232,"t":{"4140":{"position":[[12,6]]}}}],["store",{"_index":175,"t":{"3700":{"position":[[12,7]]}}}],["subcommand",{"_index":155,"t":{"3140":{"position":[[28,11]]},"4414":{"position":[[28,11]]}}}],["support",{"_index":88,"t":{"2817":{"position":[[5,8]]}}}],["sync",{"_index":57,"t":{"2692":{"position":[[43,4]]},"3965":{"position":[[43,4]]}}}],["system",{"_index":55,"t":{"2692":{"position":[[20,6]]},"3965":{"position":[[20,6]]}}}],["teku",{"_index":258,"t":{"4558":{"position":[[13,4]]},"4578":{"position":[[13,4]]}}}],["tenanc",{"_index":40,"t":{"2619":{"position":[[6,7]]},"3551":{"position":[[16,7]]}}}],["tessera",{"_index":95,"t":{"2817":{"position":[[150,8]]},"3100":{"position":[[25,7]]}}}],["test",{"_index":16,"t":{"2560":{"position":[[27,4]]},"3110":{"position":[[32,7]]}}}],["testnet",{"_index":202,"t":{"3888":{"position":[[85,9]]},"4578":{"position":[[40,8]]}}}],["tl",{"_index":89,"t":{"2817":{"position":[[14,3],[86,3]]},"2929":{"position":[[14,3]]}}}],["tool",{"_index":237,"t":{"4192":{"position":[[9,4]]},"4452":{"position":[[9,4]]}}}],["trace",{"_index":244,"t":{"4210":{"position":[[7,5]]},"4548":{"position":[[12,5]]}}}],["transact",{"_index":44,"t":{"2655":{"position":[[8,11]]},"2675":{"position":[[8,11]]},"2969":{"position":[[22,12]]},"2999":{"position":[[40,12]]},"3007":{"position":[[29,12]]},"3017":{"position":[[27,12]]},"3053":{"position":[[43,12]]},"3106":{"position":[[29,11]]},"3237":{"position":[[15,12]]},"3809":{"position":[[0,11]]},"3824":{"position":[[29,11]]},"3848":{"position":[[5,11]]},"3869":{"position":[[21,11]]},"4202":{"position":[[5,12]]},"4210":{"position":[[13,12]]},"4548":{"position":[[0,11]]}}}],["transfer",{"_index":160,"t":{"3237":{"position":[[6,8]]}}}],["tri",{"_index":178,"t":{"3700":{"position":[[41,5],[58,6]]},"4057":{"position":[[51,5]]}}}],["troubleshoot",{"_index":240,"t":{"4208":{"position":[[0,12]]},"4216":{"position":[[7,12]]}}}],["tutori",{"_index":170,"t":{"3533":{"position":[[0,8]]},"3629":{"position":[[37,8]]}}}],["type",{"_index":193,"t":{"3824":{"position":[[41,5]]},"3905":{"position":[[22,5]]},"4548":{"position":[[18,5]]}}}],["understand",{"_index":235,"t":{"4168":{"position":[[0,10]]}}}],["up",{"_index":65,"t":{"2730":{"position":[[8,2]]}}}],["updat",{"_index":217,"t":{"4036":{"position":[[11,6]]}}}],["upgrad",{"_index":50,"t":{"2681":{"position":[[11,7]]},"3003":{"position":[[0,9]]},"3877":{"position":[[11,7]]},"4235":{"position":[[0,7]]}}}],["us",{"_index":59,"t":{"2702":{"position":[[9,5]]},"2815":{"position":[[0,5]]},"2953":{"position":[[11,5]]},"2955":{"position":[[0,5]]},"2957":{"position":[[0,3]]},"2967":{"position":[[0,3]]},"3001":{"position":[[0,5]]},"3027":{"position":[[0,3]]},"3059":{"position":[[25,3]]},"3067":{"position":[[0,3]]},"3110":{"position":[[18,4]]},"3199":{"position":[[34,5]]},"3213":{"position":[[25,5]]},"3255":{"position":[[25,5]]},"3294":{"position":[[21,5]]},"3502":{"position":[[0,5]]},"3649":{"position":[[25,5]]},"3700":{"position":[[25,5]]},"3729":{"position":[[44,5]]},"3783":{"position":[[34,5]]},"3947":{"position":[[9,5]]},"3991":{"position":[[63,5]]},"4032":{"position":[[0,5]]},"4036":{"position":[[27,3]]},"4057":{"position":[[38,5]]},"4127":{"position":[[0,5]]},"4138":{"position":[[11,5]]},"4202":{"position":[[18,5]]},"4258":{"position":[[15,5]]},"4272":{"position":[[27,5]]},"4308":{"position":[[27,5]]},"4329":{"position":[[0,3]]},"4348":{"position":[[0,5]]},"4361":{"position":[[0,5]]},"4598":{"position":[[17,5]]},"4601":{"position":[[19,5]]}}}],["valid",{"_index":73,"t":{"2777":{"position":[[21,10]]},"2909":{"position":[[12,10]]},"3277":{"position":[[29,10]]},"3848":{"position":[[17,10]]}}}],["version",{"_index":131,"t":{"3003":{"position":[[19,8]]},"4235":{"position":[[32,8]]}}}],["view",{"_index":0,"t":{"2558":{"position":[[0,4]]}}}],["virtual",{"_index":220,"t":{"4055":{"position":[[13,7]]}}}],["visibl",{"_index":20,"t":{"2560":{"position":[[77,7]]}}}],["vote",{"_index":75,"t":{"2777":{"position":[[40,6]]}}}],["web3j",{"_index":149,"t":{"3116":{"position":[[0,6]]},"3627":{"position":[[0,6]]}}}],["web3sign",{"_index":94,"t":{"2817":{"position":[[116,10]]}}}],["websocket",{"_index":253,"t":{"4361":{"position":[[28,10]]}}}],["without",{"_index":74,"t":{"2777":{"position":[[32,7]]}}}]],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}},{"documents":[{"i":2559,"t":"Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"postman","u":"/global/postman","h":"","p":2558},{"i":2561,"t":"Do not use the test accounts on Ethereum Mainnet or any production network. The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code. They are not secure and everyone can use them. Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud. In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. Always secure your Ethereum Mainnet and any production account properly. See for instance MyCrypto \"Protecting Yourself and Your Funds\" guide. \"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)\" Private key to copy : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 200 Eth (200000000000000000000 Wei) \"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)\" Private key to copy : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 Initial balance : 90000 Eth (90000000000000000000000 Wei) \"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)\" Private key to copy : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance : 90000 Eth (90000000000000000000000 Wei)","s":"test_accounts","u":"/global/test_accounts","h":"","p":2560},{"i":2563,"t":"You can use Besu to develop enterprise applications requiring secure, high-performance transaction processing in a private network. A private network is a network not connected to Ethereum Mainnet or an Ethereum testnet. Private networks typically use a different chain ID and proof of authority consensus (QBFT, IBFT 2.0, or Clique). You can also create a local development network using proof of work (Ethash). Besu supports enterprise features including privacy and permissioning. Get started with the Developer Quickstart to rapidly generate local blockchain networks.","s":"Besu for private networks","u":"/private-networks","h":"","p":2562},{"i":2565,"t":"The following diagram outlines the high-level architecture of Besu for private networks. If you have any questions about Besu for private networks, ask on the besu channel on Discord.","s":"Architecture","u":"/private-networks","h":"#architecture","p":2562},{"i":2567,"t":"A permissioned network enables node permissioning and account permissioning, allowing only specified nodes and accounts to access the network. Permissioning is not privacy In peer-to-peer networks, node permissioning enforces rules on nodes you control. Permissioning requires a distributed network of trust across the network where participants agree to follow the rules. One bad actor can decide not to follow the rules. Nodes can take action to prevent the bad actor adding to the chain but they cannot prevent the bad actor from allowing access to the chain. Besu also implements privacy.","s":"Permissioning","u":"/private-networks/concepts/permissioning","h":"","p":2566},{"i":2569,"t":"Use node permissioning to restrict access to known participants only.","s":"Node permissioning","u":"/private-networks/concepts/permissioning","h":"#node-permissioning","p":2566},{"i":2571,"t":"Use account permissioning to: Enforce onboarding or identity requirements. Suspend accounts. Restrict the actions an account can perform.","s":"Account permissioning","u":"/private-networks/concepts/permissioning","h":"#account-permissioning","p":2566},{"i":2573,"t":"You can specify permissioning locally or onchain.","s":"Specify permissioning","u":"/private-networks/concepts/permissioning","h":"#specify-permissioning","p":2566},{"i":2575,"t":"Local permissioning works at the node level. Each node in the network has a permissions configuration file. Local permissioning affects your node but not the rest of the network. Use local permissioning to restrict use of your node (that is, the resources under your control). For example, customers able to access your node. Local permissioning does not require coordination with the rest of the network and you can act immediately to protect your node. Your rules are not enforced in blocks produced by other nodes.","s":"Local","u":"/private-networks/concepts/permissioning","h":"#local","p":2566},{"i":2577,"t":"Onchain permissioning works through a smart contract on the network. Specifying permissioning onchain enables all nodes to read and update permissioning configuration from one location. Onchain permissioning requires coordination to update the rules. The network might not be able to act immediately (for example, the smart contract might enforce a minimum of number of votes before changing permissioning rules). When you update onchain permissioning, the update applies across the network and new blocks abide by the updated rules. For example, blocked accounts can no longer add transactions to the chain. The following diagram illustrates applying local and onchain permissioning rules.","s":"Onchain","u":"/private-networks/concepts/permissioning","h":"#onchain","p":2566},{"i":2579,"t":"This section provides background information and context about private network features. The following features are shared with public networks and the content can be found in the public networks section: Transactions: Transaction types Transaction pool Transaction validation Network ID and chain ID Events and logs Genesis file Node keys","s":"Concepts","u":"/private-networks/concepts","h":"","p":2578},{"i":2582,"t":"Onchain permissioning uses smart contracts to store and administer the node, account, and admin allowlists. Using onchain permissioning enables all nodes to read the allowlists from a single source, the blockchain. danger When using onchain account permissioning, a node checks permissions when importing blocks. Meaning, a node only imports blocks in which all transactions are from authorized senders. If you disable onchain account permissioning and your node accepts blocks without enforcing this rule, your node cannot re-synchronize with other nodes that enforce onchain account permissioning rules (your node goes into forked state). note Custom smart contracts and dapps can be implemented to work with onchain permissioning.","s":"Onchain permissioning","u":"/private-networks/concepts/permissioning/onchain","h":"","p":2581},{"i":2584,"t":"caution The permissioning contract has multiple interfaces, and each interface maps to a specific version of the Enterprise Ethereum Alliance Client Specification. Ensure that you specify the permissioning contract interface being used when starting Besu.","s":"Permissioning contracts","u":"/private-networks/concepts/permissioning/onchain","h":"#permissioning-contracts","p":2581},{"i":2586,"t":"Permissioning implements three allowlists: Accounts, which can submit transactions to the network. Nodes, which can join the network. Admins, which are accounts able to update the accounts and nodes allowlists. Using account permissioning and privacy Account permissioning is incompatible with random key signing for privacy marker transactions. If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist. tip If nodes are not connecting as expected, set the log level to TRACE and search for messages containing Node permissioning to identify the issue. Ensure the --p2p-host command line option has been correctly configured for all nodes with the externally accessible address. If you change your network configuration, you may need to update the node allowlist.","s":"Allowlists","u":"/private-networks/concepts/permissioning/onchain","h":"#allowlists","p":2581},{"i":2588,"t":"When a node joins the network, the node connects to the bootnodes until it synchronizes to the chain head, regardless of node permissions. After synchronization, the Account Rules and Node Rules smart contracts apply the permissioning rules. If a synchronized node loses all peer connections (that is, it has zero peers), it reconnects to the bootnodes to rediscover peers. info All bootnodes must be on the nodes allowlist.","s":"Bootnodes","u":"/private-networks/concepts/permissioning/onchain","h":"#bootnodes","p":2581},{"i":2590,"t":"You can extend Besu functionality by building Java plugins or using existing open source Besu plugins. Use the Plugin API to take data from any Besu network, public or permissioned, and feed it into an application or system. For example, create a plugin to add more monitoring functionality or stream event data to a third-party application. The API exposes data about the following components: Blocks Balances Transactions Smart contracts Execution results Logs Syncing state. The plugin API provides access to interfaces allowing you to build the plugin. info View the plugin API webinar for an example of how to build a plugin. For more information about the available interfaces, see the Plugin API Javadoc.","s":"Plugins","u":"/private-networks/concepts/plugins","h":"","p":2589},{"i":2592,"t":"To allow Besu to access and use the plugin, copy the plugin (.jar) to the plugins directory. caution If not already present, you must create the plugins directory one directory level below (../) the besu executable. Each plugin in the directory has the following lifecycle events: Register - Executed when Besu starts. Besu checks plugin compatibility and registers plugins. Start - Plugins start after being successfully registered. Stop - Besu stops plugins. note The order in which Besu calls plugins during lifecycle events is not guaranteed.","s":"Install plugins","u":"/private-networks/concepts/plugins","h":"#install-plugins","p":2589},{"i":2594,"t":"You can define complex permissioning solutions by building a plugin that extends Besu functionality. The plugin API provides a PermissioningService interface that currently supports connection permissioning and message permissioning.","s":"Permissioning plugin","u":"/private-networks/concepts/permissioning/plugin","h":"","p":2593},{"i":2596,"t":"Use connection permissioning when deciding whether to restrict node access to known participants only.","s":"Connection permissioning","u":"/private-networks/concepts/permissioning/plugin","h":"#connection-permissioning","p":2593},{"i":2598,"t":"Use message permissioning to propagate different types of devP2P messages to particular nodes. For example, this can be used to prevent pending transactions from being forwarded to other nodes.","s":"Message permissioning","u":"/private-networks/concepts/permissioning/plugin","h":"#message-permissioning","p":2593},{"i":2600,"t":"To enable permissioning in your plugin, implement the PermissioningService interface and register your providers. @AutoService(BesuPlugin.class) public class TestPermissioningPlugin implements BesuPlugin { PermissioningService service; @Override public void register(final BesuContext context) { service = context.getService(PermissioningService.class).get(); } @Override public void start() { service.registerNodePermissioningProvider((sourceEnode, destinationEnode) -> { // perform logic for node permissioning return true; }); service.registerNodeMessagePermissioningProvider((destinationEnode, code) -> { // perform logic for message permissioning return true; }); } @Override public void stop() {} }","s":"Register your plugin","u":"/private-networks/concepts/permissioning/plugin","h":"#register-your-plugin","p":2593},{"i":2602,"t":"warning Public key infrastructure (PKI) support is an early access feature, and functionality and options may be updated between releases. Besu's public key infrastructure allows you to use certificates issued by a trusted authority to manage node and account identities in the following ways: Node permissioning - Only authorized nodes can connect to other nodes in the network using TLS for the P2P communication. Block proposal permissioning - Only blocks proposed by authorized validators are accepted. Supported keystore and truststore formats used to store the certificates include PKCS11, PKCS12, and JKS.","s":"Public key infrastructure","u":"/private-networks/concepts/pki","h":"","p":2601},{"i":2604,"t":"Allow TLS communication between nodes by using certificates issued by a trusted authority to connect to other authorized nodes in the network. When receiving connection requests, the incoming connection must be from another authorized node. Similarly, when connecting to a node the initiator ensures that the remote node is authorized to participate in the network. Configure TLS for the P2P communication using the Besu command line options.","s":"Node permissioning","u":"/private-networks/concepts/pki","h":"#node-permissioning","p":2601},{"i":2606,"t":"caution Only private networks using the QBFT consensus protocol support block proposal permissioning. Use certificates issued by a trusted authority to ensure only authorized validator nodes can propose new blocks in the network. The block hash is signed by the validator private certificate and included in the header of the proposed block as a CMS (Cryptographic Message Syntax). This is used by other validators to verify that the proposer is authorized to create a block in the network. Configure block proposal permissioning using the Besu command line options.","s":"Block proposal permissioning","u":"/private-networks/concepts/pki","h":"#block-proposal-permissioning","p":2601},{"i":2608,"t":"Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) consensus protocols. PoA consensus protocols work when participants know each other and there is a level of trust between them. For example, in a permissioned consortium network. PoA consensus protocols have faster block times and a much greater transaction throughput than the Ethash proof of work consensus protocol used on the Ethereum Mainnet. In QBFT, IBFT 2.0, or Clique, a group of nodes in the network act as validators (QBFT and IBFT 2.0) or signers (Clique). The existing nodes in the signer/validator pool vote to add nodes to or remove nodes from the pool. note For the rest of this page, the term validator is used to refer to signers and validators.","s":"Proof of authority consensus","u":"/private-networks/concepts/poa","h":"","p":2607},{"i":2610,"t":"Properties to consider when comparing QBFT, IBFT 2.0, and Clique are: Immediate finality. Minimum number of validators. Liveness. Speed.","s":"Properties","u":"/private-networks/concepts/poa","h":"#properties","p":2607},{"i":2612,"t":"QBFT and IBFT 2.0 have immediate finality; there are no forks and all valid blocks get included in the main chain. Clique does not have immediate finality. Implementations using Clique must be aware of forks and chain reorganizations occurring.","s":"Immediate finality","u":"/private-networks/concepts/poa","h":"#immediate-finality","p":2607},{"i":2614,"t":"To be Byzantine fault tolerant, QBFT and IBFT 2.0 require a minimum of four validators. Clique can operate with a single validator but operating with a single validator offers no redundancy if the validator fails. tip Byzantine fault tolerant is the ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/concepts/poa","h":"#minimum-number-of-validators","p":2607},{"i":2616,"t":"Clique is more fault tolerant than QBFT and IBFT 2.0. Clique tolerates up to half of the validators failing. QBFT and IBFT 2.0 networks require greater than or equal to two-thirds of validators to be operating to create blocks. For example, an QBFT and IBFT 2.0 network of: Four to five validators tolerates one unresponsive validator. Six to eight validators tolerates two unresponsive validators. Networks with three or less validators can produce blocks but do not guarantee finality when operating in adversarial environments. caution We recommend using QBFT or IBFT 2.0 networks with at least four nodes in production environments.","s":"Liveness","u":"/private-networks/concepts/poa","h":"#liveness","p":2607},{"i":2618,"t":"Reaching consensus and adding blocks is faster in Clique networks. For Clique, the probability of a fork increases as the number of validators increases. For QBFT and IBFT 2.0, the time to add new blocks increases as the number of validators increases.","s":"Speed","u":"/private-networks/concepts/poa","h":"#speed","p":2607},{"i":2620,"t":"By default, each participant in a privacy network uses its own Besu and Tessera node. Multi-tenancy allows multiple participants to use the same Besu and Tessera node. Each participant is a tenant, and the operator is the owner of the Besu and Tessera node. info The operator is responsible for configuring multi-tenancy, and has access to all tenant data. tip Ensure the multi-tenant Tessera node client API is configured to allow access only by the multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode. If not configured to allow access only by the multi-tenant Besu node, other Tessera clients, including other Besu nodes, might be able to access tenant data. To secure access, you can configure TLS between Besu and Tessera with the WHITELIST trust mode. Multi-tenancy validates that tenants have permission to use the specified HTTP or WebSocket JSON-RPC requests, and the tenant has access to the requested privacy data. Private data is isolated and each tenant uses a JSON Web Token (JWT) for authentication. You can create the JWT either externally or internally.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/multi-tenancy","h":"","p":2619},{"i":2622,"t":"Flexible privacy groups use smart contracts to store and maintain the group membership. You can add and remove members to and from flexible privacy groups. tip Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups. danger Flexible privacy groups are an early access feature. Don't use in production networks. The flexible privacy group interfaces might change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions. We don't recommended creating flexible privacy groups in a chain with existing offchain privacy groups.","s":"Flexible privacy groups","u":"/private-networks/concepts/privacy/flexible-privacy","h":"","p":2621},{"i":2624,"t":"The privacy group management contract bytecode is hard-coded into Besu and when you create a privacy group, the contract bytecode is part of the genesis state of the privacy group. caution All members of a flexible privacy group must be using the same version of Besu. If using different versions, the private state within the privacy group may become inconsistent. In the default implementation of the group management contract, the signer of the private transaction that creates the privacy group is also the owner of the group. Only the owner can add and remove participants, and upgrade the management contract. The owner is identified by the signing key. Transactions to add and remove participants, or upgrade the management contract, must be signed by the same key that signed the group creation transaction.","s":"Group management contracts","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#group-management-contracts","p":2621},{"i":2626,"t":"When creating a flexible privacy group, generate the privacy group ID for the group outside of Besu and pass the ID as a parameter. The web3js-quorum library generates a unique privacy group ID and passes the ID to Besu when creating a privacy group. caution When generating a privacy group ID, you must ensure the ID is unique across all network participants. If you create a privacy group with an existing privacy group ID, the existing privacy group is overwritten. To ensure unique privacy group IDs, we recommend using 256-bit SecureRandom.","s":"Flexible privacy group IDs","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#flexible-privacy-group-ids","p":2621},{"i":2628,"t":"When using multi-tenancy with flexible privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group. Using multi-tenancy with flexible privacy groups is more complex than with offchain privacy groups because users may be added and removed from flexible privacy groups. When a user is added to a privacy group, they get access to all existing data in the privacy group. After being removed from a privacy group, a user retains access to already existing data in the privacy group, up to the block containing the privacy marker transaction (PMT) that removed them (the removal block). A removed user doesn't have access to data in the privacy group that happens after they were removed. In particular, when multi-tenancy is enabled and a user requests access to a privacy group they were once a member of but later removed from, Besu allows the user access to the following functionality and data associated with the privacy group: Private transactions using priv_getTransaction and private transaction receipts using priv_getTransactionReceipt from blocks up to (and including) the removal block. note A removed group member may have access to some private transactions after the removal PMT in the same block. Using priv_call on blocks up to (and including) the removal block. Private logs using priv_getLogs for blocks up to (and including) the removal block. When the toBlock is greater than the removal block, priv_getLogs still returns logs up to the removal block. note When a user is removed from a privacy group, any log filters they've created are also removed and can't be accessed. A user can only create and access filters for a privacy group they are currently a member of. All other PRIV API methods fail for the removed group member.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#multi-tenancy","p":2621},{"i":2630,"t":"You can define your own strategy for private transactions by building a plugin that extends Besu functionality. The plugin can take many forms, but it must provide Besu with a private transaction when required. danger The privacy plugin is an early access feature and plugin interfaces are subject to change between releases.","s":"Privacy plugin","u":"/private-networks/concepts/privacy/plugin","h":"","p":2629},{"i":2632,"t":"Enable the privacy plugin by starting Besu and including the --Xprivacy-plugin-enabled command line option. The registered plugin must implement the PrivacyPluginPayloadProvider interface.","s":"Configuration","u":"/private-networks/concepts/privacy/plugin","h":"#configuration","p":2629},{"i":2634,"t":"The privacy plugin must define the privacy marker transaction (PMT) payload. Use the payload to retrieve the contents of the private transaction which could be a link to a location in an enclave, or an encrypted form of the private payload itself. Besu doesn't need to know how the private transaction is distributed, it just needs to know what the private transaction for the PMT is.","s":"Use the payload provider interface","u":"/private-networks/concepts/privacy/plugin","h":"#use-the-payload-provider-interface","p":2629},{"i":2636,"t":"When submitting a private transaction using eea_sendRawTransaction, the signed transaction must be sent to 0x000000000000000000000000000000000000007a to indicate which privacy precompiled contract is being used. The transaction flow is as follows: The JSON-RPC endpoint passes the private transaction to the private transaction manager (for example Tessera). The private transaction manager sends the private transaction to the privacy plugin. The plugin decides what data to store onchain in the payload, for example the encrypted and serialized private transaction. The plugin returns what needs to be stored in the payload for the PMT. The private transaction handler creates a PMT for the private transaction, and propagates the PMT using devP2P in the same way as a public Ethereum transaction.","s":"Send transactions","u":"/private-networks/concepts/privacy/plugin","h":"#send-transactions","p":2629},{"i":2638,"t":"The process of mining transactions happens in reverse to sending transactions. The Mainnet transaction processor processes the PMT in the same way as any other public transaction. On nodes containing the privacy precompile contract specified in the to attribute of the PMT, the Mainnet transaction processor passes the PMT to the privacy precompile contract. note Nodes receiving the PMT that do not contain the specified privacy precompile contract will ignore the PMT. The privacy precompile contract queries the plugin for the private transaction using the PMT. The privacy precompile contract passes the private transaction to the private transaction manager. The privacy group ID specifies the private world state to use. The private transaction manager executes the transaction. The private transaction manager can read and write to the private world state, and read from the public world state.","s":"Mine transactions","u":"/private-networks/concepts/privacy/plugin","h":"#mine-transactions","p":2629},{"i":2640,"t":"An additional extension is available to help you define how PMTs are signed. Currently, Besu supports fixed or random key signing for PMTs. The extension allows you to use a more dynamic approach, for example different keys for different groups. Your plugin needs to register the PrivateMarkerTransactionFactory interface which is called before submitting a PMT to the transaction pool. The responsibility then lies with the plugin to sign and serialize the PMT.","s":"Transaction factory","u":"/private-networks/concepts/privacy/plugin","h":"#transaction-factory","p":2629},{"i":2642,"t":"To enable Besu to use your privacy plugin, implement the PrivacyPluginService interface and call setPayloadProvider. @AutoService(BesuPlugin.class) public class TestPrivacyPlugin implements BesuPlugin { private PrivacyPluginService service; @Override public void register(BesuContext context) { service = context.getService(PrivacyPluginService.class).get(); } @Override public void start() { service.setPayloadProvider(new PrivacyPluginPayloadProvider() { @Override public Bytes generateMarkerPayload(PrivateTransaction privateTransaction, String privacyUserId) { // perform logic to serialize the payload of the marker transaction // in this example we are serialising the private transaction using rlp https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/ return org.hyperledger.besu.ethereum.privacy.PrivateTransaction.serialize(privateTransaction).encoded(); } @Override public Optional getPrivateTransactionFromPayload(Transaction transaction) { // perform logic to deserialize payload from the marker transaction final BytesValueRLPInput bytesValueRLPInput = new BytesValueRLPInput(transaction.getPayload(), false); return Optional.of(org.hyperledger.besu.ethereum.privacy.PrivateTransaction.readFrom(bytesValueRLPInput)); } }); } @Override public void stop() {} }","s":"Register your plugin","u":"/private-networks/concepts/privacy/plugin","h":"#register-your-plugin","p":2629},{"i":2644,"t":"A privacy group is a group of nodes identified by a unique privacy group ID by Tessera. Tessera stores each private transaction with the privacy group ID. The Besu nodes maintain the public world state for the blockchain and a private state for each privacy group. The private states contain data that is not shared in the globally replicated world state. caution The privacy group implementations described below are offchain privacy groups and cannot have their group membership updated. Flexible privacy groups are an early access feature.","s":"Privacy groups","u":"/private-networks/concepts/privacy/privacy-groups","h":"","p":2643},{"i":2646,"t":"Besu implements two types of privacy: Enterprise Ethereum Alliance (EEA) privacy, where private transactions include privateFor as the recipient. Besu-extended privacy, where private transactions include privacyGroupId as the recipient. Both privacy types create privacy groups and store private transactions with their privacy group in Tessera. note For clarity, the Tessera nodes are not shown in the previous diagram. To send private transactions, each Besu node must have an associated Tessera node.","s":"Privacy types","u":"/private-networks/concepts/privacy/privacy-groups","h":"#privacy-types","p":2643},{"i":2648,"t":"A contract in a privacy group: Can read or write to a contract in the same privacy group. Can read from the public state including public contracts. Cannot access contracts from a different privacy group. A public contract cannot access a private contract.","s":"Access between states","u":"/private-networks/concepts/privacy/privacy-groups","h":"#access-between-states","p":2643},{"i":2650,"t":"In the privacy implementation complying with the EEA Client Specification the group of nodes specified by privateFrom and privateFor form a privacy group with a unique privacy group ID provided by Tessera. The previous diagram illustrates two privacy groups enabling: A, B, and C to send transactions that are private from D. A, C, and D to send transactions that are private from B. Using EEA-compliant privacy, to send private transactions between A, B, and C, A initializes a contract in a private transaction with B and C specified as the privateFor and A specified as the privateFrom. Initializing the contract creates a privacy group consisting of A, B, and C. For the ABC private state to remain consistent, A, B, and C must be included on transactions (as either privateFrom or privateFor) even if they are between only two of the three parties. To send private transactions between A, C, and D, C initializes a different contract in a private transaction with A and D specified as the privateFor and C specified as the privateFrom. Initializing the contract creates a privacy group consisting of A, C, and D. For the ACD private state to remain consistent, A, C, and D must be included on transactions (as either privateFrom or privateFor) even if they are between only two of the three parties.","s":"Enterprise Ethereum Alliance privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#enterprise-ethereum-alliance-privacy","p":2643},{"i":2652,"t":"The Besu-extended privacy implementation creates a privacy group using priv_createPrivacyGroup with private transactions sent to the privacy group ID. Using the same privacy groups as in the previous example. Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a privacy group consisting of A, B, and C. The privacy group ID is specified when sending private transactions and A, B, and C are recipients of all private transactions sent to the privacy group. To send private transactions between A, C, and D, A creates a privacy group consisting of A, C, and D. The privacy group ID of this group is specified when sending private transactions with A, C, and D as recipients.","s":"Besu-extended privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#besu-extended-privacy","p":2643},{"i":2654,"t":"When using multi-tenancy with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#multi-tenancy","p":2643},{"i":2656,"t":"Private transactions have the same parameters as public Ethereum transactions, with the following additions: privateFrom - The Tessera public key of the transaction sender. One of the following: privateFor - The Tessera public keys of the transaction recipients. privacyGroupId - The privacy group to receive the transaction. restriction - Whether the private transaction is restricted or unrestricted: restricted - Only the nodes participating in the transaction receive and store the payload of the private transaction. unrestricted - All nodes in the network receive the payload of the private transaction, but only the nodes participating in the transaction can read the transaction. info Besu implements restricted private transactions only. The gas and gasPrice are used by the privacy marker transaction (PMT), not the private transaction itself. info Because gas isn't required in private transactions, inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks. Ensure your network has a mechanism to establish trust offchain. You can create and send private transactions.","s":"Private transactions","u":"/private-networks/concepts/privacy/private-transactions","h":"","p":2655},{"i":2658,"t":"Besu and Tessera nodes both have public/private key pairs identifying them. A Besu node sending a private transaction to a Tessera node signs the transaction with the Besu node private key. The privateFrom and privateFor parameters specified in the RLP-encoded transaction string for eea_sendRawTransaction are the public keys of the Tessera nodes sending and receiving the transaction. info The mapping of Besu node addresses to Tessera node public keys is offchain. That is, the sender of a private transaction must know the Tessera node public key of the recipient.","s":"Besu and Tessera keys","u":"/private-networks/concepts/privacy/private-transactions","h":"#besu-and-tessera-keys","p":2655},{"i":2660,"t":"A nonce is the number of previous transactions made by the sender. Private transaction processing involves two transactions: the private transaction distributed to involved participants, and the privacy marker transaction (PMT) included on the public blockchain. Each of these transactions has its own nonce. Since the PMT is a public transaction, the PMT nonce is the public nonce for the account.","s":"Nonces","u":"/private-networks/concepts/privacy/private-transactions","h":"#nonces","p":2655},{"i":2662,"t":"Besu maintains separate private states for each privacy group. The private transaction nonce for an account is specific to the privacy group. That is, the nonce for account A for privacy group ABC is different to the nonce for account A for privacy group AB.","s":"Private transaction nonce","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-transaction-nonce","p":2655},{"i":2664,"t":"Unlike public transactions, private transactions are not submitted to the transaction pool. The private transaction is distributed directly to the participants in the transaction, and the PMT is submitted to the transaction pool. Unlike public transaction nonces, private transaction nonces aren't validated when the private transaction is submitted. If a private transaction has an incorrect nonce, the PMT is still valid and is added to a block. However, in this scenario, the private transaction execution fails when processing the PMT for the private transaction with the incorrect nonce. The following private transaction flow illustrates when nonce validation occurs: Submit a private transaction with a nonce value. The private transaction is distributed to all participants in the privacy group. The PMT is created and submitted to the transaction pool with a nonce of 0 if using one-time accounts. If using a specific account with --privacy-marker-transaction-signing-key-file, the public nonce for that account is obtained and used for the PMT. The PMT is mined and included in the block. After the block containing the PMT is imported, and the PMT is processed, the private transaction is retrieved from the private transaction manager and executed. If the private transaction was submitted with a correct nonce in step 1, the nonce is validated as correct. If an incorrect nonce was submitted, the private transaction execution fails.","s":"Private nonce validation","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-validation","p":2655},{"i":2666,"t":"In Besu, you call eth_getTransactionCount to get a nonce, then use that nonce with eea_sendRawTransaction to send a private transaction. However, when you send multiple transactions in row, if a subsequent call to getTransactionCount happens before a previous transaction is processed, you can get the same nonce again. You can manage private nonces in multiple ways: Let Besu handle it. You just need to wait long enough between calls to sendRawTransaction for the transactions to process. The current window is around 1.5 seconds, depending on block time. Public transactions deal with this issue, but the window is shorter, since you can use the transaction pool to take into account pending transactions (by using eth_getTransactionCount(\"pending\")). For private transactions, the window is longer because private transactions aren't submitted to the transaction pool. You must wait until the private transaction's corresponding PMT is included in a block. Manage the nonce yourself, by keeping track of and providing the nonce at each call. We recommend this if you're sending many transactions that are independent of each other. note You can use priv_getTransactionCount or priv_getEeaTransactionCount to get the nonce for an account for the specified privacy group or participants. tip The web3js-quorum library includes an example of nonce management when sending concurrent private transactions. The example calculates the correct nonces for the private transactions and PMTs outside of Besu.","s":"Private nonce management","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-management","p":2655},{"i":2668,"t":"In Besu, privacy refers to the ability to keep transactions private between the involved participants. Other participants cannot access the transaction content or list of participants. danger For production environments requiring private transactions: We recommend using a network with a consensus mechanism supporting transaction finality. For example, IBFT 2.0. Tessera must be highly available and run in a separate instance to Besu. Using private transactions with pruning or fast sync isn't supported.","s":"Privacy","u":"/private-networks/concepts/privacy","h":"","p":2667},{"i":2670,"t":"Besu uses a private transaction manager, Tessera, to implement privacy. Each Besu node that sends or receives private transactions requires an associated Tessera node. Private transactions pass from the Besu node to the associated Tessera node. The Tessera node encrypts and directly distributes (that is, point-to-point) the private transaction to the Tessera nodes participating in the transaction. By default, each participant in a privacy-enabled network uses its own Besu and Tessera node. Multi-tenancy allows more than one participant to use the same Besu and Tessera node. tip Private Transaction Managers are also known as Enclaves.","s":"Private transaction manager","u":"/private-networks/concepts/privacy","h":"#private-transaction-manager","p":2667},{"i":2672,"t":"When enabling privacy in a private network, there's an assumed level of trust among the node operators, since all are members of the private network. caution Inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks because gas isn't required in private transactions. In contrast, gas is required in Ethereum Mainnet and public testnets because they are trustless environments. Privacy-enabled networks should have a mechanism to establish trust offchain. Node operators should be informed on: Guidelines for use, responsibilities, and good behavior. Smart contract security, so contracts deployed on the network use resources efficiently. Consequences for malicious activity. Privacy-enabled networks should run development and test environments that closely resemble production, so contracts can be tested, and potential issues can be found before they're deployed in production.","s":"Privacy-enabled networks","u":"/private-networks/concepts/privacy","h":"#privacy-enabled-networks","p":2667},{"i":2674,"t":"In v1.4, using private transactions in a network using a consensus mechanism where forks occur (that is, PoW algorithms or Clique) is an early access feature. Do not use private transactions in production environments using consensus mechanisms where forks occur.","s":"Reorg-compatible privacy","u":"/private-networks/concepts/privacy","h":"#reorg-compatible-privacy","p":2667},{"i":2676,"t":"Processing private transactions involves the following: Precompiled contract: A smart contract compiled from the source language to EVM bytecode and stored by an Ethereum node for later execution. Privacy marker transaction (PMT): A public Ethereum transaction with a payload of the enclave key. The enclave key is a pointer to the private transaction in Tessera. The to attribute of the PMT is the address of the privacy precompiled contract. The PMT is signed with a random key or the key specified on the command line. Private transaction processing is illustrated and described in the following diagram. Submit a private transaction using eea_sendRawTransaction. The signed transaction includes transaction parameters specific to private transactions, including: privateFor or privacyGroupId, which specifies the list of recipients. privateFrom, which specifies the sender. restriction, which specifies the transaction is restricted to the transaction participants. The JSON-RPC endpoint passes the private transaction to the Private Transaction Handler. The Private Transaction Handler sends the private transaction to Tessera. Tessera distributes the private transaction directly (that is, point-to-point) to the Tessera nodes specified in privateFor or belonging to the privacy group identified by privacyGroupId. All recipient Tessera nodes store the transaction. Tessera associates the stored transaction with the transaction hash and privacy group ID. Tessera returns the transaction hash to the Private Transaction Handler. The Private Transaction Handler creates a PMT for the private transaction. The Private Transaction Handler propagates the PMT using devP2P in the same way as any other public Ethereum transaction. tip If you want to sign the PMT outside of Besu, use priv_distributeRawTransaction instead of eea_sendRawTransaction. Besu mines the PMT into a block and the PMT is distributed to all Ethereum nodes in the network. The Mainnet Transaction Processor processes the PMT in the same way as any other public transaction. On nodes containing the privacy precompile contract specified in the to attribute of the PMT, the Mainnet Transaction Processor passes the PMT to the privacy precompile contract. note Nodes receiving the PMT that don't contain the privacy precompile contract ignore the PMT. The privacy precompile contract queries Tessera for the private transaction and privacy group ID using the transaction hash. The privacy precompile contract passes the private transaction to the Private Transaction Processor. The privacy group ID specifies the private world state to use. The Private Transaction Processor executes the transaction. The Private Transaction Processor can read and write to the private world state, and read from the public world state. Recommendations We recommend using a network with a consensus mechanism supporting transaction finality. For example, IBFT 2.0. Tessera must be highly available and run in a separate instance to Besu. Using private transactions with pruning or fast sync is not supported.","s":"Private transaction processing","u":"/private-networks/concepts/privacy/private-transactions/processing","h":"","p":2675},{"i":2678,"t":"Get started with the Developer Quickstart. Use the quickstart to rapidly generate local blockchain networks. You can also install the following: Docker image Binaries","s":"Installation options","u":"/private-networks/get-started/install","h":"","p":2677},{"i":2680,"t":"If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the binary or Docker image for more stable versions. View the Wiki for instructions to install Besu from source.","s":"Build from source","u":"/private-networks/get-started/install","h":"#build-from-source","p":2677},{"i":2684,"t":"Homebrew Java JDK caution Besu supports: MacOS High Sierra 10.13 or later versions. Java 21+. You can install Java using brew install openjdk@21. Alternatively, you can manually install the Java JDK.","s":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites","p":2681},{"i":2686,"t":"To install Besu using Homebrew: brew tap hyperledger/besu brew install hyperledger/besu/besu To upgrade an existing Besu installation using Homebrew: brew upgrade hyperledger/besu/besu note If you've upgraded your MacOS version between installing and upgrading Besu, when running brew upgrade hyperledger/besu/besu you may be prompted to reinstall command line tools with xcode-select --install. note When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command brew tap --repair. To display the Besu version and confirm installation: besu --version To display Besu command line help: besu --help","s":"Install (or upgrade) using Homebrew","u":"/private-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":2681},{"i":2689,"t":"Java JDK 17+ Linux open file limit If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ulimit. If the open files limit is not high enough, a Too many open files RocksDB exception occurs. tip We recommend installing jemalloc to reduce memory usage. If using Ubuntu, you can install it with the command: apt install libjemalloc-dev.","s":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":2681},{"i":2691,"t":"Download the Besu packaged binaries. Unpack the downloaded files and change into the besu- directory. Display Besu command line help to confirm installation: bin/besu --help","s":"Install from packaged binaries","u":"/private-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":2681},{"i":2693,"t":"Private network system requirements depend on many factors, including: Size of the world state for the network. Number of transactions submitted to the network. Block gas limit. Number and complexity of JSON-RPC, PubSub, or GraphQL queries handled by the node. Participation in private networks is typically restricted in some way, so the volume of traffic is much lower than on Mainnet, resulting in lower system requirements.","s":"System requirements","u":"/private-networks/get-started/system-requirements","h":"","p":2692},{"i":2695,"t":"To determine system requirements, check CPU and disk space requirements using Prometheus. Grafana provides a sample dashboard for Besu.","s":"Determining system requirements","u":"/private-networks/get-started/system-requirements","h":"#determining-system-requirements","p":2692},{"i":2697,"t":"Depending on your environment and network setup, the minimum Java Virtual Machine (JVM) memory requirement for private networks is 4 GB. JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs.","s":"Java Virtual Machine size","u":"/private-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":2692},{"i":2699,"t":"If you set up your own VM locally using a VM manager such as VirtualBox: Ensure you enable Intel Virtualization Technology (VTx) and Virtualization Technology for Directed I/O (VT-d) in the BIOS settings. On Windows, you might need to disable Hyper-V in the Windows Feature list. We recommend you create a VM with the following attributes: Memory size: Set to 6 GB (recommended) Create a virtual hard disk with at least 10 GB (20 GB recommended) Virtual hard disk file type: VDI (if you need to share it with other apps, use VHD) (Optional) You can create a shared directory to copy block files or genesis files from the host computer to the VM. For details on how to create a shared directory, see \"Share Folders\" in the Oracle VirtualBox documentation.","s":"VM requirements","u":"/private-networks/get-started/system-requirements","h":"#vm-requirements","p":2692},{"i":2701,"t":"Use local SSD storage for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup. You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.","s":"Disk type","u":"/private-networks/get-started/system-requirements","h":"#disk-type","p":2692},{"i":2703,"t":"Besu provides a Docker image to run a Besu node in a Docker container. Use this Docker image to run a single Besu node without installing Besu.","s":"Run Besu from a Docker image","u":"/private-networks/get-started/install/run-docker-image","h":"","p":2702},{"i":2705,"t":"Docker MacOS or Linux caution The Docker image does not run on Windows.","s":"Prerequisites","u":"/private-networks/get-started/install/run-docker-image","h":"#prerequisites","p":2702},{"i":2707,"t":"Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using --rpc-http-port, --p2p-port, --rpc-ws-port, --metrics-port, --graphql-http-port, and --metrics-push-port options. To run Besu exposing local ports for access: docker run -p :8545 -p :8546 -p :30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled note The examples on this page expose TCP ports only. To expose UDP ports, specify /udp at the end of the argument for the -p Docker subcommand option: docker run -p :/udp See the docker run -p documentation. To enable JSON-RPC HTTP calls to 127.0.0.1:8545 and P2P discovery on 127.0.0.1:13001: docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled","s":"Expose ports","u":"/private-networks/get-started/install/run-docker-image","h":"#expose-ports","p":2702},{"i":2709,"t":"danger Don't mount a volume at the default data path (/opt/besu). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching. To run a node that maintains the node state (key and database), --data-path must be set to a location other than /opt/besu and a storage volume mounted at that location. When running in a Docker container, --nat-method must be set to DOCKER or AUTO (default). Don't set --nat-method to NONE or UPNP. You can specify Besu environment variables with the Docker image instead of the command line options. docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest \"Unsupported address type exception\" When running Besu from a Docker image, you might get the following exception: Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime. This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker. Enable IPv6 support in Docker to allow outbound IPv6 traffic and allow connection with IPv6 peers.","s":"Start Besu","u":"/private-networks/get-started/install/run-docker-image","h":"#start-besu","p":2702},{"i":2711,"t":"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled: docker run -p 8546:8546 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu","s":"Run a node for testing","u":"/private-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":2702},{"i":2713,"t":"When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run docker container ls and docker volume ls to get the container and volume names. To stop a container: docker stop To delete a container: docker rm ","s":"Stop Besu and clean up resources","u":"/private-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":2702},{"i":2715,"t":"This section provides instructional content for private network features. The following features are shared with public networks and the content can be found in the public networks section: Configure and manage: Use a configuration file Configure high availability Configure mining Use the Besu API: Use JSON-RPC over HTTP, WS, and IPC Use RPC Pub/Sub over WS Use GraphQL over HTTP Authenticate JSON-RPC requests Access logs using JSON-RPC API Find and connect to peers: Configure static nodes Configure ports Manage peers Specify NAT method Configure Java: Install and update Java Pass JVM options Manage JVM memory Use Java Flight Recorder Develop dapps: Use Hardhat Use client libraries Troubleshoot: Use EVM tool Trace transactions","s":"How to","u":"/private-networks/how-to","h":"","p":2714},{"i":2717,"t":"Use the besu command with the required command line options to start a node.","s":"Start Besu","u":"/private-networks/get-started/start-node","h":"","p":2716},{"i":2719,"t":"Besu installed","s":"Prerequisites","u":"/private-networks/get-started/start-node","h":"#prerequisites","p":2716},{"i":2721,"t":"When connecting to a network other than the network previously connected to, you must either delete the local block data or use the --data-path option to specify a different data directory. To delete the local block data, delete the database directory in the besu/build/distribution/besu- directory.","s":"Local block data","u":"/private-networks/get-started/start-node","h":"#local-block-data","p":2716},{"i":2723,"t":"To define a genesis configuration, create a genesis file (for example, genesis.json) and specify the file using the --genesis-file option. When you specify --network=dev, Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with --network=dev has an empty bootnodes list by default. Predefined genesis configurations for named networks are in the Besu source files.","s":"Genesis configuration","u":"/private-networks/get-started/start-node","h":"#genesis-configuration","p":2716},{"i":2725,"t":"If you started Besu with the --rpc-http-enabled option, use cURL to call JSON-RPC API methods to confirm the node is running. eth_chainId returns the chain ID of the network. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' localhost:8545 eth_syncing returns the starting, current, and highest block. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}' localhost:8545 For example, after connecting to Mainnet, eth_syncing will return something similar to: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x2d0\", \"highestBlock\": \"0x66c0\" } }","s":"Confirm node is running","u":"/private-networks/get-started/start-node","h":"#confirm-node-is-running","p":2716},{"i":2727,"t":"To run a node that mines blocks at a rate suitable for testing purposes: besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --host-allowlist=\"*\" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir You can also use the following configuration file on the command line to start a node with the same options as above: network=\"dev\" miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" rpc-http-cors-origins=[\"all\"] host-allowlist=[\"*\"] rpc-ws-enabled=true rpc-http-enabled=true data-path=\"/tmp/tmpdata-path\" caution The following settings are a security risk in production environments: Enabling the HTTP JSON-RPC service (--rpc-http-enabled) and setting --rpc-http-host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. Setting --host-allowlist to \"*\" allows JSON-RPC API access from any host. Setting --rpc-http-cors-origins to \"all\" or \"*\" allows cross-origin resource sharing (CORS) access from any domain.","s":"Run a node for testing","u":"/private-networks/get-started/start-node","h":"#run-a-node-for-testing","p":2716},{"i":2729,"t":"To run a node on your private network specifying a genesis file and data directory: besu --genesis-file=/genesis.json --data-path= --rpc-http-enabled --bootnodes= Where is the path to the directory to save the chain data to. Ensure you configure a peer discovery method, such as bootnodes. note You might need to set --tx-pool-limit-by-account-percentage to 1. The default value is suitable for Mainnet, but may cause issues on private networks. Sync nodes for BFT If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync. Full sync is set by default.","s":"Run a node on a private network","u":"/private-networks/get-started/start-node","h":"#run-a-node-on-a-private-network","p":2716},{"i":2731,"t":"In a decentralized blockchain, data replicates between nodes so it is not lost. But backing up configuration and data ensures a smoother recovery from corrupted data or other failures.","s":"Backup and restore Besu","u":"/private-networks/how-to/backup","h":"","p":2730},{"i":2733,"t":"The genesis file for a network must be accessible on every node. We recommend storing the genesis file under source control.","s":"Genesis file","u":"/private-networks/how-to/backup","h":"#genesis-file","p":2730},{"i":2735,"t":"If installed locally, the default data location is the Besu installation directory. We recommend mounting a separate volume to store data. Use the --data-path command line option to pass the path to Besu. The default data location is the Besu installation directory, or /opt/besu/database if using the Besu Docker image. Having some data reduces the time to synchronize a new node. You can perform periodic backups of the data directory and send the data to your preferred backup mechanism. For example, cron job and rsync, archives to the cloud such as s3, or tar.gz archives.","s":"Data backups","u":"/private-networks/how-to/backup","h":"#data-backups","p":2730},{"i":2737,"t":"To restore data: If the node is running, stop the node. If required, move the data directory to another location for analysis. Restore the data from your last known good backup to the same directory. Ensure user permissions are valid so you can read from and write to the data directory. Restart the node.","s":"Data restores","u":"/private-networks/how-to/backup","h":"#data-restores","p":2730},{"i":2739,"t":"If log messages signify a corrupt database, the cleanest way to recover is: Stop the node. Restore the data from a previous backup. Restart the node.","s":"Corrupted data","u":"/private-networks/how-to/backup","h":"#corrupted-data","p":2730},{"i":2741,"t":"When restarting Besu, accidentally using an earlier version of Besu might risk corrupting your database. To protect against incompatibility between versions, set the --version-compatibility-protection option to true.","s":"Prevent accidental downgrade","u":"/private-networks/how-to/backup","h":"#prevent-accidental-downgrade","p":2730},{"i":2743,"t":"The process for finding peers after restarting is the same as for finding peers after upgrading and restarting.","s":"Find peers after restarting","u":"/private-networks/how-to/backup","h":"#find-peers-after-restarting","p":2730},{"i":2745,"t":"You can use bootnodes to initially discover peers. Bootnodes are regular nodes used to discover other nodes. In private networks for development or testing purposes, specify at least one bootnode. In production networks, configure two or more nodes as bootnodes. tip Bootnodes and static nodes are parallel methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes. To find peers, configure one or more bootnodes. To configure a specific set of peer connections, use static nodes. Mainnet and public testnets For Mainnet and the Sepolia and Holesky testnets, Besu has an internal list of enode URLs and uses this list automatically when you specify the --network option.","s":"Configure bootnodes","u":"/private-networks/how-to/configure/bootnodes","h":"","p":2744},{"i":2747,"t":"To start a node, specify a bootnode enode for P2P discovery, using the --bootnodes option. besu --genesis-file=privateNetworkGenesis.json --data-path=nodeDataPath --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 The default host and port advertised to other peers for P2P discovery is 127.0.0.1:30303. To specify a different host or port, use the --p2p-host and --p2p-port options. By default, peer discovery listens on all available network interfaces. If the device Besu is running on must bind to a specific network interface, specify the interface using the --p2p-interface option.","s":"Specify a bootnode","u":"/private-networks/how-to/configure/bootnodes","h":"#specify-a-bootnode","p":2744},{"i":2749,"t":"A network must have at least one operating bootnode. To allow for continuity in the event of failure, configure two or more bootnodes in a production network. If you don't configure any bootnodes, Besu uses Mainnet's default bootnodes. We don't recommend putting bootnodes behind a load balancer because the enode relates to the node public key, IP address, and discovery ports. Any changes to a bootnode enode prevents other nodes from being able to establish a connection with the bootnode. This is why we recommend putting more bootnodes on the network itself. To ensure a bootnode enode doesn't change when recovering from a complete bootnode failure: Create the node key pair (that is, the private and public key) before starting the bootnode. When creating bootnodes in the cloud (for example, AWS and Azure), attempt to assign a static IP address to them. If your network is: Publicly accessible, assign an elastic IP. Internal only, specify a private IP address when you create the instance and record this IP address. We recommend storing the bootnode configuration under source control. To allow for failure, specify all bootnodes on the command line (even to the bootnodes themselves). tip Having each bootnode list the other bootnodes increases the speed of discovery. Nodes ignore their own enode in the bootnodes list so it isn't required to specify different bootnode lists to the bootnodes themselves.","s":"Configure bootnodes in a production network","u":"/private-networks/how-to/configure/bootnodes","h":"#configure-bootnodes-in-a-production-network","p":2744},{"i":2751,"t":"Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and adding them to the network, update the --bootnodes command line option for each node to include the new bootnodes. When adding bootnodes, you don't need to restart running nodes. By updating the --bootnodes option, the next time you restart the nodes (for example, when upgrading), the nodes connect to the new bootnodes.","s":"Add and remove bootnodes","u":"/private-networks/how-to/configure/bootnodes","h":"#add-and-remove-bootnodes","p":2744},{"i":2753,"t":"Besu supports the following consensus protocols: QBFT (proof of authority) - The recommended enterprise-grade consensus protocol for private networks. IBFT 2.0 (proof of authority) - Supported for existing private networks. Clique (proof of authority) - Not recommended for production use. Proof of stake - Used on Ethereum Mainnet and public testnets. Ethash (proof of work) - Can be used in small development networks. See a comparison of the proof of authority consensus protocols. The config property in the genesis file specifies the consensus protocol for a chain. Ethash Clique IBFT 2.0 QBFT { \"config\": { ... \"ethash\": { ... } }, ... } { \"config\": { ... \"clique\": { ... } }, ... } { \"config\": { ... \"ibft2\": { ... } }, ... } { \"config\": { ... \"qbft\": { ... } }, ... }","s":"Consensus protocols","u":"/private-networks/how-to/configure/consensus","h":"","p":2752},{"i":2755,"t":"info Only private networks using the QBFT consensus protocol support block proposal permissioning. Block proposal permissioning is an early access feature, and functionality and options may be updated between releases. You can configure block proposal permissioning to ensure only authorized validator nodes can propose blocks in the network. Use certificates issued by a trusted authority to ensure validators are authorized to propose blocks.","s":"Block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"","p":2754},{"i":2757,"t":"Prerequisites: A configured network. For example, see steps 1 to 5 in the QBFT tutorial. A keystore containing the certificate and key for each network node. A truststore containing all the trusted certificates for the network. Start Besu and include the following command line options on the required nodes: besu --Xpki-block-creation-enabled=true \\ --Xpki-block-creation-keystore-type=\"pkcs12\" \\ --Xpki-block-creation-keystore-file=\"keystore\" \\ --Xpki-block-creation-keystore-password-file=\"keystore.password\" \\ --Xpki-block-creation-crl-file=\"crl2.pem\" \\ --Xpki-block-creation-keystore-certificate-alias=\"validator\" \\ --Xpki-block-creation-truststore-type=\"pkcs12\" \\ --Xpki-block-creation-truststore-file=\"truststore\" \\ --Xpki-block-creation-truststore-password-file=\"truststore.password\" In the command line: Enable block proposal permissioning using --Xpki-block-creation-enabled=true. Specify the keystore type and keystore file using Xpki-block-creation-keystore-type and --Xpki-block-creation-keystore-file. Specify the text file containing the password to unlock the keystore file using Xpki-block-creation-keystore-password-file. Specify the optional certificate revocation list (CRL) file using Xpki-block-creation-crl-file. Specify the alias of the certificate to be included in blocks proposed by this validator using Xpki-block-creation-keystore-certificate-alias. Specify the truststore type and truststore file using Xpki-block-creation-truststore-type and Xpki-block-creation-truststore-file. Specify the text file containing the password to unlock the truststore file using Xpki-block-creation-truststore-password-file.","s":"Configure block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#configure-block-proposal-permissioning","p":2754},{"i":2760,"t":"Syntax Example Environment variable --Xpki-block-creation-crl-file= --Xpki-block-creation-crl-file=/home/cert/cert.crl.pem BESU_XPKI_BLOCK_CREATION_CRL_FILE=/home/cert/cert.crl.pem Path to the optional certificate revocation list (CRL) file.","s":"Xpki-block-creation-crl-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-crl-file","p":2754},{"i":2762,"t":"Syntax Example Environment variable --Xpki-block-creation-enabled[=] --Xpki-block-creation-enabled=true BESU_XPKI_BLOCK_CREATION_ENABLED=true Enable PKI integration. The default is false.","s":"Xpki-block-creation-enabled","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-enabled","p":2754},{"i":2764,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-certificate-alias= --Xpki-block-creation-keystore-certificate-alias=validatorA BESU_XPKI_BLOCK_CREATION_KEYSTORE_CERTIFICATE_ALIAS=validatorA Alias of the certificate to be included in the blocks proposed by this validator. The default is validator.","s":"Xpki-block-creation-keystore-certificate-alias","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-certificate-alias","p":2754},{"i":2766,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-file= --Xpki-block-creation-keystore-file=/home/cert/keystore.jks BESU_XPKI_BLOCK_CREATION_KEYSTORE_FILE=/home/cert/keystore.jks Keystore file containing the key and certificate for PKI block creation.","s":"Xpki-block-creation-keystore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-file","p":2754},{"i":2768,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-password-file= --Xpki-block-creation-keystore-password-file=/home/cert/password.txt BESU_XPKI_BLOCK_CREATION_KEYSTORE_PASSWORD-FILE=/home/cert/password.txt Text file containing the password to unlock the keystore file.","s":"Xpki-block-creation-keystore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-password-file","p":2754},{"i":2770,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-type= --Xpki-block-creation-keystore-type=JKS BESU_XPKI_BLOCK_CREATION_KEYSTORE_TYPE=JKS PKI keystore type. Valid options are JKS and PKCS12. The default is JKS.","s":"Xpki-block-creation-keystore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-type","p":2754},{"i":2772,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-file= --Xpki-block-creation-truststore-file=/home/cert/truststore.jks BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_FILE=/home/cert/truststore.jks Truststore containing the trusted certificates for PKI block creation.","s":"Xpki-block-creation-truststore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-file","p":2754},{"i":2774,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-password-file= --Xpki-block-creation-truststore-password-file=/home/cert/password.txt BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the truststore file.","s":"Xpki-block-creation-truststore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-password-file","p":2754},{"i":2776,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-type= --Xpki-block-creation-truststore-type=JKS BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_TYPE=JKS PKI truststore type. Valid options are JKS and PKCS12. The default is JKS.","s":"Xpki-block-creation-truststore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-type","p":2754},{"i":2778,"t":"QBFT or IBFT 2.0 network conditions might not allow voting to change validators. For example, if a majority of the current validators are no longer participating in the network, a vote to add or remove validators won't be successful. You can bypass voting and specify new validators using a transition in the genesis file. caution In most cases, add or remove validators by voting or smart contract for QBFT; or by voting for IBFT 2.0. Use transitions only when voting isn't possible. Using transitions requires coordinating a rolling update of all the nodes in order to pick up the configuration at the correct block height. Using transitions also leaves the validator overrides permanently in your genesis configuration. Transitions are a Besu-specific feature. If you run a mixed-client QBFT network, you can't use transitions to change the validators. To add or remove validators without voting: In the genesis file, add the transitions configuration item where: is the upcoming block at which to change validators. ... are strings representing the account addresses of the validators after . QBFT syntax QBFT example IBFT 2.0 syntax IBFT 2.0 example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": 25, \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": 25, \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed. To verify the changes after the transition block, call qbft_getValidatorsByBlockNumber or ibft_getValidatorsByBlockNumber, specifying latest. caution Don't specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Add and remove validators without voting","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","h":"","p":2777},{"i":2780,"t":"When using QBFT contract validator selection, if network conditions require it, you can bypass the smart contract and specify new validators in the genesis file. For example, you lose quorum for your current list of contract validators, and you can't perform a transaction to vote more in. This requires temporarily switching to block header validator selection mode. To bypass the smart contract and specify new validators: In the genesis file, add a transitions configuration item where: is the upcoming block at which to change validators. is the validator selection mode to switch to. In this case we'll switch to the blockheader mode temporarily. ... are strings representing the account addresses of the validators after . These validators only need to be sufficient to progress the chain and allow a new contract to be deployed. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": , \"validatorselectionmode\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed. Deploy a new contract to the blockchain containing the desired list of validators. In the genesis file, add another transitions configuration item where: is the upcoming block at which to change validators. is the validator selection mode to switch to. In this case we'll switch to contract mode. is the address of the new smart contract. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, “validatorcontractaddress”: “0x0000000000000000000000000000000000007777” }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] }, { \"block\": , \"validatorselectionmode\": , \"validatorcontractaddress\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] }, { \"block\": 2755, \"validatorselectionmode\": \"contract\", \"validatorcontractaddress\": \"0x0000000000000000000000000000000000009999\" } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed.","s":"Override smart contract validators","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","h":"#override-smart-contract-validators","p":2777},{"i":2782,"t":"To pre-deploy contracts when starting Besu, specify the contract code in the genesis file. Contract code in the genesis file { ... \"alloc\": { \"0x0ffd23af8eebc60b3cfdeed6f814988757237314\": { \"balance\": \"0x100000000000000000000000000000000000000000000000000\", \"code\": \"0x6080604052600436106043576000357c010000000000000000000000000000000000000000000000000000000090048063010fc84214604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b80600081905550807f04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce360405160405180910390a25056fea165627a7a7230582038cb7ea327af8f73feabcfbff64498f1e74831e67f7c75286760d3845c6747c70029\", \"storage\": { \"7aa07e0c924147697605046b7c2c32645b7bbfb41e0ac5d0a84ac93cbb759798\": \"0000000000000000000000000000000000000000000000000000000000000001\", \"cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb\": \"0000000000000000000000000000000000000000000000000000000000000001\", } } }, ... } The contract code in the genesis file defines the: Address. Balance. Bytecode. Key value pairs for contract storage.","s":"Pre-deploy contracts in the genesis file","u":"/private-networks/how-to/configure/contracts","h":"","p":2781},{"i":2784,"t":"Besu implements the IBFT 2.0 proof of authority (PoA) consensus protocol. IBFT 2.0 is supported for existing private networks, but QBFT is the recommended enterprise-grade consensus protocol for private networks. In IBFT 2.0 networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block. Existing validators propose and vote to add or remove validators. You can create a private network using IBFT. danger Configure your network to ensure you never lose more than 1/3 of your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted. tip You can use a plugin to securely store a validator's key using the --security-module option.","s":"Configure IBFT 2.0 consensus","u":"/private-networks/how-to/configure/consensus/ibft","h":"","p":2783},{"i":2786,"t":"To use IBFT 2.0, Besu requires an IBFT 2.0 genesis file. The genesis file defines properties specific to IBFT 2.0. Example IBFT 2.0 genesis file { \"config\": { \"chainId\": 1981, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"blockreward\": \"5000000000000000\", \"miningbeneficiary\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"extraData\": \"0xf83ea00000000000000000000000000000000000000000000000000000000000000000d594c2ab482b506de561668e07f04547232a72897daf808400000000c0\", \"gasLimit\": \"0x1fffffffffffff\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"alloc\": {} } The properties specific to IBFT 2.0 are: blockperiodseconds - The minimum block time, in seconds. epochlength - The number of blocks after which to reset all votes. requesttimeoutseconds - The timeout for each consensus round before a round change, in seconds. blockreward - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value. miningbeneficiary - Optional beneficiary of the blockreward. Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary. extraData - RLP encoded extra data. caution We don't recommend changing epochlength in a running network. Changing the epochlength after genesis can result in illegal blocks. Invalid block header error When adding a new node, if a TimeStampMoreRecentThanParent | Invalid block header error occurs, the genesis file of the new node specifies a higher blockperiodseconds than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu. Decrease the blockperiodseconds in the new IBFT 2.0 genesis file to a lower value that satisfies the block header validation. If the error reads | TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds, decrease the blockperiodseconds from 4 seconds to 3 seconds to match the imported chain. After you update the new genesis file, if the imported chain has a blockperiodseconds value set lower than you prefer, you can adjust it by configuring the block time on an existing IBFT 2.0 network. The properties with specific values in the IBFT 2.0 genesis files are: nonce - 0x0 difficulty - 0x1 mixHash - 0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365 for Istanbul block identification To start a node on an IBFT 2.0 private network, use the --genesis-file option to specify the custom genesis file.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/ibft","h":"#genesis-file","p":2783},{"i":2788,"t":"The extraData property is an RLP encoding of: 32 bytes of vanity data. A list of validator addresses. Any validator votes. No vote is included in the genesis block. The round the block was created on. The round in the genesis block is 0. A list of seals of the validators (signed block hashes). No seals are included in the genesis block. In the genesis block, the important information in the extra data is the list of validators. All other details have empty values. Formally, extraData in the genesis block contains RLP([32 bytes Vanity, List, No Vote, Round=Int(0), 0 Seals]). info RLP encoding is a space-efficient object serialization scheme used in Ethereum. Generate extra data​ To generate the extraData RLP string for inclusion in the genesis file, use the rlp encode Besu subcommand. Example besu rlp encode --from=toEncode.json Where the toEncode.json file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the toEncode.json file, use the public-key export-address Besu subcommand. For example: One initial validator in toEncode.json file [\"9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\"] Copy the RLP encoded data to the extraData property in the genesis file.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/ibft","h":"#extra-data","p":2783},{"i":2790,"t":"When the protocol receives a new chain head, the block time (blockperiodseconds) and round timeout (requesttimeoutseconds) timers start. When blockperiodseconds expires, the protocol proposes a new block. If requesttimeoutseconds expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times requesttimeoutseconds. The timeout period continues to double each time a round fails to add a block. Usually, the protocol adds the proposed block before reaching requesttimeoutseconds. A new round then starts, resetting the block time and round timeout timers. When blockperiodseconds expires, the protocol proposes the next new block. danger If more than 1/3 of validators stop participating, new blocks can no longer be created and requesttimeoutseconds doubles with each round change. The quickest method to resume block production is to restart all validators, which resets requesttimeoutseconds to its genesis value. Once blockperiodseconds is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators. An internal network run by ConsenSys had four geographically dispersed validators in Sweden, Sydney, and two in North Virginia. With a blockperiodseconds of 5 and a requesttimeoutseconds of 10, the testnet consistently created blocks with a five second block time. Tune block timeout​ To tune the block timeout for your network deployment: Set blockperiodseconds to your desired block time and requesttimeoutseconds to two times blockperiodseconds. Reduce requesttimeoutseconds until you start to see round changes occurring. Increase requesttimeoutseconds to the value where round changes are no longer occurring. tip View TRACE logs to see round change log messages. Use a transition to update the blockperiodseconds in an existing network.","s":"Block time","u":"/private-networks/how-to/configure/consensus/ibft","h":"#block-time","p":2783},{"i":2792,"t":"Optional configuration options in the genesis file are: messageQueueLimit - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000. duplicateMessageLimit - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100. futureMessagesLimit - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000. futureMessagesMaxDistance - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10.","s":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/ibft","h":"#optional-configuration-options","p":2783},{"i":2794,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/ibft","h":"#post-merge-configuration","p":2783},{"i":2796,"t":"Existing validators propose and vote to add or remove validators using the IBFT 2.0 JSON-RPC API methods. Enable the HTTP interface with --rpc-http-enabled or the WebSocket interface with --rpc-ws-enabled. The IBFT 2.0 API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include IBFT. The methods to add or remove validators are: ibft_getPendingVotes. ibft_proposeValidatorVote. ibft_discardValidatorVote. To view validator metrics for a specified block range, use ibft_getSignerMetrics. note If network conditions render it impossible to add and remove validators by voting, you can add and remove validators without voting.","s":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-and-remove-validators","p":2783},{"i":2798,"t":"To propose adding a validator to an IBFT 2.0 network, call ibft_proposeValidatorVote, specifying the address of the proposed validator and true. A majority of validators must execute the call. JSON-RPC ibft_proposeValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the validator proposes the next block, the protocol inserts one proposal received from ibft_proposeValidatorVote into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use ibft_getValidatorsByBlockNumber. JSON-RPC ibft_getValidatorsByBlockNumber request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a validator, call ibft_discardValidatorVote, specifying the address of the proposed validator. JSON-RPC ibft_discardValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' ","s":"Add a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-a-validator","p":2783},{"i":2800,"t":"The process for removing a validator from an IBFT 2.0 network is the same as adding a validator except you specify false as the second parameter of ibft_proposeValidatorVote.","s":"Remove a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#remove-a-validator","p":2783},{"i":2802,"t":"At each epoch transition, IBFT 2.0 discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block. An epoch transition occurs every epochLength blocks. Define epochlength in the IBFT 2.0 genesis file.","s":"Epoch transition","u":"/private-networks/how-to/configure/consensus/ibft","h":"#epoch-transition","p":2783},{"i":2804,"t":"IBFT 2.0 requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#minimum-number-of-validators","p":2783},{"i":2806,"t":"As the number of validators increase, the message complexity increases, which can decrease performance. In network tests, IBFT 2.0 handles up to 30 validators with no loss of performance. Non-validator nodes don't affect performance and don't count towards the maximum limit.","s":"Maximum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#maximum-number-of-validators","p":2783},{"i":2808,"t":"The transitions genesis configuration item allows you to specify a future block number at which to change the IBFT 2.0 network configuration in an existing network. For example, you can update the block time, block reward, or mining beneficiary. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/ibft","h":"#transitions","p":2783},{"i":2810,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": 1240, \"blockperiodseconds\": 4 } ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-time-on-an-existing-network","p":2783},{"i":2812,"t":"To update an existing network with a new blockreward: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockreward. is the updated value for blockreward. Syntax Example { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"ibft2\": [ { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"ibft2\": [ { \"block\": 10, \"blockreward\": \"6000000000000000\" }, { \"block\": 15, \"blockreward\": \"75000000000000000\" }, { \"block\": 20, \"blockreward\": \"0\" } ] } }, ... } note You can add multiple blockreward updates in one transition object by specifying multiple future blocks. Restart all nodes in the network using the updated genesis file.","s":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-rewards-on-an-existing-network","p":2783},{"i":2814,"t":"To update an existing network with a new mining beneficiary: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change miningbeneficiary. is the updated 20-byte address for miningbeneficiary. Starting at , block rewards go to this address. Syntax Example { \"config\": { \"chainId\": 999, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 1, \"epochlength\": 30000, \"requesttimeoutseconds\": 5, \"blockreward\": \"5000000000000000000\", \"miningbeneficiary\": \"0x0000000000000000000000000000000000000001\" }, \"transitions\": { \"ibft2\": [ { \"block\": , \"miningbeneficiary\": }, { \"block\": , \"miningbeneficiary\": } ] } }, ... } { \"config\": { \"chainId\": 999, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 1, \"epochlength\": 30000, \"requesttimeoutseconds\": 5, \"blockreward\": \"5000000000000000000\", \"miningbeneficiary\": \"0x0000000000000000000000000000000000000001\" }, \"transitions\": { \"ibft2\": [ { \"block\": 10000, \"miningbeneficiary\": \"\", }, { \"block\": 20000, \"miningbeneficiary\": \"0x0000000000000000000000000000000000000002\", } ] } }, ... } note Setting the miningbeneficiary to an empty value clears out any override so that block rewards go to the block producer rather than a global override address. Restart all nodes in the network using the updated genesis file.","s":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":2783},{"i":2816,"t":"caution Configuring alternative elliptic curves is an early access feature. By default, Besu uses the Ethereum standard secp256k1 elliptic curve (EC). However, when running nodes in a private network, it is possible to configure an alternative elliptic curve. The configuration for what elliptic curve Besu will use is done in the network configuration section of genesis file, using the ecCurve key: { \"genesis\": { \"config\": { \"ecCurve\": \"secp256k1\", [...] }, [...] } Important All nodes in the network MUST use the same elliptic curve. Nodes with different EC configuration from the network won't be able to send messages to other nodes or verify transactions and blocks. Besu supports the following elliptic curves: secp256k1 (Ethereum default) secp256r1","s":"Configure alternative elliptic curves","u":"/private-networks/how-to/configure/curves","h":"","p":2815},{"i":2818,"t":"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera. The following diagram displays an example client and server TLS configuration. Configure TLS communication from the command line.","s":"Configure client and server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"","p":2817},{"i":2820,"t":"Besu's password-protected PKCS12 keystore File containing the keystore password","s":"Prerequisites","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#prerequisites","p":2817},{"i":2822,"t":"Allow clients (for example a dapp, curl, or Web3Signer) to send and receive secure HTTP JSON-RPCs. Client prerequisites: Configure the client for TLS Client's PKCS12 keystore information","s":"Configure client TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-client-tls","p":2817},{"i":2824,"t":"The known clients file allows clients with self-signed certificates or non-public certificates to connect to Besu. Create a file (in this example, knownClients) that lists one or more trusted clients. Use the format where: is the Common Name specified in the client certificate. is the SHA-256 fingerprint of the client certificate. Example web3signer 8E:E0:85:9F:FC:2E:2F:21:31:46:0B:82:4C:A6:88:AB:30:34:9A:C6:EA:4F:04:31:ED:0F:69:A7:B5:C2:2F:A7 curl FC:18:BF:39:45:45:9A:15:46:76:A6:E7:C3:94:64:B8:34:84:A3:8E:B8:EA:67:DC:61:C0:29:E6:38:B8:B7:99 You can use openssl or keytool to display the SHA256 fingerprint. keytool -list -v -keystore -storetype PKCS12 -storepass `.","s":"Create the known clients file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-clients-file","p":2817},{"i":2826,"t":"besu --rpc-http-enabled --rpc-http-tls-enabled --rpc-http-tls-client-auth-enabled --rpc-http-tls-keystore-file=/Users/me/my_node/keystore.pfx --rpc-http-tls-keystore-password-file=/Users/me/my_node/keystorePassword --rpc-http-tls-known-clients-file=/Users/me/my_node/knownClients --rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384 --rpc-http-tls-protocol=TLSv1.3,TLSv1.2 The command line: Enables the HTTP JSON-RPC service using the --rpc-http-enabled option. Enables TLS for the HTTP JSON-RPC service using the --rpc-http-tls-enabled option. Enables TLS client authentication using the --rpc-http-tls-client-auth-enabled option. Specifies the keystore using the --rpc-http-tls-keystore-file option. Specifies the file that contains the password to decrypt the keystore using the --rpc-http-tls-keystore-password-file option. Specifies the clients allowed to connect to Besu using the --rpc-http-tls-known-clients-file option. specifies the Java cipher suites using the --rpc-http-tls-cipher-suite option. specifies the TLS protocol version using the --rpc-http-tls-protocol option. note Set --rpc-http-tls-ca-clients-enabled to true to allow access to clients with signed and trusted root CAs.","s":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu","p":2817},{"i":2828,"t":"Allow Besu to securely communicate with the server (Tessera). Server prerequisites: Configure the server to allow TLS communication Server's certificate information","s":"Configure server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-server-tls","p":2817},{"i":2830,"t":"Create a file (in this example, knownServers) that lists one or more trusted servers. The file contents use the format : where: is the server hostname is the port used for communication is the SHA-256 fingerprint of the server's certificate. Example localhost:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC 127.0.0.1:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC note If you are unsure whether requests use the hostname or an IP address, configure both in the file.","s":"Create the known servers file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-servers-file","p":2817},{"i":2832,"t":"besu --privacy-tls-enabled --privacy-tls-keystore-file=/Users/me/my_node/keystore.pfx --privacy-tls-keystore-password-file=/Users/me/my_node/keystorePassword --privacy-tls-known-enclave-file=/Users/me/my_node/knownServers The command line: Enables TLS with the server using the --privacy-tls-enabled option. Specifies the keystore using the --privacy-tls-keystore-file option. Specifies the file that contains the password to decrypt the keystore using the --privacy-tls-keystore-password-file option. Specifies the trusted servers using the --privacy-tls-known-enclave-file option.","s":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu-1","p":2817},{"i":2834,"t":"Transactions use computational resources so have an associated cost. Gas is the cost unit and the gas price is the price per gas unit. The transaction cost is the gas used * gas price. In public networks, the account submitting the transaction pays the transaction cost, in Ether. The miner (or validator in PoA networks) that includes the transaction in a block receives transaction cost. In many private networks, network participants run the validators and do not require gas as an incentive. Networks that don't require gas as an incentive usually configure the gas price to be zero (that is, free gas). Some private networks might allocate Ether and use a non-zero gas price to limit resource use. tip We use the term free gas network to refer to a network with a gas price of zero. A network with a gas price of zero is also known as a zero gas network or no gas network. note Some pre-crafted transactions require the deployment account to have gas available. For example, the transaction that creates the smart contract in EIP-1820. In a free gas network, transactions still use gas but the gas price is zero, meaning the transaction cost is zero. Transaction cost = gas used * 0 (the gas price).","s":"Configure free gas networks","u":"/private-networks/how-to/configure/free-gas","h":"","p":2833},{"i":2836,"t":"When gas is free, limiting block and contract sizes is less important. In free gas networks, we increase the block size limit and set the contract size limit to the maximum value.","s":"Configure free gas in Besu","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-besu","p":2833},{"i":2838,"t":"If you want to remove gas from consideration and don't mind blocks potentially taking longer to create, in the genesis file set the block size limit (measured in gas) to the maximum accepted by Hardhat (0x1fffffffffffff). In the genesis file, specify gasLimit following the config key. { \"config\": { .... }, ... \"gasLimit\": \"0x1fffffffffffff\", .... } If you are more concerned about blocks arriving on time and don't have expensive individual transactions, set gasLimit to a value closer to the amount of gas your validators can process in the configured block time.","s":"1. Set the block size","u":"/private-networks/how-to/configure/free-gas","h":"#1-set-the-block-size","p":2833},{"i":2840,"t":"In the config section of the genesis file, set the contract size limit to the maximum supported size (in bytes). ( \"config\": { ... \"contractSizeLimit\": 2147483647, ... } ... }","s":"2. Set the contract size","u":"/private-networks/how-to/configure/free-gas","h":"#2-set-the-contract-size","p":2833},{"i":2842,"t":"When starting nodes, set the minimum gas price to zero. Command line Configuration file --min-gas-price=0 min-gas-price=0 Important In a free gas network, ensure the minimum gas price is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. You can query a node's gas configuration using eth_gasPrice.","s":"3. Start Besu with a minimum gas price of zero","u":"/private-networks/how-to/configure/free-gas","h":"#3-start-besu-with-a-minimum-gas-price-of-zero","p":2833},{"i":2844,"t":"If your network is configured to use the londonBlock or a later hard fork, then you must also enable the zeroBaseFee configuration. You must set this on all your nodes. Once it is set, future blocks produced by that node will set a baseFee of 0. This is required because the London hard fork (EIP-1559) introduced a non-zero baseFee into the block which normally means transactions require gas. { \"config\": { \"londonBlock\": 0, \"zeroBaseFee\": true, ... }, ... } If zero base fee is enabled, you cannot specify a value for --tx-pool-price-bump.","s":"4. Enable zero base fee if using London fork or later","u":"/private-networks/how-to/configure/free-gas","h":"#4-enable-zero-base-fee-if-using-london-fork-or-later","p":2833},{"i":2846,"t":"If using Hardhat to develop on your free gas network, you also need to configure free gas in Hardhat. Like setting block and contract size limits to their maximum values for Besu, set the transaction gas limit in Hardhat to the maximum possible. info Besu does not support private key management. To use Besu with Hardhat, you must configure a Hardhat wallet.","s":"Configure free gas in Hardhat","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-hardhat","p":2833},{"i":2848,"t":"Update the hardhat.config.js file: Set the gas price to zero. gasPrice: 0; Set the gas limit for a transaction (that is, contract creation) to be the block gas limit - 1. gas: \"0x1ffffffffffffe\"; Setting gasPrice to 0 should cover transaction costs for most deployments. Specify evmVersion when using the latest Solidity version. solidity: { version: \"0.8.20\", settings: { evmVersion: \"london\", // required for Besu optimizer: {...}, }, },","s":"Update hardhat.config.js","u":"/private-networks/how-to/configure/free-gas","h":"#update-hardhatconfigjs","p":2833},{"i":2850,"t":"Besu implements the QBFT proof of authority (PoA) consensus protocol. QBFT is the recommended enterprise-grade consensus protocol for private networks. In QBFT networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block. Existing validators propose and vote to add or remove validators. You can create a private network using QBFT. caution Configure your network to ensure you never lose more than 1/3 your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted. tip You can use a plugin to securely store a validator's key using the --security-module option.","s":"Configure QBFT consensus","u":"/private-networks/how-to/configure/consensus/qbft","h":"","p":2849},{"i":2852,"t":"To use QBFT, define a genesis file that contains the QBFT properties. The genesis file differs depending on the validator management method you intend to use. note You can use a transitions to change the blockperiodseconds or validator management method of the network at a later time. Block header validator selection Contract validator selection { \"config\": { \"chainid\": 1337, \"berlinBlock\": 0, \"qbft\": { \"epochlength\": 30000, \"blockperiodseconds\": 5, \"requesttimeoutseconds\": 10 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x5b3d92d7\", \"extraData\": \"0xf87aa00000000000000000000000000000000000000000000000000000000000000000f8549464a702e6263b7297a96638cac6ae65e6541f4169943923390ad55e90c237593b3b0e401f3b08a0318594aefdb9a738c9f433e5b6b212a6d62f6370c2f69294c7eeb9a4e00ce683cf93039b212648e01c6c6b78c080c0\", \"gasLimit\": \"0x29b92700\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"64d9be4177f418bcf4e56adad85f33e3a64efe22\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"9f66f8a0f0a6537e4a36aa1799673ea7ae97a166\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"a7f25969fb6f3d5ac09a88862c90b5ff664557a7\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"f4bbfd32c11c9d63e9b4c77bb225810f840342df\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" } }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } { \"config\": { \"chainid\": 1337, \"berlinBlock\": 0, \"qbft\": { \"epochlength\": 30000, \"blockperiodseconds\": 5, \"requesttimeoutseconds\": 10, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" } }, \"nonce\": \"0x0\", \"timestamp\": \"0x5b3d92d7\", \"extraData\": \"0xe5a00000000000000000000000000000000000000000000000000000000000000000c0c080c0\", \"gasLimit\": \"0x29b92700\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"64d9be4177f418bcf4e56adad85f33e3a64efe22\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"9f66f8a0f0a6537e4a36aa1799673ea7ae97a166\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"a7f25969fb6f3d5ac09a88862c90b5ff664557a7\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"f4bbfd32c11c9d63e9b4c77bb225810f840342df\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"0x0000000000000000000000000000000000007777\": { \"comment\": \"validator smart contract\", \"balance\": \"0\", \"code\": \"0x608060405234801561001057600080fd5b50600436106100a5576000357c0100000000000000000000000000000000000000000000000000000000900480639692ea25116100785780639692ea2514610113578063b4ec9ac114610126578063b7ab4db514610139578063c76f24371461014e57600080fd5b80631c5a9d9c146100aa578063508adcfc146100bf57806351b42b00146100db5780635dc43899146100e3575b600080fd5b6100bd6100b8366004611399565b610161565b005b6100c860035481565b6040519081526020015b60405180910390f35b6100bd6104aa565b6100f66100f1366004611399565b61074e565b6040805193845260208401929092521515908201526060016100d2565b6100bd610121366004611399565b610bbd565b6100bd610134366004611399565b610deb565b6101416110a3565b6040516100d291906113c9565b6100bd61015c366004611399565b611105565b3360009081526001602052604090205460ff1661019c5760405160e560020a62461bcd02815260040161019390611416565b60405180910390fd5b600160a060020a03811661021b5760405160e560020a62461bcd02815260206004820152602860248201527f63616e6e6f742061637469766174652076616c696461746f722077697468206160448201527f64647265737320300000000000000000000000000000000000000000000000006064820152608401610193565b60005b6000548110156102b7576000818154811061023b5761023b611505565b600091825260209091200154600160a060020a03838116911614156102a55760405160e560020a62461bcd02815260206004820152601b60248201527f76616c696461746f7220697320616c72656164792061637469766500000000006044820152606401610193565b806102af816114b8565b91505061021e565b33600090815260016020526040902054610100900460ff16156103345733600090815260016020526040812054815484929162010000900460ff1690811061030157610301611505565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550610432565b600054610100116103b05760405160e560020a62461bcd02815260206004820152602e60248201527f6e756d626572206f662076616c696461746f72732063616e6e6f74206265206c60448201527f6172676572207468616e203235360000000000000000000000000000000000006064820152608401610193565b3360009081526001602081905260408220805461ff001981166101009081178355845460ff16620100000262ffff001990921691909117179055815490810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563018054600160a060020a038416600160a060020a03199091161790555b600160a060020a0382166000818152600260205260408082208054600160a060020a03191633908117909155915490519192917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f9161049e916001909182521515602082015260400190565b60405180910390a35050565b3360009081526001602052604090205460ff166104dc5760405160e560020a62461bcd02815260040161019390611416565b6000546001106105315760405160e560020a62461bcd02815260206004820181905260248201527f63616e6e6f742064656163746976617465206c6173742076616c696461746f726044820152606401610193565b33600090815260016020526040902054610100900460ff166105be5760405160e560020a62461bcd02815260206004820152602860248201527f73656e64657220646f6573206e6f74206861766520616e20616374697665207660448201527f616c696461746f720000000000000000000000000000000000000000000000006064820152608401610193565b336000908152600160205260408120805461ff0019169081905581546201000090910460ff1691908190839081106105f8576105f8611505565b60009182526020822001548154600160a060020a03909116925081906106209060019061148a565b8154811061063057610630611505565b60009182526020822001548154600160a060020a03909116925082919060ff861690811061066057610660611505565b60009182526020808320919091018054600160a060020a031916600160a060020a03948516179055838316825260028152604080832054909316825260019052908120805462ff000019166201000060ff8716021790558054806106c6576106c66114ec565b6000828152602080822060001990840181018054600160a060020a03199081169091559301909355600160a060020a03851680825260028452604080832080549094169093558154835190815293840191909152339290917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f910160405180910390a3505050565b336000908152600160205260408120548190819060ff166107845760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a03851660009081526004602052604090205481101561082357600160a060020a038516600090815260046020526040812080546001929190849081106107d6576107d6611505565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610811578361080d816114b8565b9450505b8061081b816114b8565b915050610787565b5060026003546108339190611465565b831115610b8657600160a060020a038416600090815260046020526040812061085b9161135f565b600160a060020a03841660009081526001602052604090205460ff1615610ab0576003805490600061088c836114a1565b9091555050600160a060020a038416600090815260016020526040902054610100900460ff1615610a89576000546001106109325760405160e560020a62461bcd02815260206004820152603860248201527f63616e6e6f742072656d6f766520616c6c6f776564206163636f756e7420776960448201527f7468206c617374206163746976652076616c696461746f7200000000000000006064820152608401610193565b600160a060020a03841660009081526001602052604081205481546201000090910460ff169160029181908490811061096d5761096d611505565b6000918252602080832090910154600160a060020a0316835282019290925260400181208054600160a060020a0319169055805481906109af9060019061148a565b815481106109bf576109bf611505565b60009182526020822001548154600160a060020a03909116925082919060ff85169081106109ef576109ef611505565b600091825260208220018054600160a060020a031916600160a060020a039390931692909217909155805480610a2757610a276114ec565b6000828152602080822083016000199081018054600160a060020a0319169055909201909255600160a060020a0392831682526002815260408083205490931682526001905220805460ff909216620100000262ff0000199092169190911790555b600160a060020a0384166000908152600160205260409020805462ffffff19169055610b32565b60038054906000610ac0836114b8565b909155505060408051606081018252600180825260006020808401828152848601838152600160a060020a038b16845293909152939020915182549351915160ff16620100000262ff0000199215156101000261ff00199215159290921661ffff199095169490941717169190911790555b600160a060020a03841660008181526001602090815260409182902054915160ff909216151582527f94154efdb7741591680558a88682943a481f1a468cb81f46fe7f8cead2e40519910160405180910390a25b826002600354610b969190611465565b610ba190600161144d565b6002600354610bb09190611465565b9196909550931192915050565b3360009081526001602052604090205460ff16610bef5760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a038216600090815260046020526040902054811015610d4b57600160a060020a0382166000908152600460205260409020805433919083908110610c3f57610c3f611505565b600091825260209091200154600160a060020a03161415610d3957600160a060020a03821660009081526004602052604090208054610c809060019061148a565b81548110610c9057610c90611505565b6000918252602080832090910154600160a060020a03858116845260049092526040909220805491909216919083908110610ccd57610ccd611505565b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559184168152600490915260409020805480610d1257610d126114ec565b60008281526020902081016000199081018054600160a060020a0319169055019055610d4b565b80610d43816114b8565b915050610bf2565b50600160a060020a0381166000818152600460205260409020546003543392917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba91610d9990600290611465565b610da490600161144d565b600160a060020a0386166000908152600160208181526040928390205483519586529085019390935260ff909216159083015260608201526080015b60405180910390a350565b3360009081526001602052604090205460ff16610e1d5760405160e560020a62461bcd02815260040161019390611416565b600160a060020a038116610e765760405160e560020a62461bcd02815260206004820152601f60248201527f6163636f756e7420746f2062652061646465642063616e6e6f742062652030006044820152606401610193565b600160a060020a03811660009081526001602081905260409091205460ff16151514610f0d5760405160e560020a62461bcd02815260206004820152602a60248201527f6163636f756e7420746f2072656d6f7665206973206e6f74206f6e207468652060448201527f616c6c6f77206c697374000000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a038216600090815260046020526040902054811015610ffb57600160a060020a0382166000908152600460205260409020805433919083908110610f5d57610f5d611505565b600091825260209091200154600160a060020a03161415610fe95760405160e560020a62461bcd02815260206004820152602a60248201527f73656e6465722068617320616c726561647920766f74656420746f2072656d6f60448201527f7665206163636f756e74000000000000000000000000000000000000000000006064820152608401610193565b80610ff3816114b8565b915050610f10565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061107490600290611465565b61107f90600161144d565b60408051928352602083019190915260009082018190526060820152608001610de0565b606060008054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110dd575b5050505050905090565b3360009081526001602052604090205460ff166111375760405160e560020a62461bcd02815260040161019390611416565b600160a060020a03811660009081526001602052604090205460ff16156111c95760405160e560020a62461bcd02815260206004820152602b60248201527f6163636f756e7420746f2061646420697320616c7265616479206f6e2074686560448201527f20616c6c6f77206c6973740000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a0382166000908152600460205260409020548110156112b757600160a060020a038216600090815260046020526040902080543391908390811061121957611219611505565b600091825260209091200154600160a060020a031614156112a55760405160e560020a62461bcd02815260206004820152602760248201527f73656e6465722068617320616c726561647920766f74656420746f206164642060448201527f6163636f756e74000000000000000000000000000000000000000000000000006064820152608401610193565b806112af816114b8565b9150506111cc565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061133090600290611465565b61133b90600161144d565b60408051928352602083019190915260019082015260006060820152608001610de0565b508054600082559060005260206000209081019061137d9190611380565b50565b5b808211156113955760008155600101611381565b5090565b6000602082840312156113ab57600080fd5b8135600160a060020a03811681146113c257600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561140a578351600160a060020a0316835292840192918401916001016113e5565b50909695505050505050565b6020808252601f908201527f73656e646572206973206e6f74206f6e2074686520616c6c6f77206c69737400604082015260600190565b60008219821115611460576114606114d3565b500190565b6000826114855760e060020a634e487b7102600052601260045260246000fd5b500490565b60008282101561149c5761149c6114d3565b500390565b6000816114b0576114b06114d3565b506000190190565b60006000198214156114cc576114cc6114d3565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fdfea26469706673582212200c3e9c07521b155532c0de1605aae52f4ae953670f0afb0f30d320580b93213d64736f6c63430008070033\", \"storage\": { \"0000000000000000000000000000000000000000000000000000000000000000\": \"0000000000000000000000000000000000000000000000000000000000000002\", \"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563\": \"0000000000000000000000009a6d82ef3912d5ab60473124bccd2f2a640769d7\", \"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564\": \"00000000000000000000000065463bf6268e5cc409b6501ec846487b935a1446\", \"aedead2c33b41c31b4afd2246c6bf5131c209d4b0ca6c2247778ac7be7443a00\": \"0000000000000000000000000000000000000000000000000000000000000101\", \"33784757d5da236467d27a7c5b0cc5aa9026ca3b79e29106a67a5e93c292a523\": \"0000000000000000000000000000000000000000000000000000000000010101\", \"35aba1eb0bbe741ac01e5b6ce584bc042b1a0b7d115eb8f7dd02a1a1de2fd14d\": \"000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"0d9217f0a1f7c602fd67052d20171ff73b156d1b87ea258cb6a5d94f71298158\": \"000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57\", \"0000000000000000000000000000000000000000000000000000000000000003\": \"0000000000000000000000000000000000000000000000000000000000000002\" }, \"version\": \"0x01\" } }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } The QBFT properties are: blockperiodseconds - The minimum block time, in seconds. epochlength - The number of blocks after which to reset all votes. requesttimeoutseconds - The timeout for each consensus round before a round change, in seconds. blockreward - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value. validatorcontractaddress - Address of the validator smart contract. Required only if using a contract validator selection. The address must be identical to the address in the alloc section. This option can also be used in the transitions configuration item if swapping validator management methods in an existing network. miningbeneficiary - Optional beneficiary of the blockreward. Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary. extraData - RLP encoded extra data. caution We don't recommend changing epochlength in a running network. Changing the epochlength after genesis can result in illegal blocks. Invalid block header error When adding a new node, if a TimeStampMoreRecentThanParent | Invalid block header error occurs, the genesis file of the new node specifies a higher blockperiodseconds than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu. Decrease the blockperiodseconds in the new QBFT genesis file to a lower value that satisfies the block header validation. If the error reads | TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds, decrease the blockperiodseconds from 4 seconds to 3 seconds to match the imported chain. After you update the new genesis file, if the imported chain has a blockperiodseconds value set lower than you prefer, you can adjust it by configuring the block time on an existing QBFT network. The properties with specific values in the QBFT genesis files are: difficulty - 0x1 mixHash - 0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365 for Istanbul block identification To start a node on a QBFT private network, use the --genesis-file option to specify the custom genesis file.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/qbft","h":"#genesis-file","p":2849},{"i":2854,"t":"The extraData property is an RLP encoding of: 32 bytes of vanity data. If using: Block header validator selection, a list of validator addresses. Contract validator selection, no validators. Any validator votes. No vote is included in the genesis block. The round the block was created on. The round in the genesis block is 0. A list of seals of the validators (signed block hashes). No seals are included in the genesis block. When using block header validator selection, the important information in the genesis block extra data is the list of validators. All other details have empty values in the genesis block. info When using contract validator selection to manage validators, the list of validators is configured in the alloc property's storage section. View the example smart contract for more information on how to generate the storage section. Formally, extraData in the genesis block contains: If using block header validator selection: RLP([32 bytes Vanity, List, No Vote, Round=Int(0), 0 Seals]). If using contract validator selection: RLP([32 bytes Vanity, 0 Validators, No Vote, Round=Int(0), 0 Seals]). info RLP encoding is a space-efficient object serialization scheme used in Ethereum. Generate extra data​ To generate the extraData RLP string for inclusion in the genesis file, use the rlp encode Besu subcommand. Example besu rlp encode --from=toEncode.json --type=QBFT_EXTRA_DATA Where the toEncode.json file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the toEncode.json file, use the public-key export-address Besu subcommand. For example: Initial validators in toEncode.json file [ \"0x4592c8e45706cc08b8f44b11e43cba0cfc5892cb\", \"0x06e23768a0f59cf365e18c2e0c89e151bcdedc70\", \"0xc5327f96ee02d7bcbc1bf1236b8c15148971e1de\", \"0xab5e7f4061c605820d3744227eed91ff8e2c8908\" ] Copy the RLP encoded data to the extraData property in the genesis file. RLP encoded data 0xf87aa00000000000000000000000000000000000000000000000000000000000000000f854944592c8e45706cc08b8f44b11e43cba0cfc5892cb9406e23768a0f59cf365e18c2e0c89e151bcdedc7094c5327f96ee02d7bcbc1bf1236b8c15148971e1de94ab5e7f4061c605820d3744227eed91ff8e2c8908c080c0 When you start the network, the four nodes previously specified in toEncode.json are the validators for the network.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/qbft","h":"#extra-data","p":2849},{"i":2856,"t":"When the protocol receives a new chain head, the block time (blockperiodseconds) timer starts. When blockperiodseconds expires, the round timeout (requesttimeoutseconds) timer starts and the protocol proposes a new block. If requesttimeoutseconds expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times requesttimeoutseconds. The timeout period continues to double each time a round fails to add a block. Usually, the protocol adds the proposed block before reaching requesttimeoutseconds. A new round then starts, resetting the block time and round timeout timers. When blockperiodseconds expires, the protocol proposes the next new block. danger If more than 1/3 of validators stop participating, new blocks can no longer be created and requesttimeoutseconds doubles with each round change. The quickest method to resume block production is to restart all validators, which resets requesttimeoutseconds to its genesis value. Once blockperiodseconds is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators. Tune block timeout​ To tune the block timeout for your network deployment: Set blockperiodseconds to your desired block time and requesttimeoutseconds to two times blockperiodseconds. Reduce requesttimeoutseconds until you start to see round changes occurring. Increase requesttimeoutseconds to the value where round changes are no longer occurring. tip View TRACE logs to see round change log messages. Use a transition to update the blockperiodseconds in an existing network.","s":"Block time","u":"/private-networks/how-to/configure/consensus/qbft","h":"#block-time","p":2849},{"i":2858,"t":"Optional configuration options in the genesis file are: messageQueueLimit - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000. duplicateMessageLimit - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100. futureMessagesLimit - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000. futureMessagesMaxDistance - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10.","s":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/qbft","h":"#optional-configuration-options","p":2849},{"i":2860,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to the 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/qbft","h":"#post-merge-configuration","p":2849},{"i":2862,"t":"QBFT provides two methods to manage validators: Block header validator selection - Existing validators propose and vote to add or remove validators using the QBFT JSON-RPC API methods. Contract validator selection - Use a smart contract to specify the validators used to propose and validate blocks. You can use transitions to swap between block header validator selection and contract validator selection in an existing network. For block header validator selection, initial validators are configured in the genesis file's extraData property, whereas the initial validators when using the contract validator selection method are configured in the genesis file's storage section.","s":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators","p":2849},{"i":2864,"t":"Enable the HTTP interface with --rpc-http-enabled or the WebSockets interface with --rpc-ws-enabled. The QBFT API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include QBFT. The methods to add or remove validators are: qbft_getPendingVotes. qbft_proposeValidatorVote. qbft_discardValidatorVote. To view validator metrics for a specified block range, use qbft_getSignerMetrics. note If network conditions render it impossible to add and remove validators by voting, you can add and remove validators without voting. Add a validator​ To propose adding a validator, call qbft_proposeValidatorVote, specifying the address of the proposed validator and true. A majority of validators must execute the call. JSON-RPC qbft_proposeValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the validator proposes the next block, the protocol inserts one proposal received from qbft_proposeValidatorVote into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use qbft_getValidatorsByBlockNumber. JSON-RPC qbft_getValidatorsByBlockNumber request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a validator, call qbft_discardValidatorVote, specifying the address of the proposed validator. JSON-RPC qbft_discardValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' Remove a validator​ The process for removing a validator is the same as adding a validator except you specify false as the second parameter of qbft_proposeValidatorVote. Epoch transition​ At each epoch transition, QBFT discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block. An epoch transition occurs every epochLength blocks. Define epochlength in the QBFT genesis file.","s":"Add and remove validators using block headers","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-block-headers","p":2849},{"i":2866,"t":"Users can create their own smart contracts to add or remove validators based on their organizational requirements. View the example smart contract for more information on how to create and deploy the smart contract. You can pre-deploy the validator smart contract in a new QBFT network by specifying the contract details in the genesis file. For existing QBFT networks you need to compile and deploy the contract using a transaction, then obtain the contract address from the receipt and use that in a transition. info You can't use the JSON-RPC methods to add or remove validators when using a smart contract to manage nodes. You must interact with the contract functions using transactions. note If network conditions render it impossible to add and remove validators using a smart contract, you can override smart contract validators.","s":"Add and remove validators using a smart contract","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-a-smart-contract","p":2849},{"i":2868,"t":"QBFT requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#minimum-number-of-validators","p":2849},{"i":2870,"t":"The transitions genesis configuration item allows you to specify a future block number at which to the QBFT network configuration in an existing network. For example, you can update the block time, block reward, validator management method, or mining beneficiary. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/qbft","h":"#transitions","p":2849},{"i":2872,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": 1240, \"blockperiodseconds\": 4 } ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-time-on-an-existing-network","p":2849},{"i":2874,"t":"To update an existing network with a new blockreward: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockreward. is the updated value for blockreward. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"qbft\": [ { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"qbft\": [ { \"block\": 10, \"blockreward\": \"6000000000000000\" }, { \"block\": 15, \"blockreward\": \"75000000000000000\" }, { \"block\": 20, \"blockreward\": \"0\" } ] } }, ... } note You can add multiple blockreward updates in one transition object by specifying multiple future blocks. Restart all nodes in the network using the updated genesis file.","s":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-rewards-on-an-existing-network","p":2849},{"i":2876,"t":"To swap between block header validator selection and contract validator selection methods in an existing network: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change the validator selection method. is the validator selection mode to switch to. Valid options are contract and blockheader. is the smart contract address, if switching to the contract validator selection method. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": , \"validatorselectionmode\": , \"validatorcontractaddress\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": 102885, \"validatorselectionmode\": \"contract\", \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" } ] } }, ... } Restart all nodes in the network using the updated genesis file.","s":"Swap validator management methods","u":"/private-networks/how-to/configure/consensus/qbft","h":"#swap-validator-management-methods","p":2849},{"i":2878,"t":"To update an existing network with a new mining beneficiary: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change miningbeneficiary. is the updated 20-byte address for miningbeneficiary. Starting at , block rewards go to this address. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": , \"miningbeneficiary\": }, { \"block\": , \"miningbeneficiary\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": 10000, \"miningbeneficiary\": \"0x0000000000000000000000000000000000000002\", }, { \"block\": 20000, \"miningbeneficiary\": \"\", } ] } }, ... } note Setting the miningbeneficiary to an empty value clears out any override so that block rewards go to the block producer rather than a global override address. Restart all nodes in the network using the updated genesis file.","s":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":2849},{"i":2880,"t":"Besu implements the Clique proof of authority (PoA) consensus protocol. Private networks can use Clique. danger Clique is not suitable for production environments. Use only in development environments. In Clique networks, approved accounts, known as signers, validate transactions and blocks. Signers take turns to create the next block. Existing signers propose and vote to add or remove signers. You can create a private network using Clique.","s":"Configure Clique consensus","u":"/private-networks/how-to/configure/consensus/clique","h":"","p":2879},{"i":2882,"t":"To use Clique in a private network, Besu requires a Clique genesis file. A Clique genesis file defines properties specific to Clique. Example Clique genesis file { \"config\": { \"chainId\": 1981, \"berlinBlock\": 0, \"clique\": { \"blockperiodseconds\": 15, \"epochlength\": 30000, \"createemptyblocks\": true } }, \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"extraData\": \"0x000000000000000000000000000000000000000000000000000000000000000001a54556254bfa3db2daa7673435ec63649925c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0x1fffffffffffff\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"nonce\": \"0x0\", \"timestamp\": \"0x5c51a607\", \"alloc\": {}, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } The properties specific to Clique are: blockperiodseconds - The block time, in seconds. epochlength - The number of blocks after which to reset all votes. createemptyblocks - Set to false to skip creating empty blocks. extraData - Extra data including the initial signers.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/clique","h":"#genesis-file","p":2879},{"i":2884,"t":"By default, Clique creates empty blocks. For large private networks using Clique, skipping empty blocks can reduce the storage needed. To skip creating empty blocks, set createemptyblocks to false in the genesis file: { \"config\": { \"londonBlock\": 0, \"clique\": { \"blockperiodseconds\": 10, \"epochlength\": 30000, \"createemptyblocks\": false } }, ... } All validators must have the same value for createemptyblocks.","s":"Skip empty blocks","u":"/private-networks/how-to/configure/consensus/clique","h":"#skip-empty-blocks","p":2879},{"i":2886,"t":"The extraData property consists of: 0x prefix. 32 bytes of vanity data. A list of initial signer addresses (at least one initial signer is required). 20 bytes for each signer. 65 bytes for the proposer signature. In the genesis block there is no initial proposer, so the proposer signature is all zeros.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/clique","h":"#extra-data","p":2879},{"i":2890,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/clique","h":"#post-merge-configuration","p":2879},{"i":2892,"t":"To start a node on a Clique private network, use the --genesis-file option to specify the custom genesis file.","s":"Connect to a Clique network","u":"/private-networks/how-to/configure/consensus/clique","h":"#connect-to-a-clique-network","p":2879},{"i":2894,"t":"Existing signers propose and vote to add or remove validators using the Clique JSON-RPC API methods. Enable the HTTP interface with --rpc-http-enabled or the WebSocket interface with --rpc-ws-enabled. The Clique API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include CLIQUE. The methods to add or remove signers are: clique_propose. clique_getSigners. clique_discard. To view signer metrics for a specified block range, call clique_getSignerMetrics.","s":"Add and remove signers","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-and-remove-signers","p":2879},{"i":2896,"t":"To propose adding a signer to a Clique network, call clique_propose, specifying the address of the proposed signer and true. A majority of signers must execute the call. JSON-RPC clique_propose request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the signer creates the next block, the signer adds a vote to the block for the proposed signer. When more than 50% of the existing signers propose adding the signer, with their votes distributed in blocks, the signer can begin signing blocks. To return a list of signers and confirm the addition of a proposed signer, call clique_getSigners. JSON-RPC clique_getSigners request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a signer, call clique_discard specifying the address of the proposed signer. JSON-RPC clique_discard request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' ","s":"Add a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-a-signer","p":2879},{"i":2898,"t":"The process for removing a signer from a Clique network is the same as adding a signer, except you specify false as the second parameter of clique_propose.","s":"Remove a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#remove-a-signer","p":2879},{"i":2900,"t":"At each epoch transition, Clique discards all pending votes collected from received blocks. Existing proposals remain in effect and signers re-add their vote the next time they create a block. Define the number of blocks between epoch transitions in the Clique genesis file.","s":"Epoch transition","u":"/private-networks/how-to/configure/consensus/clique","h":"#epoch-transition","p":2879},{"i":2902,"t":"The transitions genesis configuration item allows you to specify a future block number at which to change the Clique network configuration in an existing network. For example, you can update the block time and whether to create empty blocks. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/clique","h":"#transitions","p":2879},{"i":2904,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": 3, \"blockperiodseconds\": 1 }, { \"block\": 6, \"blockperiodseconds\": 2 }, ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-block-time-on-an-existing-network","p":2879},{"i":2906,"t":"To update an existing network with a new createemptyblocks: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change createemptyblocks. is the updated value for createemptyblocks. Syntax Example { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": , \"createemptyblocks\": } ] } }, ... } { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": 10, \"createemptyblocks\": false } ] } }, ... } Restart all nodes in the network using the updated genesis file.","s":"Configure empty blocks on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-empty-blocks-on-an-existing-network","p":2879},{"i":2908,"t":"In Clique, blocks created by in-turn validators are published immediately. Out-of-turn validators create blocks that are published after a short delay. In-turn blocks have a higher difficulty than out-of-turn blocks, which allows small forks to resolve to the chain with more in-turn blocks. However, when the out-of-turn delay is shorter than the block propagation delay, out-of-turn blocks may be published before in-turn blocks. This may cause large, irresolvable forks in a network. tip We recommend using a more updated consensus protocol such as IBFT 2.0 or QBFT.","s":"Limitations","u":"/private-networks/how-to/configure/consensus/clique","h":"#limitations","p":2879},{"i":2910,"t":"As when configuring bootnodes: Create the node key pair (that is, the private and public key) before starting the validator. When creating validators in the cloud (for example, AWS or Azure), attempt to assign static IP addresses to them. If your network is: Publicly accessible, assign an elastic IP address. Internal only, specify a private IP address when you create the instance and record this IP address. We recommend storing validator configuration under source control.","s":"Configure validators in a production network","u":"/private-networks/how-to/configure/validators","h":"","p":2909},{"i":2912,"t":"Ensure you configure enough validators to allow for redundancy. IBFT 2.0 tolerates f = (n-1)/3 faulty validators, where: f is the number of faulty validators n is the number of validators.","s":"Number of validators required","u":"/private-networks/how-to/configure/validators","h":"#number-of-validators-required","p":2909},{"i":2914,"t":"You can vote validators in or out of the validator pool.","s":"Adding and removing validators","u":"/private-networks/how-to/configure/validators","h":"#adding-and-removing-validators","p":2909},{"i":2916,"t":"Validators can also be bootnodes. Other than the usual configuration for bootnodes, you do not need to specify any extra configuration when a validator is also a bootnode. If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network.","s":"Validators as bootnodes","u":"/private-networks/how-to/configure/validators","h":"#validators-as-bootnodes","p":2909},{"i":2918,"t":"To deploy Besu using Ansible, use the Besu role published on Galaxy. For more information, see the \"Read Me\" button on the Ansible Galaxy Besu page. tip We strongly recommend automating network creation. Automating makes updates easier and ensures your configuration is synchronized across the network.","s":"Deploy Besu with Ansible","u":"/private-networks/how-to/deploy/ansible","h":"","p":2917},{"i":2920,"t":"Connect to Ethstats to display real time and historical statistics about the network and nodes. You can connect to the Ethstats dashboard by connecting to a client and server or by connecting through the command line.","s":"Connect to Ethstats network monitor","u":"/private-networks/how-to/deploy/ethstats","h":"","p":2919},{"i":2922,"t":"Ethstats consists of: A server, which consumes node data received from the client. A client, which extracts data from the node and sends it to the server. A dashboard, which displays statistics.","s":"Components","u":"/private-networks/how-to/deploy/ethstats","h":"#components","p":2919},{"i":2924,"t":"Statistics displayed by Ethstats include: Nodes in the network. Metrics for nodes include: Information about the last received block such as block number, block hash, transaction count, uncle count, block time, and propagation time. Connected peers, whether the node is mining, hash rate, latency, and uptime. Charts for block time, block difficulty, block gas limit, block uncles, block transactions, block gas used, block propagation histogram, and top miners. IP-based geolocation overview. Node logs, which display the data sent by a node. Block history, which provides the ability to go back in time and playback the block propagation through the nodes.","s":"Statistics","u":"/private-networks/how-to/deploy/ethstats","h":"#statistics","p":2919},{"i":2926,"t":"Refer to the external Ethstats client and Ethstats server documentation for installing those components and connecting to a dashboard.","s":"Connect through a client and server","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-a-client-and-server","p":2919},{"i":2928,"t":"You can use command line options to connect a node directly to a dashboard, without using a client. Start a node using the --ethstats option to specify the Ethstats server URL. You can specify a contact email to send to the server using --ethstats-contact. besu --ethstats=Dev-Node-1:secret@127.0.0.1:3001 --ethstats-contact=contact@mail.com note A server must be specified by --ethstats in order to use --ethstats-contact. Open the selected dashboard website. Find your node under the list of nodes to see the statistics for the node and the network.","s":"Connect through the command line","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-the-command-line","p":2919},{"i":2930,"t":"You can configure TLS to secure the P2P communication between nodes by ensuring only authorized nodes can communicate with each other. Use certificates issued by a trusted authority to connect authorized nodes in the network. caution P2P TLS is an early access feature, and functionality and options may be updated between releases. Besu supports PKCS11, PKCS12, and JKS keystore and truststore types for P2P TLS.","s":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","h":"","p":2929},{"i":2931,"t":"Prerequisites: A configured network. For example, see steps 1 to 5 in the QBFT tutorial. Each node requires a keystore that contains the node's certificate and key. A truststore containing all the trusted certificates for the network. Start Besu and include the following command line options on the required nodes: besu --Xp2p-tls-enabled=true \\ --Xp2p-tls-keystore-type=\"PKCS12\" \\ --Xp2p-tls-keystore-file=\"keystore\" \\ --Xp2p-tls-keystore-password-file=\"keystore.password\" \\ --Xp2p-tls-crl-file=\"crl2.pem\" \\ --Xp2p-tls-truststore-type=\"JKS\" \\ --Xp2p-tls-truststore-file=\"truststore.jks\" \\ --Xp2p-tls-truststore-password-file=\"truststore_password.txt\" In the command line: Enable TLS for P2P communication using --Xp2p-tls-enabled=true. Specify the keystore type and keystore file using --Xp2p-tls-keystore-type and --Xp2p-tls-keystore-file. Specify the text file containing the password to unlock the keystore file using --Xp2p-tls-keystore-password-file. Specify the optional certificate revocation list (CRL) file using --Xp2p-tls-crl-file. Specify the truststore type and truststore file using --Xp2p-tls-truststore-type and --Xp2p-tls-truststore-file. Specify the text file containing the password to unlock the truststore file using --Xp2p-tls-truststore-password-file.","s":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","h":"#configure-p2p-tls-1","p":2929},{"i":2934,"t":"Syntax Example Environment variable --Xp2p-tls-crl-file= --Xp2p-tls-crl-file=/home/cert/cert.crl.pem BESU_XP2P_TLS_CRL_FILE=/home/cert/cert.crl.pem Path to the optional certificate revocation list (CRL) file.","s":"Xp2p-tls-crl-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-crl-file","p":2929},{"i":2936,"t":"Syntax Example Environment variable --Xp2p-tls-enabled[=] --Xp2p-tls-enabled=true BESU_XP2P_TLS_ENABLED=true Enable TLS for P2P communication. The default is false.","s":"Xp2p-tls-enabled","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-enabled","p":2929},{"i":2938,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-file= --Xp2p-tls-keystore-file=/home/cert/keystore.jks BESU_XP2P_TLS_KEYSTORE_FILE=/home/cert/keystore.jks Keystore file containing the key and certificate to allow TLS for P2P communication.","s":"Xp2p-tls-keystore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-file","p":2929},{"i":2940,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-password-file= --Xp2p-tls-keystore-password-file=/home/cert/password.txt BESU_XP2P_TLS_KEYSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the keystore file.","s":"Xp2p-tls-keystore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-password-file","p":2929},{"i":2942,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-type= --Xp2p-tls-keystore-type=JKS BESU_XP2P_TLS_KEYSTORE_TYPE=JKS Keystore type that allows TLS for P2P communication. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.","s":"Xp2p-tls-keystore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-type","p":2929},{"i":2944,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-file= --Xp2p-tls-truststore-file=/home/cert/truststore.jks BESU_XP2P_TLS_TRUSTSTORE_FILE=/home/cert/truststore.jks Truststore containing the trusted certificates that allows TLS for P2P communication.","s":"Xp2p-tls-truststore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-file","p":2929},{"i":2946,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-password-file= --Xp2p-tls-truststore-password-file=/home/cert/password.txt BESU_XP2P_TLS_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the truststore file.","s":"Xp2p-tls-truststore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-password-file","p":2929},{"i":2948,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-type= --Xp2p-tls-truststore-type=JKS BESU_XP2P_TLS_TRUSTSTORE_TYPE=JKS Truststore type. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.","s":"Xp2p-tls-truststore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-type","p":2929},{"i":2950,"t":"Use the reference implementations to install private networks using Kubernetes (K8s). The repository has full support for cloud providers like AWS, Azure, GCP, and IBM, and has production setups that use of identities and cloud-native secret storage services like Azure KeyVault and AWS Secrets Manager. Refer to the tutorial and familiarize yourself with the reference implementations, and customize them to your requirements.","s":"Deploy Besu with Kubernetes","u":"/private-networks/how-to/deploy/kubernetes","h":"","p":2949},{"i":2952,"t":"When deploying Besu to the cloud: Ensure you have enough spread across Availability Zones (AZs) and Regions, especially for bootnodes and validators. If your network is a multi-region network, consider using VPC Peering to reduce latency. Where required, use VPNs to connect to your on premise systems, or single private chains. If deploying to Kubernetes, please refer to the tutorial.","s":"Deploy Besu to the cloud","u":"/private-networks/how-to/deploy/cloud","h":"","p":2951},{"i":2954,"t":"Use monitoring to identify node and network issues. In private networks, you can configure metrics and logging as in public networks. You can also use the following monitoring tools in private networks: Loki Elastic Stack Quorum Hibernate Splunk OpenTelemetry Chainlens Explorer For an overview of monitoring Besu, view this recording.","s":"Monitoring","u":"/private-networks/how-to/monitor","h":"","p":2953},{"i":2956,"t":"Elastic Stack (ELK) is an open-source log management platform that is available when using the Developer Quickstart. The Filebeat configuration ingests logs and the Metricbeat configuration collects metrics from the nodes at regular defined intervals and outputs them to Redis for storage. Redis provides a highly available mechanism enabling storage by any of the Elastic Beats and pulled by Logstash as required. The pipeline configuration defines the JSON format used for Besu logs and automatically picks up any new log fields. note The pipeline configuration must match the your log format. If using the default log format, you can use the grok plugin to extract the log fields. To see the Besu Quickstart network logs in Kibana: Start the Developer Quickstart with Besu, selecting ELK monitoring. Open the Kibana logs address listed by the sample networks list.sh script. The logs display in Kibana.","s":"Use Elastic Stack","u":"/private-networks/how-to/monitor/elastic-stack","h":"","p":2955},{"i":2958,"t":"Chainlens Blockchain Explorer supports public and private EVM networks. This page describes how to use the free version of Chainlens with its built-in support for privacy-enabled Besu networks created using the Developer Quickstart. Chainlens provides an overview of the entire network, including block information, contract metadata, transaction searches, and more. note You must connect to one of the privacy nodes (for example, member1besu), not the dedicated RPC, to allow access for Besu privacy API methods. In production networks, you must secure access to RPC nodes.","s":"Use Chainlens Blockchain Explorer","u":"/private-networks/how-to/monitor/chainlens","h":"","p":2957},{"i":2960,"t":"Docker and Docker Compose installed.","s":"Prerequisites","u":"/private-networks/how-to/monitor/chainlens","h":"#prerequisites","p":2957},{"i":2962,"t":"Clone the Chainlens GitHub repository: git clone https://github.com/web3labs/chainlens-free The repository contains a docker-compose directory to allow Chainlens to start with a Developer Quickstart test network. From the docker-compose directory, run the following command: NODE_ENDPOINT=http://rpcnode:8545 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up This command does two things: Sets up the node endpoint Tells Docker to run by using the two Docker Compose files provided The first docker-compose.yml file in the command contains all the services required for Chainlens. The second file named docker-compose-quorum-dev-quickstart contains the network settings required to start Chainlens on the same network as the Besu development node. Next, open http://localhost/ on your browser. You’ll see the new initialization page while it boots up. This may take 5–10 minutes for the all services to start and the ingestion sync to complete.","s":"Start Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#start-chainlens","p":2957},{"i":2964,"t":"After starting Chainlens, you can view information about your network. note Screenshots in this section are taken from the Chainlens Holesky network. The Dashboard page provides an aggregated view of network activities. The Network page provides an overview of the network status and connected peers. This page is disabled by default, and is only visible if you set DISPLAY_NETWOR_TAB=enabled using the following command: NODE_ENDPOINT=http://member1besu:8545 DISPLAY_NETWORK_TAB=enabled docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up The Blocks page shows a real-time view of the finalized blocks. You can view a given block details by selecting a block hash or number. The Transactions page shows a paginated view of new and historical transactions. If you select any transaction hash, you can get the transaction details. The Contracts page shows all the smart contracts deployed on the network. You can view a smart contract details by selecting the contract address. The Events page shows all the events generated on the network.","s":"View on Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#view-on-chainlens","p":2957},{"i":2966,"t":"To stop all the services from running, run the following command: docker-compose down","s":"Stop Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#stop-chainlens","p":2957},{"i":2968,"t":"Quorum Hibernate is a proxy that monitors a node's API traffic and hibernates the node when inactive. This reduces infrastructure costs by ensuring only nodes receiving API requests or nodes required to establish consensus are running. Quorum Hibernate wakes up hibernating nodes: When a new transaction or API request is received. To allow it to periodically sync with the network.","s":"Use Quorum Hibernate","u":"/private-networks/how-to/monitor/quorum-hibernate","h":"","p":2967},{"i":2970,"t":"In private networks, you can create and send regular transactions as in public networks. You can also: Send private transactions. Send concurrent private transactions. Include revert reason in transactions. Replace transactions in the transaction pool.","s":"Create and send transactions","u":"/private-networks/how-to/send-transactions","h":"","p":2969},{"i":2972,"t":"You can use the OpenTelemetry monitoring and tracing service to gather node metrics and traces. To enable OpenTelemetry to access Besu, use the --metrics-enabled and --metrics-protocol=opentelemetry options. Use Splunk to visualize the collected data. A Besu Sync example is available. tip Use OpenTelemetry to monitor the sync time of your Besu node and show where time is spent internally and over the JSON-RPC interface. This office hours recording shows examples of monitoring Besu.","s":"Use OpenTelemetry","u":"/private-networks/how-to/monitor/opentelemetry","h":"","p":2971},{"i":2974,"t":"Download and install the OpenTelemetry Collector. tip You can also install exporters that send system metrics to OpenTelemetry to monitor non-Besu-specific items such as disk and CPU usage. The OpenTelemetry Collector can connect to additional applications, and may be deployed in Kubernetes environments as a daemonset.","s":"Install OpenTelemetry Collector","u":"/private-networks/how-to/monitor/opentelemetry","h":"#install-opentelemetry-collector","p":2971},{"i":2976,"t":"Configure OpenTelemetry to accept data from Besu. For example, use the following configuration for your otel-collector-config.yml file, and send data to Splunk and Splunk APM: otel-collector-config.yml receivers: otlp: protocols: grpc: http: exporters: splunk_hec/traces: # Splunk HTTP Event Collector token. token: \"11111111-1111-1111-1111-1111111111113\" # URL to a Splunk instance to send data to. endpoint: \"https://:8088/services/collector\" # Optional Splunk source: https://docs.splunk.com/Splexicon:Source source: \"besu:traces\" # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype sourcetype: \"otlp\" # Splunk index, optional name of the Splunk index targeted. index: \"traces\" # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. max_connections: 20 # Whether to disable gzip compression over HTTP. Defaults to false. disable_compression: false # HTTP timeout when sending data. Defaults to 10s. timeout: 10s # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. insecure_skip_verify: true splunk_hec/metrics: # Splunk HTTP Event Collector token. token: \"11111111-1111-1111-1111-1111111111113\" # URL to a Splunk instance to send data to. endpoint: \"https://:8088/services/collector\" # Optional Splunk source: https://docs.splunk.com/Splexicon:Source source: \"besu:metrics\" # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype sourcetype: \"prometheus\" # Splunk index, optional name of the Splunk index targeted. index: \"metrics\" # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. max_connections: 20 # Whether to disable gzip compression over HTTP. Defaults to false. disable_compression: false # HTTP timeout when sending data. Defaults to 10s. timeout: 10s # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. insecure_skip_verify: true # Traces sapm: access_token: \"${SPLUNK_ACCESS_TOKEN}\" endpoint: \"https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace\" # Metrics + Events signalfx: access_token: \"${SPLUNK_ACCESS_TOKEN}\" realm: \"${SPLUNK_REALM}\" processors: batch: extensions: health_check: pprof: zpages: service: extensions: [pprof, zpages, health_check] pipelines: traces: receivers: [otlp] exporters: [splunk_hec/traces, sapm] processors: [batch] metrics: receivers: [otlp] exporters: [splunk_hec/metrics, signalfx] processors: [batch] It is easiest to run the OpenTelemetry collector with Docker with the following command: Syntax Example docker run -d \\ -v ./otel-collector-config.yml:/etc/otel/config.yaml \\ -e SPLUNK_ACCESS_TOKEN= \\ -e SPLUNK_REALM= \\ -p 4317:4317 \\ otel/opentelemetry-collector-contrib:latest docker run -d \\ -v ./otel-collector-config.yml:/etc/otel/config.yaml \\ -e SPLUNK_ACCESS_TOKEN=abcdefg654 \\ -e SPLUNK_REALM=us1 \\ -p 4317:4317 \\ otel/opentelemetry-collector-contrib:latest You can also refer to this Docker-compose example. Start Besu with the --metrics-enabled and --metrics-protocol=opentelemetry options. For example, run the following command to start a single node: Syntax Example OTEL_EXPORTER_OTLP_ENDPOINT=https://: besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317 besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry The OpenTelemetry SDK mandates how to configure the OpenTelemetry gRPC client, so data flows to the collector from Besu. You can use the following environment variables: Name Description Required OTEL_EXPORTER_OTLP_ENDPOINT OpenTelemetry Collector endpoint, of the form https://host:port. The default is https://localhost:4317. Yes OTEL_EXPORTER_OTLP_INSECURE Whether to allow insecure connections for OpenTelemetry data. The default is false. No","s":"Setting up and running OpenTelemetry with Besu","u":"/private-networks/how-to/monitor/opentelemetry","h":"#setting-up-and-running-opentelemetry-with-besu","p":2971},{"i":2978,"t":"Splunk is a third-party monitoring solution compatible with Besu. A Splunk server can receive Besu logs and enable complex search, visualization, and analysis. Splunk can aggregate multiple logs in one place and run complex queries without being connected to the machine running Besu to read the standard output. Options for running Splunk and Besu are: Developer Quickstart with Splunk Splunk Connect for Ethereum Docker Compose Use Splunk Enterprise as a Docker container Run a Splunk Enterprise instance","s":"Use Splunk","u":"/private-networks/how-to/monitor/splunk","h":"","p":2977},{"i":2980,"t":"To view the Quickstart network logs in Splunk: Start the Developer Quickstart with Besu, selecting Splunk monitoring. Open the Splunk UI.","s":"Developer Quickstart with Splunk","u":"/private-networks/how-to/monitor/splunk","h":"#developer-quickstart-with-splunk","p":2977},{"i":2982,"t":"To run a development Besu node and connect it to Splunk Enterprise, use the Splunk Connect for Ethereum demonstration Docker Compose environment provided by Splunk.","s":"Splunk Connect for Ethereum Docker Compose","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-connect-for-ethereum-docker-compose","p":2977},{"i":2984,"t":"Git Docker and Docker-compose info A Splunk license is not required to use the Splunk Connect for Ethereum demonstration.","s":"Requirements","u":"/private-networks/how-to/monitor/splunk","h":"#requirements","p":2977},{"i":2986,"t":"Clone the Splunk Connect for Ethereum repository: git clone https://github.com/splunk/splunk-connect-for-ethereum.git cd splunk-connect-for-ethereum Start the demonstration environment by following the Splunk Connect for Ethereum repository README. note Splunk enterprise takes some time to start. Run docker ps and wait for the STATUS of the 3 containers to be Up [number] seconds (healthy). CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 127600dd1173 splunkdlt/ethlogger:latest \"ethlogger\" 53 seconds ago Up 51 seconds (healthy) ethlogger 88dfcee683c4 splunk/splunk:latest \"/sbin/entrypoint.sh…\" 53 seconds ago Up 52 seconds (healthy) 8065/tcp, 8088-8089/tcp, 8191/tcp, 9887/tcp, 9997/tcp, 0.0.0.0:18000->8000/tcp splunk 111b0c6d6072 hyperledger/besu:1.4.4 \"besu\" 53 seconds ago Up 52 seconds (healthy) 8545-8547/tcp, 30303/tcp besu","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps","p":2977},{"i":2989,"t":"Docker Besu 1.4.4 or later installed info A Splunk license is not required to use the trial version of the Splunk Docker image. The image is not suitable for production use and has restrictions on daily log volume. note If running Besu as a Docker container, consider using Splunk Connect for Ethereum Docker Compose or Kubernetes instead of the Splunk Enterprise trial container.","s":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites","p":2977},{"i":2991,"t":"Start the Splunk Enterprise container: docker run \\ -e SPLUNK_START_ARGS=--accept-license \\ -e SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113 \\ -e SPLUNK_PASSWORD=changeme \\ --rm \\ -p8080:8000 -p8088:8088 \\ -d \\ --name splunk-demo \\ splunk/splunk:latest Once the service is started, connect on http://localhost:8080/ and login as the admin user with a password of changeme. tip To follow the logs of the Splunk container: docker logs -f splunk-demo Create the Besu index: In the Splunk Web interface, navigate to the index list in the settings. Create an event index with an Index Name of besu. Leave other fields with the default values. Save the besu index. Run Besu. To start a Besu node running in development mode, run the following command: LOGGER=Splunk \\ SPLUNK_URL=https://localhost:8088 \\ SPLUNK_TOKEN=11111111-1111-1111-1111-1111111111113 \\ SPLUNK_SKIPTLSVERIFY=true \\ besu \\ --network=dev \\ --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 \\ --miner-enabled \\ --logging=trace The environment variables specified send the Besu logs to Splunk. Only LOGGER, SPLUNK_URL, SPLUNK_TOKEN and SPLUNK_SKIPTLSVERIFY are required in this example. The complete list of options is in the Splunk options reference table. In the Splunk Web interface, navigate to the search page. Type index=\"besu\" in the search field. Log events sent by Besu are displayed. Congratulations! You can now play with the search and other Splunk features to explore your Besu logs. Stop Besu with ++ctrl+c++. Stop the Splunk container with docker stop splunk-demo.","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-1","p":2977},{"i":2994,"t":"Splunk Enterprise license Besu 1.4.4 or later installed","s":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites-1","p":2977},{"i":2996,"t":"Follow the steps in the Splunk Enterprise documentation to download, install, and run Splunk Enterprise. After logging into the Splunk Enterprise Web interface, navigate to the settings to: Create an HTTP Event Collector. Create an event index named besu. Run Besu as in step 3 in using Splunk on Docker. Set the SPLUNK_URL value to match the HTTP Event Collector address and port. You can display logs and use the search engine as in step 4 in using Splunk on Docker.","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-2","p":2977},{"i":2998,"t":"Name Description Required LOGGER Set to Splunk to activate sending logs to Splunk. Yes HOST Current host. If in a Docker environment, the default value is the docker container ID. Otherwise, the default value is localhost. No SPLUNK_URL URL of the Splunk HTTP Event Collector. For example, use https://localhost:8088 Yes SPLUNK_TOKEN Authentication token, usually of the form 11111111-1111-1111-1111-111111111111 Yes SPLUNK_INDEX Index to store logs. Defaults to besu No SPLUNK_SOURCE Source of the logs. Defaults to besu No SPLUNK_SOURCETYPE Source type of the logs. Defaults to besu No SPLUNK_BATCH_SIZE_BYTES Size of a log batch in bytes. Defaults to 65536 No SPLUNK_BATCH_SIZE_COUNT Size of a log batch in number of events. Defaults to 1000 No SPLUNK_BATCH_INTERVAL Interval at which to send log batches. Defaults to 500 No SPLUNK_SKIPTLSVERIFY Whether to check the Splunk instance TLS certificate when sending data. Defaults to false No","s":"Splunk options reference","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-options-reference","p":2977},{"i":3000,"t":"Private transaction processing involves two transactions, the private transaction and the privacy marker transaction (PMT). The private transaction and the PMT each have their own nonce. If your private transaction rate requires sending private transactions without waiting for the previous private transaction to be mined, using eth_getTransactionCount and eea_sendRawTransaction may result in incorrect nonces. In this case, use priv_distributeRawTransaction instead of eea_sendRawTransaction. note You can use priv_getTransactionCount or priv_getEeaTransactionCount to get the nonce for an account for the specified privacy group or participants. Send the corresponding PMT using eth_sendRawTransaction, specifying the public PMT nonce. This method allows you to create and send the PMT yourself rather than eea_sendRawTransaction handling the PMT. caution When using priv_distributeRawTransaction to distribute transactions with consecutive nonces for the same account, the corresponding PMTs must use one account with the nonces in the same order as the private transactions. This is to ensure that the private transactions are executed in the correct order. info The web3js-quorum library includes an example of how to send concurrent private transactions. The example uses offchain privacy groups. Use priv_getPrivacyPrecompileAddress to get the precompile address to specify in the to field when creating the PMT.","s":"Send concurrent private transactions","u":"/private-networks/how-to/send-transactions/concurrent-private-transactions","h":"","p":2999},{"i":3002,"t":"Grafana Loki is an open-source log management platform that is available when using the Developer Quickstart. The Promtail configuration ingests logs at regular defined intervals and outputs them to Loki for storage. The pipeline configuration in Promtail defines pipeline stages that can collate logs natively or using the JSON format. note If using the pipeline regex stage in Promtail, configuration must match your log format. To view the GoQuorum Quickstart network logs in Loki: Start the Developer Quickstart with Besu, selecting Loki monitoring. Open the Grafana Loki address listed by the sample networks list.sh script. The logs display in Loki.","s":"Grafana Loki","u":"/private-networks/how-to/monitor/loki","h":"","p":3001},{"i":3004,"t":"info Node upgrades upgrade your Besu client to a later version. In private networks, you can upgrade your node as in public networks. Network upgrades are the mechanism for upgrading the Ethereum protocol. Protocol upgrades occur during the network upgrades. For Ethereum Mainnet and public testnets, the milestone block definitions are included in Besu. Upgrading your Besu client applies the network upgrade. For private networks, all network participants must agree on the protocol upgrades and coordinate the network upgrades. The genesis file specifies the milestone block at which to apply the protocol upgrade.","s":"Network and protocol upgrades","u":"/private-networks/how-to/upgrade","h":"","p":3003},{"i":3006,"t":"To upgrade the protocol in a private network: Review included EIPs for breaking changes. A meta EIP for each protocol upgrade lists included EIPs. For example, Istanbul. Network participants agree on the block number at which to upgrade. For each node in the network: Add the milestone block number to the genesis file. Restart the node before reaching milestone block. caution To avoid a forked network, all network participants must update their genesis file to include the agreed on milestone block and restart their node before reaching the milestone block. tip For compatibility with future protocol upgrades, don't hardcode any gas price assumptions. Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does include breaking changes.","s":"Upgrade the protocol","u":"/private-networks/how-to/upgrade","h":"#upgrade-the-protocol","p":3003},{"i":3008,"t":"Create and send private transactions using: web3js-quorum client library or web3j client library eea_sendRawTransaction priv_distributeRawTransaction. All private transaction participants must be online for a private transaction to be successfully distributed. If any participants are offline when submitting the private transaction, the transaction is not attempted and you must resubmit the transaction. The gas and gasPrice specified when sending a private transaction are used by the privacy marker transaction (PMT), not the private transaction itself. note Private transactions either deploy contracts or call contract functions. Ether transfer transactions cannot be private.","s":"Create and send private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","h":"","p":3007},{"i":3010,"t":"eea_sendRawTransaction distributes the private transaction to the participating nodes, and signs and submits the PMT, as described in Private transaction processing. note If sending concurrent transactions, you must use priv_distributeRawTransaction instead of eea_sendRawTransaction.","s":"eea_sendRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea_sendrawtransaction","p":3007},{"i":3012,"t":"Use priv_distributeRawTransaction instead of eea_sendRawTransaction when sending concurrent private transactions. priv_distributeRawTransaction distributes the private transaction to the participating nodes but does not sign and submit the PMT. That is, it performs steps 1 to 5 of private transaction processing. If using priv_distributeRawTransaction instead of eea_sendRawTransaction, use the value returned by priv_distributeRawTransaction, which is the enclave key to the private transaction in Tessera, in the data field of a call to eth_sendRawTransaction. Use the value returned by priv_getPrivacyPrecompileAddress, which is the address of the privacy precompiled contract, in the to field of the call. By using the public Ethereum transaction, eth_sendRawTransaction, you are signing and submitting the PMT yourself instead of having it signed by the Besu node, giving you greater control over the PMT. warning If the PMT is not sent after distributing the private transaction, the distributed private transaction is not executed and the private states are not updated. Distribute private transaction using priv_distributeRawTransaction { \"jsonrpc\": \"2.0\", \"method\": \"priv_distributeRawTransaction\", \"params\": [ \"0xf90198808203e8832dc6c08080b8fb608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c003600291ba05393543d483654fd01d9ee818cddfc7527dd6e13e6ef7b45a61e2ca13ffb6b70a0452338873862803ffe04056aea98cd0e3417ff971dcb384e54fce8ca1756a665a09de8260dc3763f8383a6a9ffe96909d36cd3ff4c346e3846a6467c50feaf0119e1a0839f41993789227ec721c9eaf1541683287fa436ef6edd9ec8fd088bad1a0c3c8a72657374726963746564\" ], \"id\": 1 } Enclave key to the private transaction in Tessera returned by priv_distributeRawTransaction { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\" } Send the enclave key in the data field, and the privacy precompile address in the to field of eth_sendRawTransaction: { \"jsonrpc\": \"2.0\", \"method\": \"eth_sendRawTransaction\", \"params\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"to\": \"0x000000000000000000000000000000000000007e\", \"data\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\", \"gas\": \"0x2E1800\", \"gasPrice\": \"0x9184e72a000\" } ], \"id\": 1 }","s":"priv_distributeRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#priv_distributerawtransaction","p":3007},{"i":3014,"t":"To create an EEA-compliant private transaction, specify privateFor when creating the signed transaction passed as an input parameter to eea_sendRawTransaction. To create a Besu-extended private transaction, specify a privacyGroupId when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"EEA-compliant or Besu-extended privacy","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea-compliant-or-besu-extended-privacy","p":3007},{"i":3016,"t":"The eea_sendRawTransaction parameter is a signed RLP-encoded private transaction. Shown below are examples of unsigned and unencoded private transactions to create a contract. Unencoded and unsigned EEA-compliant private transaction { \"to\": null, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x7600\", \"gasPrice\": \"0x0\", \"data\": \"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"nonce\": \"0x0\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privateFor\": [ \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\", \"6fg8q5rWMBoAT2oIiU3tYJbk4b7oAr7dxaaVY7TeM3U=\" ], \"restriction\": \"restricted\" } Unencoded and unsigned Besu-extended private transaction { \"to\": null, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x7600\", \"gasPrice\": \"0x0\", \"data\": \"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"nonce\": \"0x0\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privacyGroupId\": \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\", \"restriction\": \"restricted\" } tip The example directory in the web3js-quorum client library contains examples of signing and encoding private transactions.","s":"Unsigned and unencoded private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#unsigned-and-unencoded-private-transactions","p":3007},{"i":3018,"t":"In smart contracts, the revert operation triggers an exception to flag an error and revert the current call. The EVM passes back to the client an optional string message containing information about the error. pragma solidity ^0.8.4; contract VendingMachine { address owner; constructor() { owner = msg.sender; } error Unauthorized(); function buy(uint amount) public payable { if (amount > msg.value / 2 ether) revert(\"Not enough Ether provided.\"); // Alternative way to do it: require( amount <= msg.value / 2 ether, \"Not enough Ether provided.\" ); // Perform the purchase. } function withdraw() public { if (msg.sender != owner) revert Unauthorized(); payable(msg.sender).transfer(address(this).balance); } }","s":"Revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","h":"","p":3017},{"i":3020,"t":"Use the --revert-reason-enabled command line option to include the revert reason in the transaction receipt and the trace response in Besu. caution Enabling revert reason may use a significant amount of memory. We do not recommend enabling revert reason when connected to public Ethereum networks.","s":"Enable revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#enable-revert-reason","p":3017},{"i":3022,"t":"With revert reason enabled, the transaction receipt returned by eth_getTransactionReceipt includes the revert reason as an ABI-encoded string. info The revert reason is not included in the transaction receipt's root hash. Not including the revert reason in the transactions receipt's root hash means the revert reason is only available to nodes that execute the transaction when importing the block. That is, the revert reason is not available if using fast synchronization (--sync-mode=FAST). Example of transaction receipt { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x5208\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gasUsed\": \"0x5208\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3\", \"transactionIndex\": \"0x0\", \"revertReason\": \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\" } } With revert reason enabled, the list items in the trace response returned by trace_replayBlockTransactions, trace_block, and trace_transaction include the revert reason as an ABI-encoded string. Example of trace response list item { \"jsonrpc\": \"2.0\", \"id\": 415, \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffadea\", \"input\": \"0x\", \"to\": \"0x0110000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x220bc13dc4f1ed38dcca927a5be15eca16497d279f4c40d7b8fe9704eadf1464\", \"blockNumber\": 18, \"error\": \"Reverted\", \"revertReason\": \"0x7d88c1856cc95352\", \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": \"0xc388baa0e55e6b73e850b22dc7e9853700f6b995fd55d95dd6ccd5a13d63c566\", \"transactionPosition\": 1, \"type\": \"call\" } ] } By default, the error returned by eth_estimateGas and eth_call includes the revert reason as an ABI-encoded string in the data field. Example of eth_estimateGas and eth_call error { \"jsonrpc\": \"2.0\", \"id\": 3, \"error\": { \"code\": -32000, \"message\": \"Execution reverted: ERC20: transfer amount exceeds balance\", \"data\": \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\" } }","s":"Where the revert reason is included","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#where-the-revert-reason-is-included","p":3017},{"i":3024,"t":"As described in the Solidity documentation, the revert reason is an ABI-encoded string consisting of: 0x08c379a0 // Function selector for Error(string) 0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset 0x000000000000000000000000000000000000000000000000000000000000001a // String length 0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data Example of revert reason string for 'Not enough Ether provided' \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\"","s":"Revert reason format","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#revert-reason-format","p":3017},{"i":3026,"t":"Client libraries, such as web3j, do not support extracting the revert reason from the transaction receipt. To extract the revert reason your dapp must interact directly with Besu using a custom JSON -> Object converter.","s":"Dapp support","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#dapp-support","p":3017},{"i":3028,"t":"This page contains some extra info if you're using onchain permissioning. tip If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect. important Node allowlists support domain names in enode URLs as an early access feature. Use the --Xdns-enabled option to enable domain name support. If using Kubernetes, enable domain name support and use the --Xdns-update-enabled option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes. tip If you add a running node, the node does not attempt to reconnect to the bootnode and synchronize until peer discovery restarts. To add an allowlisted node as a peer without waiting for peer discovery to restart, use admin_addPeer. If you add the node to the allowlist before starting the node, using admin_addPeer is not required because peer discovery is run on node startup. tip If nodes are not connecting as expected, set the log level to TRACE and search for messages containing Node permissioning to identify the issue. Ensure the --p2p-host command line option has been correctly configured for all nodes with the externally accessible address. If you change your network configuration, you may need to update the node allowlist.","s":"Use onchain permissioning","u":"/private-networks/how-to/use-permissioning/onchain","h":"","p":3027},{"i":3030,"t":"Use the --permissions-nodes-contract-version command line option to specify the version of the permissioning contract interface. The default is 1. Specify the contract interface version that maps to the version of the Enterprise Ethereum Alliance Client Specification the contract interface implements. EEA Client Specification Contract interface Version 5 1 Version 6 2 The permissioning contracts in the ConsenSys/permissioning-smart-contracts repository implement the version 2 contract interface.","s":"Specify the permissioning contract interface version","u":"/private-networks/how-to/use-permissioning/onchain","h":"#specify-the-permissioning-contract-interface-version","p":3027},{"i":3032,"t":"Local permissioning supports node and account allowlisting.","s":"Use local permissioning","u":"/private-networks/how-to/use-permissioning/local","h":"","p":3031},{"i":3034,"t":"You can allow access to specified nodes in the permissions configuration file. With node allowlisting enabled, communication is only between nodes in the allowlist. info Node allowlists support domain names in enode URLs as an early access feature. Use the --Xdns-enabled option to enable domain name support. If using Kubernetes, enable domain name support and use the --Xdns-update-enabled option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes. Nodes allowlist in the permissions configuration file nodes-allowlist=[\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.168.0.9:4567\",\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.169.0.9:4568\"] Node allowlisting is at the node level. That is, each node in the network has a permissions configuration file file in the data directory for the node. Local permissioning doesn't check that the node using the permissions configuration file is listed in the allowlist, it only checks that the remote end of the connection is in the allowlist. Use onchain permissioning if you need to check both ends of the connection.","s":"Node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#node-allowlisting","p":3031},{"i":3036,"t":"The nodes permissions list must include the bootnodes or Besu doesn't start with node permissions enabled. If you start Besu with specified bootnodes and have node permissioning enabled: --bootnodes=\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\",\"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\" The nodes-allowlist in the permissions configuration file must contain the specified bootnodes. tip If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect.","s":"Specify bootnodes in the allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#specify-bootnodes-in-the-allowlist","p":3031},{"i":3038,"t":"To enable node allowlisting, specify the --permissions-nodes-config-file-enabled option when starting Besu. The PERM API methods are not enabled by default. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"Enable node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-node-allowlisting","p":3031},{"i":3040,"t":"To update the nodes allowlist while the node is running, use the following JSON-RPC API methods: perm_addNodesToAllowlist perm_removeNodesFromAllowlist You can also update the permissions_config.toml file directly and then update the allowlist using the perm_reloadPermissionsFromFile method. Updates to the permissions configuration file persist across node restarts.","s":"Update the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-node-allowlist","p":3031},{"i":3042,"t":"To view the nodes allowlist, use the perm_getNodesAllowlist method. note Each node has a permissions configuration file, which means nodes can have different nodes allowlists. This means nodes might be participating in the network that are not on the allowlist of other nodes in the network. We recommend each node in the network has the same nodes allowlist. Example of different node allowlists Node 1 Allowlist = [Node 2, Node 3] Node 2 Allowlist = [Node 3, Node 5] Node 5 is participating in the same network as Node 1 even though Node 1 does not have Node 5 on their allowlist.","s":"View the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-node-allowlist","p":3031},{"i":3044,"t":"You can specify accounts in the accounts allowlist in the permissions configuration file. A node with account permissioning accepts transactions only from accounts in the accounts allowlist. Accounts allowlist in the permissions configuration file accounts-allowlist=[\"0x0000000000000000000000000000000000000009\"] Account allowlisting is at the node level. That is, each node in the network has a permissions configuration file in the data directory for the node. Using account permissioning and privacy Account permissioning is incompatible with random key signing for privacy marker transactions. If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist. Transaction validation against the accounts allowlist occurs at the following points: Submitted by JSON-RPC API method eth_sendRawTransaction Received via propagation from another node Added to a block by a mining node After adding transactions to a block, the transactions are not validated against the allowlist when received by another node. That is, a node can synchronize and add blocks containing transactions from accounts that are not on the accounts allowlist of that node. The following diagram illustrates applying local and onchain permissioning rules. Example of different account allowlists Node 1 Allowlist = [Account A, Account B] Node 2 Allowlist = [Account B, Account C] Mining Node Allowlist = [Account A, Account B] Account A submits a transaction on Node 1. Node 1 validates and propagates the transaction. The Mining Node receives the transaction, validates it is from an account in the Mining Node accounts allowlist, and includes the transaction in the block. Node 2 receives and adds the block created by the Mining Node. Node 2 now has a transaction in the blockchain from Account A, which is not on the accounts allowlist for Node 2. note Each node has a permissions configuration file which means nodes in the network can have different accounts allowlists. This means a transaction can be successfully submitted by Node A from an account in the Node A allowlist but rejected by Node B to which it's propagated if the account is not in the Node B allowlist. We recommend each node in the network has the same accounts allowlist.","s":"Account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#account-allowlisting","p":3031},{"i":3046,"t":"To enable account allowlisting, specify the --permissions-accounts-config-file-enabled option when starting Besu. The PERM API methods are not enabled by default. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"Enable account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-account-allowlisting","p":3031},{"i":3048,"t":"To update the accounts allowlist when the node is running, use the JSON-RPC API methods: perm_addAccountsToAllowlist perm_removeAccountsFromAllowlist. You can also update the permissions_config.toml file directly and use the perm_reloadPermissionsFromFile method to update the allowlists. Updates to the permissions configuration file persist across node restarts.","s":"Update the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-account-allowlist","p":3031},{"i":3050,"t":"To view the accounts allowlist, use the perm_getAccountsAllowlist method.","s":"View the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-account-allowlist","p":3031},{"i":3052,"t":"The permissions configuration file contains the nodes and accounts allowlists. If the --permissions-accounts-config-file and --permissions-nodes-config-file options are not specified, the name of the permissions configuration file must be permissions_config.toml and must be in the data directory for the node. You can specify the accounts and nodes allowlists in the same file or in separate files for accounts and nodes. To specify a permissions configuration file (or separate files for accounts and nodes) in any location, use the --permissions-accounts-config-file and --permissions-nodes-config-file options. note The --permissions-accounts-config-file and permissions-nodes-config-file options are not used when running Besu from the Docker image. Use a bind mount to specify a permissions configuration file with Docker. Sample permissions configuration file accounts-allowlist=[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"] nodes-allowlist=[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\",\"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\"]","s":"Permissions configuration file","u":"/private-networks/how-to/use-permissioning/local","h":"#permissions-configuration-file","p":3031},{"i":3054,"t":"A Besu private transaction creates a privacy marker transaction and the private transaction itself.","s":"Access private and privacy marker transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"","p":3053},{"i":3056,"t":"With the transaction hash returned when submitting the private transaction, to get the transaction receipt for the: Private transaction, use priv_getTransactionReceipt. Privacy marker transaction, use eth_getTransactionReceipt. The transaction receipt includes a status indicating if the transaction failed (0x0), succeeded (0x1), or was invalid (0x2). Private transaction failure example To deploy a private contract, you submit a transaction using eea_sendRawTransaction. If contract deployment fails because of insufficient gas, the privacy marker transaction receipt has a status of success and the private transaction receipt has a status of failure.","s":"Transaction receipts","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transaction-receipts","p":3053},{"i":3058,"t":"With the transaction hash returned when submitting the private transaction, to get the: Private transaction, use priv_getPrivateTransaction. Privacy marker transaction, use eth_getTransactionByHash.","s":"Transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transactions","p":3053},{"i":3060,"t":"When using Besu EEA-compliant privacy, the group of nodes specified by privateFrom and privateFor form a privacy group, to which Tessera assigns a unique privacy group ID. To enable the EEA API methods, use the --rpc-http-api or --rpc-ws-api command line options. To create an EEA-compliant private transaction, specify privateFor when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"Use EEA-compliant privacy","u":"/private-networks/how-to/use-privacy/eea-compliant","h":"","p":3059},{"i":3062,"t":"Privacy groups created when specifying privateFrom and privateFor have a LEGACY privacy group type when returned by priv_findPrivacyGroup. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"68/Cq0mVjB8FbXDLE1tbDRAvD/srluIok137uFOaClM=\", \"name\": \"legacy\", \"description\": \"Privacy groups to support the creation of groups by privateFor and privateFrom\", \"type\": \"LEGACY\", \"members\": [ \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\", \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\" ] } ] }","s":"Privacy group type","u":"/private-networks/how-to/use-privacy/eea-compliant","h":"#privacy-group-type","p":3059},{"i":3064,"t":"Besu provides an extended implementation of privacy allowing you to create a privacy group for a set of participants. You must specify the privacy group ID when sending private transactions. To enable the PRIV API methods, use the --rpc-http-api or --rpc-ws-api command line options. To create the privacy group containing the recipients of a private transaction, use priv_createPrivacyGroup. To create an EEA-compliant private transaction, specify privacyGroupId when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"Use Besu-extended privacy","u":"/private-networks/how-to/use-privacy/besu-extended","h":"","p":3063},{"i":3066,"t":"Privacy groups created using priv_createPrivacyGroup have a BESU privacy group type when returned by priv_findPrivacyGroup. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=\", \"name\": \"Group B\", \"description\": \"Description of Group B\", \"type\": \"BESU\", \"members\": [ \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\" ] } ] }","s":"Privacy group type","u":"/private-networks/how-to/use-privacy/besu-extended","h":"#privacy-group-type","p":3063},{"i":3068,"t":"Use the web3js-quorum library to create and update membership of flexible privacy groups. tip Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups. info Flexible privacy groups are an early access feature. Don't use in production networks. The flexible privacy group interfaces may change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions. We don't recommend creating flexible privacy groups in a chain with existing offchain privacy groups.","s":"Use flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","h":"","p":3067},{"i":3070,"t":"Use the --privacy-flexible-groups-enabled command line option to enable flexible privacy groups. When flexible privacy groups are enabled, the priv_createPrivacyGroup, priv_deletePrivacyGroup, and priv_findPrivacyGroup methods for offchain privacy groups are disabled.","s":"Enable flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","h":"#enable-flexible-privacy-groups","p":3067},{"i":3072,"t":"To create and find a flexible privacy group using the web3js-quorum library: Update the example/keys.js file to match your network configuration. Run: cd example/onchainPrivacy node simpleExample.js This script creates the flexible privacy group with two members. findPrivacyGroup finds and displays the created privacy group. tip The Tessera logs for Tessera 1 and Tessera 2 display PrivacyGroupNotFound errors. This is expected behavior because private transactions check offchain and onchain to find the privacy group for a private transaction.","s":"Simple flexible privacy group example","u":"/private-networks/how-to/use-privacy/flexible","h":"#simple-flexible-privacy-group-example","p":3067},{"i":3074,"t":"To add and remove members from a flexible privacy group, use the addTo and removeFrom methods in the web3js-quorum library client library. note When adding a member, Besu pushes all existing group transactions to the new member and processes them. If there are a large number of existing transactions, adding the member may take some time.","s":"Add and remove members","u":"/private-networks/how-to/use-privacy/flexible","h":"#add-and-remove-members","p":3067},{"i":3076,"t":"This document collects deployment and usage tips to help you achieve high performance for private transactions. If transaction throughput or latency is not meeting your expectations, please consider the following before raising an issue.","s":"Performance best practices","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"","p":3075},{"i":3078,"t":"Private transactions use the same facilities as public ones. General Besu performance tunings apply. Specific approaches are out of scope of this document, except for the following, which strongly impacts performance:","s":"General performance","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#general-performance","p":3075},{"i":3080,"t":"Running EVM transactions creates a lot of random reads that are executed sequentially. The Besu data folder for high throughput nodes should be located on the fastest possible storage media. Prefer NVMe attached SLC flash or Intel Optane. Avoid network attached SSDs or cloud storage with limited input/output operations per second. Do not use spinning disks under any circumstances.","s":"Use fast, local, solid state storage","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-fast-local-solid-state-storage","p":3075},{"i":3083,"t":"When submitting a private transaction using web3js-quorum, the submit call will only return once the privacy marker transaction has been included in a block. This limits the throughput to at most one private transaction per block when submitting from a single thread. To increase throughput, use web3js-quorum from multiple concurrent threads or processes.","s":"Use concurrent submission","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-concurrent-submission","p":3075},{"i":3085,"t":"Besu has to talk to its local Tessera node frequently while handling a block. While we do not recommend running them on the same node, minimizing the latency between Besu and Tessera will improve block processing times. Besu and Tessera should not be hosted in geographically distributed locations.","s":"Co-locate Besu and Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#co-locate-besu-and-tessera","p":3075},{"i":3087,"t":"When distributing a new private transaction between Tessera nodes, the overall throughput is determined by the slowest Tessera nodes. Try to minimize network latency between Tessera nodes and do not mix different machine types when hosting Tessera.","s":"Optimize worst-case latency between Tessera nodes","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#optimize-worst-case-latency-between-tessera-nodes","p":3075},{"i":3089,"t":"Management of public and private nonces in web3js-quorum is stateless: before a transaction is sent, web3js-quorum has to query for those nonces. This is increasing latency, the node's load, and is a source of fragility due to nonce collision when multiple senders try to use the same account concurrently. For performance and reliability it is advantageous to manage nonces in a stateful manner on the client side instead of querying them for every transaction.","s":"Use stateful nonce management","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-stateful-nonce-management","p":3075},{"i":3091,"t":"To avoid public nonce management, privacy marker transactions can be sent using a random account per transaction. This option is only available for zero gas networks.","s":"Use random senders for privacy marker transactions","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-random-senders-for-privacy-marker-transactions","p":3075},{"i":3093,"t":"When Tessera is overloaded with transactions, the performance breaks down catastrophically due to unbounded growth of the request queue. Avoid sending more transactions to Tessera than it can handle. Sudden jumps in submission latency and submission failure rate should be answered with a load reduction on the client side, for example using a back-off scheme. Please note that this is not Tessera specific but a general issue in distributed systems. It just happens that if queueing discipline is not maintained, Tessera tends to be the first component to fail.","s":"Avoid queuing transactions in Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#avoid-queuing-transactions-in-tessera","p":3075},{"i":3095,"t":"Smaller groups need fewer communication for transaction propagation. If reducing the number of Tessera nodes involved in a transaction is an option, it will lead to slightly better tail latencies. Multi-tenancy Tessera can be used to have large groups with a small number of Tessera nodes (possibly only one).","s":"Limit the group size to reduce communication overhead","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-the-group-size-to-reduce-communication-overhead","p":3075},{"i":3097,"t":"Groups are locked (prevented from executing transactions) during membership changes. Try to minimize the number of times the membership changes. When possible, spread load across multiple groups to always have some groups available while others are locked. Consider batching group membership changes if possible. Note however that this does not work with the default management contract, yet.","s":"Limit group membership changes and make them quick","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-group-membership-changes-and-make-them-quick","p":3075},{"i":3099,"t":"Besu-extended privacy provides JSON-RPC API methods for creating and managing privacy groups: priv_createPrivacyGroup priv_findPrivacyGroup priv_deletePrivacyGroup. tip You can find and delete EEA-compliant privacy groups using priv_findPrivacyGroup and priv_deletePrivacyGroup.","s":"Create and manage privacy groups","u":"/private-networks/how-to/use-privacy/privacy-groups","h":"","p":3098},{"i":3101,"t":"To enable privacy functionality in production systems, Tessera must be highly available and run in a separate instance to Besu. note You can also configure Besu for high availability using load balancers.","s":"Run Tessera with Besu","u":"/private-networks/how-to/use-privacy/tessera","h":"","p":3100},{"i":3103,"t":"Privacy requires you to configure Tessera for high availability. Besu also requires orion mode to be enabled in Tessera. To successfully distribute a private transaction, all private transaction participants must be online. If any participants are offline when submitting the private transaction, the transaction is not attempted and you need to resubmit the transaction. If a Tessera node is unavailable when Besu attempts to process a privacy marker transaction, the Besu node stops processing all new blocks until Tessera is available. The Besu node continually attempts to process the privacy marker transaction until Tessera is available again. caution If Tessera becomes available but has lost data, Besu resumes processing blocks and the private states in the Besu nodes might become inconsistent.","s":"High availability","u":"/private-networks/how-to/use-privacy/tessera","h":"#high-availability","p":3100},{"i":3105,"t":"For production systems, we recommend running Besu and Tessera in separate instances. If running Besu and Tessera in the same instance, restrict the amount of memory used by each JVM to ensure each has enough memory.","s":"Separate instances","u":"/private-networks/how-to/use-privacy/tessera","h":"#separate-instances","p":3100},{"i":3107,"t":"You can sign privacy marker transactions (PMTs) with either a random key or a specified key. To sign privacy marker transactions with a specified private key, use --privacy-marker-transaction-signing-key-file when starting Besu. note The private key file can be the same file used by --node-private-key-file, or a different key file to identify who signed the privacy marker transaction. In networks where you pay gas, you must specify a key and the associated account must contain adequate funds. In free gas networks, to provide further anonymity by signing each privacy marker transaction with a different random key, exclude the --privacy-marker-transaction-signing-key-file command line option when starting Besu. \"Using account permissioning and privacy\" You can't use account permissioning with random key signing. If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist. note Besu signs privacy marker transactions during the private transaction process.","s":"Sign privacy marker transactions","u":"/private-networks/how-to/use-privacy/sign-pmts","h":"","p":3106},{"i":3109,"t":"This section provides reference material for private network features. The following features and resources are shared with public networks and the content can be found in the public networks section: Besu command line: Standard options Standard subcommands Besu API: Standard Besu API methods Standard Besu API objects Genesis file items EVM tool options Transaction trace types Projects using Besu Security disclosure policy","s":"Reference","u":"/private-networks/reference","h":"","p":3108},{"i":3111,"t":"You can use existing accounts for testing by including them in the genesis file for a private network. Besu also provides predefined accounts for use in development mode.","s":"Accounts for testing","u":"/private-networks/reference/accounts-for-testing","h":"","p":3110},{"i":3113,"t":"When you start Besu with the --network=dev command line option, Besu uses the dev.json genesis file by default. The dev.json genesis file defines the following accounts used for testing. Do not use the test accounts on Ethereum Mainnet or any production network. The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code. They are not secure and everyone can use them. Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud. In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. Always secure your Ethereum Mainnet and any production account properly. See for instance MyCrypto \"Protecting Yourself and Your Funds\" guide. \"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)\" Private key to copy : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 200 Eth (200000000000000000000 Wei) \"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)\" Private key to copy : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 Initial balance : 90000 Eth (90000000000000000000000 Wei) \"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)\" Private key to copy : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance : 90000 Eth (90000000000000000000000 Wei)","s":"Development mode","u":"/private-networks/reference/accounts-for-testing","h":"#development-mode","p":3110},{"i":3115,"t":"To use existing test accounts, specify the accounts and balances in a genesis file for your test network. For an example of how to define accounts in the genesis file, see dev.json. To start Besu with the genesis file defining the existing accounts, use the --genesis-file command line option .","s":"Genesis file","u":"/private-networks/reference/accounts-for-testing","h":"#genesis-file","p":3110},{"i":3117,"t":"web3js-quorum is an Ethereum JavaScript library extending web3.js that adds support for Besu-specific JSON-RPC APIs and features. Use the library to create and send RLP-encoded transactions using JSON-RPC. important web3js-quorum supports JSON-RPC over HTTP only. note web3js-quorum includes all quorum.js and web3js-eea features. If migrating to web3js-quorum, update your JavaScript code as indicated in the following examples. Read the migration guide for more information about updating your code.","s":"Use the web3js-quorum client library","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"","p":3116},{"i":3119,"t":"Node.js (version > 10) The web3 library must be installed in your project","s":"Prerequisites","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#prerequisites","p":3116},{"i":3121,"t":"npm install web3js-quorum","s":"Add web3js-quorum to project","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#add-web3js-quorum-to-project","p":3116},{"i":3123,"t":"Initialize your client where is the JSON-RPC HTTP endpoint of your Besu node. Specified by the --rpc-http-host and --rpc-http-port command line options. Syntax Example const { Web3 } = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"\")); const { Web3 } = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:8545\")); note When migrating from web3js-eea to web3js-quorum, use Web3Quorum. The constructor doesn't require the chain ID anymore. Chain ID is automatically retrieved from the chain using the specified JSON-RPC HTTP endpoint.","s":"Initialize the web3js-quorum client","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#initialize-the-web3js-quorum-client","p":3116},{"i":3125,"t":"To deploy a private contract, you need the contract binary. You can use Solidity to get the contract binary. Deploying a contract with 'web3.priv.generateAndSendRawTransaction' const contractOptions = { data: `0x123`, // contract binary privateFrom: \"tesseraNode1PublicKey\", privateFor: [\"tesseraNode3PublicKey\"], privateKey: \"besuNode1PrivateKey\", }; return web3.priv.generateAndSendRawTransaction(contractOptions); web3.priv.generateAndSendRawTransaction(contractOptions) returns the transaction hash. To get the private transaction receipt, use web3.priv.waitForTransactionReceipt(txHash).","s":"Deploy a contract with generateAndSendRawTransaction","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#deploy-a-contract-with-generateandsendrawtransaction","p":3116},{"i":3127,"t":"For more information about the web3js-quorum methods, see the web3js-quorum reference documentation.","s":"web3js-quorum methods","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#web3js-quorum-methods","p":3116},{"i":3129,"t":"The following objects are parameters for or returned by Besu private network API methods. Important This reference contains API objects that apply to only private networks. For API objects that apply to both private and public networks, see the public network API objects reference.","s":"Private network API objects","u":"/private-networks/reference/api/objects","h":"","p":3128},{"i":3131,"t":"Returned by priv_getPrivateTransaction. Key Type Value from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity Gas price, in Wei, provided by the sender. input Data The data to create or invoke a contract. nonce Quantity Number of transactions made by the sender to the privacy group before this one. to Data, 20 bytes null if a contract creation transaction, otherwise, the contract address. value Quantity null because private transactions cannot transfer Ether. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s. privateFrom Data, 32 bytes Tessera public key of the sender. privateFor Array of Data, 32 bytes each Tessera public keys of recipients. Not returned if using privacyGroupId to send the transaction. privacyGroupId Data, 32 bytes Tessera privacy group ID of recipients. Not returned if using privateFor to send the transaction. restriction String Must be restricted.","s":"Private transaction object","u":"/private-networks/reference/api/objects","h":"#private-transaction-object","p":3128},{"i":3133,"t":"Returned by priv_getTransactionReceipt. Key Type Value blockHash Data, 32 bytes Hash of block containing this transaction. blockNumber Quantity Block number of block containing this transaction. contractAddress Data, 20 bytes Contract address created if a contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value. from Data, 20 bytes Address of the sender. logs Array Array of log objects generated by this private transaction. to Data, 20 bytes Address of the receiver, if sending ether, otherwise, null. transactionIndex Quantity, Integer Index position of transaction in the block. revertReason String ABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled. output Data RLP-encoded return value of a contract call if a value returns, otherwise, null. commitmentHash Data, 32 bytes Hash of the privacy marker transaction. status Quantity Either 0x1 (success) or 0x0 (failure). privateFrom Data, 32 bytes Tessera public key of the sender. privateFor or privacyGroupId Array or Data, 32 bytes Tessera public keys or privacy group ID of the recipients. logsBloom Data, 256 bytes Bloom filter for light clients to quickly retrieve related logs.","s":"Private transaction receipt object","u":"/private-networks/reference/api/objects","h":"#private-transaction-receipt-object","p":3128},{"i":3135,"t":"API interfaces in Besu allow users to build plugins to extend Besu functionality. For more information about the available interfaces, see the Plugin API Javadoc. Javadoc issue The plugin API documentation is currently not being updated. We're working on a fix, but in the meantime, some links are temporarily pointing to wiki.hyperledger.org.","s":"Plugin API interfaces","u":"/private-networks/reference/plugin-api-interfaces","h":"","p":3134},{"i":3137,"t":"The following table lists the interfaces providing core plugin classes. Interface Description BesuContext Allows plugins to access Besu services. BesuPlugin Used to manage the plugin lifecycle.","s":"Core plugin classes","u":"/private-networks/reference/plugin-api-interfaces","h":"#core-plugin-classes","p":3134},{"i":3139,"t":"The following table lists interfaces providing services you can retrieve. Interface Description BesuEvents Allows plugins to attach to events during Besu operation. BesuConfiguration Provides file system locations of Besu's storage. IbftQueryService Allows query of the IBFT 2.0 aspects of the blockchain. MetricCategoryRegistry Adds a new metrics category to the CLI. MetricsSystem Register metrics with the Prometheus endpoint. PoaQueryService Query the current state of Clique and IBFT 2.0 consensus protocols. PicoCLIOptions Adds CLI commands to the Besu command line. SecurityModuleService Allows plugins to register a security module. StorageService Allows plugins to register as a storage engine. For example, to connect to a hardware security module (HSM). PermissioningService Allows for fine grain control of node connection and node messaging permissioning. PrivacyPluginService Provides a way to define how privacy marker transactions are created, and what private genesis to use. RpcEndpointService Register custom RPC endpoints. To use the interfaces in your plugin, ensure the Gradle build file contains the https://hyperledger.jfrog.io/hyperledger/besu-maven repository and the plugin-api dependency. Known issue As indicated in issue #406, plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage. It's in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the register step and store it in memory. The start step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available.","s":"Plugin services","u":"/private-networks/reference/plugin-api-interfaces","h":"#plugin-services","p":3134},{"i":3141,"t":"This reference describes the syntax of the Besu private network command line interface (CLI) subcommands. Important This reference contains subcommands that apply to only private networks. For subcommands that apply to both private and public networks, see the public network subcommands reference. To start a Besu node using subcommands, run: besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS] If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice. besu Tab+Tab","s":"Private network subcommands","u":"/private-networks/reference/cli/subcommands","h":"","p":3140},{"i":3143,"t":"Provides operator actions.","s":"operator","u":"/private-networks/reference/cli/subcommands","h":"#operator","p":3140},{"i":3145,"t":"Syntax Example besu operator generate-blockchain-config --config-file= --to= [--genesis-file-name=] [--private-key-file-name=] [--public-key-file-name=] besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles Generates an IBFT 2.0 or QBFT genesis file. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 or QBFT genesis file, except for the extraData string. The second is the blockchain property defining the number of key pairs to generate.","s":"generate-blockchain-config","u":"/private-networks/reference/cli/subcommands","h":"#generate-blockchain-config","p":3140},{"i":3147,"t":"Provides RLP related actions.","s":"rlp","u":"/private-networks/reference/cli/subcommands","h":"#rlp","p":3140},{"i":3149,"t":"Syntax File example Standard input/output example besu rlp decode [--from=] [--to=] [--type=] besu rlp decode --from=ibft_extra_data.txt --to=decoded_ibft_extra_data.txt --type=IBFT_EXTRA_DATA cat ibft_extra_data.txt | besu rlp decode > decoded_ibft_extra_data.txt Decodes the RLP hexadecimal string used as extraData in an IBFT 2.0 or QBFT genesis file into a validator list. This subcommand takes the following options: from - The file containing the RLP hexadecimal string to decode. The default is standard input. to - The file to write the decoded validator list to. The default is standard output. type - IBFT_EXTRA_DATA for an IBFT 2.0 extraData string, or QBFT_EXTRA_DATA for a QBFT extraData string. The default is IBFT_EXTRA_DATA.","s":"decode","u":"/private-networks/reference/cli/subcommands","h":"#decode","p":3140},{"i":3151,"t":"Syntax File example Standard input/output example besu rlp encode [--from=] [--to=] [--type=] besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA cat extra_data.json | besu rlp encode > rlp.txt Encodes a validator list into an RLP hexadecimal string to use as extraData in an IBFT 2.0 or QBFT genesis file. This subcommand takes the following options: from - The file containing the validator list to encode. The default is standard input. to - The file to write the RLP-encoded hexadecimal string to. The default is standard output. type - IBFT_EXTRA_DATA for an IBFT 2.0 extraData string, or QBFT_EXTRA_DATA for a QBFT extraData string. The default is IBFT_EXTRA_DATA.","s":"encode","u":"/private-networks/reference/cli/subcommands","h":"#encode","p":3140},{"i":3153,"t":"To generate the RLP encoded extraData string, specify a JSON input that is an array of validator addresses in ascending order. JSON schema for IBFT_EXTRA_DATA Use the following JSON schema to validate that your JSON data is well-formatted. To validate your JSON content, use an online validation tool, such as JSON Schema Validator. { \"$schema\": \"http://json-schema.org/draft-07/schema#\", \"$id\": \"http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json\", \"type\": \"array\", \"definitions\": {}, \"title\": \"IBFT extra data\", \"description\": \"JSON format used as input to generate an IBFT extra data RLP string\", \"items\": { \"$id\": \"#/address\", \"type\": \"string\", \"title\": \"Validator address\", \"description\": \"The validator node address\", \"default\": \"\", \"examples\": [ \"be068f726a13c8d46c44be6ce9d275600e1735a4\", \"5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193\" ], \"pattern\": \"^([0-9a-f]{40})$\" } } Example IBFT_EXTRA_DATA encoding: JSON input RLP output [ \"be068f726a13c8d46c44be6ce9d275600e1735a4\", \"5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193\" ] 0xf853a00000000000000000000000000000000000000000000000000000000000000000ea94be068f726a13c8d46c44be6ce9d275600e1735a4945ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193808400000000c0","s":"IBFT 2.0 extra data","u":"/private-networks/reference/cli/subcommands","h":"#ibft-20-extra-data","p":3140},{"i":3155,"t":"This reference describes the syntax of the Besu private network command line interface (CLI) options. Important This reference contains options that apply to only private networks. For options that apply to both private and public networks, see the public network options reference.","s":"Private network command line options","u":"/private-networks/reference/cli/options","h":"","p":3154},{"i":3157,"t":"You can specify Besu options: On the command line. besu [OPTIONS] [SUBCOMMAND] As an environment variable. For each command line option, the equivalent environment variable is: Uppercase. _ replaces -. Has a BESU_ prefix. For example, set --miner-coinbase using the BESU_MINER_COINBASE environment variable. In a configuration file. If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file. If using Bash or Z shell, you can view option suggestions by entering -- and pressing the Tab key twice. besu --Tab+Tab caution Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens.","s":"Specify options","u":"/private-networks/reference/cli/options","h":"#specify-options","p":3154},{"i":3160,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-config-file= --permissions-accounts-config-file=/home/me/me_configFiles/myPermissionsFile BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile permissions-accounts-config-file=\"/home/me/me_configFiles/myPermissionsFile\" The accounts permissions configuration file. The default is the permissions_config.toml file in the data directory. tip --permissions-accounts-config-file and --permissions-nodes-config-file can use the same file.","s":"permissions-accounts-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file","p":3154},{"i":3162,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-config-file-enabled[=] --permissions-accounts-config-file-enabled=true BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE_ENABLED=true permissions-accounts-config-file-enabled=true Enables or disables file-based account level permissions. The default is false.","s":"permissions-accounts-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file-enabled","p":3154},{"i":3164,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-contract-address= --permissions-accounts-contract-address=xyz BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ADDRESS=xyz permissions-accounts-contract-address=\"xyz\" The contract address for onchain account permissioning.","s":"permissions-accounts-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-address","p":3154},{"i":3166,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-contract-enabled[=] --permissions-accounts-contract-enabled=true BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ENABLED=true permissions-accounts-contract-enabled=true Enables or disables contract-based onchain account permissioning. The default is false.","s":"permissions-accounts-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-enabled","p":3154},{"i":3168,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-config-file= --permissions-nodes-config-file=/home/me/me_configFiles/myPermissionsFile BESU_PERMISSIONS_NODES_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile permissions-nodes-config-file=\"/home/me/me_configFiles/myPermissionsFile\" The nodes permissions configuration file. The default is the permissions_config.toml file in the data directory. tip --permissions-nodes-config-file and --permissions-accounts-config-file can use the same file.","s":"permissions-nodes-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file","p":3154},{"i":3170,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-config-file-enabled[=] --permissions-nodes-config-file-enabled=true BESU_PERMISSIONS_NODES_CONFIG_FILE_ENABLED=true permissions-nodes-config-file-enabled=true Enables or disables file-based node level permissions. The default is false.","s":"permissions-nodes-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file-enabled","p":3154},{"i":3172,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-address= --permissions-nodes-contract-address=xyz BESU_PERMISSIONS_NODES_CONTRACT_ADDRESS=xyz permissions-nodes-contract-address=\"xyz\" The contract address for onchain node permissioning.","s":"permissions-nodes-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-address","p":3154},{"i":3174,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-enabled[=] --permissions-nodes-contract-enabled=true BESU_PERMISSIONS_NODES_CONTRACT_ENABLED=true permissions-nodes-contract-enabled=true Enables or disables contract-based onchain node permissioning. The default is false.","s":"permissions-nodes-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-enabled","p":3154},{"i":3176,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-version= --permissions-nodes-contract-version=2 BESU_PERMISSIONS_NODES_CONTRACT_VERSION=2 permissions-nodes-contract-version=2 Version of the EEA node permissioning interface. The default is 1.","s":"permissions-nodes-contract-version","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-version","p":3154},{"i":3178,"t":"Syntax Example Environment variable Example configuration file --poa-block-txs-selection-max-time= --poa-block-txs-selection-max-time=80 BESU_POA_BLOCK_TXS_SELECTION_MAX_TIME=80 poa-block-txs-selection-max-time=80 The maximum time that can be spent selecting transactions to be included in a block, as a percentage of the fixed block time of the network. The default is 75, or 75%. note This option only applies to proof-of-authority networks. For proof-of-stake and proof-of-work networks, see --block-txs-selection-max-time.","s":"poa-block-txs-selection-max-time","u":"/private-networks/reference/cli/options","h":"#poa-block-txs-selection-max-time","p":3154},{"i":3180,"t":"Syntax Example Environment variable Configuration file --privacy-enabled[=] --privacy-enabled=false BESU_PRIVACY_ENABLED=false privacy-enabled=false Enables or disables private transactions. The default is false. important Using private transactions with pruning or fast sync is not supported.","s":"privacy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-enabled","p":3154},{"i":3182,"t":"Syntax Example Environment variable Configuration file --privacy-marker-transaction-signing-key-file= --privacy-marker-transaction-signing-key-file=/home/me/me_node/myPrivateKey BESU_PRIVACY_MARKER_TRANSACTION_SIGNING_KEY_FILE=/home/me/me_node/myPrivateKey privacy-marker-transaction-signing-key-file=\"/home/me/me_node/myPrivateKey\" is the name of the private key file used to sign privacy marker transactions. note This can be the same file used by --node-private-key-file, or a different key file to identify who signed the privacy marker transaction. You must specify this option if you're using: a privacy network where you pay gas. Also, the associated account must contain adequate funds. account permissioning and privacy. You must include the corresponding public key in the accounts allowlist. If you do not specify this option (for example, in a free gas network), Besu signs each transaction with a different randomly generated key.","s":"privacy-marker-transaction-signing-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-marker-transaction-signing-key-file","p":3154},{"i":3184,"t":"Syntax Example Environment variable Configuration file --privacy-multi-tenancy-enabled[=] --privacy-multi-tenancy-enabled=false BESU_PRIVACY_MULTI_TENANCY_ENABLED=false privacy-multi-tenancy-enabled=false Enables or disables multi-tenancy for private transactions. The default is false.","s":"privacy-multi-tenancy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-multi-tenancy-enabled","p":3154},{"i":3186,"t":"Syntax Example Environment variable Configuration file --privacy-flexible-groups-enabled[=] --privacy-flexible-groups-enabled=true BESU_PRIVACY_FLEXIBLE_GROUPS_ENABLED=true privacy-flexible-groups-enabled=true Enables or disables flexible privacy groups. The default is false. Deprecated syntax for this option is --privacy-onchain-groups-enabled.","s":"privacy-flexible-groups-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-flexible-groups-enabled","p":3154},{"i":3188,"t":"Syntax Example Environment variable Configuration file --privacy-public-key-file= --privacy-public-key-file=Tessera/nodeKey.pub BESU_PRIVACY_PUBLIC_KEY_FILE=Tessera/nodeKey.pub privacy-public-key-file=\"Tessera/nodeKey.pub\" The public key of the Tessera node. important You cannot specify privacy-public-key-file when --privacy-multi-tenancy-enabled is true","s":"privacy-public-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-public-key-file","p":3154},{"i":3190,"t":"Syntax Example Environment variable Configuration file --privacy-tls-enabled[=] --privacy-tls-enabled=false BESU_PRIVACY_TLS_ENABLED=false privacy-tls-enabled=false Enables or disables TLS on communication with the private transaction manager. The default is false.","s":"privacy-tls-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-tls-enabled","p":3154},{"i":3192,"t":"Syntax Example Environment variable Configuration file --privacy-tls-keystore-file= --privacy--keystore-file=/home/me/me_node/key BESU_PRIVACY_TLS_KEYSTORE_FILE=/home/me/me_node/key privacy-tls-keystore-file=\"/home/me/me_node/key\" The keystore file (in PKCS #12 format) containing the private key and the certificate presented during authentication. You must specify privacy-tls-keystore-file if --privacy-tls-enabled is true.","s":"privacy-tls-keystore-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-file","p":3154},{"i":3194,"t":"Syntax Example Environment variable Configuration file --privacy-tls-keystore-password-file= --privacy-tls-keystore-password-file=/home/me/me_node/password BESU_PRIVACY_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password privacy-tls-keystore-password-file=\"/home/me/me_node/password\" The path to the file containing the password to decrypt the keystore.","s":"privacy-tls-keystore-password-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-password-file","p":3154},{"i":3196,"t":"Syntax Example Environment variable Configuration file --privacy-tls-known-enclave-file= --privacy-tls-known-enclave-file=/home/me/me_node/knownEnclave BESU_PRIVACY_TLS_KNOWN_ENCLAVE_FILE=/home/me/me_node/knownEnclave privacy-tls-known-enclave-file=\"/home/me/me_node/knownEnclave\" The path to the file containing the hostnames, ports, and SHA256 certificate fingerprints of the authorized privacy enclave.","s":"privacy-tls-known-enclave-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-known-enclave-file","p":3154},{"i":3198,"t":"Syntax Example Environment variable Configuration file --privacy-url= --privacy-url=http://127.0.0.1:8888 BESU_PRIVACY_URL=http://127.0.0.1:8888 privacy-url=\"http://127.0.0.1:8888\" The URL on which the Tessera node is running.","s":"privacy-url","u":"/private-networks/reference/cli/options","h":"#privacy-url","p":3154},{"i":3200,"t":"The Quorum Dev Quickstart on Azure Marketplace enables deploying a private IBFT 2.0 network, which includes: A bootnode. An RPC node. Three regular nodes. A block explorer. Prometheus and Grafana with the Besu dashboard installed. These are deployed on a single Azure VM in minutes. Once deployed, you can develop and test applications and connect to the Visual Studio Code (VSCode) plugin using the RPC endpoint http:///jsonrpc.","s":"Deploy private network example on Azure","u":"/private-networks/tutorials/azure","h":"","p":3199},{"i":3202,"t":"The following is a high-level overview of the deployed network.","s":"Overview","u":"/private-networks/tutorials/azure","h":"#overview","p":3199},{"i":3204,"t":"To deploy the private network example on Azure: Create a Resource Group in the Azure Portal. Go to the Quorum Dev Quickstart on Azure Marketplace. Click Get It Now and Continue. The Quickstart landing page is displayed. Click Create. The Basics page is displayed. Enter: Details of the Resource Group you created earlier. Basic user credentials to start a VM. Prefix for your new VM and any other resources created. Region to which you wish to deploy the VM. Click Next: Size and select the size of the VM you want to use. To start the deployment, click Review + create at the bottom left of the page. The deployment typically takes 3--5 minutes. The progress of your deployment is displayed. When the deployment is complete, the resources created are displayed. Click Go to Resource. Everything created in the deployment is displayed. Click on the VM name. The VM details such as the IP and DNS name are displayed. Use the IP and DNS name displayed to connect to the VM, either in browser or via RPC calls.","s":"Deploy","u":"/private-networks/tutorials/azure","h":"#deploy","p":3199},{"i":3206,"t":"To display the block explorer, open a new tab and enter either the IP of the VM or the DNS name.","s":"Block explorer","u":"/private-networks/tutorials/azure","h":"#block-explorer","p":3199},{"i":3208,"t":"The deployment includes Prometheus metrics and Grafana with a custom Besu Dashboard installed. To display the dashboard: Open a new tab and enter the IP or DNS name appended with /grafana. For example: http:///grafana. Click on home and select the Besu dashboard. The dashboard provides a visual way to monitor your network and nodes as the chain progresses. Alerting can also be configured.","s":"Metrics","u":"/private-networks/tutorials/azure","h":"#metrics","p":3199},{"i":3210,"t":"You can connect dapps or develop directly from the IDE by using VSCode and connecting to the VM RPC endpoint. The endpoint is the DNS name appended with /jsonrpc: http:///jsonrpc.","s":"Connect to VM RPC endpoint","u":"/private-networks/tutorials/azure","h":"#connect-to-vm-rpc-endpoint","p":3199},{"i":3212,"t":"You can SSH into the VM to see how everything is set up and working. Use the credentials from step 5 of deployment and your preferred client: ssh username@ To list all containers running, run docker ps. Find the complete setup in /home//besu-quickstart.","s":"SSH","u":"/private-networks/tutorials/azure","h":"#ssh","p":3199},{"i":3214,"t":"A private network provides a configurable network for testing. This private network uses the Clique (proof of authority) consensus protocol. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.","s":"Create a private network using Clique","u":"/private-networks/tutorials/clique","h":"","p":3213},{"i":3216,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/clique","h":"#prerequisites","p":3213},{"i":3218,"t":"Listed on the right-hand side of the page are the steps to create a private network using Clique.","s":"Steps","u":"/private-networks/tutorials/clique","h":"#steps","p":3213},{"i":3220,"t":"Each node requires a data directory for the blockchain data. When the node starts, Besu saves the node key in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: Clique-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/clique","h":"#1-create-directories","p":3213},{"i":3222,"t":"In Clique networks, you must include the address of at least one initial signer in the genesis file. For this Clique network, we'll use Node-1 as the initial signer. This requires obtaining the address for Node-1. To get the address for Node-1, in the Node-1 directory, use the public-key export-address subcommand to write the node address to the specified file (node1Address in this example). MacOS Windows besu --data-path=data public-key export-address --to=data/node1Address besu --data-path=data public-key export-address --to=data\\node1Address","s":"2. Get the address for Node-1","u":"/private-networks/tutorials/clique","h":"#2-get-the-address-for-node-1","p":3213},{"i":3224,"t":"The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The Clique genesis file includes the address of Node-1 as the initial signer in the extraData field. All nodes in a network must use the same genesis file. Copy the following genesis definition to a file called cliqueGenesis.json and save it in the Clique-Network directory: { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"clique\": { \"blockperiodseconds\": 15, \"epochlength\": 30000 } }, \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0xa00000\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"nonce\": \"0x0\", \"timestamp\": \"0x5c51a607\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. In extraData, replace with the address for Node-1, excluding the 0x prefix. { ... \"extraData\":\"0x0000000000000000000000000000000000000000000000000000000000000000b9b81ee349c3807e46bc71aa2632203c5b4620340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", ... } warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"3. Create the genesis file","u":"/private-networks/tutorials/clique","h":"#3-create-the-genesis-file","p":3213},{"i":3226,"t":"Start Node-1: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line enables: The JSON-RPC API using the --rpc-http-enabled option The ETH, NET, and CLIQUE APIs using the --rpc-http-api option All-host access to the HTTP JSON-RPC API using the --host-allowlist option All-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"4. Start the first node as the bootnode","u":"/private-networks/tutorials/clique","h":"#4-start-the-first-node-as-the-bootnode","p":3213},{"i":3228,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. The data directory for Node-2 using the --data-path option. Other options as for Node-1.","s":"5. Start Node-2","u":"/private-networks/tutorials/clique","h":"#5-start-node-2","p":3213},{"i":3230,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The data directory for Node-3 using the --data-path option. The bootnode as for Node-2. Other options as for Node-1.","s":"6. Start Node-3","u":"/private-networks/tutorials/clique","h":"#6-start-node-3","p":3213},{"i":3232,"t":"Start another terminal, use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 has two peers (Node-2 and Node-3): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" }","s":"7. Confirm the private network is working","u":"/private-networks/tutorials/clique","h":"#7-confirm-the-private-network-is-working","p":3213},{"i":3234,"t":"Look at the logs displayed to confirm Node-1 is producing blocks and Node-2 and Node-3 are importing blocks. Use the Clique API to add Node-2 or Node-3 as a signer. note To add Node-2 or Node-3 as a signer you need the node address as when specifying Node-1 as the initial signer. Import accounts to MetaMask and send transactions, as described in the Quickstart tutorial. info Besu doesn't support private key management.","s":"Next steps","u":"/private-networks/tutorials/clique","h":"#next-steps","p":3213},{"i":3236,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the Clique network in the future, start from 4. Start First Node as Bootnode.","s":"Stop the nodes","u":"/private-networks/tutorials/clique","h":"#stop-the-nodes","p":3213},{"i":3238,"t":"You can get started with the Developer Quickstart to rapidly generate local blockchain networks. This tutorial shows you how to transfer funds (ETH) between accounts in a transaction.","s":"Transfer funds between accounts in a transaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"","p":3237},{"i":3240,"t":"A private network","s":"Prerequisites","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#prerequisites","p":3237},{"i":3242,"t":"The simplest way to transfer funds between externally-owned accounts is using eth_sendSignedTransaction. This example uses eth_sendSignedTransaction and one of the test accounts to transfer funds to a newly created account. Do not use the test accounts on Ethereum Mainnet or any production network The private key is publicly displayed, which means the account is not secure. Before making the transaction, check the balances of both accounts to verify the funds transfer after the transaction. const web3 = new Web3(host); // Pre-seeded account with 90000 ETH const privateKeyA = \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\"; const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA); var accountABalance = web3.utils.fromWei( await web3.eth.getBalance(accountA.address), ); console.log(\"Account A has balance of: \" + accountABalance); // Create a new account to transfer ETH to var accountB = web3.eth.accounts.create(); var accountBBalance = web3.utils.fromWei( await web3.eth.getBalance(accountB.address), ); console.log(\"Account B has balance of: \" + accountBBalance); Use the test account address (Account A) for the from parameter, the recipient account address (Account B) for the to parameter, and the amount of ETH to transfer between accounts for the value parameter. Sign the transaction with Account A's private key and send it using eth_sendSignedTransaction. // Send some ETH from A to B const rawTxOptions = { nonce: web3.utils.numberToHex( await web3.eth.getTransactionCount(accountA.address), ), from: accountA.address, to: accountB.address, value: \"0x100\", // Amount of ETH to transfer gasPrice: \"0x0\", // ETH per unit of gas gasLimit: \"0x24A22\", // Max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const tx = new Tx(rawTxOptions); console.log(\"Signing transaction...\"); tx.sign(Buffer.from(accountA.privateKey.substring(2), \"hex\")); console.log(\"Sending transaction...\"); var serializedTx = tx.serialize(); const pTx = await web3.eth.sendSignedTransaction( \"0x\" + serializedTx.toString(\"hex\").toString(\"hex\"), ); console.log(\"tx transactionHash: \" + pTx.transactionHash); Once it completes, you can see the updated balances. // After the transaction, there should be some ETH transferred var accountABalance = await getAccountBalance(host, accountA); console.log(\"Account A has an updated balance of: \" + accountABalance); var accountBBalance = await getAccountBalance(host, accountB); console.log(\"Account B has an updatedbalance of: \" + accountBBalance); } A full example can be found in the Developer Quickstart.","s":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendsignedtransaction","p":3237},{"i":3244,"t":"An alternative to using eth_sendSignedTransaction is eth_sendTransaction. However, Besu does not support the eth_sendTransaction API call and keeps account management separate for stronger security. Instead, Besu uses Web3Signer to make the eth_sendTransaction API call. Use eth_sendTransaction similarly to using eth_sendSignedTransaction (without the signing step which is done by Web3Signer): const web3 = new Web3(host); // Pre-seeded account with 90000 ETH const privateKeyA = \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\"; const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA); var accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address)); console.log(\"Account A has balance of: \" + accountABalance); // Create a new account to transfer ETH to var accountB = web3.eth.accounts.create(); var accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address)); console.log(\"Account B has balance of: \" + accountBBalance); // Send some ETH from A to B const txOptions = { from: accountA.address, to: accountB.address, value: \"0x100\", // Amount of ETH to transfer gasPrice: \"0x0\", // ETH per unit of gas gasLimit: \"0x24A22\" // Max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const pTx = await web3.eth.sendTransaction(txOptions); console.log(\"tx transactionHash: \" + pTx.transactionHash); // After the transaction, there should be some ETH transferred var accountABalance = await getAccountBalance(host, accountA); console.log(\"Account A has an updated balance of: \" + accountABalance); var accountBBalance = await getAccountBalance(host, accountB); console.log(\"Account B has an updatedbalance of: \" + accountBBalance); }","s":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendtransaction","p":3237},{"i":3246,"t":"This tutorial shows you how to deploy smart contracts as transactions to a network.","s":"Deploy smart contracts to an Ethereum chain","u":"/private-networks/tutorials/contracts","h":"","p":3245},{"i":3248,"t":"This tutorial requires a local blockchain network. You can use the Developer Quickstart to rapidly generate one. If deploying a private contract, enable privacy on the network (public contracts can also be deployed on privacy-enabled networks).","s":"Prerequisites","u":"/private-networks/tutorials/contracts","h":"#prerequisites","p":3245},{"i":3250,"t":"To deploy a smart contract using eth_sendSignedTransaction, use an account's private key to sign and serialize the transaction, and send the API request. This example uses the web3js library to make the API calls. Using the SimpleStorage.sol smart contract as an example, create a new file called compile.js with the following content: compile.js const fs = require(\"fs\").promises; const solc = require(\"solc\"); async function main() { // Load the contract source code const sourceCode = await fs.readFile(\"SimpleStorage.sol\", \"utf8\"); // Compile the source code and retrieve the ABI and bytecode const { abi, bytecode } = compile(sourceCode, \"SimpleStorage\"); // Store the ABI and bytecode into a JSON file const artifact = JSON.stringify({ abi, bytecode }, null, 2); await fs.writeFile(\"SimpleStorage.json\", artifact); } function compile(sourceCode, contractName) { // Create the Solidity Compiler Standard Input and Output JSON const input = { language: \"Solidity\", sources: { main: { content: sourceCode } }, settings: { outputSelection: { \"*\": { \"*\": [\"abi\", \"evm.bytecode\"] } } }, }; // Parse the compiler output to retrieve the ABI and bytecode const output = solc.compile(JSON.stringify(input)); const artifact = JSON.parse(output).contracts.main[contractName]; return { abi: artifact.abi, bytecode: artifact.evm.bytecode.object, }; } main().then(() => process.exit(0)); Run compile.js to get the smart contract's output JSON: node compile.js Run solc to get the contract's bytecode and ABI: solc SimpleStorage.sol --bin --abi Once you have the bytecode and ABI, you can rename the output files to make them easier to use; this tutorial refers to them as SimpleStorage.bin and SimpleStorage.abi. Create a new file named public_tx.js to send the transaction (or run the following commands in a JavaScript console). The Developer Quickstart provides an example of a public transaction script. const web3 = new Web3(host); // use an existing account, or make an account const privateKey = \"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\"; const account = web3.eth.accounts.privateKeyToAccount(privateKey); // read in the contracts const contractJsonPath = path.resolve(__dirname, \"SimpleStorage.json\"); const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); const contractAbi = contractJson.abi; const contractBinPath = path.resolve(__dirname, \"SimpleStorage.bin\"); const contractBin = fs.readFileSync(contractBinPath); // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = \"000000000000000000000000000000000000000000000000000000000000002F\"; // get txnCount for the nonce value const txnCount = await web3.eth.getTransactionCount(account.address); const rawTxOptions = { nonce: web3.utils.numberToHex(txnCount), from: account.address, to: null, //public tx value: \"0x00\", data: \"0x\" + contractBin + contractConstructorInit, // contract binary appended with initialization value gasPrice: \"0x0\", //ETH per unit of gas gasLimit: \"0x24A22\", //max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const tx = new Tx(rawTxOptions); console.log(\"Signing transaction...\"); tx.sign(privateKey); console.log(\"Sending transaction...\"); var serializedTx = tx.serialize(); const pTx = await web3.eth.sendSignedTransaction( \"0x\" + serializedTx.toString(\"hex\").toString(\"hex\"), ); console.log(\"tx transactionHash: \" + pTx.transactionHash); console.log(\"tx contractAddress: \" + pTx.contractAddress); rawTxOptions contains the following fields: nonce - the number of transactions sent from an address. from - address of the sending account. For example 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73. to - address of the receiver. To deploy a contract, set to null. gas - amount of gas provided by the sender for the transaction. gasPrice - price for each unit of gas the sender is willing to pay. data - binary of the contract (in this example there's also a constructor initialization value, so we append that to the binary value). value - amount of Ether/Wei transferred from the sender to the recipient. Run the public_tx.js to send the transaction: node public_tx.js This example code creates the transaction tx, signs it with the private key of the account, serializes it, then calls eth_sendSignedTransaction to deploy the contract.","s":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendsignedtransaction","p":3245},{"i":3252,"t":"You can use eth_sendTransaction as an alternative to eth_sendSignedTransaction. However, Besu does not support the eth_sendTransaction API call and keeps account management separate for stronger security. Configure Web3Signer with your Besu node to make the eth_sendTransaction API call. Pass the following parameters to the eth_sendTransaction call to Web3Signer. Web3Signer converts the request to an eth_sendRawTransaction call that Besu uses: to - address of the receiver. To deploy a contract, set to null. from - address of the sender account. For example 0x9b790656b9ec0db1936ed84b3bea605873558198. gas - amount of gas provided by the sender for the transaction gasPrice - price for each unit of gas the sender is willing to pay data - one of the following: For contract deployments (this use case) - compiled code of the contract For contract interactions - hash of the invoked method signature and encoded parameters (see Ethereum Contract ABI) For simple ether transfers - empty 'eth_sendTransaction' parameters params: { \"to\": null, \"from\": \"0x9b790656b9ec0db1936ed84b3bea605873558198\", \"gas\": \"0x76c0\", \"gasPrice\": \"0x9184e72a000\", \"data\": \"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\" } Make the request using eth_sendTransaction: 'eth_sendTransaction' curl HTTP request curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{\"from\":\"0x9b790656b9ec0db1936ed84b3bea605873558198\", \"to\":null, \"gas\":\"0x7600\",\"gasPrice\":\"0x9184e72a000\", \"data\":\"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\"}], \"id\":1}' ","s":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendtransaction","p":3245},{"i":3254,"t":"To deploy a private contract to another node or privacy group member, use the web3js-quorum library and the eea_sendRawTransaction API call. You must use this API call instead of eth_sendTransaction because Besu keeps account management separate for stronger security. The Developer Quickstart provides an example of a private transaction script. This example uses the web3js library to make the API calls. Use web3.priv.generateAndSendRawTransaction by running the following commands in a JavaScript console, or by including them in a private_tx.js file and running node private_tx.js: 'private_tx.js' using 'web3.priv.generateAndSendRawTransaction' const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const bytecode = \"608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\"; // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = \"000000000000000000000000000000000000000000000000000000000000002F\"; const chainId = 1337; const web3 = new Web3(clientUrl); const web3quorum = new Web3Quorum(web3, chainId); const txOptions = { data: \"0x\" + bytecode + contractConstructorInit, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; console.log(\"Creating contract...\"); const txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions); console.log(\"Getting contractAddress from txHash: \", txHash); const privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt( txHash, ); console.log(\"Private Transaction Receipt: \", privateTxReceipt); return privateTxReceipt; txOptions contains the following field: data - compiled code of the contract (in this example there's also a constructor initialization value, so we append that to the bytecode). The deployment process includes creating the client as in the previous examples, but rather than deploying the contract with to: null, it instead sends the transaction with privateFor: [memberPublicKey/s]. Once you make the API call, you receive a transactionHash, which you can use to get a transactionReceipt containing the contract's address. note This example doesn't use a privacy group and makes a simple node-to-node transaction. To use a privacy group: Create the privacy group using the public keys of the nodes in the group. Specify the privacyGroupId instead of the privateFor option in the txOptions above and then send the transaction. The Developer Quickstart provides an example of a private transaction with a privacy group.","s":"Use eea_sendRawTransaction for private contracts with web3js-quorum","u":"/private-networks/tutorials/contracts","h":"#use-eea_sendrawtransaction-for-private-contracts-with-web3js-quorum","p":3245},{"i":3256,"t":"A private network provides a configurable network for testing. By configuring a low difficulty and enabling mining, this allows for fast block creation. You can test multi-block and multi-user scenarios on a private network before moving to one of the public testnets. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.","s":"Create a private network using Ethash","u":"/private-networks/tutorials/ethash","h":"","p":3255},{"i":3258,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/ethash","h":"#prerequisites","p":3255},{"i":3260,"t":"Listed on the right-hand side of the page are the steps to create a private network using Ethash.","s":"Steps","u":"/private-networks/tutorials/ethash","h":"#steps","p":3255},{"i":3262,"t":"Each node requires a data directory for the blockchain data. When the node starts, Besu saves the node key in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: Private-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/ethash","h":"#1-create-directories","p":3255},{"i":3264,"t":"The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The genesis file includes entries for configuring the blockchain, such as the mining difficulty and initial accounts and balances. All nodes in a network must use the same genesis file. The network ID defaults to the chainID in the genesis file. The fixeddifficulty enables fast block mining. Copy the following genesis definition to a file called privateNetworkGenesis.json and save it in the Private-Network directory: { \"config\": { \"berlinBlock\": 0, \"ethash\": { \"fixeddifficulty\": 1000 }, \"chainID\": 1337 }, \"nonce\": \"0x42\", \"gasLimit\": \"0x1000000\", \"difficulty\": \"0x10000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Don't use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a genesis file","u":"/private-networks/tutorials/ethash","h":"#2-create-a-genesis-file","p":3255},{"i":3266,"t":"Start Node-1: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line enables: Mining and specifies the account to pay mining rewards to using the --miner-enabled and --miner-coinbase options. JSON-RPC API using the --rpc-http-enabled option. All-host access to the HTTP JSON-RPC API using the --host-allowlist option. All-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. info The miner coinbase account is one of the accounts defined in the genesis file. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"3. Start the first node as a bootnode","u":"/private-networks/tutorials/ethash","h":"#3-start-the-first-node-as-a-bootnode","p":3255},{"i":3268,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes= --p2p-port=30304 besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes= --p2p-port=30304 The command line specifies: A different port to Node-1 for P2P discovery using the --p2p-port option. The enode URL of Node-1 using the --bootnodes option. A data directory for Node-2 using the --data-path option. A genesis file as for Node-1.","s":"4. Start Node-2","u":"/private-networks/tutorials/ethash","h":"#4-start-node-2","p":3255},{"i":3270,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes= --p2p-port=30305 besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes= --p2p-port=30305 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery. A data directory for Node-3 using the --data-path option. A bootnode and genesis file as for Node-2.","s":"5. Start Node-3","u":"/private-networks/tutorials/ethash","h":"#5-start-node-3","p":3255},{"i":3272,"t":"Start another terminal, use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 (the node running the JSON-RPC service) has two peers (Node-2 and Node-3): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" }","s":"6. Confirm the private network is working","u":"/private-networks/tutorials/ethash","h":"#6-confirm-the-private-network-is-working","p":3255},{"i":3274,"t":"Import accounts to MetaMask and send transactions as described in the Quickstart tutorial. info Besu doesn't support private key management. Send transactions using eth_sendRawTransaction to send ether or, deploy or invoke contracts. Use the JSON-RPC API. Start a node with the --rpc-ws-enabled option and use the RPC Pub/Sub API.","s":"Next steps","u":"/private-networks/tutorials/ethash","h":"#next-steps","p":3255},{"i":3276,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the private network in the future, start from 3. Start the first node as a bootnode.","s":"Stop the nodes","u":"/private-networks/tutorials/ethash","h":"#stop-the-nodes","p":3255},{"i":3278,"t":"This example walks through adding and removing an IBFT 2.0 validator.","s":"Add and remove IBFT 2.0 validators","u":"/private-networks/tutorials/ibft/validators","h":"","p":3277},{"i":3280,"t":"IBFT 2.0 network as configured in the IBFT 2.0 tutorial","s":"Prerequisites","u":"/private-networks/tutorials/ibft/validators","h":"#prerequisites","p":3277},{"i":3283,"t":"Create a working directory and a data directory for the new node that needs to be added: mkdir -p Node-5/data","s":"1. Create directories","u":"/private-networks/tutorials/ibft/validators","h":"#1-create-directories","p":3277},{"i":3285,"t":"Change into the working directory for the new Node-5 and start the node, specifying the Node-1 enode URL as the bootnode: besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30307 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8549 The command line specifies: The data directory for Node-5 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"2. Start the node","u":"/private-networks/tutorials/ibft/validators","h":"#2-start-the-node","p":3277},{"i":3287,"t":"Copy the address of the node. You can find the address in the logs when starting the new node: 2021-05-28 09:49:00.881+10:00 | main | INFO | DefaultP2PNetwork | Node address 0x90626e6a67445aabf1c0615410d108d4733aa90b Or use the public-key export-address subcommand: Subcommand Output besu --data-path=IBFT-Network/Node-5/data public-key export-address 0x90626e6a67445aabf1c0615410d108d4733aa90b","s":"3. Copy the address of the node","u":"/private-networks/tutorials/ibft/validators","h":"#3-copy-the-address-of-the-node","p":3277},{"i":3289,"t":"Propose adding the new validator from more than half the number of current validators, using ibft_proposeValidatorVote, specifying the address of the proposed validator and true: curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"0x90626e6a67445aabf1c0615410d108d4733aa90b\", true], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true } Repeat the proposal process for this candidate node from at least two of the other nodes.","s":"4. Propose adding the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#4-propose-adding-the-new-validator","p":3277},{"i":3291,"t":"Verify that the new validator is now in the list of validators using ibft_getValidatorsByBlockNumber: curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 [ \"0x189d23d201b03ae1cf9113672df29a5d672aefa3\", \"0x2aabbc1bb9bacef60a09764d1a1f4f04a47885c1\", \"0x44b07d2c28b8ed8f02b45bd84ac7d9051b3349e6\", \"0x4c1ccd426833b9782729a212c857f2f03b7b4c0d\", \"0x90626e6a67445aabf1c0615410d108d4733aa90b\" ] The list of validators contains 5 addresses now.","s":"5. Verify the addition of the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#5-verify-the-addition-of-the-new-validator","p":3277},{"i":3293,"t":"The process for removing a validator is similar to adding a validator starting from step 2, except you specify false as the second parameter of ibft_proposeValidatorVote.","s":"Remove a validator","u":"/private-networks/tutorials/ibft/validators","h":"#remove-a-validator","p":3277},{"i":3295,"t":"A private network provides a configurable network for testing. This private network uses the IBFT 2.0 (proof of authority) consensus protocol. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant.","s":"Create a private network using IBFT 2.0","u":"/private-networks/tutorials/ibft","h":"","p":3294},{"i":3297,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/ibft","h":"#prerequisites","p":3294},{"i":3299,"t":"Listed on the right-hand side of the page are the steps to create a private network using IBFT 2.0 with four nodes. The four nodes are all validators.","s":"Steps","u":"/private-networks/tutorials/ibft","h":"#steps","p":3294},{"i":3301,"t":"Each node requires a data directory for the blockchain data. Create directories for your private network, each of the four nodes, and a data directory for each node: IBFT-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data ├── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/ibft","h":"#1-create-directories","p":3294},{"i":3303,"t":"The configuration file defines the IBFT 2.0 genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called ibftConfigFile.json and save it in the IBFT-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } note We recommend specifying the latest milestone when creating the configuration file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a configuration file","u":"/private-networks/tutorials/ibft","h":"#2-create-a-configuration-file","p":3294},{"i":3305,"t":"In the IBFT-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/ibft","h":"#3-generate-node-keys-and-a-genesis-file","p":3294},{"i":3307,"t":"Copy the genesis.json file to the IBFT-Network directory.","s":"4. Copy the genesis file to the IBFT-Network directory","u":"/private-networks/tutorials/ibft","h":"#4-copy-the-genesis-file-to-the-ibft-network-directory","p":3294},{"i":3309,"t":"For each node, copy the key files to the data directory for that node IBFT-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/ibft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3294},{"i":3311,"t":"In the Node-1 directory, start Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line: Specifies the data directory for Node-1 using the --data-path option. Enables the JSON-RPC API using the --rpc-http-enabled option. Enables the ETH, NET, and IBFT APIs using the --rpc-http-api option. Enables all-host access to the HTTP JSON-RPC API using the --host-allowlist option. Enables all-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/ibft","h":"#6-start-the-first-node-as-the-bootnode","p":3294},{"i":3313,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: The data directory for Node-2 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"7. Start Node-2","u":"/private-networks/tutorials/ibft","h":"#7-start-node-2","p":3294},{"i":3315,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: The data directory for Node-3 using the --data-path option. A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"8. Start Node-3","u":"/private-networks/tutorials/ibft","h":"#8-start-node-3","p":3294},{"i":3317,"t":"Start another terminal, change to the Node-4 directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 The command line specifies: The data directory for Node-4 using the --data-path option. A different port to Node-1, Node-2, and Node-3 for P2P discovery using the --p2p-port option. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"9. Start Node-4","u":"/private-networks/tutorials/ibft","h":"#9-start-node-4","p":3294},{"i":3319,"t":"Start another terminal, use curl to call the JSON-RPC API ibft_getvalidatorsbyblocknumber method and confirm the network has four validators: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' localhost:8545 The result displays the four validators: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x1e326b6da177ede2d3eb6d7247bd9f6901d40234\", \"0x4aaac297fefe4466ebcb0b23ab90c5f466b11556\", \"0xa267ead2e91e1673e0943b925176b51d9cd4f6d2\", \"0xe3e680bc0ff485d1d415a384721f19e0db65fea7\" ] } Look at the logs to confirm Besu is producing blocks: 2020-12-21 07:22:17.883+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0xde088192f27ca376eea969cb7a4a1de445bd923fde0444194c88e630f7705584) in 0.010s. Peers: 4 2020-12-21 07:22:19.057+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=2, Round=0}, hash=0x2ca2652fa79ae2b3b6aadcfb13d5d362ffd6207c3b5ae47971e04eb9d05deaa9 2020-12-21 07:22:21.044+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=3, Round=0}, hash=0x5d9a06cd17127712cfae7d1c25f705f302e146f4b64a73de3c814e1b5a3f9a16 2020-12-21 07:22:23.049+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=4, Round=0}, hash=0x843981375f4cb2bb0f33a09b647ac27da5df2c539d940d8344c907eede57829c 2020-12-21 07:22:25.060+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=5, Round=0}, hash=0x82b2069961d9185f7857cad1123de72d715729e122441335db486ea436834d6e info If the key files were not copied to the correct directory in step 5, the network will not start producing blocks. The logs for each node should indicate the public key was loaded from the data/key directory: 2020-12-21 07:16:18.360+10:00 | main | INFO | KeyPairUtil | Loaded public key 0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc from /IBFT-Network/Node-1/data/key If the keys were not copied to the correct directory, Besu creates a key when starting up: 2020-12-21 07:33:11.458+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to /IBFT-Network/Node-1/data/key If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks.","s":"10. Confirm the private network is working","u":"/private-networks/tutorials/ibft","h":"#10-confirm-the-private-network-is-working","p":3294},{"i":3321,"t":"Use the IBFT API to remove or add validators. note To add or remove nodes as validators you need the node address. The directory created for each node has the node address as the name. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires four validators to be Byzantine fault tolerant. Import accounts to MetaMask and send transactions as described in the Quickstart tutorial. info Besu doesn't support private key management.","s":"Next steps","u":"/private-networks/tutorials/ibft","h":"#next-steps","p":3294},{"i":3323,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the IBFT 2.0 network in the future, start from 6. Start First Node as Bootnode. *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Stop the nodes","u":"/private-networks/tutorials/ibft","h":"#stop-the-nodes","p":3294},{"i":3325,"t":"You can get started with the Developer Quickstart to rapidly generate local blockchain networks. This tutorial shows you how to interact with smart contracts that have been deployed to a network.","s":"Interact with deployed smart contracts","u":"/private-networks/tutorials/contracts/interact","h":"","p":3324},{"i":3327,"t":"A network with a deployed smart contract as in the deploying smart contracts tutorial","s":"Prerequisites","u":"/private-networks/tutorials/contracts/interact","h":"#prerequisites","p":3324},{"i":3329,"t":"This tutorial uses the SimpleStorage.sol contract: pragma solidity ^0.7.0; contract SimpleStorage { uint public storedData; constructor(uint initVal) public { storedData = initVal; } function set(uint x) public { storedData = x; } function get() view public returns (uint retVal) { return storedData; } } Once the contract is deployed, you can perform a read operation using the get function call and a write operation using the set function call. This tutorial uses the web3js library to interact with the contract. A full example of these calls can be found in the Developer Quickstart.","s":"Interact with public contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-public-contracts","p":3324},{"i":3331,"t":"To perform a read operation, you need the address that the contract was deployed to and the contract's ABI. The contract's ABI can be obtained from compiling the contract; see the deploying smart contracts tutorial for an example. Use the web3.eth.Contract object to create a new instance of the smart contract, then make the get function call from the contract's list of methods, which will return the value stored: async function getValueAtAddress( host, deployedContractAbi, deployedContractAddress, ) { const web3 = new Web3(host); const contractInstance = new web3.eth.Contract( deployedContractAbi, deployedContractAddress, ); const res = await contractInstance.methods.get().call(); console.log(\"Obtained value at deployed contract is: \" + res); return res; }","s":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation","p":3324},{"i":3333,"t":"To perform a write operation, send a transaction to update the stored value. As with the get call, you need to use the address that the contract was deployed to and the contract's ABI. The account address must correspond to an actual account with some ETH in it to perform the transaction. Because Besu doesn't manage accounts, this address is the address you use in Web3Signer (or equivalent) to manage your accounts. Make the set call passing in your account address, value as the updated value of the contract, and the amount of gas you are willing to spend for the transaction: // You need to use the accountAddress details provided to Besu to send/interact with contracts async function setValueAtAddress( host, accountAddress, value, deployedContractAbi, deployedContractAddress, ) { const web3 = new Web3(host); const contractInstance = new web3.eth.Contract( deployedContractAbi, deployedContractAddress, ); const res = await contractInstance.methods .set(value) .send({ from: accountAddress, gasPrice: \"0xFF\", gasLimit: \"0x24A22\" }); return res; }","s":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation","p":3324},{"i":3335,"t":"To verify that a value has been updated, perform a get call after a set update call.","s":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value","p":3324},{"i":3337,"t":"This private contracts example uses the same SimpleStorage.sol contract as in the public contracts example, but it uses the web3js-quorum library and the generateAndSendRawTransaction method to interact with the contract. Both read and write operations are performed using the generateAndSendRawTransaction API call. A full example can be found in the Developer Quickstart.","s":"Interact with private contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-private-contracts","p":3324},{"i":3339,"t":"As in the public contracts example, to perform a read operation, you need the address that the contract was deployed to and the contract's ABI. You also need your private and public keys and the recipient's public key. Use the web3.eth.Contract object to create a new instance of the smart contract, extract the signature of function's ABI for the get method, and then use this value as the data parameter for the generateAndSendRawTransaction transaction. The keys remain the same for the sender and recipient, and the to field is the contract's address. Once you make the request, you receive a transactionHash, which you can use to get a transactionReceipt containing the value stored: async function getValueAtAddress( clientUrl, address, contractAbi, fromPrivateKey, fromPublicKey, toPublicKey, ) { const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:22000\")); // eslint-disable-next-line no-underscore-dangle const functionAbi = contract._jsonInterface.find((e) => { return e.name === \"get\"; }); const functionParams = { to: address, data: functionAbi.signature, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( functionParams, ); // console.log(`Transaction hash: ${transactionHash}`); const result = await web3quorum.priv.waitForTransactionReceipt( transactionHash, ); console.log( \"\" + nodeName + \" value from deployed contract is: \" + result.output, ); return result; }","s":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation-1","p":3324},{"i":3341,"t":"Performing a write operation is almost the same process as the read operation, except that you encode the new value to the set function's ABI, and then append these arguments to the set function's ABI and use this as the data field: async function setValueAtAddress( clientUrl, address, value, contractAbi, fromPrivateKey, fromPublicKey, toPublicKey, ) { const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:22000\")); // eslint-disable-next-line no-underscore-dangle const functionAbi = contract._jsonInterface.find((e) => { return e.name === \"set\"; }); const functionArgs = web3quorum.eth.abi .encodeParameters(functionAbi.inputs, [value]) .slice(2); const functionParams = { to: address, data: functionAbi.signature + functionArgs, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( functionParams, ); console.log(`Transaction hash: ${transactionHash}`); const result = await web3quorum.priv.waitForTransactionReceipt( transactionHash, ); return result; }","s":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation-1","p":3324},{"i":3343,"t":"To verify that a value has been updated, perform a get call after a set update call.","s":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value-1","p":3324},{"i":3345,"t":"Use the reference implementations to install private networks using Kubernetes (K8s). Reference implementations are available using: Helm. Helmfile. kubectl. Familiarize yourself with the reference implementations and customize them for your requirements.","s":"Deploy Besu using Kubernetes","u":"/private-networks/tutorials/kubernetes","h":"","p":3344},{"i":3347,"t":"Quorum-Kubernetes is a repository containing Kubernetes manifests and Helm charts that you can customize and deploy on a local cluster or in the cloud. important We recommend starting with the playground directory and working through the example setups before moving to the Helm charts directory. The helm directory contains charts for the various components, and each chart has a cluster map with features that you can toggle. cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) Setting cluster.cloudNativeServices: true stores keys in AWS Secrets Manager or Azure Key Vault instead of Kubernetes Secrets, and will also make use of AWS IAM or Azure Managed Identities for the pods.","s":"Quorum-Kubernetes","u":"/private-networks/tutorials/kubernetes","h":"#quorum-kubernetes","p":3344},{"i":3349,"t":"The repository's helm charts support on-premise and cloud providers such as AWS, Azure, GCP, IBM etc. You can configure the provider in the values.yml file of the respective charts by setting cluster.provider to local, aws, or azure. If you use GCP, IBM etc., please set cluster.provider: local and cluster.cloudNativeServices: false. The repository also contains Azure ARM templates and AWS eksctl templates to deploy the required base infrastructure.","s":"Cloud support","u":"/private-networks/tutorials/kubernetes","h":"#cloud-support","p":3344},{"i":3351,"t":"When using multi-clusters, Kubernetes load balancers disallow TCP and UDP traffic on the same port, which inhibits discovery working natively for each pod. Use the following solutions to mitigate this limitation: Disallow discovery and use static nodes to allow only TCP traffic. This isn't an issue for load balancers or exposing nodes publicly. If you need to use discovery, use something such as CNI which is supported by all major cloud providers, and the cloud templates already have CNI implemented.","s":"Limitations","u":"/private-networks/tutorials/kubernetes","h":"#limitations","p":3344},{"i":3353,"t":"With the traditional kubenet networking mode, nodes get an IP from the virtual network subnet. Each node in turn uses NAT to configure the pods so that they reach other pods on the virtual network. This limits where they can reach but also more specifically what can reach them. For example, an external VM which must have custom routes does not scale well. CNI, on the other hand, allows every pod to get a unique IP directly from the virtual subnet which removes this restriction. Therefore, it has a limit on the maximum number of pods that can be spun up, so you must plan ahead to avoid IP exhaustion.","s":"CNI","u":"/private-networks/tutorials/kubernetes","h":"#cni","p":3344},{"i":3355,"t":"You must enable CNI to use multi-cluster, or to connect external nodes to an existing Kubernetes cluster. To connect multiple clusters, they must each have different CIDR blocks to ensure no conflicts, and the first step is to peer the VPCs or VNets together and update the route tables. From that point on you can use static nodes and pods to communicate across the cluster. The same setup also works to connect external nodes and business applications from other infrastructure, either in the cloud or on premise.","s":"Multi-cluster","u":"/private-networks/tutorials/kubernetes","h":"#multi-cluster","p":3344},{"i":3358,"t":"In Kubernetes, namespaces provide a mechanism for isolating groups of resources within a single cluster. Both namespaces and resources (for example, Stateful Sets or Services) within a namespace must be unique, but resources across namespaces don't need to be. note Namespace-based scoping is not applicable for cluster-wide objects (for example, Storage Class or Persistent Volumes).","s":"Namespaces","u":"/private-networks/tutorials/kubernetes","h":"#namespaces","p":3344},{"i":3360,"t":"Consider using Stateful Sets instead of Deployments for Besu. The term 'client node' refers to bootnode, validator and member/RPC nodes. For Besu nodes, we only use CLI arguments to keep things consistent.","s":"Nodes","u":"/private-networks/tutorials/kubernetes","h":"#nodes","p":3344},{"i":3362,"t":"We encourage using role-based access controls (RBACs) for access to the private key of each node, that is, only a specific pod or statefulset is allowed to access a specific secret. If you need to specify a Kube configuration file for each pod, use the KUBE_CONFIG_PATH variable.","s":"Role-based access controls","u":"/private-networks/tutorials/kubernetes","h":"#role-based-access-controls","p":3344},{"i":3364,"t":"We use separate data volumes to store the blockchain data. This is similar to using separate volumes to store data when using docker containers natively or docker-compose. This is done for a few reasons: Containers are mortal and we do not want to store data on them. Kubernetes host nodes can fail and we want the chain data to persist. Ensure that you provide enough data storage capacity for all nodes on the cluster. Select the appropriate type of Storage Class based on your cloud provider. In the templates, the size of the volume claims is set to 20Gb by default; you can change this depending on your needs. If you have a different storage account than the one in the charts, you may edit those Storage Classes. When using Persistent Volume Claims, set the allowVolumeExpansion to true. This helps keep costs low and enables growing the volume over time rather than creating new volumes and copying data across.","s":"Storage","u":"/private-networks/tutorials/kubernetes","h":"#storage","p":3344},{"i":3366,"t":"We recommend deploying metrics to get an overview of the network, nodes, and volumes. You can also create alerts. Besu publishes metrics to Prometheus, and you can configure metrics using the kubernetes scraper configuration. We also have custom Grafana dashboards to monitor the blockchain. note Refer to values/monitoring.yml to configure the alerts per your requirements (for example slack or email). cd helm helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --create-namespace --values ./values/monitoring.yml --wait kubectl --namespace besu apply -f ./values/monitoring/ You can configure Besu to suit your environment. For example, use the Elastic charts to log to a file that you can parse using Logstash into an ELK cluster. cd helm helm repo add elastic https://helm.elastic.co helm repo update # if on cloud helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml # if local - set the replicas to 1 helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1 helm install kibana --version 7.17.1 elastic/kibana --namespace besu --values ./values/kibana.yml helm install filebeat --version 7.17.1 elastic/filebeat --namespace besu --values ./values/filebeat.yml","s":"Monitoring","u":"/private-networks/tutorials/kubernetes","h":"#monitoring","p":3344},{"i":3368,"t":"If you require the ingress controllers for the RPC calls or the monitoring dashboards, we have provided example rules that are pre-configured for common use cases. Use these as a reference and develop solutions to match your network topology and requirements.","s":"Ingress Controllers","u":"/private-networks/tutorials/kubernetes","h":"#ingress-controllers","p":3344},{"i":3370,"t":"You can create a local or cloud cluster to deploy a Besu network using Kubernetes.","s":"Create a cluster","u":"/private-networks/tutorials/kubernetes/cluster","h":"","p":3369},{"i":3372,"t":"Clone the Quorum-Kubernetes repository Install Kubectl Install Helm3 Install AWS CLI and eksctl for AWS EKS clusters Install Azure CLI for Azure AKS clusters Install the cloud-specific CLI","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/cluster","h":"#prerequisites","p":3369},{"i":3374,"t":"Use one of several options to create a local cluster. Select one listed below, or another that you're comfortable with.","s":"Local Clusters","u":"/private-networks/tutorials/kubernetes/cluster","h":"#local-clusters","p":3369},{"i":3376,"t":"Minikube is one of the most popular options to spin up a local Kubernetes cluster for development. You can install a version based on your architecture. note We recommend at least 2 CPUs and 16GB of RAM. To start the cluster, run the following command: minikube start --cpus 2 --memory 16384 --cni auto","s":"Minikube","u":"/private-networks/tutorials/kubernetes/cluster","h":"#minikube","p":3369},{"i":3378,"t":"kind (Kubernetes in Docker) is a lightweight tool for running local Kubernetes clusters. The installation is similar to Minikube. To start the cluster, run the following command: kind create cluster","s":"kind","u":"/private-networks/tutorials/kubernetes/cluster","h":"#kind","p":3369},{"i":3380,"t":"Rancher is a lightweight open source desktop application for Mac, Windows, and Linux. It provides Kubernetes and container management, and allows you to choose the version of Kubernetes to run. It can build, push, pull, and run container images. Built container images can be run without needing a registry. note The official Docker-CLI is not supported but rather uses nerdctl which is a Docker-CLI compatible tool for containerd, and is automatically installed with Rancher Desktop. note For Windows, you must install Windows Subsystem for Linux (WSL) to install Rancher Desktop. Refer to the official Rancher Desktop documentation for system requirements and installation instructions.","s":"Rancher","u":"/private-networks/tutorials/kubernetes/cluster","h":"#rancher","p":3369},{"i":3383,"t":"AWS Elastic Kubernetes Service (AWS EKS) is one of the most popular platforms to deploy Besu. To create a cluster in AWS, you must install the AWS CLI and eksctl. The template comprises the base infrastructure used to build the cluster and other resources in AWS. We also use some native services with the cluster for performance and best practices, these include: Pod identities. Secrets Store CSI drivers. Dynamic storage classes backed by AWS EBS. The volume claims are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class. CNI networking mode for EKS. By default, EKS clusters use kubenet to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address \"hidden\" behind the node IP. note This approach reduces the number of IP addresses that you must reserve in your network space for pods, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or those on another cloud provider). AWS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. The IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can lead to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster. warning EKS clusters must not use 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24 for the Kubernetes service address range. To provision the cluster: Update cluster.yml Deploy the template: eksctl create cluster -f ./templates/cluster.yml Your .kube/config should be connected to the cluster automatically, but if not, run the commands below and replace AWS_REGION and CLUSTER_NAME with details that are specific to your deployment. aws sts get-caller-identity aws eks --region AWS_REGION update-kubeconfig --name CLUSTER_NAME After the deployment completes, provision the EBS drivers for the volumes. While it is possible to use the in-tree aws-ebs driver that's natively supported by Kubernetes, it is no longer being updated and does not support newer EBS features such as the cheaper and better gp3 volumes. The cluster.yml file (from the steps above) that is included in this folder automatically deploys the cluster with the EBS IAM policies, but you need to install the EBS CSI drivers. This can be done through the AWS Management Console for simplicity, or via a CLI command as below. Replace CLUSTER_NAME, AWS_REGION and AWS_ACCOUNT with details that are specific to your deployment. eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster CLUSTER_NAME --region AWS_REGION --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --approve --role-only --role-name AmazonEKS_EBS_CSI_DriverRole eksctl create addon --name aws-ebs-csi-driver --cluster CLUSTER_NAME --region AWS_REGION --service-account-role-arn arn:aws:iam::AWS_ACCOUNT:role/AmazonEKS_EBS_CSI_DriverRole --force Once the deployment is completed, provision the Secrets Manager IAM and CSI driver. Use besu (or equivalent) for NAMESPACE and replace CLUSTER_NAME, AWS_REGION and AWS_ACCOUNT with details that are specific to your deployment. helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install --namespace kube-system --create-namespace csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml POLICY_ARN=$(aws --region AWS_REGION --query Policy.Arn --output text iam create-policy --policy-name quorum-node-secrets-mgr-policy --policy-document '{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [\"secretsmanager:CreateSecret\",\"secretsmanager:UpdateSecret\",\"secretsmanager:DescribeSecret\",\"secretsmanager:GetSecretValue\",\"secretsmanager:PutSecretValue\",\"secretsmanager:ReplicateSecretToRegions\",\"secretsmanager:TagResource\"], \"Resource\": [\"arn:aws:secretsmanager:AWS_REGION:AWS_ACCOUNT:secret:besu-node-*\"] } ] }') # If you have deployed the above policy before, you can acquire its ARN: POLICY_ARN=$(aws iam list-policies --scope Local \\ --query 'Policies[?PolicyName==`quorum-node-secrets-mgr-policy`].Arn' \\ --output text) eksctl create iamserviceaccount --name quorum-node-secrets-sa --namespace NAMESPACE --region=AWS_REGION --cluster CLUSTER_NAME --attach-policy-arn \"$POLICY_ARN\" --approve --override-existing-serviceaccounts warning The above command creates a service account called quorum-node-secrets-sa and is preconfigured in the helm charts override values.yml files, for ease of use. Optionally, deploy the kubernetes dashboard. You can now use your cluster and you can deploy Helm charts to it.","s":"AWS EKS","u":"/private-networks/tutorials/kubernetes/cluster","h":"#aws-eks","p":3369},{"i":3385,"t":"Azure Kubernetes Service (AKS) is another popular cloud platform that you can use to deploy Besu. To create a cluster in Azure, you must install the Azure CLI and have admin rights on your Azure subscription to enable some preview features on AKS. The template comprises the base infrastructure used to build the cluster and other resources in Azure. We also make use Azure native services and features after the cluster is created. These include: AAD pod identities. Secrets Store CSI drivers. Dynamic storage classes backed by Azure Files. The volume claims are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class. CNI networking mode for AKS. By default, AKS clusters use kubenet, to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address \"hidden\" behind the node IP. note This approach reduces the number of IP addresses you must reserve in your network space for pods to use, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or other cloud providers). AKS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. These IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can leads to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster. warning Please do not create more than one AKS cluster in the same subnet. AKS clusters may not use 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24 for the Kubernetes service address range. To provision the cluster: Enable the preview features that allow you to use AKS with CNI, and a managed identity to authenticate and run cluster operations with other services. We also enable AAD pod identities which use the managed identity. This is in preview, so you must enable this feature by registering the EnablePodIdentityPreview feature: az feature register --name EnablePodIdentityPreview --namespace Microsoft.ContainerService This takes a little while and you can check on progress by running: az feature list --namespace Microsoft.ContainerService -o table Install or update your local Azure CLI with preview features: az extension add --name aks-preview az extension update --name aks-preview Create a resource group if you don't already have one: az group create --name BesuGroup --location \"East US\" Deploy the template: Navigate to the Azure portal, select + Create a resource in the upper left corner. Search for Template deployment (deploy using custom templates) and select Create. Select Build your own template in the editor. Remove the contents (JSON) in the editor and paste in the contents of azuredeploy.json Select Save. Input provisioning parameters in the displayed user interface. Provision the drivers: Run the bootstrap script. Use besu for AKS_NAMESPACE, and update AKS_RESOURCE_GROUP, AKS_CLUSTER_NAME, and AKS_MANAGED_IDENTITY in the commands below to match your settings and deployed resources from step 3. ./scripts/bootstrap.sh \"AKS_RESOURCE_GROUP\" \"AKS_CLUSTER_NAME\" \"AKS_MANAGED_IDENTITY\" \"AKS_NAMESPACE\" You can now use your cluster and you can deploy Helm charts to it.","s":"Azure Kubernetes Service","u":"/private-networks/tutorials/kubernetes/cluster","h":"#azure-kubernetes-service","p":3369},{"i":3387,"t":"Important This reference contains API methods that apply to only private networks. For API methods that apply to both private and public networks, see the public network API reference. All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint.","s":"Private network API methods","u":"/private-networks/reference/api","h":"","p":3386},{"i":3389,"t":"The CLIQUE API methods provide access to the Clique consensus engine. note The CLIQUE API methods are not enabled by default for JSON-RPC. To enable the CLIQUE API methods use the --rpc-http-api or --rpc-ws-api options.","s":"CLIQUE methods","u":"/private-networks/reference/api","h":"#clique-methods","p":3386},{"i":3391,"t":"Discards a proposal to add or remove a signer with the specified address. Parameters​ address: string - 20-byte address of proposed signer Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"clique_discard","u":"/private-networks/reference/api","h":"#clique_discard","p":3386},{"i":3393,"t":"Lists signers for the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of string - list of 20-byte addresses of signers curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\" : \"2.0\", \"id\" : 1, \"result\" : [ \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"0xb279182d99e65703f0076e4812653aab85fca0f0\" ] }","s":"clique_getSigners","u":"/private-networks/reference/api","h":"#clique_getsigners","p":3386},{"i":3395,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"clique_getSignerMetrics","u":"/private-networks/reference/api","h":"#clique_getsignermetrics","p":3386},{"i":3397,"t":"Lists signers for the specified block. Parameters​ hash: string - 32-byte block hash Returns​ result: array of string - list of 20-byte addresses of signers curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignersAtHash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignersAtHash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"0xb279182d99e65703f0076e4812653aab85fca0f0\" ] }","s":"clique_getSignersAtHash","u":"/private-networks/reference/api","h":"#clique_getsignersathash","p":3386},{"i":3399,"t":"Returns current proposals. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the proposal for each account (if true, the proposal is to add a signer; if false, the proposal is to remove a signer.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0x42eb768f2244c8811c63729a21a3569731535f07\": false, \"0x12eb759f2222d7711c63729a45c3585731521d01\": true } }","s":"clique_proposals","u":"/private-networks/reference/api","h":"#clique_proposals","p":3386},{"i":3401,"t":"Proposes to add or remove a signer with the specified address. Parameters​ address: string - 20-byte address proposal: boolean - true to propose adding signer or false to propose removing signer Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"clique_propose","u":"/private-networks/reference/api","h":"#clique_propose","p":3386},{"i":3403,"t":"The EEA API methods provide functionality for private transactions and privacy groups. note The EEA API methods are not enabled by default for JSON-RPC. To enable the EEA API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"EEA methods","u":"/private-networks/reference/api","h":"#eea-methods","p":3386},{"i":3405,"t":"Distributes the private transaction, generates the privacy marker transaction and submits it to the transaction pool, and returns the transaction hash of the privacy marker transaction. The signed transaction passed as an input parameter includes the privateFrom, privateFor or privacyGroupId, and restriction fields. The gas and gasPrice are used by the privacy marker transaction not the private transaction itself. To avoid exposing your private key, create signed transactions offline and send the signed transaction data using eea_sendRawTransaction. important For production systems requiring private transactions, use a network with a consensus mechanism supporting transaction finality to make sure the private state does not become inconsistent with the chain. For example, IBFT 2.0 and QBFT provide the required finality. Using private transactions with pruning or fast sync isn't supported. Parameters​ transaction: string - signed RLP-encoded private transaction Returns​ result: string - 32-byte transaction hash of the privacy marker transaction tip If creating a contract, use priv_getTransactionReceipt to retrieve the contract address after the transaction is finalized. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eea_sendRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eea_sendRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1} { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" }","s":"eea_sendRawTransaction","u":"/private-networks/reference/api","h":"#eea_sendrawtransaction","p":3386},{"i":3407,"t":"The IBFT API methods provide access to the IBFT 2.0 consensus engine. note The IBFT API methods are not enabled by default for JSON-RPC. To enable the IBFT API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"IBFT 2.0 methods","u":"/private-networks/reference/api","h":"#ibft-20-methods","p":3386},{"i":3409,"t":"Discards a proposal to add or remove a validator with the specified address. Parameters​ address: string - 20-byte address of proposed validator Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"ibft_discardValidatorVote","u":"/private-networks/reference/api","h":"#ibft_discardvalidatorvote","p":3386},{"i":3411,"t":"Returns votes cast in the current epoch. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the vote for each account; if true, the vote is to add a validator. If false, the proposal is to remove a validator. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getPendingVotes\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getPendingVotes\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\": true, \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\": true } }","s":"ibft_getPendingVotes","u":"/private-networks/reference/api","h":"#ibft_getpendingvotes","p":3386},{"i":3413,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block of the range Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"ibft_getSignerMetrics","u":"/private-networks/reference/api","h":"#ibft_getsignermetrics","p":3386},{"i":3415,"t":"Lists the validators defined in the specified block. Parameters​ block: string - 32-byte block hash Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"ibft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblockhash","p":3386},{"i":3417,"t":"Lists the validators defined in the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"ibft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblocknumber","p":3386},{"i":3419,"t":"Proposes to add or remove a validator with the specified address. Parameters​ address: string - account address proposal: boolean - true to propose adding validator or false to propose removing validator Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"ibft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#ibft_proposevalidatorvote","p":3386},{"i":3421,"t":"The PERM API methods provide permissioning functionality. Use these methods for local permissioning only. important The PERM API methods are not enabled by default for JSON-RPC. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api CLI options.","s":"PERM (Permissioning) methods","u":"/private-networks/reference/api","h":"#perm-permissioning-methods","p":3386},{"i":3423,"t":"Adds accounts (participants) to the accounts permission list. Parameters​ addresses: array of strings - list of account addresses note The parameters list contains a list which is why the account addresses are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to add accounts already on the allowlist and including invalid account addresses.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addAccountsToAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_addAccountsToAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_addAccountsToAllowlist","u":"/private-networks/reference/api","h":"#perm_addaccountstoallowlist","p":3386},{"i":3425,"t":"Adds nodes to the nodes allowlist. To use domain names in enode URLs, ensure you enable DNS support to avoid receiving a request contains an invalid node error. warning Enode URL domain name support is an early access feature. Parameters​ enodes: array of strings - list of enode URLs note The parameters list contains a list which is why the enode URLs are enclosed by double square brackets. Returns​ result: string - Success or error; errors include attempting to add nodes already on the allowlist or including invalid enode URLs. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_addNodesToAllowlist","u":"/private-networks/reference/api","h":"#perm_addnodestoallowlist","p":3386},{"i":3427,"t":"Lists accounts (participants) in the accounts permissions list. Parameters​ None Returns​ result: array of strings - list of accounts (participants) in the accounts allowlist curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_getAccountsAllowlist\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_getAccountsAllowlist\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x0000000000000000000000000000000000000009\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462033\" ] }","s":"perm_getAccountsAllowlist","u":"/private-networks/reference/api","h":"#perm_getaccountsallowlist","p":3386},{"i":3429,"t":"Lists nodes in the nodes allowlist. Parameters​ None Returns​ result: array of strings - enode URLs of nodes in the nodes allowlist curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_getNodesAllowlist\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_getNodesAllowlist\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\", \"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\" ] }","s":"perm_getNodesAllowlist","u":"/private-networks/reference/api","h":"#perm_getnodesallowlist","p":3386},{"i":3431,"t":"Reloads the accounts and nodes allowlists from the permissions configuration file. Parameters​ None Returns​ result: string - Success, or error if the permissions configuration file is not valid curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_reloadPermissionsFromFile\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_reloadPermissionsFromFile\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_reloadPermissionsFromFile","u":"/private-networks/reference/api","h":"#perm_reloadpermissionsfromfile","p":3386},{"i":3433,"t":"Removes accounts (participants) from the accounts permissions list. Parameters​ addresses: array of strings - list of account addresses note The parameters list contains a list which is why the account addresses are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to remove accounts not on the allowlist and including invalid account addresses.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_removeAccountsFromAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_removeAccountsFromAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_removeAccountsFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removeaccountsfromallowlist","p":3386},{"i":3435,"t":"Removes nodes from the nodes allowlist. Parameters​ enodes: array of strings - list of enode URLs note The parameters list contains a list which is why the enode URLs are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to remove nodes not on the allowlist and including invalid enode URLs.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_removeNodesFromAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_removeNodesFromAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_removeNodesFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removenodesfromallowlist","p":3386},{"i":3437,"t":"The PRIV API methods provide functionality for private transactions and privacy groups. note The PRIV API methods are not enabled by default for JSON-RPC. To enable the PRIV API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"PRIV methods","u":"/private-networks/reference/api","h":"#priv-methods","p":3386},{"i":3439,"t":"Invokes a private contract function locally and does not change the privacy group state. For private contracts, priv_call is the same as eth_call for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - return value of the executed contract curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=\", {\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"data\": \"0x3fa4f245\"}, \"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=\", {\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"data\": \"0x3fa4f245\"}, \"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x0000000000000000000000000000000000000000000000000000000000000001\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block {number call (data : {from : \\\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\\", to: \\\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\\", data :\\\"0x12a7b914\\\"}){data status}}}\"}' http://localhost:8547/graphql { block { number call(data: {from: \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data: \"0x12a7b914\"}) { data status } } } { \"data\": { \"block\": { \"number\": 17449, \"call\": { \"data\": \"0x\", \"status\": 1 } } } }","s":"priv_call","u":"/private-networks/reference/api","h":"#priv_call","p":3386},{"i":3441,"t":"Creates a group of nodes, specified by their Tessera public key. Parameters​ options: object - request options object with the following fields: addresses: array of strings - list of nodes specified by Tessera public keys name: string - (optional) privacy group name description: string - (optional) privacy group description Returns​ result: string - privacy group ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"priv_createPrivacyGroup\", \"params\": [{\"addresses\":[\"sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=\",\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\"],\"name\":\"Group A\",\"description\":\"Description Group A\"}],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\": \"priv_createPrivacyGroup\", \"params\": [{\"addresses\":[\"sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=\",\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\"],\"name\":\"Group A\",\"description\":\"Description Group A\"}],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\" }","s":"priv_createPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_createprivacygroup","p":3386},{"i":3443,"t":"Returns the state root of the specified privacy group at the specified block. Parameters​ privacyGroupId: string - 32-byte privacy Group ID blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - 32-byte state root curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_debugGetStateRoot\",\"params\":[\"xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=\",\"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_debugGetStateRoot\",\"params\":[\"xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=\",\"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\" }","s":"priv_debugGetStateRoot","u":"/private-networks/reference/api","h":"#priv_debuggetstateroot","p":3386},{"i":3445,"t":"Deletes the specified privacy group. Parameters​ privacyGroupId: string - privacy group ID Returns​ result: string - deleted privacy group ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_deletePrivacyGroup\",\"params\":[\"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_deletePrivacyGroup\",\"params\":[\"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\" }","s":"priv_deletePrivacyGroup","u":"/private-networks/reference/api","h":"#priv_deleteprivacygroup","p":3386},{"i":3447,"t":"Distributes a signed, RLP encoded private transaction. tip If you want to sign the privacy marker transaction outside of Besu, use priv_distributeRawTransaction instead of eea_sendRawTransaction. Parameters​ transaction: string - signed RLP-encoded private transaction Returns​ result: string - 32-byte enclave key (the enclave key is a pointer to the private transaction in Tessera.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_distributeRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_distributeRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\" }","s":"priv_distributeRawTransaction","u":"/private-networks/reference/api","h":"#priv_distributerawtransaction","p":3386},{"i":3449,"t":"Returns a list of privacy groups containing only the listed members. For example, if the listed members are A and B, a privacy group containing A, B, and C is not returned. Parameters​ members: array of strings - members specified by Tessera public keys Returns​ result: array of objects - privacy group objects containing only the specified members; privacy groups are EEA-compliant or Besu-extended with types: LEGACY for EEA-compliant groups. PANTHEON for Besu-extended groups. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_findPrivacyGroup\",\"params\": [[\"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"]],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_findPrivacyGroup\",\"params\": [[\"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"]],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=\", \"name\": \"Group B\", \"description\": \"Description of Group B\", \"type\": \"PANTHEON\", \"members\": [ \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\" ] } ] }","s":"priv_findPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_findprivacygroup","p":3386},{"i":3451,"t":"Returns the code of the private smart contract at the specified address. Compiled smart contract code is stored as a hexadecimal value. Parameters​ privacyGroupId: string - 32-byte privacy Group ID address: string - 20-byte contract address blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - code stored at the specified address curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getCode\",\"params\":[\"1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=\", \"0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201\", \"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getCode\",\"params\":[\"1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=\", \"0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201\", \"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" }","s":"priv_getCode","u":"/private-networks/reference/api","h":"#priv_getcode","p":3386},{"i":3453,"t":"Returns the private transaction count for the specified account and group of sender and recipients. ::caution important If sending more than one transaction to be mined in the same block (that is, you are not waiting for the transaction receipt), you must calculate the private transaction nonce outside Besu instead of using priv_getEeaTransactionCount. ::: Parameters​ address: string - account address sender: string - base64-encoded Tessera address of the sender recipients: array of strings - base64-encoded Tessera addresses of recipients Returns​ result: string - integer representing the number of private transactions sent from the address to the specified group of sender and recipients curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getEeaTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=\", [\"KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=\",\"eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg=\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getEeaTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=\", [\"KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=\",\"eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg=\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"priv_getEeaTransactionCount","u":"/private-networks/reference/api","h":"#priv_geteeatransactioncount","p":3386},{"i":3455,"t":"Polls the specified filter for a private contract and returns an array of changes that have occurred since the last poll. Filters for private contracts can only be created by priv_newFilter so unlike eth_getFilterChanges, priv_getFilterChanges always returns an array of log objects or an empty list. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterId: string - filter ID Returns​ result: array of objects - list of log objects, or an empty list if nothing has changed since the last poll curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterChanges\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterChanges\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d0\", \"blockHash\": \"0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb\", \"transactionHash\": \"0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getFilterChanges","u":"/private-networks/reference/api","h":"#priv_getfilterchanges","p":3386},{"i":3457,"t":"Returns an array of logs for the specified filter for a private contract. For private contracts, priv_getFilterLogs is the same as eth_getFilterLogs for public contracts except there's no automatic log bloom caching for private contracts. note priv_getFilterLogs is only used for filters created with priv_newFilter. To specify a filter object and get logs without creating a filter, use priv_getLogs. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterId: string - filter ID Returns​ result: array of objects - list of log objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterLogs\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterLogs\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x493\", \"blockHash\": \"0xd9cb3a852e1e02c95f035a2e32d57f82c10cab61faa3e8f5c010adf979bb4786\", \"transactionHash\": \"0x78866dc51fdf189d8cca74f6a8fe54f172348fbd2163bbe80fa8b106cfc7deb4\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d0\", \"blockHash\": \"0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb\", \"transactionHash\": \"0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getFilterLogs","u":"/private-networks/reference/api","h":"#priv_getfilterlogs","p":3386},{"i":3459,"t":"Returns an array of logs matching a specified filter object. For private contracts, priv_getLogs is the same as eth_getLogs for public contracts except there is no automatic log bloom caching for private contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterOptions: object - filter options object Returns​ result: array of objects - list of log objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getLogs\",\"params\":[\"vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x630c507ff633312087dc33c513b66276abcd2fc3\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getLogs\",\"params\":[\"vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x630c507ff633312087dc33c513b66276abcd2fc3\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x342\", \"blockHash\": \"0xf5954f068fa2f2f7741281e8c753a8e92047e27ab3c4971836d2c89fab86d92b\", \"transactionHash\": \"0xa9ba5cffde9d4ad8997c5c4352d5d49eeea0e9def8a4ea69991b8837c49d4e4f\", \"transactionIndex\": \"0x0\", \"address\": \"0x630c507ff633312087dc33c513b66276abcd2fc3\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x383\", \"blockHash\": \"0x91b73a47d53e3a88d62ed091a89a4be7557ad91b552e7ff7d86bf78977d5d45d\", \"transactionHash\": \"0xc2a185faf00e87434e55b7f70cc4c38be354c2128b4b96b5f5def0b54a2173ec\", \"transactionIndex\": \"0x0\", \"address\": \"0x630c507ff633312087dc33c513b66276abcd2fc3\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getLogs","u":"/private-networks/reference/api","h":"#priv_getlogs","p":3386},{"i":3461,"t":"Returns the address of the privacy precompiled contract. The address is derived and based on the value of the privacy-flexible-groups-enabled option. Parameters​ None Returns​ result: string - address of the privacy precompile curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivacyPrecompileAddress\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivacyPrecompileAddress\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x000000000000000000000000000000000000007e\" }","s":"priv_getPrivacyPrecompileAddress","u":"/private-networks/reference/api","h":"#priv_getprivacyprecompileaddress","p":3386},{"i":3463,"t":"Returns the private transaction if you are a participant, otherwise, null. Parameters​ transaction: string - transaction hash returned by eea_sendRawTransaction. Returns​ result: object - private transaction object, or null if not a participant in the private transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivateTransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivateTransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x2dc6c0\", \"gasPrice\": \"0x0\", \"hash\": \"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\", \"input\": \"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610221806100606000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f2451461005c5780636057361d1461008757806367e404ce146100b4575b600080fd5b34801561006857600080fd5b5061007161010b565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100b260048036038101908080359060200190929190505050610115565b005b3480156100c057600080fd5b506100c96101cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600254905090565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a18060028190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050905600a165627a7a723058208efaf938851fb2d235f8bf9a9685f149129a30fe0f4b20a6c1885dc02f639eba0029\", \"nonce\": \"0x0\", \"to\": null, \"value\": \"0x0\", \"v\": \"0xfe8\", \"r\": \"0x654a6a9663ca70bb13e27cca14b3777cc92da184e19a151cdeef2ccbbd5c6405\", \"s\": \"0x5dd4667b020c8a5af7ae28d4c3126f8dcb1187f49dcf0de9d7a39b1651892eef\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privateFor\": [\"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"], \"restriction\": \"restricted\" } }","s":"priv_getPrivateTransaction","u":"/private-networks/reference/api","h":"#priv_getprivatetransaction","p":3386},{"i":3465,"t":"Returns the private transaction count for specified account and privacy group. important If sending more than one transaction to be mined in the same block (that is, you are not waiting for the transaction receipt), you must calculate the private transaction nonce outside Besu instead of using priv_getTransactionCount. Parameters​ address: string - account address privacyGroupId: string - privacy group ID Returns​ result: string - integer representing the number of private transactions sent from the address to the specified privacy group curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"priv_getTransactionCount","u":"/private-networks/reference/api","h":"#priv_gettransactioncount","p":3386},{"i":3467,"t":"Returns information about the private transaction after mining the transaction. Receipts for pending transactions are not available. Parameters​ transaction: string - 32-byte hash of a transaction Returns​ result: object - private Transaction receipt object, or null if no receipt found curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionReceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionReceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": \"0x493b76031593402e24e16faa81f677b58e2d53f3\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"logs\": [], \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0x36219e92b5f53d4150aa9ef7d2d793118cced523de6724100da5b534e3ceb4b8\", \"transactionIndex\": \"0x0\", \"output\": \"0x6080604052600436106049576000357c010000000000000000000000000000000000000000000 0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059 57600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b 50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b8060008190555050560 0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"commitmentHash\": \"0x79b9e6b0856db398ad7dc208f15b1d38c0c0b0c5f99e4a443a2c5a85510e96a5\", \"status\": \"0x1\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privacyGroupId\": \"cD636RZlcqVSpoxT/ExbkWQfBO7kPAZO0QlWHErNSL8=\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" } }","s":"priv_getTransactionReceipt","u":"/private-networks/reference/api","h":"#priv_gettransactionreceipt","p":3386},{"i":3469,"t":"Creates a log filter for a private contract. To poll for logs associated with the created filter, use priv_getFilterChanges. To get all logs associated with the filter, use priv_getFilterLogs. For private contracts, priv_newFilter is the same as eth_newFilter for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterOptions: object - filter options object note fromBlock and toBlock in the filter options object default to latest. Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_newFilter\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_newFilter\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4a35b92809d73f4f53a2355d62125442\" }","s":"priv_newFilter","u":"/private-networks/reference/api","h":"#priv_newfilter","p":3386},{"i":3471,"t":"Provides a transaction trace for a private transaction. Parameters​ privacyGroupId: string - the privacy group ID associated with the transaction transactionHash: string - the hash of the private transaction to trace Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction. If revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"priv_traceTransaction\",\"params\": [\"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", {\"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\"}],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"priv_traceTransaction\", \"params\": [ \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", { \"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\" } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"creationMethod\": \"create\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gas\": \"0xff2e26\", \"init\": \"0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"code\": \"0x\", \"gasUsed\": \"0x1c39\" }, \"subtraces\": 2, \"traceAddress\": [], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"create\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb2ea9\", \"input\": \"0x\", \"to\": \"0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x138e\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" }, { \"action\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"balance\": \"0x0\", \"refundAddress\": \"0x0000000000000000000000000000000000000000\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0, 0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"suicide\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb18a5\", \"input\": \"0x\", \"to\": \"0x00a0000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x30b\", \"output\": \"0x\" }, \"subtraces\": 0, \"traceAddress\": [1], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" } ], \"id\": 1, \"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\" }","s":"priv_traceTransaction","u":"/private-networks/reference/api","h":"#priv_tracetransaction","p":3386},{"i":3473,"t":"Uninstalls a filter for a private contract with the specified ID. When a filter is no longer required, call this method. Filters time out when not requested by priv_getFilterChanges or priv_getFilterLogs for 10 minutes. For private contracts, priv_uninstallFilter is the same as eth_uninstallFilter for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy group ID filterId: string - filter ID Returns​ result: boolean - indicates if the filter is successfully uninstalled curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_uninstallFilter\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_uninstallFilter\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"priv_uninstallFilter","u":"/private-networks/reference/api","h":"#priv_uninstallfilter","p":3386},{"i":3475,"t":"The QBFT API methods provide access to the QBFT consensus engine. note The QBFT API methods are not enabled by default for JSON-RPC. To enable the QBFT API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"QBFT methods","u":"/private-networks/reference/api","h":"#qbft-methods","p":3386},{"i":3477,"t":"Discards a proposal to add or remove a validator with the specified address. Parameters​ address: string - 20-byte address of proposed validator Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"qbft_discardValidatorVote","u":"/private-networks/reference/api","h":"#qbft_discardvalidatorvote","p":3386},{"i":3479,"t":"Returns votes cast in the current epoch. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the vote for each account; if true, the vote is to add a validator. If false, the proposal is to remove a validator. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getPendingVotes\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getPendingVotes\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\": true, \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\": true } }","s":"qbft_getPendingVotes","u":"/private-networks/reference/api","h":"#qbft_getpendingvotes","p":3386},{"i":3481,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block of the range Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"qbft_getSignerMetrics","u":"/private-networks/reference/api","h":"#qbft_getsignermetrics","p":3386},{"i":3483,"t":"Lists the validators defined in the specified block. Parameters​ block: string - 32-byte block hash Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"qbft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblockhash","p":3386},{"i":3485,"t":"Lists the validators for the specified block. For all blocks up to the chain head block this method returns the validators that were used at the time the block was produced. Use blockNumber to get the list of validators for that block. For the chain head block there are two validator lists associated with it: The validators that were used at the time the block was produced. This list is returned by passing latest as the input parameter. The validators that will be used to produce the next block. This list is returned by passing pending as the input parameter. In most instances the two lists for the chain head block are the same. However, when voting has completed to add or remove a validator, the validators that will be used to produce the next block are different. Comparing the two lists can be helpful when diagnosing a stalled chain. note When the validator list changes, an INFO log message displays, showing the previous list of validators and the new list of validators. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"qbft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblocknumber","p":3386},{"i":3487,"t":"Proposes to add or remove a validator with the specified address. Parameters​ address: string - account address proposal: boolean - true to propose adding validator or false to propose removing validator Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true } *[EEA]: Enterprise Ethereum Alliance","s":"qbft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#qbft_proposevalidatorvote","p":3386},{"i":3489,"t":"You can perform maintenance for Besu on a Kubernetes cluster.","s":"Maintenance","u":"/private-networks/tutorials/kubernetes/maintenance","h":"","p":3488},{"i":3491,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster with a network Install Kubectl Install Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#prerequisites","p":3488},{"i":3493,"t":"Over time, as the chain grows, so will the amount of space used by the persistent volume claim (PVC). As of Kubernetes v1.11, certain types of Storage Classes allow volume resizing. Production charts for Azure use Azure Files, and on AWS use EBS Block Store which allow for volume expansion. To update the volume size, you must update the override values file. For example, to increase the size on the transaction nodes volumes, add the following snippet to the txnode values.yml file, with the new size limit (the following example uses 50Gi). storage: sizeLimit: \"50Gi\" pvcSizeLimit: \"50Gi\" Once complete, update the node via helm: helm upgrade tx-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml","s":"Update a persistent volume claim size","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-a-persistent-volume-claim-size","p":3488},{"i":3495,"t":"important When updating Besu nodes across a cluster, perform the updates as a rolling update and not all at once, especially for the validator pool. If all the validators are taken offline, the chain halts, and you must wait for round changes to expire before blocks are created again. Updates for Besu can be done via Helm in exactly the same manner as other applications. Alternatively, this can be done via kubectl. This example updates a node called besu-validator-3: Set the update policy to use rolling updates (if not done already): kubectl patch statefulset besu-validator-3 --namespace besu -p '{\"spec\":{\"updateStrategy\":{\"type\":\"RollingUpdate\"}}}' Update the Besu version via Helm: helm upgrade bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml --set image.besu.tag=21.10.0 Or via kubectl: kubectl patch statefulset besu-validator-3 --namespace besu --type='json' -p='[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/image\", \"value\":\"hyperledger/besu:21.10.0\"}]'","s":"Update Besu versions","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-besu-versions","p":3488},{"i":3497,"t":"The playground was created to provide an opportunity to deploy quorum-kubernetes in a local environment before attempting in a live environment (such as in the cloud or on-premise). Local deployment can be done with any local Kubernetes tool. Minikube and Rancher Desktop have been tested to work, but any complete Kubernetes solution with support for kubectl should suffice.","s":"Deploy in a local environment","u":"/private-networks/tutorials/kubernetes/playground","h":"","p":3496},{"i":3499,"t":"Navigate to the playground README. Ensure that your system meets the requirements specified. Choose your Ethereum client (Besu or GoQuorum): quorum-besu or quorum-go. Choose your consensus algorithm. The playground supports Clique, Ethash (PoW), and IBFT2 for Besu, and IBFT for GoQuorum. Follow the instructions from the README for the chosen client and consensus algorithm folder.","s":"Steps","u":"/private-networks/tutorials/kubernetes/playground","h":"#steps","p":3496},{"i":3501,"t":"Consider the following when deploying and developing with the playground: The playground is created specifically for developers and operators to become familiar with the deployment of Besu in a Kubernetes environment in preparation for going into a cloud or on-premise environment. Thus, it should not be deployed into a production environment. The playground is not a complete reflection of the helm charts as it does not use Helm, but rather static or non-templated code that is deployed through kubectl apply -f. This means that without Helm there's a significant amount of repeated code. This is fine for development but not ideal for a production environment. The playground uses static/hard-coded keys. Automatic key generation is only supported in helm charts. As the playground is for local development, no cloud integration or lifecycle support is offered.","s":"Important notes","u":"/private-networks/tutorials/kubernetes/playground","h":"#important-notes","p":3496},{"i":3503,"t":"You can use the Quorum Explorer on a Kubernetes cluster.","s":"Use the Quorum Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"","p":3502},{"i":3505,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Kubectl Helm3 Existing network","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#prerequisites","p":3502},{"i":3507,"t":"Quorum-Explorer as a lightweight blockchain explorer. The Quorum Explorer is not recommended for use in production and is intended for demonstration or development purposes only. The explorer can provide an overview over the whole network, such as block information, voting or removing validators from the network, and demonstrates using the SimpleStorage smart contract with privacy enabled, and sending transactions between wallets in one interface. To use the explorer, update the Quorum-Explorer values file with your node details and endpoints, and then deploy.","s":"Deploy the Quorum Explorer helm chart","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#deploy-the-quorum-explorer-helm-chart","p":3502},{"i":3509,"t":"The Nodes page provides an overview of the nodes on the network. Select the node you would like to interact with from the drop-down on the top right, and you'll get details of the node, block height, peers, queued transactions etc.","s":"Nodes","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#nodes","p":3502},{"i":3511,"t":"The Validators page simulates a production environment or consortium where each node individually runs API calls to vote to add a validator or remove an existing validator. When using the buttons to remove, discard pending validators, or proposing a validator, the app sends an API request to the selected node in the drop-down only. To add or remove a validator you need to select a majority of the existing validator pool individually, and perform the vote API call by clicking the button. Each node can call a discard on the voting process during or after the validator has been added. The vote calls made from non-validator nodes have no effect on overall consensus.","s":"Validators","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#validators","p":3502},{"i":3513,"t":"The Explorer page gives you the latest blocks from the chain and the latest transactions as they occur on the network. In addition, you can search by block number or transaction hash using the respective search bar.","s":"Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#explorer","p":3502},{"i":3515,"t":"Use the Contracts page to compile and deploy a smart contract. Currently, the only contract available for deployment through the app is the SimpleStorage contract. However, in time, we plan to add more contracts to that view. In this example, we deploy from member-1 and select member-1 and member-3 in the Private For multi-select. Then click on Compile and Deploy Once deployed, you can interact with the contract. As this is a new transaction, select member-1 and member-3 in Interact multi-select, and then click on the appropriate method call to get or set the value at the deployed contract address. To test the private transaction functionality, select member-2 from the drop-down on the top right, you'll notice that you are unable to interact with the contract because member-2 was not part of the transaction. Only members-1 and member-3 responds correctly.","s":"Contracts","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#contracts","p":3502},{"i":3517,"t":"The Wallet page gives you the functionality to send simple ETH transactions between accounts by providing the account's private key, the recipient's address, and transfer amount in Wei.","s":"Wallet","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#wallet","p":3502},{"i":3519,"t":"You can deploy Besu for production on a Kubernetes cluster.","s":"Deploy for production","u":"/private-networks/tutorials/kubernetes/production","h":"","p":3518},{"i":3521,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Kubectl Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/production","h":"#prerequisites","p":3518},{"i":3523,"t":"To get things production-ready, we'll use the same charts, and set a few of the values in the cluster map as in the Deploy section. warning The following tutorial ONLY supports AWS and Azure currently. Other cloud providers will be added in time. warning We recommend using AWS RDS or Azure PostgreSQL in High Availability mode for any Tessera nodes that you use. The templates don't include that functionality. They can be provisioned with CloudFormation or Azure Resource Manager, respectively. Once created, please specify the connection details to the values.yml.","s":"Overview","u":"/private-networks/tutorials/kubernetes/production","h":"#overview","p":3518},{"i":3526,"t":"Once you have a cluster running, verify kubectl is connected to cluster with: kubectl version Client Version: version.Info{Major:\"1\", Minor:\"23\", GitVersion:\"v1.23.1\", GitCommit:\"86ec240af8cbd1b60bcc4c03c20da9b98005b92e\", GitTreeState:\"clean\", BuildDate:\"2021-12-16T11:41:01Z\", GoVersion:\"go1.17.5\", Compiler:\"gc\", Platform:\"linux/amd64\"} Server Version: version.Info{Major:\"1\", Minor:\"22\", GitVersion:\"v1.22.3\", GitCommit:\"c92036820499fedefec0f847e2054d824aea6cd1\", GitTreeState:\"clean\", BuildDate:\"2021-10-27T18:35:25Z\", GoVersion:\"go1.16.9\", Compiler:\"gc\", Platform:\"linux/amd64\"}","s":"Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/production","h":"#check-that-you-can-connect-to-the-cluster-with-kubectl","p":3518},{"i":3528,"t":"For the rest of this tutorial we use Helm charts. After you have cloned the Quorum-Kubernetes repository, change the directory to helm for the rest of this tutorial. cd helm Each helm chart has the following keys that must be set. Specify either aws or azure for the cluster.provider. Additionally, set cloudNativeServices: true and reclaimPolicy: Retain so that it looks like the following for AWS: cluster: provider: aws # choose from: aws | azure cloudNativeServices: true # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) reclaimPolicy: Retain # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted Follow the steps outlined in the deploy charts tutorial to deploy the network.","s":"Deploy the network","u":"/private-networks/tutorials/kubernetes/production","h":"#deploy-the-network","p":3518},{"i":3530,"t":"The most important thing is to plan your network out on paper first and then test it in a Dev cluster to make sure connectivity works with your applications and you get the required throughput in transactions per second (TPS). We also recommend you test the entire process, from provisioning infrastructure to updating nodes on a Dev cluster, prior to launching your production network. By default, the cloud Kubernetes clusters take care of availability and do multi-zones within a region. The scheduler also ensures that deployments are spread out across zones. Where possible, we recommend you use multiple bootnodes and static nodes to speed up peering. You can connect to APIs and services outside the cluster normally, but connecting into your network (such as adding an on-premise node to the network) might require more configuration. Please check the limitations and use CNI where possible. To connect an external node to your cluster, the easiest way is to use a VPN as seen in the following multi-cluster setup. Finally, we recommend setting up monitoring and alerting from the beginning, so you can get early warnings of issues rather than after failure. We have a monitoring chart which uses Grafana and you can use it with Alertmanager to create alerts or alternatively alert via Cloudwatch or Azure Monitoring.","s":"Best practices","u":"/private-networks/tutorials/kubernetes/production","h":"#best-practices","p":3518},{"i":3532,"t":"When CNI is used, multi-cluster support is simple, but you have to cater for cross-cluster DNS names. Ideally, you want to create two separate VPCs (or VNets) and make sure they have different base CIDR blocks so that IP addresses don't conflict. Once done, peer the VPCs together and update the subnet route table, so they are effectively a giant single network. When you spin up clusters, use CNI and CIDR blocks to match the subnet's CIDR settings. Then deploy the genesis chart on one cluster and copy across the genesis file and static nodes config maps. Depending on your DNS settings, they might be fine as is, or they might need to be actual IP addresses. That is, you can provision cluster B only after cluster A has Besu nodes up and running. Deploy the network on cluster A, and then on cluster B. Besu nodes on cluster A should work as expected, and Besu nodes on cluster B should use the list of peers provided to communicate with the nodes on cluster A. Keeping the list of peers on the clusters live and up to date can be challenging, so we recommend using the cloud service provider's DNS service such as Route 53 or Azure DNS and adapting the charts to create entries for each node when it comes up.","s":"Multi-cluster support","u":"/private-networks/tutorials/kubernetes/production","h":"#multi-cluster-support","p":3518},{"i":3534,"t":"Use --nat-method=AUTO or --nat-method=KUBERNETES CLI options to let the Besu node automatically configure its IP address and ports. Use mode --nat-method=NONE to be able to set your Besu ports and IP address manually. Default mode is AUTO but Besu will fallback to NONE mode if automatic configuration fails. info The following log shows fallback to NONE mode after an automatic detection failure. INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Configure Kubernetes mode in NAT Manager","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"","p":3533},{"i":3536,"t":"Follow 3 steps to configure Besu for automatic IP address and ports detection on Kubernetes: Create a load balancer Check if the load balancer is properly deployed Deploy Besu","s":"Automatic configuration","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-configuration","p":3533},{"i":3538,"t":"Deploy a LoadBalancer service for Besu to recover IP address and ports. Here is an example that you can customize with your own ports and routing rules. --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" name: besu spec: ports: - name: \"json-rpc\" port: 8545 targetPort: 8545 - name: \"rlpx\" port: 30303 targetPort: 30303 selector: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" type: LoadBalancer This service example lists the rules for the different ports used by Besu (json-rpc and rlpx). The default value is used for discovery.","s":"1. Create a load balancer","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#1-create-a-load-balancer","p":3533},{"i":3540,"t":"Verify the load balancer readiness before launching Besu. Run kubectl describe services besu to check the service status. The command should display the following information: Name: besu Namespace: default Labels: app.kubernetes.io/name=besu app.kubernetes.io/release=1.0.0 Annotations: kubectl.kubernetes.io/last-applied-configuration: {\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/name\":\"besu\",\"app.kubernetes.io/release\":\"1.... Selector: app.kubernetes.io/name=besu,app.kubernetes.io/release=1.0.0 Type: LoadBalancer IP: -------- LoadBalancer Ingress: ****** The load balancer must have an IP address displayed in place of ****** on the LoadBalancer Ingress line to be ready. Run the kubectl describe services besu command again until the load balancer IP address appears in the output.","s":"2. Check if the load balancer is properly deployed","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#2-check-if-the-load-balancer-is-properly-deployed","p":3533},{"i":3542,"t":"When steps 1 and 2 are completed, deploy Besu using the following YAML example: --- apiVersion: v1 kind: ConfigMap metadata: name: besu-config labels: app.kubernetes.io/name: besu app.kubernetes.io/release: 1.0.0 data: BESU_LOGGING: \"INFO\" BESU_NETWORK: \"dev\" BESU_P2P_ENABLED: \"true\" BESU_RPC_HTTP_ENABLED: \"true\" BESU_RPC_HTTP_APIS: \"eth,net,web3,debug,admin\" KUBE_CONFIG_PATH: \"/opt/besu/shared/kube-config\" --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: besu labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" spec: replicas: 1 strategy: {} template: metadata: creationTimestamp: null labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" spec: containers: - name: besu image: \"hyperledger/besu:latest\" imagePullPolicy: Always ports: - containerPort: 8545 - containerPort: 30303 envFrom: - configMapRef: name: besu-config restartPolicy: Always status: {}","s":"3. Deploy Besu","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#3-deploy-besu","p":3533},{"i":3544,"t":"danger Automatic detection error messages do not prevent you to use Besu. Try the fix indicated for each error or use --nat-method=KUBERNETES CLI option and set IP address and port manually. Possible errors messages for Kubernetes automatic detection failure: Service not found Forbidden Ingress not found","s":"Automatic detection errors","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-detection-errors","p":3533},{"i":3546,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used Cause: load balancer did start correctly or has the incorrect name. Fix: check and modify load balancer YAML configuration and restart service. Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Service not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#service-not-found-error-message","p":3533},{"i":3548,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used Cause: Besu don't have permission to list the services via the Kubernetes API to retrieve IP address and ports from the load balancer. Fix: Give it the required permissions using Role-based access control. If you can't manage permissions, define the IP address and ports manually with NONE mode Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used INFO | NetworkRunner | Starting Network. tip For development environment, the permission issue can be fixed by running kubectl create clusterrolebinding myapp-view-binding --clusterrole=admin --serviceaccount=default:default This command should only be used on development environment and not in production environment. In production environment, require a finer management of permissions using Kubernetes Role-based access control.","s":"Forbidden error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#forbidden-error-message","p":3533},{"i":3550,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used Cause: Load balancer did not finish to recover an IP address. Fix: Check that the load balancer is properly deployed before launching Besu. Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Ingress not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#ingress-not-found-error-message","p":3533},{"i":3552,"t":"You can configure Besu and associated Tessera node in a privacy-enabled network to host multiple tenants. In this tutorial we'll add tenants to the Node-1 Besu and Tessera node in a privacy-enabled network. IBFT-Network/ ├── Node-1 │ ├── data │ ├── Tessera ├── Node-2 │ ├── data │ ├── Tessera ├── Node-3 │ ├── data │ ├── Tessera └── Node-4 ├── data ├── Tessera info This tutorial uses JWT public key authentication to create the tenant's JWT, but you can also use username and password authentication.","s":"Configure a multi-tenant node","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"","p":3551},{"i":3554,"t":"A privacy-enabled network.","s":"Prerequisites","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#prerequisites","p":3551},{"i":3557,"t":"In the Node-1 directory, generate the private and public key pair. The key pair, which must be in .pem format, belongs to the operator who uses the key pair to authenticate the tenant JWTs. info This step is not required when using username and password authentication to create the required JWTs.","s":"1. Generate a private and public key pair","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#1-generate-a-private-and-public-key-pair","p":3551},{"i":3559,"t":"In the Node-1/Tessera directory, generate a public/private key pair for each tenant. note The instructions creates an unlocked private key, meaning you do not need a password to decrypt the private key file. Name the key pair nodeKey2 and nodeKey3.","s":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#2-generate-tessera-keys","p":3551},{"i":3561,"t":"In the Node-1/Tessera directory, update the tessera.conf file by adding the new key pairs: { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9101\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9102\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9103\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" }, { \"privateKeyPath\": \"nodeKey2.key\", \"publicKeyPath\": \"nodeKey2.pub\" }, { \"privateKeyPath\": \"nodeKey3.key\", \"publicKeyPath\": \"nodeKey3.pub\" } ] }, \"alwaysSendTo\": [] } info Besu requires orion mode. Add the line \"mode\": \"orion\", to the Tessera configuration file.","s":"3. Update the Tessera configuration file","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#3-update-the-tessera-configuration-file","p":3551},{"i":3563,"t":"Start the Tessera nodes and specify the configuration file.","s":"4. Start Tessera","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#4-start-tessera","p":3551},{"i":3565,"t":"In the Node-1 directory, start Besu Node-1: besu --data-path=data --genesis-file=../genesis.json --rpc-http-authentication-enabled --rpc-http-authentication-jwt-public-key-file=publicKey.pem --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-multi-tenancy-enabled --min-gas-price=0 The command line specifies privacy options: --rpc-http-authentication-enabled enables authentication for JSON-RPC APIs. --rpc-http-authentication-jwt-public-key-file specifies the Operator's public key file. Used to authenticate the tenant JWTs. --privacy-enabled enables privacy. --privacy-url specifies the Quorum to Tessera (Q2T) server address of the Tessera node (Q2T in tessera.conf). --privacy-multi-tenancy-enabled enables multi-tenancy. note --rpc-http-authentication-jwt-public-key-file is only required when using JWT public key authentication. If using username and password authentication, use --rpc-http-authentication-credentials-file instead. Start the remaining Besu nodes.","s":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#5-start-besu-node-1","p":3551},{"i":3567,"t":"Generate the JWT for each tenant and specify the tenant's Tessera public key in the privacyPublicKey field. Ensure you apply the appropriate JSON-RPC API permissions to the token. For example, ensure you enable the PRIV and EEA APIs for privacy. note This step is not required when using username and password authentication to create the required JWTs. Use the authentication token to make requests.","s":"6. Generate the tenant JWTs","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#6-generate-the-tenant-jwts","p":3551},{"i":3569,"t":"The following steps set up a permissioned network with local node and account permissions. The network uses the IBFT 2.0 proof of authority consensus protocol. danger A permissioned Ethereum network as described here is not protected against all attack vectors. We recommend applying defense in depth to protect your infrastructure.","s":"Create a permissioned network","u":"/private-networks/tutorials/permissioning","h":"","p":3568},{"i":3571,"t":"Besu curl (or similar Web service client)","s":"Prerequisites","u":"/private-networks/tutorials/permissioning","h":"#prerequisites","p":3568},{"i":3574,"t":"Each node requires a data directory for the blockchain data. Create directories for your permissioned network and each of the three nodes, and a data directory for each node: Permissioned-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create folders","u":"/private-networks/tutorials/permissioning","h":"#1-create-folders","p":3568},{"i":3576,"t":"The configuration file defines the IBFT 2.0 genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called ibftConfigFile.json and save it in the Permissioned-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } Security warning Don't use the accounts in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create the configuration file","u":"/private-networks/tutorials/permissioning","h":"#2-create-the-configuration-file","p":3568},{"i":3578,"t":"In the Permissioned-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/permissioning","h":"#3-generate-node-keys-and-a-genesis-file","p":3568},{"i":3580,"t":"Copy the genesis.json file to the Permisssioned-Network directory.","s":"4. Copy the genesis file to the Permissioned-Network directory","u":"/private-networks/tutorials/permissioning","h":"#4-copy-the-genesis-file-to-the-permissioned-network-directory","p":3568},{"i":3582,"t":"For each node, copy the key files to the data directory for that node Permissioned-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/permissioning","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3568},{"i":3584,"t":"The permissions configuration file defines the nodes and accounts allowlists. Copy the following permissions configuration to a file called permissions_config.toml and save a copy in the Node-1/data, Node-2/data, Node-3/data, and Node-4/data directories: permissions_config.toml accounts-allowlist=[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"0x627306090abaB3A6e1400e9345bC60c78a8BEf57\"] nodes-allowlist=[] The permissions configuration file includes the first two accounts from the genesis file. Use the perm_addNodesToAllowlist JSON-RPC API method to add permissioned nodes after starting the nodes.","s":"6. Create the permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#6-create-the-permissions-configuration-file","p":3568},{"i":3586,"t":"Use the following command: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" The command line allows you to enable: Nodes and accounts permissions using --permissions-nodes-config-file-enabled and --permissions-accounts-config-file-enabled. The JSON-RPC API using --rpc-http-enabled. The ADMIN, ETH, NET, PERM, and IBFT APIs using --rpc-http-api. All-host access to the HTTP JSON-RPC API using --host-allowlist. All-domain access to the node through the HTTP JSON-RPC API using --rpc-http-cors-origins. When the node starts, the enode URL displays. You need the enode URL to specify Node-1 as a peer and update the permissions configuration file in the following steps.","s":"7. Start Node-1","u":"/private-networks/tutorials/permissioning","h":"#7-start-node-1","p":3568},{"i":3588,"t":"Start another terminal, change to the Node-2 directory, and start Node-2: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30304 --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30304 --rpc-http-port=8546 The command line specifies: A different port to Node-1 for P2P discovery using --p2p-port. A different port to Node-1 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-2 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"8. Start Node-2","u":"/private-networks/tutorials/permissioning","h":"#8-start-node-2","p":3568},{"i":3590,"t":"Start another terminal, change to the Node-3 directory, and start Node-3: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30305 --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30305 --rpc-http-port=8547 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery using --p2p-port. A different port to Node-1 and Node-2 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-3 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"9. Start Node-3","u":"/private-networks/tutorials/permissioning","h":"#9-start-node-3","p":3568},{"i":3592,"t":"Start another terminal, change to the Node-4 directory, and start Node-4: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30306 --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30306 --rpc-http-port=8548 The command line specifies: A different port to Node-1, Node-2, and Node-3 for P2P discovery using --p2p-port. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-4 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"10. Start Node-4","u":"/private-networks/tutorials/permissioning","h":"#10-start-node-4","p":3568},{"i":3594,"t":"Start another terminal and use the perm_addNodesToAllowlist JSON-RPC API method to add the nodes to the permissions configuration file for each node. Replace , , , and with the enode URL displayed when starting each node. Node-1 Node-2 Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8545 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8546 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8548 tip The curl call is the same for each node except for the JSON-RPC endpoint.","s":"11. Add enode URLs for nodes to permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#11-add-enode-urls-for-nodes-to-permissions-configuration-file","p":3568},{"i":3596,"t":"Use the admin_addPeer JSON-RPC API method to add Node-1 as a peer for Node-2, Node-3, and Node-4. Replace with the enode URL displayed when starting Node-1. Node-2 Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8546 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548 tip The curl call is the same for each node except for the JSON-RPC endpoint. Replace with the enode URL displayed when starting Node-2. Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548 Replace with the enode URL displayed when starting Node-3. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548","s":"12. Add nodes as peers","u":"/private-networks/tutorials/permissioning","h":"#12-add-nodes-as-peers","p":3568},{"i":3598,"t":"Check peer count​ Use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 (the node running the JSON-RPC service) has three peers (Node-2, Node-3 and Node-4): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3\" } Send a transaction from an account in the allowlist​ Import the first account from the genesis file into MetaMask and send transactions, as described in the Quickstart tutorial: Account 1 Address: 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 Private key : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 0xad78ebc5ac6200000 (200000000000000000000 in decimal) info Besu doesn't support private key management. Try sending a transaction from an account not in the accounts allowlist​ Import the third account from the genesis file into MetaMask and try to send a transaction, as described in the Quickstart tutorial: Account 3 Address: 0xf17f52151EbEF6C7334FAD080c5704D77216b732 Private key: 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance: 0x90000000000000000000000 (2785365088392105618523029504 in decimal) Start a node not on the nodes allowlist​ In your Permissioned-Network directory, create a Node-5 directory and data directory inside it. Change to the Node-5 directory and start Node-5 specifying the Node-1 enode URL as the bootnode: MacOS Windows besu --data-path=data --bootnodes=\"\" --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30307 --rpc-http-port=8549 besu --data-path=data --bootnodes=\"\" --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30307 --rpc-http-port=8549 Start another terminal and use curl to call the JSON-RPC API net_peerCount method: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8549 The result confirms Node-5 has no peers even though it specifies Node-1 as a bootnode: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x0\" }","s":"13. Confirm permissioned network is working","u":"/private-networks/tutorials/permissioning","h":"#13-confirm-permissioned-network-is-working","p":3568},{"i":3600,"t":"When finished using the permissioned network, stop all nodes using Ctrl+C in each terminal window. tip To restart the permissioned network in the future, start from step 7.","s":"Stop nodes","u":"/private-networks/tutorials/permissioning","h":"#stop-nodes","p":3568},{"i":3602,"t":"You can deploy Besu Helm charts for a Kubernetes cluster.","s":"Deploy charts","u":"/private-networks/tutorials/kubernetes/charts","h":"","p":3601},{"i":3604,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Install Kubectl Install Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/charts","h":"#prerequisites","p":3601},{"i":3606,"t":"Helm is a method of packaging a collection of objects into a chart which can then be deployed to the cluster. After you have cloned the Quorum-Kubernetes repository, change the directory to helm for the rest of this tutorial. cd helm Each helm chart has the following key-map values which you will need to set depending on your needs. The cluster.provider is used as a key for the various cloud features enabled. Please specify only one cloud provider, not both. At present, the charts have full support for cloud native services in both AWS and Azure. Please note that if you use GCP, IBM etc please set cluster.provider: local and set cluster.cloudNativeServices: false. Please update the aws or azure map as shown below if you deploy to either cloud provider. cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted quorumFlags: privacy: false removeKeysOnDelete: false aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId Setting the cluster.cloudNativeServices: true: Stores keys in Azure Key Vault or AWS Secrets Manager. Uses Azure Managed Identities or AWS Identity and Access Management for pod identity access. note You can customize any of the charts in this repository to suit your requirements, and make pull requests to extend functionality.","s":"Provision with Helm charts","u":"/private-networks/tutorials/kubernetes/charts","h":"#provision-with-helm-charts","p":3601},{"i":3608,"t":"Verify kubectl is connected to cluster using: (use the latest version) kubectl version The result looks similar to: Client Version: version.Info{Major:\"1\", Minor:\"23\", GitVersion:\"v1.23.1\", GitCommit:\"86ec240af8cbd1b60bcc4c03c20da9b98005b92e\", GitTreeState:\"clean\", BuildDate:\"2021-12-16T11:41:01Z\", GoVersion:\"go1.17.5\", Compiler:\"gc\", Platform:\"linux/amd64\"} Server Version: version.Info{Major:\"1\", Minor:\"22\", GitVersion:\"v1.22.3\", GitCommit:\"c92036820499fedefec0f847e2054d824aea6cd1\", GitTreeState:\"clean\", BuildDate:\"2021-10-27T18:35:25Z\", GoVersion:\"go1.16.9\", Compiler:\"gc\", Platform:\"linux/amd64\"}","s":"1. Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/charts","h":"#1-check-that-you-can-connect-to-the-cluster-with-kubectl","p":3601},{"i":3610,"t":"This tutorial isolates groups of resources (for example, StatefulSets and Services) within a single cluster. note The rest of this tutorial uses besu as the namespace, but you're free to pick any name when deploying, as long as it's consistent across the infrastructure scripts and charts. Run the following in a terminal window: kubectl create namespace besu","s":"2. Create the namespace","u":"/private-networks/tutorials/kubernetes/charts","h":"#2-create-the-namespace","p":3601},{"i":3612,"t":"This chart deploys Prometheus and Grafana to monitor the metrics of the cluster, nodes and state of the network. Update the admin username and password in the monitoring values file. Configure alerts to the receiver of your choice (for example, email or Slack), then deploy the chart using: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --values ./values/monitoring.yml --wait kubectl --namespace besu apply -f ./values/monitoring/ Metrics are collected via a ServiceMonitor that scrapes each Besu pod, using given annotations which specify the port and path to use. For example: template: metadata: annotations: prometheus.io/scrape: \"true\" prometheus.io/port: 9545 prometheus.io/path: \"/metrics\" warning For production use cases, configure Grafana with one of the supported native auth mechanisms. Optionally you can also deploy the Elastic Stack to view logs (and metrics). helm repo add elastic https://helm.elastic.co helm repo update # if on cloud helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml # if local - set the replicas to 1 helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1 helm install kibana --version 7.17.1 elastic/kibana --namespace quorum --values ./values/kibana.yml helm install filebeat --version 7.17.1 elastic/filebeat --namespace quorum --values ./values/filebeat.yml If you install filebeat, please create a filebeat-* index pattern in kibana. All the logs from the nodes are sent to the filebeat index. If you use The Elastic stack for logs and metrics, please deploy metricbeat in a similar manner to filebeat and create an index pattern in Kibana. To connect to Kibana or Grafana, we also need to deploy an ingress so you can access your monitoring endpoints publicly. We use Nginx as our ingress here, and you are free to configure any ingress per your requirements. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install quorum-monitoring-ingress ingress-nginx/ingress-nginx \\ --namespace quorum \\ --set controller.ingressClassResource.name=\"monitoring-nginx\" \\ --set controller.ingressClassResource.controllerValue=\"k8s.io/monitoring-ingress-nginx\" \\ --set controller.replicaCount=1 \\ --set controller.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set defaultBackend.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.admissionWebhooks.patch.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.service.externalTrafficPolicy=Local kubectl apply -f ../ingress/ingress-rules-monitoring.yml Once complete, view the IP address listed under the Ingress section if you're using the Kubernetes Dashboard or on the command line kubectl -n quorum get services quorum-monitoring-ingress-ingress-nginx-controller. note We refer to the ingress here as external-nginx because it deals with monitoring endpoints specifically. We also deploy a second ingress called network-ingress which is for the blockchain nodes only in step 8 You can view the Besu dashboard by going to: http:///d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s You can view the Kibana dashboard (if deployed) by going to: http:///kibana","s":"3. Deploy the monitoring chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#3-deploy-the-monitoring-chart","p":3601},{"i":3614,"t":"The genesis chart creates the genesis file and keys for the validators. warning It's important to keep the release names of the initial validator pool as per this tutorial, that is validator-n, where n is the node number. Any validators created after the initial pool can be named to anything you like. The override values.yml looks like below: --- quorumFlags: removeGenesisOnDelete: true cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId # the raw Genesis config # rawGenesisConfig.blockchain.nodes set the number of validators/signers rawGenesisConfig: genesis: config: chainId: 1337 algorithm: consensus: qbft # choose from: ibft2 | qbft | clique blockperiodseconds: 10 epochlength: 30000 requesttimeoutseconds: 20 gasLimit: '0x47b760' difficulty: '0x1' coinbase: '0x0000000000000000000000000000000000000000' blockchain: nodes: generate: true count: 4 accountPassword: 'password' Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeGenesisOnDelete: true tells the chart to delete the genesis file when the chart is deleted. If you may wish to retain the genesis on deletion, please set that value to false. The last config item is rawGenesisConfig which has details of the chain you are creating, please edit any of the parameters in there to match your requirements. To set the number of initial validators set the rawGenesisConfig.blockchain.nodes to the number that you'd like. We recommend using the Byzantine formula of N=3F+1 when setting the number of validators. One more thing to note is that when cluster.cloudNativeServices: true is set, the genesis job will not add the Quickstart test accounts into the genesis file. When you are ready deploy the chart with : cd helm helm install genesis ./charts/besu-genesis --namespace besu --create-namespace --values ./values/genesis-besu.yml Once completed, view the genesis and enodes (the list of static nodes) configuration maps that every Besu node uses, and the validator and bootnode node keys as secrets.","s":"4. Deploy the genesis chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#4-deploy-the-genesis-chart","p":3601},{"i":3616,"t":"This is an optional but recommended step. In a production setup we recommend the use of two ore more bootnodes for best practices. Each Besu node has a map that tells the StatefulSet what to deploy and how to clean up. The default values.yml for the StatefulSet define the following flags which are present in all the override values files. --- quorumFlags: privacy: false removeKeysOnDelete: true isBootnode: true # set this to true if this node is a bootnode usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId node: besu: metrics: serviceMonitorEnabled: true resources: cpuLimit: 1 cpuRequest: 0.1 memLimit: \"2G\" memRequest: \"1G\" Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeKeysOnDelete: true tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to false. For the bootnodes only, set the quorumFlags.isBootnode: true. When using bootnodes you have to also set quorumFlags.usesBootnodes: true to indicate that all nodes on the network will use these bootnodes. note If you use bootnodes, you must set quorumFlags.usesBootnodes: true in the override values.yaml for every other node type, that is validators.yaml, txnode.yaml and reader.yaml helm install bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml helm install bootnode-2 ./charts/besu-node --namespace besu --values ./values/bootnode.yml Once complete, you see two StatefulSets, and the two bootnodes discover themselves and peer. Because there are no validators present yet, there are no blocks created, as seen in the following logs.","s":"5. Deploy the bootnodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#5-deploy-the-bootnodes","p":3601},{"i":3618,"t":"The validators peer with the bootnodes and themselves, and when a majority of the validators have peered, blocks are proposed and created on the chain. These are the next set of nodes that we will deploy. The charts use four validators (default) to replicate best practices for a network. The override values.yml for the StatefulSet looks like below: --- quorumFlags: privacy: false removeKeysOnDelete: false isBootnode: false # set this to true if this node is a bootnode usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeKeysOnDelete: true tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to false. warning Please note that if you delete a majority of the validators, the network will halt. Additionally, if the validator keys are deleted you may not be able to recover as you need a majority of the validators up to vote to add new validators into the pool When using bootnodes (if deployed in the previous step) you have to also set quorumFlags.usesBootnodes: true to indicate that all nodes on the network will use these bootnodes. For the initial validator pool we set all the node flags to false and then deploy. helm install validator-1 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-2 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-3 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-4 ./charts/besu-node --namespace besu --values ./values/validator.yml warning It's important to keep the release names of the validators the same as it is tied to the keys that the genesis chart creates. So we use validator-1, validator-2, etc. in the following command. Once completed, you may need to give the validators a few minutes to peer and for round changes, depending on when the first validator was spun up, before the logs display blocks being created.","s":"6. Deploy the validators","u":"/private-networks/tutorials/kubernetes/charts","h":"#6-deploy-the-validators","p":3601},{"i":3620,"t":"To add (or remove) more validators to the initial validator pool, you need to deploy a node such as an RPC node (step 8) and then vote that node in. The vote API call must be made on a majority of the existing pool and the new node will then become a validator. Please refer to the Ingress Section for details on making the API calls from your local machine or equivalent.","s":"7. Add/Remove additional validators to the validator pool","u":"/private-networks/tutorials/kubernetes/charts","h":"#7-addremove-additional-validators-to-the-validator-pool","p":3601},{"i":3622,"t":"An RPC node is simply a node that can be used to make public transactions or perform read heavy operations such as when connected to a chain explorer like BlockScout. The RPC override values.yml for the StatefulSet looks identical to that of the validators above, and will create it's own node keys before the node starts. To deploy an RPC node: helm install rpc-1 ./charts/besu-node --namespace besu --values ./values/reader.yml A Transaction or Member node in turn is one which has an accompanying Private Transaction Manager, such as Tessera; which allow you to make private transactions between nodes. The Transaction override values.yml for the StatefulSet looks identical to that of the validators above and only has quorumFlags.privacy: true to indicate that it is deploying a pair of GoQuorum and Tessera nodes. To deploy a Transaction or Member node: helm install member-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml Logs for member-1 resemble the following for Tessera: Logs for Besu resemble the following: note In these examples we use member-1 and rpc-1 as release names for the deployments. You can pick any release name that you'd like to use in place of those as per your requirements.","s":"8. Deploy RPC or Transaction nodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#8-deploy-rpc-or-transaction-nodes","p":3601},{"i":3624,"t":"In order to view the Grafana dashboards or connect to the nodes to make transactions from your local machine you can deploy an ingress controller with rules. We use the ingress-nginx ingress controller which can be deployed as follows: helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install quorum-network-ingress ingress-nginx/ingress-nginx \\ --namespace quorum \\ --set controller.ingressClassResource.name=\"network-nginx\" \\ --set controller.ingressClassResource.controllerValue=\"k8s.io/network-ingress-nginx\" \\ --set controller.replicaCount=1 \\ --set controller.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set defaultBackend.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.admissionWebhooks.patch.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.service.externalTrafficPolicy=Local Use pre-defined rules to test functionality, and alter to suit your requirements (for example, restrict access for API calls to trusted CIDR blocks). Edit the rules file so that the service names match your release name. In the example, we deployed a transaction node with the release name member-1 so the corresponding service is called besu-node-member-1. Once you have settings that match your deployments, deploy the rules as follows: kubectl apply -f ../ingress/ingress-rules-besu.yml Once complete, view the IP address listed under the Ingress section if you're using the Kubernetes Dashboard or on the command line kubectl -n quorum get services quorum-network-ingress-ingress-nginx-controller. The following is an example RPC call, which confirms that the node running the JSON-RPC service is syncing: curl HTTP request JSON result curl -v -X POST -H \"Content-Type: application/json\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' http:///rpc { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4e9\" }","s":"9. Connect to the node from your local machine via an ingress","u":"/private-networks/tutorials/kubernetes/charts","h":"#9-connect-to-the-node-from-your-local-machine-via-an-ingress","p":3601},{"i":3626,"t":"You can deploy BlockScout to aid with monitoring the blockchain. To do this, update the BlockScout values file and set the database and secret_key_base values. important Changes to the database requires changes to both the database and the blockscout dictionaries. Once completed, deploy the chart using: helm dependency update ./charts/blockscout helm install blockscout ./charts/blockscout --namespace quorum --values ./values/blockscout-goquorum.yaml You can optionally deploy the Quorum-Explorer as a lightweight blockchain explorer. The Quorum Explorer is not recommended for use in production and is intended for demonstration or Development purposes only. The Explorer can give an overview over the whole network, such as querying each node on the network for node or block information, voting (add/remove) validators from the network, demonstrating a SimpleStorage smart contract with privacy enabled, and sending transactions between wallets as you would do in MetaMask. Please see the Explorer page for details on how to use the application. warning The accounts listed in the file below are for test purposes only and should not be used on a production network. To deploy the application, update the Explorer values file with details of your nodes and endpoints and then deploy. helm install quorum-explorer ./charts/explorer --namespace besu --values ./values/explorer-besu.yaml You will also need deploy the ingress (if not already done in Monitoring to access the endpoint on http:///explorer","s":"10. Blockchain explorer","u":"/private-networks/tutorials/kubernetes/charts","h":"#10-blockchain-explorer","p":3601},{"i":3628,"t":"To use the examples provided in the web3js-quorum library with your privacy network: note This example uses 3 of the 4 nodes configured in the privacy tutorial. Clone the ConsenSys/web3js-quorum repository: git clone https://github.com/ConsenSys/web3js-quorum In the web3js-quorum directory: npm install In the example directory, update the keys.js file to include: chain ID Tessera node public keys Besu node RPC URLs Besu node private keys. In the example/multiNodeExample directory, deploy the contract: node deployContract.js A private transaction receipt returns. Transaction Hash 0x23b57ddc3ecf9c9a548e4401a411420ffc0002fd259a86d5656add7c6108beeb Waiting for transaction to be mined ... Private Transaction Receipt { contractAddress: '0xfee84481da8f4b9a998dfacb38091b3145bb01ab', from: '0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb', to: null, output: '0x6080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f245811461005b5780636057361d1461008257806367e404ce146100ae575b600080fd5b34801561006757600080fd5b506100706100ec565b60408051918252519081900360200190f35b34801561008e57600080fd5b506100ac600480360360208110156100a557600080fd5b50356100f2565b005b3480156100ba57600080fd5b506100c3610151565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60025490565b604080513381526020810183905281517fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f5929181900390910190a16002556001805473ffffffffffffffffffffffffffffffffffffffff191633179055565b60015473ffffffffffffffffffffffffffffffffffffffff169056fea165627a7a72305820c7f729cb24e05c221f5aa913700793994656f233fe2ce3b9fd9a505ea17e8d8a0029', logs: [] } note If you receive a Method not enabled error, ensure you enabled the appropriate APIs using the --rpc-http-api Copy the contract address from the private transaction receipt and set the CONTRACT_ADDRESS environment variable: export CONTRACT_ADDRESS= example export CONTRACT_ADDRESS=0xfee84481da8f4b9a998dfacb38091b3145bb01ab Store a value in the contract from Node 1: node storeValueFromNode1.js Node 1 stores the value of 1000 (3e8 in hex) and is visible to Node 1 and Node 2. Transaction Hash: 0xd9d71cc6f64675e1a48183ded8f08930af317eb883ebae4c4eec66ae68618d85 Waiting for transaction to be mined ... Event Emited: 0x0000000000000000000000009811ebc35d7b06b3fa8dc5809a1f9c52751e1deb00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8545: 0x00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8546: 0x00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8547: 0x Store a value in the contract from Node 2: node storeValueFromNode2.js Node 2 stores the value of 42 (2a in hex) and is visible to Node 1 and Node 2. Transaction Hash: 0xa025433aec47a71b0230f12f43708812fd38ff7b7c1dc89a715f71dcbd5fbdbf Waiting for transaction to be mined ... Event Emited: 0x000000000000000000000000372a70ace72b02cc7f1757183f98c620254f9c8d000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8545: 0x000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8546: 0x000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8547: 0x note As expected, log messages indicate that Node 3 Tessera cannot find payloads because Node 3 does not have access to the private transactions between Node 1 and Node 2.","s":"Use the multi-node example in the web3js-quorum client library","u":"/private-networks/tutorials/privacy/web3js-quorum","h":"","p":3627},{"i":3630,"t":"You can create a privacy-enabled network using the Quorum Developer Quickstart. It runs a private Besu network that uses Tessera as its private transaction manager. You can use the Block Explorer, make JSON-RPC requests, and create transactions using MetaMask. This tutorial describes how to make private transactions between nodes, and perform read and write operations on private contracts. important This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.","s":"Create a privacy-enabled network using the Quorum Developer Quickstart","u":"/private-networks/tutorials/privacy/quickstart","h":"","p":3629},{"i":3632,"t":"To run this tutorial, you must have the following installed: Docker and Docker-compose important If using MacOS or Windows, enable Docker to use up to 6GB of memory on the Advanced tab in Preferences. Nodejs Git command line Curl command line.","s":"Prerequisites","u":"/private-networks/tutorials/privacy/quickstart","h":"#prerequisites","p":3629},{"i":3635,"t":"To create the docker-compose file and artifacts, run: npx quorum-dev-quickstart Follow the prompts displayed to run Besu, private transactions, and logging with ELK. Enter n for Codefi Orchestrate.","s":"1. Create Docker-compose file","u":"/private-networks/tutorials/privacy/quickstart","h":"#1-create-docker-compose-file","p":3629},{"i":3637,"t":"caution If running in Windows, please run commands from the GitBash shell In the installation directory, start the network: ./run.sh The script pulls the Docker images starts the network. Pulling the images takes a few minutes the first time. The network details display. ************************************* Quorum Dev Quickstart ************************************* Setting up the index patterns in kibana ................. ---------------------------------- List endpoints and services ---------------------------------- JSON-RPC HTTP service endpoint : http://localhost:8545 JSON-RPC WebSocket service endpoint : ws://localhost:8546 Web block explorer address : http://localhost:25000/ Prometheus address : http://localhost:9090/graph Grafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All Collated logs using Kibana endpoint : http://localhost:5601/app/kibana#/discover For more information on the endpoints and services, refer to README.md in the installation directory. ****************************************************************","s":"2. Start the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#2-start-the-network","p":3629},{"i":3639,"t":"To deploy a private contract to another privacy group member, use the web3js-quorum library and the eea_sendRawTransaction API call. You must use this API call instead of eth_sendTransaction because Besu keeps account management separate for stronger security. This example uses the web3js library to make the API calls, the example creates three Besu nodes, with each node having a corresponding Tessera node for privacy. You can access the Besu member nodes for API calls on the following ports: Member1Besu RPC: http://localhost:20000 Member1Tessera: http://localhost:9081 Member2Besu RPC: http://localhost:20002 Member2Tessera: http://localhost:9082 Member3Besu RPC: http://localhost:20004 Member3Tessera: http://localhost:9083 Navigate to the smart_contracts directory and deploy the private transaction: cd smart_contracts npm install node scripts/private/private_tx.js The script deploys the contract and sends an arbitrary value (47) from Member1 to Member3. Once done, it queries all three members (Tessera) to check the value at an address. Only Member1 & Member3 has this information as they were involved in the transaction, Member2 responds with a 0x to indicate it is unaware of the transaction. node scripts/private/private_tx.js Creating contract... Getting contractAddress from txHash: 0xc1b57f6a7773fe887afb141a09a573d19cb0fdbb15e0f2b9ed0dfead6f5b5dbf Waiting for transaction to be mined ... Address of transaction: 0x8220ca987f7bb7f99815d0ef64e1d8a072a2c167 Use the smart contracts 'get' function to read the contract's constructor initialized value .. Waiting for transaction to be mined ... Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000002f Use the smart contracts 'set' function to update that value to 123 .. - from member1 to member3 Transaction hash: 0x387c6627fe87e235b0f2bbbe1b2003a11b54afc737dca8da4990d3de3197ac5f Waiting for transaction to be mined ... Verify the private transaction is private by reading the value from all three members .. Waiting for transaction to be mined ... Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b Waiting for transaction to be mined ... Member2 value from deployed contract is: 0x Waiting for transaction to be mined ... Member3 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b The general contract deployment flow is: Deploy a contract, which returns a transaction hash. Obtain the privacy transaction receipt from the transaction hash. Use the contract address in the privacy transaction receipt to interact with the contract from that point on.","s":"3. Deploy the private contract and interact with the nodes","u":"/private-networks/tutorials/privacy/quickstart","h":"#3-deploy-the-private-contract-and-interact-with-the-nodes","p":3629},{"i":3641,"t":"Do one of the following to stop the network: Stop the network: ./stop.sh Stop the network and remove the containers and volumes: ./remove.sh","s":"4. Stop the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#4--stop-the-network","p":3629},{"i":3643,"t":"View the web3js-quorum client library example and code examples. You can also test the ERC-20 token example by executing erc20.js, which deploys a HumanStandardToken contract and transfers one token to Node-2. You can verify this by observing the data field of the logs, which is 1.","s":"More examples","u":"/private-networks/tutorials/privacy/quickstart","h":"#more-examples","p":3629},{"i":3645,"t":"Besu serves as an execution client on public proof-of-stake Ethereum networks such as Ethereum Mainnet, Holesky, and Sepolia. You can also run Besu using proof of work on Ethereum Classic (ETC). Get started by installing Besu.","s":"Besu for public networks","u":"/public-networks","h":"","p":3644},{"i":3647,"t":"The following diagram outlines the high-level architecture of Besu for public networks. If you have any questions about Besu for public networks, ask on the besu channel on Discord.","s":"Architecture","u":"/public-networks","h":"#architecture","p":3644},{"i":3650,"t":"A private network provides a configurable network for testing. This private network uses the QBFT (proof of authority) consensus protocol. The QBFT network in this tutorial implements the block header validator selection method to manage validators. For a tutorial on how to implement the contract validator selection method, follow the steps in the example smart contract repository. important The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall. This tutorial configures a private network using QBFT for educational purposes only. QBFT requires 4 validators to be Byzantine fault tolerant.","s":"Create a private network using QBFT","u":"/private-networks/tutorials/qbft","h":"","p":3649},{"i":3652,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/qbft","h":"#prerequisites","p":3649},{"i":3654,"t":"Listed on the right-hand side of the page are the steps to create a private network using QBFT with four nodes. The four nodes are all validators.","s":"Steps","u":"/private-networks/tutorials/qbft","h":"#steps","p":3649},{"i":3656,"t":"Each node requires a data directory for the blockchain data. Create directories for your private network, each of the four nodes, and a data directory for each node: QBFT-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data ├── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/qbft","h":"#1-create-directories","p":3649},{"i":3658,"t":"The configuration file defines the QBFT genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the QBFT genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called qbftConfigFile.json and save it in the QBFT-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a configuration file","u":"/private-networks/tutorials/qbft","h":"#2-create-a-configuration-file","p":3649},{"i":3660,"t":"In the QBFT-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=qbftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/qbft","h":"#3-generate-node-keys-and-a-genesis-file","p":3649},{"i":3662,"t":"Copy the genesis.json file to the QBFT-Network directory.","s":"4. Copy the genesis file to the QBFT-Network directory","u":"/private-networks/tutorials/qbft","h":"#4-copy-the-genesis-file-to-the-qbft-network-directory","p":3649},{"i":3664,"t":"For each node, copy the key files to the data directory for that node QBFT-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/qbft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":3649},{"i":3666,"t":"In the Node-1 directory, start Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line: Specifies the data directory for Node-1 using the --data-path option. Enables the JSON-RPC API using the --rpc-http-enabled option. Enables the ETH, NET, and QBFT APIs using the --rpc-http-api option. Enables all-host access to the HTTP JSON-RPC API using the --host-allowlist option. Enables all-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/qbft","h":"#6-start-the-first-node-as-the-bootnode","p":3649},{"i":3668,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: The data directory for Node-2 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"7. Start Node-2","u":"/private-networks/tutorials/qbft","h":"#7-start-node-2","p":3649},{"i":3670,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: The data directory for Node-3 using the --data-path option. A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"8. Start Node-3","u":"/private-networks/tutorials/qbft","h":"#8-start-node-3","p":3649},{"i":3672,"t":"Start another terminal, change to the Node-4 directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 The command line specifies: The data directory for Node-4 using the --data-path option. A different port to Node-1, Node-2, and Node-3 for P2P discovery using the --p2p-port option. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"9. Start Node-4","u":"/private-networks/tutorials/qbft","h":"#9-start-node-4","p":3649},{"i":3674,"t":"Start another terminal, use curl to call the JSON-RPC API qbft_getvalidatorsbyblocknumber method and confirm the network has four validators: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' localhost:8545 The result displays the four validators: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x73ced0bd3def2e2d9859e3bd0882683a2e6835fb\", \"0x7a175f3542ceb60bf80fb536b3f42e7a30c0a6d7\", \"0x7f6efa6e34f8c9b591a9ad4763e21b3fca31bcd6\", \"0xc64140f1c9d5bb82e54976e568ad39958c3e94be\" ] } Look at the logs to confirm Besu is producing blocks: 2021-05-26 08:47:00.221+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ee4456536e2793523df87288fae76518089eec91c3f7e05e220f1f4d3f6f95b) in 0.016s. Peers: 4 2021-05-26 08:47:02.071+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #2 / 0 tx / 0 pending / 0 (0.0%) gas / (0x6fc47ada7146d75f6a46911d8d4038795b0c99970bbd4ce0c6d6aa60955f66fe) 2021-05-26 08:47:04.051+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #3 / 0 tx / 0 pending / 0 (0.0%) gas / (0x3cb663880a65103266b11a8d8631beca5c482d515ac287125aa077b2e31b80b0) 2021-05-26 08:47:06.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Produced #4 / 0 tx / 0 pending / 0 (0.0%) gas / (0xc2927915ac0c94bab5fc9acea6608455f1c857d69e97191dc2c39e4ac411817b) 2021-05-26 08:47:08.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #5 / 0 tx / 0 pending / 0 (0.0%) gas / (0xba63471d62c936733add9b884f5213c3842af9f52460268e39e0666ab82f02a5) important If the key files were not copied to the correct directory in step 5, the network will not start producing blocks. The logs for each node should indicate the public key was loaded from the data/key directory: 2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Loaded public key 0x931d32f1aec4e45b150ee38f3c74157a750fc53f523e63fe2b07bf3fce43a3de64587fc9aaf3736444f2e3eef0eea90be3b67d18be7b5b2b7cb2fcd670416a7e from /QBFT-Network/Node-1/data/key If the keys were not copied to the correct directory, Besu creates a key when starting up: 2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to /QBFT-Network/Node-1/data/key If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks.","s":"10. Confirm the private network is working","u":"/private-networks/tutorials/qbft","h":"#10-confirm-the-private-network-is-working","p":3649},{"i":3676,"t":"Use the QBFT API to remove or add validators, or import accounts to MetaMask and send transactions as described in the Quickstart tutorial. note To add or remove nodes as validators you need the node address. The directory created for each node has the node address as the name. Besu doesn't support private key management. You can switch from the block header validator selection method configured here, to the contract validator selection method by updating the genesis file and configuring a transition.","s":"Next steps","u":"/private-networks/tutorials/qbft","h":"#next-steps","p":3649},{"i":3678,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the QBFT network in the future, start from step 6. *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Stop the nodes","u":"/private-networks/tutorials/qbft","h":"#stop-the-nodes","p":3649},{"i":3680,"t":"Configuring a network that supports private transactions requires starting a Tessera node for each Besu node. Besu command line options associate the Besu node with the Tessera node. This tutorial assumes you have completed setting up an IBFT 2.0 network to the point where you have created the genesis file and copied the private keys. If not, complete steps 1 to 5 of the Create an IBFT 2.0 tutorial before continuing. important To support privacy, ensure your genesis file includes at least the byzantium milestone. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant. In this tutorial we start Tessera nodes for the four Besu nodes and associate each Besu node with a Tessera node.","s":"Create a privacy-enabled network","u":"/private-networks/tutorials/privacy","h":"","p":3679},{"i":3682,"t":"Install Tessera.","s":"Prerequisites","u":"/private-networks/tutorials/privacy","h":"#prerequisites","p":3679},{"i":3685,"t":"Inside each Node-* directory, create a Tessera directory: IBFT-Network/ ├── Node-1 │ ├── data │ ├── Tessera ├── Node-2 │ ├── data │ ├── Tessera ├── Node-3 │ ├── data │ ├── Tessera └── Node-4 ├── data ├── Tessera","s":"1. Create Tessera directories","u":"/private-networks/tutorials/privacy","h":"#1-create-tessera-directories","p":3679},{"i":3687,"t":"This example creates an unlocked private key, meaning you do not need a password to decrypt the private key file. In each Tessera directory, generate a public/private key pair for the Tessera node: tessera -keygen -filename nodeKey At the prompt, press Enter to create an unlocked key. Tessera generates the public/private key pair and saves the keys in the nodeKey.pub and nodeKey.key files.","s":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy","h":"#2-generate-tessera-keys","p":3679},{"i":3689,"t":"In the Tessera directory for each node, create a file called tessera.conf, with the following configuration: important In production environments, only specify tls as OFF if another transport security mechanism, such as WireGuard, is in place. Node-1 Node-2 Node-3 Node-4 { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9101\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9102\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9103\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9201\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9202\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9203\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9301\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9302\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9303\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9401\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9402\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9403\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } In the configuration file, specify: Different port numbers for the various servers in the serverConfigs section. The address of the Tessera nodes to discover, in the peer section. The location of the public/private key pair.","s":"3. Create Tessera configuration files","u":"/private-networks/tutorials/privacy","h":"#3-create-tessera-configuration-files","p":3679},{"i":3691,"t":"In each Tessera directory, start Tessera specifying the configuration file created in the previous step: tessera -configfile tessera.conf info After starting the first Tessera node and before starting the other nodes, the log message failed to connect to node displays. This is normal behavior. Until you start the other peer nodes, your node is not connected and displays this warning. You can continue to start the other nodes.","s":"4. Start the Tessera nodes","u":"/private-networks/tutorials/privacy","h":"#4-start-the-tessera-nodes","p":3679},{"i":3693,"t":"In the Node-1 directory, start Besu Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies privacy options: --privacy-enabled enables privacy --privacy-url specifies the Q2T server address of the Tessera node (Q2T in tessera.conf) --privacy-public-key-file specifies the file containing Tessera node public key (created in 3. Generate Tessera Keys) --rpc-http-api includes EEA and PRIV in the list of JSON-RPC APIs to enable privacy JSON-RPC API methods. --min-gas-price is 0 for a free gas network. note Use the --privacy-marker-transaction-signing-key-file command line option to sign privacy marker transactions using a supplied key. The command line option is mandatory in privacy-enabled paid gas networks. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy","h":"#5-start-besu-node-1","p":3679},{"i":3695,"t":"In the Node-2 directory, start Besu Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1. note When running Besu from the Docker image, expose ports.","s":"6. Start Besu Node-2","u":"/private-networks/tutorials/privacy","h":"#6-start-besu-node-2","p":3679},{"i":3697,"t":"In the Node-3 directory, start Besu Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.","s":"7. Start Besu Node-3","u":"/private-networks/tutorials/privacy","h":"#7-start-besu-node-3","p":3679},{"i":3699,"t":"In the Node-4 directory, start Besu Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.","s":"8. Start Besu Node-4","u":"/private-networks/tutorials/privacy","h":"#8-start-besu-node-4","p":3679},{"i":3701,"t":"Besu offers two formats for storing the world state, Bonsai Tries and Forest of Tries.","s":"Data storage formats","u":"/public-networks/concepts/data-storage-formats","h":"","p":3700},{"i":3703,"t":"Bonsai Tries is a data storage layout policy designed to reduce storage requirements and increase read performance. This is the default for Besu. Bonsai stores leaf values in a trie log, separate from the branches of the trie. Bonsai stores nodes by the location of the node instead of the hash of the node. Bonsai can access the leaf from the underlying storage directly using the account key. This greatly reduces the disk space needed for storage and allows for less resource-demanding and faster read performance. Bonsai inherently prunes orphaned nodes and old branches. To run a node with Bonsai Tries data storage format, use the command line option --data-storage-format=BONSAI. important Do not run an archive node with Bonsai Tries. Bonsai is designed for retrieving recent data only. tip You can read more about Bonsai in Consensys' Guide to Bonsai Tries.","s":"Bonsai Tries","u":"/public-networks/concepts/data-storage-formats","h":"#bonsai-tries","p":3700},{"i":3705,"t":"Forest of Tries, also called forest mode, is another method of representing the world state, and is more suitable for archive nodes. In forest mode, each node in the trie is saved in a key-value store by hash. For each block, the world state is updated with new nodes, leaf nodes, and a new state root. Old leaf nodes remain in the underlying data store. Data is accessed and stored by hash, which increases the size of the database and increases the resources and time needed to access account data. warning Forest pruning using the --pruning-enabled option is no longer supported. We recommend using Bonsai Tries to save disk space.","s":"Forest of Tries","u":"/public-networks/concepts/data-storage-formats","h":"#forest-of-tries","p":3700},{"i":3708,"t":"Forest mode uses significantly more memory than Bonsai. With a full node, forest mode uses an estimated 750 GB of storage, while Bonsai uses an estimated 650 GB of storage. Archive nodes must use forest mode, which uses an estimated 12 TB of storage.","s":"Storage requirements","u":"/public-networks/concepts/data-storage-formats","h":"#storage-requirements","p":3700},{"i":3710,"t":"Forest mode must go through all the branches by hash to read a leaf value. Bonsai can access the leaf from the underlying storage directly using the account key. Bonsai will generally read faster than forest mode, particularly if the blocks are more recent. However, Bonsai becomes increasingly more resource-intensive the further in history you try to read data. To prevent this, you can limit how far Bonsai looks back while reconstructing data. The default limit Bonsai looks back is 512. To change the parameter, use the --bonsai-historical-block-limit option. This might directly impact JSON-RPC API queries. note Using --bonsai-historical-block-limit doesn't affect the size of the database being stored, only how far back to load. This means there is no \"safe minimum\" value to use with this option.","s":"Accessing data","u":"/public-networks/concepts/data-storage-formats","h":"#accessing-data","p":3700},{"i":3712,"t":"The following table shows the ways you can sync a full node with the different data storage formats using fast and snap sync. Data storage format Sync mode Storage estimate Can other nodes sync to your node? Bonsai Fast 1140 GB No Bonsai Snap 1090 GB Yes Bonsai Checkpoint 840 GB No Forest Fast 1200 GB Yes tip We recommend using snap sync with Bonsai for the fastest sync and lowest storage requirements.","s":"Syncing nodes","u":"/public-networks/concepts/data-storage-formats","h":"#syncing-nodes","p":3700},{"i":3714,"t":"Ethereum networks have two identifiers, a network ID and a chain ID. Although they often have the same value, they have different uses. Peer-to-peer communication between nodes uses the network ID, while the transaction signature process uses the chain ID. note EIP-155 introduced using the chain ID as part of the transaction signing process to protect against transaction replay attacks. For most networks, including Mainnet and the public testnets, the network ID and the chain ID are the same, with the network ID defaulting to the chain ID, as specified in the genesis file. Chain ID in the genesis file { \"config\": { \"ethash\": { }, \"chainID\": 1981 }, ... } Besu sets the chain ID (and by default the network ID) automatically, using either the --genesis-file option or when specifying a network using the --network option. The following table lists the available networks and their chain and network IDs. Network Chain Chain ID Network ID Type mainnet ETH 1 1 Production holesky ETH 17000 17000 Test sepolia ETH 11155111 11155111 Test dev ETH 2018 2018 Development classic ETC 61 1 Production mordor ETC 63 7 Test info The Ropsten, Rinkeby, and Kiln testnets are deprecated.","s":"Network ID and chain ID","u":"/public-networks/concepts/network-and-chain-id","h":"","p":3713},{"i":3716,"t":"Usually the network ID is the same as the chain ID, but if you want to separate specific nodes from the rest of the network so they can't connect or synchronize with other nodes, you can override the default network ID for those nodes using the --network-id option.","s":"Specify a different network ID","u":"/public-networks/concepts/network-and-chain-id","h":"#specify-a-different-network-id","p":3713},{"i":3718,"t":"If you update the chain ID (or network ID) of existing nodes, they can no longer peer with other nodes in the network. Nodes need to have a matching genesis file, including the chain ID, in order to peer. In this case, you're effectively running two chains that can't communicate with each other. To change a chain ID and start a new chain: Stop all your nodes using ctrl+c in each terminal window. Update the genesis file with the new chain ID. Make sure all nodes have the same genesis file. Delete the old data directory or point to a new location for each node. Restart the nodes. Warning Starting a new chain is starting from block zero. This means when you start a new chain with a new chain ID, you lose all previous data.","s":"Start a new chain with a new chain ID","u":"/public-networks/concepts/network-and-chain-id","h":"#start-a-new-chain-with-a-new-chain-id","p":3713},{"i":3720,"t":"Transaction mining causes smart contracts to emit events and write logs to the blockchain. The smart contract address is the link to the logs and the blockchain includes the logs, but contracts cannot access logs. Log storage is cheaper than contract storage (that is, it costs less gas) so storing and accessing the required data in logs reduces the cost. For example, use logs to display all transfers made using a specific contract, but not the current state of the contract. A Dapp front end can either access logs using the JSON-RPC API filter methods or subscribe to logs using the RPC Pub/Sub API. Use admin_generateLogBloomCache to improve log retrieval performance.","s":"Events and logs","u":"/public-networks/concepts/events-and-logs","h":"","p":3719},{"i":3722,"t":"Log entries contain up to four topics. The first topic is the event signature hash and up to three topics are the indexed event parameters. A log entry for an event with one indexed parameter { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x84\", \"blockHash\": \"0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336\", \"transactionHash\": \"0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }","s":"Topics","u":"/public-networks/concepts/events-and-logs","h":"#topics","p":3719},{"i":3724,"t":"Up to three event parameters can have the indexed attribute. Logs store these indexed parameters as topics. Indexed parameters are searchable and filterable. Topics are 32 bytes. If an indexed argument is an array (including string and byte datatypes), the log stores the keccak-256 hash of the parameter as a topic. Log data includes non-indexed parameters but is difficult to search or filter. A Solidity contract storing one indexed and one non-indexed parameter and has an event emitting the value of each parameter: pragma solidity ^0.5.1; contract Storage { uint256 public valueIndexed; uint256 public valueNotIndexed; event Event1(uint256 indexed valueIndexed, uint256 valueNotIndexed); function setValue(uint256 _valueIndexed, uint256 _valueNotIndexed) public { valueIndexed = _valueIndexed; valueNotIndexed = _valueNotIndexed; emit Event1(_valueIndexed, _valueNotIndexed); } } A log entry created by invoking the contract in the previous example with valueIndexed set to 5 and valueNotIndexed set to 7: { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d6\", \"blockHash\": \"0x7d0ac7c12ac9f622d346d444c7e0fa4dda8d4ed90de80d6a28814613a4884a67\", \"transactionHash\": \"0xe994022ada94371ace00c4e1e20663a01437846ced02f18b3f3afec827002781\", \"transactionIndex\": \"0x0\", \"address\": \"0x43d1f9096674b5722d359b6402381816d5b22f28\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000007\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] }","s":"Event parameters","u":"/public-networks/concepts/events-and-logs","h":"#event-parameters","p":3719},{"i":3726,"t":"The first topic in a log entry is always the event signature hash. The event signature hash is a keccak-256 hash of the event name and input argument types, with argument names ignored. For example, the event Hello(uint256 worldId) has the signature hash keccak('Hello(uint256)'). The signature identifies to which event log topics belong. A Solidity contract with two different events: pragma solidity ^0.5.1; contract Storage { uint256 public valueA; uint256 public valueB; event Event1(uint256 indexed valueA); event Event2(uint256 indexed valueB); function setValue(uint256 _valueA) public { valueA = _valueA; emit Event1(_valueA); } function setValueAgain(uint256 _valueB) public { valueB = _valueB; emit Event2(_valueB); } } The event signature hash for event 1 is keccak('Event1(uint256)') and the event signature hash for event 2 is keccak('Event2(uint256)'). The hashes are: 04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3 for event 1 06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e for event 2. tip You can use a library keccak (sha3) hash function, such as provided in Web3.js, or an online tool, such as https://emn178.github.io/online-tools/keccak_256.html, to generate event signature hashes. Log entries from invoking the Solidity contract in the previous example: [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x84\", \"blockHash\": \"0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336\", \"transactionHash\": \"0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x87\", \"blockHash\": \"0x6643a1e58ad857f727552e4572b837a85b3ca64c4799d085170c707e4dad5255\", \"transactionHash\": \"0xa95295fcea7df3b9e47ab95d2dadeb868145719ed9cc0e6c757c8a174e1fcb11\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ]","s":"Event signature hash","u":"/public-networks/concepts/events-and-logs","h":"#event-signature-hash","p":3719},{"i":3728,"t":"Filter options objects have a topics key to filter logs by topics. Topics are order-dependent. A transaction with a log containing topics [A, B] matches with the following topic filters: [] - Match any topic [A] - Match A in first position [[null], [B]] - Match any topic in first position AND B in second position [[A],[B]] - Match A in first position AND B in second position [[A, C], [B, D]] - Match (A OR C) in first position AND (B OR D) in second position. The following filter option object returns log entries for the Event Parameters example contract with valueIndexed set to 5 or 9: { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x43d1f9096674b5722d359b6402381816d5b22f28\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [ \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"0x0000000000000000000000000000000000000000000000000000000000000009\" ] ] }","s":"Topic filters","u":"/public-networks/concepts/events-and-logs","h":"#topic-filters","p":3719},{"i":3730,"t":"The Quorum Developer Quickstart uses the Besu Docker image to run a private IBFT 2.0 network of Besu nodes managed by Docker Compose. caution This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.","s":"Developer Quickstart","u":"/private-networks/tutorials/quickstart","h":"","p":3729},{"i":3732,"t":"One of the following operating systems: Linux on x86_64 architecture macOS on an Intel processor (M1 processor not supported yet) Windows 64-bit edition, with: Windows Subsystem for Linux 2 Docker desktop configured to use the WSL2-based engine Docker and Docker Compose Node.js version 12 or higher Hardhat cURL command line MetaMask info Allow Docker up to 4G of memory or 6G if running the privacy examples. Refer to the Resources section in Docker for Mac and Docker Desktop for details.","s":"Prerequisites","u":"/private-networks/tutorials/quickstart","h":"#prerequisites","p":3729},{"i":3734,"t":"To create the tutorial docker-compose files and artifacts, run: npx quorum-dev-quickstart Follow the prompts displayed to run Besu and logging with ELK. Enter n for Codefi Orchestrate and private transactions. note If you enter y for private transactions, you get three Besu nodes with corresponding Tessera nodes for privacy. You can follow the privacy walk-through, which details how to send private transactions and interact with deployed private contracts.","s":"Generate the tutorial blockchain configuration files","u":"/private-networks/tutorials/quickstart","h":"#generate-the-tutorial-blockchain-configuration-files","p":3729},{"i":3736,"t":"To start the network, go to the installation directory (quorum-test-network if you used the default value) and run: ./run.sh The script builds the Docker images, and runs the Docker containers. Four Besu IBFT 2.0 validator nodes and a non-validator node are created to simulate a base network. When execution is successfully finished, the process lists the available services: Services list ************************************* Quorum Dev Quickstart ************************************* ---------------------------------- List endpoints and services ---------------------------------- JSON-RPC HTTP service endpoint : http://localhost:8545 JSON-RPC WebSocket service endpoint : ws://localhost:8546 Web block explorer address : http://localhost:25000/ Prometheus address : http://localhost:9090/graph Grafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All Kibana logs address : http://localhost:5601/app/kibana#/discover Collated logs using Grafana Loki : http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search= For more information on the endpoints and services, refer to README.md in the installation directory. **************************************************************** Use the JSON-RPC HTTP service endpoint to access the RPC node service from your dapp or from cryptocurrency wallets such as MetaMask. Use the JSON-RPC WebSocket service endpoint to access the Web socket node service from your dapp. Use the Web block explorer address to display the block explorer Web application. Use the Prometheus address to access the Prometheus dashboard. Read more about metrics. Use the Grafana address to access the Grafana dashboard. Read more about metrics. Use the Kibana logs address to access the logs in Kibana. Read more about log management. Use the Grafana Loki logs address to access the logs in Grafana. Read more about log management. To display the list of endpoints again, run: ./list.sh","s":"Start the network","u":"/private-networks/tutorials/quickstart","h":"#start-the-network","p":3729},{"i":3738,"t":"You can use Chainlens Blockchain Explorer to analyze block information, contract metadata, transaction searches, and more. Chainlens has built-in support for privacy-enabled Besu networks. note You must connect to one of the privacy nodes (for example, member1besu), not the dedicated RPC, to allow access for Besu privacy API methods. In production networks, you must secure access to RPC nodes. Clone the Chainlens GitHub repository: git clone https://github.com/web3labs/chainlens-free From the docker-compose directory, run the following command: cd docker-compose NODE_ENDPOINT=member1besu PORT=26000 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up Open http://localhost/ on your browser. You’ll see the new initialization page while it boots up. This may take 5–10 minutes for the all services to start and the ingestion sync to complete. To stop all the services from running, run the following command from the docker-compose directory: docker-compose down -v","s":"Use a block explorer","u":"/private-networks/tutorials/quickstart","h":"#use-a-block-explorer","p":3729},{"i":3740,"t":"The sample network also includes Prometheus and Grafana monitoring tools to let you visualize node health and usage. You can directly access these tools from your browser at the addresses displayed in the endpoint list. Prometheus dashboard Grafana dashboard Grafana Loki logs dashboard For more details on how to configure and use these tools for your own nodes, see the performance monitoring documentation, Prometheus documentation and Grafana documentation. and collated logs via Grafana Loki","s":"Monitor nodes with Prometheus and Grafana","u":"/private-networks/tutorials/quickstart","h":"#monitor-nodes-with-prometheus-and-grafana","p":3729},{"i":3742,"t":"You can run JSON-RPC requests on: HTTP with http://localhost:8545. WebSockets with ws://localhost:8546.","s":"Run JSON-RPC requests","u":"/private-networks/tutorials/quickstart","h":"#run-json-rpc-requests","p":3729},{"i":3744,"t":"This tutorial uses cURL to send JSON-RPC requests over HTTP.","s":"Run with cURL","u":"/private-networks/tutorials/quickstart","h":"#run-with-curl","p":3729},{"i":3746,"t":"You can also run all the requests with the Besu Postman collection. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Run with Postman","u":"/private-networks/tutorials/quickstart","h":"#run-with-postman","p":3729},{"i":3748,"t":"Run the following command from the host shell: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":1}' http://localhost:8545 The result displays the client version of the running node: Result example Result explanation { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"besu/v21.1.2/linux-x86_64/oracle_openjdk-java-11\" } \"jsonrpc\" : \"2.0\" indicates that the JSON-RPC 2.0 spec format is used. \"id\" : 1 is the request identifier used to match the request and the response. This tutorial always uses 1. \"result\" contains the running Besu information: v21.1.2 is the running Besu version number. This may be different when you run this tutorial. linux-x86_64 is the architecture used to build this version. oracle_openjdk-java-11 is the JVM type and version used to build this version. This may be different when you run this tutorial. Successfully calling this method shows that you can connect to the nodes using JSON-RPC over HTTP. From here, you can walk through more interesting requests demonstrated in the rest of this section, or skip ahead to Create a transaction using MetaMask.","s":"Request the node version","u":"/private-networks/tutorials/quickstart","h":"#request-the-node-version","p":3729},{"i":3750,"t":"Peers are the other nodes connected to the node receiving the JSON-RPC request. Poll the peer count using net_peerCount: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' http://localhost:8545 The result indicates that there are four peers (the validators): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4\" }","s":"Count the peers","u":"/private-networks/tutorials/quickstart","h":"#count-the-peers","p":3729},{"i":3752,"t":"Call eth_blockNumber to retrieve the number of the most recently synchronized block: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' http://localhost:8545 The result indicates the highest block number synchronized on this node. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2a\" } Here the hexadecimal value 0x2a translates to decimal as 42, the number of blocks received by the node so far, about two minutes after the new network started.","s":"Request the most recent block number","u":"/private-networks/tutorials/quickstart","h":"#request-the-most-recent-block-number","p":3729},{"i":3754,"t":"This example uses the web3.js library to make the API calls, using the rpcnode accessed on http://localhost:8545. Navigate to the smart_contracts directory and deploy the public transaction: cd smart_contracts npm install node scripts/public/hre_1559_public_tx.js # or via ethers node scripts/public/hre_public_tx.js This deploys the contract and sends an arbitrary value (47) from Member1 to Member3. The script then performs: A read operation on the contract using the get function and the contract's ABI, at the specified address. A write operation using the set function and the contract's ABI, at the address and sets the value to 123. A read operation on all events emitted. The script output is as follows: { address: '0x2b224e70f606267586616586850aC6f4Ae971eCb', privateKey: '0xb3f2ab4d7bb07a4168432fb572ceb57fd9b842ed8dc41256255db6ff95784000', signTransaction: [Function: signTransaction], sign: [Function: sign], encrypt: [Function: encrypt] } create and sign the txn sending the txn tx transactionHash: 0x423d56f958a316d2691e05e158c6a3f37004c27a1ec9697cf9fed2a5c2ae2c2b tx contractAddress: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9 Contract deployed at address: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9 Use the smart contracts 'get' function to read the contract's constructor initialized value .. Obtained value at deployed contract is: 47 Use the smart contracts 'set' function to update that value to 123 .. sending the txn tx transactionHash: 0xab460da2544687c5fae4089d01b14bbb9bea765449e1fd2c30b30e1761481344 tx contractAddress: null Verify the updated value that was set .. Obtained value at deployed contract is: 123 Obtained all value events from deployed contract : [47,123] We also have a second example that shows how to transfer ETH between accounts. Navigate to the smart_contracts directory and deploy the eth_tx transaction: cd smart_contracts npm install node scripts/public/hre_eth_tx.js The output is as follows: Account A has balance of: 90000 Account B has balance of: 0 create and sign the txn sending the txn tx transactionHash: 0x8b9d247900f2b50a8dded3c0d73ee29f04487a268714ec4ebddf268e73080f98 Account A has an updated balance of: 89999.999999999999999744 Account B has an updated balance of: 0.000000000000000256","s":"Public transactions","u":"/private-networks/tutorials/quickstart","h":"#public-transactions","p":3729},{"i":3756,"t":"You can use MetaMask to send a transaction on your private network. Open MetaMask and connect it to your private network RPC endpoint by selecting Localhost 8545 in the network list. Choose one of the following test accounts and import it into MetaMask by copying the corresponding private key. Do not use the test accounts on Ethereum Mainnet or any production network. The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code. They are not secure and everyone can use them. Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud. In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. Always secure your Ethereum Mainnet and any production account properly. See for instance MyCrypto \"Protecting Yourself and Your Funds\" guide. \"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)\" Private key to copy : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 200 Eth (200000000000000000000 Wei) \"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)\" Private key to copy : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 Initial balance : 90000 Eth (90000000000000000000000 Wei) \"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)\" Private key to copy : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance : 90000 Eth (90000000000000000000000 Wei) note Besu doesn't incorporate account management. To create your own account, you have to use a third-party tool, such as MetaMask. After importing an existing test account, create another test account from scratch to use as the recipient for a test Ether transaction. In MetaMask, select the new test account and copy its address. In the Block Explorer, search for the new test account by selecting the 🔍 and pasting the test account address into the search box. The new test account displays with a zero balance. Send test Ether from the first test account (containing test Ether) to the new test account (which has a zero balance). tip You can use a zero gas price here as this private test network is a free gas network, but the maximum amount of gas that can be used (the gas limit) for a value transaction must be at least 21000. Refresh the Block Explorer page in your browser displaying the target test account. The updated balance reflects the transaction completed using MetaMask.","s":"Create a transaction using MetaMask","u":"/private-networks/tutorials/quickstart","h":"#create-a-transaction-using-metamask","p":3729},{"i":3758,"t":"You can use a demo dapp called QuorumToken which uses an ERC20 token that is deployed to the network. We'll use Hardhat, Ethers and MetaMask to interact with the network, which involves the following steps: Deploy the contract and save the contract's address. Start the dapp, and read and transact with the deployed token. The dapps/quorumToken directory is this structured in this manner (only relevant paths shown): quorumToken ├── hardhat.config.ts // hardhat network config ├── contracts // the QuorumToken.sol ├── scripts // handy scripts eg: to deploy to a chain ├── test // contract tests └── frontend // dapp done in next.js ├── public ├── src ├── styles ├── tsconfig.json","s":"Smart contract and dapp usage","u":"/private-networks/tutorials/quickstart","h":"#smart-contract-and-dapp-usage","p":3729},{"i":3760,"t":"Once the network is up and running, enter the quorumToken directory and run the following: # install dependencies npm i # compile the contract npm run compile npm run test # deploy the contract to the quickstart network npm run deploy-quorumtoken The output is similar to the following: # compile > quorumToken@1.0.0 compile > npx hardhat compile Generating typings for: 5 artifacts in dir: typechain-types for target: ethers-v6 Successfully generated 24 typings! Compiled 5 Solidity files successfully # test > quorumToken@1.0.0 test > npx hardhat test QuorumToken Deployment ✔ Should have the correct initial supply (1075ms) ✔ Should token transfer with correct balance (78ms) 2 passing (1s) # deploy Contract deploy at: 0x5FbDB2315678afecb367f032d93F642f64180aa3 This will deploy the contract to the network and return the address. Please save this address for the next step.","s":"Deploy the contract","u":"/private-networks/tutorials/quickstart","h":"#deploy-the-contract","p":3729},{"i":3762,"t":"The dapp runs a local website using Next.js, and uses the contract in the previous step deployed on the network. With the blockchain running, and MetaMask connected to localhost on port 8545, import one of our test accounts via private key, and run the following command: cd frontend npm i npm run dev This starts the dapp, binding it to port 3001 on your machine. > webapp@0.1.0 dev > next dev -p 3001 - ready started server on [::]:3001, url: http://localhost:3001 - event compiled client and server successfully in 270 ms (18 modules) - wait compiling... - event compiled client and server successfully in 173 ms (18 modules) In the browser where you have MetaMask enabled and one of the test accounts loaded, open a new tab and navigate to the QuorumToken dapp. Connect to MetaMask and input the address from the previous step. Fox example our contract above deployed to 0x5FbDB2315678afecb367f032d93F642f64180aa3. The dapp will then read the balance of the account from MetaMask and get details of the contract. You can then send funds to another address (any of the other test accounts) on the network, and MetaMask will sign and send the transaction. You can also search for the transaction and view its details in the Block Explorer. The MetMask UI also keeps a record of the transaction.","s":"Run the dapp","u":"/private-networks/tutorials/quickstart","h":"#run-the-dapp","p":3729},{"i":3764,"t":"You can deploy your own dapp to the Quorum Developer Quickstart by configuring your dapp to point to the Quickstart network. We recommend using Hardhat, and you can use the sample hardhat.config.js to configure the networks object in the Hardhat configuration file to specify which networks to connect to for deployments and testing. The Quickstart's RPC service endpoint is http://localhost:8545. For example, the following is the Hardhat configuration file for the QuorumToken dapp used in the Quickstart GoQuorum network: module.exports = { networks: { // in built test network to use when developing contracts hardhat: { chainId: 1337 }, quickstart: { url: \"http://127.0.0.1:8545\", chainId: 1337, // test accounts only, all good ;) accounts: [ \"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\" ] } }, defaultNetwork: \"hardhat\", ... ... Deploy the contract using: npx hardhat run ./scripts/deploy_quorumtoken.ts --network quickstart","s":"Deploy your own dapp","u":"/private-networks/tutorials/quickstart","h":"#deploy-your-own-dapp","p":3729},{"i":3766,"t":"To shut down the private network without deleting the containers: ./stop.sh This command stops the containers related to the services specified in the docker-compose.yml file. To restart the private network: ./resume.sh","s":"Stop and restart the private network without removing containers","u":"/private-networks/tutorials/quickstart","h":"#stop-and-restart-the-private-network-without-removing-containers","p":3729},{"i":3768,"t":"To shut down the private network and delete all containers and images created from running the sample network and the Pet Shop dapp: ./remove.sh","s":"Stop the private network and remove containers","u":"/private-networks/tutorials/quickstart","h":"#stop-the-private-network-and-remove-containers","p":3729},{"i":3770,"t":"New nodes joining an existing network require the following: The same genesis file used by all other nodes on the running network. A list of nodes to connect to; this is done by specifying bootnodes, or by providing a list of static nodes. A node key pair and optionally an account. If the running network is using permissions, then you need to add the new node's enode details to the permissions file used by existing nodes, or update the onchain permissioning contract. The following steps describe the process to add a new node to the Developer Quickstart.","s":"Add a new node to the network","u":"/private-networks/tutorials/quickstart","h":"#add-a-new-node-to-the-network","p":3729},{"i":3772,"t":"Create a node key pair and account for a new node by running the following script: cd ./extra npm install node generate_node_keys.js --password \"Password\" note The --password parameter is optional.","s":"1. Create the node key files","u":"/private-networks/tutorials/quickstart","h":"#1-create-the-node-key-files","p":3729},{"i":3774,"t":"Navigate to the directory where the configuration files for the network were created. note The directory was specified in an earlier step when running npx quorum-dev-quickstart. The default location is ./quorum-test-network. In the config/nodes directory, create a subdirectory for the new node (for example, newnode), and move the nodekey, nodekey.pub, address and accountkey files from the previous step into this directory.","s":"2. Create new node directory","u":"/private-networks/tutorials/quickstart","h":"#2-create-new-node-directory","p":3729},{"i":3776,"t":"Add an entry for the new node into the docker-compose file: newnode: <<: *besu-def container_name: newnode volumes: - public-keys:/opt/besu/public-keys/ - ./config/besu/:/config - ./config/nodes/newnode:/opt/besu/keys - ./logs/besu:/tmp/besu depends_on: - validator1 networks: quorum-dev-quickstart: ipv4_address: 172.16.239.41 important Select an IP address and port map not being used for the other containers. Mount the newly created folder ./config/nodes/newnode to the /opt/besu/keys directory of the new node, as seen in this example.","s":"3. Update docker-compose","u":"/private-networks/tutorials/quickstart","h":"#3-update-docker-compose","p":3729},{"i":3778,"t":"Update prometheus.yml in the ./config/prometheus/ directory to configure metrics to display in Grafana. Insert the following under scrape_configs section in the file. Change job_name and targets appropriately if you've updated them. - job_name: newnode scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: [newnode:9545]","s":"4. Update Prometheus configuration","u":"/private-networks/tutorials/quickstart","h":"#4-update-prometheus-configuration","p":3729},{"i":3780,"t":"Add the new node's enode address to the static nodes file and permissions file. The enode uses the format enode://pubkey@ip_address:30303. If the nodekey.pub is 4540ea...9c1d78 and the IP address is 172.16.239.41, then the enode address is \"enode://4540ea...9c1d78@172.16.239.41:30303\", which must be added to both files. Alternatively, call the perm_addNodesToAllowlist API method on existing nodes to add the new node without restarting. note Calling the API method by itself only persists for as long as the nodes remain online and is lost on the next restart. On a live network, the new node must be added to the permissions file so that subsequent restarts of the nodes are aware of the change.","s":"5. Update files with the enode address","u":"/private-networks/tutorials/quickstart","h":"#5-update-files-with-the-enode-address","p":3729},{"i":3782,"t":"Once complete, start the network up with ./run.sh. When using the smart contract you can either make changes via a dapp or via RPC API calls.","s":"6. Start the network","u":"/private-networks/tutorials/quickstart","h":"#6-start-the-network","p":3729},{"i":3784,"t":"The genesis file defines the first block in the chain, and the first block defines which chain you want to join. For Ethereum Mainnet and public testnets (for example, Holesky) the genesis configuration definition is in Besu and used when specifying a public network using the --network command line option. For private networks, create a JSON genesis file, then specify the genesis file using the --genesis-file command line option. The genesis file specifies the network-wide settings, such as those for a free gas network, so all nodes in a network must use the same genesis file. note You can specify node-level settings on the command line or in the node configuration file. Example IBFT 2.0 genesis file { \"config\": { \"chainId\": 2018, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"extraData\": \"0xf83ea00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000c0\", \"gasLimit\": \"0x1fffffffffffff\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\": { \"balance\": \"0xad78ebc5ac6200000\" } } }","s":"Genesis file","u":"/public-networks/concepts/genesis-file","h":"","p":3783},{"i":3786,"t":"The Merge transitioned Ethereum Mainnet to Proof of Stake (PoS) consensus. Under Ethereum's PoS, you must run a full node and stake 32 ETH to become a validator. note To operate a full node on Mainnet, you must run a beacon node, i.e. a consensus client and an execution client. To become a validator, you must also run a validator client (either in the same process as the beacon node or separately). PoS is preferred over Proof of Work and Proof of Authority as a consensus mechanism because it is more secure, requires less energy, and lowers the barrier to entry. The PoS mechanism randomly chooses validators to propose or validate blocks on the Beacon Chain in defined time frames. Proposers are responsible for proposing new consensus blocks, and non-proposing validators are responsible for validating (attesting to) proposed blocks. Validators earn rewards for proposing and attesting to consensus blocks eventually included in the Beacon Chain, and penalized for malicious behavior. Attestations make up the bulk of validator rewards (~85%). Validators also receive transaction fees for included blocks. Each consensus block contains an execution payload, which contains a list of transactions and other data required to execute and validate the payload. When a node validates a consensus block, its consensus client processes the block and sends the execution payload to the execution client, which: Assembles a block on the execution layer. Verifies pre-conditions. Executes transactions. Verifies post-conditions. Sends the validity result back to the consensus client. If the block is valid, the execution client includes it in the execution chain and stores the new state in execution state storage. If a consensus block receives attestations backed by enough staked ETH, the block is included in the Beacon Chain. In the case of competing chains, the chain with the highest number of validator votes is selected.","s":"Proof of stake consensus","u":"/public-networks/concepts/proof-of-stake","h":"","p":3785},{"i":3788,"t":"Ethereum's Proof of Stake (PoS) protocol leverages two separate P2P networks supporting separate clients. Execution clients gossip transactions over their network, enabling them to manage their local transaction pool. Consensus clients gossip blocks over their network, enabling consensus and chain growth. A validator node also runs the validator client. info As as result of the 2022 Merge, Ethereum Mainnet transitioned from Proof of Work (PoW) to PoS consensus.","s":"Node clients","u":"/public-networks/concepts/node-clients","h":"","p":3787},{"i":3790,"t":"Under PoS, a full Ethereum Mainnet node is a combination of an execution client (previously called an Eth1 client client) and a consensus client (previously called an Eth2 client). The consensus client uses the Engine API to communicate with the execution client.","s":"Execution and consensus clients","u":"/public-networks/concepts/node-clients","h":"#execution-and-consensus-clients","p":3787},{"i":3792,"t":"Execution clients, such as Besu, manage the execution layer, including executing transactions and updating the world state. Execution clients serve JSON-RPC API requests and communicate with each other P2P. Besu is an execution client that you can run with: Any consensus client on Mainnet. Any consensus client on a testnet. Teku on Mainnet. Teku on a testnet.","s":"Execution clients","u":"/public-networks/concepts/node-clients","h":"#execution-clients","p":3787},{"i":3794,"t":"The consensus client (also known as the beacon node, CL client or, formerly, the Eth2 client) implements the PoS consensus algorithm, which enables the network to achieve agreement based on validated data from the execution client. Consensus clients serve REST API requests and communicate with each other P2P. Consensus clients, such as Teku contain beacon node implementations. The beacon node is the primary link to the Beacon Chain (i.e. the consensus layer). A consensus client can run without the (bundled) validator to keep up with the head of the chain, allowing the node to stay synced. Validator clients​ To operate a validator node, node operators must also run a validator client and deposit the required ETH into the deposit contract. The validator client handles attestations and block proposal — i.e. performs validator duties on the consensus layer. The validator client may either be run in the same process as the beacon node or separately. Validators earn rewards for performing validator duties, and fee recipients also earn rewards for the inclusion of execution layer transactions.","s":"Consensus clients","u":"/public-networks/concepts/node-clients","h":"#consensus-clients","p":3787},{"i":3796,"t":"Each node has a private and public key pair, and a node address. Besu uses the private and public key pair to sign and verify transactions, and the node address as an identifier for the node.","s":"Node keys and node address","u":"/public-networks/concepts/node-keys","h":"","p":3795},{"i":3798,"t":"When starting Besu, if the --node-private-key-file option is not specified and a key file does not exist in the data directory for the node, Besu generates a node private key and writes it to the key file. If a key file does exist in the data directory when starting Besu, the node starts using the private key in the key file. info The private key is not encrypted.","s":"Node private key","u":"/public-networks/concepts/node-keys","h":"#node-private-key","p":3795},{"i":3800,"t":"The node public key displays in the log after starting Besu. Also referred to as the node ID, the node public key forms part of the enode URL of a node. You can export the node public key, either to standard output or to a specified file, using the public-key export subcommand.","s":"Node public key","u":"/public-networks/concepts/node-keys","h":"#node-public-key","p":3795},{"i":3802,"t":"Besu generates the node address by creating a hash of the node public key and using the last 20 bytes of the hash as the node address. It is also displayed in the logs after starting Besu. You can export the node address, either to standard output or to a specified file, using the public-key export-address subcommand.","s":"Node address","u":"/public-networks/concepts/node-keys","h":"#node-address","p":3795},{"i":3804,"t":"Use the --node-private-key-file option to specify a custom key file in any location. If the key file exists, the node starts with the private key in the key file. If the key file does not exist, Besu generates a node private key and writes it to the key file. For example, the following command either reads the node private key from privatekeyfile or writes a generated private key to privatekeyfile. besu --node-private-key-file=\"/Users/username/privatekeyfile\"","s":"Specify a custom node private key file","u":"/public-networks/concepts/node-keys","h":"#specify-a-custom-node-private-key-file","p":3795},{"i":3806,"t":"The enode URL identifies a node. For example, the --bootnodes option and the admin_addPeer method specify nodes by the enode URL. The enode URL format is enode://@[?discport=] where: is the node public key, excluding the initial 0x. is the host and TCP port the bootnode is listening on for P2P discovery. Specify the host and TCP port using the --p2p-host and --p2p-port options. The default host is 127.0.0.1 and the default port is 30303. note Standard Ethereum enode URLs allow hostnames as IP addresses only, however Besu provides domain name support in private permissioned networks. If the TCP listening and UDP discovery ports differ, the UDP port is specified as query parameter discport. info If the node public key is 0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f, the host is 10.3.58.6, the TCP listening port is 30303, and the UDP discovery port is 30301, then the enode URL is enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@10.3.58.6:30303?discport=30301 If the --p2p-host or --p2p-port options are not specified and the node public key is 0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f, then the enode URL is enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 The enode URL displays when starting a Besu node. Use the net_enode JSON-RPC API method to get the enode URL of the node. The enode advertised to other nodes during discovery is the external IP address and port, as defined by --nat-method.","s":"Enode URL","u":"/public-networks/concepts/node-keys","h":"#enode-url","p":3795},{"i":3808,"t":"caution Enode URL domain name support is an early access feature that you can use in private permissioned networks only. To use domain names in enode URLs: Configure DNS reverse lookup. Enable DNS support using the early access option --Xdns-enabled. Example enode URL using a domain name enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@mydomain.dev.example.net:30301 tip If deploying Besu using Kubernetes in private permissioned networks, use the --Xdns-enabled and --Xdns-update-enabled options to ensure that Besu can connect to a container after restarting even if the IP address of the container changes. Use the --Xhelp command line option to view early access options and their descriptions. If nodes are not connecting as expected, set the log level to TRACE to help troubleshoot the issue.","s":"Domain name support","u":"/public-networks/concepts/node-keys","h":"#domain-name-support","p":3795},{"i":3810,"t":"All nodes maintain a transaction pool to store pending transactions before processing. Transaction pools are categorized into the following two types: Layered - Recommended for public blockchain networks. Sequenced - Recommended for private blockchain networks. You can use specific options and methods to configure and monitor the transaction pool. note When submitting private transactions, the privacy marker transaction is submitted to the transaction pool, not the private transaction itself.","s":"Transaction pool","u":"/public-networks/concepts/transactions/pool","h":"","p":3809},{"i":3812,"t":"The layered transaction pool is the default transaction pool implementation. The implementation separates the pool into layers according to value and executability of the transactions. The first layer keeps only the highest-value transactions that can feasibly go into the next block. The other two layers ensure Besu always has a backlog of transactions to fill blocks, maximizing the amount of fees. Layered pools have additional parameters that allow you to limit and configure the number of transactions in different layers, enabling them to handle high volumes and sort transactions at a faster speed. With the layered transaction pool, Besu produces more profitable blocks more quickly, with more denial-of-service protection, and using less CPU than with the legacy transaction pool. If you previously configured transaction pool behavior, upgrade to the layered transaction pool by: Removing the --tx-pool-retention-hours option, which is not applicable because old transactions will expire when the memory cache is full. Replacing the --tx-pool-limit-by-account-percentage option with --tx-pool-max-future-by-sender to limit the number of sequential transactions, instead of percentage of transactions, from a single sender kept in the pool. Removing the --tx-pool-max-size option, which is not applicable because the layered pool is limited by memory size instead of the number of transactions. To configure the maximum memory capacity, use --tx-pool-layer-max-capacity. You can opt out of the layered transaction pool implementation by setting the --tx-pool option to sequenced.","s":"Layered transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#layered-transaction-pool","p":3809},{"i":3814,"t":"In the sequenced transaction pool, transactions are processed strictly in the order they are received. Although sequenced transaction pools lack the flexibility of layered pools, they help maintain a consistent and transparent transaction order, which is often useful in private blockchains. You can select the sequenced transaction pool by setting --tx-pool=sequenced. If you set the enterprise configuration profile using --profile=enterprise or --profile=private, the sequenced transaction pool is set by default. The sequenced transaction pool suits enterprise environments because it functions like a first-in-first-out (FIFO) queue and processes transactions in the order of submission, regardless of the sender. When the pool reaches capacity, the newer transactions are evicted first, reducing the likelihood of a nonce gap and avoiding the need to resubmit older transactions.","s":"Sequenced transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#sequenced-transaction-pool","p":3809},{"i":3816,"t":"When the transaction pool is full, it accepts and retains local transactions in preference to remote transactions. If the transaction pool is full of local transactions, Besu drops the oldest local transactions first. That is, a full transaction pool continues to accept new local transactions by first dropping remote transactions and then by dropping the oldest local transactions.","s":"Dropping transactions when the layered transaction pool is full","u":"/public-networks/concepts/transactions/pool","h":"#dropping-transactions-when-the-layered-transaction-pool-is-full","p":3809},{"i":3819,"t":"You can replace a pending transaction with a transaction that has the same sender and nonce but a higher gas price. If sending a legacy transaction, the old transaction is replaced if the new transaction has a gas price higher than the existing gas price by the percentage specified by --tx-pool-price-bump. If sending an EIP1559 transaction, the old transaction is replaced if one of the following is true: The new transaction's effective gas price is higher than the existing gas price by the percentage specified by --tx-pool-price-bump AND the new effective priority fee is greater than or equal to the existing priority fee. The new transaction's effective gas price is the equal to the existing gas price AND the new effective priority fee is higher than the existing priority fee by the percentage specified by --tx-pool-price-bump. The default value for --tx-pool-price-bump is 10%.","s":"In networks with a base fee and priced gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-a-base-fee-and-priced-gas","p":3809},{"i":3821,"t":"To enable replacing transactions in the transaction pool for zero base fee networks, or free gas networks: If you set zeroBaseFee to true in the genesis file, the transaction pool price bump is set to 0. Specifying a value for transaction pool price bump using --tx-pool-price-bump will cause an error. If the minimum gas price is zero, the transaction pool price bump is set to 0, unless you specify a different value using --tx-pool-price-bump.","s":"In networks with zero base base or free gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-zero-base-base-or-free-gas","p":3809},{"i":3823,"t":"You can configure and monitor the transaction pool using the following methods, subscriptions, and options: Name Description Method txpool_besuTransactions API method to list transactions in the transaction pool. Method txpool_besuStatistics API method to list statistics of the transaction pool. Method txpool_besuPendingTransactions API method to list pending transactions in the transaction pool. Subscription newPendingTransactions RPC subscription to notify of transactions added to the transaction pool. Subscription droppedPendingTransactions RPC subscription to notify of transactions dropped from the transaction pool. Option --tx-pool Option to specify the type of transaction pool to use. Option --tx-pool-enable-save-restore Option to enable save and restore functionality for the transaction pool. Option --tx-pool-layer-max-capacity Option to specify the maximum memory capacity of the layered transaction pool. Option --tx-pool-limit-by-account-percentage Option to limit the transaction pool by account percentage. Option --tx-pool-max-future-by-sender Option to specify the maximum number of future transactions by sender. Option --tx-pool-max-prioritized Option to specify the maximum number of prioritized transactions. Option --tx-pool-max-prioritized-by-type Option to specify the maximum number of prioritized transactions by type. Option --tx-pool-max-size Option to specify the maximum size of the transaction pool. Option --tx-pool-min-gas-price Option to specify the minimum gas price for transactions in the pool. Option --tx-pool-no-local-priority Option to disable local priority for transactions. Option --tx-pool-price-bump Option to specify the price bump percentage to replace an existing transaction. Option --tx-pool-priority-senders Option to specify sender addresses to prioritize in the transaction pool. Option --tx-pool-retention-hours Option to specify the number of hours to retain transactions in the pool. Option --tx-pool-save-file Option to specify the file for saving the transaction pool state. note The option --tx-pool-layer-max-capacity is applicable only for layered transaction pools.","s":"Transaction pool methods and options","u":"/public-networks/concepts/transactions/pool","h":"#transaction-pool-methods-and-options","p":3809},{"i":3825,"t":"You can interact with the Besu JSON-RPC API using different transaction types (specified by the transactionType parameter). The following API objects use a unique format for each transactionType: Pending transaction object Transaction object Transaction call object Transaction receipt object","s":"Transaction types","u":"/public-networks/concepts/transactions/types","h":"","p":3824},{"i":3827,"t":"Transactions with type FRONTIER are legacy transactions that use the transaction format existing before typed transactions were introduced in EIP-2718. They contain the parameters chainId, nonce, gasPrice, gasLimit, to, value, data, v, r, and s. Legacy transactions don't use access lists or incorporate EIP-1559 fee market changes.","s":"FRONTIER transactions","u":"/public-networks/concepts/transactions/types","h":"#frontier-transactions","p":3824},{"i":3829,"t":"Transactions with type ACCESS_LIST are transactions introduced in EIP-2930. They contain, along with the legacy parameters, an accessList parameter, which specifies an array of addresses and storage keys that the transaction plans to access (an access list). ACCESS_LIST transactions must specify an access list, and they don't incorporate EIP-1559 fee market changes. Use the eth_createAccessList API to simulate a transaction which returns the addresses and storage keys that may be used to send the real transaction, and the approximate gas cost.","s":"ACCESS_LIST transactions","u":"/public-networks/concepts/transactions/types","h":"#access_list-transactions","p":3824},{"i":3831,"t":"Transactions with type EIP1559 are transactions introduced in EIP-1559. EIP-1559 addresses the network congestion and overpricing of transaction fees caused by the historical fee market, in which users send transactions specifying a gas price bid using the gasPrice parameter, and miners choose transactions with the highest bids. EIP1559 transactions don't specify gasPrice, and instead use an in-protocol, dynamically changing base fee per gas. At each block, the base fee per gas is adjusted to address network congestion as measured by a gas target. EIP1559 transactions contain, along with the accessList parameter and legacy parameters except for gasPrice, a maxPriorityFeePerGas parameter, which specifies the maximum fee the sender is willing to pay per gas above the base fee (the maximum priority fee per gas), and a maxFeePerGas parameter, which specifies the maximum total fee (base fee + priority fee) the sender is willing to pay per gas. An EIP1559 transaction always pays the base fee of the block it's included in, and it pays a priority fee as priced by maxPriorityFeePerGas or, if the base fee per gas + maxPriorityFeePerGas exceeds maxFeePerGas, it pays a priority fee as priced by maxFeePerGas minus the base fee per gas. The base fee is burned, and the priority fee is paid to the miner that included the transaction. A transaction's priority fee per gas incentivizes miners to include the transaction over other transactions with lower priority fees per gas. EIP1559 transactions must specify both maxPriorityFeePerGas and maxFeePerGas. They must not specify gasPrice.","s":"EIP1559 transactions","u":"/public-networks/concepts/transactions/types","h":"#eip1559-transactions","p":3824},{"i":3833,"t":"Shard blob transactions introduced in EIP-4844 enable scaling the Ethereum network by allowing large amounts of data (blobs) to be included that cannot be directly accessed or processed by the Ethereum Virtual Machine (EVM). When the network includes a blob-carrying transaction in a block, the transaction doesn't actually contain the blob data itself. Instead, it contains a commitment to this data. The EVM can verify this commitment to ensure the data's availability and integrity without directly accessing the data. info A commitment is a type of cryptographic proof that securely and verifiably confirms the existence and integrity of large data blobs. This mechanism significantly reduces the computational and storage burden on the Ethereum network while ensuring that the data is available for those who need it (for example, rollups or other layer 2 solutions that rely on data availability for their security and operation). Blobs are temporarily stored by consensus clients such as Teku, and blocks on the execution layer permanently store the the reference to the blob.","s":"BLOB transactions","u":"/public-networks/concepts/transactions/types","h":"#blob-transactions","p":3824},{"i":3835,"t":"Use the eth_blobBaseFee method to view the current base fee per blob gas in wei. You can also use eth_feeHistory to view the historical blob transaction cost details.","s":"View blob transaction costs","u":"/public-networks/concepts/transactions/types","h":"#view-blob-transaction-costs","p":3824},{"i":3837,"t":"Ethereum's move to proof of stake consensus has brought many changes to the way the network operates. An important aspect of proof of stake is the need for validators to provide attestations in a timely and accurate manner. However, missed attestations have become a common occurrence among validators, leading to a loss of rewards and earnings. This page explores the context behind missing attestations.","s":"Attestations","u":"/public-networks/concepts/proof-of-stake/attestations","h":"","p":3836},{"i":3839,"t":"Every epoch (6.4 minutes), a validator proposes an attestation to the network. The attestation is for a specific slot (every 12 seconds) in the epoch. The attestation votes in favor of the validator's view of the chain, in particular, the most recent justified block and the first block in the current epoch (known as source and target checkpoints). This information is collected for all participating validators, enabling the network to reach consensus about the state of the blockchain. Honest nodes have 1/3 * SECONDS_PER_SLOT (4 seconds) from the start of the slot to either receive the block or decide there was no block produced and attest to an “empty” or “skip” slot. Once this time has elapsed, attesters should broadcast their attestation reflecting their local view of the chain. See the official specification for more information about attestations.","s":"What are attestations?","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#what-are-attestations","p":3836},{"i":3841,"t":"Around 85% of validators' rewards come from making attestations. Although committee and slot assignments for attesting are randomized, every active validator will be selected to make exactly one attestation each epoch. Attestations receive rewards only if they're included in Beacon Chain blocks. An attestation contains three votes. Each vote is eligible for a reward, subject to the following conditions: Getting attestations included with the correct source checkpoint within 5 slots Getting attestations included with the correct target checkpoint within 32 slots Getting attestations included with the correct head within 1 slot immediately Each of these duties carries a reward rate, a portion of the entire \"weight denominator,\" or the sum of weighted rewards for each attestation. The remaining weights relate to participating in sync committees and proposing blocks (excluding any tips/MEV, the bulk of block rewards). The following table (from Upgrading Ethereum) breaks down these weights for cumulative rewards: Name Percentage Value TIMELY_SOURCE_WEIGHT 21.9% uint64(14) TIMELY_TARGET_WEIGHT 40.6% uint64(26) TIMELY_HEAD_WEIGHT 21.9% uint64(14) SYNC_REWARD_WEIGHT 3.1% uint64(2) PROPOSER_WEIGHT 12.5% uint64(8) WEIGHT_DENOMINATOR 100% uint64(64)","s":"Attestation rewards","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#attestation-rewards","p":3836},{"i":3843,"t":"If you have attestations with incorrect head votes, your node might be experiencing slow block imports. However, block producers can also be slow to publish blocks, resulting in a majority of validators getting the head vote wrong. A <100% head vote doesn't necessarily imply a problem with your node. In case of a slowdown, identify whether the issue is with the beacon node or the execution client. Block timing logs can be helpful in determining this. If you're using Teku as a consensus layer client, identify late blocks (the block didn't get to Teku in time) with the following kind of log: Late Block Import *** Block: c2b911533a8f8d5e699d1a334e0576d2b9aa4caa726bde8b827548b579b47c68 (4765916) proposer 6230 arrival 3475ms, pre-state_retrieved +5ms, processed +185ms, execution_payload_result_received +1436ms, begin_importing +0ms, transaction_prepared +0ms, transaction_committed +0ms, completed +21ms The time of arrival indicates how much time elapsed after the start of the slot before your node received the block. In this example, the block arrived after 3475ms, which is slower than optimal, but still enough time for Teku to create an attestation 4 seconds into the slot. Typically, delayed arrivals occur when the block producer is slow in generating the block. It's also possible that the block was published on time but took longer to propagate to your node through peer-to-peer gossip. If delayed arrivals are a recurring issue, it might be a problem with your node, such as an incorrect system clock, network issues, or a reduction in the number of peers.","s":"Incorrect attestations","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#incorrect-attestations","p":3836},{"i":3845,"t":"Attestations are complicated. Rewards can be impacted by: The contents of a block (how long it takes to compute). The hardware processing that block (execution speed). How long it takes for the block to arrive to Besu from the consensus layer. The arrival time of the block from other consensus layer peers. Besu and your consensus layer client have no control over how late into a slot they receive blocks. General network latency. The status of either Besu or the consensus layer client. Monitoring your validator carefully for uptime, execution speed, and a valid consensus layer connection will help you explore attestation performance for your node.","s":"Conclusion","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#conclusion","p":3836},{"i":3847,"t":"Upgrading Ethereum Understanding Attestation Misses Block production in Ethereum after the Merge Ethereum Consensus Specs","s":"References","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#references","p":3836},{"i":3849,"t":"For transactions submitted and added to a block, Besu validates the transactions, as illustrated in the following diagram. Besu repeats the set of transaction pool validations after propagating the transaction. Besu repeats the same set of validations when importing the block that includes the transaction, except the nonce must be exactly right when importing the block. tip Private transactions are not added to the transaction pool. The privacy marker transaction is submitted to the transaction pool but the private transaction itself is directly distributed to the transaction participants. When adding the transaction to a block, Besu performs an additional validation to check that the transaction gas limit is less than the remaining block gas limit. After creating a block, the node imports the block and then repeats the transaction pool validations. info The transaction is only added if the entire transaction gas limit is less than the remaining gas for the block. The total gas used by the transaction is not relevant to this validation. That is, if the total gas used by the transaction is less than the remaining block gas, but the transaction gas limit is more than the remaining block gas, the transaction is not added.","s":"Transaction validation","u":"/public-networks/concepts/transactions/validation","h":"","p":3848},{"i":3851,"t":"This section provides information on connecting Besu to a public Ethereum network.","s":"Connect to a network","u":"/public-networks/get-started/connect","h":"","p":3850},{"i":3853,"t":"info As a Proof of Stake network, running a full Ethereum node requires both an execution client and a consensus client. Run Besu as an execution client with any consensus client on Ethereum Mainnet. If you're using Teku as a consensus client, you can follow the Besu and Teku Mainnet tutorial.","s":"Connect to Mainnet","u":"/public-networks/get-started/connect/mainnet","h":"","p":3852},{"i":3855,"t":"Besu installed. A consensus client installed. For example, Teku.","s":"Prerequisites","u":"/public-networks/get-started/connect/mainnet","h":"#prerequisites","p":3852},{"i":3858,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"1. Generate the shared secret","u":"/public-networks/get-started/connect/mainnet","h":"#1-generate-the-shared-secret","p":3852},{"i":3860,"t":"If you're running the consensus client as a beacon node only, skip to the next step. If you're also running the consensus client as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator). Generate validator keys for one or more validators using the Staking Launchpad. info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"2. Generate validator keys","u":"/public-networks/get-started/connect/mainnet","h":"#2-generate-validator-keys","p":3852},{"i":3862,"t":"Run the following command or specify the options in a configuration file: besu \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=,127.0.0.1,localhost \\ --engine-host-allowlist=,127.0.0.1,localhost \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify: The path to the jwtsecret.hex file generated in step 1 using the --engine-jwt-secret option. The IP address of your Besu node using the --host-allowlist and --engine-host-allowlist options. Also, in the command: --rpc-http-enabled enables the HTTP JSON-RPC service. --rpc-http-host is set to 0.0.0.0 to allow remote RPC connections. --rpc-ws-enabled enables the WebSocket JSON-RPC service. --rpc-ws-host is set to 0.0.0.0 to allow remote RPC connections. --engine-rpc-enabled enables the Engine API. You can modify the option values and add other command line options as needed.","s":"3. Start Besu","u":"/public-networks/get-started/connect/mainnet","h":"#3-start-besu","p":3852},{"i":3864,"t":"Refer to your consensus client documentation to configure and start the consensus client. info If you're running a validator client, make sure you set a fee recipient address. If you're using Teku, follow the Besu and Teku Mainnet tutorial.","s":"4. Start the consensus client","u":"/public-networks/get-started/connect/mainnet","h":"#4-start-the-consensus-client","p":3852},{"i":3866,"t":"After starting Besu and the consensus client, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"SnapSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"ImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/mainnet","h":"#5-wait-for-the-clients-to-sync","p":3852},{"i":3868,"t":"Stake your ETH for one or more validators using the Staking Launchpad. You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"6. Stake ETH","u":"/public-networks/get-started/connect/mainnet","h":"#6-stake-eth","p":3852},{"i":3870,"t":"Besu supports parallel transaction execution, using an optimistic approach to parallelize transactions within a block. You can enable this feature when using the Bonsai Tries data storage format. This page provides an overview of the parallelization mechanism, and metrics that highlight Besu's improved performance. Important Parallel transaction execution is an early access feature. You can enable it using the --Xbonsai-parallel-tx-processing-enabled option.","s":"Parallel transaction execution","u":"/public-networks/concepts/parallel-transaction-execution","h":"","p":3869},{"i":3872,"t":"When parallel transaction execution is enabled, Besu initially executes all transactions within a block in parallel, operating under the optimistic assumption that they can all be executed concurrently without conflict. This parallel execution runs in the background, and Besu proceeds to sequentially process the transactions without waiting for the parallel execution to complete. The following flowchart outlines the transaction execution flow: Besu first determines if a transaction has been completed by the background parallel execution: Completed: If the transaction is completed, Besu examines whether there are any conflicts with previously executed transactions. No conflict: If no conflict is detected, Besu directly applies the state modifications generated in the background to the block, avoiding re-execution. Conflict detected: If a conflict is detected, Besu replays the transaction, using a cache of background reads to improve efficiency. Not completed: If the transaction is not completed, Besu executes it sequentially within the block to ensure its completion, independent of the background execution.","s":"Parallelization mechanism overview","u":"/public-networks/concepts/parallel-transaction-execution","h":"#parallelization-mechanism-overview","p":3869},{"i":3874,"t":"Besu's conflict detection strategy uses the accumulator, a Bonsai Tries feature that tracks addresses and slots touched or modified during block or transaction execution. tip You can read more about Bonsai Tries in Consensys' Guide to Bonsai Tries. If a slot, code, or anything else related to an account is modified, the Bonsai accumulator keeps track of this information. This strategy leverages Bonsai's storage benefits, only keeping track of block-to-block state diffs in Besu storage. The following flowchart outlines how Besu detects conflicts and imports transactions into the block: Besu takes what the accumulator tracks at the block and transaction level, compares the transaction's list of touched addresses to the block's list, and checks for conflicts. In particular: Besu identifies conflicts by checking whether a transaction has interacted with accounts modified by the block (that is, modified by previous transactions). If a conflict is detected, Besu replays the transaction using cached data or data fetched from disk. Each time a transaction is added to the block, Besu incorporates the transaction's tracked list into the block's list. Note The following are excluded from the conflict check: Unchanged accounts read by the block. Rewards given to the validator coinbase address at the end of each transaction. If these were considered, every transaction would conflict with the coinbase address. Besu identifies this address as a conflict only if it is accessed for reasons other than receiving rewards at the transaction's conclusion. The following flowchart outlines how Besu maintains the lists of tracked addresses: Besu's conflict detection strategy is intentionally simple to minimize edge cases. With this approach to parallel transaction execution, approximately 40% of transactions do not require replay. In the future, the conflict detection strategy may be refined to reduce false positives. You can enable parallel transaction execution using the --Xbonsai-parallel-tx-processing-enabled option.","s":"Conflict detection strategy","u":"/public-networks/concepts/parallel-transaction-execution","h":"#conflict-detection-strategy","p":3869},{"i":3876,"t":"Parallel transaction execution uses Besu's resources more efficiently than traditional sequential execution, significantly improving performance. The following metrics were collected on nodes running on Azure VMs (Standard D8as v5 – 8 vCPUs, 32 GiB memory), with Teku and Nimbus as consensus layer (CL) clients: Block processing time - With Teku as CL client, block processing time improves by at least 25%. The 50th percentile decreases from 282 ms to 207 ms and the 95th percentile decreases from 479 ms to 393 ms. With Nimbus as CL client, block processing improves by approximately 45%, with the 50th percentile at 155 ms, and the 95th percentile at 299 ms. Besu running with Nimbus has better performance than with Teku because Nimbus has less overhead on Besu, meaning less context switching and fewer cache misses. Execution throughput - Execution throughput increases, with an average of 96 Mgas/s and peaks of up to 250 Mgas/s. Parallel transactions - Parallel transaction execution introduces two new metrics, which indicate that approximately 40% of transactions are parallelized using this feature: besu_block_processing_parallelized_transactions_counter_total - The number of transactions executed in parallel. besu_block_processing_conflicted_transactions_counter_total - The number of transactions that encountered conflicts and were therefore executed sequentially. Sync time - Snap synchronization time is approximately 27 hours and 5 minutes, with block import time approximately 6 ms on average. CPU profiling - The new payload call time decreases from 251.68 ms to 172.04 ms on average, with notable improvements in SLOAD operation times. During the faster block processing time, Besu uses more CPU and more disk accesses in parallel (higher IOPS). However, when these metrics are averaged on different monitoring tools, the resource usage looks the same as with sequential execution. Overall, parallel transaction execution improves Besu performance with almost no resource usage overhead.","s":"Metrics","u":"/public-networks/concepts/parallel-transaction-execution","h":"#metrics","p":3869},{"i":3880,"t":"Homebrew Java JDK caution Besu supports: MacOS High Sierra 10.13 or later versions. Java 21+. You can install Java using brew install openjdk@21. Alternatively, you can manually install the Java JDK.","s":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites","p":3877},{"i":3882,"t":"To install Besu using Homebrew: brew tap hyperledger/besu brew install hyperledger/besu/besu To upgrade an existing Besu installation using Homebrew: brew upgrade hyperledger/besu/besu notes If you upgraded your MacOS version between installing and upgrading Besu, when running brew upgrade hyperledger/besu/besu you might be prompted to reinstall command line tools with xcode-select --install. When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command brew tap --repair. To display the Besu version and confirm installation: besu --version To display Besu command line help: besu --help","s":"Install (or upgrade) using Homebrew","u":"/public-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":3877},{"i":3885,"t":"Java JDK 21+ Linux open file limit If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ulimit. If the open files limit is not high enough, a Too many open files RocksDB exception occurs. tip We recommend installing jemalloc to reduce memory usage. If using Ubuntu, you can install it with the command: apt install libjemalloc-dev.","s":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":3877},{"i":3887,"t":"Download the Besu packaged binaries. Unpack the downloaded files and change into the besu- directory. Display Besu command line help to confirm installation: bin/besu --help","s":"Install from packaged binaries","u":"/public-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":3877},{"i":3889,"t":"Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets. If you're using Teku as a consensus client, you can follow the Besu and Teku testnet tutorial. note Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.","s":"Connect to a testnet","u":"/public-networks/get-started/connect/testnet","h":"","p":3888},{"i":3891,"t":"Besu installed. A consensus client installed. For example, Teku.","s":"Prerequisites","u":"/public-networks/get-started/connect/testnet","h":"#prerequisites","p":3888},{"i":3894,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"1. Generate the shared secret","u":"/public-networks/get-started/connect/testnet","h":"#1-generate-the-shared-secret","p":3888},{"i":3896,"t":"If you're running the consensus client as a beacon node only, skip to the next step. If you're also running the consensus client as a validator client, create a test Ethereum address (you can do this in MetaMask). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of Holesky faucets and Sepolia faucets. note If you can't get testnet ETH using the faucet, you can ask for help on the EthStaker Discord. Generate validator keys for one or more validators using the Holesky Staking Launchpad (or request to become validator on Sepolia). info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"2. Generate validator keys","u":"/public-networks/get-started/connect/testnet","h":"#2-generate-validator-keys","p":3888},{"i":3898,"t":"Run the following command or specify the options in a configuration file: Holesky Sepolia besu \\ --network=holesky \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= besu \\ --network=sepolia \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify the path to the jwtsecret.hex file generated in step 1 using the --engine-jwt-secret option. You can modify the option values and add other command line options as needed.","s":"3. Start Besu","u":"/public-networks/get-started/connect/testnet","h":"#3-start-besu","p":3888},{"i":3900,"t":"Refer to your consensus client documentation to configure and start the consensus client. info If you're running a validator client, make sure you set a fee recipient address. If you're using Teku, follow the Besu and Teku testnet tutorial.","s":"4. Start the consensus client","u":"/public-networks/get-started/connect/testnet","h":"#4-start-the-consensus-client","p":3888},{"i":3902,"t":"After starting Besu and the consensus client, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. This can take several days.","s":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/testnet","h":"#5-wait-for-the-clients-to-sync","p":3888},{"i":3904,"t":"Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad. You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"6. Stake ETH","u":"/public-networks/get-started/connect/testnet","h":"#6-stake-eth","p":3888},{"i":3906,"t":"Besu supports two node types, commonly referred to as full nodes and archive nodes. A full node consists of an execution and consensus client, and stores a local copy of the blockchain. With a full node, you can check current balances, sign and send transactions, and look at current dapp data. Full nodes can guarantee the latest state of the blockchain (and some older states). However, they can't serve the network with all data requests (for example, the balance of an account at an old block). An archive node is a node that also stores the intermediary state of every account and contract for every block since the genesis block. Archive nodes can do everything full nodes do, and they can also access historical state data. This means that archive nodes require more disk space than full nodes. Besu must connect with other peers to sync with the network. If your node is having trouble peering, try troubleshooting peering.","s":"Sync Besu","u":"/public-networks/get-started/connect/sync-node","h":"","p":3905},{"i":3908,"t":"To sync with a public network, Besu runs two processes in parallel: the world state sync and the blockchain download. While the world state syncs, Besu downloads and imports the blockchain in the background. The blockchain download time depends on CPU, the network, Besu's peers, and disk speed. The blockchain download generally takes longer than the world state sync. Besu must catch up to the current chain head and sync the world state to participate on Mainnet. The following table shows the average world state sync time, and blockchain download time, for each sync mode on Mainnet. All times are hardware dependent; this table is based on running AWS instances m6gd.2xlarge. Each sync mode also has its own world state database size. Sync mode Time to sync world state Time to download blockchain Disk usage Snap ~6 hours ~1.5 days Average disk Checkpoint ~5 hours ~13 hours Smallest disk Fast ~1.5 days ~1.5 days Average disk Full ~weeks ~weeks Largest disk Notes As of late 2023, an average Mainnet snap sync consumes around 1000 GB using Bonsai Tries. Read more about storage requirements across data storage formats and sync modes. Testnets take significantly less time and space to sync.","s":"Sync times","u":"/public-networks/get-started/connect/sync-node","h":"#sync-times","p":3905},{"i":3910,"t":"You can store the world state using Forest of Tries or Bonsai Tries. If you're running a full node, we recommend using Bonsai Tries for the lowest storage requirements.","s":"Storage","u":"/public-networks/get-started/connect/sync-node","h":"#storage","p":3905},{"i":3912,"t":"A full node stores a local copy of the blockchain and the current state of the blockchain. You can run a full node using snap synchronization (snap sync), checkpoint synchronization (checkpoint sync), or fast synchronization (fast sync). Sync nodes for BFT Snap sync and checkpoint sync are not supported for QBFT or IBFT 2.0 networks.","s":"Run a full node","u":"/public-networks/get-started/connect/sync-node","h":"#run-a-full-node","p":3905},{"i":3914,"t":"tip We recommend using snap sync over fast sync because snap sync can be faster than fast sync by several days (for Mainnet). We recommend using snap sync with the Bonsai data storage format for the fastest sync and lowest storage requirements. Enable snap sync using --sync-mode=SNAP. You need Besu version 22.4.0 or later to use snap sync. Instead of downloading the state trie node by node, snap sync downloads as many leaves of the trie as possible, and reconstructs the trie locally. You can't switch from fast sync to snap sync. If your node is blocked in the middle of a fast sync, you can start over using snap sync instead by stopping the node, deleting the data directory, and starting over using --sync-mode=SNAP. You can restart Besu during a snap sync in case of hardware or software problems. The sync resumes from the last valid world state and continues to download blocks starting from the last downloaded block. See how to read the Besu metrics charts when using snap sync.","s":"Snap synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#snap-synchronization","p":3905},{"i":3916,"t":"Enable checkpoint sync using --sync-mode=CHECKPOINT. You need Besu version 22.4.3 or later to use checkpoint sync. Checkpoint sync behaves like snap sync, but instead of syncing from the genesis block, it syncs from a specific checkpoint block configured in the Besu genesis file. Ethereum Mainnet and the Holesky testnet configurations already define default checkpoints, so you don't have to add this yourself. For other networks, you can configure a checkpoint in the genesis file by specifying the block hash, number, and total difficulty as in the following example. Checkpoint configuration example \"checkpoint\": { \"hash\": \"0x844d581cb00058d19f0584fb582fa2de208876ee56bbae27446a679baf4633f4\", \"number\": 14700000, \"totalDifficulty\": \"0xA2539264C62BF98CFC6\" } note If using Clique consensus, the checkpoint must be the beginning of an epoch. If you enable checkpoint sync without a checkpoint configuration in the genesis file, Besu snap syncs from the genesis block. You can restart Besu during a checkpoint sync in case of hardware or software problems. The sync resumes from the last valid world state and continues to download blocks starting from the last downloaded block.","s":"Checkpoint synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#checkpoint-synchronization","p":3905},{"i":3918,"t":"caution It might become impossible to sync Ethereum Mainnet using fast sync in the future. If you sync for the first time or ever need to re-sync, update Besu to a version that supports newer sync methods. Enable fast sync using --sync-mode=FAST. Fast sync downloads the block headers and transaction receipts, and verifies the chain of block headers from the genesis block. When starting fast sync, Besu first downloads the world state for a recent block verified by its peers (referred to as a pivot block), and then begins fast sync from the genesis block. Fast sync is the default for named networks specified using the --network option, except for the dev development network. It's also the default if connecting to Ethereum Mainnet by not specifying the --network or --genesis-file options. Using fast sync with private transactions isn't supported. You can observe the besu_synchronizer_fast_sync_* and besu_synchronizer_world_state_* metrics to monitor fast sync. note When fast syncing, block numbers increase until close to the head block, then the process pauses while the world state download completes. This may take a significant amount of time depending on world state size, during which the current head block doesn't increase. For example, Mainnet may take several days or more to fast sync. Fast sync time may increase because Besu picks new pivot blocks, or because peers prune the world state before it completes downloading. RocksDB error on AWS When running Besu on some cloud providers, a known RocksDB issue causes fast sync to fail occasionally. The following error is displayed repeatedly: EthScheduler-Services-1 (importBlock) | ERROR | PipelineChainDownloader | Chain download failed. Restarting after short delay. java.util.concurrent.CompletionException: org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: block checksum mismatch: The failure has been seen on AWS and Digital Ocean. On AWS, A full restart of the VM is required to restart the fast sync. Fast sync isn't currently supported on Digital Ocean. Pending state nodes stays constant When fast syncing, the pending state nodes count is the number of nodes yet to be downloaded, and it should change constantly. Pending state nodes trend to 0 during fast sync and then goes to 0. If the number stays constant, this could mean your node isn't syncing against any peers. In the following example, the pivot block is 0 and the pending state nodes value is constant. This means the node isn't syncing against any peers. The fact that state nodes have been downloaded means at some stage it was syncing. The easiest solution in this scenario is to restart fast sync to obtain a new pivot block.","s":"Fast synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#fast-synchronization","p":3905},{"i":3920,"t":"An archive node stores all historical states of the blockchain. To run an archive node, enable full synchronization (full sync) using --sync-mode=FULL. Full sync starts from the genesis block and reprocesses all transactions. important Do not run an archive node with the Bonsai Tries data storage format. Bonsai is designed for retrieving recent data only.","s":"Run an archive node","u":"/public-networks/get-started/connect/sync-node","h":"#run-an-archive-node","p":3905},{"i":3922,"t":"Migrate from a different Ethereum execution client to Besu to contribute to client diversity. To migrate from a different client, configure Besu as an execution client and connect your consensus client to Besu instead of your original execution client. To minimize downtime while Besu syncs and avoid downtime penalties, you can sync Besu with a new consensus layer instance. Once Besu has fully synced you can connect it to your existing consensus client. Find guides to switch from specific clients on the client diversity website.","s":"Migrate to Besu","u":"/public-networks/get-started/migrate-to-besu","h":"","p":3921},{"i":3924,"t":"Docker image Binaries","s":"Installation options","u":"/public-networks/get-started/install","h":"","p":3923},{"i":3926,"t":"If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the binary or Docker image for more stable versions. View the Wiki for instructions to install Besu from source.","s":"Build from source","u":"/public-networks/get-started/install","h":"#build-from-source","p":3923},{"i":3928,"t":"Nodes can connect to Ethereum Mainnet and public testnets. Use the besu command with the required command line options to start a node.","s":"Start Besu","u":"/public-networks/get-started/start-node","h":"","p":3927},{"i":3930,"t":"Besu installed","s":"Prerequisites","u":"/public-networks/get-started/start-node","h":"#prerequisites","p":3927},{"i":3932,"t":"When connecting to a network other than the network previously connected to, you must either delete the local block data or use the --data-path option to specify a different data directory. To delete the local block data, delete the database directory in the besu/build/distribution/besu- directory.","s":"Local block data","u":"/public-networks/get-started/start-node","h":"#local-block-data","p":3927},{"i":3934,"t":"Besu specifies the genesis configuration, and sets the network ID and bootnodes when connecting to Holesky, Sepolia, and Mainnet. info The Ropsten, Rinkeby, and Kiln testnets are deprecated. When you specify --network=dev, Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with --network=dev has an empty bootnodes list by default. The genesis files defining the genesis configurations are in the Besu source files. To define a genesis configuration, create a genesis file (for example, genesis.json) and specify the file using the --genesis-file option.","s":"Genesis configuration","u":"/public-networks/get-started/start-node","h":"#genesis-configuration","p":3927},{"i":3936,"t":"By default, Besu syncs to the current state of the blockchain using fast sync in: Networks specified using --network except for the dev development network. Ethereum Mainnet. We recommend using snap sync for a faster sync, by starting Besu with --sync-mode=SNAP. By default, Besu stores data in the Forest of Tries format. We recommend using Bonsai Tries for lower storage requirements, by starting Besu with --data-storage-format=BONSAI.","s":"Syncing and storage","u":"/public-networks/get-started/start-node","h":"#syncing-and-storage","p":3927},{"i":3938,"t":"To run a node that mines blocks at a rate suitable for testing purposes: besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --host-allowlist=\"*\" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir You can also use the following configuration file on the command line to start a node with the same options as above: network=\"dev\" miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" rpc-http-cors-origins=[\"all\"] host-allowlist=[\"*\"] rpc-ws-enabled=true rpc-http-enabled=true data-path=\"/tmp/tmpdata-path\" Warning The following settings are a security risk in production environments: Enabling the HTTP JSON-RPC service (--rpc-http-enabled) and setting --rpc-http-host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. Setting --host-allowlist to \"*\" allows JSON-RPC API access from any host. Setting --rpc-http-cors-origins to \"all\" or \"*\" allows cross-origin resource sharing (CORS) access from any domain.","s":"Run a node for testing","u":"/public-networks/get-started/start-node","h":"#run-a-node-for-testing","p":3927},{"i":3940,"t":"To run a node on Holesky specifying a data directory: besu --network=holesky --data-path=/ Where and are the path and directory to save the Holesky chain data to. See the guide on connecting to a testnet for more information.","s":"Run a node on Holesky testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-holesky-testnet","p":3927},{"i":3942,"t":"To run a node on Sepolia specifying a data directory: besu --network=sepolia --data-path=/ Where and are the path and directory to save the Sepolia chain data to. See the guide on connecting to a testnet for more information.","s":"Run a node on Sepolia testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-sepolia-testnet","p":3927},{"i":3944,"t":"To run a node on the Ethereum Mainnet: besu To run a node on Mainnet with the HTTP JSON-RPC service enabled and available for localhost only: besu --rpc-http-enabled See the guide on connecting to Mainnet for more information.","s":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-ethereum-mainnet","p":3927},{"i":3946,"t":"If you started Besu with the --rpc-http-enabled option, use cURL to call JSON-RPC API methods to confirm the node is running. eth_chainId returns the chain ID of the network. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' localhost:8545 eth_syncing returns the starting, current, and highest block. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}' localhost:8545 For example, after connecting to Mainnet, eth_syncing will return something similar to: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x2d0\", \"highestBlock\": \"0x66c0\" } }","s":"Confirm node is running","u":"/public-networks/get-started/start-node","h":"#confirm-node-is-running","p":3927},{"i":3948,"t":"Besu provides a Docker image to run a Besu node in a Docker container. Use this Docker image to run a single Besu node without installing Besu.","s":"Run Besu from a Docker image","u":"/public-networks/get-started/install/run-docker-image","h":"","p":3947},{"i":3950,"t":"Docker MacOS or Linux info The Docker image doesn't run on Windows.","s":"Prerequisites","u":"/public-networks/get-started/install/run-docker-image","h":"#prerequisites","p":3947},{"i":3952,"t":"To run a Besu node in a container connected to the Ethereum Mainnet: docker run hyperledger/besu:latest note https://hub.docker.com/r/hyperledger/besu/tags lists the available tags for the image. If you previously pulled latest, Docker runs the cached version. To ensure your image is up to date, pull the latest version again using docker pull hyperledger/besu:latest.","s":"Default node for Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#default-node-for-mainnet","p":3947},{"i":3954,"t":"Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using --rpc-http-port, --p2p-port, --rpc-ws-port, --metrics-port, --graphql-http-port, and --metrics-push-port options. To run Besu exposing local ports for access: docker run -p :8545 -p :8546 -p :30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled note The examples on this page expose TCP ports only. To expose UDP ports, specify /udp at the end of the argument for the -p Docker subcommand option: docker run -p :/udp See the docker run -p documentation. To enable JSON-RPC HTTP calls to 127.0.0.1:8545 and P2P discovery on 127.0.0.1:13001: docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled","s":"Expose ports","u":"/public-networks/get-started/install/run-docker-image","h":"#expose-ports","p":3947},{"i":3956,"t":"danger Don't mount a volume at the default data path (/opt/besu). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching. To run a node that maintains the node state (key and database), --data-path must be set to a location other than /opt/besu and a storage volume mounted at that location. When running in a Docker container, --nat-method must be set to DOCKER or AUTO (default). Don't set --nat-method to NONE or UPNP. You can specify Besu environment variables with the Docker image instead of the command line options. Example docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest Unsupported address type exception When running Besu from a Docker image, you might get the following exception: Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime. This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker. Enable IPv6 support in Docker to allow outbound IPv6 traffic and allow connection with IPv6 peers.","s":"Start Besu","u":"/public-networks/get-started/install/run-docker-image","h":"#start-besu","p":3947},{"i":3958,"t":"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled: docker run -p 8546:8546 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu","s":"Run a node for testing","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":3947},{"i":3960,"t":"To run a node on Holesky: docker run -p 30303:30303 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --network=holesky --data-path=/var/lib/besu","s":"Run a node on Holesky testnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-holesky-testnet","p":3947},{"i":3962,"t":"To run a node on Ethereum Mainnet with the HTTP JSON-RPC service enabled: docker run -p 8545:8545 --mount type=bind,source=/,target=/var/lib/besu -p 30303:30303 hyperledger/besu:latest --rpc-http-enabled --data-path=/var/lib/besu","s":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-ethereum-mainnet","p":3947},{"i":3964,"t":"When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run docker container ls and docker volume ls to get the container and volume names. To stop a container: docker stop To delete a container: docker rm ","s":"Stop Besu and clean up resources","u":"/public-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":3947},{"i":3966,"t":"Determine public network system requirements by checking CPU and disk space requirements using Prometheus. Grafana provides a sample dashboard for Besu. tip CPU requirements are highest when syncing to the network and typically reduce after the node is synchronized to the chain head.","s":"System requirements","u":"/public-networks/get-started/system-requirements","h":"","p":3965},{"i":3968,"t":"Besu requires an installation of Java 21+ to run. We currently recommend two Java distributions, OpenJDK 21 and OpenJ9, though you can experiment based on your needs. OpenJDK is the default for many Java users and is balanced in performance and garbage collection. OpenJ9 consumes less memory and system resources, but can have worse performance on some setups. If you have more than 32GB RAM (for Besu and your consensus client), use OpenJDK. If you have less RAM: If you're on Linux (or Unix-based) and your CPU is x86-64 bit architecture (like Intel), use OpenJ9. If you're on ARM-64 CPU architecture (Mac M-series, Raspberry Pi), use OpenJDK. If you have OpenJDK installed or need a fresh installation of OpenJ9, you can pick up the OpenJ9 docker image, or install the OpenJ9 JDK using the following steps: Get the binaries corresponding to your OS architecture. For example: wget https://github.com/ibmruntimes/semeru21-certified-binaries/releases/download/jdk-21.0.3%2B9_openj9-0.44.0/ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz Uncompress the binaries: Command Example tar -xvf YOUR_J9_IMAGE.tar.gz tar -xvf ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz Move the binaries to bin directory: Command Example sudo cp -r YOUR_IMAGE/ /usr/bin/ sudo cp -r jdk-21.0.3+9/ /usr/bin/ Specify OpenJ9 for Java on your machine: Command Example sudo update-alternatives --install \"/usr/bin/java\" \"java\" \"/usr/bin/YOUR_IMAGE\" 1 sudo update-alternatives --config java (and choose OpenJ9) sudo update-alternatives --install \"/usr/bin/java\" \"java\" \"/usr/bin/jdk-21.0.3+9/bin/java\" Change your JAVA_HOME to OpenJ9 (if using the JDK implementation), where jdk-install-dir is the installation location you specified: Command Example export JAVA_HOME=jdk-install-dir` export JAVA_HOME=/usr/bin/jdk-21.0.3+9","s":"Java distribution and installation","u":"/public-networks/get-started/system-requirements","h":"#java-distribution-and-installation","p":3965},{"i":3970,"t":"For Mainnet and testnets, the minimum Java Virtual Machine (JVM) memory requirement is 8 GB. JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs.","s":"Java Virtual Machine size","u":"/public-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":3965},{"i":3972,"t":"Fast synchronization with pruning enabled requires approximately 750 GB of disk space. Full synchronization requires approximately 3 TB.","s":"Disk space","u":"/public-networks/get-started/system-requirements","h":"#disk-space","p":3965},{"i":3974,"t":"Use local SSD storage for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup. You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.","s":"Disk type","u":"/public-networks/get-started/system-requirements","h":"#disk-type","p":3965},{"i":3976,"t":"We are running 22.4.2 Mainnet nodes using m6gd.2xlarge boxes. We synchronized the 22.4.2 Mainnet nodes using m6gd.2xlarge boxes. Using a larger box while synchronizing speeds up the sync process by giving it more resources. When the sync is completed, the box size can be reduced. caution If you are using a more recent release than 22.4.2, resource requirements may have increased.","s":"AWS requirements","u":"/public-networks/get-started/system-requirements","h":"#aws-requirements","p":3965},{"i":3978,"t":"Besu comes with a default configuration that is suitable for staking. You can override the default values by specifying configuration options on the command line, as environment variables, or in a TOML configuration file that can be reused across node startups. You can also use a pre-configured profile for some common use cases or create and apply a custom profile.","s":"Configure Besu","u":"/public-networks/how-to/configure-besu","h":"","p":3977},{"i":3980,"t":"For options specified in multiple places, the order of precedence is as follows: Command line Environment variable Configuration file specified by --config-file Pre-configured profile specified by --profile Default values (used if no other configuration source is available) For example, if you specify a config.toml configuration file and staker profile, and an option is not found in the environment variables, Besu looks for it in config.toml. If the option is not found in config.toml, Besu looks for it in staker.toml. If the option is not found in staker.toml, Besu uses the default value for that option.","s":"Configuration order of precedence","u":"/public-networks/how-to/configure-besu","h":"#configuration-order-of-precedence","p":3977},{"i":3982,"t":"note The configuration file is used for node-level settings. You can specify network-wide settings in the genesis file. Specify the configuration file using the --config-file option. The configuration file must be a valid TOML file composed of key/value pairs. Each key is the same as the corresponding command line option name without the leading dashes (--). Values must conform to TOML specifications for string, numbers, arrays, and booleans. Specific differences between the command line and the TOML file format are: Comma-separated lists on the command line are string arrays in the TOML file. Enclose file paths, hexadecimal numbers, URLs, and values in quotes. Table headings are ignored in TOML files. If you specify a valid Besu option under a table heading in the configuration file, Besu ignores the table heading and reads the option in the same way it does for options not under table headings. tip The command line reference includes configuration file examples for each option. Sample TOML configuration file # Valid TOML config file data-path=\"~/besudata\" # Path # Network bootnodes=[\"enode://001@123:4567\", \"enode://002@123:4567\", \"enode://003@123:4567\"] p2p-host=\"1.2.3.4\" p2p-port=1234 max-peers=42 rpc-http-host=\"5.6.7.8\" rpc-http-port=5678 rpc-ws-host=\"9.10.11.12\" rpc-ws-port=9101 # Chain genesis-file=\"~/genesis.json\" # Path to the custom genesis file # Mining miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" Starting Besu with a configuration file besu --config-file=/home/me/me_node/config.toml","s":"TOML configuration file","u":"/public-networks/how-to/configure-besu","h":"#toml-configuration-file","p":3977},{"i":3984,"t":"The following tables describe important default values of Besu's configuration. When using the default configuration, Besu is optimized for staking. You can extend these defaults using a profile. For example, extending the default configuration using the staker profile directs Besu to use Mainnet, creating a staking-optimized node ready to run with a validator and consensus client.","s":"Default configuration","u":"/public-networks/how-to/configure-besu","h":"#default-configuration","p":3977},{"i":3986,"t":"Configuration option Default Description discovery-enabled true Besu assumes the node will automatically discover other Ethereum nodes using P2P. p2p-enabled true Besu assumes the node will connect P2P. engine-rpc-enabled true Besu assumes the Engine API will be required to communicate with the consensus layer.","s":"Peering","u":"/public-networks/how-to/configure-besu","h":"#peering","p":3977},{"i":3988,"t":"Configuration option Default Description data-storage-format BONSAI Besu uses Bonsai Tries, the most space-efficient data storage format.","s":"Storage","u":"/public-networks/how-to/configure-besu","h":"#storage","p":3977},{"i":3990,"t":"Configuration option Default Description sync-mode SNAP Besu syncs using snap sync, the most time-efficient sync method. note You can see all default configuration values in the configuration options reference.","s":"Sync","u":"/public-networks/how-to/configure-besu","h":"#sync","p":3977},{"i":3992,"t":"You can load a profile to extend Besu's default configuration, using the --profile option. Profiles simplify the process of configuring Besu for common use cases. Besu provides the following pre-configured profiles: Minimalist staker profile Staker profile Enterprise/Private profile Alternatively, you can customize and load external profiles. note Run ./besu --help to view all available profiles. note A configuration option specified in the configuration file or on the command line overrides the same option set in the profile.","s":"Use a profile","u":"/public-networks/how-to/configure-besu/profile","h":"","p":3991},{"i":3994,"t":"--profile=MINIMALIST_STAKER is optimized for stakers who want to maximize their hardware value but don't want to serve full sets of data to their peers, See the minimalist staker profile on GitHub for the custom settings.","s":"Minimalist staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#minimalist-staker-profile","p":3991},{"i":3996,"t":"--profile=STAKER is optimized for stakers who want to maximize their hardware value while also serving full sets of data to their peers. See the staker profile on GitHub for the custom settings.","s":"Staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#staker-profile","p":3991},{"i":3998,"t":"ENTERPRISE and PRIVATE are aliases for the same profile. --profile=PRIVATE / --profile=ENTERPRISE supports private network operators and enterprises by handling specific use cases that apply to private network operators. See the enterprise/private profile on GitHub for the custom settings. When using this profile, set --sync-mode=FULL and --data-storage-format=FOREST.","s":"Enterprise/Private profile","u":"/public-networks/how-to/configure-besu/profile","h":"#enterpriseprivate-profile","p":3991},{"i":4000,"t":"You can use external profiles to create custom Besu bundles with various plugins and their default options. Add external profiles to a profiles directory under the root Besu directory. Run Besu with --profile set to the external profile file name, without the .toml extension. For example, to load the profiles/custom_profile.toml profile, run: besu --profile=custom_profile note You can overwrite the directory in which to place external profiles using the besu.profiles.dir system property.","s":"Load external profiles","u":"/public-networks/how-to/configure-besu/profile","h":"#load-external-profiles","p":3991},{"i":4002,"t":"To enable high availability to the RPC Pub/Sub API over WebSocket or the JSON-RPC API, run and synchronize more than one Besu node to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests. tip We don't recommend putting bootnodes behind a load balancer. info We recommend using load balancers over WebSockets because WebSockets are persistent connections associated with specific nodes. If you use load balancers configured in sticky mode over HTTP instead, the connection sticks to the associated node even when the node is congested and there is a lower load node available. If you use load balancers not configured in sticky mode over HTTP, the connections may switch from node to node, so some JSON-RPC requests may not provide expected results (for example, admin methods, net_enode, net_peerCount, and eth_syncing).","s":"High availability of JSON-RPC and RPC Pub/Sub APIs","u":"/public-networks/how-to/configure-ha","h":"","p":4001},{"i":4004,"t":"Use the readiness endpoint to determine when a node is ready. note The minimum number of peers and number of blocks from the best known block for determining if a node considered ready is deployment specific.","s":"Determine when a node is ready","u":"/public-networks/how-to/configure-ha","h":"#determine-when-a-node-is-ready","p":4001},{"i":4006,"t":"Besu obtains the nonce for the next transaction using eth_getTransactionCount. The nonce depends on the transactions in the transaction pool. If sending eth_getTransactionCount and eth_sendRawTransaction requests for a specific account to more than one node, the eth_getTransactionCount results might be incorrect. note If using private transactions, retrieve the nonce using priv_getTransactionCount or priv_getEeaTransactionCount and send the private transactions using eea_sendRawTransaction. To get correct nonces when distributing requests across a cluster, either: Track the next nonce outside of the Besu node (as MetaMask does). Configure the load balancer in sticky mode to send requests from a specific account to a single node, unless that node is unavailable.","s":"Transaction nonces","u":"/public-networks/how-to/configure-ha","h":"#transaction-nonces","p":4001},{"i":4008,"t":"You can subscribe to events using: RPC Pub/Sub over WebSockets. Filters over HTTP. We recommend using RPC Pub/Sub over WebSocket because WebSockets connections associate with a specific node and do not require using the load balancer in sticky mode. If using filters over HTTP, configure the load balancer in sticky mode to associate the subscription with a specific node.","s":"Subscriptions","u":"/public-networks/how-to/configure-ha","h":"#subscriptions","p":4001},{"i":4010,"t":"Dropped subscriptions can occur because of: A disconnected WebSockets connection The removal of the node serving the subscription from the ready pool. If there is a dropped subscription, missed events might occur while reconnecting to a different node. To recover dropped messages, create another subscription and follow the process for that subscription type: newHeads logs newPendingTransactions droppedPendingTransactions syncing.","s":"Recover from dropped subscriptions","u":"/public-networks/how-to/configure-ha","h":"#recover-from-dropped-subscriptions","p":4001},{"i":4012,"t":"To request information on blocks from the last block before the subscription dropped to the first block received from the new subscription, use eth_getBlockByNumber.","s":"New headers","u":"/public-networks/how-to/configure-ha","h":"#new-headers","p":4001},{"i":4014,"t":"To request logs from the block number of the last log received before the subscription dropped to the current chain head, use eth_getLogs.","s":"Logs","u":"/public-networks/how-to/configure-ha","h":"#logs","p":4001},{"i":4016,"t":"To request all pending transactions for the new node, use txpool_besuTransactions. note Nodes do not all store the same pending transactions.","s":"New pending transactions","u":"/public-networks/how-to/configure-ha","h":"#new-pending-transactions","p":4001},{"i":4018,"t":"To request all pending transactions for the new node, use txpool_besuTransactions. note Nodes do not all store the same pending transactions.","s":"Dropped pending transactions","u":"/public-networks/how-to/configure-ha","h":"#dropped-pending-transactions","p":4001},{"i":4020,"t":"The syncing state of each node is specific to that node. To retrieve the syncing state of the new node, use eth_syncing.","s":"Syncing","u":"/public-networks/how-to/configure-ha","h":"#syncing","p":4001},{"i":4023,"t":"For AWS, we recommend the Classic Load Balancer. The Classic Load Balancer is the easiest to configure and work with. Register the Besu instances to the load balancer and use the liveness endpoint for health checks. For finer grain control, use the Application Load Balancer: Configure one target group with n nodes. Configure multiple listeners with one per port (for example, 30303, 8545) you are using and route to the target group. Use the liveness endpoint for health checks. Register the Besu instances multiple times with different ports. This is like configuring microservices on Elastic Container Service (ECS) or Elastic Kubernetes Service (EKS).","s":"AWS","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#aws","p":4021},{"i":4025,"t":"With either AWS load balancer, you can add certificates using ACM (Amazon Certificate Manager), add them to the load balancers, and redirect all HTTP calls to HTTPS.","s":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection","p":4021},{"i":4027,"t":"For Elastic Kubernetes Service (AWS Kubernetes service) use the same load balancer configuration as when running nodes in Kubernetes. Use labels to specify nodes for the load balanced group.","s":"Elastic Kubernetes Service","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#elastic-kubernetes-service","p":4021},{"i":4029,"t":"Where applicable, we strongly recommend using service discovery. That is, pair your load balancer configuration with something that dynamically detects new nodes and removed failed nodes. For Nginx, use multiple upstreams (one for each port). Pair each upstream with a separate server block. Upstreams paired with server blocks upstream discovery_tcp_30303 { server 10.0.1.1:30303; server 10.0.1.2:30303; } upstream rpc_tcp_8545 { server 10.0.1.1:8545; server 10.0.1.2:8545; } server { listen 30303; server_name some.host; location / { proxy_pass http://discovery_tcp_30303; } } server { listen 8545; server_name some.host; location / { proxy_pass http://rpc_tcp_8545; } } ... For HAProxy, create multiple backend and frontend sets. Multiple backend and frontend sets frontend discovery-tcp-30303 bind *:30303 acl ... ... default_backend back-discovery-tcp-30303 frontend rpc-tcp-8545 bind *:8545 acl ... ... default_backend back-rpc-tcp-8545 backend back-discovery-tcp-30303 balance leastconn server node-01 10.0.1.1:30303 weight 1 check server node-02 10.0.1.2:30303 weight 1 check option ... timeout server 600s backend back-rpc-tcp-8545 balance leastconn server node-01 10.0.1.1:8545 weight 1 check server node-02 10.0.1.2:8545 weight 1 check option .... timeout server 600s ...","s":"Manual configurations","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#manual-configurations","p":4021},{"i":4031,"t":"To add HTTPS capability, update the above server blocks to include the certificates and specific ciphers. If you require an HTTP to HTTPS redirection, add separate blocks to return a 301 code with the new URI.","s":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection-1","p":4021},{"i":4033,"t":"Java Flight Recorder (JFR) is a monitoring tool that collects information about the Java Virtual Machine (JVM) when Besu is running. Use the JFR as a tool to analyze Besu performance.","s":"Use Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","h":"","p":4032},{"i":4035,"t":"To enable JFR, set BESU_OPTS to the JFR tags as follows: export BESU_OPTS=-XX:StartFlightRecording=disk=true,delay=15s,dumponexit=true,\\ filename=/tmp/recording.jfr,maxsize=1024m,maxage=1d,\\ settings=profile,path-to-gc-roots=true tip When recording, cleanly exiting Besu results in better data. If not possible to cleanly exit, the file may be missing some information not flushed to disk. Inspect the file written to /tmp/recording.jfr with tools such as Mission Control. danger If providing the output file to ConsenSys Quorum support, be aware that while JFR files don't contain secrets such as private keys, some details about the user configuration can be inferred from the JFR output.","s":"Enable Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","h":"#enable-java-flight-recorder","p":4032},{"i":4037,"t":"There are many flavors of Java and the Java Virtual Machine (JVM) that work with Besu. They might impact performance, start time, and more. Consider the options carefully when installing Java on your host machine. Currently, we recommend Java 21.","s":"Install and update Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"","p":4036},{"i":4039,"t":"Download the version of Java you would like to install. If you are running Besu outside a virtual environment, like Docker, you must have Java installed on the host machine. tip Download OpenJDK 21. You can find platform-specific installation instructions with the download. The following installation examples use OpenJDK.","s":"Install Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java","p":4036},{"i":4041,"t":"You can install OpenJDK on Ubuntu using the apt-get command. Ensure apt libraries are installed and up-to-date: sudo apt update && sudo apt upgrade -y Confirm whether Java is already installed: java -version If a version is returned, and you would like to update, see how to update Java on Ubuntu. If no version is returned, use apt to install the preferred version. sudo apt-get install openjdk-21-jdk Confirm the installation: java -version You might need to update your environment to make Java visible to Besu. Edit the .bashrc file in your home directory (or create it if needed) and add the following lines to the end of the file: .bashrc export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) export PATH=$PATH:$JAVA_HOME/bin Save your changes and source the file: source ~/.bashrc Verify that you updated your environment: echo $JAVA_HOME echo $PATH You should see the JDK versions output.","s":"Install Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-ubuntu","p":4036},{"i":4043,"t":"You can install OpenJDK on MacOS using Homebrew. With brew installed, run: brew install openjdk@21 You can target another version if you prefer. Confirm the installation: java -version The OpenJDK version you install should display. If this command returns command not found: java, check your terminal logs. Brew might prompt you to create a symlink or update your path variables within the logs in the terminal output. If so, run the prompts provided.","s":"Install Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-macos","p":4036},{"i":4046,"t":"To update Java on Ubuntu, uninstall the current versions and follow the instructions to install Java on Ubuntu with your target version. If you started with this guide, you can uninstall Java using the following command: sudo apt-get purge openjdk-\\*","s":"Update Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-ubuntu","p":4036},{"i":4048,"t":"You can update Java on MacOS using Homebrew. List your Homebrew packages: brew ls To update the JDK version (for example, from 17 to 21), uninstall the old version and reinstall the target version: brew uninstall openjdk@17 brew install openjdk@21 note If you installed a version of Java not using Homebrew, it is located at /Library/Java/JavaVirtualMachines and can be safely deleted from that directory. To update point versions of Java, run the upgrade command: brew upgrade openjdk","s":"Update Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-macos","p":4036},{"i":4050,"t":"You can manage Java Virtual Machine (JVM) memory usage for Besu by modifying the maximum heap size. By default, the JVM uses 25% of system RAM. For example, if you have 16 GB RAM installed, the JVM uses 4 GB by default. On public networks, we recommend setting the maximum heap size to: 3 GB on an 8 GB RAM system. 5 GB on a 16 GB RAM system. 8 GB on a system with at least 24 GB RAM. note Setting a higher maximum heap size speeds up the sync period but doesn't have much impact after sync. Thus, we recommend setting it to 8 GB only when you have available RAM. You can set the maximum heap size using the BESU_OPTS environment variable and the -Xmx option. The following examples set the maximum heap size to 8 GB: Exported environment variable Inline environment variable .service file Set the variable for the whole shell before running Besu. export BESU_OPTS=-Xmx8g Set the variable only for the specific Besu command. BESU_OPTS=-Xmx8g besu [Besu options] [Service] ... Environment=\"BESU_OPTS=-Xmx8g\" ExecStart=besu [Besu options] ...","s":"Manage JVM memory","u":"/public-networks/how-to/configure-java/manage-memory","h":"","p":4049},{"i":4052,"t":"Heap dump file generation is disabled by default. To enable it, set the -XX:+HeapDumpOnOutOfMemoryError Java option. BESU_OPTS=\"-XX:+HeapDumpOnOutOfMemoryError\" When heap dump file generation is enabled, and an out-of-memory error occurs, the heap dump file is saved in the Besu runtime directory by default. The heap dump file might be large and can saturate your drive. It can be up to the size of the allocated memory. For example, for 8 GB heap memory, the file can be up to 8 GB. Specify the directory where you want the dump to be saved using the -XX:HeapDumpPath Java option. BESU_OPTS=\"-XX:HeapDumpPath=///\"","s":"Manage the heap dump","u":"/public-networks/how-to/configure-java/manage-memory","h":"#manage-the-heap-dump","p":4049},{"i":4054,"t":"To reduce Besu memory footprint, the following G1GC Java options are enabled by default: -XX:G1ConcRefinementThreads=2 -XX:G1HeapWastePercent=15 -XX:MaxGCPauseMillis=100 To run Besu without the default G1GC options, use the besu-untuned start script.","s":"Default options","u":"/public-networks/how-to/configure-java/manage-memory","h":"#default-options","p":4049},{"i":4056,"t":"To perform tasks such as attaching a debugger or configuring the garbage collector, pass Java Virtual Machine (JVM) options to Besu. Besu passes the contents of the BESU_OPTS environment variable to the JVM. Set standard JVM options in the BESU_OPTS variable. For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu. BESU_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \\ besu --network=holesky","s":"Pass JVM options","u":"/public-networks/how-to/configure-java/pass-jvm-options","h":"","p":4055},{"i":4058,"t":"When using the Bonsai Tries data storage format, --bonsai-limit-trie-logs-enabled is enabled by default. When enabled, this feature can reduce database growth by more than 3 GB each week on Mainnet. note If --sync-mode=FULL is set, the --bonsai-limit-trie-logs-enabled option is disallowed and must be set to false.","s":"Reduce storage for Bonsai Tries","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"","p":4057},{"i":4060,"t":"If you're running Besu without --bonsai-limit-trie-logs-enabled, you might have a backlog of redundant trie logs. You can prune these using the following instructions. note Ensure you are using Besu version 24.6.0 or later. If you are using an older version, upgrade Besu or refer to the older version of the documentation. caution The following commands are examples. Before executing these example commands on your node, modify them to apply to your node's configuration. Stop Besu. (Optional) Run the Besu trie log prune command. Specify the Bonsai Trie data storage format and the data directory for your Besu database: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune Start Besu. Look for Limit trie logs enabled: retention: 512; prune window: 30000 in your Besu configuration printout at startup.","s":"Limit and prune trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#limit-and-prune-trie-logs","p":4057},{"i":4062,"t":"When you start Besu with --bonsai-limit-trie-logs-enabled, it continuously prunes the unnecessary trie log data, removing it one block at a time. This process begins after an initial reduction in the database size during startup. Enabling --bonsai-limit-trie-logs-enabled on a long-running node does not immediately clear your backlog of trie logs in the same way resyncing does. Instead of resyncing, you can run an offline command to immediately prune old trie logs. To run the offline command, you must shut down Besu for a minimal period. If the --bonsai-limit-trie-logs-enabled option is enabled, you do not need to run the offline command again after initially running it. For minimal downtime, we recommend running the offline command before restarting Besu with --bonsai-limit-trie-logs-enabled. If you are following the guides by Somer Esat or CoinCashew, you have set the following options in your besu.service or execution.service systemd file: ... ExecStart=/usr/local/bin/besu/bin/besu \\ ... --sync-mode=SNAP \\ --data-path=\"/var/lib/besu\" \\ --data-storage-format=BONSAI \\ ... To prune trie logs, the command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune The logs should look similar to the following: 2024-02-02 05:45:41.162+00:00 | main | INFO | KeyPairUtil | Attempting to load public key from /data/besu/key ... 2024-02-02 05:45:43.433+00:00 | main | INFO | TrieLogSubCommand | Estimating trie logs size before pruning... 2024-02-02 05:45:43.837+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size before pruning: 9 GiB 2024-02-02 05:46:09.863+00:00 | main | INFO | TrieLogHelper | Starting pruning: retain 512 trie logs, processing in 1 batches... 2024-02-02 05:46:09.918+00:00 | main | INFO | TrieLogHelper | Saving trie logs to retain in file /data/besu/database/trieLogsToRetain-1 (batch 1)... 2024-02-02 05:46:09.926+00:00 | main | INFO | TrieLogHelper | Obtaining trielogs from db, this may take a few minutes... 2024-02-02 05:46:10.100+00:00 | main | INFO | TrieLogHelper | Clear trie logs... 2024-02-02 05:46:10.155+00:00 | main | INFO | TrieLogHelper | Restoring trie logs retained from batch 1... 2024-02-02 05:46:10.222+00:00 | main | INFO | TrieLogHelper | Key(0): 0xcd50706da7f6f2db7f9d54f3589122760900d9ab2508c20a4ca40b496d930368 ... 2024-02-02 05:46:10.336+00:00 | main | INFO | TrieLogHelper | Key(511): 0x238f9649b59616430ad7e43b8f3cf65bc97cac4aa54a3eddf3ad6ee666ce733e 2024-02-02 05:46:10.441+00:00 | main | INFO | TrieLogHelper | Deleting files... 2024-02-02 05:46:10.446+00:00 | main | INFO | TrieLogSubCommand | Finished pruning. Re-estimating trie logs size... 2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size after pruning: 0 B (0 B estimate is normal when using default settings) 2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Prune ran successfully. We estimate you freed up 9 GiB! Prune ran successfully. We estimate you freed up 9 GiB! If you are using a TOML configuration file, you can run a command similar to the following: sudo /usr/local/bin/besu/bin/besu --config-file=besu-config.toml storage trie-log prune","s":"Prune outdated trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-outdated-trie-logs","p":4057},{"i":4064,"t":"Troubleshoot common errors that can occur when using the trie log prune command to reduce your database size for Bonsai Tries. To minimize errors, ensure your command specifies the following: --data-storage-format --data-path --sync-mode","s":"Troubleshoot","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#troubleshoot","p":4057},{"i":4066,"t":"The prune command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune Ensure you stop Besu before running the command.","s":"Prune command for Mainnet","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-command-for-mainnet","p":4057},{"i":4068,"t":"java.lang.IllegalArgumentException: Subcommand only works with data-storage-format=BONSAI The --data-storage-format=BONSAI might be missing. To resolve, add the storage format. The command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune","s":"Subcommand not working","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#subcommand-not-working","p":4057},{"i":4070,"t":"java.lang.RuntimeException: Column handle not found for segment TRIE_BRANCH_STORAGE Ensure you specify --data-path. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Column handle not found for segment TRIE_BRANCH_STORAGE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-trie_branch_storage","p":4057},{"i":4072,"t":"java.lang.IllegalArgumentException: Trying to retain more trie logs than chain length (0), skipping pruning Ensure you specify the correct --data-path for your node. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Database not detected","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#database-not-detected","p":4057},{"i":4074,"t":"java.lang.IllegalArgumentException: Cannot store generated private key Ensure you specify the correct --data-path for your node. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Cannot store generated private key","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-store-generated-private-key","p":4057},{"i":4076,"t":"java.lang.IllegalArgumentException: Supplied file does not contain valid keyPair pair. Check your file permissions and try running a sudo command to resolve the issue: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu storage --sync-mode=SNAP trie-log prune","s":"Valid keypair not provided","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#valid-keypair-not-provided","p":4057},{"i":4078,"t":"java.lang.RuntimeException: Column handle not found for segment WORLD_STATE Ensure you are using --data-storage-format=BONSAI instead of --data-storage-format=FOREST on an existing Bonsai database.","s":"Column handle not found for segment WORLD_STATE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-world_state","p":4057},{"i":4080,"t":"org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: While lock file: /data/besu/database/LOCK: Resource temporarily unavailable Check if Besu is already running. You must shut down the Besu client before running the subcommand.","s":"Resource temporarily unavailable","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#resource-temporarily-unavailable","p":4057},{"i":4082,"t":"java.lang.IllegalStateException: Unable to change the sync mode when snap sync is incomplete, please restart with snap sync mode Check that you have specified --sync-mode. The default is --sync-mode=SNAP. Most Mainnet users use SNAP or CHECKPOINT.","s":"Unable to change the sync mode","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#unable-to-change-the-sync-mode","p":4057},{"i":4084,"t":"java.lang.RuntimeException: No finalized block present, can't safely run trie log prune This message might appear if your node is relatively new or recently resynced. To resolve this error, ensure that your node is fully synced and correctly configured to recognize finalized blocks.","s":"Cannot run trie log prune","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-run-trie-log-prune","p":4057},{"i":4086,"t":"org.hyperledger.besu.util.InvalidConfigurationException: Supplied genesis block does not match chain data stored in /data/besu. Check if you are running the command for a network other than Mainnet. To specify a network, run a command that looks similar to the following: sudo /usr/local/bin/besu/bin/besu --network=holesky --sync-mode=SNAP --data-storage-format=BONSAI --data-path=/var/lib/besu storage trie-log prune","s":"Block does not match stored chain data","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#block-does-not-match-stored-chain-data","p":4057},{"i":4088,"t":"To enable communication you must expose Besu ports appropriately. The following shows an example port configuration for a Besu node on AWS. When running Besu from the Docker image, expose ports. info If your nodes are running in AWS, ensure you have appropriate SecurityGroups to allow access to the required ports. tip Besu supports UPnP for home or small office environments where a wireless router or modem provides NAT isolation.","s":"Configure ports","u":"/public-networks/how-to/connect/configure-ports","h":"","p":4087},{"i":4090,"t":"To enable peer discovery, the P2P UDP port must be open for inbound connections. Specify the P2P port using the --p2p-port option. The default is 30303. We also recommend opening the P2P TCP port for inbound connections. This is not strictly required because Besu attempts to open outbound TCP connections. But if no nodes on the network are accepting inbound TCP connections, nodes cannot communicate. Combine the P2P port with the values for the --p2p-host and --p2p-interface options when specifying the P2P host and P2P network interface. info By default, peer discovery listens on 0.0.0.0:30303 (all interfaces). If the device Besu is running on must bind to a specific network interface, specify the interface using the --p2p-interface option.","s":"P2P networking","u":"/public-networks/how-to/connect/configure-ports","h":"#p2p-networking","p":4087},{"i":4092,"t":"To enable access to the JSON-RPC API, open the HTTP JSON-RPC and WebSockets JSON-RPC ports to the intended users of the JSON-RPC API on TCP. Specify the HTTP and WebSockets JSON-RPC ports using the --rpc-http-port and --rpc-ws-port options. The defaults are 8545 and 8546.","s":"JSON-RPC API","u":"/public-networks/how-to/connect/configure-ports","h":"#json-rpc-api","p":4087},{"i":4094,"t":"To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.","s":"Metrics","u":"/public-networks/how-to/connect/configure-ports","h":"#metrics","p":4087},{"i":4096,"t":"Use the --nat-method option to specify the NAT method. Options are: UPNP, KUBERNETES, DOCKER, AUTO, and NONE. The enode advertised to other nodes during discovery is the external IP address and port. The admin_nodeInfo JSON-RPC API method returns the external address and port for the enode and listenAddr properties. While Besu is running, the following are not supported: IP address changes Changing NAT methods. To change the NAT method, restart the node with the --nat-method option set.","s":"Specify the NAT method","u":"/public-networks/how-to/connect/specify-nat","h":"","p":4095},{"i":4098,"t":"AUTO detects if Besu is running inside a Kubernetes cluster or a Docker container. If Besu is running in a Kubernetes cluster, AUTO sets to KUBERNETES. If Besu is running in a Docker container, AUTO sets to DOCKER. If Besu is not running in Kubernetes or Docker container, AUTO sets to NONE. AUTO is the default NAT method. The following log shows an automatic detection failure. The following log shows an automatic detection failure INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network. tip If automatic detection fails, set the IP and ports in NONE mode.","s":"Auto","u":"/public-networks/how-to/connect/specify-nat","h":"#auto","p":4095},{"i":4100,"t":"Specify UPNP to quickly allow inbound peer connections without manual router configuration. Use UPnP in home or small office environments where a wireless router or modem provides NAT isolation. UPnP automatically detects if a node is running in a UPnP environment and provides port forwarding. UPnP might introduce delays during node startup, especially on networks without a UPnP gateway device. Use UPNPP2PONLY if you wish to enable UPnP only for p2p traffic. tip UPnP support is often disabled by default in networking firmware. If disabled by default, you must explicitly enable UPnP support. info When the NAT method is set to UPNP, the advertised port is the same as the listening port.","s":"UPnP","u":"/public-networks/how-to/connect/specify-nat","h":"#upnp","p":4095},{"i":4102,"t":"Specify KUBERNETES to explicitly specify Besu is running inside a Kubernetes cluster. Besu automatically detects if it's running inside of a Kubernetes cluster and interacts with Kubernetes APIs as required to determine external IP addresses and exposed ports. In Kubernetes, the Ingress IP of the load balancer will be used as the external IP for Besu. A load balancer service can map any incoming port to a target port. These mapping rules will be the one retrieved by Besu. A tutorial to Configure the Nat Manager for Kubernetes is available.","s":"Kubernetes","u":"/public-networks/how-to/connect/specify-nat","h":"#kubernetes","p":4095},{"i":4104,"t":"Specify DOCKER to explicitly specify Besu is running inside a Docker container. If you specify DOCKER, you advertise the host IP address not the container IP address. The host IP address is the advertised host specified in the docker run command. If not specified in the docker run command, the advertised host defaults to the values for --p2p-host and --p2p-port.","s":"Docker","u":"/public-networks/how-to/connect/specify-nat","h":"#docker","p":4095},{"i":4106,"t":"Specify NONE to explicitly configure the external IP address and ports advertised using: --p2p-host and --p2p-port for the P2P service. --rpc-http-host and --rpc-http-port for the JSON-RPC HTTP service. The P2P and JSON-RPC HTTP hosts and ports are advertised in the net_services method. tip When the NAT method is set to NONE, the advertised port is the same as the listening port.","s":"None","u":"/public-networks/how-to/connect/specify-nat","h":"#none","p":4095},{"i":4108,"t":"Besu peer-to-peer (P2P) discovery happens periodically based on the number of peers in a network and the node's peer limit. The frequency of discovery isn't configurable, but you can: Limit remote connections in public networks. Allowlist peers by IP subnet to create a private network of peers across public networks. Randomly prioritize connections in small, stable networks. info You can use admin_addPeer to attempt a specific connection, but this isn't P2P discovery. In private networks, we recommend using bootnodes to initially discover peers.","s":"Manage peers","u":"/public-networks/how-to/connect/manage-peers","h":"","p":4107},{"i":4110,"t":"The P2P discovery process requires ports to be open to UDP and TCP traffic. If you have a firewall in place, keep those ports open to allow traffic in and out. If you are running a node at home on your network, ensure that your router has those ports open. The discovery stack uses UDP to keep peer discovery lightweight and quick. It only allows a node to find peers and connect to them, without any additional overhead. Once peers have bonded, the data exchange between them is complex and needs a fully featured protocol to support error checking and retries, so the devP2P stack uses TCP. Both stacks work in parallel: the discovery stack adds new peers to the network, and the devP2P stack enables interactions and data flow between them. In detail, the P2P discovery process is as follows: When Besu starts up it advertises its presence and details (including the enode) using UDP before establishing a formal connection with any peer (log messages look like Enode URL enode://....). Besu attempts to connect to the network's bootnodes (a set of predefined nodes used to help bootstrap discovery). Once a connection with a bootnode is established using UDP (ping/pong handshake messages in the debug and trace logs), Besu requests a list of neighbors (potential peers) from the bootnode (find node messages in the debug and trace logs). Besu attempts to connect to each peer using TCP, and get status information from them – such as network details, what the peer believes to be the current chain head, and its list of neighbors. From this point on any traffic to that peer is only done using TCP. Depending on the synchronization method, a common block (the pivot block) is selected that all connected peers (default of 5) have, and Besu syncs from that block till it gets to chain head. Log messages look like Downloading world state from peers for pivot block ........ Besu repeats the same process for each peer in step 4, and any new peers that come along (regardless of client). The more peers Besu is connected to, the more confident it is of having an accurate view of the network.","s":"P2P discovery process","u":"/public-networks/how-to/connect/manage-peers","h":"#p2p-discovery-process","p":4107},{"i":4112,"t":"You can limit peers to reduce the bandwidth, CPU time, and disk access Besu uses to manage and respond to peers. To reduce the maximum number of peers, use the --max-peers option. The default is 25.","s":"Limit peers","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-peers","p":4107},{"i":4114,"t":"You can can define specific IP subnets permitted to interact with the node using the --net-restrict configuration. This restricts access to only those peers whose IP addresses fall within the allowed subnets. This is useful if you maintain a set of nodes and want to restrict which of those can connect to external nodes.","s":"Allowlist peers","u":"/public-networks/how-to/connect/manage-peers","h":"#allowlist-peers","p":4107},{"i":4116,"t":"Prevent eclipse attacks when using --sync-mode and --fast-sync-min-peers on public networks by enabling the remote connection limits. In private and permissioned networks with only trusted peers, enabling the remote connection limits is unnecessary and might adversely affect the speed at which nodes can join the network. Limiting remote connections can cause a closed group of peers to form when the number of nodes in the network is slightly higher than --max-peers. The nodes in this closed group are all connected to each other and can't accept more connections. tip You can use --random-peer-priority-enabled to help prevent closed groups of peers in small, stable networks.","s":"Limit remote connections","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-remote-connections","p":4107},{"i":4118,"t":"JSON-RPC API methods to monitor peer connections include: net_peerCount. admin_peers. debug_metrics. Each peer entry returned by admin_peers includes a protocols section. Use the information in the protocols section to: Determine the health of peers. For example, an external process can use admin_peers and admin_removePeer to disconnect from peers that are stalled at a single difficulty for an extended period of time. Monitor node health. For example, if peers report increasing difficulties but the node is stuck at the same block number, the node may be on a different fork to most peers. Determine which protocol level peers are communicating with. For example, you can see if \"version\": 65 is being used to reduce transaction sharing traffic.","s":"Monitor peer connections","u":"/public-networks/how-to/connect/manage-peers","h":"#monitor-peer-connections","p":4107},{"i":4120,"t":"The default logging configuration doesn't list node connection and disconnection messages. To enable listing them, set the --logging option to DEBUG. For more verbosity, set the option to TRACE. The console logs connection and disconnection events when the log level is DEBUG or higher. If the message Successfully accepted connection from ... displays, connections are getting through the firewalls. Sample log output 2018-10-16 12:37:35.479-04:00 | nioEventLoopGroup-3-1 | INFO | NettyP2PNetwork | Successfully accepted connection from 0xa979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c","s":"List node connections","u":"/public-networks/how-to/connect/manage-peers","h":"#list-node-connections","p":4107},{"i":4122,"t":"To disable P2P discovery, set the --discovery-enabled option to false. With discovery disabled, peers can't open connections with the node unless they were previously discovered or manually peered (for example, using admin_addPeer). Static nodes can also open connections.","s":"Disable discovery","u":"/public-networks/how-to/connect/manage-peers","h":"#disable-discovery","p":4107},{"i":4124,"t":"If you encounter issues with peering, see the troubleshoot peering documentation, which helps you identify and resolve common problems that can occur during the peering process.","s":"Troubleshoot","u":"/public-networks/how-to/connect/manage-peers","h":"#troubleshoot","p":4107},{"i":4126,"t":"Dapps use client libraries, such as web3.js, web3j, or ethereumj, to forward JSON-RPC requests to Besu. Any client library implementing core Ethereum RPC methods works with Besu. Use the web3js-quorum library with Besu for privacy features. Use client libraries to: Create signed transactions Create and send private transactions. note Besu does not support key management inside the client.","s":"Use client libraries","u":"/public-networks/how-to/develop/client-libraries","h":"","p":4125},{"i":4128,"t":"Developing for Besu using Hardhat is the same as developing for public Ethereum networks using Hardhat. Hardhat supports Besu with the only difference being Besu does not support private key management. You can therefore use a wallet provider, or specify your private key in the code.","s":"Use Hardhat","u":"/public-networks/how-to/develop/hardhat","h":"","p":4127},{"i":4131,"t":"To add the wallet provider, update the hardhat.config.ts file in the project directory. Replace: with the JSON-RPC endpoint (IP address and port) of a Besu node. with the list of words that make up your account's mnemonic. with your password if used. with your account's private key. module.exports = { // See // for more about customizing your Hardhat configuration! networks: { besuWallet: { url: \"\", accounts: { mnemonic: \"\", path: \"m/44'/60'/0'/0\", initialIndex: 0, count: 1, passphrase: \"\", }, }, }, };","s":"Use an HD wallet","u":"/public-networks/how-to/develop/hardhat","h":"#use-an-hd-wallet","p":4127},{"i":4133,"t":"danger Ensure you do not commit private keys to source control like Github, always inject your keys at runtime as environment variables, or use a vault or similar. const provider = new ethers.JsonRpcApiProvider(); const wallet = new ethers.Wallet(); // connect the wallet to the provider const signer = wallet.connect(provider);","s":"Specify your private key in code","u":"/public-networks/how-to/develop/hardhat","h":"#specify-your-private-key-in-code","p":4127},{"i":4135,"t":"Start a Besu node with JSON-RPC enabled on the endpoint specified in the Hardhat configuration file.","s":"Start a Besu node","u":"/public-networks/how-to/develop/hardhat","h":"#start-a-besu-node","p":4127},{"i":4137,"t":"To deploy a contract onto the Besu network: npx hardhat scripts run ./scripts/deploy_my_contract.ts --network besuWallet","s":"Deploy a contract","u":"/public-networks/how-to/develop/hardhat","h":"#deploy-a-contract","p":4127},{"i":4139,"t":"Monitoring enables identification of node and network issues. Specifically, configuring metrics and logging enables: Visual representation of declining node or network performance Collection of log files to enable issue diagnosis. For an overview of monitoring Besu, view this recording.","s":"Monitor Besu","u":"/public-networks/how-to/monitor","h":"","p":4138},{"i":4141,"t":"Static nodes are a configured set of trusted nodes. Static nodes are exempt from maximum peer and remote connection limits. Besu periodically initiates a connection to any unconnected static node. To mitigate low peer count issues in small networks, we recommend using static nodes, or static nodes and bootnodes. tip Bootnodes and static nodes are both methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes. For example: You run multiple nodes on Mainnet, using bootnodes for discovery, but want to ensure your nodes are always connected to each other, using static nodes. You run a small network and want your nodes to reconnect if disconnected, using static nodes. To find peers, configure one or more bootnodes. To configure a specific set of peer connections, use static nodes.","s":"Static nodes","u":"/public-networks/how-to/connect/static-nodes","h":"","p":4140},{"i":4143,"t":"To configure a network of static nodes: List the enode URLs of the nodes in the static-nodes.json file. Save the static-nodes.json file in the data directory (specified by --data-path) of each node. Alternatively, you can explicitly specify the static nodes file on the command line using --static-nodes-file. Start Besu with discovery disabled using --discovery-enabled=false. To update the list of static peers at run time, use the admin_addPeer and admin_removePeer JSON-RPC API methods. note Runtime modifications of static nodes are not persisted between runs. The static-nodes.json file is not updated by the admin_addPeer and admin_removePeer methods. Nodes not in the list of the static nodes are not prevented from connecting. To prevent nodes from connecting, use Permissioning. tip If the added peer does not appear in the peer list (returned by admin_peers), check the the supplied enode URL is correct, the node is running, and the node is listening for TCP connections on the endpoint.","s":"Configure static nodes","u":"/public-networks/how-to/connect/static-nodes","h":"#configure-static-nodes","p":4140},{"i":4145,"t":"The static-nodes.json file must be in the data directory (specified by --data-path) and contain a JSON array of enode URLs. Example [ \"enode://cea71cb65a471037e01508cebcc178f176f9d5267bf29507ea1f6431eb6a5dc67d086dc8dc54358a72299dab1161febc5d7af49d1609c69b42b5e54544145d4f@127.0.0.1:30303\", \"enode://ca05e940488614402705a6b6836288ea902169ecc67a89e1bd5ef94bc0d1933f20be16bc881ffb4be59f521afa8718fc26eec2b0e90f2cd0f44f99bc8103e60f@127.0.0.1:30304\" ] note Each node has a static-nodes.json file. We recommend each node in the network has the same static-nodes.json file.","s":"static-nodes.json file","u":"/public-networks/how-to/connect/static-nodes","h":"#static-nodesjson-file","p":4140},{"i":4147,"t":"To enable the Prometheus monitoring and alerting service to access Besu metrics, use the --metrics-enabled option. Use Grafana to visualize the collected data. See the sample Besu Full Grafana dashboard. The Besu example networks have monitoring with Prometheus and Grafana configured. Use Prometheus to monitor the number of blocks your Besu node is behind the chain head, and to alert you that your node is not keeping up with the chain head. This recording shows examples of monitoring Besu.","s":"Use metrics to monitor node performance","u":"/public-networks/how-to/monitor/metrics","h":"","p":4146},{"i":4149,"t":"To use Prometheus with Besu, install the Prometheus main component. On MacOS, install with Homebrew: brew install prometheus tip You can also install: Exporters that send system metrics to Prometheus to monitor non-Besu-specific items such as disk and CPU usage. Other Prometheus components, such as the Alert Manager. Additional configuration is not required for these components because Prometheus handles and analyzes data directly from the feed.","s":"Install Prometheus","u":"/public-networks/how-to/monitor/metrics","h":"#install-prometheus","p":4146},{"i":4151,"t":"To configure Prometheus and run with Besu: Configure Prometheus to poll Besu. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file: Fragment to insert in prometheus.yml Full prometheus.yml example - job_name: besu scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9545 global: scrape_interval: 15s scrape_configs: - job_name: \"prometheus\" static_configs: - targets: [\"localhost:9090\"] - job_name: besu scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9545 Prometheus requires 3 MB of space per node per hour for metrics, with a scrape_interval of 15 seconds. Start Besu with the --metrics-enabled option. To start a single node for testing with metrics enabled, run the following command: Syntax Example besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled To specify the host and port on which Prometheus accesses Besu, use the --metrics-host and --metrics-port options. The default host and port are 127.0.0.1 (localhost) and 9545. danger To avoid DNS rebinding attacks, if running Prometheus on a different host than your Besu node (any host other than localhost), add the hostname that Prometheus uses to --host-allowlist. For example, if Prometheus is configured to get metrics from http://besu.local:8008/metrics, then besu.local must be in --host-allowlist. In another terminal, run Prometheus specifying the prometheus.yml file: prometheus --config.file=prometheus.yml View the Prometheus graphical interface. tip Use a log ingestion tool, such as Logstash, to parse the logs and alert you to configured anomalies.","s":"Set up and run Prometheus with Besu","u":"/public-networks/how-to/monitor/metrics","h":"#set-up-and-run-prometheus-with-besu","p":4146},{"i":4153,"t":"The --metrics-enabled option enables Prometheus polling of Besu, but sometimes metrics are hard to poll (for example, when running inside Docker containers with varying IP addresses). To enable Besu to push metrics to a Prometheus push gateway, use the --metrics-push-enabled option. To configure Prometheus and run with Besu pushing to a push gateway: Configure Prometheus to read from a push gateway. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file: - job_name: push-gateway metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9091 Start the push gateway. You can deploy the push gateway using the Docker image: docker pull prom/pushgateway docker run -d -p 9091:9091 prom/pushgateway Start Besu specifying the --metrics-push-enabled option and port of the push gateway: Syntax Example besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1 besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1 In another terminal, run Prometheus specifying the prometheus.yml file: prometheus --config.file=prometheus.yml View the Prometheus graphical interface.","s":"Run Prometheus with Besu in push mode","u":"/public-networks/how-to/monitor/metrics","h":"#run-prometheus-with-besu-in-push-mode","p":4146},{"i":4155,"t":"Open a Web browser to http://localhost:9090 to view the Prometheus graphical interface. Choose Graph from the menu bar and click the Console tab below. From the Insert metric at cursor drop-down, select a metric such as besu_blockchain_difficulty_total or ethereum_blockchain_height and click Execute. The values display. Click the Graph tab to view the data as a time-based graph. The query string displays below the graph. For example, {ethereum_blockchain_height{instance=\"localhost:9545\",job=\"prometheus\"}.","s":"View Prometheus graphical interface","u":"/public-networks/how-to/monitor/metrics","h":"#view-prometheus-graphical-interface","p":4146},{"i":4157,"t":"Run the following command to view the full list of available metrics: curl http://localhost:9545/metrics Update the host and port if you are not using the default values. Each metric, such as besu_blockchain_chain_head_gas_limit, starts with a metric category prefix. Metrics specific to Besu use the besu_ prefix, followed by another metric category. You can enable metric categories using the --metrics-category command line option.","s":"View the metrics list","u":"/public-networks/how-to/monitor/metrics","h":"#view-the-metrics-list","p":4146},{"i":4159,"t":"Besu uses Log4j 2 for logging and provides two methods to configure logging behavior: Basic - Changes the log level. Advanced - Configures the output and format of the logs. Quorum Developer Quickstart provides an example implementation using Elastic Stack for log management.","s":"Use logging","u":"/public-networks/how-to/monitor/logging","h":"","p":4158},{"i":4161,"t":"Use the --logging command line option to specify logging verbosity. The --logging option changes the volume of events displayed in the log. Valid log levels are OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL. The default level is INFO. For most use cases, the basic method provides enough configurability. tip Use the admin_changeLogLevel API method to change the log level while Besu is running.","s":"Basic logging","u":"/public-networks/how-to/monitor/logging","h":"#basic-logging","p":4158},{"i":4163,"t":"You can provide your own logging configuration using the standard Log4j 2 configuration mechanisms. For example, the following Log4j 2 configuration is the same as the default configuration except for the exclusion of logging of stack traces for exceptions: debug.xml INFO To use your custom configuration, set the environment variable LOG4J_CONFIGURATION_FILE to the location of your configuration file. If you have more specific requirements, you can create your own Log4j 2 configuration. For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu. To set the debug logging and start Besu connected to the Holesky testnet: LOG4J_CONFIGURATION_FILE=./debug.xml besu --network=holesky","s":"Advanced logging","u":"/public-networks/how-to/monitor/logging","h":"#advanced-logging","p":4158},{"i":4165,"t":"You can log information about invalid transactions that have been removed from the transaction pool. Use the log marker INVALID_TX_REMOVED and the following fields to format the log line as required: txhash - The hash of the transaction. txlog - The human-readable log of the transaction. reason - The reason the transaction is invalid. txrlp - The RLP encoding of the transaction. For example, the following Log4j 2 configuration enables logging of invalid transactions: debug.xml INFO ","s":"Log invalid transactions","u":"/public-networks/how-to/monitor/logging","h":"#log-invalid-transactions","p":4158},{"i":4167,"t":"The Quorum Developer Quickstart logging configuration defines a log rotation to restrict the size of the log files.","s":"Log rotation","u":"/public-networks/how-to/monitor/logging","h":"#log-rotation","p":4158},{"i":4169,"t":"When running Besu on Ethereum Mainnet using snap sync, you might notice graphical patterns that stand out in different metrics charts. These patterns are related to the CPU usage and block time of the Besu sync process.","s":"Understand metrics","u":"/public-networks/how-to/monitor/understand-metrics","h":"","p":4168},{"i":4171,"t":"The following screenshot from monitoring Besu with Prometheus and Grafana shows patterns related to CPU usage. The CPU pattern is a \"staircase\" pattern, where each step represents one of the Besu running stages.","s":"CPU usage","u":"/public-networks/how-to/monitor/understand-metrics","h":"#cpu-usage","p":4168},{"i":4173,"t":"Step 1 highlights blocks import and world state download, two tasks executed in parallel in Besu. Besu manages these two tasks with two different pipelines. This step is CPU-bound.1 The two pipeline stages run on multiple threads. As displayed in the following screenshot (for a VM with 8 CPUs) the CPU load average is about 7.5 and sometimes exceeds 10 (a 100% load for the 8 CPUs is 8). This means there's more work to be done than what the CPUs can handle.","s":"1. Blocks import and world state download","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-blocks-import-and-world-state-download","p":4168},{"i":4175,"t":"Step 2, world state healing, starts just after the world state download in step 1 is complete. The peak in system CPU is related to the high rate of input and output (IO) required during this step. IO usage is around 61% during healing, and it's only 39% during the remaining sync.","s":"2. World state healing","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-world-state-healing","p":4168},{"i":4177,"t":"After steps 1 and 2, world state is downloaded and healed, and block import continues. The visible drop in CPU shows that Besu finished the world state nodes download. The block import step is long because Besu can't parallelize block import -- it must validate each parent block before importing a child. note The Besu team is currently working on other algorithm and implementations to make this block import faster.","s":"3. Blocks import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-blocks-import","p":4168},{"i":4179,"t":"In step 4, Besu executes all transactions of each block. This is when Besu updates the world state after the healing step. The quantity of imported blocks in this step depends on the speed of the sync. This number indicates the cumulated blocks quantity behind head since the last healing step. This step consumes less CPU than the previous steps because the sequential part -- executing transactions on the EVM -- must be single-threaded, reducing the concurrent work at the CPU level.","s":"4. Blocks full import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#4-blocks-full-import","p":4168},{"i":4181,"t":"Once Besu is completely synced, it propagates blocks and executes the transactions inside each block. Step 5, block production and propagation, shows a reduction in CPU consumption due to the idle time while waiting for the new block and the sequential nature of executing transactions on the EVM.","s":"5. Blocks production and propagation","u":"/public-networks/how-to/monitor/understand-metrics","h":"#5-blocks-production-and-propagation","p":4168},{"i":4183,"t":"Block time measures the duration of getting new blocks in Besu. Block time is closely related to CPU usage. The following screenshot shows patterns related to block time as available in the Besu Grafana full dashboard. The block time pattern is also a \"staircase\" pattern.","s":"Block time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#block-time","p":4168},{"i":4185,"t":"Step 1, block import time, is the duration of importing a block. Import includes: Data retrieval over the network. Headers, body, and receipt validation. Persisting the block in the database. Block import takes between a few and tens of milliseconds.","s":"1. Block import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-block-import-time","p":4168},{"i":4187,"t":"Step 2, block full import time, is the duration of importing a block (step 1) and executing all its transactions. Block full import takes between 1 and 2 seconds per block, depending on the number and complexity of the transactions.","s":"2. Block full import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-block-full-import-time","p":4168},{"i":4189,"t":"Step 3, block network time, is the duration of propagating a block over the network and executing all its transactions. Block network takes between 13 and 16 seconds. Footnotes​ A CPU-bound task means that the time required to execute the task is determined only by the CPU speed. ↩","s":"3. Block network time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-block-network-time","p":4168},{"i":4191,"t":"A CPU-bound task means that the time required to execute the task is determined only by the CPU speed. ↩","s":"Footnotes","u":"/public-networks/how-to/monitor/understand-metrics","h":"#footnote-label","p":4168},{"i":4193,"t":"The Besu EVM tool is a CLI program that executes arbitrary EVM programs and Ethereum State Tests outside the context of an operating node. Use the EVM tool for benchmarking and fuzz testing.","s":"Use the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"","p":4192},{"i":4195,"t":"The EVM tool is part of the standard Besu binary distribution.","s":"Get the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#get-the-evm-tool","p":4192},{"i":4197,"t":"To build from source, run the following from the root of the Besu repository: ./gradlew :ethereum:evmTool:installDist An extractable archive files is created in ethereum/evmtool/build/distributions and an executable installation in ethereum/evmtool/build/install/evmtool. Execute the EVM tool: ethereum/evmtool/build/install/evmtool/bin/evmtool ","s":"Build from source","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#build-from-source","p":4192},{"i":4199,"t":"To run the Besu EVM tool in a container: docker run -rm hyperledger/besu-evmtool:develop Because no data is stored in local directories we recommended using the -rm docker option. The -rm option deletes the container at the end of execution. If you use an option that requires input from standard in, use the -i docker option. The -i option pipes standard input to the EVM tool. If you need to reference files we recommend using a docker file binding, such as -v ${PWD}:/opt/data, which maps the current directory to the /opt/data directory in the container. note The latest tag is the latest released version of Besu. The develop tag is the current main branch code that will go into a future release version of Besu.","s":"Execute with Docker","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#execute-with-docker","p":4192},{"i":4201,"t":"The first mode of the EVM tool runs arbitrary EVM bytecode. Use command line options to specify the code and other contextual information. For example: evmtool --code=5B600080808060045AFA50600056 The EVM tool also has subcommands used for testing code bases. These subcommands are not meant for typical user interactions.","s":"EVM tool options","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#evm-tool-options","p":4192},{"i":4203,"t":"You can send signed transactions using the eth_sendRawTransaction JSON-RPC API method. Signed transactions can be simple value transfers, contract creation, or contract invocation. Set the maximum transaction fee for transactions using the --rpc-tx-feecap CLI option. To accept signed transactions from remote connections, set the API listening host to 0.0.0.0. Use client libraries to create and send a signed raw transaction to transfer Ether and create a smart contract. Private keys Don't use the accounts from the examples on Mainnet or any public network except for testing. The private keys are displayed which means the accounts are not secure. All accounts and private keys in the examples are from the dev.json genesis file in the /besu/config/src/main/resources directory. In production environments avoid exposing your private keys by creating signed transactions offline, or use Web3Signer to isolate your private keys and sign transactions with eth_sendTransaction. caution Setting the listening host to 0.0.0.0 exposes the API service connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet. tip Libraries such as web3j or ethereumj and tools such as MyCrypto can also create signed transactions.","s":"Create and send transactions","u":"/public-networks/how-to/send-transactions","h":"","p":4202},{"i":4205,"t":"You can interact with contracts using eth_call or eth_sendRawTransaction. The table below compares the characteristics of both calls. eth_call eth_sendRawTransaction Read-only Write Invokes contract function locally Broadcasts to the network Does not change state of blockchain Updates the blockchain (for example, transfers ether between accounts) Does not consume gas Requires gas Synchronous Asynchronous Returns the value of a contract function available immediately Returns transaction hash only. A block might not include all possible transactions (for example, if the gas price is too low).","s":"eth_call vs eth_sendRawTransaction","u":"/public-networks/how-to/send-transactions","h":"#eth_call-vs-eth_sendrawtransaction","p":4202},{"i":4207,"t":"Besu doesn't support key management inside the client. Use: Web3Signer with Besu to provide access to your key store and sign transactions. Third-party tools (for example, MetaMask and web3j) for creating accounts.","s":"Use wallets for key management","u":"/public-networks/how-to/send-transactions","h":"#use-wallets-for-key-management","p":4202},{"i":4209,"t":"Your hardware, machine environment, and node configuration can affect your node's ability to serve requests and perform validator duties, including attestation performance. If you notice high resource usage when monitoring your node, you can try the following suggestions: Disable swapping. Besu is an I/O intensive application, especially during sync, enabling swapping hurts Besu's performance. You can disable swap at the OS level. This article provides information on how to disable swap (and caveats). Use a high performance SSD disk with NVMe, since Besu's performance bottleneck is often slow disk I/O. Configure memory and RAM: If you have RAM constraints, use OpenJ9 if you're running on x86_64 Linux architecture to reduce memory usage. Review and change your Java heap size if necessary. 5GB is an appropriate limit. Higher values may improve sync time, but can be reduced after completing sync. Ensure Besu is using jemalloc. If you have 32GB RAM or more, set the Xplugin-rocksdb-high-spec-enabled configuration option to true. Don't use this on RAM machines with 16GB RAM or less if you're running a consensus client on the same hardware. If you're running on ARM64, make sure the glibc version is greater than 2.29. If not, Besu uses a Java implementation instead of the native one for some precompiled contracts, which results in lower performance. On Ubuntu, run ldd --version. See the methods for other environments. Pay attention to what processes are running on the same machine/VM as Besu. Java applications, with default settings, are designed to run alone on the machine. You can run your consensus client on the same machine, but this adds overhead on Besu, and vice versa (on CPU cache misses, CPU scheduler latency, IO, etc.). You should continue to monitor your node after following these suggestions.","s":"Troubleshoot poor performance and resource constraints","u":"/public-networks/how-to/troubleshoot/performance","h":"","p":4208},{"i":4211,"t":"To get detailed information about transaction processing, use the TRACE API. Enable the TRACE API using the --rpc-http-api or --rpc-ws-api command line options. The TRACE API has two sets of trace calls, ad-hoc tracing APIs and transaction-trace filtering APIs.","s":"Trace transactions","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"","p":4210},{"i":4213,"t":"These APIs allow you to use the trace, vmTrace, or stateDiff diagnostic options when tracing calls or transactions. When using Bonsai Tries with the ad-hoc tracing APIs, the requested block or transaction must be within the number of blocks retained (by default, 512 from the head of the chain). The ad-hoc tracing APIs are: trace_call trace_callMany trace_rawTransaction trace_replayBlockTransactions","s":"Ad-hoc tracing APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#ad-hoc-tracing-apis","p":4210},{"i":4215,"t":"These APIs allow you to filter and search by specific information such as the block, address, or transaction. These APIs only use the trace type. To use the transaction-trace filtering APIs, your node must be an archive node, or the requested block or transaction must be within the number of blocks retained when using Bonsai Tries (by default, 512 from the head of the chain). The transaction-trace filtering APIs are: trace_block trace_filter trace_get trace_transaction","s":"Transaction-trace filtering APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#transaction-trace-filtering-apis","p":4210},{"i":4217,"t":"Many factors can affect the ability of your node to find and maintain peers. Your network router, machine environment, and node configuration are all important. If you have peering issues, start by configuring your ports and managing peers.","s":"Troubleshoot peering","u":"/public-networks/how-to/troubleshoot/peering","h":"","p":4216},{"i":4220,"t":"One or more of the following may be the cause: Your hardware doesn't have enough CPU, disk IOPS, or bandwidth to handle all the peers. Your ports aren't open in your firewall and/or router. Your node is sending large numbers of DNS requests. See issue #4375. You're using checkpoint sync, which doesn't download all historical block data, so your peers may disconnect you when fetching those blocks. Your node is experiencing the normal behavior of peers connecting and disconnecting. This is especially normal soon after you start your node. You can try the following to find more peers: Set p2p-host to your external IP address to allow inbound connections. Restart Besu. This can take a while to build up again. Set -Xdns-enabled to true (only for private networks). Delete the node key (which is autogenerated in your data directory). There are two reasons that this might help find more peers: Your node (identified by the address associated with this key) has been put onto other peers' bad peer lists for some reason. Peer discovery is influenced by the value of the node key. This is related to the node \"distance\" in the discovery algorithm. You can read the Prysm EL and CL peering documentation for more information.","s":"\"Why can’t I find enough peers to sync?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#why-cant-i-find-enough-peers-to-sync","p":4216},{"i":4222,"t":"Check the following settings: Your machine and router's specified DNS should support TCP. You can check your DNS online for TCP support. Google and Cloudflare, 8.8.8.8 and 1.1.1.1, support TCP over port 853. Other DNS might as well. The appropriate ports should be open on your router, or your router should have UPNP enabled. See the next FAQ for more information on router settings. If you use Docker or virtualization, the container should be able to create outbound connections on the host machine.","s":"\"What network or router/modem settings should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#what-network-or-routermodem-settings-should-i-check","p":4216},{"i":4224,"t":"Check that the enode URLs specified for bootnodes or static nodes match the enode URLs displayed when starting the remote nodes.","s":"\"Which URLs should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#which-urls-should-i-check","p":4216},{"i":4226,"t":"If you’re behind NAT, you probably need to set up port forwarding in your router. You might also need to configure your firewall. Forward and open 30303 (if using the default p2p port) for both UDP and TCP. If your router supports UPNP, you can set --nat-method to UPNPP2PONLY.","s":"\"How do I open/forward my ports?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-openforward-my-ports","p":4216},{"i":4228,"t":"You can use this open port checker.","s":"\"How do I test that my ports are open?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-test-that-my-ports-are-open","p":4216},{"i":4230,"t":"The default maximum is 25. Increasing the number of peers increases the bandwidth, CPU, and disk access Besu uses to respond to peers. Hardware with low specifications might result in low peer numbers. You'll experience diminishing returns with a larger number of peers (>100).","s":"\"What's the ideal number of peers for Besu?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-ideal-number-of-peers-for-besu","p":4216},{"i":4232,"t":"Increasing the number of max peers won't speed up Besu syncing, because the bottleneck during sync is disk IO and CPU. Note that Besu's peers are only used for the initial sync and transaction gossip, neither of which affects attestation performance. The beacon node connectivity controls how quickly you receive blocks and how attestations are published. Increasing Besu's peer count increases the load on your node, which may hurt attestations.","s":"\"What's the benefit of increasing the number of peers?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-benefit-of-increasing-the-number-of-peers","p":4216},{"i":4234,"t":"Capture metrics to gain insights into peering behavior over time. To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.","s":"Metrics","u":"/public-networks/how-to/troubleshoot/peering","h":"#metrics","p":4216},{"i":4236,"t":"When upgrading your Besu node, we recommend: Using an orchestration method (for example, Ansible or Chef) to keep all nodes in sync with your desired configuration. Storing your configuration under version control.","s":"Upgrade your Besu node","u":"/public-networks/how-to/upgrade-node","h":"","p":4235},{"i":4238,"t":"You can use the Ansible role on Galaxy directly or customize it to suit your needs. Upgrade the Besu version on nodes by running the play with the new version. For more information, For more information, select Read Me on the Ansible Galaxy Besu page. The playbook: Stops Besu. Downloads the updated version. Applies any new configuration. Starts Besu.","s":"Ansible","u":"/public-networks/how-to/upgrade-node","h":"#ansible","p":4235},{"i":4240,"t":"Nodes store known peers in the peer table. The peer table is not persisted to disk. When a node restarts, the node connects to the specified bootnodes and discovers other nodes through the peer discovery process. The node continues collecting data from where it left off before the restart (assuming there was no data corruption in a failure scenario). Before the node restarted, connected peers saved the node details in their peer tables. These peers can reconnect to the restarted node. The restarted node uses these peers and the bootnodes, to discover more peers. To ensure that the restarted node successfully rejoins the network, ensure you specify at least one operational bootnode.","s":"Find peers on restarting","u":"/public-networks/how-to/upgrade-node","h":"#find-peers-on-restarting","p":4235},{"i":4242,"t":"Access the Besu API using: JSON-RPC over HTTP, WebSocket, or IPC RPC Pub/Sub over WebSockets GraphQL over HTTP. note HTTP and WebSocket responses are compact JSON by default. You can use --json-pretty-print-enabled to pretty-print the output. The following sections provide information about JSON-RPC, RPC Pub/Sub, and GraphQL.","s":"Access the Besu API","u":"/public-networks/how-to/use-besu-api","h":"","p":4241},{"i":4244,"t":"To enable API access, use the --rpc-http-enabled, --ws-http-enabled, --graphql-http-enabled, and --Xrpc-ipc-enabled options. caution --Xrpc-ipc-enabled is an early access option.","s":"Enable API access","u":"/public-networks/how-to/use-besu-api","h":"#enable-api-access","p":4241},{"i":4246,"t":"To specify the host the API service listens on, use the --rpc-http-host, --rpc-ws-host, and --graphql-http-host options. The default host is 127.0.0.1. To allow remote connections, set the host to 0.0.0.0. caution Setting the host to 0.0.0.0 exposes the API service connection on your node to any remote connection. In a production environment, ensure you use a firewall to avoid exposing your node to the internet.","s":"Service hosts","u":"/public-networks/how-to/use-besu-api","h":"#service-hosts","p":4241},{"i":4248,"t":"To specify the port the API service listens on, use the --rpc-http-port, --rpc-ws-port, and --graphql-http-port options. The default ports are: 8545 for JSON-RPC over HTTP. 8546 for JSON-RPC over WebSocket. 8547 for GraphQL over HTTP. Ports must be exposed appropriately.","s":"Service ports","u":"/public-networks/how-to/use-besu-api","h":"#service-ports","p":4241},{"i":4250,"t":"To specify the socket path for the IPC socket, use the --Xrpc-ipc-path option. The default path is besu.ipc in the Besu data directory. caution --Xrpc-ipc-path is an early access option.","s":"Socket path","u":"/public-networks/how-to/use-besu-api","h":"#socket-path","p":4241},{"i":4252,"t":"To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the --host-allowlist option matches the request host headers. By default, Besu accepts requests and connections from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the API, we recommend using the Besu authentication mechanism with username and password authentication or JWT public key authentication. If your application publishes RPC ports, specify the hostnames when starting Besu. besu --host-allowlist=example.com Specify * for --host-allowlist to effectively disable host protection. caution Specifying * for --host-allowlist is not recommended for production code.","s":"Host allowlist","u":"/public-networks/how-to/use-besu-api","h":"#host-allowlist","p":4241},{"i":4255,"t":"Account management relies on private key management in the client, which is not supported by Besu. To send signed transactions, use eth_sendRawTransaction. eth_sendTransaction is not implemented. For account management, use third-party wallets.","s":"Account management","u":"/public-networks/how-to/use-besu-api","h":"#account-management","p":4241},{"i":4257,"t":"Besu does not support the Whisper and Swarm protocols.","s":"Protocols","u":"/public-networks/how-to/use-besu-api","h":"#protocols","p":4241},{"i":4259,"t":"Subscribe to events, such as logs, using either RPC Pub/Sub over WebSockets or filters over HTTP. Access logs using the following Besu API methods: eth_getFilterChanges eth_getFilterLogs eth_getLogs. Use eth_newFilter to create the filter before using eth_getFilterChanges and eth_getFilterLogs). Access logs for private contracts using the equivalent priv_* methods and specifying the privacy group ID. For example, priv_getLogs. note The following examples use the sample contract included in events and logs.","s":"Access logs using the Besu API","u":"/public-networks/how-to/use-besu-api/access-logs","h":"","p":4258},{"i":4261,"t":"Create a filter using eth_newFilter. If the example contract was deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b, the following request for eth_newFilter creates a filter to log when valueIndexed is set to 5: { \"jsonrpc\": \"2.0\", \"method\": \"eth_newFilter\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [\"0x0000000000000000000000000000000000000000000000000000000000000005\"] ] } ], \"id\": 1 } eth_newFilter returns a filter ID hash (for example, 0x1ddf0c00989044e9b41cc0ae40272df3).","s":"Create a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#create-a-filter","p":4258},{"i":4263,"t":"To poll the filter for changes since the last poll, use eth_getFilterChanges with the filter ID hash returned by eth_newFilter. If the contract had been executed twice since the last poll, with valueIndexed set to 1 and 5, eth_getFilterChanges returns only the log where the topic for valueIndexed is 5: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x21c\", \"blockHash\": \"0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132\", \"transactionHash\": \"0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } ] }","s":"Poll a filter for changes","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#poll-a-filter-for-changes","p":4258},{"i":4265,"t":"To get all logs for a filter, use eth_getFilterLogs. If the contract had been executed twice with valueIndexed set to 5 since the filter was created using eth_newFilter, eth_getFilterLogs returns: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x1a7\", \"blockHash\": \"0x4edda22a242ddc7bc51e2b6b11e63cd67be1af7389470cdea9c869768ff75d42\", \"transactionHash\": \"0x9535bf8830a72ca7d0020df0b547adc4d0ecc4321b7d5b5d6beb1eccee5c0afa\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x21c\", \"blockHash\": \"0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132\", \"transactionHash\": \"0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } ] } tip You can use eth_getLogs with a filter options object to get all logs matching the filter options instead of using eth_newFilter followed by eth_getFilterLogs.","s":"Get all logs for a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-all-logs-for-a-filter","p":4258},{"i":4267,"t":"When a filter is no longer required, use eth_uninstallFilter to remove the filter.","s":"Uninstall a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#uninstall-a-filter","p":4258},{"i":4269,"t":"Filters for private contracts are created, accessed, and uninstalled using: priv_getFilterChanges priv_getFilterLogs priv_getLogs priv_newFilter priv_uninstallFilter. The privacy group ID must be specified as parameter 0 for the priv methods. { \"jsonrpc\": \"2.0\", \"method\": \"priv_newFilter\", \"params\": [ \"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\", { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"], \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\" ] } ], \"id\": 1 }","s":"Filters for private contracts","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#filters-for-private-contracts","p":4258},{"i":4271,"t":"To get all logs for a filter options object, use eth_getLogs or priv_getLogs for a private contract. The following request for eth_getLogs returns all the logs where the example contract has been deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b and executed with valueIndexed set to 5. { \"jsonrpc\": \"2.0\", \"method\": \"eth_getLogs\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [\"0x0000000000000000000000000000000000000000000000000000000000000005\"] ] } ], \"id\": 1 } The above example returns the same result as calling eth_newFilter followed by eth_getFilterLogs.","s":"Get logs using a filter options object","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-logs-using-a-filter-options-object","p":4258},{"i":4273,"t":"GraphQL can reduce the overhead needed for common queries. For example, instead of querying each receipt in a block, GraphQL can get the same result with a single query for the entire block. The Besu GraphQL schema describes the GraphQL implementation for Ethereum. Enable the GraphQL service using command line options. note GraphQL is not supported over WebSocket. Access the GraphQL endpoint at http://:/graphql. Configure and using graphql-http-host and graphql-http-port. The default endpoint is http://127.0.0.1:8547/graphql.","s":"Use GraphQL over HTTP","u":"/public-networks/how-to/use-besu-api/graphql","h":"","p":4272},{"i":4275,"t":"Besu JSON-RPC API methods with an equivalent GraphQL query include a GraphQL request and result in the method example. For example, the following request returns the block number: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{number}}\"}' http://localhost:8547/graphql { \"data\" : { \"block\" : { \"number\" : \"0x281\" } } } The following request returns the gas price: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{gasPrice}\"}' http://localhost:8547/graphql { \"data\" : { \"gasPrice\" : \"0x0\" } } The following syncing request returns data about the synchronization status: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{syncing{startingBlock currentBlock highestBlock}}\"}' http://localhost:8547/graphql { \"data\" : { \"syncing\" : { \"startingBlock\" : 665, \"currentBlock\" : 3190, \"highestBlock\" : 26395 } } } note In some cases, for example, when your node is fully synced, the syncing request returns a null response: { \"data\" : { \"syncing\" : null } }","s":"GraphQL requests with cURL","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-curl","p":4272},{"i":4277,"t":"The third-party tool, GraphiQL, provides a tabbed interface for editing and testing GraphQL queries and mutations. GraphiQL also provides access to the Besu GraphQL schema from within the app.","s":"GraphQL requests with GraphiQL app","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-graphiql-app","p":4272},{"i":4279,"t":"transactionCount and transactions supports the Pending query. info Besu does not execute pending transactions so results from account, call, and estimateGas for Pending do not reflect pending transactions. Pending transactions Result curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{pending {transactionCount}}\"}' http://localhost:8547/graphql { \"data\": { \"pending\": { \"transactionCount\": 2 } } } Pending transactions Result curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{pending {transactions{hash}}}\"}' http://localhost:8547/graphql { \"data\": { \"pending\": { \"transactions\": [ { \"hash\": \"0xbb3ab8e2113a4afdde9753782cb0680408c0d5b982572dda117a4c72fafbf3fa\" }, { \"hash\": \"0xf6bd6b1bccf765024bd482a71c6855428e2903895982090ab5dbb0feda717af6\" } ] } } }","s":"Pending","u":"/public-networks/how-to/use-besu-api/graphql","h":"#pending","p":4272},{"i":4281,"t":"Authentication identifies a user, and authorization verifies user access to requested JSON-RPC methods. Besu verifies users using JSON Web Tokens (JWT). JWT is also used in multi-tenancy to verify tenant data access. Besu supports two mutually exclusive authentication methods: Username and password JWT public key. Besu creates JWT internally with username and password authentication, and externally with JWT public key authentication. info Using JSON-RPC authentication and authorization with MetaMask is not supported. caution To prevent interception of authentication credentials and authenticated tokens, make authenticated requests over HTTPS. We recommend running production deployments behind a network layer that provides SSL termination. Besu does not provide a HTTPS connection natively.","s":"Authenticate and authorize JSON-RPC","u":"/public-networks/how-to/use-besu-api/authenticate","h":"","p":4280},{"i":4283,"t":"Enable authentication from the command line. Supply the credentials file and send a request to the /login endpoint using the username and password. The /login endpoint creates a JWT for making permitted JSON-RPC requests. Using public key authentication disables the /login endpoint.","s":"Username and password authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#username-and-password-authentication","p":4280},{"i":4285,"t":"The toml credentials file defines user details and the JSON-RPC methods they can access. auth.toml [Users.username1] password = \"$2a$10$l3GA7K8g6rJ/Yv.YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC\" permissions=[\"net:*\",\"eth:blockNumber\"] privacyPublicKey=\"U7ANiOOd5L9Z/dMxRFjdbhA1Qragw6fLuYgmgCvLoX4=\" [Users.username2] password = \"$2b$10$6sHt1J0MVUGIoNKvJiK33uaZzUwNmMmJlaVLkIwinkPiS1UBnAnF2\" permissions=[\"net:version\",\"admin:*\"] privacyPublicKey=\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\" Each user requiring JSON-RPC access the configuration file lists the: Username. Users. is mandatory and followed by the username. That is, replace in [Users.] with the username. Hash of the user password. Use the password hash subcommand to generate the hash. JSON-RPC permissions. Optional. The tenant's Tessera public key using privacyPublicKey. Only used for multi-tenancy. Command Hash output besu password hash --password=MyPassword $2a$10$L3Xb5G/AJOsEK5SuOn9uzOhpCCfuVWTajc5hwWerY6N5xBM/xlrMK","s":"1. Create the credentials file","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-create-the-credentials-file","p":4280},{"i":4287,"t":"Enable authentication for the JSON-RPC API using the --rpc-http-authentication-enabled or --rpc-ws-authentication-enabled option. Specify the credentials file using the --rpc-http-authentication-credentials-file or --rpc-ws-authentication-credentials-file option. note With authentication enabled, you can specify methods that don't require authentication using --rpc-http-api-methods-no-auth or --rpc-ws-api-methods-no-auth.","s":"2. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-enable-authentication","p":4280},{"i":4289,"t":"To generate an authentication token, make a request to the /login endpoint with your username and password. Specify the HTTP port or the WS port to generate a token to authenticate over HTTP or WS respectively. HTTP and WS requires a different token. Generate a token for HTTP Example for HTTP Generate a token for WS Example for WS JSON result curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' /login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' http://localhost:8545/login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' /login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' http://localhost:8546/login { \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MDYwNCwiZXhwIjoxNTUwNDYwOTA0fQ.l2Ycqzl_AyvReXBeUSayOlOMS_E8-DCuz3q0Db0DKD7mqyl6q-giWoEtfdWzUEvZbRRi2_ecKO3N6JkXq7zMKQAJbVAEzobfbaaXWcQEpHOjtnK4_Yz-UPyKiXtu7HGdcdl5Tfx3dKoksbqkBl3U3vFWxzmFnuu3dAISfVJYUNA\" } Authentication tokens expire five minutes after generation. If you require access after the token expires, you need to generate a new token.","s":"3. Generate an authentication token","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-generate-an-authentication-token","p":4280},{"i":4291,"t":"Enable authentication from the command line and supply the external JWT provider's public key. caution JWT public authentication disables the Besu /login endpoint, meaning username and password authentication will not work.","s":"JWT public key authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#jwt-public-key-authentication","p":4280},{"i":4293,"t":"The private and accompanying public key files must be in .pem format. The key algorithm can be: RSA with private key length of at least 2048 bits using algorithm RS256, RS384, or RS512. ECDSA private key, using ES256 (secp256r1 or secp256k1), ES384, or ES512. The default value for Besu is RS256. When you use a different key algorithm, you must specify the --rcp-http-authentication-jwt-algorithm option and/or the --rcp-ws-authentication-jwt-algorithm option depending on your needs. RS256 RSA Keys ES256 secp256r1 ECDSA Keys Generate the private key: openssl genrsa -out privateRSAKey.pem 2048 Generate the public key: openssl rsa -pubout -in privateRSAKey.pem -pubout -out publicRSAKey.pem Generate the private key: openssl ecparam -name secp256r1 -genkey -out privateECDSAKey.pem Generate the public key: openssl ec -in privateECDSAKey.pem -pubout -out publicECDSAKey.pem Private key security The private key must be kept secret. Never share private keys publicly or on a Web site, even if advertised as secure. Always keep your private keys safe -- ideally using hardware or vault -- and define a strong security policy and best practices. Compromised keys can provide attackers access to your node's RPC-API.","s":"1. Generate a private and public key pair","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-generate-a-private-and-public-key-pair","p":4280},{"i":4295,"t":"Create the JWT using a trusted authentication provider1 or library in your own code. See Java code sample to generate JWT using Vertx for an example implementation. Important The JWT must use one of the RS256, RS384, RS512, ES256, ES384, or ES512 algorithms. Each payload for the JWT must contain: JSON-RPC permissions exp (Expiration Time) claim Optionally, the tenant's Tessera public key using privacyPublicKey. Only used for multi-tenancy. Example JSON Payload Example JWT result { \"permissions\": [\"*:*\"], \"privacyPublicKey\": \"2UKH3VJThkOoKskrLFpwoxCnnRARyobV1bEdgseFHTs=\", \"exp\": 1600899999002 }","s":"2. Create the JWT","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-create-the-jwt","p":4280},{"i":4297,"t":"Enable authentication for the JSON-RPC API using the --rpc-http-authentication-enabled or --rpc-ws-authentication-enabled option. Specify the JWT provider's public key file to use with the externally created JWT, using the --rpc-http-authentication-jwt-public-key-file or --rpc-ws-authentication-jwt-public-key-file option. note With authentication enabled, you can specify methods that don't require authentication using --rpc-http-api-methods-no-auth or --rpc-ws-api-methods-no-auth.","s":"3. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-enable-authentication","p":4280},{"i":4299,"t":"Each user has a list of permissions strings defining the methods they can access. To give access to: All API methods, specify [\"*:*\"]. All API methods in an API group, specify [\":*\"]. For example, [\"eth:*\"]. Specific API methods, specify [\":\"]. For example, [\"admin:peers\"]. With authentication enabled, to explicitly specify a user cannot access any methods, include the user with an empty permissions list ([]). Users with an empty permissions list and users not included in the credentials file cannot access any JSON-RPC methods.","s":"JSON-RPC permissions","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#json-rpc-permissions","p":4280},{"i":4301,"t":"Specify the authentication token as a Bearer token in the JSON-RPC request header.","s":"Use an authentication token to make requests","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#use-an-authentication-token-to-make-requests","p":4280},{"i":4303,"t":"In the Authorization tab in the TYPE drop-down list, select Bearer Token and specify the token (generated either externally or by the login request).","s":"Postman","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#postman","p":4280},{"i":4305,"t":"Specify the Bearer in the header. cURL Request with authentication placeholders cURL Request with authentication curl -X POST -H 'Authorization: Bearer ' -d '{\"jsonrpc\":\"2.0\",\"method\":\"\",\"params\":[],\"id\":1}' curl -X POST -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MTQxNiwiZXhwIjoxNTUwNDYxNzE2fQ.WQ1mqpqzRLHaoL8gOSEZPvnRs_qf6j__7A3Sg8vf9RKvWdNTww_vRJF1gjcVy-FFh96AchVnQyXVx0aNUz9O0txt8VN3jqABVWbGMfSk2T_CFdSw5aDjuriCsves9BQpP70Vhj-tseaudg-XU5hCokX0tChbAqd9fB2138zYm5M' -d '{\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":1}' http://localhost:8545 Footnotes​ for example Auth0 or Keycloak ↩","s":"cURL","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#curl","p":4280},{"i":4307,"t":"for example Auth0 or Keycloak ↩","s":"Footnotes","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#footnote-label","p":4280},{"i":4309,"t":"JSON-RPC APIs allow you to interact with your node. JSON-RPC endpoints are not enabled by default. caution You should secure access to your node's JSON-RPC endpoints. Users with access to your node via JSON-RPC can make calls directly to your node, causing your node to consume resources. To enable JSON-RPC over HTTP or WebSocket, use the --rpc-http-enabled and --rpc-ws-enabled options. To enable JSON-RPC over an IPC socket, use the --Xrpc-ipc-enabled option. caution --Xrpc-ipc-enabled is an early access option. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Use JSON-RPC over HTTP, WebSocket, and IPC","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"","p":4308},{"i":4311,"t":"The geth console is a REPL (Read, Evaluate, & Print Loop) JavaScript console. Use JSON-RPC APIs supported by geth and Besu directly in the console. To use the geth console with Besu: Start Besu with the --rpc-http-enabled or --Xrpc-ipc-enabled option. Specify which APIs to enable using the --rpc-http-api or --Xrpc-ipc-api option. Start the geth console specifying the JSON-RPC endpoint: HTTP endpoint IPC endpoint geth attach http://localhost:8545 geth attach /path/to/besu.ipc Use the geth console to call JSON-RPC API methods that geth and Besu share. eth.syncing","s":"Geth console","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#geth-console","p":4308},{"i":4313,"t":"Besu disables Authentication by default.","s":"JSON-RPC authentication","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#json-rpc-authentication","p":4308},{"i":4316,"t":"To make RPC requests over HTTP, you can use curl. Syntax curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"\",\"params\":[]}' curl -X POST --data '{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}' http://127.0.0.1:8555 { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x60e\" } You can use curl to make multiple RPC requests (batch requests) over HTTP at the same time. Send the requests as an array, and receive an array of responses. The default number of allowed requests in a RPC batch request is 1024. Use the --rpc-http-max-batch-size command line option to update the default value. curl HTTP request JSON result curl -X POST --data '[{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}, {\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"admin_peers\",\"params\":[]}]' http://127.0.0.1:8555 [ { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x60e\" }, { \"jsonrpc\": \"2.0\", \"id\": \"2\", \"result\": [] } ]","s":"HTTP","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#http","p":4308},{"i":4318,"t":"To make RPC requests over WebSocket, you can use wscat, a Node.js based command-line tool. First connect to the WebSocket server using wscat (you only need to connect once per session): wscat -c ws:// After you establish a connection, the terminal displays a '>' prompt. Send individual requests as a JSON data package at each prompt. Syntax wscat WS request JSON result {\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"\",\"params\":[]} {\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]} { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x23\" } You can use wscat to make multiple RPC requests over WebSocket at the same time. Send the requests as an array, and receive an array of responses. wscat WS request JSON result [{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}, {\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"admin_peers\",\"params\":[]}] [ { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x23\" }, { \"jsonrpc\": \"2.0\", \"id\": \"2\", \"result\": [] } ] note wscat does not support headers. Authentication requires you to pass an authentication token in the request header. To use authentication with WebSocket, you need an app that supports headers.","s":"WebSocket","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#websocket","p":4308},{"i":4320,"t":"Besu provides readiness and liveness endpoints to confirm the Besu node status. Both return a 200 OK status when ready or live and a 503 Service Unavailable status if not ready or live.","s":"Readiness and liveness endpoints","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness-and-liveness-endpoints","p":4308},{"i":4322,"t":"By default, the readiness check requires a connected peer and the node to be within two blocks of the best known block. If you have disabled P2P communication, you do not need peers. A live node with P2P disabled is always ready. Use the query parameters minPeers and maxBlocksBehind to adjust the number of peers required and the number of blocks tolerance. Readiness endpoint curl request example Query parameters example http:///readiness curl -v 'http://localhost:8545/readiness' curl -v 'http://localhost:8545/readiness?minPeers=0&maxBlocksBehind=10'","s":"Readiness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness","p":4308},{"i":4324,"t":"The liveness check requires the JSON-RPC server to be up. You can use the endpoint to verify that the node can respond to RPC calls. The status in the response will always be UP. Liveness endpoint curl request example http:///liveness curl -v 'http://localhost:8545/liveness'","s":"Liveness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#liveness","p":4308},{"i":4326,"t":"Besu enables the ETH, NET, and WEB3 API methods by default. To enable the ADMIN, CLIQUE, DEBUG, EEA, IBFT, MINER, PERM, PLUGINS, PRIV, TRACE, and TXPOOL API methods, use the --rpc-http-api, --rpc-ws-api, or --Xrpc-ipc-api options. caution --Xrpc-ipc-api is an early access option.","s":"API methods enabled by default","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#api-methods-enabled-by-default","p":4308},{"i":4328,"t":"When you make requests that might have different results depending on the block accessed, the block parameter specifies the block. Methods such as eth_getTransactionByBlockNumberAndIndex have a block parameter. The block parameter can have one of the following values: blockNumber : quantity - The block number, specified in hexadecimal or decimal. 0 represents the genesis block. blockHash : string or object - 32-byte block hash or JSON object specifying the block hash. If using a JSON object, you can specify requireCanonical to indicate whether the block must be a canonical block. See this example. note Only the following methods support the blockHash parameter: eth_call eth_getBalance eth_getCode eth_getProof eth_getStorageAt eth_getTransactionCount earliest : tag - The earliest (genesis) block. latest : tag - The last block mined. pending : tag - When used with eth_getTransactionCount, refers to the last block mined plus pending transactions. When used with qbft_getValidatorsByBlockNumber, returns a list of validators that will be used to produce the next block. finalized : tag - The most recent crypto-economically secure block. It cannot be reorganized outside manual intervention driven by community coordination. safe : tag - The most recent block that is safe from reorganization under honest majority and certain synchronicity assumptions.","s":"Block parameter","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#block-parameter","p":4308},{"i":4330,"t":"Consensus and execution clients communicate with each other using the Engine API. These API methods are a separate subsection of the JSON-RPC API.","s":"Use the Engine API","u":"/public-networks/how-to/use-engine-api","h":"","p":4329},{"i":4332,"t":"The Engine API is enabled by default even if no consensus client configuration exists. You can configure the Engine API to: Specify the service ports. Specify the host allowlist. Example Engine API configuration besu --engine-rpc-port=8551 --engine-host-allowlist=localhost,127.0.0.1 --engine-jwt-secret=jwt.hex","s":"Configure the Engine API","u":"/public-networks/how-to/use-engine-api","h":"#configure-the-engine-api","p":4329},{"i":4334,"t":"To specify the port the Engine API service listens on for HTTP and WebSocket, use the --engine-rpc-port option. The default is 8551. This option is useful when you have another execution engine running on port 8551, in which case you can specify Besu to use another port, for example, --engine-rpc-port 8552.","s":"Service ports","u":"/public-networks/how-to/use-engine-api","h":"#service-ports","p":4329},{"i":4336,"t":"To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the --engine-host-allowlist option matches the request host headers. By default, Besu accepts requests and connections from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the Engine API, we recommend using authentication. If your application publishes RPC ports, specify the hostnames when starting Besu. Specify * for --engine-host-allowlist to effectively disable host protection. caution We don't recommend specifying * for --engine-host-allowlist in production.","s":"Host allowlist","u":"/public-networks/how-to/use-engine-api","h":"#host-allowlist","p":4329},{"i":4338,"t":"By default, authentication for the Engine API is enabled. To disable, set the --engine-jwt-disabled option to true. caution Don't disable JWT authentication in production environments. Disable only for testing purposes. Set the JWT secret by using the --engine-jwt-secret option.","s":"Authentication","u":"/public-networks/how-to/use-engine-api","h":"#authentication","p":4329},{"i":4341,"t":"Prepare to send a payload using engine_forkchoiceUpdatedV1. curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"safeBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"finalizedBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\"},{\"timestamp\": \"0x5\",\"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\"suggestedFeeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\"}],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"validationError\": null }, \"payloadId\": \"0x0000000021f32cc1\" } }","s":"1. Prepare a payload","u":"/public-networks/how-to/use-engine-api","h":"#1-prepare-a-payload","p":4329},{"i":4343,"t":"Get the payload using engine_getPayloadV1 curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadV1\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } }","s":"2. Get the payload","u":"/public-networks/how-to/use-engine-api","h":"#2-get-the-payload","p":4329},{"i":4345,"t":"Execute the payload using engine_newPayloadV1 curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_newPayloadV1\",\"params\":[ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null } }","s":"3. Execute the payload","u":"/public-networks/how-to/use-engine-api","h":"#3-execute-the-payload","p":4329},{"i":4347,"t":"Update the fork choice using engine_forkchoiceUpdatedV1 again. curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\"},null],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null }, \"payloadId\": null } }","s":"4. Update the fork choice","u":"/public-networks/how-to/use-engine-api","h":"#4-update-the-fork-choice","p":4329},{"i":4349,"t":"Besu supports CPU and GPU mining, which are configured using command line options. GPU mining tests used Ethminer with the stratum+tcp and getwork schemes. Ethminer has been used with Besu to mine blocks on the Ropsten testnet, ETC Mainnet (uncle block only) and Mordor ETC testnet. note Some mining software supports the getwork scheme as the http scheme. The Ropsten testnet is now deprecated. It transitioned to proof of stake consensus before deprecation.","s":"Configure mining","u":"/public-networks/how-to/use-pow/mining","h":"","p":4348},{"i":4351,"t":"To enable CPU mining, start Besu with the following options: besu --rpc-http-api=ETH,MINER --miner-enabled --miner-coinbase= Where is the account you pay mining rewards to. For example, fe3b557e8fb62b89f4916b721be55ceb828dbd73. Start and stop mining using the miner_start and miner_stop APIs.","s":"Configure CPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-cpu-mining","p":4348},{"i":4353,"t":"Besu supports GPU mining, tested using Ethminer with the stratum+tcp scheme. To enable GPU mining, start Besu with the following options: besu --rpc-http-api=ETH,MINER --miner-enabled --miner-stratum-enabled --miner-coinbase= Where is the account you pay mining rewards to. For example, fe3b557e8fb62b89f4916b721be55ceb828dbd73. Optional command line options are: --miner-stratum-host to specify the host of the mining service. --miner-stratum-port to specify the port of the mining service. note Besu also supports the getwork scheme. Use the --miner-stratum-enabled option and enable the ETH RPCs. The getwork scheme is supported as the http scheme in certain mining software. Start and stop mining using the miner_start and miner_stop APIs.","s":"Configure GPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-gpu-mining","p":4348},{"i":4355,"t":"The JSON-RPC API methods for mining are: miner_start to start mining. miner_stop to stop mining. eth_mining to determine whether the client is actively mining new blocks. eth_getMinerDataByBlockHash and eth_getMinerDataByBlockNumber to get the miner data for a specified block. eth_hashrate to get the number of hashes per second with which the node is mining. Not supported for GPU mining. eth_getWork to get the hash of the current block, the seed hash, and the target boundary condition. Only used when using the getwork scheme. eth_submitWork to submit the PoW solution. Only used when using the getwork scheme.","s":"Mining APIs","u":"/public-networks/how-to/use-pow/mining","h":"#mining-apis","p":4348},{"i":4358,"t":"On mining nodes, log messages indicate block creation. 2019-05-08 20:28:27.026+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=660, Round=0}, hash=0x759afaba4e923d89175d850ceca4b8ef81f7d9c727b0b0b8e714b624a4b8e8cc 2019-05-08 20:28:29.020+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=661, Round=0}, hash=0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14 On non-mining nodes, log messages indicate importing blocks. 2019-05-08 20:28:29.026+10:00 | EthScheduler-Workers-1 | INFO | BlockPropagationManager | Imported #661 / 0 tx / 0 om / 0 (0.0%) gas / (0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14) in 0.000s. 2019-05-08 20:28:31.031+10:00 | EthScheduler-Workers-0 | INFO | BlockPropagationManager | Imported #662 / 0 tx / 0 om / 0 (0.0%) gas / (0x0ead4e20123d3f1433d8dec894fcce386da4049819b24b309963ce7a8a0fcf03) in 0.000s. To confirm the block number is increasing, use the eth_blockNumber JSON-RPC API method. If there's no block creation in Clique or IBFT 2.0 networks, ensure the validator addresses in the genesis file match running nodes.","s":"Check block creation","u":"/public-networks/how-to/use-pow/mining","h":"#check-block-creation","p":4348},{"i":4360,"t":"If you add a transaction to the transaction pool and the transaction hash returns, but the transaction is never mined, check the --min-gas-price option on mining nodes. If the gasPrice on a transaction is lower than the min-gas-price for the mining node, the transaction will never mine. In free gas networks, you must set --min-gas-price to zero.","s":"No mined transactions","u":"/public-networks/how-to/use-pow/mining","h":"#no-mined-transactions","p":4348},{"i":4363,"t":"Subscribe to events by using either RPC Pub/Sub over WebSockets or filters over HTTP. Use RPC Pub/Sub over WebSockets to wait for events instead of polling for them. For example, dapps subscribe to logs and receive notifications when a specific event occurs. Methods specific to RPC Pub/Sub are: eth_subscribe and eth_unsubscribe - create or cancel a subscription for specific events. priv_subscribe and priv_unsubscribe - create or cancel a subscription for private logs. info Unlike other Besu API methods, you cannot call the RPC Pub/Sub methods over HTTP. Use the --rpc-ws-enabled option to enable the WebSockets JSON-RPC service.","s":"Introduction","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#introduction","p":4361},{"i":4365,"t":"WebSockets supports the RPC Pub/Sub API. To create subscriptions, use eth_subscribe or priv_subscribe. Once subscribed, the API publishes notifications using eth_subscription or priv_subscription. Subscriptions couple with connections. If a connection is closed, all subscriptions created over the connection are removed.","s":"Use RPC Pub/Sub","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#use-rpc-pubsub","p":4361},{"i":4367,"t":"eth_subscribe and priv_subscribe return a subscription ID for each subscription created. Notifications include the subscription ID. For example, to create a synchronizing subscription: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"syncing\"] } The result includes the subscription ID of \"0x1\": { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } The notifications also include the subscription ID of \"0x1\": { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x50\", \"highestBlock\": \"0x343c19\" } } }","s":"Subscription ID","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscription-id","p":4361},{"i":4369,"t":"Subscribing to some events (for example, logs) can cause a flood of notifications while the node is synchronizing.","s":"Notifications when synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#notifications-when-synchronizing","p":4361},{"i":4371,"t":"Use eth_subscribe to create subscriptions for the following event types: New headers Logs Pending transactions Dropped transactions Synchronizing Use priv_subscribe to create subscriptions for logs on private contracts. tip Only logs subscriptions are relevant for private transactions because private transactions are anchored to the public chain rather than having their own private blockchain.","s":"Subscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscribe","p":4361},{"i":4373,"t":"To notify you about each block added to the blockchain, use the newHeads parameter with eth_subscribe. If a chain reorganization occurs, the subscription publishes notifications for blocks in the new chain. This means the subscription can publish notifications for multiple blocks at the same height on the blockchain. The new headers notification returns block objects. The second parameter is optional. If specified, the notifications include whole transaction objects, Otherwise, the notifications include transaction hashes. To subscribe to new header notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newHeads\", { \"includeTransactions\": true }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 2, \"result\": \"0x1\" } Example notification without the {\"includeTransactions\": true} parameter included: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": { \"number\": \"0x40c22\", \"hash\": \"0x16af2ee1672203c7ac13ff280822008be0f38e1e5bdc675760015ae3192c0e3a\", \"parentHash\": \"0x1fcf5dadfaf2ab4d985eb05d40eaa23605b0db25d736610c4b87173bfe438f91\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00008000000000080000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000000040000000000000000000000000000000000000400000000010000000000000000100000000000020000000000000000000000000000000000010000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x5b2e3c1a49352f1ca9fb5dfe74b7ffbbb6d70e23a12693444e26058d8a8e6296\", \"stateRoot\": \"0xbe8d3bc58bd982421a3ea8b66753404502df0f464ae78a17661d157c406dd38b\", \"receiptsRoot\": \"0x81b175ec1f4d44fbbd6ba08f1bd3950663b307b7cb35751c067b535cc0b58f12\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x7c16e\", \"extraData\": \"0xd783010600846765746887676f312e372e33856c696e757800000000000000002160f780bb1f61eda045c67cdb1297ba37d8349df8035533cb0cf82a7e45f23f3d72bbec125a9f499b3eb110b7d1918d466cb2ede90b38296cfe2aaf452c513f00\", \"size\": \"0x3a1\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x11ac3a\", \"timestamp\": \"0x592afc24\", \"uncles\": [], \"transactions\": [ \"0x419c69d21b14e2e8f911def22bb6d0156c876c0e1c61067de836713043364d6c\", \"0x70a5b2cb2cee6e0b199232a1757fc2a9d6053a4691a7afef8508fd88aeeec703\", \"0x4b3035f1d32339fe1a4f88147dc197a0fe5bbd63d3b9dec2dad96a3b46e4fddd\" ] } } } Example notification with the {\"includeTransactions\": true} parameter included: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\":{ \"subscription\":\"0x1\", \"result\": { .... \"transactions\":[ { \"blockHash\":\"0xa30ee4d7c271ae5150aec494131c5f1f34089c7aa8fb58bd8bb916a55275bb90\", \"blockNumber\":\"0x63\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0x5208\", \"gasPrice\":\"0x3b9aca00\", \"hash\":\"0x11f66c3e96a92e3c14c1c33ad77381221bf8b58a887b4fed6aee456fc6f39b24\", \"input\":\"0x\", \"nonce\":\"0x1\", \"to\":\"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"transactionIndex\":\"0x0\", \"value\":\"0x56bc75e2d63100000\", \"v\":\"0xfe8\", \"r\":\"0x4b57d179c74885ef5f9326fd000665ea7fae44095c1e2016a2817fc671beb8cc\", \"s\":\"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8\", } ], }, } }","s":"New headers","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#new-headers","p":4361},{"i":4375,"t":"To notify you about logs included in new blocks, use the logs parameter with eth_subscribe or priv_subscribe. Specify a filter object to receive notifications only for logs matching your filter. Logs subscriptions have a filter object parameter with the following fields: address - (optional) Either an address or an array of addresses. Returns only logs created from these addresses. topics - (optional) Returns only logs that match the specified topics. fromBlock - (optional) The earliest block from which to return logs. toBlock - (optional) The last block from which to return logs. For private contracts, the privacy group ID must be specified. Only members of a privacy group receive logs for a private contract subscription. If you create a subscription for a privacy group you are not a member of, you will not receive any notifications. If a chain reorganization occurs, the subscription publishes notifications for logs from the old chain with the removed property in the log object set to true. This means the subscription can publish notifications for multiple logs for the same transaction. The logs subscription returns log objects. All logs Specific parameters Result Notification { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"logs\", {}] } { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [ \"logs\", { \"address\": \"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd\", \"topics\": [ \"0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902\" ], \"fromBlock\": \"0x0\", \"toBlock\": \"latest\" } ] } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" } { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x2\", \"result\": { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x2174\", \"blockHash\": \"0x7bc83837534aa13df55ff7db77784b1d1ba666d4c4bdd223cae9fe09c7c37eba\", \"transactionHash\": \"0x942179373e413824c6bc7045e92295aff91b679215446549b4aeb084da46495b\", \"transactionIndex\": \"0x0\", \"address\": \"0x9b8397f1b0fecd3a1a40cdd5e8221fa461898517\", \"data\": \"0x\", \"topics\": [ \"0x199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca072787\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } } } All logs for privacy group Specific parameters Result Notification { \"id\": 1, \"method\": \"priv_subscribe\", \"params\": [\"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"logs\", {}] } { \"id\": 1, \"method\": \"priv_subscribe\", \"params\": [ \"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"logs\", { \"address\": \"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd\", \"topics\": [ \"0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902\" ] } ] } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } { \"jsonrpc\": \"2.0\", \"method\": \"priv_subscription\", \"params\": { \"subscription\": \"0x1\", \"privacyGroupId\": \"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"result\": { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x285\", \"blockHash\": \"0x98490766b16de2a4d044c04d92599d71e626bc96e42f0c74274ef4e03fafd579\", \"transactionHash\": \"0x40034ef14e3a22946693dd2a11efddf3a8850ddcad46b408198df6c176c53ffb\", \"transactionIndex\": \"0x0\", \"address\": \"0x61f96a7ed09877197d4fff0c29b8e523913651a9\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } } }","s":"Logs","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#logs","p":4361},{"i":4377,"t":"To notify you about pending transactions added to the transaction pool for the node, use the newPendingTransactions parameter with eth_subscribe. The pending transactions subscription returns the transaction hashes or transaction details of the pending transactions. If the includeTransactions parameter is not included, the default is transaction hashes only. If a chain reorganization occurs, Besu resubmits transactions for inclusion in the new canonical chain. This means the subscription can publish notifications for the same pending transaction more than once. To subscribe to pending transaction notifications and receive transaction hashes only: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newPendingTransactions\", { \"includeTransactions\": false }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": \"0x5705bc8bf875ff03e98adb98489428835892dc6ba6a6b139fee1becbc26db0b8\" } } To subscribe to pending transaction notifications and receive transaction details: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newPendingTransactions\", { \"includeTransactions\": true }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x2\", \"result\": { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0x2540be400\", \"hash\": \"0x7a4185f40ee93cb27eb132f301d0a5414c1f871051f166fc8804c376aab3ffec\", \"input\": \"0x\", \"nonce\": \"0x13\", \"to\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\", \"value\": \"0x8ac7230489e80000\", \"v\": \"0xfe7\", \"r\": \"0xdd9013c67469d2fe79afdc61777c55bdced33c90fa6f9b83d8f9b7e445085123\", \"s\": \"0x45823a1ab22ae9c83876ea435dc5ecc4fe3a83c1bfbc340a5f57df2f5a474fa5\" } } }","s":"Pending transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#pending-transactions","p":4361},{"i":4379,"t":"To notify you about transactions dropped from the transaction pool for the node, use the droppedPendingTransactions parameter with eth_subscribe. The dropped transactions subscription returns the transaction hashes of the dropped transactions. Dropped transactions can be re-added to the transaction pool from a variety of sources. For example, receiving a previously dropped transaction from a peer. As a result, it's possible to receive multiple dropped transaction notifications for the same transaction. To subscribe to dropped transaction notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"droppedPendingTransactions\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": \"0xf57d6a90a7fb30880cfbdf6b432b487d0e94a3b55b34dc4b45e3b0b237ecab4c\" } }","s":"Dropped transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#dropped-transactions","p":4361},{"i":4381,"t":"To notify you about synchronization progress, use the syncing parameter with eth_subscribe. When behind the chain head, the synchronizing subscription returns an object indicating the synchronization progress. When fully synchronized, returns false. To subscribe to synchronizing notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"syncing\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4\" } Example notification while synchronizing: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x4\", \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x3e80\", \"highestBlock\": \"0x67b93c\" } } } Example notification when synchronized with chain head: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x4\", \"result\": false } }","s":"Synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#synchronizing","p":4361},{"i":4383,"t":"To cancel a subscription, use the subscription ID with eth_unsubscribe or priv_unsubscribe. Only the connection that created a subscription can unsubscribe from it. When cancelling a subscription for private logs, the privacy group ID must be specified. eth_unsubscribe and priv_unsubscribe return true if subscription successfully unsubscribed; otherwise, returns an error. To unsubscribe from a subscription with subscription ID of 0x1: { \"id\": 1, \"method\": \"eth_unsubscribe\", \"params\": [\"0x1\"] } To unsubscribe from private logs subscription: { \"id\": 1, \"method\": \"priv_unsubscribe\", \"params\": [\"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"0x2\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"Unsubscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#unsubscribe","p":4361},{"i":4385,"t":"The following objects are parameters for or returned by Besu API methods. info This reference contains API objects that apply to both public and private networks. For private-network-specific API objects, see the private network API object reference.","s":"Besu API objects","u":"/public-networks/reference/api/objects","h":"","p":4384},{"i":4387,"t":"Returned by eth_getBlockByHash and eth_getBlockByNumber. Key Type Value number Quantity, Integer Block number. null when block is pending. hash Data, 32 bytes Hash of the block. null when block is pending. parentHash Data, 32 bytes Hash of the parent block. nonce Data, 8 bytes Hash of the generated proof of work. null when block is pending. sha3Uncles Data, 32 bytes SHA3 of the uncle's data in the block. logsBloom Data, 256 bytes Bloom filter for the block logs. null when block is pending. transactionsRoot Data, 32 bytes Root of the transaction trie for the block. stateRoot Data, 32 bytes Root of the final state trie for the block. receiptsRoot Data, 32 bytes Root of the receipts trie for the block. miner Data, 20 bytes Address to pay mining rewards to. difficulty Quantity, Integer Difficulty for this block. totalDifficulty Quantity, Integer Total difficulty of the chain until this block. This value will always be 0 for an uncle block. extraData Data Extra data field for this block. The first 32 bytes is vanity data you can set using the --miner-extra-data command line option. Stores extra data when used with Clique and IBFT. size Quantity, Integer Size of block in bytes. gasLimit Quantity Maximum gas allowed in this block. gasUsed Quantity Total gas used by all transactions in this block. timestamp Quantity Unix timestamp (milliseconds) for block assembly. transactions Array Array of transaction objects, or 32 byte transaction hashes depending on the specified boolean parameter. uncles Array Array of uncle hashes. baseFeePerGas Quantity The block's base fee per gas. This field is empty for blocks created before EIP-1559.","s":"Block object","u":"/public-networks/reference/api/objects","h":"#block-object","p":4384},{"i":4389,"t":"Returned by eth_feeHistory for the requested block range. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. Key Type Value oldestBlock Quantity, Integer Lowest number block of the returned range. baseFeePerGas Array Array of block base fees per gas, including an extra block value. The extra value is the next block after the newest block in the returned range. Returns zeroes for blocks created before EIP-1559. baseFeePerBlobGas Array Array of base fees per blob gas. Returns zeroes for blocks created before EIP-4844. gasUsedRatio Array Array of block gas used ratios. These are calculated as the ratio of gasUsed and gasLimit. blobGasUsedRatio Array Array of blob gas used ratios. These are calculated as the ratio of blobGasUsed and the max blob gas per block. reward Array Array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty.","s":"Fee history results object","u":"/public-networks/reference/api/objects","h":"#fee-history-results-object","p":4384},{"i":4391,"t":"Parameter for eth_newFilter, eth_getLogs, and priv_getLogs. Used to filter logs. Key Type Required/Optional Value fromBlock Quantity | Tag Optional Integer block number or latest, pending, earliest. See block parameter. Default is latest. toBlock Quantity | Tag Optional Integer block number or latest, pending, earliest. See block parameter. Default is latest. address Data | Array Optional Contract address or array of addresses from which logs originate. topics Array of Data, 32 bytes each Optional Array of topics by which to filter logs. eth_getLogs and priv_getLogs have an extra key. Key Type Required/Optional Value blockHash Data, 32 bytes Optional. Hash of block for which to return logs. If you specify blockHash, you cannot specify fromBlock and toBlock.","s":"Filter options object","u":"/public-networks/reference/api/objects","h":"#filter-options-object","p":4384},{"i":4393,"t":"Returned by eth_getFilterChanges and priv_getLogs. Transaction receipt objects can contain an array of log objects. Key Type Value removed Tag true if log removed because of a chain reorganization. false if a valid log. logIndex Quantity, Integer Log index position in the block. null when log is pending. transactionIndex Quantity, Integer Index position of the starting transaction for the log. null when log is pending. transactionHash Data, 32 bytes Hash of the starting transaction for the log. null when log is pending. blockHash Data, 32 bytes Hash of the block that includes the log. null when log is pending. blockNumber Quantity Number of block that includes the log. null when log is pending. address Data, 20 bytes Address the log originated from. data Data Non-indexed arguments of the log. topics Array of Data, 32 bytes each Event signature hash and 0 to 3 indexed log arguments.","s":"Log object","u":"/public-networks/reference/api/objects","h":"#log-object","p":4384},{"i":4395,"t":"Returned by eth_getMinerDataByBlockHash and eth_getMinerDataByBlockNumber. Key Type Value netBlockReward Quantity, Integer The net block reward, in Wei, is staticBlockReward + transactionFee + uncleInclusionReward. staticBlockReward Quantity, Integer The static block reward, in Wei, is preset on a hard fork. transactionFee Quantity, Integer The transaction fee, in Wei, is sum of upfront cost - refund amount for all transactions. uncleInclusionReward Quantity, Integer The uncle inclusion reward, in Wei, is static block reward * number of ommers/32. uncleRewards Map Map of uncle block hashes and uncle miner coinbase addresses. coinbase Data, 20 bytes Coinbase address. extraData Data Extra data field for this block. The first 32 bytes is vanity data you can set using the --miner-extra-data command line option. difficulty Quantity, Integer Difficulty of this block. totalDifficulty Quantity, Integer Total difficulty of the chain until this block.","s":"Miner data object","u":"/public-networks/reference/api/objects","h":"#miner-data-object","p":4384},{"i":4397,"t":"Returned by txpool_besuPendingTransactions. Key Type Value accessList Array (Optional) List of addresses and storage keys the transaction plans to access. Used in ACCESS_LIST transactions and may be used in EIP1559 transactions. from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity (Optional) Gas price, in Wei, provided by the sender. Not used only in EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in EIP1559 transactions. maxFeePerGas Quantity, Integer (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in EIP1559 transactions. hash Data, 32 bytes Hash of the transaction. input Data Data sent with the transaction to create or invoke a contract. nonce Quantity Number of transactions made by the sender before this one. to Data, 20 bytes Address of the receiver. null if a contract creation transaction. transactionType String Transaction type. value Quantity Value transferred, in Wei. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s.","s":"Pending transaction object","u":"/public-networks/reference/api/objects","h":"#pending-transaction-object","p":4384},{"i":4399,"t":"Returned by debug_storageRangeAt. Key Type Value storage Object Key hash and value. Pre-image key is null if it falls outside the cache. nextKey Hash Hash of next key if further storage in range. Otherwise, not included.","s":"Range object","u":"/public-networks/reference/api/objects","h":"#range-object","p":4384},{"i":4401,"t":"Log information returned as part of the Trace object. Key Type Value pc Integer Current program counter. op String Current OpCode. gas Integer Gas remaining. gasCost Integer Cost in wei of each gas unit. depth Integer Execution depth. exceptionalHaltReasons Array One or more strings representing an error condition causing the EVM execution to terminate. These strings suggest that EVM execution terminated for reasons such as running out of gas or attempting to execute an unknown instruction. Generally a single exceptional halt reason returns but it's possible for more than one to occur at once. stack Array of 32 byte arrays EVM execution stack before executing current operation. memory Array of 32 byte arrays Memory space of the contract before executing current operation. storage Object Storage entries changed by the current transaction.","s":"Structured log object","u":"/public-networks/reference/api/objects","h":"#structured-log-object","p":4384},{"i":4403,"t":"Returned by debug_traceBlock, debug_traceBlockByHash, debug_traceBlockByNumber, debug_traceTransaction, and debug_traceCall. Key Type Value gas Integer Gas used by the transaction. failed Boolean True if transaction failed, otherwise, false. returnValue String Bytes returned from transaction execution (without a 0x prefix). structLogs Array Array of structured log objects.","s":"Trace object","u":"/public-networks/reference/api/objects","h":"#trace-object","p":4384},{"i":4405,"t":"Parameter for trace_filter. All parameters are optional. Key Type Value fromBLock String | Tag Trace starts at this block. toBlock String | Tag Trace stops at this block. fromAddress String Include only traces sent from this address. toAddress String Include only traces with this destination address. after Quantity The offset trace number. count Integer Number of traces to display in a batch.","s":"Trace filter options object","u":"/public-networks/reference/api/objects","h":"#trace-filter-options-object","p":4384},{"i":4407,"t":"Returned by eth_getTransactionByHash, eth_getTransactionByBlockHashAndIndex, and eth_getTransactionByBlockNumberAndIndex. Key Type Value accessList Array (Optional) List of addresses and storage keys the transaction plans to access. Used in ACCESS_LIST transactions and may be used in EIP1559 transactions. blockHash Data, 32 bytes Hash of the block containing this transaction. null when transaction is pending. blockNumber Quantity Block number of the block containing this transaction. null when transaction is pending. chainId Quantity Chain ID. from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity (Optional) Gas price, in Wei, provided by the sender. Used only in non-EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in EIP1559 transactions. maxFeePerGas Quantity, Integer (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in EIP1559 transactions. hash Data, 32 bytes Hash of the transaction. input Data Data sent with the transaction to create or invoke a contract. For private transactions, it's a pointer to the transaction location in Tessera. nonce Quantity Number of transactions made by the sender before this one. to Data, 20 bytes Address of the receiver. null if a contract creation transaction. transactionIndex Quantity, Integer Index position of the transaction in the block. null when transaction is pending. transactionType String Transaction type. value Quantity Value transferred, in Wei. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s.","s":"Transaction object","u":"/public-networks/reference/api/objects","h":"#transaction-object","p":4384},{"i":4409,"t":"Parameter for eth_call, eth_createAccessList, and eth_estimateGas. All transaction call object parameters are optional. Key Type Value from Data, 20 bytes Address of the sender. to Data, 20 bytes Address of the action receiver. gas Quantity, Integer Gas provided by the sender. eth_call consumes zero gas, but other executions might need this parameter. eth_estimateGas ignores this value. gasPrice Quantity, Integer Gas price, in Wei, provided by the sender. The default is 0. Used only in non-EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Can be used only in EIP1559 transactions. If used, must specify maxFeePerGas. maxFeePerGas Quantity, Integer Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Can be used only in EIP1559 transactions. If used, must specify maxPriorityFeePerGas. maxFeePerBlobGas Quantity, Integer Maximum fee the sender is willing to pay per blob gas. Only used for blob transactions introduced in EIP-4844. value Quantity, Integer Value transferred, in Wei. data Data Hash of the method signature and encoded parameters. For details, see Ethereum Contract ABI. Must be equal to input if both parameters are provided. input Data Hash of the method signature and encoded parameters. For details, see Ethereum Contract ABI. Must be equal to data if both parameters are provided. accessList Array List of addresses and storage keys that the transaction plans to access. Used only in non-FRONTIER transactions. strict Tag Determines if the sender account balance is checked. If true, the balance is checked. If false, the balance is not checked. If not specified, the balance is checked against the gas parameters if supplied. blobVersionedHashes Array List of references to blobs introduced in EIP-4844.","s":"Transaction call object","u":"/public-networks/reference/api/objects","h":"#transaction-call-object","p":4384},{"i":4411,"t":"Returned by eth_getTransactionReceipt. Key Type Value blockHash Data, 32 bytes Hash of block containing this transaction. blockNumber Quantity Block number of block containing this transaction. contractAddress Data, 20 bytes Contract address created, if contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value. cumulativeGasUsed Quantity Total amount of gas used by previous transactions in the block and this transaction. effectiveGasPrice Quantity The actual value per gas deducted from the sender's account. from Data, 20 bytes Address of the sender. gasUsed Quantity Amount of gas used by this specific transaction. logs Array Array of log objects generated by this transaction. logsBloom Data, 256 bytes Bloom filter for light clients to quickly retrieve related logs. status Quantity Either 0x0 (failure), 0x1 (success), or 0x2 (invalid). to Data, 20 bytes Address of the receiver, if sending ether, otherwise, null. transactionHash Data, 32 bytes Hash of the transaction. transactionIndex Quantity, Integer Index position of transaction in the block. transactionType String Transaction type. revertReason String ABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled. type Quantity Transaction type, 0x00 for legacy transactions, 0x01 for access list types, 0x02 for dynamic fees, and 0x03 for blob transactions. note For pre-Byzantium transactions, the transaction receipt object includes the following instead of status: Key Type Value root Data, 32 bytes Post-transaction state root","s":"Transaction receipt object","u":"/public-networks/reference/api/objects","h":"#transaction-receipt-object","p":4384},{"i":4413,"t":"Returned by trace_replayBlockTransactions. Key Type Value output Boolean Transaction result. 1 for success and 0 for failure. stateDiff Object State changes in the requested block. trace Array Ordered list of calls to other contracts. vmTrace Object Ordered list of EVM actions. transactionHash Data, 32 bytes Hash of the replayed transaction.","s":"Transaction trace object","u":"/public-networks/reference/api/objects","h":"#transaction-trace-object","p":4384},{"i":4415,"t":"This reference describes the syntax of the Besu command line interface (CLI) subcommands. note This reference contains subcommands that apply to both public and private networks. For private-network-specific subcommands, see the private network subcommands reference. To start a Besu node using subcommands, run: besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS] If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice. besu Tab+Tab","s":"Subcommands","u":"/public-networks/reference/cli/subcommands","h":"","p":4414},{"i":4417,"t":"Provides blocks related actions.","s":"blocks","u":"/public-networks/reference/cli/subcommands","h":"#blocks","p":4414},{"i":4419,"t":"Syntax Example besu blocks import [--skip-pow-validation-enabled] [--start-block=] [--end-block=] --from= besu blocks import --skip-pow-validation-enabled --start-block=100 --end-block=300 --from=/home/me/me_project/mainnet-export1.blocks --from=/home/me/me_project/mainnet-export2.blocks Imports a block or range of blocks from the specified file into the blockchain database. You can specify the starting index of the block range to import with --start-block. If omitted, the default start block is 0 (the beginning of the chain). You can specify the ending index (exclusive) of the block range to import with --end-block. If omitted, all blocks after the start block are imported. You can specify multiple --from arguments. This can be useful when blocks have been exported over time to multiple files. If multiple files are provided they are read in the order specified in the command. Including --skip-pow-validation-enabled skips validation of the mixHash when importing blocks. note Use --skip-pow-validation-enabled when performing Ethereum Foundation hive testing.","s":"import","u":"/public-networks/reference/cli/subcommands","h":"#import","p":4414},{"i":4421,"t":"Syntax Example besu blocks export [--start-block=] [--end-block=] --to= besu --network=holesky --data-path=/home/data/ blocks export --start-block=100 --end-block=300 --to=/home/exportblock.bin Exports a block or range of blocks from storage to a file in RLP format. If you omit --start-block, the default start block is 0 (the beginning of the chain), and if you omit --end-block, the default end block is the current chain head. If you are not running the command against the default network (Mainnet), specify the --network or --genesis-file parameter.","s":"export","u":"/public-networks/reference/cli/subcommands","h":"#export","p":4414},{"i":4423,"t":"Provides operator actions.","s":"operator","u":"/public-networks/reference/cli/subcommands","h":"#operator","p":4414},{"i":4425,"t":"Syntax Example besu operator generate-log-bloom-cache [--start-block=] [--end-block=] besu --network=holesky --data-path=/project/holesky operator generate-log-bloom-cache --start-block=0 --end-block=100000 tip Manually executing generate-log-bloom-cache is not required unless you set the --auto-log-bloom-caching-enabled command line option to false. Generates cached log bloom indexes for blocks. APIs use the cached indexes for improved log query performance. note Each index file contains 100000 blocks. The last fragment of blocks less that 100000 are not indexed. To generate cached log bloom indexes while the node is running, use the admin_generateLogBloomCache API.","s":"generate-log-bloom-cache","u":"/public-networks/reference/cli/subcommands","h":"#generate-log-bloom-cache","p":4414},{"i":4427,"t":"Provides password related actions.","s":"password","u":"/public-networks/reference/cli/subcommands","h":"#password","p":4414},{"i":4429,"t":"Syntax Example besu password hash --password= besu password hash --password=myPassword123 Generates the hash of a given password. Include the hash in the credentials file for JSON-RPC API authentication.","s":"hash","u":"/public-networks/reference/cli/subcommands","h":"#hash","p":4414},{"i":4431,"t":"Provides node public key related actions. caution To get the public key or address of a node, ensure you use the --data-path or --node-private-key-file option with the public-key command. Otherwise, a new node key is silently generated when starting Besu.","s":"public-key","u":"/public-networks/reference/cli/subcommands","h":"#public-key","p":4414},{"i":4433,"t":"Syntax Example (to standard output) Example (to file) besu public-key export [--node-private-key-file=] [--to=] [--ec-curve=] besu --data-path= public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1 besu --data-path= public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/not_precious_pub_key --ec-curve=secp256k1 Outputs the node public key to standard output or to the file specified by --to=. You can output the public key associated with a specific private key file using the --node-private-key-file option. The default elliptic curve used for the key is secp256k1. Use the --ec-curve option to choose between secp256k1 or secp256r1.","s":"export","u":"/public-networks/reference/cli/subcommands","h":"#export-1","p":4414},{"i":4435,"t":"Syntax Example (to standard output) Example (to file) besu public-key export-address [--node-private-key-file=] [--to=] [--ec-curve=] besu --data-path= public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1 besu --data-path= public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/me_node_address --ec-curve=secp256k1 Outputs the node address to standard output or to the file specified by --to=. You can output the address associated with a specific private key file using the --node-private-key-file option. The default elliptic curve used for the key is secp256k1. Use the --ec-curve option to choose between secp256k1 or secp256r1.","s":"export-address","u":"/public-networks/reference/cli/subcommands","h":"#export-address","p":4414},{"i":4437,"t":"Syntax Example besu retesteth [--data-path=] [--rpc-http-host=] [--rpc-http-port=] [-l=] [--host-allowlist=[,…]… or * or all] besu retesteth --data-path=/home/me/me_node --rpc-http-port=8590 --host-allowlist=* Runs a Retesteth-compatible server. Retesteth is a developer tool that can generate and run consensus tests against any Ethereum client running such a server. The command accepts the following command line options: --data-path --host-allowlist --rpc-http-host --rpc-http-port --logging","s":"retesteth","u":"/public-networks/reference/cli/subcommands","h":"#retesteth","p":4414},{"i":4439,"t":"Provides storage related actions.","s":"storage","u":"/public-networks/reference/cli/subcommands","h":"#storage","p":4414},{"i":4441,"t":"Syntax besu storage revert-metadata v2-to-v1 Reverts the modifications made by the database metadata refactor. If you need to downgrade Besu, run this subcommand before installing the previous binaries.","s":"revert-metadata","u":"/public-networks/reference/cli/subcommands","h":"#revert-metadata","p":4414},{"i":4443,"t":"Syntax Example besu --config-file storage revert-variables besu --config-file config.toml storage revert-variables Reverts the modifications made by the variables storage feature. If you need to downgrade Besu, first run this subcommand specifying the path to the configuration file normally used to start Besu.","s":"revert-variables","u":"/public-networks/reference/cli/subcommands","h":"#revert-variables","p":4414},{"i":4445,"t":"Syntax Example Example output besu --config-file storage rocksdb usage besu --config-file config.toml storage rocksdb usage |--------------------------------|-----------------|-------------|-----------------|------------------| | Column Family | Keys | Total Size | SST Files Size | Blob Files Size | |--------------------------------|-----------------|-------------|-----------------|------------------| | BLOCKCHAIN | 2355141414 | 933 GiB | 166 GiB | 767 GiB | | VARIABLES | 26 | 240 KiB | 240 KiB | 0 B | | ACCOUNT_INFO_STATE | 9634454 | 496 MiB | 496 MiB | 0 B | | ACCOUNT_STORAGE_STORAGE | 24041432 | 1 GiB | 1 GiB | 0 B | | CODE_STORAGE | 37703864 | 12 GiB | 12 GiB | 0 B | | TRIE_BRANCH_STORAGE | 1885032116 | 138 GiB | 138 GiB | 0 B | | TRIE_LOG_STORAGE | 267301 | 17 GiB | 17 GiB | 0 B | |--------------------------------|-----------------|-------------|-----------------|------------------| | ESTIMATED TOTAL | 4311820607 | 1104 GiB | 337 GiB | 767 GiB | |--------------------------------|-----------------|-------------|-----------------|------------------| Displays the disk space used by the RocksDB key-value database, categorized into column families.","s":"rocksdb usage","u":"/public-networks/reference/cli/subcommands","h":"#rocksdb-usage","p":4414},{"i":4447,"t":"Provides actions related to managing, recording, and logging changes for the Bonsai Trie data. count​ Syntax Example Example output besu --config-file storage trie-log count besu --config-file config.toml storage trie-log count trieLog count: 742311 - canonical count: 681039 - fork count: 217 - orphaned count: 61055 Displays the number of trie logs in the database. This is the number of keys for the TRIE_LOG_STORAGE column family in RocksDB. The following are specified in the trieLog count: canonical count represents the finalized blockchain. fork count represents non-finalized branches of the blockchain. orphaned count represents trie logs not in the blockchain, which can occur during block creation. prune​ Syntax Example Example setting retention limit besu --config-file storage trie-log prune besu --config-file config.toml storage trie-log prune besu --config-file config.toml --bonsai-historical-block-limit=1024 storage trie-log prune Removes all trie log layers below the specified retention limit, including orphaned trie logs. You can configure the retention limit using --bonsai-historical-block-limit. The retention limit should match the configuration used with --bonsai-limit-trie-logs-enabled. The default limit is 512.","s":"trie-log","u":"/public-networks/reference/cli/subcommands","h":"#trie-log","p":4414},{"i":4449,"t":"Syntax Example besu validate-config --config-file besu validate-config --config-file config.toml Performs basic syntax validation of the specified configuration file. Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup).","s":"validate-config","u":"/public-networks/reference/cli/subcommands","h":"#validate-config","p":4414},{"i":4451,"t":"At Besu, security is a priority. But regardless of how much effort we put into system security, there might still be vulnerabilities present. If you discover a vulnerability, we need to know about it so we can take steps to address it as quickly as possible. We would like you to help us better protect our clients and our systems. Please follow the process explained on defect response wiki page.","s":"Security disclosure policy","u":"/public-networks/reference/disclosure","h":"","p":4450},{"i":4453,"t":"This reference describes options and subcommands for the EVM tool. note Option names that include trace, such as --trace and --trace.[no]memory exist to support t8ntool reference testing, and are interchangeable with their standard option names.","s":"EVM tool reference","u":"/public-networks/reference/evm-tool","h":"","p":4452},{"i":4456,"t":"Syntax Example --code= --code=5B600080808060045AFA50600056 The code to be executed, in compiled hex code form. Execution fails if this is not set.","s":"code","u":"/public-networks/reference/evm-tool","h":"#code","p":4452},{"i":4458,"t":"Syntax Example --gas= --gas=100000000 Amount of gas to make available to the EVM. The default is 10 billion, a number unlikely to be seen in any production blockchain.","s":"gas","u":"/public-networks/reference/evm-tool","h":"#gas","p":4452},{"i":4460,"t":"Syntax Example --price= --price=10 Price of gas in Gwei. The default is 0. If set to a non-zero value, the sender account must have enough value to cover the gas fees.","s":"price","u":"/public-networks/reference/evm-tool","h":"#price","p":4452},{"i":4462,"t":"Syntax Example --sender=
    --sender=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 The account the invocation is sent from. The specified account must exist in the world state, which, unless specified by --genesis, is the set of accounts used for testing.","s":"sender","u":"/public-networks/reference/evm-tool","h":"#sender","p":4452},{"i":4464,"t":"Syntax Example --receiver=
    --receiver=0x588108d3eab34e94484d7cda5a1d31804ca96fe7 The account the invocation is sent to. The specified account does not need to exist.","s":"receiver","u":"/public-networks/reference/evm-tool","h":"#receiver","p":4452},{"i":4466,"t":"Syntax Example --input= --input=9064129300000000000000000000000000000000000000000000000000000000 The data passed into the call. Corresponds to the data field of the transaction and is returned by the CALLDATA and related opcodes.","s":"input","u":"/public-networks/reference/evm-tool","h":"#input","p":4452},{"i":4468,"t":"Syntax Example --value= --value=1000000000000000000 The value, in wei, attached to this transaction. For operations that query the value or transfer it to other accounts this is the amount that is available. The amount is not reduced to cover intrinsic cost and gas fees.","s":"value","u":"/public-networks/reference/evm-tool","h":"#value","p":4452},{"i":4470,"t":"Syntax --json Provides an operation-by-operation trace of the command in JSON. --trace is an alias for --json.","s":"json, trace","u":"/public-networks/reference/evm-tool","h":"#json-trace","p":4452},{"i":4472,"t":"Syntax --json-alloc Outputs a JSON summary of the post-execution world state and allocations.","s":"json-alloc","u":"/public-networks/reference/evm-tool","h":"#json-alloc","p":4452},{"i":4474,"t":"Syntax --nomemory, --memory Setting --nomemory disables tracing the memory output for each operation. Setting --memory enables it. Memory traces are disabled by default. For memory heavy scripts, disabling memory traces may reduce the volume of JSON output. --trace.[no]memory is an alias for --[no]memory.","s":"[no]memory, trace.[no]memory","u":"/public-networks/reference/evm-tool","h":"#nomemory-tracenomemory","p":4452},{"i":4476,"t":"Syntax --trace.nostack, --trace.stack Setting --trace.nostack disables tracing the operand stack for each operation. Setting --trace.stack enables it. Stack traces are enabled by default.","s":"trace.[no]stack","u":"/public-networks/reference/evm-tool","h":"#tracenostack","p":4452},{"i":4478,"t":"Syntax --trace.noreturndata, --trace.returndata Setting --trace.noreturndata disables tracing the return data for each operation. Setting --trace.returndata enables it. Return data traces are enabled by default.","s":"trace.[no]returndata","u":"/public-networks/reference/evm-tool","h":"#tracenoreturndata","p":4452},{"i":4480,"t":"Syntax --notime, --time Setting --notime disables including time data in the summary output. Setting --time enables it. This is useful for testing and differential evaluations.","s":"[no]time","u":"/public-networks/reference/evm-tool","h":"#notime","p":4452},{"i":4482,"t":"Syntax Example --genesis= --genesis=/opt/besu/genesis.json The Besu genesis file to use when evaluating the EVM. Most useful are the alloc items that set up accounts and their stored memory states. --prestate is a deprecated alias for --genesis.","s":"genesis","u":"/public-networks/reference/evm-tool","h":"#genesis","p":4452},{"i":4484,"t":"Syntax Example --chain= --chain=holesky The well-known network genesis file to use when evaluating the EVM. These values are an alternative to the --genesis option for well-known networks.","s":"chain","u":"/public-networks/reference/evm-tool","h":"#chain","p":4452},{"i":4486,"t":"Syntax Example --repeat= --repeat=1000 Number of times to repeat the contract before gathering timing information. This is useful when benchmarking EVM operations. The default is 0.","s":"repeat","u":"/public-networks/reference/evm-tool","h":"#repeat","p":4452},{"i":4488,"t":"Syntax --revert-reason-enabled Enables tracing the reason included in REVERT operations. The revert reason is enabled by default.","s":"revert-reason-enabled","u":"/public-networks/reference/evm-tool","h":"#revert-reason-enabled","p":4452},{"i":4490,"t":"Syntax Example --fork= --fork=FutureEips Specific fork to evaluate, overriding network settings.","s":"fork","u":"/public-networks/reference/evm-tool","h":"#fork","p":4452},{"i":4492,"t":"Syntax Example --key-value-storage= --key-value-storage=rocksdb Kind of key value storage to use. It might be useful to execute isolated EVM calls in the context of an actual world state. The default is memory, which executes the call only in the context of the world provided by --genesis or --chain at block zero. When set to rocksdb and combined with --data-path, --block-number, and --genesis, a Besu node that isn't currently running can be used to provide the appropriate world state for a transaction. This is useful when evaluating consensus failures.","s":"key-value-storage","u":"/public-networks/reference/evm-tool","h":"#key-value-storage","p":4452},{"i":4494,"t":"Syntax Example --data-path= --data-path=/opt/besu/data When --key-value-storage is set to rocksdb, specifies the location of the database on disk.","s":"data-path","u":"/public-networks/reference/evm-tool","h":"#data-path","p":4452},{"i":4496,"t":"Syntax Example --block-number= --block-number=10000000 The block number to evaluate the code against. Used to ensure that the EVM is evaluating the code against the correct fork, or to specify the world state when --key-value-storage is set to rocksdb.","s":"block-number","u":"/public-networks/reference/evm-tool","h":"#block-number","p":4452},{"i":4498,"t":"Syntax --version Displays the version information. -v is an alias for --version.","s":"version","u":"/public-networks/reference/evm-tool","h":"#version","p":4452},{"i":4500,"t":"caution The following subcommands are used for testing code bases and not meant for typical user interactions.","s":"Subcommands","u":"/public-networks/reference/evm-tool","h":"#subcommands","p":4452},{"i":4502,"t":"Syntax Example evmtool code-validate --file= evmtool code-validate --file=eof.txt Allows Ethereum object formatted (EOF) code to be validated. You can specify a file containing one or more EOF containers or EVM bytecode using the --file option. Each line in the file is considered a separate program. Use command arguments​ If you use command arguments, each argument is considered a separate program. If a code segment includes spaces, it must be contained in quotes. Docker example Example docker run --rm hyperledger/besu-evmtool:develop code-validate \"0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1\" 0xef0002 0xef00010100040200010001030000000000000000 evmtool code-validate \"0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1\" 0xef0002 0xef00010100040200010001030000000000000000 Use standard input​ If no reference tests are passed in using the command line, the EVM tool loads and validates code from standard input. Each line is considered a separate program. Comment lines and blanks are ignored.","s":"code-validate","u":"/public-networks/reference/evm-tool","h":"#code-validate","p":4452},{"i":4504,"t":"Allows the Ethereum state tests to be evaluated. Run evmtool state-test --help for the full list of supported options. Notable options are --json and --nomemory. Set --json for EVM Lab Fuzzing. Whether or not --json is set, a summary JSON object is printed to standard output for each state test executed. Use command arguments​ If you use command arguments, you can list one or more state tests. All the state tests are evaluated in the order they are specified. Docker example CLI example docker run --rm -v ${PWD}:/opt/referencetests hyperledger/besu-evmtool:develop --json state-test /opt/referencetests/GeneralStateTests/stExample/add11.json evmtool --json state-test stExample/add11.json Use standard input​ If no reference tests are passed in using the command line, the EVM tool loads one complete JSON object from standard input and executes that state test. Docker example CLI example docker run --rm -i hyperledger/besu-evmtool:develop --json state-test < stExample/add11.json evmtool --json state-test < stExample/add11.json","s":"state-test","u":"/public-networks/reference/evm-tool","h":"#state-test","p":4452},{"i":4506,"t":"Allows the Ethereum state transition and blockchain tests to be evaluated. See the transition tool reference and Execution Spec Tests for more information about this subcommand.","s":"transition, t8n, t8n-server","u":"/public-networks/reference/evm-tool","h":"#transition-t8n-t8n-server","p":4452},{"i":4508,"t":"The following objects are parameters for or returned by the Engine API methods.","s":"Engine API objects","u":"/public-networks/reference/engine-api/objects","h":"","p":4507},{"i":4510,"t":"Parameter for engine_newPayloadV1. Returned by engine_getPayloadV1. Key Type Value parentHash Data, 32 Bytes Hash of the parent block. feeRecipient Data, 20 Bytes Beneficiary of the fee. stateRoot Data, 32 Bytes Root of the final state trie for the block. receiptsRoot Data, 32 Bytes Root of the receipts trie for the block. logsBloom Data, 256 Bytes Bloom filter for light clients to quickly retrieve related logs. prevRandao Data, 32 Bytes Difficulty for this block. blockNumber Quantity, 64 Bits Block number of block containing this transaction. gasLimit Quantity, 64 Bits Maximum gas allowed in this block. gasUsed Quantity, 64 Bits Total gas used by all transactions in this block. timestamp Quantity, 64 Bits Unix timestamp (milliseconds) for block assembly. extraData Data, 0 to 32 Bytes Extra data field for this block. baseFeePerGas Quantity, 256 Bits The block's base fee per gas. This field is empty for blocks created before EIP-1559. blockHash Data, 32 Bytes Hash of the execution block. transactions Array Array of transaction objects, each object is a list representing TransactionType, TransactionPayload, or LegacyTransaction as defined in EIP-2718.","s":"Execution payload object","u":"/public-networks/reference/engine-api/objects","h":"#execution-payload-object","p":4507},{"i":4512,"t":"Parameter for engine_forkchoiceUpdatedV1. Key Type Value headBlockHash Data, 32 Bytes Block hash of the head of the canonical chain. safeBlockHash Data, 32 Bytes \"Safe\" block hash of the canonical chain under certain synchrony and honesty assumptions. This value MUST be either equal to or an ancestor of headBlockHash. finalizedBlockHash Data, 32 Bytes Block hash of the most recent finalized block.","s":"Fork choice state object","u":"/public-networks/reference/engine-api/objects","h":"#fork-choice-state-object","p":4507},{"i":4514,"t":"Parameter for engine_forkchoiceUpdatedV1. Key Type Value timestamp Quantity, 64 Bits Value for the timestamp field of the new payload. prevRandao Data, 32 Bytes Value for the prevRandao field of the new payload. suggestedFeeRecipient Data, 20 Bytes Suggested value for the feeRecipient field of the new payload.","s":"Payload attributes object","u":"/public-networks/reference/engine-api/objects","h":"#payload-attributes-object","p":4507},{"i":4516,"t":"Returned by engine_newPayloadV1 and engine_forkchoiceUpdatedV1. Key Type Value status Enumeration Either \"VALID\", \"INVALID\", \"SYNCING\", \"ACCEPTED\", \"INVALID_BLOCK_HASH\", or \"INVALID_TERMINAL_BLOCK\". latestValidHash Data, 32 Bytes Hash of the most recent valid block in the branch defined by payload and its ancestors. validationError String Message providing additional details on the validation error if the payload is classified as INVALID, INVALID_BLOCK_HASH or INVALID_TERMINAL_BLOCK.","s":"Payload status object","u":"/public-networks/reference/engine-api/objects","h":"#payload-status-object","p":4507},{"i":4518,"t":"Parameter for and returned by engine_exchangeTransitionConfigurationV1. Key Type Value terminalTotalDifficulty Quantity, 256 Bits Maps on the TERMINAL_TOTAL_DIFFICULTY parameter of EIP-3675. terminalBlockHash Data, 32 Bytes Maps on the TERMINAL_BLOCK_HASH parameter of EIP-3675. terminalBlockNumber Quantity, 64 Bits Maps on the TERMINAL_BLOCK_NUMBER parameter of EIP-3675.","s":"Transition configuration object","u":"/public-networks/reference/engine-api/objects","h":"#transition-configuration-object","p":4507},{"i":4520,"t":"Consensus and execution clients communicate with each other using the Engine API. When running Besu as an execution client, use these API calls to communicate with a consensus client. info The engine API is enabled by default. See the Ethereum Engine API specification for more information. Not all changes to the Engine API are documented on this page.","s":"Engine API methods","u":"/public-networks/reference/engine-api","h":"","p":4519},{"i":4523,"t":"Exchanges a list of supported Engine API methods between the consensus client and Besu. Parameters​ remoteCapabilities: array of strings - Engine API method names that the consensus client supports Returns​ localCapabilities: array of strings - Engine API method names that Besu supports curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_exchangeCapabilities\",\"params\":[[\"engine_exchangeTransitionConfigurationV1\",\"engine_forkchoiceUpdatedV1\",\"engine_getPayloadBodiesByHash\",\"engine_getPayloadBodiesByRangeV1\",\"engine_getPayloadV1\",\"engine_newPayloadV1\"]],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_exchangeCapabilities\", \"params\": [ [ \"engine_exchangeTransitionConfigurationV1\", \"engine_forkchoiceUpdatedV1\", \"engine_getPayloadBodiesByHash\", \"engine_getPayloadBodiesByRangeV1\", \"engine_getPayloadV1\", \"engine_newPayloadV1\" ] ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [ \"engine_getPayloadV1\", \"engine_getPayloadV2\", \"engine_executePayloadV1\", \"engine_newPayloadV1\", \"engine_newPayloadV2\", \"engine_forkchoiceUpdatedV1\", \"engine_forkchoiceUpdatedV2\", \"engine_exchangeTransitionConfigurationV1\", \"engine_getPayloadBodiesByHashV1\", \"engine_getPayloadBodiesByRangeV1\" ] }","s":"engine_exchangeCapabilities","u":"/public-networks/reference/engine-api","h":"#engine_exchangecapabilities","p":4519},{"i":4525,"t":"Sends the transition configuration to the consensus client to verify the configuration between both clients. note The execution client runs this call every 60 seconds in the background. The log displays a warning message if the call hasn't been sent in 120 seconds. Parameters​ transitionConfiguration: object - Transition configuration object Returns​ transitionConfiguration: object - Transition configuration object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_exchangeTransitionConfigurationV1\",\"params\":[{\"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\"}],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_exchangeTransitionConfigurationV1\", \"params\": [ { \"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\" } ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\" } }","s":"engine_exchangeTransitionConfigurationV1","u":"/public-networks/reference/engine-api","h":"#engine_exchangetransitionconfigurationv1","p":4519},{"i":4527,"t":"Updates the fork choice with the consensus client. Parameters​ forkchoiceState: object - Fork choice state object payloadAttributes: object - Payload attribute object. Can be null. Returns​ payloadStatus: object - Payload status object payloadId: data - identifier of the payload build process or null curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\"},null],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_forkchoiceUpdatedV1\", \"params\": [ { \"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\" }, null ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null }, \"payloadId\": null } }","s":"engine_forkchoiceUpdatedV1","u":"/public-networks/reference/engine-api","h":"#engine_forkchoiceupdatedv1","p":4519},{"i":4529,"t":"Returns the bodies of the execution payloads corresponding to the specified block hashes. Parameters​ blockHashes: array of strings - Block hashes Returns​ engineGetPayloadBodiesResultV1: array of objects - Execution payload body objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadBodiesByHashV1\",\"params\":[[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\",\"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\"]],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadBodiesByHashV1\", \"params\": [ [ \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\" ] ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [{ \"transactions\": [\"0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65\", \"0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95\", ...], \"withdrawals\": [{ \"index\" : \"0xf0\", \"validatorIndex\" : \"0xf0\", \"address\" : \"0x00000000000000000000000000000000000010f0\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf1\", \"validatorIndex\" : \"0xf1\", \"address\" : \"0x00000000000000000000000000000000000010f1\", \"amount\" : \"0x1\" }] }, { \"transactions\": [\"0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe\", \"0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29\", ...], \"withdrawals\": [{ \"index\" : \"0xf2\", \"validatorIndex\" : \"0xf2\", \"address\" : \"0x00000000000000000000000000000000000010f2\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf3\", \"validatorIndex\" : \"0xf3\", \"address\" : \"0x00000000000000000000000000000000000010f3\", \"amount\" : \"0x1\" }] }] }","s":"engine_getPayloadBodiesByHashV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyhashv1","p":4519},{"i":4531,"t":"Returns the bodies of the execution payloads corresponding to the specified range of block numbers. Parameters​ startBlockNumber: string - Number of the starting block of the range, as a hexadecimal string count: string - Number of blocks in the range (including the starting block), as a hexadecimal string Returns​ engineGetPayloadBodiesResultV1: array of objects - Execution payload body objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadBodiesByRangeV1\",\"params\":[\"0x20\", \"0x2\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadBodiesByRangeV1\", \"params\": [\"0x20\", \"0x2\"], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [{ \"transactions\": [\"0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65\", \"0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95\", ...], \"withdrawals\": [{ \"index\" : \"0xf0\", \"validatorIndex\" : \"0xf0\", \"address\" : \"0x00000000000000000000000000000000000010f0\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf1\", \"validatorIndex\" : \"0xf1\", \"address\" : \"0x00000000000000000000000000000000000010f1\", \"amount\" : \"0x1\" }] }, { \"transactions\": [\"0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe\", \"0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29\", ...], \"withdrawals\": [{ \"index\" : \"0xf2\", \"validatorIndex\" : \"0xf2\", \"address\" : \"0x00000000000000000000000000000000000010f2\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf3\", \"validatorIndex\" : \"0xf3\", \"address\" : \"0x00000000000000000000000000000000000010f3\", \"amount\" : \"0x1\" }] }] }","s":"engine_getPayloadBodiesByRangeV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyrangev1","p":4519},{"i":4533,"t":"Prepares the payload to send to the consensus client. Parameters​ payloadId: data - Identifier of the payload build process Returns​ executionPayload: object - Execution payload object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadV1\",\"params\":[\"0x0000000021f32cc1\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadV1\", \"params\": [\"0x0000000021f32cc1\"], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } }","s":"engine_getPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadv1","p":4519},{"i":4535,"t":"Executes the payload with the consensus client. Parameters​ executionPayload: object - Execution payload object Returns​ payloadStatus: object - Payload status object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_newPayloadV1\",\"params\":[ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_newPayloadV1\", \"params\": [ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null } }","s":"engine_newPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_newpayloadv1","p":4519},{"i":4537,"t":"The Besu genesis file contains network configuration items and genesis block parameters.","s":"Genesis file items","u":"/public-networks/reference/genesis-items","h":"","p":4536},{"i":4539,"t":"Network configuration items are specified in the genesis file in the config object. Item Description Milestone blocks Milestone blocks for the network. chainID Chain ID for the network. ethash Specifies network uses Ethash and contains fixeddifficulty. clique Specifies network uses Clique and contains Clique configuration items. ibft2 Specifies network uses IBFT 2.0 and contains IBFT 2.0 configuration items. qbft Specifies network uses QBFT and contains QBFT configuration items. transitions Specifies block at which to change IBFT 2.0 or QBFT validators. contractSizeLimit Maximum contract size in bytes. Specify in free gas networks. The default is 24576 and the maximum size is 2147483647. evmStackSize Maximum stack size. Specify to increase the maximum stack size in private networks with complex smart contracts. The default is 1024. ecCurve Specifies the elliptic curve to use. Default is secp256k1. discovery Specifies discovery configuration items. The discovery object can be left empty. zeroBaseFee Specifies a base fee of 0 for free gas networks. fixedBaseFee Specifies a constant base fee for blocks, overriding the dynamic base fee calculation of EIP-1559.","s":"Configuration items","u":"/public-networks/reference/genesis-items","h":"#configuration-items","p":4536},{"i":4541,"t":"The purpose of some genesis block parameters varies depending on the consensus protocol (Ethash, Clique, IBFT 2.0, or QBFT). These parameters include: difficulty. extraData. mixHash. The following table describes the genesis block parameters with the same purpose across all consensus protocols. Item Description coinbase Address to pay mining rewards to. Can be any value in the genesis block (commonly set to 0x0000000000000000000000000000000000000000). gasLimit Block gas limit. Total gas limit for all transactions in a block. nonce Used in block computation. Can be any value in the genesis block (commonly set to 0x0). timestamp Creation date and time of the block. Must be before the next block so we recommend specifying 0x0 in the genesis file. alloc Defines accounts with balances or contracts. caution If a Supplied genesis block does not match stored chain data error occurs, use the genesis file matching the genesis block of the data directory, or use the --data-path option to specify a different data directory.","s":"Genesis block parameters","u":"/public-networks/reference/genesis-items","h":"#genesis-block-parameters","p":4536},{"i":4543,"t":"In public networks, the milestone blocks specify the blocks at which the network changed protocol. See a full list of Ethereum protocol releases and their corresponding milestone blocks. Ethereum Mainnet milestone blocks { \"config\": { ... \"homesteadBlock\": 1150000, \"daoForkBlock\": 1920000, \"daoForkSupport\": true, \"eip150Block\": 2463000, \"eip150Hash\": \"0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0\", \"eip155Block\": 2675000, \"eip158Block\": 2675000, \"byzantiumBlock\": 4370000, \"constantinopleBlock\": 7280000, \"constantinopleFixBlock\": 7280000, \"muirGlacierBlock\": 9200000, \"berlinBlock\": 12244000, \"londonBlock\": 12965000, \"arrowGlacierBlock\": 13773000, \"grayGlacierBlock\": 15050000, ... }, } caution Ensure you include a milestone far enough in advance in the genesis file. Not doing so can lead to unexpected and inconsistent behavior without specific errors. In private networks, the milestone block defines the protocol version for the network. Private network milestone block { \"config\": { ... \"berlinBlock\": 0, ... }, } note In private networks, we recommend specifying the latest milestone block. It's implied this includes the preceding milestones. This ensures you use the most up-to-date protocol and have access to the most recent opcodes.","s":"Milestone blocks","u":"/public-networks/reference/genesis-items","h":"#milestone-blocks","p":4536},{"i":4545,"t":"Use fixeddifficulty to specify a fixed difficulty in private networks using Ethash. This will keep the network's difficulty constant and override the difficulty parameter from the genesis file. { \"config\": { ... \"ethash\": { \"fixeddifficulty\": 1000 }, }, ... } tip Using fixeddifficulty is not recommended for use with Ethash outside of test environments. For production networks using Ethash, we recommend setting a low difficulty value in the genesis file instead. Ethash will adjust the difficulty of the network based on hashrate to produce blocks at the targeted frequency.","s":"Fixed difficulty","u":"/public-networks/reference/genesis-items","h":"#fixed-difficulty","p":4536},{"i":4547,"t":"Use the discovery configuration items to specify the bootnodes and discovery-dns-url in the genesis file, in place of using CLI options or listing them in the configuration file. If either CLI option is used, it takes precedence over the genesis file. Anything listed in the configuration file also takes precedence. { \"config\": { \"discovery\": { \"bootnodes\": [ \"enode://c35c3...d615f@1.2.3.4:30303\", \"enode://f42c13...fc456@1.2.3.5:30303\" ], \"dns\": \"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org\" } } }","s":"Discovery configuration items","u":"/public-networks/reference/genesis-items","h":"#discovery-configuration-items","p":4536},{"i":4549,"t":"When tracing transactions, the trace type options are trace, vmTrace, and stateDiff.","s":"Transaction trace types","u":"/public-networks/reference/trace-types","h":"","p":4548},{"i":4551,"t":"An ordered list of calls to other contracts, excluding precompiled contracts. trace example \"trace\":[ { \"action\":{ \"callType\":\"call\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0xffadea\", \"input\":\"0x\", \"to\":\"0x0100000000000000000000000000000000000000\", \"value\":\"0x0\" }, \"result\":{ \"gasUsed\":\"0x1e\", \"output\":\"0x\" }, \"subtraces\":0, \"traceAddress\":[ ], \"type\":\"call\" } ] Key Value action Transaction details. callType Whether the transaction is call or create. from Address of the transaction sender. gas Gas provided by sender. input Transaction data. to Target of the transaction. value Value transferred in the transaction. result Transaction result. gasUsed Gas used by the transaction. Includes any refunds of unused gas. output Return value of the contract call. Contains only the actual value sent by a RETURN operation. If a RETURN was not executed, the output is empty bytes. subTraces Traces of contract calls made by the transaction. traceAddress Tree list address of where the call occurred, address of the parents, and order of the current sub call. type Whether the transaction is a CALL or CREATE series operation.","s":"trace","u":"/public-networks/reference/trace-types","h":"#trace","p":4548},{"i":4553,"t":"An ordered list of EVM actions when processing the transaction. vmTrace only reports actual data returned from a RETURN opcode and does not return the contents of the reserved output space for the call operations. As a result: vmTrace reports null when a call operation ends because of a STOP, HALT, REVERT, running out of instructions, or any exceptional halts. When a RETURN operation returns data of a different length to the space reserved by the call, vmTrace reports only the data passed to the RETURN operation and does not include pre-existing memory data or trim the returned data. For out of gas operations, vmTrace reports the operation that caused the out of gas exception, including the calculated gas cost. vmTrace does not report ex values because the operation is not executed. vmTrace example \"vmTrace\":{ \"code\":\"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851\", \"ops\":[ { \"cost\":3, \"ex\":{ \"mem\":null, \"push\":[ \"0x8\" ], \"store\":null, \"used\":16756175 }, \"pc\":72, \"sub\":null }, ... ] } Key Value code Code executed by the EVM. ops Sequence of EVM operations (opcodes) executed in the transaction. cost Gas cost of the opcode. Includes memory expansion costs but not gas refunds. For precompiled contract calls, reports only the actual cost. ex Executed operations. mem Memory read or written by the operation. push Adjusted stack items. For swap, includes all intermediate values and the result. Otherwise, is the value pushed onto the stack. store Account storage written by the operation. used Remaining gas taking into account the all but 1/64th rule for calls. pc Program counter. sub Sub call operations.","s":"vmTrace","u":"/public-networks/reference/trace-types","h":"#vmtrace","p":4548},{"i":4555,"t":"State changes in the requested block for each transaction represented as a map of accounts to an object. Besu lists the balance, code, nonce, and storage changes from immediately before the transaction to after the transaction. For the key:value pairs: + indicates the field didn’t exist before and now has the specified value - indicates a deleted value * has a from and a to value. An absent value is distinct from zero when creating accounts or clearing storage. stateDiff example \"stateDiff\":{ \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\":{ \"balance\":{ \"*\":{ \"from\":\"0xffffffffffffffffffffffffffffffffc3e12a20b\", \"to\":\"0xffffffffffffffffffffffffffffffffc3dc5f091\" } }, \"code\":\"=\", \"nonce\":{ \"*\":{ \"from\":\"0x14\", \"to\":\"0x15\" } }, \"storage\":{ } } } Key Value balance Change of balance event. balance.from Balance before the transaction. balance.to Balance after the transaction. code Changes to code. None in this example. nonce Change of nonce. nonce.from Nonce before the transaction. nonce.to Nonce after the transaction. storage Changes to storage. None in this example.","s":"stateDiff","u":"/public-networks/reference/trace-types","h":"#statediff","p":4548},{"i":4557,"t":"The trace options trace, vmTrace, and stateDiff are available for the following ad-hoc tracing API methods: trace_call trace_callMany trace_rawTransaction trace_replayBlockTransactions Only the trace option is available for the following transaction-trace filtering API methods: trace_block trace_filter trace_get trace_transaction","s":"Applicable API methods","u":"/public-networks/reference/trace-types","h":"#applicable-api-methods","p":4548},{"i":4559,"t":"Run Besu as an execution client and Teku as a consensus client on Ethereum Mainnet.","s":"Run Besu and Teku on Mainnet","u":"/public-networks/tutorials/besu-teku-mainnet","h":"","p":4558},{"i":4561,"t":"Install Besu and Teku. Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions. Ensure you meet the system requirements for Besu on public networks.","s":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#1-install-besu-and-teku","p":4558},{"i":4563,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#2-generate-the-shared-secret","p":4558},{"i":4565,"t":"If you're running Teku as a beacon node only, skip to the next step. If you're also running Teku as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator). Generate validator keys and stake your ETH for one or more validators using the Staking Launchpad. info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#3-generate-validator-keys","p":4558},{"i":4567,"t":"Run the following command or specify the options in a configuration file: besu \\ --sync-mode=SNAP \\ --data-storage-format=BONSAI \\ --rpc-http-enabled=true \\ --p2p-host= \\ --host-allowlist=,127.0.0.1,localhost \\ --engine-host-allowlist=,127.0.0.1,localhost \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify: The path to the jwtsecret.hex file generated in step 2 using the --engine-jwt-secret option. The public IP address of your Besu node using the --host-allowlist and --engine-host-allowlist options. Also, in the command: --sync-mode specifies using snap sync. --data-storage-format specifies using Bonsai Tries. --rpc-http-enabled enables the HTTP JSON-RPC service. --engine-rpc-enabled enables the Engine API. You can modify the option values and add other command line options as needed.","s":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#4-start-besu","p":4558},{"i":4569,"t":"Open a new terminal window.","s":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#5-start-teku","p":4558},{"i":4571,"t":"To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the Teku configuration file: teku \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. Also, in the command: --ee-endpoint is set to the default URL of Besu's Engine API. --metrics-enabled enables Teku's metrics exporter. --rest-api-enabled enables Teku's REST API service. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node only","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-only","p":4558},{"i":4573,"t":"To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the Teku configuration file: teku \\ --ee-endpoint http://localhost:8551 \\ --ee-jwt-secret-file \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --checkpoint-sync-url= \\ --validators-proposer-default-fee-recipient= \\ --validator-keys=:[,:,...] Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. An Ethereum address you own as the default fee recipient using the --validators-proposer-default-fee-recipient option. The paths to the keystore .json file and password .txt file created in step 3 for each validator using the --validator-keys option. Separate the .json and .txt files with a colon, and separate entries for multiple validators with commas. Also, in the command: --ee-endpoint is set to the default URL of Besu's Engine API. --metrics-enabled enables Teku's metrics exporter. --rest-api-enabled enables Teku's REST API service. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-and-validator-client","p":4558},{"i":4575,"t":"After starting Besu and Teku, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#6-wait-for-besu-and-teku-to-sync","p":4558},{"i":4577,"t":"Stake your ETH for one or more validators using the Staking Launchpad. You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#7-stake-eth","p":4558},{"i":4579,"t":"Run Besu as an execution client and Teku as a consensus client on the Holesky and Sepolia Ethereum testnets. note Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.","s":"Run Besu and Teku on a testnet","u":"/public-networks/tutorials/besu-teku-testnet","h":"","p":4578},{"i":4581,"t":"Install Besu and Teku. Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions. Ensure you meet the system requirements for Besu on public networks.","s":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#1-install-besu-and-teku","p":4578},{"i":4583,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-testnet","h":"#2-generate-the-shared-secret","p":4578},{"i":4585,"t":"If you're running Teku as a beacon node only, skip to the next step. If you're also running Teku as a validator client, create a test Ethereum address (you can do this in MetaMask). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of Holesky faucets and Sepolia faucets. note If you can't get ETH using the faucet, you can ask for help on the EthStaker Discord. Generate validator keys for one or more validators using the Holesky Staking Launchpad (or request to become validator on Sepolia). info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-testnet","h":"#3-generate-validator-keys","p":4578},{"i":4587,"t":"Run the following command or specify the options in a configuration file: Holesky Sepolia besu \\ --network=holesky \\ --rpc-http-enabled=true \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --p2p-host= \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= besu \\ --network=sepolia \\ --rpc-http-enabled=true \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --p2p-host= \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify the path to the jwtsecret.hex file generated in step 2 using the --engine-jwt-secret option. You can modify the option values and add other command line options as needed.","s":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-testnet","h":"#4-start-besu","p":4578},{"i":4589,"t":"Open a new terminal window.","s":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#5-start-teku","p":4578},{"i":4591,"t":"To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the Teku configuration file: Holesky Sepolia teku \\ --network=holesky \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= teku \\ --network=sepolia \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node only","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-only","p":4578},{"i":4593,"t":"To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the Teku configuration file: Holesky Sepolia teku \\ --network=holesky \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= \\ --validators-proposer-default-fee-recipient= \\ --validator-keys=:[,:,...] Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. The test Ethereum address created in step 3 as the default fee recipient using the --validators-proposer-default-fee-recipient option. The paths to the keystore .json file and password .txt file created in step 3 for each validator using the --validator-keys option. Separate the .json and .txt files with a colon, and separate entries for multiple validators with commas. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-and-validator-client","p":4578},{"i":4595,"t":"After starting Besu and Teku, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-testnet","h":"#6-wait-for-besu-and-teku-to-sync","p":4578},{"i":4597,"t":"Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad. You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-testnet","h":"#7-stake-eth","p":4578},{"i":4600,"t":"The following block explorers are compatible with Besu: BlockScout - See the project documentation for setup instructions. Chainlens Blockchain Explorer - See how to use Chainlens with privacy-enabled networks.","s":"Block explorers","u":"/public-networks/reference/projects-using-besu","h":"#block-explorers","p":4598},{"i":4602,"t":"You can use a cloud provider such as Amazon Elastic Kubernetes Service (EKS) or Azure Kubernetes Service (AKS) to deploy a Besu public node This tutorial walks you through adding an extra node group to your Besu pod.","s":"Deploy a Besu public node using Kubernetes","u":"/public-networks/tutorials/kubernetes","h":"","p":4601},{"i":4605,"t":"Set up a Kubernetes cluster using a managed Kubernetes service such as Amazon EKS.","s":"Prerequisites","u":"/public-networks/tutorials/kubernetes","h":"#prerequisites","p":4601},{"i":4607,"t":"1. Create a security group for discovery​ Create a security group in your VPC that allows traffic from anywhere on ports 30303 and 9000 (or equivalent ports that you are using for discovery). Outbound rules​ Type Protocol Port range Destination All traffic All All 0.0.0.0/0 All traffic All All ::/0 Inbound rules​ Type Protocol Port range Destination Description Custom UDP UDP 9000 0.0.0.0/0 CL client Custom TCP TCP 9000 0.0.0.0/0 CL client Custom UDP UDP 30303 0.0.0.0/0 EL client Custom TCP TCP 30303 0.0.0.0/0 EL client important The key here is to allow traffic on both TCP and UDP for the consensus layer client and the execution layer client. 2. Add a node group to your cluster​ In your VPC settings, enable Auto-assign public IPv4 address on the public subnets on which you spin up your nodes. This allows you to isolate your Besu node on a public subnet and separate it from the other apps and node groups you might have running. If you are using EKSCTL, add the following snippet to your setup: managedNodeGroups: - name: ng-ethereum instanceType: m6a.xlarge desiredCapacity: 1 # Increase this capacity if you need more nodes. subnets: - public-subnet-id1 - public-subnet-id2 - public-subnet-id3 labels: { \"ng\": \"ethereum\" } securityGroups: attachIDs: [\"sg-1234...\"] # The ID of the security group from the previous step. iam: withAddonPolicies: ebs: true # efs: true taints: - key: ethereum value: \"true\" effect: NoSchedule - key: ethereum value: \"true\" effect: NoExecute If you are using Terraform, use something like the following for your new node pool: ng-ethereum = { desired_size = 1 subnet_ids = module.vpc.public_subnets # Only public subnets here. vpc_security_group_ids = [ sg-1234 ] # The ID of the security group from the previous step. instance_types = [\"m6a.xlarge\"] iam_role_name = \"${local.name}-eks-ng-ethereum-role\" taints = [ { key = \"ethereum\" value = \"true\" effect = \"NO_SCHEDULE\" }, { key = \"ethereum\" value = \"true\" effect = \"NO_EXECUTE\" } ] labels = { workloadType = \"ethereum\" } ... 3. Install the EBS or EFS drivers​ We recommend using EBS or NvME storage for your chain data. For most cases, the EBS drivers or EFS drivers are sufficient. However, if you are using instance stores, use the Local Storage Static Provisioner instead. 4. Set up the pod​ Now that the infrastructure is set up, use hostNetworking to bind your pod to the host and use the host node's public IP for your Besu node. First, add the following snippet to your StatefulSet: template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... Next, add an init container and a shared volume to store the public IP. The init container init runs and gets the public IP of the host using the AWS metadata service and saves it to a local shared volume besu-pip (between the init container and the Besu pod). template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... initContainers: - name: init image: alpine/curl:8.5.0 volumeMounts: - name: pip mountPath: /pip - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: /data securityContext: runAsUser: 0 command: - /bin/bash - -xec - | # Get the existing public IP to associate with. PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip) # Store the public IP in a local file to be used by the container. echo -ne \"$PUBLIC_IP_TO_ASSOCIATE\" > /pip/ip # Create the JWT key. openssl rand -hex 32 | tr -d \"\\n\" > /jwt/jwtSecret.hex # Update permissions on the data volume (if needed). chown -R 1000:1000 /data containers: ... volumes: - name: pip emptyDir: {} - name: jwt emptyDir: {} - name: besu-data persistentVolumeClaim: claimName: besu-pvc - name: teku-data persistentVolumeClaim: claimName: teku-pvc When you start Besu up in the pod, use the text file in pip as your p2p-host, which allows traffic in and out as normal. template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... initContainers: - name: init image: alpine/curl:8.5.0 volumeMounts: - name: pip mountPath: /pip - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: /data securityContext: runAsUser: 0 command: - /bin/bash - -xec - | # Get the existing public IP to associate with. PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip) # Store the public IP in a local file to be used by the container. echo -ne \"$PUBLIC_IP_TO_ASSOCIATE\" > /pip/ip # Create the JWT key. openssl rand -hex 32 | tr -d \"\\n\" > /jwt/jwtSecret.hex # Update permissions on the data volume (if needed). chown -R 1000:1000 /data containers: - name: besu image: hyperledger/besu:latest volumeMounts: - name: pip mountPath: /pip readOnly: true - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: {{ .Values.settings.dataPath }} ports: - name: elc-rpc containerPort: 8545 protocol: TCP - name: elc-ws containerPort: 8546 protocol: TCP - name: elc-rlpx containerPort: 30303 protocol: TCP - name: elc-discovery containerPort: 30303 protocol: UDP - name: elc-metrics containerPort: 8545 protocol: TCP - name: elc-engine containerPort: 8551 protocol: TCP command: - /bin/sh - -c args: - | pip=$(cat /pip/ip) /opt/besu/bin/besu \\ --p2p-host=${pip} \\ ... - name: teku image: consensys/teku:develop ... volumes: - name: pip emptyDir: {} - name: jwt emptyDir: {} - name: besu-data persistentVolumeClaim: claimName: besu-pvc - name: teku-data persistentVolumeClaim: claimName: teku-pvc","s":"Steps","u":"/public-networks/tutorials/kubernetes","h":"#steps","p":4601},{"i":4609,"t":"The process for Azure is much the same as that of AWS with a couple of differences. 1. Create a Network Security Group (NSG)​ Create a NSG with ports 30303 and 9000 (or equivalent) open for TCP and UDP. Bind this NSG with the subnet you've designated for your Ethereum nodes to ensure that nodes initiated within this subnet will automatically inherit these security rules. 2. Add a node pool to your cluster​ In Azure all machines get allocated a public IP by default but you need to turn this on for your new node pool. If you are using Terraform, use something like the following for your new node pool: node_pools = { ... ethereum = { name = \"ethereum\" vm_size = \"Standard_D8as_v5\" vnet_subnet_id = lookup(module.vnet.vnet_subnets_name_id, \"subnet-....\") # The ID of the security group from the previous step. os_disk_size_gb = 100 min_count = 1 max_count = 10 enable_auto_scaling = true enable_node_public_ip = true # This flag lets every node keep its public ip enable_host_encryption = true node_taints = [\"ethereum=true:NoSchedule\", \"ethereum=true:NoExecute\"] node_labels = { \"workloadType\" = \"ethereum\" } } ... } 3. Use Azure StorageClasses to suit your needs​ We recommend using either Azure Disk or Azure Files to store your chain data using the CSI storage drivers. If you are using a Terraform to provision your cluster e.g. terraform-azurerm-aks the CSI drivers are provisioned automatically for you.","s":"Azure AKS","u":"/public-networks/tutorials/kubernetes","h":"#azure-aks","p":4601},{"i":4611,"t":"This reference describes the syntax of the Besu configuration options. info This reference contains options that apply to both public and private networks. For private-network-specific options, see the private network options reference.","s":"Options","u":"/public-networks/reference/cli/options","h":"","p":4610},{"i":4613,"t":"You can specify Besu options: On the command line. besu [OPTIONS] [SUBCOMMAND] As an environment variable. For each command line option, the equivalent environment variable is: Uppercase. _ replaces -. Has a BESU_ prefix. For example, set --miner-coinbase using the BESU_MINER_COINBASE environment variable. In a configuration file. If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file. If using Bash or Z shell, you can view option suggestions by entering -- and pressing the Tab key twice. besu --Tab+Tab caution Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens.","s":"Specify options","u":"/public-networks/reference/cli/options","h":"#specify-options","p":4610},{"i":4615,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-blocks= --api-gas-price-blocks=50 BESU_API_GAS_PRICE_BLOCKS=50 api-gas-price-blocks=50 Number of blocks back from the head block to examine for eth_gasPrice. The default is 100.","s":"api-gas-price-blocks","u":"/public-networks/reference/cli/options","h":"#api-gas-price-blocks","p":4610},{"i":4617,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-max= --api-gas-price-max=20000 BESU_API_GAS_PRICE_MAX=20000 api-gas-price-max=20000 Maximum gas price to return for eth_gasPrice, regardless of the percentile value measured. The default is 500000000000 (500 GWei).","s":"api-gas-price-max","u":"/public-networks/reference/cli/options","h":"#api-gas-price-max","p":4610},{"i":4619,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-percentile= --api-gas-price-percentile=75 BESU_API_GAS_PRICE_PERCENTILE=75 api-gas-price-percentile=75 Percentile value to measure for eth_gasPrice. The default is 50.0. For eth_gasPrice, to return the: Highest gas price in --api-gas-price-blocks, set to 100. Lowest gas price in --api-gas-price-blocks, set to 0.","s":"api-gas-price-percentile","u":"/public-networks/reference/cli/options","h":"#api-gas-price-percentile","p":4610},{"i":4621,"t":"Syntax Example Environment variable Example configuration file --auto-log-bloom-caching-enabled[=] --auto-log-bloom-caching-enabled=false BESU_AUTO_LOG_BLOOM_CACHING_ENABLED=false auto-log-bloom-caching-enabled=false Enables or disables automatic log bloom caching. APIs such as eth_getLogs and eth_getFilterLogs use the cache for improved performance. The default is true. If automatic log bloom caching is enabled and a log bloom query reaches the end of the cache, Besu performs an uncached query for logs not yet written to the cache. Automatic log bloom caching has a small impact on performance. If you are not querying logs blooms for a large number of blocks, you might want to disable automatic log bloom caching.","s":"auto-log-bloom-caching-enabled","u":"/public-networks/reference/cli/options","h":"#auto-log-bloom-caching-enabled","p":4610},{"i":4623,"t":"Syntax Example Environment variable Configuration file --banned-node-ids=[,...]... --banned-node-ids=0xc35c3...d615f,0xf42c13...fc456 BESU_BANNED_NODE_IDS=0xc35c3...d615f,0xf42c13...fc456 banned-node-ids=[\"0xc35c3...d615f\",\"0xf42c13...fc456\"] A list of node IDs with which this node will not peer. The node ID is the public key of the node. You can specify the banned node IDs with or without the 0x prefix. tip The singular --banned-node-id and plural --banned-node-ids are available and are two names for the same option.","s":"banned-node-ids","u":"/public-networks/reference/cli/options","h":"#banned-node-ids","p":4610},{"i":4625,"t":"Syntax Example Environment variable Example configuration file --block-txs-selection-max-time= --block-txs-selection-max-time=1700 BESU_BLOCK_TXS_SELECTION_MAX_TIME=1700 block-txs-selection-max-time=1700 The maximum time, in milliseconds, that can be spent selecting transactions to be included in a block. This value must be less than or equal to the default, 5000. note This option only applies to proof-of-stake and proof-of-work networks. For proof-of-authority networks, see --poa-block-txs-selection-max-time.","s":"block-txs-selection-max-time","u":"/public-networks/reference/cli/options","h":"#block-txs-selection-max-time","p":4610},{"i":4627,"t":"Syntax Example Environment variable Example configuration file --bonsai-historical-block-limit= --bonsai-historical-block-limit=256 BESU_BONSAI_HISTORICAL_BLOCK_LIMIT=256 bonsai-historical-block-limit=256 When using Bonsai Tries, the maximum number of previous blocks for which Bonsai can reconstruct a historical state. The default is 512. note If you plan on querying historical blocks or state using the JSON-RPC API, you might need to adjust the default value or your configured value to avoid errors.","s":"bonsai-historical-block-limit","u":"/public-networks/reference/cli/options","h":"#bonsai-historical-block-limit","p":4610},{"i":4629,"t":"Syntax Example Environment variable Example configuration file --bonsai-limit-trie-logs-enabled=[=] --bonsai-limit-trie-logs-enabled=false BESU_BONSAI_LIMIT_TRIE_LOGS_ENABLED=false bonsai-limit-trie-logs-enabled=false Enables or disables limiting the number of Bonsai Trie logs that are retained. When enabled, this limit is set to the value of --bonsai-historical-block-limit. The default is true, unless --sync-mode=FULL is set, in which case this option is disallowed and must be set to false.","s":"bonsai-limit-trie-logs-enabled","u":"/public-networks/reference/cli/options","h":"#bonsai-limit-trie-logs-enabled","p":4610},{"i":4631,"t":"Syntax Example Environment variable Example configuration file --bonsai-trie-logs-pruning-window-size= --bonsai-trie-logs-pruning-window-size=100000 BESU_BONSAI_TRIE_LOGS_PRUNING_WINDOW_SIZE=100000 bonsai-trie-logs-pruning-window-size=100000 When using --bonsai-limit-trie-logs-enabled, the number of trie logs to prune during one pruning operation. A larger value might impact node performance. The default is 30000.","s":"bonsai-trie-logs-pruning-window-size","u":"/public-networks/reference/cli/options","h":"#bonsai-trie-logs-pruning-window-size","p":4610},{"i":4633,"t":"Syntax Example Environment variable Example configuration file --bootnodes[=[,...]...] --bootnodes=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303 BESU_BOOTNODES=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303 bootnodes=[\"enode://c35c3...d615f@1.2.3.4:30303\",\"enode://f42c13...fc456@1.2.3.5:30303\"] A list of comma-separated enode URLs for P2P discovery bootstrap. When connecting to Mainnet or public testnets, the default is a predefined list of enode URLs. In private networks defined using --genesis-file or when using --network=dev, the default is an empty list of bootnodes.","s":"bootnodes","u":"/public-networks/reference/cli/options","h":"#bootnodes","p":4610},{"i":4635,"t":"Syntax Example Environment variable Example configuration file --cache-last-blocks= --cache-last-blocks=2048 CACHE_LAST_BLOCKS=2048 cache-last-blocks=2048 The number of recent blocks to cache. Using this option can improve the performance of several RPC calls including: eth_getBlockByNumber, eth_getBlockByHash, eth_getTransactionReceipt, and especially eth_feeHistory. The default is 0.","s":"cache-last-blocks","u":"/public-networks/reference/cli/options","h":"#cache-last-blocks","p":4610},{"i":4637,"t":"Syntax Example Environment variable Example configuration file --color-enabled[=] --color-enabled=false BESU_COLOR_ENABLED=false color-enabled=false Enables or disables color output to console. The default is true.","s":"color-enabled","u":"/public-networks/reference/cli/options","h":"#color-enabled","p":4610},{"i":4639,"t":"Syntax Example Environment variable Example configuration file --compatibility-eth64-forkid-enabled[=] --compatibility-eth64-forkid-enabled=true BESU_COMPATIBILITY_ETH64_FORKID_ENABLED=true compatibility-eth64-forkid-enabled=true Enables or disables the legacy Eth/64 fork ID. For any networks with nodes using Besu v1.4 or earlier and nodes using Besu v20.10.1 or later, either: All nodes must be upgraded to v20.10.1 or later. All nodes using v20.10.1 or later must have --compatibility-eth64-forkid-enabled set to true. The default is false. caution If networks have Besu nodes using v1.4 or earlier and other Besu nodes using v20.10.1 or later, the nodes on different versions cannot communicate unless --compatibility-eth64-forkid-enabled is set to true.","s":"compatibility-eth64-forkid-enabled","u":"/public-networks/reference/cli/options","h":"#compatibility-eth64-forkid-enabled","p":4610},{"i":4641,"t":"Syntax Example Environment variable --config-file= --config-file=/home/me/me_node/config.toml BESU_CONFIG_FILE=/home/me/me_node/config.toml The path to the TOML configuration file. The default is none.","s":"config-file","u":"/public-networks/reference/cli/options","h":"#config-file","p":4610},{"i":4643,"t":"Syntax Example Environment variable Configuration file --data-path= --data-path=/home/me/me_node BESU_DATA_PATH=/home/me/me_node data-path=\"/home/me/me_node\" The path to the Besu data directory. The default is the directory you installed Besu in, or /opt/besu/database if using the Besu Docker image.","s":"data-path","u":"/public-networks/reference/cli/options","h":"#data-path","p":4610},{"i":4645,"t":"Syntax Example Environment variable Configuration file --data-storage-format= --data-storage-format=FOREST BESU_DATA_STORAGE_FORMAT=FOREST data-storage-format=\"BONSAI\" The data storage format to use. Set to BONSAI for Bonsai Tries or FOREST for Forest of Tries. The default is BONSAI.","s":"data-storage-format","u":"/public-networks/reference/cli/options","h":"#data-storage-format","p":4610},{"i":4647,"t":"Syntax Environment variable Example configuration file --discovery-dns-url= BESU_DISCOVERY_DNS_URL=enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org discovery-dns-url=\"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org\" The enrtree URL of the DNS node list for node discovery via DNS. The default is null.","s":"discovery-dns-url","u":"/public-networks/reference/cli/options","h":"#discovery-dns-url","p":4610},{"i":4649,"t":"Syntax Example Environment variable Example configuration file --discovery-enabled[=] --discovery-enabled=false BESU_DISCOVERY_ENABLED=false discovery-enabled=false Enables or disables P2P discovery. The default is true. note You can override the default DNS server if it's unreliable or doesn't serve TCP DNS requests, using the early access option --Xp2p-dns-discovery-server=.","s":"discovery-enabled","u":"/public-networks/reference/cli/options","h":"#discovery-enabled","p":4610},{"i":4651,"t":"Syntax Example Environment variable Configuration file --engine-host-allowlist=[,...]... or \"*\" --engine-host-allowlist=localhost,127.0.0.1 BESU_ENGINE_HOST_ALLOWLIST=localhost,127.0.0.1 engine-host-allowlist=[\"localhost\",\"127.0.0.1\"] A comma-separated list of hostnames to allow for Engine API access (applies to both HTTP and WebSocket). tip To allow all hostnames, use \"*\". We don't recommend allowing all hostnames in production environments.","s":"engine-host-allowlist","u":"/public-networks/reference/cli/options","h":"#engine-host-allowlist","p":4610},{"i":4653,"t":"Syntax Example Environment variable Configuration file --engine-jwt-disabled[=] --engine-jwt-disabled=true BESU_ENGINE_JWT_DISABLED=true engine-jwt-disabled=true Disables or enables authentication for Engine APIs. The default is false (authentication is enabled by default).","s":"engine-jwt-disabled","u":"/public-networks/reference/cli/options","h":"#engine-jwt-disabled","p":4610},{"i":4655,"t":"Syntax Example Environment variable Configuration file --engine-jwt-secret= --engine-jwt-secret=jwt.hex BESU_ENGINE_JWT_SECRET=\"jwt.hex\" engine-jwt-secret=\"jwt.hex\" Shared secret used to authenticate consensus clients when using the Engine JSON-RPC API (both HTTP and WebSocket). Contents of file must be at least 32 hex-encoded bytes and not begin with 0x. May be a relative or absolute path. See an example of how to generate this.","s":"engine-jwt-secret","u":"/public-networks/reference/cli/options","h":"#engine-jwt-secret","p":4610},{"i":4657,"t":"Syntax Example Environment variable Configuration file --engine-rpc-enabled[= --engine-rpc-enabled BESU_ENGINE_RPC_ENABLED=true engine-rpc-enabled=true Enables or disables the Engine API. The default is true.","s":"engine-rpc-enabled","u":"/public-networks/reference/cli/options","h":"#engine-rpc-enabled","p":4610},{"i":4659,"t":"Syntax Example Environment variable Configuration file --engine-rpc-port= --engine-rpc-port=8551 BESU_ENGINE_RPC_PORT=8551 engine-rpc-port=\"8551\" The listening port for the Engine API calls (ENGINE, ETH) for JSON-RPC over HTTP and WebSocket. The default is 8551.","s":"engine-rpc-port","u":"/public-networks/reference/cli/options","h":"#engine-rpc-port","p":4610},{"i":4661,"t":"Syntax Example Environment variable Configuration file --ethstats=<[ws://|wss://]nodename:secret@host:[port]> --ethstats=Dev-Node-1:secret@127.0.0.1:3001 BESU_ETHSTATS=Dev-Node-1:secret@127.0.0.1:3001 ethstats=\"Dev-Node-1:secret@127.0.0.1:3001\" Reporting URL of an Ethstats server. If specified without a port, the default port is 443 for SSL connections and 80 for non-SSL connections. You can optionally specify ws:// or wss:// in the Ethstats URL. If you specify this scheme, the connection doesn't need to switch from SSL to non-SSL on each retry logic.","s":"ethstats","u":"/public-networks/reference/cli/options","h":"#ethstats","p":4610},{"i":4663,"t":"Syntax Example Environment variable Configuration file --ethstats-cacert-file= --ethstats-cacert-file=./root.cert BESU_ETHSTATS_CACERT_FILE=./root.cert ethstats-cacert-file=\"./root.cert\" Path to the root certificate authority (CA) certificate file of the Ethstats server specified by --ethstats. This option is useful in non-production environments.","s":"ethstats-cacert-file","u":"/public-networks/reference/cli/options","h":"#ethstats-cacert-file","p":4610},{"i":4665,"t":"Syntax Example Environment variable Configuration file --ethstats-contact= --ethstats-contact=contact@mail.com BESU_ETHSTATS_CONTACT=contact@mail.com ethstats-contact=\"contact@mail.com\" Contact email address to send to the Ethstats server specified by --ethstats.","s":"ethstats-contact","u":"/public-networks/reference/cli/options","h":"#ethstats-contact","p":4610},{"i":4667,"t":"Syntax Example Environment variable Configuration file --genesis-file= --genesis-file=/home/me/me_node/customGenesisFile.json BESU_GENESIS_FILE=/home/me/me_node/customGenesisFile.json genesis-file=\"/home/me/me_node/customGenesisFile.json\" The path to the genesis file. caution You can't use the --genesis-file and --network options at the same time.","s":"genesis-file","u":"/public-networks/reference/cli/options","h":"#genesis-file","p":4610},{"i":4669,"t":"Syntax Example Environment variable Example configuration file --genesis-state-hash-cache-enabled=[=] --genesis-state-hash-cache-enabled=true BESU_GENESIS_STATE_HASH_CACHE_ENABLED=true genesis-state-hash-cache-enabled=true Enables or disables fast startup from an existing genesis state hash. The default is false. warning Enabling this option avoids validating the genesis state hash, trading off security for faster node startup times. We only recommend using this option if you are certain that you have not modified your genesis file or database and understand the security implications.","s":"genesis-state-hash-cache-enabled","u":"/public-networks/reference/cli/options","h":"#genesis-state-hash-cache-enabled","p":4610},{"i":4671,"t":"Syntax Example Environment variable Configuration file --graphql-http-cors-origins= --graphql-http-cors-origins=\"http://medomain.com\",\"https://meotherdomain.com\" BESU_GRAPHQL_HTTP_CORS_ORIGINS=\"http://medomain.com\",\"https://meotherdomain.com\" graphql-http-cors-origins=[\"http://medomain.com\",\"https://meotherdomain.com\"] A list of comma-separated origin domain URLs for CORS validation. The default is none.","s":"graphql-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#graphql-http-cors-origins","p":4610},{"i":4673,"t":"Syntax Example Environment variable Configuration file --graphql-http-enabled[=] --graphql-http-enabled BESU_GRAPHQL_HTTP_ENABLED=true graphql-http-enabled=true Enables or disables the GraphQL HTTP service. The default is false. The default GraphQL HTTP service endpoint is http://127.0.0.1:8547/graphql if set to true.","s":"graphql-http-enabled","u":"/public-networks/reference/cli/options","h":"#graphql-http-enabled","p":4610},{"i":4675,"t":"Syntax Example Environment variable Configuration file --graphql-http-host= # to listen on all interfaces --graphql-http-host=0.0.0.0 # to listen on all interfaces BESU_GRAPHQL_HTTP_HOST=0.0.0.0 graphql-http-host=\"0.0.0.0\" The host on which GraphQL HTTP listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0.","s":"graphql-http-host","u":"/public-networks/reference/cli/options","h":"#graphql-http-host","p":4610},{"i":4677,"t":"Syntax Example Environment variable Configuration file --graphql-http-port= # to listen on port 6175 --graphql-http-port=6175 # to listen on port 6175 BESU_GRAPHQL_HTTP_PORT=6175 graphql-http-port=\"6175\" The port (TCP) on which GraphQL HTTP listens. The default is 8547. Ports must be exposed appropriately.","s":"graphql-http-port","u":"/public-networks/reference/cli/options","h":"#graphql-http-port","p":4610},{"i":4679,"t":"Syntax -h, --help Show the help message and exit.","s":"help","u":"/public-networks/reference/cli/options","h":"#help","p":4610},{"i":4681,"t":"Syntax Example Environment variable Configuration file --host-allowlist=[,...]... or \"*\" --host-allowlist=medomain.com,meotherdomain.com BESU_HOST_ALLOWLIST=medomain.com,meotherdomain.com host-allowlist=[\"medomain.com\", \"meotherdomain.com\"] A comma-separated list of hostnames to access the JSON-RPC API and pull Besu metrics. By default, Besu accepts requests from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the API, we recommend using the Besu authentication mechanism with username and password authentication or JWT public key authentication. note If using Prometheus to pull metrics from a node, you must specify all the other nodes you want to pull metrics from in the list of allowed hostnames. tip To allow all hostnames, use \"*\". We don't recommend allowing all hostnames for production environments.","s":"host-allowlist","u":"/public-networks/reference/cli/options","h":"#host-allowlist","p":4610},{"i":4683,"t":"Syntax Example Environment variable Configuration file --identity= --identity=MyNode BESU_IDENTITY=MyNode identity=\"MyNode\" The name for the node. If specified, it's the second section of the client ID provided by some Ethereum network explorers. For example, in the client ID besu/MyNode/v1.3.4/linux-x86_64/oracle_openjdk-java-11, the node name is MyNode. If a name is not specified, the name section is not included in the client ID. For example, besu/v1.3.4/linux-x86_64/oracle_openjdk-java-11.","s":"identity","u":"/public-networks/reference/cli/options","h":"#identity","p":4610},{"i":4685,"t":"Syntax Example Environment variable Configuration file --json-pretty-print-enabled[=] --json-pretty-print-enabled=true BESU_JSON_PRETTY_PRINT_ENABLED=true json-pretty-print-enabled=true Enables or disables the pretty-print output for HTTP and WebSocket responses. The default is false.","s":"json-pretty-print-enabled","u":"/public-networks/reference/cli/options","h":"#json-pretty-print-enabled","p":4610},{"i":4687,"t":"Syntax Example Environment variable Configuration file --key-value-storage= --key-value-storage=rocksdb BESU_KEY_VALUE_STORAGE=rocksdb key-value-storage=\"rocksdb\" The key-value storage to use. Use this option only if using a storage system provided with a plugin. The default is rocksdb. For development use only, the memory option provides ephemeral storage for sync testing and debugging.","s":"key-value-storage","u":"/public-networks/reference/cli/options","h":"#key-value-storage","p":4610},{"i":4689,"t":"Syntax Example Environment variable Configuration file --kzg-trusted-setup= --kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt BESU_KZG_TRUSTED_SETUP=/etc/besu/kzg-trusted-setup.txt kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt The path to the C-KZG-4844 trusted setup file. Use this option to pass a custom setup file for custom networks or to override the default setup file for named networks.","s":"kzg-trusted-setup","u":"/public-networks/reference/cli/options","h":"#kzg-trusted-setup","p":4610},{"i":4691,"t":"Syntax Example Environment variable Example configuration file -l, --logging= --logging=DEBUG BESU_LOGGING=DEBUG logging=\"DEBUG\" Sets logging verbosity. Log levels are OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL. The default is INFO.","s":"logging","u":"/public-networks/reference/cli/options","h":"#logging","p":4610},{"i":4693,"t":"Syntax Example Environment variable Configuration file --max-peers= --max-peers=42 BESU_MAX_PEERS=42 max-peers=42 The maximum number of P2P connections you can establish. The default is 25.","s":"max-peers","u":"/public-networks/reference/cli/options","h":"#max-peers","p":4610},{"i":4695,"t":"Syntax Example Environment variable Configuration file --metrics-category=[,metrics-category...]... --metrics-category=BLOCKCHAIN,PEERS,PROCESS BESU_METRICS_CATEGORY=BLOCKCHAIN,PEERS,PROCESS metrics-category=[\"BLOCKCHAIN\",\"PEERS\",\"PROCESS\"] A comma-separated list of categories for which to track metrics. The defaults are BLOCKCHAIN, ETHEREUM, EXECUTORS, JVM, NETWORK, PEERS, PERMISSIONING, PROCESS, PRUNER, RPC, STRATUM, SYNCHRONIZER, and TRANSACTION_POOL. Other categories are KVSTORE_ROCKSDB, KVSTORE_PRIVATE_ROCKSDB, KVSTORE_ROCKSDB_STATS, and KVSTORE_PRIVATE_ROCKSDB_STATS. Categories containing PRIVATE track metrics when you enable private transactions.","s":"metrics-category","u":"/public-networks/reference/cli/options","h":"#metrics-category","p":4610},{"i":4697,"t":"Syntax Example Environment variable Configuration file --metrics-enabled[=] --metrics-enabled BESU_METRICS_ENABLED=true metrics-enabled=true Enables or disables the metrics exporter. The default is false. You can't specify --metrics-enabled with --metrics-push-enabled. That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once.","s":"metrics-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-enabled","p":4610},{"i":4699,"t":"Syntax Example Environment variable Configuration file --metrics-host= --metrics-host=127.0.0.1 BESU_METRICS_HOST=127.0.0.1 metrics-host=\"127.0.0.1\" The host on which Prometheus accesses Besu metrics. The metrics server respects the --host-allowlist option. The default is 127.0.0.1.","s":"metrics-host","u":"/public-networks/reference/cli/options","h":"#metrics-host","p":4610},{"i":4701,"t":"Syntax Example Environment variable Configuration file --metrics-port= --metrics-port=6174 BESU_METRICS_PORT=6174 metrics-port=\"6174\" The port (TCP) on which Prometheus accesses Besu metrics. The default is 9545. Ports must be exposed appropriately.","s":"metrics-port","u":"/public-networks/reference/cli/options","h":"#metrics-port","p":4610},{"i":4703,"t":"Syntax Example Environment variable Configuration file --metrics-protocol= --metrics-protocol=OPENTELEMETRY BESU_METRICS_PROTOCOL=OPENTELEMETRY metrics-protocol=\"OPENTELEMETRY\" Metrics protocol to use: PROMETHEUS, OPENTELEMETRY, or NONE. The default is PROMETHEUS.","s":"metrics-protocol","u":"/public-networks/reference/cli/options","h":"#metrics-protocol","p":4610},{"i":4705,"t":"Syntax Example Environment variable Configuration file --metrics-push-enabled[=] --metrics-push-enabled=true BESU_METRICS_PUSH_ENABLED=true metrics-push-enabled=true Enables or disables push gateway integration. You can't specify --metrics-push-enabled with --metrics-enabled. That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once.","s":"metrics-push-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-push-enabled","p":4610},{"i":4707,"t":"Syntax Example Environment variable Configuration file --metrics-push-host= --metrics-push-host=127.0.0.1 BESU_METRICS_PUSH_HOST=127.0.0.1 metrics-push-host=\"127.0.0.1\" The host of the Prometheus Push Gateway. The default is 127.0.0.1. The metrics server respects the --host-allowlist option. note When pushing metrics, ensure you set --metrics-push-host to the machine on which the push gateway is. Generally, this is a different machine to the machine on which Besu is running.","s":"metrics-push-host","u":"/public-networks/reference/cli/options","h":"#metrics-push-host","p":4610},{"i":4709,"t":"Syntax Example Environment variable Configuration file --metrics-push-interval= --metrics-push-interval=30 BESU_METRICS_PUSH_INTERVAL=30 metrics-push-interval=30 The interval, in seconds, to push metrics when in push mode. The default is 15.","s":"metrics-push-interval","u":"/public-networks/reference/cli/options","h":"#metrics-push-interval","p":4610},{"i":4711,"t":"Syntax Example Environment variable Configuration file --metrics-push-port= --metrics-push-port=6174 BESU_METRICS_PUSH_PORT=6174 metrics-push-port=\"6174\" The port (TCP) of the Prometheus Push Gateway. The default is 9001. Ports must be exposed appropriately.","s":"metrics-push-port","u":"/public-networks/reference/cli/options","h":"#metrics-push-port","p":4610},{"i":4713,"t":"Syntax Example Environment variable Configuration file --metrics-push-prometheus-job= --metrics-push-prometheus-job=\"my-custom-job\" BESU_METRICS_PUSH_PROMETHEUS_JOB=\"my-custom-job\" metrics-push-prometheus-job=\"my-custom-job\" The job name when in push mode. The default is besu-client.","s":"metrics-push-prometheus-job","u":"/public-networks/reference/cli/options","h":"#metrics-push-prometheus-job","p":4610},{"i":4715,"t":"Syntax Example Environment variable Configuration file --min-block-occupancy-ratio= --min-block-occupancy-ratio=0.5 BESU_MIN_BLOCK_OCCUPANCY_RATIO=0.5 min-block-occupancy-ratio=\"0.5\" Minimum occupancy ratio for a mined block if the transaction pool is not empty. When filling a block during mining, the occupancy ratio indicates the threshold at which the node stops waiting for smaller transactions to fill the remaining space. The default is 0.8. note Besu ignores the --min-block-occupancy-ratio option for proof-of-stake networks, such as Ethereum Mainnet.","s":"min-block-occupancy-ratio","u":"/public-networks/reference/cli/options","h":"#min-block-occupancy-ratio","p":4610},{"i":4717,"t":"Syntax Example Environment variable Configuration file --min-gas-price= --min-gas-price=1337 BESU_MIN_GAS_PRICE=1337 min-gas-price=1337 The minimum price (in wei) a transaction offers to include it in a mined block. The minimum gas price is the lowest value eth_gasPrice can return. The default is 1000. For a running node, use: miner_getMinGasPrice to get the value. miner_setMinGasPrice to change the value. tip In a free gas network, ensure the minimum gas price is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. You can query a node's gas configuration using eth_gasPrice.","s":"min-gas-price","u":"/public-networks/reference/cli/options","h":"#min-gas-price","p":4610},{"i":4719,"t":"Syntax Example Environment variable Configuration file --min-priority-fee= --min-priority-fee=7 BESU_MIN_PRIORITY_FEE=7 min-priority-fee=7 The minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The default is 0. For a running node, use: miner_getMinPriorityFee to get the value. miner_setMinPriorityFee to change the value.","s":"min-priority-fee","u":"/public-networks/reference/cli/options","h":"#min-priority-fee","p":4610},{"i":4721,"t":"Syntax Example Environment variable Configuration file --miner-coinbase= --miner-coinbase=fe3b557e8fb62b89f4916b721be55ceb828dbd73 BESU_MINER_COINBASE=fe3b557e8fb62b89f4916b721be55ceb828dbd73 miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" The account you pay mining rewards to. You must specify a valid coinbase when you enable mining using the --miner-enabled option or the miner_start JSON-RPC API method. note Besu ignores this option in proof-of-authority networks. In proof-of-stake networks, such as Ethereum Mainnet, this option is used as a last resort for the fee recipient, if the consensus layer client doesn't provide any.","s":"miner-coinbase","u":"/public-networks/reference/cli/options","h":"#miner-coinbase","p":4610},{"i":4723,"t":"Syntax Example Environment variable Configuration file --miner-enabled[=] --miner-enabled=true BESU_MINER_ENABLED=true miner-enabled=true Enables or disables mining when you start the node. The default is false.","s":"miner-enabled","u":"/public-networks/reference/cli/options","h":"#miner-enabled","p":4610},{"i":4725,"t":"Syntax Example Environment variable Configuration file --miner-extra-data= --miner-extra-data=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021 BESU_MINER_EXTRA_DATA=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021 miner-extra-data=\"0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021\" A hex string representing the 32 bytes included in the extra data field of a created block. The default is 0x.","s":"miner-extra-data","u":"/public-networks/reference/cli/options","h":"#miner-extra-data","p":4610},{"i":4727,"t":"Syntax Environment variable Configuration file --miner-stratum-enabled BESU_MINER_STRATUM_ENABLED=true miner-stratum-enabled=true Enables a node to perform stratum mining. The default is false.","s":"miner-stratum-enabled","u":"/public-networks/reference/cli/options","h":"#miner-stratum-enabled","p":4610},{"i":4729,"t":"Syntax Example Environment variable Configuration file --miner-stratum-host= --miner-stratum-host=192.168.1.132 BESU_MINER_STRATUM_HOST=192.168.1.132 miner-stratum-host=\"192.168.1.132\" The host of the stratum mining service. The default is 0.0.0.0.","s":"miner-stratum-host","u":"/public-networks/reference/cli/options","h":"#miner-stratum-host","p":4610},{"i":4731,"t":"Syntax Example Environment variable Configuration file --miner-stratum-port= --miner-stratum-port=8010 BESU_MINER_STRATUM_PORT=8010 miner-stratum-port=\"8010\" The port of the stratum mining service. The default is 8008. You must expose ports appropriately.","s":"miner-stratum-port","u":"/public-networks/reference/cli/options","h":"#miner-stratum-port","p":4610},{"i":4733,"t":"Syntax Example configuration file --nat-method=UPNP nat-method=\"UPNP\" Specify the method for handling NAT environments. The options are: UPNP UPNPP2PONLY KUBERNETES DOCKER AUTO NONE. The default is AUTO. NONE disables NAT functionality. tip UPnP support is often disabled by default in networking firmware. If disabled by default, explicitly enable UPnP support. tip Use UPNPP2PONLY if you wish to enable UPnP for P2P traffic but not JSON-RPC. note Specifying UPNP might introduce delays during node startup, especially on networks without a UPnP gateway device. You must specify DOCKER when using the Besu Docker image.","s":"nat-method","u":"/public-networks/reference/cli/options","h":"#nat-method","p":4610},{"i":4735,"t":"Syntax Example Environment variable Example configuration file --net-restrict=[,,...] --net-restrict=192.168.1.0/24,10.0.0.0/8 BESU_NET_RESTRICT=192.168.1.0/24,10.0.0.0/8 net-restrict=[\"192.168.1.0/24\",\"10.0.0.0/8\"] A comma-separated list of allowed IP subnets. Peers whose IP addresses fall within the specified subnets are granted permission to interact with the node. If not specified, no subnet-based peer permission restrictions are applied.","s":"net-restrict","u":"/public-networks/reference/cli/options","h":"#net-restrict","p":4610},{"i":4737,"t":"Syntax Example Environment variable Configuration file --network= --network=holesky BESU_NETWORK=holesky network=\"holesky\" The predefined network configuration. The default is mainnet. Possible values include the following: Network Chain Type Default Sync Mode Consensus Mechanism Description mainnet ETH Production SNAP A PoS network The main Ethereum network holesky ETH Test SNAP A PoS network Multi-client testnet Hoelsky sepolia ETH Test SNAP A PoS network Multi-client testnet Sepolia lukso ETH Production SNAP A PoS network Network for the Lukso chain dev ETH Development FULL A PoW network Development network with low difficulty to enable local CPU mining classic ETC Production SNAP A PoW network The main Ethereum Classic network mordor ETC Test SNAP A PoW network Testnet for Ethereum Classic tip Values are case insensitive, so either mainnet or MAINNET works. info You can't use the --network and --genesis-file options at the same time. The Ropsten, Rinkeby, and Kiln testnets are deprecated.","s":"network","u":"/public-networks/reference/cli/options","h":"#network","p":4610},{"i":4739,"t":"Syntax Example Environment variable Configuration file --network-id= --network-id=8675309 BESU_NETWORK_ID=8675309 network-id=\"8675309\" The P2P network identifier. Use this option to override the default network ID. The default value is the same as the chain ID defined in the genesis file.","s":"network-id","u":"/public-networks/reference/cli/options","h":"#network-id","p":4610},{"i":4741,"t":"Syntax Example Environment variable Configuration file --node-private-key-file= --node-private-key-file=/home/me/me_node/myPrivateKey BESU_NODE_PRIVATE_KEY_FILE=/home/me/me_node/myPrivateKey node-private-key-file=\"/home/me/me_node/myPrivateKey\" The private key file for the node. The default is the key file in the data directory. If no key file exists, Besu creates a key file containing the generated private key, otherwise, the existing key file specifies the node private key. danger The private key is not encrypted. This option is ignored if --security-module is set to a non-default value.","s":"node-private-key-file","u":"/public-networks/reference/cli/options","h":"#node-private-key-file","p":4610},{"i":4743,"t":"Syntax Example Environment variable Configuration file --p2p-enabled[=] --p2p-enabled=false BESU_P2P_ENABLED=false p2p-enabled=false Enables or disables all P2P communication. The default is true.","s":"p2p-enabled","u":"/public-networks/reference/cli/options","h":"#p2p-enabled","p":4610},{"i":4745,"t":"Syntax Example Environment variable Configuration file --p2p-host= # to listen on all interfaces --p2p-host=0.0.0.0 # to listen on all interfaces BESU_P2P_HOST=0.0.0.0 p2p-host=\"0.0.0.0\" The advertised host that can be used to access the node from outside the network in P2P communication. The default is 127.0.0.1. info If --nat-method is set to NONE, --p2p-host is not overridden and must be specified for the node to be accessed from outside the network.","s":"p2p-host","u":"/public-networks/reference/cli/options","h":"#p2p-host","p":4610},{"i":4747,"t":"Syntax Example Environment variable Configuration file --p2p-interface= --p2p-interface=192.168.1.132 BESU_P2P_INTERFACE=192.168.1.132 p2p-interface=\"192.168.1.132\" The network interface on which the node listens for P2P communication. Use the option to specify the required network interface when the device that Besu is running on has multiple network interfaces. The default is 0.0.0.0 (all interfaces).","s":"p2p-interface","u":"/public-networks/reference/cli/options","h":"#p2p-interface","p":4610},{"i":4749,"t":"Syntax Example Environment variable Configuration file --p2p-port= # to listen on port 1789 --p2p-port=1789 # to listen on port 1789 BESU_P2P_PORT=1789 p2p-port=\"1789\" The P2P listening ports (UDP and TCP). The default is 30303. You must expose ports appropriately.","s":"p2p-port","u":"/public-networks/reference/cli/options","h":"#p2p-port","p":4610},{"i":4751,"t":"Syntax Example Environment variable Configuration file --profile= --profile=STAKER BESU_PROFILE=STAKER profile=\"STAKER\" Loads a pre-configured TOML file containing custom settings for a specific user profile. Possible values are: MINIMALIST_STAKER STAKER ENTERPRISE or PRIVATE (aliases for the same profile) File name of an external profile, without the .toml extension. The default is null.","s":"profile","u":"/public-networks/reference/cli/options","h":"#profile","p":4610},{"i":4753,"t":"Syntax Example Environment variable Configuration file --random-peer-priority-enabled[=] --random-peer-priority-enabled=true BESU_RANDOM_PEER_PRIORITY_ENABLED=true random-peer-priority-enabled=true Enables or disables random prioritization of incoming connections. Enable in small, stable networks to prevent closed groups of peers forming. The default is false.","s":"random-peer-priority-enabled","u":"/public-networks/reference/cli/options","h":"#random-peer-priority-enabled","p":4610},{"i":4755,"t":"Syntax Example Environment variable Configuration file --receipt-compaction-enabled= --receipt-compaction-enabled=true BESU_RECEIPT_COMPACTION_ENABLED=true receipt-compaction-enabled=true Enables or disables receipt compaction. Compacting receipts reduces storage by trimming unnecessary data from transaction receipts. The default is false.","s":"receipt-compaction-enabled","u":"/public-networks/reference/cli/options","h":"#receipt-compaction-enabled","p":4610},{"i":4757,"t":"Syntax Example Environment variable Configuration file --remote-connections-limit-enabled[=] --remote-connections-limit-enabled=false BESU_REMOTE_CONNECTIONS_LIMIT_ENABLED=false remote-connections-limit-enabled=false Enables or disables using the --remote-connections-max-percentage option to limit the percentage of remote P2P connections initiated by peers. The default is true. tip In private and permissioned networks with a level of trust between peers, disabling the remote connection limits may increase the speed at which nodes can join the network. danger To prevent eclipse attacks, ensure you enable the remote connections limit when connecting to any public network, and especially when using --sync-mode and --fast-sync-min-peers.","s":"remote-connections-limit-enabled","u":"/public-networks/reference/cli/options","h":"#remote-connections-limit-enabled","p":4610},{"i":4759,"t":"Syntax Example Environment variable Configuration file --remote-connections-max-percentage= --remote-connections-max-percentage=25 BESU_REMOTE_CONNECTIONS_MAX_PERCENTAGE=25 remote-connections-max-percentage=25 The percentage of remote P2P connections you can establish with the node. Must be between 0 and 100, inclusive. The default is 60.","s":"remote-connections-max-percentage","u":"/public-networks/reference/cli/options","h":"#remote-connections-max-percentage","p":4610},{"i":4761,"t":"Syntax Example Environment variable Configuration file --reorg-logging-threshold= --reorg-logging-threshold=3 BESU_REORG_LOGGING_THRESHOLD=3 reorg-logging-threshold=3 Minimum depth of chain reorganizations to log. The default is 6.","s":"reorg-logging-threshold","u":"/public-networks/reference/cli/options","h":"#reorg-logging-threshold","p":4610},{"i":4763,"t":"Syntax Example Environment variable Configuration file --required-block, --required-blocks[=BLOCK=HASH[,BLOCK=HASH...]...] --required-block=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80 BESU_REQUIRED_BLOCK=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80 required-block=[\"6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80\"] Requires a peer with the specified block number to have the specified hash when connecting, or Besu rejects that peer.","s":"required-block","u":"/public-networks/reference/cli/options","h":"#required-block","p":4610},{"i":4765,"t":"Syntax Example Environment variable Configuration file --revert-reason-enabled[=] --revert-reason-enabled=true BESU_REVERT_REASON_ENABLED=true revert-reason-enabled=true Enables or disables including the revert reason in the transaction receipt, eth_estimateGas error response, eth_call error response, and trace response. The default is false. caution Enabling revert reason may use a significant amount of memory. We don't recommend enabling revert reason when connected to public Ethereum networks.","s":"revert-reason-enabled","u":"/public-networks/reference/cli/options","h":"#revert-reason-enabled","p":4610},{"i":4767,"t":"Syntax Example Environment variable Configuration file --rpc-gas-cap= --rpc-gas-cap=50000000 BESU_RPC_GAS_CAP=50000000 rpc-gas-cap=50000000 Sets a limit on the amount of gas for transaction simulation RPC methods. This option allows users to override the transaction's gas limit. This can prevent the simulation of transactions with high gas usage by setting a predefined cap, preventing DoS attacks. Its value must be greater than or equal to 0. The default is 0, which indicates there is no limit. This cap prevents eth_call requests from using excessive resources.","s":"rpc-gas-cap","u":"/public-networks/reference/cli/options","h":"#rpc-gas-cap","p":4610},{"i":4769,"t":"Syntax Example Environment variable Configuration file --rpc-http-api=[,,...] --rpc-http-api=ETH,NET,WEB3 BESU_RPC_HTTP_API=ETH,NET,WEB3 rpc-http-api=[\"ETH\",\"NET\",\"WEB3\"] A comma-separated list of APIs to enable on the JSON-RPC HTTP channel. When you use this option you must also specify the --rpc-http-enabled option. The available API options are: ADMIN, CLIQUE, DEBUG, EEA, ETH, IBFT, MINER, NET, PERM, PLUGINS, PRIV, QBFT, TRACE, TXPOOL, and WEB3. The default is: ETH, NET, WEB3. tip The singular --rpc-http-api and plural --rpc-http-apis are available and are two names for the same option.","s":"rpc-http-api","u":"/public-networks/reference/cli/options","h":"#rpc-http-api","p":4610},{"i":4771,"t":"Syntax Example Environment variable Configuration file --rpc-http-api-methods-no-auth=[,,...] --rpc-http-api-methods-no-auth=admin_peers,eth_getWork BESU_RPC_HTTP_API_METHODS_NO_AUTH=admin_peers,eth_getWork rpc-http-api-methods-no-auth=[\"admin_peers\",\"eth_getWork\"] A comma-separated list of JSON-RPC API methods to exclude from authentication services. note You must enable JSON-RPC HTTP authentication using --rpc-http-authentication-enabled.","s":"rpc-http-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-http-api-methods-no-auth","p":4610},{"i":4773,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-credentials-file= --rpc-http-authentication-credentials-file=/home/me/me_node/auth.toml BESU_RPC_HTTP_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml rpc-http-authentication-credentials-file=\"/home/me/me_node/auth.toml\" The credentials file for JSON-RPC API authentication.","s":"rpc-http-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-credentials-file","p":4610},{"i":4775,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-enabled[=] --rpc-http-authentication-enabled=true BESU_RPC_HTTP_AUTHENTICATION_ENABLED=true rpc-http-authentication-enabled=true Enables or disables authentication for the JSON-RPC HTTP service.","s":"rpc-http-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-enabled","p":4610},{"i":4777,"t":"Syntax Example Environment variable Configuration file ---rpc-http-authentication-jwt-algorithm= --rpc-http-authentication-jwt-algorithm=ES256 BESU_RPC_HTTP_AUTHENTICATION_JWT_ALGORITHM=ES256 rpc-http-authentication-jwt-algorithm=\"ES256\" The JWT key algorithm used to generate the keypair for JSON-RPC HTTP authentication. Possible values are RS256, RS384, RS512, ES256, ES384, and ES512. The default is RS256.","s":"rpc-http-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-algorithm","p":4610},{"i":4779,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-jwt-public-key-file= --rpc-http-authentication-jwt-public-key-file=publicKey.pem BESU_RPC_HTTP_AUTHENTICATION_JWT_PUBLIC_KEY_FILE=\"publicKey.pem\" rpc-http-authentication-jwt-public-key-file=\"publicKey.pem\" The JWT provider's public key file used for JSON-RPC HTTP authentication with an external JWT.","s":"rpc-http-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-public-key-file","p":4610},{"i":4781,"t":"Syntax Example Environment variable Configuration file --rpc-http-cors-origins=[,...]... or all or \"*\" --rpc-http-cors-origins=http://medomain.com,http://remix.ethereum.org BESU_RPC_HTTP_CORS_ORIGINS=http://medomain.com,https://meotherdomain.com rpc-http-cors-origins=[\"http://medomain.com\",\"https://meotherdomain.com\"] A comma-separated list of domain URLs for CORS validation. Listed domains can access the node using JSON-RPC. If your client interacts with Besu using a browser app (such as Remix or a block explorer), add the client domain to the list. The default value is \"none\". If you do not list any domains, browser apps cannot interact with your Besu node. note To run a local Besu node with MetaMask, set --rpc-http-cors-origins to chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn. Remember to also include the dapp domain MetaMask interacts with, for example if your app is deployed on Remix and you're using MetaMask to interact with the contract, use --rpc-http-cors-origins=chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn,http://remix.ethereum.org tip For testing and development purposes, use \"all\" or \"*\" to accept requests from any domain. We don't recommend accepting requests from any domain for production environments.","s":"rpc-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#rpc-http-cors-origins","p":4610},{"i":4783,"t":"Syntax Example Environment variable Configuration file --rpc-http-enabled[=] --rpc-http-enabled=true BESU_RPC_HTTP_ENABLED=true rpc-http-enabled=true Enables or disables the JSON-RPC HTTP service. The default is false.","s":"rpc-http-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-enabled","p":4610},{"i":4785,"t":"Syntax Example Environment variable Configuration file --rpc-http-host= # to listen on all interfaces --rpc-http-host=0.0.0.0 BESU_RPC_HTTP_HOST=0.0.0.0 rpc-http-host=\"0.0.0.0\" The host on which JSON-RPC HTTP listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0. caution Setting the host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet.","s":"rpc-http-host","u":"/public-networks/reference/cli/options","h":"#rpc-http-host","p":4610},{"i":4787,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-active-connections= --rpc-http-max-active-connections=100 BESU_RPC_HTTP_MAX_ACTIVE_CONNECTIONS=100 rpc-http-max-active-connections=100 The maximum number of allowed JSON-RPC HTTP connections. Once this limit is reached, incoming connections are rejected. The default is 80.","s":"rpc-http-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-active-connections","p":4610},{"i":4789,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-request-content-length= --rpc-http-max-request-content-length=2097152 BESU_RPC_HTTP_MAX_REQUEST_CONTENT_LENGTH=2097152 rpc-http-max-request-content-length=2097152 The maximum request content length. Besu only accepts JSON-RPC API requests with a body size less than or equal to this value. The default is 5242880 (5 MB).","s":"rpc-http-max-request-content-length","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-request-content-length","p":4610},{"i":4791,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-batch-size= --rpc-http-max-batch-size=1200 BESU_RPC_HTTP_MAX_BATCH_SIZE=1200 rpc-http-max-batch-size=1200 The maximum number of allowed requests in a RPC batch request. The default limit is 1024, and -1 specifies no limit.","s":"rpc-http-max-batch-size","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-batch-size","p":4610},{"i":4793,"t":"Syntax Example Environment variable Configuration file --rpc-http-port= # to listen on port 3435 --rpc-http-port=3435 BESU_RPC_HTTP_PORT=3435 rpc-http-port=\"3435\" The port (TCP) on which JSON-RPC HTTP listens. The default is 8545. You must expose ports appropriately.","s":"rpc-http-port","u":"/public-networks/reference/cli/options","h":"#rpc-http-port","p":4610},{"i":4795,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-ca-clients-enabled[=] --rpc-http-tls-ca-clients-enabled=true BESU_RPC_HTTP_TLS_CA_CLIENTS_ENABLED=true rpc-http-tls-ca-clients-enabled=true Enables or disables clients with trusted CA certificates to connect. The default is false. note You must enable client authentication using the --rpc-http-tls-client-auth-enabled option.","s":"rpc-http-tls-ca-clients-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-ca-clients-enabled","p":4610},{"i":4797,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-client-auth-enabled[=] --rpc-http-tls-client-auth-enabled=true BESU_RPC_HTTP_TLS_CLIENT_AUTH_ENABLED=true rpc-http-tls-client-auth-enabled=true Enables or disables TLS client authentication for the JSON-RPC HTTP service. The default is false. note You must specify --rpc-http-tls-ca-clients-enabled and/or rpc-http-tls-known-clients-file.","s":"rpc-http-tls-client-auth-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-client-auth-enabled","p":4610},{"i":4799,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-cipher-suite=[, ...] --rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 BESU_RPC_HTTP_TLS_CIPHER_SUITE=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 rpc-http-tls-cipher-suite=[\"TLS_AES_256_GCM_SHA384\",\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\"] A list of comma-separated TLS cipher suites to support. tip The singular --rpc-http-tls-cipher-suite and plural --rpc-http-tls-cipher-suites are available and are two names for the same option.","s":"rpc-http-tls-cipher-suite","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-cipher-suite","p":4610},{"i":4801,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-enabled[=] --rpc-http-tls-enabled=true BESU_RPC_HTTP_TLS_ENABLED=true rpc-http-tls-enabled=true Enables or disables TLS for the JSON-RPC HTTP service. The default is false. note --rpc-http-enabled must be enabled.","s":"rpc-http-tls-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-enabled","p":4610},{"i":4803,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-keystore-file= --rpc-http-tls-keystore-file=/home/me/me_node/keystore.pfx BESU_RPC_HTTP_TLS_KEYSTORE_FILE=/home/me/me_node/keystore.pfx rpc-http-tls-keystore-file=\"/home/me/me_node/keystore.pfx\" The Keystore file (in PKCS #12 format) that contains private key and the certificate presented to the client during authentication.","s":"rpc-http-tls-keystore-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-file","p":4610},{"i":4805,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-keystore-password-file= --rpc-http-tls-keystore-password-file=/home/me/me_node/password BESU_RPC_HTTP_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password rpc-http-tls-keystore-password-file=\"/home/me/me_node/password\" The path to the file containing the password to decrypt the keystore.","s":"rpc-http-tls-keystore-password-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-password-file","p":4610},{"i":4807,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-known-clients-file= --rpc-http-tls-known-clients-file=/home/me/me_node/knownClients BESU_RPC_HTTP_TLS_KNOWN_CLIENTS_FILE=/home/me/me_node/knownClients rpc-http-tls-known-clients-file=\"/home/me/me_node/knownClients\" The path to the file used to authenticate clients using self-signed certificates or non-public certificates. Must contain the certificate's Common Name, and SHA-256 fingerprint in the format . note You must enable client authentication using the --rpc-http-tls-client-auth-enabled option.","s":"rpc-http-tls-known-clients-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-known-clients-file","p":4610},{"i":4809,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-protocol=[, ...] --rpc-http-tls-protocol=TLSv1.3,TLSv1.2 BESU_RPC_HTTP_TLS_PROTOCOL=TLSv1.3,TLSv1.2 rpc-http-tls-protocol=[\"TLSv1.3\",\"TLSv1.2\"] A list of comma-separated TLS protocols to support. The default is DEFAULT_TLS_PROTOCOLS, a list which includes TLSv1.3 and TLSv1.2. tip The singular --rpc-http-tls-protocol and plural --rpc-http-tls-protocols are available and are two names for the same option.","s":"rpc-http-tls-protocol","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-protocol","p":4610},{"i":4811,"t":"Syntax Example Environment variable Configuration file --rpc-max-logs-range= --rpc-max-logs-range=500 BESU_RPC_MAX_LOGS_RANGE=500 rpc-max-logs-range=500 When using eth_getLogs, the maximum number of blocks to retrieve logs from. Set to 0 to specify no limit. The default is 5000. caution Using eth_getLogs to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response. We recommend setting a range limit or leaving this option at its default value.","s":"rpc-max-logs-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-logs-range","p":4610},{"i":4813,"t":"Syntax Example Environment variable Configuration file --rpc-max-trace-filter-range= --rpc-max-trace-filter-range=100 --BESU_RPC_MAX_TRACE_FILTER_RANGE=100 rpc-max-trace-filter-range=100 The maximum number of blocks you can supply to the trace_filter method. The value must be equal to or greater than 0. Setting this option to 0 indicates there is no limit. The default is 1000.","s":"rpc-max-trace-filter-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-trace-filter-range","p":4610},{"i":4815,"t":"Syntax Example Environment variable Configuration file --rpc-tx-feecap= --rpc-tx-feecap=1200000000000000000 BESU_RPC_TX_FEECAP=1200000000000000000 rpc-tx-feecap=1200000000000000000 The maximum transaction fee (in Wei) accepted for transactions submitted through the eth_sendRawTransaction RPC. The default is 1000000000000000000 (1 ether). If set to 0, then this option is ignored and no cap is applied.","s":"rpc-tx-feecap","u":"/public-networks/reference/cli/options","h":"#rpc-tx-feecap","p":4610},{"i":4817,"t":"Syntax Example Environment variable Configuration file --rpc-ws-api=[,...]... --rpc-ws-api=ETH,NET,WEB3 BESU_RPC_WS_API=ETH,NET,WEB3 rpc-ws-api=[\"ETH\",\"NET\",\"WEB3\"] A comma-separated list of APIs to enable on the WebSockets channel. When you use this option you must also specify the --rpc-ws-enabled option. The available API options are: ADMIN, CLIQUE, DEBUG, EEA, ETH, IBFT, MINER, NET, PERM, PLUGINS, PRIV, QBFT, TRACE, TXPOOL, and WEB3. The default is: ETH, NET, WEB3. tip The singular --rpc-ws-api and plural --rpc-ws-apis options are available and are two names for the same option.","s":"rpc-ws-api","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api","p":4610},{"i":4819,"t":"Syntax Example Environment variable Configuration file --rpc-ws-api-methods-no-auth=[,,...] --rpc-ws-api-methods-no-auth=admin_peers,eth_getWork BESU_RPC_WS_API_METHODS_NO_AUTH=admin_peers,eth_getWork rpc-ws-api-methods-no-auth=[\"admin_peers\",\"eth_getWork\"] A comma-separated list of JSON-RPC API methods to exclude from authentication services. note You must enable JSON-RPC WebSocket authentication using --rpc-ws-authentication-enabled.","s":"rpc-ws-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api-methods-no-auth","p":4610},{"i":4821,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-credentials-file= --rpc-ws-authentication-credentials-file=/home/me/me_node/auth.toml BESU_RPC_WS_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml rpc-ws-authentication-credentials-file=\"/home/me/me_node/auth.toml\" The path to the credentials file for JSON-RPC API authentication.","s":"rpc-ws-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-credentials-file","p":4610},{"i":4823,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-enabled[=] --rpc-ws-authentication-enabled=true BESU_RPC_WS_AUTHENTICATION_ENABLED=true rpc-ws-authentication-enabled=true Enables or disables authentication for the JSON-RPC WebSocket service. note wscat doesn't support headers. Authentication requires you to pass an authentication token in the request header. To use authentication with WebSockets, you need an app that supports headers.","s":"rpc-ws-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-enabled","p":4610},{"i":4825,"t":"Syntax Example Environment variable Configuration file ---rpc-ws-authentication-jwt-algorithm= --rpc-ws-authentication-jwt-algorithm=ES256 BESU_RPC_WS_AUTHENTICATION_JWT_ALGORITHM=ES256 rpc-ws-authentication-jwt-algorithm=\"ES256\" The JWT key algorithm used to generate the keypair for JSON-RPC WebSocket authentication. Possible values are RS256, RS384, RS512, ES256, ES384, and ES512. The default is RS256.","s":"rpc-ws-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-algorithm","p":4610},{"i":4827,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-jwt-public-key-file= --rpc-ws-authentication-jwt-public-key-file=publicKey.pem BESU_RPC_WS_AUTHENTICATION_JWT_PUBLIC_KEY_FILE=\"publicKey.pem\" rpc-ws-authentication-jwt-public-key-file=\"publicKey.pem\" The JWT provider's public key file used for JSON-RPC WebSocket authentication with an external JWT.","s":"rpc-ws-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-public-key-file","p":4610},{"i":4829,"t":"Syntax Example Environment variable Configuration file --rpc-ws-enabled[=] --rpc-ws-enabled=true BESU_RPC_WS_ENABLED=true rpc-ws-enabled=true Enables or disables the WebSocket JSON-RPC service. The default is false.","s":"rpc-ws-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-enabled","p":4610},{"i":4831,"t":"Syntax Example Environment variable Configuration file --rpc-ws-host= # to listen on all interfaces --rpc-ws-host=0.0.0.0 BESU_RPC_WS_HOST=0.0.0.0 rpc-ws-host=\"0.0.0.0\" The host on which WebSocket JSON-RPC listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0","s":"rpc-ws-host","u":"/public-networks/reference/cli/options","h":"#rpc-ws-host","p":4610},{"i":4833,"t":"Syntax Example Environment variable Configuration file --rpc-ws-max-active-connections= --rpc-ws-max-active-connections=100 BESU_RPC_WS_MAX_ACTIVE_CONNECTIONS=100 rpc-ws-max-active-connections=100 The maximum number of WebSocket connections allowed for JSON-RPC. Once this limit is reached, incoming connections are rejected. The default is 80.","s":"rpc-ws-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-active-connections","p":4610},{"i":4835,"t":"Syntax Example Environment variable Configuration file --rpc-ws-max-frame-size= --rpc-ws-max-frame-size=65536 BESU_RPC_WS_MAX_FRAME_SIZE=65536 rpc-ws-max-frame-size=65536 The maximum size in bytes for JSON-RPC WebSocket frames. If this limit is exceeded, the WebSocket disconnects. The default is 1048576 (or 1 MB).","s":"rpc-ws-max-frame-size","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-frame-size","p":4610},{"i":4837,"t":"Syntax Example Environment variable Configuration file --rpc-ws-port= # to listen on port 6174 --rpc-ws-port=6174 BESU_RPC_WS_PORT=6174 rpc-ws-port=\"6174\" The port (TCP) on which WebSocket JSON-RPC listens. The default is 8546. You must expose ports appropriately.","s":"rpc-ws-port","u":"/public-networks/reference/cli/options","h":"#rpc-ws-port","p":4610},{"i":4839,"t":"Syntax Example Environment variable Configuration file --security-module= --security-module=security_module BESU_SECURITY_MODULE=security_module security-module=\"security_module\" Name of the security module plugin to use. For example, a Hardware Security Module (HSM) or V3 filestore plugin. The default is the node's local private key file specified using --node-private-key-file.","s":"security-module","u":"/public-networks/reference/cli/options","h":"#security-module","p":4610},{"i":4841,"t":"Syntax Example Environment variable Configuration file --static-nodes-file= --static-nodes-file=~/besudata/static-nodes.json BESU_STATIC_NODES_FILE=~/besudata/static-nodes.json static-nodes-file=\"~/besudata/static-nodes.json\" Static nodes JSON file containing the static nodes for this node to connect to. The default is datapath/static-nodes.json.","s":"static-nodes-file","u":"/public-networks/reference/cli/options","h":"#static-nodes-file","p":4610},{"i":4843,"t":"Syntax Example Environment variable Configuration file --strict-tx-replay-protection-enabled[=] --strict-tx-replay-protection-enabled=false STRICT_TX_REPLAY_PROTECTION_ENABLED=false strict-tx-replay-protection-enabled=false Enables or disables replay protection, in accordance with EIP-155, on transactions submitted using JSON-RPC. The default is false.","s":"strict-tx-replay-protection-enabled","u":"/public-networks/reference/cli/options","h":"#strict-tx-replay-protection-enabled","p":4610},{"i":4845,"t":"Syntax Example Environment variable Example configuration file --sync-min-peers= --sync-min-peers=8 BESU_SYNC_MIN_PEERS=8 sync-min-peers=8 The minimum number of peers required before starting sync. The default is 5. Set to 1 to enable static peers to contribute to the initial sync. info This option does not apply to Proof of Stake networks.","s":"sync-min-peers, fast-sync-min-peers","u":"/public-networks/reference/cli/options","h":"#sync-min-peers-fast-sync-min-peers","p":4610},{"i":4847,"t":"Syntax Example Environment variable Configuration file --sync-mode= --sync-mode=SNAP BESU_SYNC_MODE=SNAP sync-mode=\"SNAP\" The synchronization mode. Use SNAP for snap sync, CHECKPOINT for checkpoint sync, FAST for fast sync, and FULL for full sync. The default is FULL when connecting to a private network by not using the --network option and specifying the --genesis-file option. The default is SNAP when using the --network option with named networks, except for the dev development network. SNAP is also the default if running Besu on the default network (Ethereum Mainnet) by specifying neither network nor genesis file. Sync nodes for BFT If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync. tip We recommend using snap sync over fast sync because snap sync can be faster by several days. It might become impossible to sync Ethereum Mainnet using fast sync in the future, as clients drop support for fast sync. We recommend you update Besu to a version that supports newer sync methods. When synchronizing in a mode other than FULL, most historical world state data is unavailable. Any methods attempting to access unavailable world state data return null.","s":"sync-mode","u":"/public-networks/reference/cli/options","h":"#sync-mode","p":4610},{"i":4849,"t":"Syntax Example Environment variable Configuration file --target-gas-limit= --target-gas-limit=8000000 BESU_TARGET_GAS_LIMIT=8000000 target-gas-limit=\"8000000\" The gas limit toward which Besu will gradually move on an existing network, if enough miners are in agreement. To change the block gas limit set in the genesis file without creating a new network, use target-gas-limit. The gas limit between blocks can change only 1/1024th, so the target tells the block creator how to set the gas limit in its block. If the values are the same or within 1/1024th, Besu sets the limit to the specified value. Otherwise, the limit moves as far as it can within that constraint. If a value for target-gas-limit is not specified, the block gas limit remains at the value specified in the genesis file. Use the miner_changeTargetGasLimit API to update the target-gas-limit while Besu is running. Alternatively restart Besu with an updated target-gas-limit value.","s":"target-gas-limit","u":"/public-networks/reference/cli/options","h":"#target-gas-limit","p":4610},{"i":4851,"t":"Syntax Example Environment variable Configuration file --tx-pool= --tx-pool=sequenced BESU_TX_POOL=sequenced tx-pool=\"sequenced\" Type of transaction pool to use. Set to layered to use the layered transaction pool implementation. The default is layered. Set to sequenced to use the sequenced transaction pool. The default is sequenced for the enterprise/private profile.","s":"tx-pool","u":"/public-networks/reference/cli/options","h":"#tx-pool","p":4610},{"i":4853,"t":"Syntax Example Environment variable Configuration file --tx-pool-blob-price-bump= --tx-pool-blob-price-bump=25 BESU_TX_POOL_BLOB_PRICE_BUMP=25 tx-pool-blob-price-bump=\"25\" Sets the price bump policy for re-issued blob transactions as a percentage increase in price. A blob transaction can only replace, or be replaced by, another blob transaction. The default is 100.","s":"tx-pool-blob-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-blob-price-bump","p":4610},{"i":4855,"t":"Syntax Example Environment variable Configuration file --tx-pool-enable-save-restore[=] --tx-pool-enable-save-restore=true BESU_TX_POOL_ENABLE_SAVE_RESTORE=true tx-pool-enable-save-restore=true Enables or disables saving the transaction pool contents to a file on shutdown and reloading it at startup. The default is false. You can define a custom path to the transaction pool file using the --tx-pool-save-file option.","s":"tx-pool-enable-save-restore","u":"/public-networks/reference/cli/options","h":"#tx-pool-enable-save-restore","p":4610},{"i":4857,"t":"Syntax Example Environment variable Configuration file --tx-pool-layer-max-capacity= --tx-pool-layer-max-capacity=20000000 BESU_TX_POOL_LAYER_MAX_CAPACITY=20000000 tx-pool-layer-max-capacity=\"20000000\" Maximum amount of memory (in bytes) that any layer within the layered transaction pool can occupy. The default is 12500000, or 12.5 MB. There are two memory-limited layers in the transaction pool, so the expected memory consumption is twice the value specified by this option, or 25 MB by default. Increase this value if you have spare RAM and the eviction rate is high for your network.","s":"tx-pool-layer-max-capacity","u":"/public-networks/reference/cli/options","h":"#tx-pool-layer-max-capacity","p":4610},{"i":4859,"t":"Syntax Example Environment variable Configuration file --tx-pool-limit-by-account-percentage= --tx-pool-limit-by-account-percentage=0.1 BESU_TX_POOL_LIMIT_BY_ACCOUNT_PERCENTAGE=0.1 tx-pool-limit-by-account-percentage=0.4 The maximum percentage of transactions from a single sender kept in the transaction pool. Accepted values are in the range (0–1]. The default is .001, or 0.1% of transactions from a single sender to be kept in the pool. caution With the layered transaction pool implementation, this option is not applicable. Replace this option with --tx-pool-max-future-by-sender to specify the maximum number of sequential transactions from a single sender kept in the pool. The default value is often unsuitable for private networks. This feature mitigates future-nonce transactions from filling the pool without ever being executable by Besu. This is important for Mainnet, but may cause issues on private networks. Please update this value or set to 1 if you know the nodes gossiping transactions in your network.","s":"tx-pool-limit-by-account-percentage","u":"/public-networks/reference/cli/options","h":"#tx-pool-limit-by-account-percentage","p":4610},{"i":4861,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-future-by-sender= --tx-pool-max-future-by-sender=250 BESU_TX_POOL_MAX_FUTURE_BY_SENDER=250 tx-pool-max-future-by-sender=\"250\" The maximum number of sequential transactions from a single sender kept in the layered transaction pool. The default is 200. Increase this value to allow a single sender to fit more transactions in a single block. For private networks, you can set this in the hundreds or thousands if you want to ensure transactions with large nonce gaps remain in the transaction pool.","s":"tx-pool-max-future-by-sender","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-future-by-sender","p":4610},{"i":4863,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-prioritized= --tx-pool-max-prioritized=1500 BESU_TX_POOL_MAX_PRIORITIZED=1500 tx-pool-max-prioritized=\"1500\" The maximum number of transactions that are prioritized in the layered transaction pool. The default is 2000. For private networks, we recommend setting this value to the maximum number of transactions that fit in a block in your network.","s":"tx-pool-max-prioritized","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized","p":4610},{"i":4865,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-prioritized-by-type= --tx-pool-max-prioritized-by-type=BLOB=6 BESU_TX_POOL_MAX_PRIORITIZED_BY_TYPE=BLOB=6 tx-pool-max-prioritized-by-type=\"BLOB=6\" The maximum number of transactions of a specific transaction type that are prioritized in the layered transaction pool. This option is mostly useful for tuning the amount of prioritized blob transactions in the transaction pool. Keeping the prioritized layer sorted is costly, and only a few blob transactions can fit in a block (currently a maximum of six). Tuning the maximum number of prioritized transactions by type can help maintain the efficiency and performance of the transaction pool. The default is BLOB=6.","s":"tx-pool-max-prioritized-by-type","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized-by-type","p":4610},{"i":4867,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-size= --tx-pool-max-size=2000 BESU_TX_POOL_MAX_SIZE=2000 tx-pool-max-size=\"2000\" The maximum number of transactions kept in the transaction pool. The default is 4096. caution With the layered transaction pool implementation, this option is not applicable because the layered pool is limited by memory size instead of the number of transactions. To configure the maximum memory capacity, use --tx-pool-layer-max-capacity.","s":"tx-pool-max-size","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-size","p":4610},{"i":4869,"t":"Syntax Example Environment variable Configuration file --tx-pool-min-gas-price= --tx-pool-min-gas-price=2000 BESU_TX_POOL_MIN_GAS_PRICE=2000 tx-pool-min-gas-price=\"2000\" The minimum gas price, in wei, required for a transaction to be accepted into the transaction pool.","s":"tx-pool-min-gas-price","u":"/public-networks/reference/cli/options","h":"#tx-pool-min-gas-price","p":4610},{"i":4871,"t":"Syntax Example Environment variable Configuration file --tx-pool-no-local-priority[=] --tx-pool-no-local-priority=true BESU_TX_POOL_NO_LOCAL_PRIORITY=true tx-pool-no-local-priority=true If this option is set to true, senders of transactions submitted via RPC are not prioritized over remote transactions in the transaction pool. The default is false.","s":"tx-pool-no-local-priority","u":"/public-networks/reference/cli/options","h":"#tx-pool-no-local-priority","p":4610},{"i":4873,"t":"Syntax Example Environment variable Configuration file --tx-pool-price-bump= --tx-pool-price-bump=25 BESU_TX_POOL_PRICE_BUMP=25 tx-pool-price-bump=25 The price bump percentage to replace an existing transaction in the transaction pool. For networks with a base fee and priced gas, the default is 10, or 10%. For networks with zero base fee, or free gas, the default is 0.","s":"tx-pool-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-price-bump","p":4610},{"i":4875,"t":"Syntax Example Environment variable Configuration file --tx-pool-priority-senders=
    [,
    ,...] --tx-pool-priority-senders=0x13003d886a7be927d9451c27eb3bc8d3616e26e9 BESU_TX_POOL_PRIORITY_SENDERS=0x13003d886a7be927d9451c27eb3bc8d3616e26e9 tx-pool-priority-senders=\"0x13003d886a7be927d9451c27eb3bc8d3616e26e9\" A comma-separated list of sender addresses to prioritize in the transaction pool. Transactions sent from these addresses, from any source, are prioritized and only evicted after all others. If not specified, only senders submitting transactions via RPC have priority (unless --tx-pool-no-local-priority is set to true).","s":"tx-pool-priority-senders","u":"/public-networks/reference/cli/options","h":"#tx-pool-priority-senders","p":4610},{"i":4877,"t":"Syntax Example Environment variable Configuration file --tx-pool-retention-hours= --tx-pool-retention-hours=5 BESU_TX_POOL_RETENTION_HOURS=5 tx-pool-retention-hours=5 The maximum period (in hours) to hold pending transactions in the transaction pool. The default is 13. caution With the layered transaction pool implementation, this option is not applicable because old transactions will expire when the memory cache is full.","s":"tx-pool-retention-hours","u":"/public-networks/reference/cli/options","h":"#tx-pool-retention-hours","p":4610},{"i":4879,"t":"Syntax Example Environment variable Configuration file --tx-pool-save-file= --tx-pool-save-file=/home/me/me_node/node_txpool.dump BESU_TX_POOL_SAVE_FILE=/home/me/me_node/node_txpool.dump tx-pool-save-file=\"/home/me/me_node/node_txpool.dump\" The path to the file that stores the transaction pool's content if the save and restore functionality is enabled using --tx-pool-enable-save-restore. The file is created on shutdown and reloaded during startup. The default file name is txpool.dump in the data directory.","s":"tx-pool-save-file","u":"/public-networks/reference/cli/options","h":"#tx-pool-save-file","p":4610},{"i":4881,"t":"Syntax -V, --version Prints version information and exits.","s":"version","u":"/public-networks/reference/cli/options","h":"#version","p":4610},{"i":4883,"t":"Syntax Example Environment variable Configuration file --version-compatibility-protection[=] --version-compatibility-protection=true BESU_VERSION_COMPATIBILITY_PROTECTION=true version-compatibility-protection=true Enables or disables performing version compatibility checks when starting Besu. If set to true, it checks that the version of Besu being started is the same or later than the version of Besu that previously started with the same data directory. The default is false for named networks, such as Mainnet or Holesky, and true for non-named networks.","s":"version-compatibility-protection","u":"/public-networks/reference/cli/options","h":"#version-compatibility-protection","p":4610},{"i":4885,"t":"Syntax -X, --Xhelp Displays the early access options and their descriptions, and exits. caution The displayed options are unstable and may change between releases.","s":"Xhelp","u":"/public-networks/reference/cli/options","h":"#xhelp","p":4610},{"i":4887,"t":"caution This reference contains API methods that apply to both public and private networks. For private-network-specific API methods, see the private network API reference. All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint. Most example requests are made against private networks. Depending on network configuration and activity, your example results might be different. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Besu API methods","u":"/public-networks/reference/api","h":"","p":4886},{"i":4889,"t":"The ADMIN API methods provide administrative functionality to manage your node. note The ADMIN API methods are not enabled by default for JSON-RPC. To enable the ADMIN API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"ADMIN methods","u":"/public-networks/reference/api","h":"#admin-methods","p":4886},{"i":4891,"t":"Adds a static node. caution If connections are timing out, ensure the node ID in the enode URL is correct. Parameters​ enode: string - enode URL of peer to add Returns​ result: boolean - true if peer added or false if peer already a static node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"admin_addPeer","u":"/public-networks/reference/api","h":"#admin_addpeer","p":4886},{"i":4893,"t":"Changes the log level without restarting Besu. You can change the log level for all logs, or you can change the log level for specific packages or classes. You can specify only one log level per RPC call. Parameters​ level: string - log level log_filter: array - (optional) packages or classes for which to change the log level Returns​ result: string - Success if the log level has changed, otherwise error The following example changes the debug level for specified classes to DEBUG. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"admin_changeLogLevel\", \"params\":[\"DEBUG\", [\"org.hyperledger.besu.ethereum.eth.manager\",\"org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\", \"method\":\"admin_changeLogLevel\", \"params\":[\"DEBUG\", [\"org.hyperledger.besu.ethereum.eth.manager\",\"org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" } The following example changes the debug level of all logs to WARN. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_changeLogLevel\",\"params\":[\"WARN\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_changeLogLevel\", \"params\": [\"WARN\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"admin_changeLogLevel","u":"/public-networks/reference/api","h":"#admin_changeloglevel","p":4886},{"i":4895,"t":"Generates cached log bloom indexes for blocks. APIs such as eth_getLogs and eth_getFilterLogs use the cache for improved performance. tip Manually executing admin_generateLogBloomCache is not required unless the --auto-log-bloom-caching-enabled command line option is set to false. note Each index file contains 100000 blocks. The last fragment of blocks less than 100000 are not indexed. Parameters​ startBlock: string - block to start generating indexes endBlock: string - block to stop generating indexes Returns​ result: object - log bloom index details: startBlock: string - starting block for the last requested cache generation endBlock: string - ending block for the last requested cache generation currentBlock: string - most recent block added to the cache indexing: boolean - indicates if indexing is in progress boolean - indicates acceptance of the request from this call to generate the cache curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_generateLogBloomCache\", \"params\":[\"0x0\", \"0x10000\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_generateLogBloomCache\", \"params\": [\"0x0\", \"0x10000\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startBlock\": \"0x0\", \"endBlock\": \"0x10000\", \"currentBlock\": \"0x0\", \"indexing\": true, \"requestAccepted\": true } }","s":"admin_generateLogBloomCache","u":"/public-networks/reference/api","h":"#admin_generatelogbloomcache","p":4886},{"i":4897,"t":"Removes cache files for the specified range of blocks. Parameters​ fromBlock: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlock: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. You can skip a parameter by using an empty string, \"\". If you specify: No parameters, the call removes cache files for all blocks. Only fromBlock, the call removes cache files for the specified block. Only toBlock, the call removes cache files from the genesis block to the specified block. Returns​ result: object - Cache Removed status or error. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_logsRemoveCache\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_logsRemoveCache\", \"params\": [\"1\", \"100\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"Status\": \"Cache Removed\" } }","s":"admin_logsRemoveCache","u":"/public-networks/reference/api","h":"#admin_logsremovecache","p":4886},{"i":4899,"t":"Repairs cached logs by fixing all segments starting with the specified block number. Parameters​ startBlock: string - decimal index of the starting block to fix; defaults to the head block Returns​ result: object - status of the repair request; Started or Already running curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_logsRepairCache\",\"params\":[\"1200\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_logsRepairCache\", \"params\": [\"1200\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"Status\": \"Started\" } }","s":"admin_logsRepairCache","u":"/public-networks/reference/api","h":"#admin_logsrepaircache","p":4886},{"i":4901,"t":"Returns networking information about the node. The information includes general information about the node and specific information from each running Ethereum sub-protocol (for example, eth). Parameters​ None Returns​ result: object - node object with the following fields: enode: string - enode URL of the node listenAddr: string - host and port for the node name: string - client name id: string - node public key ports: object - peer discovery and listening ports protocols: object - list of objects containing information for each Ethereum sub-protocol note If the node is running locally, the host of the enode and listenAddr display as [::] in the result. When advertising externally, the external address displayed for the enode and listenAddr is defined by --nat-method. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"enode\": \"enode://87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3@[::]:30303\", \"listenAddr\": \"[::]:30303\", \"name\": \"besu/v1.0.1-dev-0d2294a5/osx-x86_64/oracle-java-1.8\", \"id\": \"87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3\", \"ports\": { \"discovery\": 30303, \"listener\": 30303 }, \"protocols\": { \"eth\": { \"config\": { \"chainId\": 2018, \"homesteadBlock\": 0, \"daoForkBlock\": 0, \"daoForkSupport\": true, \"eip150Block\": 0, \"eip155Block\": 0, \"eip158Block\": 0, \"byzantiumBlock\": 0, \"constantinopleBlock\": 0, \"constantinopleFixBlock\": 0, \"ethash\": { \"fixeddifficulty\": 100 } }, \"difficulty\": 78536, \"genesis\": \"0x43ee12d45470e57c86a0dfe008a5b847af9e372d05e8ba8f01434526eb2bea0f\", \"head\": \"0xc6677651f16d07ae59cab3a5e1f0b814ed2ec27c00a93297b2aa2e29707844d9\", \"network\": 2018 } } } }","s":"admin_nodeInfo","u":"/public-networks/reference/api","h":"#admin_nodeinfo","p":4886},{"i":4903,"t":"Returns networking information about connected remote nodes. Parameters​ None Returns​ result: array of objects - list of objects returned for each remote node, with the following fields. version: string - P2P protocol version name: string - client name caps: array of strings - list of Ethereum sub-protocol capabilities network: object - local and remote addresses established at time of bonding with the peer (the remote address might not match the hex value for port; it depends on which node initiated the connection.) port: string - port on the remote node on which P2P discovery is listening id: string - node public key (excluding the 0x prefix, the node public key is the ID in the enode URL enode://@:.) protocols: object - current state of peer including difficulty and head (head is the hash of the highest known block for the peer.) enode: string - enode URL of the remote node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"version\": \"0x5\", \"name\": \"besu/v20.10.4-dev-0905d1b2/osx-x86_64/adoptopenjdk-java-11\", \"caps\": [\"eth/62\", \"eth/63\", \"eth/64\", \"eth/65\", \"IBF/1\"], \"network\": { \"localAddress\": \"192.168.1.229:50115\", \"remoteAddress\": \"168.61.153.255:40303\" }, \"port\": \"0x765f\", \"id\": \"0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc\", \"protocols\": { \"eth\": { \"difficulty\": \"0x1ac\", \"head\": \"0x964090ae9277aef43f47f1b8c28411f162243d523118605f0b1231dbfdf3611a\", \"version\": 65 } }, \"enode\": \"enode://e143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc@127.0.0.1:30303\" } ] }","s":"admin_peers","u":"/public-networks/reference/api","h":"#admin_peers","p":4886},{"i":4905,"t":"Removes a static node. Parameters​ enode: string - enode URL of peer to remove Returns​ result: boolean - true if peer removed or false if peer not a static node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_removePeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_removePeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"admin_removePeer","u":"/public-networks/reference/api","h":"#admin_removepeer","p":4886},{"i":4907,"t":"The DEBUG API methods allow you to inspect and debug the network. The DEBUG API is a more verbose alternative to the TRACE API, and its main purpose is compatibility with tools such as Remix. Where these APIs overlap, we recommend using the TRACE API for production use over the DEBUG API. Specifically, we recommend trace_block over debug_traceBlock, and trace_transaction over debug_traceTransaction. note The DEBUG API methods are not enabled by default for JSON-RPC. To enable the DEBUG API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"DEBUG methods","u":"/public-networks/reference/api","h":"#debug-methods","p":4886},{"i":4909,"t":"Returns account information at the specified index of the specified block. Parameters​ blockHashOrNumber: string - block hash or number at which to retrieve account information txIndex: number - transaction index at which to retrieve account information address: string - contract or account address for which to retrieve information Returns​ result: object - account details object with the following fields: code: data - code for the account. Displays 0x0 if the address is an externally owned account. nonce: quantity - number of transactions made by the account before this one balance: quantity - balance of the account in wei codehash: data - code hash for the account This example uses an externally owned account address for the address parameter. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountAt\",\"params\":[\"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6\", 0, \"0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountAt\", \"params\": [ \"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6\", 0, \"0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"code\": \"0x0\", \"nonce\": \"0x5\", \"balance\": \"0xad78ebc5ac6200000\", \"codehash\": \"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\" } } This example uses a contract address for the address parameter. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountAt\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountAt\", \"params\": [ \"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b27b880414610030575b600080fd5b61004a60048036038101906100459190610108565b61004c565b005b60606000806000604051935036600085376000803686885af490503d9150816000853e806000811461007d57610093565b60008311156100925761012085019350836040525b5b5060008114156100ec578473ffffffffffffffffffffffffffffffffffffffff167f410d96db3f80b0f89b36888c4d8a94004268f8d42309ac39b7bcba706293e099856040516100e3919061016e565b60405180910390a25b5050505050565b60008135905061010281610227565b92915050565b60006020828403121561011e5761011d610211565b5b600061012c848285016100f3565b91505092915050565b600061014082610190565b61014a818561019b565b935061015a8185602086016101de565b61016381610216565b840191505092915050565b600060208201905081810360008301526101888184610135565b905092915050565b600081519050919050565b600082825260208201905092915050565b60006101b7826101be565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156101fc5780820151818401526020810190506101e1565b8381111561020b576000848401525b50505050565b600080fd5b6000601f19601f8301169050919050565b610230816101ac565b811461023b57600080fd5b5056fea2646970667358221220fdfb5c371055342507b8fb9ca7b0c234f79819bd5cb05c0d467fb605de979eb564736f6c63430008060033\", \"nonce\": \"0x1\", \"balance\": \"0x0\", \"codehash\": \"0xf5f334d41776ed2828fc910d488a05c57fe7c2352aab2d16e30539d7726e1562\" } }","s":"debug_accountAt","u":"/public-networks/reference/api","h":"#debug_accountat","p":4886},{"i":4911,"t":"Retesteth uses debug_accountRange to implement debugging. Returns the accounts for a specified block. Parameters​ blockHashOrNumber: string - block hash or number at which to retrieve account information txIndex: number - transaction index at which to retrieve account information address: string - address hash from which to start limit: integer - maximum number of account entries to return Returns​ result: object - account details object with the following fields: addressMap: map of strings to strings - map of address hashes and account addresses nextKey: string - hash of the next address if any addresses remain in the state, otherwise zero curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountRange\",\"params\":[\"12345\", 0, \"0\", 5],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountRange\", \"params\": [\"12345\", 0, \"0\", 5], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"addressMap\": { \"0x005e5...86960\": \"0x0000000000000000000000000000000000000000\", \"0x021fe...6ffe3\": \"0x0000000000000000000000000000000000000000\", \"0x028e6...ab776\": \"0x0000000000000000000000000000000000000000\", \"0x02cb5...bc4d8\": \"0x0000000000000000000000000000000000000000\", \"0x03089...23fd5\": \"0x0000000000000000000000000000000000000000\" }, \"nextKey\": \"0x04242954a5cb9748d3f66bcd4583fd3830287aa585bebd9dd06fa6625976be49\" } }","s":"debug_accountRange","u":"/public-networks/reference/api","h":"#debug_accountrange","p":4886},{"i":4913,"t":"Sends a list of signed transactions. This is used to quickly load a network with a lot of transactions. This does the same thing as calling eth_sendRawTransaction multiple times. Parameters​ data: string - signed transaction data array Returns​ result: array of objects - object returned for each transaction, with the following fields: index: string - index of the transaction in the request parameters array success: boolean - indicates whether or not the transaction has been added to the transaction pool errorMessage: string - (optional) error message curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_batchSendRawTransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_batchSendRawTransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"index\": 0, \"success\": true }, { \"index\": 1, \"success\": false, \"errorMessage\": \"Invalid raw transaction hex\" }, { \"index\": 2, \"success\": true }, { \"index\": 3, \"success\": false, \"errorMessage\": \"TRANSACTION_REPLACEMENT_UNDERPRICED\" } ] }","s":"debug_batchSendRawTransaction","u":"/public-networks/reference/api","h":"#debug_batchsendrawtransaction","p":4886},{"i":4915,"t":"Returns a list of invalid blocks. This is used to detect and analyze consensus flaws. Parameters​ None Returns​ result: array of objects - list of block objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getBadBlocks\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getBadBlocks\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"block\": { \"number\": \"0xd\", \"hash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"parentHash\": \"0x544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x02c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41\", \"stateRoot\": \"0x861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5\", \"receiptsRoot\": \"0xccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x1\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01\", \"size\": \"0x3a0\", \"gasLimit\": \"0xffffffffffff\", \"gasUsed\": \"0x1a488\", \"timestamp\": \"0x5f5b6824\", \"uncles\": [], \"transactions\": [ { \"blockHash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"blockNumber\": \"0xd\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x1a49e\", \"gasPrice\": \"0x3e8\", \"hash\": \"0xdd8cf045113754c306ba9ac8ac8786235e33bc5c087678084ef260a2a583f127\", \"input\": \"0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033\", \"nonce\": \"0x0\", \"to\": null, \"transactionIndex\": \"0x0\", \"value\": \"0x0\", \"v\": \"0xf9d\", \"r\": \"0xa7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7\", \"s\": \"0x130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fca\" } ] }, \"hash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"rlp\": \"0xf9039df9025ca0544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5a002c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41a0ccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d86ffffffffffff8301a488845f5b6824b86100000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a49e8080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da0a7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7a0130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fcac0\" }, { \"block\": { \"number\": \"0x8\", \"hash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"parentHash\": \"0x98ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x8ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486\", \"stateRoot\": \"0x140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3bac\", \"receiptsRoot\": \"0x2b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x2\", \"totalDifficulty\": \"0x2\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701\", \"size\": \"0x3a0\", \"gasLimit\": \"0xffffffffffff\", \"gasUsed\": \"0x1a4c9\", \"timestamp\": \"0x5f5b6b80\", \"uncles\": [], \"transactions\": [ { \"blockHash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"blockNumber\": \"0x8\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x1a4c9\", \"gasPrice\": \"0x3e8\", \"hash\": \"0x675e336a4281b29c619dfd4ccfbd2f930f3728b20caf9e0067284aa3224e6758\", \"input\": \"0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033\", \"nonce\": \"0x0\", \"to\": null, \"transactionIndex\": \"0x0\", \"value\": \"0x0\", \"v\": \"0xf9d\", \"r\": \"0x2e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4\", \"s\": \"0x50e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0\" } ] }, \"hash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"rlp\": \"0xf9039df9025ca098ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3baca08ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486a02b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020886ffffffffffff8301a4c9845f5b6b80b86100000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a4c98080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da002e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4a050e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0c0\" } ] }","s":"debug_getBadBlocks","u":"/public-networks/reference/api","h":"#debug_getbadblocks","p":4886},{"i":4917,"t":"Returns the RLP encoding of the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - RLP-encoded block object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawBlock\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawBlock\",\"params\":[\"0x32026E\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf96096f90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9bf95c56f8ac82d51f8502540be4008303c9e294a68d4c1e3de1b721ad1356bbf827d6bc8cef304f80b844b1bb4d351300dbc7e12342566318001b83aefc9f20080000f3ef25472407fe9c9c69a1470000000242692bb4cd506c409651ab80eb3acfa54551d3dbc9af4493605d79871ba01e474fb147b16b9538d7a59a57738e406158d9cc306a9062b1b7a9f544c35abfa061aabb714c760f2243a16a024811679d402c8822e8b25dfd0038d84298fb5205b87502f87283aa36a754849502f900849502f9108302222794102554afa6b5dbccc86176faef2b2d854201756e8084e2bc7b43c001a04f2398f24bc950db1f5439de3cf6431ea277236595ae8dc5815c0cc671c9f97ca029898786a59c56f086fc0f7a16859f366cf46084add999fe137cbf43693712e8b87c02f87983aa36a7830293748459682f00850165a0bc008255f094fafb56bb5b37c3b0b0ee9d7c31f018aac91dfb778806f05b59d3b2000080c080a0b069dd8967533a773e592c26b1b36df0793d0b9f6eceba34da246f602c2fae58a002009dab32ab63a25b705d9a00e311f7cd5d85e73f9b2c03ffd0e5135c0bb2c6b89502f89283aa36a7018459682f008459682f0983011fec945b9fedd37f0b92e7e282b19cebcf06f57b77c60480a46a62784200000000000000000000000019a1fcc6fcc5832cd2db7704d75efbc800f5a742c001a0c65eb0e48090a8f8830de47f430b9ad11071a62a5db9555619a990d7e9b81738a05a6e826610a5b2ee529a22942ebcd3abd2a8a10228098c8158380e8fcceb962fb9028002f9027c83aa36a7178459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e17852000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f16827000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a004f8666c8e5d0f3c7110994f624d24aa47a1327814289698c3e2777284a5cfdca04ff05f1b8c5beb58972d40e5a7b894d5e28ad2f15a3429c7d2bee6b6a9633730b9019f02f9019b83aa36a70b8459682f008459682f098303644f944284890d4acd0bcb017ece481b96fd4cb457cac88715c0f4db6e0ea0b90124ee1490b20000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d40000000000000000000000001e8c104d068f22d351859cdbfe41a697a98e6ea20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000222e00000000000000000000000000000000000000000000000000015c0f4db6e0ea00000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000c080a0e5270f6291acc162885656bedf64fbcb904c41951221dc0cbbbdca03bb33ce43a01f08c7ed3c231403b55f37a157d80e121b653baa810add8c02aea722631450dcb87c02f87983aa36a7830293758459682f00850165a0bc008255f0948d247f4fbbe81429d3d164a5c9ae0063210edbdc8806f05b59d3b2000080c080a0bb83dd6181c9a7ae3069af3bdf1820b5e556eaf99e385b8d7b3571321fb2966ba02ac193773704524adcd02824796df83407a42cdd81e786b591eba43c4ffc6c40b9028002f9027c83aa36a7048459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e178520000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac6790000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c00000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac679000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0fc882968005f717a74a2c2fb345f691091cab084f4bd3934358741807bd5a66ea03f81c68d05d06bf851a6ef5ea6874557a221cbadde24f3fa51f777699b5d2804b8d802f8d583aa36a7822c0b8459682f008459682f098303534f943367dfa11e3148a07c2da773e1f65b155b0abe5680b864ad58bdd100000000000000000000000053844f9577c2334e541aec7df7174ece5df1fcf0000000000000000000000000e9e12c660e77a732940bab3c2cf385c843b834b800000000000000000000000000000000000000000006015d637c177581800000c001a0a292e7723d3c950aa8a557bd91dece34ec527d9efe2cc413d582dcd9fc6bf6eba03386ce6f58e862f329946bf32897f7df5d1c8f818fecfafc1223052fb251d97eb8b602f8b383aa36a7138459682f008459682f09832dc6c094ba175fdab00e7fcf603f43be8f68db7f4de9f3a980b844095ea7b300000000000000000000000084a0cc1ab353da6b7817947f7b116b8ea982c3d20000000000000000000000000000000000000000000000068f365aea1e440000c001a0968ed0274829918071d9cef28e1adbf1fd15ec76e5a4f809971e887b4c9f34b6a001ce26485bc7e3ea71fb99866bd43002b264b2ed80e10850203c2f07b78856bdb87c02f87983aa36a7830293768459682f00850165a0bc008255f0946d3b93db4e4078cf6541a68532d00705d9a4da618806f05b59d3b2000080c080a083c831630788e7ee57c87128d18582e29aa51f1f233e91d916c06d0750578156a0549b5a00477f3fb4d8fbf95ba3a636c3a14ff011c1bbf3a717e00d61735cbf34b87c02f87983aa36a7830293778459682f00850165a0bc008255f0940d3a7d69859a0dd6971d39703b15379e05ae2ec48806f05b59d3b2000080c001a0082660b5db2d3a8a58c0b863673ab27f7cfe4c049dcc52c76a00ab45b0358db5a05a7519a2d399cb534480383ac21262fbde2dd85241495d7832dee8bb02c49c87b87c02f87983aa36a7830293788459682f00850165a0bc008255f0941be13f64a2463fc7a76b4092c53328cc965a77fb8806f05b59d3b2000080c001a0e6ee9b85c3b729518524fdaeb25d47f89f6fc6c4d2c4df707187bef74d73f958a0756bbf4ab119805b77466957b5895c1d5bf422c5f65d8a06f7efd37dcb2c87afb87c02f87983aa36a7830293798459682f00850165a0bc008255f094a90b28fd6f8e46ac668fcb688414184a163e2cd28806f05b59d3b2000080c080a0d394dd43c58591e5dda8a7f3a2f4eae1bfd65655b9e9eec5facc6dcb39aa77baa002eeabf3fe9c0a56eae476d2f6452ea72e63a9c9b1180290b792883258f939f5b8f802f8f583aa36a7830283818459682f008459682f1082962494d0f723c6b2226df56fe41e63b9eaa66eb540bcb880b884abac047b000000000000000000000000000000000000000000000000000000000103e9f0f3471dc445d8f209ef546e0d20eaccc12ed0a5b4100007f57d9bc8638dacaf6480000000000000000000000000000000000000000000000000000000001d209b1ea11d77d1ab457eb3e2954cb2b98e77b5b07e2a4f48507af0adc61329ddc210c001a0efa10ab60f3bd1e7c4a8d52a275a568fbe2f5edc9e1eaf386299577ff9ddbd6ba06e62cf2f66b58f655ddd3eae47ce40408445b086f6ea858edb7bd847ee206207f86f82e6e582014482f618949ebf6b12e7e33b8672788e7b2b3330356f6f2c41880de0b6b3a7640000808401546d72a008d6be7aa21be0a43e08e960620f4c40c44010a743ead9919ef9423863c08b12a06a63a7caae4504ee5528e50387ca09974f7124035328a62d1085da2fee6618f9f86f82e1c382014482f618949c68eb31c4d00b94c3e3d4c2887946f8b076b24c880de0b6b3a7640000808401546d72a0c22d48d72c70ccf0a44d0950daf16741838f9333ee0bc5e05ff02b058da1e010a06a20c9f74cbc14c0d5bf3b3c38d3c33a5ace9194cddc2c533afb16459eaa7647f86f82e4cb82014482f61894d531e7aa3c0bee832aaff22642c7a3128d48a81a880de0b6b3a7640000808401546d72a01dbaeffc8e11964c06a722bae73e35bb5de55b8f959592868f2ff5fc13b69bd3a002acadc04665570a2032cdb616de15bdca79127f21302d62db5baf96ae4734e6f86e830176e381d882520894ad346e81c5b26fe563ab1ba2aa4ff811655882ca872386f26fc10000808401546d72a0b6de11598824e338100d5ebe70c0b0f4d6893fbb36f11ad55cf74b2f43afc5dda05101e65e7e84ea9edba6e5bf1a1e07028ae3fa5213240e812e57cf6b29080726b9235302f9234f83aa36a7830137d564748315f52194ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5000000000000000000000000000077770000000000000000000000000000000191c15235c348207e935e72b9151056a9661d73631d1e2c3f89ffddf8e74efe8a42ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000030ef2c000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000ec15abee257256da1a964434000f59ddd45b1ce67d5df44f1c82fd5bfe95c3b31dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000777700000000000000000000000000000001d4b5b35d93f51c8143f6a4cc3d7b320d37ce03989cd88c28601f4ea94cd6554249cff83e4dd8e99a8ef9004b2ac7518996f4784af1f9e52debb6223a697e9652530feda219f333e01f8cd0b31ee83b9c250ee51fde9718ef5fa305cbcd01901200200100002020000400000280000006004000c0020000000000000000000100000000029000000000000000090000000000008000200040000012004020000800000000240002400008000800000020000000001040000000000040824000000000000002040000400000002000080000000000000804000000001001000c84000208000000000180020000014000000000210100510008000082c0000000001200002000000024000008400000000220001800400000008010000052000200000200028000000000800000040200000110000010000010000001020000210004100002000000000900280000010008001000000018004000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc0000000000000000000000000000000000000000000000000000000000034bfbc00000000000000000000000000000000000000000000000000000000002ddb24000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000002e042ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b2a7122720155935f15da0807d0054f1a4c3db2a92ec4124bf590ce7a16594f3f1812f260acb049d01ad534a937840a80c0f56fd9a54ca5a8628ed896d14a5f8b2570f5813e35c990656f6300a1a1849429135ada6337646248f6ea03a7f70ac426c1d805216d154ea5a8e5ff953bc04b71b049b4b5bd549b6b0cfa7f8b21dba72a3805c7093d8589f2d4c55b6211441041e8bd7916daed5093fcebd377c31e810a6499e6e26840e3afadc9b339c6abc86b7f89fc3559f4242d373a71389db20219195f6e13069701f6d539dcf63a049726cdd8cadc412d1c43cf3fc0095ae5e2157dc668bdb924d7d7afc2b4632ab8a0e4ef71941a0a6a65645f6cd8570302f90b98bbdd01be238dc07780ee9b93e22ab87f26170d7fc5531347fb9fadcb65dc2ca20442a70be9e785292d533fa9496308a7b1588b50b45c17ea765de525259f036edd3984782399b46793acd5abb9f49e38b309c2363aead57264ac1a44e6432b81127a0bfdc29f01bd04e7db2b2545ed8426d2fe9b3e561793ec8fc875f2a71f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f11fcba848e01c60438611958101321898e95c8fdc936d31389bdba8073b382e5b1e2cd25993ad31586d7525f165fb25a1cf8c22623f983c025d21f0e52ecfec5f0232a753addaad88340ca39f00e9722f35dd25fbe8fdd8846bfc0288215d0638004009396bfcd5e6eb0c587797ae8297decbca48b02407219b910ce163552ed230438292cec430007886beabe7cdf5c6f9c3740a3dd6c52ba88e6d652ce43f90044193c4a42335291795c2cc160dc68b6225edb425a88d27cae159f77df3a2241fbe809c8f1122d245bf439df0761bec97358b96d6653bc83702b559bde5a2d12f771a2a11bc9dc32580bc3ccf9dfacd0a5379587ac5160b45d333a85cde46810ad2875b406f00438aee245ecc63815528a185e9e2a029147db7fcffcb8875e5259f15c3e467de02e035891b131bc715e54e7e27a7acc437bb9f6f84fa4456aa016b3578a73ed8a4706efb935be8b6abe0697e46d878d9c74e274f2816d2fd88146b316731719e125d227e002af95aa13f468a9bae4ff41a4a6036ee7fc321b3249aed4dfb6e75089ec0656ee4e87e1fffefbd74edf55a20d752a85caccf583c0d9e2ef1040b4d36a8e992ad50ce1c4bd2b300b344ca881725c164886a5f8f18035f6e75e67a3eaa2064fc24ff79897edb624e1a67f34deb414d5efaf4c55d482da108aa2ab7504fd5d7f78d91da5c20230380ec013b910b01a26b8bed8a05a004d52db30b7fb01f16347692e9f19f303f48ea8cbbed2d3a3eb277ddf4e9ed8026af5ce92a618c8942caf28b3249044347e14e5c3c2ed5ec0f9cccf1d11a5b290c00773e12c25feafbcceeb8ae6c25a88c9657c627187af6fe0bfea0b3cc36c908a76f90e965bc4135c8596534f444c91aaaaaa6277985e36248bd53ef0f74f103eeac98ba92c5350e4a0c586c851ad25df982e16b2d408de37c687efc6915a41197df379614aa657ab5100627c47896b51b000cb95505bac77e4e440ecd1fe50252fc98f15ee41cafbf717e144da35f424e141639de04ebe5d333e9df8c06821c689d1ef2abbfd12e8a1edc059a9279db7ff44bac1962b5f7297da5c989528229e98a91a3a2e351f371dfa34d4c3676725baa5fa4696f67f4239b5fe1e3fa351d66aa5a2df992426d94ba049bbb4eea0ab22e3b9a7409f2b6719ede64353f4112e4da3919adc16dcd99c545966256493d2699ae529e365c20515d95c013ba2627576fb75a030ffd25b85ed3fc40dbbedbca54427f8dc2255c16b742b3e2b82e1bb634ae73a402927e6dc424d1908942b9b0f2cc17909ed050defe85d24a1986291facbb4ecf9b7ff66c27f8e771d28ec6866e3d24bc97e7be388013df8ba8f407b9147ed9b3581784003a22eeada55656d2be271afce06ef3fca32ac9b77b4f2420d60e892c95418b2a1b7d3dae2738a073ef105e66c08488e8a91e8ebdb5a10e979611bd29245c13cc4c0f5b33eedc5263edd6c27666e0c3f02161114120230511406f9f82102fd8c37c36d4e383e445df4afc6e7dbaa570cfe05b3f6038ec1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5006f155ac97d6757728caceba5530eb745e72277723ad34268b34008a97a27c370e9bc006aeaca4ac36414f35aa41ff400f698623a447c949f7f004f3c3fdb09f2af3c96042e215f0d4bbb23fda72d4f01dd9a55dbdec930919715a23e2cd772a260e2b91324c244d88ce1b83c92dce1aa0e0c255b80ed9325dec0e677563984a1c559ddb4a544eadeb2a38e8ed7736174a30d2bee6e0b65f3766e0b7a4e4d8022dd9f82493a9b1fadd1907147ac29edeb8cf8c7c58fbfa9b82ed3d9f9f05bfc900e52e29a05ca8d445b5245b16928dd61800ebb63933d9c471c2fb38776459641e9debdc606abf6ccfdf8fb41da88ba0745d96fd4557a879fee82e33df32d18b18d7360529f89f3dea680a5cb0c6a7652ee38589e1997f3e64ce4db1d3c04cd628fc0fd6e7ef1944108d48eb742a28467fa4bca693dbc8f923945256da2a83222d172286c82b1949803c54409de4653f258d0cf4266c83d5675ca9b5b3a3fb322b9c493ed7bff0a6165babb19c94d9e2014b13b099f09894fbcf32959b9d4ce71ddf9d24dee8bc40d6be92ee6e1220d84d68ecf1a0424132315c0612802b477b0acabcf346b0ad5ea329ea72f4de7524530bc00ad36baeee835908655faecd350463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea0908c560e84b404afb45f69169d28348ca20bb4f5693db19304d154f60a91ec4e9255be05739f5dc7e0b420d4bde4b188a8520bf39202f81dd3e2f4adcc6f4b4be16880103e0ab232f509729c91ddf0006d6a099a769b38affb89d7489b3bf261106aec362c77acdbb0a71c3da369067eb0f2ee9866a0bbdc4ee41ae81a88d860f1784565b7b1cdd350e8e12241103ff9d57c86c368775530773bafc058cbcea6309bd6d9c144cf6657cac5084ac5fe63ef038a71b3d79e6b7a32cc70039e182052f5cd5e415128e9ab1f553f13c165ea122d089975c1daf617766e12d9f3abb2501571eefde182b767e4b63568d37a8c553671adcee2ee4c7c6d77493e4599cd70d002a718fe0d7c31b7df3893f8b9993c90d7d55eea1c38292f1eae3a7887cfd182977403d5c029a42809f2c6fb8d04aff1c60106ba36367ecca0699866e5ec922ebaeffc4e624d0cc2c748f9c446da0c293d8ba7a28125145ce0936a2dd47172c4502ccf050145fc0584ad8608ee8f6c34c3e718fa5ca616722c5b3549ddb5e2f6a96e82c3d706bf255afda0272c199da51f9a4a869ce8b164694f6ef7593ce08b4bb0afda822eed4a0a7863f532fc0a22de9de5d3456574021b711c42eb1c9190de35ea592568f8ba5528c0f5fadc38e10b14a89a1e49fba9a76ca2478dcca20f8a3c78bb3e1b9869b7375d0deb87819ce7209ad4d73d84a92d08d23649bb50ecb4a1763050b7860afb055461b3158647b453d7977bddde0fac9415327e7eb2ea373fc8abd6793f576e72a47c92d6f6e19fadfdf2c6912365b74929d9b483c19f5146ac5a8dd943caf50b2e0a95fb19066a63a71862a540b2e41731ea66697094e51d309589ce9d25a37c06c9a12839c4c08a050a3ff9e502514f20d573c610466ac5399e11b0153954428f25d16958ab48614d34f768991f84411c401e6900fb0dfaab4108db0ad42fc9ae0a255e60fa4d92747ddda47d07de9f847e7a2be289798c5d34924aae419abdc41d30fb095c6ccabe5c5d5be73ec6197371ea74e08f0583b21901bd748db5348282cabaf57d883f5c55311f1304d7fcd30a9f0b22f810b1a7f089860e4ca0f23ddce9a23d7167762734b10b995d5bd2cf3b31f8f24b18d0a2f7ce1101d3a32d18988f162e91ac94b0f521f24fa287b0d2b97c408079336b89af9e842cf31886c701018ba98d5b0eb0e6d41b67b499f4c466cb1412db0e5937f7ffa83426c9234c713096444d0fc65d1b45f166e54d2a54bc103de110669fbc34555a6d16714ca37651e976b06a7ee96d80af9ff50162016a998451e2ce5819f3346b1fcdf6fe9ff3ec8420d4860a9980ce28fd8c55660983a3fb02cbedb5c638a49e5cdf0b69b71d78e071f1200608e235e6ed0ee8fea5567be12018bcd026412db0538c28bcd4a9afe799d5c677298646943c4200a039d2fced71d985d188f84dfd3132b6a015c50b8a60d712a97c89e0cd7d3a1740244c1522b117dad1220463f5d4af1004c1a2ad6b5708d7d6b28f8ae1e1e7dd1b2d3798b8c2e27a3559c7202aa268099eb3bbdf7c42d0d20b47e5623dba8e6aa1392ff532113c32bd836f4160abb287aefe648aaff6bb0a23928f580347046b64babf354790704538c6ce83f117ac7e83e1e0f54054466cc82b2144cf135be31f24f1b224e2a956827c303b0d82964e284b968c5ebe97688e49ca793a4aba81a3d36eefd8c12e3ce9409be63c3a308636a7b296b804d8125b4f29068ef44d3f2a3c9eb13e61d6365bb96d6973e88a70757b1d9213511d357d252df58d1e848d534d9517165263e803855e8caf387579f1ff0e7e9c3c8e532a2025d8016b70a45c24a546f0b21acf38d16b27eae6466e22396097090291184a7719beb4a55beb89275c6893e01f2075d3b73e165c39335d34a5aa7b280386e30a6df9ba917e1dc6774e2edaa0c87e8f5fcf89306a6fdbcf8cf52cf25f5df473fe350325d510421546765acd00b34ef53e56b01445deea042282e7d6ce20c8f967204c26bda9f2596fa378dc611091ab6db9e1e8d4e9b5c1cc4c4d6ee2ad82b32d08f8cb5a9dd9b03f7aa754f2738ddf2dc0c3318974ff3810765917c251c74ce3d7132c26b5f2ede12a6f62f2e8ddecd5e0d02f99f2ed8ac15641c586d68e093fbe80cefd6a7dbdac6d43e261160807eb82fc2aea870a22b25148d256a083325a5b97bcf0187f748b6c0a1691867344efdd53809fb9edea57669c33780a4aa9e65149937817d3d845d9fccae1876575d5383d06adeacd0f3371209a30e1a9c98446174b0b98560652d0643f120bdabd5484435871b42ad0ce36aa8330c7edd26e64e89eb84e0c72a2c6e49fb24088ae2bdaf7ef07af9bfe381dd6a9ed430a553de1bad4dcefd5239b389090925a69e44e25800d9fccda11ff4e1e4d3049386397f1145c3595ab5115255bc1c1eabb379a37504eda27b1a103b88ae8f174e1d182e3dfbb0b8317d05d6e08c191661b04537421fd84057a9ff5a6eceb68c5bf1f0e356df6e93d936bb6bdccb42127cba43e7615d522242df13f08e5fa162a641430c1431a7d7181dec65202fb618a690c2bf3361d7dc689d5e4a97a550a9b17c8a5ada8f32db3f774e9ed047c02eb7d1ba7add29fa07ab90f290e77bd91ee9b5208b1fb19a37f29dd1a492fa32156a7d43146a336fe6144d19228f975c54ab304565269124e069e864873c0eef23f2e7b012e84ad0c71d76e1b23b8b9a0a66edcd59f4b203a9773ce26baee206254b49efb10cc48bad814b2e299bd478fd4bd8b1ae2c8bd99070b259a9e204e42fc5f65f9e25cb4e4a1a3b67872314fcaeede2abbbc6978660c3e685f6dccb53160d1f7517bbda54177495c23fcf45cdd66363a70a84f2699e239b5071c9e6cb19069f3e0be9f4390c8028ae9960851e34ea18ff88d36ee826c0a4db4e33e94f0ec6651a728a1a2b0c15b30a1783ad4b1d224d87264779a817d107d40c75b77c25addd7b7d6a8b73b2d551f125daed95786920c4130d2061178604f9604a0e2f1c6cdbf3066fd28bf276ee0aee379bc049bc8eba361f4052bd2a698da312c991015c0fbc43ea1d2e72426279fc5181851a15a2f4883018ab01ff8745625f388f05f5fa9abc5d87a710a1227322626115b60f781f4ddd91e205c1cca582a5e37e005396703375846be4f36fdb76c277dc1a2ff1f183cbafc6db485a562f4d08262a207844a3d12261fa0ac479abca76f417df42b037e611b1b6acfda94d5dacc620c3edf5744db24bcc41ef1722dc0e620f8a35c50585a7cecfc97f05bfec21f919420e62a9c4f28ea9585cc056aee08ed8891d077a9647d9c0b5c3141f8c517f13b05bf0a18b99111d2d6e7b4892e78fab35d882e4e153060f0c44cb946d20ad0897a34d2a24d3800b54acd68fdd797aa362560dcede6d12909948bd6f4726a20142eec9c6b78d224b2c24885490bfb492217c6809e0628164579d2c2c16a90f28aa5393ad44c45d4e1500fccdcc684023d7cac4e2cca889333f048cd9a29de018e958d00553c77c74ab50d974df5f654233fb923e809ef6ceabe6a860386603003cc376e90b8bee74f2477343a5ae923aea4ffe99a91b9d9289ddcc3ca316b026b3d369aca474b7941588fc6e9cb062528b10f13b90dd55afd64f7b0ab79163163ce02aed379af25740ac5e37c5628c0b868b7ccfed0ae521c964846f0287d3006952539b2dffaf891bd01fe98a1685e71536d7f33ae85775d11545eb379e0916be616206968605e5033267f6f79cc651c2ce71a790ae5cef19fea7604e479c0793f82db1f8e85bec40d8c6a2dbc9bf76d02a616aced611ae1a7a3756d87dab2855ca585d0048e1e4222ed9d6fa24e3e13677256fbb9959b965727c192696a11474a7f6a6b6c8efb649b1f601c76576f36996ec7a20eee84208232c20e8502903d4e303e4ad7139c654b7e5d2aa262d75672cbb4f653e62ed8e4d28835f7d6d0efb3f39c40558d9cbf19f250681a5c8a59143fec80d6a69d8a265835d6562ef248fa4ac508bd60c9283f6e731baa786828d0f7a635e1d14a448383c8b0243570df4a42799afe03143c227e3fcf0b1393bdf8bacbd26f1041d5e3112c84755942fac77981fe16f048cd882243a8787b09bdc38847a5a9cc9aaf4d30544181ff014dca8b2892c00a933333df6d8ef79041483f2d8c6416897ae7897ca1da85e8f0a493be4520595cd0dd7d32c87999e703704ba0ac7d8b444dba807746123100e2cf7573843a0a755eebad6045d2970a0ef8c9adddff093e79731d5e506f1c43318fb25144ff5fb63041574e89216ebe0ac75d7dcffc35d095691723493c94dcc11d4480bf3fe7b76ba53cae5b409c002f2d1bb5eab08ac993054ec297543798700fe3e2877a4a0cce53599a66eb4f1fef5cafc774277f0e694ebd7f8748fb5140735282e5e0b9bb35b8aeb098775a33820c9b8decad3ad6ce36f79c347dcc2c60a5442d2eab4368827acae1f0ccd52f0475fab95ac57c3c9d7c2649d355756140d5a1e8c6eab8b67a5c169cb899230c4be1dc702323f2b07ee1fcf5657361e250ccbe93bb403abd857eee4335e454e8485a3b055c908c957dca3f9a288299729216103089910386fb994285602ce12b04be1819a2c80394b2410767d9aabdb591e4c4dcd08d1d5bc1bcb532496ff1fc968ac3ff59bc7266d8ecbb67f34b681331685a99b781c9752dfe83d145bd4f3c8ec634f028e850e246aa81f1d03aef40d000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a0bf32b9037b600aae3ecd3dd1838bc9f18ae1661f615cf3d70bc270b6c31f55fb80808080808080a0a2381991afea644ece5cba0d8d69f838f7b123d2e0057a54509e0c61e8b293028080808080808080b8b2f8b030b8adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a0529f2d89256fc038782a4d70b40bf127de906cbe211e7acaa3e928e0fd5cf11d80808080808080a0b4f4d0be01c65da5308bab41d52d8a7c93a1693c170c44d1f619b8364d40e3428080808080808080b90190f9018d30b90189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa50000000000000000000000000000000000000000000000c080a0ae5e67673b90f2d6802e8dba26aadb2e8b81e059d1611afd1908e743e3c0b75da004886b0ac3a810519aa2395bffdd94fbcfe4a2de989ec95d1aea0fcd09afd931b9235302f9234f83aa36a7830137d664748315f42594ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000007777000000000000000000000000000000010012f20d5ba20a09e185d452c999c129d712b83c75480e2e029fc895986d361a781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000004f9456000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000bbe20eedcc0216c615d3a0550a5507bdb2f9912eba7b608300486e871a4e42491dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000007777000000000000000000000000000000014852ab81d236f35c396d4836a6f82239f5672a4b6136ab9ebdd8669a9f9e831b87a26944e5c04f16b79426135ac11b155922c14178bf3d1ecbb1fb12ccc8119a22df5003de2d5956c745f9e825a8f0ca1bb1e265d4d431781b00765e0fe37280000000000004a00000000000800000020400004002001000000000000000010000000002800000000000100009000000000000a000000050000010004020000000000000000412000008002900000000000000000000000000000000820000000000000002000000400000000000080000000000000800000000001000040c0400000000000000010000000001400000000081000001800800008280000000001200002000000000000008440000000000001000000000004000000000000200200040028000000000000000000200000000000000000010000000020200290004100000000000000902080400010000001000000008000000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc100000000000000000000000000000000000000000000000000000000005364e600000000000000000000000000000000000000000000000000000000004456ed000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000002e0781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b21ad05b7c1eb0d208d17426c52831c6347a8db75b12bfeb2970c4dc6666e4eba0492d2ec318089b11ee7ec6087ab6a3df335770526cc0c1679b764d847b4ec1e303d400c12e690aa26a3771e5676e7ac95e2dc7a1b33be698f077c598f880d4203defa26ad36b84573e923af347475c7c7671be245e9859ca1db3c047faeee4b1c0e81d8a92915c2b94ff300e18f77f70ffec15631161e0bc3cdc9143c43422c208187652c1ec83c5d282e10587216eaf56689e5fe236f72c13eb9574afabc622a739cefbbe11aaa4e2e3d4c5415818914fe554a07be374f565d9bcebc0134940e8921b87bd4f6b42a6432e6e176be5ec82bb8eb6bdb7e4acc1f1e99725bd3ab2e3fa52e02c2741dfe6eddf5a3846dfd57f6a72e834faa048cb007826a293d9e163d47f9ea635871b25afcc3561dfce77b3a2604b3c8de90aa24916f41aed62d2e0c0d18f9c259bf614f1321c5b7cf7b5bd73cec408dd85f046bf36302e20f3603b7832071796022e893386de4e3b170135a591b1a44117240ba85876dba586b1f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f12f7e30e74b0329222f6067cad3b4324a80f570506985d729f7780955333f40e615f065023fb607d975d7a2b9f234137e72260d8f6b586baecf42819f8328dfb3304441f2c9e97d1fab9a3625073ac3d2bff6ba2f8d659cbc6f66e8d9afde1ef229ff39bac1ecd65eddc4953e2726a72daefa76f00d58e11c9a9ba3448fbe0d3a03db78d70ed9c574ddc45de5c73efdf3113ee70a4b42cea9884f85c1b995516912800abeb70f3022d5de6d9f49469161a36a6a309099ca43e388908635ed4ae825a14b7cf5213454a1f345497008ed417e5d33ef84c4934368b36f27606072192a1b43396f89647f0541dd25f55b42c5295d3ab2a22355664608b8dfec3c9d76045b27d8c2bdba7f376a44826bbf4044aed0d57068489fd32a2bf52f8613aa150185aafe655d2b86bf8867a6f7728c4133fb95776545b19767a0d7144f60f5ef038eac390d1cac6f9882211d7302137efc82b93b8f9c55db629f47a2c61931c21d01d5ad967c9dc6c1abfd496a74df2ac4714cfb027bc4d8c0153543ca663ded2af64f7396ed3b2ebd1976386814e94b7f7fcc3a19a4dd876288b905c381bc8f008de145083d6404890a863e1af1dd897aeef2516b20df50befb6c708c9728a22cb31d80b0e953aa71230d2462bb0668dd8701e11bc5240d85184f9298e2c5a3257b5dcc3e138df8b7d4162d6253fb5c21a65e952600c8764c613c6f43d22c861d4380cd688c286e9ffad6bb8582421fcab96b075769cf48b3160f056dfac4041b08287533a769bed0f08fdee9a16c5c8f414eb35830793c7b64341fef79dbc529a7b99f85d4e2e88b64954be967c5ee6386f9131b80b454ce70209f78f2101d0ca71da273735bcbcdc5ea5d3d54b607820b9bc852abb1b733cb7bb5018276d30c4c0a7f9ffcd318499a2041043494b82456ca8ac6f07678a8b770329b7c00f31e70e97ce48bc796570be27577e8986ee4c7fa51da44bdecfddfcf18686cbddc02ca206d9132d451ab55cce8069f631412ad2ae02b1a8245d31c0a65854d07370259f632fe253b2412c5a785148248d660d7cb6bef5240749d6ac4a4ac59384b27e7019c6cae15ef7c82e5a952f4da079b6205f9e16f3d3c84e94b490530c5b602d4bf5e9d34f2a785cdb7f7755d6d467a9d88071bbdf8c79195730db7d0b7872cbdcdabab02bd4b8487b726c5ce6492344ae7e900a21893e7b840b46380ba99278ce95322dc23daa97995d1149d425952913428c8ef8659dd2cc2895f12b08e0532a254fd5674fcac1b0992472ef75337d8d77f6fef3720d4b7b17302478c7d2e3b8dec7af4c681aba5e25d8aa3f4382b0082066c3f7a0b4e42c4637df90d9a1e2f3fd1cffa7e0d5577f5da89353521ed02cb1c39eb5746cef10ceb74c3fdba13199b42516ebfe29af40da64ad81b46b7bf04bf25994255c7a51f6839848810025bb52fe7500cf1ef628a07747894e3b73d53e6b2997d0654f1ffd0c070455400fd7e9d670984ac807a0f8131977ed1806fd3c0927c34b7b4dabf011d31e86b1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5020d266b1ccea774955484405f58ad161251d879a87c43d5dbaecd976ac5d04dd2586d70031a86b0dcade14028f36a04508494c7a20e98b3b21f7765e7b3ef68f10960709e63eea35a26ff47424e18df8cc271ff3049262c855d6a131695a395f2ba2f1b039012ac8a2abdf6d9f6b0c432f0ae78b9bccb99f89759434477257ce1f44cc61e95b9c9843ec8efb17c640fc4c837ec125fb25323d3f0644615d21721607fee4d68e2dc9bd29f5b13fafe39b0710d0365dccda35e3c937aed1b6949b2a0a7523011eb706357b85e174376ea7cadbd01ed0dd1bc6a8e5a5a11bc6131f0661dd6365b13c6e2de50b98cba1cde58a921d19936c711424eb625b7c35cba01a0f7dfa8d6f86a2a02425ab48e2c28f8f2f61adbb744c221b9c4f35b16c749c227bcee1202e87537c7441f421c855ce87d858a679f09dcf814bfa1f26f7d9ce18f723d2f84d4b25ec60adbb6367e92270836d03c71ed43413767342a4fb8d6801b8755bf65e7947ed4459ad6486fc1cca1f1cc89df3d307f01d8ac68aa1d08d18aa35a46bf245589c599eddc6337e764c36426f7b7f5d2afde0a76fd3aa536d1a165f9f23cfc65866f574f2289aa5be056dd32c72a204ba8328dd9b0b4643790463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea09160db3fa7477a2fff436ecee95aa2d51ff42ca9d4fcf021b6e501410fd41098a1a8f6021636ece98c27bd74740b7280d3a5e13d9850fcf7f2118c4c91572ba5826fcc4b0837d0b394f6683cba38fa35a5e2bd242041533bd25939cc873d1f5852a2f57cb172eb17c2e3c351240a0b2b334978b90ac18041b09aead26649b1c1c019e41731e77c6b2211d7da94630507bad027561dc625b7e84094378e599a57b09eb32c2a67cf5f2f0bf9250e6da07b165f97dca10517e9f3fe3561d02ec83a722b544bd6e25ef27d9825d13651443c4d984d7e5d0fd70c2a7f983b3ae8c698d27a2a0bf2d35655f477adc99c56f48773922831746f8af58de941a020986ad7c23fb7d31c2f17f305174db26b40447e64c66216dce98e7a8316dd91dee468e602206a4d1d18fa7827f733037fa87dfc9c74c9df0960867087c776382b94db9420a19e5338e17e8a68cb7621f0b56984610bedd3d9b77dc5447cdb129ecc33596079cf206e93904368cae07f0d449e2095f8abd95f26603d2db047647babc8342200be0095aa5489fd18cd00a52f59b70ff04c4b1e572db76d08bad419abbabb00b9e485e3f017807c12b427b5e0e648cf7b16065e313c1c073ce354a5fc6812c02b8d4b6aa1168c575dad9875087fe9f61702309febfb99b895387cc1104c35e123b713019b5e51c320fc2521cdb5cfca20f617773fd46d3872128b87df6f66a21fb3fa16711245ab65eef629c5e6073efaff5b707657f4442f2eb2637fa71000f14fc691a71aacf902c0c1a1a5d7d8d351b8b3cad57acd0a9e47a1abdcaf2b70aed8b7370a6bb2bb4f3d679c4f9793e4b256deefaef1e6dbcdbb648b917e34822d833d2ac1614aebcf360d328d9271f27c52c93de4a9455ce6cd8d2140ebf6b21c9b172cf47556efc5dff9afb913e328a708292bfb65c96d668f4d0b3a9a21b222039156cba9980d6bf11efbd8dd893378e5dc1b323c57d8f702076c22d125d1489bab2553c5521631c35f7b5236007ce8f37012cace78d6eb39718904b5dc31ddcb6f4f175e52bcf6c6008f6f5a572925600194b9af7ae074dbf85119e3afd141b2ff2652a58f043e97f11b77997a9da1c96c18b5254a107f24e997a3ea61c2069b9d04d49bd1bcd2495b19bc71848f28bfb4f0346b682a1b474e040b056e60a32b5e8aa532103101cb45ca41c6a690c8688523b8566d507f29eb44fe2d2490e81f4343ca61c8783b83e40e3ce66532f186e9d09bd2667cf974a763072a910121aa5e86e151d92a868508b680f795bc30b4502769f41e3afef5f321be9ce2f1cff3eb3308d65aa0ed780cc889f605f35eb5e02ba772d08db2579f8561c61fa09a8e23ea1416fb95ca0c7e139ddd16f04b0c872499e44cb5a03868d6c5fa1300c19a96b8586b8f33bd760c6350713696b7d3236acb0eb35bde2e6378e9ef9b117b02290ead7824d42452e332f6ec95a7f871da9ebdf6ad02c959a1a36ba33ff0089a4f5217b7bfa5379a507b1e994fb7b8fef489f1f2cf6fdedf0e530635ef31faaa1a37457c445836376dc5cdefc7770fbbad8c326955655efe4ecde89bd2f1dc62a2551a45206fd7d42605aa1c0fc80476b741bd7df1f0f2db0fc387614240e78427bb3a8cbbaf9bb112da06ea6942335f88c65d42d17816136509ec39b51079b5eb2a8cd15c3d1fbc56dd72c3499c101e2fc9126e8f194c6c8006faef30917c5e535439c6b0d78be52a4d17a3a25d0878649b668db027eecbbafcfac7a612138c77d1511f9cc5e763eaddbad6d9d8770705ef7b4d062b4c6dc72f30d1d272dca8700ae03a4c6d2cc6a0a03f9bfb2615b2b294515ca80827ec9cbaa7746112530f5e70f236a641c05bbc8647dd130f02db3561f9dfaa1d687235bccb0498202af478a6070dfa49df99785a61eb5fe5f18777569c18b08d2042ae8639abbc225b832a2fbcd95ff43a3fee4fb2962983af8304ef995716110a7ad35c538697c109c01c427ca6cefef3a842fcf74b1c49a3f2da88b85fdb1d05e20cd567538942fa2f0ffbb5d2ff73d60d562d9a0a6894bec3d85a709b43e42ab64e2306cb96919e078b899f3155af56390d06ddc662afe8d2c91fc091e2c5cbbfab3fdb3f49423a5a5f7741f2d70c6736adc66e7c2caa89c6bbc678bb4b445a8a63d120867f01f164dc87adc853633ca7bd4b9d585c2a637d1469da612b5210476fc8d66f90029bdbf7fa5eddc8335cd23deb4bb47e1582e64a03dd021292d34435419af80af178cdfab0fb9374fa0fade48108cd3a571b814231784ac37c9f6071fc6ac0bb018595c9d8afbfcd6f31832b2581f7f7ce7c45d22817aab8ac6df0e0995e12dbd1595c3377b707b816c96ceb1893b9e7c747a577bb7540b89eb3ff7cac878a7a121a37b38fcd3248abfd24b50e25948dcaeff8c1c7ab8b745a93adb87cd54fca223dd940ef4d7eca9dd69243c74ea128ed624e52c7a2257f3950d0c7409d665d912495f8a8a2cf2482c1d51cd7793d3d31f32ffc24374d8606daa2a423931d97019ba2fd3ba773645b7fd01cf75e8201dd29f694a72136b585d940bff8867654223c28d0603d85fe4472d93ee30e35f46e27b8f40f9a9ad03992d9ff23305fc062c7d95971baae1ab074df88d41e09ec9752efff012c482e0cf9aea2b78cc26db146a278d584575ed615f5d168e6df7a832322da093f0aea706cee594207427d3005fd910843f3dc54b14f8b187e3b495b7474792743fc2e43f62bbc7fd50a76513f1fa4073b15a42d1e78a708134238f2521c749d086deeef512823b514aa64122b365efd51e11415de40826971c234d571c3e2a0507226c6ccc540e43a9aa32244b29784ac824c20d3d1b72dc7262f61cce4eefbe9a4ea4cb1061e4a71925aa13f31d6ce80bb7c56bf47b91cf107ab17168dd4fb60614757d7c7f4ebe0320692235fb502621ed9b15b9b3fa23aa1bf266a2a2c3f2386b52625e42e0cd85c37319e3266185419bcf6dea997e52ec8fca5887a68530002fcc5b3619e88d4dc9a918cc36bac2416ffa9b9734ac4e67a93a800f36d7aba4ecfed8d65f62cf6ad13d184a8c6406e3ba17b8aee6af0721ed091e1d225d044629a4ef5153c294a3e87e243e03bdcf6eaf7ee56d9d969a1f054d5774a7e2c363b160386b909c89717aa7015385f4ab8b6c97805c12c37d981ca945134cb1306d39a4d136b42c36d8aacd2c37575a11b17fa50ede8072d667f64bb55e3b54aff2c3c61782e442e088db7c1ce62287477132bef00c17e9992dd42f35b5e098eb97724fc4e697d75812635203abe8f96000d9553012be065980fb16d6d1c0c80457585c6eb699b0e8a6e36c1cd518dd1ffc517afcb9114a4ff629d06cd2f0be1495c4ee09243e96529e6c3a228c923ca2a703930ea94f7a5803645324ba9ea1a08e6c3241fe57a80bd24f780566342561189baed15e85ba9257b701d651754ff534e51279961ff379974e34010d80773b169a140e0ee7c5e2c0312c9dee46fb7b309710d448a43805c7eab513e84e346411b7145f77ff4ced7b32eb641528f78d88af0fe88e0840e9c16f2210e18c1da605bb04a4c963441c06fa839f722b0c67345168bc0fbb1c826f20472c7551a1327eae9eddbc24e63814fb81320cbc6f03488d64587f3e5f53c03db02cb15412e622f9ec9944643d4b5530b0cd4d577489d8ee499ecf2b74fb72423412aca8530fe53c3fc584ed8e39f900843ac73e36fb113c343cc197cd689a09e12f29203c1dfe839630f6932f3a29de81ba787f6044e70dff8981b71fe82f8a4d01f45770a53b090026a003b3e639eca0e6a1e5bdd0aad456e89d83012ea1f53e1a5fe848b33528f7195a7b0c36d4315f1b96b62d5603e87a13e12a97ec335e3922d4339d9575cb26d5691da78a738aa5c84aecc22a93033a6912f84360d13e2e23b0185bdc2cd331bd26ababcc91894935db5c7e1800b8a10db884a7614ceea91f38bbf623c5e7e7238eef06cd9fc9e43507c56e8d6212b7d03ef2db0dfceb040c0b206e1b7eee6ae564b15e4c02e9c3e4179d78bc68a9fbc2166cb8458342f218dc631705602b2ef1c6716dbc08f30810c9e2ab3ac7a03e300e9c21cd2a0240025ed5eda13e6daa246241669acfae65302dbca5c579d3b5c3a4c16a976209e22845337f9ca033329f849f3ccebc69ff01b301d99dbe9e79058fade67bf881c70283f41eaca130d1423e733ccd520f26ebbe8d304cbb8fa2f4bf67e2e041e5e90e840d5510d33a9f700219fbead699901ea3b3f8aa3d5ff0c028ceee5b5e711c29e7740bc98f4b78f15f2aa1e01449f1f15e68023861f540d2ae0541273c641914ea0e6abadbb2f11618bb678c8b7abff1f6d4e9f789706cdbd8dcc1acd4bbd506e42e928d134366d3f32d8caa4b86736bb065b1a3f89354835b7ba5ae1e53cc1bd9f5dfa3e0d49c0a0a8d32670c382712e30f8f4cb8fc980785fb6012df752e02c923d3f56f5764a41629646f9fd7641c8365f0917f85a64d0ba36179e2c2b3045d7b3c6ccfdb60cd5c365c43d88e231465c6616f7d2cab0db88cd79268e5ba0cecb98875958ee3827af7842e35d9cc89c3776e5640f2433a6afccf0e6fff9321e31802746639bf2bf77f375dd6799baa184b48815f24d3fca5d534dfe61d1306d15e97d3a320457ddd2239cc52fb31dbf98709cf090ae59afabbda6da75f4e1373a28bcadc2405e0a7f6dbf9a3e26511fc600a496b4623593213283a1fd33f000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a04dd5a916917c46969db2e2093e73972daa52d5582e183eb0bd08362e7aca1dc280808080808080a03605d0d2c4765be29883abb71f1c4b162f9d6786835ccabb068a243ff819909f8080808080808080b8b2f8b030b8adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a087eef6c6fab228bc280138441d870592a3910f042806b16f257faf5f1542f9a280808080808080a00ac60a3a5bafa4560edb7bd978a6b8980fa818c5edea7c010986328de4d9b4ba8080808080808080b90190f9018d30b90189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d67440000000000000000000000000000000000000000000000c080a0d86a71e8e531bae3b2a2e70d98e516ccf31b6583d936ffa31c3772ac265db828a0420f5a8067c7eec5214117647da149eaa4e7c78a10d8ee6fa62001ee1b680f9fb9060002f905fc83aa36a7823d3f647482a9c494bac000000000000000000000000000000000000380b905930001536cb8da3dd105e94414690798c7f100000000057b78da8ccffb3bd38b03c0f12199bb964b426dd6b091efd7dc3ad1a9d321d1713b2ea1189d39280b4791c5c858729090c3b6182ac75951eef74b38191686b35c4669656ca9dc5a0ce7e9399f7efffc03afe7fd6e7485887f6264e97e9856a6978b65c5db3b4ce57cf4812abeba0de10d0d6ee5a2cbc9885a2163a58d1895524adbfd86d795eac74ec74d783b599861bf4b7b3e6daf70b3ae0e5740c88a4dc15b893f76fe074a718bcead52fb2a06d6e5f1cf3ca344ad05dcf5ca10bd9bc2809cd8ecd40a2dd0e03200dadd8f921f0e9953a7e6d8c7dc99e60cf6fe81465175e0cf99b702ac6a13706e64ac349a1119796eb0b6e7d5ae48ad74a5c997d679ef9c637c619587cb98ecf88e620dacdc57701500c74e087533f978831a78bf3857cb6044a8c66e41645cdee74ac7cdac69a8484083eb003827ccfd6b92c77b7097a15f38a419f6f0578f3568465e6fb639f1a8d6e52e9d17a0413100ca8d08b210a2e5adb2bead3dfaada14b2513113802f3996daccac89014dafd1368700300053ad7daeea2a4d4d9e8502aa44337c6ff91165a25de84fe5273b2e5b7f4dda3a0410900125e7778d5c2a59a2ca2ce36bacc9e95812ae1b69a478fc7ecf5ded14b68a80a010d6e03e07137d5de8082773f8a422390cd0a592d81e6e623a42bc69547e6b343e1d9a14e64ac3486116e29a8315486a2324d93d3e33a8344ffdbc2655b76dbf72077e43c13961a6a52f0565f2000881576c7a113e7aa6e9a6ed4679014533f8d1bf80ff44ae5599813e80d2c1f2fd0a03400864952137916724a4504bb118ccaf9236f217a1e43c97e471397a3f86672226dd0e02e00d4dcbfe4dd250a97d0c830b3d93213fd048fed38ea8378018c726be68728e22c687037000e3bb6d2858fba82db877c2e28fa1e2cca4ce57b6bdfdba7513dcd2649da93544083d06f85c8f4d21559e8e7651dcaa0c3aafc4a691fdfb27f2f39ea08ea62feff43cf0d80061500b0b00cb246f3641d83f5c934c477ca641a5c545da8aa0e4662c4c5f26ee70525a04125006cf268fbdcaddb151168bf24d3fa2e09f7445d859ff9e5ba2fe71e7ef8861ba61834a80280ebddf1bc99e8d00ae5d2a0893d64774d4cea1bad7146fc964526b6c4617cd70a68500d00f7e8131b976b9537ab4e2b9c9cf086fcfd82e235cf6c6eabbf8030cc3fd1e395071a840120bfbd7fd4a54397eca0c0f7adc1231dd539950f508f92e237e3aeb91468c38d4083ea0068a89abd38178e2e9f67559758419b6908d48d58967547c9edfe98ba016e050734a809807957936c079272b238748593ee3a73f5c7647d0ece20a5c208769c484474aa2f192b6dcc780a770c9b40b42348219a34a746cb495f3f1efb710a816ac142121461c6f7bf82fb00b0dec5bfbcaa2e32983075c84989e439154bfc7df1d0549680a6c1a4999c18aa010dee074028fcade2995b7daec4562449ccbced0caf7a660f49ac4ea07d485b22348948a0415d001ce8e16f70ca5813141f7f7544586da1364d2f77dd8fbb7cc937c6d46136f93d68f000009a72d59e5a9bdf1de5e60bbb17358bc65e8ff1566fabad6d6eb42ef2781f6d6d40837000bce21c64847942319b4ac1c92b2ee02fe2bfbf43b685908b92a0c3cd25f21641a0417d0084138599419cf73489312bda0d53e1fa748e1f7927380961470ec9fda73b36978c953661c8065aaafe09fb847fb54e35b3c68f771b6953941b2b4e619b486d81761ee187bf828700301cd34529763c60738c12e1ccce6ddff8b8338cda8fda245e5d8d5613d20734408306df96bd65c7b8d5c27299269dd9335ef7cb1f3357145983f365ec2f933686fc6d77d0a01100ca3a3773d3f0a52559ee691776b714fedc8c7b2cd672c7065c295693d0616d37408318007c18e9a9f6e4929e20d8efd4c2428065720ed1938af8e5348c14b373b0a845d1063468d2f96f000000ffff86f9aa5001c001a08f785a1c8e4c549c415dd948da80f86e3aaabc4e7a784604b6362208e0fb6b85a011d366d57b6ad95cda2eb6b618704859b4d433ad7557cad177eff6f6bae578cbc0f90200df8345de7e8203e494e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de7f8203e594e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de8082062294388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de8182062394388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de828201949425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de838201979425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de848201999425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8582019a9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8682019b9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8782019e9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de888201a29425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de898201a59425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8a8201a89425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8b8201a99425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8c8201aa9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8d8201ac9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08\" }","s":"debug_getRawBlock","u":"/public-networks/reference/api","h":"#debug_getrawblock","p":4886},{"i":4919,"t":"Returns the RLP encoding of the header of specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - RLP-encoded block header or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawHeader\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_getRawHeader\", \"params\": [\"0x32026E\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9b\" }","s":"debug_getRawHeader","u":"/public-networks/reference/api","h":"#debug_getrawheader","p":4886},{"i":4921,"t":"Returns the RLP encoding of the transaction receipts of the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - array of RLP-encoded transaction receipts curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawReceipts\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawReceipts\",\"params\":[\"0x32026E\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xf901a60182c70eb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000021849e99c31e3113a489d7eb0fd4d8c0edbe47afa00000000000000000000000000000000000000000000000000000000029b92700\", \"0xf901a70183018e1cb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000008000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000069cda9d6cc6ce05982d0b4fdf9480f2991f39b5aa00000000000000000000000000000000000000000000000000000000029b92700\" ] }","s":"debug_getRawReceipts","u":"/public-networks/reference/api","h":"#debug_getrawreceipts","p":4886},{"i":4923,"t":"Returns the RLP encoding of the specified transaction. Parameters​ transaction: string - 32-byte transaction hash Returns​ result: object - RLP-encoded transaction object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawTransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawTransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf8678084342770c182520894658bdf435d810c91414ec09147daa6db624063798203e880820a95a0af5fc351b9e457a31f37c84e5cd99dd3c5de60af3de33c6f4160177a2c786a60a0201da7a21046af55837330a2c52fc1543cd4d9ead00ddf178dd96935b607ff9b\" }","s":"debug_getRawTransaction","u":"/public-networks/reference/api","h":"#debug_getrawtransaction","p":4886},{"i":4925,"t":"Returns metrics providing information on the internal operation of Besu. The available metrics might change over time. The JVM metrics might vary based on the JVM implementation used. The metric types are: Timer Counter Gauge Parameters​ None Returns​ result: object - metrics object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_metrics\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_metrics\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"jvm\": { \"memory_bytes_init\": { \"heap\": 268435456, \"nonheap\": 2555904 }, \"threads_current\": 41, \"memory_bytes_used\": { \"heap\": 696923976, \"nonheap\": 63633456 }, \"memory_pool_bytes_used\": { \"PS Eden Space\": 669119360, \"Code Cache\": 19689024, \"Compressed Class Space\": 4871144, \"PS Survivor Space\": 2716320, \"PS Old Gen\": 25088296, \"Metaspace\": 39073288 }, ... }, \"process\": { \"open_fds\": 546, \"cpu_seconds_total\": 67.148992, \"start_time_seconds\": 1543897699.589, \"max_fds\": 10240 }, \"rpc\": { \"request_time\": { \"debug_metrics\": { \"bucket\": { \"+Inf\": 2, \"0.01\": 1, \"0.075\": 2, \"0.75\": 2, \"0.005\": 1, \"0.025\": 2, \"0.1\": 2, \"1.0\": 2, \"0.05\": 2, \"10.0\": 2, \"0.25\": 2, \"0.5\": 2, \"5.0\": 2, \"2.5\": 2, \"7.5\": 2 }, \"count\": 2, \"sum\": 0.015925392 } } }, \"blockchain\": { \"difficulty_total\": 3533501, \"announcedBlock_ingest\": { \"bucket\": { \"+Inf\": 0, \"0.01\": 0, \"0.075\": 0, \"0.75\": 0, \"0.005\": 0, \"0.025\": 0, \"0.1\": 0, \"1.0\": 0, \"0.05\": 0, \"10.0\": 0, \"0.25\": 0, \"0.5\": 0, \"5.0\": 0, \"2.5\": 0, \"7.5\": 0 }, \"count\": 0, \"sum\": 0 }, \"height\": 1908793 }, \"peers\": { \"disconnected_total\": { \"remote\": { \"SUBPROTOCOL_TRIGGERED\": 5 }, \"local\": { \"TCP_SUBSYSTEM_ERROR\": 1, \"SUBPROTOCOL_TRIGGERED\": 2, \"USELESS_PEER\": 3 } }, \"peer_count_current\": 2, \"connected_total\": 10 } } }","s":"debug_metrics","u":"/public-networks/reference/api","h":"#debug_metrics","p":4886},{"i":4927,"t":"Re-imports the block matching the specified block number, by rolling the head of the local chain back to the block right before the specified block, then importing the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_replayBlock\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_replayBlock\", \"params\": [\"0x1\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_replayBlock","u":"/public-networks/reference/api","h":"#debug_replayblock","p":4886},{"i":4929,"t":"Triggers a re-synchronization of the world state while retaining imported blocks. This is useful if there are world state database inconsistencies (for example, Bonsai database issues). Parameters​ None Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_resyncWorldState\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_resyncWorldState\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_resyncWorldState","u":"/public-networks/reference/api","h":"#debug_resyncworldstate","p":4886},{"i":4931,"t":"Sets the current head of the local chain to the block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_setHead\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_setHead\", \"params\": [\"0x1\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_setHead","u":"/public-networks/reference/api","h":"#debug_sethead","p":4886},{"i":4933,"t":"Generates files containing the block trace. A separate file is generated for each transaction in the block. You can also specify a trace file for a specific transaction in a block. Use debug_standardTraceBadBlockToFile to view the trace for an invalid block. Parameters​ blockHash: string - block hash txHash: string - (optional) transaction hash; if omitted, a trace file is generated for each transaction in the block. disableMemory: boolean - (optional) specifies whether to capture EVM memory during the trace; defaults to true Returns​ result: string - location of the generated trace files curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_standardTraceBlockToFile\",\"params\":[\"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc\", { \"txHash\": \"0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6\", \"disableMemory\": false}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_standardTraceBlockToFile\", \"params\": [ \"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc\", { \"txHash\": \"0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6\", \"disableMemory\": false } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"/Users/me/mynode/holesky/data/traces/block_0x2dc0b6c4-4-0x4ff04c4a-1612820117332\" ] }","s":"debug_standardTraceBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtraceblocktofile","p":4886},{"i":4935,"t":"Generates files containing the block trace of invalid blocks. A separate file is generated for each transaction in the block. Use debug_standardTraceBlockToFile to view the trace for a valid block. Parameters​ blockHash: string - block hash Returns​ result: string - location of the generated trace files curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_standardTraceBadBlockToFile\",\"params\":[\"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_standardTraceBadBlockToFile\", \"params\": [ \"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"/Users/me/mynode/holesky/data/traces/block_0x53741e9e-0-0x407ec43d-1600951088172\" ] }","s":"debug_standardTraceBadBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtracebadblocktofile","p":4886},{"i":4937,"t":"Remix uses debug_storageRangeAt to implement debugging. Use the Debugger tab in Remix instead of calling debug_storageRangeAt directly. Returns the contract storage for the specified range. Parameters​ blockHash: string - block hash txIndex: number - transaction index from which to start address: string - contract address startKey: string - start key limit: number - number of storage entries to return Returns​ result: object - range object. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_storageRangeAt\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\",0,\"0x0e0d2c8f7794e82164f11798276a188147fbd415\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",1], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_storageRangeAt\", \"params\": [ \"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\", \"0x0000000000000000000000000000000000000000000000000000000000000000\", 1 ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"storage\": { \"0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563\": { \"key\": null, \"value\": \"0x0000000000000000000000000000000000000000000000000000000000000001\" } }, \"nextKey\": \"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6\" } }","s":"debug_storageRangeAt","u":"/public-networks/reference/api","h":"#debug_storagerangeat","p":4886},{"i":4939,"t":"Remix uses debug_traceTransaction to implement debugging. Use the Debugger tab in Remix instead of calling debug_traceTransaction directly. Reruns the transaction with the same state as when the transaction executed. Parameters​ transactionHash: string - transaction hash options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: object - trace object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceTransaction\",\"params\":[\"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\",{\"disableStorage\":true}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceTransaction\", \"params\": [ \"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\", { \"disableStorage\": true } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null } ] } }","s":"debug_traceTransaction","u":"/public-networks/reference/api","h":"#debug_tracetransaction","p":4886},{"i":4941,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ block: string - RLP of the block options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: object - trace object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlock\",\"params\":[\"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlock\", \"params\": [ \"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null } ] } }","s":"debug_traceBlock","u":"/public-networks/reference/api","h":"#debug_traceblock","p":4886},{"i":4943,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ blockHash: string - block hash options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlockByHash\",\"params\":[\"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlockByHash\", \"params\": [ \"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": {}, \"reason\": null } ] } ] }","s":"debug_traceBlockByHash","u":"/public-networks/reference/api","h":"#debug_traceblockbyhash","p":4886},{"i":4945,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlockByNumber\",\"params\":[\"0x7224\",{\"disableStorage\":true}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlockByNumber\", \"params\": [\"0x7224\", { \"disableStorage\": true }], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null, \"reason\": null } ] } ] }","s":"debug_traceBlockByNumber","u":"/public-networks/reference/api","h":"#debug_traceblockbynumber","p":4886},{"i":4947,"t":"Performs an eth_call within the execution environment of a given block, using the final state of its parent block as the base, and provides a detailed trace of the executed opcodes. Parameters​ call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceCall\",\"params\":[{\"from\":\"\",\"to\":\"\",\"gas\":\"0xfffff2\",\"gasPrice\":\"0xef\",\"value\":\"0x0\",\"data\":\"\"},\"latest\",{\"disableMemory\":true,\"disableStack\":true,\"disableStorage\":true}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceCall\", \"params\": [{\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"0x0050000000000000000000000000000000000000\", \"0xfffff2\",\"0xef\",\"0x0\",\"0x0000000000000000000000000030000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001\"},\"latest\",{\"disableMemory\":true,\"disableStack\":true,\"disableStorage\":true}], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null, \"reason\": null } ] } ] }","s":"debug_traceCall","u":"/public-networks/reference/api","h":"#debug_tracecall","p":4886},{"i":4949,"t":"The ETH API methods allow you to interact with the blockchain. note Methods with an equivalent GraphQL query include a GraphQL request and result in the method example. The parameter and result descriptions apply to the JSON-RPC requests. The GraphQL specification is defined in the schema.","s":"ETH methods","u":"/public-networks/reference/api","h":"#eth-methods","p":4886},{"i":4951,"t":"Returns a list of account addresses a client owns. note This method returns an empty object because Besu doesn't support key management inside the client. To provide access to your key store and and then sign transactions, use Web3Signer with Besu. Parameters​ None Returns​ result: array of strings - list of 20-byte account addresses owned by the client curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_accounts\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": [] }","s":"eth_accounts","u":"/public-networks/reference/api","h":"#eth_accounts","p":4886},{"i":4953,"t":"Returns the base fee per blob gas in wei. info Shard blob transactions enable scaling Ethereum by allowing blobs of data to be stored temporarily by consensus clients. Parameters​ None Returns​ result: string - hexadecimal integer representing the base fee per blob gas. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blobBaseFee\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eth_blobBaseFee\",\"params\":[],\"id\":51} { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x3f5694c1f\" }","s":"eth_blobBaseFee","u":"/public-networks/reference/api","h":"#eth_blobbasefee","p":4886},{"i":4955,"t":"Returns the index corresponding to the block number of the current chain head. Parameters​ None Returns​ result: string - hexadecimal integer representing the index corresponding to the block number of the current chain head curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_blockNumber\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x2377\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{number}}\"}' http://localhost:8547/graphql { block { number } } { \"data\": { \"block\": { \"number\": 16221 } } }","s":"eth_blockNumber","u":"/public-networks/reference/api","h":"#eth_blocknumber","p":4886},{"i":4957,"t":"Invokes a contract function locally and does not change the state of the blockchain. You can interact with contracts using eth_sendRawTransaction or eth_call. By default, the eth_call error response includes the revert reason. Parameters​ call: object - transaction call object note The strict parameter determines if the sender account balance is checked: If strict:true, the balance is checked and eth_call fails if the sender account has an insufficient balance to send the transaction with the specified gas parameters. If strict:false, the balance is not checked and eth_call can succeed even if the sender account has an insufficient balance. If strict is not specified, the balance is checked against the gas parameters if supplied. If you do not want the sender account balance checked, send zero gas or specify strict:false. blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - return value of the executed contract curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"value\":\"0x1\"}, \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_call\", \"params\": [ { \"to\": \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", \"value\": \"0x1\" }, \"latest\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block {number call (data : {from : \\\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\\", to: \\\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\\", data :\\\"0x12a7b914\\\"}){data status}}}\"}' http://localhost:8547/graphql { block { number call(data: {from: \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data: \"0x12a7b914\"}) { data status } } } { \"data\": { \"block\": { \"number\": 17449, \"call\": { \"data\": \"0x\", \"status\": 1 } } } } Example of a simulated contract creation The following example creates a simulated contract by not including the to parameter from the transaction call object in the call parameter. Besu simulates the data to create the contract. curl HTTP JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"data\":\"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b5061021e806100606000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032\",\"gas\":\"0x439cf\",\"gasPrice\":\"0x0\"},\"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032\" }","s":"eth_call","u":"/public-networks/reference/api","h":"#eth_call","p":4886},{"i":4959,"t":"Returns the chain ID. Parameters​ None Returns​ result: string - chain ID in hexadecimal curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_chainId\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x7e2\" }","s":"eth_chainId","u":"/public-networks/reference/api","h":"#eth_chainid","p":4886},{"i":4961,"t":"Returns the client coinbase address. The coinbase address is the account to pay mining rewards to. To set a coinbase address, start Besu with the --miner-coinbase option set to a valid Ethereum account address. You can get the Ethereum account address from a client such as MetaMask or Etherscan. For example: Example besu --miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" --rpc-http-enabled Parameters​ None Returns​ result: string - coinbase address curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_coinbase\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_coinbase\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }","s":"eth_coinbase","u":"/public-networks/reference/api","h":"#eth_coinbase","p":4886},{"i":4963,"t":"Creates an EIP-2930 access list that you can include in a transaction. Parameters​ transaction: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - access list object with the following fields: accessList: array of objects - list of objects with the following fields: address: string - addresses to be accessed by the transaction storageKeys: array - storage keys to be accessed by the transaction gasUsed: string - approximate gas cost for the transaction if the access list is included curl HTTP wscat WS JSON result curl -X POST --data '{\"method\":\"eth_createAccessList\",\"params\":[{\"from\": \"0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63\", \"data\": \"0x608060806080608155\"}, \"pending\"],\"id\":1,\"jsonrpc\":\"2.0\"}' http://127.0.0.1:8545 { \"method\": \"eth_createAccessList\", \"params\": [ { \"from\": \"0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63\", \"data\": \"0x608060806080608155\" }, \"pending\" ], \"id\": 1, \"jsonrpc\": \"2.0\" } { \"accessList\": [ { \"address\": \"0xa02457e5dfd32bda5fc7e1f1b008aa5979568150\", \"storageKeys\": [ \"0x0000000000000000000000000000000000000000000000000000000000000081\", ] } ] \"gasUsed\": \"0x125f8\" }","s":"eth_createAccessList","u":"/public-networks/reference/api","h":"#eth_createaccesslist","p":4886},{"i":4965,"t":"Returns an estimate of the gas required for a transaction to complete. The estimation process does not use gas and the transaction is not added to the blockchain. The resulting estimate can be greater than the amount of gas the transaction ends up using, for reasons including EVM mechanics and node performance. The eth_estimateGas call does not send a transaction. You must call eth_sendRawTransaction to execute the transaction. By default, the eth_estimateGas error response includes the revert reason. Parameters​ For eth_estimateGas, all fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply). call: object - transaction call object Returns​ result: string - amount of gas used The following example returns an estimate of 21000 wei (0x5208) for the transaction. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_estimateGas\",\"params\":[{\"from\":\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\",\"to\":\"0x44Aa93095D6749A706051658B970b941c72c1D53\",\"value\":\"0x1\"}],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_estimateGas\", \"params\": [ { \"from\": \"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", \"to\": \"0x44Aa93095D6749A706051658B970b941c72c1D53\", \"value\": \"0x1\" } ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5208\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{estimateGas (data: {from :\\\"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\\\", to :\\\"0x8888f1f195afa192cfee860698584c030f4c9db1\\\"})}}\"}' http://localhost:8547/graphql { block { estimateGas(data: {from: \"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\", to: \"0x8888f1f195afa192cfee860698584c030f4c9db1\"}) } } { \"data\": { \"block\": { \"estimateGas\": 21000 } } } The following example request estimates the cost of deploying a simple storage smart contract to the network. The data field contains the hash of the compiled contract you want to deploy. (You can get the compiled contract hash from your IDE, for example, Remix > Compile tab > details > WEB3DEPLOY.) The result is 113355 wei. curl HTTP request JSON result curl -X POST \\ http://127.0.0.1:8545 \\ -H 'Content-Type: application/json' \\ -d '{ \"jsonrpc\": \"2.0\", \"method\": \"eth_estimateGas\", \"params\": [{ \"from\": \"0x8bad598904ec5d93d07e204a366d084a80c7694e\", \"data\": \"0x608060405234801561001057600080fd5b5060e38061001f6000396000f3fe6080604052600436106043576000357c0100000000000000000000000000000000000000000000000000000000900480633fa4f24514604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b806000819055505056fea165627a7a7230582020d7ad478b98b85ca751c924ef66bcebbbd8072b93031073ef35270a4c42f0080029\" }], \"id\": 1 }' { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1bacb\" }","s":"eth_estimateGas","u":"/public-networks/reference/api","h":"#eth_estimategas","p":4886},{"i":4967,"t":"Returns base fee per gas and transaction effective priority fee per gas history for the requested block range, allowing you to track trends over time. As of EIP-4844, this method tracks transaction blob gas fees as well. Parameters​ blockCount: integer or string - Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. Accepts hexadecimal or integer values. newestBlock: string - hexadecimal or decimal integer representing the highest number block of the requested range, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. array of integers - (optional) A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used. Returns​ result: object - Fee history results object. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_feeHistory\",\"params\": [\"0x5\", \"latest\", [20,30]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_feeHistory\", \"params\": [\"0x5\", \"latest\", [20, 30]], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"oldestBlock\": \"0x10b52f\", \"baseFeePerGas\": [ \"0x3fa63a3f\", \"0x37f999ee\", \"0x3e36f20a\", \"0x4099f79a\", \"0x430d532d\", \"0x46fcd4a4\" ], \"baseFeePerBlobGas\": [ \"0x7b7609c19\", \"0x6dbe41789\", \"0x7223341d4\", \"0x6574a002c\", \"0x7223341d4\", \"0x6574a002c\" ], \"gasUsedRatio\": [ 0.017712333333333333, 0.9458865666666667, 0.6534561, 0.6517375666666667, 0.7347769666666667 ], \"blobGasUsedRatio\": [ 0.0, 0.6666666666666666, 0.0, 1.0, 0.0 ], \"reward\": [ [ \"0x3b9aca00\", \"0x59682f00\" ], [ \"0x3a13012\", \"0x3a13012\" ], [ \"0xf4240\", \"0xf4240\" ], [ \"0xf4240\", \"0xf4240\" ], [ \"0xf4240\", \"0xf4240\" ] ] } }","s":"eth_feeHistory","u":"/public-networks/reference/api","h":"#eth_feehistory","p":4886},{"i":4969,"t":"Returns a percentile gas unit price for the most recent blocks, in wei. By default, the last 100 blocks are examined and the 50th percentile gas unit price (that is, the median value) is returned. If there are no blocks, the value for --min-gas-price is returned. The value returned is restricted to values between --min-gas-price and --api-gas-price-max. By default, 1000 wei and 500 gwei. Use the --api-gas-price-blocks, --api-gas-price-percentile , and --api-gas-price-max command line options to configure the eth_gasPrice default values. Parameters​ None Returns​ result: string - percentile gas unit price for the most recent blocks, in wei, as a hexadecimal value curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_gasPrice\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_gasPrice\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x3e8\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{gasPrice}\"}' http://localhost:8547/graphql { gasPrice } { \"data\": { \"gasPrice\": \"0x3e8\" } }","s":"eth_gasPrice","u":"/public-networks/reference/api","h":"#eth_gasprice","p":4886},{"i":4971,"t":"Returns the account balance of the specified address. Parameters​ address: string - 20-byte account address from which to retrieve the balance blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - current balance, in wei, as a hexadecimal value curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBalance\", \"params\": [\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x1cfe56f3795885980000\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{ account ( address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\") { balance } }\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { balance } } { \"data\": { \"account\": { \"balance\": \"0x1ce96a1ffe7620d00000\" } } }","s":"eth_getBalance","u":"/public-networks/reference/api","h":"#eth_getbalance","p":4886},{"i":4973,"t":"Returns information about the block matching the specified block hash. Parameters​ hash: string - 32-byte hash of a block verbose: boolean - if true, returns the full transaction objects; if false, returns the transaction hashes Returns​ result: object - block object, or null when there is no block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockByHash\",\"params\":[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", false],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockByHash\", \"params\": [ \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", false ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": { \"number\": \"0x68b3\", \"hash\": \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"mixHash\": \"0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d\", \"parentHash\": \"0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d\", \"nonce\": \"0x378da40ff335b070\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000\", \"transactionsRoot\": \"0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126\", \"stateRoot\": \"0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233\", \"receiptsRoot\": \"0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a\", \"miner\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"difficulty\": \"0x66e619a\", \"totalDifficulty\": \"0x1e875d746ae\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"size\": \"0x334\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x37993\", \"timestamp\": \"0x5835c54d\", \"uncles\": [], \"transactions\": [ \"0xa0807e117a8dd124ab949f460f08c36c72b710188f01609595223b325e58e0fc\", \"0xeae6d797af50cb62a596ec3939114d63967c374fa57de9bc0f4e2b576ed6639d\" ], \"baseFeePerGas\": \"0x7\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (hash : \\\"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\\\") {number transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot}}\"}' http://localhost:8547/graphql { block(hash: \"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\") { number transactions { hash } timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot } } { \"data\": { \"block\": { \"number\": 17607, \"transactions\": [], \"timestamp\": \"0x5cdbdfb5\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x44c8\", \"gasUsed\": 0, \"gasLimit\": 4700000, \"hash\": \"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\", \"nonce\": \"0x0000000000000000\", \"ommerCount\": 0, \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"ommerHash\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b841fae6d25da0b91e3e88669d0a765c98479d86d53e9ea1f3fb6b36d7ff22fa622a3da0c49c20e5562c774e90acae8ad487936f6b6019cd8a782db684693cba1e9800\", \"stateRoot\": \"0xa7086c266aed46cd3bc45579178f8acb36d9d147de575a3ecbf8c7e6f1c737fc\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"transactionCount\": 0, \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"baseFeePerGas\": \"0x7\" } } }","s":"eth_getBlockByHash","u":"/public-networks/reference/api","h":"#eth_getblockbyhash","p":4886},{"i":4975,"t":"Returns information about the block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. verbose: boolean - if true, returns the full transaction objects; if false, returns only the hashes of the transactions. Returns​ result: object - block object, or null when there is no block. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockByNumber\",\"params\":[\"0x68B3\", true],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockByNumber\", \"params\": [\"0x68B3\", true], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"number\": \"0x68b3\", \"hash\": \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"mixHash\": \"0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d\", \"parentHash\": \"0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d\", \"nonce\": \"0x378da40ff335b070\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000\", \"transactionsRoot\": \"0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126\", \"stateRoot\": \"0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233\", \"receiptsRoot\": \"0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a\", \"miner\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"difficulty\": \"0x66e619a\", \"totalDifficulty\": \"0x1e875d746ae\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"size\": \"0x334\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x37993\", \"timestamp\": \"0x5835c54d\", \"uncles\": [], \"transactions\": [], \"baseFeePerGas\": \"0x7\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (number : 100) {transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot ommers{hash} ommerAt(index : 1){hash} miner{address} account(address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\"){balance} parent{hash} }}\"}' http://localhost:8547/graphql { block(number: 100) { transactions { hash } timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot ommers { hash } ommerAt(index: 1) { hash } miner { address } account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { balance } parent { hash } } } { \"data\": { \"block\": { \"transactions\": [], \"timestamp\": \"0x5cd10933\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x65\", \"gasUsed\": 0, \"gasLimit\": 4700000, \"hash\": \"0x63b3ea2bc37fec8f82680eb823652da6af8acebb4f6c4d0ff659c55be473c8b0\", \"nonce\": \"0x0000000000000000\", \"ommerCount\": 0, \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"ommerHash\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8414d877d8d0ced37ea138fab55a978f3740367a24a31731322ecdc3368f11e0d4966c9ce17ae59a76fb94eb436e8a386868f6bd6b0a5678e58daf49f5dd940558b00\", \"stateRoot\": \"0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"transactionCount\": 0, \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"ommers\": [], \"ommerAt\": null, \"miner\": { \"address\": \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" }, \"account\": { \"balance\": \"0xad0f47f269cbf31ac\" }, \"parent\": { \"hash\": \"0x7bca25e1fa5e395fd6029eb496a70b6b5495843976bf9e49b993c723ded29d9e\" }, \"baseFeePerGas\": \"0x7\" } } }","s":"eth_getBlockByNumber","u":"/public-networks/reference/api","h":"#eth_getblockbynumber","p":4886},{"i":4977,"t":"Returns all transaction receipts for a given block. Transaction receipts provide a way to track the success or failure of a transaction (1 if successful and 0 if failed), as well as the amount of gas used and any event logs that might have been produced by a smart contract during the transaction. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - block object, or null when there is no block. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockReceipts\",\"params\":[\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockReceipts\", \"params\": [\"0x6f55\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"blockNumber\": \"0x6f55\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x18c36\", \"from\": \"0x22896bfc68814bfd855b1a167255ee497006e730\", \"gasUsed\": \"0x18c36\", \"effectiveGasPrice\": \"0x9502f907\", \"logs\": [ { \"address\": \"0xfd584430cafa2f451b4e2ebcf3986a21fff04350\", \"topics\": [ \"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d\", \"0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8\", \"0x000000000000000000000000835281a2563db4ebf1b626172e085dc406bfc7d2\", \"0x00000000000000000000000022896bfc68814bfd855b1a167255ee497006e730\" ], \"data\": \"0x\", \"blockNumber\": \"0x6f55\", \"transactionHash\": \"0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975\", \"transactionIndex\": \"0x0\", \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"logIndex\": \"0x0\", \"removed\": false } ], \"logsBloom\": \"0x00000004000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000080020000000000000200010000000000000000000001000000800000000000000000000000000000000000000000000000000000100100000000000000000000008000000000000000000000000000000002000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xfd584430cafa2f451b4e2ebcf3986a21fff04350\", \"transactionHash\": \"0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975\", \"transactionIndex\": \"0x0\", \"type\": \"0x0\" }, { \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"blockNumber\": \"0x6f55\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x1de3e\", \"from\": \"0x712e3a792c974b3e3dbe41229ad4290791c75a82\", \"gasUsed\": \"0x5208\", \"effectiveGasPrice\": \"0x9502f907\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xd42e2b1c14d02f1df5369a9827cb8e6f3f75f338\", \"transactionHash\": \"0xefb83b4e3f1c317e8da0f8e2fbb2fe964f34ee184466032aeecac79f20eacaf6\", \"transactionIndex\": \"0x1\", \"type\": \"0x2\" } ] } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (hash: \\\"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\\\") {transactions{block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}}\"}' http://localhost:8547/graphql { block (hash: \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\") { transactions { block { hash logsBloom } hash createdContract { address } cumulativeGasUsed gas gasUsed logs{ topics } from{ address } to { address } index } } } { \"data\" : { \"block\" : { \"transactions\" : [ { \"block\" : { \"hash\" : \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\", \"logsBloom\" : \"0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000\" }, \"hash\" : \"0x7afe779fd0c6d4a1b6f330e679a5cf94095eaa57d2ce0c0ef991dfb2b405374f\", \"createdContract\" : null, \"cumulativeGasUsed\" : \"0x5208\", \"gas\" : \"0x61a8\", \"gasUsed\" : \"0x5208\", \"logs\" : [ ], \"from\" : { \"address\" : \"0x66f962241b8ff853849c85a63a0ce20bae4f68d5\" }, \"to\" : { \"address\" : \"0x6be8356826a9fc7b2d911fcc1de6342ae5f5b9a3\" }, \"index\" : \"0x0\" }, { \"block\" : { \"hash\" : \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\", \"logsBloom\" : \"0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000\" }, \"hash\" : \"0x412f04ba27c1c096dadb2d8af54ee61034c3d4679fdd025a634e95fa2238713c\", \"createdContract\" : null, \"cumulativeGasUsed\" : \"0xbcdb2\", \"gas\" : \"0xbdfe0\", \"gasUsed\" : \"0xb7baa\", \"logs\" : [ { \"topics\" : [ \"0xd93fde3ea1bb11dcd7a4e66320a05fc5aa63983b6447eff660084c4b1b1b499b\", \"0x00000000000000000000000000000000000000000000000000000000000e4d3a\" ] } ], \"from\" : { \"address\" : \"0xe253f7a6533c62755f470b33fa5bcd659a5db3cd\" }, \"to\" : { \"address\" : \"0x95ff8d3ce9dcb7455beb7845143bea84fe5c4f6f\" }, \"index\" : \"0x1\" } ] } } }","s":"eth_getBlockReceipts","u":"/public-networks/reference/api","h":"#eth_getblockreceipts","p":4886},{"i":4979,"t":"Returns the number of transactions in the block matching the specified block hash. Parameters​ hash: string - 32-byte block hash Returns​ result: number - integer representing the number of transactions in the specified block, or null if no matching block hash is found curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockTransactionCountByHash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockTransactionCountByHash\", \"params\": [ \"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": null } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097\\\"){transactionCount}}\"}' http://localhost:8547/graphql { block(hash: \"0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097\") { transactionCount } } { \"data\": { \"block\": { \"transactionCount\": 1 } } }","s":"eth_getBlockTransactionCountByHash","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbyhash","p":4886},{"i":4981,"t":"Returns the number of transactions in a block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: string - integer representing the number of transactions in the specified block, or null if no matching block number is found curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockTransactionCountByNumber\",\"params\":[\"0xe8\"],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockTransactionCountByNumber\", \"params\": [\"0xe8\"], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x8\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:232){transactionCount}}\"}' http://localhost:8547/graphql { block(number: 232) { transactionCount } } { \"data\": { \"block\": { \"transactionCount\": 1 } } }","s":"eth_getBlockTransactionCountByNumber","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbynumber","p":4886},{"i":4983,"t":"Returns the code of the smart contract at the specified address. Besu stores compiled smart contract code as a hexadecimal value. Parameters​ address: string - 20-byte contract address blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - code stored at the specified address curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\", \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getCode\", \"params\": [\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{account(address: \\\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\\\"){ code }}\"}' http://localhost:8547/graphql { account(address: \"0xa50a51c09a5c451c52bb714527e1974b686d8e77\") { code } } { \"data\": { \"account\": { \"code\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" } } }","s":"eth_getCode","u":"/public-networks/reference/api","h":"#eth_getcode","p":4886},{"i":4985,"t":"Polls the specified filter and returns an array of changes that have occurred since the last poll. Parameters​ filterId: string - filter ID Returns​ result: array of strings or objects - if nothing changed since the last poll, an empty list; otherwise: For filters created with eth_newBlockFilter, returns block hashes. For filters created with eth_newPendingTransactionFilter, returns transaction hashes. For filters created with eth_newFilter, returns log objects. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getFilterChanges\",\"params\":[\"0xf8bf5598d9e04fbe84523d42640b9b0e\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getFilterChanges\", \"params\": [\"0xf8bf5598d9e04fbe84523d42640b9b0e\"], \"id\": 1 } Example result from a filter created with eth_newBlockFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xda2bfe44bf85394f0d6aa702b5af89ae50ae22c0928c18b8903d9269abe17e0b\", \"0x88cd3a37306db1306f01f7a0e5b25a9df52719ad2f87b0f88ee0e6753ed4a812\", \"0x4d4c731fe129ff32b425e6060d433d3fde278b565bbd1fd624d5a804a34f8786\" ] } Example result from a filter created with eth_newPendingTransactionFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x1e977049b6db09362da09491bee3949d9362080ce3f4fc19721196d508580d46\", \"0xa3abc4b9a4e497fd58dc59cdff52e9bb5609136bcd499e760798aa92802769be\" ] } Example result from a filter created with eth_newFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x233\", \"blockHash\": \"0xfc139f5e2edee9e9c888d8df9a2d2226133a9bd87c88ccbd9c930d3d4c9f9ef5\", \"transactionHash\": \"0x66e7a140c8fa27fe98fde923defea7562c3ca2d6bb89798aabec65782c08f63d\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000004\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x238\", \"blockHash\": \"0x98b0ec0f9fea0018a644959accbe69cd046a8582e89402e1ab0ada91cad644ed\", \"transactionHash\": \"0xdb17aa1c2ce609132f599155d384c0bc5334c988a6c368056d7e167e23eee058\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000007\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] }","s":"eth_getFilterChanges","u":"/public-networks/reference/api","h":"#eth_getfilterchanges","p":4886},{"i":4987,"t":"Returns an array of logs for the specified filter. Leave the --auto-log-bloom-caching-enabled command line option at the default value of true to improve log retrieval performance. note eth_getFilterLogs is only used for filters created with eth_newFilter. To specify a filter object and get logs without creating a filter, use eth_getLogs. Parameters​ filterId: string - filter ID Returns​ result: array of objects - list of log objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getFilterLogs\",\"params\":[\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getFilterLogs\", \"params\": [\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb3\", \"blockHash\": \"0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998\", \"transactionHash\": \"0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb6\", \"blockHash\": \"0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc\", \"transactionHash\": \"0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] }","s":"eth_getFilterLogs","u":"/public-networks/reference/api","h":"#eth_getfilterlogs","p":4886},{"i":4989,"t":"Returns an array of logs matching a specified filter object. Leave the --auto-log-bloom-caching-enabled command line option at the default value of true to improve log retrieval performance. caution Using eth_getLogs to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response. We recommend setting a range limit using the --rpc-max-logs-range option (or leaving it at its default value of 1000). Parameters​ filterOptions: object - filter options object Returns​ result: array of objects - list of log objects curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"earliest\", \"toBlock\":\"latest\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"topics\":[]}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getLogs\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"topics\": [] } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb3\", \"blockHash\": \"0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998\", \"transactionHash\": \"0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb6\", \"blockHash\": \"0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc\", \"transactionHash\": \"0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{logs(filter:{fromBlock: 1486000, toBlock: 1486010, addresses: [\\\"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\\\"], topics: [[\\\"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\\\"]]}) {index topics data account{address} transaction{hash} }}\"}' http://localhost:8547/graphql { logs(filter: {fromBlock: 1486000, toBlock: 1486010, addresses: [\"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\"], topics: [[\"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\"]]}) { index topics data account { address } transaction { hash } } } { \"data\": { \"logs\": [ { \"index\": 0, \"topics\": [ \"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\", \"0x0000000000000000000000000000000000000000000000000000000000000004\", \"0x0000000000000000000000000000000000000000000000000000000000508918\" ], \"data\": \"0xa5a04999ec29a8bd19ce32b859280ef9dbb464d846be06f64a1b1012ec08ab03\", \"account\": { \"address\": \"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\" }, \"transaction\": { \"hash\": \"0x36a2186344c6a32760e7700fdf3685936220876c51ff39d071eb48c17f7e802f\" } }, { \"index\": 0, \"topics\": [ \"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\", \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"0x0000000000000000000000000000000000000000000000000000000000648c72\" ], \"data\": \"0x0ee96b660ad82c8010c90760a03edfbb40b4af5e3634a8c214e4ac7fa1f61492\", \"account\": { \"address\": \"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\" }, \"transaction\": { \"hash\": \"0x9e2cc9e84a9e78839d6f4b591dfd98cc7a454a8ee3cd6ccd0a18e662e22d3818\" } } ] } }","s":"eth_getLogs","u":"/public-networks/reference/api","h":"#eth_getlogs","p":4886},{"i":4991,"t":"Returns miner data for the specified block. Parameters​ hash: string - 32-byte block hash Returns​ result: object - miner data object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getMinerDataByBlockHash\",\"params\": [\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getMinerDataByBlockHash\", \"params\": [ \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"netBlockReward\": \"0x47c6f3739f3da800\", \"staticBlockReward\": \"0x4563918244f40000\", \"transactionFee\": \"0x38456548220800\", \"uncleInclusionReward\": \"0x22b1c8c1227a000\", \"uncleRewards\": [ { \"hash\": \"0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974\", \"coinbase\": \"0x0c062b329265c965deef1eede55183b3acb8f611\" } ], \"coinbase\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"difficulty\": \"0x7348c20\", \"totalDifficulty\": \"0xa57bcfdd96\" } }","s":"eth_getMinerDataByBlockHash","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblockhash","p":4886},{"i":4993,"t":"Returns miner data for the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - miner data object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getMinerDataByBlockNumber\",\"params\": [\"0x7689D2\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getMinerDataByBlockNumber\", \"params\": [\"0x7689D2\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"netBlockReward\": \"0x47c6f3739f3da800\", \"staticBlockReward\": \"0x4563918244f40000\", \"transactionFee\": \"0x38456548220800\", \"uncleInclusionReward\": \"0x22b1c8c1227a000\", \"uncleRewards\": [ { \"hash\": \"0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974\", \"coinbase\": \"0x0c062b329265c965deef1eede55183b3acb8f611\" } ], \"coinbase\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"difficulty\": \"0x7348c20\", \"totalDifficulty\": \"0xa57bcfdd96\" } }","s":"eth_getMinerDataByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblocknumber","p":4886},{"i":4995,"t":"Returns the account and storage values of the specified account, including the Merkle proof. The API allows IoT devices or mobile apps which are unable to run light clients to verify responses from untrusted sources, by using a trusted block hash. Parameters​ address: string - 20-byte address of the account or contract keys: array of strings - list of 32-byte storage keys to generate proofs for blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - account details object with the following fields: balance: string - account balance codeHash: string - 32-byte hash of the account code nonce: string - number of transactions sent from the account storageHash: string - 32-byte SHA3 of the storageRoot accountProof: array of strings - list of RLP-encoded Merkle tree nodes, starting with the stateRoot storageProof: array of objects - list of storage entry objects with the following fields: key: string - storage key value: string - storage value proof: array of strings - list of RLP-encoded Merkle tree nodes, starting with the storageHash curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getProof\",\"params\": [ \"0a8156e7ee392d885d10eaa86afd0e323afdcd95\", [\"0x0000000000000000000000000000000000000000000000000000000000000347\"], \"latest\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getProof\", \"params\": [ \"0a8156e7ee392d885d10eaa86afd0e323afdcd95\", [\"0x0000000000000000000000000000000000000000000000000000000000000347\"], \"latest\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"accountProof\": [ \"0xf90211a0...608d898380\", \"0xf90211a0...ec33f19580\", \"0xf901d1a0...9e55584480\", \"0xf8718080...18e5777142\" ], \"address\": \"0x0a8156e7ee392d885d10eaa86afd0e323afdcd95\", \"balance\": \"0x0\", \"codeHash\": \"0x2b6975dcaf69f9bb9a3b30bb6a37b305ce440250bf0dd2f23338cb18e5777142\", \"nonce\": \"0x5f\", \"storageHash\": \"0x917688de43091589aa58c1dfd315105bc9de4478b9ba7471616a4d8a43d46203\", \"storageProof\": [ { \"key\": \"0x0000000000000000000000000000000000000000000000000000000000000347\", \"value\": \"0x0\", \"proof\": [ \"0xf90211a0...5176779280\", \"0xf901f1a0...c208d86580\", \"0xf8d180a0...1ce6808080\" ] } ] } }","s":"eth_getProof","u":"/public-networks/reference/api","h":"#eth_getproof","p":4886},{"i":4997,"t":"Returns the value of a storage position at a specified address. Parameters​ address: string - 20-byte storage address index: string - integer index of the storage position blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result : string - value at the specified storage position Calculating the correct position depends on the storage you want to retrieve. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getStorageAt\",\"params\": [\"0x‭3B3F3E‬\",\"0x0\",\"latest\"],\"id\": 53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getStorageAt\", \"params\": [\"0x‭3B3F3E‬\", \"0x0\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{account(address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\") {storage(slot: \\\"0x04\\\")}}\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { storage(slot: \"0x04\") } } { \"data\": { \"account\": { \"storage\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } } }","s":"eth_getStorageAt","u":"/public-networks/reference/api","h":"#eth_getstorageat","p":4886},{"i":4999,"t":"Returns transaction information for the specified block hash and transaction index position. Parameters​ block: string - 32-byte hash of a block index: string - integer representing the transaction index position Returns​ result: object - transaction object, or null when there is no transaction curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByBlockHashAndIndex\",\"params\":[\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"0x2\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByBlockHashAndIndex\", \"params\": [ \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"0x2\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"blockNumber\": \"0x1442e\", \"chainId\": 2018, \"from\": \"0x70c9217d814985faef62b124420f8dfbddd96433\", \"gas\": \"0x3d090\", \"gasPrice\": \"0x57148a6be\", \"hash\": \"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6\", \"input\": \"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000\", \"nonce\": \"0x2cb2\", \"to\": \"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953\", \"transactionIndex\": \"0x2\", \"value\": \"0x0\", \"v\": \"0x2a\", \"r\": \"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a\", \"s\": \"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{ block(hash: \\\"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\\\") { transactionAt(index: 0) {block{hash} hash } } }\"}' http://localhost:8547/graphql { block(hash: \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\") { transactionAt(index: 0) { block { hash } hash } } } { \"data\": { \"block\": { \"transactionAt\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\" } } } }","s":"eth_getTransactionByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblockhashandindex","p":4886},{"i":5001,"t":"Returns transaction information for the specified block number and transaction index position. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. index: string - transaction index position Returns​ result: object - transaction object, or null when there is no transaction This request returns the third transaction in the 82990 block on the Ropsten testnet. You can also view this block and transaction on Etherscan. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByBlockNumberAndIndex\",\"params\":[\"82990\", \"0x2\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByBlockNumberAndIndex\", \"params\": [\"82990\", \"0x2\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"blockNumber\": \"0x1442e\", \"chainId\": 2018, \"from\": \"0x70c9217d814985faef62b124420f8dfbddd96433\", \"gas\": \"0x3d090\", \"gasPrice\": \"0x57148a6be\", \"hash\": \"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6\", \"input\": \"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000\", \"nonce\": \"0x2cb2\", \"to\": \"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953\", \"transactionIndex\": \"0x2\", \"value\": \"0x0\", \"v\": \"0x2a\", \"r\": \"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a\", \"s\": \"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{block(number:20303) {transactionAt(index: 0) {block{hash} hash}}}\"}' http://localhost:8547/graphql { block(number: 20303) { transactionAt(index: 0) { block { hash } hash } } } { \"data\": { \"block\": { \"transactionAt\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\" } } } }","s":"eth_getTransactionByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblocknumberandindex","p":4886},{"i":5003,"t":"Returns transaction information for the specified transaction hash. Parameters​ transaction: string - 32-byte transaction hash Returns​ result: object - transaction object, or null when there is no transaction curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByHash\",\"params\":[\"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByHash\", \"params\": [ \"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": { \"blockHash\": \"0x510efccf44a192e6e34bcb439a1947e24b86244280762cbb006858c237093fda\", \"blockNumber\": \"0x422\", \"chainId\": 2018, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0x3b9aca00\", \"hash\": \"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\", \"input\": \"0x\", \"nonce\": \"0x1\", \"to\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"transactionIndex\": \"0x0\", \"value\": \"0x4e1003b28d9280000\", \"v\": \"0xfe7\", \"r\": \"0x84caf09aefbd5e539295acc67217563438a4efb224879b6855f56857fa2037d3\", \"s\": \"0x5e863be3829812c81439f0ae9d8ecb832b531d651fb234c848d1bf45e62be8b9\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{transaction(hash : \\\"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\\\") { block{hash} gas gasPrice hash nonce value from {address} to {address} status}}\"}' http://localhost:8547/graphql { transaction(hash: \"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\") { block { hash } gas gasPrice hash nonce value from { address } to { address } status } } { \"data\": { \"transaction\": { \"block\": { \"hash\": \"0xb1ef35744bade6980c3a933024b2557a8c724a19e5fdd2116bac712aa5e57198\" }, \"gas\": 21000, \"gasPrice\": \"0x2540be400\", \"hash\": \"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\", \"nonce\": 6, \"value\": \"0x8ac7230489e80000\", \"from\": { \"address\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"to\": { \"address\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\" }, \"status\": 1 } } }","s":"eth_getTransactionByHash","u":"/public-networks/reference/api","h":"#eth_gettransactionbyhash","p":4886},{"i":5005,"t":"Returns the number of transactions sent from a specified address. Use the pending tag to get the next account nonce not used by any pending transactions. Parameters​ address: string - 20-byte account address blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter Returns​ result: string - integer representing the number of transactions sent from the specified address curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0xc94770007dda54cF92009BFF0dE90c06F603a09f\",\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionCount\", \"params\": [\"0xc94770007dda54cF92009BFF0dE90c06F603a09f\", \"latest\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{ account (address:\\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\"){transactionCount}}\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { transactionCount } } { \"data\": { \"account\": { \"transactionCount\": 5 } } }","s":"eth_getTransactionCount","u":"/public-networks/reference/api","h":"#eth_gettransactioncount","p":4886},{"i":5007,"t":"Returns the receipt of a transaction by transaction hash. Receipts for pending transactions are not available. If you enabled revert reason, the receipt includes available revert reasons in the response. Parameters​ transaction: string - 32-byte hash of a transaction Returns​ result: object - transaction receipt object, or null when there is no receipt curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionReceipt\",\"params\":[\"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionReceipt\", \"params\": [ \"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x5208\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gasUsed\": \"0x5208\", \"effectiveGasPrice\": \"0x1\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3\", \"transactionIndex\": \"0x0\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{transaction(hash: \\\"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\\\") {block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}\"}' http://localhost:8547/graphql { transaction(hash: \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\") { block { hash logsBloom } hash createdContract { address } cumulativeGasUsed gas gasUsed logs { topics } from { address } to { address } index } } { \"data\": { \"transaction\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\", \"createdContract\": null, \"cumulativeGasUsed\": 21000, \"gas\": 21000, \"gasUsed\": 21000, \"effectiveGasPrice\": \"0x1\", \"logs\": [], \"from\": { \"address\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"to\": { \"address\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\" }, \"index\": 0 } } }","s":"eth_getTransactionReceipt","u":"/public-networks/reference/api","h":"#eth_gettransactionreceipt","p":4886},{"i":5009,"t":"Returns uncle specified by block hash and index. Parameters​ block: string - 32-byte block hash uncleIndex: string - index of the uncle Returns​ result: object - block object note Uncles don't contain individual transactions. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleByBlockHashAndIndex\",\"params\":[\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\", \"0x0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleByBlockHashAndIndex\", \"params\": [ \"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\", \"0x0\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"difficulty\": \"0x76b123df93230\", \"extraData\": \"0x50505945206e616e6f706f6f6c2e6f7267\", \"gasLimit\": \"0x7a121d\", \"gasUsed\": \"0x7a0175\", \"hash\": \"0xc20189c0b1a4a23116ab3b177e929137f6e826f17fc4c2e880e7258c620e9817\", \"logsBloom\": \"0x890086c024487ca422be846a201a10e41bc2882902312116c1119609482031e9c000e2a708004a10281024028020c505727a12570c4810121c59024490b040894406a1c23c37a0094810921da3923600c71c03044b40924280038d07ab91964a008084264a01641380798840805a284cce201a8026045451002500113a00de441001320805ca2840037000111640d090442c11116d2112948084240242340400236ce81502063401dcc214b9105194d050884721c1208800b20501a4201400276004142f118e60808284506979a86e050820101c170c185e2310005205a82a2100382422104182090184800c02489e033440218142140045801c024cc1818485\", \"miner\": \"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5\", \"mixHash\": \"0xf557cc827e058862aa3ea1bd6088fb8766f70c0eac4117c56cf85b7911f82a14\", \"nonce\": \"0xd320b48904347cdd\", \"number\": \"0x768964\", \"parentHash\": \"0x98d752708b3677df8f439c4529f999b94663d5494dbfc08909656db3c90f6255\", \"receiptsRoot\": \"0x0f838f0ceb73368e7fc8d713a7761e5be31e3b4beafe1a6875a7f275f82da45b\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"size\": \"0x21a\", \"stateRoot\": \"0xa0c7d4fca79810c89c517eff8dadb9c6d6f4bcc27c2edfb301301e1cf7dec642\", \"timestamp\": \"0x5cdcbba6\", \"totalDifficulty\": \"0x229ad33cabd4c40d23d\", \"transactionsRoot\": \"0x866e38e91d01ef0387b8e07ccf35cd910224271ccf2b7477b8c8439e8b70f365\", \"uncles\": [] } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\\\"){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}\"}' http://localhost:8547/graphql { block(hash: \"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\") { ommerAt(index: 0) { difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot } } } { \"data\": { \"block\": { \"difficulty\": \"0x1\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8418e98ef756acdae1e510b1df4b507b7af04eb3802db7fa0f3e73e7d0721b3645e76f4eb3d0dbf0de75620c4405bd5a663247cdd9616482c883053856d857f884a01\", \"gasLimit\": 4700000, \"gasUsed\": 0, \"hash\": \"0x0efe67972b982eb6be5df84e5238eb07475f86afa8a7de708f6a13ac0ff60d6c\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"nonce\": \"0x0000000000000000\", \"number\": 200, \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"stateRoot\": \"0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48\", \"timestamp\": \"0x5cd109fb\", \"totalDifficulty\": \"0xc9\", \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\" } } }","s":"eth_getUncleByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblockhashandindex","p":4886},{"i":5011,"t":"Returns uncle specified by block number and index. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. uncleIndex: string - index of the uncle Returns​ result: object - block object note Uncles do not contain individual transactions. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleByBlockNumberAndIndex\",\"params\":[\"0x7689D2\", \"0x0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleByBlockNumberAndIndex\", \"params\": [\"0x7689D2\", \"0x0\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"difficulty\": \"0x77daec467bf93\", \"extraData\": \"0x50505945206e616e6f706f6f6c2e6f7267\", \"gasLimit\": \"0x7a121d\", \"gasUsed\": \"0x7a0f7b\", \"hash\": \"0x42d83ae9c0743f4b1f9c61ff7ea8b164c1bab3627decd49233760680be006ecf\", \"logsBloom\": \"0x888200800000340120220008640200500408006100038400100581c000080240080a0014e8002010080004088040004022402a000c18010001400100002a041141a0610a0052900600041018c0002a0003090020404c00206010010513d00020005380124e08050480710000000108401012b0901c1424006000083a10a8c1040100a0440081050210124400040044304070004001100000012600806008061d0320800000b40042160600002480000000800000c0002100200940801c000820800048024904710000400640490026000a44300309000286088010c2300060003011380006400200812009144042204810209020410a84000410520c08802941\", \"miner\": \"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5\", \"mixHash\": \"0xf977fcdb52868be410b75ef2becc35cc312f13ab0a6ce400ecd9d445f66fa3f2\", \"nonce\": \"0x628b28403bf1e3d3\", \"number\": \"0x7689d0\", \"parentHash\": \"0xb32cfdfbf4adb05d30f02fcc6fe039cc6666402142954051c1a1cb9cc91aa11e\", \"receiptsRoot\": \"0x9c7c8361d1a24ea2841432234c81974a9920d3eba2b2b1c496b5f925a95cb4ac\", \"sha3Uncles\": \"0x7d972aa1b182b7e93f1db043f03fbdbfac6874fe7e67e162141bcc0aefa6336b\", \"size\": \"0x21a\", \"stateRoot\": \"0x74e97b77813146344d75acb5a52a006cc6dfaca678a10fb8a484a8443e919272\", \"timestamp\": \"0x5cdcc0a7\", \"totalDifficulty\": \"0x229b0583b4bd2698ca0\", \"transactionsRoot\": \"0x1d21626afddf05e5866de66ca3fcd98f1caf5357eba0cc6ec675606e116a891b\", \"uncles\": [] } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:2587){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}\"}' http://localhost:8547/graphql { block(number: 2587) { ommerAt(index: 0) { difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot } } } { \"data\": { \"block\": { \"ommerAt\": null } } }","s":"eth_getUncleByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblocknumberandindex","p":4886},{"i":5013,"t":"Returns the number of uncles in a block from a block matching the given block hash. Parameters​ block: string - 32-byte block hash Returns​ result: string - integer representing the number of uncles in the specified block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleCountByBlockHash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleCountByBlockHash\", \"params\": [ \"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": 0x0 } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426\\\"){ommerCount}}\"}' http://localhost:8547/graphql { block(hash: \"0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426\") { ommerCount } } { \"data\": { \"block\": { \"ommerCount\": 2 } } }","s":"eth_getUncleCountByBlockHash","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblockhash","p":4886},{"i":5015,"t":"Returns the number of uncles in a block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - integer representing the number of uncles in the specified block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleCountByBlockNumber\",\"params\":[\"0xe8\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleCountByBlockNumber\", \"params\": [\"0xe8\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:\\\"0x59fd\\\"){ommerCount}}\"}' http://localhost:8547/graphql { block(number: \"0x59fd\") { ommerCount } } { \"data\": { \"block\": { \"ommerCount\": 0 } } }","s":"eth_getUncleCountByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblocknumber","p":4886},{"i":5017,"t":"Returns the hash of the current block, the seed hash, and the required target boundary condition. Parameters​ None Returns​ result: array of strings - array with the following items: header: string - 32-byte hash of the current block header (PoW-hash) seed: string - 32-byte seed hash used for the DAG target: string - 32-byte required target boundary condition: 2^256 / difficulty blockNumber: string - hexadecimal integer representing the current block number curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getWork\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getWork\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xce5e32ca59cb86799a1879e90150b2c3b882852173e59865e9e79abb67a9d636\", \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"0x00a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3\", \"0x42\" ] }","s":"eth_getWork","u":"/public-networks/reference/api","h":"#eth_getwork","p":4886},{"i":5019,"t":"Returns the number of hashes per second with which the node is mining. When the stratum server is enabled, this method returns the cumulative hashrate of all sealers reporting their hashrate. Parameters​ None Returns​ result: string - number of hashes per second curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x12b\" }","s":"eth_hashrate","u":"/public-networks/reference/api","h":"#eth_hashrate","p":4886},{"i":5021,"t":"Returns an estimate of how much priority fee, in wei, you can pay to get a transaction included in the current block. Parameters​ None Returns​ result: hexadecimal value in wei curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_maxPriorityFeePerGas\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_maxPriorityFeePerGas\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf4240\" }","s":"eth_maxPriorityFeePerGas","u":"/public-networks/reference/api","h":"#eth_maxpriorityfeepergas","p":4886},{"i":5023,"t":"Whether the client is actively mining new blocks. Besu pauses mining while the client synchronizes with the network regardless of command settings or methods called. Parameters​ None Returns​ result: boolean - indicates if the client is actively mining new blocks curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_mining\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_mining\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": true }","s":"eth_mining","u":"/public-networks/reference/api","h":"#eth_mining","p":4886},{"i":5025,"t":"Creates a filter to retrieve new block hashes. To poll for new blocks, use eth_getFilterChanges. Parameters​ None Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newBlockFilter\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newBlockFilter\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x9d78b6780f844228b96ecc65a320a825\" }","s":"eth_newBlockFilter","u":"/public-networks/reference/api","h":"#eth_newblockfilter","p":4886},{"i":5027,"t":"Creates a log filter. To poll for logs associated with the created filter, use eth_getFilterChanges. To get all logs associated with the filter, use eth_getFilterLogs. Parameters​ filterOptions: object - filter options object note fromBlock and toBlock in the filter options object default to latest. Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newFilter\",\"params\":[{\"fromBlock\":\"earliest\", \"toBlock\":\"latest\", \"topics\":[]}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newFilter\", \"params\": [{ \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"topics\": [] }], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1ddf0c00989044e9b41cc0ae40272df3\" }","s":"eth_newFilter","u":"/public-networks/reference/api","h":"#eth_newfilter","p":4886},{"i":5029,"t":"Creates a filter to retrieve new pending transactions hashes. To poll for new pending transactions, use eth_getFilterChanges. Parameters​ None Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newPendingTransactionFilter\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newPendingTransactionFilter\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x443d6a77c4964707a8554c92f7e4debd\" }","s":"eth_newPendingTransactionFilter","u":"/public-networks/reference/api","h":"#eth_newpendingtransactionfilter","p":4886},{"i":5031,"t":"Returns current Ethereum protocol version. Parameters​ None Returns​ result: string - Ethereum protocol version curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_protocolVersion\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_protocolVersion\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3f\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{protocolVersion}\"}' http://localhost:8547/graphql { protocolVersion } { \"data\": { \"protocolVersion\": 63 } }","s":"eth_protocolVersion","u":"/public-networks/reference/api","h":"#eth_protocolversion","p":4886},{"i":5033,"t":"Sends a signed transaction. A transaction can send ether, deploy a contract, or interact with a contract. Set the maximum transaction fee for transactions using the --rpc-tx-feecap CLI option. You can interact with contracts using eth_sendRawTransaction or eth_call. To avoid exposing your private key, create signed transactions offline and send the signed transaction data using eth_sendRawTransaction. info Besu doesn't implement eth_sendTransaction. Web3Signer provides transaction signing and implements eth_sendTransaction. Parameters​ transaction: string - signed transaction serialized to hexadecimal format note Creating and sending transactions includes examples of creating signed transactions using the web3.js library. Returns​ result: string - 32-byte transaction hash curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendRawTransaction\",\"params\":[\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_sendRawTransaction\", \"params\": [ \"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\" ], \"id\": 1 } { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"mutation {sendRawTransaction(data: \\\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\\\")}\"}' http://localhost:8547/graphql mutation { sendRawTransaction(data: \"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\") } { \"data\": { \"sendRawTransaction\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" } }","s":"eth_sendRawTransaction","u":"/public-networks/reference/api","h":"#eth_sendrawtransaction","p":4886},{"i":5035,"t":"Submits the mining hashrate. This is used by mining software such as Ethminer. Parameters​ hashrate: string - 32-byte hexadecimal string representation of the hashrate id: string - 32-byte random hexadecimal ID identifying the client Returns​ result: boolean - indicates if submission is successful curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"eth_submitHashrate\", \"params\":[\"0x0000000000000000000000000000000000000000000000000000000000500000\", \"0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_submitHashrate\", \"params\": [ \"0x0000000000000000000000000000000000000000000000000000000000500000\", \"0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"eth_submitHashrate","u":"/public-networks/reference/api","h":"#eth_submithashrate","p":4886},{"i":5037,"t":"Submits a proof of work (Ethash) solution. This is used by mining software such as Ethminer. Parameters​ nonce: string - retrieved 8-byte nonce header: string - 32-byte hash of the block header (PoW-hash) digest: string - 32-bytes mix digest Returns​ result: boolean - indicates if the provided solution is valid curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"eth_submitWork\", \"params\":[\"0x0000000000000001\", \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\", \"0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\", \"method\":\"eth_submitWork\", \"params\":[\"0x0000000000000001\", \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\", \"0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000\"],\"id\":73} { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": true }","s":"eth_submitWork","u":"/public-networks/reference/api","h":"#eth_submitwork","p":4886},{"i":5039,"t":"Returns an object with data about the synchronization status, or false if not synchronizing. note Once the node reaches the head of the chain, eth_syncing returns false, indicating that there is no active syncing target. Parameters​ None Returns​ result: object or boolean - synchronization status data object with the following fields, or false if not synchronizing: startingBlock: string - index of the highest block on the blockchain when the network synchronization starts currentBlock: string - index of the latest block (also known as the best block) for the current node (this is the same index that eth_blockNumber returns.) highestBlock: string - index of the highest known block in the peer network (that is, the highest block so far discovered among peer nodes. This is the same value as currentBlock if the current node has no peers.) pulledStates: string - if fast synchronizing, the number of state entries fetched so far, or null if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.) knownStates: string - if fast synchronizing, the number of states the node knows of so far, or null if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.) curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_syncing\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x1518\", \"highestBlock\": \"0x9567a3\", \"pulledStates\": \"0x203ca\", \"knownStates\": \"0x200636\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{syncing{startingBlock currentBlock highestBlock pulledStates knownStates}}\"}' http://localhost:8547/graphql { syncing { startingBlock currentBlock highestBlock pulledStates knownStates } } { \"data\": { \"syncing\": { \"startingBlock\": 0, \"currentBlock\": 5400, \"highestBlock\": 9791395, \"pullStates\": 132042, \"knownStates\": 2098742 } } }","s":"eth_syncing","u":"/public-networks/reference/api","h":"#eth_syncing","p":4886},{"i":5041,"t":"Uninstalls a filter with the specified ID. When a filter is no longer required, call this method. Filters time out when not requested by eth_getFilterChanges or eth_getFilterLogs for 10 minutes. Parameters​ filterId: string - filter ID Returns​ result: boolean - indicates if the filter is successfully uninstalled curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_uninstallFilter\",\"params\":[\"0x70355a0b574b437eaa19fe95adfedc0a\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_uninstallFilter\", \"params\": [\"0x70355a0b574b437eaa19fe95adfedc0a\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"eth_uninstallFilter","u":"/public-networks/reference/api","h":"#eth_uninstallfilter","p":4886},{"i":5043,"t":"The MINER API methods allow you to control the node's mining operation, or settings related to block creation in general. note The MINER API methods are not enabled by default for JSON-RPC. To enable the MINER API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"MINER methods","u":"/public-networks/reference/api","h":"#miner-methods","p":4886},{"i":5045,"t":"Updates the target gas limit set using the --target-gas-limit command line option. Parameters​ gasPrice: number - target gas price in wei Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_changeTargetGasLimit\",\"params\":[800000], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_changeTargetGasLimit\", \"params\": [800000], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"miner_changeTargetGasLimit","u":"/public-networks/reference/api","h":"#miner_changetargetgaslimit","p":4886},{"i":5047,"t":"Retrieves the current extra data field that is used when producing blocks. Parameters​ None Returns​ result: string - Hexadecimal string representation of the extra data bytes. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getExtraData\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getExtraData\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x68656c6c6f20776f726c64\" }","s":"miner_getExtraData","u":"/public-networks/reference/api","h":"#miner_getextradata","p":4886},{"i":5049,"t":"Gets the minimum gas price (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-gas-price command line option, or is set to 1000 if the command line option is not specified. Use miner_setMinGasPrice to change the current value of the gas price. Parameters​ None Returns​ result: string - Minimum gas price (in wei) as a hexadecimal string curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getMinGasPrice\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getMinGasPrice\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3e8\" }","s":"miner_getMinGasPrice","u":"/public-networks/reference/api","h":"#miner_getmingasprice","p":4886},{"i":5051,"t":"Gets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-priority-fee command line option, or is set to 0 if the command line option is not specified. Use miner_setMinPriorityFee to change the current value of the fee. Parameters​ None Returns​ result: string - Minimum priority fee per gas (in wei) as a hexadecimal string curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getMinPriorityFee\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getMinPriorityFee\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"miner_getMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_getminpriorityfee","p":4886},{"i":5053,"t":"Sets the coinbase, the address for the mining rewards. note You can also use miner_setEtherbase as an alternative method. They both work the same way. Etherbase is a historic name for coinbase. Parameters​ coinbase: string - Account address you pay mining rewards to Returns​ result: boolean - true when address is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setCoinbase\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setCoinbase\", \"params\": [\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setCoinbase","u":"/public-networks/reference/api","h":"#miner_setcoinbase","p":4886},{"i":5055,"t":"Sets a new value for the extra data field that is used when producing blocks. Parameters​ extraData: string - Hexadecimal representation of the extra data field, with a maximum of 32 bytes. Returns​ result: string - true or false curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setExtraData\",\"params\":[\"0x0010203\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setExtraData\", \"params\": [\"0x0010203\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"params\": [\"0x0010203\"], \"id\": 1, \"result\": \"true\" }","s":"miner_setExtraData","u":"/public-networks/reference/api","h":"#miner_setextradata","p":4886},{"i":5057,"t":"Sets the minimum gas price (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-gas-price command line option, or is set to 1000 if the command line option is not specified. Use miner_getMinGasPrice to get the current value of the gas price. Parameters​ minGasPrice: string - Minimum gas price in hexadecimal Returns​ result: boolean - true when the gas price is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setMinGasPrice\",\"params\":[\"0x5dc\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setMinGasPrice\", \"params\": [\"0x5dc\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setMinGasPrice","u":"/public-networks/reference/api","h":"#miner_setmingasprice","p":4886},{"i":5059,"t":"Sets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-priority-fee command line option, or is set to 0 if the command line option is not specified. Use miner_getMinPriorityFee to get the current value of the fee. Parameters​ minPriorityFeePerGas: string - Minimum priority fee per gas in hexadecimal Returns​ result: boolean - true when the fee is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setMinPriorityFee\",\"params\":[\"0x0a\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setMinPriorityFee\", \"params\": [\"0x0a\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_setminpriorityfee","p":4886},{"i":5061,"t":"Starts the mining process. To start mining, you must first specify a miner coinbase using the --miner-coinbase command line option or using miner_setCoinbase. Parameters​ None Returns​ result: boolean - true if mining starts, or if the node is already mining curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_start\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_start\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_start","u":"/public-networks/reference/api","h":"#miner_start","p":4886},{"i":5063,"t":"Stops the mining process on the client. Parameters​ None Returns​ result: boolean - true if mining stops, or if the node is not mining curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_stop\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_stop\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_stop","u":"/public-networks/reference/api","h":"#miner_stop","p":4886},{"i":5065,"t":"The NET API methods provide network-related information.","s":"NET methods","u":"/public-networks/reference/api","h":"#net-methods","p":4886},{"i":5067,"t":"Returns the enode URL. Parameters​ None Returns​ result: string - enode URL of the node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303\" }","s":"net_enode","u":"/public-networks/reference/api","h":"#net_enode","p":4886},{"i":5069,"t":"Whether the client is actively listening for network connections. Parameters​ None Returns​ result: boolean - indicates if the client is actively listening for network connections curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53} { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": true }","s":"net_listening","u":"/public-networks/reference/api","h":"#net_listening","p":4886},{"i":5071,"t":"Returns the number of peers currently connected to the client. Parameters​ None Returns​ result: string - number of connected peers in hexadecimal curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"net_peerCount\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5\" }","s":"net_peerCount","u":"/public-networks/reference/api","h":"#net_peercount","p":4886},{"i":5073,"t":"Returns enabled services (for example, jsonrpc) and the host and port for each service. note The --nat-method setting affects the JSON-RPC and P2P host and port values, but not the metrics host and port values. Parameters​ None Returns​ result: object - enabled services curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"jsonrpc\": { \"host\": \"127.0.0.1\", \"port\": \"8545\" }, \"p2p\": { \"host\": \"127.0.0.1\", \"port\": \"30303\" }, \"metrics\": { \"host\": \"127.0.0.1\", \"port\": \"9545\" } } }","s":"net_services","u":"/public-networks/reference/api","h":"#net_services","p":4886},{"i":5075,"t":"Returns the network ID. Parameters​ None Returns​ result: string - current network ID Network ID Chain Network Description 1 ETH Mainnet Main Ethereum network 17000 ETH Holesky PoS test network 11155111 ETH Sepolia PoS test network 2018 ETH Dev PoW development network 1 ETC Classic Main Ethereum Classic network 7 ETC Mordor PoW test network note For almost all networks, network ID and chain ID are the same. The only networks in the table above with different network and chain IDs are Classic with a chain ID of 61 and Mordor with a chain ID of 63. curl HTTP request wscat WS request JSON result for Mainnet JSON result for Holesky curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"net_version\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"1\" } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"5\" }","s":"net_version","u":"/public-networks/reference/api","h":"#net_version","p":4886},{"i":5077,"t":"The PLUGINS API methods provide plugin-related functionality. note The PLUGINS API methods are not enabled by default for JSON-RPC. To enable the PLUGINS API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"PLUGINS methods","u":"/public-networks/reference/api","h":"#plugins-methods","p":4886},{"i":5079,"t":"Reloads specified plugin configuration. Parameters​ plugin: string - plugin Returns​ result: string - Success curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"plugins_reloadPluginConfig\",\"params\":[\"tech.pegasys.plus.plugin.kafka.KafkaPlugin\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"plugins_reloadPluginConfig\", \"params\": [\"tech.pegasys.plus.plugin.kafka.KafkaPlugin\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"plugins_reloadPluginConfig","u":"/public-networks/reference/api","h":"#plugins_reloadpluginconfig","p":4886},{"i":5081,"t":"The TRACE API is a more concise alternative to the DEBUG API. note The TRACE API methods are not enabled by default for JSON-RPC. To enable the TRACE API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"TRACE methods","u":"/public-networks/reference/api","h":"#trace-methods","p":4886},{"i":5083,"t":"Provides transaction processing of type trace for the specified block. note Your node must be an archive node, or the requested block must be within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order; if revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_block\",\"params\":[\"0x6\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_block\", \"params\": [\"0x6\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad82\", \"input\": \"0x0000000000000000000000000000000000000999\", \"to\": \"0x0020000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": { \"gasUsed\": \"0x7536\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"call\" }, { \"action\": { \"address\": \"0x0020000000000000000000000000000000000000\", \"balance\": \"0x300\", \"refundAddress\": \"0x0000000000000999000000000000000000000000\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"suicide\" }, { \"action\": { \"author\": \"0x0000000000000000000000000000000000000000\", \"rewardType\": \"block\", \"value\": \"0x1bc16d674ec80000\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": null, \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": null, \"transactionPosition\": null, \"type\": \"reward\" } ], \"id\": 1 }","s":"trace_block","u":"/public-networks/reference/api","h":"#trace_block","p":4886},{"i":5085,"t":"Executes the given call and returns a number of possible traces for it. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x0010000000000000000000000000000000000000\",\"gas\":\"0xfffff2\",\"gasPrice\":\"0xef\",\"value\":\"0x0\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\",\"nonce\":\"0x0\"},[\"trace\"],\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_call\", \"params\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"to\": \"0x0010000000000000000000000000000000000000\", \"gas\": \"0xfffff2\", \"gasPrice\": \"0xef\", \"value\": \"0x0\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\", \"nonce\": \"0x0\" }, [\"trace\"], \"latest\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\" : \"0xffabba\", \"input\" : \"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\", \"to\" : \"0x0010000000000000000000000000000000000000\", \"value\" : \"0x0\" }, \"result\" : { \"gasUsed\" : \"0x9c58\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, \"id\" : 2 },","s":"trace_call","u":"/public-networks/reference/api","h":"#trace_call","p":4886},{"i":5087,"t":"Performs multiple call traces on top of the same block. You can trace dependent transactions. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_callMany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"trace_callMany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"result\": [ { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x407d73d8a49eeb85d32cf465507dd71d507100c1\", \"gas\" : \"0x1dcd12f8\", \"input\" : \"0x\", \"to\" : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"value\" : \"0x186a0\" }, \"result\" : { \"gasUsed\" : \"0x0\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x407d73d8a49eeb85d32cf465507dd71d507100c1\", \"gas\" : \"0x1dcd12f8\", \"input\" : \"0x\", \"to\" : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"value\" : \"0x186a0\" }, \"result\" : { \"gasUsed\" : \"0x0\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, ], \"id\" : 1 },","s":"trace_callMany","u":"/public-networks/reference/api","h":"#trace_callmany","p":4886},{"i":5089,"t":"Returns traces matching the specified filter. The maximum number of blocks you can supply to trace_filter is 1000 by default. You can adjust this limit using the --rpc-max-trace-filter-range option. note Your node must be an archive node, or the requested blocks must be within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ traceFilterOptions: object - trace filter options object Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_filter\",\"params\":[{\"fromBlock\":\"0x1\",\"toBlock\":\"0x21\",\"after\":2,\"count\":2,\"fromAddress\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"]}],\"id\":415}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_filter\", \"params\": [ { \"fromBlock\": \"0x1\", \"toBlock\": \"0x21\", \"after\": 2, \"count\": 2, \"fromAddress\": [\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"] } ], \"id\": 415 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad82\", \"input\": \"0x0000000000000000000000000000000000000999\", \"to\": \"0x0020000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0xcd5d9c7acdcbd3fb4b24a39e05a38e32235751bb0c9e4f1aa16dc598a2c2a9e4\", \"blockNumber\": 6, \"result\": { \"gasUsed\": \"0x7536\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"call\" }, { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad52\", \"input\": \"0xf000000000000000000000000000000000000000000000000000000000000001\", \"to\": \"0x0030000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0xeed85fe57db751442c826cfe4fdf43b10a5c2bc8b6fd3a8ccced48eb3fb35885\", \"blockNumber\": 7, \"result\": { \"gasUsed\": \"0x1b\", \"output\": \"0xf000000000000000000000000000000000000000000000000000000000000002\" }, \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": \"0x47f4d445ea1812cb1ddd3464ab23d2bfc6ed408a8a9db1c497f94e8e06e85286\", \"transactionPosition\": 0, \"type\": \"call\" } ], \"id\": 415 }","s":"trace_filter","u":"/public-networks/reference/api","h":"#trace_filter","p":4886},{"i":5091,"t":"Returns a trace at the given position. note Your node must be an archive node, or the requested transaction must be contained in a block within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ transaction: string - transaction hash indexPositions: array - Index positions of the traces Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_get\",\"params\":[\"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\",[\"0x0\"]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_get\", \"params\": [ \"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\", [\"0x0\"] ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x1c39ba39e4735cb65978d4db400ddd70a72dc750\", \"gas\" : \"0x13e99\", \"input\" : \"0x16c72721\", \"to\" : \"0x2bd2326c993dfaef84f696526064ff22eba5b362\", \"value\" : \"0x0\" }, \"blockHash\" : \"0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add\" \"blockNumber\": 3068185, \"result\": { \"gasUsed\": \"0x183\", \"output\" : \"0x0000000000000000000000000000000000000000000000000000000000000001\" }, \"subtraces\" : 0, \"traceAddress\" : [ 0 ], \"transactionHash\": \"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\", \"transactionPosition\": 2, \"type\" : \"call\" }, \"id\" : 1 },","s":"trace_get","u":"/public-networks/reference/api","h":"#trace_get","p":4886},{"i":5093,"t":"Traces a call to eth_sendRawTransaction without making the call, returning the traces. note When using Bonsai, the requested transaction must be contained in a block within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ data - string - Raw transaction data options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_rawTransaction\",\"params\":[\"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\",[\"trace\"]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_rawTransaction\", \"params\": [ \"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\", [\"trace\"] ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"output\" : \"0x\" \"stateDiff\": null, \"from\" : \"0x1c39ba39e4735cb65978d4db400ddd70a72dc750\", \"trace\": [{ \"action\": { ... }, \"result\": { \"gasUsed\": \"0x0\", \"output\": \"0x\" } \"subtraces\": 0, \"traceAddress\": [], \"type\": \"call\" }], \"vmTrace\": null }, \"id\" : 1 },","s":"trace_rawTransaction","u":"/public-networks/reference/api","h":"#trace_rawtransaction","p":4886},{"i":5095,"t":"Provides transaction processing tracing per block. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of transaction trace objects containing one object per transaction, in transaction execution order; if revert reason is enabled with --revert-reason-enabled, the trace list items in the returned transaction trace object include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"trace_replayBlockTransactions\",\"params\": [\"0x12\",[\"trace\",\"vmTrace\",\"stateDiff\"]],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_replayBlockTransactions\", \"params\": [\"0x12\", [\"trace\", \"vmTrace\", \"stateDiff\"]], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\":[ { \"output\":\"0x\", \"vmTrace\":{ \"code\":\"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851\", \"ops\":[ { \"cost\":3, \"ex\":{ \"mem\":null, \"push\":[ \"0x8\" ], \"store\":null, \"used\":16756175 }, \"pc\":72, \"sub\":null }, ... ] }, \"trace\":[ { \"action\":{ \"callType\":\"call\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0xffadea\", \"input\":\"0x\", \"to\":\"0x0100000000000000000000000000000000000000\", \"value\":\"0x0\" }, \"result\":{ \"gasUsed\":\"0x1e\", \"output\":\"0x\" }, \"subtraces\":0, \"traceAddress\":[ ], \"type\":\"call\" } ], \"stateDiff\":{ \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\":{ \"balance\":{ \"*\":{ \"from\":\"0xffffffffffffffffffffffffffffffffc3e12a20b\", \"to\":\"0xffffffffffffffffffffffffffffffffc3dc5f091\" } }, \"code\":\"=\", \"nonce\":{ \"*\":{ \"from\":\"0x14\", \"to\":\"0x15\" } }, \"storage\":{ } } }, \"transactionHash\":\"0x2a5079cc535c429f668f13a7fb9a28bdba6831b5462bd04f781777b332a8fcbd\", }, {...} ] }","s":"trace_replayBlockTransactions","u":"/public-networks/reference/api","h":"#trace_replayblocktransactions","p":4886},{"i":5097,"t":"Provides transaction processing of type trace for the specified transaction. note Your node must be an archive node, or the requested transaction must be contained in a block within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ transaction: string - transaction hash Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction; if revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"trace_transaction\",\"params\": [\"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_transaction\", \"params\": [ \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"creationMethod\": \"create\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gas\": \"0xff2e26\", \"init\": \"0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"code\": \"0x\", \"gasUsed\": \"0x1c39\" }, \"subtraces\": 2, \"traceAddress\": [], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"create\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb2ea9\", \"input\": \"0x\", \"to\": \"0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x138e\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" }, { \"action\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"balance\": \"0x0\", \"refundAddress\": \"0x0000000000000000000000000000000000000000\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0, 0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"suicide\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb18a5\", \"input\": \"0x\", \"to\": \"0x00a0000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x30b\", \"output\": \"0x\" }, \"subtraces\": 0, \"traceAddress\": [1], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" } ], \"id\": 1 }","s":"trace_transaction","u":"/public-networks/reference/api","h":"#trace_transaction","p":4886},{"i":5099,"t":"The TXPOOL API methods allow you to inspect the contents of the transaction pool. note The TXPOOL API methods are not enabled by default for JSON-RPC. To enable the TXPOOL API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"TXPOOL methods","u":"/public-networks/reference/api","h":"#txpool-methods","p":4886},{"i":5101,"t":"Lists pending transactions that match the supplied filter conditions. Parameters​ numResults: number - integer representing the maximum number of results to return fields: object - object of fields used to create the filter condition Each field in the object corresponds to a field name containing an operator, and a value for the operator. A field name can only be specified once, and can only contain one operator. For example, you cannot query transactions with a gas price between 8 and 9 Gwei by using both the gt and lt operator in the same field name instance. All filters must be satisfied for a transaction to be returned. Field name Value Value type Supported operators from Address of the sender. Data, 20 bytes eq to Address of the receiver, or \"contract_creation\". Data, 20 bytes eq, action gas Gas provided by the sender. Quantity eq, gt, lt gasPrice Gas price, in wei, provided by the sender. Quantity eq, gt, lt value Value transferred, in wei. Quantity eq, gt, lt nonce Number of transactions made by the sender. Quantity eq, gt, lt Supported operators: eq (equal to) lt (less than) gt (greater than) action note The only supported action is \"contract_creation\". Returns​ result: array of objects - list of objects with details of the pending transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuPendingTransactions\",\"params\":[2,{\"from\":{\"eq\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"},\"gas\":{\"lt\":\"0x5209\"},\"nonce\":{\"gt\":\"0x1\"}}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"txpool_besuPendingTransactions\", \"params\": [ 2, { \"from\": { \"eq\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"gas\": { \"lt\": \"0x5209\" }, \"nonce\": { \"gt\": \"0x1\" } } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0xab5d04c00\", \"hash\": \"0xb7b2f4306c1c228ec94043da73b582594007091a7dfe024b1f8d6d772284e54b\", \"input\": \"0x\", \"nonce\": \"0x2\", \"to\": \"0xf8be4ebda7f62d79a665294ec1263bfdb59aabf2\", \"value\": \"0x0\", \"v\": \"0xfe8\", \"r\": \"0x5beb711e652c6cf0a589d3cea904eefc4f45ce4372652288701d08cc4412086d\", \"s\": \"0x3af14a56e63aa5fb7dcb444a89708363a9d2c1eba1f777c67690288415080ded\" } ] }","s":"txpool_besuPendingTransactions","u":"/public-networks/reference/api","h":"#txpool_besupendingtransactions","p":4886},{"i":5103,"t":"Lists statistics about the node transaction pool. Parameters​ None Returns​ result: object - transaction pool statistics object with the following fields: maxSize: number - maximum number of transactions kept in the transaction pool; use the --tx-pool-max-size option to configure the maximum size. localCount: number - number of transactions submitted directly to this node remoteCount: number - number of transactions received from remote nodes curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuStatistics\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuStatistics\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"maxSize\": 4096, \"localCount\": 1, \"remoteCount\": 0 } }","s":"txpool_besuStatistics","u":"/public-networks/reference/api","h":"#txpool_besustatistics","p":4886},{"i":5105,"t":"Lists transactions in the node transaction pool. Parameters​ None Returns​ result: array of objects - list of transactions curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuTransactions\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"txpool_besuTransactions\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"hash\": \"0x8a66830098be4006a3f63a03b6e9b67aa721e04bd6b46d420b8f1937689fb4f1\", \"isReceivedFromLocalSource\": true, \"addedToPoolAt\": \"2019-03-21T01:35:50.911Z\" }, { \"hash\": \"0x41ee803c3987ceb5bcea0fad7a76a8106a2a6dd654409007d9931032ea54579b\", \"isReceivedFromLocalSource\": true, \"addedToPoolAt\": \"2019-03-21T01:36:00.374Z\" } ] }","s":"txpool_besuTransactions","u":"/public-networks/reference/api","h":"#txpool_besutransactions","p":4886},{"i":5107,"t":"The WEB3 API methods provide functionality for the Ethereum ecosystem.","s":"WEB3 methods","u":"/public-networks/reference/api","h":"#web3-methods","p":4886},{"i":5109,"t":"Returns the current client version. Parameters​ None Returns​ result: string - current client version curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"web3_clientVersion\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"besu/\" }","s":"web3_clientVersion","u":"/public-networks/reference/api","h":"#web3_clientversion","p":4886},{"i":5111,"t":"Returns a SHA3 hash of the specified data. The result value is a Keccak-256 hash, not the standardized SHA3-256. Parameters​ data: string - data to convert to a SHA3 hash Returns​ result: string - SHA3 result of the input data curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_sha3\",\"params\":[\"0x68656c6c6f20776f726c00\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"web3_sha3\", \"params\": [\"0x68656c6c6f20776f726c00\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f\" }","s":"web3_sha3","u":"/public-networks/reference/api","h":"#web3_sha3","p":4886},{"i":5114,"t":"Lists enabled APIs and the version of each. Parameters​ None Returns​ result: map of strings to strings - enabled APIs and their versions curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"web3\": \"1.0\", \"eth\": \"1.0\", \"net\": \"1.0\" } }","s":"rpc_modules","u":"/public-networks/reference/api","h":"#rpc_modules","p":4886}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2559",[0,1.538,1,2.22,2,2.598,3,3.083,4,5.896,5,9.65,6,5.262,7,3.865,8,5.383,9,1.322,10,2.872,11,4.203,12,4.079,13,6.251,14,2.715,15,5.8,16,1.99,17,6.251,18,4.725,19,7.138,20,4.539,21,3.491,22,1.521,23,1.354,24,6.139,25,4.831,26,1.396]],["t/2561",[4,4.429,12,2.702,16,1.318,22,1.485,23,1.93,27,0.839,28,5.365,29,4.199,30,3.533,31,4.108,32,4.198,33,2.651,34,2.898,35,5.661,36,3.929,37,2.483,38,2.951,39,3.872,40,4.627,41,3.842,42,4.271,43,5.343,44,3.408,45,4.627,46,1.752,47,4.429,48,4.627,49,4.77,50,4.028,51,3.408,52,3.842,53,2.324,54,3.237,55,4.429,56,3.361,57,3.842,58,3.626,59,1.242,60,2.454,61,2.978,62,4.537,63,4.14,64,4.661,65,4.37,66,4.14,67,4.833,68,4.429,69,5.117,70,2.036,71,3.842,72,4.14,73,6.1,74,5.789,75,2.312,76,4.028,77,4.271]],["t/2563",[0,1.423,21,4.197,22,2.388,27,0.893,30,3.666,31,3.155,33,2.824,39,3.53,78,5.075,79,6.023,80,4.205,81,2.331,82,4.251,83,3.172,84,1.524,85,3.044,86,2.354,87,3.965,88,5.411,89,2.986,90,2.579,91,1.793,92,5.565,93,4.078,94,2.853,95,3.397,96,3.172,97,1.766,98,3.604,99,1.889,100,3.711,101,4.871,102,2.724,103,3.74,104,2.301,105,2.541,106,2.816,107,2.006,108,3.683,109,5.739,110,2.891,111,3.189]],["t/2565",[0,1.865,16,2.411,22,2.229,33,3.038,82,5.789,112,7.029,113,7.815,114,5.5,115,7.369,116,8.949,117,8.104,118,8.104,119,8.104]],["t/2567",[0,1.06,16,2.403,22,2.323,29,3.283,81,2.346,90,3.501,105,3.449,106,4.979,120,1.687,121,1.899,122,3.624,123,1.35,124,3.388,125,3.889,126,5.776,127,7.24,128,4.377,129,4.188,130,4.104,131,3.628,132,6.256,133,2.426,134,10.091,135,10.919,136,5.989,137,3.707,138,4.104,139,6.214,140,3.578,141,3.507]],["t/2569",[27,0.872,106,4.207,121,1.653,124,3.728,131,5.383,142,6.349,143,6.091]],["t/2571",[27,0.824,29,4.349,44,6.463,81,3.291,83,4.477,106,3.976,126,8.101,138,5.757,142,6.001,144,10.038,145,10.038]],["t/2573",[21,4.778,106,4.332,123,2.064,146,7.043]],["t/2575",[9,1.284,21,5.274,22,2.165,26,1.356,27,0.836,56,4.932,81,2.546,100,4.053,106,4.965,114,4.41,121,2.041,124,2.726,126,6.267,127,5.148,128,4.749,142,4.642,147,2.354,148,1.455,149,5.764,150,6.755,151,4.369,152,4.932,153,4.218,154,6.267,155,6.788,156,5.636,157,1.582,158,4.807]],["t/2577",[9,1.548,16,1.704,21,2.99,22,2.031,29,2.328,81,2.244,84,1.467,90,2.483,100,3.572,106,5.03,112,4.968,120,1.613,121,1.065,123,1.291,126,5.524,127,7.607,133,2.32,146,7.736,148,1.283,154,5.524,155,5.983,156,4.968,157,1.907,159,4.005,160,4.745,161,3.121,162,3.421,163,4.494,164,4.005,165,4.092,166,2.051,167,3.687,168,2.975,169,2.654,170,5.002,171,2.54,172,6.845,173,4.407,174,2.611,175,5.354]],["t/2579",[16,2.081,22,2.363,26,1.459,33,2.168,34,2.37,46,2.767,84,2.66,90,3.031,91,2.694,103,5.619,121,1.301,176,6.459,177,6.993,178,3.543,179,6.359,180,5.38,181,3.392,182,4.094,183,5.173,184,2.987,185,3.831,186,2.549,187,4.659,188,2.833,189,2.785]],["t/2582",[18,3.901,27,0.859,29,3.842,38,3.678,84,1.414,93,3.784,100,3.443,106,4.98,111,2.959,120,1.555,121,1.995,126,7.367,127,6.053,141,3.233,146,7.898,153,3.584,157,2.132,160,4.627,161,3.043,162,3.298,190,2.853,191,6.598,192,4.602,193,4.072,194,3.86,195,4.035,196,3.171,197,3.908,198,3.712,199,3.678,200,2.811,201,3.901,202,3.254,203,4.309,204,3.554,205,6.097,206,2.758,207,1.725,208,4.248]],["t/2584",[0,1.351,11,4.797,27,0.749,30,3.48,79,5.717,106,4.471,107,2.573,123,1.721,147,2.765,161,3.763,209,4.09,210,6.259,211,5.578,212,4.833,213,4.158,214,7.632,215,3.145,216,3.725,217,5.578]],["t/2586",[22,1.89,26,1.045,27,0.815,29,4.161,34,3.07,60,1.586,84,2.128,86,1.982,104,1.937,105,3.868,106,4.53,114,3.4,121,1.851,123,1.129,124,2.101,141,2.933,148,1.598,163,3.189,169,2.321,181,1.9,188,2.029,192,4.175,193,4.827,216,2.445,218,3.705,219,3.279,220,4.682,221,5.232,222,4.175,223,4.93,224,4.842,225,2.525,226,2.951,227,1.733,228,3.578,229,2.412,230,4.345,231,1.656,232,2.792,233,3.752,234,3.251,235,1.9,236,3.539,237,3.279,238,2.588,239,2.514,240,4.256,241,3.337,242,2.321]],["t/2588",[22,1.555,29,2.779,86,3.487,90,2.963,106,4.171,121,2.03,125,4.696,127,7.727,160,4.141,161,2.723,170,4.365,193,3.644,204,6.277,220,6.39,243,5.467,244,5.698,245,4.112,246,6.39,247,6.593,248,4.884,249,6.593,250,8.17,251,3.322]],["t/2590",[0,1.521,3,3.477,7,3.08,9,1.473,16,1.586,22,1.212,27,0.731,37,2.987,38,3.55,46,2.108,53,2.796,65,3.005,80,5.267,84,1.365,99,1.692,106,2.522,122,2.391,124,2.235,137,3.299,157,1.297,160,3.228,161,2.122,174,2.429,178,2.7,181,2.022,187,3.55,188,2.159,206,2.662,210,4.547,251,2.589,252,4.1,253,4.203,254,6.613,255,3.55,256,7.403,257,2.7,258,3.583,259,1.826,260,5.885,261,3.617,262,3.344,263,3.519,264,6.368,265,4.622,266,4.846,267,3.807,268,5.139,269,2.533,270,1.639,271,2.637,272,6.368,273,5.885]],["t/2592",[0,1.858,16,1.771,23,1.204,27,0.584,62,3.484,99,1.889,107,3.07,114,4.039,122,2.67,124,2.496,133,2.41,147,2.156,187,5.357,196,3.418,207,1.859,209,3.189,217,4.349,256,7.664,269,3.822,274,7.111,275,4.244,276,4.715,277,5.056,278,4.79,279,8.041,280,8.281,281,5.056,282,4.715,283,4.619,284,3.965,285,2.589,286,4.001,287,6.216]],["t/2594",[0,1.397,3,2.802,46,3.124,86,3.124,102,3.614,106,4.93,210,4.816,234,5.124,252,6.074,253,4.452,254,6.074,256,6.61,288,4.507,289,7.004,290,6.848,291,8.247,292,4.325]],["t/2596",[27,0.847,86,3.417,106,4.088,121,1.607,124,3.623,131,5.232,136,8.637,142,6.17,143,5.919,293,6.389]],["t/2598",[9,1.588,27,0.956,84,2.057,89,4.031,106,3.802,121,1.813,139,6.18,184,3.431,217,5.871,234,6.327,294,6.18,295,8.033,296,8.033,297,4.172,298,8.033]],["t/2600",[12,3.494,23,2.339,46,2.266,83,4.176,106,4.226,107,1.931,120,1.613,121,1.065,141,4.587,179,5.208,181,3.643,210,3.494,234,3.718,256,3.925,280,5.208,283,3.29,291,8.184,299,6.325,300,4.866,301,6.845,302,5.983,303,3.79,304,6.379,305,9.862,306,6.845,307,6.325,308,6.845,309,6.845,310,6.845,311,8.184,312,2.325,313,3.601,314,6.845]],["t/2602",[6,3.558,16,1.748,22,1.336,27,0.887,29,2.388,34,2.702,44,4.52,86,2.324,93,6.2,102,3.649,103,3.692,104,2.272,106,3.772,121,1.805,122,2.636,124,2.464,130,4.026,157,1.94,163,2.625,181,3.024,186,2.141,190,3.035,201,4.151,227,1.427,237,3.845,238,3.035,253,3.313,315,4.066,316,6.772,317,5.491,318,4.244,319,3.218,320,4.52,321,4.729,322,5.41,323,2.976,324,4.4,325,3.781,326,3.664,327,4.637,328,4.196,329,4.991,330,5.874,331,5.095,332,5.491]],["t/2604",[0,1.184,10,2.211,22,1.976,27,0.852,64,4.022,86,4.042,93,7,121,1.969,122,3.001,130,4.583,131,4.05,148,1.498,216,3.264,225,2.366,226,2.766,227,1.624,237,4.378,238,3.455,319,3.663,322,4.539,325,5.592,326,5.418,333,3.705,334,6.081,335,4.109,336,7.385,337,4.725]],["t/2606",[0,1.074,22,2.092,27,0.964,33,2.526,93,6.304,94,2.91,95,3.464,99,1.927,102,2.778,104,2.347,106,3.856,121,1.129,130,4.159,148,1.359,157,2.57,171,2.691,186,3.353,209,3.252,216,2.962,223,3.6,225,2.147,226,2.51,227,1.474,234,3.939,237,3.973,322,5.53,327,5.966,338,3.756,339,2.681,340,4.335,341,7.252,342,6.702,343,1.815,344,4.2]],["t/2608",[0,0.943,9,1.053,22,1.695,27,0.731,30,2.429,31,2.825,84,1.365,92,5.159,93,3.652,94,4.463,95,4.907,96,4.581,97,2.551,98,5.206,100,4.648,101,4.363,106,2.522,114,3.617,121,1.731,130,3.652,131,3.228,141,3.12,147,1.931,150,4.222,155,5.567,157,1.297,167,3.43,174,2.429,185,4.083,186,3.133,207,1.665,257,2.7,319,2.919,338,5.762,345,7.816,346,4.981,347,5.885,348,4.29,349,2.522,350,4.846,351,4.363,352,4.622,353,2.754,354,5.583,355,6.368,356,2.767,357,3.617,358,5.567,359,3.141]],["t/2610",[95,4.752,96,4.437,97,2.471,98,5.042,156,7.22,165,5.946,166,2.98,186,3.034,360,6.013,361,6.938,362,8.324,363,4.723,364,7.385,365,6.595]],["t/2612",[18,6.745,27,0.761,90,4.138,95,4.43,96,4.137,97,2.303,98,5.781,104,3.001,141,4.544,156,8.28,157,1.889,186,2.829,363,5.416,366,6.058,367,8.108,368,7.058,369,5.171]],["t/2614",[81,2.698,94,3.303,95,3.932,96,3.671,97,2.044,98,4.172,121,1.281,125,3.317,165,4.92,178,3.49,186,3.765,194,6.192,229,3.317,240,5.852,253,3.884,294,5.299,370,7.523,371,7.523,372,7.249,373,4.976,374,4.964,375,5.974,376,7.195,377,5.747,378,5.974,379,5.299,380,6.643,381,5.852]],["t/2616",[9,1.111,22,2.167,27,0.551,32,3.046,81,2.203,95,5.438,96,5.077,97,2.827,98,4.685,99,1.785,121,1.046,133,2.278,157,1.883,158,4.159,186,3.855,209,3.013,218,4.159,262,2.523,265,4.877,287,5.873,351,4.603,363,3.19,371,4.777,372,7.799,373,5.588,374,4.337,377,3.649,382,2.95,383,6.209,384,4.686,385,4.389,386,5.873,387,9.244,388,6.209,389,6.719,390,4.109,391,6.719,392,2.436,393,2.672]],["t/2618",[18,5.349,22,1.722,94,3.629,95,4.321,96,4.034,97,2.247,98,5.693,140,4.521,157,2.288,166,3.365,171,3.357,174,3.451,186,3.426,348,6.093,349,3.582,379,5.824,394,8.359,395,7.123]],["t/2620",[0,1.776,1,1.47,2,1.287,3,1.528,10,2.112,11,2.705,22,0.979,27,0.884,33,1.335,39,3.791,99,1.367,104,1.665,105,2.729,106,2.037,121,1.817,122,3.419,123,0.97,124,4.099,130,2.95,131,4.616,147,2.761,148,1.888,159,3.01,186,1.569,215,2.633,216,2.101,229,2.073,241,2.868,251,2.092,259,1.913,319,2.358,325,2.771,374,3.582,396,1.107,397,5.26,398,6.98,399,6.681,400,1.633,401,8.712,402,4.497,403,3.11,404,3.955,405,5.144,406,1.087,407,2.607,408,3.524,409,3.588,410,3.36,411,4.016,412,2.488,413,3.819]],["t/2622",[22,1.198,27,0.908,32,2.854,90,2.283,99,2.347,103,3.311,105,4.714,120,1.484,124,2.21,143,3.61,146,4.053,160,4.478,161,2.945,169,2.441,174,2.402,190,3.82,195,3.85,210,3.213,213,2.87,229,2.537,253,2.971,257,2.669,318,3.805,319,2.886,320,4.053,353,5.801,356,2.736,393,2.504,414,8.821,415,4.312,416,7.393,417,4.111,418,4.478,419,3.763,420,2.607,421,5.817,422,4.924,423,3.683,424,4.475]],["t/2624",[0,1.324,12,3.27,27,0.734,33,2.32,34,2.537,84,2.208,89,2.69,99,2.376,105,4.344,131,4.533,141,3.138,161,3.91,174,3.412,189,2.135,206,3.738,209,2.872,213,4.077,223,5.116,236,3.787,323,4.728,353,5.59,354,4.015,356,3.887,396,1.379,400,2.839,402,9.007,414,4.388,417,4.183,419,5.346,425,6.805,426,5.169,427,4.874,428,3.673,429,4.183,430,5.169,431,3.673]],["t/2626",[0,1.417,22,1.345,27,0.58,91,3.285,99,2.882,105,4.719,110,4.41,131,3.581,209,3.168,216,3.907,257,4.056,353,5.772,393,2.81,414,4.84,432,4.549,433,5.598,434,1.877,435,4.092,436,3.168,437,4.052,438,7.873,439,7.065,440,4.84,441,5.376,442,7.065]],["t/2628",[0,0.922,1,0.759,3,1.171,10,1.091,16,0.982,27,0.833,33,2.275,46,1.305,84,1.879,99,1.654,104,2.498,105,4.472,120,0.929,122,2.338,124,3.98,140,3.113,147,1.195,157,2.412,188,2.616,196,1.895,207,1.628,217,2.411,224,2.239,235,1.252,253,2.939,257,2.64,259,1.697,262,1.48,276,2.614,289,2.927,292,1.807,296,3.299,312,0.979,351,2.701,353,5.463,356,5.539,377,2.141,382,4.192,398,4.614,399,5.118,400,1.252,409,2.75,410,2.575,411,2.073,414,5.288,417,5.727,424,2.803,443,6.725,444,3.809,445,2.357,446,4.067,447,2.179,448,3,449,1.957,450,2.614,451,3.942,452,2.261,453,3.299,454,3.643,455,4.623,456,2.656,457,2.803,458,3.25,459,3.942,460,2.331,461,2.862,462,0.987]],["t/2630",[0,1.622,33,2.841,46,2.876,81,2.848,84,2.347,103,4.569,105,3.105,124,3.049,137,4.5,169,3.369,195,5.313,210,4.435,252,5.593,253,4.1,254,5.593,256,7.221,288,4.15,318,5.252,319,3.982,320,5.593,463,7.594,464,6.059,465,6.176,466,8.028]],["t/2632",[0,1.434,104,3.134,105,3.461,107,2.731,120,2.761,141,4.745,210,4.943,225,2.867,226,3.351,227,1.968,256,7.22,280,7.369,467,9.684,468,8.949]],["t/2634",[0,1.247,27,0.691,33,3.23,84,2.668,105,3.837,129,4.927,164,4.927,182,4.126,224,4.783,242,4.164,256,4.829,288,4.022,346,8.399,446,7.013,447,4.653,465,5.987,469,7.318,470,4.695,471,7.047,472,6.408,473,6.587,474,5.5]],["t/2636",[1,1.27,2,1.651,9,1.51,16,1.643,27,0.859,30,2.517,33,3.325,84,2.851,99,1.753,105,3.263,136,5.521,146,4.248,161,2.199,181,2.095,190,3.947,217,4.035,219,3.614,223,3.276,242,2.559,256,6.003,259,1.173,294,4.248,295,5.521,312,1.639,323,3.871,324,4.136,397,3.077,400,2.095,433,3.86,446,6.837,469,5.651,473,5.161,475,4.084,476,3.988,477,6.598,478,3.368,479,4.789,480,5.161,481,3.368,482,2.758,483,5.021,484,6.097]],["t/2638",[27,0.703,31,3.797,33,3.179,84,2.802,85,3.665,91,1.518,105,4.257,121,1.332,123,1.879,161,3.82,162,4.278,181,2.717,206,4.163,207,1.574,235,2.717,256,3.451,269,2.394,323,4.223,324,3.773,333,2.791,353,2.603,400,1.911,433,5.008,446,7.78,448,4.58,479,8.32,482,2.516,485,2.858,486,5.562,487,7.163,488,4.857,489,3.822,490,2.84,491,5.657,492,3.726]],["t/2640",[0,1.167,9,1.303,27,0.646,34,2.917,37,3.695,84,1.688,89,4.319,102,3.017,122,2.957,168,3.423,185,3.611,210,4.021,219,4.315,222,5.494,223,5.685,242,3.054,256,5.898,262,2.957,280,5.994,285,2.868,288,3.763,292,3.611,353,3.406,403,4.762,446,7.929,483,5.994,493,5.306,494,8.299,495,4.562,496,5.144,497,5.994,498,6.161,499,7.877,500,7.877]],["t/2642",[0,0.841,9,0.939,23,2.303,27,0.674,33,2.129,83,3.661,84,2.263,105,2.029,107,1.601,120,1.338,141,4.021,171,2.106,179,4.319,181,3.708,210,2.897,224,4.661,256,3.255,283,2.728,285,2.067,299,5.245,300,4.036,302,4.962,303,3.322,304,6.698,305,8.909,311,7.174,312,2.038,363,2.695,468,5.245,469,5.08,483,4.319,501,7.584,502,5.676,503,5.676,504,5.676,505,5.676,506,5.676,507,2.329,508,5.676,509,5.676,510,1.666,511,5.676,512,5.676,513,3.224,514,5.676,515,4.962,516,5.676,517,5.676,518,5.676,519,5.676,520,5.676,521,8.207,522,5.676,523,2.21,524,5.676]],["t/2644",[0,1.06,33,2.833,84,1.534,91,2.434,103,3.764,105,4.592,111,3.209,121,1.502,124,2.512,141,3.507,147,2.926,163,2.677,180,4.608,181,2.272,190,3.095,206,4.885,209,3.209,235,2.272,236,4.232,259,1.272,278,4.821,318,4.327,353,5.724,397,4.501,414,4.903,415,4.903,416,5.989,424,5.089,438,5.195,491,5.481,525,5.989,526,6.256,527,3.263]],["t/2646",[0,1.65,30,2.842,33,3.081,79,4.669,84,2.545,99,1.979,104,3.208,105,4.545,112,5.407,121,1.734,141,3.649,147,2.258,184,3.543,190,3.221,207,1.948,214,6.233,252,4.796,353,4.286,385,3.536,397,5.196,444,4.556,482,3.113,528,4.611,529,4.731,530,6.136,531,4.272,532,3.887,533,7.449,534,6.233,535,4.405]],["t/2648",[33,2.347,89,3.798,104,2.927,105,4.366,124,3.942,161,4.463,162,5.614,181,3.878,206,3.781,353,5.282,400,2.872,492,5.599]],["t/2650",[27,0.407,33,3.078,46,1.642,64,4.98,84,2.542,89,2.082,91,1.25,99,1.974,104,2.404,105,4.123,112,3.599,120,1.169,121,0.772,123,2,141,2.429,161,3.298,175,3.878,206,3.105,212,2.123,215,1.71,218,4.599,266,5.653,319,4.536,353,4.811,385,4.23,397,2.312,438,3.599,465,3.525,482,4.136,528,4.599,529,6.731,535,2.932,536,4.958,537,6.824,538,7.622,539,9.313,540,7.377,541,3.773,542,7.035,543,4.582,544,4.441,545,4.783,546,4.958]],["t/2652",[0,1.324,9,1.059,27,0.846,33,3.153,84,2.604,91,2.598,99,2.737,105,4.68,123,1.687,141,3.138,252,5.758,319,4.1,353,5.59,400,2.034,476,5.406,482,4.661,530,5.536,535,3.787,538,7.059,539,9.022,540,6.832,542,6.358,547,5.01]],["t/2654",[0,1.374,1,1.785,27,0.761,46,3.071,105,4.077,122,3.482,124,3.255,147,2.812,196,4.458,253,4.377,259,1.648,353,4.932,398,5.544,399,6.149,409,6.469,410,6.058,411,4.878,443,6.607,444,5.672]],["t/2656",[0,0.836,16,2.036,22,1.83,27,0.463,30,2.154,33,3.195,34,2.319,81,1.851,83,2.519,84,2.882,99,1.5,105,3.435,120,1.331,121,1.496,130,3.238,131,4.144,133,1.914,141,2.767,142,6.298,161,1.882,162,2.823,181,3.052,190,2.442,199,3.148,216,2.306,224,3.207,237,3.093,251,3.325,293,3.496,333,4.457,353,2.442,397,3.813,400,1.793,424,4.015,434,1.5,446,3.688,469,5.061,474,3.688,482,2.36,493,3.804,529,3.586,530,3.496,531,3.238,537,3.636,548,8.177,549,2.966,550,3.148,551,3.804,552,5.218,553,2.256,554,4.936,555,5.218,556,3.304,557,3.454,558,4.099]],["t/2658",[0,1.735,33,2.842,34,3.469,60,1.909,84,2.62,121,2.037,123,1.359,181,3.478,199,4.017,211,4.406,223,3.577,236,4.26,251,2.929,333,3.34,346,5.635,397,5.703,424,5.122,434,1.914,475,4.46,482,4.052,510,2.115,513,4.092,529,4.575,530,4.46,532,3.76,537,4.638,559,6.029,560,4.173,561,4.131]],["t/2660",[29,2.842,33,2.772,84,2.858,85,3.578,104,2.704,105,2.987,111,3.747,129,4.89,131,4.235,147,2.534,166,2.504,181,3.74,199,4.659,224,4.746,385,3.967,446,7.693,535,4.941,562,5.756,563,5.629,564,8.131]],["t/2662",[0,1.329,29,4.14,33,2.899,84,1.922,89,3.767,105,4.553,147,2.72,206,3.75,212,3.841,353,5.508,415,6.146,543,8.291,562,5.643,565,4.484,566,8.971]],["t/2664",[8,3.281,16,1.213,20,2.766,26,0.85,27,0.723,29,2.998,33,3.354,34,1.381,59,1.142,84,2.893,85,3.138,99,1.294,104,1.576,105,2.62,129,4.289,131,3.715,133,1.651,140,2.434,157,1.795,175,3.809,181,2.798,185,4.04,186,2.991,197,2.085,212,2.085,219,6.282,223,2.418,224,2.766,235,1.546,269,3.506,323,2.065,349,1.929,353,2.106,369,2.715,377,3.981,381,6.266,446,7.707,457,3.462,470,2.715,480,3.809,485,2.312,562,5.793,567,5.915,568,3.93,569,4.075,570,1.257,571,1.881,572,4.787,573,1.98]],["t/2666",[0,1.305,9,1.212,11,3.855,27,0.805,29,2.493,33,2.975,46,1.612,57,3.535,84,2.743,85,3.138,104,2.372,105,1.741,123,0.919,131,2.468,137,2.523,147,2.222,157,1.493,168,2.116,173,3.135,181,1.546,185,3.36,207,1.273,219,2.668,228,2.911,229,1.963,237,2.668,242,1.889,244,3.397,285,3.571,292,2.232,297,2.116,319,2.232,323,3.737,324,3.053,349,1.929,353,2.106,393,1.937,400,1.546,432,3.135,435,2.821,436,2.184,437,2.793,446,4.787,448,3.706,464,3.397,475,3.015,482,4.099,535,2.88,562,5.598,568,3.93,572,3.181,574,3.93,575,4.87,576,4.075,577,4.87,578,3.535,579,3.181,580,4.719,581,3.462,582,3.015,583,4.5,584,4.406,585,3.809,586,4.5,587,2.645,588,2.715,589,4.5,590,4.5,591,4.87,592,3.93,593,2.821,594,3.809,595,2.715,596,4.5,597,4.075,598,4.075,599,3.535,600,3.706]],["t/2668",[0,1.488,9,1.257,14,1.988,22,1.447,27,0.825,32,3.447,33,2.92,37,3.567,54,4.65,81,2.493,84,2.668,94,3.051,96,3.391,97,1.888,102,3.849,105,2.718,124,2.669,131,5.705,182,3.725,195,4.65,271,3.148,319,3.486,359,3.75,363,3.61,378,5.519,392,2.004,393,3.024,397,3.546,551,5.122,557,4.65,564,5.786,565,3.801,593,4.404,601,2.384,602,6.363,603,4.597,604,4.65]],["t/2670",[0,1.768,20,3.816,22,1.279,27,0.867,33,3.097,81,2.203,84,2.643,105,3.304,120,1.584,121,2.004,122,2.523,129,3.931,131,5.357,133,2.278,141,3.292,143,3.853,147,2.803,229,2.708,262,2.523,323,3.919,333,3.115,396,1.446,397,5.894,398,4.016,399,4.455,400,2.133,433,3.931,444,5.654,472,5.113,473,5.256,482,2.808,605,6.333]],["t/2672",[14,1.582,22,2.271,27,0.705,28,3.812,30,2.309,31,2.685,32,3.895,33,2.592,39,3.005,78,2.822,81,2.817,83,2.699,84,1.297,87,3.374,105,3.887,114,3.437,120,2.564,121,1.337,130,4.928,151,3.405,160,3.067,161,3.625,168,2.63,178,2.566,181,1.921,183,3.746,209,2.714,237,4.707,374,4.031,392,2.265,403,3.658,417,3.953,424,4.303,549,3.117,551,4.077,552,5.593,553,3.991,554,5.29,555,5.593,556,3.541,557,3.701,558,4.393,606,4.605,607,5.064,608,6.052,609,6.052,610,6.052,611,5.29,612,4.077,613,4.493,614,6.052,615,5.593,616,3.844,617,4.734,618,5.593,619,5.29,620,5.064]],["t/2674",[18,6.608,22,1.708,27,1.046,32,4.067,33,2.899,84,2.394,94,4.484,98,4.547,103,4.718,124,3.149,318,5.423,369,6.23,392,2.364,557,6.834,621,8.291,622,6.512,623,6.378]],["t/2676",[0,0.922,1,0.555,2,0.722,9,0.477,13,2.257,14,0.754,16,1.202,20,1.639,22,0.919,27,0.764,30,2.779,31,2.143,33,3.235,34,2.066,37,1.353,38,1.609,54,1.764,60,0.764,84,2.855,85,2.667,91,1.571,94,1.158,96,1.287,97,0.717,99,0.766,102,1.85,104,1.563,105,3.848,112,2.094,121,1.365,123,1.757,129,2.826,131,1.462,142,2.887,157,0.588,160,1.462,161,3.255,162,2.414,175,2.257,181,2.313,190,2.693,199,1.609,206,2.603,207,0.754,212,1.235,219,1.58,222,2.012,223,3.092,224,1.639,225,0.854,226,0.998,229,1.163,235,1.533,236,1.706,269,1.921,271,1.195,294,1.858,295,2.414,312,0.717,324,3.027,333,1.338,339,2.303,353,3.15,363,1.37,393,1.921,397,4.733,400,1.533,418,1.462,425,2.195,432,1.858,433,3.645,434,0.766,444,1.764,446,7.34,450,1.913,469,1.786,472,3.675,475,2.99,479,6.759,481,1.473,482,1.206,484,7.493,485,1.37,487,6.785,488,3.897,489,1.832,490,1.362,491,3.538,492,1.786,527,1.315,529,3.067,530,2.99,531,2.77,537,1.858,557,1.764,564,2.195,565,1.442,601,0.905,602,2.414,603,1.744,604,1.764,605,3.309,624,1.944,625,1.623,626,2.522,627,2.522,628,1.744,629,2.257,630,1.506]],["t/2678",[16,2.455,21,4.306,22,1.877,27,0.809,78,4.597,107,2.781,108,6.132,109,7.956,110,4.008,111,4.421,631,4.18,632,4.397,633,5.496,634,6.641]],["t/2680",[0,1.672,7,4.412,27,0.927,38,6.294,78,4.254,212,3.905,213,5.146,254,5.872,262,3.425,628,5.514,631,3.867,632,4.068,633,5.085,634,6.144,635,4.09,636,7.632,637,5.717,638,7.36,639,7.973,640,6.248]],["t/2684",[0,1.34,25,5.468,27,0.742,82,5.407,102,3.465,209,4.056,213,4.123,255,7.123,450,5.997,631,5.179,641,6.883,642,8.547,643,4.794,644,8.359,645,8.359,646,5.908,647,6.883,648,7.569,649,6.431]],["t/2686",[0,1.904,14,1.746,27,0.865,207,2.407,213,4.802,225,3.119,226,3.186,257,2.831,319,3.061,337,3.949,419,7.36,495,5.332,496,4.362,631,5.22,641,8.016,643,3.54,647,9.063,650,8.507,651,5.389,652,9.735,653,5.838,654,7.005,655,5.838,656,3.658,657,6.171,658,3.597,659,5.082,660,2.74,661,5.838,662,3.884,663,4.037]],["t/2689",[26,2.091,27,0.825,31,3.373,81,2.493,82,4.545,90,2.758,122,2.855,166,2.278,204,4.096,225,2.251,229,3.064,255,4.239,258,6.737,259,1.351,369,4.239,393,3.024,395,4.239,464,5.303,582,4.707,631,4.772,642,5.786,664,6.363,665,7.294,666,4.581,667,4.966,668,3.546,669,7.027,670,5.406,671,4.202,672,6.647,673,4.096,674,3.968,675,4.895,676,6.136,677,6.363,678,7.027,679,4.449]],["t/2691",[0,1.843,24,6.816,26,1.648,169,3.659,225,2.793,226,3.265,275,3.435,320,6.074,495,6.676,631,4,634,6.355,662,3.981,663,5.703,680,7.38,681,8.718,682,8.718]],["t/2693",[1,1.516,2,1.971,22,2.311,31,3.495,33,2.668,81,3.372,84,1.688,88,5.994,104,2.549,121,1.226,131,3.992,142,4.708,157,1.604,166,3.081,206,3.292,219,4.315,261,5.841,270,2.028,289,5.847,324,4.937,350,5.994,464,5.494,490,3.717,491,4.474,549,2.857,579,5.144,588,4.391,666,3.59,683,7.279,684,4.05,685,7.877,686,3.911,687,4.708,688,5.6,689,7.173]],["t/2695",[0,1.46,27,0.809,46,3.264,81,3.881,196,4.738,261,5.599,690,6.439,691,5.599,692,5.829,693,6.029,694,5.547,695,6.347,696,6.536,697,6.179]],["t/2697",[22,2.064,33,2.219,81,3.555,90,3.102,121,1.331,165,5.112,204,4.606,242,3.316,245,4.304,255,4.768,261,4.857,263,4.726,271,3.541,392,2.254,588,4.768,673,4.606,674,6.214,690,5.585,698,5.761,699,5.761,700,5.294,701,8.304,702,4.19,703,6.08,704,5.761,705,6.207]],["t/2699",[4,3.456,16,1.515,21,2.658,26,1.75,27,0.708,53,2.672,62,2.982,99,2.897,103,3.2,120,1.434,157,1.239,180,7.02,184,2.175,189,2.028,200,2.593,216,2.485,227,1.237,231,2.772,239,2.555,242,3.345,275,3.141,323,2.58,382,2.672,393,3.986,426,6.962,488,4.911,540,4.035,584,4.312,601,1.908,674,3.176,684,3.129,692,5.101,699,7.345,703,7.125,706,7.752,707,2.686,708,8.627,709,5.092,710,8.627,711,6.085,712,5.624,713,5.624,714,6.085,715,6.085,716,6.085,717,3.638,718,3.918,719,3.278,720,3.2,721,6.085,722,4.244,723,6.085,724,4.911,725,3.176,726,4.911,727,6.085]],["t/2701",[2,2.174,21,4.784,27,0.984,32,3.938,82,5.193,83,4.885,121,1.867,159,5.083,162,4.342,186,2.65,210,5.59,231,2.403,352,6.306,393,3.455,419,5.193,689,6.059,698,5.852,728,9.164,729,3.501,730,8.028,731,5.76,732,7.011]],["t/2703",[0,1.926,14,3.03,27,0.781,46,3.151,121,1.804,194,5.568,202,4.693,235,3.021,631,4.035,632,5.573,633,6.46]],["t/2705",[14,2.751,209,4.717,584,5.258,632,5.487,633,5.865,643,5.576,665,7.636]],["t/2707",[0,0.815,1,1.545,2,2.986,4,3.127,9,0.91,14,2.894,21,2.405,27,0.659,53,2.417,120,2.454,123,1.514,124,1.932,207,1.44,227,1.631,238,4.096,242,2.135,267,6.617,285,2.004,357,3.127,396,1.185,406,2.442,407,2.79,632,4.937,686,3.985,733,5.169,734,4.04,735,4.444,736,2.121,737,3.596,738,8.237,739,5.088,740,5.088,741,5.088,742,5.088,743,5.599,744,3.291,745,5.707,746,3.65,747,3.914,748,3.221,749,5.088,750,5.088,751,5.088,752,4.443,753,5.088]],["t/2709",[0,1.479,14,2.611,16,1.257,23,0.855,34,1.432,60,1.995,86,2.982,102,2.885,120,1.775,121,1.172,122,2.828,123,0.953,125,3.63,139,4.849,164,4.407,184,2.692,195,3.088,200,3.209,206,2.11,217,3.088,225,1.495,226,1.747,227,1.026,231,2.492,235,1.603,259,1.601,326,2.635,374,2.369,392,1.331,396,2.15,415,3.459,418,3.817,420,3.73,448,3.842,462,1.885,630,2.635,632,5.321,633,4.199,671,4.977,687,5.384,688,3.59,729,2.035,738,5.073,743,3.522,752,4.075,754,6.538,755,6.96,756,4.666,757,2.507,758,4.075,759,2.986,760,4.362,761,3.401,762,2.276,763,3.748,764,1.432,765,4.225,766,6.302,767,4.414,768,4.414,769,6.96,770,3.59,771,10.725,772,4.075,773,6.078]],["t/2711",[2,2.209,14,2.893,28,3.916,49,5.399,120,2.848,121,1.374,157,1.798,259,1.569,407,4.474,485,4.191,632,3.937,736,2.333,738,5.946,743,6.157,754,6.407,774,6.276,775,6.157,776,8.157,777,8.157,778,5.607,779,5.112,780,5.946,781,6.047,782,5.946]],["t/2713",[14,2.794,121,1.663,151,4.702,202,4.121,235,4.288,283,5.662,632,5.537,660,4.833,687,6.387,783,5.38,784,6.536,785,5.458,786,7.204,787,9.34,788,6.536]],["t/2715",[0,0.841,1,1.856,2,2.643,3,2.437,10,1.57,16,1.413,22,1.835,26,0.991,27,1.047,33,1.473,37,2.663,46,1.879,78,2.647,82,3.393,84,1.216,86,1.879,103,4.316,121,0.883,123,1.071,124,1.992,125,3.307,148,2.257,163,2.123,176,4.961,180,3.655,181,2.606,182,4.021,183,3.514,188,1.924,208,3.655,215,1.957,227,1.153,232,2.647,255,5.375,323,4.087,406,1.734,412,2.745,433,3.321,437,3.255,462,1.42,485,2.695,625,3.194,631,2.407,640,3.889,656,3.109,674,2.962,686,2.818,701,5.724,733,2.238,736,2.169,760,3.288,789,4.819,790,4.319,791,4.12,792,3.707,793,3.356,794,5.245,795,3.959,796,3.959,797,4.581]],["t/2717",[0,1.543,27,0.855,81,3.416,107,2.939,121,1.622,225,3.622,226,3.606,227,2.117]],["t/2719",[0,1.653,631,4.732]],["t/2721",[21,4.856,22,2.116,27,0.73,86,3.681,89,3.737,123,1.679,157,2.265,213,4.056,227,1.808,259,2.257,275,4.415,420,3.685,759,5.262,786,7.416,798,6.327,799,8.223]],["t/2723",[0,1.545,9,1.331,22,1.532,26,2.138,27,0.856,38,4.488,78,3.754,99,2.139,107,2.271,121,1.253,123,1.968,148,2.169,189,4.227,227,1.636,243,3.776,288,3.845,396,1.733,404,4.17,496,5.258,601,2.524,660,3.303,781,7.146,800,5.614,801,5.843,802,4.201,803,4.76,804,6.297]],["t/2725",[0,1.033,1,1.343,2,2.373,3,2.071,9,1.154,14,1.824,22,1.328,23,1.959,27,0.573,31,3.095,59,1.636,86,2.309,90,2.53,91,2.392,97,1.732,107,2.675,120,1.644,121,1.086,157,1.421,227,1.417,259,1.686,270,1.796,285,2.54,292,3.197,312,2.676,406,1.474,462,1.746,663,4.217,704,4.699,805,2.973,806,6.097,807,2.698,808,2.69,809,6.446,810,7.217,811,7.654,812,6.446,813,5.456,814,4.17,815,1.956,816,5.456,817,3.078,818,5.308,819,6.446,820,5.456,821,6.446]],["t/2727",[0,0.788,1,1.507,2,3.227,3,1.579,14,1.391,16,1.949,23,1.573,26,0.929,27,0.437,28,2.36,32,2.411,39,2.64,49,3.253,86,2.591,107,1.5,120,2.573,121,1.445,122,2.939,124,2.747,148,0.997,151,2.992,157,1.083,180,3.424,193,4.142,209,2.385,225,1.575,226,1.841,227,1.081,231,2.833,239,4.584,259,1.391,267,3.179,303,2.153,337,3.145,392,1.402,400,1.689,406,2.559,420,2.202,485,2.525,736,2.068,774,3.781,775,3.709,778,5.191,781,3.644,822,4.649,823,5.563,824,3.145,825,4.915,826,3.583,827,4.915,828,4.775,829,4.292,830,4.915,831,4.915,832,4.649,833,3.781,834,4.906,835,4.649,836,3.526]],["t/2729",[0,0.977,2,1.651,14,2.387,22,1.993,26,1.152,27,0.542,29,2.244,31,2.927,33,2.368,59,1.548,90,2.393,95,3.152,96,2.943,97,1.639,120,1.555,121,1.758,123,1.245,125,2.659,148,1.236,185,3.024,189,3.043,207,1.725,216,2.695,231,2.525,237,3.614,242,2.559,243,3.095,259,2.008,271,4.677,275,3.324,396,1.965,406,1.394,420,4.334,462,1.651,556,3.86,570,1.703,595,3.678,604,4.035,666,3.008,707,2.912,734,3.321,775,4.602,837,6.598,838,6.598,839,6.598,840,3.646,841,3.368,842,4.602,843,5.767,844,4.729]],["t/2731",[111,4.343,121,1.507,148,1.815,216,3.955,259,2.238,319,4.439,382,4.252,526,8.465,845,9.684,846,8.465,847,6.754,848,9.684,849,8.104,850,8.104,851,6.325]],["t/2733",[22,1.928,26,2.101,38,5.649,121,1.577,124,3.556,128,6.196,152,6.434,189,4.01,190,4.381,393,4.03]],["t/2735",[0,1.713,9,1.154,21,3.047,27,0.778,83,3.111,121,1.086,164,5.549,171,2.589,190,3.016,204,3.757,225,2.065,226,2.414,227,1.417,259,2.268,275,3.924,349,2.763,393,2.774,396,2.042,420,3.927,433,4.081,482,2.915,557,4.266,565,3.487,631,4.569,632,3.111,633,3.889,673,3.757,687,4.17,707,3.078,754,5.063,852,6.446,853,5.308,854,4.699,855,8.291,856,4.959,857,6.975,858,6.097,859,6.975,860,6.497,861,4,862,6.975,863,6.975]],["t/2737",[14,2.254,81,2.826,106,3.414,121,1.86,143,4.943,162,4.308,164,5.043,186,2.629,216,3.52,259,2.232,275,4.351,283,4.143,335,4.432,400,2.736,443,4.992,492,5.335,611,7.534,855,7.534,864,8.794,865,6.559,866,7.965,867,5.152,868,4.251]],["t/2739",[121,1.833,188,3.312,234,5.307,259,1.736,283,4.696,324,6.124,535,5.777,759,5.777,850,8.176,855,8.541,864,7.885,868,4.818,869,9.77,870,9.77,871,7.253]],["t/2741",[0,1.698,27,0.768,56,7.282,213,5.652,221,8.177,227,1.901,231,2.588,281,6.65,313,3.598,319,4.288,422,7.317,554,8.177,759,5.531,832,8.177,850,7.827,868,4.613,872,6.524]],["t/2743",[85,4.461,125,4.93,400,3.308,419,6.229,792,7.99,868,6.033]],["t/2745",[0,0.938,22,1.949,27,0.994,28,2.809,31,3.936,32,2.87,33,1.643,49,3.872,64,3.187,78,2.953,86,2.096,87,4.946,121,1.935,123,1.674,125,4.472,133,3.007,148,1.919,181,2.01,212,2.711,227,1.287,229,2.551,231,1.751,243,5.952,262,3.331,385,3.006,413,4.7,462,1.584,532,3.304,588,3.53,601,2.781,792,5.794,793,6.561,873,6.439,874,5.109,875,4.595,876,3.744,877,4.135,878,3.744,879,3.006,880,2.766,881,3.631]],["t/2747",[0,1.448,14,1.909,22,1.862,27,0.905,37,3.425,89,3.066,107,2.059,121,1.136,123,2.081,125,3.941,189,2.433,210,6.014,212,3.125,227,2.241,238,5.312,239,4.631,243,4.588,259,1.297,396,2.105,733,4.349,734,5.551,879,3.466,882,7.3,883,7.3,884,7.3,885,4.918,886,7.3,887,4.228,888,5.71,889,5.299]],["t/2749",[0,0.697,9,0.778,22,1.834,27,0.386,32,2.132,33,1.852,34,2.448,35,3.414,38,2.622,54,2.876,60,2.553,65,2.219,81,1.542,86,1.557,89,1.975,99,2.292,107,1.326,121,1.5,122,2.681,123,1.628,124,1.651,128,2.876,133,1.594,139,3.028,147,1.426,148,1.617,152,2.987,168,2.044,169,2.768,181,2.267,187,2.622,190,2.034,216,1.921,217,2.876,225,1.393,226,1.628,229,1.895,243,6.274,262,2.681,365,3.118,374,2.206,385,2.233,393,3.432,395,2.622,396,1.012,413,3.491,418,3.618,447,2.599,474,3.072,489,2.987,545,3.028,551,3.168,558,3.414,560,2.724,601,2.706,733,1.855,734,3.593,793,2.781,795,3.28,851,5.636,853,3.579,861,2.697,871,3.491,879,4.574,890,3.118,891,4.703,892,5.974,893,3.118,894,2.493,895,2.811,896,5.075,897,2.576,898,2.811,899,2.843,900,3.028,901,5.3,902,3.28,903,6.241]],["t/2751",[9,1.322,14,2.09,22,1.521,85,3.421,86,2.646,99,2.758,104,2.586,121,1.9,140,5.764,147,2.423,163,3.883,171,4.279,225,2.366,226,2.766,227,2.11,242,3.099,243,6.279,349,3.165,418,4.05,419,4.777,814,4.777,868,5.12,904,4.139]],["t/2753",[0,0.803,16,1.35,22,1.788,23,2.394,26,0.947,27,0.771,30,2.069,31,2.406,32,2.459,33,2.06,53,2.381,78,2.529,79,3.4,87,3.024,90,1.967,92,6.658,93,5.929,94,4.148,95,4.487,96,3.541,97,1.972,98,4.76,100,2.831,101,6.434,102,3.041,123,1.023,181,1.722,189,1.808,257,2.299,338,5.355,360,3.279,393,3.158,905,4.741,906,3.11,907,3.716,908,5.424,909,4.934,910,3.716]],["t/2755",[22,1.958,27,0.844,33,2.044,93,6.567,94,3.16,95,3.763,102,3.017,103,4.142,106,4.535,121,1.226,124,2.765,130,4.517,148,1.476,157,2.565,163,2.946,186,3.137,216,4.2,227,1.601,237,4.315,251,3.203,253,3.717,318,4.762,319,3.611,320,5.071,322,4.474,327,6.131,338,4.08]],["t/2757",[0,0.909,9,0.64,16,0.964,22,1.452,23,1.854,26,2.094,27,0.866,34,1.099,53,1.7,59,0.908,81,1.27,95,1.85,104,1.987,106,1.534,107,1.092,120,0.913,121,0.956,123,1.9,130,2.221,147,1.174,148,0.726,157,2.644,184,3.103,186,1.181,225,1.818,226,2.125,227,1.248,235,2.756,322,5.72,327,2.989,328,7.167,329,8.211,431,7.342,573,1.575,601,1.214,828,3.157,911,3.029,912,2.021,913,1.949,914,9.102,915,5.674,916,3.579,917,5.178,918,3.579,919,6.384,920,3.579,921,3.873,922,3.873,923,3.873,924,4.558,925,4.558,926,3.241,927,4.803]],["t/2760",[9,1.534,26,1.62,157,2.323,227,1.885,322,5.268,343,2.321,392,2.444,420,3.84,431,6.541,601,2.908,764,2.631,914,8.11,919,10.338,926,7.761,928,4.996,929,8.571,930,9.275]],["t/2762",[9,1.588,120,2.263,157,2.373,317,7.509,343,2.402,392,2.53,396,2.067,431,6.68,523,3.738,764,2.723,828,4.936,914,8.282,931,5.214,932,9.599,933,8.033]],["t/2764",[9,1.496,104,2.927,157,2.488,186,3.426,322,6.938,327,4.403,328,6.714,343,2.264,392,2.384,396,1.947,431,6.441,764,2.566,914,7.985,927,7.075,934,9.045,935,9.045,936,9.045]],["t/2766",[9,1.521,26,1.606,34,2.609,157,2.507,235,2.92,317,7.194,322,5.224,328,7.357,343,2.302,392,2.424,431,7.058,764,2.609,914,8.068,928,4.954,937,8.499,938,9.197]],["t/2768",[9,1.496,26,1.961,157,2.288,235,2.872,328,7.302,343,2.264,392,2.384,431,6.441,764,2.566,914,7.985,917,6.281,924,6.715,925,6.715,928,4.872,939,9.399,940,9.045]],["t/2770",[9,1.508,157,2.299,184,3.26,186,2.782,227,1.853,317,7.134,328,7.33,331,6.62,332,8.831,343,2.282,392,2.404,396,1.963,431,6.474,764,2.587,914,8.026,941,7.134,942,7.632,943,9.121]],["t/2772",[9,1.534,130,5.319,157,2.516,235,2.945,317,7.255,322,5.268,329,8.783,343,2.321,392,2.444,431,7.084,764,2.631,914,8.11,928,4.996,944,8.571,945,9.275]],["t/2774",[9,1.508,26,1.972,157,2.299,235,2.896,329,8.718,343,2.282,392,2.404,431,6.474,764,2.587,914,8.026,917,6.305,924,6.771,925,6.771,928,4.913,939,7.632,946,9.121]],["t/2776",[9,1.508,157,2.299,184,3.26,186,2.782,227,1.853,317,7.134,329,8.718,331,6.62,332,8.831,343,2.282,392,2.404,396,1.963,431,6.474,764,2.587,914,8.026,941,7.134,942,7.632,947,9.121]],["t/2778",[0,0.422,9,1.02,14,0.745,18,1.684,22,1.532,23,2.361,26,1.078,27,0.715,29,0.969,60,0.754,70,2.778,81,0.934,85,1.219,95,4.824,96,3.222,97,1.794,103,1.498,121,0.96,122,1.069,123,1.363,131,1.443,148,1.156,154,2.298,157,2.124,160,1.443,161,0.949,163,2.308,167,4.986,168,1.238,169,2.801,171,1.057,173,1.833,174,2.756,186,3.475,189,2.408,202,1.404,209,2.142,212,1.219,215,0.982,270,0.733,284,1.588,285,1.037,292,1.305,304,1.702,343,1.195,344,1.649,356,2.682,382,2.097,418,1.443,460,1.684,510,0.836,551,1.918,556,1.666,572,1.86,581,2.025,612,1.918,620,2.383,635,1.277,702,3.539,707,1.257,868,1.404,876,1.684,909,3.239,910,4.949,948,1.986,949,1.951,950,2.298,951,1.763,952,2.632,953,6.451,954,1.721,955,3.997,956,2.227,957,2.227,958,2.227,959,2.632,960,2.489,961,1.547,962,3.156,963,1.986,964,5.702,965,5.702,966,1.32,967,4.272,968,4.272,969,4.367,970,4.418,971,3.635,972,4.414,973,3.997,974,1.395,975,2.383,976,2.383,977,3.736,978,2.298]],["t/2780",[9,0.975,22,1.122,23,2.356,26,1.356,27,0.484,29,0.91,60,1.2,70,2.669,81,1.485,83,1.193,84,0.573,85,1.94,90,0.97,95,4.703,111,1.199,121,1.08,122,1.004,123,0.855,148,0.849,157,2.136,160,2.987,161,3.282,163,2.595,167,1.44,168,1.969,169,1.757,171,2.881,174,1.728,186,3.519,189,2.588,235,0.849,242,1.037,247,2.158,262,1.004,292,1.226,335,1.375,340,1.599,343,1.134,382,1.989,404,4.022,436,1.199,460,1.581,510,0.785,553,1.81,581,3.221,601,1.42,620,3.791,658,3.737,702,3.399,868,2.234,876,2.679,909,3.111,948,1.865,952,4.187,953,5.269,955,3.791,961,2.461,962,3.391,963,3.16,964,4.187,965,4.187,966,1.24,967,4.103,968,4.103,969,4.194,970,4.244,972,5.447,973,4.932,974,2.22,979,3.656,980,5.764,981,6.412,982,3.656,983,6.412,984,2.471,985,1.901,986,7.371,987,6.065,988,7.793,989,5.894,990,2.238,991,4.53,992,2.674,993,2.674]],["t/2782",[0,1.126,12,6.112,23,2.292,26,1.966,34,2.157,60,2.015,65,4.742,107,2.145,123,1.435,161,4.15,189,3.751,288,3.632,425,5.786,553,3.038,560,4.404,570,1.962,729,4.05,994,4.895,995,4.829,996,7.604,997,7.604,998,7.604,999,7.604,1000,10.049,1001,7.604]],["t/2784",[0,0.815,22,2.2,27,0.778,29,1.872,33,2.458,34,1.562,39,3.985,50,4.189,79,3.451,84,1.18,90,1.997,92,3.189,93,3.157,94,3.221,95,2.63,96,4.644,97,2.353,99,2.517,102,2.109,121,0.857,131,2.79,137,4.158,141,2.697,143,3.157,148,1.032,157,2.255,167,2.965,168,2.393,171,2.043,173,3.544,174,2.1,186,3.73,190,2.381,195,3.367,216,2.249,223,2.733,227,1.119,229,2.219,247,4.443,256,3.157,257,3.403,262,3.014,283,2.646,327,2.68,338,4.158,345,4.189,349,2.18,351,3.772,356,2.393,384,3.84,393,2.19,449,2.733,868,2.715,871,4.087,904,2.852,905,4.812,949,3.772,1002,4.607,1003,4.189,1004,4.189,1005,4.443,1006,5.088,1007,5.088,1008,2.752,1009,6.478,1010,4.607,1011,4.306,1012,4.812,1013,4.306]],["t/2786",[0,0.953,9,0.499,14,0.79,22,1.583,23,1.804,26,1.86,27,0.615,33,0.784,44,1.944,61,1.699,69,1.669,70,1.162,75,2.192,81,0.99,90,3.017,94,1.212,96,4.608,97,2.566,107,0.852,121,1.295,122,1.134,123,1.214,140,1.51,147,0.916,148,0.566,153,1.64,157,2.227,162,1.51,163,1.13,165,2.999,166,0.905,167,1.627,168,1.312,169,2.496,171,3.086,186,1.53,189,3.643,197,3.561,209,1.354,212,2.755,213,1.377,227,1.308,231,1.78,248,1.805,257,1.28,259,0.537,270,0.777,288,1.443,327,1.47,340,4.481,348,2.034,349,1.987,360,3.891,369,2.797,393,1.201,396,1.08,400,0.959,418,1.531,510,0.886,513,1.715,561,1.732,562,2.326,570,2.147,571,1.938,587,4.874,689,3.499,702,3.153,731,2.002,802,2.618,817,2.214,856,2.147,909,1.354,910,2.069,967,5.306,968,4.432,969,1.826,970,3.068,974,1.48,995,1.918,1014,1.826,1015,2.64,1016,2.106,1017,5.194,1018,2.64,1019,4.198,1020,3.847,1021,2.437,1022,2.58,1023,3.02,1024,1.669,1025,2.527,1026,2.458,1027,3.145,1028,3.642,1029,2.437,1030,2.362,1031,3.725,1032,2.936,1033,1.627,1034,4.897,1035,1.369,1036,1.553,1037,2.106,1038,1.52,1039,1.893,1040,2.791,1041,4.267,1042,4.246,1043,4.636,1044,2.362,1045,2.437,1046,4.198,1047,2.64,1048,2.791,1049,2.362,1050,2.242,1051,2.791,1052,1.51,1053,2.242,1054,2.64,1055,2.64]],["t/2788",[0,1.323,9,1.233,26,1.855,27,0.733,30,1.9,34,1.413,60,2.367,62,3.652,64,3.752,99,1.323,104,2.412,110,3.031,133,1.688,157,2.353,167,4.812,178,2.112,181,1.581,186,3.524,189,3.851,197,2.132,223,2.473,235,2.367,251,2.025,259,1.763,284,2.777,339,1.841,360,4.506,483,3.79,492,3.083,507,3.058,510,1.462,513,6.33,561,6.09,570,1.285,571,2.879,601,3.109,613,3.697,693,3.046,725,2.599,748,4.362,803,2.945,1022,5.099,1031,5.534,1039,4.673,1056,2.164,1057,5.534,1058,8.256,1059,4.354,1060,4.603,1061,4.603,1062,4.603,1063,1.813,1064,3.541,1065,3.896,1066,4.603,1067,8.256,1068,4.168,1069,3.011,1070,4.603]],["t/2790",[7,1.854,14,1.002,22,1.643,27,0.315,32,1.737,53,2.674,87,2.137,90,1.39,99,1.618,107,2.137,131,1.942,133,1.299,140,3.044,147,1.846,157,2.582,163,1.433,168,2.646,169,3.652,171,3.72,173,3.92,174,2.323,186,2.632,188,2.064,189,1.277,195,2.344,229,1.544,231,1.06,232,1.787,234,2.082,244,2.673,245,1.929,257,1.625,262,1.439,283,1.842,327,4.584,333,1.777,338,4.47,349,4.45,369,4.224,373,2.317,377,2.082,379,2.467,385,3.597,386,3.35,395,2.137,413,2.845,449,1.903,462,0.959,542,2.725,545,2.467,553,1.531,570,1.572,585,2.998,587,3.307,673,2.064,719,2.064,789,1.916,854,4.102,868,1.89,890,2.541,904,1.985,907,2.625,912,2,953,2.137,967,6.449,970,7.041,990,3.207,1009,3.093,1029,6.114,1030,8.221,1031,8.547,1071,6.623,1072,5.765,1073,4.52,1074,4.52,1075,3.542,1076,3.093,1077,5.323,1078,5.627,1079,3.207,1080,3.832,1081,3.832,1082,3.832,1083,3.832,1084,5.096]],["t/2792",[22,1.716,26,1.132,27,0.532,90,3.271,121,1.009,148,1.215,151,3.646,166,2.701,186,1.977,189,2.16,218,4.012,227,1.832,234,7.04,292,2.971,349,2.567,385,3.077,395,5.781,396,2.413,400,2.058,423,6.559,495,3.754,570,1.673,582,4.012,616,4.116,666,5.11,667,5.889,668,3.022,673,3.491,719,3.491,957,8.11,1074,4.811,1085,5.989,1086,5.423,1087,5.989,1088,5.978,1089,5.989,1090,5.989,1091,5.989,1092,5.989,1093,4.012,1094,5.989,1095,9.582,1096,5.665,1097,5.989]],["t/2794",[16,2.561,23,1.94,157,1.604,235,2.501,259,1.4,507,3.232,513,4.474,562,3.652,570,2.654,571,3.042,666,3.59,802,4.111,1022,4.05,1027,4.937,1056,3.423,1057,5.847,1098,8.044,1099,5.685,1100,5.071,1101,5.717,1102,8.044,1103,4.517,1104,5.6,1105,6.885,1106,5.847,1107,6.885,1108,6.29,1109,7.465,1110,5.144,1111,5.847,1112,6.591,1113,6.885,1114,6.356]],["t/2796",[1,1.262,2,2.961,3,3.346,7,3.172,22,1.248,27,0.746,96,4.654,97,2.258,104,2.122,120,2.656,123,1.715,157,1.336,167,5.621,174,4.298,186,3.735,200,2.794,202,3.234,207,1.715,210,4.641,227,1.333,257,2.781,327,3.192,356,4.897,396,1.412,406,2.205,407,3.324,462,2.611,735,3.077,736,2.402,948,4.574,1115,6.558,1116,5.293,1117,6.061,1118,3.965,1119,6.558,1120,5.733,1121,5.293]],["t/2798",[1,2.171,2,2.823,9,1.506,10,2.519,22,0.979,27,0.422,60,2.023,96,2.294,97,1.278,104,1.665,123,1.441,133,1.744,140,2.571,157,2.193,167,2.771,174,1.962,185,2.358,186,3.983,235,1.633,257,2.181,259,1.619,262,1.931,269,2.046,285,3.316,312,1.278,313,2.937,327,6.158,333,2.385,338,3.955,493,5.144,576,4.305,601,1.613,663,4.616,805,2.512,807,2.59,808,2.583,904,2.664,949,3.524,976,6.39,1004,3.914,1052,2.571,1116,7.349,1117,7.057,1122,5.144,1123,4.198,1124,7.123,1125,4.305,1126,3.465,1127,3.657,1128,4.305,1129,3.734,1130,5.144]],["t/2800",[22,1.877,85,4.221,96,4.397,97,2.448,123,1.86,140,4.928,186,3.611,356,4.284,400,3.13,434,2.619,523,3.839,587,5.354,671,5.447,1116,7.956]],["t/2802",[19,5.213,26,1.471,96,4.789,97,2.667,99,2.237,147,2.553,157,2.408,167,5.784,174,3.213,186,2.568,189,2.807,203,5.5,257,3.57,288,4.022,297,3.66,327,4.099,333,3.904,349,3.335,369,4.695,544,5.034,904,4.362,953,5.986,968,6.349,1129,6.112,1131,7.971,1132,5.672]],["t/2804",[22,1.722,81,2.965,94,3.629,96,4.034,97,2.247,111,4.056,121,1.408,125,3.645,178,3.835,186,2.759,240,6.431,253,4.269,294,5.824,370,7.985,371,7.985,372,7.695,373,5.468,377,4.913,378,6.565,379,5.824,380,7.3,381,6.431]],["t/2806",[22,1.667,28,3.885,42,7.067,83,5.369,96,3.906,97,2.175,121,1.363,149,6.501,166,2.623,186,3.672,234,4.756,289,6.501,382,3.845,395,6.136,418,5.578,579,5.719,666,3.992,668,4.084,1046,7.328,1133,7.328,1134,5.234,1135,5.178,1136,8.092]],["t/2808",[9,1.331,18,4.76,22,2.203,96,3.59,97,1.999,122,3.023,123,2.183,148,1.955,157,2.583,163,3.011,166,2.412,169,3.122,189,2.683,209,3.61,257,3.413,270,2.072,349,3.188,423,4.71,485,3.822,556,4.71,612,5.423,707,3.553,953,6.452,961,4.372,977,8.159,978,6.496,1032,4.71,1034,6.126]],["t/2810",[0,0.807,7,2.636,9,0.901,22,1.793,23,2.364,26,1.392,27,0.447,70,3.065,89,2.289,121,1.24,147,1.653,148,1.021,157,2.346,163,3.876,169,3.09,171,2.023,174,2.079,188,1.848,189,2.656,196,2.62,257,2.311,283,2.62,319,2.499,343,1.364,344,3.157,349,2.159,570,1.407,702,4.615,854,3.672,868,2.688,909,3.573,910,7.099,953,5.777,961,2.96,963,3.802,967,7.033,968,4.712,969,4.817,970,4.874,1052,2.724,1137,5.784,1138,6.233,1139,5.037]],["t/2812",[9,0.809,11,3.868,22,1.682,23,2.375,26,1.284,27,0.401,70,2.829,121,1.145,123,0.923,133,1.658,148,0.917,157,2.407,163,3.676,169,1.897,171,1.815,174,2.806,189,2.451,207,1.279,257,2.074,283,2.351,343,1.224,423,2.862,570,1.263,571,1.889,702,3.603,719,2.635,720,2.573,868,2.412,909,3.298,910,6.733,953,5.48,961,2.657,963,3.412,967,4.349,968,4.349,969,4.446,970,4.498,1017,10.225,1018,6.429,1063,1.781,1137,7.134,1138,7.688,1140,4.52,1141,3.722,1142,4.52]],["t/2814",[9,0.771,22,1.634,23,2.344,26,1.239,27,0.383,59,1.664,60,2.274,107,1.315,121,1.104,148,0.874,157,2.372,158,2.886,163,3.21,169,1.808,171,1.73,174,1.779,189,2.364,207,1.219,231,1.29,257,1.977,283,2.241,304,4.24,343,1.167,485,2.214,507,1.913,525,3.902,570,1.203,571,2.739,720,2.452,803,2.757,868,2.3,909,3.181,910,6.571,912,3.702,953,4.786,961,2.533,963,3.252,967,4.194,968,4.194,969,4.288,970,4.338,1014,4.288,1016,4.947,1017,5.724,1019,9.981,1032,4.15,1034,3.548,1137,6.963,1143,7.933,1144,4.947,1145,7.093,1146,7.093,1147,7.093,1148,4.309,1149,4.309,1150,4.309,1151,3.902,1152,2.923]],["t/2816",[0,1.507,14,1.637,16,1.558,22,2.102,23,2.099,25,5.32,26,1.093,27,0.906,30,3.357,33,1.624,34,1.775,84,1.341,89,2.628,102,2.398,103,3.292,121,1.718,124,2.197,148,2.18,157,1.275,176,3.784,189,2.933,197,2.68,209,2.807,234,3.4,318,3.784,344,3.625,396,1.894,400,1.987,482,2.616,783,4.03,909,2.807,950,5.051,954,3.784,1153,10.096,1154,10.096,1155,3.828,1156,8.213,1157,7.101,1158,8.132,1159,5.238]],["t/2818",[0,1.789,9,1.829,16,2.198,102,3.381,112,6.407,148,2.264,215,3.815,225,2.614,226,3.055,319,4.046,325,6.822,326,6.305,397,4.117,662,3.725,1160,6.283,1161,6.276]],["t/2820",[26,1.82,56,6.618,235,3.308,321,7.019,328,7.313,331,7.563,917,6.29]],["t/2822",[1,1.801,2,2.341,9,1.547,39,4.644,122,3.512,148,1.753,178,3.966,208,6.022,215,4.276,325,5.038,328,5.591,331,6.789,333,4.337,406,1.977,482,3.909,805,2.581,911,7.317,1161,6.65,1162,9.354]],["t/2824",[0,1.046,9,1.582,26,1.671,27,0.785,86,2.339,99,1.877,122,2.653,123,1.333,130,4.052,133,2.395,143,4.052,181,2.243,215,4.189,223,3.508,262,2.653,322,6.603,328,5.719,331,5.128,440,4.84,510,2.808,601,3,660,2.899,662,2.981,717,4.223,805,1.949,1134,4.223,1161,5.023,1163,6.176,1164,7.065,1165,7.065,1166,6.248,1167,7.065,1168,5.023,1169,6.176,1170,8.006,1171,7.065,1172,7.065,1173,5.376,1174,9.567,1175,6.529,1176,7.065,1177,7.065,1178,7.065]],["t/2826",[0,1.018,1,1.323,2,3.305,26,1.639,27,0.943,86,1.481,120,2.836,122,2.58,123,1.911,124,1.57,130,2.565,143,3.94,207,1.17,213,2.039,215,3.963,223,2.221,225,1.324,226,1.548,227,2.335,231,1.237,235,1.42,255,2.494,303,2.781,313,1.72,325,7.07,328,6.392,338,3.559,406,2.79,412,2.163,917,4.302,1179,5.228,1180,4.133,1181,4.133,1182,4.473,1183,7.313,1184,4.473,1185,4.133,1186,3.499,1187,5.101,1188,5.75,1189,2.88]],["t/2828",[0,1.447,39,4.851,122,4.421,148,1.831,178,4.142,322,5.549,325,5.263,326,6.145,397,4.557,911,7.642,1160,7.178,1190,9.029]],["t/2830",[6,3.908,9,1.677,10,2.133,26,1.979,27,0.93,60,2.043,99,2.048,130,4.422,133,2.614,148,1.445,182,3.778,207,2.016,262,2.895,293,4.773,322,4.379,326,4.024,440,5.282,510,2.977,532,4.024,601,2.418,733,3.999,896,3.778,1160,5.76,1166,6.624,1169,6.74,1170,6.452,1190,7.125,1191,7.71,1192,7.71,1193,8.413,1194,7.71,1195,10.142,1196,7.71,1197,7.71]],["t/2832",[0,1.046,26,2.03,27,0.954,105,4.656,120,2.557,123,2.046,130,4.052,143,5.486,225,2.092,226,2.445,227,2.362,235,2.243,325,7.112,328,7.486,472,7.28,917,5.577,1160,5.434,1180,6.529,1181,6.529,1186,5.526,1198,7.065]],["t/2834",[9,0.784,14,1.24,22,2.396,23,1.469,27,0.933,29,2.444,33,1.864,37,2.225,81,2.844,84,2.661,99,1.26,104,1.535,131,2.404,143,2.72,148,0.889,151,4.043,157,0.966,160,2.404,161,1.581,181,1.506,186,2.192,198,2.669,207,1.24,219,2.599,229,1.912,248,6.794,333,2.199,345,3.61,358,4.147,359,2.339,418,2.404,444,2.901,457,3.373,464,3.308,549,4.88,553,1.895,571,1.832,666,2.162,724,3.828,778,2.404,994,3.054,995,3.013,1074,3.521,1134,2.836,1199,7.656,1200,5.468,1201,6.456,1202,2.324,1203,2.936,1204,4.564,1205,7.186,1206,5.37,1207,4.744,1208,3.013,1209,4.744]],["t/2836",[22,1.781,157,2.336,161,3.822,197,4.005,231,2.588,390,5.721,395,5.215,549,4.159,570,2.414,666,5.652,668,4.362,684,6.376,1206,7.098]],["t/2838",[16,1.748,23,2.165,26,1.663,34,1.991,84,1.504,85,3.005,99,1.865,123,1.324,137,3.636,148,1.316,157,2.362,173,4.52,186,2.141,189,3.175,201,4.151,231,2.635,262,2.636,349,3.772,356,3.051,418,4.828,549,3.922,570,1.812,619,6.136,628,4.244,666,3.2,668,3.274,684,3.609,796,4.896,909,4.271,1024,5.974,1025,7.971,1033,3.781,1210,7.02,1211,7.02,1212,5.665,1213,7.02,1214,6.136,1215,7.02,1216,5.665,1217,7.02]],["t/2840",[23,2.312,26,1.62,102,3.553,161,3.091,176,5.607,189,3.091,231,2.566,507,3.805,666,4.228,668,4.325,684,5.865,909,5.115,1218,8.571,1219,8.571]],["t/2842",[22,1.457,26,1.337,27,0.628,84,1.641,107,2.16,121,1.758,148,1.892,165,6.751,197,3.278,216,3.127,225,2.267,226,2.65,231,3.124,248,7.177,490,3.613,549,4.811,731,5.077,1201,6.467,1206,4.74,1220,6.174,1221,7.896,1222,6.693,1223,4.93,1224,4.863,1225,5.989]],["t/2844",[18,5.682,22,1.354,23,2.125,27,0.584,81,3.15,84,1.524,120,2.265,121,1.496,123,1.342,148,1.801,157,1.957,158,4.402,185,3.26,198,4.001,231,3.011,248,5.744,313,2.735,423,4.161,426,7.754,449,3.53,450,4.715,549,2.579,570,1.835,571,3.711,841,3.63,909,3.189,1134,4.251,1201,3.83,1208,4.516,1226,8.399,1227,8.399,1228,9.609,1229,6.571,1230,5.279,1231,5.056,1232,5.411,1233,3.484,1234,3.63,1235,5.562]],["t/2846",[0,1.726,22,1.555,27,0.864,33,2.12,34,2.317,78,3.81,84,1.751,102,3.129,148,1.974,157,1.664,161,2.723,231,2.913,242,3.168,251,3.322,323,3.464,549,4.227,570,2.109,666,4.801,668,4.911,684,4.201,796,8.886,954,4.939,1206,6.519,1236,5.93]],["t/2848",[0,1.118,23,2.162,26,1.319,27,0.62,59,1.771,81,2.476,84,2.143,123,1.425,157,1.538,161,2.517,163,2.824,213,4.56,231,3.303,248,4.514,431,4.33,549,4.332,550,5.577,553,3.017,571,3.863,635,3.386,666,4.56,1199,5.087,1201,4.068,1229,6.978,1237,6.978,1238,7.551,1239,6.601,1240,10.003,1241,7.26,1242,7.551,1243,6.094]],["t/2850",[0,0.849,22,2.142,27,0.796,29,1.951,33,2.145,34,1.627,39,4.105,50,4.364,79,3.595,84,1.229,90,2.08,92,3.322,93,3.289,94,3.318,95,5.07,99,2.576,121,0.893,131,2.907,137,4.283,141,2.81,143,3.289,148,1.075,157,2.292,167,3.089,168,2.493,171,2.128,173,3.693,174,2.188,186,3.772,190,2.48,209,2.572,216,2.343,223,2.848,227,1.166,229,2.311,247,4.629,256,3.289,257,2.432,262,3.105,283,2.757,327,2.792,338,4.283,345,4.364,349,2.272,351,3.929,356,2.493,384,4,393,2.281,449,2.848,868,2.829,871,4.258,904,2.971,905,5.014,949,3.929,1002,4.8,1003,4.364,1004,4.364,1005,4.629,1006,5.3,1007,5.3,1008,2.867,1009,6.673,1010,4.8,1011,4.486,1012,5.014,1013,4.486]],["t/2852",[0,0.551,12,1.087,14,0.557,22,1.523,23,2.176,26,1.557,27,0.697,33,0.552,44,2.397,60,1.315,65,4.206,69,1.177,75,1.626,81,0.698,89,0.894,90,2.452,94,0.854,95,4.258,107,0.601,121,1.052,122,0.799,123,0.936,140,1.064,147,0.646,148,0.698,153,1.156,157,2.016,160,1.887,161,1.983,162,1.064,163,0.796,165,2.226,166,1.486,167,1.147,168,0.925,169,2.308,171,2.508,176,1.287,186,2.831,189,3.094,197,2.894,207,0.557,209,0.955,212,0.912,213,1.697,227,1.209,231,1.372,235,0.676,248,1.273,257,1.579,259,0.378,270,0.548,288,1.017,323,2.103,327,1.036,340,4.041,348,1.434,349,1.965,360,2.999,369,2.076,393,0.847,396,0.802,400,0.676,418,1.079,450,1.412,462,1.242,510,0.625,513,1.209,561,1.221,562,1.726,570,1.745,571,2.298,587,4.037,588,1.187,658,2.672,689,2.597,702,1.824,719,2.006,729,0.858,731,1.412,779,2.156,802,2.589,817,3.28,856,1.514,909,1.67,912,1.943,953,2.076,961,1.156,967,5.02,968,3.997,969,2.251,970,3.034,974,1.043,986,3.255,987,3.255,995,3.151,1014,2.251,1016,2.597,1017,3.005,1019,1.782,1020,3.557,1022,2.551,1024,2.057,1026,2.431,1027,3.11,1028,3.601,1029,1.718,1030,1.665,1031,2.764,1032,2.179,1033,1.147,1034,3.775,1035,0.965,1036,1.095,1037,1.485,1038,1.072,1039,1.335,1040,1.968,1041,3.289,1042,3.45,1043,3.441,1044,1.665,1045,1.718,1046,3.116,1047,1.861,1048,1.968,1049,1.665,1050,1.581,1051,1.968,1052,1.064,1053,1.581,1054,1.861,1055,1.861,1104,1.514,1110,2.432,1244,1.665,1245,2.702,1246,3.723,1247,2.129,1248,3.723,1249,2.334,1250,3.723,1251,8.49,1252,3.723,1253,3.723,1254,3.723,1255,2.076,1256,2.469,1257,2.129,1258,2.129,1259,2.129,1260,3.723,1261,2.129,1262,2.129,1263,2.129,1264,2.129,1265,2.129,1266,2.129,1267,2.129,1268,2.129,1269,2.129,1270,2.129,1271,2.129,1272,2.129,1273,2.129,1274,1.968,1275,1.718]],["t/2854",[0,1.099,7,1.797,9,1.228,22,1.131,23,1.006,26,1.619,27,0.885,30,1.417,34,1.054,60,1.967,62,2.911,64,2.99,99,0.987,104,1.922,107,1.048,110,3.018,121,0.578,123,0.701,148,0.696,157,2.373,160,1.883,161,2.826,167,4.568,176,3.591,178,2.519,181,1.18,186,3.875,189,3.595,197,1.591,223,1.845,235,1.886,251,2.416,259,1.648,262,1.395,284,2.072,323,1.575,339,1.374,340,4.437,360,3.591,373,2.246,483,2.827,492,2.3,507,3.045,510,1.091,513,5.897,561,5.671,570,0.959,571,3.275,601,2.907,613,2.758,658,5.327,693,2.272,725,1.939,729,2.394,748,3.476,798,2.642,803,2.197,995,2.36,1022,4.36,1031,4.41,1039,3.724,1056,1.615,1057,5.51,1058,7.837,1059,3.248,1060,5.49,1061,3.434,1062,5.49,1063,1.353,1064,2.642,1065,2.906,1066,3.434,1067,7.837,1068,3.109,1069,2.246,1276,3.716,1277,3.716,1278,3.716,1279,3.716,1280,3.716,1281,3.716,1282,3.716]],["t/2856",[7,2.016,22,1.523,27,0.342,32,1.889,53,2.856,90,1.512,99,1.107,107,2.55,131,2.112,133,1.413,140,3.251,147,1.972,157,2.578,163,1.558,168,2.827,169,3.802,171,3.855,173,4.188,174,2.481,186,2.44,188,2.205,189,1.389,195,2.549,229,1.679,231,1.153,232,1.943,234,2.263,244,2.906,245,2.097,257,1.767,262,1.565,283,2.003,327,4.772,333,1.932,338,4.682,349,4.446,369,4.46,377,2.263,379,2.683,385,3.088,395,2.323,449,2.069,462,1.043,545,2.683,553,1.665,570,1.679,585,3.26,587,2.263,673,2.245,789,2.083,854,4.382,868,2.055,890,2.763,904,2.159,907,2.855,953,2.323,967,6.417,970,7.056,990,3.487,1009,3.363,1029,6.456,1030,8.488,1031,8.758,1071,7.902,1072,6.088,1073,4.829,1074,4.829,1075,3.851,1076,3.363,1077,3.643,1078,3.851,1084,5.443]],["t/2858",[22,1.716,26,1.132,27,0.532,90,3.271,121,1.009,148,1.215,151,3.646,166,2.701,186,1.977,189,2.16,218,4.012,227,1.832,234,7.04,292,2.971,349,2.567,385,3.077,395,5.781,396,2.413,400,2.058,423,6.559,495,3.754,570,1.673,582,4.012,616,4.116,666,5.11,667,5.889,668,3.022,673,3.491,719,3.491,957,8.11,1074,4.811,1085,5.989,1086,5.423,1087,5.989,1088,5.978,1089,5.989,1090,5.989,1091,5.989,1092,5.989,1093,4.012,1094,5.989,1095,9.582,1096,5.665,1097,5.989]],["t/2860",[16,2.561,23,1.94,157,1.604,235,2.501,259,1.4,507,3.232,513,4.474,562,3.652,570,2.654,571,3.042,666,3.59,802,4.111,1022,4.05,1027,4.937,1056,3.423,1057,5.847,1098,8.044,1099,5.685,1100,5.071,1101,5.717,1102,8.044,1103,4.517,1104,5.6,1105,6.885,1106,5.847,1107,6.885,1108,6.29,1109,7.465,1110,5.144,1111,5.847,1112,6.591,1113,6.885,1114,6.356]],["t/2862",[1,1.255,2,1.632,3,1.936,22,1.241,27,0.969,46,2.158,64,4.557,95,4.325,123,1.23,148,1.697,157,2.289,160,3.304,161,3.746,167,3.512,174,2.487,176,3.941,186,4.115,189,3.018,257,3.839,319,2.989,323,2.764,327,4.407,340,6.218,356,2.833,360,3.941,385,3.095,462,2.603,658,6.583,729,2.627,953,3.635,1022,3.352,1275,5.261,1283,9.054,1284,6.519]],["t/2864",[1,1.845,2,2.793,3,2.105,7,1.678,9,1.172,10,1.961,19,2.147,22,0.66,26,0.606,27,0.461,60,1.489,85,1.485,95,3.893,99,0.922,104,1.819,120,1.921,123,1.689,133,1.176,140,2.81,147,1.052,157,2.213,167,4.824,174,3.657,185,1.59,186,3.955,189,1.156,200,1.478,202,1.711,203,2.266,207,0.907,210,2.869,227,0.705,235,1.101,257,2.383,259,1.26,262,1.302,269,1.38,285,2.58,288,1.657,297,1.508,312,0.862,313,2.162,327,5.666,333,2.606,338,2.912,349,1.374,356,3.892,369,1.934,396,0.747,400,1.101,406,1.498,407,1.758,434,0.922,462,1.407,493,3.787,523,1.351,544,2.074,576,2.903,587,1.884,601,1.088,663,3.398,671,1.917,735,1.627,736,1.485,805,1.955,807,2.016,808,2.01,904,2.912,948,2.419,949,2.376,953,3.951,968,3.324,975,4.704,1004,2.64,1052,1.734,1118,2.097,1120,3.032,1121,2.799,1123,3.267,1124,5.543,1125,2.903,1126,2.337,1127,2.466,1129,4.08,1131,5.261,1132,2.337,1285,3.469,1286,8.955,1287,7.087,1288,3.469,1289,3.469,1290,3.032,1291,3.469]],["t/2866",[1,1.185,2,1.54,7,2.976,8,4.145,9,1.018,22,1.919,26,1.075,27,0.985,60,1.63,81,2.017,84,1.863,95,4.153,99,2.31,121,0.958,123,1.161,160,6.251,161,4.377,171,2.284,174,3.847,178,2.609,186,3.526,189,2.051,207,1.609,242,2.386,251,2.502,253,2.904,257,2.609,262,2.311,304,3.678,323,2.609,356,4.382,443,3.564,452,3.529,460,3.639,462,1.54,553,4.028,624,4.145,725,3.212,948,4.292,953,3.431,994,3.962,1120,5.379,1121,4.966,1233,3.015,1292,6.154,1293,3.564]],["t/2868",[22,1.736,81,2.99,94,3.659,95,4.357,111,4.09,121,1.42,125,3.676,178,3.867,186,2.782,240,6.484,253,4.304,294,5.872,370,8.026,371,8.026,372,7.734,373,5.514,377,4.954,378,6.62,379,5.872,380,7.36,381,6.484]],["t/2870",[9,1.322,18,4.725,22,2.195,95,3.817,122,3.001,123,2.175,148,1.946,157,2.577,163,2.989,166,2.394,186,2.437,189,2.663,209,3.583,257,3.388,270,2.057,323,3.388,349,3.165,423,4.676,462,2,485,3.794,556,4.676,612,5.383,707,3.527,953,6.429,961,4.34,977,8.12,978,6.449,1032,4.676,1034,6.081]],["t/2872",[0,0.807,7,2.636,9,0.901,22,1.793,23,2.364,26,1.392,27,0.447,70,3.065,89,2.289,95,4.95,121,1.24,147,1.653,148,1.021,157,2.346,163,3.876,169,3.09,171,2.023,174,2.079,188,1.848,189,2.656,196,2.62,257,2.311,283,2.62,319,2.499,343,1.364,344,3.157,349,2.159,570,1.407,702,4.615,854,3.672,868,2.688,909,3.573,953,5.777,961,2.96,963,3.802,967,7.033,968,4.712,969,4.817,970,4.874,1052,2.724,1137,5.784,1138,6.233,1139,5.037]],["t/2874",[9,0.809,11,3.868,22,1.682,23,2.375,26,1.284,27,0.401,70,2.829,95,4.695,121,1.145,123,0.923,133,1.658,148,0.917,157,2.407,163,3.676,169,1.897,171,1.815,174,2.806,189,2.451,207,1.279,257,2.074,283,2.351,343,1.224,423,2.862,570,1.263,571,1.889,702,3.603,719,2.635,720,2.573,868,2.412,909,3.298,953,5.48,961,2.657,963,3.412,967,4.349,968,4.349,969,4.446,970,4.498,1017,10.225,1018,6.429,1063,1.781,1137,7.134,1138,7.688,1140,4.52,1141,3.722,1142,4.52]],["t/2876",[9,0.859,22,1.743,23,2.353,26,1.343,27,0.426,60,1.376,95,4.836,121,1.197,148,0.973,157,2.062,160,2.632,161,3.602,163,1.942,169,2.014,174,1.981,186,3.452,189,2.563,227,1.055,257,2.202,283,2.496,319,2.38,340,3.104,343,1.299,404,2.69,462,2.292,658,5.822,719,4.142,868,2.561,909,3.448,912,4.013,953,5.105,961,2.82,963,3.622,967,4.547,968,4.547,969,4.648,970,4.703,980,5.708,981,7.106,983,4.799,986,6.722,987,4.539,988,7.106,1137,5.581,1275,4.191,1294,5.268,1295,5.193]],["t/2878",[9,0.82,22,1.696,23,2.366,26,1.297,27,0.407,60,2.361,95,4.727,107,1.398,121,1.156,148,0.929,157,2.417,158,3.069,163,3.332,169,1.923,171,1.84,174,1.891,189,2.476,207,1.296,231,1.372,257,2.102,283,2.383,304,4.441,343,1.241,485,2.354,507,2.034,525,4.149,570,1.28,719,4.002,720,2.607,803,2.932,868,2.445,909,3.331,912,3.877,953,4.967,961,2.693,963,3.458,967,4.393,968,4.393,969,4.491,970,4.544,1019,9.654,1032,4.347,1034,3.773,1137,7.182,1143,8.233,1144,5.182,1148,4.582,1149,4.582,1150,4.582,1151,4.149,1152,3.108]],["t/2880",[0,1.134,22,2.15,27,0.927,29,2.604,32,3.471,33,2.619,78,3.571,84,1.641,92,4.435,93,4.391,94,3.072,98,6.325,99,2.682,137,3.966,141,3.751,143,4.391,157,2.056,167,4.124,174,2.921,186,2.335,195,4.683,257,3.246,327,3.727,338,3.966,345,5.826,354,7.526,356,3.328,392,2.661,775,5.34,904,3.966,1002,6.407,1003,5.826]],["t/2882",[0,0.896,9,1.001,22,1.152,23,2.079,26,1.745,27,0.497,33,1.57,64,3.046,81,1.984,98,6.221,99,1.608,104,1.958,157,2.035,166,2.574,167,3.26,189,3.33,212,3.679,231,1.674,259,1.076,288,2.891,313,2.328,349,2.397,354,3.794,360,5.195,523,2.357,562,2.806,571,2.337,587,3.287,779,3.505,802,3.158,803,3.579,817,4.41,909,2.714,967,5.081,968,5.081,969,3.658,995,3.844,1014,3.658,1015,5.29,1016,4.221,1020,3.618,1022,4.418,1024,3.344,1025,5.064,1026,2.965,1027,3.794,1029,4.884,1039,3.794,1110,5.612,1141,4.605,1249,3.794,1255,3.374,1256,4.013,1296,7.191,1297,6.052,1298,5.593,1299,4.146]],["t/2884",[22,1.468,23,2.217,26,1.347,27,0.633,33,2,98,5.744,99,2.694,157,2.308,186,2.352,189,2.57,231,2.133,242,2.99,396,1.66,400,2.448,523,3.949,570,1.99,571,2.978,667,5.036,673,4.153,719,4.153,729,3.107,803,6.701,909,3.458,967,4.559,968,4.559,969,4.661,1226,6.74,1296,9.483,1299,6.948]],["t/2886",[60,2.266,64,5.993,81,2.804,133,2.899,147,2.593,157,1.742,189,2.85,248,5.112,259,1.52,327,5.796,354,7.464,360,5.17,507,4.885,542,6.08,601,2.681,720,4.498,1022,4.397,1036,4.397,1037,5.965,1056,3.717,1057,6.349,1300,7.476,1301,7.563]],["t/2890",[16,2.561,23,1.94,157,1.604,235,2.501,259,1.4,507,3.232,513,4.474,562,3.652,570,2.654,571,3.042,666,3.59,802,4.111,1022,4.05,1027,4.937,1056,3.423,1057,5.847,1098,8.044,1099,5.685,1100,5.071,1101,5.717,1102,8.044,1103,4.517,1104,5.6,1105,6.885,1106,5.847,1107,6.885,1108,6.29,1109,7.465,1110,5.144,1111,5.847,1112,6.591,1113,6.885,1114,6.356]],["t/2892",[22,1.911,26,2.09,27,0.824,33,2.604,98,5.088,107,2.831,121,1.562,123,1.894,153,5.452,189,3.988,227,2.04]],["t/2894",[1,1.396,2,3.067,3,3.489,7,3.508,27,0.595,98,5.571,104,2.347,120,2.77,123,1.837,157,1.477,167,3.906,174,3.715,186,2.212,200,3.09,210,4.97,227,1.474,257,3.075,285,2.64,327,3.53,354,6.89,356,4.231,396,1.561,406,2.323,407,3.676,462,2.751,735,3.402,736,2.573,1118,4.384,1302,6.339,1303,6.702,1304,6.702,1305,7.252]],["t/2896",[1,2.224,2,2.892,9,1.567,10,2.621,22,1.048,60,2.127,98,2.79,99,1.463,123,1.514,129,3.221,140,4.012,157,2.121,167,4.324,174,2.1,223,2.733,257,2.334,259,1.684,262,2.067,269,2.19,285,3.791,312,1.367,313,3.087,327,5.808,354,8.216,493,5.407,601,1.726,663,4.853,805,2.614,807,2.695,808,2.687,904,2.852,949,3.772,1123,4.367,1124,7.41,1125,4.607,1127,3.914,1129,3.996,1302,7.017,1303,7.418,1304,7.418,1306,5.088,1307,5.088,1308,5.088]],["t/2898",[22,1.894,85,4.259,98,5.042,123,1.877,140,4.972,354,7.461,356,4.323,400,3.158,434,2.643,523,3.874,587,5.403,671,5.497,1302,8.696]],["t/2900",[19,5.335,26,1.505,98,5.523,99,2.29,147,2.613,157,2.434,166,2.582,167,5.87,174,3.288,189,2.873,203,5.629,257,3.654,288,4.117,297,3.746,319,3.951,327,4.196,333,3.996,349,3.414,354,5.403,544,5.152,904,4.465,953,6.075,1129,6.256,1131,8.089,1132,5.806]],["t/2902",[9,1.341,18,4.795,22,2.21,98,4.11,99,2.154,122,3.045,123,2.191,148,1.964,157,2.589,163,3.033,166,2.43,169,3.145,189,2.703,209,3.636,257,3.438,270,2.088,293,5.02,349,3.212,423,4.745,556,4.745,612,5.463,707,3.579,803,4.795,953,6.474,961,4.405,977,8.198,978,6.544]],["t/2904",[0,0.769,7,2.512,9,0.859,22,1.743,23,2.363,26,1.343,27,0.426,59,1.218,70,1.997,75,4,89,2.181,98,5.131,121,1.197,147,1.574,148,0.973,157,2.386,163,3.786,169,2.982,171,1.927,174,1.981,188,1.76,189,2.563,196,2.496,257,2.202,283,2.496,313,2.957,319,2.38,343,1.299,344,3.007,349,2.057,570,1.34,718,5.896,854,3.498,868,2.561,909,3.448,953,5.644,961,2.82,963,3.622,967,7.112,968,4.547,970,4.703,1052,2.596,1133,6.435,1137,5.581,1138,6.015,1296,6.435]],["t/2906",[9,0.964,22,1.862,23,2.378,26,1.461,27,0.478,75,3.653,98,5.418,121,1.302,148,1.092,157,1.993,163,3.659,169,2.26,171,2.162,174,2.223,189,2.788,257,2.47,283,2.801,313,3.217,343,1.458,523,2.269,570,1.504,718,5.385,719,3.139,868,2.874,909,3.75,953,5.455,961,3.165,963,4.064,967,4.945,968,4.945,970,5.115,1133,6.999,1137,6.071,1138,6.542,1296,10.157]],["t/2908",[18,5.632,22,1.336,27,0.576,90,2.546,94,2.817,95,3.353,96,3.131,97,1.743,98,3.558,99,2.53,122,2.636,156,5.095,157,2.649,163,2.625,168,3.051,186,2.905,229,2.829,262,3.576,294,4.52,338,3.636,393,2.792,556,4.107,590,6.487,667,4.585,707,3.098,731,4.654,802,3.664,907,4.809,1003,9.898,1126,7.283,1152,7.268,1309,6.487,1310,8.725,1311,5.665,1312,7.02]],["t/2910",[9,1.266,22,1.457,33,2.619,34,2.863,35,5.557,38,4.269,54,4.683,60,3.181,99,3,107,2.16,121,1.192,123,1.445,124,2.688,128,4.683,148,1.892,152,4.863,168,3.328,181,2.431,186,3.445,190,3.311,243,3.592,393,3.045,413,5.684,560,4.435,793,4.527,795,5.34,861,4.391,896,5.883,898,4.577,899,4.629,900,4.93,901,7.494,902,5.34]],["t/2912",[23,1.571,96,4.137,97,2.303,122,3.482,148,1.738,166,3.417,186,3.931,216,3.788,372,6.354,376,8.108,582,5.741,1313,7.956,1314,7.815,1315,9.275,1316,11.407]],["t/2914",[167,5.834,185,4.965,186,3.817,1152,6.79]],["t/2916",[22,1.811,123,1.795,148,2.172,186,3.811,216,3.887,242,3.69,243,6.253,356,4.136,544,5.688,582,5.891,1039,5.965,1074,7.064]],["t/2918",[0,1.763,17,6.689,22,2.064,27,0.89,53,3.755,148,1.603,162,4.275,163,3.198,178,3.626,204,4.606,216,3.493,229,3.446,262,3.211,357,4.857,393,3.402,431,4.904,553,3.416,974,4.19,1126,5.761,1317,9.479,1318,6.689,1319,10.02,1320,7.476,1321,10.843,1322,7.156]],["t/2920",[22,1.811,86,4.305,121,1.481,159,5.568,215,3.282,225,2.818,226,3.293,349,3.769,662,4.015,697,5.965,1160,5.405,1323,8.602,1324,7.064,1325,6.41,1326,7.444]],["t/2922",[121,1.823,215,4.039,259,2.081,333,4.49,482,4.048,542,6.885,662,4.086,697,6.07,1160,6.652,1323,7.189,1326,7.575,1327,7.369,1328,7.815]],["t/2924",[22,1.205,27,0.52,46,2.096,84,1.901,86,2.096,104,2.871,121,1.885,125,2.551,157,2.735,159,3.705,166,1.897,178,2.684,188,2.146,259,1.125,293,3.919,294,6.593,333,2.936,339,3.279,349,4.395,378,4.595,476,3.827,485,3.006,549,3.218,662,3.743,666,2.886,707,2.794,735,2.97,774,4.501,778,3.209,802,3.304,847,4.416,867,3.785,896,3.102,1103,3.631,1135,5.245,1144,4.416,1233,3.102,1323,4.7,1326,4.952,1329,6.077,1330,4.501,1331,5.851,1332,6.331,1333,5.298,1334,6.331,1335,4.416,1336,5.298,1337,6.331]],["t/2926",[4,5.754,86,3.354,215,3.494,241,5.649,268,8.176,359,4.996,631,4.295,697,6.351,1160,5.754,1323,8.932,1338,7.066]],["t/2928",[0,1.074,20,4.119,22,1.38,27,1.006,53,3.184,86,2.401,107,2.045,121,1.964,123,2.074,152,4.606,202,3.576,207,1.896,215,2.501,225,2.147,226,2.51,227,1.979,258,4.08,284,4.043,482,3.031,601,2.274,658,3.906,697,6.103,792,4.736,880,3.168,1160,6.243,1323,9.368,1326,5.672,1339,10.158,1340,6.068,1341,6.702,1342,6.702,1343,6.702,1344,6.339]],["t/2930",[0,1.175,22,1.51,27,0.651,39,3.939,86,2.627,93,6.59,102,3.039,103,4.172,121,1.788,124,2.785,130,4.55,147,2.405,148,1.487,163,2.967,184,2.835,209,3.558,216,3.24,227,1.612,237,4.346,238,4.969,253,3.744,318,4.796,319,4.737,320,5.108,322,4.506,325,6.19,326,5.393,328,4.742,329,5.64,330,6.639,331,5.758,332,6.206]],["t/2931",[0,1.011,9,0.734,16,1.105,22,1.3,23,1.881,26,2.165,27,0.875,34,1.258,53,1.948,59,1.041,81,2.239,95,2.119,104,1.436,107,1.251,120,1.046,121,1.063,123,1.904,130,2.544,147,1.345,148,0.831,184,3.341,225,2.022,226,2.363,227,1.388,235,2.968,238,1.918,322,4.728,325,7.014,326,2.315,328,7.176,329,8.535,573,1.804,601,1.391,828,3.511,911,3.47,912,2.315,913,2.233,915,4.1,916,4.1,917,5.48,918,4.1,919,6.965,920,4.1,924,5.069,925,5.069,926,3.713,1224,2.818,1345,9.188,1346,4.437,1347,4.437,1348,4.437]],["t/2934",[9,1.56,26,1.648,227,1.917,322,5.358,325,6.209,343,2.361,392,2.486,420,3.906,601,2.958,764,2.676,919,10.416,926,7.895,928,5.082,929,8.718,1345,8.195,1349,9.434]],["t/2936",[9,1.602,120,2.283,238,4.187,325,6.781,326,5.054,343,2.424,392,2.552,396,2.085,523,3.771,764,2.747,828,4.979,931,5.26,1345,8.326,1350,9.684]],["t/2938",[9,1.534,26,1.62,34,2.631,122,3.482,235,2.945,238,4.01,322,5.268,325,6.654,326,4.84,328,7.385,343,2.321,392,2.444,764,2.631,928,4.996,937,8.571,1345,8.11,1351,9.275]],["t/2940",[9,1.534,26,1.992,235,2.945,325,6.144,328,7.385,343,2.321,392,2.444,764,2.631,917,6.352,924,6.885,925,6.885,928,4.996,939,7.761,1345,8.11,1352,9.275]],["t/2942",[9,1.484,122,3.369,184,3.206,186,2.736,227,1.823,238,3.879,325,6.556,326,4.682,328,7.275,330,7.507,331,6.512,332,8.741,343,2.245,392,2.364,396,1.931,764,2.545,941,7.017,942,7.507,1345,7.945,1353,8.971]],["t/2944",[9,1.547,122,3.512,130,5.364,235,2.97,238,4.045,322,5.313,325,6.679,326,4.882,329,8.816,343,2.341,392,2.465,764,2.653,928,5.038,944,8.644,1345,8.152,1354,9.354]],["t/2946",[9,1.534,26,1.992,235,2.945,325,6.144,329,8.783,343,2.321,392,2.444,764,2.631,917,6.352,924,6.885,925,6.885,928,4.996,939,7.761,1345,8.11,1355,9.275]],["t/2948",[9,1.534,184,3.315,186,2.829,227,1.885,325,6.144,329,8.783,330,7.761,331,6.732,332,8.922,343,2.321,392,2.444,396,1.997,764,2.631,941,7.255,942,7.761,1345,8.11,1356,9.275]],["t/2950",[22,1.532,27,0.95,32,3.649,33,2.088,44,5.183,46,2.665,57,5.843,81,2.639,102,3.084,141,5.111,153,4.372,303,3.258,323,3.413,359,5.707,631,3.413,698,5.423,729,3.244,844,4.17,861,5.982,898,6.235,899,6.306,913,4.052,1357,3.776,1358,7.439,1359,5.046,1360,7.037,1361,6.736,1362,5.515,1363,6.103,1364,6.297,1365,7.037]],["t/2952",[0,1.219,22,2.014,27,0.869,33,2.135,37,3.861,81,2.698,86,2.725,90,2.986,125,3.317,186,2.511,194,4.816,216,3.362,243,3.861,261,4.675,359,4.059,361,5.741,398,4.92,553,4.227,582,5.095,673,4.434,861,4.72,913,4.143,1330,5.852,1357,3.861,1366,7.195,1367,7.607,1368,7.607,1369,8.052,1370,5.852,1371,6.888,1372,7.607,1373,6.11,1374,5.095]],["t/2954",[0,1.257,7,4.104,16,2.113,22,2.377,27,0.886,33,2.799,121,1.321,148,1.59,181,2.694,188,2.876,236,5.018,237,4.648,263,6.556,436,3.805,656,4.648,735,3.981,795,5.918,902,5.918,1335,5.918,1375,7.101,1376,5.463,1377,7.842,1378,5.716,1379,6.848,1380,6.638,1381,4.915]],["t/2956",[0,1.44,1,1.11,6,4.929,19,3.569,22,1.58,27,0.873,37,3.894,38,3.215,46,1.909,53,2.531,60,1.528,78,3.871,81,1.89,107,1.626,108,5.038,120,1.359,121,0.897,148,1.994,171,2.14,188,4.34,207,1.508,256,3.306,258,4.67,263,3.186,288,3.965,323,2.444,382,2.531,396,1.241,557,3.526,601,1.808,602,4.825,658,3.106,662,2.433,696,3.823,729,3.345,735,2.705,874,4.653,881,3.306,902,5.789,956,4.51,1052,2.882,1099,4.121,1328,4.653,1376,3.712,1382,6.946,1383,4.653,1384,5.04,1385,4.653,1386,5.328,1387,4.825,1388,2.825,1389,8.3,1390,5.766,1391,4.387,1392,5.04,1393,6.946,1394,5.766,1395,7.849,1396,5.04,1397,3.712]],["t/2958",[0,1.423,2,2.405,3,2.112,9,1.176,22,2.219,27,0.789,32,3.224,33,1.845,39,3.53,46,2.354,78,3.316,84,1.524,86,2.354,99,1.889,102,3.681,104,2.301,105,3.89,108,3.683,111,3.189,120,1.676,121,1.496,122,2.67,124,3.373,133,2.41,157,1.448,161,2.37,178,3.015,181,2.258,207,1.859,213,3.241,233,4.457,262,2.67,357,4.039,462,1.78,527,3.241,625,4.001,1206,4.402,1335,4.96,1380,8.513,1381,4.118,1398,5.95,1399,5.411,1400,5.411,1401,6.216,1402,6.571]],["t/2960",[631,4.638,632,5.613,1403,6.857]],["t/2962",[0,0.815,14,2.099,16,1.371,22,1.803,26,1.654,27,0.452,28,2.442,46,1.823,53,2.417,64,2.771,78,3.744,81,2.632,107,2.672,108,4.158,121,1.249,122,2.067,137,2.852,171,2.043,225,2.805,231,2.221,235,3.008,258,3.098,271,2.28,275,2.923,303,3.249,357,3.127,382,4.159,385,3.811,400,1.748,436,3.599,481,2.81,587,2.99,632,5.454,660,2.259,679,4.697,897,3.016,904,2.852,1008,2.752,1206,3.408,1313,5.599,1359,5.032,1380,8.658,1385,4.443,1403,7.244,1404,5.599,1405,4.306,1406,4.306,1407,5.088,1408,5.505,1409,6.717,1410,4.812,1411,4.812,1412,4.306,1413,4.443,1414,5.088,1415,4.087,1416,5.088,1417,5.088,1418,5.088,1419,3.709]],["t/2964",[7,5.619,16,1.392,22,2.282,27,0.459,36,4.149,46,2.687,60,1.481,84,2.247,86,1.851,107,1.577,110,2.273,125,2.253,157,2.136,160,4.114,161,3.495,166,1.675,171,2.074,176,3.379,178,2.37,187,4.525,200,2.381,207,1.462,225,1.655,231,1.546,339,3,349,2.214,357,6.808,363,2.654,382,2.454,396,1.203,436,2.506,553,2.233,616,3.55,632,3.62,658,5.147,679,3.27,697,3.504,725,4.987,878,3.305,1313,5.661,1324,4.149,1325,3.765,1335,3.898,1380,7.475,1403,5.088,1409,4.677,1410,4.886,1411,4.886,1420,4.677,1421,5.165,1422,5.165,1423,3.036,1424,5.589,1425,5.589,1426,5.589,1427,6.491,1428,4.057,1429,5.589]],["t/2966",[14,3.199,16,2.594,225,3.085,283,5.008,303,4.218,632,4.647,785,6.805,1403,6.532]],["t/2968",[3,3.461,10,2.913,14,2.136,22,1.555,81,2.678,84,1.751,94,3.278,121,1.916,122,3.068,171,3.032,216,3.337,263,4.515,271,3.383,316,5.808,333,4.883,382,3.587,436,4.722,558,5.93,673,4.401,688,5.808,854,5.504,1199,5.504,1224,5.189,1377,11.376,1430,8.17,1431,8.17,1432,8.17]],["t/2970",[22,2.16,33,3.193,84,2.881,99,2.443,104,2.976,181,2.92,185,4.216,482,5.144,599,6.676,874,7.422,1108,5.625,1433,5.625,1434,5.128]],["t/2972",[0,1.759,1,1.434,2,1.864,9,1.639,19,4.611,27,0.975,37,3.494,120,2.337,121,1.543,124,2.615,210,3.802,227,1.514,229,3.002,232,4.623,259,1.324,263,6.156,271,4.105,303,3.015,349,3.926,413,5.53,735,5.226,789,3.723,795,5.195,1378,5.018,1379,8.991,1427,6.136,1435,6.884,1436,6.511,1437,5.668,1438,6.511,1439,6.511,1440,5.668]],["t/2974",[0,1.297,24,5.178,80,5.178,86,2.899,212,3.749,229,3.529,261,4.973,263,4.839,392,2.308,482,3.66,493,5.899,553,3.498,631,4.666,675,5.638,691,4.973,692,5.178,707,3.865,735,4.108,961,4.756,1069,5.294,1134,5.234,1357,4.108,1379,9.714,1441,8.882,1442,8.757]],["t/2976",[0,0.988,2,1.467,9,1.103,14,1.533,16,1.46,23,2.117,26,0.364,27,0.603,38,4.093,54,3.586,60,0.552,81,0.683,86,1.616,107,1.031,120,1.865,121,0.324,122,0.783,148,0.915,184,1.306,187,2.721,194,1.22,196,1.757,200,1.557,201,1.233,215,0.719,223,1.815,225,1.082,227,1.608,231,1.011,232,2.276,259,1.745,293,4.128,303,0.844,313,2.255,322,3.33,333,2.263,338,1.08,343,0.915,359,1.028,392,0.549,396,1.98,406,2.225,410,4.356,465,1.482,480,1.631,481,3.748,482,3.689,487,4.084,494,2.95,523,3.081,540,2.423,632,3.275,660,2.002,668,1.705,694,1.173,717,2.185,719,3.158,720,1.922,735,4.14,738,2.462,764,0.591,766,4.906,778,2.972,779,2.827,780,1.404,781,2.504,789,2.931,823,1.985,824,2.161,880,1.597,1030,4.586,1069,2.95,1093,2.263,1163,3.195,1299,2.504,1378,7.222,1379,5.925,1393,1.745,1403,1.307,1436,4.266,1441,7.687,1443,5.863,1444,3.655,1445,2.085,1446,5.863,1447,3.655,1448,3.655,1449,3.378,1450,6.418,1451,3.378,1452,3.655,1453,3.655,1454,3.655,1455,2.085,1456,3.655,1457,3.655,1458,3.923,1459,2.117,1460,3.655,1461,3.655,1462,3.655,1463,3.378,1464,3.655,1465,3.655,1466,3.195,1467,2.859,1468,3.655,1469,3.655,1470,2.085,1471,3.655,1472,3.655,1473,3.655,1474,2.085,1475,3.655,1476,2.085,1477,2.085,1478,3.714,1479,3.655,1480,3.655,1481,3.655,1482,1.745,1483,3.655,1484,2.085,1485,2.085,1486,3.655,1487,3.655,1488,3.655,1489,2.085,1490,2.085,1491,2.085,1492,2.085,1493,1.631,1494,2.085,1495,1.26,1496,2.085,1497,2.085,1498,2.085,1499,1.822,1500,2.085,1501,2.085]],["t/2978",[0,1.735,11,3.789,14,3.064,27,0.591,30,2.748,54,4.406,78,3.36,79,6.076,86,3.209,108,3.732,120,1.698,133,2.442,162,3.601,188,3.286,202,3.553,217,4.406,227,1.464,233,4.516,235,2.287,263,3.981,265,5.229,266,5.482,281,5.122,289,7.196,290,5.229,333,3.34,490,3.4,632,4.324,700,4.46,866,6.658,1155,4.406,1160,4.092,1378,8.814,1388,3.53,1403,4.516,1422,6.658,1437,5.482,1502,5.122]],["t/2980",[0,1.46,7,4.768,22,1.877,78,4.597,107,2.781,108,6.132,188,3.342,258,5.547,263,5.447,658,5.31,1378,8.546,1503,9.11]],["t/2982",[0,1.434,14,2.532,27,0.795,30,3.695,46,3.206,78,4.516,79,6.07,86,3.877,121,1.507,392,2.552,632,4.319,1378,8.481,1403,6.07,1504,7.189]],["t/2984",[27,0.824,30,3.83,81,3.291,86,3.324,251,4.082,632,5.337,1378,8.061,1403,6.293,1406,7.852,1504,7.452,1505,8.4]],["t/2986",[0,1.239,14,1.524,16,1.451,30,3.732,75,2.545,79,3.653,86,3.54,91,1.469,99,1.548,107,2.359,137,3.018,166,1.746,207,1.524,225,1.725,235,2.655,349,2.308,382,4.694,392,1.536,580,3.752,587,6.593,632,2.599,633,3.249,660,2.391,733,2.298,1359,5.243,1378,7.626,1404,5.833,1406,4.558,1423,4.543,1504,4.326,1506,5.827,1507,5.827,1508,4.064,1509,5.385,1510,5.094,1511,10.691,1512,5.827,1513,5.827,1514,8.364,1515,5.914,1516,9.783,1517,4.434,1518,5.827,1519,5.385,1520,5.827,1521,8.364,1522,5.827,1523,5.827,1524,5.827,1525,5.827,1526,5.827,1527,5.827,1528,5.827,1529,5.827,1530,5.827,1531,5.827,1532,3.992,1533,5.827,1534,5.827]],["t/2989",[0,1.538,14,2.09,27,0.946,30,3.049,32,3.623,79,5.009,81,2.62,86,2.646,142,4.777,188,2.709,207,2.09,213,3.643,235,3.296,251,3.249,361,5.574,450,5.298,630,4.171,631,3.388,632,5.445,633,5.788,687,4.777,775,5.574,1357,3.749,1378,8.223,1403,5.009,1505,6.687,1535,7.385,1536,10.381,1537,7.991]],["t/2991",[0,1.751,9,0.694,14,2.373,16,1.629,23,2.167,78,1.958,79,2.632,81,1.377,86,1.39,99,1.738,103,2.208,107,2.267,120,0.99,121,0.654,123,0.792,184,1.501,187,3.648,188,3.335,192,2.929,201,2.483,210,3.34,225,1.243,227,1.33,229,1.692,231,1.162,233,5.039,235,2.552,283,3.864,303,1.7,357,2.385,359,2.071,392,1.107,396,0.904,404,2.175,409,4.564,443,2.432,449,2.085,476,2.538,482,1.755,540,2.784,570,1.084,601,2.051,632,3.586,660,2.685,662,1.772,764,1.191,766,6.727,778,3.316,781,2.877,788,3.284,822,3.671,840,2.32,897,2.3,917,2.159,958,3.284,1099,3.248,1313,2.929,1378,8.114,1381,2.432,1450,9.11,1451,6.047,1458,5.257,1466,7.027,1505,3.514,1519,3.88,1538,4.199,1539,4.199,1540,4.199,1541,4.199,1542,4.199,1543,4.199,1544,3.389,1545,4.199,1546,4.857,1547,4.199,1548,4.199,1549,4.199,1550,4.199,1551,4.199,1552,3.514,1553,3.671,1554,3.88,1555,3.88,1556,2.703,1557,4.199,1558,4.199,1559,3.048,1560,3.88,1561,3.195]],["t/2994",[0,1.573,79,6.658,450,7.042,631,4.503,1378,7.155,1505,8.888,1535,9.816]],["t/2996",[0,1.461,4,4.202,14,2.58,16,1.842,24,4.375,27,0.911,60,1.96,75,3.232,79,6.96,99,2.622,187,6.19,188,3.345,210,3.777,231,2.73,233,4.638,406,2.085,409,5.16,570,1.91,573,4.515,631,3.137,632,4.401,660,3.036,662,3.122,702,3.625,733,2.918,1052,3.698,1378,8.312,1441,7.964,1458,3.953,1546,5.492,1553,6.467,1562,4.019]],["t/2998",[0,1.432,9,0.944,27,0.468,38,4.593,54,3.49,81,1.871,91,1.439,166,1.709,184,2.039,187,4.593,188,4.089,190,2.467,196,2.742,231,1.578,235,1.811,239,3.459,259,1.014,292,2.616,293,3.532,322,3.241,325,3.073,392,1.504,396,2.708,406,1.206,410,3.726,412,2.76,465,4.057,482,4.041,507,2.341,523,2.222,570,2.126,616,3.624,632,3.674,637,3.577,660,2.341,684,4.236,880,2.492,1074,4.236,1088,3.783,1378,7.132,1387,4.775,1441,4.605,1449,5.273,1450,8.452,1458,3.048,1478,7.357,1495,3.449,1499,8.452,1552,4.775,1553,4.988,1554,5.273,1555,5.273,1563,4.236,1564,5.706,1565,5.706,1566,5.706,1567,5.706,1568,5.706,1569,5.706,1570,5.706,1571,5.706,1572,5.706,1573,4.988]],["t/3000",[9,1.263,27,0.984,29,3.097,33,3.179,57,3.734,60,1.363,81,1.686,84,2.744,85,2.202,99,2.029,104,1.665,105,3.255,122,1.931,123,1.718,129,3.01,131,2.607,133,1.744,147,1.56,181,1.633,202,2.537,207,1.345,209,2.307,216,2.101,224,2.922,228,4.565,251,2.092,269,2.046,270,1.324,284,4.257,353,3.302,381,3.657,385,2.442,400,2.424,424,3.657,435,2.979,436,2.307,437,2.95,446,7.834,462,1.287,475,5.637,479,3.734,482,4.212,485,2.442,535,3.042,562,5.23,564,3.914,572,3.36,574,4.151,579,3.36,580,3.312,597,4.305,598,4.305,599,3.734,629,5.973,630,2.685,774,3.657,876,3.042,1099,2.554,1574,3.36,1575,5.144,1576,4.754]],["t/3002",[0,0.989,1,1.285,6,4.666,7,3.23,22,1.752,27,0.865,37,3.133,38,3.723,60,1.769,78,4.293,107,1.884,108,5.457,148,1.974,188,4.174,207,1.746,258,5.18,263,3.69,288,4.397,323,2.831,601,2.094,658,3.597,662,2.818,695,5.927,696,4.428,729,2.691,874,5.389,1052,3.338,1362,4.575,1375,10.303,1383,5.389,1385,5.389,1387,5.588,1388,3.272,1393,8.816,1396,5.838,1397,4.3,1577,10.535,1578,7.429,1579,5.588,1580,6.678,1581,5.588]],["t/3004",[0,1.606,22,2.48,26,1.234,30,3.65,31,3.135,33,2.482,87,3.939,104,2.286,121,1.489,123,1.333,131,3.581,132,6.176,154,5.702,157,1.949,170,5.111,181,3.037,189,2.355,213,3.221,215,3.299,251,2.873,286,3.975,338,6.022,369,3.939,419,8.113,450,4.684,557,4.321,1582,6.944,1583,5.245]],["t/3006",[9,1.029,18,3.68,22,2.21,26,1.531,33,1.615,104,3.564,120,1.467,121,1.579,131,4.442,132,7.661,141,3.049,147,2.657,157,2.364,161,2.921,163,2.328,166,2.626,168,3.809,169,3.399,174,2.374,189,2.921,209,2.791,229,2.508,281,4.425,338,5.704,379,5.643,418,3.154,419,7.396,423,3.641,549,2.257,601,1.951,868,4.322,1054,5.44,1201,3.352,1208,6.443,1582,7.993,1584,5.44,1585,7.661,1586,6.223,1587,3.953,1588,6.223,1589,5.208]],["t/3008",[27,0.792,33,3.39,84,2.893,99,1.901,105,2.558,123,1.35,129,4.188,131,4.892,161,3.217,207,1.872,215,3.328,219,3.921,224,4.065,253,3.378,282,4.745,285,2.606,435,5.59,436,3.209,437,5.535,446,4.675,474,4.675,475,4.43,482,4.034,549,2.596,550,3.99,553,2.859,629,5.598,900,4.608,1204,4.546,1590,5.598,1591,5.446,1592,5.989,1593,4.327]],["t/3010",[27,0.768,33,2.975,84,2.657,85,4.005,121,1.456,129,5.473,131,4.741,207,2.446,219,5.124,223,4.644,446,6.109,475,7.098,482,3.909,527,4.264,599,6.789,629,7.317,630,4.882]],["t/3012",[0,0.671,23,2.11,27,0.882,30,1.728,33,3.069,34,2.391,57,3.287,59,2.216,60,1.838,61,2.548,83,2.02,84,2.534,85,1.939,91,2.126,97,2.094,105,2.479,121,1.08,128,2.769,129,5.528,131,2.295,161,1.509,163,1.694,181,1.438,206,1.893,219,3.8,223,4.185,259,1.498,269,1.801,270,1.166,285,2.525,312,2.094,315,2.623,351,3.102,397,3.235,446,6.171,462,1.736,472,6.415,475,4.294,476,2.737,479,5.034,482,2.899,549,1.643,550,2.525,570,1.79,573,1.841,599,3.287,629,8.748,630,4.4,789,2.263,815,2.365,853,3.446,912,2.363,1099,4.691,1574,6.171,1576,4.185,1594,3.362,1595,2.535,1596,4.528,1597,6.41,1598,4.185,1599,4.528,1600,4.185]],["t/3014",[0,1.307,33,2.87,84,2.714,99,3.365,123,2.087,223,5.492,252,5.683,433,6.473,434,2.939,475,6.848,528,5.464,529,5.606,531,5.062,541,6.717,1601,5.773]],["t/3016",[0,0.922,9,1.678,23,2.04,33,3.012,61,4.931,84,2.487,99,1.653,142,6.583,161,2.074,215,2.146,223,4.351,229,2.508,235,1.976,252,4.007,259,1.558,275,2.266,278,4.192,434,1.653,435,3.605,436,2.791,437,3.569,475,3.852,513,3.535,528,3.852,529,3.953,531,3.569,534,5.208,537,5.643,541,4.736,549,3.179,550,4.886,561,5.026,562,4.064,817,4.86,1602,10.145,1603,10.145,1604,4.112,1605,8.764,1606,8.764,1607,6.856,1608,5.022,1609,6.223,1610,5.751]],["t/3018",[23,2.315,25,3.699,46,2.867,60,1.621,70,3.331,81,2.006,83,2.729,160,3.102,161,2.887,178,2.594,181,2.75,215,2.11,227,1.244,234,3.324,235,1.943,253,4.087,285,2.228,292,2.805,324,3.836,374,2.871,402,8.787,433,3.581,510,1.796,582,5.361,625,3.443,671,3.381,847,4.268,1033,5.415,1042,5.131,1204,6.942,1241,4.442,1433,6.148,1467,4.787,1611,5.655,1612,5.121,1613,6.119,1614,6.119,1615,4.787,1616,8.661,1617,8.661,1618,6.119,1619,6.119,1620,8.661,1621,6.119,1622,6.119,1623,5.349,1624,6.119]],["t/3020",[0,1.276,22,1.641,27,0.894,30,3.288,84,1.847,86,2.854,104,2.789,120,2.817,181,2.736,209,3.865,225,2.552,226,2.983,227,1.752,232,4.02,393,3.428,403,5.21,452,4.943,674,4.498,1011,6.742,1033,4.643,1433,7.679,1434,7.001]],["t/3022",[9,1.271,12,1.998,23,2.188,27,0.321,37,2.905,59,1.453,61,2.202,65,1.847,71,2.841,75,1.71,76,2.979,84,2.039,91,1.937,97,1.908,104,3.079,120,1.46,121,0.609,138,2.245,157,0.797,184,1.399,188,1.327,197,1.676,198,2.202,204,2.108,232,2.888,234,2.126,251,1.592,259,1.101,269,2.463,270,1.594,271,1.621,285,2.255,312,1.908,339,2.289,396,0.843,403,3.743,452,3.551,510,2.255,549,1.42,561,4.406,570,1.01,571,1.512,601,1.941,604,2.394,815,2.155,817,2.733,961,3.363,962,2.705,1026,1.918,1033,2.108,1036,2.013,1042,4.458,1099,1.943,1189,3.987,1255,2.182,1294,2.682,1423,2.126,1433,7.229,1434,6.307,1593,2.366,1601,2.043,1604,1.836,1625,3.159,1626,5.263,1627,6.192,1628,3.617,1629,3.014,1630,3.422,1631,3.276,1632,3.276,1633,4.712,1634,2.454,1635,2.682,1636,3.363,1637,3.617,1638,2.29,1639,5.413,1640,5.722,1641,3.159,1642,3.159,1643,3.159,1644,3.617,1645,2.841,1646,3.914,1647,3.914,1648,3.914,1649,3.617,1650,3.914,1651,2.783,1652,2.73,1653,3.914,1654,3.062,1655,5.182,1656,4.403,1657,3.914,1658,3.617,1659,3.422]],["t/3024",[4,4.783,9,1.393,23,2.109,46,2.788,253,3.974,259,1.908,510,3.654,527,3.839,542,5.987,561,4.829,582,5.213,1204,5.348,1241,6.112,1433,6.567,1434,5.986,1626,5.769,1640,7.782,1660,8.421,1661,7.361,1662,8.421,1663,8.421,1664,7.782,1665,8.421,1666,6.796,1667,8.421]],["t/3026",[0,1.362,1,1.77,20,5.224,23,1.558,27,0.755,84,1.971,102,3.523,153,4.995,208,5.921,215,3.172,435,5.327,437,5.274,452,5.274,707,4.059,1063,3.349,1293,5.327,1328,9.158,1433,6.94,1434,6.327,1668,7.422]],["t/3028",[0,0.647,9,0.722,14,1.764,22,0.831,27,0.936,34,1.238,60,2.806,65,2.06,81,1.431,86,2.728,89,1.833,102,3.156,103,2.296,106,2.671,107,1.231,114,2.48,120,2.185,121,1.947,122,1.639,124,2.367,125,3.735,141,2.139,146,2.811,147,1.324,148,1.264,163,2.522,168,1.897,169,2.615,174,3.536,181,1.386,188,1.48,193,4.468,197,1.869,202,2.153,204,2.352,216,2.755,217,2.67,225,1.293,226,1.511,227,1.675,229,3.321,230,3.169,231,1.208,232,2.036,233,2.737,234,2.371,235,2.943,236,2.582,237,2.392,238,1.888,239,1.833,240,3.104,241,2.434,242,1.693,243,2.048,244,3.045,249,3.523,251,1.775,318,2.639,357,2.48,385,2.073,400,1.386,532,2.279,545,2.811,580,2.811,595,2.434,660,3.381,734,4.147,760,2.529,836,5.464,868,4.064,879,2.073,880,1.907,894,2.314,896,4.541,900,2.811,1039,2.737,1357,3.164,1669,4.704,1670,6.232,1671,3.045,1672,5.644,1673,5.275,1674,3.104]],["t/3030",[27,0.611,30,2.842,59,2.325,70,3.813,79,4.669,106,4.412,121,1.159,123,1.87,141,4.857,160,3.775,161,4.394,210,6.313,211,4.556,212,4.244,213,5.916,214,6.233,215,3.418,225,2.206,226,2.578,227,1.514,396,1.604,528,4.611,718,4.796,912,3.887,1359,4.669,1675,7.449]],["t/3032",[21,4.685,29,3.648,102,4.108,106,4.248,121,1.669,193,4.784]],["t/3034",[0,0.828,21,2.441,22,1.064,26,1.945,27,0.914,60,1.481,86,3.164,102,3.66,103,2.94,106,4.601,114,3.175,120,2.625,121,2.005,122,2.099,123,1.055,124,2.849,146,3.599,147,1.695,148,1.965,163,2.09,169,2.168,193,5.346,196,4.593,216,2.283,217,3.418,227,1.649,235,2.577,242,2.168,251,2.273,259,0.993,275,2.035,318,3.379,319,2.562,326,2.917,337,3.305,447,3.089,532,2.917,545,3.599,601,1.752,660,3.921,746,5.381,836,6.336,868,2.757,879,2.654,880,2.441,896,2.738,1357,2.622,1672,6.792,1676,5.589]],["t/3036",[0,1.405,9,1.154,26,1.218,27,0.778,34,1.978,60,3.064,65,3.292,86,2.309,89,2.929,104,2.257,106,4.58,107,2.675,120,2.236,121,1.942,122,2.619,123,1.789,141,3.417,147,2.115,148,1.307,174,2.661,181,2.215,193,4.23,229,2.811,235,2.215,243,5.055,385,3.312,400,2.215,447,3.854,532,3.64,601,2.187,760,4.04,894,3.697,896,5.28,1357,3.272,1669,6.615,1670,8.765,1671,4.865,1677,6.975]],["t/3038",[0,1.297,2,2.754,3,3.75,26,1.529,27,0.719,106,3.468,107,2.47,120,2.977,121,1.713,123,1.652,193,3.906,227,2.237,396,1.885,406,1.85,462,2.754,736,2.314,909,3.927,1678,8.375]],["t/3040",[1,1.686,2,2.191,3,2.6,14,2.29,16,2.18,20,4.973,26,1.922,27,0.903,106,3.468,121,1.874,148,1.641,163,4.723,193,4.909,462,2.754,868,4.319,1679,7.328,1680,8.757,1681,6.849,1682,8.092,1683,6.226]],["t/3042",[7,3.29,9,1.125,22,2.178,23,1.579,26,1.188,27,0.558,59,2.495,70,3.586,75,4.072,89,3.915,106,2.694,121,2.171,131,4.725,147,2.827,148,1.275,193,5.759,198,5.246,207,1.779,393,2.706,400,2.96,462,1.702,545,4.38,912,5.551,1684,6.802,1685,5.946]],["t/3044",[1,0.657,2,0.855,3,1.014,9,0.565,16,1.382,21,1.492,22,1.335,23,1.188,26,1.551,27,0.575,29,4.548,34,2.29,59,1.645,70,3.106,84,2.525,89,2.331,99,0.907,104,1.796,105,2.886,106,4.279,111,1.531,112,2.479,114,1.94,121,2.052,123,1.047,127,2.264,140,2.774,146,2.199,147,2.126,148,1.513,157,1.809,170,1.824,174,2.117,175,2.671,181,1.084,186,2.463,193,5.573,198,3.123,201,2.019,204,1.839,207,0.893,219,3.841,221,2.985,222,2.382,223,3.481,224,3.152,225,1.011,226,1.182,227,0.694,228,2.041,235,1.084,259,0.607,275,1.243,282,2.264,294,4.514,333,3.744,335,2.854,369,1.904,393,1.358,400,1.084,462,0.855,485,4.217,538,6.085,539,2.535,605,2.339,872,3.871,1044,2.671,1559,2.479,1574,2.23,1686,3.415,1687,2.169,1688,2.169]],["t/3046",[0,1.297,2,2.754,3,3.75,26,1.529,27,0.719,29,3.744,106,3.468,107,2.47,120,2.977,123,1.652,193,3.906,227,2.237,396,1.885,406,1.85,462,2.754,736,2.314,909,3.927,1678,8.375]],["t/3048",[1,1.699,2,2.209,3,2.621,14,2.308,20,5.013,26,1.932,27,0.908,29,3.002,106,3.496,121,1.722,148,1.654,163,4.737,193,4.934,462,2.768,868,4.353,1681,6.905,1682,8.157,1683,6.276,1689,8.827,1690,8.827]],["t/3050",[7,5.188,27,0.88,29,3.648,193,4.784,462,2.684,1691,10.725]],["t/3052",[0,0.891,14,1.574,26,2.342,27,0.818,29,4.26,106,5.178,121,1.983,123,2.047,148,2.148,164,3.522,193,3.818,207,1.574,227,2.024,235,1.911,259,1.07,275,2.191,400,1.911,565,4.278,632,3.818,633,3.356,660,2.469,696,3.991,754,4.369,889,4.369,909,5.341,1681,4.708,1692,6.019,1693,5.261,1694,6.019]],["t/3054",[0,1.529,33,3.156,84,2.772,99,2.742,105,3.689,224,5.862,474,6.741]],["t/3056",[9,1.191,27,0.899,33,3.173,84,2.896,104,2.331,105,3.465,161,3.231,219,5.31,224,5.506,312,1.789,339,2.663,377,5.265,452,6.72,453,6.029,475,4.46,478,3.678,549,2.613,553,3.872,817,3.18,851,6.331,951,4.46,1026,3.53,1041,4.777,1423,5.95,1625,5.814,1695,7.204,1696,4.853,1697,6.658]],["t/3058",[27,0.972,33,3.071,84,2.82,105,3.523,219,5.4,224,5.599,312,2.448,339,3.644,1698,9.11,1699,8.617]],["t/3060",[0,1.134,2,2.526,3,3.354,27,0.829,33,1.986,84,2.163,91,1.931,99,2.682,105,4.036,120,1.805,121,1.192,123,1.905,223,3.801,225,2.267,226,2.65,227,1.556,353,4.884,397,3.571,406,1.618,433,4.48,434,2.034,438,5.557,462,1.916,465,5.444,475,4.74,528,6.991,529,6.411,537,4.93,541,7.682,736,2.023,901,5.684,1601,3.996]],["t/3062",[23,2.264,59,1.861,91,2.001,97,1.97,99,2.108,102,3.039,105,4.107,123,1.497,184,3.693,270,2.042,312,1.97,353,5.264,417,5.182,431,4.55,529,6.562,531,4.55,537,6.653,660,3.255,815,2.225,1495,4.796,1607,6.206,1608,6.402,1700,8.341,1701,6.639,1702,7.933]],["t/3064",[0,1.074,2,2.437,3,3.264,27,0.799,33,2.852,46,2.401,84,2.518,91,1.829,99,3.121,105,4.199,120,1.709,122,2.723,123,1.837,131,3.676,141,3.553,223,3.6,225,2.147,226,2.51,227,1.474,231,2.006,235,2.302,252,4.669,353,4.753,406,1.532,433,4.243,434,1.927,461,5.264,462,1.815,475,4.489,482,3.031,528,4.489,530,4.489,531,4.159,541,5.518,547,5.672,736,1.916,1601,3.785]],["t/3066",[0,1.56,23,2.277,27,0.671,59,1.916,91,2.06,97,2.029,99,2.17,105,3.764,184,3.764,270,2.103,312,2.029,353,5.323,417,5.336,531,4.685,538,7.214,547,6.39,660,3.352,815,2.292,1495,6.366,1607,6.39,1608,6.593,1701,6.837,1703,7.55]],["t/3068",[22,1.241,27,0.922,32,2.955,90,2.365,99,2.763,103,3.429,105,4.696,120,1.537,124,2.288,143,3.739,146,4.197,160,3.304,161,2.173,163,2.438,169,2.528,190,2.819,210,3.328,213,2.972,229,2.627,251,2.651,253,3.077,257,2.764,318,3.941,319,2.989,320,4.197,353,5.741,393,2.593,414,8.755,416,7.576,418,4.589,419,3.897,420,2.699,421,6.025,422,5.099,423,3.815,424,4.635,435,3.776,436,2.923,437,3.739]],["t/3070",[27,0.749,105,4.579,120,2.89,200,3.886,225,2.701,226,3.156,227,1.853,353,5.54,414,8.4,424,6.484,462,2.282,547,7.134,1701,7.632,1704,8.429]],["t/3072",[14,1.896,22,1.38,26,1.266,27,0.595,33,2.526,59,1.701,70,2.789,84,2.086,99,2.92,105,4.199,121,1.129,146,4.669,148,1.359,163,2.712,188,2.458,196,3.486,229,2.922,230,5.264,353,5.081,385,3.443,397,5.126,414,6.67,417,4.736,424,5.156,435,4.2,436,3.252,437,4.159,612,4.885,662,4.108,792,7.179,1042,3.702,1052,3.625,1397,4.669,1508,5.058,1705,7.252,1706,7.252,1707,7.252,1708,7.252,1709,7.252]],["t/3074",[0,1.247,27,0.691,84,2.301,85,3.605,105,3.01,137,4.362,140,5.367,166,2.523,171,3.125,174,3.213,207,2.202,215,2.904,257,4.552,349,3.335,353,4.643,356,3.66,414,5.769,417,8.131,435,4.877,436,3.776,437,6.157,462,2.107,667,5.5,737,5.5,1710,8.421,1711,8.421]],["t/3076",[4,5.268,16,2.309,19,5.741,33,2.406,82,5.544,83,4.137,84,2.444,168,4.031,229,3.738,230,6.732,237,5.081,352,6.732,361,6.469,495,5.372,553,3.705,675,5.971,1330,6.594,1374,5.741,1712,8.571,1713,7.761,1714,9.275]],["t/3078",[0,1.374,4,5.268,16,2.309,27,0.761,33,2.406,83,5.088,84,1.987,110,3.771,133,3.144,170,4.955,181,2.945,212,3.971,400,2.945,498,7.255,671,5.125,1084,7.761,1152,5.814,1320,8.108,1715,9.275,1716,7.485,1717,7.058]],["t/3080",[0,1.167,14,2.06,22,1.499,27,0.646,82,4.708,84,1.688,99,2.092,121,1.226,152,5.002,162,3.937,164,4.609,222,5.494,259,1.4,269,3.133,352,5.717,374,3.695,587,4.278,625,4.432,666,3.59,692,4.657,709,6.591,726,6.356,728,6.591,729,4.145,732,6.356,856,5.6,861,4.517,954,4.762,1202,3.859,1587,5.002,1718,7.279,1719,5.847,1720,6.885,1721,7.877,1722,8.044,1723,7.877,1724,7.877,1725,7.877,1726,6.885,1727,6.591,1728,7.877]],["t/3083",[11,4.428,27,0.881,33,2.786,84,2.533,85,3.605,104,2.725,105,3.01,133,2.854,157,2.187,194,4.927,219,6.476,224,4.783,285,3.066,312,2.091,352,7.793,395,4.695,435,6.219,436,4.815,449,4.181,599,6.112,666,3.839,1202,4.126,1729,8.399]],["t/3085",[0,1.796,14,2.327,21,3.887,85,3.81,121,1.73,129,5.207,157,2.265,164,5.207,239,3.737,319,4.079,349,3.524,393,3.539,397,5.655,400,2.825,579,5.812,1077,7.779,1330,6.327,1730,8.899,1731,8.899,1732,6.771,1733,5.995]],["t/3087",[22,1.708,33,2.328,84,1.922,89,3.767,121,1.894,129,5.249,171,3.329,184,3.206,239,3.767,319,5.122,352,6.512,397,5.941,690,5.859,700,5.554,960,7.842,1330,6.378,1732,6.827,1734,7.842,1735,8.971,1736,4.832]],["t/3089",[11,4.142,27,0.646,29,2.679,33,2.044,38,4.391,83,3.513,84,2.204,168,3.423,181,2.501,199,4.391,206,3.292,215,2.716,323,4.36,395,4.391,400,2.501,435,5.956,436,4.612,476,4.762,490,4.853,562,5.629,599,5.717,630,4.111,770,5.6,894,4.175,1224,5.002,1330,5.6,1338,5.494,1736,4.243,1737,7.877,1738,7.877,1739,7.877,1740,7.877,1741,7.877,1742,6.356,1743,6.161]],["t/3091",[22,1.827,27,0.788,29,3.265,37,4.503,84,2.496,105,3.431,181,3.048,222,6.695,224,5.452,227,1.951,248,5.738,323,4.07,476,5.803,549,3.482,562,4.451,1202,4.703,1587,6.097]],["t/3093",[9,1.232,10,2.061,27,0.611,83,3.322,84,2.124,110,3.029,129,4.358,207,1.948,212,3.189,215,2.569,237,4.08,261,4.231,262,2.797,268,6.011,377,4.046,397,5.539,415,5.103,448,5.668,482,3.113,579,4.865,770,5.296,774,5.296,785,4.865,847,5.195,851,4.865,894,3.948,1008,3.723,1064,5.296,1086,8.295,1330,5.296,1374,4.611,1585,6.511,1587,4.731,1743,5.826,1744,7.449,1745,7.449,1746,7.449,1747,6.511,1748,7.449,1749,7.449,1750,8.665,1751,7.449,1752,6.233,1753,7.449,1754,7.449]],["t/3095",[27,0.707,41,6.256,84,2.335,121,1.696,133,2.922,166,3.265,227,1.752,242,3.342,294,5.549,326,4.498,353,4.712,397,5.573,398,5.152,399,5.715,564,6.559,667,5.629,673,4.643,907,5.905,954,5.21,1330,6.128,1755,7.965,1756,7.965,1757,7.965,1758,6.956,1759,8.619]],["t/3097",[11,4.395,37,3.92,51,5.38,84,1.791,100,4.361,139,5.38,161,2.785,166,2.504,169,4.568,207,2.185,269,3.324,286,4.702,323,3.543,349,3.31,353,5.368,361,5.828,396,1.799,416,9.857,894,4.429,954,6.459,1366,7.305,1478,6.359,1732,6.359,1736,4.501,1760,9.874,1761,7.722]],["t/3099",[0,1.34,1,1.741,2,2.264,3,2.686,27,0.742,46,2.995,99,2.403,105,4.366,229,3.645,252,5.824,323,3.835,353,4.857,462,2.264,528,5.599,541,6.883,547,7.075,786,5.532,792,5.908,1701,9.399,1704,10.379]],["t/3101",[0,1.707,14,2.467,27,0.774,32,4.277,37,5.407,54,5.77,65,4.452,82,5.64,105,3.372,120,2.224,148,1.768,207,2.467,253,4.452,261,5.358,397,4.4,565,4.716,602,7.895,894,5.001]],["t/3103",[0,1.797,33,2.886,37,5.219,81,2.92,82,3.807,84,2.668,85,4.763,105,3.671,120,1.501,121,1.731,129,3.726,131,4.514,148,1.193,157,1.814,171,2.363,206,2.662,209,2.856,219,3.488,224,5.059,242,2.469,244,6.212,259,1.132,282,4.222,283,3.061,397,5.657,404,3.299,429,5.817,430,5.139,578,4.622,846,5.567,890,4.222,900,6.613,1076,5.139,1590,4.981,1591,4.846,1592,5.329,1762,5.567,1763,5.139]],["t/3105",[0,1.681,14,2.967,27,0.755,32,4.169,54,6.94,142,5.498,147,3.441,216,3.756,261,5.224,393,3.658,397,5.292,400,2.92,565,4.597,582,5.693,674,5.922,701,6.415,1033,4.954]],["t/3107",[0,1.323,22,1.419,26,2.018,27,0.915,29,3.612,33,2.573,34,3.682,43,3.412,46,1.649,84,2.603,85,2.132,89,3.13,104,1.612,105,4.421,106,3.538,107,2.103,121,0.775,123,1.871,147,1.51,181,1.581,193,2.221,207,1.949,222,6.231,223,6.141,224,6.748,225,2.207,226,2.58,227,1.515,228,2.977,235,1.581,236,2.945,286,2.802,400,1.581,444,3.046,446,3.253,460,2.945,549,2.704,1203,3.083,1206,3.083,1764,4.603,1765,4.354,1766,4.98,1767,3.615]],["t/3109",[0,1.836,3,3.32,16,1.867,22,2.128,26,1.31,27,0.616,33,1.946,39,3.723,46,2.483,84,1.607,103,5.237,151,4.22,176,6.02,180,4.829,181,3.161,182,3.674,183,4.642,184,2.68,189,2.5,225,2.221,226,2.595,227,2.024,232,3.498,359,3.699,462,1.877,625,4.22,656,4.108,748,4.388,961,4.073,1063,2.731,1155,7.283,1768,7.5,1769,6.276,1770,7.5,1771,5.866]],["t/3111",[0,1.447,22,1.86,26,1.706,27,0.966,28,4.335,29,4.005,33,2.535,46,3.235,78,4.557,104,3.162,189,3.256,257,4.142,404,5.061,804,7.642]],["t/3113",[0,1.078,4,4.135,12,2.464,16,1.813,22,1.386,23,1.866,26,1.272,27,0.904,28,5.343,29,4.174,30,3.345,31,3.89,32,3.974,33,2.533,34,2.769,35,5.285,36,3.583,37,2.264,38,2.691,39,3.615,40,4.22,41,3.504,42,3.896,43,4.988,44,3.108,45,4.22,46,1.598,47,4.039,48,4.22,49,4.453,50,3.673,51,3.108,52,3.504,53,2.119,54,2.952,55,4.039,56,3.066,57,3.504,58,3.307,59,1.132,60,2.323,61,2.716,62,4.295,63,3.776,64,4.412,65,4.137,66,3.776,67,4.575,68,4.039,69,4.845,70,1.857,71,3.504,72,3.776,73,5.695,74,5.405,75,2.109,76,3.673,77,3.896,107,1.362,189,2.427,225,1.429,226,1.671,227,0.981,288,2.306,396,1.039,781,3.307,1772,6.365]],["t/3115",[0,1.267,9,1.414,22,1.628,23,1.449,26,2.187,27,0.89,28,4.811,29,4.259,53,3.755,65,4.036,107,2.412,123,1.613,189,4.173,225,2.532,226,2.96,227,1.738,257,4.597,288,5.18,1772,7.476]],["t/3117",[0,1.06,1,2.102,2,2.733,3,2.125,9,1.184,12,4.926,16,1.782,27,0.792,30,2.731,58,4.903,84,1.534,99,1.901,102,3.697,103,5.076,104,2.316,162,3.578,163,3.609,174,2.731,178,3.035,197,3.064,207,1.872,212,3.064,252,4.608,262,2.687,406,1.512,435,7.067,436,5.241,437,5.535,478,3.654,482,2.991,513,4.065,528,4.43,561,4.104,789,3.578,1773,8.076,1774,5.776,1775,7.157,1776,8.436]],["t/3119",[23,1.782,213,4.795,437,6.033,631,4.46,719,5.666,1769,8.803,1777,9.196,1778,6.871]],["t/3121",[435,6.336,436,4.905,631,4.638,1779,8.324]],["t/3123",[0,0.891,1,1.917,2,2.981,9,0.995,23,2.189,27,0.703,64,3.029,81,1.973,90,3.613,91,2.158,121,0.937,123,1.615,171,3.176,207,1.574,215,2.076,225,1.782,226,2.083,227,1.223,239,2.527,343,1.506,406,2.517,435,4.957,436,4.467,447,3.326,470,3.356,481,5.538,528,3.726,733,2.374,881,3.451,1615,4.708,1776,5.261,1778,7.086,1780,8.308,1781,7.163,1782,8.335,1783,7.163,1784,7.482,1785,6.019,1786,6.019,1787,6.019]],["t/3125",[23,2.073,27,0.856,33,2.706,84,2.235,161,4.227,242,3.122,259,1.431,312,2.591,339,2.976,452,4.616,529,5.112,537,5.183,553,4.167,634,7.795,1241,5.843,1780,5.614,1788,7.439,1789,8.05,1790,8.05,1791,8.05,1792,8.05,1793,5.614,1794,8.05,1795,10.431,1796,8.05]],["t/3127",[4,5.862,53,4.532,178,4.376,262,3.876,359,5.09,435,7.046,436,5.455,462,2.583]],["t/3129",[0,1.287,3,3.739,16,2.163,22,2.397,33,3.112,53,3.814,170,5.851,181,3.477,197,3.719,235,2.758,312,2.158,359,5.401,434,2.308,462,2.174,532,4.534,1063,4.585]],["t/3131",[27,0.633,33,1.354,34,2.605,46,2.555,60,2.045,69,2.883,84,2.32,91,1.946,99,1.386,105,2.758,133,1.768,142,4.613,147,1.582,161,3.061,166,1.563,168,2.267,181,2.45,184,1.865,199,6.038,259,2.186,312,2.281,353,3.337,397,4.283,431,2.992,482,3.225,507,4.813,510,1.531,529,4.901,530,4.777,531,4.425,537,3.359,549,3.331,550,2.909,562,2.419,563,3.515,570,1.992,637,3.27,717,3.119,720,4.058,849,4.366,1056,4.706,1201,2.81,1204,3.313,1301,5.382,1593,3.154,1601,2.723,1604,3.62,1698,4.821,1797,6.703,1798,3.515,1799,7.684,1800,5.198,1801,5.382,1802,2.201]],["t/3133",[33,1.195,34,2.416,37,2.16,60,2.525,84,2.485,91,1.161,99,1.223,105,2.511,110,1.872,120,1.085,157,1.941,158,2.85,161,3.42,166,1.379,181,2.23,184,1.646,188,2.887,199,3.917,215,1.588,224,2.615,235,2.23,259,2.112,285,1.676,312,2.115,333,2.135,339,2.597,353,1.991,377,2.501,397,3.276,431,4.029,440,3.154,453,3.853,457,3.273,458,2.403,470,2.567,482,1.924,507,4.758,510,2.062,513,2.615,529,2.924,530,2.85,531,2.64,537,2.964,561,4.029,570,2.46,637,5.339,662,1.943,720,4.479,817,2.032,851,3.007,895,2.752,951,2.85,962,2.011,1026,2.256,1056,4.142,1063,1.676,1204,2.924,1294,3.154,1388,2.256,1423,2.501,1433,4.296,1434,3.917,1458,2.46,1604,3.996,1626,3.154,1629,2.241,1634,2.886,1638,2.694,1639,4.025,1797,5.273,1802,3.594,1803,2.087,1804,3.273,1805,4.255,1806,3.211,1807,3.853,1808,3.418]],["t/3135",[0,1.59,3,3.51,4,4.783,37,3.95,53,3.697,100,4.395,122,3.162,163,3.149,178,3.57,210,5.481,217,5.15,237,4.613,252,5.421,253,3.974,254,5.421,256,6.779,262,3.162,273,9.922,292,3.86,443,4.877,471,7.047,496,5.5,605,5.769,979,6.796,1809,8.421,1810,8.421,1811,8.421]],["t/3137",[0,1.385,16,2.329,27,0.768,46,3.097,122,3.512,124,3.283,210,5.853,256,7.111,279,7.827,300,6.65,302,8.177,303,3.786,307,8.644,323,3.966,601,2.933,1495,5.655,1556,6.022,1812,8.644]],["t/3139",[0,0.981,2,1.067,3,1.266,9,0.705,16,1.062,26,1.156,27,0.544,33,1.106,36,3.166,37,2,39,3.288,46,3.03,64,2.146,84,0.914,86,2.192,94,1.711,96,2.954,97,1.645,98,2.161,99,1.759,105,1.524,106,1.689,107,1.203,111,1.912,121,1.031,122,3.721,124,1.497,128,2.608,143,2.445,153,2.316,164,2.495,171,1.582,174,2.526,187,2.377,189,1.421,190,1.844,206,1.782,210,4.672,216,1.742,224,2.422,225,2.934,226,3.167,234,2.316,235,1.354,237,3.628,242,1.654,254,2.745,256,6.276,259,0.758,261,2.422,279,3.568,280,7.541,286,4.568,288,2.037,291,3.728,292,1.955,303,1.726,321,2.873,324,2.673,338,2.209,374,2,470,2.377,478,2.177,481,3.38,489,2.708,490,3.125,493,2.873,501,3.941,573,3.301,588,2.377,601,1.337,674,2.226,694,2.399,729,2.669,735,3.107,1013,6.35,1359,2.673,1495,2.578,1556,2.745,1562,2.316,1578,3.441,1688,2.708,1722,3.336,1733,2.873,1813,4.264,1814,4.264,1815,4.264,1816,3.941,1817,4.264,1818,3.728,1819,4.05,1820,4.264,1821,4.264,1822,4.264,1823,4.264,1824,4.264,1825,2.921,1826,3.941,1827,3.728,1828,3.941,1829,4.264,1830,4.264,1831,4.264,1832,4.264,1833,4.264,1834,5.541,1835,4.264,1836,4.264,1837,4.264,1838,4.264,1839,4.264]],["t/3141",[0,1.749,7,3.555,14,1.922,22,2.249,27,0.806,33,2.871,34,2.084,53,3.227,107,2.073,121,1.144,170,5.249,181,3.119,197,3.146,210,3.751,225,2.176,226,2.543,227,1.996,235,2.333,343,1.839,359,5.457,527,3.35,532,3.835,748,7.69,1819,4.495,1840,5.748,1841,6.15,1842,5.592,1843,5.592,1844,5.931,1845,4.873,1846,5.592,1847,6.15]],["t/3143",[46,3.658,138,6.336,374,5.183]],["t/3145",[0,1.387,1,1.318,9,1.132,23,1.808,26,2.166,33,1.776,34,3.027,95,4.472,96,4.176,97,2.325,110,4.665,111,4.785,121,1.065,148,1.283,166,2.051,181,2.173,189,3.824,288,4.472,343,1.713,360,5.66,374,4.392,385,3.25,510,2.009,560,3.964,587,3.718,671,3.782,909,5.145,928,3.687,1008,3.421,1022,3.519,1848,6.845,1849,10.671,1850,6.845,1851,6.845,1852,5.728]],["t/3147",[46,3.622,138,6.273,513,6.213,895,6.539]],["t/3149",[0,1.526,9,1.479,16,1.595,23,1.987,26,1.948,27,0.526,95,4.272,96,3.989,97,2.221,137,3.318,184,2.289,186,2.728,189,2.135,227,1.302,235,2.034,343,1.603,396,2.218,492,3.965,510,3.273,513,6.663,601,2.804,748,3.748,941,5.01,1022,5.298,1035,4.054,1155,6.302,1388,3.138,1601,3.343,1726,5.599,1853,12.153,1854,5.919,1855,5.919,1856,6.405,1857,6.405,1858,5.919,1859,5.919,1860,6.405,1861,6.405,1862,7.818,1863,5.919]],["t/3151",[0,1.526,9,1.479,16,1.595,23,1.987,26,1.948,27,0.526,95,4.272,96,3.989,97,2.221,137,3.318,184,2.289,186,2.728,189,2.135,227,1.302,235,2.034,343,1.603,396,2.218,492,3.965,510,3.273,513,6.663,561,6.969,601,2.804,748,3.748,941,5.01,1022,5.298,1035,4.054,1155,6.302,1388,3.138,1601,3.343,1726,5.599,1854,5.919,1855,5.919,1858,5.919,1859,5.919,1862,7.818,1863,5.919,1864,6.405,1865,6.405,1866,6.405,1867,6.405]],["t/3153",[1,2.364,6,4.114,9,1.342,16,1.392,23,2.154,27,0.784,60,2.778,91,2.047,96,3.62,110,3.3,121,0.87,123,1.055,182,2.738,184,2.901,186,3.656,259,1.698,284,3.116,396,1.203,510,2.805,513,5.427,561,4.654,571,2.159,656,3.062,707,2.467,961,3.036,1022,2.874,1039,5.088,1068,4.677,1388,2.738,1495,4.906,1583,4.149,1590,4.372,1601,4.987,1802,3.425,1862,7.095,1868,8.775,1869,4.372,1870,5.589,1871,5.589,1872,5.589,1873,5.589,1874,8.116,1875,8.116,1876,8.116,1877,4.372,1878,5.589,1879,5.589,1880,5.589]],["t/3155",[0,1.297,22,2.404,33,3.123,53,3.845,170,5.88,181,3.494,197,3.749,210,4.47,225,2.593,226,3.03,227,2.566,235,2.78,343,2.191,359,5.936,527,3.992,532,4.57,1819,5.356]],["t/3157",[0,1.607,7,2.911,9,0.995,23,1.019,26,1.495,27,0.703,34,1.707,100,3.141,123,1.615,133,2.04,147,1.825,148,1.604,160,4.338,209,2.699,216,2.458,225,3.212,226,3.755,227,2.421,231,1.665,262,2.26,284,3.356,392,2.859,418,3.051,568,4.857,581,4.279,707,2.656,748,3.522,764,3.077,778,3.051,779,3.486,881,3.451,1037,4.198,1073,4.468,1108,3.681,1502,4.279,1668,4.857,1840,4.708,1841,5.037,1842,4.58,1843,4.58,1844,4.857,1845,3.991,1846,4.58,1847,5.037,1881,4.198,1882,5.562,1883,5.562,1884,5.261,1885,5.562,1886,3.773,1887,4.369,1888,5.562,1889,8.039,1890,7.91,1891,9.205,1892,4.369]],["t/3160",[9,1.331,26,2.269,27,0.661,29,4.313,106,5.146,121,1.253,148,1.955,229,3.244,259,1.431,275,2.931,343,2.015,392,2.122,396,1.733,400,2.556,764,2.283,909,5.687,928,4.336,1681,6.297,1893,7.439,1894,8.05,1895,7.439]],["t/3162",[9,1.425,26,2.262,29,4.271,106,4.973,114,4.895,120,2.032,148,1.615,200,3.672,343,2.157,392,2.272,396,1.856,523,3.356,764,2.445,828,5.603,909,5.359,931,4.681,1233,4.223,1896,8.619]],["t/3164",[9,1.508,26,1.593,29,4.358,60,2.417,106,5.075,146,5.872,148,1.709,161,4.271,343,2.282,392,2.404,764,2.587,1897,8.429,1898,8.429,1899,9.121,1900,8.429]],["t/3166",[9,1.46,26,1.542,29,4.308,106,5.016,120,2.081,146,5.683,148,1.654,161,4.221,200,3.761,343,2.209,392,2.326,396,1.9,523,3.437,764,2.504,828,5.688,931,4.794,1233,4.325,1901,8.827]],["t/3168",[9,1.331,26,2.269,27,0.661,29,2.738,106,5.146,121,1.974,148,1.955,229,3.244,259,1.431,275,2.931,343,2.015,392,2.122,396,1.733,400,2.556,764,2.283,909,5.687,928,4.336,1681,6.297,1893,7.439,1895,7.439,1902,8.05]],["t/3170",[9,1.425,26,2.262,106,4.973,114,4.895,120,2.032,121,1.954,148,1.615,200,3.672,343,2.157,392,2.272,396,1.856,523,3.356,764,2.445,828,5.603,909,5.359,931,4.681,1233,4.223,1903,8.619]],["t/3172",[9,1.508,26,1.593,60,2.417,106,5.075,121,1.994,146,5.872,148,1.709,161,4.271,343,2.282,392,2.404,764,2.587,1897,8.429,1898,8.429,1900,8.429,1904,9.121]],["t/3174",[9,1.46,26,1.542,106,5.016,120,2.081,121,1.971,146,5.683,148,1.654,161,4.221,200,3.761,343,2.209,392,2.326,396,1.9,523,3.437,764,2.504,828,5.688,931,4.794,1233,4.325,1905,8.827]],["t/3176",[9,1.484,26,1.567,59,2.104,106,5.045,121,1.983,148,1.681,161,4.056,210,4.58,213,4.09,343,2.245,392,2.364,396,1.931,528,5.554,764,2.545,1906,8.971,1907,11.174,1908,8.971]],["t/3178",[9,1.589,22,2.072,26,1.242,53,3.122,84,1.524,92,6.303,93,4.078,100,3.711,104,2.301,148,1.333,157,2.556,170,3.799,207,1.859,227,1.445,343,1.78,345,8.281,349,4.31,392,1.874,396,1.531,496,4.644,658,6.558,668,3.316,764,2.017,841,5.95,842,4.96,906,4.078,1438,6.216,1909,6.278,1910,6.571,1911,9.609,1912,7.111,1913,9.609]],["t/3180",[9,1.472,26,1.554,27,0.73,33,2.884,84,2.382,102,3.409,105,4.334,120,2.098,148,1.668,197,3.81,200,3.791,271,3.685,343,2.227,392,2.345,396,1.916,523,3.465,603,5.379,604,5.442,764,2.524,931,4.833,1914,7.754,1915,8.899]],["t/3182",[0,0.887,9,1.41,22,1.623,26,2.076,27,0.815,29,3.378,33,2.212,34,3.547,43,4.101,84,2.548,89,3.58,104,1.937,105,4.373,106,2.371,110,2.434,121,0.932,123,1.609,147,1.815,148,1.122,181,1.9,193,2.67,207,1.565,223,5.903,224,6.497,227,1.733,228,3.578,235,1.9,236,3.539,343,1.498,392,1.578,400,1.9,444,3.661,549,3.093,595,3.337,660,2.456,764,1.698,928,3.224,1203,3.705,1206,3.705,1764,5.532,1916,5.009,1917,5.986,1918,5.532,1919,5.232]],["t/3184",[9,1.472,26,1.554,33,2.309,84,1.907,105,4.334,120,2.098,148,1.668,200,3.791,343,2.227,392,2.345,396,1.916,398,7.593,399,8.422,523,3.465,764,2.524,931,4.833,1914,7.754,1920,8.899]],["t/3186",[9,1.403,26,1.482,105,4.607,120,2.543,146,5.463,148,1.59,200,3.615,227,1.724,343,2.7,353,5.574,392,2.236,396,1.827,414,8.553,523,3.304,764,2.407,828,5.548,931,4.609,1101,6.159,1921,8.486]],["t/3188",[9,1.393,26,1.875,34,3.648,105,4.596,120,1.985,121,1.311,123,1.589,148,1.578,181,4.083,197,3.605,313,3.239,343,2.107,392,2.219,397,3.927,398,5.034,399,5.583,764,2.388,1922,8.421,1923,6.796,1924,8.421,1925,8.421]],["t/3190",[9,1.496,26,1.58,33,2.347,84,1.938,105,4.366,120,2.132,148,1.695,200,3.854,323,3.835,325,6.882,326,4.721,343,2.264,392,2.384,396,1.947,523,3.522,764,2.566,931,4.913,1914,7.834,1926,9.045]],["t/3192",[6,4.11,9,1.341,26,2.028,33,2.104,34,2.3,105,4.543,120,1.912,123,1.53,148,1.52,235,2.575,277,5.766,286,4.563,313,3.119,322,4.606,325,6.612,328,7.598,343,2.029,392,2.137,412,3.922,764,2.3,928,4.368,1927,8.109,1928,8.109,1929,8.109,1930,7.494,1931,5.886]],["t/3194",[9,1.46,26,1.932,105,4.318,148,1.654,235,2.802,325,6.508,328,7.571,343,2.209,392,2.326,420,3.655,764,2.504,917,6.512,928,4.755,1186,6.905,1932,8.157,1933,8.827,1934,8.157]],["t/3196",[9,1.403,26,1.884,93,4.866,105,4.462,143,6.803,148,1.59,235,2.694,322,4.82,325,6.39,343,2.124,392,2.236,420,3.514,472,9.5,733,3.346,764,2.407,928,4.571,1170,7.101,1175,7.842,1193,6.299,1935,8.486,1936,8.486,1937,8.486]],["t/3198",[9,1.602,14,2.532,26,1.691,105,4.5,121,1.507,148,1.815,343,2.424,392,2.552,397,4.516,764,2.747,880,4.23,1938,9.684,1939,9.684,1940,9.684,1941,9.684]],["t/3200",[0,1.15,2,2.55,12,3.964,22,1.478,27,0.637,28,3.445,33,2.015,78,3.621,80,4.592,86,2.571,96,3.463,97,1.929,104,2.513,108,4.022,120,1.83,121,1.586,157,1.582,194,4.543,218,4.807,243,3.643,256,4.453,436,3.482,449,3.855,481,3.964,553,4.543,631,3.292,679,4.543,694,4.369,695,4.999,697,4.867,706,5.521,874,6.267,899,6.159,1381,4.497,1419,5.231,1437,5.909,1942,7.176,1943,7.765,1944,7.176,1945,7.765]],["t/3202",[16,2.671,22,2.042,82,6.411,114,6.092,553,4.285,1335,7.481]],["t/3204",[2,1.351,9,0.893,15,8.329,22,1.027,23,0.914,27,0.649,33,1.4,75,2.357,86,1.787,88,4.107,99,3.15,107,2.231,108,4.098,137,2.796,151,6.178,171,2.003,285,1.965,353,3.421,357,5.319,422,4.221,436,2.42,443,3.126,553,4.737,628,3.263,658,2.907,660,3.843,662,5.003,679,3.158,684,4.068,706,8.43,707,2.382,725,4.129,890,3.578,896,3.876,897,2.956,899,5.662,904,2.796,912,2.817,985,3.837,1037,3.764,1144,5.518,1369,4.107,1415,4.006,1419,3.636,1559,3.917,1584,4.718,1687,3.428,1887,3.917,1942,4.987,1946,4.987,1947,5.397,1948,6.62,1949,3.764,1950,4.221,1951,5.397,1952,4.516,1953,4.718,1954,5.167]],["t/3206",[157,2.083,171,3.795,258,5.754,660,4.195,662,4.315,706,7.27,896,5.01,1381,5.922,1845,6.78,1887,7.422,1954,6.679]],["t/3208",[0,1.56,9,1.351,15,5.93,22,1.555,46,2.705,90,2.963,104,2.644,121,1.272,148,1.531,153,4.437,171,3.032,258,4.597,263,4.515,324,5.121,553,3.264,631,3.464,658,4.401,660,3.352,662,3.447,694,4.597,695,6.78,697,7.716,735,3.833,896,4.003,985,5.808,1437,6.217,1845,5.417,1887,5.93,1954,5.336,1955,6.217,1956,8.17,1957,6.593,1958,6.217]],["t/3210",[2,2.424,20,5.5,27,0.795,78,4.516,86,3.877,91,2.442,208,6.235,481,5.978,660,3.973,706,6.885,815,2.716,1944,8.949,1954,6.325,1955,7.369,1959,9.684]],["t/3212",[14,2.907,27,0.73,53,3.907,100,4.644,108,4.609,215,3.069,231,2.462,235,2.825,382,3.907,553,3.555,573,3.618,601,2.79,632,3.969,698,5.995,706,6.327,792,5.812,856,6.327,897,4.875,912,4.644,1510,7.779,1949,6.206,1953,7.779,1960,11.118,1961,8.899,1962,8.899]],["t/3214",[14,2.236,22,2.459,27,0.702,28,3.794,30,3.263,33,3.248,39,4.246,46,2.831,52,6.207,56,5.431,92,4.953,93,4.904,94,3.431,98,4.334,99,2.272,148,2.032,195,5.23,338,4.43,393,3.402,408,5.859,573,3.477,893,5.67,913,4.304,1963,5.965]],["t/3216",[0,1.604,215,3.735,805,2.988,814,6.475,1964,9.064]],["t/3218",[22,1.946,27,0.839,33,2.653,98,5.183,99,2.717,357,5.808,573,4.158,601,3.206,1743,7.998,1965,7.422,1966,8.252]],["t/3220",[0,1.158,22,1.948,23,2.257,33,2.029,34,2.218,59,1.834,70,3.008,75,3.416,81,2.564,98,3.964,99,2.078,107,2.206,111,3.507,121,2.074,147,3.46,218,4.841,259,2.291,275,4.408,840,4.321]],["t/3222",[0,1.417,8,4.759,9,1.168,22,1.821,26,1.671,27,0.785,34,3.077,59,2.727,60,3.393,64,4.815,81,2.316,98,4.849,104,2.286,121,1.891,123,1.333,133,2.395,181,3.444,189,2.355,259,1.7,275,2.572,354,5.997,492,4.373,584,3.531,643,3.745,748,4.134,982,5.702,1069,6.557,1967,7.065,1968,5.486,1969,7.065,1970,7.065]],["t/3224",[16,1.014,22,1.7,23,2.188,26,1.797,27,0.647,28,1.808,29,2.174,31,1.808,33,2.891,34,3.052,39,2.023,59,2.095,60,2.089,62,1.996,64,2.051,65,3.721,74,4.744,90,2.86,98,3.996,99,1.082,104,1.318,107,1.149,111,2.866,121,1.39,123,0.769,124,1.43,157,0.83,181,1.294,189,3.586,190,3.41,198,2.292,207,1.065,216,1.664,275,1.483,285,1.483,288,1.946,315,2.36,338,2.11,354,2.554,382,1.789,393,1.621,400,1.294,489,5.008,562,1.889,571,1.573,635,1.827,662,1.719,671,2.251,779,2.36,780,2.745,802,2.126,817,1.798,840,2.251,909,1.827,967,2.409,968,2.409,969,2.463,995,4.059,1014,2.463,1016,2.842,1020,2.435,1022,4.054,1024,2.251,1026,1.996,1027,2.554,1036,2.095,1037,2.842,1099,2.023,1104,7.317,1108,2.492,1110,2.661,1141,3.1,1245,2.957,1249,2.554,1298,3.765,1324,5.853,1582,2.957,1583,3.025,1767,2.957,1793,5.499,1971,4.074,1972,4.074,1973,4.074,1974,4.074,1975,3.288,1976,3.025,1977,3.409,1978,3.409,1979,3.288,1980,3.288,1981,2.957,1982,2.522,1983,2.791,1984,4.074]],["t/3226",[0,1.189,1,1.824,2,3.249,3,3.287,16,1.371,22,1.528,27,0.855,59,1.883,62,2.697,67,2.873,91,2.024,98,2.79,107,2.264,120,2.454,121,1.621,123,1.039,124,2.817,159,3.221,189,2.675,193,4.225,225,1.63,226,1.905,227,2.116,239,4.372,243,2.583,259,1.427,406,2.713,573,2.238,584,2.752,643,2.918,662,2.323,823,5.146,824,4.746,834,3.451,836,3.65,879,3.811,880,3.506,1968,4.603,1985,4.812,1986,6.478,1987,7.017,1988,4.812,1989,3.772]],["t/3228",[0,1.108,1,0.963,2,3.099,22,1.424,27,0.816,59,2.791,62,2.451,70,3.445,89,3.141,91,1.886,107,2.527,120,1.763,121,1.893,123,1.411,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,2.162,238,4.298,239,3.141,243,3.509,259,1.767,275,2.723,335,2.573,406,2.617,420,2.072,584,2.501,643,2.652,733,3.92,734,2.518,823,4.063,824,4.423,879,4.719,880,4.342,1968,4.289,1985,4.374,1986,6.036,1987,6.538,1988,4.374,1990,2.673,1991,4.959,1992,5.851,1993,6.036]],["t/3230",[0,1.108,1,0.963,2,3.099,22,1.424,27,0.735,59,2.714,62,2.451,70,3.445,75,3.913,89,3.141,91,1.886,107,2.527,120,1.763,121,1.957,123,1.411,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,2.02,238,4.298,239,3.141,243,3.509,259,1.767,275,2.723,335,2.573,406,2.617,420,2.072,584,2.501,643,2.652,733,3.92,734,2.518,823,4.063,824,4.423,879,4.253,880,3.913,1968,4.289,1985,4.374,1986,6.036,1987,6.538,1988,4.374,1990,2.673,1991,4.959,1994,5.851,1995,6.036]],["t/3232",[1,1.561,2,2.029,3,2.408,23,1.775,27,0.666,59,2.459,70,3.119,75,3.542,91,2.045,97,2.014,107,2.287,121,1.911,125,4.224,253,3.827,259,1.441,270,2.698,285,2.953,335,4.17,385,3.85,462,2.029,663,6.336,805,2.891,807,2.307,808,2.3,810,6.171,815,2.275,1696,5.463,1990,4.333,1996,6.171,1997,6.786]],["t/3234",[0,1.088,3,2.182,27,0.603,29,2.5,33,1.907,34,2.084,59,2.304,60,1.947,64,3.699,70,4.256,75,4.834,84,1.575,98,3.725,102,2.815,108,3.807,121,2.072,123,1.386,157,2.001,158,4.549,174,3.748,188,2.491,197,4.206,207,1.922,242,2.85,251,2.988,323,3.116,354,6.937,447,4.061,482,3.072,527,3.35,662,3.101,663,4.443,913,3.699,1998,4.443,1999,4.495]],["t/3236",[22,2.171,27,0.936,33,2.406,98,4.701,107,3.217,121,1.775,147,2.812,229,3.738,243,4.351,283,4.458,423,5.427,584,4.636,702,4.544,868,4.574,1008,4.636,1561,7.058,1990,4.955,2000,6.732]],["t/3238",[21,4.268,22,1.86,29,3.323,43,6.693,67,5.099,78,4.557,84,2.094,107,2.756,108,5.061,109,7.885,110,3.973,111,4.381,319,4.479,913,4.917,1427,6.048,1593,5.906]],["t/3240",[22,2.125,33,2.896]],["t/3242",[9,0.891,22,0.627,23,2.292,27,0.768,28,3.033,29,4.03,30,1.256,31,1.461,32,1.492,33,1.398,34,1.528,35,2.389,39,1.634,43,4.684,53,1.445,60,1.427,65,4.112,67,5.154,72,2.575,73,2.575,78,1.535,84,2.116,99,1.431,108,1.705,122,1.236,133,1.116,163,2.015,166,0.986,168,1.431,171,2.537,183,2.038,196,1.582,198,1.852,223,1.634,241,1.835,319,2.469,324,2.064,344,1.907,434,1.816,449,1.634,482,2.251,530,2.038,532,1.718,538,5.412,549,1.954,550,1.835,562,1.526,570,1.39,662,1.389,817,1.453,841,2.75,844,1.705,897,1.803,974,1.613,994,2.119,1024,1.819,1033,2.902,1036,1.693,1166,2.15,1200,4.099,1202,1.613,1593,5.97,1636,1.788,1778,2.15,1780,6.525,1909,1.773,2001,3.292,2002,2.878,2003,5.721,2004,3.042,2005,2.657,2006,2.755,2007,3.042,2008,4.978,2009,3.042,2010,8.178,2011,7.301,2012,5.387,2013,6.945,2014,3.042,2015,7.301,2016,4.978,2017,3.042,2018,7.301,2019,3.042,2020,3.292,2021,3.042,2022,3.292,2023,3.292,2024,3.042,2025,3.042,2026,3.042,2027,2.755,2028,2.755,2029,3.042,2030,3.042,2031,3.292,2032,3.042,2033,3.042,2034,3.042,2035,2.878,2036,3.042,2037,3.042,2038,2.878,2039,2.878,2040,4.978,2041,3.042]],["t/3244",[0,0.99,3,1.984,23,2.321,25,2.608,27,0.818,29,2.782,39,2.142,65,3.86,67,5.5,72,3.375,73,3.375,84,1.432,99,1.146,102,1.653,122,1.62,163,1.614,166,1.293,171,2.48,202,2.128,223,2.142,285,2.433,323,1.829,336,3.987,482,1.803,538,5.603,549,2.424,550,2.406,565,2.157,570,1.114,573,1.754,593,2.499,630,2.252,783,2.778,817,1.904,841,2.202,974,2.114,994,2.778,1024,2.384,1033,2.324,1161,4.751,1200,5.085,1202,2.114,1593,4.944,1636,2.343,1778,2.818,1780,6.949,1909,2.324,2003,5.592,2005,3.482,2006,3.611,2007,3.987,2008,6.176,2009,3.987,2010,8.71,2011,8.511,2013,6.072,2014,3.987,2015,8.511,2016,6.176,2017,3.987,2018,8.511,2019,3.987,2024,3.987,2025,3.987,2026,3.987,2027,3.611,2028,3.611,2035,3.772,2038,3.772,2039,3.772,2040,6.176,2041,3.987,2042,7.008,2043,3.611,2044,6.683,2045,3.987,2046,4.315]],["t/3246",[22,2.022,84,2.276,160,5.383,161,3.54,553,4.243,913,5.346,1427,6.575]],["t/3248",[21,4.017,22,2.343,27,0.755,33,2.386,78,4.289,81,3.015,105,4.056,108,4.764,109,7.422,110,3.739,111,4.124,120,2.675,133,3.117,161,3.782,181,2.92,553,4.533,913,4.629]],["t/3250",[1,0.954,3,1.104,9,1.228,10,0.588,12,2.529,13,1.662,14,1.554,16,1.233,23,2.304,26,1.038,27,0.656,29,2.296,33,0.964,34,1.054,38,2.762,46,1.231,60,1.313,61,1.196,63,1.662,64,2.493,67,1.109,70,0.817,78,0.991,84,1.987,99,1.579,108,1.101,121,0.579,122,0.798,147,0.644,160,2.511,161,2.827,162,1.062,166,1.114,171,2.205,181,1.18,182,1.821,190,0.919,199,2.762,223,1.845,225,0.629,231,1.028,235,0.675,253,1.754,257,0.901,259,0.661,285,1.804,312,0.528,333,0.985,359,1.048,366,2.428,396,0.457,425,6.776,435,1.231,437,1.219,449,1.055,470,2.072,476,1.285,482,2.484,483,2.828,530,1.315,549,2.449,550,2.072,553,1.979,562,2.297,570,2.189,606,1.617,624,3.337,634,3.337,660,0.872,817,0.938,841,3.033,894,1.126,913,1.07,974,2.427,1024,1.174,1033,2.002,1036,1.911,1099,1.055,1155,1.3,1200,3.77,1201,1.145,1202,1.041,1203,1.315,1241,2.698,1294,1.456,1322,1.778,1388,3.308,1397,1.368,1593,1.285,1601,1.94,1604,2.324,1615,2.907,1626,6.354,1636,1.154,1773,1.778,1778,1.388,1780,8.044,1793,1.482,1834,1.778,1909,1.145,1955,3.77,2003,3.11,2005,1.715,2010,1.858,2013,4.412,2021,3.435,2027,1.778,2028,1.778,2029,1.964,2030,1.964,2032,1.964,2033,1.964,2034,1.964,2035,1.858,2036,1.964,2037,1.964,2038,3.249,2039,1.858,2047,1.858,2048,3.249,2049,5.943,2050,2.125,2051,2.125,2052,4.954,2053,2.125,2054,1.715,2055,3.717,2056,2.125,2057,2.125,2058,3.717,2059,1.715,2060,4.145,2061,2.125,2062,2.125,2063,2.125,2064,2.125,2065,2.125,2066,2.125,2067,2.125,2068,2.125,2069,2.125,2070,2.125,2071,2.125,2072,2.759,2073,1.964,2074,2.125,2075,3.717,2076,2.125,2077,4.954,2078,1.542,2079,2.125,2080,2.125,2081,3.717,2082,2.125,2083,2.125,2084,2.125,2085,1.858,2086,2.125,2087,2.125,2088,3.717,2089,2.125,2090,1.778,2091,1.964,2092,3.435,2093,1.964,2094,3.717,2095,2.125,2096,2.125,2097,2.125,2098,1.964,2099,2.125,2100,2.125,2101,1.617,2102,2.125]],["t/3252",[0,1.338,1,0.976,2,1.269,3,2.244,9,0.839,10,2.499,12,2.589,16,1.882,23,1.28,25,3.066,27,0.821,29,2.57,30,1.935,39,2.518,46,1.679,53,2.227,60,2.002,84,1.087,102,1.943,121,0.79,133,1.719,147,1.538,148,0.951,161,3.567,199,5.035,231,1.403,259,1.605,285,3.644,323,2.151,333,2.352,339,1.875,406,1.072,433,2.968,434,2.399,462,1.269,549,3.63,550,4.213,553,3.019,561,2.909,565,2.536,593,2.938,624,3.417,803,2.999,805,2.085,807,1.443,808,1.439,876,2.999,974,3.703,1033,2.732,1123,2.339,1124,3.968,1161,6.421,1200,3.86,1201,2.732,1203,3.14,1204,3.222,1293,2.938,1301,3.538,1574,3.313,1593,3.066,1595,1.854,1600,4.688,1604,3.545,1626,3.475,1668,4.094,1798,3.417,2003,4.245,2042,8.845,2043,4.245,2101,3.86,2103,7.557,2104,3.86,2105,5.073,2106,5.073,2107,5.073,2108,5.073,2109,5.073,2110,5.073]],["t/3254",[0,0.509,3,2.407,9,1.579,12,1.754,14,1.459,16,1.389,23,2.137,26,0.6,27,0.889,29,1.169,33,1.827,34,0.975,39,1.706,46,1.847,60,0.91,64,2.808,78,2.602,84,2.045,85,1.471,99,1.482,104,1.805,105,3.185,108,2.89,121,1.387,123,0.648,161,2.701,171,2.07,181,1.091,207,0.899,215,1.185,225,1.017,227,0.698,235,1.771,259,0.991,285,2.951,312,0.853,323,1.457,333,1.593,335,1.767,353,4.127,396,0.74,417,2.244,425,6.167,435,3.231,436,2.501,437,3.199,447,1.899,449,1.706,452,1.971,475,2.127,482,2.332,529,4.472,531,1.971,535,2.032,537,2.212,553,2.813,565,1.718,570,1.817,593,1.99,606,2.615,624,2.315,630,3.675,826,2.315,974,3.45,1014,3.372,1036,1.767,1099,1.706,1245,2.494,1294,2.354,1397,2.212,1604,1.612,1615,4.363,1636,1.866,1773,2.876,1778,3.643,1780,7.761,1781,2.876,1782,4.668,1783,2.876,1788,5.155,1793,2.397,1955,4.245,2013,4.141,2028,2.876,2042,2.615,2043,2.876,2045,6.507,2072,2.551,2078,2.494,2090,2.876,2091,3.176,2092,5.155,2093,3.176,2104,2.615,2111,7.042,2112,3.436,2113,3.436,2114,3.436,2115,3.004,2116,3.004,2117,3.004,2118,6.782,2119,3.436,2120,3.436,2121,7.042,2122,3.004,2123,3.436,2124,3.436,2125,3.176]],["t/3256",[14,2.016,22,2.381,28,4.499,30,2.942,33,3.124,39,3.828,46,2.553,52,5.597,56,4.897,87,4.299,99,2.048,120,1.818,122,2.895,133,2.614,148,2.124,157,2.066,168,3.351,181,2.448,195,4.716,393,3.067,398,6.062,408,5.282,431,4.422,443,4.466,485,3.661,569,6.452,573,3.135,604,4.716,801,5.597,802,4.024,865,5.867,893,5.112,913,3.881,1963,5.378]],["t/3258",[0,1.604,215,3.735,805,2.988,814,6.475,1964,9.064]],["t/3260",[22,1.946,27,0.839,33,2.653,99,2.717,101,7.005,357,5.808,573,4.158,601,3.206,1743,7.998,1965,7.422,1966,8.252]],["t/3262",[0,1.158,22,1.948,23,2.257,33,2.656,34,2.218,59,1.834,70,3.008,75,3.416,81,2.564,99,2.078,107,2.206,111,3.507,121,2.074,147,3.46,218,4.841,259,2.291,275,4.408,840,4.321]],["t/3264",[16,1.151,22,1.957,23,2.12,26,1.967,27,0.701,28,2.051,29,2.905,31,2.051,33,2.923,34,2.916,39,2.296,62,2.265,64,2.327,65,4.03,74,3.432,90,2.556,91,1.166,99,1.228,101,3.168,104,1.496,107,1.304,111,3.829,120,1.09,121,0.72,123,0.872,124,1.623,148,0.867,157,1.435,181,1.468,189,3.871,190,3.047,198,2.602,207,1.209,216,1.888,275,1.683,285,1.683,288,2.209,315,2.678,338,2.395,382,2.03,393,1.839,396,0.995,400,1.468,418,2.343,485,3.346,489,4.476,562,2.144,571,1.786,604,2.828,635,2.073,662,1.951,671,2.555,707,2.041,780,3.115,802,3.678,840,2.555,909,2.073,995,4.476,1014,4.26,1016,3.225,1024,2.555,1088,3.066,1104,6.79,1245,3.356,1324,5.232,1582,3.356,1583,3.432,1793,4.915,1975,3.731,1976,3.432,1979,3.731,1980,3.731,1981,3.356,1982,2.862,1983,3.168,2126,2.977,2127,5.897,2128,4.624,2129,4.273,2130,4.624,2131,4.273]],["t/3266",[0,1.147,1,1.773,2,3.082,3,2.735,16,1.305,26,0.915,27,0.835,29,3.132,59,1.817,62,2.568,107,2.184,120,2.769,121,1.583,123,1.461,124,2.718,133,1.777,159,3.067,189,3.069,193,4.107,225,1.552,226,1.814,227,2.067,239,4.271,243,2.459,251,2.131,259,1.376,288,2.504,406,2.548,485,3.677,573,2.131,584,2.62,643,2.779,662,2.212,778,5.954,779,5.89,780,5.217,823,5.002,824,4.579,834,3.286,836,3.476,879,3.677,880,3.383,1032,3.067,1203,3.245,1968,4.441,2132,4.582,2133,4.582]],["t/3268",[0,1.319,26,1.112,27,0.843,59,2.921,62,3.12,70,3.951,89,2.674,107,2.897,121,1.978,123,1.68,169,2.469,189,3.424,225,1.886,226,2.204,227,2.087,238,4.81,243,4.178,259,1.977,275,3.243,335,3.274,420,2.637,584,3.183,643,3.375,733,3.512,734,3.205,879,5.281,880,4.859,1968,5.108,1990,3.402,1991,5.905,1992,6.967,2132,5.567,2133,5.567]],["t/3270",[0,1.363,26,1.166,27,0.548,59,2.794,62,3.272,70,3.541,75,4.602,89,2.804,107,2.971,121,2.001,123,1.737,169,2.59,189,3.511,225,1.977,226,2.311,227,1.357,238,4.555,243,4.319,259,2.018,275,3.352,335,3.434,420,2.765,584,3.338,643,3.54,733,2.634,734,3.361,879,5.002,880,4.602,1968,5.279,1990,3.568,1991,6.104,1994,7.201,2132,5.838,2133,5.838]],["t/3272",[1,1.97,2,2.562,3,2.322,14,2.045,23,1.734,27,0.642,59,2.401,70,3.008,75,3.416,91,1.972,97,1.942,107,2.206,121,1.956,125,4.125,253,3.691,259,1.39,270,2.635,285,2.847,303,3.166,335,4.021,385,3.713,462,1.957,663,6.188,805,2.824,807,2.224,808,2.218,810,5.951,815,2.194,1696,5.268,1990,4.178,1996,5.951,1997,6.544]],["t/3274",[0,1.21,1,1.573,2,2.916,3,3.127,27,0.956,29,2.779,33,2.12,34,2.317,84,2.257,102,3.129,107,2.304,108,4.232,120,1.926,121,1.272,161,2.723,197,3.498,227,1.66,251,3.322,323,3.464,447,4.515,482,4.871,527,3.724,553,3.264,736,2.159,791,5.93,913,4.112,1204,5.189,1574,5.336,1798,5.504,1999,4.997]],["t/3276",[22,2.171,27,0.936,33,2.959,75,4.051,107,3.217,121,1.775,147,2.812,229,3.738,243,4.351,283,4.458,423,5.427,584,4.636,868,4.574,1008,4.636,1561,7.058,1990,4.955,2000,6.732]],["t/3278",[9,1.74,96,4.692,97,2.613,140,5.258,159,6.155,186,3.209,356,4.572,2134,8.803]],["t/3280",[22,2.022,96,5.518,97,3.073,148,1.991,913,5.346]],["t/3283",[99,2.667,100,5.239,121,1.863,140,5.018,171,3.725,242,3.893,259,1.784,275,4.357,738,6.762,2135,10.038,2136,9.277]],["t/3285",[0,0.906,1,1.178,2,2.997,27,0.897,59,2.809,89,3.637,100,3.194,107,1.726,120,1.442,121,1.958,123,1.634,169,2.373,171,2.271,189,2.04,193,2.729,225,1.812,226,2.118,227,2.344,238,4.347,239,2.57,243,4.063,259,1.787,275,3.153,406,2.531,420,2.534,733,4.31,734,3.08,823,3.324,824,3.618,879,4.773,880,4.391,912,4.52,1968,3.509,1991,4.057,2137,3.788,2138,5.655,2139,4.938,2140,5.655]],["t/3287",[0,1.184,23,2.068,27,0.656,34,2.945,60,3.352,62,3.915,107,2.254,121,1.795,171,2.966,181,3.296,188,2.709,251,3.249,259,1.42,366,5.219,748,6.074,792,5.219,1069,6.276,1388,3.915,2136,7.385,2141,7.385,2142,6.986,2143,7.991,2144,7.991,2145,7.991,2146,9.594,2147,7.991,2148,6.986]],["t/3289",[1,1.505,10,2.163,23,1.734,27,0.642,59,1.834,60,2.072,85,3.348,91,1.972,97,1.942,121,1.593,123,1.475,140,3.909,166,2.343,171,2.902,186,3.481,259,1.39,262,2.936,270,2.635,292,3.585,313,4.389,327,5.555,383,7.227,385,3.713,406,1.653,805,2.824,807,2.224,808,2.218,815,2.194,1116,6.311,1123,3.605,2149,7.82,2150,2.437,2151,6.311,2152,7.82]],["t/3291",[1,1.633,10,2.347,23,1.828,27,0.696,60,2.248,171,3.149,186,3.619,235,2.694,259,1.508,270,2.184,344,4.915,406,1.793,601,3.383,805,2.977,807,2.414,808,2.407,912,4.429,976,7.101,1123,3.912,1128,7.101,1559,7.832,2146,7.842,2150,2.644,2153,8.486,2154,8.486,2155,8.486,2156,8.486]],["t/3293",[70,3.792,85,4.221,107,2.781,123,1.86,140,4.928,186,3.611,356,4.284,434,2.619,523,3.839,573,4.008,587,5.354,671,5.447,814,5.893,1116,7.956]],["t/3295",[14,1.961,22,2.425,27,0.817,28,3.327,30,2.861,33,3.216,39,3.723,46,2.483,49,4.587,52,5.444,56,4.763,81,2.459,92,4.344,93,4.301,94,3.009,96,4.986,97,2.776,99,1.992,148,2.095,186,2.288,195,4.587,338,3.885,370,5.332,371,5.332,372,5.138,393,2.983,408,5.138,573,3.049,702,3.674,893,4.972,913,5.012,1963,5.231,2157,5.866]],["t/3297",[0,1.604,215,3.735,805,2.988,814,6.475,1964,9.064]],["t/3299",[22,1.843,27,0.795,33,2.512,96,4.319,97,2.405,99,2.573,121,1.823,186,2.954,357,5.5,373,7.08,573,3.938,601,3.036,1743,7.575,1965,7.029,1966,7.815]],["t/3301",[22,1.958,23,2.323,33,2.044,59,1.848,70,3.029,75,3.441,81,2.582,96,3.513,99,2.092,111,3.532,121,2.048,147,3.472,259,2.338,275,4.169,373,4.762,702,3.859]],["t/3303",[0,0.574,1,0.746,16,0.964,22,1.452,23,2.198,26,1.969,27,0.504,28,1.718,29,2.088,31,1.718,33,2.84,34,3.198,39,1.923,62,1.898,65,3.6,70,1.49,74,4.558,90,2.767,96,3.403,97,1.525,99,1.029,110,3.53,111,2.753,121,1.187,123,0.731,124,1.359,148,1.627,166,1.84,181,1.23,189,3.357,190,3.299,198,2.179,207,1.013,216,1.582,270,0.997,275,1.41,285,1.41,288,3.644,313,1.49,315,2.243,338,2.006,360,3.712,382,1.7,385,1.839,393,1.54,489,4.845,510,1.137,560,3.556,562,1.796,571,1.496,587,2.104,635,1.737,662,1.634,671,3.393,702,3.008,779,2.243,780,2.609,802,2.021,817,1.709,840,2.14,881,2.221,909,1.737,910,2.653,967,2.29,968,2.29,969,2.341,970,2.369,995,3.9,1008,1.936,1014,2.341,1016,2.701,1020,2.315,1021,3.125,1022,1.991,1024,2.14,1026,1.898,1027,2.428,1028,2.811,1104,7.16,1135,2.29,1245,2.811,1249,2.428,1324,5.664,1582,2.811,1583,2.875,1793,5.321,1852,3.241,1975,3.125,1976,2.875,1977,3.241,1978,3.241,1979,3.125,1980,3.125,1981,2.811,1982,2.397,1983,2.653,2158,3.579,2159,3.241]],["t/3305",[0,1.283,16,1.524,22,1.165,23,2.342,26,1.755,27,0.502,33,2.247,34,3.568,60,1.621,96,2.729,99,1.626,104,1.98,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,275,3.66,360,3.699,373,3.699,374,2.871,660,2.511,800,6.04,909,3.884,1022,3.146,2160,5.655,2161,5.349,2162,5.349,2163,7.571,2164,5.349,2165,8.55,2166,5.349,2167,5.349,2168,5.349]],["t/3307",[22,2.042,26,1.873,62,5.255,96,4.784,275,3.905,800,7.481]],["t/3309",[22,1.271,23,2.429,26,1.166,34,3.378,59,1.567,62,3.272,70,2.568,75,2.917,96,2.979,121,1.916,147,2.025,259,2.117,275,2.431,702,3.272,800,4.658,2165,8.881]],["t/3311",[0,1.151,1,1.778,2,3.22,3,3.229,16,1.312,27,0.892,59,2.391,62,2.581,67,2.749,96,2.349,107,2.192,120,2.774,121,1.771,123,1.466,124,2.728,159,3.082,189,2.59,193,4.119,225,1.56,226,1.823,227,2.209,239,4.281,243,2.471,259,1.812,275,2.829,406,2.687,420,2.181,573,2.142,584,2.633,643,2.792,662,2.223,823,5.016,824,4.595,834,3.302,836,3.492,879,3.69,880,3.395,1968,4.457,1989,3.609,2137,4.811,2139,6.271]],["t/3313",[0,1.131,1,0.99,2,3.12,27,0.827,59,2.814,62,2.52,70,3.503,89,3.207,107,2.569,120,1.8,121,1.907,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.188,238,4.357,239,3.207,243,3.582,259,1.791,275,2.78,335,2.645,406,2.635,420,2.13,584,2.571,643,2.726,733,3.974,734,2.589,823,4.147,824,4.515,879,4.784,880,4.402,1968,4.379,1990,2.748,1991,5.063,1992,5.973,1993,6.162,2137,4.727,2139,6.162]],["t/3315",[0,1.131,1,0.99,2,3.12,27,0.747,59,2.739,62,2.52,70,3.503,75,3.978,89,3.207,107,2.569,120,1.8,121,1.969,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.048,238,4.357,239,3.207,243,3.582,259,1.791,275,2.78,335,2.645,406,2.635,420,2.13,584,2.571,643,2.726,733,3.974,734,2.589,823,4.147,824,4.515,879,4.324,880,3.978,1968,4.379,1990,2.748,1991,5.063,1994,5.973,1995,6.162,2137,4.727,2139,6.162]],["t/3317",[0,1.115,1,0.972,2,3.106,27,0.739,59,2.723,62,2.474,70,3.464,75,3.29,89,3.163,107,2.54,120,1.775,121,2.007,123,1.421,169,1.958,189,2.51,193,3.359,225,1.495,226,1.747,227,2.029,238,4.318,239,3.163,243,3.533,259,1.775,275,2.742,335,2.596,406,2.623,420,2.091,584,2.524,643,2.676,702,4.413,733,3.938,734,2.541,823,4.091,824,4.453,879,4.276,880,3.934,1968,4.319,1990,2.698,1991,4.993,2137,3.126,2139,6.078,2169,6.302,2170,6.302,2171,3.348]],["t/3319",[0,0.794,1,0.63,2,0.819,3,0.972,22,1.02,23,2.285,26,0.571,27,0.269,34,3.018,59,2.188,62,2.626,90,2.855,91,0.825,97,0.813,99,2.091,107,1.92,110,1.33,121,0.834,123,0.617,125,1.319,131,1.659,147,0.992,148,0.613,157,2.006,158,3.318,171,1.989,181,2.162,185,3.609,186,2.077,188,1.817,190,1.415,197,3.719,251,4.18,259,0.582,270,1.38,275,2.479,285,1.191,335,1.683,366,3.501,373,3.24,382,1.437,420,2.22,462,0.819,478,1.67,549,1.187,571,3.04,572,3.501,573,1.33,646,6.433,662,1.381,663,3.24,702,1.603,805,1.479,807,0.931,808,0.928,810,2.49,815,0.918,841,1.67,894,2.841,912,1.708,976,2.738,1052,1.636,1123,1.509,1128,2.738,1729,6.157,1931,7.149,1990,1.748,1998,1.978,2148,4.686,2172,3.272,2173,3.272,2174,3.272,2175,3.272,2176,9.85,2177,3.272,2178,2.738,2179,2.86,2180,3.024,2181,2.86,2182,2.738,2183,3.272,2184,3.272,2185,3.272,2186,4.934,2187,7.275,2188,3.272,2189,7.275,2190,3.272,2191,3.272,2192,3.272,2193,3.272,2194,3.272,2195,3.272,2196,3.272,2197,3.272,2198,3.272,2199,3.272,2200,3.024,2201,3.272,2202,4.686,2203,3.024,2204,5.36,2205,4.954,2206,3.272,2207,3.024]],["t/3321",[0,1.088,3,2.182,22,1.399,27,0.806,29,2.5,33,2.549,34,2.084,49,4.495,60,2.603,81,2.409,84,1.575,96,4.936,97,2.44,99,1.952,102,2.815,108,3.807,121,1.839,147,2.228,148,1.377,174,3.748,186,3.375,197,3.146,207,1.922,242,2.85,251,2.988,275,2.676,323,3.116,356,4.269,370,5.225,371,5.225,372,5.035,373,4.443,447,4.061,482,3.072,527,3.35,660,3.015,913,4.944,1999,4.495,2157,5.748]],["t/3323",[22,2.005,27,0.864,33,2.12,94,3.278,96,3.644,97,2.029,107,2.97,121,1.814,125,3.292,147,2.477,178,3.464,229,3.292,240,5.808,243,3.833,253,3.855,283,3.927,294,5.26,370,5.808,371,5.808,372,5.597,377,4.437,378,5.93,379,5.26,380,6.593,381,5.808,423,4.78,584,4.084,718,5.26,868,4.029,1008,4.084,1561,6.217,1990,4.365,2000,5.93]],["t/3325",[21,4.306,22,2.253,78,4.597,107,2.781,108,5.106,109,7.956,110,4.008,111,4.421,160,4.997,161,3.286,553,3.938,913,4.962,1293,5.71,1427,6.102]],["t/3327",[22,2.002,160,6.235,161,4.1,553,4.914,913,5.295]],["t/3329",[7,3.23,9,1.104,23,2.236,27,0.932,78,3.114,83,2.979,108,3.459,161,3.784,162,3.338,181,3.605,183,4.134,231,1.847,253,5.358,285,3.836,312,2.286,374,4.319,435,3.868,437,3.83,449,3.315,492,4.134,553,2.668,807,2.618,844,3.459,913,4.633,1241,4.847,1293,3.868,1612,5.588,2048,5.838,2059,5.389,2208,6.678,2209,9.206,2210,11.354,2211,6.678,2212,9.206,2213,6.678,2214,6.678]],["t/3331",[8,4.366,9,1.072,23,2.195,27,0.532,53,2.845,54,3.964,60,1.717,83,2.891,99,1.722,160,4.57,161,3.927,162,3.239,171,3.848,190,2.802,203,6.772,239,2.722,242,2.513,253,4.255,285,2.36,312,2.239,374,3.04,462,1.622,553,4.142,570,2.327,601,2.032,624,4.366,913,3.262,974,3.175,1063,2.36,1626,6.177,1778,4.233,1780,7.232,2005,5.23,2013,4.811,2054,5.23,2072,7.697,2215,7.882,2216,5.989,2217,8.332,2218,8.332,2219,5.989,2220,6.481,2221,6.481]],["t/3333",[0,1.211,23,2.126,27,0.789,29,3.803,46,1.87,60,2.963,67,2.947,83,3.647,84,2.06,161,3.204,163,3.058,171,3.034,190,2.442,203,5.34,228,3.376,231,1.562,239,2.371,242,3.171,253,2.665,285,2.977,312,1.402,323,3.467,374,2.649,433,3.304,447,3.12,482,3.417,492,3.496,549,2.048,550,3.148,553,2.256,570,2.719,705,4.099,725,2.947,974,2.767,1024,3.12,1033,3.042,1161,4.015,1626,3.869,1778,3.688,1780,6.704,1881,3.938,2005,4.557,2013,4.192,2027,4.725,2054,4.557,2072,4.192,2101,4.297,2215,4.936,2217,7.556,2218,7.556,2219,5.218,2222,5.647,2223,9.612,2224,5.647,2225,5.218,2226,5.647,2227,5.647,2228,5.647]],["t/3335",[83,4.692,163,4.601,231,2.91,285,4.479,344,6.093,570,2.715]],["t/3337",[3,2.54,9,1.969,27,0.977,33,2.219,78,3.988,83,3.814,108,4.43,161,4.173,162,4.275,181,2.715,183,5.294,285,3.114,374,4.012,400,2.715,435,4.953,436,3.835,437,4.904,462,2.14,492,5.294,532,4.463,844,4.43,1293,4.953,2048,7.476,2229,10.02]],["t/3339",[9,0.746,10,1.248,23,2.313,27,0.69,33,1.17,34,2.385,54,2.758,60,2.498,83,2.011,84,0.966,99,1.198,160,2.286,161,3.142,162,2.254,171,2.566,181,2.67,190,1.95,199,2.514,200,1.921,226,1.561,235,1.432,242,2.681,253,2.128,259,1.229,270,1.78,312,1.717,333,2.091,339,1.667,374,2.116,400,1.432,434,1.198,436,2.022,449,2.239,462,1.129,529,2.864,530,2.792,537,2.903,544,2.696,553,2.762,570,2.17,904,2.336,974,2.209,1063,1.642,1099,2.239,1301,3.145,1328,3.639,1626,4.737,1636,5.121,1778,4.516,1780,7.789,1781,3.774,1782,3.774,1783,3.774,1784,3.942,1793,3.145,2013,5.133,2054,3.639,2072,5.133,2085,3.942,2115,6.044,2116,6.044,2117,6.044,2122,3.942,2125,4.167,2215,3.942,2216,4.167,2229,4.167,2230,4.167,2231,4.167,2232,4.167,2233,4.167,2234,4.167,2235,4.167,2236,4.167,2237,4.167,2238,4.167,2239,4.167,2240,6.39,2241,4.167,2242,4.167,2243,4.167,2244,4.51,2245,4.51,2246,4.51]],["t/3341",[23,2.312,27,0.437,60,2.074,83,2.372,85,2.277,162,2.658,171,2.904,200,2.266,226,1.841,231,2.569,253,2.51,259,1.391,270,2.015,312,1.944,339,1.966,374,3.672,400,1.689,436,2.385,492,3.292,529,3.378,537,3.424,561,3.05,570,2.397,671,2.939,747,3.781,904,2.755,1099,2.64,1626,5.362,1636,5.044,1778,5.112,1780,8.446,1781,4.451,1782,4.451,1783,4.451,1784,4.649,1793,3.709,1955,4.047,2013,5.81,2054,4.292,2085,4.649,2115,6.842,2116,6.842,2117,6.842,2122,4.649,2225,4.915,2231,7.233,2232,4.915,2233,4.915,2234,4.915,2235,4.915,2236,4.915,2237,4.915,2238,4.915,2239,4.915,2240,7.233,2241,4.915,2242,4.915,2243,4.915,2247,7.827,2248,5.318,2249,5.318,2250,5.318]],["t/3343",[83,4.692,163,4.601,231,2.91,285,4.479,344,6.093,570,2.715]],["t/3345",[22,1.765,27,1.014,33,2.406,37,4.351,57,6.732,81,3.041,141,6.053,153,5.038,359,6.092,631,3.932,1357,4.351,1358,8.571,1365,8.108,2251,5.741,2252,9.275,2253,5.814]],["t/3347",[9,0.985,21,4.325,23,1.933,27,0.697,34,2.409,44,5.468,46,1.971,100,3.107,103,3.131,107,1.679,147,1.805,153,3.234,159,3.483,168,2.587,190,2.574,197,2.549,211,3.641,231,2.35,235,2.696,268,4.804,275,3.605,303,2.41,313,3.267,323,4.198,393,2.368,436,2.67,523,2.318,553,2.378,630,3.107,698,4.01,861,4.87,865,4.53,898,6.453,899,6.526,974,2.917,1103,6.191,1357,4.645,1359,3.732,1362,4.078,1363,4.969,1364,4.657,2251,6.129,2254,5.953,2255,5.018,2256,4.982,2257,4.982,2258,5.953,2259,3.947,2260,4.804,2261,5.204,2262,6.854,2263,4.982,2264,4.657,2265,4.01]],["t/3349",[21,4.43,26,1.347,27,0.633,46,3.358,81,2.528,102,2.954,148,1.445,231,2.806,235,2.448,316,5.482,523,3.003,553,3.08,707,3.403,861,4.422,898,6.774,899,6.851,1103,5.816,1233,3.778,1359,4.833,1360,8.865,1361,8.487,1373,5.724,1374,4.773,2251,4.773,2263,6.452,2266,7.71,2267,7.21,2268,5.724,2269,6.031,2270,8.865,2271,7.125,2272,6.832,2273,6.452]],["t/3351",[16,1.818,27,1.008,35,5.299,46,2.417,65,4.615,100,3.81,102,2.796,121,1.522,122,2.741,141,3.577,147,2.213,237,3.999,242,2.831,267,4.364,276,4.84,290,5.299,398,4.364,400,2.318,551,4.918,666,3.328,688,6.953,707,3.222,733,2.879,734,5.551,744,5.846,745,5.19,793,4.317,813,5.71,861,5.609,894,5.184,949,5.001,1357,3.425,1362,5.001,2255,3.7,2265,4.918,2272,4.918,2274,8.549,2275,7.3,2276,6.381,2277,7.26]],["t/3353",[9,1.199,20,4.119,22,2.092,27,0.595,121,1.515,122,2.723,142,4.335,147,2.199,148,1.359,153,3.939,166,2.173,212,3.105,241,4.043,262,2.723,356,3.152,379,7.077,382,3.184,404,3.756,438,5.264,666,4.438,668,3.382,699,7.405,706,5.156,760,4.2,896,5.386,1003,5.518,1587,4.606,1869,5.672,1966,5.852,2265,7.915,2277,5.383,2278,6.702,2279,6.339,2280,7.067,2281,5.672,2282,6.339,2283,6.339,2284,6.702,2285,5.156,2286,6.702,2287,6.339]],["t/3355",[11,4.027,27,0.829,80,4.527,86,3.739,89,3.215,100,3.996,120,1.805,121,1.758,125,3.086,147,2.321,157,1.56,163,2.864,216,3.127,241,5.628,257,3.246,316,5.444,326,3.996,398,4.577,400,2.431,573,3.113,605,5.245,698,5.158,793,4.527,861,4.391,1008,3.827,1357,3.592,1371,6.407,1373,5.684,1556,4.93,2255,6.086,2265,5.158,2277,5.684,2281,5.989,2288,6.693,2289,6.179,2290,7.076,2291,7.076,2292,7.657]],["t/3358",[9,1.75,46,2.725,80,4.867,151,6.58,194,4.816,206,3.44,207,2.152,231,2.277,242,3.192,300,5.852,303,3.332,353,3.559,408,5.639,418,4.172,428,6.068,438,5.974,532,4.296,557,5.034,687,4.92,729,3.317,1063,2.997,1233,4.033,1357,3.861,1683,5.852,1716,6.643,2255,5.363,2293,8.34,2294,7.195]],["t/3360",[0,1.681,27,0.931,121,1.916,186,2.805,206,3.844,215,3.172,231,2.544,243,4.314,358,8.04,359,4.536,361,6.415,542,6.539,553,3.674,593,5.327,630,4.8,747,6.539,1412,7.194,1819,5.625,2295,9.197]],["t/3362",[26,1.529,27,0.903,33,2.272,34,2.484,121,1.363,122,3.288,123,1.652,124,4.225,128,5.356,147,3.337,148,1.641,212,4.712,242,3.396,764,2.484,1233,4.29,1318,6.849,1363,5.124,2265,7.414,2296,8.757,2297,8.757,2298,6.663,2299,8.092,2300,8.092]],["t/3364",[27,0.88,29,1.992,46,2.78,62,2.87,89,2.46,90,2.125,99,1.556,111,2.627,120,1.381,121,1.307,133,1.986,169,2.272,171,2.174,184,2.094,190,4.243,216,2.393,231,2.323,235,2.665,239,2.46,242,2.272,259,2.161,300,5.969,313,2.253,349,2.32,377,3.182,396,1.261,495,3.393,565,4.197,582,3.626,588,3.266,593,3.393,628,5.075,632,3.745,658,3.155,684,3.012,687,7.056,729,4.319,783,3.772,789,2.928,801,4.252,814,3.502,861,3.359,1103,3.359,1199,3.946,1233,2.87,1338,4.086,1357,2.748,1362,4.013,1403,3.672,1434,3.266,1683,5.969,2255,2.969,2272,3.946,2301,4.458,2302,5.858,2303,4.582,2304,3.72,2305,6.775,2306,5.858,2307,4.582,2308,5.858,2309,4.902]],["t/3366",[0,1.649,9,1.136,21,1.954,22,0.851,23,1.164,26,0.781,27,0.687,59,1.612,81,1.466,99,2.494,111,2.006,121,0.696,148,1.759,153,2.429,163,2.57,170,2.39,174,2.621,188,1.516,207,1.17,213,4.617,231,2.314,263,3.797,326,2.334,359,2.206,392,1.179,393,1.779,553,1.787,570,2.614,580,2.88,631,4.295,687,2.674,694,5.282,695,2.88,697,2.804,735,3.925,861,2.565,902,4.792,1103,3.94,1126,3.013,1187,3.32,1202,2.191,1313,3.12,1335,3.12,1340,3.743,1357,2.098,1376,2.88,1382,3.743,1384,3.91,1392,3.91,1395,3.61,1508,4.792,1834,3.743,1958,5.228,2251,7.577,2253,2.804,2255,2.267,2293,7.505,2310,4.473,2311,6.35,2312,4.133,2313,7.855,2314,4.133,2315,4.133,2316,4.133,2317,4.133,2318,4.133,2319,4.133,2320,4.133,2321,6.35,2322,8.675,2323,6.35,2324,6.35,2325,3.91,2326,4.133,2327,4.133,2328,4.133,2329,4.133,2330,4.133,2331,4.133]],["t/3368",[2,2.302,9,1.521,22,1.751,27,0.931,46,3.045,78,4.289,81,3.72,127,6.098,128,5.625,148,1.724,263,5.082,285,3.349,290,6.676,359,4.536,697,5.765,876,5.438,994,5.921,1052,4.597,1168,6.539,1669,6.415,2332,9.197]],["t/3370",[0,1.543,21,4.551,22,1.983,27,0.855,99,2.768,553,4.163,861,5.975,1357,4.888,2255,5.281]],["t/3372",[212,3.873,436,4.056,631,5.57,861,5.187,898,6.714,899,6.79,1357,4.243,1359,5.67,1404,6.309,1819,7.471,2253,5.67,2255,5.693,2273,7.569,2333,7.3,2334,7.075,2335,7.569]],["t/3374",[21,4.345,27,0.816,99,2.643,133,4.034,227,2.022,278,6.701,335,5.115,595,5.546,601,3.119,658,5.358,2255,5.042,2336,7.22,2337,9.947]],["t/3376",[14,2.219,16,2.113,21,3.707,70,4.15,78,3.957,107,3.043,115,6.457,133,2.876,207,2.219,213,3.868,225,2.513,227,1.724,382,3.726,393,3.375,631,3.598,674,4.429,691,6.128,761,5.716,1233,4.158,1357,3.981,1727,7.101,2255,5.469,2277,6.299,2338,9.432,2339,7.418,2340,7.842,2341,6.848,2342,8.486]],["t/3378",[14,3.014,16,2.349,21,4.121,99,2.506,107,2.661,225,2.793,631,4,632,4.208,656,5.168,814,5.64,1357,5.407,2255,6.309,2338,8.247,2343,9.302,2344,7.614]],["t/3380",[4,3.84,14,2.772,27,0.555,38,3.769,46,2.238,80,3.997,81,2.216,102,2.59,122,2.538,202,3.334,207,2.428,213,3.082,235,3.366,242,2.622,254,4.353,258,3.804,261,3.84,281,4.806,323,2.866,359,3.334,584,5.3,631,4.839,632,4.141,633,5.176,640,4.631,656,3.703,665,6.738,737,4.415,881,3.877,1357,4.355,1391,5.144,1398,5.657,1819,5.678,2259,4.482,2344,5.456,2345,10.547,2346,9.977,2347,5.91,2348,6.76,2349,8.579,2350,6.76,2351,6.76,2352,6.247,2353,6.76]],["t/3383",[0,0.487,4,1.05,9,0.306,14,0.484,20,1.05,21,0.808,22,1.409,23,1.475,26,0.574,27,0.648,29,1.118,41,1.342,44,2.117,46,1.782,47,1.548,60,2.206,80,1.094,81,0.606,83,0.825,86,1.47,99,2.212,102,1.701,103,0.973,104,1.064,121,1.536,122,0.694,124,0.649,128,1.131,133,0.627,138,1.061,147,0.997,148,0.616,151,1.85,159,1.082,163,2.306,166,1.33,168,0.804,170,0.988,173,1.191,174,0.706,190,3.2,203,1.208,207,0.484,210,0.944,212,1.901,213,0.843,217,1.131,225,1.314,227,0.376,235,0.587,241,1.031,242,1.275,254,1.191,257,0.784,261,1.868,262,0.694,278,2.215,285,0.673,300,2.338,303,2.496,304,1.966,315,1.904,316,1.315,323,1.394,333,0.857,335,0.951,382,0.812,396,0.398,404,0.958,432,1.191,434,0.491,436,1.991,438,1.342,449,0.918,490,1.552,496,1.208,497,1.407,498,2.572,553,3.614,573,0.752,601,0.58,631,1.882,660,2.803,664,1.548,668,0.862,673,0.996,684,0.951,687,2.654,693,2.011,697,1.159,699,2.215,707,0.816,719,0.996,725,2.317,726,1.492,729,1.325,760,1.071,783,1.191,826,2.991,847,1.29,861,1.061,881,1.886,893,1.226,896,3.868,897,1.801,898,5.589,902,1.29,924,2.441,950,1.492,954,1.118,974,0.906,1002,2.752,1049,1.447,1103,1.886,1108,2.715,1118,1.118,1132,1.246,1202,0.906,1233,0.906,1313,2.293,1318,3.472,1322,1.548,1338,1.29,1357,2.525,1362,2.253,1363,4.872,1369,4.095,1373,1.373,1383,1.492,1388,1.611,1559,1.342,1687,2.088,1716,1.492,1722,2.572,1758,1.492,1771,6.513,1819,2.011,1881,2.293,2078,1.342,2251,3.817,2253,1.159,2255,5.116,2262,4.343,2265,4.154,2268,1.373,2272,2.215,2273,5.16,2277,2.441,2279,1.617,2280,3.222,2285,2.338,2287,1.617,2293,4.462,2299,3.039,2305,1.492,2309,2.752,2313,1.548,2334,4.824,2339,1.617,2354,1.709,2355,1.407,2356,1.548,2357,7.908,2358,6.968,2359,6.175,2360,3.906,2361,1.492,2362,1.617,2363,1.709,2364,2.874,2365,1.709,2366,1.492,2367,1.617,2368,1.617,2369,1.709,2370,1.709,2371,1.709,2372,1.709,2373,3.288,2374,1.849,2375,1.849,2376,7.401,2377,7.401,2378,1.849,2379,1.849,2380,1.849,2381,1.617,2382,1.849,2383,1.709,2384,1.849,2385,1.849,2386,3.288,2387,3.288,2388,3.472,2389,5.381,2390,1.849,2391,1.849,2392,1.849,2393,1.849,2394,1.849,2395,1.849,2396,1.849,2397,1.849,2398,1.849,2399,1.849,2400,1.849,2401,1.849,2402,1.849,2403,3.288,2404,1.849,2405,3.288,2406,1.849,2407,1.849,2408,1.849,2409,1.849,2410,1.849,2411,1.849,2412,1.849,2413,1.849,2414,1.849,2415,1.849,2416,1.849]],["t/3385",[0,0.622,1,0.471,9,0.405,14,1.443,20,1.39,21,1.069,22,1.638,23,0.415,26,0.427,27,0.833,41,1.776,44,4.214,46,1.391,60,2.514,75,1.069,80,1.447,81,0.802,86,1.391,99,2.412,102,0.938,103,4.775,104,0.792,120,1.543,121,1.477,122,0.919,124,0.859,133,1.424,137,1.268,147,1.274,148,0.787,151,3.683,153,1.329,163,2.756,164,1.432,166,1.653,174,0.934,182,2.058,190,1.058,192,1.707,196,1.176,203,1.598,207,0.64,210,2.144,225,0.725,231,0.677,233,1.534,235,0.777,241,1.365,242,0.949,254,2.705,262,1.577,276,1.623,278,1.649,280,3.197,300,2.987,303,2.649,315,1.418,316,1.74,323,1.781,333,1.135,335,1.258,353,1.816,356,1.064,374,1.148,382,1.075,396,0.527,400,0.777,404,1.268,412,1.184,418,1.24,432,1.576,434,1.116,438,1.776,443,1.418,494,3.39,496,1.598,497,1.862,498,3.286,553,3.212,573,0.995,601,0.767,631,1.781,658,3.526,660,2.685,662,1.033,668,1.141,673,1.318,684,1.258,687,1.463,693,2.569,699,2.83,729,1.693,760,1.418,840,1.352,847,1.707,861,2.409,893,1.623,896,4.448,899,5.735,950,1.975,974,2.058,977,1.914,985,1.74,1052,1.223,1103,1.404,1118,1.48,1202,1.199,1233,1.199,1322,2.048,1357,1.971,1362,1.677,1363,1.432,1368,6.809,1373,1.817,1374,1.515,1383,1.975,1397,1.576,1546,1.817,1556,1.576,1559,1.776,1601,1.277,1687,1.554,1819,2.569,1881,1.707,1946,2.262,1952,2.048,1965,1.776,2251,2.6,2255,5.145,2265,5.417,2272,4.963,2277,4.097,2279,2.139,2280,4.751,2285,2.987,2287,2.139,2293,2.744,2305,1.975,2309,3.515,2335,8.235,2339,2.139,2354,2.262,2357,2.139,2358,3.515,2360,4.751,2361,1.975,2362,2.139,2363,2.262,2364,3.672,2365,2.262,2366,1.975,2367,2.139,2368,2.139,2369,2.262,2370,2.262,2371,2.262,2372,2.262,2417,1.515,2418,8.041,2419,4.201,2420,4.201,2421,4.201,2422,2.447,2423,2.447,2424,2.447,2425,2.447,2426,2.447,2427,2.447,2428,4.201,2429,2.447,2430,2.139,2431,4.201,2432,4.201,2433,4.201,2434,4.201,2435,2.447]],["t/3387",[1,1.55,2,2.896,3,3.436,9,1.331,22,2.203,27,0.856,33,2.706,53,3.534,163,3.011,170,5.573,181,3.312,197,3.446,227,1.636,235,2.556,239,4.38,359,5.144,396,1.733,406,2.445,462,2.61,481,5.325,532,4.201,733,4.114,2150,2.508]],["t/3389",[1,1.699,2,3.023,3,3.873,27,0.724,46,2.923,94,3.542,98,6.419,120,2.608,124,3.098,207,2.308,227,1.794,396,1.9,406,1.865,462,3.023,736,2.333,1562,4.794]],["t/3391",[1,1.484,10,2.806,23,1.718,59,1.809,60,3.003,91,1.944,97,1.915,123,1.455,174,2.942,259,1.37,270,2.917,312,1.915,313,2.966,327,5.517,354,6.357,356,3.351,406,1.629,434,2.048,478,3.936,507,3.164,510,2.263,720,4.055,736,2.038,805,2.798,807,2.193,808,2.187,815,2.163,1123,4.675,1129,7.361,1308,9.372,2150,2.403,2436,4.024,2437,2.381]],["t/3393",[1,1.262,10,2.515,23,2.127,59,1.538,60,1.738,91,1.654,97,1.629,123,1.237,133,2.223,157,2.125,166,1.965,207,1.715,259,1.166,270,2.686,297,3.951,312,2.258,354,5.699,363,3.114,400,2.082,406,1.386,434,2.415,507,2.691,510,3.063,527,2.99,570,1.693,601,2.85,635,4.077,720,3.449,736,1.733,757,3.256,805,2.508,807,1.865,808,1.86,815,1.84,962,2.865,966,3.041,1035,2.973,1038,3.301,1123,4.191,1307,8.401,1802,2.767,1803,2.973,2150,2.044,2437,2.025,2438,3.256,2439,3.234,2440,5.293,2441,5.293,2442,5.293]],["t/3395",[1,0.844,16,1.091,23,2.027,46,2.735,59,1.028,60,2.461,91,1.105,97,1.089,123,1.752,133,2.293,147,2.051,157,2.604,166,2.783,186,3.061,189,1.461,207,1.769,259,0.779,270,2.127,277,3.117,285,2.463,297,3.59,312,1.68,327,4.021,363,3.212,390,2.681,400,1.392,406,0.926,434,2.666,510,2.726,527,3.084,570,1.131,601,1.374,635,4.165,735,3.875,736,1.158,757,3.359,805,1.866,807,1.247,808,1.243,815,1.23,867,4.938,966,3.137,1008,2.191,1035,3.067,1038,3.405,1063,2.463,1093,5.749,1118,4.09,1123,3.119,1249,2.748,1802,1.85,1803,3.067,2150,1.366,2437,1.353,2438,3.359,2439,3.336,2440,3.538,2441,3.538,2442,3.538,2443,3.832,2444,3.832,2445,6.765,2446,7.221,2447,6.913,2448,7.221,2449,3.832,2450,3.832,2451,3.832]],["t/3397",[1,1.454,10,2.767,23,2.023,59,1.771,60,2.001,91,1.904,97,1.875,123,1.425,157,2.037,259,1.342,270,2.887,312,1.875,339,3.698,354,6.27,406,1.596,434,2.006,507,4.104,510,2.936,601,3.136,720,3.971,736,1.995,805,2.76,807,2.148,808,2.142,815,2.118,1056,3.282,1123,4.611,1802,3.186,2150,2.353,2437,2.331,2440,6.094,2441,6.094,2442,6.094,2452,10.003]],["t/3399",[1,1.369,10,2.658,23,1.974,29,3.268,59,1.668,60,1.884,91,1.793,97,1.766,147,2.156,174,2.713,211,5.877,228,4.251,259,1.264,270,2.802,292,3.26,312,2.386,313,3.696,327,5.674,354,6.023,356,3.09,406,1.503,434,1.889,478,3.63,510,2.087,523,3.742,570,1.835,736,1.879,762,3.206,805,2.651,807,2.023,808,2.017,815,1.995,1123,4.43,2150,2.216,2436,5.015,2437,2.195,2453,9.609,2454,7.111,2455,7.111]],["t/3401",[1,1.415,10,2.718,23,1.664,59,1.724,60,2.932,91,1.853,97,1.825,123,1.386,140,3.673,174,2.804,259,1.306,270,2.849,312,1.825,313,4.735,327,5.75,354,6.937,356,4.269,406,1.553,434,1.952,507,3.015,510,2.157,523,2.862,720,3.865,736,1.942,805,2.71,807,2.09,808,2.084,815,2.061,1123,4.529,1306,9.078,2150,2.29,2436,5.127,2437,2.269]],["t/3403",[1,1.686,2,3.012,3,3.864,27,0.719,33,2.272,46,2.899,84,1.876,105,3.13,120,2.594,207,2.29,227,1.78,253,4.132,353,3.786,396,1.885,406,1.85,462,3.012,528,7.451,736,2.314]],["t/3405",[1,0.894,9,0.768,10,1.956,22,0.884,23,1.198,27,0.845,32,2.105,33,2.927,34,1.317,46,1.537,59,1.089,60,1.23,81,2.318,84,2.83,90,1.684,91,1.171,94,1.863,95,2.218,96,2.071,97,1.756,99,1.878,102,2.708,104,1.503,105,3.421,110,1.888,129,2.717,142,2.776,161,2.356,185,2.128,197,1.988,206,1.941,219,2.544,223,4.752,224,5.436,229,1.871,259,1.257,261,2.637,267,2.776,270,2.204,271,1.923,312,1.756,339,2.614,363,4.065,406,0.981,429,3.033,430,3.747,433,2.717,434,1.878,453,3.886,470,2.589,474,3.033,475,2.874,482,1.941,507,1.905,510,2.075,513,2.637,529,2.949,531,2.663,537,2.989,549,1.684,550,2.589,551,3.128,557,2.84,561,2.663,603,2.807,604,2.84,736,1.227,805,1.951,807,1.321,808,1.317,815,1.302,974,2.275,1056,2.018,1099,2.305,1123,3.259,1587,2.949,1591,3.533,1601,2.423,2150,1.447,2437,1.434,2456,3.533,2457,7.07,2458,6.18,2459,4.291]],["t/3407",[1,1.686,2,3.012,3,3.864,27,0.719,46,2.899,94,3.513,96,5.633,97,2.175,120,2.594,124,3.074,207,2.29,227,1.78,396,1.885,406,1.85,462,3.012,736,2.314,1562,4.756]],["t/3409",[1,1.484,10,2.806,23,1.718,59,1.809,60,3.003,91,1.944,97,1.915,123,1.455,174,2.942,186,3.093,259,1.37,270,2.917,312,1.915,313,2.966,327,5.517,356,3.351,406,1.629,434,2.048,478,3.936,507,3.164,510,2.263,720,4.055,736,2.038,805,2.798,807,2.193,808,2.187,815,2.163,1123,4.675,1129,7.361,2150,2.403,2436,4.024,2437,2.381,2460,10.142]],["t/3411",[1,1.351,10,2.635,23,1.964,29,3.24,59,1.647,60,1.86,91,1.77,97,1.743,147,2.128,167,5.824,174,2.678,186,2.905,211,5.826,228,4.196,259,1.248,270,2.783,292,3.218,312,2.366,313,4.158,327,3.417,356,3.051,406,1.483,434,1.865,478,3.583,510,2.06,523,2.734,570,1.812,736,1.855,762,3.165,805,2.628,807,1.997,808,1.991,815,1.969,1123,4.391,1131,5.211,2150,2.187,2436,4.971,2437,2.167,2461,6.487,2462,9.525,2463,5.491,2464,5.491]],["t/3413",[1,0.84,16,1.087,23,2.024,46,2.728,59,1.024,60,2.456,91,1.101,97,1.084,123,1.749,133,2.286,147,2.045,157,2.602,166,2.777,186,3.056,189,1.455,207,1.764,259,0.776,270,2.121,277,3.104,285,2.456,297,3.581,312,1.675,327,4.011,363,3.202,390,2.67,400,1.386,406,0.923,434,2.661,510,2.72,527,3.074,570,1.127,601,1.369,635,4.156,735,3.866,736,1.154,757,3.348,805,1.861,807,1.242,808,1.238,815,1.225,867,4.926,966,3.127,1008,2.182,1035,3.057,1038,3.394,1063,2.456,1093,5.737,1118,4.981,1123,3.109,1249,2.737,1802,1.842,1803,3.057,2150,1.36,2437,1.348,2438,3.348,2439,3.326,2440,3.523,2441,3.523,2442,3.523,2443,3.817,2444,3.817,2446,7.203,2447,6.896,2448,7.203,2449,3.817,2450,3.817,2451,3.817,2465,6.744]],["t/3415",[1,1.464,10,2.78,23,2.028,59,1.784,60,2.015,91,1.917,97,1.888,123,1.435,157,2.292,186,3.065,259,1.351,270,2.897,288,3.632,312,1.888,339,2.811,406,1.607,434,2.02,507,3.12,510,2.949,601,3.151,736,2.009,805,2.772,807,2.163,808,2.157,815,2.133,1056,3.304,1123,4.633,1802,3.208,2150,2.369,2437,2.348,2463,5.948,2464,5.948,2466,10.049,2467,6.363]],["t/3417",[1,1.293,10,2.557,23,1.928,59,1.576,60,1.78,91,1.694,97,1.669,123,1.268,133,2.278,157,2.153,166,2.013,186,2.82,207,1.757,259,1.194,270,2.721,288,3.21,297,4.018,312,2.296,363,3.19,400,2.133,406,1.42,434,2.456,510,3.102,527,3.063,570,1.734,601,2.898,635,4.145,736,1.776,757,3.336,805,2.55,807,1.911,808,1.906,815,1.885,962,2.935,966,3.115,1035,3.046,1038,3.382,1123,4.262,1128,7.736,1802,2.835,1803,3.046,2150,2.094,2437,2.074,2438,3.336,2439,3.314,2463,5.256,2464,5.256,2467,5.623]],["t/3419",[1,1.444,10,2.755,23,1.687,29,2.551,59,1.759,60,2.962,91,1.891,97,1.863,123,1.415,140,3.749,174,2.861,186,3.41,259,1.333,270,2.878,312,1.863,313,4.3,327,5.797,356,4.327,406,1.585,434,1.992,510,2.201,523,2.92,736,1.982,805,2.747,807,2.133,808,2.127,815,2.104,1123,4.591,2150,2.337,2436,5.197,2437,2.315,2468,9.958]],["t/3421",[1,1.659,2,2.991,3,3.846,21,3.765,27,0.894,46,2.854,106,4.316,120,2.569,197,3.69,227,1.752,253,4.068,396,1.856,406,1.821,462,3.142,736,2.278,1678,9.093,1819,5.271]],["t/3423",[1,1.293,10,2.557,23,1.566,29,4.196,59,1.576,60,3.016,91,1.694,97,1.669,104,2.992,106,2.661,131,3.405,174,3.527,193,2.997,207,1.757,235,2.133,259,1.194,270,2.721,276,4.455,312,1.669,406,1.42,434,2.456,510,2.713,601,3.569,736,1.776,805,2.55,807,1.911,808,1.906,815,1.885,900,4.326,951,5.723,1041,4.455,1042,4.719,1073,4.988,1123,4.262,1693,8.081,1802,2.835,2150,2.094,2437,2.074,2469,5.422,2470,5.623,2471,5.623,2472,9.244]],["t/3425",[1,1.146,10,2.739,23,1.439,27,0.489,59,1.397,91,1.501,97,1.479,102,3.253,103,3.131,104,2.748,120,1.403,121,1.68,124,2.09,174,3.24,193,3.788,207,1.557,216,2.432,235,2.696,259,1.058,270,2.549,276,3.947,312,1.479,315,3.448,318,3.599,333,2.76,406,1.258,434,2.256,510,2.493,601,3.104,660,3.485,736,1.573,805,2.343,807,1.693,808,1.689,815,1.67,836,5.631,879,5.635,880,4.986,900,3.833,951,5.257,1041,5.631,1042,5.054,1073,4.419,1123,3.915,1587,3.781,1802,2.512,1954,3.888,2150,1.855,2437,1.838,2469,4.804,2470,4.982,2471,4.982,2473,8.493]],["t/3427",[1,1.495,10,2.819,23,2.045,29,4.106,59,1.822,91,1.958,97,1.929,106,3.075,131,5.164,193,3.463,259,1.38,270,2.927,312,1.929,406,1.641,434,2.063,510,2.279,601,3.565,736,2.052,762,3.501,805,2.811,807,2.209,808,2.202,815,2.178,1123,4.697,1802,3.276,2150,2.42,2437,2.397,2474,10.189,2475,7.765,2476,7.765]],["t/3429",[1,1.516,10,2.845,23,2.056,59,1.848,91,1.986,97,1.956,121,1.889,193,4.587,259,1.4,270,2.948,312,1.956,406,1.664,434,2.092,510,2.312,601,2.47,736,2.081,762,3.551,805,2.837,807,2.24,808,2.234,815,2.209,879,3.74,880,3.441,1123,4.741,1802,3.323,2150,2.454,2437,2.432,2477,10.284,2478,7.877,2479,7.877]],["t/3431",[1,1.516,10,2.845,23,1.742,26,1.796,29,2.679,59,1.848,91,1.986,97,1.956,106,4.073,121,1.226,148,1.927,186,2.402,193,3.513,259,1.4,270,2.948,312,1.956,406,1.664,434,2.092,510,2.312,736,2.081,762,3.551,805,2.837,807,2.24,808,2.234,815,2.209,951,6.366,1042,4.021,1123,4.741,2150,2.454,2437,2.432,2480,6.591,2481,10.284]],["t/3433",[1,1.301,10,2.568,23,1.572,29,4.204,59,1.586,60,3.024,91,1.705,97,1.679,104,3.004,106,2.677,131,3.426,193,3.015,207,1.768,235,2.146,259,1.202,270,2.729,312,1.679,356,4.035,406,1.429,434,2.466,510,2.725,601,3.579,736,1.786,805,2.561,807,1.923,808,1.917,815,1.896,900,4.353,951,5.747,1041,4.482,1042,4.739,1073,5.019,1123,4.28,1693,8.115,1802,2.852,2150,2.107,2437,2.087,2469,5.456,2470,5.657,2471,5.657,2482,9.283]],["t/3435",[1,1.334,10,2.612,23,1.6,59,1.626,91,1.748,97,1.721,104,3.056,121,1.672,193,4.212,207,1.812,235,2.201,259,1.232,270,2.765,312,1.721,356,4.104,406,1.465,434,2.509,510,2.772,601,3.368,736,1.832,805,2.605,807,1.971,808,1.966,815,1.944,879,5.476,880,4.692,900,4.463,951,5.846,1041,4.596,1042,4.82,1073,5.145,1123,4.353,1802,2.925,2150,2.16,2437,2.14,2469,5.594,2470,5.8,2471,5.8,2483,9.443]],["t/3437",[1,1.686,2,3.012,3,3.864,27,0.719,33,2.272,46,2.899,84,1.876,105,3.13,120,2.594,207,2.29,227,1.78,253,4.132,353,3.786,396,1.885,406,1.85,461,8.737,462,3.012,736,2.314]],["t/3439",[1,0.868,21,1.97,23,2.24,33,1.794,59,1.622,84,0.966,91,1.744,97,1.12,105,2.471,133,1.529,157,2.071,161,3.142,166,2.824,169,1.749,181,1.432,182,2.209,184,1.612,206,1.885,207,1.179,253,2.128,259,2.1,269,1.794,270,2.427,285,3.433,297,3.005,312,2.088,353,2.99,363,2.141,400,2.195,406,0.953,434,1.837,454,4.167,490,2.128,507,1.85,510,2.468,527,2.056,531,2.586,570,1.785,635,3.1,686,4.175,736,1.192,757,2.239,805,2.601,807,1.967,808,1.961,815,1.265,962,1.97,966,2.091,1035,2.044,1036,2.319,1038,2.27,1056,1.96,1063,2.517,1423,4.567,1656,3.206,1798,3.038,1803,2.044,2150,1.405,2437,1.392,2438,2.239,2439,2.224,2484,6.914,2485,6.914,2486,6.914,2487,6.39,2488,3.432,2489,2.47,2490,2.514,2491,5.261,2492,6.39,2493,4.167,2494,2.537,2495,4.167,2496,4.167,2497,4.167]],["t/3441",[1,1.219,10,2.833,16,1.576,23,1.503,34,2.516,59,1.485,60,1.677,91,2.237,97,1.572,99,1.682,105,3.66,121,1.381,123,1.674,181,2.816,227,2.255,259,1.125,270,2.636,312,1.572,353,5.236,397,4.137,406,1.338,434,1.682,510,3.257,547,6.939,601,1.985,660,3.64,736,1.673,805,2.447,807,1.801,808,1.796,815,1.776,1063,3.23,1099,3.143,1495,5.363,1595,3.242,1802,2.671,2150,1.973,2437,1.955,2498,7.159,2499,8.871,2500,8.871,2501,8.871,2502,5.851]],["t/3443",[1,1.278,23,1.553,59,1.557,91,2.312,97,1.649,105,3.276,123,1.729,133,2.25,157,2.139,166,1.989,206,3.831,207,1.736,259,1.18,270,2.703,297,3.984,312,2.608,353,3.964,363,3.151,400,2.107,406,1.403,434,2.435,507,3.761,510,3.324,527,3.026,531,3.806,570,1.713,635,4.111,736,1.754,757,3.295,805,2.529,807,1.888,808,1.883,815,1.862,962,2.899,966,3.078,1035,3.009,1038,3.341,1056,3.984,1189,5.902,1803,3.009,2150,2.068,2437,2.049,2438,3.295,2439,3.274,2503,9.167,2504,4.927]],["t/3445",[1,1.55,10,2.886,23,1.767,91,2.918,97,1.999,105,4.136,123,1.519,259,1.431,270,2.979,312,1.999,353,5.004,406,1.701,434,2.139,510,3.062,531,4.616,736,2.127,786,6.379,805,2.878,807,2.29,808,2.283,815,2.258,1515,4.866,2150,2.508,2437,2.485,2502,7.439,2505,10.431]],["t/3447",[0,1.001,1,1.301,10,2.568,23,1.572,27,0.555,33,2.751,34,2.633,59,1.586,84,2.563,91,1.705,97,1.679,105,2.416,129,3.956,223,5.264,224,3.84,229,2.724,259,1.202,270,2.729,312,1.679,397,3.153,406,1.429,432,4.353,434,1.796,472,7.064,475,4.185,507,2.774,510,2.725,513,5.273,561,5.324,626,5.91,628,4.087,629,5.288,630,3.528,736,1.786,805,2.561,807,1.923,808,1.917,815,1.896,1056,2.938,1123,4.28,1597,6.247,2150,2.107,2437,2.087,2458,8.115,2506,9.283]],["t/3449",[0,1.189,1,1.06,9,0.91,10,2.221,23,2.071,34,1.562,59,2.222,91,1.388,97,1.367,105,3.721,123,1.514,181,1.748,184,2.869,235,3.008,252,5.168,259,0.978,270,2.439,312,2.353,353,5.287,397,2.567,406,1.163,417,7.547,434,1.463,510,1.616,528,4.969,531,3.157,538,7.133,539,4.087,541,6.108,601,2.97,660,2.259,736,1.455,805,2.215,807,1.566,808,1.562,815,2.657,1063,2.923,1495,4.853,1607,7.41,1608,4.443,1700,3.996,1703,5.088,1802,3.387,2150,1.715,2437,1.7,2507,8.027,2508,6.279,2509,8.027,2510,8.027]],["t/3451",[1,1.165,12,5.1,23,1.455,33,1.57,59,1.42,60,2.882,91,2.167,97,1.503,105,2.163,123,1.621,133,2.051,157,1.75,160,4.355,161,3.33,166,1.813,190,3.716,207,1.582,259,1.527,270,2.572,297,3.734,312,2.481,353,2.617,363,2.873,400,1.921,406,1.279,434,2.283,507,3.526,510,3.192,527,2.759,531,3.471,570,2.218,624,4.077,635,3.853,720,3.183,736,1.599,757,3.005,805,2.371,807,1.721,808,1.717,815,1.697,962,2.643,966,2.806,1035,3.895,1038,3.046,1056,2.63,1803,2.743,2150,1.886,2437,1.868,2438,3.005,2439,2.985,2487,7.941,2511,8.593,2512,8.593,2513,5.593]],["t/3453",[0,0.854,1,1.11,10,2.296,23,1.647,27,0.473,29,2.823,33,2.523,59,1.352,60,2.987,84,2.416,91,1.454,97,1.432,123,1.566,133,1.954,157,1.174,166,1.727,197,2.468,199,5.932,209,2.585,259,1.025,262,2.165,270,2.504,312,2.061,353,3.589,397,3.871,400,1.83,406,1.218,432,3.712,434,1.532,452,3.306,476,3.485,482,2.41,485,2.737,510,3.123,530,6.586,561,4.76,562,2.673,580,3.712,598,4.825,600,4.387,630,3.009,736,1.524,805,2.29,807,1.64,808,1.635,815,1.617,966,2.673,1026,2.825,1123,3.827,1135,3.409,1802,2.433,1803,2.614,2150,1.797,2437,1.78,2514,8.3,2515,8.3,2516,8.3,2517,8.3]],["t/3455",[1,1.044,10,2.196,23,2.063,33,2.06,51,3.492,59,2.203,60,1.437,91,2.369,97,1.347,99,1.441,105,1.938,123,1.023,161,2.646,169,3.079,188,2.691,259,1.411,270,2.418,312,2.333,353,2.345,356,2.357,369,3.024,406,1.146,434,1.441,458,4.902,507,2.225,510,2.331,523,2.112,531,3.11,567,4.377,601,2.945,736,1.433,803,4.695,805,2.19,807,1.543,808,1.538,815,2.634,817,3.504,867,4.746,962,2.369,1036,2.789,1056,2.357,1063,3.42,1629,2.64,1636,2.946,1638,3.173,1802,3.963,2150,1.69,2437,1.675,2508,6.211,2518,6.327,2519,4.539,2520,3.937,2521,4.539,2522,4.242,2523,5.012,2524,7.94,2525,7.94,2526,3.596,2527,5.012,2528,5.012,2529,5.012,2530,4.741,2531,3.279,2532,4.377,2533,4.377]],["t/3457",[1,0.925,10,2.008,23,2.138,27,0.596,33,2.268,59,2.051,60,1.923,91,2.205,97,1.194,99,1.928,105,1.718,123,1.369,161,3.247,181,1.526,188,3.302,202,2.37,207,1.257,259,1.554,270,2.251,312,1.802,353,2.078,356,3.154,400,1.526,406,1.016,434,1.277,455,3.568,458,5.458,507,1.972,510,2.13,523,2.826,531,2.756,601,1.507,606,3.657,671,2.656,736,1.27,805,2.002,807,1.367,808,1.363,815,2.453,817,4.299,881,2.756,962,3.17,1036,3.731,1056,2.089,1063,3.184,1629,3.533,1636,3.942,1638,4.246,1802,3.062,1806,3.352,2150,1.498,2437,1.484,2488,3.657,2508,5.677,2519,4.022,2522,3.759,2526,4.812,2527,4.441,2528,4.441,2529,4.441,2530,6.344,2531,4.387,2532,5.857,2533,3.878,2534,6.073,2535,3.488,2536,2.939,2537,7.257,2538,4.806,2539,4.806,2540,4.806]],["t/3459",[1,0.963,23,2.157,33,1.941,59,2.101,60,1.982,91,1.886,97,1.243,105,1.788,123,0.944,161,2.986,181,1.588,188,3.036,227,1.017,259,1.592,270,2.306,312,1.858,353,2.163,356,3.251,400,1.588,406,1.057,434,1.329,455,3.714,458,3.904,507,2.053,510,1.469,523,2.913,531,2.869,601,1.569,671,2.765,736,1.322,805,2.064,807,1.423,808,1.419,815,2.513,817,4.387,881,2.869,962,3.267,1036,3.846,1052,2.501,1056,2.174,1063,3.874,1629,3.641,1636,4.063,1638,4.377,1802,3.156,1806,3.49,2150,1.559,2437,1.545,2488,3.807,2508,5.851,2526,4.959,2531,4.522,2532,6.036,2533,4.038,2536,3.06,2541,3.49,2542,4.187,2543,7.48,2544,6.912,2545,6.912,2546,7.48,2547,6.912,2548,5.003,2549,5.003,2550,5.003,2551,7.48,2552,5.003,2553,5.003,2554,5.003]],["t/3461",[1,1.474,10,2.793,23,1.71,59,1.796,60,2.992,91,1.931,97,1.902,105,4.036,120,1.805,161,2.552,227,1.556,259,1.361,270,2.907,312,2.507,353,3.311,406,1.618,414,5.245,434,2.034,479,7.327,510,2.247,570,1.976,736,2.023,762,3.452,805,2.785,807,2.178,808,2.172,815,2.148,1123,4.654,1233,3.751,1598,7.076,2150,2.386,2437,2.364,2555,7.657,2556,10.095]],["t/3463",[1,1.233,10,2.474,23,1.889,33,2.673,59,1.502,61,3.604,84,2.514,91,1.615,97,1.591,131,4.533,142,5.346,259,1.138,270,2.652,312,2.559,339,3.306,406,1.353,434,1.702,475,3.965,510,1.88,529,4.068,537,4.124,549,2.323,550,3.571,562,2.97,570,1.653,637,4.015,717,3.829,736,1.693,805,2.467,807,1.822,808,1.817,815,1.797,817,4.548,1063,3.256,1123,4.123,1601,3.343,1604,4.834,1607,5.01,1608,5.169,1800,4.315,1801,4.467,2150,1.996,2437,1.978,2557,8.943,2558,6.405,2559,6.405,2560,6.405,2561,5.919,2562,6.405,2563,6.405]],["t/3465",[0,0.932,1,1.212,10,2.444,23,1.496,27,0.517,29,3.005,33,2.648,59,1.477,60,2.705,84,2.498,91,2.228,97,1.563,105,3.648,123,1.667,133,2.134,157,1.282,166,1.886,197,2.695,259,1.119,262,2.364,270,2.628,312,2.194,353,4.414,400,1.999,406,1.33,432,4.053,434,1.672,452,3.61,476,3.805,482,2.631,485,2.989,510,2.996,531,3.61,562,2.919,580,4.053,597,5.268,600,4.79,630,3.285,736,1.663,805,2.437,807,1.791,808,1.785,815,1.766,966,2.919,1026,3.084,1123,4.073,1135,3.722,1610,8.165,1803,2.854,2150,1.961,2437,1.944,2564,8.835]],["t/3467",[1,1.191,10,2.415,23,1.962,33,2.265,37,2.903,59,1.452,61,3.482,76,4.709,84,2.576,91,1.561,97,1.537,178,2.624,183,3.831,188,2.098,259,1.1,270,2.604,297,2.689,312,2.168,339,2.288,406,1.308,434,1.644,452,5.8,485,2.938,507,2.539,510,1.816,531,3.549,537,3.984,736,1.635,805,2.408,807,1.76,808,1.755,815,1.736,817,2.731,962,2.703,1026,3.032,1056,2.689,1063,3.178,1294,4.239,1388,3.032,1423,3.361,1604,2.903,1607,4.841,1629,3.012,1630,5.41,1631,5.179,1634,3.879,1635,4.239,1636,3.361,1638,3.621,1805,5.719,2150,1.928,2437,1.911,2565,8.73,2566,6.188,2567,6.188,2568,6.188,2569,6.188,2570,6.188,2571,6.188,2572,6.188,2573,6.188,2574,6.188]],["t/3469",[1,1.14,10,2.34,23,1.433,27,0.694,33,2.195,59,2.316,91,2.489,97,1.471,99,2.248,105,2.116,161,3.29,181,1.88,188,3.346,207,1.548,227,1.719,259,1.052,270,2.541,312,1.471,353,2.56,396,1.275,400,1.88,406,1.251,434,1.573,444,5.174,456,3.989,458,6.183,507,2.429,510,2.483,531,3.396,635,2.655,736,1.565,805,2.334,807,1.684,808,1.679,815,2.769,1056,2.573,1063,3.594,2150,1.845,2437,1.828,2508,6.618,2518,3.989,2519,4.955,2521,4.955,2534,4.955,2542,4.955,2544,7.818,2545,7.818,2547,7.818,2575,4.21,2576,4.056,2577,8.46,2578,8.46,2579,8.46,2580,5.921]],["t/3471",[1,0.645,10,1.512,12,1.711,23,2.273,33,1.418,46,1.11,59,2.064,60,1.449,65,1.582,70,1.289,71,2.433,75,3.489,84,1.885,91,1.746,97,1.719,99,1.452,104,1.085,105,1.198,120,1.289,133,1.136,138,4.58,161,1.117,184,2.854,232,2.55,235,1.064,259,0.596,270,2.562,284,1.869,285,3.203,312,1.358,339,1.239,353,1.45,406,0.708,434,0.891,444,2.05,462,1.368,510,1.605,531,4.58,549,2.511,570,1.787,571,3.397,601,1.714,736,0.886,805,1.508,807,0.954,808,0.951,815,1.942,817,3.525,961,1.821,962,3.489,1036,4.523,1063,1.991,1202,1.642,1249,2.101,1255,3.86,1388,2.679,1433,4.234,1434,3.86,1595,1.225,1601,2.853,1604,1.573,1629,3.888,1636,4.778,1645,3.968,1651,5.678,1652,5.57,1654,6.247,1802,1.414,2150,1.045,2437,1.035,2581,3.352,2582,8.72,2583,3.352,2584,3.352,2585,5.467,2586,3.098,2587,3.098,2588,2.93,2589,3.098,2590,7.38,2591,7.38,2592,7.38,2593,3.098,2594,5.052,2595,3.098,2596,3.098,2597,3.098,2598,2.93,2599,2.93,2600,3.098,2601,3.098,2602,3.098]],["t/3473",[1,1.24,10,2.859,23,1.521,33,2.33,59,2.425,81,2.112,91,2.82,97,1.6,105,2.303,123,1.216,161,3.445,173,4.148,181,2.045,259,1.145,270,2.661,282,4.272,285,2.346,312,1.6,313,2.478,349,2.552,353,2.786,400,2.045,406,1.361,434,1.712,458,6.136,462,1.612,478,3.289,507,2.643,510,2.636,531,3.695,719,3.47,736,1.703,805,2.477,807,1.833,808,1.827,815,2.899,1056,2.8,1152,4.039,1419,4.34,2150,2.008,2436,3.362,2437,1.989,2508,7.024,2521,5.391,2522,5.04,2534,5.391,2603,7.247,2604,5.954,2605,5.632,2606,8.98]],["t/3475",[1,1.699,2,3.023,3,3.873,27,0.724,46,2.923,94,3.542,95,6.05,120,2.608,124,3.098,207,2.308,227,1.794,396,1.9,406,1.865,462,3.023,736,2.333,1562,4.794]],["t/3477",[1,1.484,10,2.806,23,1.718,59,1.809,60,3.003,91,1.944,97,1.915,123,1.455,174,2.942,186,3.093,259,1.37,270,2.917,312,1.915,313,2.966,327,5.517,356,3.351,406,1.629,434,2.048,478,3.936,507,3.164,510,2.263,720,4.055,736,2.038,805,2.798,807,2.193,808,2.187,815,2.163,1123,4.675,1129,7.361,2150,2.403,2436,4.024,2437,2.381,2607,10.142]],["t/3479",[1,1.351,10,2.635,23,1.964,29,3.24,59,1.647,60,1.86,91,1.77,97,1.743,147,2.128,167,5.824,174,2.678,186,2.905,211,5.826,228,4.196,259,1.248,270,2.783,292,3.218,312,2.366,313,4.158,327,3.417,356,3.051,406,1.483,434,1.865,478,3.583,510,2.06,523,2.734,570,1.812,736,1.855,762,3.165,805,2.628,807,1.997,808,1.991,815,1.969,1123,4.391,1131,5.211,2150,2.187,2436,4.971,2437,2.167,2461,6.487,2463,5.491,2464,5.491,2608,9.525]],["t/3481",[1,0.84,16,1.087,23,2.024,46,2.728,59,1.024,60,2.456,91,1.101,97,1.084,123,1.749,133,2.286,147,2.045,157,2.602,166,2.777,186,3.056,189,1.455,207,1.764,259,0.776,270,2.121,277,3.104,285,2.456,297,3.581,312,1.675,327,4.011,363,3.202,390,2.67,400,1.386,406,0.923,434,2.661,510,2.72,527,3.074,570,1.127,601,1.369,635,4.156,735,3.866,736,1.154,757,3.348,805,1.861,807,1.242,808,1.238,815,1.225,867,4.926,966,3.127,1008,2.182,1035,3.057,1038,3.394,1063,2.456,1093,5.737,1118,4.981,1123,3.109,1249,2.737,1802,1.842,1803,3.057,2150,1.36,2437,1.348,2438,3.348,2439,3.326,2440,3.523,2441,3.523,2442,3.523,2443,3.817,2444,3.817,2446,7.203,2447,6.896,2448,7.203,2449,3.817,2450,3.817,2451,3.817,2609,6.744]],["t/3483",[1,1.464,10,2.78,23,2.028,59,1.784,60,2.015,91,1.917,97,1.888,123,1.435,157,2.292,186,3.065,259,1.351,270,2.897,288,3.632,312,1.888,339,2.811,406,1.607,434,2.02,507,3.12,510,2.949,601,3.151,736,2.009,805,2.772,807,2.163,808,2.157,815,2.133,1056,3.304,1123,4.633,1802,3.208,2150,2.369,2437,2.348,2463,5.948,2464,5.948,2467,6.363,2610,10.049]],["t/3485",[1,0.872,10,1.919,23,1.6,27,0.836,54,2.769,59,1.062,60,1.2,89,1.902,90,3.427,91,1.142,97,1.125,123,0.854,133,1.535,157,2.537,158,5.848,166,1.357,167,2.439,169,1.756,171,1.68,174,1.728,186,3.799,188,1.535,207,1.184,234,2.46,245,4.243,251,1.841,259,0.805,270,2.17,297,3.014,312,2.346,349,2.747,356,1.968,362,3.789,363,2.15,382,1.988,385,4.002,400,1.438,406,0.957,433,4.058,434,2.51,444,2.769,462,1.133,495,2.623,510,2.474,527,2.064,535,2.678,601,3.849,635,3.11,662,1.911,736,1.197,757,2.248,805,1.914,807,1.288,808,1.284,815,1.27,897,2.481,904,3.593,962,3.03,966,2.1,1010,3.789,1035,2.053,1038,2.279,1123,3.198,1290,6.063,1427,2.803,1601,3.62,1802,1.911,1803,2.053,2150,1.411,2437,1.398,2438,2.248,2439,2.233,2463,3.542,2464,3.542,2467,3.789,2611,4.528]],["t/3487",[1,1.405,10,2.706,23,1.657,29,2.483,30,2.785,59,1.712,60,2.922,79,4.576,91,1.841,97,1.813,123,1.377,140,3.649,174,2.785,186,3.364,214,6.109,259,1.297,270,2.839,312,1.813,313,4.242,327,5.735,356,4.25,406,1.543,434,1.939,510,2.143,523,2.843,528,4.519,736,1.929,805,2.698,807,2.076,808,2.071,815,2.048,1123,4.509,2150,2.275,2436,5.104,2437,2.254,2612,9.78]],["t/3489",[0,1.604,83,4.831,1357,5.081,2255,5.49,2613,10.831]],["t/3491",[14,2.649,22,1.928,436,4.543,631,5.101,1357,5.645,1359,6.351,1404,7.066,2253,6.351,2255,5.135,2333,8.176]],["t/3493",[0,0.917,9,1.444,16,2.174,26,1.766,27,0.902,32,2.805,59,1.452,84,1.326,90,2.245,121,1.574,122,3.278,157,1.26,163,3.783,171,2.297,174,2.361,184,2.212,190,2.676,300,4.4,304,3.699,349,2.451,395,3.45,419,3.699,449,3.072,570,2.253,666,2.821,684,5.2,687,6.924,693,3.785,729,3.518,789,3.093,841,3.159,897,3.39,898,3.699,899,5.277,1033,3.333,1103,3.549,1357,2.903,1683,4.4,1687,3.93,2251,5.404,2268,4.594,2293,4.042,2305,4.994,2309,5.179,2359,4.841,2614,4.994,2615,6.188,2616,4.994,2617,6.188,2618,5.719,2619,5.719,2620,6.188,2621,10.114,2622,6.188,2623,6.188,2624,4.841,2625,5.719]],["t/3495",[0,1.861,9,0.939,25,3.431,27,0.466,59,1.331,75,4.211,80,3.356,83,2.532,90,2.059,99,1.508,121,1.5,157,1.156,163,4.612,168,2.467,169,2.201,185,2.602,186,3.418,197,2.43,213,2.587,231,2.27,243,2.663,276,3.763,285,2.067,400,1.802,419,3.393,420,2.35,449,2.818,570,1.465,578,4.12,580,3.655,738,3.824,783,6.207,955,6.868,1031,4.214,1072,4.319,1108,3.472,1370,4.036,1421,5.245,1591,4.319,1687,6.708,1742,4.581,1771,4.44,2251,5.967,2253,6.621,2255,2.877,2293,6.296,2298,6.245,2624,4.44,2626,4.75,2627,4.962,2628,8.207,2629,5.676,2630,5.245,2631,5.676,2632,5.676,2633,5.676,2634,5.676,2635,5.676]],["t/3497",[21,5.182,28,3.765,46,2.81,99,2.254,100,4.429,102,3.25,168,3.688,290,6.159,364,6.299,392,2.844,436,3.805,553,4.31,656,4.648,707,3.745,783,5.463,861,4.866,897,4.648,900,5.463,1357,5.565,1373,6.299,2253,5.319,2256,7.101,2338,7.418,2345,7.842,2346,7.418,2636,8.486,2637,8.486]],["t/3499",[0,1.732,16,2.049,30,3.14,81,2.698,94,4.246,96,3.671,98,4.172,101,5.639,102,3.153,123,1.553,215,3.649,216,3.362,261,4.675,436,4.745,622,5.974,623,7.523,640,5.639,726,6.643,910,5.639,1144,5.741,1509,9.779,1546,6.11,1581,8.855,1713,6.888,2256,8.855,2259,7.016,2638,8.231]],["t/3501",[0,0.96,12,5.293,16,1.614,21,2.831,27,0.74,32,4.087,34,2.557,78,5.228,99,1.722,102,3.454,110,2.635,159,3.792,170,3.463,198,3.646,202,3.196,212,2.775,279,5.423,361,4.52,374,3.04,375,4.704,392,2.954,429,4.233,553,4.478,606,4.932,793,3.832,861,5.171,881,3.717,897,3.55,933,5.423,1011,5.069,1033,3.491,1103,5.171,1134,3.874,1144,4.52,1313,4.52,1357,3.04,1365,5.665,1373,4.811,1827,5.665,2151,5.23,2251,6.939,2253,4.062,2256,9.86,2272,4.366,2639,5.665,2640,5.989,2641,5.423,2642,5.665,2643,6.481]],["t/3503",[27,0.889,436,4.857,1357,5.081,1381,6.273,2255,5.49]],["t/3505",[14,2.674,22,1.946,257,4.335,436,4.585,1357,5.676,1359,6.41,1404,7.132,2253,6.41,2255,5.183,2333,8.252]],["t/3507",[22,1.887,26,1.301,27,0.914,32,3.377,46,2.466,49,4.556,78,3.474,84,1.596,105,2.662,111,3.34,120,1.756,121,1.159,133,2.525,157,1.517,160,3.775,161,2.483,163,2.786,167,4.012,178,3.158,186,2.272,210,3.802,319,3.415,356,3.237,393,2.963,436,4.996,481,3.802,482,3.113,553,2.976,570,1.922,707,3.287,725,3.887,789,3.723,1236,5.407,1244,5.826,1335,5.195,1381,7.365,1504,7.359,2059,6.011,2344,6.011,2644,6.233]],["t/3509",[22,1.765,46,3.071,84,1.987,121,2.006,125,3.738,157,1.889,357,5.268,658,4.996,725,4.84,785,6.058,957,7.255,1223,5.971,1293,5.372,1333,7.761,1335,6.469,1965,6.732,2267,6.594,2645,8.108,2646,9.275]],["t/3511",[3,3.128,10,1.847,14,1.746,15,4.847,17,7.201,27,0.548,32,3.027,83,2.979,85,2.859,94,2.679,121,1.767,140,3.338,147,2.791,167,6.116,174,3.512,185,3.061,186,3.979,242,2.59,257,3.903,285,4.134,286,3.757,297,2.902,327,3.251,347,6.171,356,4.578,357,3.793,392,1.76,482,2.791,563,4.499,658,4.959,722,4.658,785,4.362,949,4.575,1129,6.682,1132,4.499,1134,3.992,1216,7.429,1223,4.3,1734,5.838,2647,5.389]],["t/3513",[22,1.796,27,0.774,84,2.47,90,3.422,157,2.348,166,2.827,233,7.225,339,3.488,357,5.358,369,5.26,493,6.355,635,5.169,1381,5.464,1594,7.004,2269,7.38,2648,8.718]],["t/3515",[7,2.927,9,1.001,15,6.237,27,0.497,28,2.685,33,2.229,37,2.839,59,2.551,60,1.603,70,3.305,75,4.364,84,2.141,159,3.541,160,3.067,161,4.18,171,2.246,174,2.309,231,1.674,240,4.303,253,2.856,262,2.272,285,2.203,292,2.774,349,2.397,357,3.437,398,5.137,417,8.334,427,4.605,449,3.005,462,1.515,553,4.767,570,1.562,624,5.788,658,6.187,722,4.221,785,3.953,1223,3.896,1293,5.787,1333,5.064,1965,4.393,2059,4.884,2285,4.303,2304,3.844,2645,5.29,2649,5.29,2650,5.29,2651,4.884]],["t/3517",[29,3.237,33,2.469,34,2.699,46,3.151,60,2.521,67,4.966,69,5.258,84,2.039,253,4.491,319,4.362,357,5.405,482,3.977,1033,5.126,1236,6.907,1593,5.753,1594,7.064,2047,8.318,2104,7.241,2230,8.794]],["t/3519",[0,1.604,32,4.91,553,4.327,1357,5.081,2255,5.49]],["t/3521",[14,2.725,436,4.672,1357,5.739,1359,6.532,1404,7.267,2253,6.532,2255,5.281,2333,8.409]],["t/3523",[16,1.806,27,0.902,32,3.287,37,3.402,46,2.401,82,4.335,86,2.401,99,1.927,102,2.778,104,2.347,121,1.129,123,1.368,140,3.625,151,4.08,176,4.384,211,4.435,231,2.006,253,3.422,292,3.324,315,5.639,323,3.075,349,2.872,393,2.884,397,3.382,400,2.302,404,3.756,418,3.676,449,3.6,553,2.897,570,1.872,725,3.785,861,4.159,898,5.82,899,6.645,913,3.65,982,5.852,1103,4.159,1374,4.489,1412,5.672,2255,3.676,2268,5.383,2269,5.672,2272,4.885,2301,5.518,2360,5.264,2652,4.968,2653,7.252,2654,7.252,2655,7.252]],["t/3526",[14,2.185,86,2.767,213,5.369,215,2.882,344,4.84,449,4.149,719,4.501,1160,4.746,1931,6.065,2253,6.698,2255,5.416,2656,9.874,2657,7.722,2658,7.722,2659,7.722,2660,9.874,2661,9.874,2662,7.722,2663,7.722,2664,9.874,2665,9.874,2666,7.722,2667,7.722,2668,7.722,2669,7.722,2670,7.722]],["t/3528",[16,2.4,22,1.08,23,1.898,27,0.674,34,1.61,44,3.655,46,1.879,113,4.581,123,1.071,147,1.721,150,5.442,169,2.201,207,1.484,231,3.231,257,2.407,275,2.067,303,2.298,313,3.708,323,2.407,356,2.467,436,2.545,445,6.314,457,4.036,545,3.655,553,3.279,573,2.308,593,3.288,687,4.906,786,6.853,861,3.255,898,6.698,899,5.828,913,4.852,1103,5.528,1114,4.581,1357,3.85,1359,3.558,1362,3.889,1364,4.44,1404,3.959,1508,3.959,1998,3.431,2251,6.936,2255,2.877,2259,3.763,2260,6.623,2261,4.962,2262,4.581,2270,4.962,2359,4.44,2614,6.623,2671,7.174,2672,4.962,2673,4.962,2674,4.962]],["t/3530",[3,1.493,11,2.643,16,1.251,22,1.896,25,3.038,27,0.875,28,3.33,32,2.278,37,2.358,80,2.972,81,2.461,84,1.077,85,2.152,86,3.298,99,1.335,100,2.623,121,1.551,125,2.026,137,2.603,140,2.512,148,0.942,163,1.88,196,2.416,197,2.152,216,2.053,231,1.39,237,2.753,241,2.802,243,2.358,262,1.887,263,4.963,303,2.034,315,2.911,316,3.573,318,3.038,324,3.151,352,3.648,363,2.386,365,3.332,382,3.295,393,3.573,396,1.082,398,4.486,428,2.882,432,3.236,553,2.008,587,2.73,666,2.291,679,4.392,695,3.236,698,3.386,707,2.218,758,4.056,793,2.972,851,3.283,861,2.882,899,3.038,954,4.537,974,2.463,1008,2.512,1103,2.882,1127,3.573,1152,4.705,1202,2.463,1232,3.825,1357,2.358,1366,4.394,1367,6.936,1369,3.825,1372,4.645,1373,3.731,1374,3.111,1399,3.825,1412,3.931,1482,4.206,1687,3.192,1958,6.835,2255,5.668,2277,3.731,2285,3.573,2360,3.648,2456,3.825,2675,5.026,2676,5.026,2677,5.026,2678,5.026,2679,4.645,2680,4.056,2681,5.026,2682,5.026]],["t/3532",[0,1.305,14,1.273,22,1.395,26,0.85,27,0.805,46,1.612,60,1.942,62,2.386,89,2.045,99,1.947,100,2.542,102,1.865,121,1.72,125,3.552,133,1.651,147,1.477,157,1.493,163,1.821,189,2.443,194,2.85,211,2.978,230,3.535,231,2.028,242,1.889,303,2.967,326,2.542,364,3.615,382,4.306,385,2.312,393,1.937,398,2.911,418,2.468,449,2.418,538,6.038,553,2.928,565,2.434,588,2.715,593,2.821,601,2.298,628,2.944,660,1.998,705,3.535,707,2.149,783,3.135,793,2.88,835,4.257,861,2.793,896,3.591,899,2.944,909,2.184,974,2.386,1052,2.434,1103,4.203,1132,3.281,1233,2.386,1371,6.134,1515,2.944,1556,3.135,1727,4.075,1827,4.257,1954,6.405,1981,3.535,2104,3.706,2126,3.135,2255,6.416,2277,5.441,2280,3.535,2281,5.733,2288,7.705,2289,3.93,2290,4.5,2291,4.5,2360,3.535,2456,3.706,2642,4.257,2683,4.87,2684,4.87,2685,4.87,2686,4.87,2687,3.93,2688,4.87,2689,4.075]],["t/3534",[0,1.471,16,2.123,22,1.139,23,2.118,27,0.888,60,2.259,107,2.405,121,0.932,148,1.861,163,2.239,178,2.538,183,3.705,188,2.029,215,2.064,227,1.216,231,1.656,251,4.038,303,2.423,323,3.615,377,4.631,396,1.289,404,5.925,474,3.909,649,4.256,733,3.362,760,6.625,761,4.032,762,4.477,770,4.256,851,3.909,881,6.206,896,4.177,1357,4,1427,3.705,1434,3.337,1493,4.682,1736,3.224,1819,3.661,2690,5.986,2691,5.532,2692,5.986,2693,8.526,2694,4.256,2695,6.881,2696,5.214,2697,4.831,2698,4.831]],["t/3536",[0,1.698,16,2.329,52,6.789,60,2.478,65,5.411,75,4.086,99,2.485,148,1.753,196,4.496,553,4.581,573,3.803,733,3.689,881,5.364,894,6.078,896,4.583,1357,4.388,2694,6.65]],["t/3538",[0,1.783,1,1.81,2,2.353,9,1.555,27,0.772,60,1.825,89,2.892,127,6.234,153,3.741,184,2.462,303,4.334,396,1.483,553,2.751,570,1.778,601,2.16,660,4.393,733,4.901,734,3.467,871,5.113,896,3.375,1400,5.241,1532,6.442,1661,6.021,2281,5.388,2343,5.558,2699,8.689,2700,5.113,2701,6.365,2702,6.021,2703,5.558,2704,8.689,2705,8.689,2706,8.689,2707,5.241,2708,9.403,2709,8.689,2710,6.442]],["t/3540",[0,1.699,14,2.448,16,1.704,60,2.481,65,5.036,148,1.283,168,2.975,170,3.657,178,2.902,184,2.446,196,3.29,225,2.772,226,2.369,244,4.774,303,4.32,344,3.964,396,1.474,527,4.268,578,4.968,660,2.808,662,3.951,758,5.524,894,5.656,896,5.887,1388,3.354,1423,3.718,1502,4.866,1661,5.983,1669,6.53,2253,5.869,2293,4.47,2652,6.414,2699,9.862,2703,5.524,2711,6.845,2712,6.845,2713,6.325,2714,6.845,2715,6.845,2716,6.845,2717,5.983]],["t/3542",[0,1.858,9,1.001,16,1.507,23,1.455,27,0.497,51,5.532,59,2.016,70,2.328,235,1.921,251,2.461,259,1.076,313,3.305,463,5.29,553,3.433,573,2.461,633,3.374,660,4.462,679,3.541,733,2.387,743,4.221,897,3.315,909,4.48,1400,7.603,1423,3.287,1532,4.146,1604,2.839,2272,4.077,2300,5.593,2325,5.29,2343,6.935,2701,7.941,2702,5.29,2703,8.063,2704,9.233,2705,9.233,2706,9.233,2707,6.539,2710,4.146,2718,5.064,2719,6.052,2720,6.052,2721,6.052,2722,6.052,2723,6.052,2724,6.052,2725,6.052,2726,6.052,2727,6.052,2728,6.052,2729,6.052,2730,7.941,2731,6.052,2732,6.052,2733,6.052]],["t/3544",[0,1.238,27,0.877,60,2.214,139,5.38,147,2.534,183,6.614,195,5.111,227,1.698,231,2.312,234,5.803,303,3.383,478,4.266,496,5.458,649,5.941,733,3.295,760,4.84,851,5.458,881,6.127,896,4.094,954,5.052,1042,6.013,1357,3.92,1669,5.828,1736,4.501,1819,5.111,2691,7.722,2694,7.597,2734,7.722]],["t/3546",[9,1.041,16,2.2,22,1.198,23,2.146,27,0.838,65,4.169,107,2.879,148,1.913,163,2.354,178,2.669,183,5.469,188,2.134,196,3.026,215,2.171,234,3.419,240,4.475,251,3.592,303,4.132,323,4.328,377,4.799,381,4.475,404,4.576,474,5.77,496,4.111,556,3.683,660,2.583,760,5.912,762,3.983,770,6.281,868,3.104,881,5.067,894,4.683,1042,4.51,1100,4.053,1357,4.145,1434,4.926,1493,4.924,1736,3.391,2695,7.13,2696,5.403,2697,5.08,2698,5.08,2718,5.268]],["t/3548",[0,0.728,3,1.459,7,2.377,9,0.813,14,1.285,16,1.837,22,0.935,23,2.004,27,0.91,32,3.345,60,1.955,65,2.319,78,3.441,81,2.419,99,1.305,106,4.181,107,2.081,124,2.59,128,4.513,148,1.383,163,1.838,178,2.083,188,1.666,215,1.695,225,1.455,229,1.98,234,2.669,237,2.692,251,3,288,2.347,303,1.989,323,4.476,377,4.008,392,2.596,404,4.59,418,2.49,460,2.905,470,2.739,474,4.82,496,4.82,556,2.875,601,1.541,649,3.493,733,2.91,760,5.132,762,3.995,770,5.246,881,4.232,889,3.566,894,2.604,896,3.615,1042,3.767,1233,3.615,1318,5.772,1357,4.621,1434,4.114,1493,3.843,1594,3.648,1687,3.121,1736,2.647,2253,3.08,2695,5.955,2696,4.513,2697,3.965,2698,3.965,2734,6.819,2735,4.914,2736,4.914,2737,4.914,2738,4.914,2739,4.541]],["t/3550",[0,0.932,9,1.041,16,2.2,22,1.198,23,2.146,27,0.838,52,4.569,60,1.668,65,4.169,107,2.492,148,1.656,163,2.354,168,2.736,178,2.669,183,5.469,188,2.134,196,3.026,215,2.171,234,3.419,251,3.592,323,4.328,377,4.799,404,4.576,474,5.77,496,4.111,553,2.515,556,3.683,758,5.08,760,5.912,762,3.983,770,6.281,871,4.673,881,5.067,894,4.683,896,3.084,1042,4.51,1357,4.145,1434,4.926,1493,4.924,1669,6.162,1736,3.391,2000,4.569,2695,7.13,2696,5.403,2697,5.08,2698,5.08]],["t/3552",[0,1.335,11,3.408,22,1.974,23,2.342,27,0.74,34,1.838,59,2.115,70,2.493,75,2.831,96,2.891,99,1.722,105,3.223,120,2.125,121,1.948,148,1.215,174,2.472,181,2.058,239,2.722,251,2.635,259,1.992,397,5.689,401,6.41,411,4.742,412,4.361,444,3.964,702,3.175,913,4.538,917,3.332,982,5.23,2740,5.423,2741,4.297]],["t/3554",[22,2.103,105,3.949,120,2.605]],["t/3557",[6,4.403,27,0.899,33,2.254,34,3.402,59,2.038,81,3.59,99,2.308,110,3.532,121,1.352,181,2.758,251,3.532,275,3.163,374,4.075,401,6.176,411,5.759,412,5.297,560,6.946,573,3.532,627,7.594,917,4.467,2741,5.76,2742,8.028]],["t/3559",[26,1.554,33,2.884,34,3.603,99,2.364,110,3.618,121,1.385,147,2.698,198,5.007,207,2.327,242,3.451,275,3.24,401,6.327,559,7.447,560,6.439,640,6.096,660,3.651,917,4.576,925,6.606,1186,6.961,2743,8.223,2744,8.899,2745,8.899]],["t/3561",[0,0.776,23,2.384,26,1.352,34,2.196,81,1.719,121,0.816,125,2.113,140,2.62,148,0.982,150,6.105,163,1.961,171,1.945,174,2,226,1.814,238,2.267,251,2.131,275,1.909,313,2.016,325,2.824,397,2.445,404,4.77,523,2.041,560,3.036,722,6.423,880,4.442,917,3.982,1762,8.05,2388,4.1,2741,3.476,2743,4.844,2746,4.231,2747,4.844,2748,4.844,2749,4.844,2750,4.844,2751,4.844,2752,4.844,2753,8.51,2754,4.844,2755,8.51,2756,4.387,2757,4.844,2758,4.844,2759,4.844,2760,4.844,2761,4.844,2762,4.844,2763,4.844,2764,8.51,2765,4.582,2766,8.51,2767,4.231,2768,5.242,2769,5.242,2770,5.242,2771,5.242,2772,4.844]],["t/3563",[26,1.873,107,3.025,121,1.669,123,2.023,148,2.01,397,5.002]],["t/3565",[0,1.309,1,0.942,2,3.082,3,1.453,26,1.716,27,0.807,34,2.989,59,1.725,60,1.296,81,1.604,105,4.223,107,2.074,120,2.903,121,1.53,123,1.667,181,3.346,189,1.63,193,2.182,207,1.279,225,1.448,226,1.693,227,0.994,239,2.054,259,0.869,275,1.781,397,3.43,398,5.283,399,5.86,401,3.478,406,2.554,411,5.542,412,5.956,436,2.194,544,2.924,549,1.774,630,2.553,823,2.657,824,2.892,880,2.137,917,2.515,1160,2.778,1220,2.992,1221,3.826,1949,3.412,1968,2.805,2137,3.028,2741,3.243,2746,3.948,2756,6.154,2773,4.276,2774,3.948,2775,4.52,2776,4.892]],["t/3567",[1,1.538,2,2,3,3.083,9,1.322,10,2.211,27,0.852,34,2.267,81,3.403,99,2.123,105,2.856,106,3.165,110,3.249,120,1.884,123,1.508,147,2.423,170,4.27,181,2.537,207,2.09,216,4.24,397,3.727,401,5.682,410,6.78,411,5.46,412,5.021,461,5.8,528,4.947,573,3.249,917,4.109,974,3.915,1099,3.967,2304,5.075,2740,6.687,2741,5.298,2777,6.986]],["t/3569",[16,2.097,21,3.678,22,2.25,27,0.691,29,2.864,30,3.213,56,6.819,92,4.877,93,4.829,94,3.379,96,3.756,97,2.091,106,4.682,121,1.311,170,4.499,195,5.15,231,2.329,316,5.987,338,4.362,382,3.697,393,3.349,527,3.839,573,3.424,872,5.873,2700,6.251,2778,6.112,2779,8.421,2780,8.421,2781,6.251]],["t/3571",[0,1.588,215,3.699,303,4.341,409,7.481,805,2.959,814,6.411]],["t/3574",[22,1.958,23,2.323,59,1.848,70,3.029,75,3.441,81,2.582,99,2.092,106,4.073,111,3.532,121,2.048,147,3.472,218,4.876,259,2.338,275,4.169,702,3.859]],["t/3576",[0,0.61,1,0.793,16,1.026,22,1.227,23,2.221,26,1.953,27,0.338,28,1.828,29,2.193,31,1.828,33,2.804,34,3.261,39,3.201,62,2.019,65,3.748,70,1.585,74,4.786,90,2.881,96,2.875,97,1.601,106,1.632,110,3.653,111,2.891,121,1.236,148,1.488,166,1.932,181,1.308,189,3.446,190,3.434,198,2.318,270,1.061,275,1.5,285,1.5,288,3.794,313,1.585,315,2.386,360,3.897,385,1.956,418,2.088,489,5.044,510,1.209,560,3.734,562,1.91,571,1.591,587,2.238,662,1.738,671,3.562,702,3.159,779,2.386,780,2.776,802,2.15,817,1.818,840,2.277,881,2.363,909,1.848,910,2.823,967,2.436,968,2.436,969,2.491,970,2.52,995,2.617,1008,2.059,1014,2.491,1016,2.874,1020,2.463,1021,3.325,1022,2.118,1024,2.277,1026,2.019,1027,2.583,1028,2.991,1104,7.351,1135,2.436,1245,2.991,1249,2.583,1324,5.896,1583,3.059,1793,5.539,1852,3.448,1975,3.325,1976,3.059,1977,3.448,1978,3.448,1979,3.325,1980,3.325,2158,3.808,2159,3.448]],["t/3578",[0,1.283,16,1.524,22,1.165,23,2.342,26,1.755,27,0.502,33,2.247,34,3.568,60,1.621,99,1.626,104,1.98,106,2.424,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,275,3.66,360,3.699,373,3.699,374,2.871,660,2.511,800,6.04,909,3.884,1022,3.146,2160,5.655,2161,5.349,2162,5.349,2163,7.571,2164,5.349,2165,8.55,2166,5.349,2167,5.349,2168,5.349]],["t/3580",[22,2.042,26,1.873,62,5.255,275,3.905,800,7.481,2782,10.725]],["t/3582",[22,1.271,23,2.429,26,1.166,34,3.378,59,1.567,62,3.272,70,2.568,75,2.917,106,2.645,121,1.916,147,2.025,259,2.117,275,2.431,702,3.272,800,4.658,2165,8.881]],["t/3584",[1,1.434,2,1.864,3,2.212,16,1.855,26,2.074,27,0.611,29,3.789,62,4.857,71,5.407,104,2.41,106,4.704,107,2.101,121,2.052,148,2.088,174,2.842,189,2.483,193,4.421,275,2.712,285,2.712,288,3.558,385,3.536,462,1.864,840,4.116,1008,3.723,1679,6.233,1681,7.754,2783,7.449,2784,7.449,2785,7.449,2786,7.449,2787,7.449]],["t/3586",[0,1.068,1,1.674,2,3.153,3,3.094,16,1.795,26,1.988,27,0.9,29,3.299,59,1.118,67,2.486,96,2.125,106,4.642,107,1.344,120,2.883,121,1.772,122,1.789,123,0.899,124,2.531,125,1.92,148,0.893,159,2.788,163,1.782,189,2.403,192,3.323,193,3.879,225,2.135,226,1.649,239,4.073,242,1.848,259,1.281,406,2.626,573,1.937,584,2.381,643,2.525,662,2.01,823,4.724,834,5.452,836,3.159,879,3.423,880,3.149,909,4.914,1678,3.625,1968,4.134,1989,3.264,2137,2.949,2171,3.159,2788,5.818]],["t/3588",[0,1.108,1,0.963,2,3.099,16,1.246,26,1.858,27,0.735,29,2.544,59,2.101,70,3.445,89,3.141,106,4.214,107,2.527,120,2.632,121,1.893,123,0.944,148,0.938,163,1.871,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,1.017,238,4.298,239,3.141,242,1.94,259,1.767,275,2.723,335,2.573,406,2.617,420,2.072,573,2.034,584,2.501,643,2.652,662,2.111,733,3.92,734,2.518,823,4.063,834,4.689,879,3.551,880,3.267,909,4.457,1968,4.289,1990,2.673,1992,5.851,1993,6.036,2137,3.097,2171,3.317,2788,6.036]],["t/3590",[0,1.093,1,0.946,2,3.085,16,1.223,26,1.844,27,0.727,29,2.51,59,2.079,70,2.838,75,3.871,89,3.099,106,4.181,107,2.499,120,2.614,121,1.949,123,0.927,148,0.921,163,1.838,169,1.905,189,2.459,193,3.291,225,1.455,226,1.7,227,0.999,238,4.26,239,3.099,242,1.905,259,1.751,275,2.687,335,2.526,406,2.605,420,2.035,573,1.998,584,2.456,643,2.604,662,2.073,733,3.885,734,2.473,823,4.008,834,4.626,879,3.503,880,3.223,909,4.417,1968,4.232,1990,2.625,1994,5.772,1995,5.955,2137,3.042,2171,3.258,2788,5.955]],["t/3592",[0,1.078,1,0.929,2,3.071,16,1.202,26,1.83,27,0.72,29,2.477,59,2.057,70,2.8,75,3.181,89,3.058,106,4.15,107,2.473,120,2.596,121,1.989,123,0.911,148,0.905,163,1.805,169,1.872,189,2.427,193,3.248,225,1.429,226,1.671,227,0.981,238,4.222,239,3.058,242,1.872,259,1.735,275,2.651,335,2.482,406,2.593,420,1.999,573,1.963,584,2.413,643,2.559,662,2.037,702,4.295,733,3.85,734,2.429,823,3.955,834,4.564,879,3.457,880,3.181,909,4.378,1968,4.176,1990,2.579,2137,2.988,2169,6.093,2170,6.093,2171,3.2,2788,5.876]],["t/3594",[1,1.736,2,2.256,3,1.925,26,1.132,27,0.532,59,1.52,70,2.493,75,2.831,106,2.567,107,2.543,121,1.986,147,3.144,148,1.215,174,2.472,229,2.612,259,1.992,285,2.36,335,3.332,400,2.058,462,1.622,481,3.308,662,2.735,671,3.581,702,3.175,805,3.251,807,3.188,808,3.179,879,3.077,880,2.831,1108,3.964,1123,5.168,1679,5.423,1990,3.463,2150,2.019,2789,5.989,2790,5.989,2791,5.989,2792,6.481,2793,11.209,2794,5.989,2795,5.989,2796,5.989]],["t/3596",[1,1.586,2,2.062,3,1.694,27,0.468,59,1.932,70,3.719,75,4.625,107,2.727,121,2.053,125,2.299,147,1.73,174,2.177,229,2.299,259,2.079,285,2.077,400,1.811,462,1.428,481,2.913,662,4.079,671,3.153,702,4.737,805,3.328,807,3.328,808,3.319,879,4.59,880,4.223,1108,5.913,1673,4.463,2789,5.273,2790,5.273,2791,5.273,2794,5.273,2795,7.613,2796,8.935,2797,9.668,2798,8.238,2799,5.706]],["t/3598",[0,1.043,1,1.355,2,2.849,3,1.657,14,0.899,22,0.654,23,1.617,26,0.974,27,0.458,29,3.42,33,1.827,34,1.997,59,2.239,60,1.478,61,1.933,63,2.688,64,2.808,65,2.633,68,2.876,70,1.322,75,2.437,76,2.615,77,2.773,84,1.737,91,1.407,97,1.385,99,0.913,102,1.316,106,1.361,107,1.986,108,2.89,120,1.315,121,1.864,123,1.052,125,3.266,169,1.333,189,2.701,193,3.975,196,1.652,197,2.388,218,2.127,238,2.412,239,2.343,243,2.617,251,1.397,253,1.622,259,1.584,265,2.494,270,2.086,275,2.951,285,2.031,303,1.391,323,1.457,335,1.767,406,2.214,447,1.899,462,1.396,482,3.387,527,2.543,545,2.212,584,1.718,643,1.821,663,4.257,702,1.684,805,2.236,807,1.587,808,1.582,810,2.615,815,1.565,817,1.517,823,3.03,834,3.497,879,1.631,880,1.501,912,4.23,913,2.808,1008,1.718,1038,2.808,1135,2.032,1685,3.004,1736,3.005,1968,3.199,1976,2.551,1990,1.836,1996,4.245,1997,4.668,1999,3.412,2137,2.127,2138,5.155,2140,5.155,2171,2.278,2788,4.502,2800,3.436,2801,3.436,2802,3.436,2803,2.443,2804,5.578,2805,3.436]],["t/3600",[22,2.206,27,0.951,106,4.589,107,2.684,121,1.481,147,2.885,229,3.835,283,4.574,423,5.568,573,3.869,584,4.757,868,4.693,1561,7.241,1990,5.084,2000,6.907,2806,7.68]],["t/3602",[0,1.588,553,4.285,1103,6.151,1357,5.031,2251,6.639,2255,5.436]],["t/3604",[14,2.674,436,4.585,631,5.13,1357,5.676,1359,6.41,1404,7.132,2253,6.41,2255,5.183,2333,8.252]],["t/3606",[10,0.887,16,0.798,19,1.984,21,2.932,23,1.927,27,0.837,34,2.437,44,6.285,46,2.222,70,1.233,81,1.051,91,1.329,99,0.852,102,1.228,103,1.686,105,1.146,120,0.756,121,0.82,123,0.605,124,1.85,133,1.087,147,0.972,150,2.125,153,1.741,163,1.199,169,2.603,190,1.386,207,1.755,211,3.223,225,0.949,231,2.922,242,2.603,252,2.064,253,1.513,257,1.359,275,1.167,277,2.279,278,2.159,303,2.133,313,2.027,323,3.642,356,1.393,398,1.916,399,2.125,401,2.279,436,3.852,443,1.856,445,3.15,457,2.279,462,0.802,523,3.027,532,2.751,534,2.682,545,2.064,553,2.681,570,0.827,588,1.787,593,1.856,660,3.19,680,2.507,687,3.15,786,5.649,844,1.66,861,4.926,898,6.095,899,6.737,901,2.38,913,1.613,974,1.57,1063,1.167,1103,4.458,1187,2.38,1357,2.472,1359,3.304,1360,2.802,1361,2.682,1362,3.61,1363,3.927,1364,4.122,1369,4.01,1374,4.812,1391,2.439,1404,2.236,1508,2.236,1819,1.96,2251,5.318,2255,2.671,2257,2.682,2259,2.125,2260,2.587,2261,2.802,2262,2.587,2263,4.41,2264,4.122,2265,4.521,2267,2.279,2270,4.607,2272,2.159,2359,2.507,2388,4.122,2417,1.984,2614,4.253,2671,2.802,2672,2.802,2673,2.802,2674,2.802,2807,2.682,2808,2.802,2809,4.41,2810,2.802,2811,2.802,2812,2.802,2813,2.802,2814,2.802,2815,4.607,2816,2.802,2817,2.802,2818,4.607,2819,2.279,2820,4.607]],["t/3608",[27,0.86,86,2.685,213,5.596,215,2.797,270,2.088,344,4.697,635,3.636,719,4.368,814,4.848,1160,4.606,1931,5.886,1998,4.902,2253,6.57,2255,4.11,2656,9.685,2657,7.494,2658,7.494,2659,7.494,2660,9.685,2661,9.685,2662,7.494,2663,7.494,2664,9.685,2665,9.685,2666,7.494,2667,7.494,2668,7.494,2669,7.494,2670,7.494]],["t/3610",[0,1.582,9,1.382,14,2.185,16,2.081,27,0.686,99,2.22,150,5.541,151,4.702,194,4.89,207,2.185,303,3.383,316,5.941,353,3.613,408,5.725,428,4.792,542,5.941,553,3.338,581,5.941,584,4.177,595,4.659,660,3.429,913,5.378,956,6.536,1103,4.792,1206,5.173,1397,5.38,1688,5.307,1990,4.465,2253,5.238,2255,4.235,2293,6.978,2298,6.359]],["t/3612",[0,0.87,7,3.345,9,0.746,19,1.647,21,1.162,22,0.859,23,1.773,26,0.465,27,0.736,32,1.206,35,1.932,59,1.058,60,0.705,81,0.872,86,0.881,99,1.199,102,1.019,111,1.193,121,0.914,123,0.502,124,0.934,127,1.764,128,1.628,133,0.902,147,0.807,148,1.101,152,1.69,163,2.587,170,2.411,174,2.241,176,1.609,188,1.991,192,1.856,206,1.112,207,0.696,212,1.139,213,3.529,225,0.788,226,0.921,227,0.541,231,2.813,241,1.484,242,1.032,263,4.954,285,0.969,303,1.077,313,1.024,315,1.541,326,1.389,333,1.234,359,1.312,420,1.102,436,4.228,449,1.321,476,1.609,481,2.303,553,3.581,557,1.628,570,2.171,573,1.082,580,1.713,587,1.445,589,2.459,595,1.484,601,0.834,631,3.801,694,3.892,695,3.781,697,3.682,733,1.049,735,3.632,814,1.591,861,1.526,876,1.574,896,1.304,897,1.458,902,4.096,917,1.368,1103,3.368,1144,3.147,1179,2.025,1202,1.304,1206,1.647,1313,3.147,1314,1.823,1340,2.227,1357,1.248,1362,1.823,1374,2.793,1376,3.781,1384,6.768,1386,2.459,1395,6.248,1400,2.025,1428,1.932,1458,3.138,1669,7.645,1687,1.69,1742,2.148,1877,3.529,1958,2.025,2186,1.668,2251,6.642,2253,3.682,2255,1.349,2265,1.793,2272,1.793,2293,5.493,2311,2.459,2312,2.459,2313,7.039,2314,2.459,2315,2.459,2316,2.459,2317,2.459,2318,2.459,2319,2.459,2320,2.459,2321,4.169,2322,6.392,2323,4.169,2324,4.169,2325,2.326,2326,2.459,2327,2.459,2328,2.459,2329,2.459,2330,2.459,2331,2.459,2700,3.349,2713,4.169,2741,1.764,2821,2.326,2822,2.661,2823,2.661,2824,2.661,2825,2.661,2826,2.082,2827,2.661,2828,8.243,2829,2.459,2830,2.459,2831,2.661,2832,2.661,2833,2.459,2834,2.459,2835,2.459,2836,2.459,2837,2.459,2838,2.459,2839,2.661,2840,2.661,2841,2.661,2842,2.661]],["t/3614",[0,0.733,7,1.437,21,2.162,23,1.982,26,1.111,27,0.73,28,1.318,29,1.011,34,2.104,44,4.096,46,0.984,64,3.202,70,1.143,81,0.974,90,1.078,91,1.248,94,1.192,95,2.364,98,1.506,99,2.19,108,1.539,110,1.208,111,1.332,121,1.469,133,1.007,148,0.557,166,2.469,169,1.919,174,1.133,185,2.269,186,2.879,189,3.624,197,1.272,207,0.777,211,1.817,225,0.88,231,2.735,242,1.152,243,1.394,262,1.116,278,2.001,304,1.776,313,2.854,315,1.721,320,1.913,323,1.26,370,2.112,393,1.182,398,1.776,399,1.97,401,2.112,434,0.789,436,3.327,443,1.721,445,1.776,449,1.475,523,1.927,553,1.977,570,1.277,573,1.208,593,1.721,601,0.932,623,2.112,631,1.26,660,3.652,702,1.456,719,1.6,720,1.562,725,1.551,779,1.721,786,3.89,793,1.757,802,1.551,858,2.597,867,1.776,879,1.411,897,1.627,898,4.435,899,5.706,901,2.206,909,2.852,910,2.035,913,1.495,917,1.528,961,1.614,967,1.757,968,1.757,969,1.796,970,1.817,1014,1.796,1024,1.642,1026,1.456,1052,1.485,1103,4.255,1135,1.757,1202,2.425,1245,2.156,1249,1.862,1314,3.391,1363,3.722,1364,2.324,1369,3.766,1374,3.938,1412,2.324,1413,2.398,1508,2.072,1688,1.887,1819,1.817,1950,2.324,1998,1.796,2159,2.486,2251,3.064,2255,2.508,2259,3.282,2260,2.398,2263,2.486,2264,2.324,2265,3.334,2268,2.206,2272,2.001,2293,3.232,2307,2.324,2360,2.156,2388,3.871,2417,1.839,2624,2.324,2652,2.035,2807,2.486,2809,4.142,2810,2.597,2811,2.597,2812,2.597,2813,2.597,2814,2.597,2815,4.326,2816,2.597,2817,2.597,2818,4.326,2819,2.112,2820,4.326,2843,2.597,2844,2.971,2845,2.486,2846,4.949,2847,2.971,2848,4.949,2849,2.971,2850,2.971,2851,2.746,2852,2.971,2853,2.971,2854,2.971,2855,2.746]],["t/3616",[0,1.093,16,1.224,21,2.147,22,0.936,23,1.879,26,0.515,27,0.84,32,1.336,34,2.094,44,4.072,46,0.976,53,1.294,59,1.153,70,1.891,86,0.976,91,1.24,99,1.306,105,1.053,121,1.593,125,1.188,147,0.894,151,1.658,157,0.6,169,1.906,184,1.053,186,0.899,188,0.999,207,1.285,211,1.802,225,0.873,227,0.599,231,3,242,1.143,243,4.801,257,1.249,262,1.107,277,3.495,288,1.408,304,2.939,313,4.062,323,1.249,356,1.281,382,1.294,385,3.003,393,1.955,396,0.634,398,1.762,399,1.954,401,2.095,436,3.31,443,1.707,445,3.781,449,1.463,457,2.095,478,1.504,523,2.463,545,1.897,553,2.527,570,1.905,573,1.999,593,1.707,631,2.084,660,3.029,687,2.939,698,1.985,735,1.383,786,6.259,873,2.139,897,1.614,898,4.413,899,5.685,901,2.188,903,2.576,1103,2.819,1202,1.444,1224,1.872,1357,1.383,1363,2.876,1364,2.305,1369,3.741,1374,3.043,1413,3.967,1467,2.305,1819,1.802,1950,2.305,2251,3.915,2255,3.206,2259,1.954,2260,2.378,2264,2.305,2265,3.312,2268,2.188,2272,1.985,2293,3.211,2298,4.813,2355,2.243,2356,2.466,2359,2.305,2360,2.139,2388,3.845,2417,1.824,2614,3.967,2624,3.845,2630,4.543,2671,2.576,2672,2.576,2673,2.576,2674,2.576,2680,2.378,2807,2.466,2808,2.576,2809,4.114,2810,2.576,2811,2.576,2812,2.576,2813,2.576,2814,2.576,2815,4.297,2816,2.576,2817,2.576,2818,4.297,2819,2.095,2820,4.297,2856,2.947,2857,2.947,2858,2.723,2859,2.723,2860,2.723,2861,2.947,2862,2.947,2863,2.947,2864,2.576,2865,2.947,2866,2.947,2867,2.947,2868,2.947,2869,2.723,2870,2.947,2871,4.543,2872,2.947,2873,2.947,2874,2.947,2875,2.947]],["t/3618",[0,1.246,16,0.913,22,1.602,23,0.995,27,0.756,34,2.613,59,1.379,64,1.845,70,2.26,75,1.601,86,1.214,90,1.33,99,1.954,105,1.31,121,1.67,125,2.965,157,1.197,167,1.975,168,1.593,169,1.422,171,1.36,174,1.399,185,2.694,186,3.832,188,1.243,189,1.222,197,1.569,207,0.959,217,2.242,225,1.085,231,2.857,242,2.279,243,3.948,278,2.469,304,2.191,313,3.543,315,3.404,320,2.36,327,1.784,373,2.216,382,2.58,396,0.789,400,1.164,445,2.191,449,1.82,478,1.871,523,3.587,526,3.205,535,2.168,553,3.362,570,2.377,573,2.39,588,2.044,593,2.123,631,3.568,660,1.504,662,1.547,702,1.796,786,5.633,871,2.721,897,2.008,898,2.191,899,2.216,903,3.205,904,1.899,949,5.04,1008,1.832,1031,2.721,1103,4.826,1114,2.958,1202,1.796,1224,2.328,1374,4.554,1413,2.958,1419,2.469,1467,2.867,1594,2.721,1688,2.328,1950,2.867,1998,2.216,2251,5.209,2255,2.979,2267,2.606,2268,2.721,2284,3.388,2293,5.496,2298,2.79,2301,2.79,2355,2.79,2356,3.068,2360,2.661,2624,6.582,2626,3.068,2807,3.068,2808,3.205,2858,3.388,2859,3.388,2860,3.388,2869,3.388,2871,3.388,2876,8.415,2877,3.666]],["t/3620",[2,2.029,3,3.112,21,3.542,64,4.082,121,1.911,167,5.645,171,3.009,174,3.094,176,4.902,185,4.804,186,3.542,242,3.145,257,3.438,262,3.045,285,3.816,356,3.524,359,3.999,429,5.296,553,3.24,563,5.463,573,3.297,700,5.02,707,3.579,725,4.232,949,5.556,974,3.973,1374,5.02,1669,5.656,1881,5.656,2186,5.083]],["t/3622",[0,1.334,2,2.673,9,0.835,16,1.875,27,0.739,33,1.954,34,1.432,44,4.849,59,2.506,81,1.655,83,2.252,84,2.4,86,1.672,90,1.832,99,1.341,107,1.424,121,1.961,122,1.896,133,1.712,162,2.524,168,2.194,181,1.603,186,2.297,188,2.553,207,1.32,304,4.502,313,1.942,319,2.315,320,4.849,323,2.141,374,2.369,397,4.201,417,6.976,478,2.577,553,3.989,560,2.924,570,1.944,618,6.96,631,3.193,660,3.09,707,3.324,826,5.073,956,3.95,974,3.69,1003,3.842,1202,2.474,1338,3.522,1381,2.924,1502,3.59,1581,4.225,1688,3.207,1998,4.553,2251,4.662,2268,5.591,2293,4.919,2298,5.731,2624,5.891,2625,4.666,2851,4.666,2878,5.049,2879,4.666,2880,4.414,2881,5.049,2882,4.666,2883,5.049]],["t/3624",[0,0.59,1,1.209,2,1.572,3,1.184,7,3.038,9,1.286,10,1.103,14,1.042,16,1.935,21,1.741,22,1.196,23,1.973,26,0.696,27,0.638,28,1.768,59,1.823,60,1.056,81,1.307,84,1.346,86,1.32,91,1.005,97,0.99,121,1.373,124,1.399,127,6.363,128,4.754,130,2.286,142,2.382,152,2.531,157,0.812,163,1.491,170,2.129,174,1.52,176,2.409,182,1.953,184,1.424,225,1.18,226,1.379,228,2.382,231,3.059,253,1.881,259,0.708,270,1.617,271,1.65,284,2.222,285,2.83,288,1.904,303,3.571,320,4.044,406,0.842,417,4.102,436,3.956,449,3.118,553,3.834,595,2.222,601,1.25,631,1.69,660,3.189,663,2.409,695,2.566,697,3.937,700,2.467,717,2.382,805,1.733,807,1.134,808,1.13,815,1.118,896,1.953,897,2.183,974,1.953,994,2.566,1052,3.14,1187,2.959,1313,2.78,1314,2.73,1357,1.87,1669,8.124,2251,4.812,2253,3.937,2288,3.484,2293,2.603,2307,3.117,2313,5.256,2489,2.183,2490,2.222,2809,3.335,2828,9.328,2829,3.683,2830,3.683,2833,3.683,2834,3.683,2835,3.683,2836,3.683,2837,3.683,2838,3.683,2855,3.683,2884,3.985,2885,3.985,2886,3.683,2887,3.985,2888,3.985]],["t/3626",[0,0.715,22,1.858,26,1.531,27,0.801,28,2.142,29,1.642,32,3.301,49,4.453,53,2.119,78,2.251,80,4.305,81,1.582,84,1.034,105,1.725,111,3.265,120,1.138,121,1.365,124,1.694,147,1.464,157,0.983,160,2.447,161,1.609,163,3.279,167,2.6,169,2.824,178,2.047,186,1.472,197,2.067,227,0.981,231,1.335,242,1.872,263,4.024,276,3.2,278,3.252,315,2.796,319,2.213,357,2.742,393,1.92,436,4.378,449,2.397,481,3.717,482,2.018,490,2.278,532,2.519,553,4.4,570,2.704,588,2.691,601,1.513,631,3.087,707,2.13,725,3.8,759,5.184,783,3.108,789,2.413,897,2.644,1103,2.768,1236,3.504,1244,3.776,1335,3.367,1374,2.988,1381,6.622,1504,5.405,1594,3.583,1669,3.367,1999,2.952,2059,3.896,2251,5.427,2293,4.756,2344,3.896,2644,4.039,2880,8.534,2889,4.827,2890,4.827,2891,4.827,2892,7.281,2893,4.827,2894,4.827,2895,4.827,2896,4.827,2897,4.827,2898,4.827,2899,4.827]],["t/3628",[0,0.808,2,1.365,3,1.62,9,1.318,22,0.636,23,1.951,26,0.584,27,0.567,33,2.445,34,1.547,36,4.048,46,1.107,59,2.06,60,1.445,62,1.637,70,3.378,75,3.018,84,2.641,90,1.212,91,0.843,104,1.082,105,1.949,120,1.286,121,1.953,124,1.173,148,0.626,161,2.657,163,1.25,181,1.061,187,3.041,188,1.849,190,3.447,207,1.806,216,1.365,230,2.426,231,0.925,234,1.815,275,2.515,312,0.83,319,1.532,333,1.55,339,2.554,392,0.881,397,2.543,406,0.706,435,3.159,436,3.575,437,1.917,452,4.572,462,0.836,469,2.069,478,1.706,485,5.091,553,1.335,570,2.846,580,6.904,631,1.417,702,1.637,764,0.948,792,2.183,880,1.46,913,1.682,973,2.797,1036,2.804,1042,1.706,1069,3.297,1088,2.216,1166,3.562,1294,2.29,1359,2.095,1388,1.637,1404,3.804,1406,2.614,1604,1.568,1779,2.543,2304,2.123,2900,3.342,2901,3.342,2902,3.342,2903,3.342,2904,3.342,2905,3.342,2906,3.342,2907,3.342,2908,3.342,2909,3.342,2910,3.342,2911,3.342,2912,3.342,2913,3.342,2914,4.401,2915,3.342,2916,3.804,2917,5.454,2918,5.454,2919,5.454,2920,3.342,2921,3.088,2922,3.342,2923,3.342,2924,3.342,2925,5.454]],["t/3630",[0,1.081,1,1.405,2,1.827,10,2.019,14,2.884,22,2.243,27,0.967,32,3.309,33,3.187,49,4.465,78,3.405,83,3.256,84,2.363,99,2.598,105,2.609,108,3.781,120,1.721,121,1.136,157,1.487,161,2.433,162,3.649,197,3.125,319,3.346,323,3.095,374,3.425,397,3.405,436,3.273,492,4.519,527,3.328,775,5.092,913,4.922,974,4.792,1244,5.71,1381,4.228,1504,5.419,1999,4.465,2157,5.71]],["t/3632",[14,2.327,16,2.216,27,0.913,120,2.098,197,3.81,225,3.292,226,3.848,382,3.907,584,4.448,631,3.773,632,5.408,643,4.717,674,4.644,805,2.455,856,6.327,913,4.479,1403,5.578,1406,6.961,1845,5.9,2366,7.181,2926,8.899,2927,8.899]],["t/3635",[0,1.362,14,2.967,16,2.29,26,1.606,33,2.386,84,1.971,99,2.443,108,4.764,188,3.117,436,4.124,632,4.102,654,6.998,662,3.881,679,5.381,1314,6.301,1382,7.696,1403,5.765,1887,6.676,2060,7.696,2928,7.194,2929,8.499,2930,8.04]],["t/3637",[1,1.622,2,2.109,14,2.204,22,1.873,23,2.179,27,0.483,60,2.608,107,2.377,108,3.051,137,3.051,157,1.2,178,2.497,188,1.996,209,2.641,225,1.744,231,1.629,262,2.211,275,3.069,303,4.349,349,2.332,359,2.905,382,2.586,406,1.245,407,2.985,409,4.108,436,2.641,481,5.803,584,2.944,601,1.847,631,3.573,632,2.627,633,4.699,662,2.485,679,3.446,694,3.314,695,3.792,725,3.074,1008,2.944,1374,3.646,1381,3.411,1391,6.413,1395,6.801,1397,3.792,1419,3.967,1458,3.147,1579,4.928,1842,4.482,1877,4.607,2301,4.482,2916,4.108,2931,5.889,2932,5.148,2933,5.148,2934,5.443,2935,5.443,2936,5.443,2937,5.443,2938,5.443,2939,5.443,2940,5.443,2941,5.443]],["t/3639",[0,1.045,2,1.766,3,2.411,8,2.322,9,0.925,16,0.858,23,1.887,27,0.785,29,1.172,33,2.107,39,1.711,60,1.87,64,1.735,84,2.632,99,1.486,105,2.902,110,1.402,121,1.488,124,1.21,147,1.045,160,2.835,161,3.938,162,2.795,163,1.289,178,1.461,196,1.657,218,4.368,228,2.061,231,0.954,253,2.639,275,1.255,285,2.956,312,0.856,323,1.461,335,1.772,339,2.609,344,1.996,353,1.491,397,2.608,417,5.303,435,3.239,436,1.546,437,3.207,449,1.711,452,3.207,475,2.134,478,1.76,480,2.696,482,1.441,485,4.538,490,1.627,553,4.331,564,2.623,565,1.723,570,2.798,580,6.155,593,1.996,605,2.361,630,1.799,631,1.461,733,1.359,783,2.219,853,2.623,974,1.689,1036,2.876,1293,1.996,1294,2.361,1397,2.219,1401,3.013,1508,2.404,1546,2.559,1615,2.696,1779,2.623,1986,2.782,2042,2.623,2043,2.885,2072,2.559,2090,2.885,2118,2.885,2651,2.782,2942,3.447,2943,3.447,2944,3.447,2945,3.447,2946,3.447,2947,3.447,2948,3.447,2949,3.447,2950,3.447,2951,3.447,2952,3.447,2953,5.168,2954,5.593,2955,2.885,2956,8.249,2957,7.503,2958,5.593,2959,3.447,2960,2.502,2961,3.447,2962,3.447,2963,3.447,2964,3.447,2965,5.593]],["t/3641",[16,2.499,22,2.434,133,3.403,235,3.187,283,6.145,356,4.363,687,6.001,2966,9.277,2967,9.277]],["t/3643",[7,4.235,9,1.991,12,4.47,28,3.885,59,2.054,70,3.368,121,1.363,133,2.968,161,2.919,188,2.968,215,3.02,259,1.556,269,3.483,344,5.072,410,7.189,435,5.072,436,3.927,437,5.022,553,3.498,720,4.605,1099,4.347,1593,5.294,2968,8.757,2969,8.757,2970,8.757,2971,8.092]],["t/3645",[0,1.809,14,2.365,22,1.722,27,0.742,30,4.66,31,4.013,92,6.505,100,4.721,107,2.551,181,2.872,215,3.119,269,3.598,631,3.835,707,3.992,877,5.908,878,5.349,906,5.187,2267,6.431,2972,6.565,2973,7.3]],["t/3647",[0,1.865,16,2.411,22,2.229,82,5.789,112,7.029,113,7.815,114,5.5,115,7.369,116,8.949,117,8.104,118,8.104,119,8.104,181,3.718]],["t/3650",[9,1.091,14,1.725,16,1.643,22,2.394,27,0.749,28,2.927,30,2.517,33,3.077,39,3.276,46,2.184,49,4.035,52,4.789,56,4.19,81,2.163,92,3.821,93,3.784,94,2.647,95,5.396,99,1.753,141,4.473,148,1.962,157,1.344,160,3.344,161,3.043,186,3.445,197,2.825,323,2.797,338,3.418,340,3.944,370,4.691,371,4.691,372,4.52,393,2.624,408,4.52,462,2.285,573,3.712,658,4.917,702,3.233,893,4.374,913,5.685,1359,4.136,1963,4.602,2157,5.161]],["t/3652",[0,1.604,215,3.735,805,2.988,814,6.475,1964,9.064]],["t/3654",[22,1.86,27,0.802,33,2.535,95,4.667,99,2.596,121,1.833,186,2.98,357,5.549,373,7.118,573,3.973,601,3.063,1743,7.642,1965,7.092,1966,7.885]],["t/3656",[22,1.958,23,2.323,33,2.044,59,1.848,70,3.029,75,3.441,81,2.582,95,3.763,99,2.092,111,3.532,121,2.048,147,3.472,259,2.338,275,4.169,373,4.762,702,3.859]],["t/3658",[0,0.578,1,0.751,16,0.971,22,1.459,23,2.201,26,1.973,27,0.507,28,1.73,29,2.1,31,1.73,33,2.847,34,3.205,39,1.936,62,1.911,65,3.617,70,1.5,74,4.584,90,2.78,95,4.164,99,1.036,110,3.544,111,2.769,121,1.193,123,0.736,124,1.369,148,1.436,166,1.85,181,1.238,189,3.527,190,3.314,198,2.195,207,1.02,216,1.593,270,1.004,275,1.42,285,1.42,288,3.661,313,1.5,315,2.259,338,2.02,360,3.733,382,1.713,385,1.852,393,1.551,489,4.868,510,1.145,560,3.576,562,1.809,571,1.506,587,2.119,635,1.749,662,1.646,671,3.412,702,3.025,779,2.259,780,2.628,802,2.036,817,1.721,840,2.155,881,2.237,909,1.749,967,2.306,968,2.306,969,2.358,970,2.385,995,3.922,1008,1.95,1014,2.358,1016,2.72,1020,2.332,1021,3.148,1022,2.006,1024,2.155,1026,1.911,1027,2.445,1028,2.831,1104,7.182,1135,2.306,1245,2.831,1249,2.445,1324,5.69,1582,2.831,1583,2.896,1793,5.346,1852,3.264,1975,3.148,1976,2.896,1977,3.264,1978,3.264,1979,3.148,1980,3.148,1981,2.831,1982,2.414,1983,2.672,2159,3.264,2974,3.9]],["t/3660",[0,1.283,16,1.524,22,1.165,23,2.342,26,1.755,27,0.502,33,2.247,34,3.568,60,1.621,95,2.923,99,1.626,104,1.98,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,275,3.66,360,3.699,373,3.699,374,2.871,660,2.511,800,6.04,909,3.884,1022,3.146,2161,5.349,2162,5.349,2163,7.571,2164,5.349,2165,8.55,2166,5.349,2167,5.349,2168,5.349,2975,6.119]],["t/3662",[22,2.042,26,1.873,62,5.255,95,5.123,275,3.905,800,7.481]],["t/3664",[22,1.271,23,2.429,26,1.166,34,3.378,59,1.567,62,3.272,70,2.568,75,2.917,95,3.19,121,1.916,147,2.025,259,2.117,275,2.431,702,3.272,800,4.658,2165,8.881]],["t/3666",[0,1.151,1,1.778,2,3.22,3,3.229,16,1.312,27,0.892,59,2.391,62,2.581,67,2.749,95,2.516,107,2.192,120,2.774,121,1.771,123,1.466,124,2.728,159,3.082,189,2.59,193,4.119,225,1.56,226,1.823,227,2.209,239,4.281,243,2.471,259,1.812,275,2.829,406,2.687,420,2.181,573,2.142,584,2.633,643,2.792,662,2.223,823,5.016,824,4.595,834,3.302,836,3.492,879,3.69,880,3.395,1968,4.457,1989,3.609,2137,3.261,2171,3.492,2976,6.503]],["t/3668",[0,1.131,1,0.99,2,3.12,27,0.827,59,2.814,62,2.52,70,3.503,89,3.207,107,2.569,120,1.8,121,1.907,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.188,238,4.357,239,3.207,243,3.582,259,1.791,275,2.78,335,2.645,406,2.635,420,2.13,584,2.571,643,2.726,733,3.974,734,2.589,823,4.147,824,4.515,879,4.784,880,4.402,1968,4.379,1990,2.748,1991,5.063,1992,5.973,1993,6.162,2137,3.184,2171,3.411,2976,6.39]],["t/3670",[0,1.131,1,0.99,2,3.12,27,0.747,59,2.739,62,2.52,70,3.503,75,3.978,89,3.207,107,2.569,120,1.8,121,1.969,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.048,238,4.357,239,3.207,243,3.582,259,1.791,275,2.78,335,2.645,406,2.635,420,2.13,584,2.571,643,2.726,733,3.974,734,2.589,823,4.147,824,4.515,879,4.324,880,3.978,1968,4.379,1990,2.748,1991,5.063,1994,5.973,1995,6.162,2137,3.184,2171,3.411,2976,6.39]],["t/3672",[0,1.115,1,0.972,2,3.106,27,0.739,59,2.723,62,2.474,70,3.464,75,3.29,89,3.163,107,2.54,120,1.775,121,2.007,123,1.421,169,1.958,189,2.51,193,3.359,225,1.495,226,1.747,227,2.029,238,4.318,239,3.163,243,3.533,259,1.775,275,2.742,335,2.596,406,2.623,420,2.091,584,2.524,643,2.676,702,4.413,733,3.938,734,2.541,823,4.091,824,4.453,879,4.276,880,3.934,1968,4.319,1990,2.698,1991,4.993,2137,3.126,2169,6.302,2170,6.302,2171,3.348,2976,6.302]],["t/3674",[0,0.736,1,0.575,2,0.748,3,0.887,22,0.946,23,2.331,26,0.522,27,0.245,34,2.918,59,2.093,62,2.436,70,1.149,75,1.305,91,0.753,97,0.742,99,1.978,107,1.801,110,1.215,121,0.774,123,0.564,125,1.204,131,1.514,147,0.906,148,0.56,157,1.301,158,3.953,171,1.845,181,2.027,185,3.413,186,1.948,188,1.685,190,1.292,197,3.539,251,3.847,259,0.531,270,1.28,275,2.325,285,1.088,297,3.235,335,1.536,366,3.247,373,3.005,382,1.312,420,2.059,462,0.748,478,1.525,549,2.999,571,4.586,572,3.247,573,1.215,662,1.26,663,3.005,702,2.436,805,1.372,807,0.85,808,0.847,810,2.273,815,0.838,841,4.22,894,2.635,912,2.595,975,2.5,1052,1.493,1123,1.377,1290,2.611,1729,5.823,1990,1.596,1998,1.806,2141,8.744,2142,8.271,2148,4.346,2178,2.5,2179,2.611,2180,2.761,2181,2.611,2182,6.918,2186,4.667,2200,2.761,2202,4.346,2205,4.594,2207,2.761,2977,2.987,2978,2.987,2979,2.987,2980,2.987,2981,8.744,2982,2.987,2983,2.987,2984,2.987,2985,2.987,2986,7.445,2987,2.987,2988,2.987,2989,2.987,2990,2.987,2991,2.987,2992,2.987,2993,2.987,2994,4.972,2995,2.987,2996,4.972]],["t/3676",[0,1.096,3,2.197,26,1.292,27,0.607,29,2.516,33,1.919,34,2.099,60,2.615,84,1.585,95,3.534,99,1.965,102,2.834,108,3.832,121,1.844,147,2.243,148,1.849,157,1.507,161,2.466,163,2.767,174,3.765,186,3.613,189,2.466,197,3.168,207,1.935,242,2.869,275,2.694,323,3.137,340,4.423,356,4.289,447,4.088,462,2.47,482,3.092,527,3.373,658,5.315,660,3.036,913,3.724,953,4.125,980,5.492,1999,4.525,2700,5.492]],["t/3678",[22,2.044,27,0.881,33,2.185,94,3.379,95,4.022,107,2.375,121,1.671,125,3.393,147,2.553,178,3.57,229,3.393,240,5.987,253,3.974,283,4.047,294,5.421,370,5.987,371,5.987,372,5.769,377,4.574,378,6.112,379,5.421,380,6.796,381,5.987,423,4.927,573,3.424,584,4.209,718,5.421,868,4.153,1561,6.408,1990,4.499,2000,6.112]],["t/3680",[0,1.701,22,1.902,26,1.501,27,0.497,33,2.592,34,1.717,49,3.701,59,1.42,62,2.965,81,2.817,84,1.297,96,4.851,97,2.701,99,2.283,102,3.291,104,1.958,105,2.163,107,2.424,121,1.952,147,2.605,148,1.61,168,2.63,186,1.846,189,2.864,197,2.591,216,2.472,225,1.792,226,2.094,227,1.23,231,1.674,370,4.303,371,4.303,372,4.146,373,3.658,382,2.657,397,5.072,444,5.255,573,2.461,605,4.146,607,5.064,702,2.965,890,4.013,897,4.707,912,3.158,913,5.474,1582,4.393,2157,4.734,2997,5.593]],["t/3682",[397,5.206,631,4.732]],["t/3685",[22,1.489,23,2.396,59,1.834,70,3.008,75,3.416,96,3.488,99,2.078,121,1.956,147,2.371,259,2.152,275,3.727,397,5.86,702,3.832,2803,5.56]],["t/3687",[9,1.322,26,1.813,33,2.693,34,3.678,99,2.758,110,4.221,121,1.244,147,2.423,198,4.496,242,3.099,275,2.91,397,5.693,559,8.687,560,6.013,654,6.081,840,4.416,917,4.109,925,7.707,1186,6.251,1844,6.449,1887,5.8,2765,6.986,2767,6.449,2998,7.991,2999,7.991,3000,7.385]],["t/3689",[16,0.591,23,2.407,26,0.714,32,1.076,34,2.051,39,1.178,59,0.557,60,0.629,70,0.913,75,1.037,89,0.997,99,0.63,121,1.231,123,0.772,125,2.914,147,0.72,148,0.767,150,6.835,164,1.389,166,0.711,176,2.473,197,1.016,238,2.772,275,0.864,285,0.864,313,2.466,325,3.895,335,1.22,392,0.626,397,1.908,404,3.321,523,2.497,557,1.452,559,1.986,560,1.375,702,1.163,707,1.047,722,7.19,733,0.936,873,1.723,880,4.874,917,4.601,1160,1.348,1502,1.687,1762,5.604,2257,1.986,2388,5.015,2741,4.251,2746,1.915,2747,5.925,2748,5.925,2749,5.925,2750,5.925,2751,6.683,2752,5.925,2753,9.527,2754,2.193,2755,9.527,2756,5.365,2757,2.193,2758,5.925,2759,5.925,2760,5.925,2761,5.925,2762,5.925,2763,5.925,2764,5.925,2765,5.604,2766,5.925,2767,5.174,2772,5.925,3001,2.373,3002,2.373,3003,2.373,3004,2.373,3005,2.373,3006,2.373,3007,2.373,3008,2.373]],["t/3691",[26,1.396,86,3.437,99,2.123,107,3.569,121,2.018,123,1.508,125,3.22,147,2.423,148,1.498,168,3.473,188,2.709,234,4.34,244,5.574,251,3.249,275,2.91,315,4.628,377,4.34,397,5.693,535,4.725,573,3.249,612,5.383,662,4.38,890,5.298,1008,3.994,1232,6.081,2746,6.449,3009,7.991]],["t/3693",[0,1.194,1,1.263,2,2.897,3,2.393,16,1.05,22,1.249,26,1.407,27,0.539,34,3.091,59,1.89,60,1.117,62,2.065,75,1.841,84,1.406,99,1.12,104,1.364,105,4.534,107,1.851,110,1.714,120,2.657,121,1.625,123,1.716,181,2.888,189,2.187,193,2.927,207,1.102,223,3.258,224,3.727,225,2.386,226,2.789,227,1.638,235,1.338,239,2.756,243,1.977,259,1.166,275,1.535,397,3.758,406,2.303,461,3.059,462,1.055,528,2.609,549,3.575,571,1.628,573,1.714,584,2.107,601,1.322,643,2.234,662,1.779,823,3.565,824,3.881,879,3.116,880,3.52,1160,2.394,1201,2.27,1206,2.609,1220,4.929,1221,5.133,1923,3.402,1968,3.763,2137,2.609,2171,2.795,2746,3.402,2756,5.492,2774,5.296,2775,6.065,3010,3.527,3011,2.839,3012,3.895,3013,3.895]],["t/3695",[0,1.486,2,2.993,14,1.333,34,2.151,59,2.637,62,2.497,70,2.917,89,2.14,105,4.017,107,2.139,120,2.365,121,1.812,123,1.709,181,2.408,189,2.527,193,3.382,207,1.333,225,1.509,226,1.764,227,1.541,238,3.279,239,3.184,243,3.557,259,1.348,267,3.046,275,1.855,397,2.377,400,1.618,406,2.528,549,2.751,584,2.547,632,2.273,633,2.841,643,2.701,733,2.99,823,4.119,824,4.484,879,4.762,880,4.684,1220,4.638,1221,5.932,1923,4.113,1968,4.349,1991,5.028,1992,5.932,1993,6.12,2137,3.155,2171,3.379,2774,6.12,3010,4.265,3014,7.583]],["t/3697",[0,1.368,2,3.022,34,2.204,59,2.669,62,2.581,75,3.395,89,2.212,105,4.066,107,2.192,120,2.403,121,1.831,123,1.742,181,2.467,189,2.59,193,3.466,225,1.56,226,1.823,227,1.579,238,3.36,239,3.263,243,3.646,259,1.381,275,1.918,397,2.457,400,1.672,406,2.552,549,2.819,584,2.633,643,2.792,733,2.077,823,4.221,824,4.595,879,4.84,880,4.749,1220,4.753,1221,6.079,1923,4.251,1968,4.457,1991,5.153,1994,6.079,1995,6.271,2137,3.261,2171,3.492,2774,6.271,3010,4.408,3015,7.771]],["t/3699",[0,1.368,2,3.022,34,2.204,59,2.669,62,2.581,89,2.212,105,4.066,107,2.192,120,2.403,121,1.831,123,1.742,181,2.467,189,2.59,193,3.466,225,1.56,226,1.823,227,1.579,238,3.36,239,3.263,243,3.646,259,1.381,275,1.918,397,2.457,400,1.672,406,2.552,549,2.819,584,2.633,643,2.792,702,3.807,733,2.077,823,4.221,824,4.595,879,4.84,880,4.749,1220,4.753,1221,6.079,1923,4.251,1968,4.457,1991,5.153,2137,3.261,2169,6.503,2170,6.503,2171,3.492,2774,6.271,3010,4.408,3016,7.771]],["t/3701",[0,1.514,6,5.183,190,4.422,206,4.274,375,7.422,385,4.855,491,5.808,1736,6.517,3017,5.378,3018,7.591]],["t/3703",[0,0.854,6,2.922,14,2.17,20,3.275,27,0.681,29,1.961,34,1.635,58,3.95,81,1.89,83,3.702,121,1.827,122,2.165,124,2.024,151,3.244,162,4.861,164,3.374,188,1.954,190,3.589,197,2.468,225,1.707,226,1.995,227,1.172,229,2.324,242,2.236,259,1.891,262,2.165,339,2.131,348,3.884,390,3.526,395,3.215,396,1.241,470,3.215,565,2.882,570,1.488,603,3.485,630,3.009,659,6.316,673,4.471,692,3.409,693,3.526,729,4.732,860,3.95,1079,4.825,1736,5.731,1771,4.51,1982,3.569,2361,4.653,2368,5.04,3017,6.733,3019,5.766,3020,6.946,3021,7.256,3022,5.076,3023,5.766,3024,5.766,3025,5.328,3026,4.021,3027,3.884]],["t/3705",[27,0.74,29,2.204,34,1.838,102,2.482,120,1.528,121,1.834,124,3.165,147,2.734,151,3.646,157,1.32,163,2.424,171,3.346,173,4.173,190,4.484,206,4.334,227,1.317,242,2.513,259,1.843,262,2.433,285,2.36,315,3.754,335,3.332,339,3.333,349,2.567,393,2.578,395,5.027,404,4.67,462,1.622,491,5.121,544,3.874,570,1.673,603,5.451,684,3.332,692,3.832,693,3.964,759,3.832,775,4.52,840,4.982,860,4.44,966,3.005,1189,4.173,1736,4.857,2361,5.23,3017,3.408,3018,8.321,3021,7.882,3022,3.964,3026,4.52]],["t/3708",[27,1.06,121,1.688,262,3.211,404,6.167,674,4.463,703,7.709,729,4.798,844,4.43,860,5.859,1931,6.207,3017,5.703,3018,8.839,3028,7.156,3029,9.313,3030,7.903,3031,8.552,3032,7.903]],["t/3710",[1,1.146,2,1.49,3,1.768,20,4.824,27,0.886,29,2.025,34,1.689,110,2.421,124,2.09,139,3.833,149,4.419,151,3.35,157,2.017,159,3.483,162,4.949,165,3.559,169,2.309,190,2.574,198,3.35,207,1.557,217,3.641,227,1.726,259,1.509,262,3.189,339,2.201,348,4.01,396,1.282,404,4.399,429,3.888,434,1.582,447,3.29,490,2.809,570,2.192,659,4.53,666,4.921,684,3.061,729,2.399,757,2.956,759,3.52,847,6.906,894,3.155,1144,4.152,1325,5.721,1336,4.982,1717,4.53,1736,3.207,1765,5.204,1982,3.685,1998,5.134,2361,4.804,3017,6.424,3018,6.305,3021,7.424,3033,5.953,3034,5.953,3035,5.502,3036,6.854,3037,5.204,3038,3.888]],["t/3712",[6,4.957,16,1.818,27,0.803,81,2.393,89,3.066,121,1.717,229,2.942,259,1.738,271,5.235,324,4.576,393,2.904,404,3.781,604,6.745,703,8.376,729,4.748,844,3.781,1427,4.519,1499,8.549,1556,4.7,1720,6.381,3017,6.196,3018,5.419,3029,5.71,3039,7.43,3040,7.3,3041,7.3,3042,4.918,3043,7.3,3044,6.746,3045,5.71]],["t/3714",[0,0.676,16,1.137,22,2.404,23,1.9,26,1.48,27,0.885,28,3.759,30,1.742,31,3.097,32,3.164,37,2.142,56,2.9,59,1.988,67,4.952,78,2.129,84,1.816,85,2.988,87,3.892,89,1.917,90,4.388,91,3.249,101,3.128,104,1.478,121,0.711,123,1.317,125,2.813,181,1.45,184,1.632,189,2.824,207,1.194,223,2.267,227,1.418,231,1.263,236,2.7,251,1.857,319,2.093,326,2.383,385,2.168,396,1.503,400,2.216,427,3.474,570,1.178,601,1.432,679,2.672,872,3.185,877,2.982,878,2.7,881,2.618,909,2.047,1014,2.76,1015,3.991,1101,3.314,1208,2.9,1231,3.246,1301,3.185,1556,2.94,2267,4.963,2778,3.314,2806,3.685,2973,3.685,3046,3.991,3047,3.991,3048,3.685,3049,6.451,3050,6.451,3051,5.182,3052,3.991,3053,3.821,3054,3.991,3055,3.685,3056,3.991,3057,3.991]],["t/3716",[22,2.425,27,0.736,86,2.97,90,3.254,91,3.212,121,1.894,150,5.948,204,4.832,212,3.841,227,1.823,304,5.363,396,1.931,400,2.848,460,5.305,565,4.484,628,5.423,1074,6.66,1338,6.257]],["t/3718",[14,1.6,22,1.649,26,1.755,27,0.502,90,4.64,91,3.02,104,1.98,107,3.083,121,1.916,125,3.49,147,3.048,157,1.246,163,3.239,164,3.581,169,2.373,171,4.444,173,3.94,189,3.35,198,3.443,242,2.373,247,4.938,248,3.658,257,2.594,259,1.539,275,2.228,283,2.941,284,3.412,315,3.544,326,3.194,385,2.905,400,1.943,460,3.618,535,3.618,584,3.059,595,3.412,605,4.192,786,3.743,868,3.018,876,3.618,974,2.998,1052,3.059,1132,4.122,1561,4.656,1990,3.269,2456,4.656,3026,4.268]],["t/3720",[1,1.262,2,2.275,3,2.7,9,1.085,27,0.971,60,1.738,81,2.15,83,2.925,84,1.405,104,2.122,111,4.077,124,3.663,160,4.608,161,4.081,187,3.656,188,4.459,190,2.836,206,2.741,208,4.222,212,2.808,259,1.166,292,3.006,390,4.011,458,3.423,462,1.641,470,3.656,471,5.488,485,3.114,492,4.06,549,2.379,556,3.837,563,4.418,662,2.767,673,3.533,729,3.664,746,4.348,791,4.76,1199,6.124,1593,3.965,1733,4.418,2367,5.733,2383,6.061,2914,5.293,3058,4.663,3059,5.733]],["t/3722",[23,2.039,60,2.043,133,2.614,187,6.318,188,3.438,218,4.773,235,2.448,259,1.37,339,2.85,356,3.351,373,4.661,382,4.453,434,2.694,523,3.003,817,4.476,962,3.368,1008,3.854,1036,3.965,1301,5.378,1458,5.418,1629,3.753,1636,4.188,1638,4.512,2126,6.53,2488,5.867,2526,5.112,2531,7.278,3060,7.125,3061,7.125,3062,7.125,3063,5.867,3064,6.222]],["t/3724",[9,0.813,23,2.088,60,1.302,99,1.305,104,2.388,133,2.501,147,1.49,161,2.953,181,2.813,187,4.941,188,3.339,190,3.832,218,3.042,231,2.041,233,3.08,253,2.319,259,1.312,339,1.816,356,2.135,382,2.157,434,3.056,440,3.366,458,3.851,488,3.965,507,3.028,510,1.442,523,1.913,535,2.905,570,1.268,729,1.98,747,3.493,817,3.257,912,2.564,962,2.146,1056,2.135,1134,4.411,1241,5.356,1458,6.322,1612,4.112,1629,2.392,1636,2.669,1638,2.875,1798,3.31,1802,2.073,2126,3.164,2526,3.258,2531,5.955,2806,3.965,2914,5.955,3065,4.914,3066,4.914,3067,4.295,3068,4.914,3069,4.541,3070,9.103,3071,7.705,3072,9.851,3073,4.541,3074,4.541,3075,7.379,3076,8.861,3077,4.914,3078,4.914,3079,4.914,3080,4.914,3081,4.541,3082,4.541,3083,3.843,3084,3.566]],["t/3726",[9,1.048,23,2.184,27,0.331,46,1.334,51,2.594,59,1.486,60,1.679,70,2.437,89,1.692,110,1.638,161,2.609,181,2.818,184,1.44,187,7.008,188,2.654,229,1.624,236,2.383,253,3.695,259,1.126,339,4.221,356,2.753,385,1.913,437,2.311,440,2.76,489,2.559,523,2.467,535,2.383,627,3.522,656,2.207,660,2.599,707,2.796,729,1.624,747,4.504,817,3.917,962,2.767,1008,2.014,1036,3.257,1241,5.682,1301,7.474,1458,3.385,1590,3.152,1601,2.103,1612,3.372,1629,3.084,1636,3.441,1638,3.707,1774,3.252,1798,2.714,2126,4.079,2488,3.066,2526,4.2,2531,5.365,2533,3.252,2914,5.113,3060,3.724,3061,3.724,3062,3.724,3063,4.821,3064,3.252,3067,5.538,3069,3.724,3070,5.855,3073,3.724,3074,3.724,3085,4.029,3086,4.029,3087,4.029,3088,7.829,3089,7.829,3090,4.029,3091,6.335,3092,4.029,3093,4.029,3094,6.335,3095,4.029,3096,4.029,3097,4.029,3098,4.029,3099,4.029,3100,3.372,3101,4.029,3102,4.029,3103,4.029,3104,4.029,3105,4.029,3106,4.029]],["t/3728",[9,1.006,16,2.148,23,2.082,34,1.726,60,1.612,84,1.304,161,2.028,187,3.393,188,3.397,227,1.753,231,1.683,235,1.932,284,3.393,312,1.511,434,1.617,456,4.099,458,5.69,538,8.19,539,6.404,540,5.72,587,5.443,588,3.393,635,2.729,912,3.176,1008,5.45,1052,5.976,1063,3.141,1604,2.855,1804,8.74,2126,3.918,2439,3.001,2531,7.593,2576,4.169,3071,4.76,3081,5.624,3083,4.76,3084,4.417,3107,6.085,3108,4.631,3109,6.085]],["t/3730",[0,1.622,14,3.136,22,2.283,27,0.713,32,3.938,33,2.841,49,5.313,78,4.051,96,3.875,97,2.158,108,4.5,121,1.352,209,3.896,323,3.683,436,3.896,632,4.885,633,4.843,775,6.059,913,4.372,1244,6.795,1403,5.446,1504,6.449,2157,6.795]],["t/3732",[9,1.176,14,1.859,16,1.771,27,0.584,70,2.735,102,2.724,105,2.541,115,5.411,122,2.67,133,2.41,148,1.333,151,4.001,176,4.299,213,3.241,225,2.105,226,2.461,251,2.891,261,4.039,359,3.507,374,3.336,382,3.122,441,5.411,487,8.041,584,4.803,632,5.596,643,3.769,665,6.974,674,3.711,709,5.95,725,3.711,731,4.715,796,4.96,805,1.962,1233,3.484,1403,4.457,1562,3.862,1777,6.216,1931,5.161,1999,4.349,2307,5.562,2346,8.399,2347,6.216,2352,6.571,3110,6.216,3111,7.111,3112,5.739,3113,7.111,3114,7.111,3115,7.111]],["t/3734",[0,1.488,14,2.628,16,2.502,26,1.328,33,3.107,84,2.412,99,2.02,105,3.591,108,3.939,121,1.564,159,4.449,161,2.534,188,2.577,207,1.988,218,4.707,228,4.545,397,3.546,436,3.41,482,3.178,553,3.038,632,3.391,654,5.786,662,3.208,679,4.449,725,3.968,913,3.827,1293,4.404,1314,5.209,1382,6.363,1403,4.766,1887,7.294,2060,6.363,2134,6.363,2928,5.948,2929,7.027,2930,6.647,3116,7.027]],["t/3736",[0,0.568,1,1.661,2,2.357,14,1.981,22,1.442,23,1.95,27,0.922,28,1.7,37,1.798,60,2.977,80,2.266,85,1.641,96,1.709,97,0.952,99,1.018,107,1.081,108,1.985,121,1.343,124,3.519,157,1.543,162,4.314,178,1.625,186,1.857,188,3.808,208,3.92,233,2.402,235,1.217,254,2.467,262,3.536,269,1.524,275,2.217,282,2.541,303,4.66,323,2.582,359,1.89,373,2.317,396,0.825,406,1.287,407,3.086,409,6.019,436,2.73,481,5.365,570,0.989,578,2.782,601,2.706,631,2.582,632,2.716,633,2.137,662,2.569,679,2.242,694,4.263,695,6.454,697,3.817,707,1.691,735,2.857,1134,2.291,1144,2.673,1233,1.878,1236,2.782,1375,5.096,1381,4.388,1395,6.114,1396,3.35,1397,2.467,1579,3.207,1999,2.344,2000,2.782,2647,3.093,2916,2.673,2932,3.35,2933,3.35,2934,3.542,2935,3.542,2936,3.542,2937,3.542,2938,3.542,2939,3.542,2940,3.542,2941,3.542,3117,3.832,3118,3.832,3119,3.832,3120,3.832,3121,3.35]],["t/3738",[0,1.189,2,2.009,3,1.635,9,0.91,14,2.477,16,1.999,22,1.528,27,0.452,32,2.496,39,2.733,53,2.417,64,2.771,84,1.18,86,1.823,102,2.109,105,3.386,107,1.553,111,2.469,120,1.298,121,1.249,122,2.067,124,2.817,133,1.866,137,2.852,157,1.121,161,1.835,171,2.043,178,2.334,207,1.44,225,2.377,233,3.451,258,3.098,262,2.067,271,2.28,275,2.923,283,2.646,303,3.249,357,3.127,382,3.524,436,2.469,462,1.378,632,5.154,679,3.221,717,3.291,785,3.596,897,3.016,1206,3.408,1313,5.599,1359,3.451,1380,8.144,1381,3.189,1385,4.443,1398,4.607,1400,4.189,1401,4.812,1402,5.088,1403,7.244,1404,5.599,1405,4.306,1406,4.306,1407,5.088,1409,4.607,1410,4.812,1411,4.812,1414,5.088,1415,4.087,1416,5.088,1417,5.088,1418,5.088,1419,3.709,1508,3.84,3122,4.607,3123,5.505,3124,5.505]],["t/3740",[4,6.437,20,4.379,22,1.468,27,0.633,53,3.385,60,2.043,83,3.439,104,2.495,121,1.578,124,2.706,148,1.445,188,3.438,262,2.895,263,5.604,481,3.936,601,2.418,656,6.208,662,3.253,675,4.964,694,6.376,695,8.053,696,5.112,697,7.104,725,4.024,1375,8.487,1415,5.724,1437,5.867,1579,6.452,1687,4.897,3125,6.74]],["t/3742",[1,2.025,2,2.633,10,2.91,14,2.751,406,2.223,407,5.332,2916,7.337,2933,9.196]],["t/3744",[1,2.006,2,2.608,10,2.883,27,0.855,406,2.202,482,4.355,789,5.208,805,2.875,913,5.244]],["t/3746",[0,1.678,1,2.181,2,2.538,3,3.012,4,5.76,5,10.075,6,5.14,7,3.729,8,5.194,9,1.275,10,3.135,11,4.055,12,3.936,13,6.031,14,2.963,15,5.597,16,1.92,17,6.031,18,4.559,19,7.453,20,4.379,21,3.368,22,1.468,23,1.306,24,5.997,25,4.661,26,1.347]],["t/3748",[0,1.151,1,1.496,2,1.945,6,2.67,9,0.871,10,2.555,14,2.975,16,1.312,23,1.727,27,0.966,51,3.391,59,2.166,84,1.129,86,1.744,89,3.263,91,1.96,97,2.293,99,1.399,115,4.008,121,1.21,150,3.492,159,3.082,166,1.578,176,3.184,178,2.233,184,1.883,213,4.956,215,1.817,225,1.56,235,1.672,236,3.115,239,2.212,254,5.003,255,4.333,259,0.936,262,1.978,270,2.799,282,3.492,285,1.918,403,3.184,406,1.113,462,1.318,478,2.689,662,2.223,665,3.823,701,3.674,789,2.633,805,1.453,807,1.498,808,1.494,815,2.18,913,4.648,1052,2.633,1299,3.609,1427,3.261,1504,3.91,1842,4.008,1999,3.222,2134,4.408,2286,4.868,2700,3.91,2707,4.008,2916,3.674,3110,4.604,3126,4.868,3127,5.267,3128,5.267,3129,4.868,3130,6.793,3131,5.267,3132,5.267,3133,5.267]],["t/3750",[1,1.646,2,2.14,10,2.366,23,1.837,27,0.702,59,2.006,86,2.831,91,2.157,97,2.124,121,1.688,125,4.798,186,2.608,259,1.52,270,2.791,333,3.965,373,5.17,478,4.365,805,2.359,807,2.432,808,2.426,815,2.399,1135,5.057,1996,6.508,1997,7.156,2518,5.761,2916,5.965,3134,7.903]],["t/3752",[22,1.478,23,1.726,59,1.822,91,1.958,97,1.929,107,2.19,121,1.586,157,2.316,166,3.407,171,2.882,204,5.488,259,1.38,270,2.623,285,2.827,333,3.6,385,3.687,470,4.329,478,3.964,570,2.004,704,5.231,805,2.142,807,2.209,808,2.202,815,2.178,1035,3.52,1038,3.908,1419,5.231,1982,4.807,2362,6.788,2700,5.764,2886,7.176,2916,5.416,2921,7.176,3036,6.267,3135,6.498,3136,8.906]],["t/3754",[3,1.142,8,5.116,9,1.01,16,1.52,23,1.783,27,0.824,29,3.208,60,2.291,64,1.936,65,4.081,67,2.007,73,3.008,83,1.715,84,1.308,99,1.622,121,1.182,123,0.726,124,1.35,160,3.095,161,3.64,162,3.796,163,3.234,181,1.221,187,3.404,223,4.293,231,2.392,253,4.967,275,2.223,285,1.4,319,1.763,344,2.227,374,3.562,437,2.205,473,4.776,482,3.614,492,2.381,538,4.183,553,4.204,570,2.818,571,1.485,587,2.089,631,2.589,841,4.815,974,1.884,1204,2.442,1294,4.183,1388,2.992,1397,3.931,1427,2.381,1508,4.259,1546,4.533,1593,2.325,1604,1.804,1615,3.008,1626,4.183,1636,4.125,1687,2.442,1774,3.104,1779,4.646,1793,2.682,1986,6.128,2072,5.637,2090,5.11,2914,3.104,2916,2.682,2953,7.991,2955,3.218,2956,3.554,2957,3.554,3137,3.846,3138,3.846,3139,3.846,3140,3.846,3141,3.846,3142,6.106,3143,9.432,3144,3.846,3145,6.106,3146,3.846,3147,3.846,3148,3.846,3149,3.846,3150,3.846,3151,3.846,3152,3.846]],["t/3756",[0,0.475,2,0.802,4,2.993,12,1.636,16,1.312,22,1.858,23,1.654,27,0.893,28,5.643,29,4.297,30,2.56,31,2.978,32,3.042,33,2.645,34,2.437,35,3.825,36,2.38,37,1.504,38,1.787,39,2.617,40,2.802,41,2.327,42,2.587,43,3.61,44,2.064,45,2.802,46,1.061,47,2.682,48,2.802,49,3.223,50,2.439,51,2.064,52,2.327,53,1.407,54,1.96,55,2.682,56,2.036,57,2.327,58,2.196,59,0.752,60,2.276,61,1.804,62,4.209,63,2.507,64,3.378,65,4.359,66,2.507,67,3.503,68,2.682,69,3.709,70,1.233,71,2.327,72,2.507,73,4.122,74,3.912,75,1.4,76,2.439,77,2.587,84,1.666,86,1.061,99,1.4,133,1.087,157,1.073,163,1.199,171,2.885,197,2.256,207,0.838,228,1.916,229,1.292,233,3.304,235,1.018,248,4.012,257,1.359,258,1.804,265,2.327,266,2.439,323,1.359,335,1.648,357,1.821,447,1.771,481,1.636,482,2.203,530,1.984,549,2.82,570,0.827,601,1.005,656,1.756,658,3.615,662,2.224,666,1.461,668,1.495,707,1.415,897,1.756,977,2.507,1008,1.602,1033,1.727,1201,1.727,1204,4.262,1206,1.984,1381,3.052,1415,2.38,1459,1.856,1532,2.196,1563,2.38,1999,5.649,2259,2.125,2641,2.682,2700,2.38,3153,2.682,3154,3.205,3155,2.962,3156,2.327,3157,3.205]],["t/3758",[16,1.586,22,1.955,23,2.292,27,0.843,28,3.952,60,1.687,84,1.365,90,2.31,107,1.796,161,3.424,162,3.183,181,2.022,208,6.613,275,2.319,285,2.319,410,5.817,420,2.637,515,5.567,534,5.329,553,4.444,564,4.846,573,2.589,783,4.1,796,6.212,840,3.519,909,2.856,982,5.139,1204,4.044,1293,3.688,1397,5.734,1466,5.567,1658,5.885,1742,5.139,1999,3.895,2072,4.727,3158,7.453,3159,6.368,3160,5.329,3161,5.885,3162,6.368,3163,6.368,3164,6.368,3165,5.567,3166,5.885,3167,6.368,3168,6.368,3169,6.368]],["t/3760",[14,2.9,16,2.006,22,1.809,23,2.201,26,0.966,28,4.63,60,2.135,64,2.785,65,2.611,70,2.128,108,2.866,110,3.276,161,3.478,184,3.396,275,2.015,282,5.342,312,1.374,382,2.429,410,3.614,433,3.237,449,2.747,553,4.624,572,5.262,573,2.25,588,3.085,624,7.798,631,2.346,796,5.619,814,3.307,840,3.057,904,2.866,912,4.205,1204,3.514,1241,4.016,1374,3.425,1388,2.711,1459,3.205,1593,3.345,1779,7.942,1887,4.016,2060,4.63,2928,6.302,3011,3.727,3158,7.951,3170,8.056,3171,5.113,3172,5.533,3173,5.533,3174,5.113,3175,5.533,3176,5.533,3177,5.533,3178,5.113]],["t/3762",[7,2.356,9,0.805,14,2.564,16,1.213,21,2.127,22,1.395,23,1.242,27,0.602,28,3.91,29,3.336,33,1.263,34,1.381,43,3.336,60,1.942,65,2.298,84,1.889,86,2.427,107,2.067,111,2.184,120,1.148,133,2.485,157,0.992,161,2.938,162,2.434,171,1.807,187,4.087,197,2.085,208,6.314,215,2.528,223,2.418,225,1.442,233,3.053,258,2.74,282,4.86,335,2.504,482,3.064,535,4.334,553,2.928,573,2.98,580,3.135,593,2.821,624,5.937,679,5.157,700,3.015,725,3.825,733,2.891,738,3.281,795,3.397,826,3.281,880,2.127,889,3.535,894,2.581,904,2.523,1013,5.733,1160,5.006,1344,4.257,1381,2.821,1415,3.615,1503,4.5,1508,3.397,1532,3.336,1546,3.615,1563,3.615,1601,2.542,1649,6.774,1687,3.093,1779,5.578,1845,3.229,1999,6.432,2652,3.336,3158,4.075,3165,4.257,3166,4.5,3178,4.5,3179,8.814,3180,4.87,3181,4.87,3182,4.87,3183,6.774,3184,4.87,3185,4.87,3186,4.87]],["t/3764",[2,1.458,9,0.964,14,1.524,16,1.451,22,2.31,23,2.275,26,1.461,27,0.929,28,4.34,29,2.845,63,4.558,72,4.558,77,4.702,78,3.9,86,1.929,108,5.864,123,1.099,148,2.003,161,2.788,208,6.299,303,2.359,393,2.318,436,2.613,481,2.974,553,3.908,605,3.992,611,5.094,696,3.863,796,8.218,880,2.545,1014,5.056,1063,2.122,1237,5.385,1245,6.071,1398,4.876,1581,4.876,2150,1.816,2916,4.064,2928,4.558,3158,4.876,3187,5.827,3188,5.385,3189,5.827,3190,5.827]],["t/3766",[22,2.183,26,1.634,33,2.975,123,1.765,202,4.613,225,2.77,235,3.64,283,4.496,303,3.786,632,4.172,784,7.317,785,6.109,786,5.721,868,4.613,895,5.591,1409,7.827,2966,8.644,3191,9.354]],["t/3768",[14,2.578,22,2.253,33,2.558,99,2.619,208,6.347,235,3.13,633,5.496,696,6.536,784,7.711,785,6.439,786,6.029,2967,9.11,3192,9.858,3193,9.858]],["t/3770",[14,2.524,16,2.403,22,2.078,26,1.685,27,0.896,29,2.434,34,2.03,46,2.37,78,3.338,81,2.346,85,3.064,86,2.37,106,4.324,108,3.707,121,2,123,1.35,146,4.608,161,2.385,163,2.677,171,4.052,174,3.682,189,2.385,220,5.598,227,1.454,242,2.776,243,3.358,257,4.092,400,2.272,527,3.263,560,4.145,573,2.91,601,3.026,725,3.735,783,4.608,793,4.232,879,3.398,1224,4.546]],["t/3772",[14,2.425,16,2.309,29,3.155,34,2.631,99,2.464,121,1.923,171,3.442,207,2.425,227,1.885,434,2.464,560,5.372,631,3.932,917,6.352,1039,5.814,1397,5.971,1508,6.469,1779,7.058,3194,9.275]],["t/3774",[9,1.351,14,2.136,22,2.005,26,1.839,28,3.625,60,2.165,99,2.798,108,4.232,121,1.272,123,1.541,148,1.531,164,4.78,171,3.032,207,2.136,275,4.482,396,1.759,422,6.39,436,4.722,535,4.831,573,4.282,679,4.78,865,6.217,1546,6.065,2767,6.593,2928,6.39,3000,7.55,3195,8.17,3196,8.17,3197,7.142,3198,8.17]],["t/3776",[0,1.126,9,1.257,22,1.447,23,1.288,26,1.328,27,0.624,34,2.157,60,2.015,99,2.02,108,3.939,121,1.564,171,3.729,174,2.901,181,2.414,197,3.255,211,4.65,217,4.65,235,2.414,275,2.768,436,3.41,632,3.391,658,4.096,679,4.449,687,4.545,726,6.136,733,2.999,754,5.519,896,3.725,1403,4.766,2004,7.027,2126,4.895,2680,6.136,3197,8.784,3199,7.604,3200,7.604,3201,7.604,3202,7.604,3203,7.604,3204,7.604,3205,7.604,3206,7.604,3207,7.604,3208,7.027,3209,7.604,3210,7.604]],["t/3778",[16,2.113,26,1.482,148,1.59,152,5.389,163,4.035,169,3.291,176,5.13,275,3.09,406,1.793,653,7.418,662,3.58,695,5.463,719,4.571,735,5.062,1004,6.457,1064,6.033,1141,6.457,1459,6.249,2304,5.389,3197,7.418,3211,7.418,3212,8.486,3213,7.418,3214,9.432,3215,7.842,3216,7.842,3217,7.418,3218,7.418,3219,8.486]],["t/3780",[3,2.804,6,3.513,22,1.319,25,4.19,26,2.014,27,0.569,60,2.846,106,3.74,121,1.938,140,4.72,169,2.688,171,3.986,174,3.603,202,3.418,207,1.812,257,2.939,285,3.438,364,5.145,367,6.059,462,2.363,474,4.527,532,3.617,544,4.143,576,5.8,581,4.928,793,4.098,846,6.059,868,5.297,879,5.1,896,3.396,904,3.59,1224,4.402,1590,5.422,1679,5.8,1683,4.928,2767,5.594,3208,6.405,3220,6.931,3221,6.931,3222,6.931]],["t/3782",[2,2.424,3,2.876,22,1.843,27,0.795,107,2.731,160,4.908,161,3.228,169,3.755,208,6.235,285,3.526,382,4.252,449,4.808,897,5.305,974,4.745,1687,7.438,2932,8.465]],["t/3784",[0,0.758,1,0.986,9,1.258,22,2.143,23,2.11,26,2.092,27,0.825,30,1.953,31,2.272,33,1.328,65,2.416,70,1.969,87,2.855,90,2.76,96,2.284,97,1.272,99,1.36,114,2.908,121,1.413,123,1.897,148,1.426,157,1.55,181,2.416,189,3.992,207,1.339,220,4.005,225,2.689,226,3.143,227,1.546,231,2.105,288,3.635,400,1.625,549,1.857,562,2.374,571,1.977,628,3.095,702,2.508,707,2.26,779,2.965,802,2.672,817,2.26,878,3.027,909,2.296,910,3.508,967,3.027,968,3.027,969,3.095,970,3.131,995,3.252,1008,3.804,1014,3.095,1016,3.571,1020,3.061,1021,4.132,1022,2.633,1024,2.829,1025,4.284,1026,2.508,1027,3.209,1028,3.716,1070,4.731,1206,3.169,1249,3.209,1338,3.571,1583,3.801,1976,3.801,2294,4.476,3051,3.801,3223,5.12]],["t/3786",[14,1.972,30,1.452,31,2.687,39,1.889,67,3.16,81,1.985,84,1.616,85,2.593,90,3.625,92,4.368,93,2.182,94,4.61,100,1.986,104,2.782,121,1.461,147,1.154,152,2.417,157,2.431,166,1.14,167,2.05,171,2.247,186,3.788,190,1.646,206,2.531,207,0.995,215,3.615,235,1.923,259,0.676,262,1.429,269,4.57,270,0.98,288,1.818,327,4.865,333,2.808,344,3.507,349,1.507,374,1.785,382,1.671,390,2.328,400,1.208,403,3.661,429,3.955,469,4.668,482,2.531,557,3.704,565,1.902,582,2.356,601,1.193,612,2.564,615,3.517,658,2.05,689,2.654,704,2.564,729,1.534,789,1.902,808,1.079,844,3.137,847,4.224,856,2.706,876,2.25,906,4.325,948,4.224,953,2.122,974,1.865,994,2.45,1032,3.543,1056,1.654,1098,2.977,1134,2.275,1234,1.943,1919,3.327,2126,2.45,2259,2.523,3224,6.724,3225,3.327,3226,5.549,3227,3.517,3228,3.806,3229,3.806,3230,3.517,3231,6.112,3232,3.327,3233,3.806,3234,3.806,3235,3.517,3236,3.517,3237,3.327,3238,2.204,3239,3.806]],["t/3788",[14,1.948,21,3.254,22,2.121,30,2.842,31,3.305,84,2.124,90,2.702,92,5.741,94,4.47,100,3.887,102,2.853,120,2.337,121,1.159,157,1.517,185,3.415,186,3.024,215,4.096,238,3.221,251,3.029,269,2.963,270,1.917,323,3.158,338,3.858,385,3.536,565,4.955,622,5.407,789,4.955,906,4.272,953,4.153,1098,5.826,1747,6.511,3224,7.754,3225,6.511,3240,6.884,3241,8.295,3242,6.011]],["t/3790",[3,2.621,27,0.724,30,3.368,31,3.916,94,4.438,121,1.374,152,5.606,215,4.657,269,4.4,285,4.028,326,4.607,798,7.865,844,4.572,1562,4.794,1892,6.407,3224,6.905,3243,8.827,3244,8.157]],["t/3792",[0,1.567,1,1.584,2,2.06,3,2.444,10,2.277,14,2.152,31,4.695,84,1.764,87,5.9,94,4.246,104,2.664,147,2.496,163,3.078,206,3.44,215,4.404,238,3.559,269,5.079,323,3.49,326,4.296,491,4.675,707,3.633,2972,5.974,3238,4.767,3245,5.954]],["t/3794",[3,1.557,10,1.45,14,2.408,22,0.998,23,0.888,67,2.736,81,1.719,83,3.454,84,1.123,85,2.244,90,2.809,94,4.714,120,1.236,121,1.829,122,1.968,141,3.794,143,3.006,147,1.589,150,3.476,157,1.068,161,1.747,186,3.82,202,2.585,215,4.381,235,1.664,238,2.267,245,2.638,259,0.932,269,3.08,271,2.171,326,2.736,327,2.552,374,3.633,382,2.302,400,1.664,471,4.387,530,3.245,565,2.62,579,3.424,593,3.036,623,3.727,707,2.314,1032,4.531,1065,4.1,1233,2.568,1234,2.676,1712,4.844,2972,3.805,3224,4.1,3226,6.416,3227,7.156,3231,3.727,3232,6.769,3238,5.333,3244,4.844,3245,2.95,3246,4.387,3247,5.242,3248,4.844,3249,5.242,3250,4.844,3251,4.844,3252,6.249,3253,5.893]],["t/3796",[0,1.385,27,0.768,33,2.975,34,3.252,60,3.038,84,2.004,121,2.012,147,2.836,181,3.64,223,4.644,236,5.531,344,5.418,560,6.641]],["t/3798",[0,1.714,26,2.215,27,0.661,33,3.176,34,3.802,107,3.264,110,3.273,121,1.905,123,1.519,227,1.636,251,3.273,257,4.422,259,1.854,275,3.798,473,6.297,492,4.983]],["t/3800",[0,1.276,26,1.505,27,0.707,34,3.561,91,2.174,107,2.431,121,2.016,123,1.626,181,3.986,188,2.922,359,4.251,427,6.559,465,6.128,662,3.637,748,5.043,879,4.092,880,3.765,1069,6.588,1155,5.271,1388,4.223]],["t/3802",[0,1.598,26,1.482,27,0.886,34,3.06,60,3.308,99,2.254,107,2.393,110,3.45,121,1.943,123,1.601,181,3.426,188,2.876,339,3.989,507,3.482,662,3.58,720,4.463,748,4.965,867,5.073,1069,6.523,1155,5.19,1388,4.158]],["t/3804",[0,1.481,9,1.249,16,1.88,26,2.229,27,0.62,33,3.312,34,3.864,107,2.13,110,4.067,121,1.934,123,1.425,153,4.101,162,3.775,164,4.418,225,2.236,227,1.535,257,4.241,492,6.192,3254,10.003,3255,7.551]],["t/3806",[0,1.064,1,0.913,2,1.187,3,1.409,6,2.404,9,0.784,22,0.903,27,0.59,30,1.81,33,1.231,34,2.46,46,1.571,60,1.904,64,2.387,89,1.992,91,1.196,102,1.817,106,1.879,107,1.338,121,1.822,122,1.781,123,1.826,181,2.754,207,1.24,227,1.763,236,2.805,238,4.496,239,4.595,241,2.645,243,3.371,251,1.929,286,2.669,288,2.266,396,1.547,434,1.26,462,2.171,490,2.239,660,1.946,662,2.002,733,4.818,734,4.87,744,5.785,745,6.167,760,2.747,836,3.145,879,5.69,880,5.113,885,3.195,887,5.024,896,3.521,1036,2.439,1155,2.901,1193,3.521,1673,3.71,1767,3.443,2710,4.923,3256,4.744,3257,4.384,3258,3.195,3259,4.744,3260,7.186,3261,4.744,3262,4.744,3263,4.744,3264,4.744,3265,4.384]],["t/3808",[0,1.283,7,2.96,9,1.012,22,1.649,27,1.011,33,2.247,60,1.621,86,2.867,102,3.317,103,3.218,106,3.43,114,3.476,120,2.577,121,0.952,124,3.528,148,1.147,163,2.289,169,2.373,188,2.074,209,2.744,216,2.499,225,1.812,226,2.118,227,2.221,229,2.466,230,4.442,231,1.693,232,2.854,235,2.75,237,3.352,318,6.077,486,5.655,495,3.544,545,3.94,553,2.445,660,4.124,797,4.938,836,6.665,868,3.018,879,4.773,880,4.391,896,2.998,1357,2.871,1495,3.699,1672,8.412,1954,5.656,3266,6.119,3267,6.119,3268,5.655]],["t/3810",[16,1.92,22,1.93,27,0.633,33,2.94,84,2.846,85,3.301,105,2.756,111,4.548,121,1.2,148,1.445,168,3.351,181,2.448,184,2.756,185,5.519,190,3.334,207,2.016,212,3.301,219,5.556,224,4.379,227,1.567,263,4.261,297,3.351,385,3.661,393,4.034,415,5.282,462,1.93,474,5.036,3238,4.466,3269,7.125,3270,6.222]],["t/3812",[0,0.993,27,0.55,29,1.473,51,2.789,56,2.751,80,3.964,82,2.589,84,2.757,89,1.819,120,1.021,122,1.626,141,4.017,148,1.537,157,1.67,158,2.681,166,2.456,185,5.944,194,2.535,199,3.737,216,1.769,227,1.876,231,1.198,262,3.079,269,1.723,303,1.753,348,2.918,356,2.913,365,2.872,385,2.057,390,2.649,396,0.933,419,2.589,423,2.535,434,1.151,493,2.918,565,2.165,570,1.73,579,2.829,593,2.509,612,2.918,630,3.498,666,4.207,668,2.02,674,4.279,684,3.447,687,2.589,691,2.46,704,2.918,798,3.08,841,5.388,842,4.675,844,2.244,904,2.244,1008,2.165,1033,2.333,1072,3.296,1108,2.649,1144,3.021,1152,2.715,1234,2.211,1440,3.296,1700,3.144,1719,3.216,1808,3.216,1909,4.417,2303,5.243,2536,2.649,3026,3.021,3238,7.032,3270,3.496,3271,4.003,3272,4.332,3273,3.786,3274,3.786,3275,3.786,3276,4.003,3277,4.332,3278,4.332,3279,3.496,3280,3.388,3281,4.332]],["t/3814",[27,0.725,33,1.633,79,5.538,84,2.796,85,3.783,111,2.823,148,1.18,185,5.69,199,3.51,231,2.824,242,2.441,246,4.924,253,2.971,284,5.691,333,2.919,379,4.053,392,1.659,396,1.355,414,4.312,415,4.312,495,3.646,542,4.475,562,2.919,658,3.391,673,3.391,841,3.213,1008,5.102,1045,5.08,1049,4.924,1086,5.268,1152,3.946,1187,4.673,1587,3.998,1592,5.268,1750,5.503,2303,4.924,3046,5.503,3238,3.646,3270,9.408,3282,5.817,3283,6.295,3284,6.295,3285,5.817,3286,4.312,3287,5.817,3288,5.817,3289,6.295,3290,5.503,3291,6.295,3292,5.817]],["t/3816",[0,1.219,21,5.578,84,2.939,171,3.055,185,5.361,201,6.257,337,6.257,445,4.92,844,6.058,856,5.852,890,5.457,1008,5.289,1223,7.53,3293,10.582]],["t/3819",[16,1.443,84,2.597,123,1.84,133,1.965,171,4.192,185,4.889,199,3.232,257,4.79,297,2.519,313,2.229,351,3.971,384,5.811,396,1.248,400,1.84,482,3.482,549,4.396,562,2.687,570,1.496,592,6.724,719,3.122,731,7.071,841,5.444,842,6.803,1108,5.966,1132,7.184,1201,6.99,1234,5.444,1235,8.342,1700,4.207,1886,6.685,3026,5.811,3294,4.678]],["t/3821",[22,1.853,26,1.266,27,0.799,84,2.626,89,3.045,120,1.709,123,1.837,165,4.335,185,5.785,189,2.417,231,3.041,248,5.82,313,2.789,549,3.532,556,4.243,570,2.513,571,3.76,841,4.97,1042,3.702,1108,4.435,1201,6.797,1206,4.489,1227,6.339,1233,3.553,1234,3.702,1235,9.587,3295,5.264]],["t/3823",[2,1.361,3,2.047,16,0.83,21,2.376,26,0.95,27,0.447,29,1.85,60,0.883,80,1.97,84,2.789,120,1.282,123,2.128,140,1.665,148,0.624,165,1.992,166,2.384,184,2.464,185,6.111,199,4.437,200,1.42,206,1.393,207,0.871,227,2.7,253,1.572,257,1.413,263,1.841,297,1.448,423,3.183,445,1.992,462,2.484,549,1.973,601,2.162,660,1.367,666,2.48,668,4.09,674,1.739,684,2.797,840,4.397,841,6.149,842,4.808,864,4.39,1108,2.038,1201,4.286,1220,2.038,1223,2.145,1235,4.255,1326,2.606,1440,4.14,1495,2.014,1886,4.321,1909,5.068,2303,5.393,2417,5.428,3238,4.609,3279,2.689,3296,2.788,3297,3.332,3298,2.913,3299,2.913,3300,4.255,3301,2.913,3302,6.673]],["t/3825",[0,1.276,1,1.659,2,2.157,3,3.236,6,4.368,16,2.146,27,0.894,84,2.775,89,3.619,123,1.626,147,2.613,184,3.08,285,3.138,297,3.746,434,2.29,438,6.256,452,4.943,1063,4.715,1293,4.992,3303,8.794]],["t/3827",[6,4.141,27,0.864,84,2.73,124,2.868,168,3.551,169,3.168,184,3.764,235,2.594,257,3.464,259,1.452,418,4.141,434,2.17,550,4.555,562,3.788,570,2.109,601,2.562,717,4.884,1014,4.939,1024,4.515,1208,6.688,1230,6.065,1231,5.808,1234,4.17,1700,7.644,1800,5.504,1801,5.698,3153,6.837,3304,7.55,3305,7.55,3306,7.142]],["t/3829",[3,2.212,27,0.814,34,2.812,60,2.626,84,2.725,123,1.87,124,3.91,169,2.889,184,2.662,235,2.365,312,1.85,418,3.775,434,2.633,482,3.113,549,2.702,601,3.108,729,3.995,1199,5.018,1208,6.295,1230,5.53,1231,5.296,1234,3.802,1324,5.53,1700,5.407,1802,3.143,2285,5.296,2647,6.011,3153,6.233,3306,6.511,3307,8.665,3308,6.884,3309,6.511,3310,5.826,3311,6.511,3312,6.011]],["t/3831",[22,1.227,23,1.092,27,0.529,51,2.653,60,1.708,84,2.61,104,2.57,123,1.951,147,1.249,157,1.313,169,1.598,184,1.473,199,3.594,235,1.308,338,2.134,418,2.088,434,2.59,443,2.386,482,1.722,497,3.135,532,2.15,549,4.347,550,5.009,556,2.411,592,3.325,630,2.15,668,3.704,671,2.277,689,2.874,704,2.776,778,4.025,789,2.059,826,2.776,1053,3.059,1201,4.278,1202,5.633,1203,6.036,1208,4.094,1212,3.325,1230,4.786,1231,2.929,1233,5.48,1234,6.652,1325,2.776,1459,2.386,1659,3.602,1688,2.617,1700,2.991,1886,6.774,2101,4.906,2259,2.732,3013,3.808,3294,7.869,3306,3.602,3309,3.602,3310,3.223,3313,5.958,3314,4.12,3315,6.447,3316,7.518,3317,7.518,3318,2.823,3319,4.12,3320,4.12,3321,4.12]],["t/3833",[9,0.92,20,4.593,22,1.814,30,3.635,37,4.47,39,4.015,70,2.139,84,2.042,85,2.381,92,3.221,94,2.231,104,2.617,120,1.311,122,2.088,124,2.838,157,1.647,184,1.988,190,3.497,202,2.743,215,1.918,216,3.303,235,2.567,242,2.157,251,2.261,257,2.358,259,2.127,269,2.212,290,4.036,342,5.139,344,4.683,359,2.743,374,2.609,447,3.073,474,3.632,557,3.401,625,4.55,630,2.902,636,7.974,663,3.362,667,5.281,673,2.995,699,3.746,700,3.442,705,4.036,707,2.454,724,4.488,729,2.241,933,6.767,959,5.139,979,4.488,1033,2.995,1208,3.532,1231,3.954,1338,3.879,2282,4.861,3028,4.654,3238,4.683,3245,3.129,3322,5.139,3323,8.509,3324,4.488,3325,5.139,3326,5.561,3327,5.561,3328,5.561,3329,5.139]],["t/3835",[7,5.605,27,0.951,69,5.258,84,2.039,292,4.362,462,2.381,549,3.452,725,4.966,1199,6.41,1202,4.662,1233,4.662,1234,4.858,1325,6.41,3323,8.238,3330,9.516,3331,7.963]],["t/3837",[22,1.555,41,5.93,42,6.593,46,2.705,92,6.099,94,3.278,169,3.168,179,6.217,186,3.212,197,3.498,242,3.168,324,5.121,349,3.236,357,4.64,374,3.833,429,5.336,464,5.698,865,6.217,893,5.417,906,6.039,1032,4.78,1168,5.808,1381,4.732,1742,6.593,1816,7.55,3225,7.142,3231,8.285,3232,7.142,3332,8.17,3333,7.55,3334,8.014,3335,8.17]],["t/3839",[7,4.326,19,3.965,21,2.798,22,1.702,23,1.085,38,3.571,53,2.812,90,3.244,94,2.57,107,1.807,111,2.872,120,1.51,121,0.997,131,3.246,136,5.36,143,3.673,157,2.272,158,3.965,167,3.45,178,3.792,186,2.728,206,2.677,212,3.829,262,2.405,292,2.936,296,5.36,327,3.118,333,2.97,349,2.537,379,4.124,449,3.18,587,4.857,702,3.138,803,3.787,1008,3.202,1009,5.169,1012,5.599,1131,7.649,1299,4.388,1419,4.315,1459,3.71,1931,4.649,1982,3.965,2349,5.919,2641,5.36,3042,4.315,3231,8.868,3336,6.405,3337,7.479,3338,6.405,3339,6.405,3340,5.919,3341,6.405,3342,5.919,3343,5.919]],["t/3841",[16,1.85,30,1.891,38,2.764,59,1.163,90,1.798,104,3.202,131,2.513,133,1.681,147,3,156,3.599,157,1.815,167,4.002,186,2.266,218,3.069,222,3.458,235,1.574,245,2.495,271,2.053,327,2.413,333,2.299,419,2.964,428,5.109,466,4.582,544,2.964,570,1.28,572,5.819,585,3.878,616,3.149,620,4.149,658,2.671,660,2.034,774,3.525,785,3.238,842,3.458,895,2.964,901,3.681,912,2.588,948,3.458,974,3.64,1032,6.75,1056,2.155,1093,3.069,1131,3.681,1399,3.773,1459,2.872,1556,3.192,1585,4.334,1767,3.599,2627,4.334,2689,4.149,2960,6.467,3042,5.005,3046,4.334,3226,2.932,3231,8.626,3235,4.582,3236,4.582,3253,3.773,3325,4.582,3337,7.182,3344,7.429,3345,4.958,3346,4.958,3347,8.65,3348,4.958,3349,4.334,3350,4.958,3351,4.334,3352,4.958,3353,7.429,3354,7.429,3355,4.958,3356,4.958,3357,4.958,3358,4.958,3359,4.958,3360,4.958,3361,4.958,3362,4.958,3363,4.582,3364,4.958,3365,4.958,3366,4.958]],["t/3843",[9,0.74,16,1.114,22,0.851,23,0.758,27,0.367,85,1.915,88,3.404,94,1.795,99,1.188,107,1.262,110,1.819,121,1.664,125,3.371,157,2.561,158,4.253,159,2.617,166,1.34,167,4.506,168,1.944,173,2.88,186,1.364,188,2.329,197,2.942,215,2.37,236,4.063,237,4.583,245,4.211,261,2.54,269,1.779,270,1.151,293,2.769,294,2.88,327,2.177,333,2.074,349,4.235,350,3.404,369,2.494,381,4.885,447,2.472,457,3.18,478,2.283,495,2.591,582,2.769,587,2.429,595,2.494,690,2.921,702,2.191,707,1.974,876,2.645,897,2.45,949,3.064,954,2.704,994,2.88,1093,2.769,1126,4.629,1214,8.854,1243,3.61,1310,5.545,1688,2.841,1752,3.743,2343,3.61,2960,3.247,3226,2.645,3231,4.885,3238,2.591,3241,3.743,3245,4.707,3337,4.987,3342,4.133,3367,4.133,3368,7.731,3369,4.473,3370,4.473,3371,4.133,3372,5.75,3373,4.473,3374,6.006,3375,4.473,3376,4.473,3377,4.473,3378,4.473,3379,6.871,3380,4.473,3381,4.473,3382,4.473,3383,4.473,3384,4.473,3385,4.473,3386,8.366,3387,4.473,3388,4.473,3389,4.473,3390,4.473,3391,4.473,3392,4.473,3393,4.473]],["t/3845",[0,1.601,22,1.336,83,3.131,85,3.005,86,2.324,94,4.863,110,2.854,121,1.093,125,2.829,128,4.293,137,4.934,157,2.469,182,3.439,186,2.905,215,3.285,263,3.879,269,3.789,333,3.255,349,2.78,365,6.316,495,4.066,581,6.772,724,5.665,789,3.509,1032,4.107,1214,8.327,1330,4.991,1331,6.487,1381,4.066,1423,3.813,1717,5.342,1825,4.809,3231,6.772,3238,7.02,3337,5.095,3374,6.136,3394,7.02,3395,6.487]],["t/3847",[30,4.897,32,4.593,94,4.065,157,2.064,419,6.056,1098,7.925,2707,7.709,3231,7.203,3334,7.709,3396,9.362]],["t/3849",[0,1.513,16,1.318,20,3.006,27,0.64,33,2.023,83,2.361,84,2.912,99,1.406,104,1.713,105,1.892,112,3.842,121,0.824,129,3.097,131,2.683,140,5.445,157,2.557,175,4.14,185,4.684,186,3.476,196,2.544,197,3.965,219,4.272,224,3.006,229,2.133,231,2.157,251,2.152,262,1.987,294,3.408,390,5.664,400,1.68,474,3.457,493,3.565,544,6.108,549,4.478,562,2.454,666,4.658,671,2.925,1399,4.028,1965,3.842,2151,7.473,2627,4.627,3160,4.429,3318,5.343]],["t/3851",[0,1.558,22,2.002,30,4.013,46,3.483,86,3.483,176,6.359,178,4.46,181,3.34]],["t/3853",[0,1.606,14,2.835,16,2.129,22,1.628,27,0.702,30,4.137,31,4.811,81,2.804,92,4.953,94,4.777,121,1.331,215,4.456,251,3.477,269,4.313,532,4.463,595,4.768,844,4.43,906,4.904,913,4.304,3245,6.101]],["t/3855",[0,1.573,9,1.757,94,4.262,215,3.663,631,5.245,3245,5.976]],["t/3858",[0,1.297,3,2.6,14,2.29,16,2.18,23,1.864,27,0.903,94,3.513,107,2.47,123,1.652,147,2.655,180,5.638,215,3.796,225,2.593,411,4.605,412,4.235,540,5.806,1056,3.806,1166,5.719,1173,6.663,1314,5.999,1363,5.124,1562,4.756,3397,7.067,3398,7.067,3399,7.54]],["t/3860",[1,1.444,14,2.604,26,1.739,27,0.817,30,2.861,34,3.171,43,5.138,60,1.987,67,3.914,94,3.995,110,4.049,121,1.167,133,2.542,147,3.389,186,3.781,215,3.855,251,3.049,262,2.816,549,2.72,560,5.767,573,3.049,595,5.552,840,4.144,904,3.885,906,4.301,917,3.856,1056,3.259,1234,3.828,1299,5.138,2652,5.138,3226,4.435,3400,5.567,3401,5.866]],["t/3862",[0,1.496,1,1.475,2,3.271,3,1.535,14,1.351,16,1.287,23,2.034,26,1.338,27,0.629,59,1.212,60,1.369,86,2.537,110,2.101,120,2.757,121,0.804,122,2.877,123,1.446,148,0.969,174,1.972,193,3.418,225,2.704,226,1.789,227,2.192,231,2.12,239,4.744,242,2.004,303,3.102,337,4.531,406,2.279,407,2.619,411,4.03,420,2.14,570,1.334,573,2.101,736,2.669,828,3.94,833,5.448,896,2.532,1100,3.327,1363,3.024,1562,6.352,3399,5.249,3402,5.994,3403,7.663,3404,7.663,3405,4.325]],["t/3864",[0,1.318,4,5.054,14,2.327,16,2.216,27,0.73,31,3.948,60,2.358,94,4.461,107,2.51,148,1.668,186,2.714,215,4.182,231,2.462,251,3.618,359,4.389,530,5.508,595,6.199,913,4.479,974,4.36,1234,4.542,2456,6.771,3245,6.256]],["t/3866",[0,0.992,10,0.884,14,1.375,23,1.453,24,5.072,75,4.029,86,3.054,94,2.687,107,1.483,121,0.818,125,4.581,137,1.655,157,0.651,168,1.389,186,0.975,188,1.782,197,1.368,206,2.197,215,2.958,216,1.305,219,1.751,231,0.884,245,4.317,251,3.487,271,4.217,297,1.389,303,3.734,366,2.087,491,1.815,544,5.127,573,1.299,595,3.734,646,5.602,718,2.058,719,1.722,904,1.655,906,1.833,985,6.558,1135,5.072,1189,2.058,1459,4.968,2186,3.296,2336,2.32,3108,2.432,3226,1.89,3242,6.922,3245,1.798,3252,2.579,3337,8.654,3406,9.317,3407,8.708,3408,2.674,3409,2.674,3410,3.196,3411,2.674,3412,2.674,3413,2.579,3414,2.674,3415,2.674,3416,2.674,3417,2.674,3418,2.674,3419,2.674,3420,2.674,3421,2.5,3422,4.4,3423,2.674,3424,2.674,3425,2.674,3426,2.674,3427,2.674,3428,7.178,3429,2.674,3430,4.4,3431,2.674,3432,2.674,3433,2.674,3434,2.674,3435,2.674,3436,2.674,3437,2.674,3438,4.4,3439,2.674,3440,2.579,3441,2.674,3442,2.674,3443,3.196,3444,2.674,3445,2.674,3446,6.709,3447,2.674,3448,2.674,3449,2.674,3450,2.674,3451,2.674,3452,2.674,3453,2.674,3454,2.674,3455,2.674,3456,2.674,3457,2.674,3458,2.674,3459,2.674,3460,2.674,3461,2.674,3462,2.674,3463,2.674,3464,2.674,3465,2.674,3466,2.674,3467,2.272,3468,2.19]],["t/3868",[11,4.718,27,0.736,30,3.423,60,2.377,67,4.682,90,3.254,107,2.53,133,3.041,137,4.647,157,1.827,186,3.712,196,4.312,233,5.624,262,3.369,327,4.367,382,3.939,616,5.698,906,6.408,1381,5.196,1423,4.873,3226,5.305,3400,6.66,3468,6.146]],["t/3870",[0,1.15,6,3.936,27,0.933,46,2.571,83,3.463,84,2.437,85,3.324,102,2.974,103,5.358,120,2.681,124,2.726,157,1.582,197,3.324,227,1.578,259,1.38,269,4.053,318,4.694,321,5.231,357,4.41,428,4.453,498,6.074,557,4.749,729,3.129,735,3.643,841,3.964,875,9.099,1335,5.416,1733,5.231,1736,4.183,3017,4.084,3469,7.176,3470,7.176,3471,7.176]],["t/3872",[0,1.784,14,1.484,16,1.413,20,3.224,27,0.466,64,2.857,84,2.692,85,2.43,110,2.308,113,4.581,120,1.338,152,3.605,157,1.963,162,2.837,170,3.033,177,9.377,202,4.048,203,3.707,206,2.372,216,2.318,269,5.139,293,3.514,374,2.663,428,4.707,480,4.44,580,3.655,596,5.245,599,4.12,613,4.214,690,3.707,798,4.036,875,8.133,897,6.597,1008,2.837,1587,3.605,1589,4.75,1719,6.093,1733,3.824,2289,9.425,2536,3.472,2694,6.854,3048,4.581,3469,5.245,3472,5.676,3473,5.245,3474,4.962,3475,4.75]],["t/3874",[0,1.615,12,1.956,16,1.886,27,0.622,29,2.577,58,2.625,60,2.656,81,1.256,84,2.562,85,1.641,103,2.015,113,4.914,114,2.177,120,1.435,124,1.345,137,1.985,140,1.916,147,1.846,157,2.221,162,3.044,178,1.625,186,1.169,196,3.642,197,1.641,206,1.602,207,1.002,227,0.779,229,1.544,236,3.601,259,1.082,262,1.439,269,3.014,286,2.156,293,2.372,296,3.207,321,4.102,333,1.777,349,1.518,361,2.673,362,3.207,415,2.625,423,2.242,463,7.544,498,2.998,523,1.492,535,2.266,592,6.114,593,3.527,594,7.842,601,2.952,673,2.064,692,2.266,729,2.454,746,2.541,779,3.527,841,1.956,875,5.499,876,2.266,895,2.291,1032,3.563,1079,3.207,1100,5.557,1293,2.22,1428,2.782,1434,2.137,1732,2.916,1736,4.081,1767,2.782,1804,2.725,2104,2.916,2289,9.291,2536,2.344,2694,6.695,2843,3.35,3017,4.539,3048,4.914,3153,3.207,3240,3.542,3312,3.093,3337,4.42,3471,3.542,3473,5.627,3476,7.576,3477,6.089,3478,3.832,3479,3.832,3480,3.832,3481,5.096,3482,3.35,3483,3.832,3484,3.832,3485,3.832,3486,3.832,3487,3.542,3488,3.832]],["t/3876",[0,1.242,14,1.529,16,0.907,19,2.254,23,0.617,27,0.601,83,3.266,84,2.207,85,3.589,89,1.529,94,1.461,103,1.915,121,0.567,124,1.278,151,4.121,157,1.87,166,1.751,171,2.169,179,2.771,197,1.559,198,2.049,204,1.962,215,2.526,262,2.75,263,2.012,269,4.394,271,1.508,285,1.326,286,2.049,321,2.453,348,2.453,349,4.24,352,4.243,374,1.708,382,1.599,385,1.729,390,3.575,395,2.03,400,1.156,469,2.254,478,1.859,613,2.703,656,1.995,674,1.901,675,3.764,691,3.32,692,2.153,706,2.589,718,2.345,731,2.414,735,3.436,875,7.475,899,2.201,912,1.901,971,2.771,980,2.703,1046,6.128,1056,1.583,1155,2.227,1231,2.589,1419,2.453,1440,2.771,1719,5.437,1733,6.184,1734,3.183,1756,3.365,1758,2.939,1998,2.201,2186,2.283,2278,3.365,2283,3.183,2289,2.939,2536,2.227,3028,3.047,3039,2.453,3047,3.183,3183,10.209,3238,2.109,3245,4.121,3246,6.128,3286,2.495,3312,6.765,3334,2.771,3487,3.365,3489,3.642,3490,3.642,3491,3.642,3492,3.183,3493,8.383,3494,5.402,3495,6.765,3496,3.642,3497,3.642,3498,5.846,3499,3.642,3500,3.642,3501,3.642,3502,3.642,3503,4.892,3504,7.328,3505,3.642,3506,5.846,3507,3.365,3508,3.642,3509,3.642,3510,3.642,3511,3.365,3512,3.642,3513,3.642,3514,3.642,3515,3.365,3516,3.642,3517,3.365]],["t/3880",[0,1.34,25,5.468,27,0.742,82,5.407,102,3.465,209,4.056,213,4.123,255,7.123,450,5.997,631,5.179,641,6.883,642,8.547,643,4.794,644,8.359,645,8.359,646,5.908,647,6.883,648,7.569,649,6.431]],["t/3882",[0,1.909,14,1.768,27,0.87,207,1.768,213,4.833,225,3.139,226,3.213,257,2.866,319,3.099,337,3.997,419,7.388,495,5.377,496,4.415,631,5.24,641,8.068,643,3.583,647,9.103,650,8.579,651,5.456,652,9.798,654,7.064,655,5.91,656,3.703,657,6.247,658,3.641,659,5.144,660,2.774,661,5.91,662,3.917,663,4.087]],["t/3885",[26,2.091,27,0.825,31,3.373,81,2.493,82,4.545,90,2.758,122,2.855,166,2.278,204,4.096,225,2.251,229,3.064,255,4.239,258,6.737,259,1.351,369,4.239,393,3.024,395,4.239,464,5.303,582,4.707,631,4.772,642,5.786,646,4.966,665,7.294,666,4.581,667,4.966,668,3.546,669,7.027,670,5.406,671,4.202,672,6.647,673,4.096,674,3.968,675,4.895,676,6.136,677,6.363,678,7.027,679,4.449]],["t/3887",[0,1.843,24,6.816,26,1.648,169,3.659,225,2.793,226,3.265,275,3.435,320,6.074,495,6.676,631,4,634,6.355,662,3.981,663,5.703,680,7.38,681,8.718,682,8.718]],["t/3889",[0,1.538,10,2.211,14,2.715,16,1.99,22,1.521,27,0.852,86,2.646,87,5.788,94,4.627,106,3.165,121,1.244,186,3.517,202,5.12,207,2.09,215,4.363,269,3.179,429,5.219,460,4.725,595,4.455,877,6.78,878,4.725,913,4.022,1008,3.994,3226,4.725,3245,5.841,3253,6.081]],["t/3891",[0,1.573,9,1.757,94,4.262,215,3.663,631,5.245,3245,5.976]],["t/3894",[0,1.297,3,2.6,14,2.29,16,2.18,23,1.864,27,0.903,94,3.513,107,2.47,123,1.652,147,2.655,180,5.638,215,3.796,225,2.593,411,4.605,412,4.235,540,5.806,1056,3.806,1166,5.719,1173,6.663,1314,5.999,1363,5.124,1562,4.756,3397,7.067,3398,7.067,3399,7.54]],["t/3896",[1,1.212,10,1.741,14,2.31,26,1.543,27,0.908,28,2.793,30,2.402,34,2.895,43,4.312,53,2.764,60,2.341,67,5.328,87,4.926,94,3.545,99,1.672,110,3.592,117,5.268,119,5.268,121,0.98,133,2.134,147,3.095,186,3.687,207,1.646,215,3.52,251,2.559,262,2.364,429,4.111,460,3.722,495,3.646,549,2.283,560,5.117,573,2.559,595,4.926,601,1.974,840,3.478,877,5.77,878,5.224,904,3.261,906,3.61,917,3.237,1056,2.736,1234,3.213,1299,4.312,1999,3.85,3226,3.722,3400,4.673,3401,4.924,3518,10.228,3519,5.817]],["t/3898",[0,1.163,2,3.23,14,1.397,16,1.331,23,2.305,26,1.372,27,0.439,59,1.254,110,2.173,120,1.852,123,1.482,148,1.002,174,2.039,193,4.579,225,2.326,226,1.85,227,2.086,239,4.311,242,2.073,406,2.416,411,4.898,420,2.213,570,1.379,573,2.173,736,2.713,823,4.266,828,5.278,834,4.924,877,3.491,878,3.16,1100,3.441,1363,3.127,1562,6.42,3399,6.38,3402,8.03,3405,6.573,3520,3.661,3521,4.472]],["t/3900",[0,1.318,4,5.054,14,2.327,16,2.216,27,0.73,60,2.358,87,4.961,94,4.461,107,2.51,148,1.668,186,2.714,215,4.182,231,2.462,251,3.618,359,4.389,530,5.508,595,6.199,913,4.479,974,4.36,1234,4.542,2456,6.771,3245,6.256]],["t/3902",[0,0.782,10,0.889,14,1.381,23,1.457,24,5.088,75,4.041,86,3.063,94,2.698,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,2.967,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,271,4.047,297,1.397,303,3.744,366,2.1,491,1.826,544,5.143,573,1.307,595,3.749,646,5.62,718,2.07,719,1.732,904,1.665,906,1.844,985,6.577,1135,5.088,1189,2.07,1459,4.983,2186,3.312,2336,2.333,3108,2.446,3226,1.901,3242,6.944,3245,1.809,3252,2.594,3337,8.667,3406,9.334,3407,8.725,3408,2.69,3409,2.69,3411,2.69,3412,2.69,3413,2.594,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,2.69,3419,2.69,3420,2.69,3421,2.515,3422,4.421,3423,2.69,3424,2.69,3425,2.69,3426,2.69,3427,2.69,3428,7.2,3429,2.69,3430,4.421,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,4.421,3439,2.69,3440,2.594,3441,2.69,3442,2.69,3444,2.69,3445,2.69,3446,6.73,3447,2.69,3448,2.69,3449,2.69,3450,2.69,3451,2.69,3452,2.69,3453,2.69,3454,2.69,3455,2.69,3456,2.69,3457,2.69,3458,2.69,3459,2.69,3460,2.69,3461,2.69,3462,2.69,3463,2.69,3464,2.69,3465,2.69,3466,2.69,3467,2.286,3468,2.202,3522,2.81,3523,2.81]],["t/3904",[11,4.605,27,0.719,30,3.341,60,2.32,67,4.57,87,4.882,90,3.176,107,2.47,133,2.968,137,4.536,157,1.784,186,3.672,196,4.209,233,5.489,262,3.288,327,4.263,382,3.845,616,5.561,878,6.508,906,6.312,1381,5.072,1423,4.756,3226,5.178,3400,6.501,3468,5.999]],["t/3906",[0,1.239,9,0.964,10,1.612,21,2.545,22,1.592,29,2.845,62,2.855,65,3.947,81,1.91,84,1.249,86,1.929,94,2.338,102,2.232,111,3.75,121,2.061,124,2.045,125,3.943,157,1.993,161,1.942,184,2.083,189,1.942,190,3.616,196,2.801,198,3.279,206,4.468,208,3.752,215,2.009,223,2.893,259,1.739,262,2.188,269,2.318,271,2.413,287,5.094,292,3.834,359,2.874,385,2.766,460,3.445,482,2.435,542,4.143,635,2.613,692,3.445,693,3.564,797,4.702,844,6.104,853,4.434,860,7.324,1045,4.702,1325,3.925,1736,3.139,1953,5.094,1998,3.522,2972,4.229,3026,4.064,3524,5.385,3525,5.827,3526,5.827]],["t/3908",[0,1.242,6,2.276,14,1.802,16,1.118,22,1.312,24,6.333,27,0.369,31,3.721,54,2.747,81,1.472,85,1.923,87,2.504,90,1.629,110,1.826,111,4.803,125,1.81,131,2.276,137,3.57,147,2.09,162,2.245,173,2.892,177,3.758,181,1.426,197,1.923,206,4.661,207,1.174,245,2.26,259,0.798,262,1.686,271,5.212,292,2.059,321,3.025,349,4.416,365,2.978,382,1.972,385,2.132,390,2.747,404,4.873,491,6.333,585,3.513,586,7.751,588,3.843,604,2.747,675,2.892,684,2.309,691,2.551,692,6.333,693,2.747,703,3.193,718,2.892,729,2.778,759,2.656,844,2.326,875,3.26,898,2.685,912,2.344,1088,2.978,1233,2.2,1327,3.418,1427,2.78,1440,6.382,1556,4.438,1736,2.419,1825,3.077,3017,2.362,3028,3.758,3039,4.643,3042,3.025,3374,3.926,3468,5.746,3504,8.223,3527,4.491,3528,4.15,3529,3.926,3530,4.491,3531,6.369,3532,4.491,3533,4.491]],["t/3910",[14,2.488,27,0.951,81,3.12,121,1.481,190,4.115,206,3.977,393,3.785,491,5.405,595,5.306,729,3.835,844,4.929,1736,6.73,3017,6.094,3018,7.064,3045,7.444]],["t/3912",[14,2.152,21,3.595,22,1.567,27,0.676,62,4.033,95,3.932,96,3.671,97,2.044,102,3.153,111,4.745,121,1.82,190,3.559,204,6.3,206,3.44,271,5.412,292,3.773,604,6.472,843,7.195,844,5.481,3039,7.878,3042,7.878]],["t/3914",[0,1.352,6,2.619,21,2.257,24,5.972,27,0.96,31,2.293,53,2.269,81,1.694,107,2.576,120,1.218,121,1.572,157,1.86,162,2.583,186,1.576,206,3.203,213,2.356,229,2.083,242,2.004,259,1.362,271,5.557,275,1.882,283,2.484,286,2.908,348,3.481,393,3.048,450,3.427,460,3.056,464,3.605,491,2.935,604,6.177,630,3.999,729,3.088,735,2.424,786,3.161,789,4.565,867,4.58,868,2.549,876,3.056,890,3.427,954,3.124,958,4.043,980,3.837,1076,4.171,1103,2.964,1720,4.518,1825,3.541,2336,3.751,3017,2.718,3022,5.585,3037,4.518,3039,8.409,3045,4.043,3372,4.325,3468,3.541,3534,5.081,3535,5.168,3536,5.168,3537,4.043]],["t/3916",[0,1.517,9,1.294,16,1.324,22,1.012,23,1.326,24,4.628,26,1.622,27,0.762,30,2.029,31,2.36,57,3.86,87,2.965,94,2.134,98,2.696,107,1.5,120,1.845,123,1.003,148,2.046,157,2.325,166,2.345,174,2.029,186,1.622,189,3.638,202,2.623,206,2.223,207,1.391,212,2.277,213,2.424,242,2.062,271,5.277,276,3.526,286,2.992,288,2.541,339,2.893,396,1.145,418,2.696,450,3.526,491,3.021,630,2.776,802,2.776,867,4.679,868,2.623,876,3.145,878,3.145,890,3.526,1076,4.292,1127,3.781,1131,3.948,1825,3.644,3039,5.272,3042,8.686,3318,3.644,3372,4.451,3537,4.16,3538,5.318,3539,5.318,3540,5.318,3541,5.318,3542,5.318,3543,3.709,3544,5.318]],["t/3918",[0,1.084,8,1.959,9,0.804,14,0.76,16,1.21,22,1.393,23,1.061,24,5.527,26,0.508,27,0.601,30,1.855,31,2.779,33,0.754,46,0.963,59,0.682,78,1.356,81,0.953,84,1.042,85,1.245,86,0.963,90,1.763,102,2.4,107,0.82,120,0.685,121,1.525,123,0.917,125,2.95,137,2.518,143,1.668,157,2.294,163,1.088,166,1.877,168,1.264,169,1.128,171,1.804,189,2.088,198,3.525,203,1.899,205,2.687,206,4.255,207,0.76,209,1.304,213,1.326,227,0.988,237,1.593,242,1.128,244,2.028,245,2.447,262,1.092,263,1.607,271,5.27,286,2.735,290,2.111,292,2.229,297,3.181,303,1.177,340,2.906,344,2.816,349,2.481,359,1.434,377,2.641,395,3.493,396,1.047,423,1.702,429,1.899,447,1.607,452,1.668,462,0.728,491,4.158,551,4.931,556,1.702,569,2.433,570,0.751,571,2.419,588,1.621,603,1.758,604,7.301,617,2.275,660,1.193,662,1.227,670,3.456,671,1.607,679,1.702,684,1.495,706,2.068,735,1.364,844,1.506,851,1.899,861,1.668,868,3.61,872,3.391,897,2.663,898,3.745,956,2.275,1008,2.43,1011,2.275,1033,1.566,1042,3.198,1049,2.275,1102,4.9,1121,2.347,1127,2.068,1135,1.72,1309,2.687,1310,2.347,1482,2.433,1578,2.347,1628,2.687,1688,1.847,1982,1.8,2178,2.433,2336,2.111,2680,2.347,2971,2.687,3251,4.493,3421,5.726,3468,1.992,3545,2.908,3546,2.908,3547,2.687,3548,2.908,3549,2.908,3550,2.908,3551,2.908,3552,2.908,3553,2.687,3554,2.687,3555,2.908,3556,2.908,3557,4.862,3558,4.862,3559,2.908,3560,2.687,3561,2.908]],["t/3920",[6,4.141,14,2.754,27,0.671,84,1.751,107,2.304,111,3.663,120,1.926,121,1.814,157,1.664,189,2.723,190,3.533,197,3.498,204,4.401,206,3.415,259,1.872,271,4.825,470,4.555,729,3.292,844,6.036,860,7.984,1325,5.504,1736,4.401,1982,5.057,3017,5.538,3020,6.837,3562,6.837,3563,8.17]],["t/3922",[0,1.876,30,2.804,54,4.495,58,5.035,86,3.253,89,4.125,94,4.44,148,1.377,171,2.727,212,3.146,215,4.59,257,3.116,269,4.402,271,4.582,449,3.649,630,3.835,792,4.8,834,4.607,980,5.456,1344,6.424,1587,4.667,1732,5.592,1776,8.587,3238,4.256,3467,5.225,3564,6.791,3565,9.824,3566,9.078,3567,7.349]],["t/3924",[632,4.928,633,6.16,634,7.443]],["t/3926",[0,1.672,7,4.412,27,0.927,38,6.294,78,4.254,212,3.905,213,5.146,254,5.872,262,3.425,628,5.514,631,3.867,632,4.068,633,5.085,634,6.144,635,4.09,636,7.632,637,5.717,638,7.36,639,7.973,640,6.248]],["t/3928",[0,1.46,27,0.809,30,3.761,31,4.374,81,3.232,86,3.264,87,5.496,107,2.781,121,1.842,181,3.13,225,3.505,226,3.412,227,2.003]],["t/3930",[0,1.653,631,4.732]],["t/3932",[21,4.856,22,2.116,27,0.73,86,3.681,89,3.737,123,1.679,157,2.265,213,4.056,227,1.808,259,2.257,275,4.415,420,3.685,759,5.262,786,7.416,798,6.327,799,8.223]],["t/3934",[0,1.612,9,1.176,22,1.354,26,2.126,27,0.789,31,3.155,38,3.965,78,3.316,86,2.354,87,3.965,91,1.793,99,1.889,107,2.006,121,1.107,123,2.053,148,2.184,189,4.275,227,1.445,231,1.967,243,4.508,251,2.891,288,4.59,396,1.531,404,3.683,496,4.644,601,2.229,781,6.583,800,4.96,801,5.161,802,3.711,803,4.205,877,4.644,878,4.205,1101,5.161,3055,5.739,3056,6.216,3057,6.216]],["t/3936",[0,1.773,6,3.854,22,2.142,27,0.983,30,2.901,31,3.373,78,3.546,81,2.493,107,2.834,111,3.41,123,1.435,190,3.288,206,3.178,259,1.786,271,5.156,292,3.486,348,5.122,393,3.997,396,2.163,604,4.65,671,4.202,679,4.449,689,5.303,729,4.05,1736,5.413,3017,3.999,3018,5.645,3027,5.122,3039,5.122,3534,5.041]],["t/3938",[0,0.788,1,1.507,2,3.227,3,1.579,14,1.391,16,1.949,23,1.573,26,0.929,27,0.437,28,2.36,32,2.411,39,2.64,49,3.253,86,2.591,107,1.5,120,2.573,121,1.445,122,2.939,124,2.747,148,0.997,151,2.992,157,1.083,180,3.424,193,4.142,225,1.575,226,1.841,227,1.081,231,2.833,239,4.584,259,1.391,267,3.179,303,2.153,315,3.08,337,3.145,392,1.402,400,1.689,406,2.559,420,2.202,485,2.525,736,2.068,774,3.781,775,3.709,778,5.191,781,3.644,822,4.649,823,5.563,824,3.145,825,4.915,826,3.583,827,4.915,828,4.775,829,4.292,830,4.915,831,4.915,832,4.649,833,3.781,834,4.906,835,4.649,836,3.526]],["t/3940",[0,1.329,14,2.346,53,3.939,58,6.146,86,2.97,87,5.002,90,3.254,121,1.396,123,1.693,178,3.804,259,2.163,262,3.369,275,4.069,420,5.275,840,4.957,878,6.608,3520,6.146,3568,8.971,3569,8.971]],["t/3942",[0,1.329,14,2.346,53,3.939,58,6.146,86,2.97,87,5.002,90,3.254,121,1.396,123,1.693,178,3.804,259,2.163,262,3.369,275,4.069,420,5.275,840,4.957,877,7.298,3521,7.507,3570,8.971,3571,8.971]],["t/3944",[0,1.663,1,1.741,2,2.811,14,2.937,30,3.451,31,5.42,37,4.243,53,3.971,58,6.197,86,2.995,120,2.648,121,1.748,178,3.835,262,3.396,303,3.661,406,2.373,1563,6.715]],["t/3946",[0,1.033,1,1.343,2,2.373,3,2.071,9,1.154,14,1.824,22,1.328,23,1.959,27,0.573,31,3.095,59,1.636,86,2.309,90,2.53,91,2.392,97,1.732,107,2.675,120,1.644,121,1.086,157,1.421,227,1.417,259,1.686,270,1.796,285,2.54,292,3.197,312,2.676,406,1.474,462,1.746,663,4.217,704,4.699,805,2.973,806,6.097,807,2.698,808,2.69,809,6.446,810,7.217,811,7.654,812,6.446,813,5.456,814,4.17,815,1.956,816,5.456,817,3.078,818,5.308,819,6.446,820,5.456,821,6.446]],["t/3948",[0,1.926,14,3.03,27,0.781,46,3.151,121,1.804,194,5.568,202,4.693,235,3.021,631,4.035,632,5.573,633,6.46]],["t/3950",[14,2.725,251,4.237,447,5.758,584,5.208,632,5.456,633,5.809,643,5.523,665,7.563]],["t/3952",[0,1.238,14,3.08,27,0.686,30,3.188,31,3.707,37,3.92,86,2.767,121,1.301,207,2.185,213,4.871,216,3.413,235,2.653,382,3.669,578,6.065,601,2.62,632,5.254,633,5.957,635,4.791,743,7.452,798,5.941,1391,8.963,1981,6.065,2438,4.149,2536,5.111,3572,8.356]],["t/3954",[0,0.815,1,1.545,2,2.986,4,3.127,9,0.91,14,2.894,21,2.405,27,0.659,53,2.417,120,2.454,123,1.514,124,1.932,207,1.44,227,1.631,238,4.096,242,2.135,267,6.617,285,2.004,357,3.127,396,1.185,406,2.442,407,2.79,632,4.937,686,3.985,733,5.169,734,4.04,735,4.444,736,2.121,737,3.596,738,8.237,739,5.088,740,5.088,741,5.088,742,5.088,743,5.599,744,3.291,745,5.707,746,3.65,747,3.914,748,3.221,749,5.088,750,5.088,751,5.088,752,4.443,753,5.088]],["t/3956",[0,1.475,9,0.831,14,2.605,16,1.251,23,0.851,34,1.426,60,1.989,86,2.974,102,2.875,120,1.769,121,1.168,122,2.818,123,0.948,125,3.62,139,4.832,164,4.392,184,2.682,195,3.074,200,3.198,206,2.101,217,3.074,225,1.488,226,1.739,227,1.021,231,2.485,235,1.596,259,1.596,326,2.623,374,2.358,392,1.325,396,2.145,415,3.443,418,3.804,420,3.719,448,3.825,462,1.878,630,2.623,632,5.313,633,4.185,671,4.963,687,5.369,688,3.573,729,2.026,738,5.056,743,3.505,752,4.056,754,6.52,755,6.936,756,4.645,757,2.495,758,4.056,759,2.972,760,4.347,761,3.386,762,2.266,763,3.731,764,1.426,765,4.206,766,6.281,767,4.394,768,4.394,769,6.936,770,3.573,771,10.709,772,4.056,773,6.057]],["t/3958",[2,2.209,14,2.893,28,3.916,49,5.399,120,2.848,121,1.374,157,1.798,259,1.569,407,4.474,485,4.191,632,3.937,736,2.333,738,5.946,743,6.157,754,6.407,774,6.276,775,6.157,776,8.157,777,8.157,778,5.607,779,5.112,780,5.946,781,6.047,782,5.946]],["t/3960",[14,3.129,121,1.562,259,1.784,632,4.477,738,6.762,743,7.001,754,7.286,765,8.4,782,6.762,878,5.936,3520,6.877,3573,10.038]],["t/3962",[1,1.77,2,2.84,14,2.967,30,3.509,31,4.08,120,2.675,121,1.431,259,1.635,303,3.723,406,2.398,632,4.102,738,7.644,743,6.415,752,7.422,754,6.676,765,7.696,782,6.196,3574,9.197]],["t/3964",[14,2.794,121,1.663,151,4.702,202,4.121,235,4.288,283,5.662,632,5.537,660,4.833,687,6.387,783,5.38,784,6.536,785,5.458,786,7.204,787,9.34,788,6.536]],["t/3966",[0,1.297,22,2.095,27,0.719,46,2.899,81,3.946,88,6.663,90,3.176,121,1.363,181,2.78,196,4.209,204,4.717,229,3.529,245,4.407,261,4.973,271,3.626,673,4.717,690,5.719,691,6.251,692,5.178,693,5.356,694,4.927,695,5.638,696,5.806,697,5.489,704,5.899]],["t/3968",[0,0.925,9,1.582,14,1.035,16,0.985,19,2.449,25,4.677,27,0.785,59,0.928,65,1.867,81,1.297,83,2.785,94,1.588,115,5.887,123,1.178,129,2.315,141,1.939,151,2.226,163,2.894,164,2.315,169,1.534,215,1.365,225,2.601,228,2.365,242,2.422,255,5.933,261,2.247,262,1.486,275,1.441,292,1.814,382,1.737,385,1.879,390,3.82,393,1.574,396,0.852,441,3.011,443,2.292,464,2.76,573,1.609,595,3.482,631,4.813,632,1.765,633,2.206,634,5.212,642,6.686,646,4.079,665,2.872,674,2.065,691,3.547,698,2.665,700,2.449,709,3.311,865,3.011,909,1.774,956,3.095,1069,3.775,1233,3.06,1327,3.011,1361,3.311,1685,3.459,1800,4.207,2073,3.656,2259,2.623,2271,3.656,2341,5.04,2347,3.459,3112,5.04,3171,5.771,3575,7.481,3576,10.49,3577,3.656,3578,3.656,3579,3.957,3580,3.656,3581,3.459,3582,3.957,3583,3.957,3584,3.656,3585,3.957,3586,3.957,3587,3.957,3588,3.656,3589,3.957,3590,3.957,3591,7.737,3592,3.957,3593,3.957,3594,3.957,3595,6.245,3596,6.245,3597,3.957,3598,6.245,3599,6.245,3600,3.957,3601,6.552,3602,6.245,3603,3.957,3604,6.245,3605,6.245,3606,6.245,3607,3.957,3608,3.957,3609,3.957,3610,3.656,3611,3.957,3612,3.957]],["t/3970",[31,3.916,81,3.626,87,4.921,90,3.202,121,1.374,165,5.277,204,4.755,242,3.423,245,4.443,255,4.921,261,5.013,263,4.878,271,3.655,673,4.755,674,6.305,690,5.765,699,5.946,700,5.464,701,8.426,703,6.276,704,5.946,705,6.407,2186,5.533]],["t/3972",[75,4.268,81,3.86,120,2.303,204,6.342,603,5.906,604,5.975,692,5.777,693,5.975,703,6.946,844,5.061,3030,9.029,3032,9.029,3312,9.502]],["t/3974",[2,2.174,21,4.784,27,0.984,32,3.938,82,5.193,83,4.885,121,1.867,159,5.083,162,4.342,186,2.65,210,5.59,231,2.403,352,6.306,393,3.455,419,5.193,689,6.059,698,5.852,728,9.164,729,3.501,730,8.028,731,5.76,732,7.011]],["t/3976",[14,2.12,27,1.008,31,4.65,81,2.659,85,3.472,121,1.631,151,5.897,204,5.645,209,3.636,262,3.935,271,4.34,320,5.221,365,5.377,382,3.561,395,4.521,673,4.368,684,4.17,897,4.442,1594,6.02,1982,5.02,3155,11.344,3528,9.685,3613,11.613,3614,7.089]],["t/3978",[0,1.257,26,1.482,27,0.886,99,2.254,121,1.321,123,1.601,148,2.34,153,4.609,170,4.534,225,2.513,226,2.937,227,1.724,304,5.073,392,2.236,396,2.323,570,2.19,764,2.407,775,5.918,876,5.018,906,4.866,994,5.463,1168,6.033,1674,6.033,2689,7.101,3286,7.392,3615,6.299,3616,8.486]],["t/3980",[0,1.628,9,1.199,11,3.814,16,1.806,26,1.92,27,0.799,37,3.402,38,4.043,123,2.217,148,2.202,183,6.804,225,2.147,226,2.51,227,2.491,284,4.043,392,2.566,396,2.096,570,2.513,764,2.762,909,3.252,994,4.669,1502,5.156,1998,5.886,3286,7.53,3617,6.339,3618,8.598,3619,5.672,3620,9.737]],["t/3982",[0,1.333,2,2.253,6,2.096,9,0.684,22,1.231,23,1.897,26,2.227,27,0.531,34,1.173,41,3.002,89,1.737,90,1.5,104,1.338,107,1.166,114,2.349,121,0.644,123,1.502,147,1.96,148,2.028,152,4.107,153,2.246,162,2.067,166,1.937,186,2.428,189,2.653,202,2.04,207,1.081,212,2.768,225,2.665,226,3.115,227,2.105,228,2.472,229,1.667,231,1.789,238,2.796,245,4.531,259,0.735,319,1.896,324,2.592,359,2.04,400,2.053,406,1.366,420,3.297,485,1.964,489,4.107,510,1.898,560,2.395,565,2.067,570,1.669,601,1.297,660,1.697,696,2.742,736,1.709,778,3.277,828,2.126,829,3.338,880,1.807,909,3.57,1035,1.875,1403,2.592,1556,5.796,1802,2.728,1889,3.338,1909,2.228,2294,3.615,2436,2.158,2469,3.338,3257,3.822,3615,8.033,3621,4.136,3622,4.136,3623,4.136,3624,2.627,3625,4.136,3626,4.136,3627,4.136,3628,4.136,3629,4.136,3630,4.136,3631,3.822,3632,4.136,3633,4.136,3634,4.136,3635,4.136,3636,4.136,3637,3.822]],["t/3984",[0,1.56,9,1.351,14,2.136,16,2.034,27,1.01,31,3.625,94,3.278,99,2.17,121,1.272,148,2.184,186,2.492,197,3.498,215,2.817,252,6.78,321,5.504,396,2.65,527,3.724,570,2.109,712,7.55,906,6.039,1243,8.499,1556,5.26,2652,5.597,3286,7.214,3619,6.39]],["t/3986",[0,1.738,2,2.075,3,2.463,27,0.681,30,3.164,81,2.719,86,2.746,94,3.328,120,2.767,121,1.827,148,1.554,227,1.685,238,5.075,313,4.514,326,4.328,396,1.785,607,9.822,734,4.174,873,6.02,881,4.756,1495,5.013,1562,5.775,3238,4.803]],["t/3988",[0,1.434,6,5.936,27,0.795,148,1.815,227,1.968,259,2.081,396,2.085,613,7.189,693,5.923,729,4.72,1495,5.854,1736,5.216,3017,6.159]],["t/3990",[0,1.351,27,0.749,53,4.004,148,2.298,207,2.385,227,2.294,271,5.305,349,3.612,359,4.498,396,2.43,404,4.724,462,2.282,570,2.354,613,6.771,1495,5.514,3039,7.605]],["t/3992",[0,1.628,7,3.508,14,1.896,16,1.806,25,4.384,26,1.266,27,0.799,37,3.402,46,2.401,85,3.105,123,1.368,148,2.297,153,3.939,207,2.546,225,2.147,226,2.51,227,2.234,231,2.006,241,4.043,252,4.669,304,4.335,321,4.885,396,1.561,400,2.302,495,4.2,876,4.288,894,5.161,994,4.669,1168,5.156,3286,9.189,3619,7.616,3638,7.252,3639,6.702,3640,6.339]],["t/3994",[53,4.107,125,3.77,153,5.081,231,3.172,259,1.662,418,4.741,570,2.414,628,6.932,844,4.845,1243,7.549,1405,7.317,1825,6.408,2972,6.789,3275,8.177,3286,6.408,3619,8.969,3639,8.644,3641,9.354]],["t/3996",[53,4.215,125,3.869,153,5.214,231,3.223,259,1.706,570,2.478,628,5.803,844,4.972,1243,7.747,1405,7.509,1825,6.576,2972,6.968,3275,8.391,3286,6.576,3619,9.112,3642,8.871]],["t/3998",[22,2.034,23,1.415,27,0.877,33,3.056,53,3.669,79,6.698,102,3.201,153,4.539,170,4.465,212,3.578,231,2.956,259,1.485,271,3.46,374,5.012,400,2.653,579,5.458,729,3.368,876,4.941,1405,6.536,3286,8.069,3287,7.722,3288,7.722,3562,6.993,3640,7.305,3643,7.722,3644,7.305]],["t/4000",[0,1.773,9,1.257,14,2.628,26,1.328,27,0.825,99,2.02,152,4.829,153,4.13,174,2.901,202,3.75,207,1.988,227,1.545,231,2.103,241,6.676,256,4.36,261,4.319,275,4.098,360,4.597,396,1.637,494,6.136,660,3.12,894,4.03,1189,4.895,1502,5.406,2257,6.363,3250,7.027,3286,8.937,3615,5.645,3645,7.604,3646,7.604,3647,7.604,3648,7.604]],["t/4002",[0,0.858,1,1.604,2,2.441,3,2.474,9,0.959,10,2.698,14,1.516,22,1.103,27,0.875,37,3.909,46,1.919,65,5.331,82,3.465,86,3.23,120,1.366,121,1.93,129,3.391,133,1.965,148,1.561,192,4.043,204,3.122,212,2.481,229,2.336,230,4.207,243,2.719,251,2.357,262,2.176,270,1.492,333,2.687,393,3.314,404,4.316,406,1.761,407,4.944,418,2.938,444,5.096,462,1.451,545,3.732,630,3.025,689,4.043,789,5.331,791,4.207,811,4.678,892,4.85,893,3.843,894,6.235,980,4.303,1683,4.121,1996,4.411,2255,2.938,2652,3.971,3265,5.356,3313,5.356,3649,7.283,3650,5.796]],["t/4004",[27,0.768,121,1.785,125,3.77,143,5.364,157,2.336,165,5.591,166,3.435,207,2.446,212,4.005,361,6.524,481,4.775,553,3.737,690,7.489,2355,7.118,2652,8.495]],["t/4006",[0,1.387,8,4.611,10,2.952,27,0.942,29,3.185,33,2.429,65,3.23,84,2.575,121,1.786,129,4.005,133,2.32,148,1.283,185,3.138,194,4.005,207,1.79,212,4.008,262,2.57,270,1.762,381,4.866,404,3.545,432,4.407,470,3.816,475,4.237,482,4.46,562,5.571,572,4.47,574,8.612,588,3.816,594,5.354,597,5.728,598,5.728,894,3.628,904,4.85,1574,4.47,1763,5.524,1999,4.186,2255,3.469,3295,4.968,3649,5.983]],["t/4008",[2,2.61,27,1.005,65,4.923,81,2.639,86,2.665,121,1.624,148,1.509,187,4.488,212,4.466,393,3.202,404,5.403,406,2.204,407,5.865,444,6.379,458,5.444,789,6.119,791,7.571,894,5.529,2417,4.983,3058,5.723,3649,9.118]],["t/4010",[16,2.081,85,3.578,86,2.767,89,3.509,99,2.22,121,1.663,184,2.987,185,3.831,187,4.659,188,2.833,234,4.539,249,6.744,271,3.46,335,4.297,356,3.632,369,5.957,407,4.235,871,6.203,1223,7.584,2417,7.942,2652,5.725,2972,6.065,3299,7.305,3301,7.305,3334,6.359,3651,6.536,3652,7.722]],["t/4012",[10,2.727,27,0.809,157,2.584,168,4.284,171,3.658,178,4.18,333,4.571,867,5.893,1008,4.928,1223,6.347,2417,7.328,3653,8.249]],["t/4014",[10,2.727,27,0.809,90,3.576,157,2.008,166,2.953,168,4.284,188,4.013,245,4.962,292,4.519,333,4.571,867,5.893,1223,6.347,2417,6.102,2541,6.876]],["t/4016",[10,2.777,27,0.824,84,2.564,121,1.863,171,3.725,190,4.341,207,2.625,297,5.201,400,3.187,3296,8.4]],["t/4018",[10,2.777,27,0.824,84,2.564,121,1.863,171,3.725,190,4.341,207,2.625,297,5.201,400,3.187,3296,8.4]],["t/4020",[27,0.824,121,1.99,147,3.044,171,3.725,206,5.002,212,4.298,271,4.955,470,5.597,811,8.101]],["t/4023",[0,1.358,9,1.098,11,4.821,27,0.93,54,5.607,65,5.345,80,3.925,89,2.787,100,3.464,121,1.033,128,4.06,133,3.107,148,2.122,196,4.406,235,2.107,280,6.976,303,3.711,349,2.629,353,3.964,364,6.805,393,2.64,481,4.68,733,3.615,887,3.844,894,6.003,898,3.968,902,6.394,1157,5.357,1202,3.252,1314,4.547,1357,3.114,1459,5.309,1482,5.555,1532,4.547,1828,6.134,2281,5.192,2334,5.192,2710,4.547,2739,6.134,2973,7.398,3125,8.013,3654,6.638]],["t/4025",[27,0.795,65,5.527,174,4.468,285,3.526,322,6.652,323,4.106,406,2.475,894,6.207,898,5.789,3655,9.684,3656,8.465,3657,8.949]],["t/4027",[14,2.446,27,0.941,65,5.411,121,1.785,123,1.765,148,1.753,303,4.641,353,4.045,400,2.97,894,6.078,898,5.591,902,6.524,1357,5.817,2703,7.549]],["t/4029",[2,1.992,11,4.187,23,2.245,27,0.531,59,2.112,65,3.757,80,2.445,99,1.099,121,1.612,133,1.402,147,1.96,148,0.775,157,1.317,164,3.783,171,1.535,196,4.327,227,1.314,231,1.789,303,1.674,356,1.797,377,2.246,393,1.645,497,3.147,560,4.611,565,2.067,733,1.631,734,4.531,744,6.191,813,3.235,847,6.279,887,3.745,889,4.693,894,2.192,1030,5.058,1160,7.103,1320,3.615,1532,6.692,2694,2.94,2710,6.692,2828,3.615,3165,7.869,3347,7.869,3407,5.058,3658,9.768,3659,4.136,3660,6.466,3661,6.466,3662,4.136,3663,6.466,3664,6.466,3665,6.466,3666,6.466,3667,6.466,3668,4.136,3669,4.136,3670,4.136,3671,9.002,3672,6.466,3673,6.466,3674,6.466,3675,6.466,3676,6.466]],["t/4031",[12,4.695,81,3.015,104,2.976,157,2.311,163,3.44,171,3.413,174,4.329,212,3.938,312,2.284,322,5.224,406,2.601,565,4.597,826,6.196,1160,5.224,1183,8.04,3657,8.499,3677,8.499,3678,9.197,3679,9.197]],["t/4033",[0,1.707,14,2.467,19,5.84,27,0.774,83,4.208,178,4,255,6.427,263,5.213,656,6.314,699,6.355,700,5.84,701,6.58,794,8.718,795,6.58,3122,7.895,3680,10.652]],["t/4035",[0,1.04,16,1.748,26,2.025,33,1.821,34,1.991,46,2.324,102,2.689,120,1.655,128,4.293,148,1.316,178,2.976,195,4.293,229,2.829,231,1.942,235,2.229,259,1.248,270,1.807,367,6.136,418,3.558,436,3.148,443,4.066,656,3.845,692,4.151,707,4.204,725,3.664,795,4.896,954,4.244,1069,4.244,1079,5.874,1363,4.107,1388,4.667,1758,5.665,2438,3.485,3334,5.342,3680,10.715,3681,7.971,3682,7.02,3683,7.02,3684,7.02,3685,7.02,3686,7.02,3687,9.525,3688,7.971,3689,7.02,3690,6.136,3691,6.136,3692,7.02,3693,7.02,3694,7.02]],["t/4037",[0,1.34,83,4.034,100,4.721,107,2.551,227,1.838,239,3.798,255,7.123,262,3.396,292,4.146,349,3.582,361,6.309,393,3.598,464,6.309,631,3.835,646,5.908,699,6.093,700,6.953,701,6.309,1717,6.883,3395,8.359,3695,9.045]],["t/4039",[0,1.297,9,1.448,14,2.29,16,2.18,24,7.118,27,0.719,212,3.749,213,3.992,229,3.529,239,3.677,255,6.136,392,2.308,432,5.638,631,5.354,632,3.906,640,5.999,646,5.719,699,5.899,700,5.421,792,5.719,1383,7.067,3575,8.609]],["t/4041",[0,0.845,16,1.421,23,0.966,26,1.688,27,0.676,36,4.236,38,4.593,53,3.617,99,1.516,163,4.199,169,2.213,174,2.177,213,5.333,216,2.33,225,1.689,226,1.975,242,3.195,255,6.523,275,2.077,276,3.783,293,3.532,312,2.046,344,3.305,382,2.505,392,2.171,419,3.411,420,2.363,437,3.272,631,4.96,642,6.269,646,3.726,663,4.98,676,6.648,677,9.791,746,3.783,840,3.153,856,4.057,974,2.795,1069,4.98,1313,3.979,1388,2.795,1957,4.605,1981,4.141,2307,4.463,3116,5.273,3575,6.444,3601,6.624,3610,5.273,3696,9.668,3697,5.706,3698,5.706,3699,5.706,3700,5.706,3701,7.613]],["t/4043",[14,2.664,27,0.637,46,2.571,99,2.063,163,2.904,183,4.807,188,3.454,196,3.732,213,5.184,225,3.017,255,5.681,312,1.929,335,3.993,420,3.215,428,4.453,631,5.315,641,5.909,643,4.116,647,8.653,648,6.498,654,7.753,662,3.276,663,4.694,764,2.202,856,5.521,1388,3.804,1459,4.497,1990,5.444,3575,7.97,3702,7.765]],["t/4046",[16,2.797,23,1.532,27,0.742,58,6.197,107,2.551,163,3.383,213,5.12,225,2.678,255,6.811,292,4.146,631,3.835,640,6.197,676,9.064,677,7.569,1459,5.239,2603,9.064,3575,7.075,3601,6.197,3703,9.045]],["t/4048",[9,1.249,14,1.975,27,0.821,163,4.195,164,4.418,207,1.975,213,5.663,225,2.236,255,6.254,275,2.749,419,5.979,601,2.368,605,5.173,631,4.241,641,8.535,642,5.746,643,4.002,646,4.932,647,9.087,648,6.319,655,6.601,664,6.319,680,5.907,757,3.749,786,4.618,787,6.601,1459,4.374,2603,8.073,3026,5.267,3575,5.907,3704,7.551,3705,7.551]],["t/4050",[0,1.64,9,1.216,14,1.279,16,1.218,22,0.931,23,1.246,26,0.854,27,0.725,37,2.295,75,2.137,168,2.126,181,1.553,207,1.279,212,2.094,225,1.448,227,1.796,231,3.177,255,2.727,261,5.582,271,3.045,303,2.977,323,2.074,350,3.722,365,3.243,382,2.148,392,2.329,393,2.925,396,1.583,447,2.703,631,2.074,668,4.914,674,2.553,675,3.149,684,5.418,699,3.295,700,3.028,701,6.164,702,2.397,703,8.755,731,3.243,764,2.989,854,3.295,912,2.553,971,3.722,1069,4.446,1100,3.149,1717,3.722,1842,3.722,2186,6.161,2341,8.934,2640,4.52,2644,4.093,3174,4.52,3681,7.396,3706,8.818,3707,6.429,3708,4.892,3709,4.892,3710,8.838,3711,4.892,3712,4.892]],["t/4052",[0,1.04,9,1.161,26,2.117,27,0.576,110,3.873,120,2.245,123,1.324,200,2.991,227,1.936,231,1.942,255,5.311,275,3.468,369,3.914,382,4.182,396,2.051,628,4.244,667,4.585,674,5.643,684,3.609,703,6.772,772,5.665,840,5.264,995,4.458,1042,3.583,1152,4.4,2186,5.971,3681,7.971,3706,10.143,3713,12.121,3714,9.525,3715,7.02,3716,7.02,3717,7.02,3718,7.02]],["t/4054",[0,1.816,14,2.385,16,2.271,27,0.749,107,2.573,120,2.15,202,4.498,227,2.294,255,5.085,396,2.43,673,4.913,674,4.76,1397,5.872,3719,9.121,3720,11.289,3721,9.121,3722,9.121,3723,9.121,3724,9.121]],["t/4056",[0,1.788,23,1.315,83,3.463,107,2.19,148,1.455,168,3.375,182,3.804,227,2.071,231,3.146,255,4.329,269,4.053,392,2.047,433,5.962,699,5.231,700,4.807,701,7.931,707,3.427,764,3.226,1155,4.749,1233,3.804,1441,6.267,1716,6.267,1722,6.074,1840,6.074,3520,5.32,3578,7.176,3681,9.516,3725,6.498,3726,6.788,3727,6.074,3728,7.765]],["t/4058",[6,4.172,27,0.676,31,3.652,75,3.595,103,4.329,120,2.91,147,2.496,188,3.587,207,2.152,227,1.673,231,2.927,259,1.463,262,3.091,271,3.408,396,1.772,523,3.205,666,4.824,673,4.434,703,5.852,729,3.317,759,4.867,1736,4.434,1747,7.195,2274,7.195,3017,6.151,3022,6.472,3531,7.607,3562,6.888]],["t/4060",[0,1.834,4,3.275,6,2.922,9,1.373,14,2.17,16,2.067,27,0.798,107,1.626,120,1.957,121,0.897,123,1.088,148,1.556,168,2.506,170,3.08,188,3.822,202,2.843,207,1.508,209,2.585,213,4.433,216,2.355,225,2.88,227,1.172,259,1.891,269,2.293,271,2.387,275,2.099,283,2.771,359,2.843,376,5.04,419,3.447,450,3.823,584,2.882,595,3.215,603,6.431,640,3.95,666,3.784,729,3.919,759,3.409,782,3.884,969,3.485,1045,6.698,1100,3.712,1224,3.662,1674,4.099,1998,3.485,3017,4.365,3022,7.181,3027,3.884,3038,3.766,3273,5.04,3279,4.653,3534,3.823,3601,3.95,3729,5.766,3730,4.185,3731,5.766]],["t/4062",[0,0.748,8,1.469,14,2.119,16,1.708,23,2.303,26,1.056,27,0.312,34,0.618,58,1.493,59,1.419,64,1.913,85,1.627,107,1.072,120,1.776,121,0.339,133,0.739,137,1.129,148,0.409,156,2.759,157,0.444,168,2.196,181,0.692,188,3.847,203,1.424,225,2.231,227,0.772,231,1.051,242,0.845,251,4.259,259,1.219,271,1.574,282,2.52,286,1.227,324,1.367,349,0.863,356,0.947,366,6.842,382,1.669,393,0.867,396,0.469,400,0.692,445,3.02,538,2.604,571,1.468,578,1.582,581,1.55,603,6.038,630,1.138,666,2.757,684,3.528,729,2.438,759,1.289,782,1.469,784,1.705,785,1.424,786,1.333,814,3.02,840,1.205,854,1.469,864,1.759,868,1.075,890,1.445,894,1.155,900,1.404,909,0.978,1127,1.55,1151,3.18,1232,1.659,1419,1.469,1478,3.845,1591,4.603,1674,1.55,1732,2.892,1752,1.824,1998,2.298,2000,1.582,2202,1.906,2301,1.659,3017,3.181,3022,6.853,3026,1.52,3027,2.56,3029,6.339,3038,1.424,3108,3.845,3273,1.906,3407,9.599,3492,4.417,3534,2.52,3566,2.015,3601,2.604,3615,1.618,3618,1.705,3730,2.759,3732,1.906,3733,3.512,3734,2.18,3735,2.18,3736,2.18,3737,2.18,3738,2.18,3739,2.18,3740,2.18,3741,2.18,3742,10.476,3743,2.18,3744,2.18,3745,2.18,3746,6.861,3747,2.18,3748,2.18,3749,8.59,3750,2.18,3751,2.18,3752,2.18,3753,2.015,3754,2.18,3755,2.18,3756,2.18,3757,2.18,3758,2.18,3759,2.18,3760,2.18,3761,2.18,3762,2.18,3763,2.18,3764,2.18,3765,3.801,3766,3.801,3767,3.801,3768,2.18]],["t/4064",[6,4.51,16,2.216,27,0.73,123,1.679,188,3.016,216,3.634,225,3.292,259,1.976,271,3.685,369,4.961,404,4.609,420,3.685,603,5.379,673,4.793,684,4.576,729,3.586,759,5.262,797,7.181,1042,5.675,1168,6.327,1732,6.771,1736,4.793,3017,4.68,3022,5.442]],["t/4066",[0,1.351,14,2.385,16,2.271,168,3.964,188,3.092,216,3.725,225,3.343,259,2.006,271,3.777,283,4.384,603,6.825,729,4.55,782,6.144,814,5.452,1998,5.514,3022,5.578,3027,6.144,3534,6.047,3601,6.248,3730,6.62]],["t/4068",[6,4.368,16,2.146,100,4.498,174,3.288,188,2.922,225,2.552,259,2.232,271,3.569,603,5.21,729,5.219,748,5.043,782,5.806,814,5.152,1311,6.956,1998,5.21,3022,5.271,3027,8.05,3334,6.559,3534,5.715,3601,5.905,3730,6.256,3769,7.213]],["t/4070",[16,2.216,123,1.679,183,5.508,188,3.016,216,3.634,225,2.635,259,2.155,271,3.685,420,3.685,579,5.812,603,5.379,729,4.48,782,5.995,814,5.319,1998,5.379,3022,5.442,3027,5.995,3534,5.9,3601,6.096,3730,6.459,3770,7.779,3771,7.447,3772,7.447,3773,8.223]],["t/4072",[16,2.097,90,3.054,121,1.311,123,1.589,188,3.64,216,3.439,225,2.493,259,2.101,262,3.162,271,3.487,420,3.487,445,5.034,571,3.252,572,5.5,603,6.491,729,4.327,782,5.672,814,5.034,1299,5.769,1666,6.796,1736,4.536,1998,5.09,3022,6.567,3027,5.672,3534,5.583,3601,5.769,3730,6.112,3769,7.047]],["t/4074",[16,2.198,33,2.29,34,2.504,110,3.589,121,1.374,123,1.665,188,2.992,190,3.817,216,3.605,225,2.614,259,2.147,271,3.655,420,3.655,572,5.765,603,5.336,729,4.458,782,5.946,814,5.277,1998,5.336,3022,5.399,3027,5.946,3534,5.853,3601,6.047,3730,6.407,3769,7.387]],["t/4076",[14,2.29,26,1.922,106,3.468,186,2.671,188,2.968,196,4.209,225,2.593,235,2.78,237,4.797,259,1.956,271,3.626,560,5.072,603,5.294,729,4.436,782,5.899,1311,7.067,1736,4.717,3011,5.899,3022,5.356,3027,5.899,3534,5.806,3601,7.54,3730,6.356,3769,7.328,3774,7.655]],["t/4078",[27,0.788,183,5.942,216,3.921,257,4.07,259,2.07,579,6.27,630,5.01,729,4.695,759,5.676,3017,5.048,3027,6.467,3644,8.391,3770,8.391,3771,8.033,3772,8.033,3775,9.599]],["t/4080",[0,1.716,14,3.03,26,1.662,151,5.354,168,4.136,196,4.574,215,3.282,276,6.309,748,5.568,784,7.444,785,6.215,979,7.68,1760,8.794,1763,7.68,3553,8.794,3554,8.794,3776,9.516]],["t/4082",[27,0.742,31,4.013,123,1.707,169,3.508,196,4.348,271,5.44,396,1.947,404,6.328,443,5.239,868,4.461,1374,5.599,2650,7.907,3039,8.229,3042,6.093,3534,5.997,3777,9.045,3778,9.045]],["t/4084",[14,2.308,121,1.722,148,1.654,157,2.253,171,3.276,188,2.992,216,3.605,234,4.794,240,6.276,271,3.655,277,6.276,363,5.252,460,5.22,603,5.336,757,4.382,1042,4.506,1311,7.124,1982,5.464,2717,7.716,3022,5.399,3467,6.276,3733,8.157,3770,7.716,3779,8.157,3780,8.827]],["t/4086",[14,2.794,16,2.081,22,2.034,31,3.707,90,3.031,123,1.577,157,1.702,188,2.833,189,2.785,190,3.613,196,4.017,225,3.164,259,2.093,271,3.46,603,5.052,729,4.306,782,5.629,814,4.995,1052,4.177,1998,5.052,3011,5.629,3022,5.111,3027,5.629,3520,5.725,3534,5.541,3601,5.725,3730,6.065,3781,8.356,3782,8.356]],["t/4088",[0,1.788,9,1.284,14,2.664,16,1.933,46,2.571,81,2.546,102,2.974,120,1.83,121,1.586,122,2.916,124,2.726,148,1.455,216,3.171,229,3.129,251,3.157,267,6.09,326,4.053,392,2.047,408,5.32,632,3.463,633,4.329,733,4.761,760,4.497,763,5.764,898,6.09,907,5.32,1427,4.807,1439,6.788,1957,6.267,2304,6.471,3783,7.176,3784,7.176,3785,5.909,3786,7.176]],["t/4090",[0,1.319,14,1.665,22,1.955,27,0.731,81,2.088,86,3.683,120,1.501,121,1.386,123,1.938,125,3.589,201,3.765,210,6.192,212,2.726,227,2.087,238,5.655,239,3.74,251,2.589,258,5.779,326,3.323,393,2.533,396,1.917,570,1.644,733,4.617,734,4.483,744,6.14,745,4.527,773,5.139,887,3.688,888,4.981,889,4.622,900,4.1,1892,4.622,2710,4.363,3282,5.885,3787,8.596,3788,6.368]],["t/4092",[1,2.464,2,3.333,3,3.158,27,0.681,120,1.955,123,1.565,124,2.911,227,1.685,258,4.666,396,1.785,406,2.48,407,5.389,443,4.803,733,4.882,736,2.192,744,4.957,1244,6.487,1532,5.682,3789,6.94]],["t/4094",[0,1.276,27,0.707,120,2.032,123,1.626,124,3.025,227,1.752,258,4.85,396,1.856,694,7.287,733,5.107,735,5.89,737,8.201,744,5.152,1671,7.6,2826,6.742,3790,7.534]],["t/4096",[0,1.088,1,1.415,2,1.839,3,2.182,14,1.922,16,1.83,27,0.603,60,2.932,102,2.815,121,1.529,123,1.386,169,4.291,227,2.249,231,2.033,241,5.477,286,4.135,312,1.825,360,4.443,462,3.17,632,3.278,733,3.874,734,3.699,760,7.13,761,4.951,762,3.313,763,5.456,868,3.624,879,4.664,885,4.951,896,4.813,1357,3.448,3791,7.349,3792,6.791]],["t/4098",[0,1.557,14,2.749,16,2.386,22,1.069,23,2.083,27,0.669,107,2.298,148,1.053,163,2.101,178,2.382,183,3.478,188,2.761,215,1.937,229,2.264,231,2.908,235,3.043,251,3.312,303,2.274,323,3.454,377,4.425,396,1.209,404,4.22,462,1.406,474,3.669,632,4.688,733,2.216,760,5.551,761,7.517,762,4.321,770,3.994,851,5.32,881,6.028,896,2.753,1357,5.459,1427,5.043,1434,3.132,1493,4.394,1736,3.026,2255,4.129,2694,7.473,2695,6.574,2696,4.982,2697,4.534,2698,4.534,2803,3.994]],["t/4100",[14,1.675,22,1.702,27,0.734,46,2.961,86,2.121,102,3.426,120,2.108,121,1.392,122,2.405,123,1.208,125,2.581,148,1.2,200,3.81,202,4.41,229,2.581,231,1.772,238,2.77,251,2.604,286,3.604,298,5.36,392,2.357,396,1.925,400,2.034,408,4.388,462,1.603,649,4.554,688,4.554,733,4.063,760,5.18,763,9.72,881,3.673,885,4.315,887,3.71,888,5.01,907,4.388,1231,4.554,1310,5.169,1370,4.554,1439,5.599,1671,4.467,1674,4.554,1808,4.755,1950,5.01,1957,5.169,2694,4.554,2819,4.554,3784,5.919,3785,6.805,3786,5.919,3787,5.36,3793,5.599,3794,5.919]],["t/4102",[0,1.74,3,2.154,14,2.546,27,0.595,37,3.402,60,1.921,65,4.595,81,2.377,123,1.837,127,4.808,133,2.458,148,1.359,211,5.955,241,5.429,267,4.335,303,2.935,323,3.075,334,5.518,470,4.043,690,4.736,733,4.335,760,4.2,881,4.159,894,5.161,896,5.386,913,3.65,1293,4.2,1357,5.92,1459,4.2,1669,5.058,1688,4.606,2255,4.935,2694,5.156,2803,6.922,2819,5.156]],["t/4104",[0,1.201,14,3.037,60,3.077,123,2.398,225,3.103,235,3.327,238,4.532,239,5.338,396,1.746,570,2.093,632,5.669,733,3.198,885,7.823,896,5.69,2803,5.766,2819,5.766]],["t/4106",[1,1.961,2,3.021,27,0.637,60,2.057,123,1.465,148,1.455,229,3.129,231,2.148,238,5.22,239,4.775,241,4.329,303,4.124,400,2.465,406,2.551,462,2.55,733,5.074,760,4.497,762,4.594,885,7.661,887,4.497,896,3.804,2819,5.521,3795,7.765]],["t/4108",[0,1.067,22,2.397,27,0.796,33,2.515,64,3.626,86,3.627,99,1.914,125,5.187,148,1.35,166,2.158,181,3.078,193,3.213,212,3.084,238,4.192,243,3.38,251,2.929,337,4.26,393,2.866,448,5.482,551,6.53,638,5.814,666,4.419,734,5.514,854,4.853,873,5.229,896,3.53,900,4.638,907,4.935,1224,4.575,1233,3.53,1673,5.635,1919,6.298,2280,5.229,3302,5.482,3796,6.658]],["t/4110",[0,1.491,7,1.667,10,0.954,14,0.901,16,0.858,22,1.546,23,0.947,24,2.038,27,0.826,81,1.13,85,3.021,86,3.334,90,2.029,100,1.799,102,1.32,103,1.813,104,1.115,107,0.972,120,0.813,121,1.264,122,2.1,125,4.831,147,1.696,157,1.654,168,1.498,171,2.075,174,1.315,178,1.461,188,2.752,196,1.657,202,1.7,204,1.857,206,1.441,215,1.189,216,1.408,231,0.954,232,2.608,234,4.41,238,2.418,242,1.337,243,3.31,245,2.815,246,2.696,258,3.97,259,0.994,262,2.1,271,1.427,289,2.559,292,1.58,295,4.68,319,2.564,338,1.786,382,1.513,396,0.742,400,1.094,449,2.777,462,0.863,480,2.696,491,1.958,493,2.322,495,1.996,532,1.799,558,4.059,573,1.402,588,1.922,593,3.239,601,1.753,605,2.361,619,3.013,658,1.857,688,5.017,702,1.689,707,1.521,725,3.683,733,2.783,734,4.811,744,4.854,745,5.773,783,2.219,792,3.653,804,2.696,853,2.623,875,2.502,879,3.35,880,1.506,885,2.322,900,3.601,912,1.799,1042,1.76,1059,3.013,1152,2.161,1168,2.451,1293,1.996,1338,3.901,1376,5.747,1423,1.872,1502,2.451,1957,2.782,1963,2.404,1998,3.381,2151,2.782,2344,2.782,2430,3.013,2689,2.885,2696,3.42,2960,2.502,3309,3.013,3333,3.185,3421,4.375,3467,2.451,3503,2.885,3785,2.623,3797,3.447,3798,3.185,3799,3.185,3800,3.185,3801,3.447,3802,3.185,3803,3.447,3804,3.447,3805,5.593,3806,3.447,3807,3.447,3808,3.447]],["t/4112",[0,1.362,27,0.931,124,3.228,125,5.179,166,2.755,227,1.869,323,3.899,349,3.642,396,1.98,666,4.192,668,4.289,673,6.113,691,5.224,692,5.438,971,6.998,1909,4.954,2651,7.422,3809,8.04]],["t/4114",[27,0.89,60,2.266,86,2.831,121,1.853,122,3.211,124,3.002,125,3.446,142,7.117,148,1.603,212,3.661,231,2.366,241,4.768,288,4.085,415,5.859,428,4.904,628,5.17,896,5.313,1293,4.953,1338,7.563,1989,5.859,2280,7.87,3810,7.903,3811,7.903,3812,7.476]],["t/4116",[22,2.257,27,0.749,33,1.712,86,3.926,106,2.613,120,2.468,121,1.629,125,4.943,130,3.784,139,5.878,147,2,149,4.898,166,1.977,181,2.095,201,3.901,220,5.161,222,4.602,229,2.659,262,2.477,271,3.78,337,6.19,353,4.526,365,4.374,404,3.418,460,3.901,465,4.691,495,3.821,556,3.86,604,4.035,617,8.188,638,5.324,666,4.772,731,4.374,907,4.52,1220,4.035,1757,6.097,1886,4.136,1909,3.554,2778,4.789,3732,5.767,3813,6.097,3814,6.598]],["t/4118",[1,1.255,2,1.632,3,1.936,9,1.72,18,3.855,27,0.854,53,2.862,84,1.397,85,2.791,86,2.158,89,2.738,104,2.93,114,3.703,121,1.619,125,5.051,147,1.977,157,1.328,166,1.953,176,5.473,178,2.764,180,4.197,194,3.815,213,2.972,217,3.987,241,3.635,252,4.197,263,5.003,312,1.619,326,3.402,338,5.388,349,2.582,395,3.635,400,2.07,462,1.632,673,3.512,688,4.635,690,5.913,802,4.725,854,4.392,1010,5.455,1300,5.699,1996,4.961,2126,4.197,3125,7.914,3651,5.099,3815,9.612,3816,6.025,3817,6.025,3818,5.455,3819,6.519]],["t/4120",[23,2.053,59,1.647,75,3.066,86,4.013,114,3.987,120,1.655,121,1.093,148,1.316,159,4.107,187,3.914,188,4.109,201,5.632,227,1.936,231,2.635,232,3.274,234,5.174,251,2.854,262,2.636,282,6.316,396,1.511,447,3.879,601,2.987,662,2.962,696,4.654,719,3.781,731,4.654,1388,3.439,1963,4.896,2078,5.095,2696,5.826,2960,5.095,3051,5.211,3651,7.451,3707,6.136,3820,5.342,3821,7.02,3822,7.02,3823,7.02,3824,7.02,3825,7.02]],["t/4122",[9,1.472,27,0.73,86,3.681,120,2.098,121,1.73,125,4.48,200,4.737,227,1.808,231,2.462,238,3.848,258,6.256,460,5.262,523,3.465,649,6.327,734,6.103,793,5.262,798,6.327,873,6.459,1673,6.961,3295,6.459]],["t/4124",[4,5.549,53,4.29,85,4.183,125,5.093,236,5.777,237,5.352,286,5.497,369,5.447,495,5.659,797,7.885,1168,6.946,1311,7.885,3372,8.176,3511,9.029]],["t/4126",[0,1.783,1,1.484,2,2.538,10,2.133,27,0.93,30,2.942,33,2,34,2.187,84,2.173,99,2.694,100,4.024,102,2.954,103,4.055,105,2.756,141,3.778,207,2.016,208,4.964,215,4.152,223,3.828,298,6.452,323,3.269,435,5.874,436,3.458,437,6.904,462,1.93,482,3.223,707,3.403,1774,6.222,1812,7.125,2803,5.482,3826,7.125]],["t/4128",[0,1.783,12,4.47,22,1.667,27,0.988,30,3.341,33,2.856,34,3.122,46,2.899,78,5.133,89,3.677,102,4.216,123,1.652,181,2.78,217,5.356,323,3.713,400,2.78,796,8.395,1236,6.356,2283,7.655]],["t/4131",[0,0.932,1,1.965,2,2.555,22,1.198,23,2.255,26,1.099,27,0.517,29,3.765,33,2.292,34,2.506,46,2.084,53,2.764,59,1.477,60,1.668,121,0.98,148,1.18,153,3.419,163,2.354,174,2.402,262,2.364,275,2.292,382,2.764,406,1.867,420,2.607,481,5.211,571,2.431,601,1.974,733,2.482,796,4.39,880,2.75,896,3.084,909,2.823,917,4.543,974,3.084,1108,3.85,1135,3.722,1236,6.413,1769,5.268,2047,7.723,3161,5.817,3188,5.817,3827,11.068,3828,6.295,3829,6.295,3830,6.295,3831,5.817,3832,6.295,3833,6.295,3834,6.295]],["t/4133",[2,2,23,2.068,27,0.656,29,2.718,33,2.693,34,3.271,38,4.455,46,3.437,51,5.145,86,2.646,128,4.887,171,3.853,195,4.887,216,3.264,354,5.009,392,2.106,406,1.689,481,4.079,636,6.687,764,2.267,772,6.449,814,4.777,1236,7.535,1405,6.251,1780,8.043,2264,6.251,3835,7.991,3836,7.991,3837,7.991,3838,7.991]],["t/4135",[0,1.514,1,1.968,2,2.559,26,1.786,107,2.884,120,2.41,121,1.592,123,1.929,148,1.916,481,5.22,796,7.132]],["t/4137",[0,1.5,14,2.649,22,2.29,161,3.377,553,4.047,796,7.066,1005,8.176,1397,6.523,2928,7.925,3831,9.362,3839,10.131]],["t/4139",[0,1.307,7,4.27,19,5.464,22,2.106,26,1.542,83,3.937,120,2.848,121,1.722,148,1.654,188,3.75,212,3.779,237,6.06,263,6.113,735,4.141,795,6.157,1055,7.716,1335,6.157,1437,6.717,3840,7.387,3841,8.827,3842,8.827]],["t/4141",[0,0.849,9,0.949,11,3.016,14,2.162,22,1.574,27,0.992,31,2.545,51,3.693,64,2.887,86,3.514,121,2.085,125,4.534,130,3.289,133,1.944,147,1.739,148,1.817,212,2.456,216,2.343,229,2.311,231,2.288,237,3.142,243,5.498,249,4.629,262,2.154,337,3.391,393,2.281,462,1.435,532,4.316,588,3.198,628,4.999,666,2.615,668,2.675,734,2.887,792,5.401,793,7.657,801,4.163,854,3.864,876,3.391,907,5.665,1135,3.391,2276,5.014,3651,4.486,3843,5.735,3844,5.735]],["t/4143",[0,0.828,1,1.076,2,1.399,3,1.66,14,2.499,22,1.064,25,3.379,26,1.945,27,0.861,86,3.164,106,2.214,107,1.577,121,2.005,123,1.531,125,3.851,139,5.225,140,2.794,147,1.695,148,1.047,163,3.035,196,2.687,200,2.381,207,1.462,225,1.655,226,1.934,229,2.253,259,1.442,275,2.035,312,1.388,319,2.562,349,2.214,420,2.314,462,2.031,481,2.853,572,3.651,601,3.288,734,4.085,744,3.341,772,4.511,793,7.401,840,3.089,879,3.853,880,3.545,887,3.237,1673,6.348,1683,3.974,1914,3.898,2717,4.886,2819,3.974,3011,3.765,3475,4.677,3815,5.165,3817,7.5,3845,8.353]],["t/4145",[1,1.646,9,1.414,22,1.628,23,1.837,26,2.079,121,1.688,123,1.613,147,3.288,207,2.236,235,2.715,259,1.927,275,3.114,393,3.402,400,2.715,420,3.541,793,7.04,879,4.06,880,3.736,1802,3.608,3845,10.408,3846,8.552,3847,8.552]],["t/4147",[0,1.832,9,1.639,19,4.611,22,1.418,27,0.914,53,3.27,90,3.596,120,2.337,121,1.543,124,2.615,148,1.396,157,1.517,166,2.232,227,1.514,245,4.989,259,1.324,263,6.563,303,3.015,382,3.27,593,4.314,694,6.269,695,7.173,696,4.939,697,4.669,735,4.65,795,5.195,844,3.858,893,4.939,1427,4.611,1437,5.668,1958,7.543]],["t/4149",[0,1.516,20,4.442,27,0.642,81,2.564,148,1.466,212,3.348,229,3.152,259,1.39,260,7.227,261,4.442,263,4.321,268,9.209,323,3.316,366,5.108,482,3.269,493,5.268,579,5.108,631,5.133,641,5.951,643,4.145,647,5.951,675,5.035,691,4.442,692,4.624,694,7.253,707,4.518,735,3.669,961,4.248,1069,4.728,1134,4.675,1958,5.951,3122,6.544]],["t/4151",[0,1.664,2,2.16,7,1.854,9,1.427,14,2.257,16,1.516,26,1.063,27,0.622,28,1.7,60,1.015,75,1.674,81,1.256,89,1.609,107,1.717,120,2.571,121,1.179,123,1.149,124,1.345,148,1.617,157,0.781,174,2.323,188,2.064,193,2.716,194,2.242,195,2.344,210,1.956,225,1.135,227,1.237,229,1.544,239,4.414,335,1.97,343,0.959,396,0.825,406,2.118,525,3.207,587,2.082,656,2.099,693,2.344,694,6.612,707,1.691,719,3.28,733,2.988,735,5.401,778,4.374,779,4.388,780,2.582,781,4.172,823,3.307,824,3.601,844,1.985,1004,2.916,1064,4.329,1141,6.567,1193,2.845,1202,2.983,1385,3.093,1392,3.35,1440,2.916,1459,4.388,1563,4.52,1587,2.434,1834,3.207,1954,2.503,1958,2.916,1990,2.048,2518,2.582,2718,3.207,2778,2.782,2826,2.998,3211,7.544,3213,5.323,3214,6.623,3215,7.976,3216,5.627,3217,5.323,3218,6.623,3258,2.582,3848,5.096,3849,6.089,3850,3.832,3851,3.207,3852,3.35,3853,3.832,3854,3.832,3855,3.542,3856,3.207,3857,3.832]],["t/4153",[0,1.576,2,2.334,7,2.137,9,1.373,14,2.439,16,1.1,26,1.189,27,0.559,60,1.804,107,1.92,120,2.876,123,1.284,148,1.276,157,0.9,162,2.209,174,1.686,210,2.256,227,1.687,235,1.403,335,2.272,343,1.106,406,2.129,426,3.566,540,2.93,553,1.765,632,4.16,633,2.464,694,6.238,733,1.743,735,5.81,737,8.498,738,2.977,778,4.728,779,4.809,780,2.977,781,4.663,823,3.697,824,4.025,896,2.165,1064,3.142,1391,3.362,1459,2.559,1671,7.733,1990,2.361,2518,4.585,2718,3.698,2803,3.142,3211,5.95,3213,3.863,3214,3.863,3217,3.863,3218,3.863,3848,3.698,3855,4.084,3856,3.698,3858,4.084,3859,3.863,3860,4.419,3861,6.807,3862,4.419,3863,6.807,3864,5.95]],["t/4155",[7,4.928,9,1.284,15,8.254,210,3.964,258,4.369,259,1.38,269,3.089,278,6.864,349,3.075,409,5.416,490,3.664,510,2.279,570,2.004,658,4.183,662,4.299,694,4.369,707,3.427,735,4.78,785,5.072,1004,5.909,1223,4.999,1233,3.804,1415,5.764,1845,6.755,2078,5.636,2259,5.148,2648,7.176,3856,6.498,3865,7.765,3866,12.073,3867,7.765,3868,7.765,3869,7.765,3870,7.765,3871,7.765]],["t/4157",[0,1.167,7,3.81,14,2.06,16,2.561,27,0.94,37,3.695,107,2.222,120,1.857,147,2.388,163,2.946,212,3.372,225,3.045,226,2.726,227,1.601,239,3.308,335,4.05,396,1.696,570,2.033,601,2.47,707,3.476,733,3.106,735,6.172,805,2.173,844,4.08,1037,7.173,1818,10.612,1884,6.885,3872,7.877,3873,7.877]],["t/4159",[0,1.276,6,4.368,9,1.425,27,0.894,46,3.608,70,3.315,78,4.02,108,4.465,114,4.895,141,4.223,148,2.042,169,3.342,188,4.39,323,3.654,385,4.092,436,3.865,462,2.157,612,5.806,902,6.011,1376,5.549,1388,4.223,1948,7.213,2366,6.956,3874,7.534]],["t/4161",[0,1.167,3,2.339,14,2.06,27,0.94,46,2.608,114,6.504,123,1.486,148,1.476,169,3.988,186,2.402,187,4.391,188,4.378,225,2.332,226,2.726,227,2.09,229,3.174,232,3.673,251,4.182,315,4.562,396,1.696,462,2.574,582,4.876,662,3.323,687,4.708,876,4.657,1042,4.021,1948,6.591,2696,4.817,3820,5.994,3875,7.279]],["t/4163",[0,1.395,9,0.901,16,1.357,23,2.015,26,0.952,27,0.654,46,1.805,70,3.623,81,1.787,86,1.805,87,3.039,99,1.448,107,2.248,148,2.331,153,2.96,164,3.189,168,2.369,188,3.193,212,2.334,231,2.867,232,2.542,262,2.047,269,3.17,360,5.694,392,1.437,396,1.173,400,1.73,557,3.334,671,4.403,764,2.26,878,3.223,1155,3.334,1189,5.131,1233,2.67,1376,3.509,1552,6.668,1716,4.399,1840,4.263,1955,6.064,2078,5.784,2186,3.417,2696,3.334,3520,3.734,3727,4.263,3874,8.234,3876,4.765,3877,5.037,3878,5.037,3879,5.037,3880,5.037,3881,5.037,3882,5.037,3883,5.037,3884,5.037,3885,5.037,3886,5.037,3887,5.037,3888,5.037,3889,5.037,3890,5.037,3891,5.037,3892,5.037,3893,5.451,3894,5.451,3895,5.037,3896,5.037,3897,5.037,3898,5.451,3899,5.451]],["t/4165",[6,2.722,9,0.888,16,1.963,23,1.856,27,0.441,70,2.066,81,1.761,84,2.537,120,1.266,148,1.75,178,2.277,185,2.462,188,3.715,224,3.05,226,1.859,339,1.985,356,2.334,360,5.646,513,3.05,561,3.08,841,2.741,1041,6.192,1099,2.666,1189,5.075,1434,4.395,1552,8.611,1955,5.998,2078,7.469,2118,4.494,2186,3.366,2281,9.26,3874,4.695,3877,4.963,3878,4.963,3879,4.963,3880,4.963,3881,4.963,3882,4.963,3883,4.963,3884,4.963,3885,7.285,3886,4.963,3887,4.963,3888,4.963,3889,4.963,3890,4.963,3891,4.963,3892,4.963,3895,4.963,3896,7.285,3897,7.285,3900,5.371,3901,5.371,3902,5.371,3903,5.371,3904,5.371,3905,5.371,3906,5.371,3907,5.371,3908,5.371,3909,5.371,3910,5.371,3911,5.371,3912,5.371,3913,5.371,3914,5.371,3915,5.371,3916,5.371,3917,5.371]],["t/4167",[26,1.769,78,4.725,108,5.248,142,6.056,148,1.899,188,4.351,288,4.84,436,4.543,684,5.209,3918,10.131]],["t/4169",[0,1.672,14,2.385,27,0.749,30,3.48,31,4.046,85,3.905,89,3.83,157,1.858,271,4.675,349,3.612,675,5.872,691,5.18,735,4.279,895,5.452,1103,5.23,1152,5.717,1877,8.831,2649,7.973,3039,6.144,3856,7.632,3919,9.121]],["t/4171",[0,1.689,14,2.425,16,2.309,133,3.144,147,2.812,263,5.125,573,3.771,675,5.971,691,6.479,694,5.219,695,5.971,895,5.544,966,4.3,1420,7.761,1427,5.741,1578,7.485,1877,9.663,3920,8.571]],["t/4173",[0,1.448,11,3.839,14,1.909,16,1.818,24,4.317,59,1.712,89,3.066,100,3.81,157,1.487,197,3.125,198,4.107,206,3.051,262,2.741,269,2.904,323,3.095,385,5.593,491,4.146,573,3.977,579,4.768,606,5.555,662,3.08,691,6.977,706,5.19,719,3.932,783,4.7,875,5.299,894,5.184,1093,4.519,1393,8.184,1420,6.109,1578,5.891,1659,6.381,1729,5.71,2186,6.913,3470,6.746,3504,6.381,3725,8.184,3858,6.746,3921,7.3,3922,6.746]],["t/4175",[24,4.941,59,1.96,70,3.214,81,2.74,82,4.995,107,2.357,206,4.466,261,4.746,271,3.46,286,6.627,491,6.069,544,4.995,573,4.789,585,6.536,675,5.38,691,4.746,774,5.941,895,4.995,897,4.578,1388,4.094,1601,4.361,1688,5.307,3052,7.305,3507,7.722,3923,9.34,3924,9.34,3925,8.356]],["t/4177",[0,1.673,24,5.969,36,5.684,59,1.796,70,2.945,100,3.996,121,1.192,141,3.751,147,2.321,157,2.542,168,3.328,186,2.335,197,5.343,206,4.219,207,2.002,292,3.51,348,5.158,460,4.527,491,5.734,573,4.105,581,5.444,623,5.444,691,4.349,875,5.557,890,5.077,974,3.751,1050,5.684,1223,4.93,1427,4.74,2000,5.557,3923,6.693,3926,7.657,3927,7.657]],["t/4179",[0,1.488,84,2.153,100,3.968,114,4.319,147,2.305,157,2.292,163,2.844,166,2.278,194,4.449,197,3.255,206,3.178,245,3.827,269,3.997,271,3.148,365,5.041,390,4.65,427,5.786,478,3.881,491,4.319,535,4.496,573,5.201,588,4.239,599,5.519,625,4.278,673,4.096,691,5.707,702,3.725,867,4.545,893,5.041,1327,5.786,1719,5.645,1729,5.948,1797,6.22,3351,6.647,3923,8.784]],["t/4181",[0,1.276,32,3.907,84,2.335,147,2.613,157,2.558,171,3.199,269,4.334,271,3.569,294,7.016,349,3.414,449,4.279,573,3.504,580,5.549,625,4.85,691,4.895,770,6.128,897,4.721,912,4.498,1427,5.335,1719,6.398,1752,7.213,2803,6.128,3928,7.965,3929,8.619,3930,8.619]],["t/4183",[0,1.614,16,2.146,37,4.043,157,2.638,171,3.199,349,4.973,617,6.742,675,5.549,691,4.895,695,5.549,697,5.403,844,4.465,895,6.514,1212,6.956,1420,7.213,1427,5.335,1877,9.347,2960,6.256,3920,7.965,3931,7.213]],["t/4185",[22,1.68,59,2.071,104,2.857,137,4.572,157,2.58,186,2.692,197,5.422,259,1.569,319,4.046,340,5.277,349,3.496,452,5.062,470,4.921,573,3.589,759,5.22,789,4.412,1683,6.276,2301,6.717,3931,7.387,3932,7.387,3933,8.827,3934,7.387]],["t/4187",[59,2.608,70,4.276,84,2.382,137,4.609,157,2.587,166,2.666,197,5.192,269,3.539,289,6.606,319,4.079,349,3.524,573,4.521,587,4.833,588,4.961,844,5.759,1202,4.36,3931,7.447]],["t/4189",[22,2.266,23,1.449,75,3.736,81,2.804,84,1.832,137,4.43,157,2.425,198,4.812,269,4.313,294,5.506,319,3.92,349,4.294,365,5.67,573,3.477,587,4.645,690,5.585,691,6.159,789,4.275,3529,7.476,3707,7.476,3725,9.074,3931,7.156,3935,7.903,3936,7.903]],["t/4191",[23,1.716,81,3.321,198,5.7,269,4.03,349,4.012,365,6.717,690,6.617,691,6.834,3725,10.069,3936,9.362]],["t/4193",[0,1.374,27,0.761,28,5.061,30,3.538,121,1.444,179,7.058,206,3.876,269,3.689,374,4.351,432,5.971,625,6.951,656,6.249,1819,5.672,2955,7.761,3727,8.922,3937,8.571,3938,8.571]],["t/4195",[0,1.573,129,6.215,427,8.082,625,5.976,634,7.155,656,5.818,1155,6.496]],["t/4197",[0,1.362,14,2.405,16,2.29,26,1.606,38,5.128,99,2.443,227,1.869,254,5.921,269,4.514,625,5.175,631,3.899,656,5.038,860,6.301,1189,5.921,1328,7.422,1359,5.765,3939,9.197,3940,9.197,3941,9.197,3942,9.197,3943,9.197,3944,7.422]],["t/4199",[0,1.512,12,3.213,14,2.31,21,2.75,26,1.543,27,0.908,78,2.936,81,2.064,190,2.722,207,1.646,211,3.85,213,4.027,227,2.522,235,3.241,242,2.441,259,1.119,269,2.504,275,3.717,292,4.05,320,5.688,359,3.104,366,4.111,393,3.514,423,3.683,625,4.971,632,5.199,635,3.962,651,5.08,656,4.84,659,4.79,707,2.778,717,3.763,746,4.174,786,3.85,788,7.985,889,4.569,1144,4.39,1155,5.403,1601,4.611,2438,4.386,3944,5.08,3945,5.503,3946,6.295,3947,6.295,3948,6.295]],["t/4201",[9,1.425,12,5.563,14,2.254,27,0.894,28,3.824,88,6.559,123,1.626,178,3.654,225,2.552,226,2.983,227,1.752,404,4.465,425,6.559,443,4.992,625,6.724,656,5.969,748,6.376,1008,4.308,1233,4.223,1293,4.992,2955,7.213,3944,6.956,3949,8.619,3950,7.965,3951,7.965]],["t/4203",[1,0.942,2,1.841,3,2.624,9,1.216,22,0.931,26,0.854,27,0.909,28,2.17,29,3.006,31,2.17,32,3.334,33,2.734,34,2.989,39,2.429,55,4.093,84,2.59,86,2.926,99,2.611,121,1.145,160,2.479,161,2.946,181,1.553,189,1.63,198,2.752,201,2.892,209,2.194,215,1.687,216,1.998,223,5.702,227,0.994,229,1.971,231,2.445,239,3.088,267,5.283,275,1.781,303,1.98,337,4.349,392,1.938,408,3.351,418,2.479,431,2.805,435,2.833,437,4.218,462,1.224,482,3.074,570,1.263,656,2.68,662,2.064,668,2.281,671,2.703,707,3.246,833,5.229,841,2.497,887,4.26,1161,3.478,1204,3.107,1234,2.497,1574,3.195,1587,4.671,1591,3.722,1593,4.446,1772,4.276,1819,2.992,1963,3.412,2042,3.722,2104,3.722,2845,4.093,3826,4.52,3952,4.276,3953,4.52,3954,4.892,3955,4.276]],["t/4205",[9,1.617,21,3.189,22,1.39,27,0.599,29,2.483,37,3.425,81,2.393,84,2.096,104,2.362,111,4.386,156,5.299,157,1.487,161,3.676,162,3.649,163,2.73,169,2.831,204,3.932,206,3.051,253,4.615,278,4.918,285,2.658,312,2.429,319,3.346,339,2.699,362,6.109,492,4.519,532,3.81,549,4.001,570,1.884,801,5.299,954,4.413,1201,3.932,1204,4.636,1293,4.228,1327,5.555,1556,4.7,1574,6.388,1593,4.413,1656,6.953,1798,4.918,3343,6.746,3956,7.3,3957,7.3]],["t/4207",[0,1.672,9,1.508,27,0.749,29,3.102,34,3.202,46,3.02,84,1.954,99,2.423,102,3.494,124,3.201,190,3.944,215,3.145,223,4.528,265,6.62,266,6.94,323,3.867,435,5.282,447,5.04,656,4.996,1161,6.484,1999,5.578,2803,6.484]],["t/4209",[0,1.399,10,1.068,14,2.756,16,1.525,27,0.776,46,1.278,53,1.694,80,3.621,82,4.55,83,4.485,85,1.652,94,2.457,104,1.249,114,2.192,115,2.937,120,1.443,121,1.185,133,1.308,141,1.891,148,1.426,149,2.865,151,2.171,161,1.286,169,1.497,174,1.472,178,1.636,186,1.177,200,3.243,213,2.791,215,2.112,216,1.576,227,0.784,231,1.694,255,4.244,262,1.449,263,3.384,270,0.993,271,3.152,286,2.171,313,1.484,321,4.125,349,1.528,351,2.644,378,2.801,390,2.36,392,1.614,396,0.831,400,2.416,418,1.956,462,0.966,479,2.801,570,0.996,595,4.244,630,2.014,665,2.801,666,1.759,670,2.744,672,3.374,673,3.298,674,3.196,675,3.942,676,3.114,684,1.984,689,2.692,691,3.478,692,3.621,700,5.363,713,5.659,728,3.23,731,2.559,732,3.114,890,2.559,897,2.114,974,1.891,1203,2.389,1224,2.451,1275,6.992,1330,2.744,1362,2.644,1370,2.744,1584,3.374,1733,2.6,1736,2.079,1825,4.195,1843,4.659,2267,2.744,2304,2.451,2340,3.566,2341,7.625,2456,2.937,2536,2.36,2649,3.374,2679,3.566,2707,2.937,2972,2.801,3020,3.23,3035,3.566,3110,3.374,3231,2.744,3253,2.937,3334,2.937,3368,3.566,3503,3.23,3576,3.566,3580,3.566,3588,3.566,3706,3.23,3924,3.374,3958,3.566,3959,3.859,3960,3.859,3961,3.566,3962,3.566,3963,3.859,3964,3.859,3965,3.859,3966,3.859,3967,3.859,3968,3.859,3969,3.859,3970,3.859,3971,3.859,3972,3.859,3973,3.859,3974,3.859]],["t/4211",[2,2.687,3,3.968,27,0.881,84,2.301,85,3.605,120,1.985,140,4.209,178,3.57,225,2.493,226,2.914,227,1.711,231,2.329,232,6.132,285,3.066,385,3.998,406,1.779,458,4.395,725,4.395,736,2.225,3975,7.361]],["t/4213",[3,3.473,10,2.277,27,0.869,84,2.267,90,2.986,122,3.091,140,5.289,157,2.155,166,2.466,227,1.673,232,5.757,245,4.143,285,2.997,396,1.772,428,4.72,445,4.92,1641,6.643,1736,4.434,3017,4.329,3038,5.376,3975,9.25,3976,5.974,3977,5.974,3978,8.231,3979,7.195,3980,7.607,3981,7.195]],["t/4215",[3,3.595,10,2.163,27,0.937,60,2.072,84,2.594,90,2.837,121,1.593,122,2.936,157,2.324,166,2.343,178,3.316,184,2.795,212,3.348,232,5.322,233,4.902,245,3.936,396,1.684,428,4.485,445,4.675,458,5.955,707,3.451,860,5.358,1642,6.311,1643,6.311,1736,4.212,3017,4.113,3038,5.108,3982,6.311,3983,6.836]],["t/4217",[22,1.765,107,2.616,121,1.775,125,4.978,148,2.138,149,6.885,197,3.971,237,5.081,323,3.932,378,6.732,392,2.444,415,6.354,464,6.469,683,8.571,700,5.741,733,3.658,792,6.058,3785,7.058]],["t/4220",[0,0.741,4,2.842,10,1.384,16,1.862,22,0.952,24,2.958,27,0.411,33,1.298,34,2.541,53,2.197,60,1.982,86,2.476,107,1.411,120,1.179,121,1.801,122,1.879,125,4.901,133,1.696,134,4.624,137,2.592,157,1.524,162,2.501,166,1.499,178,2.121,231,2.069,236,2.958,237,2.741,238,2.163,239,2.101,241,2.789,254,3.221,258,2.815,259,1.329,262,3.732,271,2.072,275,1.822,313,1.924,382,2.197,385,2.375,444,3.06,447,4.133,482,2.091,495,2.898,556,2.927,568,4.038,570,1.291,578,3.631,579,3.268,582,3.097,595,2.789,601,1.569,612,3.37,623,3.557,667,3.268,691,2.842,692,2.958,733,1.973,734,3.765,786,3.06,792,4.885,868,2.467,892,4.187,895,2.991,896,2.451,1005,4.038,1232,5.692,1325,3.37,1338,3.49,1370,3.557,1434,4.17,1672,4.187,1736,2.695,1825,3.428,1954,3.268,1963,3.49,3042,3.37,3246,4.187,3367,4.624,3482,4.374,3517,4.624,3651,5.851,3785,3.807,3787,4.187,3809,4.374,3984,4.374,3985,5.003,3986,5.003,3987,5.003,3988,5.003,3989,5.003,3990,5.003,3991,4.624]],["t/4222",[16,1.893,27,0.624,53,3.338,86,2.517,99,2.02,102,4.311,120,1.792,123,1.435,178,3.224,196,4.83,231,2.78,235,2.414,239,3.193,258,4.278,262,2.855,632,3.391,699,5.122,700,6.22,733,3.963,744,6.728,763,5.645,773,6.136,789,3.801,904,3.939,1590,5.948,1869,5.948,1954,7.351,2304,4.829,3785,8.565,3992,7.604,3993,7.604,3994,7.604,3995,7.604,3996,7.604,3997,7.604,3998,7.604]],["t/4224",[107,2.806,121,1.852,123,1.877,196,4.781,243,4.667,337,5.882,662,4.197,793,5.882,879,5.651,880,5.199,1052,4.972]],["t/4226",[27,0.713,102,3.328,148,1.628,231,3.03,238,3.756,242,4.247,258,4.888,298,9.164,382,3.814,394,8.028,396,1.87,462,2.174,532,4.534,733,4.319,744,5.193,745,6.176,760,6.343,763,6.449,893,5.76,1963,6.059,2710,5.951,3785,8.333,3793,7.594,3999,8.687]],["t/4228",[27,0.898,258,6.155,733,4.314,4000,10.939]],["t/4230",[0,1.287,27,0.713,124,3.049,125,5.075,166,3.593,212,3.719,270,2.236,312,2.158,395,6.106,396,1.87,668,4.051,691,4.934,692,5.137,801,7.949,971,6.611,1093,5.378,1825,5.951,2645,7.594,2651,7.011,3577,8.028,3614,7.594,3809,7.594,4001,8.687]],["t/4232",[0,1.158,27,0.642,64,3.936,83,3.488,84,1.676,86,2.589,121,1.593,125,4.599,128,4.783,149,5.806,157,1.593,166,2.343,207,2.045,271,4.725,286,4.4,321,6.896,333,3.626,365,5.185,382,3.434,395,6.362,691,4.442,692,4.624,894,4.145,950,6.311,1126,5.268,1135,4.624,1808,5.806,1909,4.212,3226,4.624,3231,8.113,3241,6.544,3924,6.836,3958,7.227,3961,7.227]],["t/4234",[0,1.201,27,0.666,120,1.912,123,1.53,124,2.846,125,3.268,227,1.648,258,4.563,349,3.212,396,1.746,612,5.463,694,7.152,733,5.013,735,5.963,737,8.017,744,4.848,789,4.054,1671,7.31,2826,6.343,3790,7.089,4002,6.171,4003,8.109,4004,8.109]],["t/4236",[0,1.397,9,1.56,27,0.774,121,1.794,128,5.77,148,2.16,152,5.992,190,4.079,213,4.301,271,3.906,393,3.753,419,5.64,462,2.361,593,5.464,990,7.895,1317,8.247,2930,8.247,4005,9.434]],["t/4238",[0,1.828,14,2.152,20,4.675,24,4.867,27,0.676,107,2.322,121,1.281,148,1.543,153,4.471,162,4.114,163,3.078,170,4.398,171,3.927,178,4.486,213,5.331,242,3.192,262,3.973,283,3.956,357,4.675,419,4.92,658,4.434,1187,6.11,1317,9.25,1318,6.438,1319,9.779,1560,7.607,4006,8.231]],["t/4240",[19,4.159,22,1.279,27,0.551,85,2.877,86,3.061,121,2.058,123,1.744,125,5.265,133,2.278,143,3.853,159,3.931,168,4.018,190,2.905,216,3.776,243,4.958,249,5.422,259,1.643,262,2.523,282,4.455,374,3.152,569,5.623,607,5.623,692,3.973,725,3.507,734,3.382,840,3.713,850,5.623,851,4.388,868,6.084,873,6.71,890,4.455,1556,6.804,1683,4.777,1952,5.623,4007,6.719]],["t/4242",[0,1.184,1,2.35,2,3.055,3,2.373,16,1.99,27,0.852,46,2.646,120,1.884,124,2.805,176,4.831,178,3.388,207,2.09,396,1.72,403,4.831,406,2.437,407,5.844,686,5.154,789,5.764,790,6.081,791,7.535,1388,3.915,4008,7.385,4009,9.594,4010,8.378]],["t/4244",[2,2.282,3,2.708,27,0.749,120,3.163,124,3.963,209,4.09,227,2.294,318,5.514,406,2.591,686,4.528,736,2.41,790,8.591,4011,9.111]],["t/4246",[2,2.55,3,3.026,27,0.836,32,3.52,86,3.765,121,1.586,122,2.916,123,1.465,209,3.482,216,3.171,227,1.578,231,2.819,239,5.506,267,6.09,303,4.124,337,6.025,392,2.047,396,1.672,406,2.153,686,3.855,736,2.052,833,7.244,887,4.497,1587,4.932,1963,5.416,3258,5.231,3955,6.788]],["t/4248",[1,2.057,2,3.107,3,2.482,27,0.686,123,1.577,227,1.698,267,4.995,303,3.383,396,1.799,406,2.623,407,4.235,686,5.305,733,5.175,736,2.208,789,5.888,887,4.84,1532,5.725,2304,5.307,3789,6.993,4012,7.722]],["t/4250",[0,1.362,27,0.755,123,1.735,124,3.228,209,4.124,227,2.306,259,1.635,275,3.349,318,5.56,396,1.98,420,5.321,790,9.365,3121,9.92,4011,9.158,4013,9.197]],["t/4252",[0,1.78,2,1.549,3,1.838,10,3.204,12,3.159,23,1.479,27,0.716,32,2.805,34,1.755,56,3.93,80,3.659,86,2.89,103,3.255,106,2.451,107,1.745,123,2.072,124,2.172,139,3.984,142,3.699,181,1.965,193,4.511,196,2.975,200,2.637,201,5.162,209,2.775,227,1.258,239,5.187,251,2.516,334,4.709,340,5.218,393,3.472,396,1.332,406,1.308,407,3.137,411,3.255,412,4.892,551,4.169,557,3.785,686,3.072,733,2.44,917,3.182,1052,3.093,1126,4.169,1132,4.169,1193,6.48,1563,4.594,1954,4.042,2741,4.103,2778,4.492,3258,4.169,3852,5.41,4014,6.188]],["t/4255",[0,1.374,27,0.936,29,3.88,33,2.406,34,2.631,84,1.987,102,3.553,141,4.544,215,3.199,223,4.605,265,6.732,266,7.058,323,5.238,482,3.876,1236,6.732,1574,6.058,2042,7.058,3329,8.571]],["t/4257",[0,1.604,102,4.149,338,5.61,4015,10.831,4016,10.831]],["t/4259",[0,1.088,2,1.839,3,2.182,9,1.625,16,2.446,27,1.04,33,1.907,91,1.853,99,1.952,104,2.378,105,2.627,123,1.386,124,3.448,161,3.274,168,3.194,187,5.477,188,4.004,207,1.922,353,3.178,406,1.553,407,3.725,455,5.456,458,5.127,462,2.458,696,4.873,707,3.243,789,4.91,791,5.334,1881,5.126,2520,7.13,2535,7.13,2541,5.126,2575,5.225,3058,5.225,4017,7.349]],["t/4261",[9,1.662,10,2.103,16,1.893,23,2.243,27,0.624,59,1.784,60,2.015,91,2.534,97,1.888,99,2.67,161,2.534,188,2.577,231,2.103,312,1.888,339,2.811,456,5.122,458,5.874,462,1.903,553,3.038,635,3.41,815,2.133,912,3.968,1595,2.779,2439,3.75,2531,4.597,2575,8.513,2576,5.209,3063,7.647,3071,5.948,3083,5.948,3084,5.519,4018,7.027]],["t/4263",[23,2.206,27,0.58,59,2.244,60,1.872,91,2.413,97,1.755,161,2.355,169,2.74,188,2.395,231,1.954,259,1.256,269,2.81,270,1.819,312,2.376,339,2.612,356,3.07,458,4.993,523,2.751,815,1.982,817,4.222,867,5.719,912,4.993,962,3.086,1629,3.439,1636,3.837,1638,4.134,1846,5.376,2518,7.307,2520,6.944,2526,4.684,2531,5.783,2575,5.023,3063,5.376,3071,7.483,3083,5.526,3084,6.944,4019,6.529,4020,6.529,4021,6.529]],["t/4265",[16,1.499,23,2.237,27,0.89,59,1.412,60,2.268,91,1.518,97,1.495,99,1.599,161,2.006,188,2.901,227,1.739,229,2.425,231,1.665,259,1.521,269,2.394,270,1.549,312,1.495,356,3.72,458,5.662,523,3.333,630,3.141,815,1.688,817,4.788,912,3.141,962,3.739,1052,3.008,1063,2.191,1629,4.167,1636,4.649,1638,5.008,1846,4.58,2526,5.675,2531,5.174,2535,7.23,2541,4.198,2575,6.085,3063,6.513,3071,4.708,3083,6.695,3084,7.875,4019,5.562,4020,5.562,4021,5.562,4022,6.019,4023,6.019,4024,6.019]],["t/4267",[27,0.872,81,3.482,173,6.839,356,4.616,458,6.457,2605,9.285]],["t/4269",[23,2.257,27,0.642,33,2.029,59,1.834,60,2.072,91,2.581,97,1.942,99,2.078,105,2.795,123,1.475,124,2.745,161,2.607,353,3.382,434,2.078,455,5.806,456,5.268,458,4.081,461,5.676,462,2.562,571,3.02,635,3.507,815,2.194,1595,2.858,2439,3.857,2519,8.566,2521,6.544,2530,6.836,2531,4.728,2532,6.311,2534,6.544,2576,5.358,2603,6.311,2604,7.227,4025,7.82]],["t/4271",[9,1.61,10,2.006,16,2.424,23,2.22,27,0.595,33,1.881,59,1.701,60,1.921,91,1.829,97,1.801,161,3.245,188,3.3,227,1.474,231,2.006,269,2.884,270,1.867,285,2.64,312,2.418,400,2.302,455,5.383,456,4.885,458,3.785,462,1.815,553,2.897,635,3.252,815,2.034,826,4.885,912,3.785,1063,2.64,1595,2.65,2439,3.576,2531,4.384,2535,5.264,2541,7.667,2575,5.156,2576,4.968,3063,7.409,3071,5.672,3083,5.672,3084,5.264]],["t/4273",[0,1.074,9,1.199,27,0.799,30,2.767,102,2.778,120,1.709,124,2.545,141,3.553,147,2.199,148,1.359,157,1.983,194,4.243,207,1.896,225,2.147,226,2.51,227,1.474,239,4.089,242,2.812,270,1.867,303,2.935,396,1.561,400,2.302,406,2.057,407,3.676,452,4.159,481,4.97,490,5.187,527,3.306,630,3.785,673,3.906,686,6.59,733,3.84,789,3.625,1168,5.156,1399,5.518,1868,6.068,3503,6.068,4026,7.252,4027,6.702]],["t/4275",[0,0.697,1,0.905,2,1.177,3,1.397,9,1.427,10,3.23,16,2.149,23,2.364,104,1.522,121,0.732,157,1.454,166,2.139,182,4.228,184,3.084,204,2.533,207,1.23,259,2.075,270,1.211,271,4.289,312,2.393,403,5.824,462,1.787,490,4.547,549,1.706,550,3.98,686,3.544,805,2.381,807,2.454,808,2.448,816,3.679,817,2.076,818,5.432,820,5.584,876,2.781,1201,2.533,1423,2.554,1604,3.349,1881,3.28,2489,4.727,2490,4.811,2494,4.855,3467,3.344,4028,4.346,4029,4.703,4030,4.346,4031,4.703,4032,4.703,4033,4.703]],["t/4277",[0,1.397,28,4.186,46,3.816,124,3.311,210,4.816,265,6.848,266,7.179,428,5.41,490,4.452,656,5.168,686,5.723,722,6.58,1845,6.255,1868,7.895,2307,7.38,4034,11.527,4035,8.718]],["t/4279",[0,0.927,23,2.348,29,2.129,70,2.407,84,2.585,102,2.398,182,4.311,184,3.145,251,2.545,259,1.962,269,2.49,270,2.62,285,2.279,297,5.663,339,3.253,490,4.802,805,2.428,807,2.503,808,2.496,2489,4.82,2490,4.906,2494,4.951,2641,5.238,4036,7.96,4037,5.784,4038,5.471,4039,6.259,4040,6.259]],["t/4281",[0,1.607,1,1.917,2,2.142,10,2.368,14,1.574,22,1.146,27,0.818,32,2.728,34,2.428,46,2.834,86,1.993,93,4.908,99,1.599,102,3.279,124,3.004,139,3.875,181,2.717,209,2.699,236,3.559,241,3.356,251,2.447,259,1.07,344,5.769,385,2.858,393,2.394,398,3.598,399,3.991,401,4.279,406,1.809,409,4.198,410,5.59,411,6.028,412,6.058,413,4.468,443,5.769,462,2.142,553,2.404,789,3.008,893,3.991,917,4.401,974,2.949,1362,4.123,1949,4.198,1990,3.216,1999,3.681,2741,5.675,3238,3.486,3876,5.261,4041,6.019,4042,6.019,4043,5.562]],["t/4283",[1,1.672,2,2.174,10,3.03,26,1.517,27,0.899,34,2.464,99,2.308,120,2.048,181,2.758,200,3.701,225,2.572,226,3.006,411,4.569,412,5.297,481,6.122,482,3.631,917,4.467,974,4.256,1544,9.679,1949,6.059,2741,5.76,3011,5.852,3810,8.028]],["t/4285",[0,0.971,1,2.009,2,2.611,16,1.633,23,1.54,26,1.588,27,0.856,34,1.86,81,2.15,106,2.597,110,2.667,124,3.191,147,1.988,148,1.229,181,2.082,225,1.942,227,1.333,288,3.133,339,4.375,397,3.059,398,3.92,399,4.348,443,6.526,462,1.641,601,2.056,725,3.423,748,3.837,917,6.084,1108,4.011,1388,3.213,1949,4.574,2740,5.488,2741,7.47,2777,5.733,3012,6.061,3615,4.869,4044,6.558,4045,6.558,4046,6.558,4047,6.558,4048,6.558,4049,6.558,4050,6.558,4051,6.558,4052,6.558,4053,6.558,4054,6.558,4055,6.558]],["t/4287",[1,1.454,2,3.259,3,3.331,26,1.959,27,0.921,81,2.476,120,2.815,123,1.887,207,1.975,227,2.033,406,2.37,412,6.299,418,3.827,462,2.807,736,2.964,1179,7.612,1949,7.823]],["t/4289",[1,1.889,2,2.101,9,1.388,10,1.621,23,1.422,81,2.752,89,2.46,110,4.8,123,1.105,124,2.056,171,2.174,242,2.272,259,1.905,270,1.508,386,5.121,406,2.494,410,8.269,412,4.746,481,2.99,733,3.311,736,3.119,789,2.928,805,2.957,807,3.048,808,3.04,917,3.012,974,2.87,1072,6.389,1419,3.946,1544,4.727,2269,4.582,2741,3.884,4056,10.717,4057,5.858,4058,8.396,4059,5.858,4060,5.858,4061,5.858,4062,5.858,4063,5.858,4064,5.858,4065,5.858]],["t/4291",[0,1.362,34,2.609,100,4.8,120,2.168,181,3.603,198,5.175,200,3.918,209,4.124,225,2.723,226,3.183,241,5.128,411,5.968,412,5.953,481,4.695,917,4.729,1544,7.422,2687,7.422,2741,6.098,3011,6.196]],["t/4293",[0,0.697,2,1.177,3,1.397,6,2.384,26,0.821,27,0.791,33,3.102,34,3.704,35,3.414,39,4.284,46,1.557,50,3.579,51,3.028,89,1.975,110,3.917,123,0.887,124,1.651,180,3.028,181,2.74,227,1.451,242,1.824,288,2.247,396,1.012,406,0.994,409,3.28,411,3.755,412,3.453,441,3.579,545,3.028,570,1.214,588,2.622,593,2.724,623,7.365,660,1.93,736,1.243,757,2.335,885,3.168,1152,6.039,1156,3.795,1157,3.795,1159,7.221,1173,7.331,1224,2.987,1363,2.752,1666,3.795,1771,3.679,1799,5.974,1825,3.222,2264,3.679,2355,3.579,2356,3.936,2642,4.111,2742,4.346,2778,3.414,2882,4.346,3280,3.679,3984,4.111,4066,8.629,4067,7.139,4068,7.221,4069,3.936,4070,3.936,4071,5.974,4072,3.936,4073,3.936,4074,7.139,4075,4.703,4076,7.139,4077,8.629,4078,4.703,4079,4.703,4080,4.703,4081,7.139,4082,4.703,4083,4.703,4084,4.703,4085,4.703]],["t/4295",[1,1.802,2,1.713,9,1.765,12,4.779,23,1.808,27,0.986,34,1.941,53,3.005,99,1.818,106,3.708,110,2.783,130,3.925,133,2.32,141,3.354,147,2.075,181,2.173,197,2.93,227,1.391,235,2.173,255,3.816,270,1.762,349,2.711,397,3.192,398,4.092,399,4.538,411,6.319,412,3.311,437,3.925,469,5.796,623,4.866,696,4.538,1072,5.208,2305,5.524,2740,5.728,2777,8.184,4068,5.728,4069,5.728,4070,5.728,4071,5.728,4072,5.728,4073,5.728,4086,6.845,4087,6.845,4088,9.363,4089,6.845,4090,6.845]],["t/4297",[1,1.351,2,3.199,3,3.211,26,1.888,27,0.952,34,3.067,81,2.301,99,1.865,120,2.733,123,1.797,181,3.432,207,1.836,227,1.936,241,3.914,406,2.285,411,6.098,412,6.184,418,3.558,462,2.706,736,2.857,1179,7.248,2687,5.665]],["t/4299",[1,1.405,2,1.827,3,3.499,9,1.617,23,1.657,26,1.275,67,3.81,104,3.165,106,4.368,120,1.721,123,2.223,124,4.135,147,2.213,212,3.125,288,3.487,353,3.157,412,3.531,443,7.115,462,3.164,510,2.143,601,3.458,803,5.783,1594,5.419,1949,5.092,2819,5.19,4091,7.3,4092,7.3,4093,7.3]],["t/4301",[1,2.006,2,2.608,10,2.883,123,1.966,340,6.229,410,7.99,412,5.04,4094,9.108]],["t/4303",[10,2.727,93,5.653,110,4.008,123,1.86,184,3.523,241,5.496,410,7.731,601,3.091,658,5.31,785,6.439,1223,6.347,1544,7.956,1845,6.536,4094,8.617]],["t/4305",[1,1.538,2,2,9,1.322,10,2.872,23,1.354,93,5.953,123,1.508,340,4.777,406,1.689,412,5.021,540,6.883,805,3.368,807,2.953,808,2.945,2489,5.687,2916,5.574,3935,7.385,4094,10.08,4095,7.991,4096,7.991,4097,7.991,4098,7.991,4099,7.991,4100,7.991,4101,7.991,4102,7.991,4103,7.991,4104,7.385,4105,7.385]],["t/4307",[9,1.809,23,1.853,4104,10.109,4105,10.109]],["t/4309",[0,1.18,1,2.394,2,3.163,3,2.797,4,4.526,5,7.882,6,4.039,7,2.636,8,3.672,9,0.901,10,2.204,11,2.867,12,2.782,13,4.263,14,2.084,15,3.956,16,1.357,17,4.263,18,3.223,19,5.831,20,4.526,21,2.381,22,1.038,23,0.923,24,4.712,25,3.295,26,0.952,27,0.654,39,2.706,120,2.804,121,1.613,122,2.047,124,3.306,151,3.067,209,3.573,227,1.914,285,1.985,318,3.295,396,1.173,406,1.684,407,2.763,443,3.157,481,4.068,556,3.189,736,1.44,789,3.983,790,7.168,974,2.67,1224,3.462,1293,3.157,1327,4.148,1687,3.462,3121,4.765,4011,6.431]],["t/4311",[0,1.664,1,2.002,2,2.955,3,3.507,20,3.703,23,1.104,27,0.922,102,2.497,107,2.554,120,2.452,123,1.708,162,3.259,180,4.197,227,1.84,285,2.374,406,2.198,462,1.632,481,5.31,790,7.915,1722,7.082,1773,5.455,2078,8.87,2916,4.547,3413,5.261,4010,5.261,4011,7.306,4106,12.78,4107,6.519,4108,4.732,4109,6.519,4110,6.519]],["t/4313",[0,1.62,200,4.661,396,2.355,412,5.291]],["t/4316",[1,1.803,2,2.748,10,3.364,11,2.838,23,2.101,27,0.769,59,1.856,70,2.076,91,2.362,97,2.326,122,2.026,163,2.018,166,1.617,225,1.598,226,1.868,227,1.097,259,1.665,270,2.827,333,2.502,343,1.351,349,2.137,396,1.703,400,1.713,403,3.263,406,2.425,434,1.434,482,2.256,570,1.393,684,2.775,789,3.954,805,3.271,807,2.664,808,2.656,815,2.627,974,3.876,1124,4.221,1478,7.127,1802,3.338,1909,2.907,4111,4.987,4112,4.987,4113,4.987,4114,7.311,4115,7.911,4116,7.911,4117,4.516,4118,4.987]],["t/4318",[1,1.734,2,2.254,10,3.211,11,2.655,23,2.102,27,0.82,59,1.767,70,1.942,81,1.655,86,2.982,91,2.271,97,2.237,102,2.885,147,1.531,207,1.32,225,1.495,226,1.747,242,2.921,259,0.897,270,2.75,333,2.341,340,5.384,343,1.264,349,2,400,1.603,403,3.052,407,5.061,410,3.298,412,4.357,433,2.954,434,1.341,449,2.507,482,3.148,539,3.748,558,3.665,654,5.731,656,2.766,662,2.13,680,3.95,722,3.522,736,2.38,789,3.764,815,2.526,974,3.69,1008,2.524,1124,3.95,1160,2.868,1202,2.474,1216,4.075,1233,2.474,1777,4.414,1802,3.178,1990,2.698,2437,3.583,4111,4.666,4112,4.666,4113,4.666,4114,6.96,4118,4.666,4119,5.049,4120,5.049,4121,7.531]],["t/4320",[0,1.689,46,3.071,66,7.255,121,1.444,303,3.754,312,2.303,364,9.171,481,4.734,532,4.84,663,5.607,1423,6.71,1763,7.485,2652,8.463,4122,9.275,4123,9.275]],["t/4322",[2,1.827,9,1.617,10,2.019,27,0.599,51,4.7,81,3.206,86,2.417,121,1.522,125,4.445,143,4.186,157,2.246,166,2.93,196,3.509,200,4.167,238,4.229,242,2.831,326,3.81,364,5.419,372,5.001,385,3.466,396,1.572,406,1.543,428,4.186,434,2.598,481,3.726,490,4.615,717,5.846,805,3.043,1053,5.419,2355,5.555,2652,7.556,4124,7.3,4125,7.3,4126,6.746,4127,7.3,4128,7.3,4129,7.3]],["t/4324",[1,1.672,2,3.001,9,1.437,10,2.403,27,0.713,51,5.593,81,2.848,121,1.352,196,4.176,285,3.163,344,5.031,364,8.13,382,4.808,403,5.252,406,1.836,481,5.59,717,5.193,805,3.021,1160,4.934,1423,4.719,2651,7.011,4126,8.028,4130,8.687,4131,8.687]],["t/4326",[0,1.192,2,2.61,3,3.858,27,0.661,67,4.201,96,3.59,98,4.08,120,2.459,124,2.826,192,5.614,209,3.61,227,2.12,232,3.754,256,4.616,318,4.866,396,1.733,406,1.701,461,5.843,462,2.61,528,4.983,736,2.127,778,4.08,790,7.937,1678,6.126,1778,5.258,1989,5.515,2696,4.923,4011,8.418,4132,6.736]],["t/4328",[1,1.402,9,0.798,10,1.335,16,1.813,23,1.937,27,0.801,39,2.397,53,2.119,84,1.034,89,2.027,102,1.849,123,1.842,124,1.694,133,1.636,152,3.066,154,3.896,157,2.69,158,2.988,166,1.446,186,1.472,189,2.427,204,2.6,207,1.262,270,1.243,293,2.988,297,3.164,312,1.199,326,2.519,339,2.692,359,2.381,363,2.292,368,5.541,432,3.108,434,2.594,462,1.822,478,2.464,485,3.457,507,1.98,510,1.417,570,1.246,571,1.864,574,5.876,588,2.691,601,1.513,635,2.165,649,3.432,707,2.13,757,3.615,867,4.353,904,2.5,949,3.307,962,2.109,966,2.238,974,2.365,975,4.039,1035,2.188,1038,2.429,1056,2.098,1063,3.192,1589,4.039,1629,3.544,1656,3.432,1797,2.988,1982,4.507,2438,5.202,2439,3.591,2616,3.896,3340,4.461,4133,4.22,4134,4.827,4135,4.039,4136,4.461,4137,4.461,4138,4.461,4139,4.461,4140,4.827,4141,4.827,4142,4.827,4143,4.827,4144,4.827]],["t/4330",[1,1.898,2,2.467,3,3.767,27,0.809,94,3.955,147,2.989,215,3.4,269,3.921,326,5.145,462,2.467,565,4.928,1562,5.354,4145,9.858]],["t/4332",[0,1.267,2,2.14,3,3.536,9,1.414,94,3.431,120,2.016,123,2.046,148,2.231,193,3.814,215,2.949,239,4.553,257,3.626,303,3.462,396,1.841,411,4.498,545,5.506,733,3.373,1562,7.17,4146,7.903,4147,7.903,4148,7.903]],["t/4334",[0,1.247,2,2.687,3,2.501,9,1.393,14,2.202,27,0.97,123,2.026,227,2.182,269,3.349,303,3.409,335,5.521,396,1.813,406,1.779,407,4.268,733,5.071,876,4.979,887,4.877,1562,6.762,4149,9.386,4150,8.421]],["t/4336",[0,1.66,2,1.622,3,1.925,10,3.26,23,1.527,27,0.74,32,2.938,56,4.116,80,3.832,86,2.985,103,3.408,106,2.567,107,1.828,123,2.115,124,2.275,139,4.173,142,3.874,193,4.625,196,3.115,200,2.761,201,5.332,209,2.906,227,1.317,239,5.123,251,2.635,334,4.932,340,5.39,393,3.586,396,1.395,406,1.369,407,3.285,412,3.135,418,3.285,551,4.366,686,3.218,733,2.556,1052,3.239,1126,4.366,1132,4.366,1193,6.693,1562,6.088,1563,4.811,1954,4.233,2778,4.704,3258,4.366,3852,5.665]],["t/4338",[3,2.58,27,0.713,28,3.854,32,3.938,49,5.313,120,2.048,200,5.365,209,3.896,227,2.226,231,3.03,313,3.341,392,2.29,396,1.87,411,6.622,412,5.297,418,4.403,1363,6.408,1562,6.514]],["t/4341",[1,1.505,10,2.163,23,2.183,27,0.642,91,1.972,97,1.942,186,2.385,259,1.39,270,2.635,406,1.653,469,4.841,482,3.269,805,2.824,807,2.224,808,2.218,815,2.194,1423,4.248,1604,3.669,2639,6.836,4151,5.951,4152,6.836,4153,8.926,4154,6.544,4155,6.544,4156,7.82,4157,7.82,4158,7.82,4159,7.82,4160,5.454,4161,5.676,4162,6.544,4163,6.117,4164,6.117,4165,6.544,4166,7.227]],["t/4343",[1,1.434,10,2.061,23,2.095,27,0.611,59,1.747,84,1.596,91,1.878,97,1.85,259,1.324,270,2.552,406,1.574,469,4.611,805,2.735,807,2.119,808,2.113,815,2.089,817,3.287,962,3.254,1020,4.453,1022,3.83,1024,4.116,1026,3.649,1036,3.83,1109,5.407,1110,4.865,1255,4.153,1256,4.939,1629,3.626,1634,4.669,1635,5.103,2491,5.668,2504,5.53,4153,5.826,4160,5.195,4167,6.233,4168,7.449,4169,5.826,4170,5.018,4171,6.233,4172,5.103,4173,6.233,4174,5.53,4175,5.296,4176,5.826,4177,5.826]],["t/4345",[1,1.343,10,1.93,23,2.162,27,0.573,59,1.636,84,1.495,91,1.759,97,1.732,186,2.128,259,1.24,269,2.774,270,2.441,406,1.474,469,4.318,805,2.617,807,1.984,808,1.978,815,1.956,817,3.078,962,3.047,1020,4.17,1022,3.587,1024,3.854,1026,3.417,1036,3.587,1109,5.063,1110,4.556,1255,3.889,1256,4.625,1423,3.789,1604,3.272,1629,3.395,1634,4.372,1635,4.779,2491,5.308,2504,5.178,4153,5.456,4160,4.865,4163,5.456,4164,5.456,4169,5.456,4170,4.699,4171,5.837,4172,4.779,4173,5.837,4174,5.178,4175,4.959,4176,5.456,4177,7.419,4178,5.629,4179,6.446,4180,6.446]],["t/4347",[1,1.527,10,2.195,18,4.691,23,2.192,27,0.651,91,2.001,97,1.97,163,2.967,186,2.42,259,1.41,270,2.66,406,1.676,578,5.758,805,2.851,807,2.257,808,2.25,815,2.225,1423,4.309,1604,4.847,2821,6.935,4151,6.037,4152,6.935,4154,6.639,4155,6.639,4160,5.533,4161,5.758,4162,6.639,4163,6.206,4164,6.206,4165,6.639,4177,8.988,4181,7.332]],["t/4349",[0,1.475,27,0.918,28,3.327,31,3.327,87,6.233,92,4.344,94,3.009,102,3.814,148,1.405,157,2.028,168,3.259,207,1.961,225,2.221,226,2.595,227,1.524,406,1.585,485,5.654,691,4.26,906,4.301,953,4.181,1064,7.948,1101,7.228,1329,5.138,1559,5.444,2267,7.08,3053,6.276,3055,8.036,3537,5.866,4182,8.704,4183,8.333,4184,6.931,4185,8.704]],["t/4351",[0,1.63,2,2.191,3,2.6,9,1.448,16,2.18,27,0.719,29,3.744,107,3.104,120,2.594,227,1.78,283,4.209,406,1.85,485,5.715,691,4.973,778,5.578,780,5.899,1032,5.124,1203,5.421,4186,8.092,4187,8.092,4188,7.067,4189,7.328]],["t/4353",[0,1.631,2,2.193,3,1.848,9,1.029,16,1.55,27,0.833,28,2.761,29,2.981,67,3.248,102,3.886,107,2.472,120,2.736,123,1.654,207,1.627,225,1.843,226,2.154,227,2.238,239,3.68,283,2.991,303,3.548,406,1.852,485,5.874,733,3.456,778,6.103,780,4.192,1032,3.641,1064,7.83,1203,3.852,2616,5.022,3537,4.868,4182,7.661,4183,5.208,4184,5.751,4185,7.661,4186,5.751,4187,5.751,4188,5.022,4189,5.208,4190,8.614]],["t/4355",[1,1.387,2,1.803,3,2.139,27,0.962,102,2.76,107,2.032,121,1.121,123,1.359,157,2.231,166,2.158,171,2.674,215,2.484,219,3.946,259,1.28,283,3.463,290,5.229,292,3.302,293,4.46,339,4.05,462,1.803,485,5.98,587,3.913,616,4.575,622,5.229,690,4.705,778,3.651,948,5.025,1064,6.892,1202,3.53,1459,4.173,2006,6.029,4182,6.298,4185,8.474,4188,5.814,4189,6.029,4191,6.658,4192,6.298,4193,6.298,4194,7.204,4195,6.658,4196,6.658,4197,7.204]],["t/4358",[1,0.909,2,1.182,3,1.403,14,1.235,22,0.899,23,2.304,26,0.825,27,0.388,59,2.03,60,1.251,90,2.598,96,2.107,97,1.173,98,2.394,121,1.347,157,2.225,166,1.415,185,3.283,186,1.441,188,2.428,189,1.574,197,4.443,216,1.929,234,3.89,251,3.926,395,2.633,431,4.107,462,1.182,478,3.656,485,3.401,549,2.598,571,4.383,606,3.594,663,2.855,719,3.858,841,3.656,1052,2.361,1134,2.823,1729,5.602,2142,8.441,2178,5.994,2179,6.261,2181,6.261,2182,5.994,2187,6.619,2189,6.619,3135,3.952,4198,8.923,4199,9.656,4200,4.723,4201,4.723,4202,4.723,4203,4.723,4204,4.723,4205,4.723,4206,4.723,4207,7.162,4208,4.723,4209,4.723,4210,7.162,4211,4.723,4212,4.723,4213,4.723]],["t/4360",[22,1.579,50,8.091,84,2.806,121,1.655,174,3.164,185,3.802,196,3.986,227,1.685,231,2.294,248,4.957,312,2.06,339,3.066,485,5.877,549,4.49,550,4.624,689,5.784,1201,6.322,1206,5.134,1220,7.178]],["t/4363",[0,0.995,1,1.293,2,3.087,3,1.995,9,1.111,27,0.867,33,1.743,99,2.456,120,2.179,187,6.347,188,3.134,208,4.326,212,4.525,227,1.365,251,2.732,285,2.446,303,2.72,333,3.115,369,3.746,406,1.953,407,5.357,458,3.507,462,2.645,567,5.422,580,4.326,630,3.507,736,1.776,789,5.69,791,8.263,2417,5.723,2518,4.526,3058,6.572,4214,4.877,4215,4.877,4216,6.209,4217,8.543,4218,5.422,4219,6.209]],["t/4365",[2,2.209,3,3.285,27,0.908,86,4,99,2.939,102,3.381,356,3.836,407,4.474,449,4.382,617,6.905,789,4.412,791,6.407,1126,5.946,2417,7.479,3058,6.276,4214,6.407,4215,6.407,4218,7.124,4220,6.717,4221,8.157,4222,8.157]],["t/4367",[9,1.146,23,2.253,59,2.215,91,3.14,97,2.345,99,2.509,104,3.476,147,2.101,204,3.733,270,2.765,271,2.87,312,1.721,462,2.363,815,2.649,816,5.422,817,3.059,818,5.274,820,5.422,1026,5.651,1595,3.451,1631,5.8,2417,7.888,4214,6.854,4215,6.854,4218,5.594,4220,5.274,4223,6.931]],["t/4369",[9,1.723,121,1.622,187,5.809,188,3.532,204,5.613,556,6.097,3058,7.408,4214,7.563,4224,10.42]],["t/4371",[16,2.065,27,0.873,33,3.212,84,2.653,90,3.008,99,2.825,111,3.719,161,2.764,171,3.078,181,2.633,184,2.964,187,4.624,188,3.978,204,4.467,229,3.342,297,3.604,340,4.957,853,6.311,1223,5.34,2417,7.265,3160,6.94,4215,6.02,4218,6.693,4225,8.293]],["t/4373",[9,1.304,11,2.143,23,2.261,27,0.334,59,0.956,70,1.567,84,1.913,90,2.318,91,1.612,97,1.958,104,2.889,111,2.866,123,0.769,140,2.037,147,1.235,157,1.819,166,1.221,171,2.926,198,2.292,202,2.009,227,0.828,270,2.299,312,1.012,313,3.033,339,2.362,340,3.82,368,3.1,369,2.272,400,1.294,434,2.372,462,1.973,562,1.889,587,2.213,637,2.554,684,2.095,778,2.065,802,2.126,815,2.212,957,3.187,1020,2.435,1022,2.095,1024,2.251,1026,3.863,1063,2.327,1106,3.025,1111,3.025,1126,4.305,1249,2.554,1255,2.272,1256,2.701,1329,2.791,1595,2.882,1634,2.554,2417,4.881,2644,3.409,3058,2.897,3300,3.187,3543,2.842,3652,5.906,4170,2.745,4172,2.791,4214,8.087,4215,4.639,4220,4.863,4226,7.287,4227,4.074,4228,4.074,4229,4.074,4230,3.1,4231,4.074,4232,3.1,4233,4.074,4234,4.074,4235,4.074,4236,4.074,4237,4.074,4238,4.074,4239,3.561,4240,4.074,4241,4.074,4242,4.074,4243,4.074,4244,4.074,4245,4.074,4246,4.074,4247,4.074,4248,3.561,4249,4.074,4250,4.074,4251,4.074,4252,3.561,4253,4.074,4254,4.074,4255,4.074,4256,4.074,4257,4.074,4258,4.074,4259,4.074]],["t/4375",[11,1.61,16,0.762,23,2.299,27,0.251,33,1.317,59,2.119,60,2.652,84,0.656,90,1.841,91,2.413,97,1.878,99,1.348,104,0.991,105,2.702,123,1.226,157,1.324,161,1.692,171,1.136,188,4.213,198,1.723,212,2.173,227,1.536,231,0.847,259,0.902,270,2.326,312,2.081,313,1.178,333,3.014,353,3.269,356,2.825,360,1.851,368,2.33,369,1.707,400,0.972,417,3.315,434,2.008,456,3.419,458,3.392,462,2.261,523,1.976,531,1.756,635,1.373,815,2.12,817,3.699,867,1.831,962,2.217,1026,2.487,1036,2.61,1052,2.537,1063,2.753,1099,1.52,1126,3.419,1595,3.302,1629,2.471,1636,2.757,1638,2.97,1696,3.419,1802,1.292,2417,6.197,2439,1.51,2526,3.365,2531,5.461,2532,2.471,2533,2.471,2576,3.477,3026,2.136,3084,2.223,3300,2.395,4214,6.557,4215,4.717,4218,5.245,4220,2.33,4221,2.83,4260,5.075,4261,5.075,4262,3.062,4263,3.062,4264,3.062,4265,3.062,4266,3.062,4267,6.006,4268,3.062,4269,3.062,4270,3.062,4271,3.062]],["t/4377",[0,0.647,9,1.533,23,2.263,27,0.358,59,2.174,61,2.457,84,2.681,90,2.446,91,2.337,97,2.302,104,1.413,121,0.68,140,2.182,171,1.62,185,2.001,198,2.457,262,1.639,270,2.726,297,4.602,312,1.084,313,1.679,333,3.127,339,3.426,368,3.322,369,2.434,396,0.94,400,1.386,434,1.792,449,2.168,462,2.319,523,1.7,549,1.584,550,2.434,562,2.024,570,1.127,717,2.61,725,3.52,815,2.6,1026,3.304,1036,2.245,1065,3.415,1126,2.941,1592,3.654,1595,3.387,1601,2.279,1633,3.322,1696,4.543,1800,2.941,1801,3.045,2417,5.737,3058,4.795,3299,7.203,3300,3.415,4135,3.654,4214,7.272,4215,5.981,4220,5.132,4226,7.615,4272,4.366,4273,4.035,4274,4.366,4275,4.366,4276,3.817,4277,4.035,4278,4.035,4279,4.366,4280,4.366]],["t/4379",[9,1.683,11,3.292,23,2.143,27,0.514,38,3.49,59,2.064,84,2.823,91,2.219,97,2.185,121,0.974,125,2.522,140,3.129,185,4.034,203,4.088,270,2.842,312,1.554,333,4.08,339,2.314,400,1.987,434,1.663,462,2.202,798,4.45,815,2.468,954,3.784,1026,4.311,1223,7.979,1595,3.216,1688,3.975,2417,5.447,3058,4.45,3300,4.896,3301,7.692,4214,7.386,4215,6.387,4220,4.763,4281,6.259,4282,6.259]],["t/4381",[9,1.662,23,2.278,27,0.502,59,2.032,90,3.142,91,2.184,97,2.497,204,6.632,245,4.359,270,2.814,271,3.586,312,2.151,434,1.626,462,2.516,478,3.124,523,3.373,815,2.82,816,4.787,817,2.701,818,4.656,820,4.787,893,4.057,985,6.157,1063,2.228,1595,3.674,2417,6.223,3058,4.351,3134,9.289,3300,4.787,3467,4.351,4214,7.296,4215,6.286,4220,6.59,4283,6.119,4284,6.119]],["t/4383",[9,1.125,23,2.097,27,0.558,33,2.419,59,2.495,86,2.252,91,3.122,97,1.689,99,1.807,105,2.431,123,1.283,188,3.16,270,2.4,282,4.51,312,2.315,313,3.586,353,2.941,462,2.333,637,4.264,815,1.908,1026,4.568,1042,3.472,1595,3.407,1696,4.582,2417,7.992,4216,9.83,4217,8.616,4219,9.83,4267,6.286,4285,11.443]],["t/4385",[0,1.307,3,3.761,16,2.198,22,2.3,33,3.134,53,3.876,170,4.716,181,2.802,212,3.779,235,2.802,251,3.589,312,2.192,359,5.455,434,2.345,462,2.209,532,4.607,1063,4.611]],["t/4387",[27,0.616,34,1.072,51,2.433,60,1.001,84,2.004,90,1.371,92,2.189,96,1.686,98,1.916,99,1.004,100,1.973,110,1.537,122,1.419,123,0.713,157,2.649,166,1.804,168,1.643,184,1.351,188,1.281,190,1.634,206,1.58,225,1.119,226,1.308,227,0.768,231,1.046,244,2.636,259,2.204,297,3.721,312,0.939,339,3.684,363,1.794,434,1.004,440,2.589,452,2.167,458,1.973,485,1.794,507,4.888,549,2.723,562,1.752,570,1.554,571,1.46,588,2.107,668,1.763,684,3.097,720,1.988,778,3.052,802,3.918,803,2.235,1008,1.889,1020,3.6,1022,1.943,1024,2.089,1032,2.211,1039,4.706,1050,2.806,1056,4.716,1057,2.806,1063,1.376,1099,2.99,1189,4.833,1202,1.852,1203,2.34,1208,2.4,1230,2.806,1233,1.852,1234,1.929,1255,2.107,1256,2.506,1329,5.143,1604,4.017,1634,2.369,1797,6.718,1802,3.613,1803,3.882,1806,2.636,2186,2.369,2436,1.973,3022,4.591,3100,3.163,3237,3.304,3318,4.126,3481,3.163,3543,2.636,3581,3.304,3653,3.163,3934,3.163,4170,2.546,4172,2.589,4175,2.687,4230,2.876,4232,2.876,4286,3.304,4287,3.78]],["t/4389",[10,1.471,27,0.642,34,1.509,37,3.672,99,2.079,104,1.721,123,1.003,157,2.696,166,1.593,168,3.401,184,1.901,194,3.112,248,5.551,259,0.945,312,2.931,549,4.141,570,2.397,600,5.956,605,3.644,803,3.145,904,2.755,1024,2.939,1032,3.112,1039,4.906,1118,6.191,1132,3.583,1202,5.018,1208,4.971,1230,3.948,1233,3.835,1234,5.228,1255,2.965,1336,4.451,1797,3.292,1802,5.303,1803,2.411,1886,3.334,1909,2.865,3045,4.16,3323,6.602,3324,4.292,3331,4.451,4175,3.781,4288,4.915,4289,5.318,4290,4.915,4291,4.915,4292,9.464,4293,4.915,4294,5.318]],["t/4391",[23,1.682,27,0.491,34,2.817,53,3.743,60,2.631,123,1.609,147,1.815,157,2.33,161,1.995,166,2.554,184,3.047,188,3.668,227,2.325,259,1.765,297,3.705,312,1.487,339,2.213,396,1.835,434,2.638,455,6.329,456,5.744,458,4.45,507,3.498,570,2.201,635,4.853,834,3.752,1039,3.752,1056,3.705,1629,4.15,1797,5.278,1802,4.566,1803,3.865,2438,4.233,2439,4.205,2531,5.154,2541,5.947,2575,4.256,2576,5.841,4295,8.526]],["t/4393",[34,1.569,60,2.135,75,2.417,84,2.036,90,2.007,104,2.607,107,2.272,147,1.678,157,1.935,166,1.658,184,1.978,186,1.688,187,3.085,188,4.544,235,1.757,259,2.057,297,4.82,312,1.374,313,2.128,339,3.512,356,3.501,368,4.21,452,3.173,455,4.107,507,4.282,523,2.155,570,1.428,571,2.137,720,2.91,747,5.728,834,3.468,962,2.417,1056,4.129,1063,2.933,1134,3.307,1301,3.859,1458,5.576,1604,5.203,1629,2.693,1636,3.005,1638,3.237,1797,5.881,1802,3.399,1803,3.652,1804,5.728,2438,2.747,2520,4.016,2526,3.669,2531,3.345]],["t/4395",[18,3.288,23,1.614,27,0.456,34,1.577,60,2.142,69,5.781,84,1.733,90,2.017,157,2.438,166,1.666,184,1.988,211,4.945,225,1.647,226,1.925,227,1.13,231,1.538,244,3.879,259,1.975,312,1.381,339,2.056,426,4.488,507,3.318,570,1.435,720,2.925,778,4.098,779,5.519,793,4.781,802,4.973,1008,2.78,1022,2.859,1032,6.121,1033,2.995,1039,5.069,1056,2.417,1057,4.128,1065,4.35,1099,2.761,1199,3.746,1234,2.839,1329,6.528,1797,7.179,1803,5.257,1989,3.81,3318,3.81,3349,4.861,3543,3.879,4192,4.861,4193,4.861,4296,4.861,4297,7.069,4298,7.069,4299,7.069,4300,5.561,4301,5.561,4302,4.861,4303,5.561,4304,4.861]],["t/4397",[23,0.786,27,0.845,34,2.005,46,2.341,60,2.268,69,5.289,84,2.647,91,1.171,99,1.234,124,1.63,133,1.574,161,2.356,166,1.391,168,2.018,184,2.527,199,6.05,227,1.945,259,2.005,312,1.153,333,2.153,339,2.614,431,2.663,476,2.807,507,4.226,510,1.363,549,3.736,550,2.589,562,2.153,563,3.128,570,2.21,601,1.456,668,3.297,717,2.776,720,3.718,729,1.871,826,3.128,849,3.886,1056,3.721,1201,2.501,1202,3.464,1203,4.377,1233,3.464,1234,5.258,1301,4.931,1593,2.807,1601,2.423,1604,2.178,1797,6.984,1798,3.128,1799,7.165,1800,4.763,1801,4.931,1802,1.959,1803,3.205,1886,2.911,2101,5.38,2285,3.301,3294,7.724,3298,4.059,3303,3.747,3307,4.059,3310,3.632,3316,3.886,3317,3.886,3318,3.181]],["t/4399",[34,3.603,104,2.88,184,3.18,312,2.21,339,4.483,432,5.729,570,2.869,633,4.961,637,5.578,729,4.48,904,4.609,994,5.729,1063,3.24,1118,5.379,1604,4.175,1765,7.779,2536,5.442,3812,7.779,4305,8.223,4306,7.779]],["t/4401",[14,1.447,34,1.569,69,3.057,84,1.186,110,2.25,133,2.731,147,1.678,161,1.844,168,3.501,169,2.146,178,2.346,184,1.978,188,1.876,194,3.237,232,2.58,262,3.025,269,4.753,292,5.085,312,2.001,369,3.085,374,3.779,427,4.21,449,2.747,507,3.305,510,2.789,544,3.307,549,3.786,556,3.237,570,1.428,625,5.346,640,3.791,671,3.057,674,4.205,693,3.384,707,2.442,729,3.247,900,3.562,948,3.859,954,3.345,966,2.565,1042,2.824,1056,3.501,1063,2.933,1152,3.468,1199,3.727,1200,4.21,1376,5.187,1434,4.492,1688,3.514,1802,4.68,1803,4.731,1843,4.21,1983,3.791,1990,4.304,2126,3.562,2626,4.63,2781,5.981,3727,4.328,4307,4.21,4308,4.837,4309,4.107,4310,4.328,4311,5.533,4312,5.113]],["t/4403",[27,0.681,34,2.352,84,2.515,184,2.964,188,2.811,202,4.09,269,3.299,312,2.641,313,3.19,377,5.775,507,3.403,510,2.434,515,7.25,523,3.229,549,3.857,570,2.14,637,5.199,1036,4.264,1037,5.784,1063,3.02,1802,4.487,1803,3.76,2436,4.328,4313,7.25,4314,7.664,4315,7.664,4316,7.25,4317,7.664,4318,6.487,4319,6.487]],["t/4405",[23,1.742,34,2.234,60,2.725,104,3.328,107,2.222,157,2.095,166,3.081,184,2.815,227,1.601,232,6.024,283,3.786,434,2.732,456,5.306,476,4.762,510,3.563,570,2.033,662,3.323,1135,4.657,1478,5.994,1664,7.279,1797,4.876,1803,3.571,2438,5.106,2576,5.396,3982,6.356,4320,7.279,4321,7.877,4322,7.279]],["t/4407",[23,0.661,27,0.78,33,1.012,34,1.751,46,2.044,60,2.031,69,4.816,84,2.767,90,1.415,91,1.557,99,1.036,124,1.369,133,1.322,157,1.775,161,2.058,164,2.282,166,1.85,168,1.695,184,2.207,199,5.632,227,1.771,235,1.96,259,1.95,297,3.331,312,0.969,333,1.809,339,2.833,397,1.819,431,2.237,476,2.358,507,4.145,510,1.145,549,3.445,550,2.175,562,1.809,563,2.628,570,1.978,601,1.223,626,3.41,668,2.88,717,2.332,720,3.247,729,1.572,826,2.628,849,3.264,962,1.704,1014,2.358,1056,3.788,1134,2.332,1201,2.101,1202,3.025,1203,3.822,1233,3.025,1234,4.848,1301,4.307,1458,2.084,1593,2.358,1601,2.036,1604,4.089,1629,1.899,1638,2.282,1688,2.477,1699,3.41,1797,7.165,1798,2.628,1799,6.414,1800,4.16,1801,4.307,1802,1.646,1803,3.475,1804,2.773,1886,2.445,2101,4.699,2285,2.773,3294,7.034,3303,3.148,3307,3.41,3310,3.051,3316,3.264,3317,3.264,3318,2.672,4133,3.41,4323,3.604]],["t/4409",[23,0.64,27,0.858,29,1.286,30,2.298,34,1.708,46,2.835,53,2.644,60,1.989,65,4.041,69,4.732,84,2.24,123,1.416,124,1.327,138,2.167,161,2.007,184,1.351,196,4.116,199,5.828,227,0.768,242,1.466,248,2.259,259,1.771,269,1.503,285,1.376,313,1.454,333,1.752,339,2.226,359,1.864,384,4.2,396,0.814,434,2.883,462,1.507,489,2.4,507,2.471,523,1.472,532,3.143,549,3.936,550,2.107,561,3.454,570,2.21,571,1.46,601,1.888,668,3.501,690,2.468,720,3.167,725,3.143,729,1.523,826,2.546,872,2.636,1063,1.376,1134,3.6,1201,2.036,1202,3.678,1203,4.647,1208,3.825,1231,4.282,1233,2.951,1234,5.086,1301,4.2,1327,2.876,1593,2.285,1601,3.143,1626,4.126,1655,5.04,1656,4.282,1797,6.168,1802,2.541,1803,4.517,1886,2.369,2101,5.713,2285,2.687,2438,1.876,3011,2.546,3294,6.058,3304,3.493,3310,2.956,3311,3.304,3316,5.04,3317,5.04,3318,2.589,3323,5.337,3324,4.86,4324,3.78,4325,3.304,4326,3.78]],["t/4411",[16,1,27,0.518,29,1.365,34,1.792,37,1.883,60,2.347,84,2.761,99,1.067,104,1.299,110,1.632,120,0.946,124,1.409,157,1.962,158,2.485,161,2.952,166,1.203,184,3.655,188,2.647,199,2.238,206,1.678,207,1.05,212,1.719,215,1.384,235,2.006,259,1.902,312,0.997,333,1.861,339,2.335,377,2.181,431,3.623,440,2.75,452,2.302,457,2.854,458,2.095,470,2.238,482,1.678,497,3.055,507,4.39,510,2.292,535,2.374,549,2.833,561,2.302,570,2.286,601,1.259,630,2.095,637,3.96,662,1.694,705,2.914,720,4.107,808,1.139,817,1.772,851,2.622,895,2.4,951,2.485,962,1.754,994,2.585,1026,1.967,1033,3.403,1041,2.662,1056,3.394,1063,2.3,1189,4.067,1202,1.967,1204,2.55,1234,2.049,1255,2.238,1274,3.71,1294,2.75,1423,3.431,1433,3.863,1434,3.522,1458,2.145,1604,2.963,1625,3.24,1626,2.75,1629,1.954,1632,3.36,1634,2.517,1636,2.181,1638,2.349,1639,3.509,1696,2.704,1700,2.914,1797,6.624,1802,2.665,1803,1.82,1804,2.854,1806,2.8,1807,3.36,1808,2.98,2098,3.71,2997,3.71,3303,3.24,3318,2.75,3323,2.854,4327,3.509,4328,4.015,4329,4.015,4330,4.015,4331,4.015]],["t/4413",[10,2.26,34,2.317,59,1.916,84,2.257,138,4.685,157,1.664,161,2.723,169,3.168,184,2.92,206,3.415,232,3.81,259,1.452,270,2.103,284,5.871,285,2.975,312,2.029,339,3.02,507,3.352,570,2.109,571,3.155,601,3.302,625,4.597,851,5.336,951,5.057,1056,3.551,1063,3.834,1388,4.003,1636,4.437,1641,6.593,1802,3.447,2436,4.264,3048,6.593,3976,5.93,3977,5.93]],["t/4415",[0,1.759,7,3.603,14,1.948,22,2.121,27,0.814,33,2.89,34,2.113,53,3.27,107,2.101,121,1.159,170,3.98,181,2.365,207,1.948,210,3.802,212,3.189,225,2.206,226,2.578,227,2.014,235,2.365,343,1.864,359,5.494,527,3.395,532,3.887,748,7.714,1819,4.556,1840,5.826,1841,6.233,1842,5.668,1843,5.668,1844,6.011,1845,4.939,1846,5.668,1847,6.233]],["t/4417",[46,3.622,138,6.273,157,2.228,895,6.539]],["t/4419",[0,1.167,9,0.888,11,4.912,23,1.582,26,1.797,27,0.647,28,2.383,30,2.049,46,1.778,83,2.395,90,1.948,104,1.738,107,3.231,111,2.408,120,2.426,123,2.067,157,2.658,162,2.684,186,3.343,197,5.069,207,1.404,225,1.59,284,2.994,343,1.344,349,2.127,396,1.156,571,2.074,622,7.469,746,6.822,747,3.818,759,3.176,789,2.684,1027,3.366,1069,3.247,1118,5.646,1127,3.818,1299,7.508,1458,4.212,3876,4.695,4332,7.285,4333,5.371,4334,4.963,4335,4.963,4336,7.883,4337,5.371,4338,5.371,4339,6.891,4340,5.371,4341,5.371]],["t/4421",[0,1.405,6,3.535,9,1.154,14,1.824,22,1.805,23,1.606,26,1.882,31,3.095,90,3.44,107,3.262,123,1.316,157,2.645,189,2.325,225,2.065,245,3.511,259,1.24,292,3.197,343,1.746,396,2.32,434,1.853,513,3.962,571,2.694,729,2.811,746,7.667,872,4.865,1069,6.514,1118,4.217,1127,4.959,3520,4.779,4332,8.765,4334,6.446,4335,6.446,4339,8.291,4342,6.975,4343,6.975,4344,6.975]],["t/4423",[46,3.658,138,6.336,374,5.183]],["t/4425",[0,1.283,3,2.572,9,1.012,14,1.6,23,1.467,26,1.069,27,0.711,81,2.006,83,2.729,107,2.443,110,4.69,120,1.442,121,0.952,147,1.855,157,2.047,188,4.174,207,1.6,225,1.812,226,2.118,227,1.244,229,2.466,231,1.693,235,1.943,259,1.088,269,2.434,343,1.531,374,4.063,390,3.743,490,2.888,523,2.383,649,4.351,746,5.742,761,4.122,867,3.658,1458,6.163,1733,4.122,1806,8.353,2536,7.531,3059,5.349,3295,4.442,3520,4.192,3848,5.121,4345,8.661,4346,6.119,4347,6.119,4348,6.119,4349,8.004]],["t/4427",[46,3.622,138,6.273,895,6.539,917,5.625]],["t/4429",[0,1.681,1,1.77,2,2.302,3,2.731,9,1.521,26,1.606,104,2.976,110,3.739,339,4.751,343,2.302,412,4.449,917,6.607,1428,6.676,1949,6.415,4350,9.197,4351,9.197]],["t/4431",[0,1.276,26,1.505,27,0.707,33,2.236,34,3.673,46,2.854,60,2.284,107,2.431,110,3.504,121,1.954,138,4.943,171,3.199,181,3.794,209,3.865,216,3.52,225,2.552,227,1.752,259,1.532,420,3.569,637,5.403,895,5.152,1222,7.534]],["t/4433",[0,1.458,9,1.394,23,1.667,26,2.065,27,0.808,33,2.949,34,3.693,121,1.769,123,1.111,181,3.609,212,2.521,227,1.713,259,1.909,319,2.7,343,1.474,396,1.268,420,3.49,444,3.602,660,2.416,928,3.172,1069,5.95,1153,4.928,1154,8.236,1155,5.154,1156,6.801,1157,8.67,1159,4.928,1388,5.263,1916,7.053,2259,3.905,4352,8.428,4353,5.443,4354,7.788,4355,7.788,4356,5.889]],["t/4435",[0,1.453,9,1.388,23,1.662,26,2.062,27,0.805,33,2.943,34,3.591,60,3.006,121,1.766,123,1.105,181,3.115,212,2.508,227,1.706,259,1.905,319,2.685,343,1.466,396,1.261,420,3.476,444,3.583,660,2.403,928,3.155,1069,5.932,1153,4.902,1154,8.211,1155,5.135,1156,6.775,1157,8.649,1159,4.902,1388,5.251,1916,7.026,2259,3.884,4353,5.413,4354,7.759,4355,7.759,4357,8.396,4358,5.858]],["t/4437",[0,1.375,2,2.994,9,1.118,14,2.772,16,1.683,23,2.093,28,2.999,30,2.579,78,3.153,94,2.712,110,2.749,114,3.84,188,2.292,193,4.141,201,3.997,215,2.331,225,2.749,226,2.34,227,1.374,239,4.793,259,1.884,281,4.806,343,1.692,406,2.528,420,2.799,656,3.703,707,2.984,733,2.666,872,4.715,1160,5.273,3820,5.144,4359,10.547,4360,5.91,4361,5.019,4362,4.907,4363,6.76,4364,5.91,4365,6.247,4366,6.76]],["t/4439",[46,3.622,138,6.273,729,4.408,895,6.539]],["t/4441",[0,1.689,14,2.425,168,4.031,242,3.597,343,2.321,535,5.484,563,6.248,631,3.932,634,6.248,729,3.738,748,5.427,759,5.484,1400,8.68,1433,6.976,2702,8.108,3475,7.761,4367,9.275,4368,9.275,4369,8.571]],["t/4443",[0,1.823,9,1.351,14,2.136,26,2.15,27,0.671,103,4.297,107,2.304,123,1.541,148,1.531,242,3.168,343,2.045,420,4.361,563,5.504,729,4.696,748,4.78,764,3.305,909,5.226,1008,4.084,1232,6.217,1433,7.127,3475,6.837,3618,6.39,4369,7.55]],["t/4445",[0,0.915,9,1.021,23,2.422,26,1.659,27,0.32,34,1.751,59,1.448,111,1.749,343,0.976,420,1.615,538,6.921,570,1.007,571,3.901,662,1.646,664,5.167,670,5.449,675,3.976,684,3.941,692,2.306,693,2.385,729,2.488,759,2.306,764,1.106,909,3.437,1388,1.911,1931,4.482,2981,3.604,3029,3.051,3269,3.604,3318,4.23,3323,2.773,3492,10.791,3618,3.051,3771,5.167,3773,3.604,4370,5.706,4371,3.9,4372,3.9,4373,3.9,4374,3.9,4375,6.175,4376,6.175,4377,6.175,4378,3.9,4379,3.9,4380,6.175,4381,6.175,4382,3.9,4383,3.9,4384,3.9,4385,3.9,4386,3.9,4387,6.175,4388,3.604,4389,3.9,4390,3.9,4391,3.9,4392,3.9]],["t/4447",[0,1.492,9,1.543,16,1.1,18,4.025,26,1.936,27,0.559,34,1.253,46,1.463,104,1.43,111,3.723,120,1.042,123,1.284,138,2.534,148,1.276,157,1.691,166,2.039,169,1.714,188,4.136,231,1.222,259,0.785,278,2.977,286,2.486,323,1.873,343,1.703,356,1.92,363,3.232,369,2.464,396,0.951,420,2.819,431,2.534,603,5.639,659,3.362,662,1.864,666,5.054,670,3.142,729,4.06,759,2.613,795,3.082,895,2.641,909,4.971,966,3.85,1052,2.209,1134,2.641,1135,7.216,1325,4.585,1388,2.165,3017,4.905,3022,7.463,3025,7.673,3038,2.886,3238,2.559,3279,7.527,3618,6.494,3753,6.29,3771,3.698,4135,5.696,4370,4.084,4388,4.084,4393,4.419,4394,4.419,4395,4.419,4396,4.419,4397,4.419]],["t/4449",[0,1.678,6,3.908,9,1.677,26,2.103,83,3.439,123,1.455,148,1.445,184,2.756,186,3.672,196,5.447,227,2.061,259,1.37,319,3.535,343,2.836,420,3.193,447,5.604,588,4.299,783,4.964,909,5.609,1467,6.031,1674,5.482,1889,6.222,1948,6.452,3615,5.724,3618,6.031,4312,7.125,4398,7.71]],["t/4451",[0,1.247,16,2.097,39,5.331,56,5.348,60,2.231,85,3.605,137,4.362,215,2.904,242,3.265,246,6.587,261,6.098,277,5.987,346,6.587,350,6.408,357,4.783,403,5.09,457,5.987,495,4.877,573,3.424,639,7.361,873,6.112,892,7.047,954,5.09,1374,5.213,1758,6.796,1808,6.251,1886,5.278,4399,8.421,4400,10.737,4401,8.421,4402,8.421]],["t/4453",[28,4.08,102,3.523,104,2.976,207,2.405,227,2.501,232,5.292,257,3.899,359,5.596,527,4.192,625,5.175,656,5.038,660,4.656,707,4.059,748,5.381,1155,5.625,4403,8.499,4404,9.197,4405,9.197]],["t/4456",[9,1.66,12,6.109,231,2.777,269,4.76,343,2.512,377,5.452,465,7.137,624,6.762,1166,6.556,3950,9.277,4406,10.038]],["t/4458",[9,1.602,32,4.39,37,4.543,111,4.343,166,2.901,343,2.424,396,2.085,549,3.513,567,7.815,625,5.449,719,5.216,974,4.745,1033,5.216,2680,7.815,4407,9.684,4408,9.684,4409,9.684]],["t/4460",[9,1.56,29,3.209,199,5.26,231,2.61,248,5.64,343,2.361,396,2.031,549,4.181,570,2.975,571,3.643,582,5.84,1134,5.64,1201,5.082,1234,4.816,1239,8.247,4410,8.718,4411,9.434,4412,7.895]],["t/4462",[9,1.574,27,0.781,28,4.222,29,4.25,123,2.186,189,3.172,206,3.977,231,2.633,257,4.035,343,2.381,476,5.753,491,5.405,3295,6.907,3952,8.318,4413,9.516,4414,9.516]],["t/4464",[9,1.691,29,4.115,123,1.929,242,3.965,257,4.335,343,2.559,476,6.182,3952,8.939,4415,10.226,4416,10.226]],["t/4466",[9,1.63,84,2.112,228,5.893,259,2.104,285,3.589,312,2.448,343,2.467,433,5.768,895,5.893,1099,4.894,1983,6.754,4417,9.858,4418,9.858,4419,9.858]],["t/4468",[9,1.534,29,3.155,37,4.351,69,5.125,84,1.987,343,2.321,374,4.351,490,4.377,549,3.364,570,2.944,673,4.996,1033,6.144,1199,6.248,1234,4.734,1239,8.108,1593,5.607,1722,7.255,4420,9.275,4421,9.275,4422,9.275]],["t/4470",[1,2.48,46,3.386,225,3.028,232,5.642,343,2.559,374,5.676,927,7.998]],["t/4472",[1,2.329,206,4.274,269,4.067,343,2.559,491,5.808,808,2.9,995,7.684,1388,5.01,4423,8.939]],["t/4474",[1,1.659,120,2.032,147,2.613,200,5.091,231,3.015,232,5.573,343,2.157,374,4.043,396,1.856,673,4.643,674,6.904,687,5.152,927,6.742,1388,5.339,1397,5.549,2879,7.965,4403,7.965,4424,10.07,4425,8.619]],["t/4476",[120,2.746,147,2.91,200,4.09,231,3.223,232,5.433,343,2.402,374,4.503,396,2.067,1376,7.5,4426,11.649,4427,11.649,4428,9.599]],["t/4478",[120,2.731,147,2.885,200,4.054,231,3.206,232,5.404,259,2.059,312,2.878,343,2.381,374,4.464,396,2.049,4429,11.588,4430,11.588]],["t/4480",[27,0.788,28,4.259,104,3.106,120,2.263,200,4.09,231,3.223,259,1.706,343,2.402,349,4.967,1388,4.703,4108,6.968,4423,8.391,4431,11.649,4432,9.599]],["t/4482",[0,1.362,9,1.521,26,1.606,27,0.931,29,3.128,189,3.782,190,3.977,206,3.844,231,2.544,343,2.302,382,4.038,625,5.175,674,4.8,927,7.194,961,4.995,995,5.841,1101,6.676,4108,6.676,4433,9.197,4434,9.197,4435,9.197]],["t/4484",[9,1.574,22,2.206,25,5.753,26,1.662,27,0.781,143,6.645,189,3.862,227,1.934,343,2.381,570,2.456,625,5.354,1869,9.064,4108,6.907,4436,9.516,4437,9.516]],["t/4486",[9,1.588,27,0.788,161,3.199,166,2.876,168,4.172,178,4.07,343,2.402,349,4.614,374,4.503,396,2.067,571,3.707,625,5.401,1435,8.871,2151,7.747,3937,8.871,4438,9.599,4439,9.599]],["t/4488",[104,3.219,120,3.002,232,4.639,343,2.489,374,4.667,396,2.142,1433,7.789,1434,7.101]],["t/4490",[9,1.707,18,6.103,22,1.965,212,4.419,231,2.855,304,6.17,343,2.583,4108,7.492,4440,10.322,4441,10.322]],["t/4492",[0,1.067,9,1.191,14,1.884,27,0.962,34,3.107,46,3.209,84,1.544,90,2.613,94,2.891,121,1.121,157,1.974,166,2.158,179,7.376,189,3.231,206,4.052,231,1.993,248,4.306,259,1.28,269,3.856,285,3.529,292,3.302,343,1.803,396,1.551,408,4.935,420,2.983,491,6.222,551,4.853,570,2.828,625,4.054,670,5.122,674,3.76,705,5.229,729,2.903,851,4.705,1892,5.229,2304,4.575,2343,5.814,4108,5.229,4442,7.204,4443,6.658]],["t/4494",[9,1.63,34,2.796,123,1.86,164,5.768,231,2.727,259,2.104,343,2.467,570,2.544,670,7.009,692,5.829,729,3.973,759,5.829,4360,8.617,4444,9.858]],["t/4496",[9,1.472,12,5.675,18,5.262,27,0.73,34,2.524,123,1.679,157,2.47,166,2.666,206,3.719,216,3.634,231,2.462,343,2.227,491,5.054,570,2.297,572,5.812,625,5.007,670,6.327,729,3.586,872,7.754,4108,8.07,4445,8.899,4446,8.899]],["t/4498",[178,4.46,213,5.944,343,2.633,662,4.439,717,6.288,927,8.229]],["t/4500",[12,5.22,16,2.546,27,0.839,28,4.537,88,7.781,209,4.585,443,5.922,748,5.983,1233,5.01,1293,5.922,3951,9.45]],["t/4502",[6,2.502,9,1.469,12,5.88,14,1.291,26,1.552,27,0.868,28,2.19,30,1.883,104,1.597,122,1.853,123,0.931,133,1.673,147,2.694,186,3.388,225,2.631,226,3.417,227,1.003,235,2.821,262,1.853,343,1.235,359,2.434,361,6.197,425,3.756,433,2.888,489,3.135,565,4.441,625,4.166,632,3.302,651,3.983,656,2.704,693,3.019,747,6.317,788,3.861,894,2.616,928,2.659,1063,1.797,1104,3.509,1125,6.196,1155,4.528,1601,3.864,1889,3.983,3446,5.791,3727,6.95,3772,4.13,3944,7.171,3945,4.314,4447,4.936,4448,7.404,4449,7.404,4450,7.404,4451,7.404,4452,7.404,4453,7.404,4454,7.404,4455,7.404,4456,7.404,4457,7.404,4458,9.873,4459,7.404,4460,9.873,4461,7.404,4462,7.404,4463,4.936]],["t/4504",[1,2.37,9,1.682,14,2.408,23,1.312,27,0.835,28,5.636,30,2,102,2.008,122,1.968,123,0.989,133,2.625,147,1.589,206,5.235,225,2.727,226,1.814,227,1.574,231,2.142,262,1.968,269,3.08,284,2.923,293,3.245,359,2.585,433,3.067,495,3.036,601,2.428,625,4.357,632,4.536,651,6.249,656,2.872,717,3.134,747,5.506,788,6.057,844,2.715,894,2.779,897,2.872,1063,2.819,1155,5.632,1388,2.568,1601,4.041,1819,4.736,3515,4.844,3938,4.844,3944,7.431,3945,6.769,4010,4.231,4108,5.621,4423,4.582,4424,4.844,4464,5.242,4465,5.242,4466,5.242,4467,9.208]],["t/4506",[28,5.196,30,3.695,53,4.252,111,4.343,122,3.636,178,4.106,206,4.048,262,3.636,269,3.852,359,4.776,656,5.305,748,5.666,953,6.529,2707,7.369,4108,7.029]],["t/4508",[3,3.154,16,2.645,312,2.638,434,2.822,462,2.658,1063,3.867,1562,5.769]],["t/4510",[27,0.386,34,1.334,84,2.064,99,1.249,122,1.766,147,1.426,157,2.559,166,1.409,168,2.044,184,1.681,188,1.594,206,1.966,215,1.622,235,1.493,259,2.125,269,1.871,288,2.247,312,1.168,339,2.639,363,2.233,434,1.249,440,4.891,441,7.882,452,2.697,458,2.454,470,2.622,507,4.79,549,3.13,570,1.214,571,1.816,601,1.475,668,2.193,720,2.473,802,2.454,803,2.781,895,2.811,962,2.054,966,2.181,1020,4.268,1022,2.418,1024,2.599,1034,3.579,1039,2.948,1050,3.491,1056,4.739,1063,2.599,1099,3.544,1109,3.414,1189,4.596,1202,2.304,1208,4.534,1230,3.491,1233,2.304,1234,3.644,1255,2.622,1256,3.118,1629,2.289,1634,2.948,1797,6.412,1802,3.012,1806,3.28,1807,3.936,1808,3.491,3022,4.366,3112,7.775,3237,4.111,3303,3.795,3305,4.346,3318,3.222,3481,3.936,3581,4.111,3934,3.936,4167,3.936,4169,3.679,4170,3.168,4172,3.222,4175,3.344,4178,3.795,4468,4.703,4469,4.703]],["t/4512",[34,2.267,90,3.766,152,5.075,157,2.486,184,2.856,245,4.022,259,2.049,339,4.263,363,3.794,384,5.574,434,2.123,507,4.731,570,2.679,757,3.967,1056,5.011,1589,6.687,1982,4.947,2616,6.449,4135,8.687,4151,6.081,4154,6.687,4155,6.687,4470,9.594,4471,7.991,4472,7.991,4473,7.385]],["t/4514",[34,2.407,171,4.403,184,3.033,259,1.918,434,2.254,441,6.457,469,7.344,507,4.427,570,3.222,720,4.463,1020,6.45,1056,3.688,1099,5.89,1109,7.832,1797,5.253,1843,6.457,3112,6.848,4151,6.457,4169,6.638,4474,8.486]],["t/4516",[34,2.3,46,2.685,157,1.652,184,2.898,186,3.542,201,4.795,234,4.405,259,1.441,271,3.358,288,3.874,312,2.014,339,2.998,469,6.488,493,5.463,507,3.327,510,2.38,570,2.093,659,6.171,725,4.232,1041,6.949,1042,4.14,1056,3.524,1423,4.405,1982,5.02,4151,6.171,4163,6.343,4164,6.343,4178,6.544,4473,7.494,4475,8.109,4476,10.481,4477,10.481,4478,8.109]],["t/4518",[34,2.407,184,3.033,211,7.256,259,1.508,312,2.108,434,3.317,440,5.813,441,8.211,507,3.482,570,2.19,1056,3.688,1208,7.535,1797,6.679,3112,6.848,4479,7.418,4480,7.842,4481,8.486,4482,11.864,4483,7.842,4484,8.486,4485,7.842,4486,8.486]],["t/4520",[0,1.238,3,3.81,4,4.746,14,2.185,27,0.877,30,3.188,53,3.669,94,4.287,120,1.97,147,2.534,169,3.241,178,3.543,212,3.578,215,4.062,251,3.398,262,3.138,269,4.25,285,3.043,326,5.576,357,4.746,396,1.799,1562,6.743]],["t/4523",[0,1.293,1,1.191,3,3.003,23,2.202,91,2.201,94,3.503,97,2.168,102,3.874,215,3.01,259,1.1,270,2.247,312,1.537,319,2.837,406,1.308,434,1.644,462,2.749,510,2.562,601,1.94,660,3.582,736,1.635,805,2.408,807,1.76,808,1.755,815,2.449,1562,5.493,1595,2.262,1802,3.683,2437,1.911,3799,5.719,4151,6.643,4160,4.316,4161,6.336,4167,7.305,4178,7.045,4479,7.631,4487,6.188,4488,6.188,4489,6.188,4490,6.188,4491,6.188,4492,8.067,4493,6.188,4494,6.188,4495,6.188,4496,6.188,4497,5.719]],["t/4525",[1,1.134,14,1.54,23,2.179,91,2.125,94,2.363,97,2.093,148,2.013,177,4.928,188,1.996,207,1.54,215,3.394,234,3.199,259,1.047,269,2.343,270,2.17,285,3.069,312,1.463,315,3.411,319,2.7,344,3.411,406,1.245,434,1.565,462,1.474,476,3.56,482,2.462,532,3.074,571,3.801,587,4.578,662,2.485,736,1.556,805,2.325,807,1.675,808,1.67,815,2.364,953,5.487,1026,4.129,1063,3.911,1110,6.428,1595,2.152,2437,1.818,4160,4.108,4161,6.117,4479,5.148,4480,7.788,4483,9.095,4485,9.095,4498,5.443,4499,5.889,4500,5.889,4501,8.428,4502,5.889,4503,5.889]],["t/4527",[1,1.146,18,5.022,23,2.232,85,2.549,91,2.142,94,2.389,97,2.109,163,2.227,186,1.816,206,2.488,215,2.053,236,3.52,254,3.833,259,1.509,270,2.186,312,1.479,406,1.258,434,1.582,462,1.49,469,6.129,488,4.804,736,1.573,805,2.343,807,1.693,808,1.689,815,2.382,1063,4.321,1423,4.613,1595,2.176,1604,5.355,2437,1.838,2821,7.424,4151,4.53,4152,5.204,4153,4.657,4154,7.107,4155,7.107,4160,4.152,4161,6.165,4162,7.107,4163,4.657,4164,4.657,4165,7.107,4177,8.929,4181,5.502,4470,5.502,4504,5.953,4505,5.953]],["t/4529",[1,0.95,23,2.383,60,2.616,84,1.587,91,1.867,97,1.839,123,0.931,157,1.508,228,2.95,259,0.877,269,2.945,270,1.906,312,1.839,339,2.737,406,1.043,434,1.311,462,1.235,469,4.583,510,1.449,736,1.304,805,2.043,807,1.404,808,1.4,815,2.077,1026,4.837,1033,5.318,1063,2.696,1458,5.275,1595,1.804,1623,6.472,1629,2.403,1802,3.124,2437,1.524,3932,6.196,4160,3.442,4161,5.374,4497,4.561,4506,4.561,4507,4.936,4508,4.314,4509,4.936,4510,4.561,4511,4.561,4512,6.842,4513,9.124,4514,4.561,4515,6.842,4516,4.561,4517,4.561,4518,4.561,4519,6.842,4520,4.561,4521,6.842,4522,4.561]],["t/4531",[1,0.905,23,2.36,60,2.553,84,1.53,91,1.8,97,1.773,104,1.522,107,2.014,123,0.887,157,1.962,166,2.585,228,2.811,259,0.836,269,2.84,270,1.838,312,1.773,406,0.994,434,1.249,462,1.177,469,4.419,510,2.828,736,1.243,805,1.97,807,1.338,808,1.334,815,2.002,1026,4.72,1033,5.19,1035,3.236,1063,2.599,1118,5.216,1135,2.781,1458,5.148,1595,1.719,1623,6.241,1696,3.168,1802,1.984,2437,1.452,3932,5.974,4160,3.28,4161,5.182,4492,4.346,4506,4.346,4510,4.346,4511,4.346,4512,6.597,4513,8.903,4514,4.346,4515,6.597,4516,4.346,4517,4.346,4518,4.346,4519,6.597,4520,4.346,4521,6.597,4522,4.346,4523,4.703,4524,4.703,4525,4.703,4526,4.703]],["t/4533",[1,1.219,23,2.106,84,1.357,85,2.711,91,2.237,94,2.54,97,2.203,215,2.183,236,3.744,254,4.076,259,1.577,269,2.518,270,2.284,312,1.572,406,1.338,434,1.682,462,1.584,469,6.339,482,2.646,736,1.673,805,2.447,807,1.801,808,1.796,815,2.488,817,2.794,962,2.766,1020,3.785,1022,3.255,1024,3.499,1026,3.102,1036,3.255,1063,3.23,1109,4.595,1110,4.135,1255,3.53,1256,4.198,1595,2.314,1629,3.082,1634,3.969,1635,4.337,2437,1.955,2491,4.818,2504,4.7,2639,5.534,4153,4.952,4160,4.416,4161,6.439,4165,5.298,4166,5.851,4167,5.298,4169,4.952,4170,4.265,4171,5.298,4172,4.337,4173,5.298,4174,4.7,4175,4.501,4176,4.952,4177,4.952,4527,5.851,4528,6.331]],["t/4535",[1,1,23,2.216,59,1.218,84,1.648,91,1.939,94,2.083,97,1.91,186,1.584,215,1.791,259,0.923,269,3.059,270,1.979,312,1.29,406,1.097,434,1.379,462,1.299,469,5.669,736,1.372,805,2.121,807,1.477,808,1.473,815,2.157,817,3.394,962,3.359,1020,4.597,1022,3.954,1024,4.249,1026,3.767,1036,3.954,1063,3.686,1109,5.581,1110,5.022,1255,4.287,1256,5.098,1423,4.177,1595,1.898,1604,2.436,1629,3.743,1634,4.82,1635,5.268,2437,1.603,2491,5.851,2504,5.708,4153,6.015,4160,3.622,4161,3.769,4162,4.345,4163,4.062,4164,4.062,4169,6.015,4170,5.18,4171,6.435,4172,5.268,4173,6.435,4174,5.708,4175,5.467,4176,6.015,4177,7.163,4178,4.191,4179,4.799,4180,4.799,4527,4.799]],["t/4537",[0,1.529,22,1.965,26,1.803,148,1.934,157,2.102,189,4.055,235,3.277,434,2.742,961,5.606]],["t/4539",[22,2.339,26,0.847,27,0.862,33,1.258,90,1.759,91,1.223,95,4.674,96,3.921,97,2.183,98,4.455,101,5.005,123,2.386,148,1.967,157,1.993,160,2.457,161,2.435,169,1.88,186,1.479,189,1.616,235,3.107,289,3.599,304,2.898,395,2.703,396,1.892,497,3.689,507,1.989,549,2.65,571,1.872,600,3.689,668,4.563,684,5.031,734,4.424,803,2.867,909,2.174,910,3.322,953,2.703,961,5.993,1014,2.931,1063,2.66,1102,3.792,1153,4.057,1154,4.057,1156,3.913,1158,4.481,1206,4.522,1208,3.079,1218,4.481,1219,4.481,1227,4.238,1230,3.599,1233,4.307,1234,4.487,1376,4.704,1495,2.931,1582,5.303,1952,4.057,2127,4.057,4117,4.057,4529,4.848,4530,4.848,4531,4.848]],["t/4541",[16,1.364,26,1.397,27,0.775,29,1.863,49,4.891,60,1.451,65,2.585,84,1.174,89,2.3,90,1.987,94,3.209,95,2.617,96,2.443,97,1.36,98,2.776,101,3.753,104,1.773,123,1.509,157,2.612,161,1.826,168,2.381,189,4.07,190,2.369,209,2.456,227,1.113,231,2.213,259,1.846,275,2.912,288,2.617,338,4.143,349,2.169,369,3.054,393,2.179,400,1.739,420,2.268,431,3.141,434,2.51,485,2.601,527,2.497,549,2.901,562,2.54,570,2.064,588,3.054,666,3.646,724,4.421,779,3.173,802,2.859,817,3.53,904,2.837,961,2.975,995,3.479,1020,3.274,1022,2.817,1024,3.027,1027,3.434,1032,3.205,1042,2.796,1052,3.998,1203,3.391,1249,3.434,1495,3.311,1556,3.527,1981,3.976,3011,3.69,3318,3.753,3524,7.391,3859,4.788]],["t/4543",[22,2.143,23,2.167,26,0.894,27,0.42,30,2.903,31,2.272,33,2.356,41,3.716,53,2.248,104,2.462,123,1.436,124,1.797,157,2.375,169,1.985,181,1.625,189,1.706,202,2.525,207,1.339,209,2.296,212,2.192,213,2.334,216,3.108,228,3.061,288,2.446,313,1.969,320,3.296,338,5.208,382,2.248,393,2.036,430,4.132,571,1.977,582,3.169,601,1.605,612,3.449,635,2.296,844,2.652,909,3.412,978,4.132,1016,5.307,1042,2.614,1226,4.476,1582,8.694,1688,3.252,1981,3.716,1982,3.169,1983,3.508,2366,4.132,3036,4.132,3371,4.731,3617,4.476,4532,4.731,4533,5.12,4534,4.731,4535,5.12,4536,4.731,4537,4.731,4538,5.12,4539,5.12,4540,5.12,4541,4.731,4542,7.609,4543,4.731,4544,4.731,4545,5.12,4546,4.731,4547,7.609,4548,4.731,4549,5.12,4550,5.12,4551,5.12,4552,5.12,4553,5.12,4554,5.12,4555,5.12,4556,5.12,4557,4.731]],["t/4545",[22,2.051,23,2.2,26,1.656,27,0.993,28,3.095,32,3.162,33,1.81,101,8.285,123,1.316,157,1.421,158,4.318,189,3.161,229,2.811,231,1.93,304,4.17,392,1.838,393,3.772,432,4.491,434,1.853,496,4.556,570,1.8,593,4.04,630,3.64,801,5.063,802,6.312,909,3.128,1053,5.178,1088,4.625,1102,5.456,1233,3.417,1459,4.04,2127,9.018,3796,6.446,3802,6.446,4558,6.097]],["t/4547",[23,2.246,26,2.097,27,0.927,123,1.445,137,5.229,148,2.117,189,3.365,227,2.051,243,4.736,601,3.165,734,5.684,789,3.827,880,3.345,909,3.433,961,4.159,1502,5.444,1819,6.174,1954,6.593,2843,6.693,3617,8.824,4559,7.657,4560,7.657,4561,7.657]],["t/4549",[84,2.254,184,3.76,227,2.138,232,6.081,3976,7.636,3977,7.636]],["t/4551",[9,0.893,23,1.944,27,0.443,34,1.531,46,1.787,60,2.481,84,2.702,99,2.102,104,1.746,138,4.537,161,3.438,184,1.929,199,4.411,232,4.368,235,1.713,259,0.959,269,2.147,270,2.411,284,4.411,285,4.317,292,2.474,293,4.897,312,2.326,369,3.009,374,3.711,476,3.263,479,3.917,507,2.214,549,3.741,563,3.636,570,2.834,601,2.48,705,3.917,725,2.817,803,3.191,1050,4.006,1255,3.009,1388,3.876,1459,3.126,1593,3.263,1601,2.817,1645,3.917,1651,3.837,1652,5.518,1767,3.917,2381,4.718,3584,4.987,4248,4.718,4252,4.718,4302,4.718,4562,4.987,4563,4.987,4564,4.987,4565,4.987,4566,4.987,4567,4.987,4568,4.987,4569,4.987,4570,5.397,4571,4.516]],["t/4553",[9,0.681,12,3.291,14,1.077,23,1.83,27,0.338,29,2.193,34,1.169,84,1.381,85,1.764,89,1.73,104,2.907,127,2.732,137,2.134,138,2.363,161,1.373,162,2.059,182,2.019,190,1.782,257,1.747,259,1.733,269,3.573,270,1.66,283,1.98,284,2.297,285,3.765,312,2.684,374,5.713,433,2.411,479,2.991,544,2.463,549,3.751,556,2.411,570,2.319,600,3.135,601,1.292,625,4.469,637,2.583,640,2.823,671,3.562,674,4.145,693,3.943,705,4.679,729,1.66,737,5.187,746,2.732,961,2.238,994,2.653,1005,3.325,1053,3.059,1152,4.978,1199,6.569,1275,3.325,1376,4.151,1388,2.019,1433,2.52,1604,1.933,1666,3.325,1983,5.441,2364,5.636,2618,3.808,2626,5.395,3270,3.325,3691,5.636,3727,3.223,3818,8.653,3976,7.843,4302,3.602,4307,3.135,4308,3.602,4309,4.786,4571,5.395,4572,3.808,4573,6.943,4574,3.808,4575,3.808,4576,3.808,4577,3.448,4578,3.808,4579,3.808,4580,3.808,4581,3.808,4582,4.12,4583,4.12,4584,4.12]],["t/4555",[0,0.832,9,1.585,10,1.554,12,5.366,23,2.184,29,2.771,34,1.593,61,3.161,65,5.492,84,2.572,99,1.492,123,1.06,147,1.703,156,4.078,157,1.144,168,4.568,169,4.513,187,3.132,206,2.348,211,3.436,248,3.358,257,2.382,478,4.158,560,3.254,562,5.396,570,2.88,601,1.761,729,4.497,762,3.673,786,3.436,966,2.605,1063,2.045,1099,2.789,1151,4.701,1559,4.078,3977,5.913,4585,5.618,4586,5.618,4587,5.618,4588,5.618,4589,5.192,4590,5.192,4591,5.192,4592,5.192,4593,5.618,4594,5.618,4595,5.618,4596,5.618]],["t/4557",[3,3.268,16,2.74,37,5.163,84,1.876,140,4.377,227,2.237,232,6.068,458,4.57,462,2.754,1641,7.067,1642,7.067,1643,7.067,3975,7.655,3976,6.356,3977,6.356,3979,7.655,3980,8.092,3981,7.655,3982,7.067,3983,7.655]],["t/4559",[0,1.543,14,2.725,30,3.975,31,4.623,94,4.181,215,4.219,269,4.145,3245,5.863]],["t/4561",[0,1.816,9,1.508,22,1.736,27,0.927,81,2.99,129,5.337,181,2.896,216,4.611,227,1.853,255,5.085,261,5.18,631,4.786,634,6.144,646,5.957,911,7.134,1713,9.447,3245,6.352]],["t/4563",[0,1.307,3,2.621,14,2.308,16,2.198,23,1.874,27,0.908,107,2.49,123,1.665,147,2.676,180,5.683,215,3.044,225,2.614,411,4.642,412,4.27,540,5.853,1056,3.836,1166,5.765,1173,6.717,1314,6.047,1363,5.165,1562,4.794,3245,4.967,3397,7.124,3398,7.124,3399,7.578]],["t/4565",[1,1.444,14,2.604,26,1.739,27,0.817,30,2.861,34,3.171,43,5.138,60,1.987,67,5.197,110,4.049,121,1.167,133,2.542,147,3.389,186,3.781,215,2.586,251,3.049,262,2.816,549,2.72,560,5.767,573,3.049,595,5.552,840,4.144,904,3.885,906,5.71,917,3.856,1056,3.259,1234,3.828,1299,5.138,2652,5.138,3226,4.435,3245,5.603,3400,5.567,3401,5.866]],["t/4567",[0,1.184,1,1.054,2,2.765,3,1.627,6,2.776,14,1.432,16,1.364,23,2.068,26,1.397,27,0.853,60,1.451,70,2.107,110,2.227,120,2.604,121,0.853,123,1.96,148,1.027,174,2.09,181,3.298,193,3.567,225,2.797,226,1.896,227,2.245,238,2.369,239,4.362,242,2.124,259,1.421,271,3.911,303,2.217,404,2.837,406,1.996,411,4.206,420,2.268,570,1.414,573,2.227,729,3.223,828,2.817,896,3.918,1100,3.527,1363,3.205,1562,6.47,1736,2.951,3017,2.881,3027,3.69,3039,3.69,3399,5.479,3405,4.584,3534,3.632,4597,5.062,4598,7.998,4599,7.998]],["t/4569",[171,4.06,258,6.155,584,5.468,1990,5.845]],["t/4571",[3,3.056,14,2.061,16,1.337,23,1.94,26,1.631,27,0.767,60,1.423,70,2.066,110,2.184,120,2.426,121,1.227,123,1.487,148,1.006,150,6.192,174,2.049,181,2.503,186,1.638,202,2.649,225,2.765,226,1.859,227,2.328,231,1.486,238,3.409,242,2.083,271,4.261,303,2.174,321,3.618,396,1.156,411,4.146,420,2.224,481,4.024,570,1.386,573,2.184,735,4.381,828,4.053,880,4.495,885,5.31,896,4.576,1069,3.247,1100,3.458,1363,4.612,1562,2.917,3042,6.291,3226,3.176,3245,6.166,3253,4.087,3399,5.4,4600,8.611,4601,4.695,4602,4.695,4603,4.695,4604,4.494,4605,7.285]],["t/4573",[1,1.318,3,2.782,11,2.343,14,1.791,16,1.109,23,1.883,26,2.004,27,0.769,30,1.699,34,2.367,60,1.815,70,1.713,75,1.946,85,1.907,99,1.183,110,1.811,120,2.208,121,0.693,123,1.292,147,1.351,148,0.835,150,5.533,174,1.699,186,3.391,194,2.607,225,2.471,226,1.542,227,2.26,231,1.232,242,1.728,271,3.879,303,1.803,321,3.001,327,3.334,328,2.663,396,2.017,411,3.602,420,3.455,481,4.26,530,4.24,565,3.424,570,1.15,573,2.785,735,3.915,828,3.522,880,4.092,917,4.291,1069,2.693,1100,2.868,1234,4.26,1363,4.008,1562,2.42,2126,2.868,3042,5.621,3226,2.634,3245,5.271,3399,4.692,3401,5.358,3624,2.829,4600,7.839,4604,3.728,4605,6.33,4606,4.455,4607,4.117,4608,4.117,4609,6.33,4610,4.117,4611,4.117]],["t/4575",[0,1.153,10,0.889,14,1.381,23,1.457,24,5.088,75,4.041,86,3.063,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,1.109,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,271,4.227,297,1.397,303,3.744,366,2.1,491,1.826,544,5.143,573,1.307,595,3.749,646,5.62,718,2.07,719,1.732,904,1.665,906,1.844,985,6.577,1135,5.088,1189,2.07,1459,4.983,2186,3.312,2336,2.333,3108,2.446,3226,1.901,3242,6.944,3245,4.841,3252,2.594,3337,8.667,3406,9.334,3407,8.725,3408,2.69,3409,2.69,3411,2.69,3412,2.69,3413,2.594,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,2.69,3419,2.69,3420,2.69,3421,2.515,3422,4.421,3423,2.69,3424,2.69,3425,2.69,3426,2.69,3427,2.69,3428,7.2,3429,2.69,3430,4.421,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,4.421,3439,2.69,3440,2.594,3441,2.69,3442,2.69,3444,2.69,3445,2.69,3446,6.73,3447,2.69,3448,2.69,3449,2.69,3450,2.69,3451,2.69,3452,2.69,3453,2.69,3454,2.69,3455,2.69,3456,2.69,3457,2.69,3458,2.69,3459,2.69,3460,2.69,3461,2.69,3462,2.69,3463,2.69,3464,2.69,3465,2.69,3466,2.69,3467,2.286,3468,2.202,3522,2.81,3523,2.81]],["t/4577",[11,4.718,27,0.736,30,3.423,60,2.377,67,4.682,90,3.254,107,2.53,133,3.041,137,4.647,157,1.827,186,3.712,196,4.312,233,5.624,262,3.369,327,4.367,382,3.939,616,5.698,906,6.408,1381,5.196,1423,4.873,3226,5.305,3400,6.66,3468,6.146]],["t/4579",[0,1.257,10,2.347,14,2.821,22,1.615,27,0.696,30,3.237,86,2.81,87,4.731,94,4.329,106,3.361,121,1.321,186,3.619,202,5.321,207,2.219,215,4.306,269,3.375,429,5.542,460,5.018,877,7.047,878,5.018,1008,4.242,3226,5.018,3245,4.775,3253,6.457]],["t/4581",[0,1.816,9,1.508,22,1.736,27,0.927,81,2.99,129,5.337,181,2.896,216,4.611,227,1.853,255,5.085,261,5.18,631,4.786,634,6.144,646,5.957,911,7.134,1713,9.447,3245,6.352]],["t/4583",[0,1.307,3,2.621,14,2.308,16,2.198,23,1.874,27,0.908,107,2.49,123,1.665,147,2.676,180,5.683,215,3.044,225,2.614,411,4.642,412,4.27,540,5.853,1056,3.836,1166,5.765,1173,6.717,1314,6.047,1363,5.165,1562,4.794,3245,4.967,3397,7.124,3398,7.124,3399,7.578]],["t/4585",[1,1.233,10,1.772,14,2.338,26,1.562,27,0.915,28,2.842,30,2.444,34,2.923,43,4.388,53,2.812,60,2.37,67,5.378,87,3.571,99,1.702,110,3.636,117,5.36,119,5.36,121,0.997,133,2.171,147,3.124,186,3.707,207,1.675,215,2.209,251,2.604,262,2.405,429,4.183,460,3.787,495,3.71,549,2.323,560,5.18,573,2.604,595,4.986,601,2.008,840,3.539,877,5.841,878,5.288,904,3.318,906,3.673,917,3.293,1056,2.784,1234,3.27,1299,4.388,1999,3.917,3226,3.787,3245,5.032,3400,4.755,3401,5.01,3518,10.306,3519,5.919]],["t/4587",[0,1.189,2,3.06,14,1.44,16,1.371,23,2.293,26,1.402,27,0.452,70,2.117,110,2.238,120,1.892,123,1.514,148,1.032,174,2.1,181,2.548,193,4.644,225,2.377,226,1.905,227,2.116,238,3.471,239,4.372,242,2.135,406,2.2,411,4.982,420,2.28,570,1.421,573,2.238,736,2.121,823,4.36,828,5.353,834,5.032,877,3.596,878,3.255,896,3.933,1100,3.544,1363,3.221,1562,6.48,3399,6.49,3405,6.717,3520,3.772,3521,4.607,4597,7.418]],["t/4589",[171,4.06,258,6.155,584,5.468,1990,5.845]],["t/4591",[3,2.244,14,1.976,16,1.263,23,2.206,26,1.577,27,0.741,60,1.344,70,1.951,110,2.062,121,1.176,123,1.426,148,0.951,150,5.011,174,1.935,181,2.867,186,1.547,202,2.502,225,2.238,226,1.755,227,2.28,238,3.905,242,1.967,271,4.646,411,4.75,420,2.1,481,2.589,570,1.309,573,2.062,735,3.545,828,5.146,877,3.313,878,2.999,880,4.372,885,6.084,896,4.903,1100,3.266,1363,5.285,3042,6.742,3226,2.999,3245,6.314,3253,3.86,3399,6.187,3520,3.475,3521,4.245,4600,8.956,4601,6.606,4602,6.606,4603,6.606,4604,6.324]],["t/4593",[1,1.275,3,1.266,10,1.18,11,2.243,14,2.123,16,1.062,22,0.812,23,1.968,26,1.911,27,0.813,28,1.892,30,1.627,34,2.303,60,2.151,70,1.64,75,2.893,85,1.826,99,1.759,106,1.689,110,1.734,121,1.031,123,1.249,147,1.293,148,0.799,150,2.827,174,1.627,181,2.102,186,3.544,194,2.495,202,2.103,215,1.471,225,1.961,226,1.476,227,2.299,238,2.863,242,1.654,271,3.79,327,3.224,328,2.549,396,1.748,411,3.483,420,2.742,429,2.785,460,2.522,481,2.177,530,4.099,565,3.31,570,1.101,573,3.301,735,2,828,3.405,877,4.325,878,2.522,880,3.546,885,4.461,896,3.978,917,4.174,1008,2.131,1100,2.745,1234,4.144,1363,3.875,2126,2.745,3042,5.469,3226,2.522,3245,5.576,3399,4.537,3401,5.18,3520,2.921,3624,2.708,4600,6.794,4601,3.728,4602,3.728,4603,3.728,4604,3.568,4607,3.941,4608,3.941,4609,6.12,4610,3.941,4611,3.941]],["t/4595",[0,1.153,10,0.889,14,1.381,23,1.457,24,5.088,75,4.041,86,3.063,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,1.109,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,271,4.227,297,1.397,303,3.744,366,2.1,491,1.826,544,5.143,573,1.307,595,3.749,646,5.62,718,2.07,719,1.732,904,1.665,906,1.844,985,6.577,1135,5.088,1189,2.07,1459,4.983,2186,3.312,2336,2.333,3108,2.446,3226,1.901,3242,6.944,3245,4.841,3252,2.594,3337,8.667,3406,9.334,3407,8.725,3408,2.69,3409,2.69,3411,2.69,3412,2.69,3413,2.594,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,2.69,3419,2.69,3420,2.69,3421,2.515,3422,4.421,3423,2.69,3424,2.69,3425,2.69,3426,2.69,3427,2.69,3428,7.2,3429,2.69,3430,4.421,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,4.421,3439,2.69,3440,2.594,3441,2.69,3442,2.69,3444,2.69,3445,2.69,3446,6.73,3447,2.69,3448,2.69,3449,2.69,3450,2.69,3451,2.69,3452,2.69,3453,2.69,3454,2.69,3455,2.69,3456,2.69,3457,2.69,3458,2.69,3459,2.69,3460,2.69,3461,2.69,3462,2.69,3463,2.69,3464,2.69,3465,2.69,3466,2.69,3467,2.286,3468,2.202,3522,2.81,3523,2.81]],["t/4597",[11,4.605,27,0.719,30,3.341,60,2.32,67,4.57,87,4.882,90,3.176,107,2.47,133,2.968,137,4.536,157,1.784,186,3.672,196,4.209,233,5.489,262,3.288,327,4.263,382,3.845,616,5.561,878,6.508,906,6.312,1381,5.072,1423,4.756,3226,5.178,3400,6.501,3468,5.999]],["t/4600",[0,1.397,4,5.358,16,2.349,22,1.796,27,0.774,53,5.061,105,3.372,111,4.231,120,2.224,157,1.922,281,6.707,640,6.463,698,6.355,1380,9.016,1381,6.676,1769,7.895,2880,8.247]],["t/4602",[0,1.655,27,0.736,46,2.97,121,1.739,140,4.484,159,5.249,181,2.848,303,4.523,353,3.879,553,3.584,707,3.959,861,5.145,899,5.423,902,6.257,913,4.515,1039,5.624,1357,5.242,2134,7.507,2265,6.044,2334,7.017,2335,7.507,3656,7.842]],["t/4605",[27,0.839,231,2.829,303,4.139,323,4.335,382,4.49,707,4.513,1357,5.676,2255,5.183,2334,7.998,3656,8.939]],["t/4607",[0,1.286,2,0.364,14,0.693,16,0.908,21,1.963,23,2.21,26,0.637,27,0.712,30,2.797,34,1.817,39,2.231,54,0.89,59,0.856,60,0.385,70,0.559,75,0.635,90,0.528,91,0.668,94,0.584,99,1.194,106,1.049,107,0.41,120,0.343,121,0.997,122,1.687,127,1.756,153,2.441,163,0.991,171,0.54,174,1.715,180,3.362,181,2.84,184,0.947,185,0.667,190,1.943,197,0.623,215,2.019,225,1.08,231,1.009,235,2.034,238,1.145,239,1.887,242,1.414,257,1.123,259,1.59,262,0.546,269,0.579,303,0.589,313,2.97,316,1.034,319,0.667,338,3.572,353,2.531,382,1.973,393,0.579,395,0.811,408,0.996,411,4.061,444,1.62,532,0.759,535,1.566,539,1.08,540,1.756,565,0.727,570,1.16,571,1.409,573,1.077,630,0.759,631,0.617,633,2.506,660,4.576,687,3.499,688,3.712,698,0.98,702,0.713,722,1.015,729,1.068,732,1.174,733,2.059,734,1.836,735,0.682,736,0.384,743,1.015,744,4.616,745,4.162,761,0.98,773,1.174,793,0.86,813,1.138,840,0.804,876,0.86,889,1.056,896,3.139,898,0.87,901,1.08,904,0.753,924,1.08,984,1.344,1008,0.727,1056,1.151,1118,1.601,1132,3.028,1152,0.912,1166,1.73,1173,2.016,1224,0.924,1232,1.107,1314,1.815,1318,1.138,1371,2.217,1400,3.42,1495,0.879,1532,1.815,1559,1.056,1562,0.79,1727,1.217,1800,1.784,1881,1.015,2255,0.737,2262,1.174,2265,3.028,2272,2.457,2273,1.217,2280,4.65,2298,1.107,2303,1.138,2334,1.138,2358,3.052,2359,3.515,2588,5.117,2614,3.627,2619,2.448,2700,1.967,2703,4.214,2707,2.775,2709,1.344,2710,3.577,2730,5.409,2960,1.056,3238,1.534,3245,2.938,3246,2.217,3397,2.138,3398,2.138,3701,2.448,3783,1.344,3787,1.217,3789,1.217,3991,2.448,4149,1.272,4322,2.448,4612,1.455,4613,3.371,4614,5.222,4615,1.455,4616,1.455,4617,4.494,4618,1.455,4619,2.649,4620,1.455,4621,1.455,4622,1.455,4623,1.455,4624,1.455,4625,2.649,4626,2.649,4627,1.455,4628,3.647,4629,2.649,4630,1.455,4631,1.455,4632,1.344,4633,1.455,4634,1.455,4635,1.455,4636,1.455,4637,1.455,4638,1.455,4639,1.455,4640,1.455,4641,1.455,4642,1.344,4643,1.455,4644,4.494,4645,3.647,4646,3.647,4647,3.647,4648,7.721,4649,2.649,4650,2.649,4651,3.647,4652,7.331,4653,2.649,4654,2.649,4655,2.649,4656,2.649,4657,2.649,4658,2.649,4659,2.649,4660,2.649,4661,3.647,4662,2.649,4663,2.649,4664,2.649,4665,4.494,4666,4.494,4667,4.494,4668,1.455,4669,1.455,4670,5.853,4671,1.455,4672,1.455,4673,1.455,4674,1.455,4675,1.455,4676,1.455]],["t/4609",[16,1.083,22,0.828,23,2.289,26,0.759,27,0.868,30,3.528,39,4.081,59,1.577,64,2.189,70,1.673,75,1.9,85,1.862,89,1.826,90,1.577,91,1.097,99,1.786,121,1.646,127,2.883,171,2.495,174,1.659,181,2.135,185,3.768,190,1.88,216,1.776,242,2.607,258,2.447,259,0.773,313,3.161,350,3.309,353,2.907,393,1.73,396,0.936,400,1.381,428,2.494,535,2.571,573,1.768,593,2.519,653,3.801,660,1.784,692,2.571,700,2.692,719,2.342,729,1.753,733,1.715,744,2.6,745,3.092,813,3.402,881,3.856,889,3.156,896,3.294,898,2.6,899,6.045,995,2.762,1003,3.309,1093,2.692,1187,3.228,1467,3.402,1881,3.033,2255,3.408,2280,5.966,2335,3.639,2357,5.877,2358,5.626,2360,4.88,2710,2.979,3020,3.639,4222,4.019,4613,4.019,4632,7.596,4642,4.019,4677,8.22,4678,4.349,4679,4.349,4680,4.349,4681,4.349,4682,4.349,4683,4.349,4684,4.349,4685,4.349,4686,4.349,4687,4.349,4688,4.349,4689,4.349,4690,4.349,4691,4.349,4692,4.349,4693,4.349,4694,4.349,4695,4.349,4696,4.349,4697,4.349]],["t/4611",[0,1.351,22,2.334,33,3.181,53,4.004,148,1.709,170,4.873,181,2.896,212,3.905,227,2.604,235,2.896,251,3.708,343,2.282,359,6.047,527,4.158,532,4.76]],["t/4613",[0,1.607,7,2.911,9,0.995,23,1.019,26,1.495,27,0.703,34,1.707,100,3.141,123,1.615,133,2.04,147,1.825,148,1.604,160,4.338,209,2.699,216,2.458,225,3.212,226,3.755,227,2.421,231,1.665,262,2.26,284,3.356,392,2.859,418,3.051,568,4.857,581,4.279,707,2.656,748,3.522,764,3.077,778,3.051,779,3.486,881,3.451,1037,4.198,1073,4.468,1108,3.681,1502,4.279,1668,4.857,1840,4.708,1841,5.037,1842,4.58,1843,4.58,1844,4.857,1845,3.991,1846,4.58,1847,5.037,1881,4.198,1882,5.562,1883,5.562,1884,5.261,1885,5.562,1886,3.773,1887,4.369,1888,5.562,1889,8.039,1890,7.91,1891,9.205,1892,4.369]],["t/4615",[3,3.575,9,1.82,26,1.529,148,1.641,157,2.242,166,2.623,245,4.407,343,2.191,392,2.308,396,1.885,549,4.366,764,2.484,847,6.107,1093,5.421,1201,6.484,1225,6.849,3474,7.655,4698,8.092,4699,11.006,4700,8.757]],["t/4617",[3,3.523,9,1.784,26,1.482,148,1.59,246,6.638,312,2.108,343,2.124,392,2.236,396,1.827,549,4.529,570,2.19,668,3.957,764,2.407,1201,6.725,1212,6.848,1225,6.638,1573,7.418,3495,6.848,4412,7.101,4701,8.486,4702,10.79,4703,8.486,4704,8.486]],["t/4619",[3,3.714,9,1.677,26,1.347,148,1.445,157,2.066,231,2.806,312,1.915,343,1.93,392,2.032,396,1.66,549,4.748,570,1.99,571,2.978,704,5.194,764,2.187,1093,4.773,1201,7.051,1212,6.222,1225,7.933,3045,6.031,3495,6.222,4705,7.71,4706,10.142,4707,7.71,4708,7.71]],["t/4621",[0,0.943,3,1.891,9,1.473,26,1.112,27,0.523,83,4.581,120,2.1,148,1.193,157,1.297,166,1.908,188,4.433,200,3.795,313,2.449,343,1.594,379,4.1,392,1.678,396,1.371,490,4.847,628,3.85,667,4.159,707,2.81,746,4.222,761,6.919,764,1.806,881,6.379,907,4.363,931,3.459,1717,4.846,1733,4.29,1806,9.004,1914,6.212,2535,4.622,2536,7.998,2541,4.441,3691,5.567,4709,6.368,4710,6.368]],["t/4623",[9,1.266,26,1.337,34,2.172,37,3.592,91,3.147,121,2.108,123,1.445,125,3.086,148,1.435,181,2.431,202,3.776,227,1.556,229,3.086,343,1.916,385,3.635,392,2.018,400,2.431,601,2.401,660,3.141,764,2.172,1036,3.937,1037,5.34,4711,12.816,4712,7.657,4713,7.657,4714,7.657,4715,7.657,4716,6.179,4717,6.179]],["t/4625",[9,1.617,22,1.862,26,1.275,53,3.205,84,1.564,92,6.388,93,4.186,100,3.81,104,2.362,148,1.368,157,2.502,170,3.9,207,1.909,227,1.484,343,1.827,345,5.555,349,3.873,384,5.092,390,4.465,392,1.924,396,1.572,570,1.884,658,6.617,668,3.405,764,2.071,841,6.014,906,4.186,1438,6.381,1909,6.346,1910,6.746,3934,6.109,4718,9.78,4719,7.3,4720,6.746]],["t/4627",[1,1.434,2,1.864,3,2.212,9,1.639,26,1.301,27,0.814,148,1.858,157,2.519,166,2.232,206,4.143,207,1.948,242,2.889,343,1.864,392,1.963,396,2.134,490,3.515,535,4.405,570,2.558,668,3.474,764,2.113,1042,3.802,1053,5.53,1325,8.331,1587,4.731,1736,4.012,2285,5.296,3017,6.504,3037,6.511,3038,4.865,4721,6.884,4722,9.913,4723,7.449]],["t/4629",[9,1.647,26,1.31,120,2.347,148,1.405,157,1.528,166,2.247,188,4.037,200,3.195,227,1.524,231,3.092,271,3.105,313,2.884,343,1.877,392,1.977,396,1.615,445,4.483,523,2.92,570,1.936,666,5.808,764,2.127,876,4.435,1325,5.052,1914,6.945,2274,6.556,3017,6.519,3022,7.283,3295,5.444,3562,6.276,4724,6.931,4725,7.5]],["t/4631",[9,1.669,26,1.337,27,0.628,83,3.415,120,1.805,121,1.192,133,2.595,148,1.435,166,2.294,188,4.23,286,4.308,343,1.916,374,3.592,392,2.018,396,1.648,570,1.976,584,5.645,603,7.544,666,3.49,764,2.172,969,4.629,1717,5.826,3017,6.314,3022,7.632,3614,6.693,4726,6.407,4727,10.095,4728,7.657]],["t/4633",[9,1.725,22,1.532,26,1.822,27,0.856,31,3.571,33,2.088,86,2.665,87,4.488,148,1.509,181,2.556,189,2.683,238,3.481,243,3.776,288,3.845,343,2.015,392,2.122,396,2.246,565,4.024,601,3.628,734,4.052,764,2.283,781,5.515,803,4.76,804,6.297,879,4.952,880,4.556,2430,7.037,3624,5.112,4729,8.05,4730,8.05,4731,8.05,4732,8.05]],["t/4635",[2,2.075,9,1.758,26,1.448,27,0.681,83,3.699,104,2.684,148,1.554,157,1.689,166,2.485,227,1.685,285,3.02,343,2.075,392,2.186,396,1.785,571,3.203,764,2.352,867,7.016,1370,5.896,1625,6.693,1733,5.587,1982,5.134,2336,6.02,2536,7.571,3331,6.94,3653,6.94,4286,7.25,4698,7.664,4733,10.633,4734,8.293]],["t/4637",[9,1.896,26,1.634,120,2.205,148,1.753,200,3.985,313,3.598,343,2.341,392,2.465,396,2.014,764,2.653,931,5.081,1388,4.583,1914,7.997,2078,6.789,4735,12.926,4736,9.354]],["t/4639",[0,1.648,9,1.473,18,3.765,22,1.695,26,1.112,27,0.961,89,2.674,91,1.606,120,2.421,121,1.938,148,1.193,200,2.713,209,2.856,213,2.903,231,2.464,281,8.323,313,3.426,326,3.323,343,1.594,392,1.678,396,1.371,419,3.807,422,6.967,450,7.376,523,2.48,621,8.231,764,1.806,828,4.58,931,3.459,1700,4.622,3295,4.622,4737,11.707,4738,11.707,4739,6.368,4740,5.885,4741,11.124]],["t/4641",[9,1.63,26,1.722,148,1.847,343,2.467,392,2.598,396,2.122,420,4.082,762,4.445,764,2.796,909,5.308,928,5.31,3615,7.318,3637,9.11,4742,9.858]],["t/4643",[0,1.803,9,1.484,26,1.567,27,0.736,148,1.681,259,2.264,275,4.069,343,2.245,392,2.364,396,1.931,420,3.715,631,3.804,632,4.001,633,5.002,764,2.545,852,8.291,4360,7.842,4365,8.291,4743,8.971,4744,8.971]],["t/4645",[6,4.438,9,1.448,26,1.529,27,0.719,148,1.641,231,2.422,259,2.244,343,2.191,392,2.308,396,1.885,729,5.089,764,2.484,1736,5.929,3017,6.331,3018,8.171,3644,7.655,4745,8.757,4746,8.757,4747,8.757]],["t/4647",[9,1.496,26,1.58,121,1.748,148,1.695,343,2.264,392,2.384,396,1.947,601,2.836,734,6.148,764,2.566,880,4.906,1604,4.243,1687,5.745,1954,8.344,4748,9.045,4749,9.045,4750,9.045,4751,9.045]],["t/4649",[9,1.725,10,2.227,26,1.406,27,0.661,120,1.898,124,2.826,148,1.509,200,3.43,207,2.105,227,1.636,238,3.481,304,4.812,313,3.096,318,4.866,343,2.015,392,2.122,396,2.246,447,4.448,734,6.383,744,4.812,764,2.283,931,4.372,1160,4.572,1345,5.723,1688,5.112,1914,7.275,1954,7.558,2972,5.843,4752,8.05,4753,8.05,4754,8.05]],["t/4651",[3,2.391,9,1.331,23,1.767,26,1.406,27,0.661,32,3.649,122,4.345,124,2.826,148,1.509,170,4.301,229,3.244,239,4.859,343,2.015,392,2.749,393,3.202,406,1.701,407,4.08,418,4.08,532,4.201,565,4.024,601,2.524,764,2.283,1193,8.59,1562,6.649,3624,5.112,4147,7.439,4364,7.037,4755,8.05,4756,8.05]],["t/4653",[3,2.664,9,1.484,26,1.567,120,2.634,148,1.681,200,3.822,343,2.245,392,2.364,396,2.406,411,6.401,412,5.405,523,3.494,764,2.545,1562,6.919,4757,8.971,4758,11.174,4759,8.971]],["t/4655",[1,1.505,2,1.957,3,2.322,9,1.693,26,1.788,27,0.84,53,3.434,94,3.138,110,3.18,148,1.466,180,5.035,182,3.832,215,2.697,343,1.957,392,2.061,406,1.653,407,3.964,411,6.001,412,3.783,420,3.238,507,3.209,532,4.081,561,4.485,764,2.218,1036,4.021,1056,3.399,1127,5.56,1166,5.108,1363,4.576,1562,6.575,3779,7.227,4148,7.227,4760,7.82,4761,7.82,4762,7.82,4763,7.82]],["t/4657",[2,3.092,3,2.754,9,1.534,26,1.62,120,2.689,148,1.738,200,3.951,313,3.567,343,2.321,392,2.444,396,1.997,764,2.631,828,4.769,931,5.038,1562,7,4764,9.275]],["t/4659",[1,1.672,2,3.151,3,2.58,9,1.437,26,1.517,67,4.534,148,1.628,285,3.163,343,2.174,392,2.29,396,1.87,406,1.836,407,4.403,733,3.426,764,2.464,789,4.342,887,5.031,1562,7.051,4146,8.028,4149,7.594,4362,6.306,4765,8.687,4766,8.687]],["t/4661",[9,1.24,26,1.31,86,3.701,121,1.74,123,2.109,147,2.274,148,1.405,202,3.699,227,1.524,242,2.908,311,6.556,343,1.877,392,1.977,396,1.615,447,4.144,733,3.927,736,1.982,764,2.127,880,4.35,980,5.567,1064,5.332,1134,5.952,1160,4.26,1323,7.392,1341,6.931,1342,10.331,3800,6.931,3818,6.276,4043,11.005,4767,7.5,4768,7.5,4769,7.5,4770,7.5,4771,6.556,4772,7.5]],["t/4663",[9,1.414,26,1.894,27,0.702,32,3.877,93,4.904,123,1.613,148,1.603,227,1.738,322,6.159,343,2.14,392,2.858,420,3.541,764,2.426,928,4.606,1134,5.112,1160,4.857,1188,7.156,1189,5.506,1323,9.591,4773,11.907,4774,8.552,4775,8.552,4776,8.552]],["t/4665",[9,1.547,26,1.634,60,2.478,123,1.765,148,1.753,343,2.341,392,2.465,482,3.909,764,2.653,1160,5.313,1323,9.847,1339,8.644,1340,7.827,1343,8.644,4777,9.354,4778,9.354,4779,9.354]],["t/4667",[9,1.496,22,1.722,26,2.133,27,0.742,148,1.695,189,4.378,209,4.056,227,1.838,343,2.264,349,3.582,392,2.384,400,2.872,420,3.745,460,5.349,764,2.566,928,4.872,4780,9.045,4781,9.045,4782,9.045]],["t/4669",[9,1.589,26,1.678,27,0.584,39,4.77,120,2.265,121,1.107,148,1.333,186,2.169,189,4.182,200,3.03,206,5.089,227,1.953,257,3.015,315,4.118,339,4.501,343,1.78,348,4.79,349,2.816,392,1.874,393,2.828,396,1.531,523,2.769,604,4.349,759,4.205,764,2.017,828,4.941,1100,4.578,1587,4.516,1674,6.832,2536,6.656,2616,5.739,3396,6.571,4724,6.571,4783,7.111,4784,7.111,4785,7.111]],["t/4671",[9,1.448,26,1.529,148,1.641,186,2.671,343,2.191,392,2.308,396,1.885,406,2.544,565,4.377,601,2.746,686,5.976,762,3.948,764,2.484,823,6.859,834,5.489,836,5.806,880,3.825,3624,5.561,4786,8.757,4787,8.757,4788,8.757,4789,8.092]],["t/4673",[9,1.425,26,1.505,120,2.569,148,1.615,200,3.672,231,2.384,303,4.411,313,3.315,343,2.157,392,2.272,396,2.346,406,2.737,481,4.4,523,3.356,686,6.43,764,2.445,828,4.432,931,4.681,4027,7.965,4790,8.619]],["t/4675",[9,1.403,23,1.828,26,1.482,86,2.81,122,3.186,148,1.59,210,5.508,231,2.347,239,3.563,337,5.018,343,2.124,392,2.236,396,1.827,406,2.638,686,6.198,764,2.407,833,6.033,887,6.871,3258,5.716,3402,6.638,4361,6.299,4791,8.486,4792,7.101]],["t/4677",[9,1.393,23,1.819,26,1.471,148,1.578,267,5.034,343,2.107,392,2.219,396,1.813,406,2.631,686,6.181,733,4.91,744,5.034,764,2.388,887,6.847,2304,5.348,4012,7.782,4362,6.112,4793,10.737,4794,8.421,4795,8.421,4796,8.421]],["t/4679",[234,5.769,343,2.658,495,7.165,1427,6.575,2489,5.818,3688,8.888]],["t/4681",[0,1.521,1,1.226,2,1.594,3,2.645,9,1.053,10,1.762,23,1.509,26,1.112,27,0.843,32,2.887,34,1.806,103,3.349,106,2.522,121,1.386,122,3.857,123,1.201,124,3.126,142,3.807,148,1.193,181,2.022,201,3.765,207,1.665,229,2.566,239,4.313,251,2.589,343,1.594,392,2.347,393,3.543,396,1.371,411,3.349,412,4.968,418,3.228,551,4.29,557,3.895,565,3.183,601,2.793,628,3.85,694,3.583,735,4.819,764,1.806,917,3.274,1193,8.258,1391,7.816,1563,4.727,2741,4.222,3258,4.29,3624,4.044,4364,5.567,4797,6.368,4798,6.368,4799,6.368,4800,6.368]],["t/4683",[9,1.887,22,1.489,26,1.366,30,2.984,46,2.589,91,2.878,104,2.531,121,1.593,123,1.931,148,1.466,176,6.188,215,3.935,255,5.707,343,1.957,392,2.061,587,4.248,660,4.967,764,2.218,1381,4.529,1688,4.967,3129,9.46,3130,8.948,4801,7.82,4802,7.82,4803,7.82,4804,7.82,4805,7.82,4806,7.82,4807,7.82]],["t/4685",[1,2.317,9,1.448,26,1.529,120,2.064,148,1.641,200,3.731,343,2.191,392,2.308,396,1.885,403,5.294,406,1.85,407,4.438,523,3.41,764,2.484,828,5.659,931,4.756,1388,4.29,4009,11.67,4010,10.191,4808,8.757]],["t/4687",[9,1.341,26,1.416,27,1.008,28,3.598,34,3.482,46,3.47,78,3.782,148,1.52,227,2.13,256,4.65,261,4.606,271,3.358,343,2.029,392,2.137,396,1.746,570,3.168,670,5.766,674,4.232,729,4.68,764,2.3,2696,4.96,4443,7.494,4809,8.109,4810,8.109,4811,8.109,4812,8.109]],["t/4689",[9,1.303,22,1.958,26,2.12,27,0.646,130,7.545,148,1.476,153,5.586,227,1.601,304,4.708,343,1.971,392,2.076,396,1.696,420,3.261,433,4.609,539,5.847,660,3.232,698,7.714,764,2.234,3324,6.356,4813,12.14,4814,7.877,4815,10.284,4816,11.451,4817,7.877]],["t/4691",[9,1.857,26,1.58,114,5.137,148,1.695,188,3.807,231,2.502,232,4.218,251,4.567,315,5.239,343,2.264,392,2.384,396,1.947,764,2.566,1042,4.617,2696,5.532,3820,6.883,4818,9.045,4819,9.045,4820,9.045,4821,9.045,4822,9.045,4823,9.045]],["t/4693",[9,1.56,26,1.648,86,3.124,148,1.768,166,2.827,238,4.079,343,2.361,392,2.486,396,2.031,558,6.848,668,4.4,764,2.676,971,7.179,1909,6.705,3631,10.652,4824,8.718,4825,9.434]],["t/4695",[2,1.903,9,1.257,22,1.447,26,1.328,30,2.901,33,2.607,84,1.629,85,3.255,106,3.011,111,3.41,120,1.792,125,3.064,148,1.425,204,4.096,235,2.414,343,1.903,392,2.004,396,1.637,565,3.801,594,7.86,601,2.384,701,5.303,735,5.841,764,2.157,1818,10.467,3624,4.829,4190,5.948,4826,7.604,4827,7.604,4828,7.604,4829,7.604,4830,7.604,4831,7.604,4832,7.604,4833,7.604,4834,7.604,4835,7.604,4836,7.604,4837,7.604]],["t/4697",[9,1.382,26,1.459,102,3.201,120,3.024,123,1.577,148,1.566,200,3.56,343,2.091,392,2.202,396,1.799,449,4.149,460,4.941,523,3.254,532,4.361,694,6.012,735,6.156,737,6.978,764,2.37,828,4.297,931,4.539,1069,5.052,1671,5.828,2518,5.629,4838,8.356]],["t/4699",[0,1.329,9,1.484,26,1.567,124,3.149,148,1.681,193,4.001,227,1.823,239,4.693,343,2.245,392,2.364,396,1.931,694,5.048,735,6.148,764,2.545,1160,5.095,2269,7.017,3258,6.044,3864,7.842,4361,6.66,4839,8.971,4840,8.291]],["t/4701",[0,1.351,9,1.508,26,1.593,124,3.201,148,1.709,267,5.452,343,2.282,392,2.404,396,1.963,694,5.132,733,4.452,735,6.011,744,5.452,764,2.587,2304,5.792,2826,7.134,4362,6.62,4841,7.973,4842,9.121,4843,7.973]],["t/4703",[9,1.534,26,1.62,27,0.761,148,1.738,338,5.909,343,2.321,392,2.444,396,1.997,694,6.418,735,6.046,762,4.182,764,2.631,1379,7.485,1436,8.108,4844,9.275,4845,9.275,4846,9.275]],["t/4705",[9,1.361,26,1.437,102,3.153,120,2.91,123,1.553,148,1.543,200,3.507,343,2.06,392,2.169,449,4.087,460,4.867,532,4.296,694,5.954,735,5.991,737,8.536,764,2.335,828,5.441,931,4.471,933,6.888,1671,7.38,2518,5.545,4847,8.231]],["t/4707",[0,1.15,9,1.284,14,2.03,26,1.356,89,3.261,110,3.157,148,1.455,193,3.463,207,2.03,216,3.171,227,1.578,231,2.148,239,4.775,343,1.943,392,2.047,396,1.672,694,4.369,700,7.039,735,6.036,737,8.564,764,2.202,1160,4.41,1671,7.106,2269,6.074,3258,5.231,3864,6.788,4361,5.764,4840,7.176,4848,7.765]],["t/4709",[9,1.508,26,1.593,148,1.709,343,2.282,392,2.404,396,1.963,404,4.724,587,4.954,735,6.011,737,8.601,764,2.587,1141,6.94,1387,7.632,4849,9.121,4850,11.289,4851,9.121]],["t/4711",[9,1.484,26,1.567,148,1.681,267,5.363,343,2.245,392,2.364,396,1.931,694,5.048,733,4.407,735,5.71,737,8.32,744,5.363,764,2.545,1671,6.257,2304,5.698,3790,7.842,4362,6.512,4841,7.842,4843,7.842,4852,8.971]],["t/4713",[0,1.267,9,1.414,26,1.493,148,1.603,153,6.467,215,2.949,343,2.14,392,2.254,396,1.841,404,4.43,660,3.509,694,6.699,735,5.586,737,8.177,764,2.426,858,10.945,4853,8.552,4854,10.843,4855,8.552]],["t/4715",[0,1.046,9,1.168,22,1.345,26,1.234,30,2.695,31,3.135,84,2.05,92,4.092,121,1.1,148,1.324,157,2.551,165,4.223,185,3.239,207,1.847,227,1.436,283,3.396,286,3.975,343,1.768,392,1.862,396,1.521,478,3.606,485,4.542,489,4.487,544,4.223,580,4.549,693,4.321,707,3.118,764,2.004,803,4.178,906,4.052,1220,7.11,1755,6.529,3274,8.363,4292,10.024,4856,12.523,4857,7.065,4858,7.065,4859,7.065,4860,7.065,4861,7.065,4862,7.065]],["t/4717",[9,1.085,14,1.715,22,1.248,26,1.145,27,0.746,69,3.624,84,1.948,104,2.122,121,1.624,148,1.704,157,1.336,165,6.735,169,2.543,216,2.679,229,2.643,231,2.515,248,6.237,312,1.629,343,1.641,375,4.76,392,1.728,396,1.412,485,3.114,490,3.095,549,4.714,570,2.693,731,4.348,764,1.86,1088,4.348,1201,6.374,1206,4.06,1220,6.382,1222,5.733,1223,4.222,1224,4.165,1225,7.111,3045,5.13,4863,6.558,4864,9.091,4865,6.558,4866,5.733,4867,5.733]],["t/4719",[9,1.372,14,2.169,26,1.448,27,0.681,69,4.583,84,1.777,104,2.684,121,1.291,148,1.554,157,1.689,165,4.957,169,3.216,343,2.075,375,6.02,392,2.186,396,1.785,549,3.008,570,2.744,571,3.203,764,2.352,1202,4.063,1220,7.178,1234,4.233,1886,7.76,4868,8.293,4869,10.633,4870,8.293,4871,7.25,4872,7.25]],["t/4721",[0,1.06,1,1.378,2,1.791,3,2.125,9,1.184,22,1.837,26,1.25,27,0.792,29,3.283,30,2.731,31,3.175,46,2.37,60,1.896,92,5.59,93,4.104,94,2.872,120,2.275,123,1.35,148,1.341,186,2.183,207,1.872,215,2.468,227,2.219,343,1.791,392,1.886,447,3.955,462,1.791,485,4.582,489,4.546,530,4.43,707,3.159,764,2.03,778,5.923,779,4.145,829,5.776,867,4.278,906,4.104,1032,4.188,1203,4.43,1234,3.654,3238,4.145,4188,5.776,4873,7.157,4874,7.157,4875,7.157,4876,7.157]],["t/4723",[9,1.56,26,1.648,107,2.661,120,2.224,121,1.468,148,1.768,200,4.019,343,2.361,392,2.486,396,2.031,485,4.479,523,3.674,764,2.676,778,6.309,828,5.927,931,5.124,4877,9.434]],["t/4725",[9,1.437,26,1.517,99,2.308,104,2.811,148,1.628,157,1.769,259,1.946,343,2.174,392,2.29,396,1.87,507,3.564,510,2.55,764,2.464,778,6.079,966,4.028,1036,4.467,1039,7.893,1056,3.775,1099,4.313,1166,5.674,4878,8.687,4879,8.687,4880,8.687,4881,8.687]],["t/4727",[26,1.662,83,4.244,120,2.731,121,1.481,148,1.783,343,2.381,392,2.508,396,2.049,485,4.518,523,3.706,764,2.699,778,5.873,828,4.893,4190,9.773,4882,9.516]],["t/4729",[9,1.534,26,1.62,148,1.738,239,3.895,303,3.754,343,2.321,392,2.444,396,1.997,485,4.403,764,2.631,778,6.261,833,6.594,4190,10.081,4361,6.885,4883,9.275,4884,9.275,4885,9.275]],["t/4731",[9,1.496,26,1.58,148,1.695,267,5.407,303,3.661,343,2.264,392,2.384,396,1.947,485,4.295,733,4.429,764,2.566,778,6.192,2304,5.745,4190,9.993,4362,6.565,4886,9.045,4887,9.045,4888,9.045,4889,9.045]],["t/4733",[0,0.983,1,1.278,2,1.661,9,1.098,22,1.745,26,1.159,27,0.752,102,3.512,120,2.161,121,1.033,123,1.981,148,1.244,200,4.474,202,3.274,207,1.736,227,1.349,229,3.694,238,2.87,253,3.132,286,3.735,343,1.661,392,1.749,396,2.261,462,1.661,579,4.335,632,4.684,633,3.701,688,4.719,760,6.559,761,6.175,762,4.133,763,9.123,888,5.192,1231,4.719,1310,5.357,1357,3.114,1370,4.719,1671,4.629,1674,4.719,1950,5.192,2819,4.719,3793,8.013,3794,6.134,4890,6.638,4891,6.638]],["t/4735",[9,1.733,26,1.416,60,2.149,106,4.151,121,1.262,122,3.045,123,1.977,125,4.224,142,4.848,148,1.52,170,4.333,343,2.029,392,2.137,428,4.65,565,4.054,601,2.543,764,2.3,896,5.135,1233,3.973,1293,4.697,1989,7.955,2280,8.429,3624,5.15,3811,7.494,3812,7.089,4892,8.109,4893,8.109,4894,8.109,4895,8.109,4896,8.109]],["t/4737",[9,0.839,16,1.263,21,2.216,22,2.479,26,1.32,27,0.416,28,4.007,30,3.446,31,4.44,32,4.094,67,5.585,78,3.524,87,5.58,90,2.741,94,2.035,100,2.647,104,1.642,120,1.196,148,1.416,184,1.813,189,1.691,215,2.606,227,1.031,229,2.044,251,2.062,271,2.1,343,1.269,349,2.009,366,4.936,392,1.337,396,1.627,398,4.517,400,1.61,404,2.628,460,2.999,485,2.408,557,3.102,570,1.95,622,6.555,679,2.968,691,2.881,764,1.439,768,4.434,801,3.682,802,2.647,804,3.968,844,2.628,876,2.999,877,4.936,878,2.999,954,3.066,1101,3.682,1495,3.066,2267,5.373,2973,7.289,3039,7.559,3053,4.245,3055,4.094,3056,4.434,3057,4.434,3224,7.828,3520,3.475,4897,5.073,4898,5.073,4899,5.073,4900,7.557,4901,5.073]],["t/4739",[9,1.437,22,2.471,26,1.913,27,0.713,90,3.151,91,2.762,148,1.628,189,2.895,227,1.765,236,5.137,238,3.756,288,4.15,304,5.193,343,2.174,392,2.29,396,2.358,400,2.758,570,2.242,764,2.464,4902,8.687,4903,8.687,4904,8.687,4905,8.687]],["t/4741",[0,1.046,9,1.168,26,2.187,33,3.322,34,3.82,39,3.508,99,1.877,110,2.873,121,1.891,123,1.333,148,1.324,195,4.321,227,1.436,231,1.954,235,2.243,257,4.056,259,1.256,275,2.572,343,1.768,392,1.862,396,2.06,473,5.526,489,4.487,570,1.823,637,4.429,764,2.004,928,3.806,1013,5.526,1134,4.223,1916,5.912,1918,6.529,4906,7.065]],["t/4743",[9,1.574,26,1.662,120,2.243,148,1.783,200,4.054,238,5.623,313,3.66,326,4.966,343,2.381,392,2.508,396,2.049,764,2.699,931,5.169,1914,8.082,4907,9.516]],["t/4745",[9,1.303,22,1.958,23,1.742,26,1.376,27,0.646,121,1.601,123,1.486,124,3.61,148,1.476,210,5.25,231,2.179,238,5.446,239,4.319,251,3.203,326,4.111,343,1.971,392,2.076,396,1.696,432,6.621,462,1.971,760,4.562,762,3.551,764,2.234,885,5.306,887,5.956,3258,5.306,3402,6.161,4361,5.847,4792,6.591,4908,7.877,4909,7.877]],["t/4747",[0,1.247,9,1.393,11,4.428,14,2.202,22,2.25,26,1.471,27,0.691,81,2.761,121,1.311,123,1.589,148,1.578,210,6.355,227,1.711,238,5.383,326,4.395,343,2.107,392,2.219,396,1.813,764,2.388,833,5.987,887,4.877,888,6.587,4910,8.421,4911,8.421,4912,8.421,4913,8.421]],["t/4749",[9,1.425,23,1.846,26,1.505,148,1.615,238,5.429,267,5.152,343,2.157,392,2.272,396,1.856,733,4.952,744,5.152,745,6.128,764,2.445,887,6.921,2304,5.474,2710,5.905,4362,6.256,4914,10.897,4915,8.619,4916,8.619,4917,8.619]],["t/4751",[9,1.341,26,2.028,33,2.104,79,5.083,148,1.964,153,4.405,202,3.999,212,3.472,231,2.243,235,2.575,241,4.521,343,2.029,392,2.137,396,1.746,400,2.575,443,4.697,494,6.544,570,2.093,660,3.327,764,2.3,894,4.298,954,4.902,994,5.221,1604,3.804,3286,7.955,3615,7.78,3619,6.343,3642,7.494,3643,7.494,4918,8.109,4919,8.109,4920,8.109,4921,8.109]],["t/4753",[9,1.372,22,1.579,26,1.448,86,2.746,120,2.506,125,4.989,139,5.34,148,1.554,200,3.533,222,8.634,334,6.311,343,2.075,353,3.586,392,2.186,396,1.785,465,5.896,523,3.229,617,6.487,638,6.693,764,2.352,828,5.467,907,5.682,931,4.505,1886,7.357,3302,6.311,4922,8.293]],["t/4755",[9,1.425,26,1.505,84,1.847,120,2.032,148,1.615,200,3.672,259,1.532,343,2.157,392,2.272,396,1.856,452,7.586,523,3.356,673,4.643,729,3.473,764,2.445,828,5.603,3732,7.534,4008,11.968,4572,7.965,4923,8.619,4924,8.619]],["t/4757",[9,1.072,22,1.974,26,1.132,27,0.74,33,1.681,64,3.262,86,4.225,106,2.567,114,3.681,120,2.125,121,1.009,125,4.179,130,3.717,139,4.173,148,1.215,181,2.058,195,3.964,200,3.841,216,2.647,220,5.069,227,1.317,229,2.612,238,2.802,271,3.733,313,2.493,319,2.971,337,7.4,343,1.622,365,4.297,392,1.708,395,3.613,396,1.395,404,3.357,604,3.964,666,5.561,764,1.838,842,6.289,931,3.52,1220,3.964,1370,4.608,1909,3.491,1914,6.289,2778,4.704,3813,5.989,4925,6.481]],["t/4759",[9,1.425,26,1.505,86,4.157,121,1.342,148,1.615,238,3.727,319,3.951,337,7.425,343,2.157,392,2.272,396,1.856,558,6.256,571,3.329,764,2.445,842,6.011,1065,6.742,1093,5.335,1909,6.437,4498,7.965,4926,7.965,4927,10.897,4928,8.619]],["t/4761",[9,1.521,26,1.606,90,3.336,148,1.724,165,5.498,188,4.356,343,2.302,368,6.998,392,2.424,396,1.98,718,5.921,764,2.609,2781,6.827,4929,12.307,4930,9.197,4931,11.348,4932,9.197]],["t/4763",[0,1.329,9,1.484,26,1.567,81,4.296,86,2.97,123,2.108,125,4.503,148,1.681,157,2.276,166,2.688,339,3.317,343,2.245,392,2.364,764,2.545,1044,7.017,4933,8.971,4934,8.971,4935,8.971,4936,8.971]],["t/4765",[9,1.24,22,1.428,26,1.31,27,0.616,30,2.861,84,1.607,86,2.483,104,2.427,120,2.635,148,1.405,181,2.381,200,3.195,209,3.363,232,3.498,343,1.877,392,1.977,393,2.983,396,1.615,403,6.758,418,3.801,452,4.301,523,2.92,674,3.914,764,2.127,828,5.12,931,4.073,1011,5.866,1033,4.04,1042,5.083,1433,7.793,1434,7.104,1655,6.276,1656,5.332,4937,7.5]],["t/4767",[2,2.917,9,1.176,10,1.967,26,1.242,27,0.584,82,4.251,84,2.059,122,2.67,139,7.007,148,1.333,151,4.001,227,1.445,231,2.658,304,4.251,343,1.78,351,4.871,384,4.96,392,1.874,396,1.531,443,4.118,462,1.78,478,3.63,549,4.551,570,1.835,571,3.711,592,5.739,666,4.961,675,4.578,764,2.017,804,5.562,1033,3.83,1656,5.056,2647,7.754,2778,5.161,4557,6.571,4938,7.111,4939,9.609,4940,7.111,4941,8.399,4942,7.111]],["t/4769",[1,1.27,2,3.147,3,3.354,9,1.091,26,1.152,27,0.542,37,4.283,67,4.764,95,3.152,96,2.943,98,3.344,118,5.521,120,2.152,123,1.245,148,1.236,192,4.602,227,2.296,229,2.659,232,3.077,256,3.784,343,1.651,385,3.132,392,1.739,396,1.42,400,2.095,406,2.657,461,4.789,528,4.084,565,3.298,601,2.069,660,3.746,764,1.871,778,3.344,1678,5.021,1778,5.962,1989,6.254,2696,4.035,3624,4.19,4132,5.521,4716,5.324,4717,5.324,4943,6.097,4944,6.097,4945,6.097,4946,6.598,4947,6.097]],["t/4771",[1,1.961,2,3.22,3,3.585,9,1.284,26,1.356,27,0.637,120,2.402,148,1.455,207,2.03,303,3.143,343,1.943,392,2.047,406,2.649,412,5.5,462,3.137,565,3.881,601,2.435,764,2.202,1767,5.636,3624,4.932,4948,7.176,4949,7.176,4950,7.176,4951,7.765,4952,7.176]],["t/4773",[1,1.699,2,3.17,3,2.621,9,1.46,26,1.932,148,1.654,343,2.209,392,2.326,406,2.553,412,6.126,764,2.504,928,4.755,1949,8.833,4953,8.157,4954,8.827,4955,8.157]],["t/4775",[1,1.727,2,3.188,9,1.484,26,1.567,120,2.115,148,1.681,200,3.822,303,3.632,343,2.245,392,2.364,406,2.692,412,6.162,764,2.545,828,5.746,931,4.873,4956,8.971]],["t/4777",[1,1.527,2,3.046,9,1.312,26,1.385,27,0.651,34,2.25,110,3.226,148,1.487,343,1.985,392,2.091,396,1.708,406,2.572,411,6.402,412,5.888,570,2.048,623,5.64,764,2.25,954,4.796,3774,6.935,4068,8.647,4069,6.639,4070,6.639,4071,6.639,4072,6.639,4073,6.639,4957,7.332,4958,7.332,4959,7.933,4960,7.332]],["t/4779",[1,1.55,2,3.063,9,1.331,26,1.822,27,0.661,34,3.472,148,1.509,181,3.886,241,4.488,343,2.015,392,2.122,406,2.587,411,6.669,412,5.921,764,2.283,928,4.336,2687,6.496,2773,7.037,4961,8.05,4962,7.439]],["t/4781",[0,1.383,1,1.034,2,2.867,9,1.304,10,2.181,14,1.404,21,2.346,23,1.335,26,0.938,27,0.899,28,2.383,32,2.435,49,3.285,78,2.505,104,1.738,121,1.454,124,1.885,148,1.006,157,1.094,161,1.79,174,2.049,186,1.638,201,4.661,207,1.404,208,3.458,215,2.719,229,2.164,231,1.486,343,1.344,392,2.078,393,2.136,396,1.156,406,2.316,418,2.722,553,2.145,565,2.684,570,1.386,595,2.994,601,3.226,707,2.37,722,6.514,762,2.421,764,1.523,823,6.222,834,3.366,836,7.849,880,2.346,1293,5.96,1381,3.11,1415,5.852,1999,5.712,3624,3.411,4789,4.963,4963,5.371,4964,5.371,4965,5.371,4966,6.362,4967,5.371,4968,5.371,4969,5.371,4970,5.371,4971,5.371]],["t/4783",[1,1.756,2,3.207,9,1.508,26,1.593,120,2.15,148,1.709,200,3.886,303,3.692,343,2.282,392,2.404,396,1.963,406,2.708,523,3.552,764,2.587,767,7.973,828,5.805,931,4.954]],["t/4785",[1,1.444,2,3.102,9,1.24,23,1.27,26,1.31,27,0.616,32,3.4,86,3.701,121,1.55,122,2.816,148,1.405,209,3.363,210,3.828,216,3.063,231,2.755,239,4.182,267,5.952,337,5.888,343,1.877,392,2.624,396,1.615,406,2.517,764,2.127,833,7.08,887,5.767,1587,4.763,1963,5.231,3258,5.052,3402,5.866,3955,6.556,4361,5.567,4792,6.276,4972,7.5]],["t/4787",[1,1.584,2,3.089,9,1.361,26,1.437,86,3.504,122,3.091,148,1.543,166,2.466,334,6.263,343,2.06,379,5.299,392,2.169,396,1.772,406,2.609,449,4.087,616,7.428,666,3.752,668,3.839,764,2.335,1044,6.438,1909,6.3,4771,7.195,4973,7.607,4974,9.779,4975,8.231]],["t/4789",[0,1.158,1,1.505,2,3.03,3,2.322,9,1.293,10,3.476,26,1.366,148,1.466,182,5.931,201,4.624,343,1.957,384,5.454,390,4.783,392,2.061,396,1.684,406,2.411,570,2.018,668,3.647,684,4.021,764,2.218,912,4.081,1666,6.311,1909,6.147,3851,6.544,3932,6.544,4976,7.82,4977,10.236,4978,7.82,4979,7.82]],["t/4791",[2,3.107,9,1.382,10,2.956,26,1.459,59,1.96,122,3.138,123,1.577,148,1.566,166,2.504,343,2.091,392,2.202,396,1.799,406,2.489,666,4.871,668,3.897,764,2.37,1478,9.447,1909,6.345,4117,6.993,4726,6.993,4980,10.685,4981,8.356]],["t/4793",[1,1.659,2,3.142,9,1.425,23,1.46,26,1.505,148,1.615,267,5.152,343,2.157,392,2.272,396,1.856,406,2.653,733,4.713,744,5.152,764,2.445,887,6.311,1532,5.905,2304,5.474,4362,6.256,4982,8.619,4983,8.619,4984,8.619,4985,8.619]],["t/4795",[2,3.013,9,1.275,26,1.347,27,0.633,86,2.553,120,2.671,130,4.422,148,1.445,200,3.285,207,2.016,215,4.428,227,1.567,322,4.379,325,6.485,343,1.93,392,2.032,396,1.66,406,2.544,412,3.729,523,3.003,764,2.187,828,5.215,931,4.188,1179,5.867,1188,10.075,4986,7.71]],["t/4797",[1,1.434,2,3.182,9,1.232,26,1.731,120,2.337,123,1.405,143,4.272,148,1.396,200,3.173,207,1.948,215,4.386,303,3.015,325,6.85,343,1.864,392,1.963,396,1.604,406,2.687,412,3.603,523,2.901,764,2.113,828,5.097,931,4.046,1179,8.478,1188,6.233,3984,6.511,4987,7.449]],["t/4799",[2,3.116,9,1.257,26,1.328,37,3.567,102,2.913,148,1.425,227,1.545,229,3.064,325,6.89,343,1.903,385,3.61,392,2.004,400,2.414,406,2.631,565,3.801,601,2.384,660,3.12,764,2.157,1183,11.181,1187,8.355,3624,4.829,4716,6.136,4717,6.136,4988,7.604,4989,7.604,4990,7.604,4991,7.604,4992,7.604]],["t/4801",[1,1.633,2,3.226,9,1.403,26,1.482,120,2.797,148,1.59,200,3.615,207,2.219,303,3.435,325,6.725,343,2.124,392,2.236,396,1.827,406,2.724,523,3.304,764,2.407,828,5.548,931,4.609,4993,8.486]],["t/4803",[2,2.948,6,4.235,9,1.382,26,1.866,33,2.168,34,2.37,148,1.566,215,2.882,235,2.653,277,5.941,286,4.702,322,4.746,325,6.345,328,7.421,343,2.091,392,2.202,406,2.489,412,4.042,764,2.37,928,4.501,1930,7.722,1931,6.065,4994,8.356,4995,8.356,4996,8.356]],["t/4805",[2,2.991,9,1.425,26,1.903,148,1.615,235,2.736,325,6.437,328,7.506,343,2.157,392,2.272,406,2.525,420,3.569,764,2.445,917,6.456,928,4.643,1186,6.742,1932,7.965,1934,7.965,4997,8.619]],["t/4807",[2,2.902,6,3.558,9,1.161,26,1.663,27,0.887,120,2.245,143,6.2,148,1.316,181,2.229,207,1.836,215,4.311,223,3.485,227,1.427,235,2.229,322,5.41,325,6.245,343,1.757,392,1.85,406,2.45,412,4.607,420,2.907,440,4.809,510,2.06,660,2.88,764,1.991,928,3.781,1134,4.196,1163,6.136,1166,4.585,1168,4.991,1169,6.136,1170,5.874,1179,5.342,4998,7.02,4999,7.02,5000,7.02,5001,7.02,5002,7.02]],["t/4809",[2,3.116,9,1.257,26,1.328,37,3.567,102,2.913,104,2.461,148,1.425,227,1.545,229,3.064,325,6.89,338,5.83,343,1.903,385,3.61,392,2.004,396,1.637,400,2.414,406,2.631,565,3.801,601,3.151,660,3.12,764,2.157,1185,7.027,3624,4.829,4716,6.136,4717,6.136,5003,7.604,5004,7.604,5005,7.604,5006,7.604,5007,7.604,5008,7.604,5009,7.604]],["t/4811",[0,1.04,2,2.706,9,1.161,26,1.226,27,0.782,90,2.546,110,2.854,123,1.324,148,1.316,157,2.202,166,2.103,188,4.109,189,2.34,209,3.148,227,1.427,231,2.635,343,1.757,349,2.78,392,1.85,393,2.792,396,2.051,403,4.244,470,3.914,556,4.107,570,1.812,571,2.711,666,4.342,667,4.585,668,3.274,764,1.991,958,5.491,1033,3.781,1118,5.758,1370,4.991,1399,5.342,1909,5.824,2541,6.643,4720,6.487,5010,6.487,5011,9.525,5012,7.02,5013,6.487,5014,6.487]],["t/4813",[2,2.906,9,1.341,26,1.416,148,1.52,157,1.652,166,2.43,227,1.648,231,2.243,232,5.416,343,2.029,351,5.556,384,5.656,392,2.137,396,1.746,458,6.061,462,2.029,478,4.14,570,2.093,571,4.048,666,3.697,668,3.782,764,2.3,1088,5.377,1909,6.255,3011,5.463,3982,6.544,5010,7.494,5015,10.481,5016,8.109]],["t/4815",[2,3.098,9,1.372,26,1.448,59,1.945,69,4.583,84,2.278,148,1.554,159,4.853,170,4.431,201,4.904,219,4.543,227,1.685,231,2.294,343,2.075,392,2.186,396,1.785,489,5.267,571,3.203,668,3.868,764,2.352,841,5.991,1204,5.267,1234,4.233,1574,5.417,4941,7.25,5017,8.293,5018,10.633,5019,8.293,5020,8.293]],["t/4817",[2,3.076,3,3.363,9,1.098,26,1.159,27,0.545,37,4.3,67,4.784,95,3.171,96,2.961,98,3.364,118,5.555,120,2.161,123,1.252,148,1.244,192,4.629,227,2.415,229,2.675,232,3.096,256,3.806,343,1.661,385,3.151,392,1.749,396,1.429,400,2.107,407,3.364,461,4.818,528,4.109,565,3.318,601,2.081,660,3.761,736,3.248,764,1.883,778,3.364,1678,5.051,1778,5.987,1989,6.28,2696,4.06,3624,4.216,4132,5.555,4716,5.357,4717,5.357,4943,6.134,4944,6.134,4945,6.134,4947,6.134,5021,6.638]],["t/4819",[1,1.961,2,3.22,3,3.585,9,1.284,26,1.356,27,0.637,120,2.402,148,1.455,207,2.03,303,3.143,343,1.943,392,2.047,407,3.936,412,5.5,462,3.137,565,3.881,601,2.435,736,3.19,764,2.202,1767,5.636,3624,4.932,4948,7.176,4949,7.176,4950,7.176,4952,7.176,5022,7.765]],["t/4821",[1,1.686,2,3.16,3,2.6,9,1.448,26,1.922,148,1.641,343,2.191,392,2.308,412,6.108,420,3.626,736,3.181,764,2.484,928,4.717,1949,8.808,4953,8.092,4955,8.092,5023,8.757]],["t/4823",[1,1.495,2,3.021,9,1.284,10,2.148,26,1.356,27,0.637,81,2.546,102,3.903,120,1.83,148,1.455,200,3.308,207,2.03,242,3.011,303,3.143,340,6.798,343,1.943,392,2.047,407,5.164,410,5.072,412,6.342,433,4.543,447,4.291,722,5.416,736,3.005,764,2.202,828,5.239,931,4.218,2437,2.397,5024,7.765]],["t/4825",[1,1.527,2,3.046,9,1.312,26,1.385,27,0.651,34,2.25,110,3.226,148,1.487,343,1.985,392,2.091,396,1.708,407,4.021,411,6.402,412,5.888,570,2.048,623,5.64,736,3.037,764,2.25,954,4.796,3774,6.935,4068,8.647,4069,6.639,4070,6.639,4071,6.639,4072,6.639,4073,6.639,4957,7.332,4958,7.332,4960,7.332,5025,7.933]],["t/4827",[1,1.55,2,3.063,9,1.331,26,1.822,27,0.661,34,3.472,148,1.509,181,3.886,241,4.488,343,2.015,392,2.122,407,4.08,411,6.669,412,5.921,736,3.058,764,2.283,928,4.336,2687,6.496,2773,7.037,4962,7.439,5026,8.05]],["t/4829",[1,1.756,2,3.207,9,1.508,26,1.593,120,2.15,148,1.709,200,3.886,303,3.692,343,2.282,392,2.404,396,1.963,407,4.623,523,3.552,736,3.24,764,2.587,828,5.805,931,4.954,5027,9.121]],["t/4831",[1,1.659,2,3.142,9,1.425,23,1.46,26,1.505,86,2.854,122,3.236,148,1.615,210,4.4,231,2.384,239,3.619,337,5.097,343,2.157,392,2.272,396,1.856,407,4.368,736,3.158,764,2.445,833,6.128,887,6.311,3258,5.806,3402,6.742,4361,6.398,4792,7.213,5028,8.619]],["t/4833",[1,1.584,2,3.089,9,1.361,26,1.437,86,3.504,122,3.091,148,1.543,166,2.466,334,6.263,343,2.06,379,5.299,392,2.169,396,1.772,407,4.172,449,4.087,616,7.428,666,3.752,668,3.839,736,3.09,764,2.335,1044,6.438,1909,6.3,4771,7.195,4973,7.607,4974,9.779,5029,8.231]],["t/4835",[1,1.584,2,3.089,9,1.361,26,1.437,59,1.931,148,1.543,343,2.06,392,2.169,396,1.772,407,5.363,507,3.377,666,3.752,668,3.839,684,4.232,736,3.09,764,2.335,1909,6.3,3230,11.408,3651,6.438,3851,6.888,4726,6.888,5030,10.582,5031,8.231,5032,8.231,5033,8.231]],["t/4837",[1,1.659,2,3.142,9,1.425,23,1.46,26,1.505,148,1.615,267,5.152,343,2.157,392,2.272,396,1.856,407,4.368,733,4.713,736,3.158,744,5.152,764,2.445,887,6.311,2304,5.474,3789,7.213,4362,6.256,4841,7.534,4843,7.534,5034,8.619,5035,8.619]],["t/4839",[9,1.742,21,3.569,26,2.035,27,0.864,33,2.732,34,2.987,39,6.325,121,1.272,123,1.541,148,1.531,256,6.039,343,2.045,392,2.153,396,1.759,660,3.352,764,2.317,1013,8.237,1224,5.189,1825,5.597,1826,7.55,5036,8.17,5037,8.17,5038,8.17,5039,8.17,5040,8.17,5041,8.17]],["t/4841",[1,1.659,9,1.425,26,1.903,86,2.854,121,2.059,148,1.615,235,2.736,343,2.157,392,2.272,396,1.856,764,2.445,793,7.658,928,4.643,3845,10.976,5042,8.619,5043,8.619,5044,8.619,5045,8.619]],["t/4843",[1,1.596,2,2.075,9,1.372,26,1.448,27,0.681,56,7.862,84,1.777,120,1.955,148,1.554,200,3.533,219,4.543,343,2.075,392,2.186,396,1.785,523,3.229,764,2.352,841,5.991,931,4.505,1208,5.267,1914,7.416,3047,7.25,3048,9.99,3271,7.664,4325,10.26,5046,8.293]],["t/4845",[9,1.725,22,1.532,26,1.406,59,1.888,64,4.052,81,2.639,92,4.662,107,2.271,120,1.898,125,4.204,148,1.509,165,4.812,166,2.412,168,3.498,170,4.301,227,1.636,231,2.227,251,3.273,271,5.251,343,2.015,392,2.122,396,1.733,764,2.283,793,4.76,906,4.616,912,4.201,1220,7.077,3564,7.439,4824,7.439,5047,10.431,5048,8.05]],["t/4847",[0,1.078,9,0.798,14,1.904,22,2.24,26,1.531,27,0.904,30,2.778,31,3.23,33,1.252,78,2.251,86,1.598,95,2.306,96,2.153,97,1.199,102,2.789,121,1.365,123,1.374,124,1.694,148,0.905,163,1.805,189,2.427,204,3.922,206,3.043,213,2.2,215,1.665,227,1.782,229,1.945,259,1.294,271,5.468,312,1.199,343,1.208,348,3.252,392,1.272,393,2.896,396,2.102,404,3.772,423,2.824,429,3.153,462,1.822,491,4.135,595,2.691,604,6.736,660,1.98,671,2.667,679,2.824,764,1.369,789,2.413,843,4.22,844,5.427,900,3.108,1049,3.776,1121,3.896,1223,3.108,1325,3.252,1604,2.264,1763,5.876,2336,3.504,3039,7.42,3042,4.905,3468,3.307,3534,3.2,5049,4.827,5050,4.827,5051,4.827]],["t/4849",[0,1.549,3,1.651,9,0.92,14,1.454,22,1.539,25,3.362,26,1.664,27,0.664,99,1.477,123,1.798,148,1.042,157,2.264,163,3.024,169,3.136,171,2.064,189,2.695,202,2.743,231,2.636,257,2.358,319,2.549,343,1.392,392,1.466,400,1.766,428,4.637,544,3.324,549,4.719,570,2.868,582,3.442,637,3.486,666,5.865,764,1.577,778,2.819,865,6.153,868,2.743,1136,5.139,1413,4.488,1459,7.102,3036,4.488,3248,5.139,3962,5.139,4721,5.139,5052,5.561,5053,5.561,5054,5.561,5055,5.561,5056,8.086,5057,5.561,5058,5.139]],["t/4851",[9,1.372,26,1.448,27,0.963,84,2.515,141,4.063,148,1.554,184,2.964,185,5.38,231,2.942,343,2.075,392,2.186,396,2.289,764,2.352,841,5.991,3238,6.798,3270,9.472,3285,7.664,3286,5.682,3640,7.25,5059,8.293,5060,8.293,5061,8.293]],["t/4853",[9,1.312,26,1.385,84,2.462,148,1.487,185,5.268,203,5.182,231,2.195,237,4.346,335,4.079,343,1.985,392,2.091,395,4.423,396,1.708,764,2.25,841,5.866,842,5.533,1093,4.911,1108,6.319,1201,6.799,1235,6.206,1771,6.206,3323,9.201,5062,7.332,5063,7.332,5064,7.933,5065,7.933]],["t/4855",[9,1.275,26,2.103,27,0.633,84,2.173,120,2.838,148,1.445,153,4.188,182,3.778,185,5.886,200,3.285,227,1.567,288,3.683,343,1.93,392,2.032,396,1.66,420,3.193,523,3.003,764,2.187,840,6.912,841,6.146,1674,5.482,2480,6.452,5066,7.71,5067,10.142,5068,7.71,5069,7.125]],["t/4857",[9,1.161,22,1.336,26,1.226,82,4.196,84,2.041,123,1.324,148,1.316,185,5.556,227,1.427,230,5.095,343,1.757,385,3.333,392,1.85,395,3.914,396,2.051,428,4.026,507,2.88,570,2.458,666,3.2,668,3.274,674,5.643,764,1.991,774,4.991,841,5.519,971,5.342,1033,3.781,1846,5.342,1909,5.824,2341,5.665,3238,7.239,3290,6.136,3363,6.487,3851,7.971,3928,6.487,5070,7.02,5071,7.02,5072,7.02,5073,7.02,5074,7.02,5075,7.02,5076,7.02]],["t/4859",[0,0.841,9,0.939,22,1.835,26,0.991,29,3.279,31,2.518,33,2.129,59,1.331,80,3.356,84,2.581,103,2.985,121,0.883,123,1.071,141,2.781,148,1.064,163,2.123,166,1.701,185,5.76,194,5.641,197,2.43,199,5.889,201,3.356,202,2.799,209,2.545,217,3.472,227,1.668,231,1.57,237,3.109,269,2.258,343,1.42,346,4.44,392,1.496,396,1.767,423,4.802,556,3.321,562,2.632,570,2.488,666,4.394,668,3.828,764,1.61,841,5.392,842,3.959,1108,3.472,1118,3.431,1374,3.514,1719,4.214,1909,3.057,2276,4.962,2864,4.962,3238,3.288,3241,4.75,3274,4.962,3280,7.54,4926,5.245,5077,5.676,5078,5.676,5079,5.676,5080,5.676,5081,5.676,5082,5.676]],["t/4861",[9,1.176,22,1.354,26,1.242,33,1.845,66,5.562,84,2.609,122,2.67,148,1.333,157,1.448,166,2.13,185,5.581,194,6.368,199,5.357,216,2.904,231,1.967,262,2.67,343,1.78,392,1.874,395,3.965,396,1.531,423,6.368,544,4.251,562,3.297,570,1.835,628,4.299,667,4.644,668,3.316,764,2.017,841,5.555,1719,5.279,1909,5.862,3238,4.118,3280,5.562,3292,6.571,5083,7.111,5084,7.111,5085,7.111,5086,7.111,5087,6.216,5088,7.111,5089,7.111]],["t/4863",[9,1.341,22,1.995,26,1.416,33,2.104,84,2.488,148,1.52,157,1.652,166,3.14,185,5.627,231,2.243,343,2.029,392,2.137,393,3.226,396,1.746,570,2.093,668,4.888,764,2.3,841,5.928,1909,6.255,3238,4.697,3302,6.171,5087,7.089,5090,8.109,5091,8.109,5092,8.109,5093,8.109,5094,8.109]],["t/4865",[9,1.098,26,1.159,27,0.545,83,2.961,84,2.75,148,1.244,157,1.352,166,2.746,184,3.276,185,5.634,212,2.842,227,1.349,292,3.043,343,1.661,388,6.134,392,1.749,396,1.429,415,4.547,495,3.844,593,3.844,613,4.927,668,4.897,764,1.883,841,5.36,1033,3.575,1084,7.671,1909,5.656,2301,5.051,3238,5.309,3276,6.134,3302,9.585,3323,6.518,5087,5.802,5095,6.638,5096,6.638,5097,6.638,5098,6.638,5099,6.638,5100,6.638,5101,6.638]],["t/4867",[9,1.224,26,1.292,27,0.607,80,4.375,84,2.538,141,3.625,148,1.849,166,2.956,185,5.94,209,3.318,227,1.504,343,1.852,392,1.95,396,1.593,630,3.861,666,3.373,668,4.602,674,5.15,684,3.804,764,2.099,841,6.046,1909,6.38,2303,7.719,3238,6.431,3280,5.787,4726,6.191,5102,7.399,5103,7.399,5104,7.399,5105,6.837]],["t/4869",[9,1.425,26,1.505,69,4.763,81,2.826,84,2.335,148,1.615,165,5.152,185,5.756,201,5.097,343,2.157,392,2.272,549,4.555,764,2.445,841,6.1,1201,4.643,1220,7.308,4410,7.965,5106,8.619,5107,8.619,5108,8.619]],["t/4871",[2,2.091,9,1.382,21,5.145,26,1.459,84,2.524,148,1.566,185,5.691,199,4.659,219,4.578,227,1.698,231,2.312,313,3.214,337,4.941,343,2.091,392,2.202,396,1.799,523,3.254,764,2.37,789,4.177,841,6.013,1687,5.307,3302,6.359,5109,8.356,5110,10.685,5111,8.356]],["t/4873",[9,1.303,22,1.958,26,1.376,84,2.204,148,1.476,185,5.565,248,4.708,257,3.339,343,1.971,392,2.076,396,2.214,549,3.73,571,3.042,719,5.54,764,2.234,841,5.845,842,5.494,1108,4.817,1201,6.784,1206,4.876,1233,5.039,1234,5.25,1235,6.161,5062,7.279,5063,9.504,5112,7.877]],["t/4875",[2,1.903,9,1.257,21,3.321,26,1.328,38,4.239,60,2.662,84,2.412,123,1.435,148,1.425,185,5.708,199,5.603,219,4.165,231,2.103,313,2.924,343,1.903,392,2.004,476,4.597,565,3.801,601,2.384,764,2.157,841,6.112,1687,4.829,1761,7.027,1886,7.805,3290,6.647,3295,5.519,3302,7.647,3624,4.829,5113,7.604,5114,7.604,5115,7.604,5116,7.604]],["t/4877",[9,1.312,26,1.385,80,4.691,84,2.608,141,3.887,148,1.487,185,5.786,209,3.558,227,1.612,297,3.448,343,1.985,392,2.091,396,1.708,668,3.7,674,4.14,764,2.25,841,5.866,844,4.109,854,5.344,1072,6.037,1096,6.935,1440,6.037,2536,4.852,3026,5.533,3238,4.595,3279,9.273,3529,6.935,5117,7.933,5118,10.333,5119,7.933]],["t/4879",[9,1.266,26,2.097,27,0.628,84,1.641,99,2.034,120,2.38,148,1.435,182,3.751,185,5.504,190,3.311,253,3.613,259,1.361,275,2.788,286,4.308,343,1.916,392,2.018,396,1.648,420,3.17,660,3.141,764,2.172,840,6.896,841,6.129,864,8.147,928,4.124,1674,5.444,2480,6.407,5069,7.076,5120,7.657,5121,7.657,5122,7.657,5123,7.657,5124,7.657]],["t/4881",[178,4.503,213,5.64,343,2.658,717,6.349,3688,8.888,4010,8.572]],["t/4883",[0,1.65,9,1.232,22,1.887,26,1.301,31,3.305,83,3.322,107,3.142,120,1.756,148,1.396,196,4.765,200,3.173,213,5.797,217,4.556,231,2.061,259,1.324,275,2.712,281,8.444,313,3.813,343,1.864,392,1.963,396,1.604,400,3.147,450,4.939,523,2.901,660,4.067,707,3.287,764,2.113,798,5.296,878,4.405,1134,4.453,5125,7.449,5126,9.913,5127,7.449]],["t/4885",[124,3.429,169,3.789,209,4.381,227,2.393,318,5.906,319,4.479,320,6.29,343,2.445,662,4.968,807,2.779,1495,5.906,3268,9.029,3688,8.176,5128,9.77]],["t/4887",[0,1.229,1,2.048,2,2.821,3,3.348,4,4.714,5,8.138,6,4.207,7,2.789,8,3.884,9,1.759,10,2.69,11,3.032,12,2.943,13,4.51,14,2.17,15,4.185,16,1.436,17,4.51,18,3.409,19,6.02,20,3.275,21,2.518,22,2.235,23,0.977,24,4.908,25,3.485,26,1.007,27,0.681,33,2.76,53,2.531,89,2.421,148,1.081,163,2.156,170,3.08,181,1.83,209,2.585,212,2.468,227,1.172,235,1.83,239,3.486,270,1.484,359,4.093,396,1.241,406,2.055,462,2.077,481,4.237,532,3.009,563,3.884,588,3.215,616,3.662,733,3.273,872,4.021,2150,1.797]],["t/4889",[1,1.699,2,3.023,3,3.873,27,0.724,46,2.923,120,2.608,121,1.374,192,8.426,207,2.308,227,1.794,253,4.166,323,3.742,396,1.9,406,1.865,462,3.023,736,2.333,5129,8.827]],["t/4891",[1,1.405,10,2.706,23,1.657,59,1.712,86,2.417,91,2.466,97,1.813,121,1.717,125,4.445,140,3.649,174,3.731,209,3.273,216,2.982,259,1.297,270,2.839,276,4.84,312,1.813,313,3.762,349,2.891,406,1.543,434,1.939,510,2.143,523,2.843,572,4.768,736,1.929,793,5.783,805,2.698,807,2.076,808,2.071,815,2.048,879,5.236,880,4.272,1152,4.576,2150,2.275,2436,3.81,2437,2.254,5130,9.78]],["t/4893",[0,0.738,1,1.435,2,1.246,9,1.233,10,2.744,16,1.856,23,1.888,59,2.096,91,2.253,97,2.219,114,7.026,123,1.406,133,1.688,169,4.48,188,4.118,202,2.456,212,2.132,227,1.012,259,1.325,270,2.734,285,1.813,300,6.352,312,1.237,315,4.317,406,1.575,434,1.323,462,1.246,510,2.188,637,3.122,680,5.831,736,1.97,805,2.736,807,2.12,808,2.114,815,2.506,868,2.456,951,5.53,1042,2.542,1123,4.118,1202,2.44,1595,1.82,1802,2.101,2150,2.323,2437,2.301,2696,5.464,3875,4.603,5131,4.98,5132,6.516,5133,7.454,5134,7.454,5135,7.454,5136,4.98]],["t/4895",[1,0.879,3,1.356,10,2.828,23,1.826,26,0.797,27,0.375,59,1.637,81,1.497,83,2.037,91,1.76,97,1.734,107,1.969,110,4.383,120,1.076,140,2.282,147,1.384,157,2.356,188,2.872,201,2.7,207,1.194,225,1.352,226,1.58,227,0.928,229,1.84,231,1.263,235,1.45,259,0.812,269,1.816,270,2.181,283,2.195,285,1.662,312,1.134,313,2.685,390,2.793,406,0.965,434,1.213,462,1.143,478,3.563,510,3.001,523,1.778,649,3.246,707,2.015,725,2.383,736,1.207,746,3.027,761,3.076,805,1.926,807,1.299,808,1.295,815,1.958,817,3.74,818,5.312,867,5.065,985,3.246,1063,1.662,1123,2.105,1458,6.334,1595,1.669,1733,3.076,1806,5.91,1982,2.826,2131,7.831,2150,1.423,2436,3.643,2437,1.41,2535,3.314,2536,6.86,2541,3.185,3059,6.102,3295,3.314,3848,3.821,4349,6.451,5137,7.831,5138,8.474,5139,4.566,5140,4.566,5141,4.566]],["t/4897",[1,0.95,10,2.048,23,1.951,26,1.724,27,0.405,59,2.084,91,1.867,97,1.839,123,1.863,133,2.51,157,2.468,166,2.218,189,1.645,207,1.291,259,0.877,270,2.287,285,3.235,297,3.861,312,1.839,356,4.827,363,3.515,400,1.567,406,1.043,434,2.81,456,4.988,462,1.235,510,3.105,527,3.375,570,1.274,635,3.984,736,1.304,757,3.676,803,2.919,805,2.043,807,1.404,808,1.4,815,2.077,966,3.433,1035,3.356,1038,3.727,1042,2.519,1063,1.797,1093,4.583,1118,2.984,1123,2.275,1299,3.381,1423,4.022,1595,1.804,1803,3.356,2150,1.538,2437,1.524,2438,3.676,2439,3.652,2536,6.793,2576,5.072,5142,4.936,5143,4.936]],["t/4899",[1,1.309,10,2.943,14,1.779,23,2.097,59,2.187,91,2.351,97,2.315,107,3.228,123,1.283,157,2.167,166,2.038,188,2.306,245,3.424,259,1.209,270,2.738,276,4.51,312,1.689,396,1.464,406,1.437,434,1.807,462,1.702,496,6.089,510,1.997,661,8.15,736,1.798,805,2.572,807,1.935,808,1.929,815,2.615,1038,3.424,1063,2.477,1123,3.136,1423,5.064,1458,3.634,1595,2.486,2150,2.12,2437,2.1,2536,4.16,3044,6.286,3772,5.692,5137,6.286,5144,6.802,5145,6.802]],["t/4901",[1,0.799,9,0.687,10,1.794,14,1.696,16,1.034,21,1.813,22,1.234,23,2.142,30,2.474,34,1.177,59,0.974,60,1.1,67,3.385,91,2.013,97,1.031,101,2.844,104,1.343,110,1.688,121,1.687,125,1.673,147,1.966,178,4.149,181,1.318,189,1.384,207,1.086,212,1.777,215,1.432,235,1.318,239,2.723,241,3.616,245,2.089,255,2.315,259,0.738,270,2.322,288,1.983,312,1.611,313,1.597,338,4.673,406,0.877,434,1.103,462,1.039,510,2.648,571,4.33,601,1.302,660,3.274,662,2.736,679,2.429,733,3.557,734,3.264,736,1.097,760,2.404,762,1.872,802,2.167,805,1.789,807,1.181,808,1.177,815,1.164,879,4.646,880,1.813,885,2.797,887,3.756,909,1.862,1014,2.51,1063,3.563,1093,2.57,1099,2.061,2127,3.474,2150,1.294,2437,1.282,2710,5.467,3051,4.814,3792,8.336,4532,3.836,4534,3.836,4536,3.836,4537,3.836,4541,3.836,4543,3.836,4544,3.836,4546,3.836,4548,3.836,4571,5.427,5146,6.485,5147,4.151,5148,4.151,5149,4.151,5150,4.151,5151,4.151,5152,4.151,5153,4.151,5154,4.151,5155,4.151]],["t/4903",[1,0.802,10,1.799,16,1.038,21,1.82,22,1.523,23,2.069,30,1.59,34,1.845,59,0.978,60,1.723,64,2.097,67,2.175,86,2.154,91,2.279,97,1.035,104,1.349,121,1.689,125,3.224,143,2.39,147,1.263,157,0.849,178,1.767,181,2.065,206,1.742,213,4.12,215,1.437,238,2.813,245,4.026,255,2.323,259,0.741,270,2.059,292,1.91,312,1.987,337,6.143,338,4.682,339,1.54,349,1.65,406,0.881,434,1.107,510,3.049,558,3.025,570,1.076,588,2.323,601,2.039,660,3.282,679,2.438,704,2.807,733,3.565,734,2.097,736,1.101,762,1.879,802,3.395,805,1.794,807,1.185,808,1.182,815,1.169,879,4.292,880,2.841,887,2.413,1036,2.143,1037,2.906,1052,2.083,1063,3.291,1099,2.069,1166,2.722,1300,3.643,1767,3.025,1802,2.744,2150,1.298,2203,3.851,2437,1.287,3130,3.643,3677,3.851,3798,3.851,4174,3.093,4571,3.487,4573,3.643,4740,3.851,4941,5.686,5156,4.167,5157,4.167,5158,6.504,5159,4.167,5160,4.167,5161,4.167,5162,4.167,5163,4.167,5164,4.167,5165,4.167,5166,4.167,5167,4.167,5168,4.167,5169,4.167,5170,4.167,5171,4.167,5172,4.167,5173,4.167]],["t/4905",[1,1.516,10,2.845,23,1.742,59,1.848,91,1.986,97,1.956,121,1.601,125,4.615,259,1.4,270,2.948,312,1.956,313,3.955,356,4.976,406,1.664,434,2.092,510,2.312,523,3.067,736,2.081,793,6.081,805,2.837,807,2.24,808,2.234,815,2.209,879,4.883,880,3.441,2150,2.454,2436,4.111,2437,2.432,5174,10.284]],["t/4907",[1,1.36,2,2.715,3,3.964,22,1.345,25,4.271,27,0.89,32,3.203,49,4.321,120,2.255,122,2.653,207,1.847,212,3.025,227,1.436,232,4.462,262,2.653,281,5.023,366,4.614,393,3.805,396,1.521,406,1.493,462,2.715,656,3.87,707,3.118,736,1.867,789,5.422,1642,5.702,1643,5.702,2696,7.659,3690,6.176,3820,5.376,4313,6.176,4316,6.176,4966,5.702,5175,7.065]],["t/4909",[1,1.227,9,1.054,10,2.465,12,4.942,16,1.011,23,2.152,27,0.523,29,4.06,59,2.09,60,2.847,65,4.205,69,2.243,84,1.365,91,2.247,97,2.213,123,1.202,133,1.376,157,1.298,161,2.124,166,2.357,168,1.764,178,3.778,241,3.553,259,1.584,270,2.492,312,1.583,339,2.356,406,1.347,434,2.09,462,1.595,470,4.386,510,1.87,562,3.647,563,2.734,571,3.441,662,1.713,725,2.118,736,1.684,805,2.458,807,1.812,808,1.807,815,2.499,817,3.472,1026,1.989,1063,2.32,1099,2.015,1458,3.404,1595,2.329,1797,3.944,1976,3.013,2002,5.57,2150,1.986,2437,1.967,4174,3.013,5176,3.751,5177,3.548,5178,7.269,5179,4.059,5180,4.059,5181,6.372,5182,4.059,5183,4.059,5184,4.059,5185,4.059,5186,4.059,5187,3.751,5188,3.751,5189,4.059,5190,4.059]],["t/4911",[1,0.986,10,2.105,16,1.275,23,2.029,27,0.42,29,3.83,59,1.785,60,2.983,84,1.097,91,1.919,97,1.89,107,1.444,123,0.966,141,2.508,157,1.55,166,2.721,178,3.226,206,2.14,211,4.654,248,3.061,259,0.91,270,2.338,312,2.255,339,3.717,406,1.082,434,1.36,462,1.281,470,4.243,510,3.154,544,3.061,571,3.883,637,3.209,666,2.334,668,2.388,725,2.672,736,1.353,805,2.099,807,1.456,808,1.452,815,2.134,904,2.652,912,2.672,1063,2.771,1099,2.542,1249,6.735,1458,2.735,1595,1.871,1803,2.321,2126,3.296,2150,1.595,2437,1.581,2696,3.131,4306,6.652,4359,4.731,5176,4.731,5177,4.476,5191,7.609,5192,7.609,5193,5.12,5194,5.12,5195,5.12,5196,5.12,5197,5.12,5198,5.12,5199,5.12,5200,5.12,5201,5.12]],["t/4913",[1,1.044,10,1.5,11,2.852,16,1.35,22,1.032,23,2.193,27,0.445,59,1.863,70,2.086,75,2.369,84,2.609,91,1.368,97,1.347,140,2.711,147,1.644,185,2.486,223,3.942,227,1.102,234,2.946,259,1.669,270,2.418,285,1.975,293,3.357,312,1.972,313,3.054,349,2.148,400,1.722,406,1.146,434,2.109,478,2.769,482,2.267,510,2.757,523,3.092,571,2.095,601,1.7,736,1.433,805,2.19,807,1.543,808,1.538,815,1.521,894,2.875,951,6.811,1041,3.596,1042,2.769,1063,2.891,1099,2.693,1166,3.542,1412,4.242,1458,6.142,1574,3.542,1718,5.012,1802,3.963,1808,4.026,2150,1.69,2436,2.831,2437,1.675,2845,4.539,5202,9.392,5203,7.94,5204,5.424]],["t/4915",[1,0.723,23,2.213,27,0.308,59,0.881,61,3.37,84,1.283,91,0.947,94,1.506,97,0.932,157,1.737,166,1.794,259,0.667,270,1.924,312,1.488,339,3.672,406,0.793,434,0.997,513,3.402,549,2.173,550,3.339,562,3.955,570,1.546,601,1.878,684,3.08,717,3.58,736,0.992,762,1.692,778,3.036,802,3.126,805,1.652,807,1.068,808,1.065,815,1.053,817,4.384,962,2.616,1020,3.58,1022,3.08,1024,3.31,1026,2.935,1027,3.754,1041,2.489,1063,2.181,1106,4.446,1110,3.912,1111,4.446,1249,3.754,1255,3.339,1256,3.971,1329,4.103,1601,3.126,1604,2.81,1629,2.916,1634,3.754,1635,4.103,1638,3.505,1696,4.035,1800,4.035,1801,4.177,1802,1.584,2150,1.17,2437,1.159,2694,2.669,3122,3.141,3543,4.177,4170,4.035,4172,4.103,4230,4.558,4232,4.558,4577,5.012,5205,3.754,5206,5.989,5207,5.989,5208,7.473,5209,3.754,5210,3.754,5211,3.754,5212,3.754,5213,3.754,5214,5.989,5215,5.989,5216,3.754,5217,3.754,5218,3.754,5219,5.236,5220,3.754,5221,5.989,5222,5.989,5223,3.754,5224,3.754,5225,3.754,5226,7.473,5227,3.754,5228,3.754,5229,3.754,5230,3.754,5231,3.754,5232,5.989,5233,3.754,5234,3.754,5235,3.754,5236,3.754,5237,3.754]],["t/4917",[1,1.343,10,2.624,23,1.606,59,1.636,91,1.759,97,1.732,123,1.316,133,2.364,157,2.355,166,2.09,207,1.824,259,1.24,270,2.774,297,4.122,312,2.676,363,3.312,400,2.215,406,1.474,434,2.52,510,2.784,513,5.387,527,3.18,561,5.439,570,1.8,635,4.253,736,1.843,757,3.463,805,2.617,807,1.984,808,1.978,815,1.956,962,3.047,966,3.234,1035,3.162,1038,3.511,1063,3.453,1803,3.162,2150,2.173,2437,2.154,2438,3.463,2439,3.44,5238,9.484,5239,6.975]],["t/4919",[1,1.255,10,2.505,23,1.904,59,2.124,91,2.283,97,2.249,123,1.23,133,2.21,157,2.289,166,1.953,207,1.705,259,1.159,270,2.678,297,3.935,312,2.583,340,5.412,363,3.095,400,2.07,406,1.378,434,2.405,462,1.632,510,3.053,513,5.142,527,2.972,561,5.192,570,1.683,635,4.06,736,1.723,757,3.237,805,2.498,807,1.854,808,1.849,815,2.539,962,2.848,966,3.023,1035,2.955,1038,3.281,1042,3.328,1595,2.383,1803,2.955,2150,2.031,2437,2.013,2438,3.237,2439,3.215,5240,6.519,5241,6.519,5242,6.519,5243,6.519]],["t/4921",[1,1.293,10,2.557,23,1.928,59,1.576,84,1.981,91,1.694,97,1.669,123,1.268,133,2.278,157,2.153,166,2.013,207,1.757,259,1.194,270,2.721,297,4.018,312,2.625,363,3.19,400,2.133,406,1.42,434,2.456,452,5.301,510,2.713,513,5.25,527,3.063,561,5.301,570,1.734,635,4.145,736,1.776,757,3.336,805,2.55,807,1.911,808,1.906,815,1.885,962,2.935,966,3.115,1035,3.046,1038,3.382,1063,2.446,1802,2.835,1803,3.046,2150,2.094,2437,2.074,2438,3.336,2439,3.314,5244,9.244,5245,6.719,5246,6.719]],["t/4923",[1,1.527,10,2.858,23,1.75,59,1.861,84,2.608,91,2.001,97,1.97,123,1.497,259,1.41,270,2.958,312,2.566,339,2.933,406,1.676,434,2.108,507,3.255,510,2.329,513,5.869,561,5.925,736,2.096,805,2.851,807,2.257,808,2.25,815,2.225,1056,3.448,1063,3.762,2150,2.472,2437,2.449,5247,10.333,5248,7.933]],["t/4925",[0,0.489,1,0.636,2,0.826,10,1.494,12,1.685,21,1.442,23,2.308,27,0.271,37,1.549,46,1.093,59,2.047,70,4.678,75,1.442,85,1.414,91,1.362,97,1.341,111,1.481,125,1.331,141,1.618,169,1.28,178,1.4,184,1.18,259,0.587,270,1.764,300,2.347,312,1.341,337,1.952,349,1.308,374,1.549,406,0.698,413,2.451,434,0.877,462,0.826,571,4.747,693,4.19,701,4.778,719,1.779,735,4.094,736,0.873,762,1.489,789,1.65,805,1.49,807,0.939,808,0.937,815,1.515,912,1.723,957,2.583,1063,1.966,1071,2.886,1135,3.193,1233,1.618,1463,3.051,1510,5.989,1595,1.207,2150,1.029,2437,1.019,2536,2.019,2864,4.72,3026,2.303,3349,4.72,3440,4.358,3706,4.519,3816,4.99,3859,2.886,3922,4.99,4308,2.886,5249,3.302,5250,3.302,5251,3.302,5252,3.302,5253,5.4,5254,3.302,5255,3.302,5256,3.302,5257,3.302,5258,3.302,5259,3.302,5260,3.302,5261,3.302,5262,3.302,5263,3.302,5264,3.302,5265,3.302,5266,3.302,5267,3.302,5268,3.302,5269,3.302,5270,3.302,5271,3.302,5272,3.302,5273,3.302,5274,3.302,5275,3.302,5276,3.302,5277,3.302,5278,3.302,5279,3.302,5280,5.4,5281,5.4,5282,5.4,5283,5.4,5284,5.4,5285,5.4,5286,4.72,5287,5.4,5288,5.4,5289,5.4,5290,5.4,5291,5.4,5292,5.4,5293,3.302,5294,3.302,5295,3.302,5296,3.302,5297,3.302,5298,3.302,5299,5.4,5300,3.302,5301,3.302,5302,3.302,5303,3.302]],["t/4927",[1,1.178,10,2.396,21,2.673,23,1.851,59,2.032,90,2.22,91,2.184,97,2.151,123,1.896,133,2.074,157,2.508,166,2.595,168,2.659,197,3.708,203,3.997,207,1.6,245,3.08,259,1.088,270,2.588,297,3.764,312,2.151,363,2.905,400,1.943,406,1.293,434,2.301,462,1.531,510,2.95,527,2.789,570,1.579,635,3.884,736,1.617,757,3.038,805,2.389,807,1.741,808,1.736,815,2.429,847,4.268,951,5.361,955,5.121,962,2.673,966,2.837,1026,2.998,1035,2.774,1038,3.08,1042,3.124,1052,3.059,1595,2.236,1803,2.774,1965,4.442,2150,1.907,2437,1.889,2438,3.038,2439,3.018,5304,6.119,5305,6.119]],["t/4929",[1,1.387,9,1.191,10,2.682,23,2.071,27,0.591,59,2.274,91,2.445,97,2.408,157,1.467,197,3.084,203,4.705,204,3.881,206,4.052,237,3.946,259,1.28,270,2.82,312,1.789,406,1.522,430,5.814,434,1.914,445,4.306,462,1.803,491,5.506,510,2.115,736,1.904,759,5.732,762,3.248,805,2.674,807,2.049,808,2.043,815,2.719,951,6.001,1042,3.678,1595,2.633,1611,6.658,2150,2.245,2437,2.224,3017,3.789,5306,7.204,5307,7.204]],["t/4931",[1,1.248,10,2.494,21,2.831,23,1.899,59,2.115,90,2.351,91,2.274,97,2.239,123,1.223,133,2.197,157,2.283,166,2.701,207,1.695,231,1.793,245,3.262,259,1.152,270,2.669,292,2.971,297,3.918,312,2.239,363,3.077,400,2.058,406,1.369,434,2.395,462,1.622,510,3.043,527,2.954,570,1.673,635,4.043,736,1.713,757,3.218,805,2.487,807,1.843,808,1.838,815,2.529,951,5.581,962,2.831,966,3.005,1026,3.175,1035,2.938,1038,3.262,1042,3.308,1052,3.239,1595,2.369,1803,2.938,2150,2.019,2437,2.001,2438,3.218,2439,3.196,5308,6.481,5309,6.481]],["t/4933",[1,1.024,7,2.572,10,2.165,23,2.159,26,1.906,27,0.437,59,1.836,84,2.195,91,1.974,97,1.944,110,4.164,123,1.477,147,2.373,157,2.325,164,3.112,212,2.277,227,1.591,232,5.324,235,1.689,259,0.945,270,2.391,286,2.992,293,3.292,312,1.321,313,2.046,339,2.893,396,1.145,406,1.124,434,1.413,462,1.331,510,2.726,523,3.048,565,2.658,625,2.992,674,2.776,702,2.606,736,1.405,805,2.159,807,1.513,808,1.509,815,2.195,1041,3.526,1123,2.452,1595,1.944,1629,2.589,2118,7.771,2150,1.657,2436,2.776,2437,1.642,4002,4.047,4339,4.649,5310,4.915,5311,7.264,5312,5.318,5313,7.827,5314,4.915,5315,5.318,5316,5.318,5317,5.318,5318,5.318]],["t/4935",[1,1.262,7,3.172,10,2.515,23,2.168,26,1.822,27,0.538,59,2.133,84,1.405,91,2.293,97,2.258,110,4.243,147,1.988,157,2.41,164,3.837,186,2,232,4.866,235,2.082,259,1.166,270,2.686,312,1.629,339,2.424,406,1.386,434,1.742,462,1.641,510,2.668,565,3.278,571,2.533,736,1.733,805,2.508,807,1.865,808,1.86,815,2.55,1041,4.348,1123,3.023,1595,2.397,1629,3.192,2150,2.044,2437,2.025,5310,6.061,5314,6.061,5319,6.558,5320,6.558,5321,6.558,5322,6.558,5323,6.558]],["t/4937",[1,1.081,10,2.254,20,3.191,23,2.208,27,0.669,34,2.311,59,2.248,60,2.158,84,1.204,91,2.054,97,2.023,107,2.298,123,1.06,141,2.753,157,1.144,161,2.715,166,2.871,259,0.998,270,2.467,285,2.045,312,2.38,339,2.077,406,1.187,434,1.492,462,1.406,510,2.813,570,1.45,571,2.17,630,2.932,666,2.561,729,3.862,736,1.485,805,2.247,807,1.598,808,1.593,815,2.285,1063,2.966,1110,3.669,1118,4.925,1123,2.59,1458,3.002,1595,2.053,1604,2.636,1629,2.735,1845,3.725,2126,3.617,2150,1.751,2437,1.735,2488,4.275,2696,3.436,3726,4.911,4305,8.857,4306,4.911,4966,6.574,5177,4.911,5187,5.192,5188,5.192,5324,5.618,5325,5.618,5326,5.618,5327,5.618]],["t/4939",[1,0.959,10,2.471,16,1.24,20,2.829,23,2.261,27,0.612,59,2.096,84,1.914,91,1.88,97,1.851,141,2.44,200,3.806,206,2.082,227,1.815,232,2.323,259,0.885,269,1.981,270,2.3,283,2.394,285,1.813,312,1.237,313,3.814,339,1.841,377,2.705,396,1.072,400,1.581,406,1.052,434,1.323,462,1.246,510,1.462,523,2.903,549,2.704,571,3.45,630,2.599,674,3.89,729,3.004,736,1.316,805,2.057,807,1.417,808,1.413,815,2.091,1063,3.611,1099,2.473,1376,4.799,1595,1.82,1604,2.336,1636,2.705,1845,3.302,2150,1.552,2436,4.662,2437,1.538,2696,3.046,2781,3.697,3156,3.615,3726,4.354,4002,6.798,4307,3.79,4309,3.697,4310,3.896,4316,7.809,4318,3.896,4319,3.896,4966,6.016,5311,3.896,5328,4.98,5329,6.016,5330,4.019,5331,4.98,5332,4.98]],["t/4941",[1,1.029,10,2.576,16,1.331,23,2.259,59,2.185,84,1.145,91,1.981,97,1.951,104,1.729,157,1.897,200,3.968,227,1.893,232,3.663,259,0.95,270,2.397,283,2.569,312,1.951,313,3.582,377,2.903,396,1.151,406,1.129,434,1.42,462,1.337,510,1.569,513,3.035,523,3.059,549,2.849,571,3.597,674,4.099,729,3.165,736,1.412,805,2.167,807,1.52,808,1.516,815,2.203,844,2.768,1063,3.738,1099,2.653,1376,5.057,1595,1.953,1604,2.507,1798,3.6,1983,3.661,2150,1.665,2436,4.86,2437,1.65,2781,3.967,3156,3.879,4002,7.086,4307,4.067,4309,3.967,4310,4.18,4313,4.672,4318,4.18,4319,4.18,5311,4.18,5329,4.313,5330,4.313,5333,5.344,5334,5.344]],["t/4943",[1,0.995,10,2.526,16,1.287,23,2.284,59,2.142,84,1.107,91,1.932,97,1.903,104,1.672,157,1.561,200,3.891,227,1.856,232,3.574,259,0.919,270,2.351,283,2.484,312,1.903,313,3.512,339,1.911,377,2.807,396,1.113,406,1.092,434,1.373,462,1.293,510,1.517,523,2.984,549,2.779,571,3.527,601,1.62,674,3.999,729,3.088,736,1.366,805,2.114,807,1.47,808,1.466,815,2.149,844,2.677,1063,3.677,1099,2.566,1123,2.383,1376,4.933,1434,2.881,1595,1.889,1604,2.424,1629,2.516,1798,3.481,1802,2.181,1983,3.541,2150,1.61,2436,4.766,2437,1.596,2781,3.837,3156,3.751,4002,6.949,4307,3.933,4309,3.837,4310,4.043,4314,4.776,4318,4.043,4319,4.043,5311,4.043,5329,4.171,5330,4.171,5335,5.168,5336,5.168]],["t/4945",[1,0.898,10,2.375,16,1.161,23,2.238,59,2.014,84,0.999,91,1.789,97,1.762,104,1.509,133,1.581,157,1.748,166,1.397,200,3.657,207,1.219,227,1.744,232,3.308,259,0.829,270,2.21,283,2.241,297,3.083,312,2.132,313,3.689,363,2.214,377,2.533,396,1.004,400,1.48,406,0.985,434,1.884,462,1.167,510,2.082,523,2.762,527,2.126,549,2.573,570,1.203,571,3.315,601,1.462,635,3.181,674,3.702,729,2.858,736,1.232,757,2.315,805,1.957,807,1.326,808,1.323,815,1.989,844,2.415,962,2.037,966,2.162,1035,2.114,1038,2.347,1063,3.493,1099,2.315,1123,2.15,1376,4.567,1434,2.6,1595,1.704,1604,3.327,1798,3.141,1802,1.968,1803,2.114,1983,3.194,2150,1.453,2436,4.48,2437,1.44,2438,2.315,2439,2.3,2781,3.462,3156,3.385,4002,6.532,4307,3.548,4309,3.462,4310,3.647,4315,4.309,4318,3.647,4319,3.647,5311,3.647,5329,5.724,5330,3.763,5337,4.663,5338,4.663]],["t/4947",[1,0.854,10,2.303,16,1.105,23,2.189,27,0.364,46,1.469,59,1.953,83,1.979,84,0.951,91,1.722,97,1.696,133,1.504,157,1.904,166,1.329,200,3.546,206,1.854,207,1.16,227,1.692,232,3.184,259,0.789,269,2.716,270,2.143,283,2.133,285,2.486,297,2.967,312,1.696,313,3.201,363,3.242,377,2.41,392,1.169,396,0.955,400,1.409,406,0.938,428,2.544,434,1.814,462,1.11,510,2.004,523,2.659,527,2.022,549,2.477,570,1.145,571,3.215,601,1.391,635,3.062,674,3.564,725,2.315,729,2.752,736,1.172,757,2.203,805,1.884,807,1.262,808,1.258,815,1.915,962,1.938,966,2.057,1035,2.011,1038,2.233,1050,3.294,1063,3.881,1099,2.203,1123,2.045,1233,2.174,1376,4.396,1428,3.22,1434,2.474,1595,1.621,1604,3.203,1656,3.154,1802,1.872,1803,2.011,1983,3.039,2150,1.382,2436,4.344,2437,1.37,2438,2.203,2439,2.188,2781,3.294,3156,3.22,4002,6.334,4307,3.376,4309,3.294,4310,3.47,4317,4.1,4318,3.47,4319,3.47,5311,3.47,5329,3.58,5330,3.58,5339,4.437,5340,4.437,5341,4.437]],["t/4949",[1,1.699,2,2.209,3,2.621,9,1.46,10,3.06,67,4.607,104,2.857,111,3.958,122,3.314,170,4.716,207,2.308,212,3.779,270,2.848,288,4.217,434,2.345,462,3.023,490,4.166,686,5.998,1293,5.112,1495,5.336,1868,7.387,1881,6.157]],["t/4951",[0,1.341,1,1.255,10,2.505,23,2.07,27,0.535,29,3.079,34,2.568,46,2.158,60,2.399,84,1.397,91,2.283,97,2.249,102,2.497,124,2.288,190,2.819,207,1.705,215,3.587,223,3.237,259,1.159,270,2.678,312,2.583,323,2.764,406,1.378,434,1.732,447,3.602,462,2.266,507,2.675,510,1.914,601,2.839,720,3.429,736,1.723,762,2.939,803,3.855,805,2.498,807,1.854,808,1.849,815,2.539,1063,2.374,1161,4.635,1515,5.473,1595,2.383,1802,2.751,2002,7.914,2150,2.031,2437,2.013,2803,4.635,5342,6.519,5343,6.519]],["t/4953",[1,1.396,23,1.649,30,2.767,69,4.007,84,1.554,91,1.829,94,2.91,97,1.801,120,1.709,122,2.723,190,3.136,215,2.501,251,2.949,259,1.73,270,2.83,312,2.418,406,1.532,434,1.927,510,2.129,549,3.532,736,1.916,762,3.27,805,2.686,807,2.063,808,2.057,815,2.034,966,3.362,979,5.852,1035,3.287,1202,4.77,1233,4.77,1234,4.97,1517,5.518,1803,3.287,2150,2.26,2282,6.339,2437,2.239,3322,6.702,3323,8.354,5344,9.737,5345,7.252]],["t/4955",[1,1.159,23,2.299,90,3.105,91,2.158,97,2.126,157,2.21,166,3.25,182,2.949,184,2.151,228,5.116,245,4.308,259,1.77,270,2.793,292,3.924,312,2.126,406,1.272,434,1.599,462,1.506,490,2.84,510,1.767,686,4.945,736,1.59,762,2.714,805,2.993,807,2.435,808,2.428,815,2.401,966,2.791,1035,2.728,1458,4.573,1517,6.513,1595,2.2,1803,2.728,2150,1.875,2437,1.858,2489,3.297,2490,3.356,2494,3.386,3135,5.037,4028,5.562,5346,6.019,5347,6.019,5348,6.019]],["t/4957",[0,0.473,1,1.012,9,0.869,16,0.796,21,1.396,23,2.211,27,0.262,29,2.64,59,0.75,65,4.601,84,1.435,91,1.689,97,1.663,99,1.397,104,1.701,111,1.433,123,1.264,133,1.083,157,1.879,161,3.074,166,2.325,169,1.239,182,1.566,184,1.142,196,4.123,199,4.327,206,1.336,207,1.375,248,1.91,253,1.508,259,1.931,269,1.271,270,2.375,285,3.359,297,2.285,312,1.663,339,1.181,363,1.517,377,1.736,396,0.688,400,1.015,403,1.932,406,1.111,431,1.833,434,2.59,462,0.8,482,2.197,490,1.508,510,1.966,527,1.457,545,2.058,549,2.429,570,1.729,628,1.932,635,3.003,686,3.325,690,2.087,736,0.845,757,1.587,805,2.545,807,1.905,808,1.9,815,1.879,872,2.229,962,1.396,966,1.482,1026,1.566,1035,1.449,1036,2.703,1038,1.609,1042,1.631,1063,2.439,1293,1.851,1423,3.638,1433,1.955,1434,1.782,1515,4.049,1574,2.087,1595,1.168,1629,1.556,1656,6.098,1697,4.859,1798,2.153,1803,1.449,2150,1.638,2437,0.987,2438,1.587,2439,1.576,2489,1.751,2490,1.782,2491,4.001,2492,6.189,2493,2.954,2494,1.798,2495,2.954,2496,2.954,2497,2.954,2647,5.405,3011,2.153,4325,4.596,5349,3.196,5350,5.258,5351,3.196,5352,3.196,5353,2.794,5354,3.196,5355,3.196,5356,3.196]],["t/4959",[1,1.516,10,2.845,23,2.133,90,3.73,91,3.061,97,2.554,259,1.4,270,2.948,312,2.554,406,1.664,434,2.092,462,1.971,510,2.312,736,2.081,762,3.551,805,2.837,806,6.885,807,2.24,808,2.234,815,2.885,1035,3.571,1517,7.826,1595,2.879,2150,2.454,2437,2.432,5357,7.877,5358,7.877]],["t/4961",[0,1.314,1,1.219,2,1.584,9,1.467,10,2.454,23,1.979,29,3.483,30,3.384,60,3.208,61,3.562,91,2.237,97,2.203,107,1.786,120,1.492,186,1.931,215,3.059,227,1.287,231,2.454,259,1.125,270,2.636,312,2.203,406,1.874,434,1.682,462,1.584,485,3.006,510,1.858,707,2.794,736,1.673,762,2.854,778,4.496,779,6.766,805,2.447,807,1.801,808,1.796,815,2.488,829,5.109,1032,3.705,1203,3.919,1515,5.363,1595,2.314,1999,3.872,2150,1.973,2437,1.955,5359,5.851,5360,6.331,5361,6.331]],["t/4963",[1,0.972,16,1.875,23,2.204,34,1.432,59,1.184,60,2.386,84,2.4,91,1.273,97,1.254,99,1.341,104,2.437,124,3.749,133,1.712,157,1.534,166,1.513,207,1.32,259,1.601,270,1.939,285,1.838,297,3.914,312,1.87,363,2.397,400,1.603,406,1.067,434,2.001,462,1.264,510,2.931,527,2.302,549,1.832,570,1.303,601,3.131,635,3.377,729,2.035,736,1.334,757,2.507,805,2.078,807,1.436,808,1.432,815,1.416,962,2.206,966,2.341,1035,2.289,1038,2.541,1063,4.079,1099,3.739,1199,3.401,1208,3.207,1255,4.199,1595,1.845,1802,3.178,1803,2.289,2150,1.573,2437,1.559,2438,2.507,2439,2.49,3308,4.666,3310,5.891,3311,4.414,3312,4.075,5362,7.531,5363,5.049,5364,7.531,5365,7.531,5366,5.049,5367,5.049,5368,5.049,5369,5.049]],["t/4965",[1,1.066,9,1.157,10,1.532,16,1.378,22,0.648,23,2.264,27,0.574,59,1.299,61,1.915,69,3.059,81,1.116,83,1.518,84,2.237,85,2.37,91,2.236,97,2.002,104,1.792,111,1.527,121,0.53,140,1.702,157,1.128,160,1.725,161,2.332,170,1.819,182,2.712,184,1.979,227,0.692,231,0.942,235,1.081,259,1.689,269,1.354,270,2.687,285,2.935,312,1.738,339,2.047,351,2.332,382,1.495,396,0.733,403,2.058,406,1.17,434,0.904,462,1.385,482,1.423,490,1.607,510,0.999,540,2.257,549,3.447,553,2.212,557,2.082,567,2.747,570,0.879,624,4.713,625,1.915,628,2.058,666,2.524,686,3.474,725,1.777,729,1.372,736,0.9,746,2.257,805,2.622,807,1.99,808,1.985,815,2.261,897,1.865,1026,1.668,1033,2.982,1042,1.738,1063,2.016,1099,2.749,1199,2.293,1433,2.082,1434,3.087,1515,3.347,1574,2.223,1595,2.023,1633,4.213,1655,7.421,1845,2.257,2104,2.59,2150,1.725,2437,1.051,2489,3.033,2490,3.087,2494,1.915,3029,7.434,3156,4.018,4037,3.146,4966,2.747,5370,3.404,5371,3.404,5372,3.404,5373,3.404,5374,5.536,5375,5.536,5376,3.404,5377,3.404,5378,3.404,5379,3.404,5380,3.404,5381,3.404]],["t/4967",[1,0.69,10,2.297,23,2.239,27,0.294,37,2.706,59,1.699,84,1.236,91,1.455,97,1.433,122,1.345,123,0.676,133,1.214,147,1.086,157,2.168,166,1.728,194,2.096,201,2.118,207,0.937,227,0.728,259,0.637,270,2.138,284,1.997,297,2.507,312,2.062,319,1.642,349,1.419,363,1.701,395,1.997,400,1.137,406,0.757,434,1.533,462,1.444,490,1.69,510,2.126,527,1.633,549,3.302,570,1.869,594,4.513,601,1.123,635,3.724,696,2.375,704,2.413,720,1.884,736,0.947,757,1.778,789,1.791,805,1.592,807,1.019,808,1.016,815,1.618,966,1.661,1032,2.096,1035,2.615,1038,1.803,1063,2.1,1068,2.998,1118,5.02,1132,3.886,1133,2.998,1202,3.549,1208,2.275,1233,1.755,1234,4.966,1336,6.061,1595,1.309,1802,1.511,1803,3.764,1869,2.802,1886,3.616,2150,1.116,2182,6.061,2437,1.106,2438,1.778,2439,1.767,3323,2.547,3324,2.891,3331,2.998,3347,3.131,3481,2.998,3495,2.891,3560,3.31,4117,2.998,4174,4.283,4175,2.547,4288,3.31,4290,3.31,4291,3.31,4293,3.31,5286,3.131,5382,3.582,5383,3.582,5384,3.582,5385,3.582,5386,3.582,5387,3.582,5388,3.582,5389,3.582,5390,3.582,5391,3.582,5392,3.582,5393,3.582,5394,3.582,5395,3.582,5396,5.769,5397,5.769,5398,3.582,5399,3.582,5400,3.582,5401,3.582,5402,3.582,5403,3.582,5404,3.31,5405,3.582,5406,5.769,5407,8.99]],["t/4969",[1,0.909,3,2.867,23,2.155,27,0.388,69,4.781,91,1.806,97,1.779,142,2.823,148,0.885,157,2.114,182,2.314,184,1.688,225,1.399,226,1.635,227,0.96,259,1.538,270,2.486,312,2.578,319,2.165,396,1.863,406,0.998,434,1.255,462,1.182,490,2.229,510,1.386,549,4.342,550,4.824,570,2.819,686,4.295,736,1.248,762,2.129,805,2.664,807,2.037,808,2.032,815,2.009,867,2.823,1035,2.141,1088,3.132,1093,2.924,1200,6.584,1201,6.448,1220,4.381,1225,5.602,1515,4.33,1573,4.129,1595,1.726,1909,3.858,1982,4.434,2150,1.472,2437,1.458,2489,2.587,2490,2.633,2494,2.658,3474,4.129,3494,4.365,3495,7.792,4412,3.952,5219,6.261,5408,4.723,5409,4.723]],["t/4971",[1,0.959,23,2.283,29,3.373,60,2.628,61,5.027,65,5.26,69,2.752,91,1.88,97,1.851,123,0.94,133,1.688,157,1.82,166,1.492,182,2.44,184,1.78,207,1.302,259,1.588,270,2.553,292,2.283,297,3.24,312,2.219,339,1.841,363,2.365,400,1.581,406,1.052,434,1.98,462,1.246,470,2.777,490,2.35,507,2.043,510,2.911,527,2.27,570,1.924,635,4.006,686,4.435,720,2.619,736,1.316,757,2.473,805,2.736,807,2.12,808,2.114,815,2.091,962,2.176,966,2.309,1035,3.379,1038,2.507,1515,4.506,1595,1.82,1629,2.424,1803,2.258,2150,1.552,2437,1.538,2438,2.473,2439,2.456,2489,2.728,2490,2.777,2494,2.802,4136,4.603,5353,4.354,5410,4.98,5411,4.98,5412,4.019,5413,4.98]],["t/4973",[1,0.661,23,2.225,84,1.91,91,1.407,97,1.385,123,0.648,157,2.048,166,2.428,178,1.457,182,1.684,184,1.228,259,1.251,270,2.086,312,2.013,313,1.322,339,4.114,406,0.726,434,0.913,462,0.86,490,1.622,507,1.41,510,1.009,523,2.172,562,3.758,571,2.719,684,1.767,686,3.496,736,0.908,778,1.742,802,4.23,805,2.236,807,1.587,808,1.582,815,1.565,844,1.78,1020,4.845,1022,4.167,1024,4.478,1026,1.684,1027,5.08,1028,2.494,1052,1.718,1056,1.493,1063,2.564,1106,4.141,1111,2.551,1255,4.519,1256,2.278,1329,2.354,1515,3.372,1595,1.256,1604,1.612,1634,5.08,1635,2.354,2150,1.071,2436,1.793,2437,1.061,2489,1.882,2490,1.916,2494,1.933,2504,4.141,3543,5.653,3820,2.615,4036,5.508,4038,3.004,4170,5.459,4172,5.552,4175,3.966,4176,4.363,4230,2.615,4232,6.167,4239,3.004,4286,3.004,4508,4.876,5414,3.436,5415,3.436,5416,3.176,5417,3.176,5418,3.176,5419,3.176,5420,3.176,5421,3.176,5422,3.176,5423,3.176,5424,2.876,5425,3.176,5426,3.176,5427,2.876,5428,3.176,5429,3.176,5430,3.176,5431,3.436,5432,3.436,5433,7.042,5434,5.893,5435,6.507,5436,2.773,5437,3.436,5438,3.436,5439,3.436,5440,3.004,5441,3.436,5442,3.436]],["t/4975",[1,0.557,23,2.285,29,0.984,59,1.464,60,1.282,61,1.628,65,2.284,84,1.74,91,1.221,97,1.202,123,0.546,133,0.981,157,1.991,166,2.186,178,1.226,182,1.417,184,1.034,207,0.756,259,1.109,270,1.878,297,2.103,312,2.017,313,1.862,339,3.878,363,1.373,400,0.918,406,0.611,434,1.286,462,0.724,490,1.365,510,1.421,523,1.126,527,1.319,562,3.383,570,0.747,571,2.41,635,2.17,684,1.487,686,3.098,736,0.764,757,1.436,778,3.163,802,3.808,805,2.013,807,1.377,808,1.373,815,1.358,844,1.498,962,1.264,966,1.341,973,2.421,1020,4.361,1022,3.751,1024,4.032,1026,1.417,1027,4.573,1028,2.1,1035,1.311,1038,1.456,1050,3.593,1052,1.446,1063,2.272,1093,2.996,1106,3.593,1111,2.147,1112,4.05,1255,4.068,1256,1.918,1329,1.982,1595,1.057,1604,2.271,1634,4.573,1635,1.982,1803,1.311,2150,0.901,2436,1.51,2437,0.893,2438,1.436,2439,1.427,2489,1.585,2490,1.613,2494,1.628,2504,3.593,3543,5.089,3653,2.421,3820,2.201,4036,4.881,4038,2.529,4170,4.915,4172,4.998,4175,3.441,4176,3.786,4230,2.201,4232,5.552,4239,2.529,4508,2.529,5412,3.906,5416,4.473,5417,2.673,5418,2.673,5419,2.673,5420,2.673,5421,2.673,5422,2.673,5423,2.673,5424,2.421,5425,2.673,5426,2.673,5427,2.421,5428,2.673,5429,2.673,5430,2.673,5434,5.222,5435,5.767,5440,2.529,5443,2.893,5444,2.893,5445,2.893,5446,4.231,5447,2.893,5448,2.893,5449,2.893,5450,2.893,5451,2.334,5452,2.893,5453,2.893,5454,2.893,5455,2.893,5456,2.673,5457,2.673,5458,2.893,5459,2.893]],["t/4977",[1,0.473,23,2.384,27,0.202,46,0.814,59,1.299,60,2.41,84,1.727,91,1.063,97,1.047,133,0.833,157,2.071,158,1.522,160,1.246,161,0.819,166,0.737,182,1.204,184,1.979,187,1.371,188,2.732,207,0.643,259,1.167,270,1.69,286,1.383,297,1.833,312,1.375,324,1.541,339,3.514,356,1.068,363,1.167,377,1.335,400,0.781,406,0.519,434,1.12,452,2.418,462,0.615,490,1.16,510,1.238,523,0.957,527,1.121,549,2.68,570,0.635,571,0.949,594,1.923,635,1.891,686,2.749,736,0.65,757,1.221,805,1.811,807,1.199,808,1.196,815,1.183,817,3.26,851,1.606,951,2.61,962,2.868,966,1.14,1026,3.216,1033,1.324,1035,1.114,1036,1.264,1038,1.237,1063,1.535,1255,4.494,1294,2.889,1423,2.29,1428,1.784,1458,3.507,1595,0.898,1604,3.466,1629,2.695,1632,6.746,1633,4.213,1634,5.053,1635,1.684,1636,3.008,1638,3.24,1696,1.656,1803,1.114,1869,1.923,2150,0.766,2437,0.759,2438,1.221,2439,1.212,2489,1.347,2490,1.371,2494,1.383,2526,1.63,2531,3.347,4327,3.686,5460,2.458,5461,2.458,5462,6.565,5463,5.537,5464,4.217,5465,2.458,5466,4.217,5467,4.217,5468,2.458,5469,2.458,5470,2.458,5471,2.458,5472,4.217,5473,2.458,5474,2.458,5475,2.458,5476,2.458,5477,2.458,5478,6.565,5479,2.458,5480,2.272,5481,2.272,5482,2.272,5483,2.272,5484,5.117,5485,4.217,5486,2.458,5487,2.458,5488,2.458,5489,2.458,5490,2.458,5491,2.458,5492,2.458,5493,2.458,5494,2.458,5495,2.458,5496,2.458,5497,2.458]],["t/4979",[1,1.104,23,2.295,59,1.345,84,1.772,91,2.085,97,2.054,123,1.56,157,2.387,166,2.905,182,2.81,183,3.55,184,2.05,259,1.723,270,2.732,312,2.054,339,3.923,406,1.212,434,1.524,462,1.435,490,2.707,507,2.353,510,1.683,686,4.814,736,1.516,805,2.928,807,2.352,808,2.345,815,2.319,966,2.659,1052,4.133,1056,2.493,1515,4.999,1595,2.096,1604,3.879,1803,2.6,2150,1.787,2437,1.771,2489,3.142,2490,3.198,2494,3.227,4036,6.468,5436,4.629,5498,5.735,5499,5.735,5500,5.3,5501,5.735,5502,5.735]],["t/4981",[1,1.014,23,2.238,59,1.236,84,1.665,91,1.96,97,1.93,123,1.466,133,1.785,157,2.397,166,3.257,182,2.581,183,3.261,184,1.883,207,1.377,259,1.641,270,2.624,297,3.377,312,2.293,363,2.501,400,1.672,406,1.113,434,2.064,462,1.318,490,2.486,510,2.71,527,2.401,570,1.359,635,3.485,686,4.585,736,1.392,757,2.615,805,2.812,807,2.21,808,2.204,815,2.18,962,2.301,966,3.603,1035,2.388,1038,2.651,1052,3.884,1517,5.913,1595,1.925,1604,2.471,1803,3.523,2150,1.641,2437,1.626,2438,2.615,2439,2.598,2489,2.885,2490,2.937,2494,2.964,4036,6.079,4577,4.408,5451,4.251,5503,5.267,5504,5.267,5505,4.868,5506,5.267,5507,5.267]],["t/4983",[0,0.738,1,0.959,12,5.689,23,2.217,29,1.694,60,2.628,91,1.88,97,1.851,123,1.406,133,1.688,157,1.82,160,3.778,161,2.978,166,1.492,182,2.44,184,1.78,190,3.223,207,1.302,259,1.763,270,2.553,297,3.24,312,2.219,339,1.841,363,2.365,400,1.581,406,1.052,434,1.98,462,1.246,490,2.35,507,2.043,510,2.622,527,2.27,570,1.924,624,3.355,635,4.006,686,4.435,720,2.619,736,1.316,757,2.473,805,2.736,807,2.12,808,2.114,815,2.091,962,2.176,966,2.309,1035,3.379,1038,2.507,1515,4.506,1595,1.82,1629,2.424,1803,2.258,2150,1.552,2437,1.538,2438,2.473,2439,2.456,2489,2.728,2490,2.777,2494,2.802,2513,6.889,4137,4.603,5353,4.354,5412,6.016,5508,4.98,5509,8.934]],["t/4985",[1,0.827,9,1.349,10,1.843,23,2.258,59,2.156,60,1.765,84,0.921,91,2.508,97,2.283,99,2.795,123,0.811,157,0.875,169,2.584,188,1.457,259,1.45,270,2.92,312,2.47,339,2.463,356,2.895,369,2.396,406,0.908,434,1.142,458,5.92,462,1.076,510,1.955,523,2.594,601,1.347,637,2.694,736,1.136,803,2.541,805,1.838,807,1.222,808,1.219,815,2.578,817,4.056,867,3.983,962,2.91,1063,2.426,1595,1.571,1629,3.243,1636,3.619,1638,3.898,1802,2.811,2150,1.339,2437,1.327,2518,5.496,2520,3.119,2522,3.362,2523,3.972,2526,4.417,2531,4.027,2575,4.737,3063,5.07,3064,5.377,3082,3.972,5510,6.157,5511,6.157,5512,4.298,5513,4.298,5514,4.298,5515,4.298,5516,4.298,5517,4.298,5518,4.298,5519,4.298,5520,4.298,5521,4.298,5522,3.972,5523,4.298,5524,4.298,5525,4.298]],["t/4987",[1,0.954,10,2.055,23,2.197,27,0.61,59,1.743,60,1.968,83,2.211,91,2.247,97,1.845,99,1.974,120,1.169,123,1.402,188,3.593,202,2.445,207,1.296,225,1.468,226,1.716,227,1.008,259,1.583,270,2.293,312,1.845,313,1.907,356,3.229,396,1.067,406,1.048,434,1.317,458,5.531,462,1.241,470,2.764,510,1.455,523,2.893,570,1.28,601,1.554,736,1.31,761,3.34,805,2.05,807,1.41,808,1.406,815,2.084,817,4.367,958,3.878,962,3.245,1063,3.244,1595,1.812,1629,3.616,1636,4.035,1638,4.347,1733,3.34,1802,3.135,1806,3.458,2150,1.545,2437,1.531,2522,3.878,2526,4.926,2531,4.491,2535,5.392,2536,3.032,2541,3.458,2575,3.525,3064,5.995,3084,3.599,5526,4.958,5527,4.958,5528,4.582,5529,4.582,5530,4.582,5531,6.865,5532,4.582,5533,4.582,5534,4.582,5535,4.582]],["t/4989",[0,0.449,1,0.583,2,0.758,23,2.328,27,0.413,29,2.193,59,1.18,60,2.74,83,1.351,84,1.382,90,1.099,91,1.268,97,1.249,110,1.231,120,0.714,123,0.571,157,1.024,182,1.484,184,1.082,188,3.227,189,1.009,209,1.358,225,0.897,226,1.048,227,1.31,231,0.838,259,1.838,270,1.933,312,1.249,313,1.165,339,2.384,349,1.199,356,2.185,393,1.205,396,1.083,403,1.831,406,0.64,434,0.805,456,4.344,458,2.624,462,0.758,470,1.688,490,1.429,523,1.958,556,1.772,570,1.298,571,1.942,601,0.95,635,1.358,666,1.38,667,1.978,686,3.201,736,0.8,761,2.04,805,2.071,807,1.43,808,1.426,815,1.41,817,3.314,958,3.933,962,2.197,1033,1.631,1052,1.514,1063,3.033,1088,2.008,1118,3.898,1123,1.396,1370,2.153,1399,2.304,1458,4.012,1595,1.107,1629,2.448,1636,2.731,1638,2.942,1733,2.04,1802,2.122,1806,2.112,1909,1.631,2150,0.944,2437,0.935,2439,1.494,2489,1.659,2490,1.688,2494,1.704,2526,3.334,2531,6.446,2536,1.852,2541,3.507,2542,2.534,2576,3.445,3064,4.058,3084,2.198,5013,2.799,5014,2.799,5522,2.799,5528,2.799,5529,2.799,5530,2.799,5531,6.939,5532,4.647,5533,2.799,5534,2.799,5535,2.799,5536,3.028,5537,2.799,5538,3.028,5539,5.029,5540,5.029,5541,7.508,5542,7.508,5543,3.028,5544,3.028,5545,3.028,5546,3.028,5547,3.028,5548,3.028,5549,3.028,5550,3.028,5551,3.028]],["t/4991",[1,1.205,23,2.252,59,2.387,91,2.219,97,2.185,123,1.181,157,1.792,259,1.809,270,2.62,312,2.185,339,3.762,406,1.323,434,1.663,462,1.566,507,2.568,510,1.837,736,1.654,778,4.46,779,5.097,802,3.267,805,2.428,807,1.78,808,1.775,815,2.468,1022,3.218,1056,2.72,1063,3.204,1595,2.287,2150,1.95,2437,1.932,2498,5.051,3543,4.365,4192,5.471,4296,5.471,4297,5.471,4298,5.471,4299,5.471,4304,5.471,5424,5.238,5427,5.238,5552,6.259,5553,6.259,5554,5.471,5555,5.784,5556,5.784,5557,5.784,5558,5.784,5559,5.784,5560,5.784,5561,5.784,5562,5.784]],["t/4993",[1,1.098,23,2.164,59,2.268,91,2.077,97,2.046,123,1.076,133,1.934,157,1.969,166,1.709,207,1.492,259,1.718,270,2.489,297,3.58,312,2.401,339,2.109,363,2.709,400,1.811,406,1.206,434,2.188,462,1.428,510,2.418,527,2.601,570,1.473,635,3.694,736,1.508,757,2.833,778,4.175,779,4.771,802,2.978,805,2.273,807,1.623,808,1.618,815,2.311,962,2.492,966,2.646,1022,2.934,1035,2.587,1038,2.872,1063,2.999,1595,2.085,1803,2.587,2150,1.778,2437,1.762,2438,2.833,2439,2.814,2498,4.605,3543,3.979,4193,4.988,4296,4.988,4297,4.988,4298,4.988,4299,4.988,4304,4.988,5424,4.775,5427,4.775,5555,5.273,5556,5.273,5557,5.273,5558,5.273,5559,5.273,5560,5.273,5561,5.273,5562,5.273,5563,5.706,5564,5.706,5565,5.273]],["t/4995",[1,0.676,3,1.043,12,1.793,14,0.919,16,1.414,23,2.11,27,0.288,29,3.452,34,2.557,38,1.959,59,1.677,60,1.894,65,3.374,84,0.753,91,1.432,92,4.755,97,1.411,104,1.137,107,1.602,110,1.428,121,0.884,122,1.319,123,0.663,130,2.015,133,1.191,157,1.672,161,1.171,166,1.702,207,0.919,215,1.212,259,0.624,270,1.84,297,2.468,312,1.775,339,2.643,344,2.035,363,1.668,400,1.115,403,2.124,406,0.742,434,1.509,462,0.879,476,2.124,507,3.369,510,3.429,513,3.226,527,1.602,561,3.257,562,2.633,570,2.326,601,2.574,635,3.206,720,1.848,722,2.45,725,1.834,729,3.633,736,0.928,757,1.744,805,1.567,807,0.999,808,0.997,815,1.593,817,2.507,888,2.748,962,1.535,966,1.629,1035,1.593,1038,1.768,1056,3.107,1063,2.989,1099,2.82,1595,1.284,1629,1.71,1802,3.464,1803,1.593,1807,2.94,2126,2.262,2150,1.095,2381,4.965,2437,1.085,2438,1.744,2439,1.733,2498,2.835,2650,3.071,3100,2.94,4138,3.247,4170,2.367,5178,5.248,5566,7.149,5567,3.513,5568,3.513,5569,3.513,5570,7.149,5571,3.513,5572,5.679,5573,5.679,5574,3.513,5575,5.679,5576,7.149,5577,3.513,5578,3.513,5579,3.513,5580,3.513,5581,3.513,5582,3.513,5583,3.513,5584,3.513,5585,3.513,5586,3.513,5587,3.513,5588,3.513]],["t/4997",[1,0.913,23,2.215,29,1.613,60,2.298,61,4.043,91,1.812,97,1.785,123,1.356,133,1.608,157,1.767,166,1.421,182,2.324,184,1.695,207,1.24,259,1.542,270,2.491,297,3.123,312,2.154,339,1.754,363,2.252,400,1.506,406,1.002,434,1.909,462,1.187,470,2.645,490,2.239,507,1.946,510,3.052,527,2.162,570,2.239,572,3.098,588,2.645,600,3.61,628,2.868,635,3.89,686,4.307,720,2.495,729,4.409,736,1.254,757,2.355,805,2.67,807,2.044,808,2.038,815,2.016,817,2.094,962,2.072,966,2.199,1035,2.15,1038,2.387,1110,4.693,1458,3.839,1515,5.244,1595,1.734,1629,2.309,1803,3.258,1804,6.88,2150,1.478,2437,1.465,2438,2.355,2439,2.339,2489,2.599,2490,2.645,2494,2.669,2498,3.828,4139,4.384,5412,5.799,5589,4.744,5590,4.744,5591,4.744,5592,7.186,5593,7.186]],["t/4999",[1,0.847,23,2.331,59,1.592,84,2.155,91,1.711,97,1.685,123,0.83,157,2.164,178,1.866,182,2.156,184,1.573,259,1.472,270,2.396,312,1.685,339,4.226,406,0.93,434,1.169,462,1.101,490,2.077,507,1.806,510,1.992,549,1.596,550,2.454,562,2.041,570,1.136,571,2.621,686,4.112,717,2.631,736,1.163,805,2.568,807,1.93,808,1.925,815,1.903,817,1.942,962,1.922,966,2.041,1014,2.661,1056,1.913,1063,2.471,1123,2.029,1458,4.425,1595,1.608,1601,2.297,1604,2.065,1629,2.142,1638,2.575,1696,5.579,1800,2.965,1801,3.07,1803,1.995,1804,4.825,2150,1.371,2437,1.359,2489,2.411,2490,2.454,2494,2.476,3051,3.267,3136,3.847,4323,4.067,5436,5.476,5554,5.932,5594,4.401,5595,4.067,5596,4.067,5597,4.067,5598,4.067,5599,4.067,5600,4.067,5601,4.067,5602,4.067,5603,4.067,5604,4.067,5605,7.239,5606,6.271,5607,3.683,5608,4.067,5609,3.847]],["t/5001",[1,0.781,7,1.963,10,1.123,23,2.259,59,1.495,84,2.303,87,2.263,91,1.607,97,1.583,123,0.766,133,1.376,157,2.266,166,1.909,178,1.721,182,1.989,184,1.451,207,1.061,259,1.398,265,2.946,270,2.294,297,2.769,312,2.213,339,3.799,363,1.927,400,1.289,406,0.858,434,1.693,462,1.016,490,1.916,510,2.309,527,1.85,549,1.472,550,2.263,562,1.882,570,1.645,571,2.461,635,2.857,686,3.905,717,2.426,736,1.073,757,2.015,805,2.458,807,1.812,808,1.807,815,1.787,817,1.791,962,2.783,966,1.882,1014,2.454,1035,1.84,1038,2.043,1063,2.32,1123,1.871,1458,4.203,1595,1.484,1601,2.118,1604,1.904,1629,1.976,1638,2.375,1696,5.299,1800,2.734,1801,2.831,1803,1.84,1804,4.53,2150,1.265,2437,1.253,2438,2.015,2439,2.002,2489,2.224,2490,2.263,2494,2.284,3051,3.013,3055,3.276,3136,3.548,4133,3.548,5359,3.751,5451,3.276,5554,3.548,5595,3.751,5596,3.751,5597,3.751,5598,3.751,5599,3.751,5600,3.751,5601,3.751,5602,3.751,5603,3.751,5604,3.751,5605,3.548,5606,5.889,5607,3.397,5608,3.751,5609,3.548,5610,6.372,5611,4.059,5612,4.059,5613,4.059]],["t/5003",[1,0.811,23,2.326,59,0.989,60,2.766,61,3.693,71,3.059,84,2.335,91,1.655,97,1.63,123,0.795,157,1.337,178,1.787,182,2.065,184,1.507,259,1.432,270,2.341,312,1.63,339,4.166,406,0.891,434,1.12,462,1.055,490,1.989,507,1.729,510,1.237,549,3.299,550,5.071,562,4.217,570,2.347,686,4.001,717,2.52,718,2.714,736,1.114,805,2.509,807,1.867,808,1.861,815,1.841,817,1.86,962,1.841,1014,2.548,1026,2.065,1036,2.167,1056,1.832,1063,2.389,1423,4.377,1515,3.967,1595,1.541,1601,2.2,1604,1.977,1629,2.052,1633,3.207,1638,2.466,1699,3.685,1800,2.839,1801,2.94,2150,1.313,2437,1.301,2489,2.309,2490,2.35,2494,2.372,3051,3.129,3156,3.059,4273,3.895,4276,3.685,4277,3.895,4278,3.895,5404,3.895,5607,3.527,5614,4.215,5615,6.563,5616,4.215,5617,4.215,5618,4.215,5619,4.215,5620,4.215,5621,6.065,5622,8.059,5623,4.215]],["t/5005",[1,0.972,23,2.238,27,0.618,29,3.396,59,1.767,60,2.646,61,2.841,84,1.93,91,1.899,97,1.87,123,1.421,133,1.712,157,1.835,166,2.698,182,2.474,184,1.805,259,1.601,270,2.57,297,3.914,312,1.87,339,1.867,363,2.397,406,1.067,434,2.001,462,1.264,476,4.553,490,2.383,507,2.072,510,2.931,527,2.302,562,2.341,574,4.075,635,3.377,686,4.472,720,2.655,736,1.334,757,2.507,805,2.755,807,2.142,808,2.136,815,2.112,904,2.615,912,2.635,962,2.206,966,3.492,1026,2.474,1035,2.289,1038,2.541,1595,1.845,1629,2.458,1803,3.414,2150,1.573,2437,1.559,2438,3.739,2439,2.49,2489,2.766,2490,2.815,2494,2.841,4036,5.891,5412,4.075,5624,5.049,5625,5.049,5626,5.049]],["t/5007",[1,0.746,23,2.326,37,2.881,59,0.908,60,2.508,61,2.179,71,2.811,76,2.947,84,2.261,91,1.548,97,1.525,104,1.253,120,0.913,157,1.251,182,1.898,184,1.384,188,2.586,259,1.356,270,2.235,297,1.683,312,1.525,339,3.901,403,2.341,406,0.818,434,1.029,452,5.428,462,0.969,490,1.828,507,1.589,510,1.137,549,2.767,571,1.496,686,3.788,736,1.023,805,2.395,807,1.747,808,1.742,815,1.722,817,1.709,962,1.692,1026,3.738,1056,1.683,1063,2.236,1255,4.84,1294,2.653,1423,2.104,1433,3.755,1434,3.423,1458,4.076,1515,2.341,1595,1.415,1604,3.579,1625,3.125,1629,1.885,1630,3.385,1631,3.241,1632,7.265,1633,4.672,1634,5.442,1635,4.207,1636,2.104,1637,3.579,1638,2.266,2150,1.207,2437,1.196,2489,2.122,2490,2.159,2494,2.179,2531,2.341,3156,5.537,4276,3.385,4327,5.368,5480,3.579,5481,3.579,5482,3.579,5483,3.579,5484,5.674,5605,3.385,5607,3.241,5609,6.669,5621,5.674,5627,3.873,5628,3.873]],["t/5009",[1,0.728,23,2.215,59,1.413,66,2.956,84,0.81,91,1.519,97,1.496,123,0.713,157,1.905,166,2.565,182,1.852,184,1.351,207,0.988,235,1.2,259,1.334,270,2.204,312,1.496,339,3.684,406,0.799,418,1.916,434,1.004,462,0.946,490,1.784,507,1.551,510,1.768,562,3.97,571,2.899,684,1.943,686,3.727,736,0.999,778,1.916,802,4.469,805,2.362,807,1.713,808,1.708,815,1.689,817,1.668,1020,5.119,1022,4.403,1024,4.732,1026,1.852,1027,5.368,1028,2.743,1056,1.643,1063,2.193,1106,2.806,1111,2.806,1216,3.05,1255,4.774,1256,2.506,1329,5.866,1458,3.218,1595,1.381,1634,5.368,1635,2.589,2150,1.178,2437,1.167,2489,2.07,2490,2.107,2494,2.127,2504,4.471,3543,5.972,4170,5.768,4172,5.866,4230,2.876,4232,6.516,5436,3.05,5440,3.304,5446,5.264,5456,3.493,5629,3.493,5630,3.78,5631,3.493,5632,3.78,5633,6.022,5634,3.78,5635,3.493,5636,3.493,5637,3.78,5638,3.78,5639,3.78,5640,3.493,5641,3.78,5642,3.78,5643,3.78,5644,3.78,5645,3.78,5646,3.493,5647,3.78,5648,3.78,5649,3.78,5650,3.78,5651,3.78,5652,3.78,5653,3.78,5654,3.78,5655,3.78]],["t/5011",[1,0.753,23,2.202,59,1.453,84,0.839,91,1.562,97,1.538,123,0.738,133,1.327,157,1.938,166,2.85,182,1.918,184,1.399,207,1.619,235,1.243,259,1.365,270,2.248,297,2.691,312,1.908,339,2.84,363,1.858,400,1.243,406,0.827,434,1.645,462,0.98,490,1.847,510,2.255,527,1.784,562,3.562,570,1.01,571,2.391,635,2.777,684,2.013,686,3.814,736,1.034,757,1.943,778,1.984,802,4.009,805,2.409,807,1.761,808,1.756,815,1.737,817,1.728,962,1.71,966,1.815,1020,4.592,1022,3.95,1024,4.245,1027,4.816,1035,1.774,1038,1.97,1063,2.255,1216,3.159,1255,4.283,1256,2.595,1329,5.983,1458,3.308,1595,1.431,1604,1.836,1634,4.816,1803,1.774,2150,1.22,2437,1.209,2438,1.943,2439,1.93,2489,2.144,2490,2.182,2494,2.202,3543,5.358,4170,5.175,4172,5.263,4230,2.979,4232,5.846,5446,5.413,5451,3.159,5457,3.617,5565,3.617,5629,3.617,5631,3.617,5635,3.617,5636,3.617,5640,3.617,5646,3.617,5656,3.914,5657,3.914,5658,3.914,5659,3.914,5660,3.914,5661,3.914,5662,3.914,5663,3.914,5664,3.914,5665,3.914,5666,3.914,5667,3.914,5668,3.914,5669,3.914,5670,3.914,5671,3.914,5672,3.914,5673,3.914]],["t/5013",[1,1.128,23,2.302,59,1.969,70,2.253,91,2.117,97,2.085,123,1.105,157,2.476,166,2.515,182,2.87,184,2.094,259,1.744,270,2.759,312,2.085,339,3.104,406,1.238,434,1.556,462,1.466,490,2.764,507,2.403,510,2.464,686,4.872,736,1.548,805,2.957,807,2.388,808,2.381,815,2.355,817,2.585,966,2.716,1052,2.928,1056,2.546,1329,5.752,1428,4.252,1595,2.141,1803,2.656,2150,1.825,2437,1.809,2489,3.209,2490,3.266,2494,3.296,5434,7.026,5436,4.727,5500,5.413,5674,5.858,5675,5.858,5676,5.858,5677,5.858]],["t/5015",[1,1.039,23,2.247,59,1.856,91,1.995,97,1.965,123,1.493,133,1.829,157,2.337,166,3.09,182,2.644,184,1.929,207,1.411,259,1.665,270,2.655,297,3.438,312,2.326,363,2.562,400,1.713,406,1.14,434,2.102,462,1.351,490,2.547,510,2.749,527,2.46,570,1.393,571,2.084,635,3.548,686,4.65,736,1.426,757,2.679,805,2.845,807,2.25,808,2.244,815,2.219,962,2.357,966,3.668,1026,2.644,1035,2.447,1038,2.716,1052,2.698,1329,5.42,1595,1.972,1803,3.586,2150,1.682,2437,1.666,2438,2.679,2439,2.662,2489,2.956,2490,3.009,2494,3.037,5434,6.62,5451,4.355,5505,4.987,5678,5.397,5679,5.397,5680,5.397,5681,5.397]],["t/5017",[1,1.116,10,2.305,16,1.443,23,2.1,27,0.476,59,1.954,81,2.731,91,2.101,97,2.069,157,1.987,166,1.737,259,1.03,270,2.511,292,4.471,312,2.069,339,4.176,340,4.98,406,1.225,434,1.54,462,1.451,507,4.002,510,3.316,622,4.207,736,1.532,762,2.613,802,3.025,805,2.299,807,1.649,808,1.644,815,2.337,948,5.811,961,3.148,962,2.532,966,2.687,1035,2.628,1056,4.239,1110,3.786,1459,5.649,1595,2.118,1802,3.516,1803,2.628,2006,8.163,2129,5.356,2150,1.806,2437,1.789,4195,5.356,4196,7.7,5682,5.796,5683,5.796,5684,5.796,5685,5.796,5686,5.796]],["t/5019",[1,1.454,10,2.767,23,1.694,59,1.771,91,1.904,97,1.875,120,1.78,121,1.175,166,2.997,259,1.342,270,2.887,312,2.786,339,3.698,406,1.596,434,2.006,462,1.89,485,3.585,510,2.216,587,5.433,736,1.995,762,3.405,805,2.76,807,2.148,808,2.142,815,2.118,1160,4.289,1202,4.901,2150,2.353,2437,2.331,3351,6.601,3818,6.319,4190,5.907,4558,8.744,5687,7.551,5688,10.003,5689,7.551]],["t/5021",[1,1.444,10,2.755,23,2.099,59,2.336,69,5.502,84,1.607,91,2.511,97,2.473,104,2.427,157,1.528,259,1.333,270,2.878,292,3.438,312,2.473,350,5.707,406,1.585,434,1.992,462,1.877,570,1.936,736,1.982,762,3.381,805,2.747,807,2.133,808,2.127,815,2.793,1035,3.4,1203,4.642,1234,3.828,1595,2.741,1886,4.701,2150,2.337,2437,2.315,3029,5.866,5407,6.931,5690,7.5,5691,7.5]],["t/5023",[0,1.04,1,1.351,10,2.635,22,1.336,23,2.053,91,2.402,97,2.366,157,1.94,171,3.535,204,3.781,215,3.729,225,2.079,231,1.942,246,5.491,259,1.248,270,2.783,285,2.556,293,4.345,312,1.743,313,2.7,406,1.483,434,1.865,462,2.384,478,3.583,485,5.133,616,6.049,736,1.855,762,3.165,805,2.628,807,1.997,808,1.991,815,2.672,1515,5.758,1595,2.566,2150,2.187,2436,3.664,2437,2.167,3547,6.487,4191,6.487,5692,7.02]],["t/5025",[1,1.444,10,2.755,23,2.099,27,0.616,59,2.336,91,2.819,97,2.473,99,1.992,157,2.028,171,3.695,259,1.333,270,2.878,312,1.863,339,2.772,406,1.585,434,1.992,458,5.197,462,1.877,470,4.181,510,2.201,736,1.982,762,3.381,805,2.747,807,2.133,808,2.127,815,2.793,1595,2.741,2150,2.337,2437,2.315,2518,5.052,2520,5.444,5510,6.931,5693,7.5,5694,7.5]],["t/5027",[1,1.233,10,2.474,23,2.113,27,0.734,59,2.098,91,2.598,97,2.221,99,2.376,188,3.493,207,1.675,227,1.817,259,1.138,270,2.652,312,1.591,396,1.379,406,1.353,434,1.702,444,5.47,456,6.024,458,6.343,462,1.603,510,1.88,635,4.01,736,1.693,805,2.467,807,1.822,808,1.817,815,2.508,1063,3.752,1595,2.341,2150,1.996,2437,1.978,2439,3.159,2518,4.315,2520,4.649,2531,3.872,2535,4.649,2542,5.36,2575,4.554,2576,6.127,4018,5.919,5537,5.919,5695,6.405,5696,6.405]],["t/5029",[1,1.424,10,2.73,23,2.09,27,0.607,59,2.315,84,2.114,91,2.8,97,2.451,99,1.965,171,3.662,259,1.315,270,2.858,297,4.289,312,1.838,339,2.735,406,1.563,434,1.965,458,5.15,462,1.852,470,4.125,510,2.172,736,1.955,762,3.336,805,2.722,807,2.104,808,2.099,815,2.768,1595,2.704,2150,2.305,2437,2.284,2518,4.984,2520,5.37,5511,6.837,5697,7.399,5698,7.399]],["t/5031",[1,1.27,23,2.273,30,3.483,59,2.141,91,2.302,97,2.267,182,3.233,184,2.358,213,4.161,259,1.86,270,2.908,292,3.024,312,2.267,338,4.729,406,1.394,434,1.753,462,1.651,490,3.114,510,1.937,686,5.197,736,1.743,762,2.975,805,3.116,807,2.597,808,2.589,815,2.561,1595,2.411,2150,2.056,2437,2.037,2489,3.614,2490,3.678,2494,3.712,3054,5.767,5699,6.598,5700,6.598,5701,6.598,5702,10.468]],["t/5033",[0,0.685,1,0.89,2,1.157,6,2.343,9,0.765,23,2.145,27,0.784,33,1.2,34,1.311,46,1.531,59,1.653,84,2.681,91,1.777,97,1.75,99,2.269,104,1.496,141,3.453,161,2.846,182,2.265,184,1.653,207,1.209,223,5.378,227,0.94,231,1.279,251,1.88,259,1.697,267,2.764,270,2.459,312,1.148,339,1.709,406,0.977,434,1.228,437,2.652,447,2.555,462,1.157,482,3.992,483,3.518,490,2.182,507,1.897,510,2.069,553,1.847,583,4.273,668,2.156,686,4.24,736,1.222,805,2.635,807,2.005,808,1.999,815,1.977,841,2.36,1035,2.096,1056,2.009,1161,3.287,1204,2.936,1234,2.36,1293,4.082,1574,5.577,1587,2.936,1591,3.518,1595,1.69,1656,3.287,1774,3.731,1819,2.828,2042,5.363,2150,1.441,2437,1.428,2458,7.465,2459,6.513,2489,2.533,2490,2.578,2494,2.602,3953,4.273,4035,6.513,5703,4.624,5704,7.047]],["t/5035",[1,1.27,10,2.525,23,2.078,27,0.542,59,2.141,91,2.849,97,2.267,215,2.275,219,3.614,222,4.602,236,3.901,259,1.173,270,2.695,312,1.639,313,2.538,406,1.394,434,1.753,462,1.651,478,3.368,485,4.334,507,3.746,510,3.072,707,2.912,736,1.743,805,2.519,807,1.877,808,1.871,815,2.561,951,4.084,1035,4.138,1056,3.967,1595,2.411,1750,5.767,2150,2.056,2436,3.443,2437,2.037,3537,5.161,3840,5.521,4183,5.521,4558,9.15,5132,5.767,5705,6.598,5706,6.598,5707,6.598,5708,6.598,5709,6.598,5710,6.598]],["t/5037",[1,1.27,10,2.525,23,1.546,27,0.542,46,2.184,59,1.548,91,1.664,92,3.821,97,1.639,100,3.443,101,4.52,157,1.344,186,2.012,219,3.614,259,1.173,270,2.695,290,6.626,312,1.639,313,2.538,339,3.375,340,5.457,406,1.394,434,1.753,470,3.678,478,3.368,485,3.132,507,4.295,510,3.072,562,4.233,622,4.789,707,2.912,736,1.743,805,2.519,807,1.877,808,1.871,815,1.851,960,5.767,1056,3.967,2150,2.056,2186,4.136,2436,3.443,2437,2.037,3537,5.161,4183,5.521,5132,7.98,5711,9.129,5712,9.129,5713,9.129,5714,9.129,5715,6.598,5716,6.598]],["t/5039",[1,0.706,16,0.913,22,1.119,23,2.146,90,1.33,91,1.482,97,1.46,107,1.034,111,1.644,121,1.434,125,2.965,143,4.826,157,1.876,166,1.761,182,1.796,184,1.31,204,6.251,206,2.456,207,0.959,245,1.845,259,1.637,270,2.166,271,3.046,292,2.694,312,2.441,346,2.867,379,2.36,400,1.866,406,0.775,434,0.974,449,1.82,462,0.917,478,1.871,490,1.73,510,2.704,523,2.865,570,0.946,571,1.416,604,3.594,616,2.328,635,1.644,686,3.652,704,4.956,736,0.969,762,1.653,805,2.322,807,1.672,808,1.667,811,4.743,815,1.648,816,6.582,817,1.618,818,7.48,820,7.205,844,3.044,873,2.661,1063,2.678,1099,3.652,1423,3.192,1458,4.496,1459,2.123,1517,4.472,1595,1.34,1604,2.757,2126,2.36,2150,1.142,2355,2.79,2436,1.913,2437,1.132,2489,2.008,2490,2.044,2494,2.063,3036,5.937,3135,3.068,3160,4.918,3467,4.178,3482,3.205,4030,3.388,5717,8.415,5718,9.211,5719,3.666,5720,3.666,5721,3.666,5722,3.666,5723,3.666,5724,3.666,5725,3.666,5726,3.666,5727,3.666,5728,3.666]],["t/5041",[1,1.343,10,2.981,23,1.959,59,2.225,81,2.287,91,2.916,97,2.355,123,1.316,173,4.491,259,1.24,270,2.774,282,4.625,285,2.54,312,1.732,313,2.683,349,2.763,406,1.474,434,1.853,458,6.312,462,2.373,478,3.561,510,2.047,719,3.757,736,1.843,805,2.617,807,1.984,808,1.978,815,2.66,1152,4.372,1419,4.699,1595,2.549,2150,2.173,2436,3.64,2437,2.154,2520,5.063,2522,5.456,2535,5.063,2603,7.654,2605,6.097,5729,6.975,5730,6.975]],["t/5043",[1,1.633,2,2.969,3,3.828,27,0.696,110,3.45,120,2.543,122,3.186,128,5.19,157,1.728,207,2.219,227,1.724,231,2.347,374,3.981,396,1.827,406,1.793,431,4.866,462,2.969,485,4.029,736,2.242,778,6.013,895,5.073,1224,5.389]],["t/5045",[1,1.378,10,2.67,23,1.98,27,0.587,59,2.264,69,3.955,91,2.434,97,2.397,163,2.677,166,2.144,225,2.119,226,2.477,227,1.454,231,1.98,259,1.272,270,2.811,312,1.778,406,1.512,434,1.901,462,1.791,510,2.101,549,3.961,550,3.99,666,4.399,736,1.891,805,2.663,807,2.036,808,2.03,815,2.707,951,5.974,1042,3.654,1123,3.3,1201,3.855,1459,6.324,1595,2.616,2150,2.23,2437,2.21,5058,6.614,5731,7.157,5732,7.157]],["t/5047",[1,1.424,10,2.73,23,2.09,27,0.607,59,2.315,91,2.488,97,2.451,157,1.507,158,4.58,259,1.973,270,2.858,292,3.392,312,1.838,406,1.563,434,1.965,462,1.852,470,4.125,507,3.036,510,2.896,736,1.955,762,3.336,805,2.722,807,2.104,808,2.099,815,2.768,1035,3.354,1039,6.186,1099,3.673,1123,3.411,1595,2.704,2150,2.305,2437,2.284,3840,6.191,5733,7.399,5734,7.399,5735,7.399]],["t/5049",[1,1.233,10,2.474,23,1.987,27,0.734,59,2.098,64,3.224,69,4.942,84,1.372,91,2.255,97,2.221,104,2.073,123,1.208,157,1.305,165,5.346,169,2.484,225,2.648,226,3.095,227,1.817,231,2.474,259,1.138,270,2.652,292,2.936,312,1.591,375,4.649,406,1.353,434,1.702,462,1.603,510,2.625,549,4.045,570,2.308,736,1.693,762,2.888,805,2.467,807,1.822,808,1.817,815,2.508,1035,2.904,1088,4.247,1201,6.007,1220,3.917,1595,2.341,2150,1.996,2437,1.978,2960,4.649,4866,5.599,4867,5.599,5219,5.599,5736,6.405]],["t/5051",[1,1.212,10,2.444,23,1.975,27,0.725,59,2.072,64,3.168,69,4.882,84,1.349,91,2.228,97,2.194,104,2.037,123,1.188,157,1.282,165,5.281,169,2.441,225,2.616,226,3.058,227,1.795,231,2.444,259,1.119,270,2.628,292,2.886,312,1.563,375,4.569,406,1.33,434,1.672,462,1.575,510,2.593,549,3.205,570,2.28,571,2.431,736,1.663,762,2.838,805,2.437,807,1.791,808,1.785,815,2.478,1026,3.084,1035,2.854,1202,4.329,1220,3.85,1234,5.65,1595,2.301,1886,6.399,2150,1.961,2437,1.944,2960,4.569,4871,5.503,4872,5.503,5737,6.295]],["t/5053",[1,1.318,10,2.59,23,1.943,25,4.138,27,0.562,29,2.328,59,2.196,60,2.827,61,3.851,91,2.361,97,2.325,100,3.572,207,1.79,231,2.59,259,1.217,270,2.747,312,1.7,313,3.601,324,4.291,400,2.173,406,1.446,434,1.818,462,2.343,485,4.445,510,2.009,532,3.572,660,2.808,736,1.809,779,6.181,805,2.583,807,1.947,808,1.941,815,2.626,1032,5.478,1203,4.237,1325,4.611,1595,2.502,2150,2.133,2436,3.572,2437,2.113,5738,6.845,5739,6.845,5740,6.845,5741,6.325]],["t/5055",[1,1.351,10,2.635,23,1.964,27,0.576,59,2.234,91,2.402,97,2.366,157,1.43,158,4.345,171,2.605,231,1.942,259,1.922,270,2.783,312,1.743,313,3.664,406,1.483,434,1.865,462,1.757,507,2.88,510,2.796,523,2.734,570,1.812,668,3.274,736,1.855,805,2.628,807,1.997,808,1.991,815,2.672,1022,3.609,1035,3.182,1039,5.971,1056,3.051,1099,4.729,1123,3.236,1595,3.481,2150,2.187,2437,2.167,3840,5.874,5742,7.02,5743,7.02,5744,9.525]],["t/5057",[1,1.219,10,2.454,23,1.879,27,0.728,59,2.081,64,3.187,69,3.499,84,1.357,91,2.237,97,2.203,104,2.049,123,1.194,157,1.29,165,5.303,225,2.627,226,3.07,227,1.803,231,3.07,259,1.125,270,2.636,292,2.902,312,1.572,313,3.412,375,4.595,406,1.338,434,1.682,462,1.584,510,1.858,549,4.238,570,2.289,736,1.673,805,2.447,807,1.801,808,1.796,815,2.488,1035,2.87,1088,4.198,1201,6.293,1220,3.872,1595,2.314,2150,1.973,2436,3.304,2437,1.955,4866,5.534,4867,5.534,5745,6.331,5746,6.331,5747,6.331]],["t/5059",[1,1.205,10,2.434,23,1.87,27,0.722,59,2.064,64,3.15,69,3.459,84,1.341,91,2.219,97,2.185,104,2.025,123,1.181,157,1.275,165,5.26,225,2.605,226,3.045,227,1.788,231,3.054,259,1.112,270,2.62,292,2.869,312,1.554,313,3.384,375,4.543,406,1.323,434,1.663,462,1.566,510,1.837,549,3.192,570,2.271,571,2.417,736,1.654,805,2.428,807,1.78,808,1.775,815,2.468,1035,2.837,1202,4.311,1220,3.828,1234,5.938,1595,2.287,1886,6.379,2150,1.95,2436,3.267,2437,1.932,4871,5.471,4872,5.471,5748,6.259,5749,6.259,5750,6.259]],["t/5061",[1,1.351,10,2.635,23,2.053,27,0.782,59,2.234,85,3.005,91,2.402,97,2.366,107,3.049,121,1.093,123,1.324,225,2.079,226,2.429,227,1.427,259,1.248,270,2.783,276,4.654,312,1.743,313,3.664,406,1.483,434,1.865,462,1.757,485,5.505,736,1.855,762,3.165,778,4.828,779,5.517,805,2.628,807,1.997,808,1.991,815,2.672,1008,3.509,1595,2.566,2150,2.187,2436,3.664,2437,2.167,4188,5.665,5741,6.487,5751,7.02]],["t/5063",[1,1.484,10,2.806,23,2.119,59,2.379,85,3.301,91,2.557,97,2.519,121,1.2,215,2.659,259,1.37,270,2.917,283,4.875,312,1.915,313,3.901,406,1.629,434,2.048,462,1.93,485,5.38,736,2.038,762,3.476,805,2.798,807,2.193,808,2.187,815,2.845,1595,2.818,2150,2.403,2436,4.024,2437,2.381,4189,6.452,5752,7.71]],["t/5065",[3,3.154,22,2.022,46,3.517,178,4.503,462,2.658,895,6.349,1989,7.277]],["t/5067",[1,1.621,10,2.97,23,1.819,59,1.975,91,2.123,97,2.091,121,1.311,259,1.497,270,3.043,312,2.667,406,1.779,434,2.237,510,2.472,736,2.225,762,3.796,805,2.962,807,2.395,808,2.388,815,2.362,879,5.098,880,4.69,2150,2.624,2437,2.6,5753,10.737,5754,8.421]],["t/5069",[1,1.55,10,2.886,22,1.986,23,1.767,86,3.454,91,2.03,97,1.999,215,3.597,259,1.431,270,2.979,293,4.983,312,1.999,313,3.096,406,1.701,434,2.139,478,4.109,616,6.625,736,2.127,762,3.629,805,2.878,807,2.29,808,2.283,815,2.258,887,6.041,1515,4.866,2150,2.508,2436,4.201,2437,2.485,5755,10.431]],["t/5071",[1,1.474,10,2.793,23,2.114,86,3.342,91,2.546,97,2.507,125,4.068,166,3.024,215,2.641,259,1.361,270,2.907,292,3.51,312,2.507,406,1.618,434,2.034,462,1.916,510,2.247,736,2.023,762,3.452,805,2.785,807,2.178,808,2.172,815,2.832,1035,3.471,1515,6.103,1595,2.798,1996,5.826,2150,2.386,2437,2.364,4174,5.684,5756,7.657]],["t/5073",[1,1.714,2,1.594,9,1.053,10,2.464,23,2.215,59,1.494,91,1.606,97,1.582,120,2.1,147,1.931,149,4.727,207,1.665,231,1.762,238,3.851,239,5.094,259,1.132,270,2.644,303,4.158,312,2.212,406,1.346,434,1.692,462,1.594,570,2.299,733,4.784,735,4.178,736,1.683,760,3.688,762,2.871,805,2.457,807,1.811,808,1.806,815,2.881,1063,2.319,1532,4.363,2150,1.984,2437,1.966,2710,4.363,2826,4.981,3258,6.919,5757,8.907]],["t/5075",[1,1.46,10,2.098,22,2.482,23,1.972,28,4.018,30,2.893,31,3.364,59,2.124,67,5.235,78,2.377,89,2.14,90,3.89,91,3.183,97,2.249,207,1.333,259,0.906,270,2.76,292,2.336,312,1.883,366,4.953,400,1.618,406,1.077,434,1.354,462,1.275,510,1.496,622,5.504,679,2.982,736,1.347,762,2.298,805,2.092,807,1.45,808,1.445,815,2.54,826,3.433,877,3.328,878,4.484,912,2.66,1495,3.081,1515,4.584,1517,3.878,1556,3.281,1595,1.862,2150,1.588,2267,5.391,2437,1.573,2806,4.113,2973,7.309,3049,4.709,3050,4.709,3051,3.783,3052,4.455,3053,6.346,3054,4.455,3224,5.932,5758,5.096,5759,5.096]],["t/5077",[1,1.713,2,3.035,3,3.883,27,0.73,46,2.946,120,2.621,207,2.327,227,1.808,253,4.199,256,7.284,396,1.916,406,1.88,462,3.035,736,2.352,895,5.319]],["t/5079",[1,1.505,10,2.832,23,2.051,59,2.401,91,2.581,97,2.542,123,1.475,148,1.466,256,6.544,259,1.39,270,2.938,312,1.942,406,1.653,434,2.078,462,1.957,510,3.005,736,2.067,805,2.824,807,2.224,808,2.218,815,2.871,951,6.336,1595,2.858,2150,2.437,2437,2.414,2480,6.544,5760,7.82,5761,7.82,5762,7.82]],["t/5081",[1,1.713,2,3.035,3,3.96,25,5.379,27,0.73,120,2.621,207,2.327,227,1.808,232,5.655,262,3.341,396,1.916,406,1.88,462,2.782,736,2.352,2696,5.442,5763,8.899]],["t/5083",[1,0.715,10,2.053,23,2.209,27,0.305,46,1.23,59,1.741,60,0.984,61,2.091,65,1.753,84,1.273,85,1.591,90,1.348,91,1.498,93,2.131,97,1.475,104,1.202,120,1.4,121,0.925,123,0.701,133,2.014,138,4.257,157,2.014,161,1.238,166,1.78,184,3.031,207,1.553,232,1.733,235,1.18,245,1.87,259,0.66,269,1.478,270,2.546,284,2.072,285,3.088,297,2.582,312,1.843,363,1.764,396,0.8,400,1.18,406,0.785,428,2.131,434,1.578,445,2.221,462,0.93,510,1.744,527,1.694,549,1.348,570,1.916,571,3.581,601,1.863,635,2.664,718,4.779,736,0.982,757,1.845,805,1.639,807,1.057,808,1.054,815,1.666,817,1.64,860,2.545,961,2.018,962,3.704,966,1.723,1032,2.174,1035,1.684,1036,1.91,1038,1.87,1063,2.163,1202,1.82,1249,2.329,1255,2.072,1388,1.82,1433,4.54,1434,4.138,1595,1.358,1601,1.939,1604,3.978,1629,3.613,1636,4.032,1642,2.998,1645,2.697,1651,5.277,1652,5.177,1654,5.806,1802,1.568,1803,1.684,2150,1.158,2437,1.147,2438,1.845,2439,1.832,2598,3.248,2599,3.248,3017,1.954,3038,2.427,5764,3.716,5765,3.716,5766,3.434,5767,3.434,5768,5.49,5769,7.423,5770,3.434,5771,5.49,5772,3.716,5773,3.716,5774,3.716,5775,3.716]],["t/5085",[1,0.74,10,2.101,23,2.334,27,0.316,59,0.902,61,3.436,70,1.479,84,1.308,90,1.395,91,1.54,97,1.517,104,1.245,123,0.726,133,2.07,138,2.205,157,1.761,161,1.282,166,2.275,184,1.374,207,1.597,218,2.381,227,1.757,232,4.682,235,1.221,245,1.936,259,1.085,269,2.429,270,2.226,284,2.144,285,3.832,297,2.654,312,1.886,363,1.826,396,0.828,400,1.221,406,0.813,428,2.205,434,1.622,445,2.299,462,0.962,510,2.229,527,1.753,549,2.215,550,2.144,562,1.783,570,1.96,571,1.485,601,1.914,635,3.405,736,1.016,757,1.909,762,1.734,805,1.685,807,1.094,808,1.091,815,1.713,817,3.352,954,2.325,962,1.68,966,1.783,1035,1.743,1036,3.14,1038,1.936,1063,3.148,1202,1.884,1255,2.144,1388,2.992,1428,2.791,1595,1.406,1601,2.007,1604,2.864,1645,2.791,1651,2.734,1652,2.682,1802,2.576,1803,1.743,1892,2.791,2150,1.198,2437,1.187,2438,1.909,2439,1.897,3017,2.023,3038,2.512,3976,4.432,3977,4.432,3979,3.362,5776,3.846,5777,6.106,5778,3.846,5779,3.846,5780,6.106,5781,3.846,5782,3.846]],["t/5087",[1,0.668,10,1.961,11,1.824,23,2.385,27,0.285,59,0.814,83,1.547,84,1.205,90,1.258,91,0.875,97,0.862,104,1.123,123,0.654,133,1.905,138,3.224,157,1.824,161,1.156,166,1.684,184,2.009,207,1.47,218,2.147,227,1.656,232,4.708,235,1.101,245,1.746,259,0.617,269,1.38,270,2.305,284,1.934,285,3.676,297,2.443,312,1.396,363,1.647,396,0.747,400,1.785,406,0.733,428,1.989,434,1.493,445,2.074,510,2.08,527,1.581,549,2.039,570,1.829,571,2.171,588,1.934,601,1.762,635,2.521,736,0.917,757,1.722,762,1.564,805,1.551,807,0.987,808,0.984,815,0.973,817,2.481,962,1.515,966,1.608,1035,1.573,1036,4.929,1038,1.746,1063,2.047,1202,1.7,1255,3.134,1333,2.903,1388,3.993,1601,2.934,1604,3.823,1645,4.08,1651,3.997,1652,3.921,1802,2.372,1803,1.573,1892,2.518,2150,1.081,2437,1.071,2438,1.722,2439,1.711,2491,4.277,3017,1.824,3038,2.266,3976,5.144,3977,5.144,5783,3.469,5784,3.469,5785,5.621,5786,5.621,5787,5.621]],["t/5089",[1,0.776,2,1.008,10,2.166,23,2.257,27,0.52,59,0.945,61,4.405,70,2.437,84,0.863,90,1.462,91,1.598,97,1.573,121,0.986,123,0.76,133,1.366,138,3.633,157,1.595,161,1.343,166,1.898,184,2.264,207,1.054,227,1.287,232,3.651,235,1.279,245,2.028,259,0.716,269,1.603,270,2.484,284,2.247,285,3.73,312,1.573,396,1.364,406,0.851,428,2.311,434,1.07,445,2.409,456,2.714,458,4.086,462,1.008,549,2.298,570,1.635,571,3.023,601,1.263,666,1.837,668,1.879,718,2.594,736,1.065,805,1.748,807,1.146,808,1.143,815,1.777,817,2.796,860,2.76,962,2.767,1026,1.974,1036,2.072,1052,2.014,1053,2.991,1063,3.231,1088,2.672,1118,2.436,1135,2.383,1202,1.974,1255,3.532,1388,3.104,1595,1.473,1601,3.306,1629,3.084,1636,3.441,1644,5.855,1645,4.598,1651,4.504,1652,4.419,1654,4.955,1802,1.7,1909,2.17,2150,1.256,2437,1.244,2447,3.372,2576,2.76,2806,3.252,3011,2.714,3017,2.119,3038,2.632,3982,5.113,4320,3.724,5766,3.724,5767,3.724,5768,3.724,5770,3.724,5771,3.724,5788,4.029,5789,4.029,5790,4.029,5791,4.029,5792,4.029,5793,4.029,5794,4.029,5795,4.029,5796,4.029,5797,4.029]],["t/5091",[1,0.925,10,2.419,23,2.329,27,0.394,59,1.702,70,1.848,84,2.087,90,1.743,91,1.83,97,1.802,121,1.13,133,1.629,138,2.756,157,1.478,161,1.602,166,1.44,184,1.718,207,1.257,232,3.385,235,2.304,245,2.419,259,0.854,270,2.508,284,2.679,285,3.807,312,1.802,339,1.777,396,1.035,406,1.016,428,2.756,434,1.277,445,2.873,462,1.203,510,1.411,549,1.743,570,1.24,571,2.803,601,1.507,736,1.27,805,2.002,807,1.367,808,1.363,815,2.036,817,3.203,860,3.292,962,2.099,1063,2.642,1202,2.355,1255,2.679,1388,2.355,1428,3.488,1458,2.568,1595,1.756,1601,2.508,1629,2.339,1636,2.61,1645,3.488,1651,3.417,1652,3.352,1654,3.759,1802,3.062,1804,5.16,2150,1.498,2437,1.484,2488,3.657,3017,2.527,3038,3.139,3983,4.201,5798,4.806,5799,4.806,5800,7.257,5801,4.441,5802,4.806,5803,4.806,5804,4.806,5805,4.806,5806,4.806,5807,4.806]],["t/5093",[1,0.946,10,2.451,23,2.268,27,0.403,59,1.731,84,1.899,90,1.782,91,1.861,97,1.833,104,1.59,123,0.927,133,1.666,138,2.818,157,1.503,161,1.638,166,1.472,184,1.756,202,2.423,207,1.285,218,3.042,227,2.002,232,5.364,235,2.343,245,2.473,259,1.575,270,2.536,284,2.739,285,4.037,312,1.833,396,1.058,406,1.038,428,2.818,434,1.305,445,2.937,462,1.23,510,2.166,571,1.898,601,2.314,736,1.298,762,2.215,805,2.036,807,1.398,808,1.394,815,2.07,817,2.169,974,2.407,1036,3.794,1063,2.687,1202,2.407,1255,2.739,1388,3.615,1574,3.209,1595,1.796,1604,3.462,1651,3.493,1652,3.427,1802,3.114,1892,3.566,2150,1.531,2437,1.517,2845,4.112,3017,2.584,3038,3.209,3976,5.356,3977,5.356,3981,4.295,5801,4.541,5808,4.914,5809,4.914]],["t/5095",[1,0.72,10,2.063,12,1.91,23,2.284,27,0.307,46,1.239,59,1.749,61,2.105,65,1.765,84,1.994,85,1.602,90,1.357,91,1.506,97,1.852,104,1.933,120,1.408,123,0.706,133,2.025,138,2.145,157,1.895,166,1.79,207,1.562,218,2.316,227,1.73,232,5.198,235,1.188,245,1.883,259,0.665,269,1.488,270,2.192,284,2.086,297,2.596,312,1.852,363,1.776,396,0.805,400,1.188,406,0.79,428,2.145,434,1.587,445,2.236,462,1.495,510,2.189,527,1.705,562,1.735,570,0.965,601,2.338,635,2.678,729,1.508,736,0.989,737,2.443,757,1.857,762,1.687,805,1.648,807,1.064,808,1.061,815,2.091,961,2.032,962,1.634,966,1.735,1035,1.696,1038,1.883,1063,3.1,1202,2.927,1433,4.56,1434,4.157,1595,1.367,1641,3.019,1652,2.609,1802,2.52,1803,1.696,1892,2.715,2150,1.166,2437,1.155,2438,1.857,2439,1.845,3017,1.967,3038,2.443,3976,5.412,3977,5.412,4248,3.27,4252,3.27,4309,2.777,4562,3.457,4563,3.457,4564,3.457,4565,3.457,4566,3.457,4567,5.52,4568,3.457,4569,3.457,4573,3.27,4574,3.457,4575,3.457,4576,3.457,4577,3.13,4578,3.457,4579,3.457,4580,3.457,4581,3.457,4589,3.457,4590,3.457,4591,3.457,4592,3.457,5810,3.741,5811,3.741,5812,3.741,5813,3.741]],["t/5097",[1,0.639,10,1.903,12,1.696,23,2.257,27,0.273,46,1.1,59,2.054,60,1.438,65,1.568,70,1.278,71,2.411,75,3.47,84,2.013,85,1.422,90,1.205,91,1.368,97,1.709,99,1.442,104,1.075,120,1.279,121,0.845,123,0.627,133,1.126,138,4.555,157,1.105,161,1.107,166,0.995,184,3.129,207,0.869,232,1.549,235,1.723,245,1.672,259,0.59,270,2.552,284,1.852,285,3.188,312,1.348,339,1.228,396,0.715,406,0.702,428,1.905,434,0.882,445,1.986,462,1.358,510,0.975,549,2.495,570,1.776,571,3.381,601,1.701,736,0.878,805,1.497,807,0.945,808,0.942,815,1.93,817,3.506,860,2.276,961,1.804,962,3.47,1036,4.502,1063,1.976,1202,1.628,1249,2.082,1255,3.836,1388,2.659,1433,4.208,1434,3.836,1595,1.214,1601,2.832,1604,1.558,1629,3.867,1636,4.314,1643,2.681,1645,3.939,1651,5.647,1652,5.54,1654,6.213,1802,1.402,2150,1.035,2437,1.026,2582,8.091,2586,3.07,2587,3.07,2588,2.904,2589,3.07,2590,7.34,2591,7.34,2592,7.34,2593,3.07,2594,5.015,2595,3.07,2596,3.07,2597,3.07,2598,2.904,2599,2.904,2600,3.07,2601,3.07,2602,3.07,3017,1.747,3038,2.17,5814,3.322,5815,3.322]],["t/5099",[1,1.699,2,3.023,3,3.873,27,0.724,84,1.891,120,2.608,122,3.314,182,4.325,185,4.046,207,2.308,227,1.794,396,1.9,406,1.865,462,3.023,736,2.333,3690,7.716,4132,10.11]],["t/5101",[1,0.681,9,0.585,10,1.579,23,2.131,27,0.469,46,1.89,54,2.163,59,1.339,60,1.513,61,3.212,69,3.155,70,1.36,84,1.938,91,1.44,97,1.418,99,0.939,102,2.75,123,0.667,133,1.199,138,4.117,147,1.072,166,2.151,184,1.264,199,4.595,207,0.925,228,2.114,235,1.812,259,1.276,270,2.122,297,2.481,312,1.783,319,1.621,333,1.639,339,1.307,351,2.422,374,4.537,384,2.466,390,2.163,400,1.123,406,0.747,434,0.939,449,1.755,458,3.747,462,0.885,490,1.669,507,2.342,532,1.845,549,3.508,550,3.183,562,3.329,563,2.382,570,2.496,601,1.79,660,3.381,668,1.649,717,2.114,720,3.002,725,1.845,736,0.934,805,1.575,807,1.006,808,1.003,815,1.601,817,1.561,948,3.982,966,1.639,1026,1.732,1036,1.818,1047,3.091,1052,1.767,1063,3.293,1099,5.052,1201,3.075,1593,2.138,1595,1.292,1601,1.845,1633,2.691,1696,2.382,1797,5.102,1800,2.382,1801,2.466,1802,1.492,1803,1.603,2150,1.102,2186,2.216,2437,1.092,2561,3.268,3011,2.382,3108,2.691,3298,3.091,4412,2.959,5816,3.536,5817,10.176,5818,10.176,5819,10.59,5820,5.709,5821,3.536,5822,3.536,5823,3.536,5824,3.536,5825,3.536,5826,3.536,5827,3.536]],["t/5103",[1,1.219,10,2.454,16,1.576,20,3.596,23,1.879,27,0.52,59,2.081,84,2.595,91,1.597,97,1.572,121,1.594,148,1.187,166,3.628,185,5.087,219,3.468,227,1.287,259,1.125,270,2.636,312,1.572,333,2.936,337,3.744,406,1.338,434,1.682,571,2.445,601,1.985,668,4.137,684,4.561,736,1.673,762,2.854,805,2.447,807,1.801,808,1.796,815,1.776,841,3.232,1063,3.23,1099,3.143,1326,6.939,1909,3.41,2150,1.973,2437,1.955,3280,4.952,5105,5.851,5828,8.871,5829,8.871,5830,8.871,5831,8.871]],["t/5105",[1,1.301,10,2.568,23,2.264,59,2.178,84,2.272,91,2.341,97,2.306,121,1.052,185,3.099,259,1.202,270,2.729,312,1.679,313,3.571,339,3.432,406,1.429,434,1.796,462,1.692,601,2.911,736,1.786,762,3.048,805,2.561,807,1.923,808,1.917,815,2.604,1063,2.461,1595,2.471,1802,2.852,2150,2.107,2437,2.087,3296,5.657,3446,7.262,4198,8.579,5832,6.76,5833,6.76,5834,9.283,5835,9.283,5836,6.76,5837,6.76,5838,6.76]],["t/5107",[3,3.154,30,4.052,46,3.517,253,5.013,462,2.658,1778,6.937,5839,10.622]],["t/5109",[1,1.505,10,2.832,23,2.128,59,1.834,91,2.581,97,2.542,213,4.666,215,3.53,259,1.39,270,2.938,292,4.692,312,2.542,406,1.653,434,2.078,462,1.957,510,2.295,736,2.067,762,3.526,805,2.824,807,2.224,808,2.218,815,2.871,1515,4.728,1595,2.858,2150,2.437,2437,2.414,3126,7.227,5840,7.82,5841,7.82]],["t/5111",[1,1.36,10,2.647,23,1.969,91,2.413,97,2.376,123,1.333,259,2.159,270,3.127,312,2.376,339,4.01,406,1.493,434,1.877,440,6.554,462,1.768,510,2.808,570,1.823,736,1.867,805,2.639,807,2.01,808,2.004,815,2.683,1155,4.321,1515,5.783,1595,2.582,1601,3.687,1668,5.702,2150,2.201,2437,2.181,3067,6.176,3100,9.728,5842,7.065,5843,7.065,5844,7.065,5845,7.065]],["t/5114",[1,1.495,3,3.026,10,2.819,23,2.045,59,1.822,67,4.053,91,1.958,97,1.929,120,2.402,147,2.354,211,4.749,213,4.644,259,1.38,270,2.927,312,1.929,406,1.641,434,2.063,510,2.991,601,2.435,736,2.052,762,3.501,805,2.811,807,2.209,808,2.202,815,2.178,1778,5.072,1989,5.32,2150,2.42,2437,2.397,5286,9.941,5846,10.189]]],"invertedIndex":[["",{"_index":23,"t":{"2559":{"position":[[288,1]]},"2561":{"position":[[743,1],[828,1],[956,1],[1041,1],[1173,1],[1258,1]]},"2592":{"position":[[189,5]]},"2600":{"position":[[204,1],[294,1],[304,1],[360,1],[392,1],[469,1],[471,1],[473,2],[526,3],[605,1],[607,1],[609,2],[665,3],[669,1],[700,2],[703,1]]},"2642":{"position":[[201,1],[293,1],[303,1],[359,1],[391,1],[455,1],[563,1],[565,2],[633,2],[884,1],[990,1],[992,2],[1104,1],[1270,1],[1272,3],[1276,1],[1307,2],[1310,1]]},"2709":{"position":[[881,3]]},"2725":{"position":[[519,1],[558,1],[634,1],[636,1]]},"2727":{"position":[[730,1],[884,3],[974,3]]},"2753":{"position":[[599,1],[611,1],[613,3],[627,1],[629,3],[633,1],[635,2],[638,3],[642,1],[644,1],[656,1],[658,3],[672,1],[674,3],[678,1],[680,2],[683,3],[687,1],[689,1],[701,1],[703,3],[716,1],[718,3],[722,1],[724,2],[727,3],[731,1],[733,1],[745,1],[747,3],[759,1],[761,3],[765,1],[767,2],[770,3],[774,1]]},"2757":{"position":[[349,1],[396,1],[445,1],[512,1],[556,1],[619,1],[668,1],[721,1]]},"2778":{"position":[[1054,3],[1222,1],[1234,1],[1236,3],[1248,1],[1324,2],[1342,1],[1352,1],[1354,1],[1394,1],[1417,3],[1441,1],[1443,1],[1445,1],[1447,1],[1449,2],[1452,3],[1456,1],[1458,1],[1470,1],[1472,3],[1484,1],[1560,2],[1578,1],[1588,1],[1590,1],[1619,1],[1712,1],[1714,1],[1716,1],[1718,1],[1720,2],[1723,3],[1727,1],[1729,1],[1741,1],[1743,3],[1756,1],[1832,2],[1850,1],[1861,1],[1863,1],[1903,1],[1926,3],[1950,1],[1952,1],[1954,1],[1956,1],[1958,2],[1961,3],[1965,1],[1967,1],[1979,1],[1981,3],[1994,1],[2070,2],[2088,1],[2099,1],[2101,1],[2130,1],[2223,1],[2225,1],[2227,1],[2229,1],[2231,2],[2234,3],[2238,1]]},"2780":{"position":[[702,3],[934,1],[946,1],[948,3],[960,1],[1110,2],[1128,1],[1138,1],[1140,1],[1223,1],[1246,3],[1270,1],[1272,1],[1274,1],[1276,1],[1278,2],[1281,3],[1285,1],[1287,1],[1299,1],[1301,3],[1313,1],[1463,2],[1481,1],[1491,1],[1493,1],[1565,1],[1658,1],[1660,1],[1662,1],[1664,1],[1666,2],[1669,3],[1673,1],[2266,1],[2278,1],[2280,3],[2292,1],[2442,2],[2460,1],[2470,1],[2472,1],[2544,1],[2637,1],[2639,2],[2642,1],[2769,1],[2771,1],[2773,1],[2775,2],[2778,3],[2782,1],[2784,1],[2796,1],[2798,3],[2810,1],[2960,2],[2978,1],[2988,1],[2990,1],[3062,1],[3155,1],[3157,2],[3160,1],[3288,1],[3290,1],[3292,1],[3294,2],[3297,3],[3301,1]]},"2782":{"position":[[125,1],[127,3],[140,1],[188,1],[827,1],[1101,1],[1103,1],[1105,2],[1108,3],[1112,1]]},"2786":{"position":[[145,1],[157,1],[203,1],[381,1],[383,2],[719,2],[722,1],[1664,1],[2133,1],[2165,1]]},"2794":{"position":[[256,1],[447,2],[458,1]]},"2810":{"position":[[311,1],[323,1],[325,3],[338,1],[414,2],[432,1],[443,1],[445,1],[510,1],[512,1],[514,1],[516,2],[519,3],[523,1],[525,1],[537,1],[539,3],[552,1],[628,2],[646,1],[657,1],[659,1],[700,1],[702,1],[704,1],[706,2],[709,3],[713,1]]},"2812":{"position":[[290,1],[302,1],[304,3],[317,1],[427,2],[445,1],[456,1],[458,1],[516,2],[519,1],[577,2],[580,1],[638,1],[640,1],[642,1],[644,2],[647,3],[651,1],[653,1],[665,1],[667,3],[680,1],[790,2],[808,1],[819,1],[821,1],[870,2],[873,1],[923,2],[926,1],[960,1],[962,1],[964,1],[966,2],[969,3],[973,1]]},"2814":{"position":[[388,1],[400,1],[445,1],[626,2],[644,1],[655,1],[657,1],[723,2],[726,1],[792,1],[794,1],[796,1],[798,2],[801,3],[805,1],[807,1],[819,1],[864,1],[1045,2],[1063,1],[1074,1],[1076,1],[1115,3],[1119,2],[1122,1],[1207,1],[1209,1],[1211,1],[1213,2],[1216,3],[1220,1]]},"2816":{"position":[[401,1],[414,1],[426,1],[452,5],[458,2],[461,5],[467,1]]},"2834":{"position":[[172,1],[1173,1],[1184,1]]},"2838":{"position":[[286,1],[298,1],[300,4],[305,2],[308,3],[344,4],[349,1]]},"2840":{"position":[[113,1],[125,1],[127,3],[164,3],[168,1],[170,3],[174,1]]},"2844":{"position":[[395,1],[407,1],[448,3],[452,2],[455,3],[459,1]]},"2848":{"position":[[340,1],[371,1],[395,2],[427,6],[434,2],[437,2]]},"2852":{"position":[[348,1],[360,1],[405,1],[482,1],[484,2],[992,1],[1038,1],[1098,2],[1145,1],[1205,2],[1252,1],[1312,2],[1359,1],[1419,1],[1421,2],[1542,1],[1544,1],[1556,1],[1601,1],[1752,1],[1754,2],[2090,1],[2136,1],[2196,2],[2243,1],[2303,2],[2350,1],[2410,2],[2457,1],[2517,2],[2566,1],[13568,1],[14657,2],[14678,1],[14680,2],[14801,1],[16049,1],[16514,1],[16546,1]]},"2854":{"position":[[1680,1],[1865,1]]},"2860":{"position":[[256,1],[447,2],[458,1]]},"2872":{"position":[[311,1],[323,1],[325,3],[337,1],[413,2],[431,1],[441,1],[443,1],[508,1],[510,1],[512,1],[514,2],[517,3],[521,1],[523,1],[535,1],[537,3],[549,1],[625,2],[643,1],[653,1],[655,1],[696,1],[698,1],[700,1],[702,2],[705,3],[709,1]]},"2874":{"position":[[290,1],[302,1],[304,3],[316,1],[426,2],[444,1],[454,1],[456,1],[514,2],[517,1],[575,2],[578,1],[636,1],[638,1],[640,1],[642,2],[645,3],[649,1],[651,1],[663,1],[665,3],[677,1],[787,2],[805,1],[815,1],[817,1],[866,2],[869,1],[919,2],[922,1],[956,1],[958,1],[960,1],[962,2],[965,3],[969,1]]},"2876":{"position":[[532,1],[544,1],[546,3],[558,1],[635,2],[653,1],[663,1],[665,1],[786,1],[788,1],[790,1],[792,2],[795,3],[799,1],[801,1],[813,1],[815,3],[827,1],[904,2],[922,1],[932,1],[934,1],[1064,1],[1066,1],[1068,1],[1070,2],[1073,3],[1077,1]]},"2878":{"position":[[388,1],[400,1],[402,3],[414,1],[491,2],[509,1],[519,1],[521,1],[587,2],[590,1],[656,1],[658,1],[660,1],[662,2],[665,3],[669,1],[671,1],[683,1],[685,3],[697,1],[774,2],[792,1],[802,1],[804,1],[889,2],[892,1],[931,3],[935,1],[937,1],[939,1],[941,2],[944,3],[948,1]]},"2882":{"position":[[162,1],[174,1],[221,1],[297,1],[299,2],[799,3],[921,1]]},"2884":{"position":[[218,1],[230,1],[260,1],[337,1],[339,2],[342,3],[346,1]]},"2890":{"position":[[256,1],[447,2],[458,1]]},"2904":{"position":[[311,1],[323,1],[325,3],[339,1],[439,2],[457,1],[469,1],[471,1],[536,1],[538,1],[540,1],[542,2],[545,3],[549,1],[551,1],[563,1],[565,3],[579,1],[679,2],[697,1],[709,1],[711,1],[749,2],[752,1],[790,2],[793,1],[795,1],[797,2],[800,3],[804,1]]},"2906":{"position":[[308,1],[320,1],[322,3],[336,1],[436,2],[454,1],[466,1],[468,1],[532,1],[534,1],[536,1],[538,2],[541,3],[545,1],[547,1],[559,1],[561,3],[575,1],[675,2],[693,1],[705,1],[707,1],[749,1],[751,1],[753,1],[755,2],[758,3],[762,1]]},"2912":{"position":[[85,1]]},"2931":{"position":[[345,1],[381,1],[419,1],[475,1],[508,1],[543,1],[589,1]]},"2976":{"position":[[272,1],[356,1],[462,1],[551,1],[646,1],[722,1],[827,1],[922,1],[986,1],[1098,1],[1255,1],[1339,1],[1445,1],[1535,1],[1636,1],[1713,1],[1818,1],[1913,1],[1977,1],[2089,1],[2226,1],[2345,1],[2355,1],[2850,1],[2905,1],[2945,1],[2971,1],[2986,1],[3046,1],[3101,1],[3137,1],[3159,1],[3174,1]]},"2991":{"position":[[50,1],[90,1],[150,1],[180,1],[187,1],[213,1],[218,1],[239,1],[769,1],[805,1],[858,1],[886,1],[893,1],[909,1],[971,1],[989,1]]},"3012":{"position":[[1146,1],[1219,1],[2048,2],[2059,1],[2153,1],[2261,1],[2381,1],[2447,1],[2449,1],[2682,1],[2684,2],[2695,1]]},"3016":{"position":[[233,1],[946,1],[1043,2],[1074,1],[1133,1],[1926,1]]},"3018":{"position":[[258,1],[289,1],[297,1],[311,1],[376,1],[389,1],[401,1],[450,2],[495,2],[508,1],[548,2],[551,2],[576,1],[605,1],[622,2],[708,1],[710,1]]},"3022":{"position":[[474,1],[525,1],[564,1],[811,3],[1752,1],[1754,1],[1987,1],[2028,1],[2030,1],[2042,1],[2219,2],[2415,3],[2549,1],[2551,1],[2553,1],[2735,1],[2773,1],[3077,1],[3079,1]]},"3024":{"position":[[113,2],[219,2],[301,2],[385,2]]},"3026":{"position":[[200,1]]},"3042":{"position":[[414,1],[450,1]]},"3044":{"position":[[1442,1],[1484,1],[1531,1]]},"3062":{"position":[[139,1],[178,1],[180,1],[392,1],[489,1],[491,1],[493,1],[495,1]]},"3066":{"position":[[124,1],[163,1],[165,1],[320,1],[417,1],[419,1],[421,1],[423,1]]},"3113":{"position":[[930,1],[1015,1],[1143,1],[1228,1],[1360,1],[1445,1]]},"3115":{"position":[[293,1]]},"3119":{"position":[[17,1]]},"3123":{"position":[[199,1],[206,1],[208,1],[244,1],[283,1],[345,1],[352,1],[354,1],[390,1],[429,1]]},"3125":{"position":[[199,1],[201,1],[218,2],[349,2]]},"3145":{"position":[[94,1],[123,1],[156,1]]},"3149":{"position":[[66,1],[82,1],[96,1],[235,1],[253,1]]},"3151":{"position":[[66,1],[82,1],[96,1],[236,1],[254,1]]},"3153":{"position":[[333,1],[488,3],[615,1],[741,3],[757,1],[846,2],[879,1],[881,1],[939,1],[1028,1]]},"3157":{"position":[[200,1]]},"3204":{"position":[[561,1]]},"3220":{"position":[[248,3],[259,1],[261,3],[270,3],[281,1],[283,3],[292,3],[303,3]]},"3224":{"position":[[376,1],[388,1],[435,1],[484,1],[486,2],[954,1],[1000,1],[1227,2],[1274,1],[1505,2],[1552,1],[1783,1],[1785,1],[1787,1],[2086,1],[2088,3],[2344,3],[2348,1]]},"3232":{"position":[[288,1],[333,1]]},"3242":{"position":[[507,1],[525,2],[580,1],[667,1],[741,1],[808,2],[850,1],[852,1],[872,2],[928,1],[978,1],[1045,2],[1087,1],[1089,1],[1409,2],[1457,1],[1459,1],[1546,2],[1611,2],[1657,2],[1701,2],[1753,2],[1805,1],[1987,1],[2015,1],[2060,1],[2108,2],[2144,1],[2146,1],[2223,2],[2306,1],[2399,1],[2401,1],[2441,1],[2533,1],[2535,1],[2555,1]]},"3244":{"position":[[407,1],[425,2],[480,1],[567,1],[641,1],[747,1],[749,1],[769,2],[825,1],[875,1],[981,1],[983,1],[1003,2],[1048,1],[1050,1],[1114,2],[1160,2],[1203,2],[1255,2],[1308,1],[1386,1],[1388,1],[1412,2],[1495,1],[1588,1],[1590,1],[1630,1],[1722,1],[1724,1],[1744,1]]},"3250":{"position":[[356,1],[393,1],[434,1],[436,2],[486,1],[536,2],[603,1],[619,1],[621,1],[661,2],[723,1],[756,2],[821,1],[866,1],[868,2],[943,1],[945,1],[978,1],[986,1],[1008,1],[1010,2],[1023,1],[1042,1],[1044,4],[1049,1],[1051,4],[1080,1],[1082,1],[1084,2],[1087,2],[1090,2],[1165,1],[1219,1],[1277,1],[1338,2],[1341,1],[1358,2],[1910,1],[1928,2],[1992,1],[2078,1],[2131,2],[2179,1],[2247,1],[2314,1],[2356,1],[2422,1],[2458,2],[2513,1],[2591,1],[2661,2],[2712,1],[2786,1],[2788,1],[2902,1],[2916,1],[2943,2],[3108,2],[3160,1],[3300,1],[3328,1],[3373,1],[3421,2],[3457,1],[3459,1],[3516,1],[3518,1]]},"3252":{"position":[[1030,1],[1823,1]]},"3254":{"position":[[662,1],[698,1],[741,1],[1413,2],[1468,1],[1546,1],[1630,1],[1649,1],[1689,1],[1738,1],[1740,1],[1753,1],[1764,1],[1874,2],[1927,1],[2043,2],[2078,1],[2137,2],[2182,2]]},"3262":{"position":[[249,3],[260,1],[262,3],[271,3],[282,1],[284,3],[293,3],[304,3]]},"3264":{"position":[[522,1],[534,1],[564,1],[590,2],[609,2],[688,1],[734,1],[961,2],[1008,1],[1239,1],[1241,1],[1243,1]]},"3272":{"position":[[328,1],[373,1]]},"3287":{"position":[[125,1],[132,1],[139,1],[159,1]]},"3289":{"position":[[378,1],[422,1]]},"3291":{"position":[[265,1],[496,1]]},"3301":{"position":[[180,3],[191,1],[193,3],[202,3],[213,1],[215,3],[224,3],[235,1],[237,3],[246,3],[257,3]]},"3303":{"position":[[535,1],[548,1],[560,1],[606,1],[682,1],[684,2],[923,1],[969,1],[1196,2],[1243,1],[1474,2],[1521,1],[1752,1],[1754,1],[1756,2],[1773,1],[1784,1],[1815,1],[1817,1],[1819,1]]},"3305":{"position":[[483,3],[500,3],[509,3],[556,1],[558,3],[566,1],[568,3],[580,3],[627,1],[629,3],[637,1],[639,3],[651,3],[698,1],[700,3],[708,1],[710,3],[722,3],[769,3],[777,3]]},"3309":{"position":[[84,3],[101,3],[112,1],[114,3],[123,1],[125,1],[127,3],[135,1],[137,1],[139,3],[151,3],[162,1],[164,3],[173,1],[175,1],[177,3],[185,1],[187,1],[189,3],[201,3],[212,1],[214,3],[223,1],[225,1],[227,3],[235,1],[237,1],[239,3],[251,3],[262,1],[264,3],[273,1],[275,1],[277,3],[285,1],[287,1],[289,3]]},"3319":{"position":[[309,1],[348,1],[533,1],[535,1],[621,1],[646,1],[653,1],[672,1],[686,1],[693,1],[700,1],[715,1],[836,1],[854,1],[861,1],[873,1],[1056,1],[1074,1],[1081,1],[1093,1],[1276,1],[1294,1],[1301,1],[1313,1],[1496,1],[1514,1],[1521,1],[1533,1],[1929,1],[1936,1],[1943,1],[1957,1],[2281,1],[2288,1],[2295,1],[2309,1]]},"3329":{"position":[[98,1],[157,1],[170,1],[181,1],[211,1],[224,1],[229,1],[280,1],[301,1],[303,1]]},"3331":{"position":[[503,1],[505,1],[518,1],[559,1],[630,2],[643,1],[743,1],[745,1],[765,1]]},"3333":{"position":[[582,2],[786,1],[788,1],[801,1],[842,1],[913,2],[926,1],[1039,3],[1055,1]]},"3339":{"position":[[800,1],[802,1],[815,1],[851,1],[890,1],[944,2],[1011,1],[1046,2],[1049,1],[1065,3],[1076,3],[1101,1],[1103,1],[1230,2],[1255,1],[1326,2],[1329,2],[1398,1],[1466,2],[1482,2],[1485,1],[1496,1],[1498,1],[1533,1],[1535,1],[1552,2],[1570,1]]},"3341":{"position":[[351,1],[353,1],[366,1],[402,1],[441,1],[495,2],[562,1],[597,2],[600,1],[616,3],[627,3],[650,1],[750,1],[752,1],[795,1],[894,2],[919,1],[990,2],[1059,1],[1127,2],[1145,1]]},"3347":{"position":[[453,1],[474,1],[480,1],[515,1],[600,1]]},"3366":{"position":[[959,1],[1111,1]]},"3383":{"position":[[4111,2],[4152,1],[4154,1],[4492,3],[4496,1],[4498,1],[4500,3],[4504,1],[4626,1],[4698,1]]},"3385":{"position":[[2870,1]]},"3391":{"position":[[512,1],[556,1]]},"3393":{"position":[[598,1],[610,1],[624,1],[638,1],[640,1],[779,1],[781,1]]},"3395":{"position":[[1324,1],[1363,1],[1365,1],[1488,2],[1491,1],[1614,2],[1617,1],[1740,1],[1742,1],[1744,1]]},"3397":{"position":[[530,1],[569,1],[708,1],[710,1]]},"3399":{"position":[[501,1],[540,1],[646,1],[648,1]]},"3401":{"position":[[546,1],[590,1]]},"3405":{"position":[[1861,1],[1968,1]]},"3409":{"position":[[540,1],[584,1]]},"3411":{"position":[[520,1],[559,1],[664,1],[666,1]]},"3413":{"position":[[1333,1],[1372,1],[1374,1],[1497,2],[1500,1],[1623,2],[1626,1],[1749,1],[1751,1],[1753,1]]},"3415":{"position":[[549,1],[588,1],[727,1],[729,1]]},"3417":{"position":[[632,1],[671,1],[810,1],[812,1]]},"3419":{"position":[[571,1],[615,1]]},"3423":{"position":[[828,1],[877,1]]},"3425":{"position":[[1396,1],[1445,1]]},"3427":{"position":[[416,1],[455,1],[548,1],[550,1]]},"3429":{"position":[[367,1],[406,1],[719,1],[721,1]]},"3431":{"position":[[446,1],[495,1]]},"3433":{"position":[[843,1],[892,1]]},"3435":{"position":[[1220,1],[1269,1]]},"3439":{"position":[[1052,1],[1160,1],[1218,2],[1257,1],[1265,1],[1438,1],[1446,1],[1590,1],[1604,1],[1606,1],[1608,1],[1610,1],[1620,1],[1631,1],[1658,1],[1686,1],[1688,1],[1690,1],[1692,1]]},"3441":{"position":[[934,1],[1020,1]]},"3443":{"position":[[746,1],[854,1]]},"3445":{"position":[[469,1],[556,1]]},"3447":{"position":[[1072,1],[1180,1]]},"3449":{"position":[[912,1],[951,1],[953,1],[1112,1],[1209,1],[1211,1],[1213,1],[1215,1]]},"3451":{"position":[[937,1],[1471,1]]},"3453":{"position":[[355,3],[1320,1],[1365,1]]},"3455":{"position":[[914,1],[953,1],[955,1],[1298,1],[1439,1],[1441,1],[1443,1],[1445,1]]},"3457":{"position":[[946,1],[985,1],[987,1],[1330,1],[1471,1],[1473,2],[1476,1],[1819,1],[1960,1],[1962,1],[1964,1],[1966,1]]},"3459":{"position":[[1048,1],[1087,1],[1089,1],[1432,1],[1573,1],[1575,2],[1578,1],[1921,1],[2062,1],[2064,1],[2066,1],[2068,1]]},"3461":{"position":[[482,1],[566,1]]},"3463":{"position":[[651,1],[690,1],[2522,1],[2524,1]]},"3465":{"position":[[967,1],[1012,1]]},"3467":{"position":[[664,1],[703,1],[938,3],[2334,1],[2336,1]]},"3469":{"position":[[1192,1],[1268,1]]},"3471":{"position":[[769,1],[834,1],[906,1],[973,1],[975,2],[986,1],[988,1],[1018,1],[1020,1],[1032,1],[1296,2],[1411,1],[1504,2],[1539,3],[1675,2],[1678,1],[1690,1],[1871,2],[1986,1],[2024,2],[2194,2],[2197,1],[2209,1],[2348,2],[2642,2],[2645,1],[2657,1],[2838,2],[2953,1],[2990,2],[3160,1],[3162,2],[3239,1]]},"3473":{"position":[[892,1],[936,1]]},"3477":{"position":[[540,1],[584,1]]},"3479":{"position":[[520,1],[559,1],[664,1],[666,1]]},"3481":{"position":[[1333,1],[1372,1],[1374,1],[1497,2],[1500,1],[1623,2],[1626,1],[1749,1],[1751,1],[1753,1]]},"3483":{"position":[[549,1],[588,1],[727,1],[729,1]]},"3485":{"position":[[1520,1],[1559,1],[1698,1],[1700,1]]},"3487":{"position":[[571,1],[615,1]]},"3528":{"position":[[423,1],[442,1],[476,1],[561,1],[615,1]]},"3534":{"position":[[403,1],[426,1],[467,1],[490,1],[556,1],[569,1],[699,1],[715,1]]},"3542":{"position":[[584,2],[916,2]]},"3546":{"position":[[305,1],[328,1],[369,1],[392,1],[458,1],[471,1],[601,1],[617,1]]},"3548":{"position":[[448,1],[471,1],[512,1],[535,1],[601,1],[614,1],[736,1],[752,1]]},"3550":{"position":[[301,1],[324,1],[365,1],[388,1],[454,1],[467,1],[597,1],[613,1]]},"3552":{"position":[[221,3],[232,1],[234,3],[243,1],[245,3],[257,3],[268,1],[270,3],[279,1],[281,3],[293,3],[304,1],[306,3],[315,1],[317,3],[329,3],[340,3],[349,3]]},"3561":{"position":[[91,1],[141,1],[173,3],[241,2],[261,1],[263,1],[356,2],[359,1],[445,2],[448,1],[519,1],[534,2],[565,1],[567,2],[578,1],[580,1],[613,2],[616,1],[649,2],[652,1],[685,1],[687,2],[698,1],[713,3],[728,1],[730,1],[796,2],[799,1],[867,2],[870,1],[938,1],[940,1],[942,2],[961,2],[964,1]]},"3574":{"position":[[197,3],[208,1],[210,3],[219,3],[230,1],[232,3],[241,3],[252,1],[254,3],[263,3],[274,3]]},"3576":{"position":[[543,1],[556,1],[568,1],[614,1],[690,1],[692,2],[931,1],[977,1],[1204,2],[1251,1],[1482,2],[1529,1],[1760,1],[1762,1],[1764,2],[1781,1],[1792,1],[1823,1],[1825,1],[1827,1]]},"3578":{"position":[[491,3],[508,3],[517,3],[564,1],[566,3],[574,1],[576,3],[588,3],[635,1],[637,3],[645,1],[647,3],[659,3],[706,1],[708,3],[716,1],[718,3],[730,3],[777,3],[785,3]]},"3582":{"position":[[92,3],[109,3],[120,1],[122,3],[131,1],[133,1],[135,3],[143,1],[145,1],[147,3],[159,3],[170,1],[172,3],[181,1],[183,1],[185,3],[193,1],[195,1],[197,3],[209,3],[220,1],[222,3],[231,1],[233,1],[235,3],[243,1],[245,1],[247,3],[259,3],[270,1],[272,3],[281,1],[283,1],[285,3],[293,1],[295,1],[297,3]]},"3598":{"position":[[332,1],[377,1],[631,1],[716,1],[2223,1],[2268,1]]},"3606":{"position":[[788,1],[809,1],[815,1],[850,1],[935,1],[989,1],[1296,1],[1445,1],[1509,1],[1649,1],[1788,1],[1846,1]]},"3612":{"position":[[1099,1],[1234,1],[1691,1],[2300,1],[2321,1],[2385,1],[2475,1],[2509,1],[2567,1],[2629,1],[2711,1]]},"3614":{"position":[[415,1],[436,1],[442,1],[482,1],[631,1],[695,1],[835,1],[974,1],[1032,1],[1157,1],[1182,1],[1331,1],[1352,1],[1359,1],[2435,1]]},"3616":{"position":[[415,1],[481,1],[612,1],[633,1],[639,1],[696,1],[949,1],[1098,1],[1162,1],[1302,1],[1441,1],[1499,1]]},"3618":{"position":[[427,1],[493,1]]},"3624":{"position":[[388,1],[409,1],[470,1],[557,1],[591,1],[649,1],[711,1],[793,1],[1837,1],[1884,1]]},"3628":{"position":[[689,3],[721,1],[1686,2],[1689,1],[2343,3],[2528,3],[2673,3],[2818,3],[3134,3],[3319,3],[3464,3],[3609,3]]},"3637":{"position":[[272,37],[332,37],[410,17],[557,1],[617,1],[666,1],[711,1],[757,1],[898,1],[1045,64]]},"3639":{"position":[[1064,1],[1406,3],[1569,2],[1608,3],[1787,2],[1937,3],[2027,2],[2066,3],[2214,3],[2298,3]]},"3656":{"position":[[180,3],[191,1],[193,3],[202,3],[213,1],[215,3],[224,3],[235,1],[237,3],[246,3],[257,3]]},"3658":{"position":[[527,1],[540,1],[552,1],[597,1],[673,1],[675,2],[914,1],[960,1],[1187,2],[1234,1],[1465,2],[1512,1],[1743,1],[1745,1],[1747,2],[1764,1],[1775,1],[1806,1],[1808,1],[1810,1]]},"3660":{"position":[[483,3],[500,3],[509,3],[556,1],[558,3],[566,1],[568,3],[580,3],[627,1],[629,3],[637,1],[639,3],[651,3],[698,1],[700,3],[708,1],[710,3],[722,3],[769,3],[777,3]]},"3664":{"position":[[84,3],[101,3],[112,1],[114,3],[123,1],[125,1],[127,3],[135,1],[137,1],[139,3],[151,3],[162,1],[164,3],[173,1],[175,1],[177,3],[185,1],[187,1],[189,3],[201,3],[212,1],[214,3],[223,1],[225,1],[227,3],[235,1],[237,1],[239,3],[251,3],[262,1],[264,3],[273,1],[275,1],[277,3],[285,1],[287,1],[289,3]]},"3674":{"position":[[309,1],[348,1],[533,1],[535,1],[621,1],[646,1],[653,1],[672,1],[686,1],[693,1],[700,1],[715,1],[836,1],[854,1],[861,1],[889,1],[903,1],[910,1],[922,1],[937,1],[1038,1],[1056,1],[1063,1],[1091,1],[1105,1],[1112,1],[1124,1],[1139,1],[1240,1],[1258,1],[1265,1],[1293,1],[1307,1],[1314,1],[1326,1],[1341,1],[1442,1],[1460,1],[1467,1],[1495,1],[1509,1],[1516,1],[1528,1],[1543,1],[1862,1],[1869,1],[1876,1],[1890,1],[2214,1],[2221,1],[2228,1],[2242,1]]},"3685":{"position":[[17,1],[72,3],[83,1],[85,3],[94,1],[96,3],[108,3],[119,1],[121,3],[130,1],[132,3],[144,3],[155,1],[157,3],[166,1],[168,3],[180,3],[191,3],[200,3]]},"3689":{"position":[[272,1],[322,1],[354,3],[422,2],[442,1],[444,1],[537,2],[540,1],[626,2],[629,1],[700,1],[715,2],[746,1],[748,2],[759,1],[761,1],[794,2],[797,1],[830,2],[833,1],[866,1],[868,2],[879,1],[894,3],[909,1],[911,1],[977,1],[979,1],[981,2],[1000,2],[1003,1],[1005,1],[1055,1],[1087,3],[1155,2],[1175,1],[1177,1],[1270,2],[1273,1],[1359,2],[1362,1],[1433,1],[1448,2],[1479,1],[1481,2],[1492,1],[1494,1],[1527,2],[1530,1],[1563,2],[1566,1],[1599,1],[1601,2],[1612,1],[1627,3],[1642,1],[1644,1],[1710,1],[1712,1],[1714,2],[1733,2],[1736,1],[1738,1],[1788,1],[1820,3],[1888,2],[1908,1],[1910,1],[2003,2],[2006,1],[2092,2],[2095,1],[2166,1],[2181,2],[2212,1],[2214,2],[2225,1],[2227,1],[2260,2],[2263,1],[2296,2],[2299,1],[2332,1],[2334,2],[2345,1],[2360,3],[2375,1],[2377,1],[2443,1],[2445,1],[2447,2],[2466,2],[2469,1],[2471,1],[2521,1],[2553,3],[2621,2],[2641,1],[2643,1],[2736,2],[2739,1],[2825,2],[2828,1],[2899,1],[2914,2],[2945,1],[2947,2],[2958,1],[2960,1],[2993,2],[2996,1],[3029,2],[3032,1],[3065,1],[3067,2],[3078,1],[3093,3],[3108,1],[3110,1],[3176,1],[3178,1],[3180,2],[3199,2],[3202,1]]},"3714":{"position":[[609,1],[621,1],[633,1],[635,2],[654,2],[657,3],[661,1]]},"3722":{"position":[[192,1],[534,1],[675,1],[677,1]]},"3724":{"position":[[562,1],[768,1],[783,1],[816,1],[882,1],[884,1],[1012,1],[1419,1],[1560,1],[1562,1]]},"3726":{"position":[[428,1],[594,1],[603,1],[636,1],[685,1],[694,1],[727,1],[729,1],[1314,1],[1316,1],[1658,1],[1799,1],[1801,2],[1804,1],[2146,1],[2287,1],[2289,1],[2291,1]]},"3728":{"position":[[187,2],[593,1],[708,1],[782,1],[923,1],[925,1],[927,1]]},"3736":{"position":[[391,37],[451,37],[618,1],[678,1],[727,1],[772,1],[818,1],[943,1],[1021,1],[1220,64]]},"3746":{"position":[[356,1]]},"3748":{"position":[[252,1],[342,1],[354,1],[420,1]]},"3750":{"position":[[292,1],[337,1]]},"3752":{"position":[[266,1],[312,1]]},"3754":{"position":[[264,1],[714,1],[952,1],[1309,2],[1422,2],[1591,2],[1687,1]]},"3756":{"position":[[1038,1],[1123,1],[1251,1],[1336,1],[1468,1],[1553,1],[1999,2]]},"3758":{"position":[[430,3],[452,2],[478,3],[492,2],[515,3],[527,2],[569,3],[578,2],[596,3],[609,2],[633,3],[644,3],[652,3],[663,3]]},"3760":{"position":[[91,1],[120,1],[172,1],[287,1],[297,1],[325,1],[503,1],[510,1],[535,1],[577,1],[627,1],[694,1]]},"3762":{"position":[[365,1],[384,1]]},"3764":{"position":[[540,1],[542,1],[554,1],[556,2],[623,1],[639,2],[654,1],[701,2],[733,2],[746,1],[957,1],[959,1],[961,2],[991,3],[995,3]]},"3776":{"position":[[69,3]]},"3784":{"position":[[710,1],[722,1],[768,1],[844,1],[846,2],[1240,1],[1286,1],[1321,1],[1323,1],[1325,1]]},"3794":{"position":[[809,1]]},"3831":{"position":[[899,1],[1121,1]]},"3839":{"position":[[511,1]]},"3843":{"position":[[615,3]]},"3858":{"position":[[48,1],[61,1]]},"3862":{"position":[[79,1],[105,1],[131,1],[155,1],[179,1],[236,1],[300,1],[323,1]]},"3866":{"position":[[2465,3],[2588,3],[2712,3],[2835,3],[2958,3]]},"3876":{"position":[[231,1]]},"3894":{"position":[[48,1],[61,1]]},"3898":{"position":[[95,1],[115,1],[141,1],[167,1],[197,1],[221,1],[245,1],[268,1],[298,1],[321,1],[372,1],[392,1],[418,1],[444,1],[474,1],[498,1],[522,1],[545,1],[575,1],[598,1]]},"3902":{"position":[[2469,3],[2592,3],[2716,3],[2839,3],[2962,3]]},"3916":{"position":[[619,1],[762,1]]},"3918":{"position":[[1654,1],[1662,1],[1688,1]]},"3938":{"position":[[730,1],[884,3],[974,3]]},"3946":{"position":[[519,1],[558,1],[634,1],[636,1]]},"3956":{"position":[[887,3]]},"3982":{"position":[[355,1],[358,2],[1038,1],[1086,1],[1093,1],[1317,1],[1355,1],[1389,1]]},"3998":{"position":[[75,1]]},"4029":{"position":[[357,1],[405,1],[429,1],[475,1],[484,1],[532,1],[534,1],[575,1],[577,1],[586,1],[633,1],[635,1],[669,1],[671,1],[673,3],[814,3],[818,3],[901,3],[905,3],[1091,3],[1254,4],[1279,3]]},"4041":{"position":[[128,2]]},"4046":{"position":[[248,2]]},"4050":{"position":[[972,3],[1037,3]]},"4056":{"position":[[469,1]]},"4062":{"position":[[956,3],[999,1],[1001,3],[1022,1],[1052,1],[1083,1],[1085,3],[1365,1],[1372,1],[1379,1],[1393,1],[1445,3],[1479,1],[1486,1],[1493,1],[1513,1],[1589,1],[1596,1],[1603,1],[1623,1],[1702,1],[1709,1],[1716,1],[1732,1],[1831,1],[1838,1],[1845,1],[1861,1],[1980,1],[1987,1],[1994,1],[2010,1],[2101,1],[2108,1],[2115,1],[2131,1],[2182,1],[2189,1],[2196,1],[2212,1],[2289,1],[2296,1],[2303,1],[2319,1],[2396,3],[2430,1],[2437,1],[2444,1],[2460,1],[2569,1],[2576,1],[2583,1],[2599,1],[2649,1],[2656,1],[2663,1],[2683,1],[2765,1],[2772,1],[2779,1],[2799,1],[2928,1],[2935,1],[2942,1],[2962,1]]},"4098":{"position":[[440,1],[463,1],[504,1],[527,1],[593,1],[606,1],[736,1],[752,1]]},"4110":{"position":[[1429,1],[1869,8]]},"4120":{"position":[[340,3],[449,1],[473,1],[480,1],[498,1]]},"4131":{"position":[[385,1],[387,1],[389,2],[462,2],[530,1],[544,1],[589,1],[686,3],[690,2],[693,2],[696,2],[699,2]]},"4133":{"position":[[179,1],[251,1],[298,2],[349,1]]},"4145":{"position":[[132,1],[445,1]]},"4163":{"position":[[524,1],[529,1],[531,1],[540,1],[548,1],[584,2],[685,2]]},"4165":{"position":[[739,1],[744,1],[746,1],[755,1],[763,1]]},"4189":{"position":[[281,1]]},"4191":{"position":[[103,1]]},"4252":{"position":[[653,1],[735,1]]},"4261":{"position":[[216,1],[273,1],[275,1],[390,1],[535,1],[537,1],[539,2],[550,1]]},"4263":{"position":[[304,1],[343,1],[345,1],[752,1],[893,1],[895,1],[897,1],[899,1]]},"4265":{"position":[[197,1],[236,1],[238,1],[645,1],[786,1],[788,2],[791,1],[1198,1],[1339,1],[1341,1],[1343,1],[1345,1]]},"4269":{"position":[[243,1],[301,1],[351,1],[470,1],[541,1],[543,1],[545,2],[556,1]]},"4271":{"position":[[292,1],[347,1],[349,1],[464,1],[609,1],[611,1],[613,2],[624,1]]},"4275":{"position":[[253,2],[315,1],[324,1],[326,1],[336,1],[338,1],[349,1],[359,1],[361,1],[363,1],[483,2],[540,1],[549,1],[551,1],[564,1],[572,1],[574,1],[726,2],[823,1],[832,1],[834,1],[846,1],[848,1],[866,1],[888,1],[911,1],[919,1],[921,1],[923,1],[1035,1],[1044,1],[1046,1],[1058,1],[1065,1],[1067,1]]},"4279":{"position":[[290,2],[365,1],[375,1],[388,1],[412,1],[414,1],[416,1],[502,2],[579,1],[589,1],[602,1],[620,1],[622,1],[701,2],[704,1],[783,1],[785,1],[787,1],[789,1],[791,1]]},"4285":{"position":[[126,1],[322,1]]},"4289":{"position":[[763,1],[1088,1]]},"4295":{"position":[[484,1],[501,8],[599,1]]},"4299":{"position":[[126,8],[443,5]]},"4305":{"position":[[743,1]]},"4307":{"position":[[30,1]]},"4309":{"position":[[805,1]]},"4311":{"position":[[44,1]]},"4316":{"position":[[341,1],[390,1],[909,1],[911,1],[960,2],[963,1],[1004,2],[1007,1],[1009,1]]},"4318":{"position":[[286,3],[556,1],[604,1],[913,1],[915,1],[963,2],[966,1],[1007,2],[1010,1],[1012,1]]},"4328":{"position":[[281,1],[391,1],[769,1],[814,1],[852,1],[1090,1],[1240,1]]},"4336":{"position":[[539,1],[647,1]]},"4341":{"position":[[650,1],[690,1],[709,1],[843,2],[880,1],[882,1]]},"4343":{"position":[[189,1],[228,1],[1387,2],[1390,1],[1392,1]]},"4345":{"position":[[156,1],[1315,2],[1318,1],[1354,1],[1393,1],[1527,1],[1529,1]]},"4347":{"position":[[484,1],[524,1],[543,1],[677,2],[698,1],[700,1]]},"4358":{"position":[[85,1],[104,1],[111,1],[123,1],[308,1],[327,1],[334,1],[346,1],[592,1],[617,1],[624,1],[650,1],[666,1],[673,1],[680,1],[695,1],[807,1],[832,1],[839,1],[865,1],[881,1],[888,1],[895,1],[910,1]]},"4367":{"position":[[185,1],[245,1],[297,1],[342,1],[405,1],[465,1],[500,1],[577,1],[579,1],[581,1]]},"4373":{"position":[[571,1],[632,1],[662,2],[665,1],[683,1],[728,1],[813,1],[873,1],[908,1],[2418,3],[2438,1],[2649,1],[2651,1],[2653,1],[2655,1],[2737,1],[2830,1],[2832,4],[2854,1],[3429,1],[3431,2],[3434,2],[3437,1],[3439,1]]},"4375":{"position":[[1197,1],[1254,3],[1258,1],[1260,1],[1308,1],[1318,1],[1387,1],[1458,2],[1501,1],[1503,1],[1505,1],[1507,1],[1552,1],[1554,1],[1614,1],[1649,1],[1993,1],[2134,1],[2136,1],[2138,1],[2140,1],[2209,1],[2315,3],[2319,1],[2321,1],[2370,1],[2428,1],[2497,1],[2568,1],[2570,1],[2572,1],[2574,1],[2576,1],[2621,1],[2623,1],[2684,1],[2785,1],[3128,1],[3269,1],[3271,1],[3273,1],[3275,1]]},"4377":{"position":[[655,1],[730,1],[761,2],[764,1],[782,1],[827,1],[851,1],[911,1],[1015,1],[1017,1],[1102,1],[1177,1],[1207,2],[1210,1],[1228,1],[1273,1],[1297,1],[1357,1],[1392,1],[1848,1],[1850,1],[1852,1]]},"4379":{"position":[[559,1],[638,1],[656,1],[701,1],[725,1],[785,1],[889,1],[891,1]]},"4381":{"position":[[295,1],[355,1],[373,1],[418,1],[462,1],[522,1],[557,1],[636,1],[638,1],[640,1],[698,1],[758,1],[799,1],[801,1]]},"4383":{"position":[[439,1],[497,1],[546,1],[653,1],[671,1],[715,1]]},"4391":{"position":[[133,1],[256,1],[375,1]]},"4395":{"position":[[174,1],[191,1],[531,1]]},"4397":{"position":[[657,1]]},"4405":{"position":[[89,1],[138,1]]},"4407":{"position":[[978,1]]},"4409":{"position":[[771,1]]},"4419":{"position":[[34,1],[66,1],[89,1]]},"4421":{"position":[[34,1],[57,1]]},"4425":{"position":[[54,1],[85,1]]},"4433":{"position":[[77,1],[110,1],[128,1]]},"4435":{"position":[[85,1],[118,1],[140,1]]},"4437":{"position":[[30,1],[51,1],[76,1],[101,1],[128,1],[175,1]]},"4445":{"position":[[146,1],[179,1],[197,1],[211,1],[229,1],[248,1],[250,1],[266,1],[273,1],[286,1],[303,1],[321,1],[323,1],[356,1],[374,1],[388,1],[406,1],[425,1],[427,1],[440,1],[453,1],[463,1],[473,1],[483,1],[485,1],[497,1],[502,1],[512,1],[522,1],[528,1],[530,1],[551,1],[561,1],[571,1],[581,1],[587,1],[589,1],[615,1],[626,1],[634,1],[642,1],[648,1],[650,1],[665,1],[676,1],[685,1],[694,1],[700,1],[702,1],[724,1],[737,1],[747,1],[757,1],[763,1],[765,1],[784,1],[793,1],[802,1],[811,1],[817,1],[819,1],[852,1],[870,1],[884,1],[902,1],[921,1],[923,1],[941,1],[954,1],[965,1],[975,1],[985,1],[987,1],[1020,1],[1038,1],[1052,1],[1070,1],[1089,1]]},"4504":{"position":[[965,1],[1014,1]]},"4523":{"position":[[624,1],[695,1],[697,1],[887,1],[889,2],[901,1],[903,1],[943,1],[1238,1],[1240,1]]},"4525":{"position":[[735,1],[819,1],[821,1],[973,1],[975,2],[987,1],[989,1],[1029,1],[1181,1],[1183,1]]},"4527":{"position":[[724,1],[794,1],[796,1],[1063,2],[1071,2],[1083,1],[1085,1],[1125,1],[1144,1],[1278,2],[1299,1],[1301,1]]},"4529":{"position":[[532,1],[607,1],[609,1],[750,1],[752,2],[764,1],[766,1],[806,2],[1266,5],[1287,2],[1298,1],[1325,1],[1345,1],[1402,1],[1410,2],[1413,1],[1423,1],[1450,1],[1470,1],[1527,1],[1535,2],[1538,2],[1541,1],[2000,5],[2021,2],[2032,1],[2059,1],[2079,1],[2136,1],[2144,2],[2147,1],[2157,1],[2184,1],[2204,1],[2261,1],[2269,2],[2272,2],[2275,1]]},"4531":{"position":[[568,1],[670,1],[672,1],[712,2],[1172,5],[1193,2],[1204,1],[1231,1],[1251,1],[1308,1],[1316,2],[1319,1],[1329,1],[1356,1],[1376,1],[1433,1],[1441,2],[1444,2],[1447,1],[1906,5],[1927,2],[1938,1],[1965,1],[1985,1],[2042,1],[2050,2],[2053,1],[2063,1],[2090,1],[2110,1],[2167,1],[2175,2],[2178,2],[2181,1]]},"4533":{"position":[[348,1],[444,1],[446,1],[486,1],[1645,2],[1648,1],[1650,1]]},"4535":{"position":[[278,1],[1437,2],[1440,1],[1476,1],[1539,1],[1541,1],[2700,2],[2703,1],[2705,2],[2717,1],[2719,1],[2758,1],[2892,1],[2894,1]]},"4543":{"position":[[221,1],[233,1],[235,3],[705,3],[709,2],[712,1],[1002,1],[1014,1],[1016,3],[1038,3],[1042,2],[1045,1]]},"4545":{"position":[[194,1],[206,1],[208,3],[222,1],[248,2],[251,2],[254,3],[258,1]]},"4547":{"position":[[317,1],[329,1],[344,1],[359,1],[439,2],[533,1],[535,1],[537,1]]},"4551":{"position":[[102,1],[284,2],[330,2],[365,2],[382,1],[384,1]]},"4553":{"position":[[993,1],[1039,2],[1072,2],[1095,2],[1098,3],[1102,1],[1104,1]]},"4555":{"position":[[253,1],[355,1],[557,5],[668,1],[670,2],[695,5],[728,1],[730,2],[745,1],[747,1],[749,1]]},"4563":{"position":[[48,1],[61,1]]},"4567":{"position":[[79,1],[98,1],[129,1],[155,1],[185,1],[241,1],[304,1],[327,1]]},"4571":{"position":[[148,1],[186,1],[233,1],[258,1],[284,1],[323,1]]},"4573":{"position":[[150,1],[188,1],[235,1],[260,1],[286,1],[332,1],[392,1]]},"4575":{"position":[[2453,3],[2576,3],[2700,3],[2823,3],[2946,3]]},"4583":{"position":[[48,1],[61,1]]},"4587":{"position":[[95,1],[115,1],[141,1],[171,1],[195,1],[225,1],[248,1],[278,1],[301,1],[352,1],[372,1],[398,1],[428,1],[452,1],[482,1],[505,1],[535,1],[558,1]]},"4591":{"position":[[164,1],[184,1],[222,1],[269,1],[294,1],[320,1],[359,1],[410,1],[430,1],[468,1],[515,1],[540,1],[566,1],[605,1]]},"4593":{"position":[[166,1],[186,1],[224,1],[271,1],[296,1],[322,1],[361,1],[407,1],[467,1]]},"4595":{"position":[[2453,3],[2576,3],[2700,3],[2823,3],[2946,3]]},"4607":{"position":[[1091,1],[1217,1],[1236,1],[1280,1],[1369,1],[1583,1],[1585,1],[1600,1],[1615,1],[1643,1],[1694,1],[1696,1],[1706,1],[1708,1],[1778,1],[1809,1],[1855,1],[1857,1],[1859,1],[1865,1],[1884,1],[1900,1],[1916,2],[1919,1],[1925,1],[1944,1],[1960,1],[1975,1],[1977,1],[1986,1],[1988,1],[2003,1],[2016,1],[2018,3],[2515,3],[2588,3],[2881,3],[2954,3],[3184,1],[3186,1],[3287,1],[3389,1],[3399,1],[3442,1],[3455,1],[3476,1],[3566,3],[3601,2],[3626,2],[3900,3],[3973,3],[4203,1],[4205,1],[4306,1],[4408,1],[4418,1],[4461,1],[4474,1],[4495,1],[4750,2],[4779,2],[5136,1],[5176,1],[5196,1],[5198,3],[5245,3],[5280,2],[5305,2]]},"4609":{"position":[[618,1],[620,1],[622,3],[635,1],[637,1],[644,1],[665,1],[701,1],[752,6],[759,1],[830,1],[846,1],[860,1],[885,1],[914,1],[921,1],[991,1],[1010,1],[1080,1],[1082,1],[1099,1],[1112,1],[1114,1],[1116,3],[1120,1]]},"4613":{"position":[[200,1]]},"4651":{"position":[[112,3],[392,4]]},"4675":{"position":[[82,1],[140,1]]},"4677":{"position":[[82,1],[132,1]]},"4681":{"position":[[105,3],[799,4]]},"4745":{"position":[[73,1],[122,1]]},"4749":{"position":[[73,1],[114,1]]},"4781":{"position":[[109,3],[1136,3]]},"4785":{"position":[[78,1]]},"4793":{"position":[[78,1]]},"4831":{"position":[[76,1]]},"4837":{"position":[[76,1]]},"4887":{"position":[[775,1]]},"4891":{"position":[[768,1],[812,1]]},"4893":{"position":[[969,1],[1018,1],[1254,1],[1336,1],[1338,1],[1387,1]]},"4895":{"position":[[1092,1],[1191,1],[1193,1],[1232,1],[1343,1],[1345,1]]},"4897":{"position":[[533,3],[1002,1],[1089,1],[1091,1],[1130,1],[1158,1],[1160,1]]},"4899":{"position":[[440,1],[523,1],[525,1],[564,1],[586,1],[588,1]]},"4901":{"position":[[642,4],[996,1],[1035,1],[1435,1],[1475,2],[1491,1],[1500,1],[1512,1],[1735,1],[1760,1],[1762,2],[1961,1],[1963,1],[1965,1],[1967,1]]},"4903":{"position":[[1124,1],[1163,1],[1165,1],[1325,1],[1406,2],[1580,1],[1589,1],[1706,1],[1708,2],[1875,1],[1877,1],[1879,1]]},"4905":{"position":[[691,1],[735,1]]},"4909":{"position":[[1028,1],[1087,1],[1207,2],[1218,1],[1220,1],[1259,1],[1407,1],[1409,1],[1747,1],[1806,1],[1926,2],[1937,1],[1939,1],[1978,1],[3365,1],[3367,1]]},"4911":{"position":[[825,1],[917,1],[919,1],[958,1],[974,1],[1300,2],[1383,1],[1385,1]]},"4913":{"position":[[2104,1],[2143,1],[2145,1],[2175,2],[2178,1],[2256,2],[2259,1],[2289,2],[2292,1],[2378,1],[2380,1],[2382,1]]},"4915":{"position":[[370,1],[409,1],[411,1],[422,1],[2010,3],[2030,1],[2032,1],[3019,1],[3021,1],[3023,2],[4972,2],[4975,1],[4986,1],[6574,3],[6594,1],[6596,1],[7582,1],[7584,1],[7586,2],[9535,1],[9537,1],[9539,1]]},"4917":{"position":[[589,1],[50091,1]]},"4919":{"position":[[533,1],[617,1],[619,1],[1801,1]]},"4921":{"position":[[640,1],[679,1],[2394,1],[2396,1]]},"4923":{"position":[[542,1],[796,1]]},"4925":{"position":[[437,1],[494,3],[506,1],[508,1],[547,1],[556,1],[579,1],[619,2],[666,1],[707,2],[736,1],[901,2],[904,3],[908,2],[922,1],[1028,2],[1038,1],[1056,1],[1075,1],[1087,1],[1250,2],[1284,1],[1286,1],[1288,2],[1305,1],[1361,1],[1373,1],[1536,2],[1560,2],[1581,2],[1593,1],[1617,1],[1629,1],[1658,2],[1670,1],[1744,1],[1746,2],[1796,1],[1798,1],[1800,1]]},"4927":{"position":[[636,1],[714,1],[716,1],[765,1]]},"4929":{"position":[[408,1],[474,3],[486,1],[488,1],[537,1]]},"4931":{"position":[[538,1],[612,1],[614,1],[663,1]]},"4933":{"position":[[803,1],[942,1],[1016,1],[1088,1],[1193,1],[1195,2],[1206,1],[1208,1],[1247,1],[1332,1],[1334,1]]},"4935":{"position":[[547,1],[624,1],[695,2],[706,1],[708,1],[747,1],[832,1],[834,1]]},"4937":{"position":[[792,1],[856,1],[1049,2],[1060,1],[1062,1],[1101,1],[1114,1],[1186,1],[1279,1],[1281,2],[1364,1],[1366,1]]},"4939":{"position":[[501,1],[835,1],[901,1],[973,1],[998,1],[1000,2],[1011,1],[1013,1],[1052,1],[1100,3],[1118,1],[1120,1],[1190,3],[1204,3],[1224,1],[1226,1],[1228,1],[1230,1]]},"4941":{"position":[[359,1],[1867,1],[1927,1],[3202,2],[3213,1],[3215,1],[3254,1],[3302,3],[3320,1],[3322,1],[3392,3],[3406,3],[3426,1],[3428,1],[3430,1],[3432,1]]},"4943":{"position":[[357,1],[687,1],[753,1],[824,2],[835,1],[837,1],[876,1],[878,1],[926,3],[944,1],[946,1],[1016,3],[1030,3],[1045,3],[1064,1],[1066,1],[1068,1],[1070,1],[1072,1]]},"4945":{"position":[[560,1],[856,1],[935,1],[960,3],[972,1],[974,1],[1013,1],[1015,1],[1063,3],[1081,1],[1083,1],[1153,3],[1167,3],[1203,1],[1205,1],[1207,1],[1209,1],[1211,1]]},"4947":{"position":[[696,1],[1103,1],[1497,1],[1499,1],[1538,1],[1540,1],[1588,3],[1606,1],[1608,1],[1678,3],[1692,3],[1728,1],[1730,1],[1732,1],[1734,1],[1736,1]]},"4951":{"position":[[509,1],[565,3],[578,1],[580,1],[620,2],[623,1]]},"4953":{"position":[[476,1],[530,1]]},"4955":{"position":[[401,1],[460,3],[473,1],[475,1],[524,1],[582,2],[644,1],[652,1],[661,1],[663,1],[665,1],[675,1],[686,1],[704,1],[706,1],[708,1]]},"4957":{"position":[[1401,1],[1453,1],[1455,1],[1524,2],[1536,2],[1548,1],[1550,1],[1595,1],[1653,2],[1692,1],[1700,1],[1873,1],[1881,1],[2025,1],[2039,1],[2041,1],[2043,1],[2045,1],[2055,1],[2066,1],[2093,1],[2121,1],[2123,1],[2125,1],[2127,1],[3867,1],[4996,1]]},"4959":{"position":[[241,1],[296,3],[309,1],[311,1],[359,1]]},"4961":{"position":[[617,1],[673,3],[686,1],[688,1],[773,1]]},"4963":{"position":[[971,1],[1017,1],[1019,1],[1106,2],[1119,2],[1148,1],[1150,1],[1166,1],[1168,1],[1242,1],[1314,1],[1316,1],[1318,1],[1341,1]]},"4965":{"position":[[1144,1],[1203,1],[1205,1],[1328,1],[1330,2],[1342,1],[1344,1],[1393,1],[1451,2],[1633,1],[1641,1],[1765,1],[1767,1],[1769,1],[1779,1],[1790,1],[1813,1],[1815,1],[1817,1],[2081,1],[2095,1],[2105,1],[2189,1],[2213,1],[2251,1],[2256,2],[2316,2],[2902,3],[2914,2],[2917,1],[2966,1]]},"4967":{"position":[[1196,1],[1291,1],[1293,1],[1332,1],[1378,1],[1463,2],[1487,1],[1578,2],[1597,1],[1691,2],[1714,1],[1755,2],[1768,1],[1770,1],[1799,2],[1802,1],[1829,2],[1832,1],[1855,2],[1858,1],[1881,2],[1884,1],[1907,1],[1909,1],[1911,1],[1913,1]]},"4969":{"position":[[450,1],[844,1],[900,3],[913,1],[915,1],[963,1],[1021,2],[1078,1],[1089,1],[1091,1],[1101,1],[1123,1],[1125,1]]},"4971":{"position":[[705,1],[830,1],[832,1],[897,1],[955,2],[967,2],[978,1],[1037,1],[1047,1],[1049,4],[1084,1],[1149,1],[1159,1],[1161,1],[1163,1],[1173,1],[1186,1],[1224,1],[1226,1],[1228,1]]},"4973":{"position":[[554,1],[616,1],[694,2],[706,1],[708,1],[748,1],[2199,3],[2219,1],[2360,2],[2386,1],[2388,1],[2446,2],[2472,1],[2779,1],[2863,1],[2885,1],[2892,1],[3065,1],[3067,1],[3069,1],[3079,1],[3090,1],[3125,3],[4650,1],[4652,1],[4654,1]]},"4975":{"position":[[707,1],[797,1],[799,1],[838,1],[2289,3],[2309,3],[2336,1],[2338,1],[2396,2],[2424,1],[2649,1],[2762,5],[2798,1],[2819,1],[2834,1],[2841,1],[3021,1],[3028,1],[3048,1],[3055,1],[3063,1],[3073,1],[3138,1],[3148,1],[3157,1],[3164,1],[3166,1],[3168,1],[3170,1],[3180,1],[3191,1],[3209,3],[4719,3],[4749,1],[4807,2],[4821,1],[4856,2],[4869,1],[4948,2],[4974,1],[4976,1],[4978,1]]},"4977":{"position":[[805,1],[889,1],[891,1],[930,1],[932,1],[1218,1],[1220,1],[1289,1],[1570,2],[1847,1],[1849,2],[2582,2],[2585,1],[2870,3],[3604,1],[3606,1],[3608,1],[3666,2],[3942,1],[4027,1],[4042,1],[4050,1],[4067,1],[4090,1],[4100,1],[4145,1],[4161,1],[4166,1],[4176,1],[4184,1],[4186,1],[4188,1],[4190,1],[4199,1],[4201,1],[4211,1],[4213,1],[4230,1],[4232,1],[4234,1],[4244,1],[4246,1],[4255,1],[4339,1],[4858,2],[4868,1],[4958,1],[4986,1],[5004,1],[5026,1],[5045,1],[5047,1],[5049,2],[5059,1],[5061,1],[5073,1],[5120,2],[5128,1],[5130,1],[5142,1],[5189,2],[5200,1],[5208,2],[5211,1],[5221,1],[5223,1],[5232,1],[5316,1],[5835,2],[5845,1],[5935,1],[5963,1],[5982,1],[6005,1],[6025,1],[6027,1],[6029,1],[6040,1],[6042,1],[6183,1],[6185,1],[6187,2],[6197,1],[6199,1],[6211,1],[6258,2],[6266,1],[6268,1],[6280,1],[6327,2],[6338,1],[6346,1],[6348,1],[6350,1],[6352,1],[6354,1]]},"4979":{"position":[[533,1],[611,1],[682,2],[694,1],[696,1],[741,1],[799,2],[948,1],[1032,1],[1051,1],[1053,1],[1055,1],[1065,1],[1076,1],[1100,1],[1102,1],[1104,1]]},"4981":{"position":[[676,1],[775,1],[777,1],[823,1],[881,2],[965,1],[986,1],[1005,1],[1007,1],[1009,1],[1019,1],[1030,1],[1054,1],[1056,1],[1058,1]]},"4983":{"position":[[731,1],[853,1],[855,1],[1390,1],[1532,5],[1568,1],[1633,1],[1640,1],[1642,1],[1644,1],[1654,1],[1667,1],[2172,1],[2174,1],[2176,1]]},"4985":{"position":[[663,1],[775,1],[838,1],[877,1],[1088,1],[1090,1],[1166,1],[1205,1],[1346,1],[1348,1],[1406,1],[1445,1],[1447,1],[1854,1],[1925,1],[1927,2],[1930,1],[2337,1],[2408,1],[2410,1],[2412,1],[2414,1]]},"4987":{"position":[[631,1],[740,1],[742,1],[781,1],[783,1],[1189,1],[1260,1],[1262,2],[1265,1],[1671,1],[1742,1],[1744,1],[1746,1],[1748,1]]},"4989":{"position":[[922,1],[977,1],[979,1],[1094,2],[1097,1],[1099,2],[1110,1],[1112,1],[1151,1],[1153,1],[1559,1],[1630,1],[1632,2],[1635,1],[2041,1],[2112,1],[2114,1],[2116,1],[2118,1],[2440,5],[2476,1],[2672,1],[2700,1],[2710,1],[2724,1],[2731,1],[2733,1],[2735,1],[2737,1],[2747,1],[2757,1],[2759,1],[2783,1],[2994,2],[3086,1],[3144,2],[3162,1],[3241,1],[3243,2],[3246,1],[3270,1],[3481,2],[3573,1],[3631,2],[3649,1],[3728,1],[3730,1],[3732,1],[3734,1],[3736,1]]},"4991":{"position":[[356,1],[427,1],[498,2],[509,1],[511,1],[550,1],[734,1],[736,1],[873,1],[875,2],[1060,1],[1062,1]]},"4993":{"position":[[501,1],[596,1],[598,1],[637,1],[821,1],[823,1],[960,1],[962,2],[1147,1],[1149,1]]},"4995":{"position":[[1379,1],[1539,1],[1595,1],[1722,2],[1733,1],[1735,1],[1774,1],[1792,1],[1901,2],[2179,1],[2181,1],[2285,1],[2367,1],[2369,1],[2371,1],[2373,1],[2375,1]]},"4997":{"position":[[447,1],[783,1],[885,1],[887,1],[996,1],[1054,2],[1193,1],[1258,1],[1282,1],[1284,1],[1286,1],[1296,1],[1309,1],[1391,1],[1393,1],[1395,1]]},"4999":{"position":[[569,1],[650,1],[728,2],[739,1],[741,1],[780,1],[1448,1],[1450,1],[1519,2],[1606,1],[1650,1],[1652,1],[1654,4],[1689,1],[1773,1],[1799,1],[1807,1],[1814,1],[1821,1],[1823,1],[1825,1],[1827,1],[1837,1],[1848,1],[1867,1],[1878,1],[1957,2],[2037,1],[2039,1],[2041,1],[2043,1]]},"5001":{"position":[[826,1],[935,1],[937,1],[976,1],[1644,1],[1646,1],[1816,1],[1839,1],[1865,1],[1873,1],[1880,1],[1887,1],[1889,1],[1891,1],[1893,1],[1903,1],[1914,1],[1933,1],[1944,1],[2023,2],[2103,1],[2105,1],[2107,1],[2109,1]]},"5003":{"position":[[463,1],[531,1],[602,2],[614,1],[616,1],[656,1],[1262,1],[1264,1],[1352,1],[1426,1],[1540,1],[1630,1],[1638,1],[1645,1],[1682,1],[1692,1],[1697,1],[1707,1],[1716,1],[1718,1],[1720,1],[1730,1],[1747,1],[1758,1],[1837,2],[2010,1],[2068,2],[2077,1],[2135,2],[2150,1],[2152,1],[2154,1]]},"5005":{"position":[[762,1],[895,1],[897,1],[942,1],[1000,2],[1012,2],[1132,1],[1197,1],[1216,1],[1218,1],[1220,1],[1230,1],[1243,1],[1267,1],[1269,1],[1271,1]]},"5007":{"position":[[609,1],[678,1],[749,2],[761,1],[763,1],[802,1],[1077,3],[1796,1],[1798,1],[2122,1],[2212,1],[2220,1],[2237,1],[2260,1],[2270,1],[2307,1],[2316,1],[2323,1],[2333,1],[2338,1],[2348,1],[2356,1],[2358,1],[2360,1],[2370,1],[2387,1],[2398,1],[3008,2],[3210,3],[3222,1],[3280,2],[3289,1],[3347,2],[3361,1],[3363,1],[3365,1]]},"5009":{"position":[[492,1],[567,1],[645,2],[656,1],[658,1],[697,1],[2155,2],[2158,1],[2160,1],[2218,2],[2511,1],[2595,1],[2615,1],[2757,1],[2759,1],[2761,1],[2763,1],[2773,1],[2784,1],[4173,1],[4175,1],[4177,1]]},"5011":{"position":[[638,1],[744,1],[746,1],[785,1],[2243,2],[2246,1],[2248,1],[2306,2],[2535,1],[2557,1],[2577,1],[2719,1],[2721,1],[2723,1],[2725,1],[2735,1],[2746,1],[2764,1],[2766,1],[2768,1]]},"5013":{"position":[[478,1],[550,1],[621,2],[632,1],[634,1],[677,1],[735,2],[878,1],[962,1],[975,1],[977,1],[979,1],[989,1],[1000,1],[1018,1],[1020,1],[1022,1]]},"5015":{"position":[[610,1],[702,1],[704,1],[749,1],[807,2],[892,1],[918,1],[931,1],[933,1],[935,1],[945,1],[956,1],[974,1],[976,1],[978,1]]},"5017":{"position":[[369,1],[613,1],[668,3],[680,1],[682,1],[721,1],[940,1],[942,1]]},"5019":{"position":[[476,1],[523,1]]},"5021":{"position":[[341,1],[409,3],[421,1],[423,1],[472,1]]},"5023":{"position":[[415,1],[469,3],[482,1],[484,1],[529,1]]},"5025":{"position":[[308,1],[370,3],[382,1],[384,1],[460,1]]},"5027":{"position":[[547,1],[604,2],[663,2],[666,3],[678,1],[680,1],[756,1]]},"5029":{"position":[[350,1],[425,3],[437,1],[439,1],[515,1]]},"5031":{"position":[[291,1],[354,3],[366,1],[368,1],[414,1],[472,2],[536,1],[554,1],[556,1],[566,1],[590,1],[592,1]]},"5033":{"position":[[1183,1],[1249,1],[1470,2],[1481,1],[1483,1],[1590,1],[1648,2],[1961,1],[2208,1],[2210,1],[2220,1],[2312,1],[2314,1]]},"5035":{"position":[[597,1],[659,1],[800,2],[811,1],[813,1],[857,1]]},"5037":{"position":[[855,1],[899,1]]},"5039":{"position":[[1441,1],[1496,3],[1509,1],[1511,1],[1551,1],[1684,1],[1686,1],[1744,2],[1866,1],[1876,1],[1943,1],[1945,1],[1947,1],[1957,1],[1970,1],[2084,1],[2086,1],[2088,1]]},"5041":{"position":[[510,1],[621,1],[623,1],[667,1]]},"5045":{"position":[[354,1],[442,1],[444,1],[493,1]]},"5047":{"position":[[336,1],[398,3],[410,1],[412,1],[478,1]]},"5049":{"position":[[548,1],[612,3],[624,1],[626,1],[673,1]]},"5051":{"position":[[570,1],[637,3],[649,1],[651,1],[696,1]]},"5053":{"position":[[520,1],[637,1],[639,1],[683,1]]},"5055":{"position":[[400,1],[485,1],[487,1],[558,1]]},"5057":{"position":[[583,1],[666,1],[668,1],[712,1]]},"5059":{"position":[[607,1],[692,1],[694,1],[738,1]]},"5061":{"position":[[410,1],[465,3],[477,1],[479,1],[523,1]]},"5063":{"position":[[285,1],[339,3],[351,1],[353,1],[397,1]]},"5067":{"position":[[295,1],[489,1]]},"5069":{"position":[[397,1],[442,1]]},"5071":{"position":[[301,1],[358,3],[371,1],[373,1],[419,1]]},"5073":{"position":[[484,1],[523,1],[536,1],[574,2],[584,1],[623,2],[637,1],[675,1],[677,1],[679,1]]},"5075":{"position":[[741,1],[796,3],[809,1],[811,1],[855,1],[857,1],[901,1]]},"5079":{"position":[[320,1],[446,1],[448,1],[497,1]]},"5083":{"position":[[887,1],[959,1],[961,1],[991,1],[993,1],[1005,1],[1222,2],[1336,1],[1374,2],[1409,3],[1543,2],[1546,1],[1558,1],[1699,2],[1989,2],[1992,1],[2004,1],[2115,2],[2267,3],[2342,1],[2344,2],[2355,1]]},"5085":{"position":[[1400,1],[1454,1],[1456,1],[1904,2],[1927,2],[1938,1],[1940,1],[1970,1],[1981,1],[2001,1],[2017,1],[2019,1],[2021,1],[2032,1],[2034,1],[2047,1],[2064,1],[2118,1],[2140,1],[2409,1],[2465,1],[2473,2],[2485,1],[2487,1],[2499,1],[2520,1],[2527,2],[2542,1],[2562,1],[2564,1],[2566,2],[2576,1],[2585,1],[2587,2],[2600,1],[2607,2],[2615,1],[2619,2]]},"5087":{"position":[[1563,1],[1593,1],[1595,1],[1606,1],[1626,1],[1642,1],[1644,1],[1646,1],[1657,1],[1659,1],[1672,1],[1689,1],[1743,1],[1767,1],[1780,1],[1836,1],[1848,2],[1860,1],[1862,1],[1874,1],[1892,1],[1899,2],[1914,1],[1934,1],[1936,1],[1938,2],[1948,1],[1957,1],[1959,2],[1972,1],[1979,2],[1982,1],[1993,1],[2013,1],[2029,1],[2031,1],[2033,1],[2044,1],[2046,1],[2059,1],[2076,1],[2130,1],[2154,1],[2167,1],[2223,1],[2235,2],[2247,1],[2249,1],[2261,1],[2279,1],[2286,2],[2301,1],[2321,1],[2323,1],[2325,2],[2335,1],[2344,1],[2346,2],[2359,1],[2366,2],[2369,2],[2377,1],[2381,2]]},"5089":{"position":[[844,1],[900,1],[902,1],[1029,1],[1031,2],[1044,1],[1046,1],[1076,1],[1078,1],[1090,1],[1307,2],[1421,1],[1459,2],[1494,3],[1628,2],[1631,1],[1643,1],[1884,2],[1998,1],[2098,2],[2133,3],[2267,1],[2269,2],[2282,1]]},"5091":{"position":[[708,1],[761,1],[841,2],[852,1],[854,1],[884,1],[895,1],[897,1],[910,1],[927,1],[981,1],[1002,1],[1023,1],[1079,1],[1087,2],[1102,1],[1207,1],[1238,1],[1309,2],[1324,1],[1344,1],[1346,1],[1350,2],[1475,1],[1484,2],[1492,1],[1496,2]]},"5093":{"position":[[867,1],[931,1],[1031,2],[1042,1],[1044,1],[1074,1],[1085,1],[1118,1],[1175,2],[1188,1],[1190,3],[1194,2],[1207,1],[1242,1],[1276,3],[1295,3],[1315,2],[1323,1],[1327,2]]},"5095":{"position":[[1105,1],[1231,1],[1233,1],[1273,1],[1473,1],[1519,2],[1552,2],[1575,2],[1578,3],[1582,1],[1584,2],[1597,1],[1779,2],[1825,2],[1860,2],[1877,1],[1879,2],[1955,5],[2066,1],[2068,2],[2093,5],[2126,1],[2128,2],[2143,1],[2145,1],[2147,2],[2238,2],[2241,5],[2247,1],[2249,1]]},"5097":{"position":[[807,1],[868,1],[939,2],[950,1],[952,1],[982,1],[984,1],[996,1],[1260,2],[1375,1],[1468,2],[1503,3],[1639,2],[1642,1],[1654,1],[1835,2],[1950,1],[1988,2],[2158,2],[2161,1],[2173,1],[2312,2],[2606,2],[2609,1],[2621,1],[2802,2],[2917,1],[2954,2],[3124,1],[3126,2],[3137,1]]},"5101":{"position":[[1547,1],[1621,1],[1626,1],[1636,1],[1689,2],[1699,1],[1716,2],[1728,1],[1742,1],[1744,1],[1746,2],[1757,1],[1759,1],[1798,1],[1800,1],[2240,1],[2242,1],[2244,1]]},"5103":{"position":[[678,1],[717,1],[770,1],[772,1]]},"5105":{"position":[[286,1],[353,3],[365,1],[367,1],[406,1],[408,1],[567,2],[570,1],[729,1],[731,1],[733,1]]},"5109":{"position":[[260,1],[322,3],[334,1],[336,1],[393,1]]},"5111":{"position":[[403,1],[495,1],[497,1],[606,1]]},"5114":{"position":[[349,1],[388,1],[432,1],[434,1]]}}}],["0",{"_index":571,"t":{"2664":{"position":[[877,1]]},"2786":{"position":[[191,2],[1073,4]]},"2788":{"position":[[235,2],[582,1]]},"2794":{"position":[[288,1]]},"2812":{"position":[[956,3]]},"2814":{"position":[[433,2],[852,2]]},"2834":{"position":[[1186,1]]},"2844":{"position":[[243,2],[424,2]]},"2848":{"position":[[72,2],[216,1]]},"2852":{"position":[[394,2],[1590,2],[2618,4],[15136,4]]},"2854":{"position":[[324,2],[1011,1],[1083,1],[1120,1]]},"2860":{"position":[[288,1]]},"2874":{"position":[[952,3]]},"2882":{"position":[[208,2]]},"2884":{"position":[[247,2]]},"2890":{"position":[[288,1]]},"3022":{"position":[[2396,2]]},"3153":{"position":[[860,5]]},"3224":{"position":[[422,2]]},"3264":{"position":[[551,2]]},"3303":{"position":[[594,2]]},"3319":{"position":[[644,1],[688,1],[695,1],[702,1]]},"3471":{"position":[[2059,4],[2482,2],[2501,3],[2505,3],[3006,2]]},"3576":{"position":[[602,2]]},"3658":{"position":[[586,2]]},"3674":{"position":[[644,1],[688,1],[695,1],[702,1],[905,1],[912,1],[924,1],[1107,1],[1114,1],[1126,1],[1309,1],[1316,1],[1328,1],[1511,1],[1518,1],[1530,1]]},"3693":{"position":[[1024,1]]},"3754":{"position":[[2003,1]]},"3784":{"position":[[756,2]]},"3821":{"position":[[201,2],[379,2]]},"3918":{"position":[[2273,1],[2309,2],[2446,1]]},"4062":{"position":[[2841,1],[2845,2]]},"4072":{"position":[[86,4]]},"4131":{"position":[[661,2]]},"4269":{"position":[[219,1]]},"4328":{"position":[[349,1]]},"4358":{"position":[[668,1],[675,1],[682,1],[830,1],[883,1],[890,1],[897,1]]},"4387":{"position":[[928,1]]},"4393":{"position":[[865,1]]},"4409":{"position":[[475,2]]},"4413":{"position":[[111,1]]},"4419":{"position":[[525,1]]},"4421":{"position":[[345,1]]},"4445":{"position":[[524,1],[583,1],[644,1],[696,1],[759,1],[813,1]]},"4460":{"position":[[81,2]]},"4486":{"position":[[188,2]]},"4510":{"position":[[782,1]]},"4525":{"position":[[578,2],[850,2],[1058,2]]},"4539":{"position":[[1038,1]]},"4543":{"position":[[1035,2]]},"4607":{"position":[[295,4],[3152,1],[4171,1]]},"4619":{"position":[[398,2]]},"4635":{"position":[[395,2]]},"4719":{"position":[[270,2]]},"4759":{"position":[[308,1]]},"4767":{"position":[[453,2],[471,2]]},"4811":{"position":[[245,1]]},"4813":{"position":[[311,2],[337,1]]},"4815":{"position":[[359,2]]},"4873":{"position":[[378,2]]},"4901":{"position":[[1549,2],[1568,2],[1610,2],[1628,2],[1646,2],[1667,2],[1693,2],[1722,2]]},"4909":{"position":[[948,2],[1159,2],[1667,2],[1878,2]]},"4911":{"position":[[783,2],[786,4],[897,2],[900,4]]},"4913":{"position":[[2156,2]]},"4925":{"position":[[1383,2],[1394,2],[1406,2],[1417,2],[1429,2],[1441,2],[1451,2],[1461,2],[1472,2],[1483,2],[1494,2],[1504,2],[1514,2],[1524,2],[1534,1],[1548,2],[1558,1]]},"4935":{"position":[[804,1]]},"4937":{"position":[[928,2]]},"4939":{"position":[[1128,2],[1152,2],[1166,2]]},"4941":{"position":[[3330,2],[3354,2],[3368,2]]},"4943":{"position":[[954,2],[978,2],[992,2]]},"4945":{"position":[[1091,2],[1115,2],[1129,2]]},"4947":{"position":[[1616,2],[1640,2],[1654,2]]},"4973":{"position":[[3217,2],[3364,2],[4534,2]]},"4975":{"position":[[3299,2],[3446,2],[4616,2]]},"4977":{"position":[[157,1]]},"4989":{"position":[[2770,2],[3257,2]]},"4999":{"position":[[1629,2],[1796,2]]},"5001":{"position":[[1759,2],[1862,2]]},"5007":{"position":[[3359,1]]},"5009":{"position":[[2331,2],[2612,2],[3122,2]]},"5011":{"position":[[2355,2],[2574,2]]},"5015":{"position":[[972,1]]},"5039":{"position":[[1989,2]]},"5051":{"position":[[187,1]]},"5059":{"position":[[187,1]]},"5083":{"position":[[1525,2],[1832,2],[1851,4],[1968,2],[2248,2]]},"5085":{"position":[[2544,2]]},"5087":{"position":[[1916,2],[2303,2]]},"5089":{"position":[[1610,2],[2114,2],[2249,2]]},"5091":{"position":[[1326,2],[1348,1]]},"5093":{"position":[[1257,2]]},"5097":{"position":[[2023,4],[2446,2],[2465,3],[2469,3],[2970,2]]},"5103":{"position":[[768,1]]}}}],["0\",\"class\":\"dnsresolver\",\"message\":\"resolv",{"_index":3416,"t":{"3866":{"position":[[623,44]]},"3902":{"position":[[623,44]]},"4575":{"position":[[607,44]]},"4595":{"position":[[607,44]]}}}],["0\",\"throwabl",{"_index":3426,"t":{"3866":{"position":[[1057,18]]},"3902":{"position":[[1057,18]]},"4575":{"position":[[1041,18]]},"4595":{"position":[[1041,18]]}}}],["0.0",{"_index":2182,"t":{"3319":{"position":[[704,6]]},"3674":{"position":[[704,6],[926,6],[1128,6],[1330,6],[1532,6]]},"4358":{"position":[[684,6],[899,6]]},"4967":{"position":[[1716,4],[1741,4],[1751,3]]}}}],["0.0.0.0",{"_index":833,"t":{"2727":{"position":[[782,7]]},"3862":{"position":[[670,7],[792,7]]},"3938":{"position":[[782,7]]},"4203":{"position":[[353,8],[1018,7]]},"4246":{"position":[[197,8],[234,7]]},"4675":{"position":[[331,8]]},"4729":{"position":[[246,8]]},"4747":{"position":[[387,7]]},"4785":{"position":[[286,8],[323,7]]},"4831":{"position":[[283,7]]}}}],["0.0.0.0/0",{"_index":4614,"t":{"4607":{"position":[[265,9],[384,9],[424,9],[465,9],[506,9]]}}}],["0.0.0.0:18000",{"_index":1528,"t":{"2986":{"position":[[699,13]]}}}],["0.0.0.0:30303",{"_index":3788,"t":{"4090":{"position":[[586,13]]}}}],["0.000",{"_index":4210,"t":{"4358":{"position":[[769,7],[984,7]]}}}],["0.000000000000000256",{"_index":3152,"t":{"3754":{"position":[[2231,20]]}}}],["0.005",{"_index":5284,"t":{"4925":{"position":[[1134,8],[1420,8]]}}}],["0.01",{"_index":5282,"t":{"4925":{"position":[[1100,7],[1386,7]]}}}],["0.010",{"_index":2184,"t":{"3319":{"position":[[789,7]]}}}],["0.015925392",{"_index":5293,"t":{"4925":{"position":[[1272,11]]}}}],["0.016",{"_index":2984,"t":{"3674":{"position":[[789,7]]}}}],["0.017712333333333333",{"_index":5398,"t":{"4967":{"position":[[1599,21]]}}}],["0.025",{"_index":5285,"t":{"4925":{"position":[[1146,8],[1432,8]]}}}],["0.05",{"_index":5287,"t":{"4925":{"position":[[1178,7],[1464,7]]}}}],["0.075",{"_index":5283,"t":{"4925":{"position":[[1111,8],[1397,8]]}}}],["0.08",{"_index":3429,"t":{"3866":{"position":[[1266,6]]},"3902":{"position":[[1266,6]]},"4575":{"position":[[1250,6]]},"4595":{"position":[[1250,6]]}}}],["0.1",{"_index":2864,"t":{"3616":{"position":[[1708,3]]},"4859":{"position":[[383,4]]},"4925":{"position":[[1158,6],[1444,6]]}}}],["0.23",{"_index":3432,"t":{"3866":{"position":[[1494,6]]},"3902":{"position":[[1494,6]]},"4575":{"position":[[1478,6]]},"4595":{"position":[[1478,6]]}}}],["0.25",{"_index":5289,"t":{"4925":{"position":[[1200,7],[1486,7]]}}}],["0.41",{"_index":3434,"t":{"3866":{"position":[[1722,6]]},"3902":{"position":[[1722,6]]},"4575":{"position":[[1706,6]]},"4595":{"position":[[1706,6]]}}}],["0.44.0/ibm",{"_index":3594,"t":{"3968":{"position":[[984,10]]}}}],["0.5",{"_index":5290,"t":{"4925":{"position":[[1211,6],[1497,6]]}}}],["0.5.1",{"_index":3069,"t":{"3724":{"position":[[537,7]]},"3726":{"position":[[403,7]]}}}],["0.61",{"_index":3437,"t":{"3866":{"position":[[1951,6]]},"3902":{"position":[[1951,6]]},"4575":{"position":[[1935,6]]},"4595":{"position":[[1935,6]]}}}],["0.6517375666666667",{"_index":5401,"t":{"4967":{"position":[[1652,19]]}}}],["0.6534561",{"_index":5400,"t":{"4967":{"position":[[1641,10]]}}}],["0.6666666666666666",{"_index":5403,"t":{"4967":{"position":[[1721,19]]}}}],["0.7.0",{"_index":2208,"t":{"3329":{"position":[[67,7]]}}}],["0.7347769666666667",{"_index":5402,"t":{"4967":{"position":[[1672,18]]}}}],["0.75",{"_index":3440,"t":{"3866":{"position":[[2180,6]]},"3902":{"position":[[2180,6]]},"4575":{"position":[[2164,6]]},"4595":{"position":[[2164,6]]},"4925":{"position":[[1123,7],[1409,7]]}}}],["0.8",{"_index":4862,"t":{"4715":{"position":[[468,4]]}}}],["0.8.20",{"_index":1242,"t":{"2848":{"position":[[351,9]]}}}],["0.8.4",{"_index":1613,"t":{"3018":{"position":[[226,7]]}}}],["0.9458865666666667",{"_index":5399,"t":{"4967":{"position":[[1621,19]]}}}],["00",{"_index":4455,"t":{"4502":{"position":[[602,2],[764,2]]}}}],["0000000000000000000000000000000000000000000000000000000000000000",{"_index":1259,"t":{"2852":{"position":[[13570,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000001",{"_index":1000,"t":{"2782":{"position":[[897,67],[1033,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000002",{"_index":1260,"t":{"2852":{"position":[[13638,67],[14590,66]]}}}],["0000000000000000000000000000000000000000000000000000000000000003",{"_index":1273,"t":{"2852":{"position":[[14522,67]]}}}],["000000000000000000000000000000000000000000000000000000000000002f",{"_index":2093,"t":{"3250":{"position":[[2593,67]]},"3254":{"position":[[1548,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000101",{"_index":1266,"t":{"2852":{"position":[[14046,67]]}}}],["0000000000000000000000000000000000000000000000000000000000010101",{"_index":1268,"t":{"2852":{"position":[[14182,67]]}}}],["000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57",{"_index":1272,"t":{"2852":{"position":[[14454,67]]}}}],["00000000000000000000000065463bf6268e5cc409b6501ec846487b935a1446",{"_index":1264,"t":{"2852":{"position":[[13910,67]]}}}],["0000000000000000000000009a6d82ef3912d5ab60473124bccd2f2a640769d7",{"_index":1262,"t":{"2852":{"position":[[13774,67]]}}}],["000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1270,"t":{"2852":{"position":[[14318,67]]}}}],["0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059",{"_index":2569,"t":{"3467":{"position":[[1201,91]]}}}],["00000002",{"_index":4456,"t":{"4502":{"position":[[605,8],[767,8]]}}}],["0002",{"_index":4453,"t":{"4502":{"position":[[590,4],[752,4]]}}}],["0007",{"_index":4452,"t":{"4502":{"position":[[585,4],[747,4]]}}}],["001",{"_index":5081,"t":{"4859":{"position":[[374,5]]}}}],["01",{"_index":3675,"t":{"4029":{"position":[[1006,2],[1171,2]]}}}],["010008",{"_index":4450,"t":{"4502":{"position":[[571,6],[733,6]]}}}],["02",{"_index":3407,"t":{"3866":{"position":[[136,2],[288,2],[430,2],[572,2],[716,2],[1096,2],[1324,2],[1552,2],[1781,2],[2010,2],[2239,2]]},"3902":{"position":[[136,2],[288,2],[430,2],[572,2],[716,2],[1096,2],[1324,2],[1552,2],[1781,2],[2010,2],[2239,2]]},"4029":{"position":[[1051,2],[1215,2]]},"4062":{"position":[[1340,2],[1343,2],[1454,2],[1457,2],[1564,2],[1567,2],[1677,2],[1680,2],[1806,2],[1809,2],[1955,2],[1958,2],[2076,2],[2079,2],[2157,2],[2160,2],[2264,2],[2267,2],[2405,2],[2408,2],[2544,2],[2547,2],[2624,2],[2627,2],[2740,2],[2743,2],[2903,2],[2906,2]]},"4575":{"position":[[120,2],[272,2],[414,2],[556,2],[700,2],[1080,2],[1308,2],[1536,2],[1765,2],[1994,2],[2223,2]]},"4595":{"position":[[120,2],[272,2],[414,2],[556,2],[700,2],[1080,2],[1308,2],[1536,2],[1765,2],[1994,2],[2223,2]]}}}],["020002",{"_index":4451,"t":{"4502":{"position":[[578,6],[740,6]]}}}],["02010002",{"_index":4457,"t":{"4502":{"position":[[614,8],[776,8]]}}}],["03",{"_index":3446,"t":{"3866":{"position":[[2431,2],[2554,2],[2678,2],[2801,2],[2924,2]]},"3902":{"position":[[2435,2],[2558,2],[2682,2],[2805,2],[2928,2]]},"4502":{"position":[[642,2],[804,2]]},"4575":{"position":[[2419,2],[2542,2],[2666,2],[2789,2],[2912,2]]},"4595":{"position":[[2419,2],[2542,2],[2666,2],[2789,2],[2912,2]]},"5105":{"position":[[546,2],[708,2]]}}}],["030000",{"_index":4454,"t":{"4502":{"position":[[595,6],[757,6]]}}}],["03t04:43:49,555\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"defaultsynchronizer\",\"message\":\"start",{"_index":3408,"t":{"3866":{"position":[[139,97]]},"3902":{"position":[[139,97]]},"4575":{"position":[[123,97]]},"4595":{"position":[[123,97]]}}}],["03t04:43:49,556\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"fastsyncdownloader\",\"message\":\"start",{"_index":3522,"t":{"3902":{"position":[[291,96]]},"4575":{"position":[[275,96]]},"4595":{"position":[[275,96]]}}}],["03t04:43:49,556\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"snapsyncdownloader\",\"message\":\"start",{"_index":3410,"t":{"3866":{"position":[[291,96]]}}}],["03t04:43:49,559\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"runner\",\"message\":\"ethereum",{"_index":3412,"t":{"3866":{"position":[[433,84]]},"3902":{"position":[[433,84]]},"4575":{"position":[[417,84]]},"4595":{"position":[[417,84]]}}}],["03t04:43:53,106\",\"level\":\"info\",\"thread\":\"tim",{"_index":3415,"t":{"3866":{"position":[[575,47]]},"3902":{"position":[[575,47]]},"4575":{"position":[[559,47]]},"4595":{"position":[[559,47]]}}}],["03t04:45:04,803\",\"level\":\"info\",\"thread\":\"nioeventloopgroup",{"_index":3419,"t":{"3866":{"position":[[719,59]]},"3902":{"position":[[719,59]]},"4575":{"position":[[703,59]]},"4595":{"position":[[703,59]]}}}],["03t04:46:04,834\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3427,"t":{"3866":{"position":[[1099,54]]},"3902":{"position":[[1099,54]]},"4575":{"position":[[1083,54]]},"4595":{"position":[[1083,54]]}}}],["03t04:48:01,840\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3431,"t":{"3866":{"position":[[1327,54]]},"3902":{"position":[[1327,54]]},"4575":{"position":[[1311,54]]},"4595":{"position":[[1311,54]]}}}],["03t04:49:09,931\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3433,"t":{"3866":{"position":[[1555,54]]},"3902":{"position":[[1555,54]]},"4575":{"position":[[1539,54]]},"4595":{"position":[[1539,54]]}}}],["03t04:50:12,466\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3436,"t":{"3866":{"position":[[1784,54]]},"3902":{"position":[[1784,54]]},"4575":{"position":[[1768,54]]},"4595":{"position":[[1768,54]]}}}],["03t04:51:20,977\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3439,"t":{"3866":{"position":[[2013,54]]},"3902":{"position":[[2013,54]]},"4575":{"position":[[1997,54]]},"4595":{"position":[[1997,54]]}}}],["03t04:51:28,985\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3441,"t":{"3866":{"position":[[2242,54]]},"3902":{"position":[[2242,54]]},"4575":{"position":[[2226,54]]},"4595":{"position":[[2226,54]]}}}],["04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3",{"_index":3098,"t":{"3726":{"position":[[884,64]]}}}],["04:00",{"_index":3822,"t":{"4120":{"position":[[443,5]]}}}],["05",{"_index":2142,"t":{"3287":{"position":[[100,2]]},"3674":{"position":[[596,2],[811,2],[1013,2],[1215,2],[1417,2],[1837,2],[2189,2]]},"4358":{"position":[[60,2],[283,2],[567,2],[782,2]]}}}],["05:45:41.162+00:00",{"_index":3743,"t":{"4062":{"position":[[1346,18]]}}}],["05:45:43.433+00:00",{"_index":3745,"t":{"4062":{"position":[[1460,18]]}}}],["05:45:43.837+00:00",{"_index":3747,"t":{"4062":{"position":[[1570,18]]}}}],["05:46:09.863+00:00",{"_index":3748,"t":{"4062":{"position":[[1683,18]]}}}],["05:46:09.918+00:00",{"_index":3750,"t":{"4062":{"position":[[1812,18]]}}}],["05:46:09.926+00:00",{"_index":3752,"t":{"4062":{"position":[[1961,18]]}}}],["05:46:10.100+00:00",{"_index":3755,"t":{"4062":{"position":[[2082,18]]}}}],["05:46:10.155+00:00",{"_index":3756,"t":{"4062":{"position":[[2163,18]]}}}],["05:46:10.222+00:00",{"_index":3757,"t":{"4062":{"position":[[2270,18]]}}}],["05:46:10.336+00:00",{"_index":3760,"t":{"4062":{"position":[[2411,18]]}}}],["05:46:10.441+00:00",{"_index":3763,"t":{"4062":{"position":[[2550,18]]}}}],["05:46:10.446+00:00",{"_index":3764,"t":{"4062":{"position":[[2630,18]]}}}],["05:46:11.023+00:00",{"_index":3765,"t":{"4062":{"position":[[2746,18],[2909,18]]}}}],["06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240",{"_index":3099,"t":{"3726":{"position":[[961,64]]}}}],["07/schema",{"_index":1872,"t":{"3153":{"position":[[376,12]]}}}],["07:16:18.360+10:00",{"_index":2201,"t":{"3319":{"position":[[1910,18]]}}}],["07:22:17.883+10:00",{"_index":2177,"t":{"3319":{"position":[[602,18]]}}}],["07:22:19.057+10:00",{"_index":2185,"t":{"3319":{"position":[[817,18]]}}}],["07:22:21.044+10:00",{"_index":2191,"t":{"3319":{"position":[[1037,18]]}}}],["07:22:23.049+10:00",{"_index":2194,"t":{"3319":{"position":[[1257,18]]}}}],["07:22:25.060+10:00",{"_index":2197,"t":{"3319":{"position":[[1477,18]]}}}],["07:33:11.458+10:00",{"_index":2206,"t":{"3319":{"position":[[2262,18]]}}}],["08",{"_index":4199,"t":{"4358":{"position":[[63,2],[286,2],[570,2],[785,2]]}}}],["08:43:16.592+10:00",{"_index":2994,"t":{"3674":{"position":[[1843,18],[2195,18]]}}}],["08:47:00.221+10:00",{"_index":2982,"t":{"3674":{"position":[[602,18]]}}}],["08:47:02.071+10:00",{"_index":2985,"t":{"3674":{"position":[[817,18]]}}}],["08:47:04.051+10:00",{"_index":2988,"t":{"3674":{"position":[[1019,18]]}}}],["08:47:06.058+10:00",{"_index":2990,"t":{"3674":{"position":[[1221,18]]}}}],["08:47:08.058+10:00",{"_index":2992,"t":{"3674":{"position":[[1423,18]]}}}],["0905d1b2/osx",{"_index":5160,"t":{"4903":{"position":[[1212,12]]}}}],["09:49:00.881+10:00",{"_index":2144,"t":{"3287":{"position":[[106,18]]}}}],["0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",{"_index":2572,"t":{"3467":{"position":[[1480,89]]}}}],["0a8156e7ee392d885d10eaa86afd0e323afdcd95",{"_index":5575,"t":{"4995":{"position":[[1381,43],[1597,43]]}}}],["0d2294a5/osx",{"_index":5149,"t":{"4901":{"position":[[1250,12]]}}}],["0d9217f0a1f7c602fd67052d20171ff73b156d1b87ea258cb6a5d94f71298158",{"_index":1271,"t":{"2852":{"position":[[14386,67]]}}}],["0m",{"_index":3386,"t":{"3843":{"position":[[834,5],[861,5],[889,5]]}}}],["0x",{"_index":1036,"t":{"2786":{"position":[[1118,2]]},"2852":{"position":[[15181,2]]},"2886":{"position":[[36,2]]},"3022":{"position":[[2146,5]]},"3224":{"position":[[2075,2]]},"3242":{"position":[[2055,4]]},"3250":{"position":[[2897,4],[3368,4]]},"3254":{"position":[[1748,4]]},"3439":{"position":[[1668,5]]},"3455":{"position":[[1282,5]]},"3457":{"position":[[1314,5],[1803,5]]},"3459":{"position":[[1416,5],[1905,5]]},"3471":{"position":[[1478,5],[1798,5],[2019,4],[2765,5],[2985,4]]},"3628":{"position":[[2860,2],[3651,2]]},"3639":{"position":[[1161,2],[2259,2]]},"3722":{"position":[[518,5]]},"3726":{"position":[[1642,5],[2130,5]]},"3806":{"position":[[255,3]]},"4343":{"position":[[1258,5]]},"4345":{"position":[[1186,5]]},"4375":{"position":[[1977,5],[3112,5]]},"4377":{"position":[[1579,5]]},"4403":{"position":[[314,2]]},"4533":{"position":[[1516,5]]},"4535":{"position":[[1308,5],[2571,5]]},"4623":{"position":[[425,2]]},"4655":{"position":[[360,3]]},"4725":{"position":[[455,3]]},"4903":{"position":[[643,2]]},"4957":{"position":[[1590,4],[2103,5]]},"4977":{"position":[[1581,5]]},"5003":{"position":[[966,5]]},"5083":{"position":[[1369,4]]},"5085":{"position":[[1983,5],[2522,4]]},"5087":{"position":[[1608,5],[1769,5],[1894,4],[1995,5],[2156,5],[2281,4]]},"5089":{"position":[[1454,4]]},"5093":{"position":[[1087,4],[1237,4]]},"5097":{"position":[[1442,5],[1762,5],[1983,4],[2729,5],[2949,4]]},"5101":{"position":[[1987,5]]}}}],["0x0",{"_index":817,"t":{"2725":{"position":[[577,6]]},"2786":{"position":[[395,6],[2655,3]]},"2852":{"position":[[496,6],[1434,6],[1452,6],[1766,6],[14693,6],[14711,6]]},"2882":{"position":[[756,6],[813,6],[831,6]]},"3016":{"position":[[330,6],[862,6],[1230,6],[1762,6]]},"3022":{"position":[[1524,6],[2213,5]]},"3056":{"position":[[307,6]]},"3133":{"position":[[997,3]]},"3224":{"position":[[911,6]]},"3242":{"position":[[1650,6]]},"3244":{"position":[[1153,6]]},"3250":{"position":[[3007,6]]},"3303":{"position":[[696,6]]},"3455":{"position":[[969,6],[1210,6]]},"3457":{"position":[[1001,6],[1242,6],[1490,6],[1731,6]]},"3459":{"position":[[1103,6],[1344,6],[1592,6],[1833,6]]},"3463":{"position":[[777,6],[2168,6],[2196,6]]},"3467":{"position":[[1103,6]]},"3471":{"position":[[1290,5],[1865,5],[2279,6],[2832,5]]},"3576":{"position":[[704,6]]},"3598":{"position":[[2262,5]]},"3658":{"position":[[687,6]]},"3722":{"position":[[206,6],[446,6]]},"3724":{"position":[[1026,6],[1267,6]]},"3726":{"position":[[1330,6],[1570,6],[1818,6],[2058,6]]},"3784":{"position":[[858,6]]},"3946":{"position":[[577,6]]},"4263":{"position":[[359,6],[600,6]]},"4265":{"position":[[252,6],[493,6],[805,6],[1046,6]]},"4275":{"position":[[566,5]]},"4343":{"position":[[1218,6]]},"4345":{"position":[[1146,6]]},"4367":{"position":[[519,6]]},"4375":{"position":[[1474,6],[1663,6],[1905,6],[2799,6],[3040,6]]},"4381":{"position":[[576,6]]},"4411":{"position":[[868,3]]},"4533":{"position":[[1476,6]]},"4535":{"position":[[1268,6],[2531,6]]},"4541":{"position":[[619,5],[729,3]]},"4895":{"position":[[1163,7],[1248,6],[1294,6]]},"4909":{"position":[[454,3],[1269,6],[3277,6]]},"4915":{"position":[[2794,6],[2833,6],[2849,6],[7358,6],[7397,6],[7413,6]]},"4977":{"position":[[1721,6],[1823,6],[2561,6],[2576,5],[5202,5]]},"4985":{"position":[[1461,6],[1702,6],[1944,6],[2185,6]]},"4987":{"position":[[797,6],[1037,6],[1279,6],[1519,6]]},"4989":{"position":[[1167,6],[1407,6],[1649,6],[1889,6]]},"4995":{"position":[[1972,6],[2269,6]]},"4997":{"position":[[858,6]]},"4999":{"position":[[1279,6]]},"5001":{"position":[[1475,6]]},"5003":{"position":[[1060,6]]},"5007":{"position":[[1790,5]]},"5009":{"position":[[639,5]]},"5011":{"position":[[728,7]]},"5013":{"position":[[673,3]]},"5039":{"position":[[1570,6]]},"5083":{"position":[[1216,5]]},"5085":{"position":[[1612,6],[1898,5],[2467,5]]},"5087":{"position":[[1876,6],[2263,6]]},"5089":{"position":[[1301,5],[1878,5]]},"5091":{"position":[[833,7],[1081,5]]},"5093":{"position":[[1220,6]]},"5097":{"position":[[1254,5],[1829,5],[2243,6],[2796,5]]},"5101":{"position":[[2070,6]]}}}],["0x0\"],\"id\":1",{"_index":5631,"t":{"5009":{"position":[[454,15]]},"5011":{"position":[[600,15]]}}}],["0x00",{"_index":2098,"t":{"3250":{"position":[[2883,7]]},"4411":{"position":[[1341,4]]}}}],["0x0000000000000000",{"_index":1111,"t":{"2794":{"position":[[421,18]]},"2860":{"position":[[421,18]]},"2890":{"position":[[421,18]]},"4373":{"position":[[1102,21]]},"4915":{"position":[[693,21],[5257,21]]},"4973":{"position":[[3328,21]]},"4975":{"position":[[3410,21]]},"5009":{"position":[[3824,21]]}}}],["0x0000000000000000000000000000000000000000",{"_index":1249,"t":{"2852":{"position":[[937,45],[2035,45]]},"2882":{"position":[[314,45]]},"3224":{"position":[[501,45]]},"3303":{"position":[[868,45]]},"3395":{"position":[[1039,43]]},"3413":{"position":[[1052,43]]},"3471":{"position":[[2303,44]]},"3481":{"position":[[1052,43]]},"3576":{"position":[[876,45]]},"3614":{"position":[[1485,44]]},"3658":{"position":[[859,45]]},"3784":{"position":[[1185,45]]},"4373":{"position":[[2007,45]]},"4541":{"position":[[411,44]]},"4911":{"position":[[995,45],[1060,45],[1125,45],[1190,45],[1255,44]]},"4915":{"position":[[1598,45],[6162,45]]},"5083":{"position":[[2016,45]]},"5097":{"position":[[2267,44]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000",{"_index":1110,"t":{"2794":{"position":[[323,66]]},"2852":{"position":[[1473,68],[14732,68]]},"2860":{"position":[[323,66]]},"2882":{"position":[[677,69],[852,68]]},"2890":{"position":[[323,66]]},"3224":{"position":[[832,69]]},"4343":{"position":[[1090,69]]},"4345":{"position":[[1018,69]]},"4525":{"position":[[602,69],[874,69],[1082,69]]},"4533":{"position":[[1348,69]]},"4535":{"position":[[1140,69],[2403,69]]},"4915":{"position":[[530,69],[5094,69]]},"4937":{"position":[[977,69]]},"4997":{"position":[[927,68],[1322,68]]},"5017":{"position":[[793,69]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000\",\"suggestedfeerecipi",{"_index":4158,"t":{"4341":{"position":[[477,93]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000\"},{\"timestamp",{"_index":4156,"t":{"4341":{"position":[[373,83]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":1635,"t":{"3022":{"position":[[828,517]]},"3467":{"position":[[1817,516]]},"4343":{"position":[[558,517]]},"4345":{"position":[[486,517]]},"4533":{"position":[[816,517]]},"4535":{"position":[[608,517],[1871,517]]},"4915":{"position":[[812,517],[5376,517]]},"4973":{"position":[[3380,517]]},"4975":{"position":[[3462,517]]},"4977":{"position":[[2887,517]]},"5007":{"position":[[1094,517],[2491,516]]},"5009":{"position":[[3216,517]]}}}],["0x000000000000000000000000000000000000000000000000000000000000000001a54556254bfa3db2daa7673435ec63649925c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":1297,"t":{"2882":{"position":[[394,239]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701",{"_index":5231,"t":{"4915":{"position":[[6268,199]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01",{"_index":5213,"t":{"4915":{"position":[[1704,199]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000@:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":1973,"t":{"3224":{"position":[[656,140]]}}}],["addresses\":[\"stzpbqhcofd9zafdnc00e/n2ofv9p4/ztbbeevtxj3e=\",\"quhb1pqpgn1w8zszsyiifncealvy/m/rausyq5wvmre=\"],\"name\":\"group",{"_index":2499,"t":{"3441":{"position":[[501,123],[761,123]]}}}],["addressmap",{"_index":5192,"t":{"4911":{"position":[[469,11],[960,13]]}}}],["addto",{"_index":1710,"t":{"3074":{"position":[[65,5]]}}}],["adequ",{"_index":1764,"t":{"3107":{"position":[[482,8]]},"3182":{"position":[[692,8]]}}}],["adjust",{"_index":1053,"t":{"2786":{"position":[[2503,6]]},"2852":{"position":[[16884,6]]},"3831":{"position":[[486,8]]},"4322":{"position":[[287,6]]},"4545":{"position":[[478,6]]},"4553":{"position":[[1435,8]]},"4627":{"position":[[448,6]]},"5089":{"position":[[134,6]]}}}],["admin",{"_index":192,"t":{"2582":{"position":[[90,5]]},"2586":{"position":[[134,7]]},"2991":{"position":[[342,5]]},"3385":{"position":[[168,5]]},"3586":{"position":[[738,6]]},"3612":{"position":[[124,5]]},"4002":{"position":[[828,5]]},"4326":{"position":[[74,6]]},"4769":{"position":[[371,6]]},"4817":{"position":[[360,6]]},"4889":{"position":[[4,5],[89,5],[162,5]]}}}],["admin:p",{"_index":4093,"t":{"4299":{"position":[[293,16]]}}}],["admin_addp",{"_index":1673,"t":{"3028":{"position":[[964,14],[1048,13]]},"3596":{"position":[[8,13]]},"3806":{"position":[[77,13]]},"4108":{"position":[[395,13]]},"4122":{"position":[[217,15]]},"4143":{"position":[[434,13],[615,13]]}}}],["admin_changeloglevel",{"_index":3875,"t":{"4161":{"position":[[313,20]]},"4893":{"position":[[1284,23]]}}}],["admin_generatelogbloomcach",{"_index":3059,"t":{"3720":{"position":[[609,27]]},"4425":{"position":[[671,27]]},"4895":{"position":[[157,27],[1122,30]]}}}],["admin_logsremovecach",{"_index":5143,"t":{"4897":{"position":[[1032,24]]}}}],["admin_logsrepaircach",{"_index":5145,"t":{"4899":{"position":[[470,24]]}}}],["admin_nodeinfo",{"_index":3791,"t":{"4096":{"position":[[204,14]]}}}],["admin_p",{"_index":3815,"t":{"4118":{"position":[[73,12],[129,11],[292,11]]},"4143":{"position":[[857,13]]}}}],["admin_removep",{"_index":3817,"t":{"4118":{"position":[[308,16]]},"4143":{"position":[[452,16],[633,16]]}}}],["administ",{"_index":191,"t":{"2582":{"position":[[56,10]]}}}],["administr",{"_index":5129,"t":{"4889":{"position":[[30,14]]}}}],["advanc",{"_index":2366,"t":{"3383":{"position":[[1336,8]]},"3385":{"position":[[1422,8]]},"3632":{"position":[[172,8]]},"4159":{"position":[[117,8]]},"4543":{"position":[[767,7]]}}}],["advantag",{"_index":1741,"t":{"3089":{"position":[[345,12]]}}}],["advers",{"_index":3814,"t":{"4116":{"position":[[259,9]]}}}],["adversari",{"_index":391,"t":{"2616":{"position":[[505,11]]}}}],["advertis",{"_index":885,"t":{"2747":{"position":[[352,10]]},"3806":{"position":[[1706,10]]},"4096":{"position":[[120,10]]},"4100":{"position":[[643,10]]},"4104":{"position":[[107,9],[194,10],[295,10]]},"4106":{"position":[[71,10],[249,10],[332,10]]},"4110":{"position":[[819,10]]},"4293":{"position":[[995,10]]},"4571":{"position":[[292,10],[528,10]]},"4591":{"position":[[328,10],[574,10],[810,10]]},"4593":{"position":[[330,10],[862,10]]},"4745":{"position":[[197,10]]},"4901":{"position":[[667,11]]}}}],["ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",{"_index":1980,"t":{"3224":{"position":[[1568,67]]},"3264":{"position":[[1024,67]]},"3303":{"position":[[1537,67]]},"3576":{"position":[[1545,67]]},"3658":{"position":[[1528,67]]}}}],["aedead2c33b41c31b4afd2246c6bf5131c209d4b0ca6c2247778ac7be7443a00",{"_index":1265,"t":{"2852":{"position":[[13978,67]]}}}],["affect",{"_index":149,"t":{"2575":{"position":[[128,7]]},"2806":{"position":[[214,6]]},"3710":{"position":[[665,6]]},"4116":{"position":[[269,6]]},"4209":{"position":[[63,6]]},"4217":{"position":[[17,6]]},"4232":{"position":[[218,7]]},"5073":{"position":[[118,7]]}}}],["affin",{"_index":4647,"t":{"4607":{"position":[[2578,9],[2944,9],[3963,9]]}}}],["again",{"_index":578,"t":{"2666":{"position":[[313,6]]},"3103":{"position":[[643,6]]},"3495":{"position":[[279,6]]},"3540":{"position":[[782,5]]},"3736":{"position":[[1989,6]]},"3952":{"position":[[321,5]]},"4062":{"position":[[645,5]]},"4220":{"position":[[708,6]]},"4347":{"position":[[56,6]]}}}],["against",{"_index":872,"t":{"2741":{"position":[[116,7]]},"3044":{"position":[[843,7],[1112,7]]},"3569":{"position":[[234,7]]},"3714":{"position":[[354,7]]},"3918":{"position":[[2382,7],[2529,7]]},"4409":{"position":[[1741,7]]},"4421":{"position":[[490,7]]},"4437":{"position":[[377,7]]},"4496":{"position":[[102,8],[162,7]]},"4887":{"position":[[371,7]]},"4957":{"position":[[700,7]]}}}],["agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005",{"_index":3728,"t":{"4056":{"position":[[403,65]]}}}],["aggreg",{"_index":1422,"t":{"2964":{"position":[[181,10]]},"2978":{"position":[[171,9]]}}}],["ago",{"_index":1516,"t":{"2986":{"position":[[510,3],[616,3],[784,3]]}}}],["agre",{"_index":132,"t":{"2567":{"position":[[346,5]]},"3004":{"position":[[463,5]]},"3006":{"position":[[191,5],[476,6]]}}}],["agreement",{"_index":3248,"t":{"3794":{"position":[[171,9]]},"4849":{"position":[[268,10]]}}}],["ahead",{"_index":2286,"t":{"3353":{"position":[[577,5]]},"3748":{"position":[[1062,5]]}}}],["aid",{"_index":2889,"t":{"3626":{"position":[[29,3]]}}}],["ak",{"_index":2335,"t":{"3372":{"position":[[145,3]]},"3385":{"position":[[25,5],[243,4],[710,4],[727,3],[1213,3],[1834,3],[1866,3],[2071,3],[2652,3],[2691,3]]},"4602":{"position":[[105,5]]},"4609":{"position":[[1356,3]]}}}],["aks_cluster_nam",{"_index":2433,"t":{"3385":{"position":[[3315,17],[3483,18]]}}}],["aks_managed_ident",{"_index":2434,"t":{"3385":{"position":[[3337,20],[3502,22]]}}}],["aks_namespac",{"_index":2431,"t":{"3385":{"position":[[3269,14],[3525,15]]}}}],["aks_resource_group",{"_index":2432,"t":{"3385":{"position":[[3295,19],[3462,20]]}}}],["alert",{"_index":1958,"t":{"3208":{"position":[[375,8]]},"3366":{"position":[[106,7],[345,6]]},"3530":{"position":[[1071,8],[1260,6],[1284,5]]},"3612":{"position":[[193,6]]},"4147":{"position":[[40,8],[381,5]]},"4149":{"position":[[304,5]]},"4151":{"position":[[1913,5]]}}}],["alertmanag",{"_index":2681,"t":{"3530":{"position":[[1237,12]]}}}],["algorithm",{"_index":623,"t":{"2674":{"position":[[109,10]]},"3499":{"position":[[189,10],[365,9]]},"3614":{"position":[[1304,10]]},"3794":{"position":[[123,10]]},"4177":{"position":[[355,9]]},"4220":{"position":[[1140,10]]},"4293":{"position":[[78,9],[152,9],[326,10],[388,9],[444,9]]},"4295":{"position":[[247,11]]},"4777":{"position":[[261,9]]},"4825":{"position":[[253,9]]}}}],["algorithm=\"es256",{"_index":4960,"t":{"4777":{"position":[[231,17]]},"4825":{"position":[[223,17]]}}}],["algorithm=[,:[,[,metr",{"_index":4827,"t":{"4695":{"position":[[83,18]]}}}],["cater",{"_index":2683,"t":{"3532":{"position":[[67,5]]}}}],["caus",{"_index":556,"t":{"2656":{"position":[[975,5]]},"2672":{"position":[[222,5]]},"2729":{"position":[[452,5]]},"2778":{"position":[[2698,7]]},"2808":{"position":[[386,7]]},"2870":{"position":[[404,7]]},"2902":{"position":[[382,7]]},"2908":{"position":[[441,5]]},"3546":{"position":[[138,6]]},"3548":{"position":[[130,6]]},"3550":{"position":[[138,6]]},"3720":{"position":[[19,6]]},"3821":{"position":[[287,5]]},"3831":{"position":[[150,6]]},"3918":{"position":[[1532,6]]},"4116":{"position":[[355,5]]},"4220":{"position":[[40,6]]},"4309":{"position":[[249,7]]},"4369":{"position":[[51,5]]},"4401":{"position":[[316,7]]},"4553":{"position":[[653,6]]},"4811":{"position":[[414,5]]},"4859":{"position":[[899,5]]},"4989":{"position":[[316,5]]}}}],["caution",{"_index":209,"t":{"2584":{"position":[[0,7]]},"2592":{"position":[[93,7]]},"2606":{"position":[[0,7]]},"2616":{"position":[[531,7]]},"2624":{"position":[[181,7]]},"2626":{"position":[[251,7]]},"2644":{"position":[[356,7]]},"2672":{"position":[[150,7]]},"2684":{"position":[[18,7]]},"2705":{"position":[[22,7]]},"2727":{"position":[[616,7]]},"2778":{"position":[[323,7],[2559,7]]},"2786":{"position":[[1439,7]]},"2808":{"position":[[246,7]]},"2816":{"position":[[0,7]]},"2850":{"position":[[535,7]]},"2852":{"position":[[15824,7]]},"2870":{"position":[[264,7]]},"2902":{"position":[[242,7]]},"2930":{"position":[[226,7]]},"3000":{"position":[[852,7]]},"3006":{"position":[[370,7]]},"3020":{"position":[[140,7]]},"3103":{"position":[[650,7]]},"3157":{"position":[[583,7]]},"3453":{"position":[[100,9]]},"3637":{"position":[[0,7]]},"3730":{"position":[[134,7]]},"3808":{"position":[[0,7]]},"3880":{"position":[[18,7]]},"3918":{"position":[[0,7]]},"3976":{"position":[[281,7]]},"4060":{"position":[[324,7]]},"4203":{"position":[[980,7]]},"4244":{"position":[[125,7]]},"4246":{"position":[[206,7]]},"4250":{"position":[[136,7]]},"4252":{"position":[[716,7]]},"4281":{"position":[[523,7]]},"4291":{"position":[[95,7]]},"4309":{"position":[[99,7],[463,7]]},"4326":{"position":[[231,7]]},"4336":{"position":[[609,7]]},"4338":{"position":[[116,7]]},"4431":{"position":[[42,7]]},"4500":{"position":[[0,7]]},"4541":{"position":[[805,7]]},"4543":{"position":[[714,7]]},"4613":{"position":[[583,7]]},"4639":{"position":[[557,7]]},"4667":{"position":[[275,7]]},"4765":{"position":[[357,7]]},"4785":{"position":[[295,7]]},"4811":{"position":[[289,7]]},"4859":{"position":[[449,7]]},"4867":{"position":[[245,7]]},"4877":{"position":[[279,7]]},"4885":{"position":[[88,7]]},"4887":{"position":[[0,7]]},"4891":{"position":[[20,7]]},"4989":{"position":[[191,7]]}}}],["caveat",{"_index":3960,"t":{"4209":{"position":[[497,9]]}}}],["cb9f0fcc6f16386df70da3c5",{"_index":3424,"t":{"3866":{"position":[[935,26]]},"3902":{"position":[[935,26]]},"4575":{"position":[[919,26]]},"4595":{"position":[[919,26]]}}}],["cd",{"_index":1508,"t":{"2986":{"position":[[118,2]]},"3072":{"position":[[151,2]]},"3366":{"position":[[404,2],[888,2]]},"3528":{"position":[[166,2]]},"3606":{"position":[[226,2]]},"3614":{"position":[[2437,2]]},"3639":{"position":[[810,2]]},"3738":{"position":[[551,2]]},"3754":{"position":[[191,2],[1854,2]]},"3762":{"position":[[272,2]]},"3772":{"position":[[83,2]]}}}],["cd636rzlcqvspoxt/exbkwqfbo7kpazo0qlwhernsl8",{"_index":2574,"t":{"3467":{"position":[[1756,47]]}}}],["cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb",{"_index":1001,"t":{"2782":{"position":[[965,67]]}}}],["certain",{"_index":2616,"t":{"3493":{"position":[[126,7]]},"4328":{"position":[[1329,7]]},"4353":{"position":[[673,7]]},"4512":{"position":[[209,7]]},"4669":{"position":[[497,7]]}}}],["certif",{"_index":322,"t":{"2602":{"position":[[190,12],[567,12]]},"2604":{"position":[[47,12]]},"2606":{"position":[[106,12],[280,11]]},"2755":{"position":[[347,12]]},"2757":{"position":[[115,11],[198,12],[589,11],[1161,11],[1261,11],[1360,11]]},"2760":{"position":[[208,11]]},"2764":{"position":[[67,11],[123,11],[228,11]]},"2766":{"position":[[239,11]]},"2772":{"position":[[246,12]]},"2824":{"position":[[55,12],[82,12],[306,12],[373,12]]},"2828":{"position":[[141,11]]},"2830":{"position":[[289,12]]},"2930":{"position":[[139,12]]},"2931":{"position":[[144,11],[205,12],[979,11]]},"2934":{"position":[[175,11]]},"2938":{"position":[[206,11]]},"2944":{"position":[[213,12]]},"2976":{"position":[[1017,11],[1136,11],[2008,11],[2127,11]]},"2998":{"position":[[890,11]]},"3192":{"position":[[311,11]]},"3196":{"position":[[352,11]]},"4025":{"position":[[43,12],[74,11]]},"4031":{"position":[[71,12]]},"4663":{"position":[[210,11],[237,11]]},"4795":{"position":[[266,12]]},"4803":{"position":[[344,11]]},"4807":{"position":[[359,12],[386,13]]}}}],["certifi",{"_index":3591,"t":{"3968":{"position":[[925,9],[1002,9],[1133,9]]}}}],["certificate'",{"_index":5001,"t":{"4807":{"position":[[417,13]]}}}],["chain",{"_index":90,"t":{"2563":{"position":[[264,5]]},"2567":{"position":[[484,5],[556,6]]},"2577":{"position":[[602,6]]},"2579":{"position":[[292,5]]},"2588":{"position":[[95,5]]},"2612":{"position":[[108,6],[212,5]]},"2622":{"position":[[700,5]]},"2689":{"position":[[81,6]]},"2697":{"position":[[241,5]]},"2725":{"position":[[150,5]]},"2729":{"position":[[250,5]]},"2753":{"position":[[564,6]]},"2780":{"position":[[872,5]]},"2784":{"position":[[393,6]]},"2786":{"position":[[1790,6],[1810,5],[1952,6],[2369,6],[2431,5]]},"2790":{"position":[[33,5]]},"2792":{"position":[[538,5],[711,5]]},"2850":{"position":[[328,6]]},"2852":{"position":[[16175,6],[16195,5],[16337,6],[16750,6],[16812,5]]},"2856":{"position":[[33,5]]},"2858":{"position":[[538,5],[711,5]]},"2908":{"position":[[260,5]]},"2952":{"position":[[321,7]]},"3068":{"position":[[628,5]]},"3123":{"position":[[588,5],[606,5],[651,5]]},"3208":{"position":[[357,5]]},"3224":{"position":[[1148,6],[1422,6],[1700,6]]},"3264":{"position":[[882,6],[1156,6]]},"3303":{"position":[[1117,6],[1391,6],[1669,6]]},"3319":{"position":[[894,6],[1114,6],[1334,6],[1554,6]]},"3364":{"position":[[315,5]]},"3405":{"position":[[763,6]]},"3485":{"position":[[71,5],[244,5],[606,5],[841,6]]},"3493":{"position":[[18,5]]},"3495":{"position":[[194,5]]},"3513":{"position":[[55,5]]},"3576":{"position":[[1125,6],[1399,6],[1677,6]]},"3614":{"position":[[1937,5]]},"3618":{"position":[[145,6]]},"3622":{"position":[[135,5]]},"3628":{"position":[[366,5]]},"3658":{"position":[[1108,6],[1382,6],[1660,6]]},"3714":{"position":[[59,5],[247,5],[291,5],[475,5],[536,5],[580,5],[677,5],[888,5],[919,5],[925,5]]},"3716":{"position":[[42,5]]},"3718":{"position":[[18,5],[177,5],[250,6],[309,5],[334,6],[436,5],[608,5],[675,5],[692,5]]},"3758":{"position":[[563,5]]},"3784":{"position":[[48,6],[89,5]]},"3786":{"position":[[658,5],[948,6],[1656,5],[1823,6],[1855,7],[1867,5]]},"3788":{"position":[[293,5]]},"3794":{"position":[[430,5],[555,6]]},"3839":{"position":[[213,6],[784,6]]},"3841":{"position":[[283,5]]},"3868":{"position":[[156,5]]},"3885":{"position":[[81,6]]},"3904":{"position":[[180,5]]},"3908":{"position":[[404,5]]},"3918":{"position":[[328,5],[1690,5]]},"3940":{"position":[[198,5]]},"3942":{"position":[[198,5]]},"3946":{"position":[[150,5]]},"3966":{"position":[[273,5]]},"3970":{"position":[[197,5]]},"3982":{"position":[[1319,5]]},"4014":{"position":[[110,5]]},"4072":{"position":[[73,5]]},"4086":{"position":[[95,5]]},"4110":{"position":[[1497,5],[1783,5]]},"4147":{"position":[[362,5],[433,5]]},"4213":{"position":[[288,7]]},"4215":{"position":[[371,7]]},"4358":{"position":[[144,6],[367,6]]},"4371":{"position":[[342,5]]},"4373":{"position":[[108,5],[200,6]]},"4375":{"position":[[852,5],[944,5]]},"4377":{"position":[[366,5],[458,6]]},"4381":{"position":[[108,5],[686,5]]},"4387":{"position":[[878,5]]},"4393":{"position":[[176,5]]},"4395":{"position":[[932,5]]},"4407":{"position":[[540,5]]},"4419":{"position":[[549,7]]},"4421":{"position":[[369,7],[443,5]]},"4492":{"position":[[311,5]]},"4512":{"position":[[126,6],[197,5]]},"4539":{"position":[[160,5]]},"4541":{"position":[[863,5]]},"4577":{"position":[[156,5]]},"4597":{"position":[[180,5]]},"4607":{"position":[[2105,5]]},"4609":{"position":[[1236,5]]},"4737":{"position":[[241,5],[562,5]]},"4739":{"position":[[261,5]]},"4761":{"position":[[193,5]]},"4811":{"position":[[378,5]]},"4927":{"position":[[91,5]]},"4931":{"position":[[35,5]]},"4955":{"position":[[67,5],[214,5]]},"4959":{"position":[[12,5],[65,5]]},"4989":{"position":[[280,5]]},"5039":{"position":[[136,6]]},"5075":{"position":[[97,5],[388,5],[475,5],[504,5],[537,5]]},"5083":{"position":[[235,7]]},"5085":{"position":[[199,7]]},"5087":{"position":[[221,7]]},"5089":{"position":[[364,7]]},"5091":{"position":[[230,7]]},"5093":{"position":[[241,7]]},"5095":{"position":[[178,7]]},"5097":{"position":[[268,7]]}}}],["chain=/l",{"_index":4130,"t":{"4324":{"position":[[240,23]]}}}],["endpoint:port>/readi",{"_index":4127,"t":{"4322":{"position":[[446,24]]}}}],["endpoint=http://localhost:8551",{"_index":4601,"t":{"4571":{"position":[[155,30]]},"4591":{"position":[[191,30],[437,30]]},"4593":{"position":[[193,30]]}}}],["energi",{"_index":3228,"t":{"3786":{"position":[[527,7]]}}}],["enforc",{"_index":126,"t":{"2567":{"position":[[217,8]]},"2571":{"position":[[30,7]]},"2575":{"position":[[474,8]]},"2577":{"position":[[339,7]]},"2582":{"position":[[486,9],[561,7]]}}}],["engin",{"_index":1562,"t":{"2996":{"position":[[422,6]]},"3139":{"position":[[696,7]]},"3389":{"position":[[62,7]]},"3407":{"position":[[62,7]]},"3475":{"position":[[58,7]]},"3732":{"position":[[238,6]]},"3790":{"position":[[211,6]]},"3858":{"position":[[239,6]]},"3862":{"position":[[240,6],[304,6],[327,6],[445,6],[537,6],[835,6],[866,6]]},"3894":{"position":[[239,6]]},"3898":{"position":[[272,6],[302,6],[325,6],[549,6],[579,6],[602,6],[719,6]]},"3986":{"position":[[203,6],[244,6]]},"4330":{"position":[[70,6]]},"4332":{"position":[[4,6],[109,6],[187,6],[219,6],[242,6],[286,6]]},"4334":{"position":[[24,6],[88,6],[187,6],[287,6]]},"4336":{"position":[[191,6],[401,6],[547,6],[655,6]]},"4338":{"position":[[35,6],[80,6],[254,6]]},"4508":{"position":[[60,6]]},"4520":{"position":[[70,6],[193,6],[244,6],[314,6]]},"4523":{"position":[[30,6],[139,6],[245,6]]},"4563":{"position":[[223,6]]},"4567":{"position":[[245,6],[308,6],[331,6],[449,6],[548,6],[748,6],[779,6]]},"4571":{"position":[[700,6]]},"4573":{"position":[[1113,6]]},"4583":{"position":[[223,6]]},"4587":{"position":[[252,6],[282,6],[305,6],[509,6],[539,6],[562,6],[679,6]]},"4607":{"position":[[5063,6]]},"4651":{"position":[[57,6],[118,6],[207,6],[304,6]]},"4653":{"position":[[57,6],[94,6],[149,6],[213,6]]},"4655":{"position":[[57,6],[84,6],[143,6],[239,6]]},"4657":{"position":[[57,6],[93,6],[141,6],[189,6]]},"4659":{"position":[[57,6],[82,6],[129,6],[179,6],[196,8]]}}}],["engine_exchangecap",{"_index":4490,"t":{"4523":{"position":[[654,30]]}}}],["engine_exchangetransitionconfigurationv1",{"_index":4479,"t":{"4518":{"position":[[30,41]]},"4523":{"position":[[699,43],[1124,43]]},"4525":{"position":[[765,43]]}}}],["engine_executepayloadv1",{"_index":4494,"t":{"4523":{"position":[[991,26]]}}}],["engine_forkchoiceupdatedv1",{"_index":4151,"t":{"4341":{"position":[[32,27]]},"4347":{"position":[[29,26]]},"4512":{"position":[[14,27]]},"4514":{"position":[[14,27]]},"4516":{"position":[[36,27]]},"4523":{"position":[[743,29],[1064,29]]},"4527":{"position":[[754,29]]}}}],["engine_forkchoiceupdatedv2",{"_index":4496,"t":{"4523":{"position":[[1094,29]]}}}],["engine_getpayloadbodiesbyhash",{"_index":4491,"t":{"4523":{"position":[[773,32]]}}}],["engine_getpayloadbodiesbyhashv1",{"_index":4497,"t":{"4523":{"position":[[1168,34]]},"4529":{"position":[[562,34]]}}}],["engine_getpayloadbodiesbyrangev1",{"_index":4492,"t":{"4523":{"position":[[806,35],[1203,34]]},"4531":{"position":[[598,35]]}}}],["engine_getpayloadv1",{"_index":4167,"t":{"4343":{"position":[[22,19]]},"4510":{"position":[[47,20]]},"4523":{"position":[[842,22],[945,22]]},"4533":{"position":[[378,22]]}}}],["engine_getpayloadv2",{"_index":4493,"t":{"4523":{"position":[[968,22]]}}}],["engine_newpayloadv1",{"_index":4178,"t":{"4345":{"position":[[26,19]]},"4510":{"position":[[14,20]]},"4516":{"position":[[12,19]]},"4523":{"position":[[865,21],[1018,22]]},"4535":{"position":[[1506,22]]}}}],["engine_newpayloadv2",{"_index":4495,"t":{"4523":{"position":[[1041,22]]}}}],["enginegetpayloadbodiesresultv1",{"_index":4506,"t":{"4529":{"position":[[156,31]]},"4531":{"position":[[317,31]]}}}],["enod",{"_index":879,"t":{"2745":{"position":[[667,5]]},"2747":{"position":[[36,5]]},"2749":{"position":[[308,5],[405,5],[585,5],[1304,5]]},"3028":{"position":[[435,5]]},"3034":{"position":[[210,5]]},"3226":{"position":[[723,5],[752,5]]},"3228":{"position":[[94,5],[242,5],[487,5],[838,5]]},"3230":{"position":[[94,5],[242,5],[487,5]]},"3266":{"position":[[928,5],[957,5]]},"3268":{"position":[[94,5],[250,5],[365,5],[499,5]]},"3270":{"position":[[94,5],[250,5],[365,5]]},"3285":{"position":[[95,5],[195,5],[587,5]]},"3311":{"position":[[794,5],[823,5]]},"3313":{"position":[[94,5],[236,5],[456,5],[848,5]]},"3315":{"position":[[94,5],[236,5],[456,5]]},"3317":{"position":[[94,5],[236,5],[456,5]]},"3425":{"position":[[58,5],[169,5],[239,7],[274,5],[343,5],[523,5]]},"3429":{"position":[[89,5]]},"3435":{"position":[[52,7],[87,5],[156,5],[336,5]]},"3586":{"position":[[979,5],[1012,5]]},"3588":{"position":[[911,5],[944,5]]},"3590":{"position":[[933,5],[966,5]]},"3592":{"position":[[951,5],[984,5]]},"3594":{"position":[[226,5]]},"3596":{"position":[[128,5],[659,5],[985,5]]},"3598":{"position":[[1463,5]]},"3614":{"position":[[2596,6]]},"3666":{"position":[[794,5],[823,5]]},"3668":{"position":[[94,5],[236,5],[456,5],[848,5]]},"3670":{"position":[[94,5],[236,5],[456,5]]},"3672":{"position":[[94,5],[236,5],[456,5]]},"3693":{"position":[[1288,5],[1317,5]]},"3695":{"position":[[65,5],[207,5],[554,5],[966,5]]},"3697":{"position":[[65,5],[207,5],[554,5],[966,5]]},"3699":{"position":[[65,5],[207,5],[554,5],[966,5]]},"3770":{"position":[[364,5]]},"3780":{"position":[[19,5],[84,5],[223,5]]},"3800":{"position":[[132,5]]},"3806":{"position":[[4,5],[119,5],[134,5],[503,5],[1001,5],[1408,5],[1578,5],[1673,5],[1700,5]]},"3808":{"position":[[8,5],[144,5],[259,5]]},"4096":{"position":[[114,5],[285,5]]},"4110":{"position":[[870,6],[965,5],[975,14]]},"4143":{"position":[[49,5],[894,5]]},"4145":{"position":[[112,5]]},"4224":{"position":[[15,5],[76,5]]},"4633":{"position":[[419,5],[542,5]]},"4891":{"position":[[85,5],[119,6],[135,5]]},"4901":{"position":[[274,6],[290,5],[610,5],[730,5],[1037,8]]},"4903":{"position":[[691,5],[868,6],[884,5],[1711,8]]},"4905":{"position":[[35,6],[51,5]]},"5067":{"position":[[12,5],[66,5]]}}}],["enode://002@123:4567",{"_index":3627,"t":{"3982":{"position":[[1138,23]]}}}],["enode://003@123:4567",{"_index":3628,"t":{"3982":{"position":[[1162,23]]}}}],["enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2479,"t":{"3429":{"position":[[564,154]]}}}],["enode://4540ea...9c1d78@172.16.239.41:30303",{"_index":3222,"t":{"3780":{"position":[[240,46]]}}}],["enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303",{"_index":5754,"t":{"5067":{"position":[[334,154]]}}}],["enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305",{"_index":2478,"t":{"3429":{"position":[[408,155]]}}}],["enode://87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3@[::]:30303",{"_index":5147,"t":{"4901":{"position":[[1046,150]]}}}],["enode://@[?discport=/genesis.json",{"_index":837,"t":{"2729":{"position":[[99,24]]}}}],["file=:[,/besu",{"_index":1962,"t":{"3212":{"position":[[246,21]]}}}],["homebrew",{"_index":641,"t":{"2684":{"position":[[0,8]]},"2686":{"position":[[22,9],[140,9],[478,8]]},"3880":{"position":[[0,8]]},"3882":{"position":[[22,9],[140,9],[473,8]]},"4043":{"position":[[39,9]]},"4048":{"position":[[35,9],[55,8],[298,9]]},"4149":{"position":[[91,9]]}}}],["homesteadblock",{"_index":4532,"t":{"4543":{"position":[[239,17]]},"4901":{"position":[[1531,17]]}}}],["honest",{"_index":3340,"t":{"3839":{"position":[[489,6]]},"4328":{"position":[[1309,6]]}}}],["honesti",{"_index":4472,"t":{"4512":{"position":[[231,7]]}}}],["host",{"_index":239,"t":{"2586":{"position":[[733,4]]},"2699":{"position":[[621,4]]},"2727":{"position":[[200,4],[523,4],[774,4],[866,4],[924,5]]},"2747":{"position":[[338,4],[439,4],[467,4]]},"2998":{"position":[[87,4],[100,5]]},"3028":{"position":[[1291,4]]},"3085":{"position":[[251,6]]},"3087":{"position":[[232,7]]},"3123":{"position":[[131,4]]},"3226":{"position":[[155,4],[331,4],[525,4],[574,4]]},"3228":{"position":[[338,4],[583,4]]},"3230":{"position":[[338,4],[583,4]]},"3266":{"position":[[190,4],[401,4],[644,4],[693,4]]},"3285":{"position":[[272,4]]},"3311":{"position":[[155,4],[306,4],[586,4],[635,4]]},"3313":{"position":[[313,4],[533,4]]},"3315":{"position":[[313,4],[533,4]]},"3317":{"position":[[313,4],[533,4]]},"3331":{"position":[[451,5]]},"3333":{"position":[[711,5]]},"3364":{"position":[[279,4]]},"3387":{"position":[[228,4],[298,4]]},"3552":{"position":[[83,4]]},"3565":{"position":[[249,4]]},"3586":{"position":[[237,4],[480,4],[801,4],[846,4]]},"3588":{"position":[[284,4],[565,4]]},"3590":{"position":[[284,4],[565,4]]},"3592":{"position":[[284,4],[565,4]]},"3598":{"position":[[1644,4],[1869,4]]},"3666":{"position":[[155,4],[306,4],[586,4],[635,4]]},"3668":{"position":[[313,4],[533,4]]},"3670":{"position":[[313,4],[533,4]]},"3672":{"position":[[313,4],[533,4]]},"3693":{"position":[[169,4],[447,4]]},"3695":{"position":[[293,4],[640,4]]},"3697":{"position":[[293,4],[640,4]]},"3699":{"position":[[293,4],[640,4]]},"3748":{"position":[[35,4]]},"3806":{"position":[[278,4],[356,4],[390,4],[431,4],[903,4],[1195,4]]},"3862":{"position":[[183,4],[247,4],[516,4],[544,4],[655,4],[777,4]]},"3898":{"position":[[249,4],[279,4],[526,4],[556,4]]},"3938":{"position":[[200,4],[523,4],[774,4],[866,4],[924,5]]},"4037":{"position":[[200,4]]},"4039":{"position":[[160,4]]},"4090":{"position":[[454,4],[511,4]]},"4104":{"position":[[121,4],[171,4],[205,4],[306,4],[344,4]]},"4106":{"position":[[95,4],[147,4],[229,5]]},"4151":{"position":[[1197,4],[1264,4],[1309,4],[1435,4],[1465,4],[1536,4],[1674,4]]},"4157":{"position":[[116,4]]},"4203":{"position":[[345,4],[1010,4]]},"4220":{"position":[[597,4]]},"4222":{"position":[[489,4]]},"4246":{"position":[[15,4],[67,5],[82,5],[107,4],[133,4],[189,4],[226,4]]},"4252":{"position":[[68,4],[191,4],[233,4],[618,4],[661,4],[699,4],[743,4]]},"4273":{"position":[[438,6],[475,4]]},"4332":{"position":[[163,4],[249,4]]},"4336":{"position":[[68,4],[198,4],[240,4],[554,4],[592,4],[662,4]]},"4353":{"position":[[399,4],[419,4]]},"4437":{"position":[[131,4],[252,4],[498,4],[524,4]]},"4567":{"position":[[189,4],[252,4],[527,4],[555,4]]},"4587":{"position":[[229,4],[259,4],[486,4],[516,4]]},"4607":{"position":[[2374,4],[2391,4],[2723,4],[3823,5]]},"4651":{"position":[[64,4],[125,4],[214,4]]},"4675":{"position":[[233,4]]},"4681":{"position":[[57,4],[111,4],[208,4]]},"4699":{"position":[[159,4],[241,4]]},"4707":{"position":[[179,4],[276,4],[356,4]]},"4729":{"position":[[195,4]]},"4745":{"position":[[208,4],[365,4]]},"4785":{"position":[[187,4],[315,4]]},"4831":{"position":[[179,4]]},"4887":{"position":[[216,4],[286,4]]},"4901":{"position":[[333,4],[598,4]]},"5073":{"position":[[56,4],[147,4],[189,4],[538,7],[586,7],[639,7]]}}}],["host:port",{"_index":3257,"t":{"3806":{"position":[[259,11]]},"3982":{"position":[[652,11]]}}}],["host=\"0.0.0.0",{"_index":4792,"t":{"4675":{"position":[[214,14]]},"4745":{"position":[[178,14]]},"4785":{"position":[[168,14]]},"4831":{"position":[[160,14]]}}}],["host=\"1.2.3.4",{"_index":3629,"t":{"3982":{"position":[[1190,14]]}}}],["host=\"127.0.0.1",{"_index":4840,"t":{"4699":{"position":[[138,16]]},"4707":{"position":[[158,16]]}}}],["host=\"192.168.1.132",{"_index":4885,"t":{"4729":{"position":[[170,20]]}}}],["host=\"5.6.7.8",{"_index":3632,"t":{"3982":{"position":[[1241,14]]}}}],["host=\"9.10.11.12",{"_index":3634,"t":{"3982":{"position":[[1282,17]]}}}],["host=${pip",{"_index":4675,"t":{"4607":{"position":[[5184,11]]}}}],["host=0.0.0.0",{"_index":3402,"t":{"3862":{"position":[[118,12],[166,12]]},"3898":{"position":[[154,12],[232,12],[431,12],[509,12]]},"4675":{"position":[[127,12]]},"4745":{"position":[[109,12]]},"4785":{"position":[[119,12]]},"4831":{"position":[[115,12]]}}}],["host=127.0.0.1",{"_index":3864,"t":{"4153":{"position":[[1046,14],[1266,14]]},"4699":{"position":[[87,14]]},"4707":{"position":[[97,14]]}}}],["host=192.168.1.132",{"_index":4883,"t":{"4729":{"position":[[99,18]]}}}],["host=:/grafana",{"_index":1956,"t":{"3208":{"position":[[202,32]]}}}],["http:///jsonrpc",{"_index":1959,"t":{"3210":{"position":[[163,32]]}}}],["http://:/graphql",{"_index":4026,"t":{"4273":{"position":[[398,29]]}}}],["http:///d/xe4v0wgzz/besu",{"_index":2840,"t":{"3612":{"position":[[3296,36]]}}}],["http:///explor",{"_index":2899,"t":{"3626":{"position":[[1490,28]]}}}],["http:///kibana",{"_index":2842,"t":{"3612":{"position":[[3423,26]]}}}],["http:///rpc",{"_index":2887,"t":{"3624":{"position":[[1813,23]]}}}],["http:///jsonrpc",{"_index":1945,"t":{"3200":{"position":[[413,23]]}}}],["http://besu.local:8008/metr",{"_index":3853,"t":{"4151":{"position":[[1613,31]]}}}],["http://discovery_tcp_30303",{"_index":3668,"t":{"4029":{"position":[[547,27]]}}}],["http://ifconfig.me/ip",{"_index":4658,"t":{"4607":{"position":[[3264,22],[4283,22]]}}}],["http://json",{"_index":1870,"t":{"3153":{"position":[[346,12]]}}}],["http://localhost",{"_index":1414,"t":{"2962":{"position":[[814,17]]},"3738":{"position":[[716,17]]}}}],["http://localhost:20000",{"_index":2942,"t":{"3639":{"position":[[515,22]]}}}],["http://localhost:20002",{"_index":2946,"t":{"3639":{"position":[[593,22]]}}}],["http://localhost:20004",{"_index":2950,"t":{"3639":{"position":[[671,22]]}}}],["http://localhost:25000",{"_index":2934,"t":{"3637":{"position":[[668,23]]},"3736":{"position":[[729,23]]}}}],["http://localhost:3000/d/ak6exlspxfemkykexfch/quorum",{"_index":3117,"t":{"3736":{"position":[[1023,51]]}}}],["http://localhost:3000/d/xe4v0wgzz/besu",{"_index":2936,"t":{"3637":{"position":[[759,38]]},"3736":{"position":[[820,38]]}}}],["http://localhost:3001",{"_index":3181,"t":{"3762":{"position":[[445,21]]}}}],["http://localhost:5601/app/kibana#/discov",{"_index":2940,"t":{"3637":{"position":[[900,42]]},"3736":{"position":[[945,42]]}}}],["http://localhost:8080",{"_index":1543,"t":{"2991":{"position":[[302,22]]}}}],["http://localhost:8545",{"_index":2916,"t":{"3628":{"position":[[2547,22],[3338,22]]},"3637":{"position":[[559,21]]},"3736":{"position":[[620,21]]},"3742":{"position":[[44,22]]},"3748":{"position":[[136,21]]},"3750":{"position":[[205,21]]},"3752":{"position":[[171,21]]},"3754":{"position":[[91,22]]},"3764":{"position":[[375,22]]},"4305":{"position":[[680,21]]},"4311":{"position":[[428,21]]}}}],["http://localhost:8545/l",{"_index":4131,"t":{"4324":{"position":[[272,32]]}}}],["http://localhost:8545/login",{"_index":4059,"t":{"4289":{"position":[[528,27]]}}}],["http://localhost:8545/readi",{"_index":4128,"t":{"4322":{"position":[[479,33]]}}}],["http://localhost:8545/readiness?minpeers=0&maxblocksbehind=10",{"_index":4129,"t":{"4322":{"position":[[521,63]]}}}],["http://localhost:8546",{"_index":2918,"t":{"3628":{"position":[[2692,22],[3483,22]]}}}],["http://localhost:8546/login",{"_index":4061,"t":{"4289":{"position":[[735,27]]}}}],["http://localhost:8547",{"_index":2919,"t":{"3628":{"position":[[2837,22],[3628,22]]}}}],["http://localhost:8547/graphql",{"_index":2494,"t":{"3439":{"position":[[1408,29]]},"4275":{"position":[[285,29],[510,29],[793,29]]},"4279":{"position":[[335,29],[549,29]]},"4955":{"position":[[614,29]]},"4957":{"position":[[1843,29]]},"4965":{"position":[[1603,29]]},"4969":{"position":[[1048,29]]},"4971":{"position":[[1054,29]]},"4973":{"position":[[2749,29]]},"4975":{"position":[[2768,29]]},"4977":{"position":[[3912,29]]},"4979":{"position":[[918,29]]},"4981":{"position":[[935,29]]},"4983":{"position":[[1538,29]]},"4989":{"position":[[2446,29]]},"4997":{"position":[[1163,29]]},"4999":{"position":[[1659,29]]},"5001":{"position":[[1786,29]]},"5003":{"position":[[1510,29]]},"5005":{"position":[[1102,29]]},"5007":{"position":[[2092,29]]},"5009":{"position":[[2481,29]]},"5011":{"position":[[2505,29]]},"5013":{"position":[[848,29]]},"5015":{"position":[[862,29]]},"5031":{"position":[[506,29]]},"5033":{"position":[[1922,29]]},"5039":{"position":[[1836,29]]}}}],["http://localhost:8551",{"_index":4606,"t":{"4573":{"position":[[166,21]]}}}],["http://localhost:9081",{"_index":2944,"t":{"3639":{"position":[[554,21]]}}}],["http://localhost:9082",{"_index":2948,"t":{"3639":{"position":[[632,21]]}}}],["http://localhost:9083",{"_index":2952,"t":{"3639":{"position":[[710,21]]}}}],["http://localhost:9090",{"_index":3865,"t":{"4155":{"position":[[22,21]]}}}],["http://localhost:9090/graph",{"_index":2935,"t":{"3637":{"position":[[713,27]]},"3736":{"position":[[774,27]]}}}],["http://localhost:9101",{"_index":2754,"t":{"3561":{"position":[[303,24]]},"3689":{"position":[[484,24]]}}}],["http://localhost:9102",{"_index":2757,"t":{"3561":{"position":[[392,24]]},"3689":{"position":[[573,24]]}}}],["http://localhost:9103",{"_index":2758,"t":{"3561":{"position":[[481,24]]},"3689":{"position":[[662,24],[1503,23],[2236,23],[2969,23]]}}}],["http://localhost:9201",{"_index":3003,"t":{"3689":{"position":[[1217,24]]}}}],["http://localhost:9202",{"_index":3004,"t":{"3689":{"position":[[1306,24]]}}}],["http://localhost:9203",{"_index":2760,"t":{"3561":{"position":[[589,23]]},"3689":{"position":[[770,23],[1395,24],[2272,23],[3005,23]]}}}],["http://localhost:9301",{"_index":3005,"t":{"3689":{"position":[[1950,24]]}}}],["http://localhost:9302",{"_index":3006,"t":{"3689":{"position":[[2039,24]]}}}],["http://localhost:9303",{"_index":2761,"t":{"3561":{"position":[[625,23]]},"3689":{"position":[[806,23],[1539,23],[2128,24],[3041,23]]}}}],["http://localhost:9401",{"_index":3007,"t":{"3689":{"position":[[2683,24]]}}}],["http://localhost:9402",{"_index":3008,"t":{"3689":{"position":[[2772,24]]}}}],["http://localhost:9403",{"_index":2762,"t":{"3561":{"position":[[661,23]]},"3689":{"position":[[842,23],[1575,23],[2308,23],[2861,24]]}}}],["http://localhost:9545/metr",{"_index":3872,"t":{"4157":{"position":[[75,29]]}}}],["http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",{"_index":1873,"t":{"3153":{"position":[[396,59]]}}}],["http://rpc_tcp_8545",{"_index":3669,"t":{"4029":{"position":[[648,20]]}}}],["https://,\"method\":\"[,:8088/services/collector",{"_index":1453,"t":{"2976":{"position":[[427,34],[1410,34]]}}}],["instance_typ",{"_index":4637,"t":{"4607":{"position":[[1763,14]]}}}],["instancetyp",{"_index":4618,"t":{"4607":{"position":[[1047,13]]}}}],["instanti",{"_index":1839,"t":{"3139":{"position":[[1631,12]]}}}],["instead",{"_index":630,"t":{"2676":{"position":[[1815,7]]},"2709":{"position":[[553,7]]},"2989":{"position":[[331,7]]},"3000":{"position":[[461,7]]},"3010":{"position":[[250,7]]},"3012":{"position":[[34,7],[353,7],[825,7]]},"3089":{"position":[[415,7]]},"3244":{"position":[[199,8]]},"3254":{"position":[[168,7],[2546,7],[2970,7]]},"3347":{"position":[[728,7]]},"3360":{"position":[[29,7]]},"3447":{"position":[[161,7]]},"3453":{"position":[[309,7]]},"3465":{"position":[[278,7]]},"3565":{"position":[[1052,8]]},"3639":{"position":[[160,7]]},"3703":{"position":[[275,7]]},"3812":{"position":[[1173,7],[1366,7]]},"3831":{"position":[[380,7]]},"3833":{"position":[[354,8]]},"3914":{"position":[[342,7],[624,7]]},"3916":{"position":[[159,7]]},"3922":{"position":[[210,7]]},"3956":{"position":[[553,7]]},"4002":{"position":[[514,8]]},"4062":{"position":[[380,7]]},"4078":{"position":[[126,7]]},"4209":{"position":[[1270,7]]},"4265":{"position":[[1448,7]]},"4273":{"position":[[72,7]]},"4363":{"position":[[137,7]]},"4411":{"position":[[1545,7]]},"4545":{"position":[[457,8]]},"4607":{"position":[[2264,8]]},"4867":{"position":[[384,7]]},"4937":{"position":[[86,7]]},"4939":{"position":[[88,7]]}}}],["instruct",{"_index":640,"t":{"2680":{"position":[[185,12]]},"2715":{"position":[[22,13]]},"3380":{"position":[[675,13]]},"3499":{"position":[[300,12]]},"3559":{"position":[[94,12]]},"3926":{"position":[[185,12]]},"4039":{"position":[[243,12]]},"4046":{"position":[[72,12]]},"4060":{"position":[[154,13]]},"4401":{"position":[[483,12]]},"4553":{"position":[[323,13]]},"4600":{"position":[[109,13]]}}}],["insuffici",{"_index":1697,"t":{"3056":{"position":[[514,12]]},"4957":{"position":[[444,12],[627,12]]}}}],["integ",{"_index":1803,"t":{"3133":{"position":[[603,7]]},"3393":{"position":[[96,7]]},"3395":{"position":[[304,7],[493,7]]},"3413":{"position":[[317,7],[506,7]]},"3417":{"position":[[110,7]]},"3439":{"position":[[314,7]]},"3443":{"position":[[185,7]]},"3451":{"position":[[286,7]]},"3453":{"position":[[571,7]]},"3465":{"position":[[435,7]]},"3481":{"position":[[317,7],[506,7]]},"3485":{"position":[[1045,7]]},"4387":{"position":[[89,7],[785,7],[846,7],[1159,7]]},"4389":{"position":[[213,7]]},"4391":{"position":[[148,7],[271,7]]},"4393":{"position":[[239,7],[333,7]]},"4395":{"position":[[115,7],[243,7],[335,7],[464,7],[840,7],[900,7]]},"4397":{"position":[[455,7],[610,7]]},"4401":{"position":[[72,7],[135,7],[166,7],[210,7]]},"4403":{"position":[[144,7]]},"4405":{"position":[[348,7]]},"4407":{"position":[[776,7],[931,7],[1461,7]]},"4409":{"position":[[242,7],[409,7],[548,7],[735,7],[947,7],[1082,7]]},"4411":{"position":[[1077,7]]},"4897":{"position":[[110,7],[293,7]]},"4911":{"position":[[339,7]]},"4917":{"position":[[106,7]]},"4919":{"position":[[116,7]]},"4921":{"position":[[134,7]]},"4927":{"position":[[242,7]]},"4931":{"position":[[148,7]]},"4945":{"position":[[142,7]]},"4947":{"position":[[278,7]]},"4953":{"position":[[223,7]]},"4955":{"position":[[134,7]]},"4957":{"position":[[892,7]]},"4963":{"position":[[174,7]]},"4967":{"position":[[245,7],[509,7],[570,7],[802,8]]},"4971":{"position":[[201,7]]},"4975":{"position":[[130,7]]},"4977":{"position":[[355,7]]},"4979":{"position":[[155,7]]},"4981":{"position":[[140,7],[356,7]]},"4983":{"position":[[243,7]]},"4993":{"position":[[101,7]]},"4995":{"position":[[456,7]]},"4997":{"position":[[134,7],[230,7]]},"4999":{"position":[[161,7]]},"5001":{"position":[[152,7]]},"5005":{"position":[[266,7],[446,7]]},"5011":{"position":[[108,7]]},"5013":{"position":[[157,7]]},"5015":{"position":[[134,7],[349,7]]},"5017":{"position":[[416,7]]},"5083":{"position":[[300,7]]},"5085":{"position":[[303,7]]},"5087":{"position":[[459,7]]},"5095":{"position":[[243,7]]},"5101":{"position":[[103,7]]}}}],["integr",{"_index":933,"t":{"2762":{"position":[[165,12]]},"3501":{"position":[[821,11]]},"3833":{"position":[[475,9],[629,9]]},"4705":{"position":[[211,12]]}}}],["intel",{"_index":709,"t":{"2699":{"position":[[91,5]]},"3080":{"position":[[225,5]]},"3732":{"position":[[81,5]]},"3968":{"position":[[547,7]]}}}],["intend",{"_index":1244,"t":{"2852":{"position":[[144,6]]},"3507":{"position":[[122,8]]},"3626":{"position":[[606,8]]},"3630":{"position":[[500,8]]},"3730":{"position":[[239,8]]},"4092":{"position":[[98,8]]}}}],["intens",{"_index":3035,"t":{"3710":{"position":[[309,9]]},"4209":{"position":[[306,9]]}}}],["intention",{"_index":3485,"t":{"3874":{"position":[[1682,13]]}}}],["interact",{"_index":1293,"t":{"2866":{"position":[[636,8]]},"3026":{"position":[[151,8]]},"3252":{"position":[[851,12]]},"3325":{"position":[[128,8]]},"3329":{"position":[[489,8]]},"3337":{"position":[[194,8]]},"3509":{"position":[[99,8]]},"3515":{"position":[[389,8],[479,8],[743,8]]},"3639":{"position":[[2633,8]]},"3734":{"position":[[419,8]]},"3758":{"position":[[144,8]]},"3825":{"position":[[8,8]]},"3874":{"position":[[846,10]]},"4102":{"position":[[164,9]]},"4110":{"position":[[703,12]]},"4114":{"position":[[52,8]]},"4201":{"position":[[308,13]]},"4205":{"position":[[8,8]]},"4309":{"position":[[27,8]]},"4500":{"position":[[97,13]]},"4735":{"position":[[363,8]]},"4781":{"position":[[455,9],[648,8],[857,9],[947,8]]},"4949":{"position":[[33,8]]},"4957":{"position":[[93,8]]},"5033":{"position":[[80,8],[201,8]]}}}],["intercept",{"_index":4042,"t":{"4281":{"position":[[542,12]]}}}],["interchang",{"_index":4405,"t":{"4453":{"position":[[196,15]]}}}],["interest",{"_index":3133,"t":{"3748":{"position":[[991,11]]}}}],["interfac",{"_index":210,"t":{"2584":{"position":[[48,11],[69,9],[215,9]]},"2590":{"position":[[512,10],[672,11]]},"2594":{"position":[[148,9]]},"2600":{"position":[[75,9]]},"2622":{"position":[[431,10]]},"2630":{"position":[[275,10]]},"2632":{"position":[[178,10]]},"2640":{"position":[[312,9]]},"2642":{"position":[[78,9]]},"2701":{"position":[[163,11],[253,11]]},"2747":{"position":[[556,11],[633,10],[656,9],[682,9]]},"2796":{"position":[[122,9],[173,9]]},"2864":{"position":[[16,9],[68,9]]},"2894":{"position":[[117,9],[168,9]]},"2972":{"position":[[413,10]]},"2991":{"position":[[498,10],[1255,10]]},"2996":{"position":[[150,10]]},"3030":{"position":[[118,10],[168,9],[281,9],[337,9],[490,10]]},"3068":{"position":[[363,10]]},"3135":{"position":[[4,10],[123,11]]},"3137":{"position":[[30,10],[72,9]]},"3139":{"position":[[26,10],[74,9],[1054,10],[1666,9]]},"3141":{"position":[[77,9]]},"3155":{"position":[[77,9]]},"3176":{"position":[[266,10]]},"3383":{"position":[[1154,9]]},"3385":{"position":[[1238,9],[3196,10]]},"3507":{"position":[[441,10]]},"3974":{"position":[[163,11],[253,11]]},"4090":{"position":[[469,9],[532,10],[605,12],[683,10],[706,9],[732,9]]},"4151":{"position":[[1832,10]]},"4153":{"position":[[1423,10]]},"4155":{"position":[[77,10]]},"4277":{"position":[[50,9]]},"4415":{"position":[[61,9]]},"4675":{"position":[[101,10],[159,10]]},"4745":{"position":[[92,10],[141,10]]},"4747":{"position":[[183,9],[289,9],[360,11],[400,12]]},"4785":{"position":[[97,10]]},"4831":{"position":[[95,10]]}}}],["interface=\"192.168.1.132",{"_index":4913,"t":{"4747":{"position":[[145,25]]}}}],["interface=192.168.1.132",{"_index":4911,"t":{"4747":{"position":[[84,23]]}}}],["interface=,127.0.0.1,localhost",{"_index":4599,"t":{"4567":{"position":[[217,23],[280,23]]}}}],["ipc",{"_index":790,"t":{"2715":{"position":[[332,3]]},"4242":{"position":[[61,3]]},"4244":{"position":[[104,3],[140,3]]},"4250":{"position":[[35,3],[62,3],[151,3]]},"4309":{"position":[[416,3],[443,3],[478,3]]},"4311":{"position":[[232,3],[316,3],[403,3]]},"4326":{"position":[[214,3],[246,3]]}}}],["ipv4",{"_index":4615,"t":{"4607":{"position":[[737,4]]}}}],["ipv4_address",{"_index":3207,"t":{"3776":{"position":[[300,13]]}}}],["ipv6",{"_index":771,"t":{"2709":{"position":[[907,4],[964,4],[1022,4],[1068,4],[1114,4],[1155,4],[1194,4]]},"3956":{"position":[[913,4],[970,4],[1028,4],[1074,4],[1120,4],[1161,4],[1200,4]]}}}],["irrelev",{"_index":5370,"t":{"4965":{"position":[[595,10]]}}}],["irresolv",{"_index":1312,"t":{"2908":{"position":[[454,12]]}}}],["isbootnod",{"_index":2858,"t":{"3616":{"position":[[398,11]]},"3618":{"position":[[409,11]]}}}],["isn't",{"_index":551,"t":{"2656":{"position":[[871,5]]},"2668":{"position":[[490,5]]},"2672":{"position":[[287,5]]},"2749":{"position":[[1338,5]]},"2778":{"position":[[469,5]]},"3351":{"position":[[285,5]]},"3405":{"position":[[885,5]]},"3918":{"position":[[839,5],[2038,5],[2368,5],[2515,5]]},"4108":{"position":[[151,5],[452,5]]},"4252":{"position":[[337,5]]},"4336":{"position":[[344,5]]},"4492":{"position":[[431,5]]},"4681":{"position":[[421,5]]}}}],["isol",{"_index":408,"t":{"2620":{"position":[[983,8]]},"3214":{"position":[[185,9]]},"3256":{"position":[[313,9]]},"3295":{"position":[[187,9]]},"3358":{"position":[[50,9]]},"3610":{"position":[[14,8]]},"3650":{"position":[[432,9]]},"4088":{"position":[[423,10]]},"4100":{"position":[[184,10]]},"4203":{"position":[[906,7]]},"4492":{"position":[[144,8]]},"4607":{"position":[[824,7]]}}}],["isreceivedfromlocalsourc",{"_index":5834,"t":{"5105":{"position":[[488,28],[650,28]]}}}],["issu",{"_index":237,"t":{"2586":{"position":[[709,6]]},"2602":{"position":[[203,6]]},"2604":{"position":[[60,6]]},"2606":{"position":[[119,6]]},"2656":{"position":[[993,6]]},"2666":{"position":[[593,6]]},"2672":{"position":[[240,6],[882,6]]},"2729":{"position":[[458,6]]},"2755":{"position":[[360,6]]},"2930":{"position":[[152,6]]},"2954":{"position":[[44,7]]},"3028":{"position":[[1267,6]]},"3076":{"position":[[231,6]]},"3093":{"position":[[421,5]]},"3135":{"position":[[171,5]]},"3139":{"position":[[1223,5],[1245,5]]},"3351":{"position":[[294,5]]},"3530":{"position":[[1133,6]]},"3548":{"position":[[820,5]]},"3808":{"position":[[882,6]]},"3843":{"position":[[346,5],[1442,6],[1530,7]]},"3918":{"position":[[1526,5]]},"4076":{"position":[[161,6]]},"4124":{"position":[[17,6]]},"4139":{"position":[[54,7],[214,5]]},"4141":{"position":[[224,6]]},"4217":{"position":[[181,7]]},"4220":{"position":[[246,5]]},"4853":{"position":[[215,6]]},"4859":{"position":[[905,6]]},"4929":{"position":[[177,8]]}}}],["istanbul",{"_index":1054,"t":{"2786":{"position":[[2757,8]]},"2852":{"position":[[17118,8]]},"3006":{"position":[[160,9]]}}}],["it'",{"_index":1688,"t":{"3044":{"position":[[2243,4]]},"3139":{"position":[[1388,4]]},"3610":{"position":[[228,4]]},"3614":{"position":[[80,4]]},"3618":{"position":[[1761,4]]},"3622":{"position":[[280,4]]},"3831":{"position":[[1014,4]]},"3843":{"position":[[1279,4]]},"3918":{"position":[[682,4]]},"4102":{"position":[[116,4]]},"4175":{"position":[[241,4]]},"4379":{"position":[[414,4]]},"4401":{"position":[[551,4]]},"4407":{"position":[[1221,4]]},"4543":{"position":[[1125,4]]},"4649":{"position":[[281,4]]},"4683":{"position":[[169,4]]}}}],["item",{"_index":961,"t":{"2778":{"position":[[955,4]]},"2780":{"position":[[478,4],[1994,4]]},"2808":{"position":[[38,4]]},"2810":{"position":[[147,4]]},"2812":{"position":[[140,4]]},"2814":{"position":[[147,4]]},"2852":{"position":[[15537,4]]},"2870":{"position":[[38,4]]},"2872":{"position":[[147,4]]},"2874":{"position":[[140,4]]},"2876":{"position":[[200,4]]},"2878":{"position":[[147,4]]},"2902":{"position":[[38,4]]},"2904":{"position":[[147,4]]},"2906":{"position":[[146,4]]},"2974":{"position":[[156,5]]},"3022":{"position":[[1793,5],[1982,4]]},"3109":{"position":[[333,5]]},"3153":{"position":[[606,8]]},"3471":{"position":[[434,5]]},"3614":{"position":[[1887,4]]},"4149":{"position":[[229,5]]},"4482":{"position":[[145,5]]},"4537":{"position":[[53,5]]},"4539":{"position":[[22,5],[84,4],[324,6],[405,6],[477,6],[955,6]]},"4541":{"position":[[296,4]]},"4547":{"position":[[32,5]]},"4553":{"position":[[1450,6]]},"5017":{"position":[[176,6]]},"5083":{"position":[[698,5]]},"5095":{"position":[[819,5]]},"5097":{"position":[[544,5]]}}}],["itself",{"_index":474,"t":{"2634":{"position":[[240,7]]},"2656":{"position":[[846,7]]},"2749":{"position":[[556,7]]},"3008":{"position":[[550,7]]},"3054":{"position":[[92,7]]},"3405":{"position":[[410,7]]},"3534":{"position":[[603,6]]},"3546":{"position":[[47,6],[505,6]]},"3548":{"position":[[47,6],[648,6]]},"3550":{"position":[[47,6],[501,6]]},"3780":{"position":[[471,6]]},"3810":{"position":[[490,7]]},"3833":{"position":[[346,7]]},"3849":{"position":[[533,6]]},"4098":{"position":[[640,6]]}}}],["jar",{"_index":274,"t":{"2592":{"position":[[60,6]]}}}],["java",{"_index":255,"t":{"2590":{"position":[[46,4]]},"2684":{"position":[[9,4],[84,4],[110,4],[190,4]]},"2689":{"position":[[0,4]]},"2697":{"position":[[61,4]]},"2715":{"position":[[552,5],[577,4],[621,4]]},"2826":{"position":[[941,4]]},"3748":{"position":[[333,4],[741,4]]},"3880":{"position":[[9,4],[84,4],[110,4],[190,4]]},"3885":{"position":[[0,4]]},"3968":{"position":[[33,4],[77,4],[199,4],[1312,4],[1401,6],[1466,4],[1542,6]]},"3970":{"position":[[38,4]]},"4033":{"position":[[0,4],[84,4]]},"4037":{"position":[[26,4],[39,4],[187,4],[238,4]]},"4039":{"position":[[24,4],[138,4]]},"4041":{"position":[[167,4],[194,4],[282,4],[429,4],[493,4],[704,8]]},"4043":{"position":[[171,4],[276,5]]},"4046":{"position":[[10,4],[96,4],[187,4]]},"4048":{"position":[[15,4],[283,4],[434,5]]},"4050":{"position":[[15,4]]},"4052":{"position":[[104,4],[570,4]]},"4054":{"position":[[52,4]]},"4056":{"position":[[89,4]]},"4209":{"position":[[770,4],[1250,4],[1510,4]]},"4295":{"position":[[89,4]]},"4561":{"position":[[121,4]]},"4581":{"position":[[121,4]]},"4683":{"position":[[332,4],[498,4]]},"4901":{"position":[[1277,4]]},"4903":{"position":[[1245,4]]}}}],["java.lang.illegalargumentexcept",{"_index":3769,"t":{"4068":{"position":[[0,35]]},"4072":{"position":[[0,35]]},"4074":{"position":[[0,35]]},"4076":{"position":[[0,35]]}}}],["java.lang.illegalstateexcept",{"_index":3777,"t":{"4082":{"position":[[0,32]]}}}],["java.lang.runtimeexcept",{"_index":3770,"t":{"4070":{"position":[[0,27]]},"4078":{"position":[[0,27]]},"4084":{"position":[[0,27]]}}}],["java.util.concurrent.completionexcept",{"_index":3552,"t":{"3918":{"position":[[1743,41]]}}}],["java_hom",{"_index":3610,"t":{"3968":{"position":[[1594,9]]},"4041":{"position":[[849,10]]}}}],["java_home=$(dirnam",{"_index":3697,"t":{"4041":{"position":[[652,19]]}}}],["java_home=/usr/bin/jdk",{"_index":3612,"t":{"3968":{"position":[[1772,22]]}}}],["java_home=jdk",{"_index":3611,"t":{"3968":{"position":[[1738,13]]}}}],["javadoc",{"_index":273,"t":{"2590":{"position":[[703,8]]},"3135":{"position":[[154,8],[163,7]]}}}],["javascript",{"_index":1773,"t":{"3117":{"position":[[29,10],[374,10]]},"3250":{"position":[[1801,10]]},"3254":{"position":[[490,10]]},"4311":{"position":[[58,10]]}}}],["jdbc",{"_index":2748,"t":{"3561":{"position":[[133,7]]},"3689":{"position":[[314,7],[1047,7],[1780,7],[2513,7]]}}}],["jdbc:h2:./target/h2/tessera1",{"_index":2749,"t":{"3561":{"position":[[184,31]]},"3689":{"position":[[365,31],[1098,31],[1831,31],[2564,31]]}}}],["jdk",{"_index":642,"t":{"2684":{"position":[[14,3],[195,4]]},"2689":{"position":[[5,3]]},"3880":{"position":[[14,3],[195,4]]},"3885":{"position":[[5,3]]},"3968":{"position":[[780,3],[1269,3],[1628,3],[1655,3]]},"4041":{"position":[[399,3],[890,3]]},"4048":{"position":[[96,3]]}}}],["jdk_x64_linux_21.0.3.0.tar.gz",{"_index":3596,"t":{"3968":{"position":[[1012,29],[1143,29]]}}}],["jemalloc",{"_index":672,"t":{"2689":{"position":[[302,8]]},"3885":{"position":[[302,8]]},"4209":{"position":[[928,9]]}}}],["jfr",{"_index":3680,"t":{"4033":{"position":[[21,5],[141,3]]},"4035":{"position":[[10,4],[36,3],[558,3],[679,3]]}}}],["jk",{"_index":332,"t":{"2602":{"position":[[608,4]]},"2770":{"position":[[199,3],[230,4]]},"2776":{"position":[[207,3],[238,4]]},"2930":{"position":[[367,3]]},"2942":{"position":[[200,4],[240,4]]},"2948":{"position":[[170,4],[210,4]]}}}],["job",{"_index":858,"t":{"2735":{"position":[[509,3]]},"3614":{"position":[[2325,3]]},"4713":{"position":[[149,4],[198,4],[242,4],[251,3]]}}}],["job=\"mi",{"_index":4854,"t":{"4713":{"position":[[134,7],[227,7]]}}}],["job=\",\"params\":[],\"id\":1",{"_index":4097,"t":{"4305":{"position":[[168,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2797,"t":{"3596":{"position":[[211,77],[331,77],[451,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2798,"t":{"3596":{"position":[[735,77],[855,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2799,"t":{"3596":{"position":[[1047,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1",{"_index":5130,"t":{"4891":{"position":[[312,217],[552,215]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_changeloglevel\",\"params\":[\"warn",{"_index":5136,"t":{"4893":{"position":[[1154,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_generatelogbloomcach",{"_index":5139,"t":{"4895":{"position":[[974,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_logsremovecache\",\"params\":[\"1",{"_index":5142,"t":{"4897":{"position":[[897,65]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_logsrepaircache\",\"params\":[\"1200",{"_index":5144,"t":{"4899":{"position":[[339,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_nodeinfo\",\"params\":[],\"id\":1",{"_index":5146,"t":{"4901":{"position":[[846,64],[933,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1",{"_index":5158,"t":{"4903":{"position":[[980,61],[1064,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_removepeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1",{"_index":5174,"t":{"4905":{"position":[[229,220],[472,218]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1308,"t":{"2896":{"position":[[1078,100]]},"3391":{"position":[[272,100],[404,99]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsignermetrics\",\"params\":[\"1",{"_index":2445,"t":{"3395":{"position":[[1134,67],[1241,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsigners\",\"params\":[\"latest",{"_index":1307,"t":{"2896":{"position":[[781,67]]},"3393":{"position":[[424,67],[523,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsignersathash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48",{"_index":2452,"t":{"3397":{"position":[[224,133],[389,132]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"param",{"_index":2453,"t":{"3399":{"position":[[345,58],[435,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1306,"t":{"2896":{"position":[[230,99]]},"3401":{"position":[[294,99],[432,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountat\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c",{"_index":5185,"t":{"4909":{"position":[[1542,124]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountat\",\"params\":[\"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6",{"_index":5179,"t":{"4909":{"position":[[823,124]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountrange\",\"params\":[\"12345",{"_index":5193,"t":{"4911":{"position":[[716,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_batchsendrawtransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1",{"_index":5203,"t":{"4913":{"position":[[608,737],[1368,735]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getbadblocks\",\"params\":[],\"id\":1",{"_index":5206,"t":{"4915":{"position":[[212,68],[303,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawblock\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5238,"t":{"4917":{"position":[[413,77],[513,75]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawheader\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5240,"t":{"4919":{"position":[[432,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawreceipts\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5244,"t":{"4921":{"position":[[458,80],[561,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawtransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1",{"_index":5247,"t":{"4923":{"position":[[238,141],[402,139]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_metrics\",\"params\":[],\"id\":1",{"_index":5250,"t":{"4925":{"position":[[351,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_replayblock\",\"params\":[\"0x1\"],\"id\":1",{"_index":5304,"t":{"4927":{"position":[[541,72]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_resyncworldstate\",\"params\":[],\"id\":1",{"_index":5306,"t":{"4929":{"position":[[313,72]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_sethead\",\"params\":[\"0x1\"],\"id\":1",{"_index":5308,"t":{"4931":{"position":[[447,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_standardtracebadblocktofile\",\"params\":[\"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa",{"_index":5319,"t":{"4935":{"position":[[372,143]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_standardtraceblocktofile\",\"params\":[\"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc",{"_index":5312,"t":{"4933":{"position":[[663,139]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_storagerangeat\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\",0,\"0x0e0d2c8f7794e82164f11798276a188147fbd415\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",1",{"_index":5325,"t":{"4937":{"position":[[512,248]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblock\",\"params\":[\"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\"],\"id\":1",{"_index":5333,"t":{"4941":{"position":[[506,1338]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblockbyhash\",\"params\":[\"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5",{"_index":5335,"t":{"4943":{"position":[[523,132]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblockbynumber\",\"params\":[\"0x7224\",{\"disablestorage\":tru",{"_index":5337,"t":{"4945":{"position":[[726,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_tracecall\",\"params\":[{\"from\":\"\",\"to\":\"\",\"gas\":\"0xfffff2\",\"gasprice\":\"0xef\",\"value\":\"0x0\",\"data\":\"\"},\"latest\",{\"disablememory\":true,\"disablestack\":true,\"disablestorage\":tru",{"_index":5339,"t":{"4947":{"position":[[862,209]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_tracetransaction\",\"params\":[\"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\",{\"disablestorage\":true}],\"id\":1",{"_index":5331,"t":{"4939":{"position":[[648,164]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eea_sendrawtransaction\",\"param",{"_index":2457,"t":{"3405":{"position":[[1255,61],[1570,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_exchangecapabilities\",\"params\":[[\"engine_exchangetransitionconfigurationv1\",\"engine_forkchoiceupdatedv1\",\"engine_getpayloadbodiesbyhash\",\"engine_getpayloadbodiesbyrangev1\",\"engine_getpayloadv1\",\"engine_newpayloadv1\"]],\"id\":67",{"_index":4489,"t":{"4523":{"position":[[339,262]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_exchangetransitionconfigurationv1\",\"params\":[{\"terminaltotaldifficulti",{"_index":4502,"t":{"4525":{"position":[[470,107]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceupdatedv1\",\"params\":[{\"headblockhash",{"_index":4152,"t":{"4341":{"position":[[110,83]]},"4347":{"position":[[113,83]]},"4527":{"position":[[353,83]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadbodiesbyhashv1\",\"params\":[[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\",\"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\"]],\"id\":1",{"_index":4507,"t":{"4529":{"position":[[289,220]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadbodiesbyrangev1\",\"params\":[\"0x20",{"_index":4524,"t":{"4531":{"position":[[450,79]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadv1\",\"params\":[\"0x0000000021f32cc1\"],\"id\":1",{"_index":4528,"t":{"4533":{"position":[[236,89]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadv1\",\"params\":[\"0x1\"],\"id\":1",{"_index":4168,"t":{"4343":{"position":[[92,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_newpayloadv1\",\"param",{"_index":4179,"t":{"4345":{"position":[[96,59]]},"4535":{"position":[[218,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"params\":[],\"id\":53",{"_index":5342,"t":{"4951":{"position":[[423,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blobbasefee\",\"params\":[],\"id\":51",{"_index":5344,"t":{"4953":{"position":[[322,66],[411,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blocknumber\",\"params\":[],\"id\":1",{"_index":2886,"t":{"3624":{"position":[[1747,65]]},"3752":{"position":[[105,65]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blocknumber\",\"params\":[],\"id\":51",{"_index":5346,"t":{"4955":{"position":[[312,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":5354,"t":{"4957":{"position":[[2401,101]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"value\":\"0x1",{"_index":5352,"t":{"4957":{"position":[[1244,114]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_chainid\",\"params\":[],\"id\":1",{"_index":809,"t":{"2725":{"position":[[195,61]]},"3946":{"position":[[195,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_chainid\",\"params\":[],\"id\":51",{"_index":5357,"t":{"4959":{"position":[[156,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_coinbase\",\"params\":[],\"id\":53",{"_index":5360,"t":{"4961":{"position":[[531,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_estimategas\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x44aa93095d6749a706051658b970b941c72c1d53\",\"value\":\"0x1\"}],\"id\":53",{"_index":5371,"t":{"4965":{"position":[[938,183]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_feehistory\",\"param",{"_index":5385,"t":{"4967":{"position":[[1084,53]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gasprice\",\"params\":[],\"id\":53",{"_index":5409,"t":{"4969":{"position":[[758,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getbalance\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":5410,"t":{"4971":{"position":[[563,99]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockbyhash\",\"params\":[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",{"_index":5414,"t":{"4973":{"position":[[387,127]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockbynumber\",\"params\":[\"0x68b3",{"_index":5443,"t":{"4975":{"position":[[600,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockreceipts\",\"params\":[\"latest\"],\"id\":1",{"_index":5460,"t":{"4977":{"position":[[704,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblocktransactioncountbyhash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":53",{"_index":5498,"t":{"4979":{"position":[[357,153]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblocktransactioncountbynumber\",\"params\":[\"0xe8\"],\"id\":51",{"_index":5503,"t":{"4981":{"position":[[560,93]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getcode\",\"params\":[\"0xa50a51c09a5c451c52bb714527e1974b686d8e77",{"_index":5508,"t":{"4983":{"position":[[592,96]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getfilterchanges\",\"params\":[\"0xf8bf5598d9e04fbe84523d42640b9b0e\"],\"id\":1",{"_index":5512,"t":{"4985":{"position":[[534,106]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getfilterlogs\",\"params\":[\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"],\"id\":1",{"_index":5526,"t":{"4987":{"position":[[505,103]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getlogs\",\"params\":[{\"fromblock\":\"earliest",{"_index":5536,"t":{"4989":{"position":[[723,75]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyblockhashandindex\",\"params\":[\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7",{"_index":5594,"t":{"4999":{"position":[[383,146]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyblocknumberandindex\",\"params\":[\"82990",{"_index":5611,"t":{"5001":{"position":[[699,87]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyhash\",\"params\":[\"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\"],\"id\":53",{"_index":5614,"t":{"5003":{"position":[[297,143]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactioncount\",\"params\":[\"0xc94770007dda54cf92009bff0de90c06f603a09f\",\"latest\"],\"id\":1",{"_index":5624,"t":{"5005":{"position":[[613,126]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionreceipt\",\"params\":[\"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\"],\"id\":53",{"_index":5627,"t":{"5007":{"position":[[442,144]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclebyblockhashandindex\",\"params\":[\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7",{"_index":5630,"t":{"5009":{"position":[[313,140]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclebyblocknumberandindex\",\"params\":[\"0x7689d2",{"_index":5656,"t":{"5011":{"position":[[515,84]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclecountbyblockhash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":1",{"_index":5674,"t":{"5013":{"position":[[309,146]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclecountbyblocknumber\",\"params\":[\"0xe8\"],\"id\":1",{"_index":5678,"t":{"5015":{"position":[[501,86]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getwork\",\"params\":[],\"id\":1",{"_index":5684,"t":{"5017":{"position":[[529,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1",{"_index":5688,"t":{"5019":{"position":[[330,62],[415,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_maxpriorityfeepergas\",\"params\":[],\"id\":1",{"_index":5690,"t":{"5021":{"position":[[244,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_mining\",\"params\":[],\"id\":53",{"_index":5692,"t":{"5023":{"position":[[331,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newblockfilter\",\"params\":[],\"id\":1",{"_index":5693,"t":{"5025":{"position":[[217,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newfilter\",\"params\":[{\"fromblock\":\"earliest",{"_index":5695,"t":{"5027":{"position":[[404,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newpendingtransactionfilter\",\"params\":[],\"id\":1",{"_index":5697,"t":{"5029":{"position":[[246,81]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_protocolversion\",\"params\":[],\"id\":1",{"_index":5699,"t":{"5031":{"position":[[199,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_sendrawtransaction\",\"params\":[\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"],\"id\":1",{"_index":5703,"t":{"5033":{"position":[[870,290]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_sendtransaction\",\"params\":[{\"from\":\"0x9b790656b9ec0db1936ed84b3bea605873558198",{"_index":2107,"t":{"3252":{"position":[[1929,112]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1",{"_index":812,"t":{"2725":{"position":[[354,61]]},"3946":{"position":[[354,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":51",{"_index":5719,"t":{"5039":{"position":[[1356,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_uninstallfilter\",\"params\":[\"0x70355a0b574b437eaa19fe95adfedc0a\"],\"id\":1",{"_index":5729,"t":{"5041":{"position":[[382,105]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_discardvalidatorvote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185",{"_index":2460,"t":{"3409":{"position":[[278,111],[421,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_discardvalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1130,"t":{"2798":{"position":[[1379,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getpendingvotes\",\"param",{"_index":2462,"t":{"3411":{"position":[[356,62],[450,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getsignermetrics\",\"params\":[\"1",{"_index":2465,"t":{"3413":{"position":[[1147,65],[1252,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getvalidatorsbyblockhash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256",{"_index":2466,"t":{"3415":{"position":[[231,139],[402,138]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getvalidatorsbyblocknumber\",\"params\":[\"latest",{"_index":1128,"t":{"2798":{"position":[[1039,81]]},"3291":{"position":[[152,81]]},"3319":{"position":[[162,81]]},"3417":{"position":[[430,81],[543,80]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"0x90626e6a67445aabf1c0615410d108d4733aa90b",{"_index":2149,"t":{"3289":{"position":[[229,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1122,"t":{"2798":{"position":[[264,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",tru",{"_index":2468,"t":{"3419":{"position":[[303,114],[449,113]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_changetargetgaslimit\",\"params\":[800000",{"_index":5731,"t":{"5045":{"position":[[248,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getextradata\",\"param",{"_index":5733,"t":{"5047":{"position":[[244,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getmingasprice\",\"params\":[],\"id\":1",{"_index":5736,"t":{"5049":{"position":[[455,70]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getminpriorityfee\",\"params\":[],\"id\":1",{"_index":5737,"t":{"5051":{"position":[[474,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setcoinbase\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"],\"id\":1",{"_index":5740,"t":{"5053":{"position":[[386,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setextradata\",\"params\":[\"0x0010203",{"_index":5742,"t":{"5055":{"position":[[297,71]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setmingasprice\",\"params\":[\"0x5dc\"],\"id\":1",{"_index":5746,"t":{"5057":{"position":[[483,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setminpriorityfee\",\"params\":[\"0x0a\"],\"id\":1",{"_index":5749,"t":{"5059":{"position":[[505,79]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_start\",\"params\":[],\"id\":1",{"_index":5751,"t":{"5061":{"position":[[326,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_stop\",\"params\":[],\"id\":1",{"_index":5752,"t":{"5063":{"position":[[202,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1",{"_index":5753,"t":{"5067":{"position":[[155,59],[237,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":1",{"_index":4103,"t":{"4305":{"position":[[616,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53",{"_index":5755,"t":{"5069":{"position":[[247,64],[334,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_peercount\",\"params\":[],\"id\":1",{"_index":1997,"t":{"3232":{"position":[[147,63]]},"3272":{"position":[[147,63]]},"3598":{"position":[[141,63],[2057,63]]},"3750":{"position":[[141,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_peercount\",\"params\":[],\"id\":53",{"_index":5756,"t":{"5071":{"position":[[214,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1",{"_index":5757,"t":{"5073":{"position":[[338,62],[423,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":53",{"_index":5758,"t":{"5075":{"position":[[656,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addaccountstoallowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032",{"_index":2472,"t":{"3423":{"position":[[466,113],[659,112]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addnodestoallowlist\",\"params\":[[\"\",\"\",\"\",\"enodenode4",{"_index":2793,"t":{"3594":{"position":[[319,125],[496,125],[673,125],[850,125]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addnodestoallowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2473,"t":{"3425":{"position":[[602,377],[1011,376]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_getaccountsallowlist\",\"param",{"_index":2474,"t":{"3427":{"position":[[242,67],[341,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_getnodesallowlist\",\"param",{"_index":2477,"t":{"3429":{"position":[[199,64],[295,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_reloadpermissionsfromfile\",\"param",{"_index":2481,"t":{"3431":{"position":[[262,72],[366,71]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_removeaccountsfromallowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032",{"_index":2482,"t":{"3433":{"position":[[471,118],[669,117]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_removenodesfromallowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2483,"t":{"3435":{"position":[[416,382],[830,381]]}}}],["jsonrpc\":\"2.0\",\"method\":\"plugins_reloadpluginconfig\",\"params\":[\"tech.pegasys.plus.plugin.kafka.kafkaplugin\"],\"id\":1",{"_index":5760,"t":{"5079":{"position":[[177,120]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8nvyqqznhnegf/3mysyb+heud4spwn90rz3goskrw",{"_index":2484,"t":{"3439":{"position":[[652,96],[864,95]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_debuggetstateroot\",\"params\":[\"xjdxvwoemrs2mckkwlgartzwixffu/tmvxi3ekssvtk=\",\"latest\"],\"id\":1",{"_index":2503,"t":{"3443":{"position":[[470,127],[620,125]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_deleteprivacygroup\",\"params\":[\"ewutvoc5nlvwmwtfdrrk/wvv0dcyqo/pauvx5bnebtk=\"],\"id\":1",{"_index":2505,"t":{"3445":{"position":[[209,119],[351,117]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_distributerawtransaction\",\"param",{"_index":2506,"t":{"3447":{"position":[[452,68],[774,67]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getcode\",\"params\":[\"1ljxsip4jop6urn9wyspewwqoop1c4npqjylb4fexua",{"_index":2511,"t":{"3451":{"position":[[587,99],[774,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_geteeatransactioncount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":2515,"t":{"3453":{"position":[[764,112],[1054,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getprivacyprecompileaddress\",\"param",{"_index":2556,"t":{"3461":{"position":[[294,74],[400,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getprivatetransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498",{"_index":2557,"t":{"3463":{"position":[[339,136],[507,135]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_gettransactioncount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":2564,"t":{"3465":{"position":[[611,109],[801,108]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_gettransactionreceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1",{"_index":2565,"t":{"3467":{"position":[[354,144],[521,142]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_discardvalidatorvote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185",{"_index":2607,"t":{"3477":{"position":[[278,111],[421,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_discardvalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1291,"t":{"2864":{"position":[[1945,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getpendingvotes\",\"param",{"_index":2608,"t":{"3479":{"position":[[356,62],[450,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getsignermetrics\",\"params\":[\"1",{"_index":2609,"t":{"3481":{"position":[[1147,65],[1252,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getvalidatorsbyblockhash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256",{"_index":2610,"t":{"3483":{"position":[[231,139],[402,138]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getvalidatorsbyblocknumber\",\"params\":[\"latest",{"_index":1290,"t":{"2864":{"position":[[1605,81]]},"3485":{"position":[[1318,81],[1431,80]]},"3674":{"position":[[162,81]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_proposevalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1289,"t":{"2864":{"position":[[830,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_proposevalidatorvote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",tru",{"_index":2612,"t":{"3487":{"position":[[303,114],[449,113]]}}}],["jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1",{"_index":5846,"t":{"5114":{"position":[[205,61],[289,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_block\",\"params\":[\"0x6\"],\"id\":1",{"_index":5764,"t":{"5083":{"position":[[798,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x0010000000000000000000000000000000000000\",\"gas\":\"0xfffff2\",\"gasprice\":\"0xef\",\"value\":\"0x0\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\",\"nonce\":\"0x0\"},[\"trace\"],\"latest\"],\"id\":1",{"_index":5776,"t":{"5085":{"position":[[864,513]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_callmany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"id\":1",{"_index":5783,"t":{"5087":{"position":[[847,342]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_callmany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"latest\"],\"id\":1",{"_index":5784,"t":{"5087":{"position":[[1212,350]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_filter\",\"params\":[{\"fromblock\":\"0x1\",\"toblock\":\"0x21\",\"after\":2,\"count\":2,\"fromaddress\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"]}],\"id\":415",{"_index":5789,"t":{"5089":{"position":[[640,181]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_get\",\"params\":[\"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\",[\"0x0\"]],\"id\":1",{"_index":5799,"t":{"5091":{"position":[[550,135]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_rawtransaction\",\"params\":[\"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\",[\"trace\"]],\"id\":1",{"_index":5808,"t":{"5093":{"position":[[678,166]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besupendingtransactions\",\"params\":[2,{\"from\":{\"eq\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"},\"gas\":{\"lt\":\"0x5209\"},\"nonce\":{\"gt\":\"0x1\"}}],\"id\":1",{"_index":5821,"t":{"5101":{"position":[[1339,185]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besustatistics\",\"params\":[],\"id\":1",{"_index":5831,"t":{"5103":{"position":[[514,71],[608,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besutransactions\",\"params\":[],\"id\":1",{"_index":5832,"t":{"5105":{"position":[[190,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"web3_clientversion\",\"params\":[],\"id\":1",{"_index":3126,"t":{"3748":{"position":[[67,68]]},"5109":{"position":[[169,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"web3_sha3\",\"params\":[\"0x68656c6c6f20776f726c00\"],\"id\":53",{"_index":5842,"t":{"5111":{"position":[[294,86]]}}}],["jump",{"_index":1749,"t":{"3093":{"position":[[207,5]]}}}],["justifi",{"_index":3339,"t":{"3839":{"position":[[251,9]]}}}],["jvm",{"_index":701,"t":{"2697":{"position":[[82,5],[137,3],[298,3]]},"2715":{"position":[[587,3],[606,3]]},"3105":{"position":[[178,3]]},"3748":{"position":[[756,3]]},"3970":{"position":[[59,5],[93,3],[254,3]]},"4033":{"position":[[105,5]]},"4037":{"position":[[60,5]]},"4050":{"position":[[36,5],[116,3],[194,3]]},"4056":{"position":[[110,5],[203,4],[221,3]]},"4695":{"position":[[374,4]]},"4925":{"position":[[123,3],[159,3],[549,6]]}}}],["jwt",{"_index":411,"t":{"2620":{"position":[[1030,5],[1075,3]]},"2628":{"position":[[91,5]]},"2654":{"position":[[82,5]]},"3552":{"position":[[385,3],[438,4]]},"3557":{"position":[[184,5],[292,5]]},"3565":{"position":[[157,3],[548,3],[642,5],[879,3],[927,3]]},"3567":{"position":[[13,3],[348,5]]},"3858":{"position":[[170,3]]},"3862":{"position":[[334,3],[452,3]]},"3894":{"position":[[170,3]]},"3898":{"position":[[332,3],[609,3],[726,3]]},"4252":{"position":[[497,3]]},"4281":{"position":[[146,6],[153,3],[300,3],[329,3],[407,3]]},"4283":{"position":[[178,3]]},"4291":{"position":[[68,3],[103,3]]},"4293":{"position":[[384,3],[440,3]]},"4295":{"position":[[11,3],[118,3],[179,3],[280,3],[473,3]]},"4297":{"position":[[142,3],[208,4],[249,3],[296,3]]},"4332":{"position":[[293,3]]},"4338":{"position":[[87,3],[138,3],[228,3],[261,3]]},"4563":{"position":[[154,3]]},"4567":{"position":[[338,3],[456,3]]},"4571":{"position":[[193,3],[448,3]]},"4573":{"position":[[195,3],[582,3]]},"4583":{"position":[[154,3]]},"4587":{"position":[[312,3],[569,3],[686,3]]},"4591":{"position":[[229,3],[475,3],[730,3]]},"4593":{"position":[[231,3],[782,3]]},"4607":{"position":[[3069,3],[3084,4],[3412,3],[3612,3],[4088,3],[4103,4],[4431,3],[4701,3],[4716,4],[5291,3]]},"4653":{"position":[[64,3],[101,3],[156,3]]},"4655":{"position":[[64,3],[91,3],[150,3]]},"4681":{"position":[[581,3]]},"4777":{"position":[[82,3],[134,3],[227,3],[253,3]]},"4779":{"position":[[81,3],[134,3],[257,3],[297,3],[383,4]]},"4825":{"position":[[80,3],[130,3],[219,3],[245,3]]},"4827":{"position":[[79,3],[130,3],[249,3],[289,3],[380,4]]}}}],["jwt/jwtsecret.hex",{"_index":4662,"t":{"4607":{"position":[[3457,18],[4476,18]]}}}],["jwt_token",{"_index":4096,"t":{"4305":{"position":[[152,12]]}}}],["jwtsecret.hex",{"_index":3399,"t":{"3858":{"position":[[63,13],[94,13]]},"3862":{"position":[[354,14],[394,13]]},"3894":{"position":[[63,13],[94,13]]},"3898":{"position":[[352,14],[629,14],[668,13]]},"4563":{"position":[[63,13],[94,13]]},"4567":{"position":[[358,14],[398,13]]},"4571":{"position":[[218,14],[394,13]]},"4573":{"position":[[220,14],[528,13]]},"4583":{"position":[[63,13],[94,13]]},"4587":{"position":[[332,14],[589,14],[628,13]]},"4591":{"position":[[254,14],[500,14],[676,13]]},"4593":{"position":[[256,14],[728,13]]}}}],["k8",{"_index":1358,"t":{"2950":{"position":[[79,6]]},"3345":{"position":[[79,6]]}}}],["kabelwavw7okoen1+oko+aba4hhz/7dacowvqz9nx5m",{"_index":1610,"t":{"3016":{"position":[[1850,47]]},"3465":{"position":[[721,48],[910,48]]}}}],["keccak",{"_index":3067,"t":{"3724":{"position":[[272,6]]},"3726":{"position":[[97,6],[1065,6]]},"5111":{"position":[[65,6]]}}}],["keccak('event1(uint256",{"_index":3096,"t":{"3726":{"position":[[771,25]]}}}],["keccak('event2(uint256",{"_index":3097,"t":{"3726":{"position":[[841,26]]}}}],["keccak('hello(uint256",{"_index":3087,"t":{"3726":{"position":[[255,25]]}}}],["keccak256(rlp",{"_index":1107,"t":{"2794":{"position":[[258,18]]},"2860":{"position":[[258,18]]},"2890":{"position":[[258,18]]}}}],["keep",{"_index":593,"t":{"2666":{"position":[[991,7]]},"2668":{"position":[[42,4]]},"3244":{"position":[[142,5]]},"3252":{"position":[[148,5]]},"3254":{"position":[[212,5]]},"3360":{"position":[[182,4]]},"3364":{"position":[[806,4]]},"3528":{"position":[[735,4]]},"3532":{"position":[[968,7]]},"3606":{"position":[[1109,4]]},"3614":{"position":[[98,4]]},"3616":{"position":[[816,4]]},"3618":{"position":[[1779,4]]},"3639":{"position":[[204,5]]},"3762":{"position":[[1262,5]]},"3794":{"position":[[526,4]]},"3812":{"position":[[201,5]]},"3874":{"position":[[341,5],[430,7]]},"4110":{"position":[[109,4],[289,4]]},"4147":{"position":[[413,7]]},"4236":{"position":[[109,4]]},"4293":{"position":[[1024,4]]},"4545":{"position":[[94,4]]},"4609":{"position":[[949,4]]},"4865":{"position":[[459,7]]}}}],["kept",{"_index":3280,"t":{"3812":{"position":[[1233,4]]},"4293":{"position":[[922,4]]},"4859":{"position":[[289,4],[431,4],[672,4]]},"4861":{"position":[[271,4]]},"4867":{"position":[[194,4]]},"5103":{"position":[[204,4]]}}}],["key",{"_index":34,"t":{"2561":{"position":[[135,4],[731,3],[944,3],[1161,3]]},"2579":{"position":[[335,4]]},"2586":{"position":[[301,3],[400,3],[469,3],[527,3]]},"2602":{"position":[[15,3],[153,3]]},"2624":{"position":[[655,4],[768,3]]},"2640":{"position":[[118,3],[219,4]]},"2656":{"position":[[142,3],[227,4]]},"2658":{"position":[[48,3],[185,4],[322,4],[450,4],[547,3]]},"2664":{"position":[[977,3]]},"2676":{"position":[[291,4],[308,3],[476,3],[487,3]]},"2709":{"position":[[232,4]]},"2749":{"position":[[341,4],[672,3],[714,4]]},"2757":{"position":[[131,3]]},"2766":{"position":[[231,3]]},"2782":{"position":[[1193,3]]},"2784":{"position":[[921,3]]},"2788":{"position":[[1029,3]]},"2816":{"position":[[396,4]]},"2838":{"position":[[281,4]]},"2846":{"position":[[281,3]]},"2850":{"position":[[854,3]]},"2854":{"position":[[1590,3]]},"2910":{"position":[[47,3],[89,4]]},"2931":{"position":[[160,4]]},"2938":{"position":[[198,3]]},"3012":{"position":[[466,3],[2069,3],[2280,3]]},"3028":{"position":[[323,3]]},"3036":{"position":[[1009,3]]},"3044":{"position":[[554,3],[653,3],[722,3],[780,3]]},"3107":{"position":[[69,3],[88,4],[154,4],[200,3],[246,3],[299,3],[324,3],[438,3],[616,4],[670,3],[809,3],[876,3],[945,3],[1003,3]]},"3113":{"position":[[322,4],[918,3],[1131,3],[1348,3]]},"3131":{"position":[[40,3],[655,3],[729,4]]},"3133":{"position":[[40,3],[1054,3],[1141,4]]},"3141":{"position":[[475,3]]},"3145":{"position":[[134,3],[166,3],[541,3]]},"3157":{"position":[[557,3]]},"3182":{"position":[[92,3],[145,3],[298,3],[373,3],[478,3],[503,3],[785,3],[952,4]]},"3188":{"position":[[72,3],[121,3],[214,3],[256,3],[325,3]]},"3192":{"position":[[299,3]]},"3220":{"position":[[103,3]]},"3222":{"position":[[285,3],[438,3],[509,3]]},"3224":{"position":[[1104,3],[1167,3],[1378,3],[1441,3],[1656,3],[1719,3],[2476,4]]},"3234":{"position":[[407,3]]},"3242":{"position":[[311,3],[1360,3]]},"3250":{"position":[[85,3],[4281,3]]},"3254":{"position":[[2911,4]]},"3262":{"position":[[103,3]]},"3264":{"position":[[838,3],[901,3],[1112,3],[1175,3],[1574,4]]},"3274":{"position":[[125,3]]},"3287":{"position":[[235,3],[333,3]]},"3303":{"position":[[80,3],[383,3],[1073,3],[1136,3],[1347,3],[1410,3],[1625,3],[1688,3],[2157,4]]},"3305":{"position":[[49,3],[174,3],[450,3],[504,4],[562,3],[633,3],[704,3],[773,3]]},"3309":{"position":[[24,3],[131,3],[181,3],[231,3],[281,3]]},"3319":{"position":[[1698,3],[1855,3],[1973,3],[2167,4],[2229,3],[2332,3],[2540,3],[2571,3],[2633,3]]},"3321":{"position":[[465,3]]},"3339":{"position":[[182,4],[214,4],[461,4]]},"3347":{"position":[[681,4],[718,3]]},"3362":{"position":[[80,3]]},"3405":{"position":[[449,4]]},"3441":{"position":[[60,4],[217,4]]},"3447":{"position":[[311,3],[328,3]]},"3449":{"position":[[249,4]]},"3501":{"position":[[703,5],[719,3]]},"3517":{"position":[[128,4]]},"3528":{"position":[[208,4]]},"3552":{"position":[[396,3]]},"3557":{"position":[[57,3],[71,3],[148,3]]},"3559":{"position":[[59,3],[135,4],[198,3],[217,3]]},"3561":{"position":[[80,3],[690,7]]},"3565":{"position":[[168,3],[559,3],[600,3],[890,3],[938,3]]},"3567":{"position":[[73,3]]},"3576":{"position":[[80,3],[383,3],[1081,3],[1144,3],[1355,3],[1418,3],[1633,3],[1696,3],[1954,4]]},"3578":{"position":[[57,3],[182,3],[458,3],[512,4],[570,3],[641,3],[712,3],[781,3]]},"3582":{"position":[[24,3],[139,3],[189,3],[239,3],[289,3]]},"3598":{"position":[[627,3],[807,3],[1099,4]]},"3606":{"position":[[268,3],[369,3],[1811,3],[2025,4],[2039,3]]},"3614":{"position":[[47,4],[997,3],[1639,4],[2712,4]]},"3616":{"position":[[1464,3],[1782,4],[1895,4],[1957,4]]},"3618":{"position":[[637,4],[750,4],[812,4],[985,4],[1850,4]]},"3622":{"position":[[294,4]]},"3628":{"position":[[395,4],[437,5]]},"3658":{"position":[[76,3],[375,3],[1064,3],[1127,3],[1338,3],[1401,3],[1616,3],[1679,3],[2142,4]]},"3660":{"position":[[49,3],[174,3],[450,3],[504,4],[562,3],[633,3],[704,3],[773,3]]},"3664":{"position":[[24,3],[131,3],[181,3],[231,3],[281,3]]},"3674":{"position":[[1631,3],[1788,3],[1906,3],[2100,4],[2162,3],[2265,3],[2473,3],[2504,3],[2566,3]]},"3676":{"position":[[308,3]]},"3680":{"position":[[331,5]]},"3687":{"position":[[41,4],[104,3],[167,3],[281,4],[323,3],[346,4]]},"3689":{"position":[[871,7],[1604,7],[2337,7],[3070,7],[3419,3]]},"3693":{"position":[[289,3],[567,3],[798,3],[857,3],[893,5],[1100,3],[1182,4]]},"3695":{"position":[[434,3],[781,3]]},"3697":{"position":[[434,3],[781,3]]},"3699":{"position":[[434,3],[781,3]]},"3703":{"position":[[390,4]]},"3705":{"position":[[185,3]]},"3710":{"position":[[157,4]]},"3728":{"position":[[37,3]]},"3756":{"position":[[290,4],[430,4],[1026,3],[1239,3],[1456,3]]},"3762":{"position":[[236,4]]},"3770":{"position":[[247,3]]},"3772":{"position":[[14,3]]},"3776":{"position":[[147,5]]},"3796":{"position":[[35,3],[98,3]]},"3798":{"position":[[42,3],[81,3],[171,3],[196,3],[211,3],[307,3],[318,3],[345,3]]},"3800":{"position":[[16,3],[110,3],[184,4],[256,3]]},"3802":{"position":[[70,3],[289,3]]},"3804":{"position":[[23,3],[59,3],[92,3],[142,3],[153,3],[170,3],[225,3],[250,3],[325,3],[379,3],[422,3]]},"3806":{"position":[[228,4],[760,3],[1260,3]]},"3829":{"position":[[199,4],[468,4]]},"3860":{"position":[[250,4],[359,3],[437,3]]},"3896":{"position":[[477,4],[638,3],[716,3]]},"3956":{"position":[[232,4]]},"3982":{"position":[[266,3]]},"4035":{"position":[[606,5]]},"4062":{"position":[[1421,3]]},"4074":{"position":[[67,3]]},"4126":{"position":[[358,3]]},"4128":{"position":[[187,3],[268,3]]},"4131":{"position":[[332,4],[365,4]]},"4133":{"position":[[40,4],[95,4],[291,6]]},"4203":{"position":[[482,4],[593,4],[678,4],[839,4],[927,4]]},"4207":{"position":[[21,3],[107,3]]},"4220":{"position":[[786,3],[957,4],[1079,4]]},"4252":{"position":[[508,3]]},"4255":{"position":[[37,3]]},"4281":{"position":[[311,4],[418,3]]},"4283":{"position":[[235,3]]},"4285":{"position":[[830,3]]},"4291":{"position":[[90,4]]},"4293":{"position":[[36,3],[74,3],[113,3],[200,4],[322,3],[496,4],[523,4],[549,4],[617,4],[715,4],[805,4],[885,3],[910,3],[955,4],[1042,4],[1158,4]]},"4295":{"position":[[387,3]]},"4297":{"position":[[164,3],[260,3],[307,3]]},"4387":{"position":[[57,3]]},"4389":{"position":[[176,3]]},"4391":{"position":[[81,3],[587,4],[592,3]]},"4393":{"position":[[116,3]]},"4395":{"position":[[75,3]]},"4397":{"position":[[44,3],[117,4]]},"4399":{"position":[[34,3],[64,3],[94,3],[163,3]]},"4401":{"position":[[54,3]]},"4403":{"position":[[125,3]]},"4405":{"position":[[57,3]]},"4407":{"position":[[122,3],[195,4]]},"4409":{"position":[[120,3],[1482,4]]},"4411":{"position":[[39,3],[1564,3]]},"4413":{"position":[[43,3]]},"4415":{"position":[[444,3]]},"4431":{"position":[[21,3],[68,3],[143,3],[175,3],[210,3]]},"4433":{"position":[[66,3],[93,3],[198,3],[224,3],[325,3],[351,3],[481,3],[575,3],[614,3],[648,3],[705,3]]},"4435":{"position":[[66,3],[101,3],[210,3],[244,3],[345,3],[379,3],[635,3],[669,3],[726,3]]},"4445":{"position":[[268,4],[1135,3]]},"4447":{"position":[[412,4]]},"4492":{"position":[[17,3],[54,3],[88,3]]},"4494":{"position":[[68,3]]},"4496":{"position":[[225,3]]},"4510":{"position":[[68,3]]},"4512":{"position":[[42,3]]},"4514":{"position":[[42,3]]},"4516":{"position":[[64,3]]},"4518":{"position":[[72,3]]},"4551":{"position":[[386,3]]},"4553":{"position":[[1106,3]]},"4555":{"position":[[751,3]]},"4565":{"position":[[218,4],[346,3],[424,3]]},"4573":{"position":[[420,3],[464,3],[922,4]]},"4585":{"position":[[437,4],[598,3],[676,3]]},"4593":{"position":[[495,3],[539,3],[1216,4]]},"4607":{"position":[[540,3],[1391,4],[1440,4],[1861,3],[1921,3],[3416,4],[4435,4]]},"4613":{"position":[[557,3]]},"4623":{"position":[[352,3]]},"4681":{"position":[[592,3]]},"4687":{"position":[[57,3],[99,3],[156,3],[188,3]]},"4741":{"position":[[70,3],[101,3],[210,3],[263,3],[305,3],[343,3],[375,3],[417,4],[446,3],[482,4],[506,3]]},"4777":{"position":[[257,3]]},"4779":{"position":[[92,3],[145,3],[268,3],[319,3]]},"4803":{"position":[[332,3]]},"4825":{"position":[[249,3]]},"4827":{"position":[[90,3],[141,3],[260,3],[311,3]]},"4839":{"position":[[338,3],[378,3]]},"4901":{"position":[[412,3]]},"4903":{"position":[[624,3],[670,3]]},"4937":{"position":[[349,3],[1188,6]]},"4951":{"position":[[121,3],[181,3]]},"4963":{"position":[[601,4]]},"4995":{"position":[[321,5],[370,4],[1124,4],[1146,3],[2183,6]]},"5033":{"position":[[298,4]]}}}],["key(0",{"_index":3758,"t":{"4062":{"position":[[2321,7]]}}}],["key(511",{"_index":3761,"t":{"4062":{"position":[[2462,9]]}}}],["key.pub",{"_index":2165,"t":{"3305":{"position":[[572,7],[643,7],[714,7],[781,7]]},"3309":{"position":[[143,7],[193,7],[243,7],[293,7]]},"3578":{"position":[[580,7],[651,7],[722,7],[789,7]]},"3582":{"position":[[151,7],[201,7],[251,7],[301,7]]},"3660":{"position":[[572,7],[643,7],[714,7],[781,7]]},"3664":{"position":[[143,7],[193,7],[243,7],[293,7]]}}}],["key/valu",{"_index":3621,"t":{"3982":{"position":[[244,9]]}}}],["key:valu",{"_index":4585,"t":{"4555":{"position":[[236,9]]}}}],["key=\"invalid_tx_remov",{"_index":3909,"t":{"4165":{"position":[[853,25]]}}}],["keycloak",{"_index":4105,"t":{"4305":{"position":[[734,8]]},"4307":{"position":[[21,8]]}}}],["keydata",{"_index":2763,"t":{"3561":{"position":[[717,10]]},"3689":{"position":[[898,10],[1631,10],[2364,10],[3097,10]]}}}],["keygen",{"_index":2998,"t":{"3687":{"position":[[207,6]]}}}],["keypair",{"_index":3774,"t":{"4076":{"position":[[73,7]]},"4777":{"position":[[292,7]]},"4825":{"position":[[284,7]]}}}],["keypairutil",{"_index":2202,"t":{"3319":{"position":[[1945,11],[2297,11]]},"3674":{"position":[[1878,11],[2230,11]]},"4062":{"position":[[1381,11]]}}}],["keys.j",{"_index":2902,"t":{"3628":{"position":[[341,7]]}}}],["keys:/opt/besu/publ",{"_index":3201,"t":{"3776":{"position":[[125,21]]}}}],["keys=:30303",{"_index":742,"t":{"2707":{"position":[[389,20]]},"3954":{"position":[[389,20]]}}}],["localportws>:8546",{"_index":741,"t":{"2707":{"position":[[367,18]]},"3954":{"position":[[367,18]]}}}],["locat",{"_index":164,"t":{"2577":{"position":[[176,9]]},"2634":{"position":[[172,8]]},"2709":{"position":[[281,8],[348,9]]},"2735":{"position":[[39,8],[222,8]]},"2737":{"position":[[104,8]]},"3052":{"position":[[517,9]]},"3080":{"position":[[144,7]]},"3085":{"position":[[288,10]]},"3139":{"position":[[204,9]]},"3385":{"position":[[2793,8]]},"3689":{"position":[[3388,8]]},"3703":{"position":[[254,8]]},"3718":{"position":[[542,8]]},"3774":{"position":[[190,8]]},"3804":{"position":[[75,9]]},"3956":{"position":[[281,8],[348,9]]},"3968":{"position":[[1691,8]]},"4029":{"position":[[523,8],[624,8]]},"4048":{"position":[[314,7]]},"4163":{"position":[[819,8]]},"4407":{"position":[[1255,8]]},"4494":{"position":[[119,8]]},"4933":{"position":[[558,8]]},"4935":{"position":[[267,8]]}}}],["lock",{"_index":1760,"t":{"3097":{"position":[[11,6],[249,7]]},"4080":{"position":[[101,4]]}}}],["log",{"_index":188,"t":{"2579":{"position":[[312,4]]},"2586":{"position":[[620,3]]},"2590":{"position":[[458,4]]},"2628":{"position":[[1392,4],[1547,4],[1631,3]]},"2715":{"position":[[420,4]]},"2739":{"position":[[3,3]]},"2790":{"position":[[1826,4],[1851,3]]},"2810":{"position":[[844,4]]},"2856":{"position":[[1578,4],[1603,3]]},"2872":{"position":[[840,4]]},"2904":{"position":[[935,4]]},"2924":{"position":[[499,5]]},"2954":{"position":[[103,7]]},"2956":{"position":[[38,3],[152,4],[480,4],[520,3],[584,3],[617,3],[672,3],[719,4],[819,4],[882,4]]},"2978":{"position":[[99,4],[190,4]]},"2980":{"position":[[31,4]]},"2989":{"position":[[203,3]]},"2991":{"position":[[400,4],[437,4],[1057,4],[1334,3],[1470,5]]},"2996":{"position":[[111,7],[398,4]]},"2998":{"position":[[67,4],[445,5],[499,5],[562,5],[622,3],[697,3],[796,3]]},"3002":{"position":[[31,3],[145,4],[297,4],[419,3],[471,4],[634,4]]},"3022":{"position":[[803,7]]},"3028":{"position":[[1178,3]]},"3072":{"position":[[343,4]]},"3133":{"position":[[427,4],[447,3],[1270,5]]},"3234":{"position":[[12,4]]},"3287":{"position":[[62,4]]},"3319":{"position":[[549,4],[1809,4]]},"3366":{"position":[[819,3]]},"3455":{"position":[[271,3],[436,3]]},"3457":{"position":[[20,4],[198,3],[352,4],[537,3]]},"3459":{"position":[[20,4],[174,3],[367,3]]},"3467":{"position":[[930,7]]},"3469":{"position":[[10,3],[57,4],[136,4]]},"3485":{"position":[[894,3]]},"3534":{"position":[[328,3]]},"3546":{"position":[[296,3]]},"3548":{"position":[[439,3]]},"3550":{"position":[[292,3]]},"3612":{"position":[[1016,4],[1726,4],[1811,4]]},"3616":{"position":[[2765,5]]},"3618":{"position":[[2113,4]]},"3622":{"position":[[947,4],[1001,4]]},"3628":{"position":[[1680,5],[3672,3]]},"3635":{"position":[[148,7]]},"3637":{"position":[[871,4]]},"3643":{"position":[[265,5]]},"3674":{"position":[[549,4],[1742,4]]},"3691":{"position":[[222,3]]},"3703":{"position":[[182,4]]},"3720":{"position":[[67,4],[137,4],[174,5],[208,5],[214,3],[334,4],[374,4],[514,4],[573,4],[648,3]]},"3722":{"position":[[0,3],[142,3]]},"3724":{"position":[[61,4],[257,3],[317,3],[888,3]]},"3726":{"position":[[21,3],[321,3],[1241,3]]},"3728":{"position":[[51,4],[116,3],[506,3]]},"3734":{"position":[[135,7]]},"3736":{"position":[[930,4],[997,4],[1075,4],[1784,4],[1811,4],[1843,3],[1880,4],[1907,4],[1940,3]]},"3740":{"position":[[272,4],[475,4]]},"3800":{"position":[[36,3]]},"3802":{"position":[[163,4]]},"3808":{"position":[[838,3]]},"3843":{"position":[[414,4],[592,4]]},"3866":{"position":[[101,4],[111,4]]},"3902":{"position":[[101,4],[111,4]]},"4010":{"position":[[370,4]]},"4014":{"position":[[11,4],[50,3]]},"4043":{"position":[[302,5],[391,4]]},"4058":{"position":[[69,4],[256,4]]},"4060":{"position":[[51,4],[108,5],[514,3],[743,3],[785,4]]},"4062":{"position":[[45,4],[103,3],[259,4],[343,4],[463,5],[570,4],[790,4],[1103,5],[1278,3],[1292,4],[1531,4],[1640,4],[1768,5],[1875,4],[2144,7],[2229,4],[2722,4],[2816,4],[3246,3]]},"4064":{"position":[[62,3]]},"4066":{"position":[[175,3]]},"4068":{"position":[[346,3]]},"4070":{"position":[[286,3]]},"4072":{"position":[[63,4],[336,3]]},"4074":{"position":[[299,3]]},"4076":{"position":[[287,3]]},"4084":{"position":[[78,3]]},"4086":{"position":[[409,3]]},"4098":{"position":[[338,3],[394,3]]},"4110":{"position":[[941,4],[1216,6],[1336,6],[1795,3]]},"4120":{"position":[[12,7],[125,7],[207,4],[257,3],[408,3]]},"4139":{"position":[[100,7],[194,3]]},"4151":{"position":[[1853,3],[1904,4]]},"4159":{"position":[[22,7],[68,7],[106,3],[168,5],[261,3]]},"4161":{"position":[[10,7],[49,7],[74,7],[135,4],[146,3],[359,3]]},"4163":{"position":[[25,7],[218,7],[1092,7]]},"4165":{"position":[[8,3],[109,3],[178,3],[265,3],[439,7]]},"4167":{"position":[[32,7],[64,3],[105,3]]},"4259":{"position":[[29,5],[105,4],[304,4],[506,5]]},"4261":{"position":[[181,3]]},"4263":{"position":[[261,3]]},"4265":{"position":[[11,4],[1415,4]]},"4271":{"position":[[11,4],[155,4]]},"4358":{"position":[[17,3],[522,3]]},"4363":{"position":[[198,4],[467,5]]},"4369":{"position":[[41,5]]},"4371":{"position":[[85,4],[193,4],[229,4]]},"4375":{"position":[[20,4],[57,4],[168,4],[195,4],[350,4],[418,4],[519,5],[582,5],[691,4],[926,4],[983,3],[1074,4],[1109,4],[1135,3],[1152,4],[1245,8],[1310,7],[2146,4],[2307,7],[2420,7]]},"4383":{"position":[[208,5],[527,4]]},"4387":{"position":[[461,5]]},"4391":{"position":[[75,5],[442,4],[538,5],[694,5]]},"4393":{"position":[[103,3],[151,3],[215,4],[247,3],[290,3],[392,4],[407,3],[495,4],[510,3],[587,4],[602,3],[673,4],[688,3],[739,3],[799,4],[880,3]]},"4401":{"position":[[0,3]]},"4403":{"position":[[363,3]]},"4411":{"position":[[691,4],[711,3],[839,5]]},"4425":{"position":[[38,3],[184,3],[267,3],[325,3],[398,3],[469,3],[618,3]]},"4437":{"position":[[547,7]]},"4447":{"position":[[53,7],[186,3],[240,3],[368,4],[666,4],[841,3],[895,3],[986,3],[1013,3],[1085,5],[1249,4]]},"4510":{"position":[[410,5]]},"4525":{"position":[[190,3]]},"4575":{"position":[[85,4],[95,4]]},"4595":{"position":[[85,4],[95,4]]},"4621":{"position":[[70,3],[118,3],[197,3],[259,3],[399,3],[434,3],[516,4],[561,3],[638,4],[716,3]]},"4629":{"position":[[83,4],[132,4],[211,4],[285,4]]},"4631":{"position":[[77,4],[126,4],[219,4],[282,4],[315,4]]},"4691":{"position":[[141,7],[160,3]]},"4761":{"position":[[63,7],[99,7],[156,7],[218,4]]},"4811":{"position":[[65,4],[96,4],[147,4],[227,4],[322,4]]},"4893":{"position":[[12,3],[66,3],[84,5],[112,3],[181,3],[233,3],[318,3],[369,3],[1073,4]]},"4895":{"position":[[17,3],[219,3],[534,3]]},"4899":{"position":[[15,4]]},"4977":{"position":[[219,4],[1210,7],[2862,7],[4132,5],[5038,6],[6018,6]]},"4985":{"position":[[454,3]]},"4987":{"position":[[20,4],[68,3],[154,3],[292,4],[426,3]]},"4989":{"position":[[20,4],[78,3],[164,3],[224,4],[458,4],[624,3],[2749,7]]},"5007":{"position":[[1069,7],[2302,4],[3202,7]]},"5027":{"position":[[10,3],[34,4],[112,4]]}}}],["log4j",{"_index":3874,"t":{"4159":{"position":[[10,5]]},"4163":{"position":[[66,5],[127,5],[920,5]]},"4165":{"position":[[409,5]]}}}],["log4j_configuration_fil",{"_index":3898,"t":{"4163":{"position":[[787,24]]}}}],["log4j_configuration_file=./debug.xml",{"_index":3899,"t":{"4163":{"position":[[1149,36]]}}}],["log_filt",{"_index":5131,"t":{"4893":{"position":[[243,11]]}}}],["logger",{"_index":1552,"t":{"2991":{"position":[[1078,7]]},"2998":{"position":[[26,6]]},"4163":{"position":[[611,9],[696,10]]},"4165":{"position":[[1099,9],[1109,7],[1219,9],[1303,10]]}}}],["logger=splunk",{"_index":1547,"t":{"2991":{"position":[[755,13]]}}}],["logging=\"debug",{"_index":4822,"t":{"4691":{"position":[[120,15]]}}}],["logging=[,info\",\"params\":[[,/ibft",{"_index":2204,"t":{"3319":{"position":[[2122,13],[2493,13]]}}}],["network>/qbft",{"_index":2996,"t":{"3674":{"position":[[2055,13],[2426,13]]}}}],["networkfil",{"_index":2163,"t":{"3305":{"position":[[226,12],[469,13]]},"3578":{"position":[[234,12],[477,13]]},"3660":{"position":[[226,12],[469,13]]}}}],["networkrunn",{"_index":2698,"t":{"3534":{"position":[[701,13]]},"3546":{"position":[[603,13]]},"3548":{"position":[[738,13]]},"3550":{"position":[[599,13]]},"4098":{"position":[[738,13]]}}}],["never",{"_index":50,"t":{"2561":{"position":[[475,5]]},"2784":{"position":[[644,5]]},"2850":{"position":[[580,5]]},"3113":{"position":[[662,5]]},"3756":{"position":[[770,5]]},"4293":{"position":[[935,5]]},"4360":{"position":[[106,5],[276,5]]}}}],["new",{"_index":171,"t":{"2577":{"position":[[495,3]]},"2606":{"position":[[203,3]]},"2618":{"position":[[193,3]]},"2642":{"position":[[1106,3]]},"2735":{"position":[[372,3]]},"2751":{"position":[[7,3],[198,3],[405,3]]},"2778":{"position":[[268,3]]},"2780":{"position":[[126,3],[409,3],[890,3],[1861,3],[2231,3]]},"2784":{"position":[[740,3]]},"2786":{"position":[[1619,3],[1725,3],[1822,3],[2027,3],[2397,3]]},"2790":{"position":[[29,3],[194,3],[368,3],[580,3],[718,3],[787,3]]},"2810":{"position":[[37,3]]},"2812":{"position":[[37,3]]},"2814":{"position":[[37,3]]},"2850":{"position":[[673,3]]},"2852":{"position":[[16004,3],[16110,3],[16207,3],[16412,3],[16778,3]]},"2856":{"position":[[29,3],[211,3],[385,3],[597,3],[735,3],[804,3]]},"2866":{"position":[[269,3]]},"2872":{"position":[[37,3]]},"2874":{"position":[[37,3]]},"2878":{"position":[[37,3]]},"2904":{"position":[[37,3]]},"2906":{"position":[[37,3]]},"2956":{"position":[[516,3]]},"2962":{"position":[[864,3]]},"2964":{"position":[[777,3]]},"2968":{"position":[[288,3]]},"3074":{"position":[[217,3]]},"3087":{"position":[[20,3]]},"3103":{"position":[[500,3]]},"3123":{"position":[[285,3],[431,3]]},"3139":{"position":[[336,3]]},"3204":{"position":[[376,3]]},"3206":{"position":[[38,3]]},"3208":{"position":[[128,3]]},"3242":{"position":[[509,3],[884,3],[1807,3]]},"3244":{"position":[[409,3],[781,3]]},"3250":{"position":[[281,3],[1713,3],[1912,3],[3162,3]]},"3254":{"position":[[1651,3],[1691,3]]},"3283":{"position":[[56,3]]},"3285":{"position":[[42,3]]},"3287":{"position":[[85,3]]},"3289":{"position":[[19,3]]},"3291":{"position":[[16,3]]},"3319":{"position":[[2321,3],[2536,3]]},"3331":{"position":[[276,3],[520,3],[561,3]]},"3333":{"position":[[803,3],[844,3]]},"3339":{"position":[[264,3],[892,3]]},"3341":{"position":[[106,3],[443,3]]},"3364":{"position":[[883,3]]},"3485":{"position":[[964,3]]},"3493":{"position":[[495,3]]},"3515":{"position":[[430,3]]},"3561":{"position":[[76,3]]},"3618":{"position":[[1092,3]]},"3620":{"position":[[223,3]]},"3674":{"position":[[2254,3],[2469,3]]},"3705":{"position":[[258,3],[287,3]]},"3718":{"position":[[330,3],[432,3],[538,3],[604,3],[671,3],[688,3]]},"3738":{"position":[[766,3]]},"3752":{"position":[[453,3]]},"3756":{"position":[[1888,3],[1965,3],[2064,3],[2186,3]]},"3762":{"position":[[720,3]]},"3770":{"position":[[0,3],[353,3],[522,3]]},"3772":{"position":[[41,3]]},"3774":{"position":[[286,3]]},"3776":{"position":[[21,3],[506,3]]},"3780":{"position":[[8,3],[411,3],[587,3]]},"3786":{"position":[[728,3],[1677,3]]},"3816":{"position":[[271,3]]},"3819":{"position":[[188,3],[412,3],[548,3],[634,3],[719,3]]},"3876":{"position":[[1007,3],[1535,3]]},"3918":{"position":[[1356,3],[2705,3]]},"3922":{"position":[[346,3]]},"4012":{"position":[[122,3]]},"4016":{"position":[[44,3]]},"4018":{"position":[[44,3]]},"4020":{"position":[[94,3]]},"4029":{"position":[[152,3]]},"4031":{"position":[[201,3]]},"4084":{"position":[[141,3]]},"4110":{"position":[[648,3],[1941,3]]},"4133":{"position":[[181,3],[253,3]]},"4181":{"position":[[224,3]]},"4183":{"position":[[44,3]]},"4238":{"position":[[147,3],[321,3]]},"4289":{"position":[[1220,3]]},"4355":{"position":[[159,3]]},"4371":{"position":[[73,3]]},"4373":{"position":[[196,3],[323,3],[545,3]]},"4375":{"position":[[37,3]]},"4377":{"position":[[444,3]]},"4431":{"position":[[201,3]]},"4514":{"position":[[122,3],[199,3],[299,3]]},"4569":{"position":[[7,3]]},"4589":{"position":[[7,3]]},"4607":{"position":[[1556,3]]},"4609":{"position":[[507,3],[592,3]]},"4849":{"position":[[352,3]]},"5023":{"position":[[38,3],[253,3]]},"5025":{"position":[[29,3],[59,3]]},"5029":{"position":[[29,3],[74,3]]},"5055":{"position":[[7,3]]}}}],["newaddress",{"_index":1143,"t":{"2814":{"position":[[239,12],[710,12],[779,12]]},"2878":{"position":[[239,12],[574,12],[643,12]]}}}],["newer",{"_index":1049,"t":{"2786":{"position":[[2228,5]]},"2852":{"position":[[16609,5]]},"3383":{"position":[[2467,5]]},"3814":{"position":[[755,5]]},"3918":{"position":[[186,5]]},"4847":{"position":[[1024,5]]}}}],["newest",{"_index":4289,"t":{"4389":{"position":[[394,6]]}}}],["newestblock",{"_index":5383,"t":{"4967":{"position":[[525,12]]}}}],["newhead",{"_index":3652,"t":{"4010":{"position":[[361,8]]},"4373":{"position":[[64,8],[619,12]]}}}],["newli",{"_index":2004,"t":{"3242":{"position":[[201,5]]},"3776":{"position":[[423,5]]}}}],["newnod",{"_index":3197,"t":{"3774":{"position":[[309,9]]},"3776":{"position":[[60,8],[99,7]]},"3778":{"position":[[245,7]]}}}],["newnode:9545",{"_index":3219,"t":{"3778":{"position":[[357,14]]}}}],["newpendingtransact",{"_index":3299,"t":{"3823":{"position":[[413,22]]},"4010":{"position":[[375,22]]},"4377":{"position":[[93,22],[703,26],[1150,26]]}}}],["newvalidatorcontractaddress",{"_index":991,"t":{"2780":{"position":[[2179,29],[2739,29]]}}}],["newvalu",{"_index":1138,"t":{"2810":{"position":[[240,10],[499,10]]},"2812":{"position":[[226,10],[505,10],[566,10],[627,10]]},"2872":{"position":[[240,10],[497,10]]},"2874":{"position":[[226,10],[503,10],[564,10],[625,10]]},"2904":{"position":[[240,10],[525,10]]},"2906":{"position":[[238,10],[521,10]]}}}],["next",{"_index":904,"t":{"2751":{"position":[[317,4]]},"2784":{"position":[[345,4]]},"2790":{"position":[[713,4]]},"2798":{"position":[[448,4]]},"2802":{"position":[[167,4]]},"2850":{"position":[[280,4]]},"2856":{"position":[[730,4]]},"2864":{"position":[[1014,4],[2442,4]]},"2880":{"position":[[326,4]]},"2896":{"position":[[399,4]]},"2900":{"position":[[162,4]]},"2962":{"position":[[803,5]]},"3204":{"position":[[465,5]]},"3339":{"position":[[962,4]]},"3341":{"position":[[513,4]]},"3485":{"position":[[489,4],[750,4]]},"3618":{"position":[[166,4]]},"3760":{"position":[[868,4]]},"3762":{"position":[[386,4]]},"3780":{"position":[[550,4]]},"3812":{"position":[[273,4]]},"3860":{"position":[[74,4]]},"3866":{"position":[[3270,4]]},"3896":{"position":[[74,4]]},"3902":{"position":[[3274,4]]},"4006":{"position":[[31,4],[581,4]]},"4222":{"position":[[335,4]]},"4328":{"position":[[1068,4]]},"4389":{"position":[[373,4]]},"4399":{"position":[[158,4]]},"4541":{"position":[[691,4]]},"4565":{"position":[[58,4]]},"4575":{"position":[[3227,4]]},"4585":{"position":[[58,4]]},"4595":{"position":[[3227,4]]},"4607":{"position":[[2592,5]]},"4911":{"position":[[583,4]]},"5005":{"position":[[97,4]]}}}],["next.j",{"_index":3166,"t":{"3758":{"position":[[625,7]]},"3762":{"position":[[36,8]]}}}],["nextkey",{"_index":4306,"t":{"4399":{"position":[[137,7]]},"4911":{"position":[[553,8],[1303,10]]},"4937":{"position":[[1284,10]]}}}],["ng",{"_index":4617,"t":{"4607":{"position":[[1035,2],[1219,5],[1571,2],[1830,2]]}}}],["nginx",{"_index":2828,"t":{"3612":{"position":[[2053,5],[2167,5],[2210,5],[2294,5],[2378,6],[2468,6],[3020,5],[3084,5]]},"3624":{"position":[[177,5],[258,5],[301,5],[382,5],[463,6],[550,6],[1532,5]]},"4029":{"position":[[192,6]]}}}],["nginx/ingress",{"_index":2830,"t":{"3612":{"position":[[2280,13]]},"3624":{"position":[[368,13]]}}}],["nimbu",{"_index":3493,"t":{"3876":{"position":[[272,6],[522,6],[680,6],[733,6]]}}}],["nioeventloopgroup",{"_index":3823,"t":{"4120":{"position":[[451,17]]}}}],["no]memori",{"_index":4425,"t":{"4474":{"position":[[295,11]]}}}],["no_execut",{"_index":4641,"t":{"4607":{"position":[[1962,12]]}}}],["no_schedul",{"_index":4640,"t":{"4607":{"position":[[1902,13]]}}}],["node",{"_index":121,"t":{"2567":{"position":[[31,4],[101,5],[198,4],[235,5],[423,5]]},"2569":{"position":[[4,4]]},"2575":{"position":[[33,4],[50,4],[141,4],[227,4],[320,5],[449,5],[511,6]]},"2577":{"position":[[114,5]]},"2579":{"position":[[330,4]]},"2582":{"position":[[71,5],[148,5],[266,4],[324,4],[458,4],[512,4],[550,5],[611,4]]},"2586":{"position":[[99,6],[193,5],[574,5],[674,4],[796,5],[911,4]]},"2588":{"position":[[7,4],[35,4],[121,4],[184,4],[260,4],[408,5]]},"2596":{"position":[[63,4]]},"2598":{"position":[[88,6],[187,6]]},"2600":{"position":[[494,4]]},"2602":{"position":[[243,4],[294,4],[331,5],[358,5]]},"2604":{"position":[[32,5],[121,5],[235,5],[273,4],[316,4]]},"2606":{"position":[[185,5]]},"2608":{"position":[[461,5],[554,5],[601,5],[620,5]]},"2614":{"position":[[308,5]]},"2616":{"position":[[603,5]]},"2620":{"position":[[80,5],[162,5],[252,5],[393,4],[469,5],[609,5],[659,6]]},"2638":{"position":[[183,5],[364,5]]},"2644":{"position":[[30,5],[164,5]]},"2646":{"position":[[376,5],[461,4],[498,5]]},"2650":{"position":[[87,5]]},"2656":{"position":[[425,5],[541,5],[623,5]]},"2658":{"position":[[17,5],[83,4],[131,4],[172,4],[342,5],[412,4],[438,4],[535,4]]},"2670":{"position":[[82,4],[162,5],[208,4],[239,5],[257,4],[361,5],[489,5],[575,5]]},"2672":{"position":[[88,4],[515,4]]},"2676":{"position":[[171,4],[1227,5],[1343,5],[1925,5],[2051,5],[2232,5]]},"2693":{"position":[[255,5]]},"2697":{"position":[[213,4]]},"2701":{"position":[[42,5],[68,7],[86,5]]},"2703":{"position":[[43,4],[114,4]]},"2709":{"position":[[197,4],[221,4]]},"2711":{"position":[[9,4]]},"2713":{"position":[[18,6],[47,4]]},"2715":{"position":[[488,5]]},"2717":{"position":[[71,5]]},"2723":{"position":[[255,4]]},"2725":{"position":[[109,4]]},"2727":{"position":[[9,4],[363,4],[825,4]]},"2729":{"position":[[9,4],[491,5],[525,4],[566,4]]},"2731":{"position":[[55,5]]},"2733":{"position":[[59,5]]},"2735":{"position":[[376,5]]},"2737":{"position":[[24,4],[50,5],[300,5]]},"2739":{"position":[[85,5],[144,5]]},"2745":{"position":[[73,5],[102,6],[243,5],[288,5],[402,6],[438,6],[553,6]]},"2747":{"position":[[11,5]]},"2749":{"position":[[329,4],[426,5],[667,4],[1281,5]]},"2751":{"position":[[178,4],[270,6],[343,5],[384,5]]},"2755":{"position":[[302,5]]},"2757":{"position":[[152,5],[302,6]]},"2778":{"position":[[553,5],[2252,5],[2342,6]]},"2780":{"position":[[1687,5],[1777,6],[3315,5],[3405,6]]},"2784":{"position":[[843,5]]},"2786":{"position":[[1171,5],[1351,5],[1623,5],[1729,4],[2798,4]]},"2792":{"position":[[251,4]]},"2804":{"position":[[182,5]]},"2806":{"position":[[202,5]]},"2810":{"position":[[70,5],[727,5]]},"2812":{"position":[[63,5],[1096,5]]},"2814":{"position":[[70,5],[1397,5]]},"2816":{"position":[[173,5],[483,5],[538,5],[633,5]]},"2842":{"position":[[14,6],[209,5],[219,4]]},"2844":{"position":[[162,6],[216,4]]},"2850":{"position":[[776,5]]},"2852":{"position":[[15234,5],[15736,5],[16008,5],[16114,4],[17159,4]]},"2854":{"position":[[2245,5]]},"2858":{"position":[[251,4]]},"2866":{"position":[[620,6]]},"2868":{"position":[[178,5]]},"2872":{"position":[[70,5],[723,5]]},"2874":{"position":[[63,5],[1092,5]]},"2876":{"position":[[123,5],[1091,5]]},"2878":{"position":[[70,5],[1125,5]]},"2892":{"position":[[11,4]]},"2904":{"position":[[70,5],[818,5]]},"2906":{"position":[[69,5],[776,5]]},"2910":{"position":[[42,4]]},"2920":{"position":[[89,6]]},"2922":{"position":[[47,4],[122,4]]},"2924":{"position":[[42,5],[76,5],[262,4],[494,4],[538,5],[652,6]]},"2928":{"position":[[46,4],[108,4],[277,4],[471,4],[494,5],[530,4]]},"2930":{"position":[[62,5],[96,5],[204,5]]},"2931":{"position":[[94,4],[309,6]]},"2954":{"position":[[27,4]]},"2956":{"position":[[216,5]]},"2958":{"position":[[411,5],[568,6]]},"2962":{"position":[[456,4],[797,5]]},"2968":{"position":[[82,4],[153,5],[185,5],[274,6]]},"2972":{"position":[[71,4],[346,4]]},"2976":{"position":[[3412,5]]},"2982":{"position":[[26,4]]},"2991":{"position":[[694,4]]},"3004":{"position":[[5,4],[106,4]]},"3006":{"position":[[247,4],[332,4],[520,4]]},"3010":{"position":[[80,6]]},"3012":{"position":[[201,5],[865,5]]},"3022":{"position":[[339,5]]},"3028":{"position":[[86,4],[368,4],[395,4],[768,5],[778,4],[898,4],[994,4],[1036,5],[1111,4],[1132,5],[1232,4],[1354,5],[1469,4]]},"3030":{"position":[[22,5]]},"3032":{"position":[[29,4]]},"3034":{"position":[[34,5],[84,4],[141,5],[170,4],[518,5],[572,5],[902,4],[930,4],[956,4],[1048,5],[1097,4]]},"3036":{"position":[[4,5],[81,4],[159,4],[668,5],[772,4],[1054,4]]},"3038":{"position":[[10,4],[55,5]]},"3040":{"position":[[14,5],[40,4],[354,4]]},"3042":{"position":[[12,5],[78,4],[133,5],[158,5],[187,5],[270,5],[310,4],[343,5],[381,4],[397,4],[416,5],[425,4],[433,4],[452,5],[461,4],[469,4],[516,4],[535,4],[556,4]]},"3044":{"position":[[92,4],[345,4],[371,4],[458,5],[1000,4],[1034,4],[1159,5],[1176,4],[1297,5],[1425,4],[1467,4],[1516,4],[1591,4],[1599,4],[1659,4],[1736,4],[1804,4],[1861,5],[1867,4],[1973,4],[1991,4],[2045,5],[2164,4],[2194,4],[2227,4],[2288,4],[2324,4]]},"3048":{"position":[[42,4],[350,4]]},"3052":{"position":[[48,5],[139,5],[305,5],[344,5],[416,6],[503,6],[588,5],[675,5],[979,5]]},"3060":{"position":[[52,5]]},"3072":{"position":[[177,4]]},"3080":{"position":[[128,5]]},"3085":{"position":[[38,4],[129,5]]},"3087":{"position":[[60,6],[127,6],[182,5]]},"3095":{"position":[[103,5],[283,5]]},"3103":{"position":[[385,4],[474,4],[548,4],[772,5]]},"3107":{"position":[[286,4]]},"3123":{"position":[[97,5]]},"3139":{"position":[[819,4],[839,4]]},"3141":{"position":[[315,4]]},"3145":{"position":[[362,6]]},"3153":{"position":[[715,4]]},"3160":{"position":[[504,5]]},"3168":{"position":[[69,5],[108,5],[257,5],[323,5],[450,5]]},"3170":{"position":[[69,5],[124,5],[215,5],[277,4]]},"3172":{"position":[[69,5],[124,5],[207,5],[269,4]]},"3174":{"position":[[69,5],[121,5],[206,5],[277,4]]},"3176":{"position":[[69,5],[124,5],[203,5],[247,4]]},"3182":{"position":[[465,4]]},"3188":{"position":[[275,5]]},"3198":{"position":[[222,4]]},"3200":{"position":[[128,5],[148,6]]},"3208":{"position":[[344,5]]},"3220":{"position":[[5,4],[70,4],[98,4],[189,6],[226,5],[252,4],[274,4],[296,4]]},"3222":{"position":[[136,4],[206,4],[237,4],[252,4],[328,4]]},"3224":{"position":[[149,4],[206,5],[2015,5],[2053,4]]},"3226":{"position":[[6,4],[621,4],[706,4],[773,4]]},"3228":{"position":[[38,4],[65,4],[87,4],[125,4],[701,4],[775,4],[851,4],[911,4],[969,4]]},"3230":{"position":[[38,4],[65,4],[87,4],[125,4],[701,4],[712,4],[786,4],[797,4],[879,4],[936,4],[965,4]]},"3232":{"position":[[95,5],[246,4],[267,5],[279,4]]},"3234":{"position":[[38,4],[69,4],[80,4],[135,4],[145,4],[177,4],[187,4],[219,4],[251,4]]},"3236":{"position":[[50,5],[173,4]]},"3250":{"position":[[1435,4],[4191,4]]},"3252":{"position":[[241,4]]},"3254":{"position":[[40,4],[567,4],[2819,4],[2827,4],[2923,5]]},"3262":{"position":[[5,4],[70,4],[98,4],[189,6],[226,5],[253,4],[275,4],[297,4]]},"3264":{"position":[[236,5]]},"3266":{"position":[[6,4],[741,4],[911,4],[978,4]]},"3268":{"position":[[38,4],[65,4],[87,4],[125,4],[441,4],[512,4],[570,4],[629,4]]},"3270":{"position":[[38,4],[65,4],[87,4],[125,4],[441,4],[452,4],[499,4],[571,4]]},"3272":{"position":[[95,5],[246,4],[258,4],[307,5],[319,4]]},"3274":{"position":[[264,4]]},"3276":{"position":[[50,5],[178,4]]},"3283":{"position":[[60,4],[98,4]]},"3285":{"position":[[46,4],[67,5],[88,4],[393,4],[450,4],[524,4],[600,4],[658,4]]},"3287":{"position":[[24,5],[89,5],[161,4]]},"3289":{"position":[[471,4],[507,6]]},"3299":{"position":[[109,6],[125,5]]},"3301":{"position":[[5,4],[123,6],[160,5],[184,4],[206,4],[228,4],[250,4]]},"3303":{"position":[[75,4],[146,6],[1775,8]]},"3305":{"position":[[44,4],[335,5],[378,4],[399,4],[463,5]]},"3309":{"position":[[9,5],[65,4],[105,4],[155,4],[205,4],[255,4]]},"3311":{"position":[[7,4],[31,4],[406,4],[691,4],[777,4],[844,4]]},"3313":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[785,4],[861,4],[919,4]]},"3315":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[722,4],[796,4],[807,4],[886,4],[915,4]]},"3317":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[719,4],[731,4],[805,4],[813,4],[825,4],[904,4],[933,4]]},"3319":{"position":[[1823,4],[2645,4]]},"3321":{"position":[[68,5],[101,4],[146,4],[159,4]]},"3323":{"position":[[50,5],[175,4],[280,5]]},"3351":{"position":[[247,5],[331,5]]},"3353":{"position":[[46,5],[100,4]]},"3355":{"position":[[65,5],[326,5],[422,5]]},"3360":{"position":[[79,5],[130,6],[146,6]]},"3362":{"position":[[92,5]]},"3364":{"position":[[284,5],[399,5]]},"3366":{"position":[[66,6]]},"3383":{"position":[[701,5],[816,6],[874,4],[1030,5],[1086,5],[1350,4],[1476,4],[1517,5],[1670,5],[4069,4],[4487,4],[4667,4],[4761,4],[4988,4]]},"3385":{"position":[[793,5],[908,6],[966,4],[1124,5],[1180,5],[1436,4],[1562,4],[1603,5],[1757,5]]},"3425":{"position":[[5,5],[18,5],[149,4],[471,5]]},"3429":{"position":[[6,5],[19,5],[103,5],[116,5]]},"3431":{"position":[[25,5]]},"3435":{"position":[[8,5],[23,5],[287,5]]},"3441":{"position":[[19,6],[183,5]]},"3493":{"position":[[414,5],[619,4],[666,4]]},"3495":{"position":[[29,5],[442,4],[730,4]]},"3507":{"position":[[522,4]]},"3509":{"position":[[4,5],[43,5],[76,4],[180,5]]},"3511":{"position":[[80,4],[306,4],[497,4],[628,5]]},"3523":{"position":[[344,5]]},"3530":{"position":[[319,5],[631,5],[788,4],[923,4]]},"3532":{"position":[[541,5],[731,5],[814,5],[867,5],[948,5],[1194,4]]},"3534":{"position":[[77,4]]},"3552":{"position":[[46,4],[148,4],[172,4],[225,4],[261,4],[297,4],[333,4]]},"3557":{"position":[[7,4]]},"3559":{"position":[[7,4]]},"3561":{"position":[[7,4]]},"3563":{"position":[[18,5]]},"3565":{"position":[[7,4],[36,4],[765,4],[1086,6]]},"3569":{"position":[[61,4]]},"3574":{"position":[[5,4],[132,6],[169,5],[201,4],[223,4],[245,4],[267,4]]},"3576":{"position":[[75,4],[146,6],[1783,8]]},"3578":{"position":[[52,4],[343,5],[386,4],[407,4],[471,5]]},"3582":{"position":[[9,5],[65,4],[113,4],[163,4],[213,4],[263,4]]},"3584":{"position":[[47,5],[187,4],[200,4],[213,4],[230,4],[391,5],[573,5],[598,6]]},"3586":{"position":[[108,5],[351,5],[566,5],[617,5],[887,4],[962,4],[1033,4]]},"3588":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[761,4],[830,4],[877,4],[894,4]]},"3590":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[709,4],[772,4],[783,4],[852,4],[899,4],[916,4]]},"3592":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[706,4],[718,4],[781,4],[789,4],[801,4],[870,4],[917,4],[934,4]]},"3594":{"position":[[91,5],[144,5],[265,5],[271,4],[278,4],[285,4],[292,4],[1046,4]]},"3596":{"position":[[49,4],[70,4],[78,4],[90,4],[162,4],[170,4],[177,4],[184,4],[590,4],[693,4],[701,4],[708,4],[1019,4]]},"3598":{"position":[[89,5],[240,4],[252,4],[303,5],[312,4],[323,4],[1264,4],[1280,5],[1346,4],[1407,4],[1434,4],[1456,4],[2156,4],[2201,4]]},"3600":{"position":[[55,5]]},"3606":{"position":[[1341,4],[1429,4]]},"3612":{"position":[[81,5],[1740,5],[3230,5]]},"3614":{"position":[[209,4],[527,4],[615,4],[1542,6],[2623,6],[2665,4],[2707,4]]},"3616":{"position":[[141,4],[442,4],[994,4],[1082,4],[1624,5],[2164,5],[2327,4],[2429,4],[2520,4]]},"3618":{"position":[[178,5],[454,4],[1251,5],[1344,4],[1420,4],[1513,4],[1606,4],[1699,4]]},"3620":{"position":[[87,4],[107,4],[140,4],[227,4]]},"3622":{"position":[[7,4],[24,4],[289,4],[310,4],[340,5],[379,4],[454,4],[599,6],[813,6],[854,5],[896,4]]},"3624":{"position":[[58,5],[1111,4],[1191,4],[1612,4]]},"3626":{"position":[[743,4],[767,4],[1253,5]]},"3628":{"position":[[119,5],[383,4],[405,4],[424,4],[507,4],[2104,4],[2112,4],[2140,4],[2203,4],[2214,4],[2898,4],[2906,4],[2934,4],[2994,4],[3005,4],[3699,4],[3743,4],[3807,4],[3818,4]]},"3630":{"position":[[326,6]]},"3639":{"position":[[352,6],[369,4],[405,4],[454,5],[841,4],[1210,4]]},"3643":{"position":[[202,4]]},"3654":{"position":[[105,6],[121,5]]},"3656":{"position":[[5,4],[123,6],[160,5],[184,4],[206,4],[228,4],[250,4]]},"3658":{"position":[[71,4],[142,6],[1766,8]]},"3660":{"position":[[44,4],[335,5],[378,4],[399,4],[463,5]]},"3664":{"position":[[9,5],[65,4],[105,4],[155,4],[205,4],[255,4]]},"3666":{"position":[[7,4],[31,4],[406,4],[691,4],[777,4],[844,4]]},"3668":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[785,4],[861,4],[919,4]]},"3670":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[722,4],[796,4],[807,4],[886,4],[915,4]]},"3672":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[719,4],[731,4],[805,4],[813,4],[825,4],[904,4],[933,4]]},"3674":{"position":[[1756,4],[2578,4]]},"3676":{"position":[[162,5],[195,4],[240,4],[253,4]]},"3678":{"position":[[50,5],[251,5]]},"3680":{"position":[[85,4],[104,5],[155,4],[177,5],[705,5],[729,5],[759,4],[779,5]]},"3685":{"position":[[12,4],[76,4],[112,4],[148,4],[184,4]]},"3687":{"position":[[192,5]]},"3689":{"position":[[34,5],[244,4],[251,4],[258,4],[265,4],[3344,5]]},"3691":{"position":[[176,4],[211,6],[255,4],[326,6],[338,4],[423,6]]},"3693":{"position":[[7,4],[36,4],[754,4],[845,4],[1271,4],[1338,4]]},"3695":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"3697":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"3699":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"3703":{"position":[[241,5],[270,4],[302,5],[552,5],[585,4],[719,4]]},"3705":{"position":[[126,6],[154,4],[262,6],[274,6],[312,5]]},"3708":{"position":[[68,5],[181,5]]},"3712":{"position":[[55,4],[183,5],[202,5]]},"3714":{"position":[[171,5]]},"3716":{"position":[[89,5],[172,6],[229,5]]},"3718":{"position":[[55,6],[97,5],[119,5],[355,5],[460,5],[560,5],[578,6]]},"3730":{"position":[[101,5]]},"3734":{"position":[[275,5],[308,5]]},"3736":{"position":[[223,5],[249,4],[1342,4],[1488,4]]},"3738":{"position":[[233,5],[390,6]]},"3740":{"position":[[94,4],[357,6]]},"3748":{"position":[[212,5],[922,5]]},"3750":{"position":[[20,5],[43,4]]},"3752":{"position":[[260,5],[412,4]]},"3754":{"position":[[222,4],[280,4],[1885,4]]},"3770":{"position":[[4,5],[101,5],[141,5],[233,6],[242,4],[419,6],[526,4]]},"3772":{"position":[[9,4],[45,4],[106,4]]},"3774":{"position":[[290,4]]},"3776":{"position":[[25,4],[510,5]]},"3780":{"position":[[47,5],[394,5],[415,4],[511,5],[591,4],[669,5]]},"3784":{"position":[[533,5],[605,4],[655,4]]},"3786":{"position":[[117,4],[185,4],[224,5],[381,4],[1272,4]]},"3788":{"position":[[319,4]]},"3790":{"position":[[35,4]]},"3794":{"position":[[47,5],[358,4],[391,4],[575,4],[638,5],[644,4],[939,4]]},"3796":{"position":[[5,4],[51,4],[148,4],[186,5]]},"3798":{"position":[[29,4],[135,5],[158,4],[277,4]]},"3800":{"position":[[4,4],[85,4],[98,4],[147,5],[172,4]]},"3802":{"position":[[19,4],[58,4],[121,4],[208,4]]},"3804":{"position":[[10,4],[113,4],[212,4],[312,4],[409,4]]},"3806":{"position":[[27,5],[106,5],[216,4],[748,4],[1248,4],[1618,5],[1690,5],[1726,5]]},"3808":{"position":[[792,5]]},"3810":{"position":[[4,5]]},"3839":{"position":[[496,5]]},"3843":{"position":[[57,4],[296,5],[371,4],[1003,4],[1372,4],[1481,5]]},"3845":{"position":[[649,5]]},"3849":{"position":[[788,4]]},"3853":{"position":[[58,4]]},"3860":{"position":[[51,4]]},"3862":{"position":[[499,4]]},"3866":{"position":[[51,4],[3093,4]]},"3876":{"position":[[186,5]]},"3889":{"position":[[375,4]]},"3896":{"position":[[51,4]]},"3902":{"position":[[51,4],[3097,4]]},"3906":{"position":[[18,4],[59,5],[77,6],[91,4],[198,5],[300,5],[510,4],[520,4],[644,5],[673,5],[755,5],[795,6],[871,4]]},"3910":{"position":[[94,5]]},"3912":{"position":[[7,4],[110,4],[243,5]]},"3914":{"position":[[380,4],[388,5],[543,4],[648,5]]},"3918":{"position":[[2096,5],[2154,5],[2183,5],[2258,5],[2363,4],[2470,5],[2510,4],[2568,5]]},"3920":{"position":[[11,4],[82,5],[258,4]]},"3928":{"position":[[0,5],[130,5]]},"3934":{"position":[[307,4]]},"3938":{"position":[[9,4],[363,4],[825,4]]},"3940":{"position":[[9,4]]},"3942":{"position":[[9,4]]},"3944":{"position":[[9,4],[53,4]]},"3946":{"position":[[109,4]]},"3948":{"position":[[43,4],[114,4]]},"3952":{"position":[[14,4]]},"3956":{"position":[[197,4],[221,4]]},"3958":{"position":[[9,4]]},"3960":{"position":[[9,4]]},"3962":{"position":[[9,4]]},"3964":{"position":[[18,6],[47,4]]},"3966":{"position":[[245,4]]},"3970":{"position":[[169,4]]},"3974":{"position":[[42,5],[68,7],[86,5]]},"3976":{"position":[[30,5],[97,5]]},"3978":{"position":[[247,4]]},"3982":{"position":[[40,4]]},"3984":{"position":[[328,4]]},"3986":{"position":[[81,4],[129,5],[180,4]]},"4002":{"position":[[126,4],[197,5],[445,6],[563,4],[582,4],[626,4],[741,4],[749,5]]},"4004":{"position":[[47,4],[163,4]]},"4006":{"position":[[253,5],[612,4],[733,5],[751,4]]},"4008":{"position":[[186,4],[367,5]]},"4010":{"position":[[100,4],[247,5]]},"4016":{"position":[[48,5],[88,5]]},"4018":{"position":[[48,5],[88,5]]},"4020":{"position":[[26,4],[51,5],[98,5]]},"4023":{"position":[[310,6]]},"4027":{"position":[[113,5],[156,5]]},"4029":{"position":[[156,5],[181,6],[1001,4],[1046,4],[1166,4],[1210,4]]},"4060":{"position":[[417,5]]},"4062":{"position":[[290,4]]},"4072":{"position":[[160,5]]},"4074":{"position":[[123,5]]},"4084":{"position":[[122,4],[207,4]]},"4088":{"position":[[127,4],[208,5]]},"4090":{"position":[[317,5],[377,5]]},"4096":{"position":[[140,5],[453,4]]},"4100":{"position":[[227,4],[330,4]]},"4110":{"position":[[181,4],[349,4],[1063,5],[1299,4]]},"4114":{"position":[[70,4],[249,5],[315,6]]},"4116":{"position":[[295,5],[412,5],[474,5]]},"4118":{"position":[[430,4],[504,4],[548,4]]},"4120":{"position":[[47,4]]},"4122":{"position":[[134,4],[240,5]]},"4131":{"position":[[181,5]]},"4135":{"position":[[13,4]]},"4139":{"position":[[37,4],[152,4]]},"4141":{"position":[[7,5],[45,6],[59,5],[191,5],[276,6],[293,5],[339,5],[449,6],[485,6],[522,5],[595,5],[650,6],[695,5],[744,6],[859,6]]},"4143":{"position":[[33,6],[67,5],[193,5],[252,5],[298,5],[528,5],[659,5],[695,5],[747,5],[920,4],[945,4]]},"4145":{"position":[[457,4],[510,4]]},"4147":{"position":[[343,4],[401,4]]},"4151":{"position":[[674,4],[803,4],[1455,4]]},"4177":{"position":[[152,5]]},"4193":{"position":[[133,5]]},"4203":{"position":[[1069,4],[1184,4]]},"4209":{"position":[[40,4],[228,5],[1788,4]]},"4215":{"position":[[196,4],[220,5]]},"4217":{"position":[[44,4],[123,4]]},"4220":{"position":[[195,4],[405,4],[537,5],[781,4],[904,4],[1074,4],[1107,4]]},"4224":{"position":[[60,5],[122,6]]},"4232":{"position":[[262,4],[412,5]]},"4236":{"position":[[25,5],[118,5]]},"4238":{"position":[[112,5]]},"4240":{"position":[[0,5],[91,4],[110,4],[171,5],[217,4],[364,4],[406,4],[484,5],[504,4],[598,4]]},"4246":{"position":[[285,4],[394,4]]},"4275":{"position":[[968,4]]},"4309":{"position":[[46,5],[193,4],[243,5],[262,4]]},"4320":{"position":[[67,4]]},"4322":{"position":[[66,4],[190,4]]},"4324":{"position":[[102,4]]},"4355":{"position":[[345,4]]},"4358":{"position":[[10,6],[515,6],[1206,6]]},"4360":{"position":[[162,6],[249,5]]},"4369":{"position":[[92,4]]},"4377":{"position":[[79,5]]},"4379":{"position":[[75,5]]},"4415":{"position":[[284,4]]},"4425":{"position":[[646,4]]},"4431":{"position":[[9,4],[88,5],[130,4],[205,4]]},"4433":{"position":[[80,4],[211,4],[338,4],[469,4],[635,4]]},"4435":{"position":[[88,4],[231,4],[366,4],[492,4],[656,4]]},"4492":{"position":[[421,4]]},"4565":{"position":[[35,4]]},"4567":{"position":[[510,4]]},"4571":{"position":[[24,4],[507,4]]},"4573":{"position":[[24,4]]},"4575":{"position":[[35,4],[3065,4]]},"4579":{"position":[[294,4]]},"4585":{"position":[[35,4]]},"4591":{"position":[[24,4],[789,4]]},"4593":{"position":[[24,4],[841,4]]},"4595":{"position":[[35,4],[3065,4]]},"4602":{"position":[[135,4],[188,4]]},"4607":{"position":[[661,4],[798,6],[842,4],[906,4],[1133,6],[1560,4],[2427,5]]},"4609":{"position":[[269,5],[290,5],[383,4],[511,4],[596,4],[944,4]]},"4623":{"position":[[64,4],[120,4],[223,4],[281,4],[306,4],[330,4],[363,5],[396,4],[462,4],[490,4]]},"4631":{"position":[[387,4]]},"4639":{"position":[[311,5],[348,5],[396,5],[445,5],[587,5],[630,5],[665,5]]},"4647":{"position":[[323,4],[337,4]]},"4661":{"position":[[125,4],[172,4],[215,4]]},"4669":{"position":[[430,4]]},"4681":{"position":[[660,5],[697,5]]},"4683":{"position":[[149,5],[345,4]]},"4715":{"position":[[380,4]]},"4717":{"position":[[342,5],[515,5],[525,4]]},"4719":{"position":[[287,5]]},"4723":{"position":[[196,5]]},"4727":{"position":[[140,4]]},"4733":{"position":[[495,4]]},"4735":{"position":[[381,5]]},"4741":{"position":[[57,4],[88,4],[197,4],[280,5],[469,4]]},"4745":{"position":[[244,4],[418,4]]},"4747":{"position":[[206,4]]},"4757":{"position":[[542,5]]},"4759":{"position":[[286,5]]},"4781":{"position":[[419,4],[672,5],[703,4]]},"4785":{"position":[[366,4],[481,4]]},"4839":{"position":[[365,4]]},"4841":{"position":[[64,5],[91,5],[190,5],[239,5],[277,5],[292,4]]},"4847":{"position":[[636,5],[670,4],[711,4]]},"4859":{"position":[[986,5]]},"4889":{"position":[[74,5]]},"4891":{"position":[[14,5],[70,4],[240,4]]},"4901":{"position":[[41,5],[102,4],[235,4],[307,4],[355,4],[400,4],[569,4]]},"4903":{"position":[[54,6],[155,5],[492,4],[558,4],[612,4],[658,4],[908,4]]},"4905":{"position":[[17,5],[157,4]]},"4965":{"position":[[295,4]]},"4995":{"position":[[999,6],[1238,6]]},"5019":{"position":[[55,4]]},"5039":{"position":[[107,4],[573,4],[766,6],[827,4],[1127,4]]},"5061":{"position":[[236,4]]},"5063":{"position":[[116,4]]},"5067":{"position":[[83,4]]},"5083":{"position":[[81,4],[105,5]]},"5089":{"position":[[209,4],[233,5]]},"5091":{"position":[[49,4],[73,5]]},"5097":{"position":[[87,4],[111,5]]},"5103":{"position":[[27,4],[370,4],[441,5]]},"5105":{"position":[[26,4]]}}}],["node'",{"_index":1224,"t":{"2842":{"position":[[341,6]]},"2931":{"position":[[137,6]]},"2968":{"position":[[44,6]]},"3089":{"position":[[178,6]]},"3616":{"position":[[1888,6]]},"3618":{"position":[[743,6]]},"3770":{"position":[[357,6]]},"3780":{"position":[[12,6]]},"4060":{"position":[[452,6]]},"4108":{"position":[[105,6]]},"4209":{"position":[[75,6]]},"4293":{"position":[[1200,6]]},"4309":{"position":[[140,6]]},"4607":{"position":[[2396,6]]},"4717":{"position":[[647,6]]},"4839":{"position":[[317,6]]},"5043":{"position":[[47,6]]}}}],["node.j",{"_index":1777,"t":{"3119":{"position":[[0,7]]},"3732":{"position":[[271,7]]},"4318":{"position":[[58,7]]}}}],["node1address",{"_index":1967,"t":{"3222":{"position":[[363,13]]}}}],["node>,127.0.0.1,localhost",{"_index":3404,"t":{"3862":{"position":[[210,25],[274,25]]}}}],["node_endpoint=http://member1besu:8545",{"_index":1425,"t":{"2964":{"position":[[422,37]]}}}],["node_endpoint=http://rpcnode:8545",{"_index":1408,"t":{"2962":{"position":[[275,33]]}}}],["node_endpoint=member1besu",{"_index":3123,"t":{"3738":{"position":[[569,25]]}}}],["node_label",{"_index":4694,"t":{"4609":{"position":[[1068,11]]}}}],["node_pool",{"_index":4679,"t":{"4609":{"position":[[607,10]]}}}],["node_taint",{"_index":4691,"t":{"4609":{"position":[[998,11]]}}}],["nodej",{"_index":2927,"t":{"3632":{"position":[[201,6]]}}}],["nodekey",{"_index":3000,"t":{"3687":{"position":[[224,7]]},"3774":{"position":[[332,8]]}}}],["nodekey.key",{"_index":2765,"t":{"3561":{"position":[[750,14]]},"3687":{"position":[[374,11]]},"3689":{"position":[[931,14],[1664,14],[2397,14],[3130,14]]}}}],["nodekey.pub",{"_index":2767,"t":{"3561":{"position":[[782,13]]},"3687":{"position":[[358,11]]},"3689":{"position":[[963,13],[1696,13],[2429,13],[3162,13]]},"3774":{"position":[[341,12]]},"3780":{"position":[[146,11]]}}}],["nodekey2",{"_index":2744,"t":{"3559":{"position":[[226,8]]}}}],["nodekey2.key",{"_index":2768,"t":{"3561":{"position":[[819,15]]}}}],["nodekey2.pub",{"_index":2769,"t":{"3561":{"position":[[852,14]]}}}],["nodekey3",{"_index":2745,"t":{"3559":{"position":[[239,9]]}}}],["nodekey3.key",{"_index":2770,"t":{"3561":{"position":[[890,15]]}}}],["nodekey3.pub",{"_index":2771,"t":{"3561":{"position":[[923,14]]}}}],["nodenam",{"_index":2245,"t":{"3339":{"position":[[1487,8]]}}}],["nodes\",\"throw",{"_index":3418,"t":{"3866":{"position":[[673,22]]},"3902":{"position":[[673,22]]},"4575":{"position":[[657,22]]},"4595":{"position":[[657,22]]}}}],["nodes.json",{"_index":3845,"t":{"4143":{"position":[[87,10],[120,10],[577,10]]},"4145":{"position":[[11,10],[475,10],[550,10]]},"4841":{"position":[[120,10],[172,10],[220,11],[343,11]]}}}],["noexecut",{"_index":4631,"t":{"4607":{"position":[[1476,9]]}}}],["nomemori",{"_index":4424,"t":{"4474":{"position":[[9,9],[38,8]]},"4504":{"position":[[152,9]]}}}],["non",{"_index":1134,"t":{"2806":{"position":[[188,3]]},"2824":{"position":[[71,3]]},"2834":{"position":[[661,3]]},"2844":{"position":[[316,3]]},"2974":{"position":[[138,3]]},"3501":{"position":[[454,3]]},"3511":{"position":[[614,3]]},"3724":{"position":[[335,3],[444,3]]},"3736":{"position":[[235,3]]},"3786":{"position":[[754,3]]},"4149":{"position":[[211,3]]},"4358":{"position":[[504,3]]},"4393":{"position":[[770,3]]},"4407":{"position":[[719,3]]},"4409":{"position":[[491,3],[1538,3]]},"4447":{"position":[[593,3]]},"4460":{"position":[[96,3]]},"4661":{"position":[[366,3],[529,3]]},"4663":{"position":[[327,3]]},"4741":{"position":[[584,3]]},"4807":{"position":[[375,3]]},"4883":{"position":[[553,3]]}}}],["nonc",{"_index":562,"t":{"2660":{"position":[[2,5],[302,6],[356,5],[376,5]]},"2662":{"position":[[87,5],[155,5],[217,5]]},"2664":{"position":[[256,7],[284,6],[393,6],[586,6],[649,5],[710,5],[868,5],[998,5],[1317,5],[1338,5],[1385,5]]},"2666":{"position":[[51,6],[72,5],[307,5],[343,6],[972,5],[1026,5],[1220,5],[1343,5],[1441,6]]},"2786":{"position":[[386,8],[2647,5]]},"2794":{"position":[[415,5]]},"2852":{"position":[[487,8],[1757,8]]},"2860":{"position":[[415,5]]},"2882":{"position":[[747,8]]},"2890":{"position":[[415,5]]},"3000":{"position":[[180,6],[405,7],[580,5],[733,6],[945,6],[1027,6]]},"3016":{"position":[[853,8],[1753,8]]},"3089":{"position":[[33,6],[138,7],[227,5],[368,6]]},"3091":{"position":[[16,5]]},"3131":{"position":[[252,5]]},"3224":{"position":[[902,8]]},"3242":{"position":[[1461,6]]},"3250":{"position":[[2685,5],[2790,6],[3586,5]]},"3264":{"position":[[612,8]]},"3303":{"position":[[687,8]]},"3453":{"position":[[290,5]]},"3463":{"position":[[2159,8]]},"3465":{"position":[[259,5]]},"3576":{"position":[[695,8]]},"3658":{"position":[[678,8]]},"3784":{"position":[[849,8]]},"3814":{"position":[[822,5]]},"3819":{"position":[[86,5]]},"3827":{"position":[[189,6]]},"3849":{"position":[[319,5]]},"4006":{"position":[[17,5],[83,5],[364,5],[511,6],[586,5]]},"4373":{"position":[[1093,8]]},"4377":{"position":[[1585,8]]},"4387":{"position":[[258,5]]},"4397":{"position":[[874,5]]},"4407":{"position":[[1276,5]]},"4541":{"position":[[531,5]]},"4555":{"position":[[135,6],[685,9],[925,5],[941,6],[959,5],[998,5]]},"4859":{"position":[[780,5]]},"4861":{"position":[[532,5]]},"4909":{"position":[[505,6],[1276,8],[3250,8]]},"4915":{"position":[[684,8],[2785,8],[5248,8],[7349,8]]},"4973":{"position":[[1013,8],[2632,5],[2953,5],[3319,8]]},"4975":{"position":[[1103,8],[2510,5],[2902,5],[3401,8]]},"4995":{"position":[[819,6],[2061,8]]},"4999":{"position":[[1172,8]]},"5001":{"position":[[1368,8]]},"5003":{"position":[[972,8],[1458,5],[1665,5],[1959,8]]},"5005":{"position":[[110,5]]},"5009":{"position":[[1577,8],[2396,5],[2678,5],[3815,8]]},"5011":{"position":[[1665,8],[2420,5],[2640,5]]},"5037":{"position":[[105,6],[138,5]]},"5085":{"position":[[1889,8]]},"5095":{"position":[[2083,9]]},"5101":{"position":[[981,5],[1719,8],[1993,8]]}}}],["nonce\":\"0x1",{"_index":4253,"t":{"4373":{"position":[[3145,14]]}}}],["nonce.from",{"_index":4595,"t":{"4555":{"position":[[948,10]]}}}],["nonce.to",{"_index":4596,"t":{"4555":{"position":[[989,8]]}}}],["none",{"_index":762,"t":{"2709":{"position":[[474,4]]},"3399":{"position":[[39,4]]},"3411":{"position":[[53,4]]},"3427":{"position":[[76,4]]},"3429":{"position":[[48,4]]},"3431":{"position":[[95,4]]},"3461":{"position":[[162,4]]},"3479":{"position":[[53,4]]},"3534":{"position":[[265,4],[350,4],[671,4]]},"3546":{"position":[[115,4],[573,4]]},"3548":{"position":[[107,4],[415,4],[708,4]]},"3550":{"position":[[115,4],[569,4]]},"3956":{"position":[[474,4]]},"4096":{"position":[[104,5]]},"4098":{"position":[[286,5],[708,4],[830,4]]},"4106":{"position":[[8,4],[322,5]]},"4555":{"position":[[903,4],[1055,4]]},"4641":{"position":[[202,5]]},"4671":{"position":[[433,5]]},"4703":{"position":[[250,5]]},"4733":{"position":[[177,5],[204,4]]},"4745":{"position":[[353,5]]},"4781":{"position":[[588,7]]},"4901":{"position":[[204,4]]},"4903":{"position":[[73,4]]},"4915":{"position":[[98,4]]},"4925":{"position":[[238,4]]},"4929":{"position":[[198,4]]},"4951":{"position":[[261,4]]},"4953":{"position":[[180,4]]},"4955":{"position":[[91,4]]},"4959":{"position":[[34,4]]},"4961":{"position":[[416,4]]},"4969":{"position":[[555,4]]},"5017":{"position":[[110,4]]},"5019":{"position":[[204,4]]},"5021":{"position":[[130,4]]},"5023":{"position":[[178,4]]},"5025":{"position":[[109,4]]},"5029":{"position":[[138,4]]},"5031":{"position":[[55,4]]},"5039":{"position":[[233,4]]},"5047":{"position":[[87,4]]},"5049":{"position":[[306,4]]},"5051":{"position":[[314,4]]},"5061":{"position":[[171,4]]},"5063":{"position":[[52,4]]},"5067":{"position":[[35,4]]},"5069":{"position":[[78,4]]},"5071":{"position":[[75,4]]},"5073":{"position":[[223,4]]},"5075":{"position":[[36,4]]},"5085":{"position":[[651,4]]},"5087":{"position":[[400,4]]},"5093":{"position":[[457,4]]},"5095":{"position":[[591,4]]},"5103":{"position":[[62,4]]},"5105":{"position":[[61,4]]},"5109":{"position":[[48,4]]},"5114":{"position":[[56,4]]}}}],["nonheap",{"_index":5253,"t":{"4925":{"position":[[600,10],[687,10]]}}}],["normal",{"_index":1232,"t":{"2844":{"position":[[354,8]]},"3530":{"position":[[715,9]]},"3691":{"position":[[278,6]]},"4062":{"position":[[2862,6]]},"4220":{"position":[[430,6],[504,6]]},"4443":{"position":[[305,8]]},"4607":{"position":[[3864,7]]}}}],["north",{"_index":1082,"t":{"2790":{"position":[[1308,5]]}}}],["noschedul",{"_index":4630,"t":{"4607":{"position":[[1427,10]]}}}],["notabl",{"_index":3515,"t":{"3876":{"position":[[1612,7]]},"4504":{"position":[[119,7]]}}}],["note",{"_index":207,"t":{"2582":{"position":[[641,4]]},"2592":{"position":[[461,4]]},"2608":{"position":[[641,4]]},"2628":{"position":[[1203,4],[1577,4]]},"2638":{"position":[[359,4]]},"2646":{"position":[[346,4]]},"2666":{"position":[[1136,4]]},"2676":{"position":[[2227,4]]},"2686":{"position":[[185,4],[396,4]]},"2707":{"position":[[470,4]]},"2729":{"position":[[330,4]]},"2796":{"position":[[543,4]]},"2812":{"position":[[975,4]]},"2814":{"position":[[1222,4]]},"2826":{"position":[[1083,4]]},"2830":{"position":[[532,4]]},"2834":{"position":[[878,4]]},"2852":{"position":[[159,4]]},"2864":{"position":[[434,4]]},"2866":{"position":[[693,4]]},"2874":{"position":[[971,4]]},"2878":{"position":[[950,4]]},"2928":{"position":[[342,4]]},"2956":{"position":[[532,4]]},"2958":{"position":[[367,4]]},"2964":{"position":[[71,4]]},"2986":{"position":[[249,4]]},"2989":{"position":[[215,4]]},"3000":{"position":[[496,4]]},"3002":{"position":[[337,4]]},"3008":{"position":[[558,4]]},"3010":{"position":[[166,4]]},"3042":{"position":[[68,4]]},"3044":{"position":[[1981,4]]},"3052":{"position":[[615,4]]},"3074":{"position":[[139,4]]},"3093":{"position":[[368,4]]},"3097":{"position":[[313,4]]},"3101":{"position":[[128,4]]},"3107":{"position":[[229,4],[1043,4]]},"3117":{"position":[[264,4]]},"3123":{"position":[[482,4]]},"3178":{"position":[[391,4]]},"3182":{"position":[[424,4]]},"3224":{"position":[[1789,4]]},"3234":{"position":[[165,4]]},"3254":{"position":[[2754,4]]},"3264":{"position":[[1245,4]]},"3303":{"position":[[1821,4]]},"3321":{"position":[[46,4]]},"3358":{"position":[[261,4]]},"3366":{"position":[[292,4]]},"3376":{"position":[[153,4]]},"3380":{"position":[[308,4],[485,4]]},"3383":{"position":[[883,4]]},"3385":{"position":[[975,4]]},"3389":{"position":[[70,4]]},"3393":{"position":[[238,4]]},"3395":{"position":[[635,4],[988,4]]},"3403":{"position":[[87,4]]},"3407":{"position":[[70,4]]},"3413":{"position":[[648,4],[1001,4]]},"3417":{"position":[[252,4]]},"3423":{"position":[[130,4]]},"3425":{"position":[[285,4]]},"3433":{"position":[[136,4]]},"3435":{"position":[[98,4]]},"3437":{"position":[[88,4]]},"3439":{"position":[[456,4]]},"3443":{"position":[[327,4]]},"3451":{"position":[[428,4]]},"3457":{"position":[[239,4]]},"3469":{"position":[[390,4]]},"3475":{"position":[[66,4]]},"3481":{"position":[[648,4],[1001,4]]},"3485":{"position":[[848,4]]},"3528":{"position":[[649,4]]},"3559":{"position":[[85,4]]},"3565":{"position":[[848,4]]},"3567":{"position":[[246,4]]},"3606":{"position":[[560,4],[1023,4],[2166,4]]},"3610":{"position":[[109,4]]},"3612":{"position":[[3038,4]]},"3614":{"position":[[2253,4]]},"3616":{"position":[[730,4],[2211,4]]},"3618":{"position":[[877,4]]},"3622":{"position":[[1039,4]]},"3628":{"position":[[85,4],[1691,4],[3654,4]]},"3658":{"position":[[1812,4]]},"3676":{"position":[[140,4]]},"3693":{"position":[[1050,4]]},"3695":{"position":[[987,4]]},"3710":{"position":[[614,4]]},"3714":{"position":[[257,4]]},"3734":{"position":[[210,4]]},"3738":{"position":[[189,4]]},"3756":{"position":[[1595,4]]},"3772":{"position":[[155,4]]},"3774":{"position":[[86,4]]},"3780":{"position":[[440,4]]},"3784":{"position":[[584,4]]},"3786":{"position":[[162,4]]},"3806":{"position":[[480,4]]},"3810":{"position":[[350,4]]},"3823":{"position":[[2043,4]]},"3874":{"position":[[1159,4]]},"3882":{"position":[[185,5]]},"3889":{"position":[[190,4]]},"3896":{"position":[[359,4]]},"3908":{"position":[[966,5]]},"3916":{"position":[[764,4]]},"3918":{"position":[[972,4]]},"3952":{"position":[[104,4]]},"3954":{"position":[[470,4]]},"3982":{"position":[[0,4]]},"3990":{"position":[[121,4]]},"3992":{"position":[[345,4],[400,4]]},"4000":{"position":[[375,4]]},"4004":{"position":[[62,4]]},"4006":{"position":[[315,4]]},"4016":{"position":[[83,4]]},"4018":{"position":[[83,4]]},"4048":{"position":[[248,4]]},"4050":{"position":[[385,4]]},"4058":{"position":[[199,4]]},"4060":{"position":[[168,4]]},"4126":{"position":[[331,4]]},"4143":{"position":[[491,4]]},"4145":{"position":[[447,4]]},"4177":{"position":[[306,4]]},"4199":{"position":[[594,4]]},"4232":{"position":[[119,4]]},"4242":{"position":[[112,4]]},"4259":{"position":[[431,4]]},"4273":{"position":[[321,4]]},"4275":{"position":[[925,4]]},"4287":{"position":[[264,4]]},"4297":{"position":[[324,4]]},"4318":{"position":[[1014,4]]},"4328":{"position":[[605,4]]},"4349":{"position":[[283,4]]},"4353":{"position":[[511,4]]},"4411":{"position":[[1454,4]]},"4415":{"position":[[90,4]]},"4419":{"position":[[1009,4]]},"4425":{"position":[[492,4]]},"4453":{"position":[[67,4]]},"4525":{"position":[[109,4]]},"4543":{"position":[[1047,4]]},"4579":{"position":[[109,4]]},"4585":{"position":[[327,4]]},"4625":{"position":[[376,4]]},"4627":{"position":[[350,4]]},"4649":{"position":[[233,4]]},"4681":{"position":[[612,4]]},"4707":{"position":[[299,4]]},"4715":{"position":[[473,4]]},"4721":{"position":[[447,4]]},"4733":{"position":[[444,4]]},"4771":{"position":[[378,4]]},"4781":{"position":[[678,4]]},"4795":{"position":[[313,4]]},"4797":{"position":[[325,4]]},"4801":{"position":[[255,4]]},"4807":{"position":[[509,4]]},"4819":{"position":[[370,4]]},"4823":{"position":[[285,4]]},"4889":{"position":[[80,4]]},"4895":{"position":[[282,4]]},"4897":{"position":[[435,4]]},"4901":{"position":[[557,4]]},"4907":{"position":[[403,4]]},"4917":{"position":[[248,4]]},"4919":{"position":[[258,4]]},"4921":{"position":[[276,4]]},"4927":{"position":[[384,4]]},"4931":{"position":[[290,4]]},"4945":{"position":[[284,4]]},"4947":{"position":[[420,4]]},"4949":{"position":[[63,4]]},"4951":{"position":[[51,4]]},"4957":{"position":[[278,4],[1046,4]]},"4963":{"position":[[317,4]]},"4967":{"position":[[746,4]]},"4971":{"position":[[355,4]]},"4975":{"position":[[273,4]]},"4977":{"position":[[498,4]]},"4981":{"position":[[283,4]]},"4983":{"position":[[397,4]]},"4987":{"position":[[181,4]]},"4993":{"position":[[244,4]]},"4995":{"position":[[610,4]]},"4997":{"position":[[384,4]]},"5001":{"position":[[294,4]]},"5009":{"position":[[175,4]]},"5011":{"position":[[250,4],[376,4]]},"5015":{"position":[[276,4]]},"5027":{"position":[[226,4]]},"5033":{"position":[[616,4]]},"5039":{"position":[[93,4]]},"5043":{"position":[[122,4]]},"5053":{"position":[[55,4]]},"5073":{"position":[[88,4]]},"5075":{"position":[[343,4]]},"5077":{"position":[[62,4]]},"5081":{"position":[[62,4]]},"5083":{"position":[[71,4],[442,4]]},"5085":{"position":[[72,4],[445,4]]},"5087":{"position":[[94,4],[601,4]]},"5089":{"position":[[199,4]]},"5091":{"position":[[39,4]]},"5093":{"position":[[87,4]]},"5095":{"position":[[51,4],[385,4]]},"5097":{"position":[[77,4]]},"5099":{"position":[[82,4]]},"5101":{"position":[[1125,4]]}}}],["noth",{"_index":2523,"t":{"3455":{"position":[[469,7]]},"4985":{"position":[[190,7]]}}}],["notic",{"_index":2649,"t":{"3515":{"position":[[713,6]]},"4169":{"position":[[65,6]]},"4209":{"position":[[180,6]]}}}],["notif",{"_index":4214,"t":{"4363":{"position":[[215,13]]},"4365":{"position":[[138,13]]},"4367":{"position":[[89,13],[348,13]]},"4369":{"position":[[68,13]]},"4373":{"position":[[164,13],[247,13],[335,12],[423,13],[487,13],[556,14],[738,12],[2665,12]]},"4375":{"position":[[145,13],[832,14],[908,13],[1047,13],[1184,12],[2196,12]]},"4377":{"position":[[505,13],[604,13],[837,13],[1055,13],[1283,13]]},"4379":{"position":[[468,13],[544,14],[711,13]]},"4381":{"position":[[280,14],[428,12],[650,12]]}}}],["notifi",{"_index":3300,"t":{"3823":{"position":[[456,6],[570,6]]},"4373":{"position":[[3,6]]},"4375":{"position":[[3,6]]},"4377":{"position":[[3,6]]},"4379":{"position":[[3,6]]},"4381":{"position":[[3,6]]}}}],["notim",{"_index":4431,"t":{"4480":{"position":[[9,7],[34,6]]}}}],["now",{"_index":1559,"t":{"2991":{"position":[[1398,3]]},"3044":{"position":[[1874,3]]},"3204":{"position":[[160,3]]},"3291":{"position":[[33,3],[542,4]]},"3383":{"position":[[5141,3]]},"3385":{"position":[[3549,3]]},"4349":{"position":[[380,3]]},"4555":{"position":[[299,3]]},"4607":{"position":[[2292,3]]}}}],["npm",{"_index":1779,"t":{"3121":{"position":[[0,3]]},"3628":{"position":[[292,3]]},"3639":{"position":[[829,3]]},"3754":{"position":[[210,3],[1873,3]]},"3760":{"position":[[114,3],[143,3],[159,3],[220,3]]},"3762":{"position":[[284,3],[290,3]]},"3772":{"position":[[94,3]]}}}],["npx",{"_index":2928,"t":{"3635":{"position":[[54,3]]},"3734":{"position":[[64,3]]},"3760":{"position":[[327,3],[537,3]]},"3764":{"position":[[1026,3]]},"3774":{"position":[[151,3]]},"4137":{"position":[[44,3]]}}}],["nsg",{"_index":4677,"t":{"4609":{"position":[[119,6],[135,3],[213,3]]}}}],["null",{"_index":1604,"t":{"3016":{"position":[[241,5],[1141,5]]},"3022":{"position":[[691,5]]},"3131":{"position":[[365,4],[454,4]]},"3133":{"position":[[298,5],[570,5],[881,5]]},"3250":{"position":[[759,5],[2858,5],[3797,5]]},"3252":{"position":[[506,5],[1038,5]]},"3254":{"position":[[2537,5]]},"3463":{"position":[[69,5],[219,4],[2181,5]]},"3467":{"position":[[262,4]]},"3471":{"position":[[2463,5]]},"3542":{"position":[[626,4]]},"3628":{"position":[[842,5]]},"3728":{"position":[[240,8]]},"3754":{"position":[[1548,4]]},"4275":{"position":[[1020,4],[1060,4]]},"4341":{"position":[[838,4]]},"4345":{"position":[[1522,4]]},"4347":{"position":[[672,4],[693,4]]},"4387":{"position":[[111,4],[178,4],[315,4],[467,4]]},"4393":{"position":[[280,4],[397,4],[500,4],[592,4],[678,4]]},"4397":{"position":[[991,4]]},"4399":{"position":[[101,4]]},"4407":{"position":[[379,4],[489,4],[1393,4],[1517,4]]},"4411":{"position":[[296,5],[988,5]]},"4527":{"position":[[175,5],[297,4],[1066,4],[1273,4],[1294,4]]},"4535":{"position":[[2887,4]]},"4553":{"position":[[243,4]]},"4647":{"position":[[376,5]]},"4751":{"position":[[395,5]]},"4847":{"position":[[1208,5]]},"4915":{"position":[[2807,5],[7371,5]]},"4937":{"position":[[1195,5]]},"4939":{"position":[[1219,4]]},"4941":{"position":[[3421,4]]},"4943":{"position":[[1059,4]]},"4945":{"position":[[1182,5],[1198,4]]},"4947":{"position":[[1707,5],[1723,4]]},"4973":{"position":[[272,4]]},"4975":{"position":[[484,4],[4734,5]]},"4977":{"position":[[588,4],[1061,5],[2714,5],[4960,5],[5937,5]]},"4979":{"position":[[230,4],[736,4]]},"4981":{"position":[[431,4]]},"4999":{"position":[[262,4]]},"5001":{"position":[[433,4]]},"5003":{"position":[[176,4]]},"5007":{"position":[[325,4],[929,5],[3108,5]]},"5011":{"position":[[2759,4]]},"5039":{"position":[[940,4],[1152,4]]},"5083":{"position":[[1813,5],[2229,5],[2290,5],[2319,5]]},"5085":{"position":[[2003,5],[2602,4]]},"5087":{"position":[[1628,5],[1974,4],[2015,5],[2361,4]]},"5093":{"position":[[1105,5],[1310,4]]},"5097":{"position":[[2427,5]]}}}],["number",{"_index":166,"t":{"2577":{"position":[[360,6]]},"2610":{"position":[[98,6]]},"2618":{"position":[[122,6],[221,6]]},"2660":{"position":[[15,6]]},"2689":{"position":[[139,6]]},"2693":{"position":[[112,6],[178,6]]},"2786":{"position":[[840,6]]},"2792":{"position":[[340,6],[401,6]]},"2806":{"position":[[7,6]]},"2808":{"position":[[80,6]]},"2852":{"position":[[1424,9],[14683,9],[14903,6]]},"2858":{"position":[[340,6],[401,6]]},"2870":{"position":[[80,6]]},"2882":{"position":[[803,9],[1029,6]]},"2900":{"position":[[204,6]]},"2902":{"position":[[80,6]]},"2912":{"position":[[130,6],[167,6]]},"2924":{"position":[[147,7]]},"2964":{"position":[[721,7]]},"2986":{"position":[[365,8]]},"2998":{"position":[[710,6]]},"3006":{"position":[[210,6],[292,6]]},"3074":{"position":[[269,6]]},"3095":{"position":[[85,6],[265,6]]},"3097":{"position":[[105,6]]},"3131":{"position":[[267,6]]},"3133":{"position":[[150,6]]},"3145":{"position":[[531,6]]},"3242":{"position":[[1708,6]]},"3244":{"position":[[1210,6]]},"3250":{"position":[[3063,6],[3598,6]]},"3289":{"position":[[57,6]]},"3303":{"position":[[65,6],[373,6]]},"3353":{"position":[[524,6]]},"3383":{"position":[[914,6],[1401,6],[1449,6]]},"3385":{"position":[[1006,6],[1487,6],[1535,6]]},"3393":{"position":[[125,7]]},"3395":{"position":[[66,6],[109,6],[333,7],[522,7]]},"3413":{"position":[[66,6],[109,6],[346,7],[535,7]]},"3417":{"position":[[139,7]]},"3439":{"position":[[343,7],[1238,7],[1448,6],[1633,9]]},"3443":{"position":[[214,7]]},"3451":{"position":[[315,7]]},"3453":{"position":[[596,6]]},"3465":{"position":[[460,6]]},"3481":{"position":[[66,6],[109,6],[346,7],[535,7]]},"3485":{"position":[[1074,7]]},"3513":{"position":[[156,6]]},"3576":{"position":[[65,6],[373,6]]},"3614":{"position":[[214,7],[1226,6],[2043,6],[2121,6],[2213,6]]},"3658":{"position":[[61,6],[365,6]]},"3689":{"position":[[3255,7]]},"3748":{"position":[[607,7]]},"3752":{"position":[[37,6],[232,6],[379,6]]},"3786":{"position":[[1890,6]]},"3812":{"position":[[485,6],[1138,6],[1381,6]]},"3823":{"position":[[1099,6],[1203,6],[1310,6],[1898,6]]},"3843":{"position":[[1560,6]]},"3876":{"position":[[1179,6],[1290,6]]},"3885":{"position":[[139,6]]},"3916":{"position":[[514,7],[699,9]]},"3918":{"position":[[1002,7],[2173,6],[2319,6]]},"3982":{"position":[[416,8],[633,8]]},"4004":{"position":[[79,6],[99,6]]},"4014":{"position":[[31,6]]},"4108":{"position":[[68,6]]},"4112":{"position":[[135,6]]},"4116":{"position":[[402,6]]},"4118":{"position":[[536,7]]},"4147":{"position":[[316,6]]},"4179":{"position":[[207,6]]},"4187":{"position":[[190,6]]},"4213":{"position":[[224,6]]},"4215":{"position":[[283,6]]},"4220":{"position":[[217,7]]},"4230":{"position":[[42,6],[193,8],[254,6]]},"4232":{"position":[[15,6]]},"4275":{"position":[[172,7],[340,8]]},"4316":{"position":[[562,6]]},"4322":{"position":[[298,6],[331,6]]},"4328":{"position":[[304,7]]},"4355":{"position":[[302,6]]},"4358":{"position":[[1013,6]]},"4373":{"position":[[910,9]]},"4387":{"position":[[72,6],[103,7]]},"4389":{"position":[[228,6]]},"4391":{"position":[[162,6],[285,6]]},"4393":{"position":[[639,6]]},"4395":{"position":[[533,6]]},"4397":{"position":[[889,6]]},"4405":{"position":[[334,7],[356,6]]},"4407":{"position":[[440,6],[1291,6]]},"4411":{"position":[[149,6]]},"4447":{"position":[[353,6],[402,6]]},"4458":{"position":[[120,6]]},"4486":{"position":[[48,6]]},"4492":{"position":[[391,7]]},"4496":{"position":[[74,6]]},"4510":{"position":[[505,6]]},"4531":{"position":[[91,8],[139,6],[222,6]]},"4615":{"position":[[175,6]]},"4621":{"position":[[662,6]]},"4627":{"position":[[251,6]]},"4629":{"position":[[263,6]]},"4631":{"position":[[300,6]]},"4635":{"position":[[168,6]]},"4693":{"position":[[135,6]]},"4763":{"position":[[445,6]]},"4787":{"position":[[226,6]]},"4791":{"position":[[197,6]]},"4811":{"position":[[198,6]]},"4813":{"position":[[208,6]]},"4833":{"position":[[218,6]]},"4845":{"position":[[160,6]]},"4859":{"position":[[617,6]]},"4861":{"position":[[216,6]]},"4863":{"position":[[199,6],[366,6]]},"4865":{"position":[[242,6],[608,6]]},"4867":{"position":[[171,6],[399,6]]},"4897":{"position":[[139,7],[322,7]]},"4899":{"position":[[77,7]]},"4909":{"position":[[129,6],[186,6],[523,6]]},"4911":{"position":[[156,6],[213,6],[357,6]]},"4915":{"position":[[424,9],[4988,9]]},"4917":{"position":[[135,7]]},"4919":{"position":[[145,7]]},"4921":{"position":[[163,7]]},"4927":{"position":[[50,7],[271,7]]},"4931":{"position":[[83,7],[177,7]]},"4937":{"position":[[242,6],[360,6],[369,6]]},"4945":{"position":[[171,7]]},"4947":{"position":[[307,7]]},"4955":{"position":[[45,6],[192,6],[654,6],[688,9]]},"4957":{"position":[[921,7],[1673,7],[1883,6],[2068,9]]},"4963":{"position":[[203,7]]},"4967":{"position":[[265,6],[603,6]]},"4971":{"position":[[230,7]]},"4973":{"position":[[750,9],[2546,7],[2865,6],[3092,9]]},"4975":{"position":[[65,7],[159,7],[840,9],[2416,7]]},"4977":{"position":[[384,7]]},"4979":{"position":[[12,6],[146,6],[180,6]]},"4981":{"position":[[12,6],[75,7],[169,7],[381,6],[457,6]]},"4983":{"position":[[272,7]]},"4993":{"position":[[130,7]]},"4995":{"position":[[485,7],[835,6]]},"4997":{"position":[[259,7]]},"5001":{"position":[[56,6],[181,7]]},"5005":{"position":[[12,6],[295,7],[471,6]]},"5009":{"position":[[1608,9],[2402,6],[2684,6],[3846,9]]},"5011":{"position":[[33,6],[137,7],[1696,9],[2426,6],[2646,6]]},"5013":{"position":[[12,6],[182,6]]},"5015":{"position":[[12,6],[69,7],[163,7],[374,6]]},"5017":{"position":[[455,6]]},"5019":{"position":[[12,6],[235,6]]},"5039":{"position":[[897,6],[1106,6]]},"5045":{"position":[[105,6]]},"5071":{"position":[[12,6],[106,6]]},"5083":{"position":[[153,6],[329,7]]},"5085":{"position":[[38,6],[135,6],[332,7]]},"5087":{"position":[[157,6],[488,7]]},"5089":{"position":[[58,6],[282,6]]},"5091":{"position":[[148,6]]},"5093":{"position":[[177,6]]},"5095":{"position":[[114,6],[272,7]]},"5097":{"position":[[186,6]]},"5101":{"position":[[94,6],[136,6],[987,6]]},"5103":{"position":[[164,6],[181,6],[311,6],[320,6],[388,6],[397,6]]}}}],["number=10000000",{"_index":4446,"t":{"4496":{"position":[[48,15]]}}}],["number=[,:///login",{"_index":4058,"t":{"4289":{"position":[[445,11],[652,11]]}}}],["port>:/udp",{"_index":749,"t":{"2707":{"position":[[636,17]]},"3954":{"position":[[636,17]]}}}],["portal",{"_index":1946,"t":{"3204":{"position":[[85,7]]},"3385":{"position":[[2855,7]]}}}],["portion",{"_index":3346,"t":{"3841":{"position":[[692,7]]}}}],["posit",{"_index":1804,"t":{"3133":{"position":[[617,8]]},"3728":{"position":[[231,8],[281,8],[306,8],[344,8],[369,8],[421,8],[453,9]]},"3874":{"position":[[1916,10]]},"4393":{"position":[[257,8],[347,8]]},"4407":{"position":[[1475,8]]},"4411":{"position":[[1091,8]]},"4997":{"position":[[31,8],[163,8],[489,8],[522,8]]},"4999":{"position":[[83,9],[204,8]]},"5001":{"position":[[85,9],[375,8]]},"5091":{"position":[[29,9],[319,9]]}}}],["possibl",{"_index":954,"t":{"2778":{"position":[[475,9]]},"2816":{"position":[[207,8]]},"2846":{"position":[[236,9]]},"3080":{"position":[[167,8]]},"3095":{"position":[[289,9]]},"3097":{"position":[[150,9],[303,9]]},"3383":{"position":[[2332,8]]},"3530":{"position":[[570,9],[890,9]]},"3544":{"position":[[191,8]]},"3843":{"position":[[1289,8]]},"3914":{"position":[[444,9]]},"4035":{"position":[[302,8]]},"4205":{"position":[[532,8]]},"4379":{"position":[[419,8]]},"4401":{"position":[[556,8]]},"4451":{"position":[[249,9]]},"4737":{"position":[[194,8]]},"4751":{"position":[[218,8]]},"4777":{"position":[[334,8]]},"4825":{"position":[[331,8]]},"5085":{"position":[[48,8]]}}}],["post",{"_index":808,"t":{"2725":{"position":[[183,4],[342,4]]},"2798":{"position":[[252,4],[1027,4],[1367,4]]},"2864":{"position":[[818,4],[1593,4],[1933,4]]},"2896":{"position":[[218,4],[769,4],[1066,4]]},"3232":{"position":[[135,4]]},"3252":{"position":[[1917,4]]},"3272":{"position":[[135,4]]},"3289":{"position":[[217,4]]},"3291":{"position":[[140,4]]},"3319":{"position":[[150,4]]},"3391":{"position":[[260,4]]},"3393":{"position":[[412,4]]},"3395":{"position":[[1122,4]]},"3397":{"position":[[212,4]]},"3399":{"position":[[333,4]]},"3401":{"position":[[282,4]]},"3405":{"position":[[1243,4]]},"3409":{"position":[[266,4]]},"3411":{"position":[[344,4]]},"3413":{"position":[[1135,4]]},"3415":{"position":[[219,4]]},"3417":{"position":[[418,4]]},"3419":{"position":[[291,4]]},"3423":{"position":[[454,4]]},"3425":{"position":[[590,4]]},"3427":{"position":[[230,4]]},"3429":{"position":[[187,4]]},"3431":{"position":[[250,4]]},"3433":{"position":[[459,4]]},"3435":{"position":[[404,4]]},"3439":{"position":[[640,4],[1170,4]]},"3441":{"position":[[424,4]]},"3443":{"position":[[458,4]]},"3445":{"position":[[197,4]]},"3447":{"position":[[440,4]]},"3449":{"position":[[536,4]]},"3451":{"position":[[575,4]]},"3453":{"position":[[752,4]]},"3455":{"position":[[564,4]]},"3457":{"position":[[604,4]]},"3459":{"position":[[418,4]]},"3461":{"position":[[282,4]]},"3463":{"position":[[327,4]]},"3465":{"position":[[599,4]]},"3467":{"position":[[342,4]]},"3469":{"position":[[556,4]]},"3471":{"position":[[522,4]]},"3473":{"position":[[546,4]]},"3477":{"position":[[266,4]]},"3479":{"position":[[344,4]]},"3481":{"position":[[1135,4]]},"3483":{"position":[[219,4]]},"3485":{"position":[[1306,4]]},"3487":{"position":[[291,4]]},"3594":{"position":[[307,4],[484,4],[661,4],[838,4]]},"3596":{"position":[[199,4],[319,4],[439,4],[723,4],[843,4],[1035,4]]},"3598":{"position":[[129,4],[2045,4]]},"3624":{"position":[[1699,4]]},"3674":{"position":[[150,4]]},"3748":{"position":[[55,4]]},"3750":{"position":[[129,4]]},"3752":{"position":[[93,4]]},"3786":{"position":[[1510,4]]},"3946":{"position":[[183,4],[342,4]]},"4275":{"position":[[205,4],[435,4],[678,4]]},"4279":{"position":[[242,4],[454,4]]},"4289":{"position":[[353,4],[465,4],[564,4],[672,4]]},"4305":{"position":[[121,4],[269,4]]},"4316":{"position":[[95,4],[239,4],[742,4]]},"4341":{"position":[[98,4]]},"4343":{"position":[[80,4]]},"4345":{"position":[[84,4]]},"4347":{"position":[[101,4]]},"4411":{"position":[[1599,4]]},"4472":{"position":[[50,4]]},"4523":{"position":[[327,4]]},"4525":{"position":[[458,4]]},"4527":{"position":[[341,4]]},"4529":{"position":[[277,4]]},"4531":{"position":[[438,4]]},"4533":{"position":[[224,4]]},"4535":{"position":[[206,4]]},"4891":{"position":[[300,4]]},"4893":{"position":[[541,4],[1142,4]]},"4895":{"position":[[962,4]]},"4897":{"position":[[885,4]]},"4899":{"position":[[327,4]]},"4901":{"position":[[834,4]]},"4903":{"position":[[968,4]]},"4905":{"position":[[217,4]]},"4909":{"position":[[811,4],[1530,4]]},"4911":{"position":[[704,4]]},"4913":{"position":[[596,4]]},"4915":{"position":[[200,4]]},"4917":{"position":[[401,4]]},"4919":{"position":[[420,4]]},"4921":{"position":[[446,4]]},"4923":{"position":[[226,4]]},"4925":{"position":[[339,4]]},"4927":{"position":[[529,4]]},"4929":{"position":[[301,4]]},"4931":{"position":[[435,4]]},"4933":{"position":[[651,4]]},"4935":{"position":[[360,4]]},"4937":{"position":[[500,4]]},"4939":{"position":[[636,4]]},"4941":{"position":[[494,4]]},"4943":{"position":[[511,4]]},"4945":{"position":[[714,4]]},"4947":{"position":[[850,4]]},"4951":{"position":[[411,4]]},"4953":{"position":[[310,4]]},"4955":{"position":[[300,4],[534,4]]},"4957":{"position":[[1232,4],[1605,4],[2389,4]]},"4959":{"position":[[144,4]]},"4961":{"position":[[519,4]]},"4963":{"position":[[769,4]]},"4965":{"position":[[926,4],[1403,4],[2184,4]]},"4967":{"position":[[1072,4]]},"4969":{"position":[[746,4],[973,4]]},"4971":{"position":[[551,4],[907,4]]},"4973":{"position":[[375,4],[2398,4]]},"4975":{"position":[[588,4],[2348,4]]},"4977":{"position":[[692,4],[3618,4]]},"4979":{"position":[[345,4],[751,4]]},"4981":{"position":[[548,4],[833,4]]},"4983":{"position":[[580,4],[1400,4]]},"4985":{"position":[[522,4]]},"4987":{"position":[[493,4]]},"4989":{"position":[[711,4],[2128,4]]},"4991":{"position":[[173,4]]},"4993":{"position":[[374,4]]},"4995":{"position":[[1314,4]]},"4997":{"position":[[651,4],[1006,4]]},"4999":{"position":[[371,4],[1460,4]]},"5001":{"position":[[687,4],[1656,4]]},"5003":{"position":[[285,4],[1274,4]]},"5005":{"position":[[601,4],[952,4]]},"5007":{"position":[[430,4],[1808,4]]},"5009":{"position":[[301,4],[2170,4]]},"5011":{"position":[[503,4],[2258,4]]},"5013":{"position":[[297,4],[687,4]]},"5015":{"position":[[489,4],[759,4]]},"5017":{"position":[[517,4]]},"5019":{"position":[[318,4]]},"5021":{"position":[[232,4]]},"5023":{"position":[[319,4]]},"5025":{"position":[[205,4]]},"5027":{"position":[[392,4]]},"5029":{"position":[[234,4]]},"5031":{"position":[[187,4],[424,4]]},"5033":{"position":[[858,4],[1600,4]]},"5035":{"position":[[354,4]]},"5037":{"position":[[368,4]]},"5039":{"position":[[1344,4],[1696,4]]},"5041":{"position":[[370,4]]},"5045":{"position":[[236,4]]},"5047":{"position":[[232,4]]},"5049":{"position":[[443,4]]},"5051":{"position":[[462,4]]},"5053":{"position":[[374,4]]},"5055":{"position":[[285,4]]},"5057":{"position":[[471,4]]},"5059":{"position":[[493,4]]},"5061":{"position":[[314,4]]},"5063":{"position":[[190,4]]},"5067":{"position":[[143,4]]},"5069":{"position":[[235,4]]},"5071":{"position":[[202,4]]},"5073":{"position":[[326,4]]},"5075":{"position":[[644,4]]},"5079":{"position":[[165,4]]},"5083":{"position":[[786,4]]},"5085":{"position":[[852,4]]},"5087":{"position":[[835,4]]},"5089":{"position":[[628,4]]},"5091":{"position":[[538,4]]},"5093":{"position":[[666,4]]},"5095":{"position":[[948,4]]},"5097":{"position":[[632,4]]},"5101":{"position":[[1327,4]]},"5103":{"position":[[502,4]]},"5105":{"position":[[178,4]]},"5109":{"position":[[157,4]]},"5111":{"position":[[282,4]]},"5114":{"position":[[193,4]]}}}],["postgresql",{"_index":2654,"t":{"3523":{"position":[[291,10]]}}}],["postman",{"_index":5,"t":{"2559":{"position":[[36,7],[100,7],[180,8]]},"3746":{"position":[[48,7],[104,7],[168,7],[248,8]]},"4309":{"position":[[553,7],[617,7],[697,8]]},"4887":{"position":[[523,7],[587,7],[667,8]]}}}],["potenti",{"_index":619,"t":{"2672":{"position":[[872,9]]},"2838":{"position":[[67,11]]},"4110":{"position":[[1257,10]]}}}],["pow",{"_index":622,"t":{"2674":{"position":[[105,3]]},"3499":{"position":[[239,6]]},"3788":{"position":[[442,5]]},"4355":{"position":[[561,3]]},"4419":{"position":[[42,3],[156,3],[931,3],[1025,3]]},"4737":{"position":[[595,3],[704,3],[773,3]]},"5017":{"position":[[241,4]]},"5037":{"position":[[194,4]]},"5075":{"position":[[245,3],[326,3]]}}}],["pprof",{"_index":1480,"t":{"2976":{"position":[[2483,6],[2519,7]]}}}],["practic",{"_index":2356,"t":{"3383":{"position":[[339,10]]},"3616":{"position":[[120,10]]},"3618":{"position":[[264,9]]},"4293":{"position":[[1135,10]]}}}],["pragma",{"_index":1612,"t":{"3018":{"position":[[210,6]]},"3329":{"position":[[51,6]]},"3724":{"position":[[521,6]]},"3726":{"position":[[387,6]]}}}],["pre",{"_index":994,"t":{"2782":{"position":[[3,3]]},"2834":{"position":[[888,3]]},"2866":{"position":[[224,3]]},"3242":{"position":[[528,3]]},"3244":{"position":[[428,3]]},"3368":{"position":[[127,3]]},"3624":{"position":[[852,3]]},"3786":{"position":[[1462,3]]},"3843":{"position":[[731,3]]},"3978":{"position":[[281,3]]},"3980":{"position":[[161,3]]},"3992":{"position":[[191,3]]},"4399":{"position":[[84,3]]},"4411":{"position":[[1463,3]]},"4553":{"position":[[539,3]]},"4751":{"position":[[137,3]]}}}],["preced",{"_index":3617,"t":{"3980":{"position":[[55,10]]},"4543":{"position":[[1156,9]]},"4547":{"position":[[218,10],[305,11]]}}}],["precompil",{"_index":479,"t":{"2636":{"position":[[176,11]]},"2638":{"position":[[212,10],[338,10],[430,10],[483,10],[577,10]]},"2676":{"position":[[56,11],[422,11],[2080,10],[2206,10],[2287,10],[2335,10],[2460,10]]},"3000":{"position":[[1353,10]]},"3012":{"position":[[660,11],[2319,10]]},"3461":{"position":[[35,11],[216,10]]},"4209":{"position":[[1305,11]]},"4551":{"position":[[55,11]]},"4553":{"position":[[1303,11]]}}}],["preconfigur",{"_index":2416,"t":{"3383":{"position":[[5011,13]]}}}],["predefin",{"_index":804,"t":{"2723":{"position":[[327,10]]},"3111":{"position":[[122,10]]},"4110":{"position":[[1052,10]]},"4633":{"position":[[523,10]]},"4737":{"position":[[136,10]]},"4767":{"position":[[370,10]]}}}],["prefer",{"_index":856,"t":{"2735":{"position":[[463,9]]},"2786":{"position":[[2487,7]]},"2852":{"position":[[16868,7]]},"3080":{"position":[[191,6]]},"3212":{"position":[[124,9]]},"3632":{"position":[[188,12]]},"3786":{"position":[[409,9]]},"3816":{"position":[[80,10]]},"4041":{"position":[[348,9]]},"4043":{"position":[[137,7]]}}}],["prefix",{"_index":1037,"t":{"2786":{"position":[[1121,7]]},"2852":{"position":[[15184,7]]},"2886":{"position":[[39,7]]},"3157":{"position":[[214,7]]},"3204":{"position":[[360,6]]},"3224":{"position":[[2078,7]]},"4157":{"position":[[260,7],[307,7]]},"4403":{"position":[[317,8]]},"4613":{"position":[[214,7]]},"4623":{"position":[[428,7]]},"4903":{"position":[[646,7]]}}}],["premis",{"_index":1373,"t":{"2952":{"position":[[286,7]]},"3349":{"position":[[40,7]]},"3355":{"position":[[507,8]]},"3383":{"position":[[1078,7]]},"3385":{"position":[[1172,7]]},"3497":{"position":[[172,9]]},"3501":{"position":[[261,7]]},"3530":{"position":[[780,7]]}}}],["prepar",{"_index":2639,"t":{"3501":{"position":[[220,11]]},"4341":{"position":[[0,7]]},"4533":{"position":[[0,8]]}}}],["prerequisit",{"_index":911,"t":{"2757":{"position":[[0,14]]},"2822":{"position":[[106,14]]},"2828":{"position":[[69,14]]},"2931":{"position":[[0,14]]},"4561":{"position":[[43,13]]},"4581":{"position":[[43,13]]}}}],["presenc",{"_index":3801,"t":{"4110":{"position":[[834,8]]}}}],["present",{"_index":277,"t":{"2592":{"position":[[116,8]]},"3192":{"position":[[323,9]]},"3395":{"position":[[217,7]]},"3413":{"position":[[217,7]]},"3481":{"position":[[217,7]]},"3606":{"position":[[466,8]]},"3616":{"position":[[299,7],[2698,7]]},"4084":{"position":[[47,8]]},"4451":{"position":[[133,8]]},"4803":{"position":[[356,9]]}}}],["preset",{"_index":4300,"t":{"4395":{"position":[[287,6]]}}}],["press",{"_index":1844,"t":{"3141":{"position":[[458,8]]},"3157":{"position":[[540,8]]},"3687":{"position":[[247,5]]},"4415":{"position":[[427,8]]},"4613":{"position":[[540,8]]}}}],["prestat",{"_index":4435,"t":{"4482":{"position":[[206,8]]}}}],["pretti",{"_index":4009,"t":{"4242":{"position":[[194,6],[218,6]]},"4685":{"position":[[62,6],[105,6],[172,6],[222,6]]}}}],["prevent",{"_index":139,"t":{"2567":{"position":[[448,7],[506,7]]},"2598":{"position":[[128,7]]},"2709":{"position":[[151,8],[1033,10]]},"2749":{"position":[[411,8]]},"3097":{"position":[[18,10]]},"3544":{"position":[[49,7]]},"3710":{"position":[[367,7]]},"3956":{"position":[[151,8],[1039,10]]},"4116":{"position":[[0,7],[623,7]]},"4143":{"position":[[709,9],[739,7]]},"4252":{"position":[[3,7]]},"4281":{"position":[[534,7]]},"4336":{"position":[[3,7]]},"4753":{"position":[[313,7]]},"4757":{"position":[[580,7]]},"4767":{"position":[[298,7],[386,10],[518,8]]}}}],["preview",{"_index":2418,"t":{"3385":{"position":[[223,7],[2032,7],[2249,8],[2610,7],[2656,7],[2695,7]]}}}],["previou",{"_index":535,"t":{"2646":{"position":[[403,8]]},"2650":{"position":[[210,8]]},"2652":{"position":[[191,8]]},"2660":{"position":[[25,8]]},"2666":{"position":[[251,8]]},"2739":{"position":[[115,8]]},"3000":{"position":[[282,8]]},"3254":{"position":[[2470,8]]},"3485":{"position":[[928,8]]},"3618":{"position":[[1162,8]]},"3691":{"position":[[90,8]]},"3718":{"position":[[715,8]]},"3724":{"position":[[938,8]]},"3726":{"position":[[1296,8]]},"3762":{"position":[[74,8],[817,8]]},"3774":{"position":[[392,8]]},"3874":{"position":[[915,8]]},"4179":{"position":[[332,8]]},"4411":{"position":[[437,8]]},"4441":{"position":[[184,8]]},"4607":{"position":[[1320,8],[1748,8]]},"4609":{"position":[[799,8]]},"4627":{"position":[[261,8]]}}}],["previous",{"_index":798,"t":{"2721":{"position":[[52,10]]},"2854":{"position":[[2251,10]]},"3790":{"position":[[80,11],[145,11]]},"3812":{"position":[[798,10]]},"3872":{"position":[[639,10]]},"3932":{"position":[[52,10]]},"3952":{"position":[[203,10]]},"4122":{"position":[[156,10]]},"4379":{"position":[[357,10]]},"4883":{"position":[[422,10]]}}}],["prevrandao",{"_index":1109,"t":{"2794":{"position":[[304,10],[404,10]]},"2860":{"position":[[304,10],[404,10]]},"2890":{"position":[[304,10],[404,10]]},"4343":{"position":[[1076,13]]},"4345":{"position":[[1004,13]]},"4510":{"position":[[416,10]]},"4514":{"position":[[135,10],[175,10]]},"4533":{"position":[[1334,13]]},"4535":{"position":[[1126,13],[2389,13]]}}}],["price",{"_index":1201,"t":{"2834":{"position":[[102,5],[115,5],[178,6],[570,5],[674,5],[773,5],[809,5],[1103,5],[1197,7]]},"2842":{"position":[[41,5],[178,5],[243,5],[318,6]]},"2844":{"position":[[531,5]]},"2848":{"position":[[47,5]]},"3006":{"position":[[638,5]]},"3131":{"position":[[161,6]]},"3250":{"position":[[3878,5]]},"3252":{"position":[[680,5]]},"3693":{"position":[[1015,5]]},"3756":{"position":[[2258,5]]},"3819":{"position":[[109,6],[214,5],[249,5],[296,5],[444,5],[482,5],[529,5],[666,5],[705,5],[828,5],[872,5]]},"3821":{"position":[[180,5],[244,5],[271,5],[322,5],[358,5],[435,5]]},"3823":{"position":[[1465,5],[1505,5],[1644,5],[1677,5]]},"3831":{"position":[[237,5],[1062,6],[1192,6]]},"4205":{"position":[[579,5]]},"4275":{"position":[[403,6]]},"4360":{"position":[[139,5],[228,5],[333,5]]},"4397":{"position":[[346,6]]},"4407":{"position":[[667,6]]},"4409":{"position":[[421,6]]},"4460":{"position":[[44,5]]},"4615":{"position":[[73,5],[106,5],[159,5]]},"4617":{"position":[[73,5],[103,5],[156,5],[184,5]]},"4619":{"position":[[73,5],[109,5],[170,5],[302,5],[321,5],[358,5],[377,5]]},"4717":{"position":[[172,5],[256,5],[484,5],[549,5],[624,6]]},"4853":{"position":[[70,5],[106,5],[165,5],[190,5],[268,6]]},"4869":{"position":[[195,6]]},"4873":{"position":[[65,5],[96,5],[145,5],[163,5],[278,6]]},"4969":{"position":[[30,5],[150,5],[245,5],[325,5],[345,5],[409,5],[433,5],[466,5],[606,5]]},"5045":{"position":[[125,5]]},"5049":{"position":[[21,5],[133,5],[287,6],[349,5]]},"5057":{"position":[[21,5],[133,5],[284,6],[337,5],[403,5]]},"5101":{"position":[[471,5],[869,6]]}}}],["price=\"2000",{"_index":5108,"t":{"4869":{"position":[[166,12]]}}}],["price=0",{"_index":1221,"t":{"2842":{"position":[[98,7],[114,7]]},"3565":{"position":[[394,7]]},"3693":{"position":[[328,7],[606,7]]},"3695":{"position":[[473,7],[820,7]]},"3697":{"position":[[473,7],[820,7]]},"3699":{"position":[[473,7],[820,7]]}}}],["price=10",{"_index":4411,"t":{"4460":{"position":[[35,8]]}}}],["price=1337",{"_index":4864,"t":{"4717":{"position":[[106,10],[149,10]]}}}],["price=2000",{"_index":5106,"t":{"4869":{"position":[[107,10]]}}}],["price=[,:8545",{"_index":740,"t":{"2707":{"position":[[354,9]]},"3954":{"position":[[354,9]]}}}],["rpc_tcp_8545",{"_index":3662,"t":{"4029":{"position":[[416,12]]}}}],["rpcendpointservic",{"_index":1829,"t":{"3139":{"position":[[993,18]]}}}],["rpcnode",{"_index":3137,"t":{"3754":{"position":[[71,7]]}}}],["rs256",{"_index":4068,"t":{"4293":{"position":[[162,6],[290,6],[486,5]]},"4295":{"position":[[203,6]]},"4777":{"position":[[354,6],[415,6]]},"4825":{"position":[[351,6],[412,6]]}}}],["rs384",{"_index":4069,"t":{"4293":{"position":[[169,6]]},"4295":{"position":[[210,6]]},"4777":{"position":[[361,6]]},"4825":{"position":[[358,6]]}}}],["rs512",{"_index":4070,"t":{"4293":{"position":[[179,6]]},"4295":{"position":[[217,6]]},"4777":{"position":[[368,6]]},"4825":{"position":[[365,6]]}}}],["rsa",{"_index":4066,"t":{"4293":{"position":[[96,3],[492,3],[630,3]]}}}],["rsync",{"_index":859,"t":{"2735":{"position":[[517,6]]}}}],["rule",{"_index":127,"t":{"2567":{"position":[[226,5],[366,6],[416,6]]},"2575":{"position":[[460,5]]},"2577":{"position":[[244,6],[406,7],[527,6],[684,6]]},"2582":{"position":[[501,5],[599,5]]},"2588":{"position":[[174,5],[189,5],[235,6]]},"3044":{"position":[[1378,6]]},"3368":{"position":[[112,5]]},"3538":{"position":[[146,6],[508,5]]},"3612":{"position":[[2802,5]]},"3624":{"position":[[151,6],[864,5],[1007,5],[1269,5],[1323,5]]},"4102":{"position":[[436,5]]},"4553":{"position":[[1669,4]]},"4607":{"position":[[201,6],[308,6]]},"4609":{"position":[[367,6]]}}}],["run",{"_index":14,"t":{"2559":{"position":[[173,3],[243,3]]},"2668":{"position":[[401,3]]},"2672":{"position":[[768,3]]},"2676":{"position":[[2956,3]]},"2686":{"position":[[272,7]]},"2703":{"position":[[32,3],[96,3]]},"2705":{"position":[[56,3]]},"2707":{"position":[[283,3],[332,3],[629,3],[669,3],[784,3]]},"2709":{"position":[[191,3],[363,7],[597,3],[749,7]]},"2711":{"position":[[3,3],[103,3]]},"2713":{"position":[[10,7],[140,3]]},"2725":{"position":[[117,8]]},"2727":{"position":[[3,3]]},"2729":{"position":[[3,3],[515,7]]},"2737":{"position":[[32,8]]},"2747":{"position":[[590,7]]},"2751":{"position":[[262,7]]},"2778":{"position":[[771,3]]},"2786":{"position":[[1492,7]]},"2790":{"position":[[1216,3]]},"2816":{"position":[[165,7]]},"2834":{"position":[[437,3]]},"2852":{"position":[[15877,7]]},"2962":{"position":[[248,3],[486,3]]},"2966":{"position":[[30,8],[39,3]]},"2968":{"position":[[227,8]]},"2976":{"position":[[2749,3],[2843,3],[3039,3],[3368,3]]},"2978":{"position":[[212,3],[271,7],[325,7],[474,3]]},"2982":{"position":[[3,3]]},"2986":{"position":[[298,3]]},"2989":{"position":[[223,7]]},"2991":{"position":[[46,3],[668,3],[699,7],[728,3]]},"2996":{"position":[[82,3],[256,3]]},"3028":{"position":[[760,7],[1104,3]]},"3040":{"position":[[48,8]]},"3048":{"position":[[50,8]]},"3052":{"position":[[719,7]]},"3072":{"position":[[146,4]]},"3080":{"position":[[0,7]]},"3085":{"position":[[104,7]]},"3101":{"position":[[92,3]]},"3105":{"position":[[37,7],[88,7]]},"3141":{"position":[[339,4]]},"3198":{"position":[[230,8]]},"3212":{"position":[[195,8],[204,3]]},"3214":{"position":[[263,7]]},"3250":{"position":[[1379,3],[1451,3],[1769,3],[4145,3]]},"3254":{"position":[[454,7],[559,7]]},"3256":{"position":[[391,7]]},"3272":{"position":[[263,7]]},"3295":{"position":[[265,7]]},"3376":{"position":[[226,3]]},"3378":{"position":[[54,7],[152,3]]},"3380":{"position":[[189,4],[224,3],[276,3]]},"3383":{"position":[[2037,3]]},"3385":{"position":[[2128,3],[2493,8],[3230,3]]},"3491":{"position":[[41,7]]},"3505":{"position":[[41,7]]},"3511":{"position":[[98,4]]},"3521":{"position":[[41,7]]},"3526":{"position":[[24,8]]},"3532":{"position":[[744,8]]},"3540":{"position":[[58,3],[735,3]]},"3548":{"position":[[842,7]]},"3598":{"position":[[257,7]]},"3604":{"position":[[41,7]]},"3610":{"position":[[290,3]]},"3624":{"position":[[1617,7]]},"3630":{"position":[[83,4],[417,4],[513,7]]},"3632":{"position":[[3,3]]},"3635":{"position":[[49,4],[112,3]]},"3637":{"position":[[11,7],[38,3]]},"3645":{"position":[[139,3]]},"3650":{"position":[[510,7]]},"3695":{"position":[[997,7]]},"3703":{"position":[[579,3],[704,3]]},"3718":{"position":[[238,7]]},"3730":{"position":[[62,3],[156,4],[252,7]]},"3732":{"position":[[381,7]]},"3734":{"position":[[59,4],[122,3]]},"3736":{"position":[[111,4],[166,4],[1996,4]]},"3738":{"position":[[524,3],[932,8],[941,3]]},"3742":{"position":[[8,3]]},"3746":{"position":[[13,3],[241,3],[311,3]]},"3748":{"position":[[0,3],[204,7],[545,7],[586,7],[646,3],[836,3]]},"3760":{"position":[[27,8],[72,3],[147,3],[163,3],[224,3]]},"3762":{"position":[[9,4],[133,8],[245,3],[294,3]]},"3764":{"position":[[1038,3]]},"3768":{"position":[[83,7]]},"3770":{"position":[[114,7],[290,7]]},"3772":{"position":[[53,7]]},"3774":{"position":[[143,7]]},"3786":{"position":[[106,3],[211,3],[316,3]]},"3788":{"position":[[329,4]]},"3792":{"position":[[248,3]]},"3794":{"position":[[487,3],[669,3],[901,3]]},"3853":{"position":[[34,7],[121,3]]},"3858":{"position":[[0,3]]},"3860":{"position":[[10,7],[100,7]]},"3862":{"position":[[0,3]]},"3864":{"position":[[105,7]]},"3866":{"position":[[3052,7],[3135,7]]},"3872":{"position":[[244,4]]},"3876":{"position":[[192,7],[667,7]]},"3882":{"position":[[270,7]]},"3889":{"position":[[0,3],[243,3]]},"3894":{"position":[[0,3]]},"3896":{"position":[[10,7],[100,7]]},"3898":{"position":[[0,3]]},"3900":{"position":[[105,7]]},"3902":{"position":[[3056,7],[3139,7]]},"3908":{"position":[[36,4],[646,7]]},"3910":{"position":[[79,7]]},"3912":{"position":[[99,3]]},"3918":{"position":[[1472,7]]},"3920":{"position":[[67,3],[243,3]]},"3938":{"position":[[3,3]]},"3940":{"position":[[3,3]]},"3942":{"position":[[3,3]]},"3944":{"position":[[3,3],[47,3]]},"3946":{"position":[[117,8]]},"3948":{"position":[[32,3],[96,3]]},"3950":{"position":[[52,3]]},"3952":{"position":[[3,3],[76,3],[236,4]]},"3954":{"position":[[283,3],[332,3],[629,3],[669,3],[784,3]]},"3956":{"position":[[191,3],[363,7],[605,3],[755,7]]},"3958":{"position":[[3,3],[103,3]]},"3960":{"position":[[3,3],[33,3]]},"3962":{"position":[[3,3],[81,3]]},"3964":{"position":[[10,7],[140,3]]},"3968":{"position":[[45,4]]},"3976":{"position":[[7,7]]},"3984":{"position":[[342,3]]},"3992":{"position":[[350,3]]},"4000":{"position":[[185,3],[340,4]]},"4002":{"position":[[87,3]]},"4027":{"position":[[105,7]]},"4033":{"position":[[124,8]]},"4039":{"position":[[67,7]]},"4043":{"position":[[70,4],[427,3]]},"4048":{"position":[[440,3]]},"4050":{"position":[[834,7]]},"4054":{"position":[[173,3]]},"4060":{"position":[[10,7],[496,3]]},"4062":{"position":[[282,7],[410,3],[472,3],[621,3],[667,7],[714,7],[3128,3]]},"4066":{"position":[[213,7]]},"4076":{"position":[[123,7]]},"4080":{"position":[[196,8],[247,7]]},"4084":{"position":[[69,3]]},"4086":{"position":[[145,7],[221,3]]},"4088":{"position":[[145,7],[218,7]]},"4090":{"position":[[640,7]]},"4096":{"position":[[332,8]]},"4098":{"position":[[24,7],[94,7],[163,7],[230,7]]},"4100":{"position":[[235,7]]},"4102":{"position":[[49,7],[121,7]]},"4104":{"position":[[45,7],[234,3],[278,3]]},"4110":{"position":[[171,7]]},"4137":{"position":[[64,3]]},"4141":{"position":[[509,3],[661,3]]},"4143":{"position":[[416,3],[560,5],[928,8]]},"4151":{"position":[[28,3],[842,3],[1401,7],[1711,3]]},"4153":{"position":[[123,7],[312,3],[725,3],[1302,3]]},"4157":{"position":[[0,3]]},"4161":{"position":[[383,8]]},"4169":{"position":[[5,7]]},"4171":{"position":[[196,7]]},"4173":{"position":[[206,3]]},"4197":{"position":[[22,3]]},"4199":{"position":[[3,3],[48,3]]},"4201":{"position":[[31,4]]},"4209":{"position":[[686,7],[1103,7],[1162,7],[1375,3],[1470,7],[1568,3],[1602,3]]},"4238":{"position":[[121,7]]},"4281":{"position":[[664,7]]},"4309":{"position":[[690,3],[760,3]]},"4334":{"position":[[194,7]]},"4358":{"position":[[1198,7]]},"4401":{"position":[[428,7]]},"4415":{"position":[[308,4]]},"4421":{"position":[[470,7]]},"4425":{"position":[[654,8]]},"4437":{"position":[[269,4],[357,3],[405,7]]},"4441":{"position":[[142,3]]},"4443":{"position":[[239,3]]},"4492":{"position":[[447,7]]},"4502":{"position":[[505,3]]},"4504":{"position":[[49,3],[498,3],[902,3]]},"4520":{"position":[[87,7]]},"4525":{"position":[[135,4]]},"4553":{"position":[[308,7]]},"4559":{"position":[[0,3]]},"4563":{"position":[[0,3]]},"4565":{"position":[[10,7],[84,7]]},"4567":{"position":[[0,3]]},"4571":{"position":[[3,3],[62,3]]},"4573":{"position":[[3,3],[64,3]]},"4575":{"position":[[3040,7],[3107,7]]},"4579":{"position":[[0,3],[162,3]]},"4583":{"position":[[0,3]]},"4585":{"position":[[10,7],[84,7]]},"4587":{"position":[[0,3]]},"4591":{"position":[[3,3],[62,3]]},"4593":{"position":[[3,3],[64,3],[626,3]]},"4595":{"position":[[3040,7],[3107,7]]},"4607":{"position":[[933,8],[2688,4]]},"4707":{"position":[[477,8]]},"4717":{"position":[[334,7]]},"4719":{"position":[[279,7]]},"4747":{"position":[[328,7]]},"4781":{"position":[[686,3]]},"4847":{"position":[[528,7],[660,7]]},"4849":{"position":[[884,8]]},"4887":{"position":[[660,3],[730,3]]},"4899":{"position":[[264,7]]},"4901":{"position":[[142,7],[577,7]]},"4995":{"position":[[155,3]]}}}],["run.sh",{"_index":2932,"t":{"3637":{"position":[[124,8]]},"3736":{"position":[[116,8]]},"3782":{"position":[[41,9]]}}}],["runasus",{"_index":4654,"t":{"4607":{"position":[[3141,10],[4160,10]]}}}],["runner/docs/config#hd",{"_index":3830,"t":{"4131":{"position":[[425,21]]}}}],["runtim",{"_index":772,"t":{"2709":{"position":[[933,8]]},"3956":{"position":[[939,8]]},"4052":{"position":[[279,7]]},"4133":{"position":[[103,7]]},"4143":{"position":[[496,7]]}}}],["s",{"_index":1801,"t":{"3131":{"position":[[577,1],[610,2]]},"3463":{"position":[[2292,4]]},"3827":{"position":[[243,2]]},"4377":{"position":[[1774,4]]},"4397":{"position":[[1181,1],[1214,2]]},"4407":{"position":[[1700,1],[1733,2]]},"4915":{"position":[[2945,4],[7508,4]]},"4999":{"position":[[1374,4]]},"5001":{"position":[[1570,4]]},"5003":{"position":[[1188,4]]},"5101":{"position":[[2166,4]]}}}],["s\":\"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8",{"_index":4259,"t":{"4373":{"position":[[3355,73]]}}}],["s3",{"_index":862,"t":{"2735":{"position":[[554,3]]}}}],["sa",{"_index":2388,"t":{"3383":{"position":[[2969,2],[4774,2],[5001,2]]},"3561":{"position":[[155,5]]},"3606":{"position":[[1354,3],[1442,2]]},"3614":{"position":[[540,3],[628,2]]},"3616":{"position":[[1007,3],[1095,2]]},"3689":{"position":[[336,5],[1069,5],[1802,5],[2535,5]]}}}],["safe",{"_index":757,"t":{"2709":{"position":[[170,6]]},"3393":{"position":[[200,5]]},"3395":{"position":[[408,5],[597,5]]},"3413":{"position":[[421,5],[610,5]]},"3417":{"position":[[214,5]]},"3439":{"position":[[418,5]]},"3443":{"position":[[289,5]]},"3451":{"position":[[390,5]]},"3481":{"position":[[421,5],[610,5]]},"3485":{"position":[[1149,5]]},"3710":{"position":[[761,5]]},"3956":{"position":[[170,6]]},"4048":{"position":[[370,6]]},"4084":{"position":[[62,6]]},"4293":{"position":[[1047,4]]},"4328":{"position":[[1235,4],[1278,4]]},"4512":{"position":[[162,6]]},"4897":{"position":[[214,5],[397,5]]},"4917":{"position":[[210,5]]},"4919":{"position":[[220,5]]},"4921":{"position":[[238,5]]},"4927":{"position":[[346,5]]},"4931":{"position":[[252,5]]},"4945":{"position":[[246,5]]},"4947":{"position":[[382,5]]},"4957":{"position":[[1008,5]]},"4963":{"position":[[278,5]]},"4967":{"position":[[707,5]]},"4971":{"position":[[317,5]]},"4975":{"position":[[234,5]]},"4977":{"position":[[459,5]]},"4981":{"position":[[244,5]]},"4983":{"position":[[359,5]]},"4993":{"position":[[205,5]]},"4995":{"position":[[572,5]]},"4997":{"position":[[346,5]]},"5001":{"position":[[256,5]]},"5005":{"position":[[382,5]]},"5011":{"position":[[212,5]]},"5015":{"position":[[238,5]]},"5083":{"position":[[404,5]]},"5085":{"position":[[407,5]]},"5087":{"position":[[563,5]]},"5095":{"position":[[347,5]]}}}],["safeblockhash",{"_index":4154,"t":{"4341":{"position":[[264,16]]},"4347":{"position":[[267,16]]},"4512":{"position":[[133,13]]},"4527":{"position":[[507,16],[885,16]]}}}],["same",{"_index":400,"t":{"2620":{"position":[[140,4]]},"2624":{"position":[[247,4],[763,4]]},"2628":{"position":[[1305,4]]},"2636":{"position":[[757,4]]},"2638":{"position":[[138,4]]},"2648":{"position":[[70,4]]},"2652":{"position":[[161,4]]},"2656":{"position":[[30,4]]},"2666":{"position":[[302,4]]},"2670":{"position":[[553,4]]},"2676":{"position":[[1681,4],[2006,4]]},"2727":{"position":[[377,4]]},"2737":{"position":[[184,4]]},"2743":{"position":[[54,4]]},"2786":{"position":[[1385,4]]},"2792":{"position":[[246,4]]},"2800":{"position":[[69,4]]},"2816":{"position":[[517,4]]},"2852":{"position":[[15770,4]]},"2858":{"position":[[246,4]]},"2864":{"position":[[2155,4]]},"2884":{"position":[[377,4]]},"2898":{"position":[[63,4]]},"2962":{"position":[[760,4]]},"3000":{"position":[[960,4],[1041,4]]},"3028":{"position":[[311,4]]},"3036":{"position":[[997,4]]},"3042":{"position":[[338,4],[500,4]]},"3044":{"position":[[2352,4]]},"3052":{"position":[[368,4]]},"3078":{"position":[[29,4]]},"3085":{"position":[[124,4]]},"3089":{"position":[[280,4]]},"3105":{"position":[[120,4]]},"3107":{"position":[[266,4]]},"3160":{"position":[[534,4]]},"3168":{"position":[[519,4]]},"3182":{"position":[[445,4]]},"3224":{"position":[[238,4]]},"3264":{"position":[[268,4]]},"3337":{"position":[[40,4]]},"3339":{"position":[[477,4]]},"3341":{"position":[[43,4]]},"3351":{"position":[[89,4]]},"3355":{"position":[[380,4]]},"3385":{"position":[[1853,4]]},"3393":{"position":[[263,4]]},"3395":{"position":[[660,4]]},"3413":{"position":[[673,4]]},"3417":{"position":[[277,4]]},"3439":{"position":[[129,4],[481,4]]},"3443":{"position":[[352,4]]},"3451":{"position":[[453,4]]},"3453":{"position":[[176,4]]},"3457":{"position":[[123,4]]},"3459":{"position":[[104,4]]},"3465":{"position":[[145,4]]},"3469":{"position":[[238,4]]},"3473":{"position":[[271,4]]},"3481":{"position":[[673,4]]},"3485":{"position":[[631,5]]},"3495":{"position":[[339,4]]},"3523":{"position":[[46,4]]},"3594":{"position":[[1032,4]]},"3596":{"position":[[576,4]]},"3618":{"position":[[1824,4]]},"3695":{"position":[[859,4]]},"3697":{"position":[[859,4]]},"3699":{"position":[[859,4]]},"3714":{"position":[[98,4],[492,5]]},"3716":{"position":[[30,4]]},"3718":{"position":[[475,4]]},"3770":{"position":[[65,4]]},"3784":{"position":[[565,4]]},"3786":{"position":[[354,4]]},"3794":{"position":[[912,4]]},"3819":{"position":[[70,4]]},"3849":{"position":[[228,4]]},"3876":{"position":[[1870,4]]},"3938":{"position":[[377,4]]},"3982":{"position":[[277,4],[867,4]]},"3992":{"position":[[501,4]]},"3998":{"position":[[43,4]]},"4016":{"position":[[115,4]]},"4018":{"position":[[115,4]]},"4027":{"position":[[64,4]]},"4062":{"position":[[355,4]]},"4100":{"position":[[666,4]]},"4106":{"position":[[355,4]]},"4110":{"position":[[1895,4]]},"4118":{"position":[[525,4]]},"4128":{"position":[[41,4]]},"4145":{"position":[[538,4]]},"4163":{"position":[[156,4]]},"4209":{"position":[[1137,4],[1485,4],[1635,4]]},"4271":{"position":[[656,4]]},"4273":{"position":[[137,4]]},"4316":{"position":[[473,4]]},"4318":{"position":[[676,4]]},"4373":{"position":[[288,4]]},"4375":{"position":[[1087,4]]},"4377":{"position":[[527,4]]},"4379":{"position":[[490,4]]},"4541":{"position":[[251,4]]},"4609":{"position":[[34,4]]},"4623":{"position":[[539,4]]},"4667":{"position":[[345,4]]},"4737":{"position":[[950,4]]},"4739":{"position":[[249,4]]},"4751":{"position":[[303,4]]},"4769":{"position":[[604,4]]},"4799":{"position":[[696,4]]},"4809":{"position":[[492,4]]},"4817":{"position":[[597,4]]},"4849":{"position":[[541,4]]},"4883":{"position":[[378,4],[450,4]]},"4897":{"position":[[460,4]]},"4913":{"position":[[118,4]]},"4917":{"position":[[273,4]]},"4919":{"position":[[283,4]]},"4921":{"position":[[301,4]]},"4927":{"position":[[409,4]]},"4931":{"position":[[315,4]]},"4939":{"position":[[172,4]]},"4945":{"position":[[309,4]]},"4947":{"position":[[445,4]]},"4957":{"position":[[1071,4]]},"4963":{"position":[[342,4]]},"4967":{"position":[[771,4]]},"4971":{"position":[[380,4]]},"4975":{"position":[[298,4]]},"4977":{"position":[[523,4]]},"4981":{"position":[[308,4]]},"4983":{"position":[[422,4]]},"4993":{"position":[[269,4]]},"4995":{"position":[[635,4]]},"4997":{"position":[[409,4]]},"5001":{"position":[[319,4]]},"5011":{"position":[[275,4]]},"5015":{"position":[[301,4]]},"5039":{"position":[[591,4],[785,4]]},"5053":{"position":[[141,4]]},"5075":{"position":[[405,5]]},"5083":{"position":[[467,4]]},"5085":{"position":[[470,4]]},"5087":{"position":[[44,4],[626,4]]},"5095":{"position":[[410,4]]},"5101":{"position":[[542,4]]}}}],["sampl",{"_index":696,"t":{"2695":{"position":[[109,6]]},"2956":{"position":[[846,6]]},"3002":{"position":[[598,6]]},"3052":{"position":[[829,6]]},"3740":{"position":[[4,6]]},"3764":{"position":[[173,6]]},"3768":{"position":[[95,6]]},"3966":{"position":[[126,6]]},"3982":{"position":[[1007,6]]},"4120":{"position":[[401,6]]},"4147":{"position":[[168,6]]},"4259":{"position":[[467,6]]},"4295":{"position":[[99,6]]},"4967":{"position":[[880,6]]}}}],["sapm",{"_index":1471,"t":{"2976":{"position":[[2235,5],[2617,5]]}}}],["satisfi",{"_index":1047,"t":{"2786":{"position":[[2075,9]]},"2852":{"position":[[16456,9]]},"5101":{"position":[[588,9]]}}}],["satur",{"_index":3715,"t":{"4052":{"position":[[351,8]]}}}],["save",{"_index":840,"t":{"2729":{"position":[[241,4]]},"2991":{"position":[[647,4]]},"3220":{"position":[[88,5]]},"3224":{"position":[[335,4]]},"3262":{"position":[[88,5]]},"3264":{"position":[[480,4]]},"3303":{"position":[[496,4]]},"3385":{"position":[[3138,5]]},"3576":{"position":[[496,4]]},"3584":{"position":[[168,4]]},"3658":{"position":[[488,4]]},"3687":{"position":[[336,5]]},"3705":{"position":[[174,5],[618,4]]},"3758":{"position":[[231,4]]},"3760":{"position":[[842,4]]},"3823":{"position":[[724,4],[754,4],[1967,4],[2008,6]]},"3860":{"position":[[316,4]]},"3896":{"position":[[595,4]]},"3940":{"position":[[181,4]]},"3942":{"position":[[181,4]]},"4041":{"position":[[746,4]]},"4052":{"position":[[261,5],[537,5]]},"4062":{"position":[[1863,6]]},"4143":{"position":[[104,4]]},"4240":{"position":[[396,5]]},"4565":{"position":[[303,4]]},"4585":{"position":[[555,4]]},"4607":{"position":[[2763,5]]},"4855":{"position":[[72,4],[117,4],[188,4],[226,6],[414,4]]},"4879":{"position":[[65,4],[92,4],[201,4],[318,4],[383,4]]}}}],["sbin/entrypoint.sh",{"_index":1520,"t":{"2986":{"position":[[582,22]]}}}],["scale",{"_index":2282,"t":{"3353":{"position":[[346,5]]},"3833":{"position":[[54,7]]},"4953":{"position":[[78,7]]}}}],["scenario",{"_index":569,"t":{"2664":{"position":[[465,9]]},"3256":{"position":[[193,9]]},"3918":{"position":[[2660,8]]},"4240":{"position":[[342,10]]}}}],["schedul",{"_index":2679,"t":{"3530":{"position":[[495,9]]},"4209":{"position":[[1722,9]]}}}],["schema",{"_index":1868,"t":{"3153":{"position":[[132,6],[182,6],[315,6],[335,10]]},"4273":{"position":[[208,6]]},"4277":{"position":[[165,6]]},"4949":{"position":[[283,7]]}}}],["schema.org/draft",{"_index":1871,"t":{"3153":{"position":[[359,16]]}}}],["scheme",{"_index":1064,"t":{"2788":{"position":[[653,6]]},"2854":{"position":[[1191,6]]},"3093":{"position":[[353,7]]},"3778":{"position":[[317,7]]},"4151":{"position":[[325,7],[579,7]]},"4153":{"position":[[552,7]]},"4349":{"position":[[147,8],[330,6],[349,7]]},"4353":{"position":[[69,7],[547,7],[631,6],[663,6]]},"4355":{"position":[[524,7],[608,7]]},"4661":{"position":[[471,7]]}}}],["scope",{"_index":1716,"t":{"3078":{"position":[[132,5]]},"3358":{"position":[[282,7]]},"3383":{"position":[[4614,5]]},"4056":{"position":[[325,5]]},"4163":{"position":[[1008,5]]}}}],["scrape",{"_index":2823,"t":{"3612":{"position":[[639,7]]}}}],["scrape_config",{"_index":3213,"t":{"3778":{"position":[[131,14]]},"4151":{"position":[[130,14],[411,15]]},"4153":{"position":[[455,14]]}}}],["scrape_interv",{"_index":3215,"t":{"3778":{"position":[[253,16]]},"4151":{"position":[[261,16],[390,16],[515,16],[708,15]]}}}],["scrape_timeout",{"_index":3216,"t":{"3778":{"position":[[274,15]]},"4151":{"position":[[282,15],[536,15]]}}}],["scraper",{"_index":2310,"t":{"3366":{"position":[[203,7]]}}}],["scratch",{"_index":3154,"t":{"3756":{"position":[[1802,7]]}}}],["screenshot",{"_index":1420,"t":{"2964":{"position":[[76,11]]},"4171":{"position":[[14,10]]},"4173":{"position":[[261,10]]},"4183":{"position":[[122,10]]}}}],["script",{"_index":1397,"t":{"2956":{"position":[[870,7]]},"3002":{"position":[[622,7]]},"3072":{"position":[[204,6]]},"3250":{"position":[[1891,7]]},"3254":{"position":[[339,7]]},"3385":{"position":[[3248,7]]},"3610":{"position":[[270,7]]},"3637":{"position":[[137,6]]},"3639":{"position":[[880,6]]},"3736":{"position":[[129,6]]},"3754":{"position":[[406,6],[685,6]]},"3758":{"position":[[519,7],[536,7]]},"3772":{"position":[[75,7]]},"4054":{"position":[[243,7]]},"4137":{"position":[[56,7]]},"4474":{"position":[[187,8]]}}}],["script/bootstrap.sh",{"_index":2813,"t":{"3606":{"position":[[1515,19]]},"3614":{"position":[[701,19]]},"3616":{"position":[[1168,19]]}}}],["scripts/bootstrap.sh",{"_index":2435,"t":{"3385":{"position":[[3439,22]]}}}],["scripts/deploy_my_contract.t",{"_index":3839,"t":{"4137":{"position":[[68,31]]}}}],["scripts/deploy_quorumtoken.t",{"_index":3190,"t":{"3764":{"position":[[1042,31]]}}}],["scripts/private/private_tx.j",{"_index":2954,"t":{"3639":{"position":[[846,29],[1215,29]]}}}],["scripts/public/hre_1559_public_tx.j",{"_index":3138,"t":{"3754":{"position":[[227,36]]}}}],["scripts/public/hre_eth_tx.j",{"_index":3149,"t":{"3754":{"position":[[1890,28]]}}}],["scripts/public/hre_public_tx.j",{"_index":3139,"t":{"3754":{"position":[[285,31]]}}}],["scsi",{"_index":730,"t":{"2701":{"position":[[158,4]]},"3974":{"position":[[158,4]]}}}],["sdk",{"_index":1493,"t":{"2976":{"position":[[3916,3]]},"3534":{"position":[[545,4]]},"3546":{"position":[[447,4]]},"3548":{"position":[[590,4]]},"3550":{"position":[[443,4]]},"4098":{"position":[[582,4]]}}}],["seal",{"_index":1058,"t":{"2788":{"position":[[248,5],[298,5],[584,8]]},"2854":{"position":[[337,5],[387,5],[1013,8],[1122,8]]}}}],["sealer",{"_index":5687,"t":{"5019":{"position":[[158,7]]}}}],["search",{"_index":233,"t":{"2586":{"position":[[643,6]]},"2958":{"position":[[347,9]]},"2978":{"position":[[123,7]]},"2991":{"position":[[1282,6],[1320,6],[1416,6]]},"2996":{"position":[[415,6]]},"3028":{"position":[[1201,6]]},"3385":{"position":[[2916,6]]},"3513":{"position":[[140,6],[204,6]]},"3724":{"position":[[378,6]]},"3736":{"position":[[1110,7]]},"3738":{"position":[[103,9]]},"3756":{"position":[[1950,6],[2048,6]]},"3762":{"position":[[1171,6]]},"3868":{"position":[[110,9]]},"3904":{"position":[[126,9]]},"4215":{"position":[[35,6]]},"4577":{"position":[[110,9]]},"4597":{"position":[[126,9]]}}}],["searchabl",{"_index":3065,"t":{"3724":{"position":[[131,10]]}}}],["second",{"_index":587,"t":{"2666":{"position":[[524,8]]},"2786":{"position":[[813,8],[976,8],[2220,7],[2278,8],[2326,7],[2339,7]]},"2790":{"position":[[1129,7],[1442,6]]},"2800":{"position":[[128,6]]},"2852":{"position":[[14876,8],[15039,8],[16601,7],[16659,8],[16707,7],[16720,7]]},"2856":{"position":[[1146,7]]},"2864":{"position":[[2214,6]]},"2882":{"position":[[1002,8]]},"2898":{"position":[[120,6]]},"2962":{"position":[[640,6]]},"2986":{"position":[[374,7],[502,7],[520,7],[608,7],[626,7],[776,7],[794,7]]},"3080":{"position":[[325,7]]},"3145":{"position":[[484,6]]},"3293":{"position":[[124,6]]},"3303":{"position":[[326,6]]},"3530":{"position":[[213,6]]},"3576":{"position":[[326,6]]},"3612":{"position":[[3164,6]]},"3658":{"position":[[318,6]]},"3728":{"position":[[299,6],[362,6],[446,6]]},"3754":{"position":[[1713,6]]},"3839":{"position":[[128,8],[533,8]]},"3843":{"position":[[1165,7]]},"4151":{"position":[[730,8]]},"4187":{"position":[[154,7]]},"4189":{"position":[[158,8]]},"4355":{"position":[[323,6]]},"4373":{"position":[[375,6]]},"4525":{"position":[[159,7],[257,8]]},"4683":{"position":[[178,6]]},"4709":{"position":[[188,8]]},"5019":{"position":[[33,6],[256,6]]}}}],["seconds_per_slot",{"_index":3341,"t":{"3839":{"position":[[513,16]]}}}],["secp256k1",{"_index":1156,"t":{"2816":{"position":[[120,9],[439,12],[719,9]]},"4293":{"position":[[231,11]]},"4433":{"position":[[712,10],[767,9]]},"4435":{"position":[[733,10],[788,9]]},"4539":{"position":[[900,10]]}}}],["secp256r1",{"_index":1159,"t":{"2816":{"position":[[748,9]]},"4293":{"position":[[217,10],[507,9],[742,9]]},"4433":{"position":[[780,10]]},"4435":{"position":[[801,10]]}}}],["secret",{"_index":1363,"t":{"2950":{"position":[[235,6],[287,7]]},"3347":{"position":[[693,7],[750,8]]},"3362":{"position":[[174,7]]},"3383":{"position":[[381,7],[3415,7],[3608,7],[3759,7],[3773,7],[4074,7],[4672,7],[4766,7],[4993,7]]},"3385":{"position":[[468,7]]},"3606":{"position":[[1346,7],[1434,7],[2056,7]]},"3614":{"position":[[532,7],[620,7],[2720,8]]},"3616":{"position":[[999,7],[1087,7]]},"3858":{"position":[[174,6]]},"3862":{"position":[[456,6]]},"3894":{"position":[[174,6]]},"3898":{"position":[[730,6]]},"4035":{"position":[[582,7]]},"4293":{"position":[[927,7]]},"4338":{"position":[[232,6],[265,6]]},"4563":{"position":[[158,6]]},"4567":{"position":[[460,6]]},"4571":{"position":[[197,6],[452,6]]},"4573":{"position":[[199,6],[586,6]]},"4583":{"position":[[158,6]]},"4587":{"position":[[690,6]]},"4591":{"position":[[233,6],[479,6],[734,6]]},"4593":{"position":[[235,6],[786,6]]},"4655":{"position":[[178,6]]}}}],["secret=\"jwt.hex",{"_index":4762,"t":{"4655":{"position":[[154,16]]}}}],["secret=[,,target=/var/lib/besu",{"_index":3573,"t":{"3960":{"position":[[60,62]]}}}],["type=bind,source=/,target=/var/lib/besu",{"_index":3574,"t":{"3962":{"position":[[106,62]]}}}],["type=bind,source=/,target=/var/lib/besu",{"_index":777,"t":{"2711":{"position":[[128,63]]},"3958":{"position":[[128,63]]}}}],["type=blob=6",{"_index":5096,"t":{"4865":{"position":[[133,11]]}}}],["type=ibft_extra_data",{"_index":1858,"t":{"3149":{"position":[[190,20]]},"3151":{"position":[[195,20]]}}}],["type=jk",{"_index":942,"t":{"2770":{"position":[[110,8]]},"2776":{"position":[[114,8]]},"2942":{"position":[[88,8]]},"2948":{"position":[[92,8]]}}}],["type=qbft_extra_data",{"_index":1277,"t":{"2854":{"position":[[1392,20]]}}}],["typechain",{"_index":3172,"t":{"3760":{"position":[[391,9]]}}}],["typic",{"_index":88,"t":{"2563":{"position":[[238,9]]},"2693":{"position":[[298,9]]},"3204":{"position":[[617,9]]},"3843":{"position":[[1188,10]]},"3966":{"position":[[218,9]]},"4201":{"position":[[295,7]]},"4500":{"position":[[84,7]]}}}],["ubuntu",{"_index":676,"t":{"2689":{"position":[[344,7]]},"3885":{"position":[[344,7]]},"4041":{"position":[[27,6],[290,7]]},"4046":{"position":[[18,7],[104,6]]},"4209":{"position":[[1367,7]]}}}],["udp",{"_index":745,"t":{"2707":{"position":[[534,3],[553,4]]},"3351":{"position":[[70,3]]},"3806":{"position":[[653,3],[685,3],[963,3]]},"3954":{"position":[[534,3],[553,4]]},"4090":{"position":[[34,3]]},"4110":{"position":[[55,3],[282,3],[883,3],[1159,3]]},"4226":{"position":[[194,3]]},"4607":{"position":[[371,3],[375,3],[451,3],[455,3],[585,3],[4993,3]]},"4609":{"position":[[198,4]]},"4749":{"position":[[198,4]]}}}],["ui",{"_index":1503,"t":{"2980":{"position":[[134,3]]},"3762":{"position":[[1254,2]]}}}],["uint",{"_index":2209,"t":{"3329":{"position":[[100,4],[266,5]]}}}],["uint256",{"_index":3070,"t":{"3724":{"position":[[564,7],[593,7],[668,7],[735,7]]},"3726":{"position":[[430,7],[453,7]]}}}],["uint64(14",{"_index":3354,"t":{"3841":{"position":[[1073,10],[1147,10]]}}}],["uint64(2",{"_index":3361,"t":{"3841":{"position":[[1182,9]]}}}],["uint64(26",{"_index":3357,"t":{"3841":{"position":[[1111,10]]}}}],["uint64(64",{"_index":3366,"t":{"3841":{"position":[[1248,10]]}}}],["uint64(8",{"_index":3364,"t":{"3841":{"position":[[1214,9]]}}}],["ulimit",{"_index":669,"t":{"2689":{"position":[[174,7]]},"3885":{"position":[[174,7]]}}}],["unabl",{"_index":2650,"t":{"3515":{"position":[[733,6]]},"4082":{"position":[[33,6]]},"4995":{"position":[[145,6]]}}}],["unauthor",{"_index":1617,"t":{"3018":{"position":[[319,15],[639,15]]}}}],["unavail",{"_index":1763,"t":{"3103":{"position":[[393,11]]},"4006":{"position":[[759,12]]},"4080":{"position":[[159,11]]},"4320":{"position":[[145,11]]},"4847":{"position":[[1126,12],[1172,11]]}}}],["unawar",{"_index":2959,"t":{"3639":{"position":[[1182,7]]}}}],["unbound",{"_index":1746,"t":{"3093":{"position":[[98,9]]}}}],["uncach",{"_index":4710,"t":{"4621":{"position":[[497,8]]}}}],["unchang",{"_index":3483,"t":{"3874":{"position":[[1216,9]]}}}],["uncl",{"_index":1329,"t":{"2924":{"position":[[186,5],[374,7]]},"4349":{"position":[[240,6]]},"4373":{"position":[[2408,9]]},"4387":{"position":[[937,5],[1505,6],[1527,5]]},"4395":{"position":[[476,5],[578,5],[601,5]]},"4915":{"position":[[2000,9],[6564,9]]},"4973":{"position":[[2189,9]]},"4975":{"position":[[2279,9]]},"5009":{"position":[[8,5],[130,5],[180,6],[2145,9]]},"5011":{"position":[[8,5],[331,5],[381,6],[2233,9]]},"5013":{"position":[[22,6],[192,6]]},"5015":{"position":[[22,6],[384,6]]}}}],["uncle'",{"_index":4287,"t":{"4387":{"position":[[381,7]]}}}],["uncleinclusionreward",{"_index":4299,"t":{"4395":{"position":[[193,21],[433,20]]},"4991":{"position":[[673,23]]},"4993":{"position":[[760,23]]}}}],["uncleindex",{"_index":5629,"t":{"5009":{"position":[[96,11]]},"5011":{"position":[[297,11]]}}}],["unclereward",{"_index":4304,"t":{"4395":{"position":[[554,12]]},"4991":{"position":[[718,15]]},"4993":{"position":[[805,15]]}}}],["uncompress",{"_index":3597,"t":{"3968":{"position":[[1042,10]]}}}],["unconnect",{"_index":3844,"t":{"4141":{"position":[[172,11]]}}}],["under",{"_index":152,"t":{"2575":{"position":[[256,5]]},"2733":{"position":[[103,5]]},"2749":{"position":[[1075,5]]},"2910":{"position":[[456,5]]},"2928":{"position":[[476,5]]},"3080":{"position":[[359,5]]},"3612":{"position":[[2865,5]]},"3624":{"position":[[1380,5]]},"3778":{"position":[[125,5]]},"3786":{"position":[[75,5]]},"3790":{"position":[[0,5]]},"3872":{"position":[[127,5]]},"3982":{"position":[[759,5],[900,5]]},"4000":{"position":[[154,5]]},"4236":{"position":[[192,5]]},"4328":{"position":[[1303,5]]},"4512":{"position":[[203,5]]}}}],["underli",{"_index":2361,"t":{"3383":{"position":[[569,10]]},"3385":{"position":[[660,10]]},"3703":{"position":[[344,10]]},"3705":{"position":[[332,10]]},"3710":{"position":[[111,10]]}}}],["underscor",{"_index":2235,"t":{"3339":{"position":[[975,10]]},"3341":{"position":[[526,10]]}}}],["understand",{"_index":3396,"t":{"3847":{"position":[[19,13]]},"4669":{"position":[[566,10]]}}}],["unencod",{"_index":1603,"t":{"3016":{"position":[[123,9],[176,9],[1076,9]]}}}],["unexpect",{"_index":978,"t":{"2778":{"position":[[2669,10]]},"2808":{"position":[[357,10]]},"2870":{"position":[[375,10]]},"2902":{"position":[[353,10]]},"4543":{"position":[[821,10]]}}}],["uninstal",{"_index":2603,"t":{"3473":{"position":[[0,10],[479,11]]},"4046":{"position":[[26,9],[177,9]]},"4048":{"position":[[138,9],[203,9]]},"4269":{"position":[[57,11]]},"5041":{"position":[[0,10],[303,11]]}}}],["uniqu",{"_index":438,"t":{"2626":{"position":[[170,6],[321,6],[479,6]]},"2644":{"position":[[52,6]]},"2650":{"position":[[161,6]]},"3060":{"position":[[147,6]]},"3353":{"position":[[408,6]]},"3358":{"position":[[203,7]]},"3383":{"position":[[1279,6]]},"3385":{"position":[[1365,6]]},"3825":{"position":[[156,6]]}}}],["unit",{"_index":1200,"t":{"2834":{"position":[[85,4],[129,5]]},"3242":{"position":[[1668,4],[1722,5]]},"3244":{"position":[[1171,4],[1224,5]]},"3250":{"position":[[3024,4],[3077,5],[3893,4]]},"3252":{"position":[[695,4]]},"4401":{"position":[[198,5]]},"4969":{"position":[[25,4],[145,4],[601,4]]}}}],["unix",{"_index":3581,"t":{"3968":{"position":[[489,4]]},"4387":{"position":[[1330,4]]},"4510":{"position":[[716,4]]}}}],["unknown",{"_index":4312,"t":{"4401":{"position":[[475,7]]},"4449":{"position":[[267,7]]}}}],["unless",{"_index":3295,"t":{"3821":{"position":[[382,6]]},"4006":{"position":[[739,6]]},"4122":{"position":[[139,6]]},"4425":{"position":[[299,6]]},"4462":{"position":[[187,6]]},"4629":{"position":[[411,6]]},"4639":{"position":[[712,6]]},"4875":{"position":[[588,7]]},"4895":{"position":[[201,6]]}}}],["unlik",{"_index":567,"t":{"2664":{"position":[[0,6],[230,6]]},"3455":{"position":[[193,6]]},"4363":{"position":[[478,6]]},"4458":{"position":[[127,8]]},"4965":{"position":[[632,7]]}}}],["unlock",{"_index":925,"t":{"2757":{"position":[[1065,6],[1559,6]]},"2768":{"position":[[266,6]]},"2774":{"position":[[272,6]]},"2931":{"position":[[892,6],[1207,6]]},"2940":{"position":[[233,6]]},"2946":{"position":[[239,6]]},"3559":{"position":[[118,8]]},"3687":{"position":[[24,8],[272,8]]}}}],["unmatch",{"_index":4398,"t":{"4449":{"position":[[239,9]]}}}],["unnecessari",{"_index":3732,"t":{"4062":{"position":[[86,11]]},"4116":{"position":[[237,11]]},"4755":{"position":[[288,11]]}}}],["unpack",{"_index":681,"t":{"2691":{"position":[[37,6]]},"3887":{"position":[[37,6]]}}}],["unreli",{"_index":4753,"t":{"4649":{"position":[[286,10]]}}}],["unrespons",{"_index":387,"t":{"2616":{"position":[[312,12],[374,12]]}}}],["unrestrict",{"_index":548,"t":{"2656":{"position":[[389,13],[522,12]]}}}],["unsign",{"_index":1602,"t":{"3016":{"position":[[110,8],[190,8],[1090,8]]}}}],["unstabl",{"_index":5128,"t":{"4885":{"position":[[122,8]]}}}],["unsubscrib",{"_index":4285,"t":{"4383":{"position":[[144,11],[332,13],[378,11],[502,11]]}}}],["unsuit",{"_index":5082,"t":{"4859":{"position":[[717,10]]}}}],["unsupport",{"_index":769,"t":{"2709":{"position":[[707,12],[822,11]]},"3956":{"position":[[715,11],[828,11]]}}}],["unsur",{"_index":1197,"t":{"2830":{"position":[[548,6]]}}}],["until",{"_index":244,"t":{"2588":{"position":[[66,5]]},"2666":{"position":[[887,5]]},"2790":{"position":[[1674,5]]},"2856":{"position":[[1426,5]]},"3028":{"position":[[845,5]]},"3103":{"position":[[511,5],[616,5]]},"3540":{"position":[[788,5]]},"3691":{"position":[[295,5]]},"3918":{"position":[[1019,5]]},"4387":{"position":[[884,5]]},"4395":{"position":[[938,5]]}}}],["untrust",{"_index":5569,"t":{"4995":{"position":[[198,9]]}}}],["untun",{"_index":3724,"t":{"4054":{"position":[[229,7]]}}}],["unus",{"_index":4570,"t":{"4551":{"position":[[730,6]]}}}],["up",{"_index":382,"t":{"2616":{"position":[[71,2]]},"2628":{"position":[[587,2],[1162,2],[1343,2],[1427,2],[1552,2]]},"2699":{"position":[[11,2]]},"2731":{"position":[[92,2]]},"2778":{"position":[[576,2],[2372,2]]},"2780":{"position":[[1807,2],[3435,2]]},"2806":{"position":[[139,2]]},"2956":{"position":[[509,2]]},"2962":{"position":[[411,2],[449,2],[903,3]]},"2964":{"position":[[590,2]]},"2968":{"position":[[259,2]]},"2986":{"position":[[362,2],[514,2],[620,2],[788,2]]},"3212":{"position":[[53,2]]},"3224":{"position":[[1929,2]]},"3264":{"position":[[1385,2]]},"3303":{"position":[[1967,2]]},"3319":{"position":[[2247,3]]},"3353":{"position":[[556,3]]},"3376":{"position":[[52,2]]},"3383":{"position":[[1499,2]]},"3385":{"position":[[1585,2]]},"3485":{"position":[[61,2]]},"3530":{"position":[[646,2],[1053,2]]},"3532":{"position":[[378,2],[737,2],[1019,2],[1213,3]]},"3569":{"position":[[24,2]]},"3616":{"position":[[215,3]]},"3618":{"position":[[1074,2],[2098,3]]},"3632":{"position":[[145,2]]},"3637":{"position":[[378,2]]},"3658":{"position":[[1952,2]]},"3674":{"position":[[2180,3]]},"3680":{"position":[[232,2]]},"3722":{"position":[[20,2],[87,2]]},"3724":{"position":[[0,2]]},"3732":{"position":[[353,2]]},"3738":{"position":[[708,2],[805,3]]},"3760":{"position":[[20,2]]},"3782":{"position":[[33,2]]},"3786":{"position":[[1011,2]]},"3794":{"position":[[531,2]]},"3868":{"position":[[184,2]]},"3876":{"position":[[919,2]]},"3904":{"position":[[208,2]]},"3908":{"position":[[386,2]]},"3952":{"position":[[285,2]]},"3968":{"position":[[730,2]]},"3976":{"position":[[175,2]]},"4041":{"position":[[100,2]]},"4050":{"position":[[432,2]]},"4052":{"position":[[382,2],[473,2]]},"4062":{"position":[[3010,2],[3066,2]]},"4110":{"position":[[813,2]]},"4131":{"position":[[242,2]]},"4147":{"position":[[421,2]]},"4220":{"position":[[705,2]]},"4226":{"position":[[47,2]]},"4232":{"position":[[47,2]]},"4324":{"position":[[54,3],[175,3]]},"4482":{"position":[[160,2]]},"4543":{"position":[[1208,2]]},"4577":{"position":[[184,2]]},"4597":{"position":[[208,2]]},"4605":{"position":[[4,2]]},"4607":{"position":[[790,2],[2280,2],[2327,3],[3771,2]]},"4965":{"position":[[245,2]]}}}],["up.\",\"throw",{"_index":3414,"t":{"3866":{"position":[[531,20]]},"3902":{"position":[[531,20]]},"4575":{"position":[[515,20]]},"4595":{"position":[[515,20]]}}}],["upcom",{"_index":963,"t":{"2778":{"position":[[988,8]]},"2780":{"position":[[511,8],[2027,8]]},"2810":{"position":[[186,8]]},"2812":{"position":[[179,8]]},"2814":{"position":[[186,8]]},"2872":{"position":[[186,8]]},"2874":{"position":[[179,8]]},"2876":{"position":[[239,8]]},"2878":{"position":[[186,8]]},"2904":{"position":[[186,8]]},"2906":{"position":[[185,8]]}}}],["updat",{"_index":163,"t":{"2577":{"position":[[132,6],[233,6],[423,6],[457,6],[519,7]]},"2586":{"position":[[169,6],[900,6]]},"2602":{"position":[[113,7]]},"2644":{"position":[[481,8]]},"2715":{"position":[[570,6]]},"2751":{"position":[[126,6],[280,8]]},"2755":{"position":[[193,7]]},"2778":{"position":[[535,6],[2283,7],[2328,6]]},"2780":{"position":[[1718,7],[1763,6],[3346,7],[3391,6]]},"2786":{"position":[[2386,6]]},"2790":{"position":[[1885,6]]},"2808":{"position":[[186,6]]},"2810":{"position":[[3,6],[258,7],[758,7],[915,7]]},"2812":{"position":[[3,6],[244,7],[1013,7],[1127,7]]},"2814":{"position":[[3,6],[259,7],[1428,7]]},"2848":{"position":[[0,6]]},"2852":{"position":[[16767,6]]},"2856":{"position":[[1637,6]]},"2870":{"position":[[175,6]]},"2872":{"position":[[3,6],[258,7],[754,7],[911,7]]},"2874":{"position":[[3,6],[244,7],[1009,7],[1123,7]]},"2876":{"position":[[1122,7]]},"2878":{"position":[[3,6],[259,7],[1156,7]]},"2902":{"position":[[184,6]]},"2904":{"position":[[3,6],[258,7],[849,7],[1006,7]]},"2906":{"position":[[3,6],[256,7],[807,7]]},"2908":{"position":[[517,7]]},"2918":{"position":[[221,7]]},"2930":{"position":[[307,7]]},"3006":{"position":[[435,6]]},"3012":{"position":[[1070,8]]},"3028":{"position":[[602,6],[1458,6]]},"3034":{"position":[[377,6]]},"3040":{"position":[[3,6],[165,6],[223,6],[293,7]]},"3048":{"position":[[3,6],[164,6],[266,6],[289,7]]},"3068":{"position":[[44,6]]},"3072":{"position":[[77,6]]},"3117":{"position":[[362,6],[482,8]]},"3135":{"position":[[229,8]]},"3242":{"position":[[2205,7],[2379,7]]},"3244":{"position":[[1568,7]]},"3333":{"position":[[52,6],[483,7]]},"3335":{"position":[[32,8],[72,6]]},"3343":{"position":[[32,8],[72,6]]},"3355":{"position":[[263,6]]},"3366":{"position":[[508,6],[952,6]]},"3383":{"position":[[496,7],[525,8],[1868,6],[2207,6],[2438,7]]},"3385":{"position":[[587,7],[616,8],[2577,6],[2677,6],[3288,6]]},"3387":{"position":[[331,6]]},"3493":{"position":[[295,6],[328,6],[608,6]]},"3495":{"position":[[15,8],[65,7],[86,6],[286,7],[432,7],[480,6],[509,7],[658,6]]},"3507":{"position":[[473,6]]},"3530":{"position":[[310,8]]},"3532":{"position":[[285,6]]},"3534":{"position":[[502,6]]},"3546":{"position":[[404,6]]},"3548":{"position":[[547,6]]},"3550":{"position":[[400,6]]},"3561":{"position":[[33,6]]},"3586":{"position":[[1054,6]]},"3588":{"position":[[957,6]]},"3590":{"position":[[979,6]]},"3592":{"position":[[997,6]]},"3606":{"position":[[680,6]]},"3612":{"position":[[113,6],[387,6],[1092,6],[2226,6]]},"3624":{"position":[[317,6]]},"3626":{"position":[[77,6],[321,6],[1200,6]]},"3628":{"position":[[330,6]]},"3639":{"position":[[1762,6]]},"3676":{"position":[[451,8]]},"3705":{"position":[[245,7]]},"3718":{"position":[[7,6],[399,6]]},"3754":{"position":[[1397,6],[1564,7],[2149,7],[2211,7]]},"3756":{"position":[[2520,7]]},"3770":{"position":[[429,6]]},"3778":{"position":[[0,6],[219,7]]},"3792":{"position":[[98,8]]},"3808":{"position":[[564,6]]},"3918":{"position":[[147,6]]},"3968":{"position":[[1355,6],[1437,6],[1496,6]]},"4031":{"position":[[25,6]]},"4041":{"position":[[121,6],[256,7],[275,6],[461,6],[818,7]]},"4043":{"position":[[353,6]]},"4046":{"position":[[3,6]]},"4048":{"position":[[8,6],[85,6],[409,6]]},"4098":{"position":[[539,6]]},"4131":{"position":[[28,6]]},"4143":{"position":[[381,6],[600,7]]},"4157":{"position":[[105,6]]},"4179":{"position":[[75,7]]},"4205":{"position":[[278,7]]},"4238":{"position":[[292,7]]},"4316":{"position":[[678,6]]},"4347":{"position":[[0,6]]},"4527":{"position":[[0,7]]},"4607":{"position":[[3478,6],[4497,6]]},"4847":{"position":[[985,6]]},"4849":{"position":[[842,6],[928,7]]},"4859":{"position":[[940,6]]},"4887":{"position":[[319,6]]},"5045":{"position":[[0,7]]}}}],["updatedbal",{"_index":2041,"t":{"3242":{"position":[[2514,14]]},"3244":{"position":[[1703,14]]}}}],["upfront",{"_index":4301,"t":{"4395":{"position":[[382,7]]}}}],["upgrad",{"_index":419,"t":{"2622":{"position":[[495,7]]},"2624":{"position":[[583,7],[708,7]]},"2686":{"position":[[96,7],[155,7],[200,8],[251,9],[285,7],[406,9]]},"2701":{"position":[[235,9]]},"2743":{"position":[[86,9]]},"2751":{"position":[[368,11]]},"3004":{"position":[[10,8],[19,7],[93,7],[142,8],[173,9],[215,8],[249,9],[355,9],[402,8],[485,8],[521,9],[609,8]]},"3006":{"position":[[3,7],[118,7],[229,8],[605,9],[670,11],[716,8],[739,7]]},"3068":{"position":[[425,7]]},"3493":{"position":[[639,7]]},"3495":{"position":[[697,7]]},"3812":{"position":[[847,7]]},"3841":{"position":[[954,9]]},"3847":{"position":[[0,9]]},"3882":{"position":[[96,7],[155,7],[198,8],[249,9],[283,7],[401,9]]},"3974":{"position":[[235,9]]},"4041":{"position":[[140,7]]},"4048":{"position":[[448,7],[470,7]]},"4060":{"position":[[259,7]]},"4236":{"position":[[5,9]]},"4238":{"position":[[84,7]]},"4639":{"position":[[410,8]]}}}],["upnp",{"_index":763,"t":{"2709":{"position":[[482,5]]},"3956":{"position":[[482,5]]},"4088":{"position":[[334,4]]},"4096":{"position":[[68,5]]},"4100":{"position":[[8,4],[96,4],[195,4],[248,4],[295,4],[377,4],[436,4],[467,4],[584,4],[633,5]]},"4222":{"position":[[313,4]]},"4226":{"position":[[231,5]]},"4733":{"position":[[137,4],[241,4],[349,4],[405,4],[460,4],[542,4]]}}}],["upnpp2ponli",{"_index":3793,"t":{"4100":{"position":[[402,11]]},"4226":{"position":[[265,12]]},"4733":{"position":[[142,11],[371,11]]}}}],["upper",{"_index":2426,"t":{"3385":{"position":[[2897,5]]}}}],["uppercas",{"_index":1882,"t":{"3157":{"position":[[177,10]]},"4613":{"position":[[177,10]]}}}],["upstream",{"_index":3658,"t":{"4029":{"position":[[212,9],[253,8],[292,9],[328,8],[407,8]]}}}],["uptim",{"_index":1331,"t":{"2924":{"position":[[302,7]]},"3845":{"position":[[530,7]]}}}],["upykixtu7hgdcdl5tfx3dkoksbqkbl3u3vfwxzmfnuu3daisfvjyuna",{"_index":4065,"t":{"4289":{"position":[[1031,56]]}}}],["uri",{"_index":3679,"t":{"4031":{"position":[[205,4]]}}}],["url",{"_index":880,"t":{"2745":{"position":[[673,4]]},"2928":{"position":[[172,4]]},"2976":{"position":[[358,3],[1341,3]]},"2998":{"position":[[237,3]]},"3028":{"position":[[441,4]]},"3034":{"position":[[216,4]]},"3198":{"position":[[197,3]]},"3226":{"position":[[729,3],[758,3]]},"3228":{"position":[[100,3],[248,4],[493,4],[844,3]]},"3230":{"position":[[100,3],[248,4],[493,4]]},"3266":{"position":[[934,3],[963,3]]},"3268":{"position":[[100,3],[256,4],[371,4],[505,3]]},"3270":{"position":[[100,3],[256,4],[371,4]]},"3285":{"position":[[101,3],[201,4],[593,3]]},"3311":{"position":[[800,3],[829,3]]},"3313":{"position":[[100,3],[242,4],[462,4],[854,3]]},"3315":{"position":[[100,3],[242,4],[462,4]]},"3317":{"position":[[100,3],[242,4],[462,4]]},"3425":{"position":[[64,5],[175,3],[280,4],[349,4],[529,5]]},"3429":{"position":[[95,4]]},"3435":{"position":[[93,4],[162,4],[342,6]]},"3561":{"position":[[177,6],[582,6],[618,6],[654,6]]},"3565":{"position":[[693,3]]},"3586":{"position":[[985,3],[1018,3]]},"3588":{"position":[[917,3],[950,3]]},"3590":{"position":[[939,3],[972,3]]},"3592":{"position":[[957,3],[990,3]]},"3594":{"position":[[232,3]]},"3596":{"position":[[134,3],[665,3],[991,3]]},"3598":{"position":[[1469,3]]},"3628":{"position":[[414,4]]},"3666":{"position":[[800,3],[829,3]]},"3668":{"position":[[100,3],[242,4],[462,4],[854,3]]},"3670":{"position":[[100,3],[242,4],[462,4]]},"3672":{"position":[[100,3],[242,4],[462,4]]},"3689":{"position":[[358,6],[763,6],[799,6],[835,6],[1091,6],[1496,6],[1532,6],[1568,6],[1824,6],[2229,6],[2265,6],[2301,6],[2557,6],[2962,6],[2998,6],[3034,6]]},"3693":{"position":[[702,3],[1294,3],[1323,3]]},"3695":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"3697":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"3699":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"3762":{"position":[[440,4]]},"3764":{"position":[[656,4]]},"3800":{"position":[[138,3]]},"3806":{"position":[[10,3],[125,4],[140,3],[509,4],[1007,3],[1414,3],[1584,3],[1679,3]]},"3808":{"position":[[14,3],[150,5],[265,3]]},"3982":{"position":[[642,5]]},"4110":{"position":[[971,3]]},"4131":{"position":[[546,4]]},"4143":{"position":[[55,4],[900,3]]},"4145":{"position":[[118,5]]},"4224":{"position":[[21,4],[82,4]]},"4547":{"position":[[81,3]]},"4571":{"position":[[364,4],[554,3],[616,3],[686,3]]},"4573":{"position":[[327,4],[610,3],[672,3],[1099,3]]},"4591":{"position":[[400,4],[646,4],[836,3],[898,3]]},"4593":{"position":[[402,4],[888,3],[950,3]]},"4633":{"position":[[425,4],[548,5]]},"4647":{"position":[[84,4],[308,3]]},"4661":{"position":[[255,3],[446,4]]},"4671":{"position":[[392,4]]},"4781":{"position":[[363,4]]},"4891":{"position":[[91,3],[141,3]]},"4901":{"position":[[296,3]]},"4903":{"position":[[697,3],[890,3]]},"4905":{"position":[[57,3]]},"5067":{"position":[[18,4],[72,3]]}}}],["url=\"enrtree://am5fcqlwizx2qfpnjap7vuerccrngrhwzg3yyhiuv7bvdq5fdprt2@nodes.example.org",{"_index":4750,"t":{"4647":{"position":[[208,87]]}}}],["url=\"http://127.0.0.1:8888",{"_index":1941,"t":{"3198":{"position":[[165,27]]}}}],["url=// { // perform logic for node permissioning return true; }); service.registerNodeMessagePermissioningProvider((destinationEnode, code) -> { // perform logic for message permissioning return true; }); } @Override public void stop() {} }","s":"Register your plugin","u":"/private-networks/concepts/permissioning/plugin","h":"#register-your-plugin","p":32},{"i":41,"t":"You can extend Besu functionality by building Java plugins or using existing open source Besu plugins. Use the Plugin API to take data from any Besu network, public or permissioned, and feed it into an application or system. For example, create a plugin to add more monitoring functionality or stream event data to a third-party application. The API exposes data about the following components: Blocks Balances Transactions Smart contracts Execution results Logs Syncing state. The plugin API provides access to interfaces allowing you to build the plugin. info View the plugin API webinar for an example of how to build a plugin. For more information about the available interfaces, see the Plugin API Javadoc.","s":"Plugins","u":"/private-networks/concepts/plugins","h":"","p":40},{"i":43,"t":"To allow Besu to access and use the plugin, copy the plugin (.jar) to the plugins directory. caution If not already present, you must create the plugins directory one directory level below (../) the besu executable. Each plugin in the directory has the following lifecycle events: Register - Executed when Besu starts. Besu checks plugin compatibility and registers plugins. Start - Plugins start after being successfully registered. Stop - Besu stops plugins. note The order in which Besu calls plugins during lifecycle events is not guaranteed.","s":"Install plugins","u":"/private-networks/concepts/plugins","h":"#install-plugins","p":40},{"i":45,"t":"Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) consensus protocols. PoA consensus protocols work when participants know each other and there is a level of trust between them. For example, in a permissioned consortium network. PoA consensus protocols have faster block times and a much greater transaction throughput than the Ethash proof of work consensus protocol used on the Ethereum Mainnet. In QBFT, IBFT 2.0, or Clique, a group of nodes in the network act as validators (QBFT and IBFT 2.0) or signers (Clique). The existing nodes in the signer/validator pool vote to add nodes to or remove nodes from the pool. note For the rest of this page, the term validator is used to refer to signers and validators.","s":"Proof of authority consensus","u":"/private-networks/concepts/poa","h":"","p":44},{"i":47,"t":"Properties to consider when comparing QBFT, IBFT 2.0, and Clique are: Immediate finality. Minimum number of validators. Liveness. Speed.","s":"Properties","u":"/private-networks/concepts/poa","h":"#properties","p":44},{"i":49,"t":"QBFT and IBFT 2.0 have immediate finality; there are no forks and all valid blocks get included in the main chain. Clique does not have immediate finality. Implementations using Clique must be aware of forks and chain reorganizations occurring.","s":"Immediate finality","u":"/private-networks/concepts/poa","h":"#immediate-finality","p":44},{"i":51,"t":"To be Byzantine fault tolerant, QBFT and IBFT 2.0 require a minimum of four validators. Clique can operate with a single validator but operating with a single validator offers no redundancy if the validator fails. tip Byzantine fault tolerant is the ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/concepts/poa","h":"#minimum-number-of-validators","p":44},{"i":53,"t":"Clique is more fault tolerant than QBFT and IBFT 2.0. Clique tolerates up to half of the validators failing. QBFT and IBFT 2.0 networks require greater than or equal to two-thirds of validators to be operating to create blocks. For example, an QBFT and IBFT 2.0 network of: Four to five validators tolerates one unresponsive validator. Six to eight validators tolerates two unresponsive validators. Networks with three or less validators can produce blocks but do not guarantee finality when operating in adversarial environments. caution We recommend using QBFT or IBFT 2.0 networks with at least four nodes in production environments.","s":"Liveness","u":"/private-networks/concepts/poa","h":"#liveness","p":44},{"i":55,"t":"Reaching consensus and adding blocks is faster in Clique networks. For Clique, the probability of a fork increases as the number of validators increases. For QBFT and IBFT 2.0, the time to add new blocks increases as the number of validators increases.","s":"Speed","u":"/private-networks/concepts/poa","h":"#speed","p":44},{"i":57,"t":"warning Public key infrastructure (PKI) support is an early access feature, and functionality and options may be updated between releases. Besu's public key infrastructure allows you to use certificates issued by a trusted authority to manage node and account identities in the following ways: Node permissioning - Only authorized nodes can connect to other nodes in the network using TLS for the P2P communication. Block proposal permissioning - Only blocks proposed by authorized validators are accepted. Supported keystore and truststore formats used to store the certificates include PKCS11, PKCS12, and JKS.","s":"Public key infrastructure","u":"/private-networks/concepts/pki","h":"","p":56},{"i":59,"t":"Allow TLS communication between nodes by using certificates issued by a trusted authority to connect to other authorized nodes in the network. When receiving connection requests, the incoming connection must be from another authorized node. Similarly, when connecting to a node the initiator ensures that the remote node is authorized to participate in the network. Configure TLS for the P2P communication using the Besu command line options.","s":"Node permissioning","u":"/private-networks/concepts/pki","h":"#node-permissioning","p":56},{"i":61,"t":"caution Only private networks using the QBFT consensus protocol support block proposal permissioning. Use certificates issued by a trusted authority to ensure only authorized validator nodes can propose new blocks in the network. The block hash is signed by the validator private certificate and included in the header of the proposed block as a CMS (Cryptographic Message Syntax). This is used by other validators to verify that the proposer is authorized to create a block in the network. Configure block proposal permissioning using the Besu command line options.","s":"Block proposal permissioning","u":"/private-networks/concepts/pki","h":"#block-proposal-permissioning","p":56},{"i":63,"t":"In Besu, privacy refers to the ability to keep transactions private between the involved participants. Other participants cannot access the transaction content or list of participants. danger For production environments requiring private transactions: We recommend using a network with a consensus mechanism supporting transaction finality. For example, IBFT 2.0. Tessera must be highly available and run in a separate instance to Besu. Using private transactions with pruning or fast sync isn't supported.","s":"Privacy","u":"/private-networks/concepts/privacy","h":"","p":62},{"i":65,"t":"Besu uses a private transaction manager, Tessera, to implement privacy. Each Besu node that sends or receives private transactions requires an associated Tessera node. Private transactions pass from the Besu node to the associated Tessera node. The Tessera node encrypts and directly distributes (that is, point-to-point) the private transaction to the Tessera nodes participating in the transaction. By default, each participant in a privacy-enabled network uses its own Besu and Tessera node. Multi-tenancy allows more than one participant to use the same Besu and Tessera node. tip Private Transaction Managers are also known as Enclaves.","s":"Private transaction manager","u":"/private-networks/concepts/privacy","h":"#private-transaction-manager","p":62},{"i":67,"t":"When enabling privacy in a private network, there's an assumed level of trust among the node operators, since all are members of the private network. caution Inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks because gas isn't required in private transactions. In contrast, gas is required in Ethereum Mainnet and public testnets because they are trustless environments. Privacy-enabled networks should have a mechanism to establish trust offchain. Node operators should be informed on: Guidelines for use, responsibilities, and good behavior. Smart contract security, so contracts deployed on the network use resources efficiently. Consequences for malicious activity. Privacy-enabled networks should run development and test environments that closely resemble production, so contracts can be tested, and potential issues can be found before they're deployed in production.","s":"Privacy-enabled networks","u":"/private-networks/concepts/privacy","h":"#privacy-enabled-networks","p":62},{"i":69,"t":"In v1.4, using private transactions in a network using a consensus mechanism where forks occur (that is, PoW algorithms or Clique) is an early access feature. Do not use private transactions in production environments using consensus mechanisms where forks occur.","s":"Reorg-compatible privacy","u":"/private-networks/concepts/privacy","h":"#reorg-compatible-privacy","p":62},{"i":71,"t":"Flexible privacy groups use smart contracts to store and maintain the group membership. You can add and remove members to and from flexible privacy groups. tip Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups. danger Flexible privacy groups are an early access feature. Don't use in production networks. The flexible privacy group interfaces might change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions. We don't recommended creating flexible privacy groups in a chain with existing offchain privacy groups.","s":"Flexible privacy groups","u":"/private-networks/concepts/privacy/flexible-privacy","h":"","p":70},{"i":73,"t":"The privacy group management contract bytecode is hard-coded into Besu and when you create a privacy group, the contract bytecode is part of the genesis state of the privacy group. caution All members of a flexible privacy group must be using the same version of Besu. If using different versions, the private state within the privacy group may become inconsistent. In the default implementation of the group management contract, the signer of the private transaction that creates the privacy group is also the owner of the group. Only the owner can add and remove participants, and upgrade the management contract. The owner is identified by the signing key. Transactions to add and remove participants, or upgrade the management contract, must be signed by the same key that signed the group creation transaction.","s":"Group management contracts","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#group-management-contracts","p":70},{"i":75,"t":"When creating a flexible privacy group, generate the privacy group ID for the group outside of Besu and pass the ID as a parameter. The web3js-quorum library generates a unique privacy group ID and passes the ID to Besu when creating a privacy group. caution When generating a privacy group ID, you must ensure the ID is unique across all network participants. If you create a privacy group with an existing privacy group ID, the existing privacy group is overwritten. To ensure unique privacy group IDs, we recommend using 256-bit SecureRandom.","s":"Flexible privacy group IDs","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#flexible-privacy-group-ids","p":70},{"i":77,"t":"When using multi-tenancy with flexible privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group. Using multi-tenancy with flexible privacy groups is more complex than with offchain privacy groups because users may be added and removed from flexible privacy groups. When a user is added to a privacy group, they get access to all existing data in the privacy group. After being removed from a privacy group, a user retains access to already existing data in the privacy group, up to the block containing the privacy marker transaction (PMT) that removed them (the removal block). A removed user doesn't have access to data in the privacy group that happens after they were removed. In particular, when multi-tenancy is enabled and a user requests access to a privacy group they were once a member of but later removed from, Besu allows the user access to the following functionality and data associated with the privacy group: Private transactions using priv_getTransaction and private transaction receipts using priv_getTransactionReceipt from blocks up to (and including) the removal block. note A removed group member may have access to some private transactions after the removal PMT in the same block. Using priv_call on blocks up to (and including) the removal block. Private logs using priv_getLogs for blocks up to (and including) the removal block. When the toBlock is greater than the removal block, priv_getLogs still returns logs up to the removal block. note When a user is removed from a privacy group, any log filters they've created are also removed and can't be accessed. A user can only create and access filters for a privacy group they are currently a member of. All other PRIV API methods fail for the removed group member.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/flexible-privacy","h":"#multi-tenancy","p":70},{"i":79,"t":"By default, each participant in a privacy network uses its own Besu and Tessera node. Multi-tenancy allows multiple participants to use the same Besu and Tessera node. Each participant is a tenant, and the operator is the owner of the Besu and Tessera node. info The operator is responsible for configuring multi-tenancy, and has access to all tenant data. tip Ensure the multi-tenant Tessera node client API is configured to allow access only by the multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode. If not configured to allow access only by the multi-tenant Besu node, other Tessera clients, including other Besu nodes, might be able to access tenant data. To secure access, you can configure TLS between Besu and Tessera with the WHITELIST trust mode. Multi-tenancy validates that tenants have permission to use the specified HTTP or WebSocket JSON-RPC requests, and the tenant has access to the requested privacy data. Private data is isolated and each tenant uses a JSON Web Token (JWT) for authentication. You can create the JWT either externally or internally.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/multi-tenancy","h":"","p":78},{"i":81,"t":"A privacy group is a group of nodes identified by a unique privacy group ID by Tessera. Tessera stores each private transaction with the privacy group ID. The Besu nodes maintain the public world state for the blockchain and a private state for each privacy group. The private states contain data that is not shared in the globally replicated world state. caution The privacy group implementations described below are offchain privacy groups and cannot have their group membership updated. Flexible privacy groups are an early access feature.","s":"Privacy groups","u":"/private-networks/concepts/privacy/privacy-groups","h":"","p":80},{"i":83,"t":"Besu implements two types of privacy: Enterprise Ethereum Alliance (EEA) privacy, where private transactions include privateFor as the recipient. Besu-extended privacy, where private transactions include privacyGroupId as the recipient. Both privacy types create privacy groups and store private transactions with their privacy group in Tessera. note For clarity, the Tessera nodes are not shown in the previous diagram. To send private transactions, each Besu node must have an associated Tessera node.","s":"Privacy types","u":"/private-networks/concepts/privacy/privacy-groups","h":"#privacy-types","p":80},{"i":85,"t":"A contract in a privacy group: Can read or write to a contract in the same privacy group. Can read from the public state including public contracts. Cannot access contracts from a different privacy group. A public contract cannot access a private contract.","s":"Access between states","u":"/private-networks/concepts/privacy/privacy-groups","h":"#access-between-states","p":80},{"i":87,"t":"In the privacy implementation complying with the EEA Client Specification the group of nodes specified by privateFrom and privateFor form a privacy group with a unique privacy group ID provided by Tessera. The previous diagram illustrates two privacy groups enabling: A, B, and C to send transactions that are private from D. A, C, and D to send transactions that are private from B. Using EEA-compliant privacy, to send private transactions between A, B, and C, A initializes a contract in a private transaction with B and C specified as the privateFor and A specified as the privateFrom. Initializing the contract creates a privacy group consisting of A, B, and C. For the ABC private state to remain consistent, A, B, and C must be included on transactions (as either privateFrom or privateFor) even if they are between only two of the three parties. To send private transactions between A, C, and D, C initializes a different contract in a private transaction with A and D specified as the privateFor and C specified as the privateFrom. Initializing the contract creates a privacy group consisting of A, C, and D. For the ACD private state to remain consistent, A, C, and D must be included on transactions (as either privateFrom or privateFor) even if they are between only two of the three parties.","s":"Enterprise Ethereum Alliance privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#enterprise-ethereum-alliance-privacy","p":80},{"i":89,"t":"The Besu-extended privacy implementation creates a privacy group using priv_createPrivacyGroup with private transactions sent to the privacy group ID. Using the same privacy groups as in the previous example. Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a privacy group consisting of A, B, and C. The privacy group ID is specified when sending private transactions and A, B, and C are recipients of all private transactions sent to the privacy group. To send private transactions between A, C, and D, A creates a privacy group consisting of A, C, and D. The privacy group ID of this group is specified when sending private transactions with A, C, and D as recipients.","s":"Besu-extended privacy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#besu-extended-privacy","p":80},{"i":91,"t":"When using multi-tenancy with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group.","s":"Multi-tenancy","u":"/private-networks/concepts/privacy/privacy-groups","h":"#multi-tenancy","p":80},{"i":93,"t":"Private transactions have the same parameters as public Ethereum transactions, with the following additions: privateFrom - The Tessera public key of the transaction sender. One of the following: privateFor - The Tessera public keys of the transaction recipients. privacyGroupId - The privacy group to receive the transaction. restriction - Whether the private transaction is restricted or unrestricted: restricted - Only the nodes participating in the transaction receive and store the payload of the private transaction. unrestricted - All nodes in the network receive the payload of the private transaction, but only the nodes participating in the transaction can read the transaction. info Besu implements restricted private transactions only. The gas and gasPrice are used by the privacy marker transaction (PMT), not the private transaction itself. info Because gas isn't required in private transactions, inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks. Ensure your network has a mechanism to establish trust offchain. You can create and send private transactions.","s":"Private transactions","u":"/private-networks/concepts/privacy/private-transactions","h":"","p":92},{"i":95,"t":"Besu and Tessera nodes both have public/private key pairs identifying them. A Besu node sending a private transaction to a Tessera node signs the transaction with the Besu node private key. The privateFrom and privateFor parameters specified in the RLP-encoded transaction string for eea_sendRawTransaction are the public keys of the Tessera nodes sending and receiving the transaction. info The mapping of Besu node addresses to Tessera node public keys is offchain. That is, the sender of a private transaction must know the Tessera node public key of the recipient.","s":"Besu and Tessera keys","u":"/private-networks/concepts/privacy/private-transactions","h":"#besu-and-tessera-keys","p":92},{"i":97,"t":"A nonce is the number of previous transactions made by the sender. Private transaction processing involves two transactions: the private transaction distributed to involved participants, and the privacy marker transaction (PMT) included on the public blockchain. Each of these transactions has its own nonce. Since the PMT is a public transaction, the PMT nonce is the public nonce for the account.","s":"Nonces","u":"/private-networks/concepts/privacy/private-transactions","h":"#nonces","p":92},{"i":99,"t":"Besu maintains separate private states for each privacy group. The private transaction nonce for an account is specific to the privacy group. That is, the nonce for account A for privacy group ABC is different to the nonce for account A for privacy group AB.","s":"Private transaction nonce","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-transaction-nonce","p":92},{"i":101,"t":"Unlike public transactions, private transactions are not submitted to the transaction pool. The private transaction is distributed directly to the participants in the transaction, and the PMT is submitted to the transaction pool. Unlike public transaction nonces, private transaction nonces aren't validated when the private transaction is submitted. If a private transaction has an incorrect nonce, the PMT is still valid and is added to a block. However, in this scenario, the private transaction execution fails when processing the PMT for the private transaction with the incorrect nonce. The following private transaction flow illustrates when nonce validation occurs: Submit a private transaction with a nonce value. The private transaction is distributed to all participants in the privacy group. The PMT is created and submitted to the transaction pool with a nonce of 0 if using one-time accounts. If using a specific account with --privacy-marker-transaction-signing-key-file, the public nonce for that account is obtained and used for the PMT. The PMT is mined and included in the block. After the block containing the PMT is imported, and the PMT is processed, the private transaction is retrieved from the private transaction manager and executed. If the private transaction was submitted with a correct nonce in step 1, the nonce is validated as correct. If an incorrect nonce was submitted, the private transaction execution fails.","s":"Private nonce validation","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-validation","p":92},{"i":103,"t":"In Besu, you call eth_getTransactionCount to get a nonce, then use that nonce with eea_sendRawTransaction to send a private transaction. However, when you send multiple transactions in row, if a subsequent call to getTransactionCount happens before a previous transaction is processed, you can get the same nonce again. You can manage private nonces in multiple ways: Let Besu handle it. You just need to wait long enough between calls to sendRawTransaction for the transactions to process. The current window is around 1.5 seconds, depending on block time. Public transactions deal with this issue, but the window is shorter, since you can use the transaction pool to take into account pending transactions (by using eth_getTransactionCount(\"pending\")). For private transactions, the window is longer because private transactions aren't submitted to the transaction pool. You must wait until the private transaction's corresponding PMT is included in a block. Manage the nonce yourself, by keeping track of and providing the nonce at each call. We recommend this if you're sending many transactions that are independent of each other. note You can use priv_getTransactionCount or priv_getEeaTransactionCount to get the nonce for an account for the specified privacy group or participants. tip The web3js-quorum library includes an example of nonce management when sending concurrent private transactions. The example calculates the correct nonces for the private transactions and PMTs outside of Besu.","s":"Private nonce management","u":"/private-networks/concepts/privacy/private-transactions","h":"#private-nonce-management","p":92},{"i":105,"t":"You can define your own strategy for private transactions by building a plugin that extends Besu functionality. The plugin can take many forms, but it must provide Besu with a private transaction when required. danger The privacy plugin is an early access feature and plugin interfaces are subject to change between releases.","s":"Privacy plugin","u":"/private-networks/concepts/privacy/plugin","h":"","p":104},{"i":107,"t":"Enable the privacy plugin by starting Besu and including the --Xprivacy-plugin-enabled command line option. The registered plugin must implement the PrivacyPluginPayloadProvider interface.","s":"Configuration","u":"/private-networks/concepts/privacy/plugin","h":"#configuration","p":104},{"i":109,"t":"The privacy plugin must define the privacy marker transaction (PMT) payload. Use the payload to retrieve the contents of the private transaction which could be a link to a location in an enclave, or an encrypted form of the private payload itself. Besu doesn't need to know how the private transaction is distributed, it just needs to know what the private transaction for the PMT is.","s":"Use the payload provider interface","u":"/private-networks/concepts/privacy/plugin","h":"#use-the-payload-provider-interface","p":104},{"i":111,"t":"When submitting a private transaction using eea_sendRawTransaction, the signed transaction must be sent to 0x000000000000000000000000000000000000007a to indicate which privacy precompiled contract is being used. The transaction flow is as follows: The JSON-RPC endpoint passes the private transaction to the private transaction manager (for example Tessera). The private transaction manager sends the private transaction to the privacy plugin. The plugin decides what data to store onchain in the payload, for example the encrypted and serialized private transaction. The plugin returns what needs to be stored in the payload for the PMT. The private transaction handler creates a PMT for the private transaction, and propagates the PMT using devP2P in the same way as a public Ethereum transaction.","s":"Send transactions","u":"/private-networks/concepts/privacy/plugin","h":"#send-transactions","p":104},{"i":113,"t":"The process of mining transactions happens in reverse to sending transactions. The Mainnet transaction processor processes the PMT in the same way as any other public transaction. On nodes containing the privacy precompile contract specified in the to attribute of the PMT, the Mainnet transaction processor passes the PMT to the privacy precompile contract. note Nodes receiving the PMT that do not contain the specified privacy precompile contract will ignore the PMT. The privacy precompile contract queries the plugin for the private transaction using the PMT. The privacy precompile contract passes the private transaction to the private transaction manager. The privacy group ID specifies the private world state to use. The private transaction manager executes the transaction. The private transaction manager can read and write to the private world state, and read from the public world state.","s":"Mine transactions","u":"/private-networks/concepts/privacy/plugin","h":"#mine-transactions","p":104},{"i":115,"t":"An additional extension is available to help you define how PMTs are signed. Currently, Besu supports fixed or random key signing for PMTs. The extension allows you to use a more dynamic approach, for example different keys for different groups. Your plugin needs to register the PrivateMarkerTransactionFactory interface which is called before submitting a PMT to the transaction pool. The responsibility then lies with the plugin to sign and serialize the PMT.","s":"Transaction factory","u":"/private-networks/concepts/privacy/plugin","h":"#transaction-factory","p":104},{"i":117,"t":"To enable Besu to use your privacy plugin, implement the PrivacyPluginService interface and call setPayloadProvider. @AutoService(BesuPlugin.class) public class TestPrivacyPlugin implements BesuPlugin { private PrivacyPluginService service; @Override public void register(BesuContext context) { service = context.getService(PrivacyPluginService.class).get(); } @Override public void start() { service.setPayloadProvider(new PrivacyPluginPayloadProvider() { @Override public Bytes generateMarkerPayload(PrivateTransaction privateTransaction, String privacyUserId) { // perform logic to serialize the payload of the marker transaction // in this example we are serialising the private transaction using rlp https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/ return org.hyperledger.besu.ethereum.privacy.PrivateTransaction.serialize(privateTransaction).encoded(); } @Override public Optional getPrivateTransactionFromPayload(Transaction transaction) { // perform logic to deserialize payload from the marker transaction final BytesValueRLPInput bytesValueRLPInput = new BytesValueRLPInput(transaction.getPayload(), false); return Optional.of(org.hyperledger.besu.ethereum.privacy.PrivateTransaction.readFrom(bytesValueRLPInput)); } }); } @Override public void stop() {} }","s":"Register your plugin","u":"/private-networks/concepts/privacy/plugin","h":"#register-your-plugin","p":104},{"i":119,"t":"Processing private transactions involves the following: Precompiled contract: A smart contract compiled from the source language to EVM bytecode and stored by an Ethereum node for later execution. Privacy marker transaction (PMT): A public Ethereum transaction with a payload of the enclave key. The enclave key is a pointer to the private transaction in Tessera. The to attribute of the PMT is the address of the privacy precompiled contract. The PMT is signed with a random key or the key specified on the command line. Private transaction processing is illustrated and described in the following diagram. Submit a private transaction using eea_sendRawTransaction. The signed transaction includes transaction parameters specific to private transactions, including: privateFor or privacyGroupId, which specifies the list of recipients. privateFrom, which specifies the sender. restriction, which specifies the transaction is restricted to the transaction participants. The JSON-RPC endpoint passes the private transaction to the Private Transaction Handler. The Private Transaction Handler sends the private transaction to Tessera. Tessera distributes the private transaction directly (that is, point-to-point) to the Tessera nodes specified in privateFor or belonging to the privacy group identified by privacyGroupId. All recipient Tessera nodes store the transaction. Tessera associates the stored transaction with the transaction hash and privacy group ID. Tessera returns the transaction hash to the Private Transaction Handler. The Private Transaction Handler creates a PMT for the private transaction. The Private Transaction Handler propagates the PMT using devP2P in the same way as any other public Ethereum transaction. tip If you want to sign the PMT outside of Besu, use priv_distributeRawTransaction instead of eea_sendRawTransaction. Besu mines the PMT into a block and the PMT is distributed to all Ethereum nodes in the network. The Mainnet Transaction Processor processes the PMT in the same way as any other public transaction. On nodes containing the privacy precompile contract specified in the to attribute of the PMT, the Mainnet Transaction Processor passes the PMT to the privacy precompile contract. note Nodes receiving the PMT that don't contain the privacy precompile contract ignore the PMT. The privacy precompile contract queries Tessera for the private transaction and privacy group ID using the transaction hash. The privacy precompile contract passes the private transaction to the Private Transaction Processor. The privacy group ID specifies the private world state to use. The Private Transaction Processor executes the transaction. The Private Transaction Processor can read and write to the private world state, and read from the public world state. Recommendations We recommend using a network with a consensus mechanism supporting transaction finality. For example, IBFT 2.0. Tessera must be highly available and run in a separate instance to Besu. Using private transactions with pruning or fast sync is not supported.","s":"Private transaction processing","u":"/private-networks/concepts/privacy/private-transactions/processing","h":"","p":118},{"i":121,"t":"Get started with the Developer Quickstart. Use the quickstart to rapidly generate local blockchain networks. You can also install the following: Docker image Binaries","s":"Installation options","u":"/private-networks/get-started/install","h":"","p":120},{"i":123,"t":"If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the binary or Docker image for more stable versions. View the Wiki for instructions to install Besu from source.","s":"Build from source","u":"/private-networks/get-started/install","h":"#build-from-source","p":120},{"i":127,"t":"Homebrew Java JDK caution Besu supports: MacOS High Sierra 10.13 or later versions. Java 21+. You can install Java using brew install openjdk@21. Alternatively, you can manually install the Java JDK.","s":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites","p":124},{"i":129,"t":"To install Besu using Homebrew: brew tap hyperledger/besu brew install hyperledger/besu/besu To upgrade an existing Besu installation using Homebrew: brew upgrade hyperledger/besu/besu note If you've upgraded your MacOS version between installing and upgrading Besu, when running brew upgrade hyperledger/besu/besu you may be prompted to reinstall command line tools with xcode-select --install. note When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command brew tap --repair. To display the Besu version and confirm installation: besu --version To display Besu command line help: besu --help","s":"Install (or upgrade) using Homebrew","u":"/private-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":124},{"i":132,"t":"Java JDK 17+ Linux open file limit If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ulimit. If the open files limit is not high enough, a Too many open files RocksDB exception occurs. tip We recommend installing jemalloc to reduce memory usage. If using Ubuntu, you can install it with the command: apt install libjemalloc-dev.","s":"Prerequisites","u":"/private-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":124},{"i":134,"t":"Download the Besu packaged binaries. Unpack the downloaded files and change into the besu- directory. Display Besu command line help to confirm installation: bin/besu --help","s":"Install from packaged binaries","u":"/private-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":124},{"i":136,"t":"Besu provides a Docker image to run a Besu node in a Docker container. Use this Docker image to run a single Besu node without installing Besu.","s":"Run Besu from a Docker image","u":"/private-networks/get-started/install/run-docker-image","h":"","p":135},{"i":138,"t":"Docker MacOS or Linux caution The Docker image does not run on Windows.","s":"Prerequisites","u":"/private-networks/get-started/install/run-docker-image","h":"#prerequisites","p":135},{"i":140,"t":"Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using --rpc-http-port, --p2p-port, --rpc-ws-port, --metrics-port, --graphql-http-port, and --metrics-push-port options. To run Besu exposing local ports for access: docker run -p :8545 -p :8546 -p :30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled note The examples on this page expose TCP ports only. To expose UDP ports, specify /udp at the end of the argument for the -p Docker subcommand option: docker run -p :/udp See the docker run -p documentation. To enable JSON-RPC HTTP calls to 127.0.0.1:8545 and P2P discovery on 127.0.0.1:13001: docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled","s":"Expose ports","u":"/private-networks/get-started/install/run-docker-image","h":"#expose-ports","p":135},{"i":142,"t":"danger Don't mount a volume at the default data path (/opt/besu). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching. To run a node that maintains the node state (key and database), --data-path must be set to a location other than /opt/besu and a storage volume mounted at that location. When running in a Docker container, --nat-method must be set to DOCKER or AUTO (default). Don't set --nat-method to NONE or UPNP. You can specify Besu environment variables with the Docker image instead of the command line options. docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest \"Unsupported address type exception\" When running Besu from a Docker image, you might get the following exception: Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime. This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker. Enable IPv6 support in Docker to allow outbound IPv6 traffic and allow connection with IPv6 peers.","s":"Start Besu","u":"/private-networks/get-started/install/run-docker-image","h":"#start-besu","p":135},{"i":144,"t":"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled: docker run -p 8546:8546 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu","s":"Run a node for testing","u":"/private-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":135},{"i":146,"t":"When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run docker container ls and docker volume ls to get the container and volume names. To stop a container: docker stop To delete a container: docker rm ","s":"Stop Besu and clean up resources","u":"/private-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":135},{"i":148,"t":"Private network system requirements depend on many factors, including: Size of the world state for the network. Number of transactions submitted to the network. Block gas limit. Number and complexity of JSON-RPC, PubSub, or GraphQL queries handled by the node. Participation in private networks is typically restricted in some way, so the volume of traffic is much lower than on Mainnet, resulting in lower system requirements.","s":"System requirements","u":"/private-networks/get-started/system-requirements","h":"","p":147},{"i":150,"t":"To determine system requirements, check CPU and disk space requirements using Prometheus. Grafana provides a sample dashboard for Besu.","s":"Determining system requirements","u":"/private-networks/get-started/system-requirements","h":"#determining-system-requirements","p":147},{"i":152,"t":"Depending on your environment and network setup, the minimum Java Virtual Machine (JVM) memory requirement for private networks is 4 GB. JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs.","s":"Java Virtual Machine size","u":"/private-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":147},{"i":154,"t":"If you set up your own VM locally using a VM manager such as VirtualBox: Ensure you enable Intel Virtualization Technology (VTx) and Virtualization Technology for Directed I/O (VT-d) in the BIOS settings. On Windows, you might need to disable Hyper-V in the Windows Feature list. We recommend you create a VM with the following attributes: Memory size: Set to 6 GB (recommended) Create a virtual hard disk with at least 10 GB (20 GB recommended) Virtual hard disk file type: VDI (if you need to share it with other apps, use VHD) (Optional) You can create a shared directory to copy block files or genesis files from the host computer to the VM. For details on how to create a shared directory, see \"Share Folders\" in the Oracle VirtualBox documentation.","s":"VM requirements","u":"/private-networks/get-started/system-requirements","h":"#vm-requirements","p":147},{"i":156,"t":"Use local SSD storage for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup. You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.","s":"Disk type","u":"/private-networks/get-started/system-requirements","h":"#disk-type","p":147},{"i":158,"t":"This section provides instructional content for private network features. The following features are shared with public networks and the content can be found in the public networks section: Configure and manage: Use a configuration file Configure high availability Configure mining Use the Besu API: Use JSON-RPC over HTTP, WS, and IPC Use RPC Pub/Sub over WS Use GraphQL over HTTP Authenticate JSON-RPC requests Access logs using JSON-RPC API Find and connect to peers: Configure static nodes Configure ports Manage peers Specify NAT method Configure Java: Install and update Java Pass JVM options Manage JVM memory Use Java Flight Recorder Develop dapps: Use Hardhat Use client libraries Troubleshoot: Use EVM tool Trace transactions","s":"How to","u":"/private-networks/how-to","h":"","p":157},{"i":160,"t":"In a decentralized blockchain, data replicates between nodes so it is not lost. But backing up configuration and data ensures a smoother recovery from corrupted data or other failures.","s":"Backup and restore Besu","u":"/private-networks/how-to/backup","h":"","p":159},{"i":162,"t":"The genesis file for a network must be accessible on every node. We recommend storing the genesis file under source control.","s":"Genesis file","u":"/private-networks/how-to/backup","h":"#genesis-file","p":159},{"i":164,"t":"If installed locally, the default data location is the Besu installation directory. We recommend mounting a separate volume to store data. Use the --data-path command line option to pass the path to Besu. The default data location is the Besu installation directory, or /opt/besu/database if using the Besu Docker image. Having some data reduces the time to synchronize a new node. You can perform periodic backups of the data directory and send the data to your preferred backup mechanism. For example, cron job and rsync, archives to the cloud such as s3, or tar.gz archives.","s":"Data backups","u":"/private-networks/how-to/backup","h":"#data-backups","p":159},{"i":166,"t":"To restore data: If the node is running, stop the node. If required, move the data directory to another location for analysis. Restore the data from your last known good backup to the same directory. Ensure user permissions are valid so you can read from and write to the data directory. Restart the node.","s":"Data restores","u":"/private-networks/how-to/backup","h":"#data-restores","p":159},{"i":168,"t":"If log messages signify a corrupt database, the cleanest way to recover is: Stop the node. Restore the data from a previous backup. Restart the node.","s":"Corrupted data","u":"/private-networks/how-to/backup","h":"#corrupted-data","p":159},{"i":170,"t":"When restarting Besu, accidentally using an earlier version of Besu might risk corrupting your database. To protect against incompatibility between versions, set the --version-compatibility-protection option to true.","s":"Prevent accidental downgrade","u":"/private-networks/how-to/backup","h":"#prevent-accidental-downgrade","p":159},{"i":172,"t":"The process for finding peers after restarting is the same as for finding peers after upgrading and restarting.","s":"Find peers after restarting","u":"/private-networks/how-to/backup","h":"#find-peers-after-restarting","p":159},{"i":174,"t":"Use the besu command with the required command line options to start a node.","s":"Start Besu","u":"/private-networks/get-started/start-node","h":"","p":173},{"i":176,"t":"Besu installed","s":"Prerequisites","u":"/private-networks/get-started/start-node","h":"#prerequisites","p":173},{"i":178,"t":"When connecting to a network other than the network previously connected to, you must either delete the local block data or use the --data-path option to specify a different data directory. To delete the local block data, delete the database directory in the besu/build/distribution/besu- directory.","s":"Local block data","u":"/private-networks/get-started/start-node","h":"#local-block-data","p":173},{"i":180,"t":"To define a genesis configuration, create a genesis file (for example, genesis.json) and specify the file using the --genesis-file option. When you specify --network=dev, Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with --network=dev has an empty bootnodes list by default. Predefined genesis configurations for named networks are in the Besu source files.","s":"Genesis configuration","u":"/private-networks/get-started/start-node","h":"#genesis-configuration","p":173},{"i":182,"t":"If you started Besu with the --rpc-http-enabled option, use cURL to call JSON-RPC API methods to confirm the node is running. eth_chainId returns the chain ID of the network. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' localhost:8545 eth_syncing returns the starting, current, and highest block. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}' localhost:8545 For example, after connecting to Mainnet, eth_syncing will return something similar to: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x2d0\", \"highestBlock\": \"0x66c0\" } }","s":"Confirm node is running","u":"/private-networks/get-started/start-node","h":"#confirm-node-is-running","p":173},{"i":184,"t":"To run a node that mines blocks at a rate suitable for testing purposes: besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --host-allowlist=\"*\" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir You can also use the following configuration file on the command line to start a node with the same options as above: network=\"dev\" miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" rpc-http-cors-origins=[\"all\"] host-allowlist=[\"*\"] rpc-ws-enabled=true rpc-http-enabled=true data-path=\"/tmp/tmpdata-path\" caution The following settings are a security risk in production environments: Enabling the HTTP JSON-RPC service (--rpc-http-enabled) and setting --rpc-http-host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. Setting --host-allowlist to \"*\" allows JSON-RPC API access from any host. Setting --rpc-http-cors-origins to \"all\" or \"*\" allows cross-origin resource sharing (CORS) access from any domain.","s":"Run a node for testing","u":"/private-networks/get-started/start-node","h":"#run-a-node-for-testing","p":173},{"i":186,"t":"To run a node on your private network specifying a genesis file and data directory: besu --genesis-file=/genesis.json --data-path= --rpc-http-enabled --bootnodes= Where is the path to the directory to save the chain data to. Ensure you configure a peer discovery method, such as bootnodes. note You might need to set --tx-pool-limit-by-account-percentage to 1. The default value is suitable for Mainnet, but may cause issues on private networks. Sync nodes for BFT If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync. Full sync is set by default.","s":"Run a node on a private network","u":"/private-networks/get-started/start-node","h":"#run-a-node-on-a-private-network","p":173},{"i":188,"t":"info Only private networks using the QBFT consensus protocol support block proposal permissioning. Block proposal permissioning is an early access feature, and functionality and options may be updated between releases. You can configure block proposal permissioning to ensure only authorized validator nodes can propose blocks in the network. Use certificates issued by a trusted authority to ensure validators are authorized to propose blocks.","s":"Block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"","p":187},{"i":190,"t":"Prerequisites: A configured network. For example, see steps 1 to 5 in the QBFT tutorial. A keystore containing the certificate and key for each network node. A truststore containing all the trusted certificates for the network. Start Besu and include the following command line options on the required nodes: besu --Xpki-block-creation-enabled=true \\ --Xpki-block-creation-keystore-type=\"pkcs12\" \\ --Xpki-block-creation-keystore-file=\"keystore\" \\ --Xpki-block-creation-keystore-password-file=\"keystore.password\" \\ --Xpki-block-creation-crl-file=\"crl2.pem\" \\ --Xpki-block-creation-keystore-certificate-alias=\"validator\" \\ --Xpki-block-creation-truststore-type=\"pkcs12\" \\ --Xpki-block-creation-truststore-file=\"truststore\" \\ --Xpki-block-creation-truststore-password-file=\"truststore.password\" In the command line: Enable block proposal permissioning using --Xpki-block-creation-enabled=true. Specify the keystore type and keystore file using Xpki-block-creation-keystore-type and --Xpki-block-creation-keystore-file. Specify the text file containing the password to unlock the keystore file using Xpki-block-creation-keystore-password-file. Specify the optional certificate revocation list (CRL) file using Xpki-block-creation-crl-file. Specify the alias of the certificate to be included in blocks proposed by this validator using Xpki-block-creation-keystore-certificate-alias. Specify the truststore type and truststore file using Xpki-block-creation-truststore-type and Xpki-block-creation-truststore-file. Specify the text file containing the password to unlock the truststore file using Xpki-block-creation-truststore-password-file.","s":"Configure block proposal permissioning","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#configure-block-proposal-permissioning","p":187},{"i":193,"t":"Syntax Example Environment variable --Xpki-block-creation-crl-file= --Xpki-block-creation-crl-file=/home/cert/cert.crl.pem BESU_XPKI_BLOCK_CREATION_CRL_FILE=/home/cert/cert.crl.pem Path to the optional certificate revocation list (CRL) file.","s":"Xpki-block-creation-crl-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-crl-file","p":187},{"i":195,"t":"Syntax Example Environment variable --Xpki-block-creation-enabled[=] --Xpki-block-creation-enabled=true BESU_XPKI_BLOCK_CREATION_ENABLED=true Enable PKI integration. The default is false.","s":"Xpki-block-creation-enabled","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-enabled","p":187},{"i":197,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-certificate-alias= --Xpki-block-creation-keystore-certificate-alias=validatorA BESU_XPKI_BLOCK_CREATION_KEYSTORE_CERTIFICATE_ALIAS=validatorA Alias of the certificate to be included in the blocks proposed by this validator. The default is validator.","s":"Xpki-block-creation-keystore-certificate-alias","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-certificate-alias","p":187},{"i":199,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-file= --Xpki-block-creation-keystore-file=/home/cert/keystore.jks BESU_XPKI_BLOCK_CREATION_KEYSTORE_FILE=/home/cert/keystore.jks Keystore file containing the key and certificate for PKI block creation.","s":"Xpki-block-creation-keystore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-file","p":187},{"i":201,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-password-file= --Xpki-block-creation-keystore-password-file=/home/cert/password.txt BESU_XPKI_BLOCK_CREATION_KEYSTORE_PASSWORD-FILE=/home/cert/password.txt Text file containing the password to unlock the keystore file.","s":"Xpki-block-creation-keystore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-password-file","p":187},{"i":203,"t":"Syntax Example Environment variable --Xpki-block-creation-keystore-type= --Xpki-block-creation-keystore-type=JKS BESU_XPKI_BLOCK_CREATION_KEYSTORE_TYPE=JKS PKI keystore type. Valid options are JKS and PKCS12. The default is JKS.","s":"Xpki-block-creation-keystore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-keystore-type","p":187},{"i":205,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-file= --Xpki-block-creation-truststore-file=/home/cert/truststore.jks BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_FILE=/home/cert/truststore.jks Truststore containing the trusted certificates for PKI block creation.","s":"Xpki-block-creation-truststore-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-file","p":187},{"i":207,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-password-file= --Xpki-block-creation-truststore-password-file=/home/cert/password.txt BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the truststore file.","s":"Xpki-block-creation-truststore-password-file","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-password-file","p":187},{"i":209,"t":"Syntax Example Environment variable --Xpki-block-creation-truststore-type= --Xpki-block-creation-truststore-type=JKS BESU_XPKI_BLOCK_CREATION_TRUSTSTORE_TYPE=JKS PKI truststore type. Valid options are JKS and PKCS12. The default is JKS.","s":"Xpki-block-creation-truststore-type","u":"/private-networks/how-to/configure/block-proposal-permissioning","h":"#xpki-block-creation-truststore-type","p":187},{"i":211,"t":"You can use bootnodes to initially discover peers. Bootnodes are regular nodes used to discover other nodes. In private networks for development or testing purposes, specify at least one bootnode. In production networks, configure two or more nodes as bootnodes. tip Bootnodes and static nodes are parallel methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes. To find peers, configure one or more bootnodes. To configure a specific set of peer connections, use static nodes. Mainnet and public testnets For Mainnet and the Sepolia and Holesky testnets, Besu has an internal list of enode URLs and uses this list automatically when you specify the --network option.","s":"Configure bootnodes","u":"/private-networks/how-to/configure/bootnodes","h":"","p":210},{"i":213,"t":"To start a node, specify a bootnode enode for P2P discovery, using the --bootnodes option. besu --genesis-file=privateNetworkGenesis.json --data-path=nodeDataPath --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 The default host and port advertised to other peers for P2P discovery is 127.0.0.1:30303. To specify a different host or port, use the --p2p-host and --p2p-port options. By default, peer discovery listens on all available network interfaces. If the device Besu is running on must bind to a specific network interface, specify the interface using the --p2p-interface option.","s":"Specify a bootnode","u":"/private-networks/how-to/configure/bootnodes","h":"#specify-a-bootnode","p":210},{"i":215,"t":"A network must have at least one operating bootnode. To allow for continuity in the event of failure, configure two or more bootnodes in a production network. If you don't configure any bootnodes, Besu uses Mainnet's default bootnodes. We don't recommend putting bootnodes behind a load balancer because the enode relates to the node public key, IP address, and discovery ports. Any changes to a bootnode enode prevents other nodes from being able to establish a connection with the bootnode. This is why we recommend putting more bootnodes on the network itself. To ensure a bootnode enode doesn't change when recovering from a complete bootnode failure: Create the node key pair (that is, the private and public key) before starting the bootnode. When creating bootnodes in the cloud (for example, AWS and Azure), attempt to assign a static IP address to them. If your network is: Publicly accessible, assign an elastic IP. Internal only, specify a private IP address when you create the instance and record this IP address. We recommend storing the bootnode configuration under source control. To allow for failure, specify all bootnodes on the command line (even to the bootnodes themselves). tip Having each bootnode list the other bootnodes increases the speed of discovery. Nodes ignore their own enode in the bootnodes list so it isn't required to specify different bootnode lists to the bootnodes themselves.","s":"Configure bootnodes in a production network","u":"/private-networks/how-to/configure/bootnodes","h":"#configure-bootnodes-in-a-production-network","p":210},{"i":217,"t":"Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and adding them to the network, update the --bootnodes command line option for each node to include the new bootnodes. When adding bootnodes, you don't need to restart running nodes. By updating the --bootnodes option, the next time you restart the nodes (for example, when upgrading), the nodes connect to the new bootnodes.","s":"Add and remove bootnodes","u":"/private-networks/how-to/configure/bootnodes","h":"#add-and-remove-bootnodes","p":210},{"i":219,"t":"Besu supports the following consensus protocols: QBFT (proof of authority) - The recommended enterprise-grade consensus protocol for private networks. IBFT 2.0 (proof of authority) - Supported for existing private networks. Clique (proof of authority) - Not recommended for production use. Proof of stake - Used on Ethereum Mainnet and public testnets. Ethash (proof of work) - Can be used in small development networks. See a comparison of the proof of authority consensus protocols. The config property in the genesis file specifies the consensus protocol for a chain. Ethash Clique IBFT 2.0 QBFT { \"config\": { ... \"ethash\": { ... } }, ... } { \"config\": { ... \"clique\": { ... } }, ... } { \"config\": { ... \"ibft2\": { ... } }, ... } { \"config\": { ... \"qbft\": { ... } }, ... }","s":"Consensus protocols","u":"/private-networks/how-to/configure/consensus","h":"","p":218},{"i":221,"t":"QBFT or IBFT 2.0 network conditions might not allow voting to change validators. For example, if a majority of the current validators are no longer participating in the network, a vote to add or remove validators won't be successful. You can bypass voting and specify new validators using a transition in the genesis file. caution In most cases, add or remove validators by voting or smart contract for QBFT; or by voting for IBFT 2.0. Use transitions only when voting isn't possible. Using transitions requires coordinating a rolling update of all the nodes in order to pick up the configuration at the correct block height. Using transitions also leaves the validator overrides permanently in your genesis configuration. Transitions are a Besu-specific feature. If you run a mixed-client QBFT network, you can't use transitions to change the validators. To add or remove validators without voting: In the genesis file, add the transitions configuration item where: is the upcoming block at which to change validators. ... are strings representing the account addresses of the validators after . QBFT syntax QBFT example IBFT 2.0 syntax IBFT 2.0 example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": 25, \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": 25, \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed. To verify the changes after the transition block, call qbft_getValidatorsByBlockNumber or ibft_getValidatorsByBlockNumber, specifying latest. caution Don't specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Add and remove validators without voting","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","h":"","p":220},{"i":223,"t":"When using QBFT contract validator selection, if network conditions require it, you can bypass the smart contract and specify new validators in the genesis file. For example, you lose quorum for your current list of contract validators, and you can't perform a transaction to vote more in. This requires temporarily switching to block header validator selection mode. To bypass the smart contract and specify new validators: In the genesis file, add a transitions configuration item where: is the upcoming block at which to change validators. is the validator selection mode to switch to. In this case we'll switch to the blockheader mode temporarily. ... are strings representing the account addresses of the validators after . These validators only need to be sufficient to progress the chain and allow a new contract to be deployed. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": , \"validatorselectionmode\": , \"validators\": [ , ... ] } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed. Deploy a new contract to the blockchain containing the desired list of validators. In the genesis file, add another transitions configuration item where: is the upcoming block at which to change validators. is the validator selection mode to switch to. In this case we'll switch to contract mode. is the address of the new smart contract. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, “validatorcontractaddress”: “0x0000000000000000000000000000000000007777” }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] }, { \"block\": , \"validatorselectionmode\": , \"validatorcontractaddress\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" }, \"transitions\": { \"qbft\": [ { \"block\": 2555, \"validatorselectionmode\": \"blockheader\", \"validators\": [ \"0x372a70ace72b02cc7f1757183f98c620254f9c8d\", \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" ] }, { \"block\": 2755, \"validatorselectionmode\": \"contract\", \"validatorcontractaddress\": \"0x0000000000000000000000000000000000009999\" } ] } }, ... } Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed.","s":"Override smart contract validators","u":"/private-networks/how-to/configure/consensus/add-validators-without-voting","h":"#override-smart-contract-validators","p":220},{"i":225,"t":"Besu implements the Clique proof of authority (PoA) consensus protocol. Private networks can use Clique. danger Clique is not suitable for production environments. Use only in development environments. In Clique networks, approved accounts, known as signers, validate transactions and blocks. Signers take turns to create the next block. Existing signers propose and vote to add or remove signers. You can create a private network using Clique.","s":"Configure Clique consensus","u":"/private-networks/how-to/configure/consensus/clique","h":"","p":224},{"i":227,"t":"To use Clique in a private network, Besu requires a Clique genesis file. A Clique genesis file defines properties specific to Clique. Example Clique genesis file { \"config\": { \"chainId\": 1981, \"berlinBlock\": 0, \"clique\": { \"blockperiodseconds\": 15, \"epochlength\": 30000, \"createemptyblocks\": true } }, \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"extraData\": \"0x000000000000000000000000000000000000000000000000000000000000000001a54556254bfa3db2daa7673435ec63649925c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0x1fffffffffffff\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"nonce\": \"0x0\", \"timestamp\": \"0x5c51a607\", \"alloc\": {}, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } The properties specific to Clique are: blockperiodseconds - The block time, in seconds. epochlength - The number of blocks after which to reset all votes. createemptyblocks - Set to false to skip creating empty blocks. extraData - Extra data including the initial signers.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/clique","h":"#genesis-file","p":224},{"i":229,"t":"By default, Clique creates empty blocks. For large private networks using Clique, skipping empty blocks can reduce the storage needed. To skip creating empty blocks, set createemptyblocks to false in the genesis file: { \"config\": { \"londonBlock\": 0, \"clique\": { \"blockperiodseconds\": 10, \"epochlength\": 30000, \"createemptyblocks\": false } }, ... } All validators must have the same value for createemptyblocks.","s":"Skip empty blocks","u":"/private-networks/how-to/configure/consensus/clique","h":"#skip-empty-blocks","p":224},{"i":231,"t":"The extraData property consists of: 0x prefix. 32 bytes of vanity data. A list of initial signer addresses (at least one initial signer is required). 20 bytes for each signer. 65 bytes for the proposer signature. In the genesis block there is no initial proposer, so the proposer signature is all zeros.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/clique","h":"#extra-data","p":224},{"i":235,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/clique","h":"#post-merge-configuration","p":224},{"i":237,"t":"To start a node on a Clique private network, use the --genesis-file option to specify the custom genesis file.","s":"Connect to a Clique network","u":"/private-networks/how-to/configure/consensus/clique","h":"#connect-to-a-clique-network","p":224},{"i":239,"t":"Existing signers propose and vote to add or remove validators using the Clique JSON-RPC API methods. Enable the HTTP interface with --rpc-http-enabled or the WebSocket interface with --rpc-ws-enabled. The Clique API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include CLIQUE. The methods to add or remove signers are: clique_propose. clique_getSigners. clique_discard. To view signer metrics for a specified block range, call clique_getSignerMetrics.","s":"Add and remove signers","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-and-remove-signers","p":224},{"i":241,"t":"To propose adding a signer to a Clique network, call clique_propose, specifying the address of the proposed signer and true. A majority of signers must execute the call. JSON-RPC clique_propose request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the signer creates the next block, the signer adds a vote to the block for the proposed signer. When more than 50% of the existing signers propose adding the signer, with their votes distributed in blocks, the signer can begin signing blocks. To return a list of signers and confirm the addition of a proposed signer, call clique_getSigners. JSON-RPC clique_getSigners request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a signer, call clique_discard specifying the address of the proposed signer. JSON-RPC clique_discard request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' ","s":"Add a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#add-a-signer","p":224},{"i":243,"t":"The process for removing a signer from a Clique network is the same as adding a signer, except you specify false as the second parameter of clique_propose.","s":"Remove a signer","u":"/private-networks/how-to/configure/consensus/clique","h":"#remove-a-signer","p":224},{"i":245,"t":"At each epoch transition, Clique discards all pending votes collected from received blocks. Existing proposals remain in effect and signers re-add their vote the next time they create a block. Define the number of blocks between epoch transitions in the Clique genesis file.","s":"Epoch transition","u":"/private-networks/how-to/configure/consensus/clique","h":"#epoch-transition","p":224},{"i":247,"t":"The transitions genesis configuration item allows you to specify a future block number at which to change the Clique network configuration in an existing network. For example, you can update the block time and whether to create empty blocks. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/clique","h":"#transitions","p":224},{"i":249,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": 3, \"blockperiodseconds\": 1 }, { \"block\": 6, \"blockperiodseconds\": 2 }, ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-block-time-on-an-existing-network","p":224},{"i":251,"t":"To update an existing network with a new createemptyblocks: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change createemptyblocks. is the updated value for createemptyblocks. Syntax Example { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": , \"createemptyblocks\": } ] } }, ... } { \"config\": { ... \"clique\": { \"blockperiodseconds\": 3, \"epochlength\": 30, \"requesttimeoutseconds\": 6, \"createemptyblocks\": true }, \"transitions\": { \"clique\": [ { \"block\": 10, \"createemptyblocks\": false } ] } }, ... } Restart all nodes in the network using the updated genesis file.","s":"Configure empty blocks on an existing network","u":"/private-networks/how-to/configure/consensus/clique","h":"#configure-empty-blocks-on-an-existing-network","p":224},{"i":253,"t":"In Clique, blocks created by in-turn validators are published immediately. Out-of-turn validators create blocks that are published after a short delay. In-turn blocks have a higher difficulty than out-of-turn blocks, which allows small forks to resolve to the chain with more in-turn blocks. However, when the out-of-turn delay is shorter than the block propagation delay, out-of-turn blocks may be published before in-turn blocks. This may cause large, irresolvable forks in a network. tip We recommend using a more updated consensus protocol such as IBFT 2.0 or QBFT.","s":"Limitations","u":"/private-networks/how-to/configure/consensus/clique","h":"#limitations","p":224},{"i":255,"t":"Besu implements the IBFT 2.0 proof of authority (PoA) consensus protocol. IBFT 2.0 is supported for existing private networks, but QBFT is the recommended enterprise-grade consensus protocol for private networks. In IBFT 2.0 networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block. Existing validators propose and vote to add or remove validators. You can create a private network using IBFT. danger Configure your network to ensure you never lose more than 1/3 of your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted. tip You can use a plugin to securely store a validator's key using the --security-module option.","s":"Configure IBFT 2.0 consensus","u":"/private-networks/how-to/configure/consensus/ibft","h":"","p":254},{"i":257,"t":"To use IBFT 2.0, Besu requires an IBFT 2.0 genesis file. The genesis file defines properties specific to IBFT 2.0. Example IBFT 2.0 genesis file { \"config\": { \"chainId\": 1981, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4, \"blockreward\": \"5000000000000000\", \"miningbeneficiary\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"extraData\": \"0xf83ea00000000000000000000000000000000000000000000000000000000000000000d594c2ab482b506de561668e07f04547232a72897daf808400000000c0\", \"gasLimit\": \"0x1fffffffffffff\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"alloc\": {} } The properties specific to IBFT 2.0 are: blockperiodseconds - The minimum block time, in seconds. epochlength - The number of blocks after which to reset all votes. requesttimeoutseconds - The timeout for each consensus round before a round change, in seconds. blockreward - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value. miningbeneficiary - Optional beneficiary of the blockreward. Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary. extraData - RLP encoded extra data. caution We don't recommend changing epochlength in a running network. Changing the epochlength after genesis can result in illegal blocks. Invalid block header error When adding a new node, if a TimeStampMoreRecentThanParent | Invalid block header error occurs, the genesis file of the new node specifies a higher blockperiodseconds than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu. Decrease the blockperiodseconds in the new IBFT 2.0 genesis file to a lower value that satisfies the block header validation. If the error reads | TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds, decrease the blockperiodseconds from 4 seconds to 3 seconds to match the imported chain. After you update the new genesis file, if the imported chain has a blockperiodseconds value set lower than you prefer, you can adjust it by configuring the block time on an existing IBFT 2.0 network. The properties with specific values in the IBFT 2.0 genesis files are: nonce - 0x0 difficulty - 0x1 mixHash - 0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365 for Istanbul block identification To start a node on an IBFT 2.0 private network, use the --genesis-file option to specify the custom genesis file.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/ibft","h":"#genesis-file","p":254},{"i":259,"t":"The extraData property is an RLP encoding of: 32 bytes of vanity data. A list of validator addresses. Any validator votes. No vote is included in the genesis block. The round the block was created on. The round in the genesis block is 0. A list of seals of the validators (signed block hashes). No seals are included in the genesis block. In the genesis block, the important information in the extra data is the list of validators. All other details have empty values. Formally, extraData in the genesis block contains RLP([32 bytes Vanity, List, No Vote, Round=Int(0), 0 Seals]). info RLP encoding is a space-efficient object serialization scheme used in Ethereum. Generate extra data​ To generate the extraData RLP string for inclusion in the genesis file, use the rlp encode Besu subcommand. Example besu rlp encode --from=toEncode.json Where the toEncode.json file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the toEncode.json file, use the public-key export-address Besu subcommand. For example: One initial validator in toEncode.json file [\"9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\"] Copy the RLP encoded data to the extraData property in the genesis file.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/ibft","h":"#extra-data","p":254},{"i":261,"t":"When the protocol receives a new chain head, the block time (blockperiodseconds) and round timeout (requesttimeoutseconds) timers start. When blockperiodseconds expires, the protocol proposes a new block. If requesttimeoutseconds expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times requesttimeoutseconds. The timeout period continues to double each time a round fails to add a block. Usually, the protocol adds the proposed block before reaching requesttimeoutseconds. A new round then starts, resetting the block time and round timeout timers. When blockperiodseconds expires, the protocol proposes the next new block. danger If more than 1/3 of validators stop participating, new blocks can no longer be created and requesttimeoutseconds doubles with each round change. The quickest method to resume block production is to restart all validators, which resets requesttimeoutseconds to its genesis value. Once blockperiodseconds is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators. An internal network run by ConsenSys had four geographically dispersed validators in Sweden, Sydney, and two in North Virginia. With a blockperiodseconds of 5 and a requesttimeoutseconds of 10, the testnet consistently created blocks with a five second block time. Tune block timeout​ To tune the block timeout for your network deployment: Set blockperiodseconds to your desired block time and requesttimeoutseconds to two times blockperiodseconds. Reduce requesttimeoutseconds until you start to see round changes occurring. Increase requesttimeoutseconds to the value where round changes are no longer occurring. tip View TRACE logs to see round change log messages. Use a transition to update the blockperiodseconds in an existing network.","s":"Block time","u":"/private-networks/how-to/configure/consensus/ibft","h":"#block-time","p":254},{"i":263,"t":"Optional configuration options in the genesis file are: messageQueueLimit - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000. duplicateMessageLimit - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100. futureMessagesLimit - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000. futureMessagesMaxDistance - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10.","s":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/ibft","h":"#optional-configuration-options","p":254},{"i":265,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/ibft","h":"#post-merge-configuration","p":254},{"i":267,"t":"Existing validators propose and vote to add or remove validators using the IBFT 2.0 JSON-RPC API methods. Enable the HTTP interface with --rpc-http-enabled or the WebSocket interface with --rpc-ws-enabled. The IBFT 2.0 API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include IBFT. The methods to add or remove validators are: ibft_getPendingVotes. ibft_proposeValidatorVote. ibft_discardValidatorVote. To view validator metrics for a specified block range, use ibft_getSignerMetrics. note If network conditions render it impossible to add and remove validators by voting, you can add and remove validators without voting.","s":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-and-remove-validators","p":254},{"i":269,"t":"To propose adding a validator to an IBFT 2.0 network, call ibft_proposeValidatorVote, specifying the address of the proposed validator and true. A majority of validators must execute the call. JSON-RPC ibft_proposeValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the validator proposes the next block, the protocol inserts one proposal received from ibft_proposeValidatorVote into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use ibft_getValidatorsByBlockNumber. JSON-RPC ibft_getValidatorsByBlockNumber request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a validator, call ibft_discardValidatorVote, specifying the address of the proposed validator. JSON-RPC ibft_discardValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' ","s":"Add a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#add-a-validator","p":254},{"i":271,"t":"The process for removing a validator from an IBFT 2.0 network is the same as adding a validator except you specify false as the second parameter of ibft_proposeValidatorVote.","s":"Remove a validator","u":"/private-networks/how-to/configure/consensus/ibft","h":"#remove-a-validator","p":254},{"i":273,"t":"At each epoch transition, IBFT 2.0 discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block. An epoch transition occurs every epochLength blocks. Define epochlength in the IBFT 2.0 genesis file.","s":"Epoch transition","u":"/private-networks/how-to/configure/consensus/ibft","h":"#epoch-transition","p":254},{"i":275,"t":"IBFT 2.0 requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#minimum-number-of-validators","p":254},{"i":277,"t":"As the number of validators increase, the message complexity increases, which can decrease performance. In network tests, IBFT 2.0 handles up to 30 validators with no loss of performance. Non-validator nodes don't affect performance and don't count towards the maximum limit.","s":"Maximum number of validators","u":"/private-networks/how-to/configure/consensus/ibft","h":"#maximum-number-of-validators","p":254},{"i":279,"t":"The transitions genesis configuration item allows you to specify a future block number at which to change the IBFT 2.0 network configuration in an existing network. For example, you can update the block time, block reward, or mining beneficiary. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/ibft","h":"#transitions","p":254},{"i":281,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"ibft2\": [ { \"block\": 1240, \"blockperiodseconds\": 4 } ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-time-on-an-existing-network","p":254},{"i":283,"t":"To update an existing network with a new blockreward: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockreward. is the updated value for blockreward. Syntax Example { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"ibft2\": [ { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": } ] } }, ... } { \"config\": { ... \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"ibft2\": [ { \"block\": 10, \"blockreward\": \"6000000000000000\" }, { \"block\": 15, \"blockreward\": \"75000000000000000\" }, { \"block\": 20, \"blockreward\": \"0\" } ] } }, ... } note You can add multiple blockreward updates in one transition object by specifying multiple future blocks. Restart all nodes in the network using the updated genesis file.","s":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-block-rewards-on-an-existing-network","p":254},{"i":285,"t":"To update an existing network with a new mining beneficiary: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change miningbeneficiary. is the updated 20-byte address for miningbeneficiary. Starting at , block rewards go to this address. Syntax Example { \"config\": { \"chainId\": 999, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 1, \"epochlength\": 30000, \"requesttimeoutseconds\": 5, \"blockreward\": \"5000000000000000000\", \"miningbeneficiary\": \"0x0000000000000000000000000000000000000001\" }, \"transitions\": { \"ibft2\": [ { \"block\": , \"miningbeneficiary\": }, { \"block\": , \"miningbeneficiary\": } ] } }, ... } { \"config\": { \"chainId\": 999, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 1, \"epochlength\": 30000, \"requesttimeoutseconds\": 5, \"blockreward\": \"5000000000000000000\", \"miningbeneficiary\": \"0x0000000000000000000000000000000000000001\" }, \"transitions\": { \"ibft2\": [ { \"block\": 10000, \"miningbeneficiary\": \"\", }, { \"block\": 20000, \"miningbeneficiary\": \"0x0000000000000000000000000000000000000002\", } ] } }, ... } note Setting the miningbeneficiary to an empty value clears out any override so that block rewards go to the block producer rather than a global override address. Restart all nodes in the network using the updated genesis file.","s":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/ibft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":254},{"i":287,"t":"caution Configuring alternative elliptic curves is an early access feature. By default, Besu uses the Ethereum standard secp256k1 elliptic curve (EC). However, when running nodes in a private network, it is possible to configure an alternative elliptic curve. The configuration for what elliptic curve Besu will use is done in the network configuration section of genesis file, using the ecCurve key: { \"genesis\": { \"config\": { \"ecCurve\": \"secp256k1\", [...] }, [...] } Important All nodes in the network MUST use the same elliptic curve. Nodes with different EC configuration from the network won't be able to send messages to other nodes or verify transactions and blocks. Besu supports the following elliptic curves: secp256k1 (Ethereum default) secp256r1","s":"Configure alternative elliptic curves","u":"/private-networks/how-to/configure/curves","h":"","p":286},{"i":289,"t":"Transactions use computational resources so have an associated cost. Gas is the cost unit and the gas price is the price per gas unit. The transaction cost is the gas used * gas price. In public networks, the account submitting the transaction pays the transaction cost, in Ether. The miner (or validator in PoA networks) that includes the transaction in a block receives transaction cost. In many private networks, network participants run the validators and do not require gas as an incentive. Networks that don't require gas as an incentive usually configure the gas price to be zero (that is, free gas). Some private networks might allocate Ether and use a non-zero gas price to limit resource use. tip We use the term free gas network to refer to a network with a gas price of zero. A network with a gas price of zero is also known as a zero gas network or no gas network. note Some pre-crafted transactions require the deployment account to have gas available. For example, the transaction that creates the smart contract in EIP-1820. In a free gas network, transactions still use gas but the gas price is zero, meaning the transaction cost is zero. Transaction cost = gas used * 0 (the gas price).","s":"Configure free gas networks","u":"/private-networks/how-to/configure/free-gas","h":"","p":288},{"i":291,"t":"When gas is free, limiting block and contract sizes is less important. In free gas networks, we increase the block size limit and set the contract size limit to the maximum value.","s":"Configure free gas in Besu","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-besu","p":288},{"i":293,"t":"If you want to remove gas from consideration and don't mind blocks potentially taking longer to create, in the genesis file set the block size limit (measured in gas) to the maximum accepted by Hardhat (0x1fffffffffffff). In the genesis file, specify gasLimit following the config key. { \"config\": { .... }, ... \"gasLimit\": \"0x1fffffffffffff\", .... } If you are more concerned about blocks arriving on time and don't have expensive individual transactions, set gasLimit to a value closer to the amount of gas your validators can process in the configured block time.","s":"1. Set the block size","u":"/private-networks/how-to/configure/free-gas","h":"#1-set-the-block-size","p":288},{"i":295,"t":"In the config section of the genesis file, set the contract size limit to the maximum supported size (in bytes). ( \"config\": { ... \"contractSizeLimit\": 2147483647, ... } ... }","s":"2. Set the contract size","u":"/private-networks/how-to/configure/free-gas","h":"#2-set-the-contract-size","p":288},{"i":297,"t":"When starting nodes, set the minimum gas price to zero. Command line Configuration file --min-gas-price=0 min-gas-price=0 Important In a free gas network, ensure the minimum gas price is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. You can query a node's gas configuration using eth_gasPrice.","s":"3. Start Besu with a minimum gas price of zero","u":"/private-networks/how-to/configure/free-gas","h":"#3-start-besu-with-a-minimum-gas-price-of-zero","p":288},{"i":299,"t":"If your network is configured to use the londonBlock or a later hard fork, then you must also enable the zeroBaseFee configuration. You must set this on all your nodes. Once it is set, future blocks produced by that node will set a baseFee of 0. This is required because the London hard fork (EIP-1559) introduced a non-zero baseFee into the block which normally means transactions require gas. { \"config\": { \"londonBlock\": 0, \"zeroBaseFee\": true, ... }, ... } If zero base fee is enabled, you cannot specify a value for --tx-pool-price-bump.","s":"4. Enable zero base fee if using London fork or later","u":"/private-networks/how-to/configure/free-gas","h":"#4-enable-zero-base-fee-if-using-london-fork-or-later","p":288},{"i":301,"t":"If using Hardhat to develop on your free gas network, you also need to configure free gas in Hardhat. Like setting block and contract size limits to their maximum values for Besu, set the transaction gas limit in Hardhat to the maximum possible. info Besu does not support private key management. To use Besu with Hardhat, you must configure a Hardhat wallet.","s":"Configure free gas in Hardhat","u":"/private-networks/how-to/configure/free-gas","h":"#configure-free-gas-in-hardhat","p":288},{"i":303,"t":"Update the hardhat.config.js file: Set the gas price to zero. gasPrice: 0; Set the gas limit for a transaction (that is, contract creation) to be the block gas limit - 1. gas: \"0x1ffffffffffffe\"; Setting gasPrice to 0 should cover transaction costs for most deployments. Specify evmVersion when using the latest Solidity version. solidity: { version: \"0.8.20\", settings: { evmVersion: \"london\", // required for Besu optimizer: {...}, }, },","s":"Update hardhat.config.js","u":"/private-networks/how-to/configure/free-gas","h":"#update-hardhatconfigjs","p":288},{"i":305,"t":"Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera. The following diagram displays an example client and server TLS configuration. Configure TLS communication from the command line.","s":"Configure client and server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"","p":304},{"i":307,"t":"Besu's password-protected PKCS12 keystore File containing the keystore password","s":"Prerequisites","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#prerequisites","p":304},{"i":309,"t":"Allow clients (for example a dapp, curl, or Web3Signer) to send and receive secure HTTP JSON-RPCs. Client prerequisites: Configure the client for TLS Client's PKCS12 keystore information","s":"Configure client TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-client-tls","p":304},{"i":311,"t":"The known clients file allows clients with self-signed certificates or non-public certificates to connect to Besu. Create a file (in this example, knownClients) that lists one or more trusted clients. Use the format where: is the Common Name specified in the client certificate. is the SHA-256 fingerprint of the client certificate. Example web3signer 8E:E0:85:9F:FC:2E:2F:21:31:46:0B:82:4C:A6:88:AB:30:34:9A:C6:EA:4F:04:31:ED:0F:69:A7:B5:C2:2F:A7 curl FC:18:BF:39:45:45:9A:15:46:76:A6:E7:C3:94:64:B8:34:84:A3:8E:B8:EA:67:DC:61:C0:29:E6:38:B8:B7:99 You can use openssl or keytool to display the SHA256 fingerprint. keytool -list -v -keystore -storetype PKCS12 -storepass `.","s":"Create the known clients file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-clients-file","p":304},{"i":313,"t":"besu --rpc-http-enabled --rpc-http-tls-enabled --rpc-http-tls-client-auth-enabled --rpc-http-tls-keystore-file=/Users/me/my_node/keystore.pfx --rpc-http-tls-keystore-password-file=/Users/me/my_node/keystorePassword --rpc-http-tls-known-clients-file=/Users/me/my_node/knownClients --rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384 --rpc-http-tls-protocol=TLSv1.3,TLSv1.2 The command line: Enables the HTTP JSON-RPC service using the --rpc-http-enabled option. Enables TLS for the HTTP JSON-RPC service using the --rpc-http-tls-enabled option. Enables TLS client authentication using the --rpc-http-tls-client-auth-enabled option. Specifies the keystore using the --rpc-http-tls-keystore-file option. Specifies the file that contains the password to decrypt the keystore using the --rpc-http-tls-keystore-password-file option. Specifies the clients allowed to connect to Besu using the --rpc-http-tls-known-clients-file option. specifies the Java cipher suites using the --rpc-http-tls-cipher-suite option. specifies the TLS protocol version using the --rpc-http-tls-protocol option. note Set --rpc-http-tls-ca-clients-enabled to true to allow access to clients with signed and trusted root CAs.","s":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu","p":304},{"i":315,"t":"Allow Besu to securely communicate with the server (Tessera). Server prerequisites: Configure the server to allow TLS communication Server's certificate information","s":"Configure server TLS","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#configure-server-tls","p":304},{"i":317,"t":"Create a file (in this example, knownServers) that lists one or more trusted servers. The file contents use the format : where: is the server hostname is the port used for communication is the SHA-256 fingerprint of the server's certificate. Example localhost:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC 127.0.0.1:8888 3C:B4:5A:F9:88:43:5E:62:69:9F:A9:9D:41:14:03:BA:83:24:AC:04:CE:BD:92:49:1B:8D:B2:A4:86:39:4C:AC note If you are unsure whether requests use the hostname or an IP address, configure both in the file.","s":"Create the known servers file","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#create-the-known-servers-file","p":304},{"i":319,"t":"besu --privacy-tls-enabled --privacy-tls-keystore-file=/Users/me/my_node/keystore.pfx --privacy-tls-keystore-password-file=/Users/me/my_node/keystorePassword --privacy-tls-known-enclave-file=/Users/me/my_node/knownServers The command line: Enables TLS with the server using the --privacy-tls-enabled option. Specifies the keystore using the --privacy-tls-keystore-file option. Specifies the file that contains the password to decrypt the keystore using the --privacy-tls-keystore-password-file option. Specifies the trusted servers using the --privacy-tls-known-enclave-file option.","s":"Start Besu","u":"/private-networks/how-to/configure/tls/client-and-server","h":"#start-besu-1","p":304},{"i":321,"t":"To pre-deploy contracts when starting Besu, specify the contract code in the genesis file. Contract code in the genesis file { ... \"alloc\": { \"0x0ffd23af8eebc60b3cfdeed6f814988757237314\": { \"balance\": \"0x100000000000000000000000000000000000000000000000000\", \"code\": \"0x6080604052600436106043576000357c010000000000000000000000000000000000000000000000000000000090048063010fc84214604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b80600081905550807f04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce360405160405180910390a25056fea165627a7a7230582038cb7ea327af8f73feabcfbff64498f1e74831e67f7c75286760d3845c6747c70029\", \"storage\": { \"7aa07e0c924147697605046b7c2c32645b7bbfb41e0ac5d0a84ac93cbb759798\": \"0000000000000000000000000000000000000000000000000000000000000001\", \"cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb\": \"0000000000000000000000000000000000000000000000000000000000000001\", } } }, ... } The contract code in the genesis file defines the: Address. Balance. Bytecode. Key value pairs for contract storage.","s":"Pre-deploy contracts in the genesis file","u":"/private-networks/how-to/configure/contracts","h":"","p":320},{"i":323,"t":"Besu implements the QBFT proof of authority (PoA) consensus protocol. QBFT is the recommended enterprise-grade consensus protocol for private networks. In QBFT networks, approved accounts, known as validators, validate transactions and blocks. Validators take turns to create the next block. Before inserting the block onto the chain, a super-majority (greater than or equal to 2/3) of validators must first sign the block. Existing validators propose and vote to add or remove validators. You can create a private network using QBFT. caution Configure your network to ensure you never lose more than 1/3 your validators. If more than 1/3 of validators stop participating, new blocks are no longer created, and the network stalls. It may take significant time to recover once nodes are restarted. tip You can use a plugin to securely store a validator's key using the --security-module option.","s":"Configure QBFT consensus","u":"/private-networks/how-to/configure/consensus/qbft","h":"","p":322},{"i":325,"t":"To use QBFT, define a genesis file that contains the QBFT properties. The genesis file differs depending on the validator management method you intend to use. note You can use a transitions to change the blockperiodseconds or validator management method of the network at a later time. Block header validator selection Contract validator selection { \"config\": { \"chainid\": 1337, \"berlinBlock\": 0, \"qbft\": { \"epochlength\": 30000, \"blockperiodseconds\": 5, \"requesttimeoutseconds\": 10 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x5b3d92d7\", \"extraData\": \"0xf87aa00000000000000000000000000000000000000000000000000000000000000000f8549464a702e6263b7297a96638cac6ae65e6541f4169943923390ad55e90c237593b3b0e401f3b08a0318594aefdb9a738c9f433e5b6b212a6d62f6370c2f69294c7eeb9a4e00ce683cf93039b212648e01c6c6b78c080c0\", \"gasLimit\": \"0x29b92700\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"64d9be4177f418bcf4e56adad85f33e3a64efe22\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"9f66f8a0f0a6537e4a36aa1799673ea7ae97a166\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"a7f25969fb6f3d5ac09a88862c90b5ff664557a7\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"f4bbfd32c11c9d63e9b4c77bb225810f840342df\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" } }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } { \"config\": { \"chainid\": 1337, \"berlinBlock\": 0, \"qbft\": { \"epochlength\": 30000, \"blockperiodseconds\": 5, \"requesttimeoutseconds\": 10, \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" } }, \"nonce\": \"0x0\", \"timestamp\": \"0x5b3d92d7\", \"extraData\": \"0xe5a00000000000000000000000000000000000000000000000000000000000000000c0c080c0\", \"gasLimit\": \"0x29b92700\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"64d9be4177f418bcf4e56adad85f33e3a64efe22\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"9f66f8a0f0a6537e4a36aa1799673ea7ae97a166\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"a7f25969fb6f3d5ac09a88862c90b5ff664557a7\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"f4bbfd32c11c9d63e9b4c77bb225810f840342df\": { \"balance\": \"0x446c3b15f9926687d2c40534fdb564000000000000\" }, \"0x0000000000000000000000000000000000007777\": { \"comment\": \"validator smart contract\", \"balance\": \"0\", \"code\": \"0x608060405234801561001057600080fd5b50600436106100a5576000357c0100000000000000000000000000000000000000000000000000000000900480639692ea25116100785780639692ea2514610113578063b4ec9ac114610126578063b7ab4db514610139578063c76f24371461014e57600080fd5b80631c5a9d9c146100aa578063508adcfc146100bf57806351b42b00146100db5780635dc43899146100e3575b600080fd5b6100bd6100b8366004611399565b610161565b005b6100c860035481565b6040519081526020015b60405180910390f35b6100bd6104aa565b6100f66100f1366004611399565b61074e565b6040805193845260208401929092521515908201526060016100d2565b6100bd610121366004611399565b610bbd565b6100bd610134366004611399565b610deb565b6101416110a3565b6040516100d291906113c9565b6100bd61015c366004611399565b611105565b3360009081526001602052604090205460ff1661019c5760405160e560020a62461bcd02815260040161019390611416565b60405180910390fd5b600160a060020a03811661021b5760405160e560020a62461bcd02815260206004820152602860248201527f63616e6e6f742061637469766174652076616c696461746f722077697468206160448201527f64647265737320300000000000000000000000000000000000000000000000006064820152608401610193565b60005b6000548110156102b7576000818154811061023b5761023b611505565b600091825260209091200154600160a060020a03838116911614156102a55760405160e560020a62461bcd02815260206004820152601b60248201527f76616c696461746f7220697320616c72656164792061637469766500000000006044820152606401610193565b806102af816114b8565b91505061021e565b33600090815260016020526040902054610100900460ff16156103345733600090815260016020526040812054815484929162010000900460ff1690811061030157610301611505565b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550610432565b600054610100116103b05760405160e560020a62461bcd02815260206004820152602e60248201527f6e756d626572206f662076616c696461746f72732063616e6e6f74206265206c60448201527f6172676572207468616e203235360000000000000000000000000000000000006064820152608401610193565b3360009081526001602081905260408220805461ff001981166101009081178355845460ff16620100000262ffff001990921691909117179055815490810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563018054600160a060020a038416600160a060020a03199091161790555b600160a060020a0382166000818152600260205260408082208054600160a060020a03191633908117909155915490519192917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f9161049e916001909182521515602082015260400190565b60405180910390a35050565b3360009081526001602052604090205460ff166104dc5760405160e560020a62461bcd02815260040161019390611416565b6000546001106105315760405160e560020a62461bcd02815260206004820181905260248201527f63616e6e6f742064656163746976617465206c6173742076616c696461746f726044820152606401610193565b33600090815260016020526040902054610100900460ff166105be5760405160e560020a62461bcd02815260206004820152602860248201527f73656e64657220646f6573206e6f74206861766520616e20616374697665207660448201527f616c696461746f720000000000000000000000000000000000000000000000006064820152608401610193565b336000908152600160205260408120805461ff0019169081905581546201000090910460ff1691908190839081106105f8576105f8611505565b60009182526020822001548154600160a060020a03909116925081906106209060019061148a565b8154811061063057610630611505565b60009182526020822001548154600160a060020a03909116925082919060ff861690811061066057610660611505565b60009182526020808320919091018054600160a060020a031916600160a060020a03948516179055838316825260028152604080832054909316825260019052908120805462ff000019166201000060ff8716021790558054806106c6576106c66114ec565b6000828152602080822060001990840181018054600160a060020a03199081169091559301909355600160a060020a03851680825260028452604080832080549094169093558154835190815293840191909152339290917fbdea108da876d927928b65816d521f940fd6dc068dc0e02ba434e0ed0f2d915f910160405180910390a3505050565b336000908152600160205260408120548190819060ff166107845760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a03851660009081526004602052604090205481101561082357600160a060020a038516600090815260046020526040812080546001929190849081106107d6576107d6611505565b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610811578361080d816114b8565b9450505b8061081b816114b8565b915050610787565b5060026003546108339190611465565b831115610b8657600160a060020a038416600090815260046020526040812061085b9161135f565b600160a060020a03841660009081526001602052604090205460ff1615610ab0576003805490600061088c836114a1565b9091555050600160a060020a038416600090815260016020526040902054610100900460ff1615610a89576000546001106109325760405160e560020a62461bcd02815260206004820152603860248201527f63616e6e6f742072656d6f766520616c6c6f776564206163636f756e7420776960448201527f7468206c617374206163746976652076616c696461746f7200000000000000006064820152608401610193565b600160a060020a03841660009081526001602052604081205481546201000090910460ff169160029181908490811061096d5761096d611505565b6000918252602080832090910154600160a060020a0316835282019290925260400181208054600160a060020a0319169055805481906109af9060019061148a565b815481106109bf576109bf611505565b60009182526020822001548154600160a060020a03909116925082919060ff85169081106109ef576109ef611505565b600091825260208220018054600160a060020a031916600160a060020a039390931692909217909155805480610a2757610a276114ec565b6000828152602080822083016000199081018054600160a060020a0319169055909201909255600160a060020a0392831682526002815260408083205490931682526001905220805460ff909216620100000262ff0000199092169190911790555b600160a060020a0384166000908152600160205260409020805462ffffff19169055610b32565b60038054906000610ac0836114b8565b909155505060408051606081018252600180825260006020808401828152848601838152600160a060020a038b16845293909152939020915182549351915160ff16620100000262ff0000199215156101000261ff00199215159290921661ffff199095169490941717169190911790555b600160a060020a03841660008181526001602090815260409182902054915160ff909216151582527f94154efdb7741591680558a88682943a481f1a468cb81f46fe7f8cead2e40519910160405180910390a25b826002600354610b969190611465565b610ba190600161144d565b6002600354610bb09190611465565b9196909550931192915050565b3360009081526001602052604090205460ff16610bef5760405160e560020a62461bcd02815260040161019390611416565b60005b600160a060020a038216600090815260046020526040902054811015610d4b57600160a060020a0382166000908152600460205260409020805433919083908110610c3f57610c3f611505565b600091825260209091200154600160a060020a03161415610d3957600160a060020a03821660009081526004602052604090208054610c809060019061148a565b81548110610c9057610c90611505565b6000918252602080832090910154600160a060020a03858116845260049092526040909220805491909216919083908110610ccd57610ccd611505565b60009182526020808320919091018054600160a060020a031916600160a060020a039485161790559184168152600490915260409020805480610d1257610d126114ec565b60008281526020902081016000199081018054600160a060020a0319169055019055610d4b565b80610d43816114b8565b915050610bf2565b50600160a060020a0381166000818152600460205260409020546003543392917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba91610d9990600290611465565b610da490600161144d565b600160a060020a0386166000908152600160208181526040928390205483519586529085019390935260ff909216159083015260608201526080015b60405180910390a350565b3360009081526001602052604090205460ff16610e1d5760405160e560020a62461bcd02815260040161019390611416565b600160a060020a038116610e765760405160e560020a62461bcd02815260206004820152601f60248201527f6163636f756e7420746f2062652061646465642063616e6e6f742062652030006044820152606401610193565b600160a060020a03811660009081526001602081905260409091205460ff16151514610f0d5760405160e560020a62461bcd02815260206004820152602a60248201527f6163636f756e7420746f2072656d6f7665206973206e6f74206f6e207468652060448201527f616c6c6f77206c697374000000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a038216600090815260046020526040902054811015610ffb57600160a060020a0382166000908152600460205260409020805433919083908110610f5d57610f5d611505565b600091825260209091200154600160a060020a03161415610fe95760405160e560020a62461bcd02815260206004820152602a60248201527f73656e6465722068617320616c726561647920766f74656420746f2072656d6f60448201527f7665206163636f756e74000000000000000000000000000000000000000000006064820152608401610193565b80610ff3816114b8565b915050610f10565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061107490600290611465565b61107f90600161144d565b60408051928352602083019190915260009082018190526060820152608001610de0565b606060008054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110dd575b5050505050905090565b3360009081526001602052604090205460ff166111375760405160e560020a62461bcd02815260040161019390611416565b600160a060020a03811660009081526001602052604090205460ff16156111c95760405160e560020a62461bcd02815260206004820152602b60248201527f6163636f756e7420746f2061646420697320616c7265616479206f6e2074686560448201527f20616c6c6f77206c6973740000000000000000000000000000000000000000006064820152608401610193565b60005b600160a060020a0382166000908152600460205260409020548110156112b757600160a060020a038216600090815260046020526040902080543391908390811061121957611219611505565b600091825260209091200154600160a060020a031614156112a55760405160e560020a62461bcd02815260206004820152602760248201527f73656e6465722068617320616c726561647920766f74656420746f206164642060448201527f6163636f756e74000000000000000000000000000000000000000000000000006064820152608401610193565b806112af816114b8565b9150506111cc565b50600160a060020a0381166000818152600460209081526040822080546001810182558184529183209091018054600160a060020a0319163390811790915591839052546003549192917f91ad81c76cda7c0ccc324838ae74757eab38b250da52daab154daf408cb3bcba919061133090600290611465565b61133b90600161144d565b60408051928352602083019190915260019082015260006060820152608001610de0565b508054600082559060005260206000209081019061137d9190611380565b50565b5b808211156113955760008155600101611381565b5090565b6000602082840312156113ab57600080fd5b8135600160a060020a03811681146113c257600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561140a578351600160a060020a0316835292840192918401916001016113e5565b50909695505050505050565b6020808252601f908201527f73656e646572206973206e6f74206f6e2074686520616c6c6f77206c69737400604082015260600190565b60008219821115611460576114606114d3565b500190565b6000826114855760e060020a634e487b7102600052601260045260246000fd5b500490565b60008282101561149c5761149c6114d3565b500390565b6000816114b0576114b06114d3565b506000190190565b60006000198214156114cc576114cc6114d3565b5060010190565b60e060020a634e487b7102600052601160045260246000fd5b60e060020a634e487b7102600052603160045260246000fd5b60e060020a634e487b7102600052603260045260246000fdfea26469706673582212200c3e9c07521b155532c0de1605aae52f4ae953670f0afb0f30d320580b93213d64736f6c63430008070033\", \"storage\": { \"0000000000000000000000000000000000000000000000000000000000000000\": \"0000000000000000000000000000000000000000000000000000000000000002\", \"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563\": \"0000000000000000000000009a6d82ef3912d5ab60473124bccd2f2a640769d7\", \"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564\": \"00000000000000000000000065463bf6268e5cc409b6501ec846487b935a1446\", \"aedead2c33b41c31b4afd2246c6bf5131c209d4b0ca6c2247778ac7be7443a00\": \"0000000000000000000000000000000000000000000000000000000000000101\", \"33784757d5da236467d27a7c5b0cc5aa9026ca3b79e29106a67a5e93c292a523\": \"0000000000000000000000000000000000000000000000000000000000010101\", \"35aba1eb0bbe741ac01e5b6ce584bc042b1a0b7d115eb8f7dd02a1a1de2fd14d\": \"000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"0d9217f0a1f7c602fd67052d20171ff73b156d1b87ea258cb6a5d94f71298158\": \"000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57\", \"0000000000000000000000000000000000000000000000000000000000000003\": \"0000000000000000000000000000000000000000000000000000000000000002\" }, \"version\": \"0x01\" } }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } The QBFT properties are: blockperiodseconds - The minimum block time, in seconds. epochlength - The number of blocks after which to reset all votes. requesttimeoutseconds - The timeout for each consensus round before a round change, in seconds. blockreward - Optional reward amount in Wei to reward the beneficiary. Defaults to zero (0). Can be specified as a hexadecimal (with 0x prefix) or decimal string value. If set, then all nodes on the network must use the identical value. validatorcontractaddress - Address of the validator smart contract. Required only if using a contract validator selection. The address must be identical to the address in the alloc section. This option can also be used in the transitions configuration item if swapping validator management methods in an existing network. miningbeneficiary - Optional beneficiary of the blockreward. Defaults to the validator that proposes the block. If set, then all nodes on the network must use the same beneficiary. extraData - RLP encoded extra data. caution We don't recommend changing epochlength in a running network. Changing the epochlength after genesis can result in illegal blocks. Invalid block header error When adding a new node, if a TimeStampMoreRecentThanParent | Invalid block header error occurs, the genesis file of the new node specifies a higher blockperiodseconds than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu. Decrease the blockperiodseconds in the new QBFT genesis file to a lower value that satisfies the block header validation. If the error reads | TimestampMoreRecentThanParent | Invalid block header: timestamp 1619660141 is only 3 seconds newer than parent timestamp 1619660138. Minimum 4 seconds, decrease the blockperiodseconds from 4 seconds to 3 seconds to match the imported chain. After you update the new genesis file, if the imported chain has a blockperiodseconds value set lower than you prefer, you can adjust it by configuring the block time on an existing QBFT network. The properties with specific values in the QBFT genesis files are: difficulty - 0x1 mixHash - 0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365 for Istanbul block identification To start a node on a QBFT private network, use the --genesis-file option to specify the custom genesis file.","s":"Genesis file","u":"/private-networks/how-to/configure/consensus/qbft","h":"#genesis-file","p":322},{"i":327,"t":"The extraData property is an RLP encoding of: 32 bytes of vanity data. If using: Block header validator selection, a list of validator addresses. Contract validator selection, no validators. Any validator votes. No vote is included in the genesis block. The round the block was created on. The round in the genesis block is 0. A list of seals of the validators (signed block hashes). No seals are included in the genesis block. When using block header validator selection, the important information in the genesis block extra data is the list of validators. All other details have empty values in the genesis block. info When using contract validator selection to manage validators, the list of validators is configured in the alloc property's storage section. View the example smart contract for more information on how to generate the storage section. Formally, extraData in the genesis block contains: If using block header validator selection: RLP([32 bytes Vanity, List, No Vote, Round=Int(0), 0 Seals]). If using contract validator selection: RLP([32 bytes Vanity, 0 Validators, No Vote, Round=Int(0), 0 Seals]). info RLP encoding is a space-efficient object serialization scheme used in Ethereum. Generate extra data​ To generate the extraData RLP string for inclusion in the genesis file, use the rlp encode Besu subcommand. Example besu rlp encode --from=toEncode.json --type=QBFT_EXTRA_DATA Where the toEncode.json file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the toEncode.json file, use the public-key export-address Besu subcommand. For example: Initial validators in toEncode.json file [ \"0x4592c8e45706cc08b8f44b11e43cba0cfc5892cb\", \"0x06e23768a0f59cf365e18c2e0c89e151bcdedc70\", \"0xc5327f96ee02d7bcbc1bf1236b8c15148971e1de\", \"0xab5e7f4061c605820d3744227eed91ff8e2c8908\" ] Copy the RLP encoded data to the extraData property in the genesis file. RLP encoded data 0xf87aa00000000000000000000000000000000000000000000000000000000000000000f854944592c8e45706cc08b8f44b11e43cba0cfc5892cb9406e23768a0f59cf365e18c2e0c89e151bcdedc7094c5327f96ee02d7bcbc1bf1236b8c15148971e1de94ab5e7f4061c605820d3744227eed91ff8e2c8908c080c0 When you start the network, the four nodes previously specified in toEncode.json are the validators for the network.","s":"Extra data","u":"/private-networks/how-to/configure/consensus/qbft","h":"#extra-data","p":322},{"i":329,"t":"When the protocol receives a new chain head, the block time (blockperiodseconds) timer starts. When blockperiodseconds expires, the round timeout (requesttimeoutseconds) timer starts and the protocol proposes a new block. If requesttimeoutseconds expires before adding the proposed block, a round change occurs, with the block time and timeout timers reset. The timeout period for the new round is two times requesttimeoutseconds. The timeout period continues to double each time a round fails to add a block. Usually, the protocol adds the proposed block before reaching requesttimeoutseconds. A new round then starts, resetting the block time and round timeout timers. When blockperiodseconds expires, the protocol proposes the next new block. danger If more than 1/3 of validators stop participating, new blocks can no longer be created and requesttimeoutseconds doubles with each round change. The quickest method to resume block production is to restart all validators, which resets requesttimeoutseconds to its genesis value. Once blockperiodseconds is over, the time from proposing a block to adding the block is small (usually around one second) even in networks with geographically dispersed validators. Tune block timeout​ To tune the block timeout for your network deployment: Set blockperiodseconds to your desired block time and requesttimeoutseconds to two times blockperiodseconds. Reduce requesttimeoutseconds until you start to see round changes occurring. Increase requesttimeoutseconds to the value where round changes are no longer occurring. tip View TRACE logs to see round change log messages. Use a transition to update the blockperiodseconds in an existing network.","s":"Block time","u":"/private-networks/how-to/configure/consensus/qbft","h":"#block-time","p":322},{"i":331,"t":"Optional configuration options in the genesis file are: messageQueueLimit - In large networks with limited resources, increasing the message queue limit might help with message activity surges. The default is 1000. duplicateMessageLimit - If the same node is retransmitting messages, increasing the duplicate message limit might reduce the number of retransmissions. A value of two to three times the number of validators is usually enough. The default is 100. futureMessagesLimit - The future messages buffer holds messages for a future chain height. For large networks, increasing the future messages limit might be useful. The default is 1000. futureMessagesMaxDistance - The maximum height from the current chain height for buffering messages in the future messages buffer. The default is 10.","s":"Optional configuration options","u":"/private-networks/how-to/configure/consensus/qbft","h":"#optional-configuration-options","p":322},{"i":333,"t":"After The Merge, the following block fields are modified or deprecated. Their fields must contain only the constant values from the following chart. Field Constant value Comment ommersHash 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347 = Keccak256(RLP([])) difficulty 0 Replaced with prevrandao mixHash 0x0000000000000000000000000000000000000000000000000000000000000000 Replaced with prevrandao nonce 0x0000000000000000 ommers [] RLP([]) = 0xc0 Additionally, extraData is limited to the 32 bytes of vanity data after The Merge.","s":"Post-Merge configuration","u":"/private-networks/how-to/configure/consensus/qbft","h":"#post-merge-configuration","p":322},{"i":335,"t":"QBFT provides two methods to manage validators: Block header validator selection - Existing validators propose and vote to add or remove validators using the QBFT JSON-RPC API methods. Contract validator selection - Use a smart contract to specify the validators used to propose and validate blocks. You can use transitions to swap between block header validator selection and contract validator selection in an existing network. For block header validator selection, initial validators are configured in the genesis file's extraData property, whereas the initial validators when using the contract validator selection method are configured in the genesis file's storage section.","s":"Add and remove validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators","p":322},{"i":337,"t":"Enable the HTTP interface with --rpc-http-enabled or the WebSockets interface with --rpc-ws-enabled. The QBFT API methods are disabled by default. To enable them, specify the --rpc-http-api or --rpc-ws-api option and include QBFT. The methods to add or remove validators are: qbft_getPendingVotes. qbft_proposeValidatorVote. qbft_discardValidatorVote. To view validator metrics for a specified block range, use qbft_getSignerMetrics. note If network conditions render it impossible to add and remove validators by voting, you can add and remove validators without voting. Add a validator​ To propose adding a validator, call qbft_proposeValidatorVote, specifying the address of the proposed validator and true. A majority of validators must execute the call. JSON-RPC qbft_proposeValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' When the validator proposes the next block, the protocol inserts one proposal received from qbft_proposeValidatorVote into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use qbft_getValidatorsByBlockNumber. JSON-RPC qbft_getValidatorsByBlockNumber request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' To discard your proposal after confirming the addition of a validator, call qbft_discardValidatorVote, specifying the address of the proposed validator. JSON-RPC qbft_discardValidatorVote request example curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' Remove a validator​ The process for removing a validator is the same as adding a validator except you specify false as the second parameter of qbft_proposeValidatorVote. Epoch transition​ At each epoch transition, QBFT discards all pending votes collected from received blocks. Existing proposals remain in effect and validators re-add their vote the next time they create a block. An epoch transition occurs every epochLength blocks. Define epochlength in the QBFT genesis file.","s":"Add and remove validators using block headers","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-block-headers","p":322},{"i":339,"t":"Users can create their own smart contracts to add or remove validators based on their organizational requirements. View the example smart contract for more information on how to create and deploy the smart contract. You can pre-deploy the validator smart contract in a new QBFT network by specifying the contract details in the genesis file. For existing QBFT networks you need to compile and deploy the contract using a transaction, then obtain the contract address from the receipt and use that in a transition. info You can't use the JSON-RPC methods to add or remove validators when using a smart contract to manage nodes. You must interact with the contract functions using transactions. note If network conditions render it impossible to add and remove validators using a smart contract, you can override smart contract validators.","s":"Add and remove validators using a smart contract","u":"/private-networks/how-to/configure/consensus/qbft","h":"#add-and-remove-validators-using-a-smart-contract","p":322},{"i":341,"t":"QBFT requires four validators to be Byzantine fault tolerant. Byzantine fault tolerance is the ability for a blockchain network to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Minimum number of validators","u":"/private-networks/how-to/configure/consensus/qbft","h":"#minimum-number-of-validators","p":322},{"i":343,"t":"The transitions genesis configuration item allows you to specify a future block number at which to the QBFT network configuration in an existing network. For example, you can update the block time, block reward, validator management method, or mining beneficiary. caution Do not specify a transition block in the past. Specifying a transition block in the past can result in unexpected behavior, such as causing the network to fork.","s":"Transitions","u":"/private-networks/how-to/configure/consensus/qbft","h":"#transitions","p":322},{"i":345,"t":"To update an existing network with a new blockperiodseconds: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockperiodseconds. is the updated value for blockperiodseconds. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": , \"blockperiodseconds\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 }, \"transitions\": { \"qbft\": [ { \"block\": 1240, \"blockperiodseconds\": 4 } ] } }, ... } Restart all nodes in the network using the updated genesis file. To verify the changes after the transition block, view the Besu logs and check that the time difference between each block matches the updated block period.","s":"Configure block time on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-time-on-an-existing-network","p":322},{"i":347,"t":"To update an existing network with a new blockreward: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change blockreward. is the updated value for blockreward. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"qbft\": [ { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": }, { \"block\": , \"blockreward\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 \"blockreward\": \"5000000000000000\" }, \"transitions\": { \"qbft\": [ { \"block\": 10, \"blockreward\": \"6000000000000000\" }, { \"block\": 15, \"blockreward\": \"75000000000000000\" }, { \"block\": 20, \"blockreward\": \"0\" } ] } }, ... } note You can add multiple blockreward updates in one transition object by specifying multiple future blocks. Restart all nodes in the network using the updated genesis file.","s":"Configure block rewards on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-block-rewards-on-an-existing-network","p":322},{"i":349,"t":"To swap between block header validator selection and contract validator selection methods in an existing network: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change the validator selection method. is the validator selection mode to switch to. Valid options are contract and blockheader. is the smart contract address, if switching to the contract validator selection method. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": , \"validatorselectionmode\": , \"validatorcontractaddress\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": 102885, \"validatorselectionmode\": \"contract\", \"validatorcontractaddress\": \"0x0000000000000000000000000000000000007777\" } ] } }, ... } Restart all nodes in the network using the updated genesis file.","s":"Swap validator management methods","u":"/private-networks/how-to/configure/consensus/qbft","h":"#swap-validator-management-methods","p":322},{"i":351,"t":"To update an existing network with a new mining beneficiary: Stop all nodes in the network. In the genesis file, add the transitions configuration item where: is the upcoming block at which to change miningbeneficiary. is the updated 20-byte address for miningbeneficiary. Starting at , block rewards go to this address. Syntax Example { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": , \"miningbeneficiary\": }, { \"block\": , \"miningbeneficiary\": } ] } }, ... } { \"config\": { ... \"qbft\": { \"blockperiodseconds\": 5, \"epochlength\": 30000, \"requesttimeoutseconds\": 10 }, \"transitions\": { \"qbft\": [ { \"block\": 10000, \"miningbeneficiary\": \"0x0000000000000000000000000000000000000002\", }, { \"block\": 20000, \"miningbeneficiary\": \"\", } ] } }, ... } note Setting the miningbeneficiary to an empty value clears out any override so that block rewards go to the block producer rather than a global override address. Restart all nodes in the network using the updated genesis file.","s":"Configure the mining beneficiary on an existing network","u":"/private-networks/how-to/configure/consensus/qbft","h":"#configure-the-mining-beneficiary-on-an-existing-network","p":322},{"i":353,"t":"As when configuring bootnodes: Create the node key pair (that is, the private and public key) before starting the validator. When creating validators in the cloud (for example, AWS or Azure), attempt to assign static IP addresses to them. If your network is: Publicly accessible, assign an elastic IP address. Internal only, specify a private IP address when you create the instance and record this IP address. We recommend storing validator configuration under source control.","s":"Configure validators in a production network","u":"/private-networks/how-to/configure/validators","h":"","p":352},{"i":355,"t":"Ensure you configure enough validators to allow for redundancy. IBFT 2.0 tolerates f = (n-1)/3 faulty validators, where: f is the number of faulty validators n is the number of validators.","s":"Number of validators required","u":"/private-networks/how-to/configure/validators","h":"#number-of-validators-required","p":352},{"i":357,"t":"You can vote validators in or out of the validator pool.","s":"Adding and removing validators","u":"/private-networks/how-to/configure/validators","h":"#adding-and-removing-validators","p":352},{"i":359,"t":"Validators can also be bootnodes. Other than the usual configuration for bootnodes, you do not need to specify any extra configuration when a validator is also a bootnode. If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network.","s":"Validators as bootnodes","u":"/private-networks/how-to/configure/validators","h":"#validators-as-bootnodes","p":352},{"i":361,"t":"You can configure TLS to secure the P2P communication between nodes by ensuring only authorized nodes can communicate with each other. Use certificates issued by a trusted authority to connect authorized nodes in the network. caution P2P TLS is an early access feature, and functionality and options may be updated between releases. Besu supports PKCS11, PKCS12, and JKS keystore and truststore types for P2P TLS.","s":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","h":"","p":360},{"i":362,"t":"Prerequisites: A configured network. For example, see steps 1 to 5 in the QBFT tutorial. Each node requires a keystore that contains the node's certificate and key. A truststore containing all the trusted certificates for the network. Start Besu and include the following command line options on the required nodes: besu --Xp2p-tls-enabled=true \\ --Xp2p-tls-keystore-type=\"PKCS12\" \\ --Xp2p-tls-keystore-file=\"keystore\" \\ --Xp2p-tls-keystore-password-file=\"keystore.password\" \\ --Xp2p-tls-crl-file=\"crl2.pem\" \\ --Xp2p-tls-truststore-type=\"JKS\" \\ --Xp2p-tls-truststore-file=\"truststore.jks\" \\ --Xp2p-tls-truststore-password-file=\"truststore_password.txt\" In the command line: Enable TLS for P2P communication using --Xp2p-tls-enabled=true. Specify the keystore type and keystore file using --Xp2p-tls-keystore-type and --Xp2p-tls-keystore-file. Specify the text file containing the password to unlock the keystore file using --Xp2p-tls-keystore-password-file. Specify the optional certificate revocation list (CRL) file using --Xp2p-tls-crl-file. Specify the truststore type and truststore file using --Xp2p-tls-truststore-type and --Xp2p-tls-truststore-file. Specify the text file containing the password to unlock the truststore file using --Xp2p-tls-truststore-password-file.","s":"Configure P2P TLS","u":"/private-networks/how-to/configure/tls/p2p","h":"#configure-p2p-tls-1","p":360},{"i":365,"t":"Syntax Example Environment variable --Xp2p-tls-crl-file= --Xp2p-tls-crl-file=/home/cert/cert.crl.pem BESU_XP2P_TLS_CRL_FILE=/home/cert/cert.crl.pem Path to the optional certificate revocation list (CRL) file.","s":"Xp2p-tls-crl-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-crl-file","p":360},{"i":367,"t":"Syntax Example Environment variable --Xp2p-tls-enabled[=] --Xp2p-tls-enabled=true BESU_XP2P_TLS_ENABLED=true Enable TLS for P2P communication. The default is false.","s":"Xp2p-tls-enabled","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-enabled","p":360},{"i":369,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-file= --Xp2p-tls-keystore-file=/home/cert/keystore.jks BESU_XP2P_TLS_KEYSTORE_FILE=/home/cert/keystore.jks Keystore file containing the key and certificate to allow TLS for P2P communication.","s":"Xp2p-tls-keystore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-file","p":360},{"i":371,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-password-file= --Xp2p-tls-keystore-password-file=/home/cert/password.txt BESU_XP2P_TLS_KEYSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the keystore file.","s":"Xp2p-tls-keystore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-password-file","p":360},{"i":373,"t":"Syntax Example Environment variable --Xp2p-tls-keystore-type= --Xp2p-tls-keystore-type=JKS BESU_XP2P_TLS_KEYSTORE_TYPE=JKS Keystore type that allows TLS for P2P communication. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.","s":"Xp2p-tls-keystore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-keystore-type","p":360},{"i":375,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-file= --Xp2p-tls-truststore-file=/home/cert/truststore.jks BESU_XP2P_TLS_TRUSTSTORE_FILE=/home/cert/truststore.jks Truststore containing the trusted certificates that allows TLS for P2P communication.","s":"Xp2p-tls-truststore-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-file","p":360},{"i":377,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-password-file= --Xp2p-tls-truststore-password-file=/home/cert/password.txt BESU_XP2P_TLS_TRUSTSTORE_PASSWORD_FILE=/home/cert/password.txt Text file containing the password to unlock the truststore file.","s":"Xp2p-tls-truststore-password-file","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-password-file","p":360},{"i":379,"t":"Syntax Example Environment variable --Xp2p-tls-truststore-type= --Xp2p-tls-truststore-type=JKS BESU_XP2P_TLS_TRUSTSTORE_TYPE=JKS Truststore type. Valid options are JKS, PKCS11, and PKCS12. The default is JKS.","s":"Xp2p-tls-truststore-type","u":"/private-networks/how-to/configure/tls/p2p","h":"#xp2p-tls-truststore-type","p":360},{"i":381,"t":"To deploy Besu using Ansible, use the Besu role published on Galaxy. For more information, see the \"Read Me\" button on the Ansible Galaxy Besu page. tip We strongly recommend automating network creation. Automating makes updates easier and ensures your configuration is synchronized across the network.","s":"Deploy Besu with Ansible","u":"/private-networks/how-to/deploy/ansible","h":"","p":380},{"i":383,"t":"Connect to Ethstats to display real time and historical statistics about the network and nodes. You can connect to the Ethstats dashboard by connecting to a client and server or by connecting through the command line.","s":"Connect to Ethstats network monitor","u":"/private-networks/how-to/deploy/ethstats","h":"","p":382},{"i":385,"t":"Ethstats consists of: A server, which consumes node data received from the client. A client, which extracts data from the node and sends it to the server. A dashboard, which displays statistics.","s":"Components","u":"/private-networks/how-to/deploy/ethstats","h":"#components","p":382},{"i":387,"t":"Statistics displayed by Ethstats include: Nodes in the network. Metrics for nodes include: Information about the last received block such as block number, block hash, transaction count, uncle count, block time, and propagation time. Connected peers, whether the node is mining, hash rate, latency, and uptime. Charts for block time, block difficulty, block gas limit, block uncles, block transactions, block gas used, block propagation histogram, and top miners. IP-based geolocation overview. Node logs, which display the data sent by a node. Block history, which provides the ability to go back in time and playback the block propagation through the nodes.","s":"Statistics","u":"/private-networks/how-to/deploy/ethstats","h":"#statistics","p":382},{"i":389,"t":"Refer to the external Ethstats client and Ethstats server documentation for installing those components and connecting to a dashboard.","s":"Connect through a client and server","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-a-client-and-server","p":382},{"i":391,"t":"You can use command line options to connect a node directly to a dashboard, without using a client. Start a node using the --ethstats option to specify the Ethstats server URL. You can specify a contact email to send to the server using --ethstats-contact. besu --ethstats=Dev-Node-1:secret@127.0.0.1:3001 --ethstats-contact=contact@mail.com note A server must be specified by --ethstats in order to use --ethstats-contact. Open the selected dashboard website. Find your node under the list of nodes to see the statistics for the node and the network.","s":"Connect through the command line","u":"/private-networks/how-to/deploy/ethstats","h":"#connect-through-the-command-line","p":382},{"i":393,"t":"When deploying Besu to the cloud: Ensure you have enough spread across Availability Zones (AZs) and Regions, especially for bootnodes and validators. If your network is a multi-region network, consider using VPC Peering to reduce latency. Where required, use VPNs to connect to your on premise systems, or single private chains. If deploying to Kubernetes, please refer to the tutorial.","s":"Deploy Besu to the cloud","u":"/private-networks/how-to/deploy/cloud","h":"","p":392},{"i":395,"t":"Use the reference implementations to install private networks using Kubernetes (K8s). The repository has full support for cloud providers like AWS, Azure, GCP, and IBM, and has production setups that use of identities and cloud-native secret storage services like Azure KeyVault and AWS Secrets Manager. Refer to the tutorial and familiarize yourself with the reference implementations, and customize them to your requirements.","s":"Deploy Besu with Kubernetes","u":"/private-networks/how-to/deploy/kubernetes","h":"","p":394},{"i":397,"t":"Use monitoring to identify node and network issues. In private networks, you can configure metrics and logging as in public networks. You can also use the following monitoring tools in private networks: Loki Elastic Stack Quorum Hibernate Splunk OpenTelemetry Chainlens Explorer For an overview of monitoring Besu, view this recording.","s":"Monitoring","u":"/private-networks/how-to/monitor","h":"","p":396},{"i":399,"t":"Chainlens Blockchain Explorer supports public and private EVM networks. This page describes how to use the free version of Chainlens with its built-in support for privacy-enabled Besu networks created using the Developer Quickstart. Chainlens provides an overview of the entire network, including block information, contract metadata, transaction searches, and more. note You must connect to one of the privacy nodes (for example, member1besu), not the dedicated RPC, to allow access for Besu privacy API methods. In production networks, you must secure access to RPC nodes.","s":"Use Chainlens Blockchain Explorer","u":"/private-networks/how-to/monitor/chainlens","h":"","p":398},{"i":401,"t":"Docker and Docker Compose installed.","s":"Prerequisites","u":"/private-networks/how-to/monitor/chainlens","h":"#prerequisites","p":398},{"i":403,"t":"Clone the Chainlens GitHub repository: git clone https://github.com/web3labs/chainlens-free The repository contains a docker-compose directory to allow Chainlens to start with a Developer Quickstart test network. From the docker-compose directory, run the following command: NODE_ENDPOINT=http://rpcnode:8545 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up This command does two things: Sets up the node endpoint Tells Docker to run by using the two Docker Compose files provided The first docker-compose.yml file in the command contains all the services required for Chainlens. The second file named docker-compose-quorum-dev-quickstart contains the network settings required to start Chainlens on the same network as the Besu development node. Next, open http://localhost/ on your browser. You’ll see the new initialization page while it boots up. This may take 5–10 minutes for the all services to start and the ingestion sync to complete.","s":"Start Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#start-chainlens","p":398},{"i":405,"t":"After starting Chainlens, you can view information about your network. note Screenshots in this section are taken from the Chainlens Holesky network. The Dashboard page provides an aggregated view of network activities. The Network page provides an overview of the network status and connected peers. This page is disabled by default, and is only visible if you set DISPLAY_NETWOR_TAB=enabled using the following command: NODE_ENDPOINT=http://member1besu:8545 DISPLAY_NETWORK_TAB=enabled docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up The Blocks page shows a real-time view of the finalized blocks. You can view a given block details by selecting a block hash or number. The Transactions page shows a paginated view of new and historical transactions. If you select any transaction hash, you can get the transaction details. The Contracts page shows all the smart contracts deployed on the network. You can view a smart contract details by selecting the contract address. The Events page shows all the events generated on the network.","s":"View on Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#view-on-chainlens","p":398},{"i":407,"t":"To stop all the services from running, run the following command: docker-compose down","s":"Stop Chainlens","u":"/private-networks/how-to/monitor/chainlens","h":"#stop-chainlens","p":398},{"i":409,"t":"Elastic Stack (ELK) is an open-source log management platform that is available when using the Developer Quickstart. The Filebeat configuration ingests logs and the Metricbeat configuration collects metrics from the nodes at regular defined intervals and outputs them to Redis for storage. Redis provides a highly available mechanism enabling storage by any of the Elastic Beats and pulled by Logstash as required. The pipeline configuration defines the JSON format used for Besu logs and automatically picks up any new log fields. note The pipeline configuration must match the your log format. If using the default log format, you can use the grok plugin to extract the log fields. To see the Besu Quickstart network logs in Kibana: Start the Developer Quickstart with Besu, selecting ELK monitoring. Open the Kibana logs address listed by the sample networks list.sh script. The logs display in Kibana.","s":"Use Elastic Stack","u":"/private-networks/how-to/monitor/elastic-stack","h":"","p":408},{"i":411,"t":"Grafana Loki is an open-source log management platform that is available when using the Developer Quickstart. The Promtail configuration ingests logs at regular defined intervals and outputs them to Loki for storage. The pipeline configuration in Promtail defines pipeline stages that can collate logs natively or using the JSON format. note If using the pipeline regex stage in Promtail, configuration must match your log format. To view the GoQuorum Quickstart network logs in Loki: Start the Developer Quickstart with Besu, selecting Loki monitoring. Open the Grafana Loki address listed by the sample networks list.sh script. The logs display in Loki.","s":"Grafana Loki","u":"/private-networks/how-to/monitor/loki","h":"","p":410},{"i":413,"t":"You can use the OpenTelemetry monitoring and tracing service to gather node metrics and traces. To enable OpenTelemetry to access Besu, use the --metrics-enabled and --metrics-protocol=opentelemetry options. Use Splunk to visualize the collected data. A Besu Sync example is available. tip Use OpenTelemetry to monitor the sync time of your Besu node and show where time is spent internally and over the JSON-RPC interface. This office hours recording shows examples of monitoring Besu.","s":"Use OpenTelemetry","u":"/private-networks/how-to/monitor/opentelemetry","h":"","p":412},{"i":415,"t":"Download and install the OpenTelemetry Collector. tip You can also install exporters that send system metrics to OpenTelemetry to monitor non-Besu-specific items such as disk and CPU usage. The OpenTelemetry Collector can connect to additional applications, and may be deployed in Kubernetes environments as a daemonset.","s":"Install OpenTelemetry Collector","u":"/private-networks/how-to/monitor/opentelemetry","h":"#install-opentelemetry-collector","p":412},{"i":417,"t":"Configure OpenTelemetry to accept data from Besu. For example, use the following configuration for your otel-collector-config.yml file, and send data to Splunk and Splunk APM: otel-collector-config.yml receivers: otlp: protocols: grpc: http: exporters: splunk_hec/traces: # Splunk HTTP Event Collector token. token: \"11111111-1111-1111-1111-1111111111113\" # URL to a Splunk instance to send data to. endpoint: \"https://:8088/services/collector\" # Optional Splunk source: https://docs.splunk.com/Splexicon:Source source: \"besu:traces\" # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype sourcetype: \"otlp\" # Splunk index, optional name of the Splunk index targeted. index: \"traces\" # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. max_connections: 20 # Whether to disable gzip compression over HTTP. Defaults to false. disable_compression: false # HTTP timeout when sending data. Defaults to 10s. timeout: 10s # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. insecure_skip_verify: true splunk_hec/metrics: # Splunk HTTP Event Collector token. token: \"11111111-1111-1111-1111-1111111111113\" # URL to a Splunk instance to send data to. endpoint: \"https://:8088/services/collector\" # Optional Splunk source: https://docs.splunk.com/Splexicon:Source source: \"besu:metrics\" # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype sourcetype: \"prometheus\" # Splunk index, optional name of the Splunk index targeted. index: \"metrics\" # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. max_connections: 20 # Whether to disable gzip compression over HTTP. Defaults to false. disable_compression: false # HTTP timeout when sending data. Defaults to 10s. timeout: 10s # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. insecure_skip_verify: true # Traces sapm: access_token: \"${SPLUNK_ACCESS_TOKEN}\" endpoint: \"https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace\" # Metrics + Events signalfx: access_token: \"${SPLUNK_ACCESS_TOKEN}\" realm: \"${SPLUNK_REALM}\" processors: batch: extensions: health_check: pprof: zpages: service: extensions: [pprof, zpages, health_check] pipelines: traces: receivers: [otlp] exporters: [splunk_hec/traces, sapm] processors: [batch] metrics: receivers: [otlp] exporters: [splunk_hec/metrics, signalfx] processors: [batch] It is easiest to run the OpenTelemetry collector with Docker with the following command: Syntax Example docker run -d \\ -v ./otel-collector-config.yml:/etc/otel/config.yaml \\ -e SPLUNK_ACCESS_TOKEN= \\ -e SPLUNK_REALM= \\ -p 4317:4317 \\ otel/opentelemetry-collector-contrib:latest docker run -d \\ -v ./otel-collector-config.yml:/etc/otel/config.yaml \\ -e SPLUNK_ACCESS_TOKEN=abcdefg654 \\ -e SPLUNK_REALM=us1 \\ -p 4317:4317 \\ otel/opentelemetry-collector-contrib:latest You can also refer to this Docker-compose example. Start Besu with the --metrics-enabled and --metrics-protocol=opentelemetry options. For example, run the following command to start a single node: Syntax Example OTEL_EXPORTER_OTLP_ENDPOINT=https://: besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317 besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled --metrics-protocol=opentelemetry The OpenTelemetry SDK mandates how to configure the OpenTelemetry gRPC client, so data flows to the collector from Besu. You can use the following environment variables: Name Description Required OTEL_EXPORTER_OTLP_ENDPOINT OpenTelemetry Collector endpoint, of the form https://host:port. The default is https://localhost:4317. Yes OTEL_EXPORTER_OTLP_INSECURE Whether to allow insecure connections for OpenTelemetry data. The default is false. No","s":"Setting up and running OpenTelemetry with Besu","u":"/private-networks/how-to/monitor/opentelemetry","h":"#setting-up-and-running-opentelemetry-with-besu","p":412},{"i":419,"t":"In private networks, you can create and send regular transactions as in public networks. You can also: Send private transactions. Send concurrent private transactions. Include revert reason in transactions. Replace transactions in the transaction pool.","s":"Create and send transactions","u":"/private-networks/how-to/send-transactions","h":"","p":418},{"i":421,"t":"Splunk is a third-party monitoring solution compatible with Besu. A Splunk server can receive Besu logs and enable complex search, visualization, and analysis. Splunk can aggregate multiple logs in one place and run complex queries without being connected to the machine running Besu to read the standard output. Options for running Splunk and Besu are: Developer Quickstart with Splunk Splunk Connect for Ethereum Docker Compose Use Splunk Enterprise as a Docker container Run a Splunk Enterprise instance","s":"Use Splunk","u":"/private-networks/how-to/monitor/splunk","h":"","p":420},{"i":423,"t":"To view the Quickstart network logs in Splunk: Start the Developer Quickstart with Besu, selecting Splunk monitoring. Open the Splunk UI.","s":"Developer Quickstart with Splunk","u":"/private-networks/how-to/monitor/splunk","h":"#developer-quickstart-with-splunk","p":420},{"i":425,"t":"To run a development Besu node and connect it to Splunk Enterprise, use the Splunk Connect for Ethereum demonstration Docker Compose environment provided by Splunk.","s":"Splunk Connect for Ethereum Docker Compose","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-connect-for-ethereum-docker-compose","p":420},{"i":427,"t":"Git Docker and Docker-compose info A Splunk license is not required to use the Splunk Connect for Ethereum demonstration.","s":"Requirements","u":"/private-networks/how-to/monitor/splunk","h":"#requirements","p":420},{"i":429,"t":"Clone the Splunk Connect for Ethereum repository: git clone https://github.com/splunk/splunk-connect-for-ethereum.git cd splunk-connect-for-ethereum Start the demonstration environment by following the Splunk Connect for Ethereum repository README. note Splunk enterprise takes some time to start. Run docker ps and wait for the STATUS of the 3 containers to be Up [number] seconds (healthy). CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 127600dd1173 splunkdlt/ethlogger:latest \"ethlogger\" 53 seconds ago Up 51 seconds (healthy) ethlogger 88dfcee683c4 splunk/splunk:latest \"/sbin/entrypoint.sh…\" 53 seconds ago Up 52 seconds (healthy) 8065/tcp, 8088-8089/tcp, 8191/tcp, 9887/tcp, 9997/tcp, 0.0.0.0:18000->8000/tcp splunk 111b0c6d6072 hyperledger/besu:1.4.4 \"besu\" 53 seconds ago Up 52 seconds (healthy) 8545-8547/tcp, 30303/tcp besu","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps","p":420},{"i":432,"t":"Docker Besu 1.4.4 or later installed info A Splunk license is not required to use the trial version of the Splunk Docker image. The image is not suitable for production use and has restrictions on daily log volume. note If running Besu as a Docker container, consider using Splunk Connect for Ethereum Docker Compose or Kubernetes instead of the Splunk Enterprise trial container.","s":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites","p":420},{"i":434,"t":"Start the Splunk Enterprise container: docker run \\ -e SPLUNK_START_ARGS=--accept-license \\ -e SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113 \\ -e SPLUNK_PASSWORD=changeme \\ --rm \\ -p8080:8000 -p8088:8088 \\ -d \\ --name splunk-demo \\ splunk/splunk:latest Once the service is started, connect on http://localhost:8080/ and login as the admin user with a password of changeme. tip To follow the logs of the Splunk container: docker logs -f splunk-demo Create the Besu index: In the Splunk Web interface, navigate to the index list in the settings. Create an event index with an Index Name of besu. Leave other fields with the default values. Save the besu index. Run Besu. To start a Besu node running in development mode, run the following command: LOGGER=Splunk \\ SPLUNK_URL=https://localhost:8088 \\ SPLUNK_TOKEN=11111111-1111-1111-1111-1111111111113 \\ SPLUNK_SKIPTLSVERIFY=true \\ besu \\ --network=dev \\ --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 \\ --miner-enabled \\ --logging=trace The environment variables specified send the Besu logs to Splunk. Only LOGGER, SPLUNK_URL, SPLUNK_TOKEN and SPLUNK_SKIPTLSVERIFY are required in this example. The complete list of options is in the Splunk options reference table. In the Splunk Web interface, navigate to the search page. Type index=\"besu\" in the search field. Log events sent by Besu are displayed. Congratulations! You can now play with the search and other Splunk features to explore your Besu logs. Stop Besu with ++ctrl+c++. Stop the Splunk container with docker stop splunk-demo.","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-1","p":420},{"i":437,"t":"Splunk Enterprise license Besu 1.4.4 or later installed","s":"Prerequisites","u":"/private-networks/how-to/monitor/splunk","h":"#prerequisites-1","p":420},{"i":439,"t":"Follow the steps in the Splunk Enterprise documentation to download, install, and run Splunk Enterprise. After logging into the Splunk Enterprise Web interface, navigate to the settings to: Create an HTTP Event Collector. Create an event index named besu. Run Besu as in step 3 in using Splunk on Docker. Set the SPLUNK_URL value to match the HTTP Event Collector address and port. You can display logs and use the search engine as in step 4 in using Splunk on Docker.","s":"Steps","u":"/private-networks/how-to/monitor/splunk","h":"#steps-2","p":420},{"i":441,"t":"Name Description Required LOGGER Set to Splunk to activate sending logs to Splunk. Yes HOST Current host. If in a Docker environment, the default value is the docker container ID. Otherwise, the default value is localhost. No SPLUNK_URL URL of the Splunk HTTP Event Collector. For example, use https://localhost:8088 Yes SPLUNK_TOKEN Authentication token, usually of the form 11111111-1111-1111-1111-111111111111 Yes SPLUNK_INDEX Index to store logs. Defaults to besu No SPLUNK_SOURCE Source of the logs. Defaults to besu No SPLUNK_SOURCETYPE Source type of the logs. Defaults to besu No SPLUNK_BATCH_SIZE_BYTES Size of a log batch in bytes. Defaults to 65536 No SPLUNK_BATCH_SIZE_COUNT Size of a log batch in number of events. Defaults to 1000 No SPLUNK_BATCH_INTERVAL Interval at which to send log batches. Defaults to 500 No SPLUNK_SKIPTLSVERIFY Whether to check the Splunk instance TLS certificate when sending data. Defaults to false No","s":"Splunk options reference","u":"/private-networks/how-to/monitor/splunk","h":"#splunk-options-reference","p":420},{"i":443,"t":"Quorum Hibernate is a proxy that monitors a node's API traffic and hibernates the node when inactive. This reduces infrastructure costs by ensuring only nodes receiving API requests or nodes required to establish consensus are running. Quorum Hibernate wakes up hibernating nodes: When a new transaction or API request is received. To allow it to periodically sync with the network.","s":"Use Quorum Hibernate","u":"/private-networks/how-to/monitor/quorum-hibernate","h":"","p":442},{"i":445,"t":"Create and send private transactions using: web3js-quorum client library or web3j client library eea_sendRawTransaction priv_distributeRawTransaction. All private transaction participants must be online for a private transaction to be successfully distributed. If any participants are offline when submitting the private transaction, the transaction is not attempted and you must resubmit the transaction. The gas and gasPrice specified when sending a private transaction are used by the privacy marker transaction (PMT), not the private transaction itself. note Private transactions either deploy contracts or call contract functions. Ether transfer transactions cannot be private.","s":"Create and send private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","h":"","p":444},{"i":447,"t":"eea_sendRawTransaction distributes the private transaction to the participating nodes, and signs and submits the PMT, as described in Private transaction processing. note If sending concurrent transactions, you must use priv_distributeRawTransaction instead of eea_sendRawTransaction.","s":"eea_sendRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea_sendrawtransaction","p":444},{"i":449,"t":"Use priv_distributeRawTransaction instead of eea_sendRawTransaction when sending concurrent private transactions. priv_distributeRawTransaction distributes the private transaction to the participating nodes but does not sign and submit the PMT. That is, it performs steps 1 to 5 of private transaction processing. If using priv_distributeRawTransaction instead of eea_sendRawTransaction, use the value returned by priv_distributeRawTransaction, which is the enclave key to the private transaction in Tessera, in the data field of a call to eth_sendRawTransaction. Use the value returned by priv_getPrivacyPrecompileAddress, which is the address of the privacy precompiled contract, in the to field of the call. By using the public Ethereum transaction, eth_sendRawTransaction, you are signing and submitting the PMT yourself instead of having it signed by the Besu node, giving you greater control over the PMT. warning If the PMT is not sent after distributing the private transaction, the distributed private transaction is not executed and the private states are not updated. Distribute private transaction using priv_distributeRawTransaction { \"jsonrpc\": \"2.0\", \"method\": \"priv_distributeRawTransaction\", \"params\": [ \"0xf90198808203e8832dc6c08080b8fb608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c003600291ba05393543d483654fd01d9ee818cddfc7527dd6e13e6ef7b45a61e2ca13ffb6b70a0452338873862803ffe04056aea98cd0e3417ff971dcb384e54fce8ca1756a665a09de8260dc3763f8383a6a9ffe96909d36cd3ff4c346e3846a6467c50feaf0119e1a0839f41993789227ec721c9eaf1541683287fa436ef6edd9ec8fd088bad1a0c3c8a72657374726963746564\" ], \"id\": 1 } Enclave key to the private transaction in Tessera returned by priv_distributeRawTransaction { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\" } Send the enclave key in the data field, and the privacy precompile address in the to field of eth_sendRawTransaction: { \"jsonrpc\": \"2.0\", \"method\": \"eth_sendRawTransaction\", \"params\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"to\": \"0x000000000000000000000000000000000000007e\", \"data\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\", \"gas\": \"0x2E1800\", \"gasPrice\": \"0x9184e72a000\" } ], \"id\": 1 }","s":"priv_distributeRawTransaction","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#priv_distributerawtransaction","p":444},{"i":451,"t":"To create an EEA-compliant private transaction, specify privateFor when creating the signed transaction passed as an input parameter to eea_sendRawTransaction. To create a Besu-extended private transaction, specify a privacyGroupId when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"EEA-compliant or Besu-extended privacy","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#eea-compliant-or-besu-extended-privacy","p":444},{"i":453,"t":"The eea_sendRawTransaction parameter is a signed RLP-encoded private transaction. Shown below are examples of unsigned and unencoded private transactions to create a contract. Unencoded and unsigned EEA-compliant private transaction { \"to\": null, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x7600\", \"gasPrice\": \"0x0\", \"data\": \"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"nonce\": \"0x0\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privateFor\": [ \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\", \"6fg8q5rWMBoAT2oIiU3tYJbk4b7oAr7dxaaVY7TeM3U=\" ], \"restriction\": \"restricted\" } Unencoded and unsigned Besu-extended private transaction { \"to\": null, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x7600\", \"gasPrice\": \"0x0\", \"data\": \"0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"nonce\": \"0x0\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privacyGroupId\": \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\", \"restriction\": \"restricted\" } tip The example directory in the web3js-quorum client library contains examples of signing and encoding private transactions.","s":"Unsigned and unencoded private transactions","u":"/private-networks/how-to/send-transactions/private-transactions","h":"#unsigned-and-unencoded-private-transactions","p":444},{"i":455,"t":"Private transaction processing involves two transactions, the private transaction and the privacy marker transaction (PMT). The private transaction and the PMT each have their own nonce. If your private transaction rate requires sending private transactions without waiting for the previous private transaction to be mined, using eth_getTransactionCount and eea_sendRawTransaction may result in incorrect nonces. In this case, use priv_distributeRawTransaction instead of eea_sendRawTransaction. note You can use priv_getTransactionCount or priv_getEeaTransactionCount to get the nonce for an account for the specified privacy group or participants. Send the corresponding PMT using eth_sendRawTransaction, specifying the public PMT nonce. This method allows you to create and send the PMT yourself rather than eea_sendRawTransaction handling the PMT. caution When using priv_distributeRawTransaction to distribute transactions with consecutive nonces for the same account, the corresponding PMTs must use one account with the nonces in the same order as the private transactions. This is to ensure that the private transactions are executed in the correct order. info The web3js-quorum library includes an example of how to send concurrent private transactions. The example uses offchain privacy groups. Use priv_getPrivacyPrecompileAddress to get the precompile address to specify in the to field when creating the PMT.","s":"Send concurrent private transactions","u":"/private-networks/how-to/send-transactions/concurrent-private-transactions","h":"","p":454},{"i":457,"t":"In smart contracts, the revert operation triggers an exception to flag an error and revert the current call. The EVM passes back to the client an optional string message containing information about the error. pragma solidity ^0.8.4; contract VendingMachine { address owner; constructor() { owner = msg.sender; } error Unauthorized(); function buy(uint amount) public payable { if (amount > msg.value / 2 ether) revert(\"Not enough Ether provided.\"); // Alternative way to do it: require( amount <= msg.value / 2 ether, \"Not enough Ether provided.\" ); // Perform the purchase. } function withdraw() public { if (msg.sender != owner) revert Unauthorized(); payable(msg.sender).transfer(address(this).balance); } }","s":"Revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","h":"","p":456},{"i":459,"t":"Use the --revert-reason-enabled command line option to include the revert reason in the transaction receipt and the trace response in Besu. caution Enabling revert reason may use a significant amount of memory. We do not recommend enabling revert reason when connected to public Ethereum networks.","s":"Enable revert reason","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#enable-revert-reason","p":456},{"i":461,"t":"With revert reason enabled, the transaction receipt returned by eth_getTransactionReceipt includes the revert reason as an ABI-encoded string. info The revert reason is not included in the transaction receipt's root hash. Not including the revert reason in the transactions receipt's root hash means the revert reason is only available to nodes that execute the transaction when importing the block. That is, the revert reason is not available if using fast synchronization (--sync-mode=FAST). Example of transaction receipt { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x5208\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gasUsed\": \"0x5208\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3\", \"transactionIndex\": \"0x0\", \"revertReason\": \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\" } } With revert reason enabled, the list items in the trace response returned by trace_replayBlockTransactions, trace_block, and trace_transaction include the revert reason as an ABI-encoded string. Example of trace response list item { \"jsonrpc\": \"2.0\", \"id\": 415, \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffadea\", \"input\": \"0x\", \"to\": \"0x0110000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x220bc13dc4f1ed38dcca927a5be15eca16497d279f4c40d7b8fe9704eadf1464\", \"blockNumber\": 18, \"error\": \"Reverted\", \"revertReason\": \"0x7d88c1856cc95352\", \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": \"0xc388baa0e55e6b73e850b22dc7e9853700f6b995fd55d95dd6ccd5a13d63c566\", \"transactionPosition\": 1, \"type\": \"call\" } ] } By default, the error returned by eth_estimateGas and eth_call includes the revert reason as an ABI-encoded string in the data field. Example of eth_estimateGas and eth_call error { \"jsonrpc\": \"2.0\", \"id\": 3, \"error\": { \"code\": -32000, \"message\": \"Execution reverted: ERC20: transfer amount exceeds balance\", \"data\": \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\" } }","s":"Where the revert reason is included","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#where-the-revert-reason-is-included","p":456},{"i":463,"t":"As described in the Solidity documentation, the revert reason is an ABI-encoded string consisting of: 0x08c379a0 // Function selector for Error(string) 0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset 0x000000000000000000000000000000000000000000000000000000000000001a // String length 0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data Example of revert reason string for 'Not enough Ether provided' \"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a4e6f7420656e6f7567682045746865722070726f76696465642e000000000000\"","s":"Revert reason format","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#revert-reason-format","p":456},{"i":465,"t":"Client libraries, such as web3j, do not support extracting the revert reason from the transaction receipt. To extract the revert reason your dapp must interact directly with Besu using a custom JSON -> Object converter.","s":"Dapp support","u":"/private-networks/how-to/send-transactions/revert-reason","h":"#dapp-support","p":456},{"i":467,"t":"info Node upgrades upgrade your Besu client to a later version. In private networks, you can upgrade your node as in public networks. Network upgrades are the mechanism for upgrading the Ethereum protocol. Protocol upgrades occur during the network upgrades. For Ethereum Mainnet and public testnets, the milestone block definitions are included in Besu. Upgrading your Besu client applies the network upgrade. For private networks, all network participants must agree on the protocol upgrades and coordinate the network upgrades. The genesis file specifies the milestone block at which to apply the protocol upgrade.","s":"Network and protocol upgrades","u":"/private-networks/how-to/upgrade","h":"","p":466},{"i":469,"t":"To upgrade the protocol in a private network: Review included EIPs for breaking changes. A meta EIP for each protocol upgrade lists included EIPs. For example, Istanbul. Network participants agree on the block number at which to upgrade. For each node in the network: Add the milestone block number to the genesis file. Restart the node before reaching milestone block. caution To avoid a forked network, all network participants must update their genesis file to include the agreed on milestone block and restart their node before reaching the milestone block. tip For compatibility with future protocol upgrades, don't hardcode any gas price assumptions. Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does include breaking changes.","s":"Upgrade the protocol","u":"/private-networks/how-to/upgrade","h":"#upgrade-the-protocol","p":466},{"i":471,"t":"Local permissioning supports node and account allowlisting.","s":"Use local permissioning","u":"/private-networks/how-to/use-permissioning/local","h":"","p":470},{"i":473,"t":"You can allow access to specified nodes in the permissions configuration file. With node allowlisting enabled, communication is only between nodes in the allowlist. info Node allowlists support domain names in enode URLs as an early access feature. Use the --Xdns-enabled option to enable domain name support. If using Kubernetes, enable domain name support and use the --Xdns-update-enabled option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes. Nodes allowlist in the permissions configuration file nodes-allowlist=[\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.168.0.9:4567\",\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@192.169.0.9:4568\"] Node allowlisting is at the node level. That is, each node in the network has a permissions configuration file file in the data directory for the node. Local permissioning doesn't check that the node using the permissions configuration file is listed in the allowlist, it only checks that the remote end of the connection is in the allowlist. Use onchain permissioning if you need to check both ends of the connection.","s":"Node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#node-allowlisting","p":470},{"i":475,"t":"The nodes permissions list must include the bootnodes or Besu doesn't start with node permissions enabled. If you start Besu with specified bootnodes and have node permissioning enabled: --bootnodes=\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\",\"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\" The nodes-allowlist in the permissions configuration file must contain the specified bootnodes. tip If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect.","s":"Specify bootnodes in the allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#specify-bootnodes-in-the-allowlist","p":470},{"i":477,"t":"To enable node allowlisting, specify the --permissions-nodes-config-file-enabled option when starting Besu. The PERM API methods are not enabled by default. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"Enable node allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-node-allowlisting","p":470},{"i":479,"t":"To update the nodes allowlist while the node is running, use the following JSON-RPC API methods: perm_addNodesToAllowlist perm_removeNodesFromAllowlist You can also update the permissions_config.toml file directly and then update the allowlist using the perm_reloadPermissionsFromFile method. Updates to the permissions configuration file persist across node restarts.","s":"Update the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-node-allowlist","p":470},{"i":481,"t":"To view the nodes allowlist, use the perm_getNodesAllowlist method. note Each node has a permissions configuration file, which means nodes can have different nodes allowlists. This means nodes might be participating in the network that are not on the allowlist of other nodes in the network. We recommend each node in the network has the same nodes allowlist. Example of different node allowlists Node 1 Allowlist = [Node 2, Node 3] Node 2 Allowlist = [Node 3, Node 5] Node 5 is participating in the same network as Node 1 even though Node 1 does not have Node 5 on their allowlist.","s":"View the node allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-node-allowlist","p":470},{"i":483,"t":"You can specify accounts in the accounts allowlist in the permissions configuration file. A node with account permissioning accepts transactions only from accounts in the accounts allowlist. Accounts allowlist in the permissions configuration file accounts-allowlist=[\"0x0000000000000000000000000000000000000009\"] Account allowlisting is at the node level. That is, each node in the network has a permissions configuration file in the data directory for the node. Using account permissioning and privacy Account permissioning is incompatible with random key signing for privacy marker transactions. If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist. Transaction validation against the accounts allowlist occurs at the following points: Submitted by JSON-RPC API method eth_sendRawTransaction Received via propagation from another node Added to a block by a mining node After adding transactions to a block, the transactions are not validated against the allowlist when received by another node. That is, a node can synchronize and add blocks containing transactions from accounts that are not on the accounts allowlist of that node. The following diagram illustrates applying local and onchain permissioning rules. Example of different account allowlists Node 1 Allowlist = [Account A, Account B] Node 2 Allowlist = [Account B, Account C] Mining Node Allowlist = [Account A, Account B] Account A submits a transaction on Node 1. Node 1 validates and propagates the transaction. The Mining Node receives the transaction, validates it is from an account in the Mining Node accounts allowlist, and includes the transaction in the block. Node 2 receives and adds the block created by the Mining Node. Node 2 now has a transaction in the blockchain from Account A, which is not on the accounts allowlist for Node 2. note Each node has a permissions configuration file which means nodes in the network can have different accounts allowlists. This means a transaction can be successfully submitted by Node A from an account in the Node A allowlist but rejected by Node B to which it's propagated if the account is not in the Node B allowlist. We recommend each node in the network has the same accounts allowlist.","s":"Account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#account-allowlisting","p":470},{"i":485,"t":"To enable account allowlisting, specify the --permissions-accounts-config-file-enabled option when starting Besu. The PERM API methods are not enabled by default. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"Enable account allowlisting","u":"/private-networks/how-to/use-permissioning/local","h":"#enable-account-allowlisting","p":470},{"i":487,"t":"To update the accounts allowlist when the node is running, use the JSON-RPC API methods: perm_addAccountsToAllowlist perm_removeAccountsFromAllowlist. You can also update the permissions_config.toml file directly and use the perm_reloadPermissionsFromFile method to update the allowlists. Updates to the permissions configuration file persist across node restarts.","s":"Update the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#update-the-account-allowlist","p":470},{"i":489,"t":"To view the accounts allowlist, use the perm_getAccountsAllowlist method.","s":"View the account allowlist","u":"/private-networks/how-to/use-permissioning/local","h":"#view-the-account-allowlist","p":470},{"i":491,"t":"The permissions configuration file contains the nodes and accounts allowlists. If the --permissions-accounts-config-file and --permissions-nodes-config-file options are not specified, the name of the permissions configuration file must be permissions_config.toml and must be in the data directory for the node. You can specify the accounts and nodes allowlists in the same file or in separate files for accounts and nodes. To specify a permissions configuration file (or separate files for accounts and nodes) in any location, use the --permissions-accounts-config-file and --permissions-nodes-config-file options. note The --permissions-accounts-config-file and permissions-nodes-config-file options are not used when running Besu from the Docker image. Use a bind mount to specify a permissions configuration file with Docker. Sample permissions configuration file accounts-allowlist=[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"] nodes-allowlist=[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\",\"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\"]","s":"Permissions configuration file","u":"/private-networks/how-to/use-permissioning/local","h":"#permissions-configuration-file","p":470},{"i":493,"t":"This page contains some extra info if you're using onchain permissioning. tip If your node has two different IP addresses for ingress and egress (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect. important Node allowlists support domain names in enode URLs as an early access feature. Use the --Xdns-enabled option to enable domain name support. If using Kubernetes, enable domain name support and use the --Xdns-update-enabled option to ensure that Besu can connect to a container after being restarted, even if the IP address of the container changes. tip If you add a running node, the node does not attempt to reconnect to the bootnode and synchronize until peer discovery restarts. To add an allowlisted node as a peer without waiting for peer discovery to restart, use admin_addPeer. If you add the node to the allowlist before starting the node, using admin_addPeer is not required because peer discovery is run on node startup. tip If nodes are not connecting as expected, set the log level to TRACE and search for messages containing Node permissioning to identify the issue. Ensure the --p2p-host command line option has been correctly configured for all nodes with the externally accessible address. If you change your network configuration, you may need to update the node allowlist.","s":"Use onchain permissioning","u":"/private-networks/how-to/use-permissioning/onchain","h":"","p":492},{"i":495,"t":"Use the --permissions-nodes-contract-version command line option to specify the version of the permissioning contract interface. The default is 1. Specify the contract interface version that maps to the version of the Enterprise Ethereum Alliance Client Specification the contract interface implements. EEA Client Specification Contract interface Version 5 1 Version 6 2 The permissioning contracts in the ConsenSys/permissioning-smart-contracts repository implement the version 2 contract interface.","s":"Specify the permissioning contract interface version","u":"/private-networks/how-to/use-permissioning/onchain","h":"#specify-the-permissioning-contract-interface-version","p":492},{"i":497,"t":"Besu provides an extended implementation of privacy allowing you to create a privacy group for a set of participants. You must specify the privacy group ID when sending private transactions. To enable the PRIV API methods, use the --rpc-http-api or --rpc-ws-api command line options. To create the privacy group containing the recipients of a private transaction, use priv_createPrivacyGroup. To create an EEA-compliant private transaction, specify privacyGroupId when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"Use Besu-extended privacy","u":"/private-networks/how-to/use-privacy/besu-extended","h":"","p":496},{"i":499,"t":"Privacy groups created using priv_createPrivacyGroup have a BESU privacy group type when returned by priv_findPrivacyGroup. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=\", \"name\": \"Group B\", \"description\": \"Description of Group B\", \"type\": \"BESU\", \"members\": [ \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\" ] } ] }","s":"Privacy group type","u":"/private-networks/how-to/use-privacy/besu-extended","h":"#privacy-group-type","p":496},{"i":501,"t":"When using Besu EEA-compliant privacy, the group of nodes specified by privateFrom and privateFor form a privacy group, to which Tessera assigns a unique privacy group ID. To enable the EEA API methods, use the --rpc-http-api or --rpc-ws-api command line options. To create an EEA-compliant private transaction, specify privateFor when creating the signed transaction passed as an input parameter to eea_sendRawTransaction.","s":"Use EEA-compliant privacy","u":"/private-networks/how-to/use-privacy/eea-compliant","h":"","p":500},{"i":503,"t":"Privacy groups created when specifying privateFrom and privateFor have a LEGACY privacy group type when returned by priv_findPrivacyGroup. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"68/Cq0mVjB8FbXDLE1tbDRAvD/srluIok137uFOaClM=\", \"name\": \"legacy\", \"description\": \"Privacy groups to support the creation of groups by privateFor and privateFrom\", \"type\": \"LEGACY\", \"members\": [ \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\", \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\" ] } ] }","s":"Privacy group type","u":"/private-networks/how-to/use-privacy/eea-compliant","h":"#privacy-group-type","p":500},{"i":505,"t":"A Besu private transaction creates a privacy marker transaction and the private transaction itself.","s":"Access private and privacy marker transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"","p":504},{"i":507,"t":"With the transaction hash returned when submitting the private transaction, to get the transaction receipt for the: Private transaction, use priv_getTransactionReceipt. Privacy marker transaction, use eth_getTransactionReceipt. The transaction receipt includes a status indicating if the transaction failed (0x0), succeeded (0x1), or was invalid (0x2). Private transaction failure example To deploy a private contract, you submit a transaction using eea_sendRawTransaction. If contract deployment fails because of insufficient gas, the privacy marker transaction receipt has a status of success and the private transaction receipt has a status of failure.","s":"Transaction receipts","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transaction-receipts","p":504},{"i":509,"t":"With the transaction hash returned when submitting the private transaction, to get the: Private transaction, use priv_getPrivateTransaction. Privacy marker transaction, use eth_getTransactionByHash.","s":"Transactions","u":"/private-networks/how-to/use-privacy/access-private-transactions","h":"#transactions","p":504},{"i":511,"t":"Use the web3js-quorum library to create and update membership of flexible privacy groups. tip Because group membership for flexible privacy groups is stored in a smart contract, flexible privacy groups are also known as onchain privacy groups. info Flexible privacy groups are an early access feature. Don't use in production networks. The flexible privacy group interfaces may change between releases. There might not be an upgrade path from flexible privacy groups created using v1.5 or earlier to enable use of flexible privacy group functionality in future versions. We don't recommend creating flexible privacy groups in a chain with existing offchain privacy groups.","s":"Use flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","h":"","p":510},{"i":513,"t":"Use the --privacy-flexible-groups-enabled command line option to enable flexible privacy groups. When flexible privacy groups are enabled, the priv_createPrivacyGroup, priv_deletePrivacyGroup, and priv_findPrivacyGroup methods for offchain privacy groups are disabled.","s":"Enable flexible privacy groups","u":"/private-networks/how-to/use-privacy/flexible","h":"#enable-flexible-privacy-groups","p":510},{"i":515,"t":"To create and find a flexible privacy group using the web3js-quorum library: Update the example/keys.js file to match your network configuration. Run: cd example/onchainPrivacy node simpleExample.js This script creates the flexible privacy group with two members. findPrivacyGroup finds and displays the created privacy group. tip The Tessera logs for Tessera 1 and Tessera 2 display PrivacyGroupNotFound errors. This is expected behavior because private transactions check offchain and onchain to find the privacy group for a private transaction.","s":"Simple flexible privacy group example","u":"/private-networks/how-to/use-privacy/flexible","h":"#simple-flexible-privacy-group-example","p":510},{"i":517,"t":"To add and remove members from a flexible privacy group, use the addTo and removeFrom methods in the web3js-quorum library client library. note When adding a member, Besu pushes all existing group transactions to the new member and processes them. If there are a large number of existing transactions, adding the member may take some time.","s":"Add and remove members","u":"/private-networks/how-to/use-privacy/flexible","h":"#add-and-remove-members","p":510},{"i":519,"t":"This document collects deployment and usage tips to help you achieve high performance for private transactions. If transaction throughput or latency is not meeting your expectations, please consider the following before raising an issue.","s":"Performance best practices","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"","p":518},{"i":521,"t":"Private transactions use the same facilities as public ones. General Besu performance tunings apply. Specific approaches are out of scope of this document, except for the following, which strongly impacts performance:","s":"General performance","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#general-performance","p":518},{"i":523,"t":"Running EVM transactions creates a lot of random reads that are executed sequentially. The Besu data folder for high throughput nodes should be located on the fastest possible storage media. Prefer NVMe attached SLC flash or Intel Optane. Avoid network attached SSDs or cloud storage with limited input/output operations per second. Do not use spinning disks under any circumstances.","s":"Use fast, local, solid state storage","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-fast-local-solid-state-storage","p":518},{"i":526,"t":"When submitting a private transaction using web3js-quorum, the submit call will only return once the privacy marker transaction has been included in a block. This limits the throughput to at most one private transaction per block when submitting from a single thread. To increase throughput, use web3js-quorum from multiple concurrent threads or processes.","s":"Use concurrent submission","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-concurrent-submission","p":518},{"i":528,"t":"Besu has to talk to its local Tessera node frequently while handling a block. While we do not recommend running them on the same node, minimizing the latency between Besu and Tessera will improve block processing times. Besu and Tessera should not be hosted in geographically distributed locations.","s":"Co-locate Besu and Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#co-locate-besu-and-tessera","p":518},{"i":530,"t":"When distributing a new private transaction between Tessera nodes, the overall throughput is determined by the slowest Tessera nodes. Try to minimize network latency between Tessera nodes and do not mix different machine types when hosting Tessera.","s":"Optimize worst-case latency between Tessera nodes","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#optimize-worst-case-latency-between-tessera-nodes","p":518},{"i":532,"t":"Management of public and private nonces in web3js-quorum is stateless: before a transaction is sent, web3js-quorum has to query for those nonces. This is increasing latency, the node's load, and is a source of fragility due to nonce collision when multiple senders try to use the same account concurrently. For performance and reliability it is advantageous to manage nonces in a stateful manner on the client side instead of querying them for every transaction.","s":"Use stateful nonce management","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-stateful-nonce-management","p":518},{"i":534,"t":"To avoid public nonce management, privacy marker transactions can be sent using a random account per transaction. This option is only available for zero gas networks.","s":"Use random senders for privacy marker transactions","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#use-random-senders-for-privacy-marker-transactions","p":518},{"i":536,"t":"When Tessera is overloaded with transactions, the performance breaks down catastrophically due to unbounded growth of the request queue. Avoid sending more transactions to Tessera than it can handle. Sudden jumps in submission latency and submission failure rate should be answered with a load reduction on the client side, for example using a back-off scheme. Please note that this is not Tessera specific but a general issue in distributed systems. It just happens that if queueing discipline is not maintained, Tessera tends to be the first component to fail.","s":"Avoid queuing transactions in Tessera","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#avoid-queuing-transactions-in-tessera","p":518},{"i":538,"t":"Smaller groups need fewer communication for transaction propagation. If reducing the number of Tessera nodes involved in a transaction is an option, it will lead to slightly better tail latencies. Multi-tenancy Tessera can be used to have large groups with a small number of Tessera nodes (possibly only one).","s":"Limit the group size to reduce communication overhead","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-the-group-size-to-reduce-communication-overhead","p":518},{"i":540,"t":"Groups are locked (prevented from executing transactions) during membership changes. Try to minimize the number of times the membership changes. When possible, spread load across multiple groups to always have some groups available while others are locked. Consider batching group membership changes if possible. Note however that this does not work with the default management contract, yet.","s":"Limit group membership changes and make them quick","u":"/private-networks/how-to/use-privacy/performance-best-practices","h":"#limit-group-membership-changes-and-make-them-quick","p":518},{"i":542,"t":"You can sign privacy marker transactions (PMTs) with either a random key or a specified key. To sign privacy marker transactions with a specified private key, use --privacy-marker-transaction-signing-key-file when starting Besu. note The private key file can be the same file used by --node-private-key-file, or a different key file to identify who signed the privacy marker transaction. In networks where you pay gas, you must specify a key and the associated account must contain adequate funds. In free gas networks, to provide further anonymity by signing each privacy marker transaction with a different random key, exclude the --privacy-marker-transaction-signing-key-file command line option when starting Besu. \"Using account permissioning and privacy\" You can't use account permissioning with random key signing. If using account permissioning and privacy, a signing key must be specified using the --privacy-marker-transaction-signing-key-file command line option and the corresponding public key included in the accounts allowlist. note Besu signs privacy marker transactions during the private transaction process.","s":"Sign privacy marker transactions","u":"/private-networks/how-to/use-privacy/sign-pmts","h":"","p":541},{"i":544,"t":"Besu-extended privacy provides JSON-RPC API methods for creating and managing privacy groups: priv_createPrivacyGroup priv_findPrivacyGroup priv_deletePrivacyGroup. tip You can find and delete EEA-compliant privacy groups using priv_findPrivacyGroup and priv_deletePrivacyGroup.","s":"Create and manage privacy groups","u":"/private-networks/how-to/use-privacy/privacy-groups","h":"","p":543},{"i":546,"t":"web3js-quorum is an Ethereum JavaScript library extending web3.js that adds support for Besu-specific JSON-RPC APIs and features. Use the library to create and send RLP-encoded transactions using JSON-RPC. important web3js-quorum supports JSON-RPC over HTTP only. note web3js-quorum includes all quorum.js and web3js-eea features. If migrating to web3js-quorum, update your JavaScript code as indicated in the following examples. Read the migration guide for more information about updating your code.","s":"Use the web3js-quorum client library","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"","p":545},{"i":548,"t":"Node.js (version > 10) The web3 library must be installed in your project","s":"Prerequisites","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#prerequisites","p":545},{"i":550,"t":"npm install web3js-quorum","s":"Add web3js-quorum to project","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#add-web3js-quorum-to-project","p":545},{"i":552,"t":"Initialize your client where is the JSON-RPC HTTP endpoint of your Besu node. Specified by the --rpc-http-host and --rpc-http-port command line options. Syntax Example const { Web3 } = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"\")); const { Web3 } = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:8545\")); note When migrating from web3js-eea to web3js-quorum, use Web3Quorum. The constructor doesn't require the chain ID anymore. Chain ID is automatically retrieved from the chain using the specified JSON-RPC HTTP endpoint.","s":"Initialize the web3js-quorum client","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#initialize-the-web3js-quorum-client","p":545},{"i":554,"t":"To deploy a private contract, you need the contract binary. You can use Solidity to get the contract binary. Deploying a contract with 'web3.priv.generateAndSendRawTransaction' const contractOptions = { data: `0x123`, // contract binary privateFrom: \"tesseraNode1PublicKey\", privateFor: [\"tesseraNode3PublicKey\"], privateKey: \"besuNode1PrivateKey\", }; return web3.priv.generateAndSendRawTransaction(contractOptions); web3.priv.generateAndSendRawTransaction(contractOptions) returns the transaction hash. To get the private transaction receipt, use web3.priv.waitForTransactionReceipt(txHash).","s":"Deploy a contract with generateAndSendRawTransaction","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#deploy-a-contract-with-generateandsendrawtransaction","p":545},{"i":556,"t":"For more information about the web3js-quorum methods, see the web3js-quorum reference documentation.","s":"web3js-quorum methods","u":"/private-networks/how-to/use-privacy/web3js-quorum","h":"#web3js-quorum-methods","p":545},{"i":558,"t":"To enable privacy functionality in production systems, Tessera must be highly available and run in a separate instance to Besu. note You can also configure Besu for high availability using load balancers.","s":"Run Tessera with Besu","u":"/private-networks/how-to/use-privacy/tessera","h":"","p":557},{"i":560,"t":"Privacy requires you to configure Tessera for high availability. Besu also requires orion mode to be enabled in Tessera. To successfully distribute a private transaction, all private transaction participants must be online. If any participants are offline when submitting the private transaction, the transaction is not attempted and you need to resubmit the transaction. If a Tessera node is unavailable when Besu attempts to process a privacy marker transaction, the Besu node stops processing all new blocks until Tessera is available. The Besu node continually attempts to process the privacy marker transaction until Tessera is available again. caution If Tessera becomes available but has lost data, Besu resumes processing blocks and the private states in the Besu nodes might become inconsistent.","s":"High availability","u":"/private-networks/how-to/use-privacy/tessera","h":"#high-availability","p":557},{"i":562,"t":"For production systems, we recommend running Besu and Tessera in separate instances. If running Besu and Tessera in the same instance, restrict the amount of memory used by each JVM to ensure each has enough memory.","s":"Separate instances","u":"/private-networks/how-to/use-privacy/tessera","h":"#separate-instances","p":557},{"i":564,"t":"This section provides reference material for private network features. The following features and resources are shared with public networks and the content can be found in the public networks section: Besu command line: Standard options Standard subcommands Besu API: Standard Besu API methods Standard Besu API objects Genesis file items EVM tool options Transaction trace types Projects using Besu Security disclosure policy","s":"Reference","u":"/private-networks/reference","h":"","p":563},{"i":566,"t":"You can use existing accounts for testing by including them in the genesis file for a private network. Besu also provides predefined accounts for use in development mode.","s":"Accounts for testing","u":"/private-networks/reference/accounts-for-testing","h":"","p":565},{"i":568,"t":"When you start Besu with the --network=dev command line option, Besu uses the dev.json genesis file by default. The dev.json genesis file defines the following accounts used for testing. Do not use the test accounts on Ethereum Mainnet or any production network. The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code. They are not secure and everyone can use them. Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud. In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. Always secure your Ethereum Mainnet and any production account properly. See for instance MyCrypto \"Protecting Yourself and Your Funds\" guide. \"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)\" Private key to copy : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 200 Eth (200000000000000000000 Wei) \"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)\" Private key to copy : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 Initial balance : 90000 Eth (90000000000000000000000 Wei) \"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)\" Private key to copy : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance : 90000 Eth (90000000000000000000000 Wei)","s":"Development mode","u":"/private-networks/reference/accounts-for-testing","h":"#development-mode","p":565},{"i":570,"t":"To use existing test accounts, specify the accounts and balances in a genesis file for your test network. For an example of how to define accounts in the genesis file, see dev.json. To start Besu with the genesis file defining the existing accounts, use the --genesis-file command line option .","s":"Genesis file","u":"/private-networks/reference/accounts-for-testing","h":"#genesis-file","p":565},{"i":572,"t":"The following objects are parameters for or returned by Besu private network API methods. Important This reference contains API objects that apply to only private networks. For API objects that apply to both private and public networks, see the public network API objects reference.","s":"Private network API objects","u":"/private-networks/reference/api/objects","h":"","p":571},{"i":574,"t":"Returned by priv_getPrivateTransaction. Key Type Value from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity Gas price, in Wei, provided by the sender. input Data The data to create or invoke a contract. nonce Quantity Number of transactions made by the sender to the privacy group before this one. to Data, 20 bytes null if a contract creation transaction, otherwise, the contract address. value Quantity null because private transactions cannot transfer Ether. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s. privateFrom Data, 32 bytes Tessera public key of the sender. privateFor Array of Data, 32 bytes each Tessera public keys of recipients. Not returned if using privacyGroupId to send the transaction. privacyGroupId Data, 32 bytes Tessera privacy group ID of recipients. Not returned if using privateFor to send the transaction. restriction String Must be restricted.","s":"Private transaction object","u":"/private-networks/reference/api/objects","h":"#private-transaction-object","p":571},{"i":576,"t":"Returned by priv_getTransactionReceipt. Key Type Value blockHash Data, 32 bytes Hash of block containing this transaction. blockNumber Quantity Block number of block containing this transaction. contractAddress Data, 20 bytes Contract address created if a contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value. from Data, 20 bytes Address of the sender. logs Array Array of log objects generated by this private transaction. to Data, 20 bytes Address of the receiver, if sending ether, otherwise, null. transactionIndex Quantity, Integer Index position of transaction in the block. revertReason String ABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled. output Data RLP-encoded return value of a contract call if a value returns, otherwise, null. commitmentHash Data, 32 bytes Hash of the privacy marker transaction. status Quantity Either 0x1 (success) or 0x0 (failure). privateFrom Data, 32 bytes Tessera public key of the sender. privateFor or privacyGroupId Array or Data, 32 bytes Tessera public keys or privacy group ID of the recipients. logsBloom Data, 256 bytes Bloom filter for light clients to quickly retrieve related logs.","s":"Private transaction receipt object","u":"/private-networks/reference/api/objects","h":"#private-transaction-receipt-object","p":571},{"i":578,"t":"API interfaces in Besu allow users to build plugins to extend Besu functionality. For more information about the available interfaces, see the Plugin API Javadoc. Javadoc issue The plugin API documentation is currently not being updated. We're working on a fix, but in the meantime, some links are temporarily pointing to wiki.hyperledger.org.","s":"Plugin API interfaces","u":"/private-networks/reference/plugin-api-interfaces","h":"","p":577},{"i":580,"t":"The following table lists the interfaces providing core plugin classes. Interface Description BesuContext Allows plugins to access Besu services. BesuPlugin Used to manage the plugin lifecycle.","s":"Core plugin classes","u":"/private-networks/reference/plugin-api-interfaces","h":"#core-plugin-classes","p":577},{"i":582,"t":"The following table lists interfaces providing services you can retrieve. Interface Description BesuEvents Allows plugins to attach to events during Besu operation. BesuConfiguration Provides file system locations of Besu's storage. IbftQueryService Allows query of the IBFT 2.0 aspects of the blockchain. MetricCategoryRegistry Adds a new metrics category to the CLI. MetricsSystem Register metrics with the Prometheus endpoint. PoaQueryService Query the current state of Clique and IBFT 2.0 consensus protocols. PicoCLIOptions Adds CLI commands to the Besu command line. SecurityModuleService Allows plugins to register a security module. StorageService Allows plugins to register as a storage engine. For example, to connect to a hardware security module (HSM). PermissioningService Allows for fine grain control of node connection and node messaging permissioning. PrivacyPluginService Provides a way to define how privacy marker transactions are created, and what private genesis to use. RpcEndpointService Register custom RPC endpoints. To use the interfaces in your plugin, ensure the Gradle build file contains the https://hyperledger.jfrog.io/hyperledger/besu-maven repository and the plugin-api dependency. Known issue As indicated in issue #406, plugins may need to access the parsed command line during registration, but the command line is not yet initialized at this stage. It's in our roadmap to improve lifecycle steps and provide additional visibility for some data. A workaround is to create a supplier during the register step and store it in memory. The start step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available.","s":"Plugin services","u":"/private-networks/reference/plugin-api-interfaces","h":"#plugin-services","p":577},{"i":584,"t":"This reference describes the syntax of the Besu private network command line interface (CLI) options. Important This reference contains options that apply to only private networks. For options that apply to both private and public networks, see the public network options reference.","s":"Private network command line options","u":"/private-networks/reference/cli/options","h":"","p":583},{"i":586,"t":"You can specify Besu options: On the command line. besu [OPTIONS] [SUBCOMMAND] As an environment variable. For each command line option, the equivalent environment variable is: Uppercase. _ replaces -. Has a BESU_ prefix. For example, set --miner-coinbase using the BESU_MINER_COINBASE environment variable. In a configuration file. If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file. If using Bash or Z shell, you can view option suggestions by entering -- and pressing the Tab key twice. besu --Tab+Tab caution Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens.","s":"Specify options","u":"/private-networks/reference/cli/options","h":"#specify-options","p":583},{"i":589,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-config-file= --permissions-accounts-config-file=/home/me/me_configFiles/myPermissionsFile BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile permissions-accounts-config-file=\"/home/me/me_configFiles/myPermissionsFile\" The accounts permissions configuration file. The default is the permissions_config.toml file in the data directory. tip --permissions-accounts-config-file and --permissions-nodes-config-file can use the same file.","s":"permissions-accounts-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file","p":583},{"i":591,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-config-file-enabled[=] --permissions-accounts-config-file-enabled=true BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE_ENABLED=true permissions-accounts-config-file-enabled=true Enables or disables file-based account level permissions. The default is false.","s":"permissions-accounts-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-config-file-enabled","p":583},{"i":593,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-contract-address= --permissions-accounts-contract-address=xyz BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ADDRESS=xyz permissions-accounts-contract-address=\"xyz\" The contract address for onchain account permissioning.","s":"permissions-accounts-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-address","p":583},{"i":595,"t":"Syntax Example Environment variable Configuration file --permissions-accounts-contract-enabled[=] --permissions-accounts-contract-enabled=true BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ENABLED=true permissions-accounts-contract-enabled=true Enables or disables contract-based onchain account permissioning. The default is false.","s":"permissions-accounts-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-accounts-contract-enabled","p":583},{"i":597,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-config-file= --permissions-nodes-config-file=/home/me/me_configFiles/myPermissionsFile BESU_PERMISSIONS_NODES_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile permissions-nodes-config-file=\"/home/me/me_configFiles/myPermissionsFile\" The nodes permissions configuration file. The default is the permissions_config.toml file in the data directory. tip --permissions-nodes-config-file and --permissions-accounts-config-file can use the same file.","s":"permissions-nodes-config-file","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file","p":583},{"i":599,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-config-file-enabled[=] --permissions-nodes-config-file-enabled=true BESU_PERMISSIONS_NODES_CONFIG_FILE_ENABLED=true permissions-nodes-config-file-enabled=true Enables or disables file-based node level permissions. The default is false.","s":"permissions-nodes-config-file-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-config-file-enabled","p":583},{"i":601,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-address= --permissions-nodes-contract-address=xyz BESU_PERMISSIONS_NODES_CONTRACT_ADDRESS=xyz permissions-nodes-contract-address=\"xyz\" The contract address for onchain node permissioning.","s":"permissions-nodes-contract-address","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-address","p":583},{"i":603,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-enabled[=] --permissions-nodes-contract-enabled=true BESU_PERMISSIONS_NODES_CONTRACT_ENABLED=true permissions-nodes-contract-enabled=true Enables or disables contract-based onchain node permissioning. The default is false.","s":"permissions-nodes-contract-enabled","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-enabled","p":583},{"i":605,"t":"Syntax Example Environment variable Configuration file --permissions-nodes-contract-version= --permissions-nodes-contract-version=2 BESU_PERMISSIONS_NODES_CONTRACT_VERSION=2 permissions-nodes-contract-version=2 Version of the EEA node permissioning interface. The default is 1.","s":"permissions-nodes-contract-version","u":"/private-networks/reference/cli/options","h":"#permissions-nodes-contract-version","p":583},{"i":607,"t":"Syntax Example Environment variable Example configuration file --poa-block-txs-selection-max-time= --poa-block-txs-selection-max-time=80 BESU_POA_BLOCK_TXS_SELECTION_MAX_TIME=80 poa-block-txs-selection-max-time=80 The maximum time that can be spent selecting transactions to be included in a block, as a percentage of the fixed block time of the network. The default is 75, or 75%. note This option only applies to proof-of-authority networks. For proof-of-stake and proof-of-work networks, see --block-txs-selection-max-time.","s":"poa-block-txs-selection-max-time","u":"/private-networks/reference/cli/options","h":"#poa-block-txs-selection-max-time","p":583},{"i":609,"t":"Syntax Example Environment variable Configuration file --privacy-enabled[=] --privacy-enabled=false BESU_PRIVACY_ENABLED=false privacy-enabled=false Enables or disables private transactions. The default is false. important Using private transactions with pruning or fast sync is not supported.","s":"privacy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-enabled","p":583},{"i":611,"t":"Syntax Example Environment variable Configuration file --privacy-marker-transaction-signing-key-file= --privacy-marker-transaction-signing-key-file=/home/me/me_node/myPrivateKey BESU_PRIVACY_MARKER_TRANSACTION_SIGNING_KEY_FILE=/home/me/me_node/myPrivateKey privacy-marker-transaction-signing-key-file=\"/home/me/me_node/myPrivateKey\" is the name of the private key file used to sign privacy marker transactions. note This can be the same file used by --node-private-key-file, or a different key file to identify who signed the privacy marker transaction. You must specify this option if you're using: a privacy network where you pay gas. Also, the associated account must contain adequate funds. account permissioning and privacy. You must include the corresponding public key in the accounts allowlist. If you do not specify this option (for example, in a free gas network), Besu signs each transaction with a different randomly generated key.","s":"privacy-marker-transaction-signing-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-marker-transaction-signing-key-file","p":583},{"i":613,"t":"Syntax Example Environment variable Configuration file --privacy-multi-tenancy-enabled[=] --privacy-multi-tenancy-enabled=false BESU_PRIVACY_MULTI_TENANCY_ENABLED=false privacy-multi-tenancy-enabled=false Enables or disables multi-tenancy for private transactions. The default is false.","s":"privacy-multi-tenancy-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-multi-tenancy-enabled","p":583},{"i":615,"t":"Syntax Example Environment variable Configuration file --privacy-flexible-groups-enabled[=] --privacy-flexible-groups-enabled=true BESU_PRIVACY_FLEXIBLE_GROUPS_ENABLED=true privacy-flexible-groups-enabled=true Enables or disables flexible privacy groups. The default is false. Deprecated syntax for this option is --privacy-onchain-groups-enabled.","s":"privacy-flexible-groups-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-flexible-groups-enabled","p":583},{"i":617,"t":"Syntax Example Environment variable Configuration file --privacy-public-key-file= --privacy-public-key-file=Tessera/nodeKey.pub BESU_PRIVACY_PUBLIC_KEY_FILE=Tessera/nodeKey.pub privacy-public-key-file=\"Tessera/nodeKey.pub\" The public key of the Tessera node. important You cannot specify privacy-public-key-file when --privacy-multi-tenancy-enabled is true","s":"privacy-public-key-file","u":"/private-networks/reference/cli/options","h":"#privacy-public-key-file","p":583},{"i":619,"t":"Syntax Example Environment variable Configuration file --privacy-tls-enabled[=] --privacy-tls-enabled=false BESU_PRIVACY_TLS_ENABLED=false privacy-tls-enabled=false Enables or disables TLS on communication with the private transaction manager. The default is false.","s":"privacy-tls-enabled","u":"/private-networks/reference/cli/options","h":"#privacy-tls-enabled","p":583},{"i":621,"t":"Syntax Example Environment variable Configuration file --privacy-tls-keystore-file= --privacy--keystore-file=/home/me/me_node/key BESU_PRIVACY_TLS_KEYSTORE_FILE=/home/me/me_node/key privacy-tls-keystore-file=\"/home/me/me_node/key\" The keystore file (in PKCS #12 format) containing the private key and the certificate presented during authentication. You must specify privacy-tls-keystore-file if --privacy-tls-enabled is true.","s":"privacy-tls-keystore-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-file","p":583},{"i":623,"t":"Syntax Example Environment variable Configuration file --privacy-tls-keystore-password-file= --privacy-tls-keystore-password-file=/home/me/me_node/password BESU_PRIVACY_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password privacy-tls-keystore-password-file=\"/home/me/me_node/password\" The path to the file containing the password to decrypt the keystore.","s":"privacy-tls-keystore-password-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-keystore-password-file","p":583},{"i":625,"t":"Syntax Example Environment variable Configuration file --privacy-tls-known-enclave-file= --privacy-tls-known-enclave-file=/home/me/me_node/knownEnclave BESU_PRIVACY_TLS_KNOWN_ENCLAVE_FILE=/home/me/me_node/knownEnclave privacy-tls-known-enclave-file=\"/home/me/me_node/knownEnclave\" The path to the file containing the hostnames, ports, and SHA256 certificate fingerprints of the authorized privacy enclave.","s":"privacy-tls-known-enclave-file","u":"/private-networks/reference/cli/options","h":"#privacy-tls-known-enclave-file","p":583},{"i":627,"t":"Syntax Example Environment variable Configuration file --privacy-url= --privacy-url=http://127.0.0.1:8888 BESU_PRIVACY_URL=http://127.0.0.1:8888 privacy-url=\"http://127.0.0.1:8888\" The URL on which the Tessera node is running.","s":"privacy-url","u":"/private-networks/reference/cli/options","h":"#privacy-url","p":583},{"i":629,"t":"The Quorum Dev Quickstart on Azure Marketplace enables deploying a private IBFT 2.0 network, which includes: A bootnode. An RPC node. Three regular nodes. A block explorer. Prometheus and Grafana with the Besu dashboard installed. These are deployed on a single Azure VM in minutes. Once deployed, you can develop and test applications and connect to the Visual Studio Code (VSCode) plugin using the RPC endpoint http:///jsonrpc.","s":"Deploy private network example on Azure","u":"/private-networks/tutorials/azure","h":"","p":628},{"i":631,"t":"The following is a high-level overview of the deployed network.","s":"Overview","u":"/private-networks/tutorials/azure","h":"#overview","p":628},{"i":633,"t":"To deploy the private network example on Azure: Create a Resource Group in the Azure Portal. Go to the Quorum Dev Quickstart on Azure Marketplace. Click Get It Now and Continue. The Quickstart landing page is displayed. Click Create. The Basics page is displayed. Enter: Details of the Resource Group you created earlier. Basic user credentials to start a VM. Prefix for your new VM and any other resources created. Region to which you wish to deploy the VM. Click Next: Size and select the size of the VM you want to use. To start the deployment, click Review + create at the bottom left of the page. The deployment typically takes 3--5 minutes. The progress of your deployment is displayed. When the deployment is complete, the resources created are displayed. Click Go to Resource. Everything created in the deployment is displayed. Click on the VM name. The VM details such as the IP and DNS name are displayed. Use the IP and DNS name displayed to connect to the VM, either in browser or via RPC calls.","s":"Deploy","u":"/private-networks/tutorials/azure","h":"#deploy","p":628},{"i":635,"t":"To display the block explorer, open a new tab and enter either the IP of the VM or the DNS name.","s":"Block explorer","u":"/private-networks/tutorials/azure","h":"#block-explorer","p":628},{"i":637,"t":"The deployment includes Prometheus metrics and Grafana with a custom Besu Dashboard installed. To display the dashboard: Open a new tab and enter the IP or DNS name appended with /grafana. For example: http:///grafana. Click on home and select the Besu dashboard. The dashboard provides a visual way to monitor your network and nodes as the chain progresses. Alerting can also be configured.","s":"Metrics","u":"/private-networks/tutorials/azure","h":"#metrics","p":628},{"i":639,"t":"You can connect dapps or develop directly from the IDE by using VSCode and connecting to the VM RPC endpoint. The endpoint is the DNS name appended with /jsonrpc: http:///jsonrpc.","s":"Connect to VM RPC endpoint","u":"/private-networks/tutorials/azure","h":"#connect-to-vm-rpc-endpoint","p":628},{"i":641,"t":"You can SSH into the VM to see how everything is set up and working. Use the credentials from step 5 of deployment and your preferred client: ssh username@ To list all containers running, run docker ps. Find the complete setup in /home//besu-quickstart.","s":"SSH","u":"/private-networks/tutorials/azure","h":"#ssh","p":628},{"i":643,"t":"This reference describes the syntax of the Besu private network command line interface (CLI) subcommands. Important This reference contains subcommands that apply to only private networks. For subcommands that apply to both private and public networks, see the public network subcommands reference. To start a Besu node using subcommands, run: besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS] If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice. besu Tab+Tab","s":"Private network subcommands","u":"/private-networks/reference/cli/subcommands","h":"","p":642},{"i":645,"t":"Provides operator actions.","s":"operator","u":"/private-networks/reference/cli/subcommands","h":"#operator","p":642},{"i":647,"t":"Syntax Example besu operator generate-blockchain-config --config-file= --to= [--genesis-file-name=] [--private-key-file-name=] [--public-key-file-name=] besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles Generates an IBFT 2.0 or QBFT genesis file. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 or QBFT genesis file, except for the extraData string. The second is the blockchain property defining the number of key pairs to generate.","s":"generate-blockchain-config","u":"/private-networks/reference/cli/subcommands","h":"#generate-blockchain-config","p":642},{"i":649,"t":"Provides RLP related actions.","s":"rlp","u":"/private-networks/reference/cli/subcommands","h":"#rlp","p":642},{"i":651,"t":"Syntax File example Standard input/output example besu rlp decode [--from=] [--to=] [--type=] besu rlp decode --from=ibft_extra_data.txt --to=decoded_ibft_extra_data.txt --type=IBFT_EXTRA_DATA cat ibft_extra_data.txt | besu rlp decode > decoded_ibft_extra_data.txt Decodes the RLP hexadecimal string used as extraData in an IBFT 2.0 or QBFT genesis file into a validator list. This subcommand takes the following options: from - The file containing the RLP hexadecimal string to decode. The default is standard input. to - The file to write the decoded validator list to. The default is standard output. type - IBFT_EXTRA_DATA for an IBFT 2.0 extraData string, or QBFT_EXTRA_DATA for a QBFT extraData string. The default is IBFT_EXTRA_DATA.","s":"decode","u":"/private-networks/reference/cli/subcommands","h":"#decode","p":642},{"i":653,"t":"Syntax File example Standard input/output example besu rlp encode [--from=] [--to=] [--type=] besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA cat extra_data.json | besu rlp encode > rlp.txt Encodes a validator list into an RLP hexadecimal string to use as extraData in an IBFT 2.0 or QBFT genesis file. This subcommand takes the following options: from - The file containing the validator list to encode. The default is standard input. to - The file to write the RLP-encoded hexadecimal string to. The default is standard output. type - IBFT_EXTRA_DATA for an IBFT 2.0 extraData string, or QBFT_EXTRA_DATA for a QBFT extraData string. The default is IBFT_EXTRA_DATA.","s":"encode","u":"/private-networks/reference/cli/subcommands","h":"#encode","p":642},{"i":655,"t":"To generate the RLP encoded extraData string, specify a JSON input that is an array of validator addresses in ascending order. JSON schema for IBFT_EXTRA_DATA Use the following JSON schema to validate that your JSON data is well-formatted. To validate your JSON content, use an online validation tool, such as JSON Schema Validator. { \"$schema\": \"http://json-schema.org/draft-07/schema#\", \"$id\": \"http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json\", \"type\": \"array\", \"definitions\": {}, \"title\": \"IBFT extra data\", \"description\": \"JSON format used as input to generate an IBFT extra data RLP string\", \"items\": { \"$id\": \"#/address\", \"type\": \"string\", \"title\": \"Validator address\", \"description\": \"The validator node address\", \"default\": \"\", \"examples\": [ \"be068f726a13c8d46c44be6ce9d275600e1735a4\", \"5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193\" ], \"pattern\": \"^([0-9a-f]{40})$\" } } Example IBFT_EXTRA_DATA encoding: JSON input RLP output [ \"be068f726a13c8d46c44be6ce9d275600e1735a4\", \"5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193\" ] 0xf853a00000000000000000000000000000000000000000000000000000000000000000ea94be068f726a13c8d46c44be6ce9d275600e1735a4945ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193808400000000c0","s":"IBFT 2.0 extra data","u":"/private-networks/reference/cli/subcommands","h":"#ibft-20-extra-data","p":642},{"i":657,"t":"Important This reference contains API methods that apply to only private networks. For API methods that apply to both private and public networks, see the public network API reference. All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint.","s":"Private network API methods","u":"/private-networks/reference/api","h":"","p":656},{"i":659,"t":"The CLIQUE API methods provide access to the Clique consensus engine. note The CLIQUE API methods are not enabled by default for JSON-RPC. To enable the CLIQUE API methods use the --rpc-http-api or --rpc-ws-api options.","s":"CLIQUE methods","u":"/private-networks/reference/api","h":"#clique-methods","p":656},{"i":661,"t":"Discards a proposal to add or remove a signer with the specified address. Parameters​ address: string - 20-byte address of proposed signer Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"clique_discard","u":"/private-networks/reference/api","h":"#clique_discard","p":656},{"i":663,"t":"Lists signers for the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of string - list of 20-byte addresses of signers curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSigners\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\" : \"2.0\", \"id\" : 1, \"result\" : [ \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"0xb279182d99e65703f0076e4812653aab85fca0f0\" ] }","s":"clique_getSigners","u":"/private-networks/reference/api","h":"#clique_getsigners","p":656},{"i":665,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"clique_getSignerMetrics","u":"/private-networks/reference/api","h":"#clique_getsignermetrics","p":656},{"i":667,"t":"Lists signers for the specified block. Parameters​ hash: string - 32-byte block hash Returns​ result: array of string - list of 20-byte addresses of signers curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignersAtHash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_getSignersAtHash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"0xb279182d99e65703f0076e4812653aab85fca0f0\" ] }","s":"clique_getSignersAtHash","u":"/private-networks/reference/api","h":"#clique_getsignersathash","p":656},{"i":669,"t":"Returns current proposals. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the proposal for each account (if true, the proposal is to add a signer; if false, the proposal is to remove a signer.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0x42eb768f2244c8811c63729a21a3569731535f07\": false, \"0x12eb759f2222d7711c63729a45c3585731521d01\": true } }","s":"clique_proposals","u":"/private-networks/reference/api","h":"#clique_proposals","p":656},{"i":671,"t":"Proposes to add or remove a signer with the specified address. Parameters​ address: string - 20-byte address proposal: boolean - true to propose adding signer or false to propose removing signer Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"clique_propose","u":"/private-networks/reference/api","h":"#clique_propose","p":656},{"i":673,"t":"The EEA API methods provide functionality for private transactions and privacy groups. note The EEA API methods are not enabled by default for JSON-RPC. To enable the EEA API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"EEA methods","u":"/private-networks/reference/api","h":"#eea-methods","p":656},{"i":675,"t":"Distributes the private transaction, generates the privacy marker transaction and submits it to the transaction pool, and returns the transaction hash of the privacy marker transaction. The signed transaction passed as an input parameter includes the privateFrom, privateFor or privacyGroupId, and restriction fields. The gas and gasPrice are used by the privacy marker transaction not the private transaction itself. To avoid exposing your private key, create signed transactions offline and send the signed transaction data using eea_sendRawTransaction. important For production systems requiring private transactions, use a network with a consensus mechanism supporting transaction finality to make sure the private state does not become inconsistent with the chain. For example, IBFT 2.0 and QBFT provide the required finality. Using private transactions with pruning or fast sync isn't supported. Parameters​ transaction: string - signed RLP-encoded private transaction Returns​ result: string - 32-byte transaction hash of the privacy marker transaction tip If creating a contract, use priv_getTransactionReceipt to retrieve the contract address after the transaction is finalized. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eea_sendRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eea_sendRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1} { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" }","s":"eea_sendRawTransaction","u":"/private-networks/reference/api","h":"#eea_sendrawtransaction","p":656},{"i":677,"t":"The IBFT API methods provide access to the IBFT 2.0 consensus engine. note The IBFT API methods are not enabled by default for JSON-RPC. To enable the IBFT API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"IBFT 2.0 methods","u":"/private-networks/reference/api","h":"#ibft-20-methods","p":656},{"i":679,"t":"Discards a proposal to add or remove a validator with the specified address. Parameters​ address: string - 20-byte address of proposed validator Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"ibft_discardValidatorVote","u":"/private-networks/reference/api","h":"#ibft_discardvalidatorvote","p":656},{"i":681,"t":"Returns votes cast in the current epoch. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the vote for each account; if true, the vote is to add a validator. If false, the proposal is to remove a validator. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getPendingVotes\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getPendingVotes\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\": true, \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\": true } }","s":"ibft_getPendingVotes","u":"/private-networks/reference/api","h":"#ibft_getpendingvotes","p":656},{"i":683,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block of the range Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"ibft_getSignerMetrics","u":"/private-networks/reference/api","h":"#ibft_getsignermetrics","p":656},{"i":685,"t":"Lists the validators defined in the specified block. Parameters​ block: string - 32-byte block hash Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"ibft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblockhash","p":656},{"i":687,"t":"Lists the validators defined in the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"ibft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#ibft_getvalidatorsbyblocknumber","p":656},{"i":689,"t":"Proposes to add or remove a validator with the specified address. Parameters​ address: string - account address proposal: boolean - true to propose adding validator or false to propose removing validator Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"ibft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#ibft_proposevalidatorvote","p":656},{"i":691,"t":"The PERM API methods provide permissioning functionality. Use these methods for local permissioning only. important The PERM API methods are not enabled by default for JSON-RPC. To enable the PERM API methods, use the --rpc-http-api or --rpc-ws-api CLI options.","s":"PERM (Permissioning) methods","u":"/private-networks/reference/api","h":"#perm-permissioning-methods","p":656},{"i":693,"t":"Adds accounts (participants) to the accounts permission list. Parameters​ addresses: array of strings - list of account addresses note The parameters list contains a list which is why the account addresses are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to add accounts already on the allowlist and including invalid account addresses.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addAccountsToAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_addAccountsToAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_addAccountsToAllowlist","u":"/private-networks/reference/api","h":"#perm_addaccountstoallowlist","p":656},{"i":695,"t":"Adds nodes to the nodes allowlist. To use domain names in enode URLs, ensure you enable DNS support to avoid receiving a request contains an invalid node error. warning Enode URL domain name support is an early access feature. Parameters​ enodes: array of strings - list of enode URLs note The parameters list contains a list which is why the enode URLs are enclosed by double square brackets. Returns​ result: string - Success or error; errors include attempting to add nodes already on the allowlist or including invalid enode URLs. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_addNodesToAllowlist","u":"/private-networks/reference/api","h":"#perm_addnodestoallowlist","p":656},{"i":697,"t":"Lists accounts (participants) in the accounts permissions list. Parameters​ None Returns​ result: array of strings - list of accounts (participants) in the accounts allowlist curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_getAccountsAllowlist\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_getAccountsAllowlist\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x0000000000000000000000000000000000000009\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462033\" ] }","s":"perm_getAccountsAllowlist","u":"/private-networks/reference/api","h":"#perm_getaccountsallowlist","p":656},{"i":699,"t":"Lists nodes in the nodes allowlist. Parameters​ None Returns​ result: array of strings - enode URLs of nodes in the nodes allowlist curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_getNodesAllowlist\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_getNodesAllowlist\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305\", \"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\" ] }","s":"perm_getNodesAllowlist","u":"/private-networks/reference/api","h":"#perm_getnodesallowlist","p":656},{"i":701,"t":"Reloads the accounts and nodes allowlists from the permissions configuration file. Parameters​ None Returns​ result: string - Success, or error if the permissions configuration file is not valid curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_reloadPermissionsFromFile\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_reloadPermissionsFromFile\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_reloadPermissionsFromFile","u":"/private-networks/reference/api","h":"#perm_reloadpermissionsfromfile","p":656},{"i":703,"t":"Removes accounts (participants) from the accounts permissions list. Parameters​ addresses: array of strings - list of account addresses note The parameters list contains a list which is why the account addresses are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to remove accounts not on the allowlist and including invalid account addresses.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_removeAccountsFromAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_removeAccountsFromAllowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032\", \"0xb9b81ee349c3807e46bc71aa2632203c5b462034\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_removeAccountsFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removeaccountsfromallowlist","p":656},{"i":705,"t":"Removes nodes from the nodes allowlist. Parameters​ enodes: array of strings - list of enode URLs note The parameters list contains a list which is why the enode URLs are enclosed by double square brackets. Returns​ result: string - Success or error (errors include attempting to remove nodes not on the allowlist and including invalid enode URLs.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_removeNodesFromAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"perm_removeNodesFromAllowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"perm_removeNodesFromAllowlist","u":"/private-networks/reference/api","h":"#perm_removenodesfromallowlist","p":656},{"i":707,"t":"The PRIV API methods provide functionality for private transactions and privacy groups. note The PRIV API methods are not enabled by default for JSON-RPC. To enable the PRIV API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"PRIV methods","u":"/private-networks/reference/api","h":"#priv-methods","p":656},{"i":709,"t":"Invokes a private contract function locally and does not change the privacy group state. For private contracts, priv_call is the same as eth_call for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - return value of the executed contract curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=\", {\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"data\": \"0x3fa4f245\"}, \"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=\", {\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"data\": \"0x3fa4f245\"}, \"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x0000000000000000000000000000000000000000000000000000000000000001\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block {number call (data : {from : \\\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\\", to: \\\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\\", data :\\\"0x12a7b914\\\"}){data status}}}\"}' http://localhost:8547/graphql { block { number call(data: {from: \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data: \"0x12a7b914\"}) { data status } } } { \"data\": { \"block\": { \"number\": 17449, \"call\": { \"data\": \"0x\", \"status\": 1 } } } }","s":"priv_call","u":"/private-networks/reference/api","h":"#priv_call","p":656},{"i":711,"t":"Creates a group of nodes, specified by their Tessera public key. Parameters​ options: object - request options object with the following fields: addresses: array of strings - list of nodes specified by Tessera public keys name: string - (optional) privacy group name description: string - (optional) privacy group description Returns​ result: string - privacy group ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"priv_createPrivacyGroup\", \"params\": [{\"addresses\":[\"sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=\",\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\"],\"name\":\"Group A\",\"description\":\"Description Group A\"}],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\": \"priv_createPrivacyGroup\", \"params\": [{\"addresses\":[\"sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=\",\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\"],\"name\":\"Group A\",\"description\":\"Description Group A\"}],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\" }","s":"priv_createPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_createprivacygroup","p":656},{"i":713,"t":"Returns the state root of the specified privacy group at the specified block. Parameters​ privacyGroupId: string - 32-byte privacy Group ID blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - 32-byte state root curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_debugGetStateRoot\",\"params\":[\"xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=\",\"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_debugGetStateRoot\",\"params\":[\"xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=\",\"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\" }","s":"priv_debugGetStateRoot","u":"/private-networks/reference/api","h":"#priv_debuggetstateroot","p":656},{"i":715,"t":"Deletes the specified privacy group. Parameters​ privacyGroupId: string - privacy group ID Returns​ result: string - deleted privacy group ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_deletePrivacyGroup\",\"params\":[\"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_deletePrivacyGroup\",\"params\":[\"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=\" }","s":"priv_deletePrivacyGroup","u":"/private-networks/reference/api","h":"#priv_deleteprivacygroup","p":656},{"i":717,"t":"Distributes a signed, RLP encoded private transaction. tip If you want to sign the privacy marker transaction outside of Besu, use priv_distributeRawTransaction instead of eea_sendRawTransaction. Parameters​ transaction: string - signed RLP-encoded private transaction Returns​ result: string - 32-byte enclave key (the enclave key is a pointer to the private transaction in Tessera.) curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_distributeRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_distributeRawTransaction\",\"params\": [\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b\" }","s":"priv_distributeRawTransaction","u":"/private-networks/reference/api","h":"#priv_distributerawtransaction","p":656},{"i":719,"t":"Returns a list of privacy groups containing only the listed members. For example, if the listed members are A and B, a privacy group containing A, B, and C is not returned. Parameters​ members: array of strings - members specified by Tessera public keys Returns​ result: array of objects - privacy group objects containing only the specified members; privacy groups are EEA-compliant or Besu-extended with types: LEGACY for EEA-compliant groups. PANTHEON for Besu-extended groups. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_findPrivacyGroup\",\"params\": [[\"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"]],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_findPrivacyGroup\",\"params\": [[\"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"]],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"privacyGroupId\": \"GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=\", \"name\": \"Group B\", \"description\": \"Description of Group B\", \"type\": \"PANTHEON\", \"members\": [ \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\" ] } ] }","s":"priv_findPrivacyGroup","u":"/private-networks/reference/api","h":"#priv_findprivacygroup","p":656},{"i":721,"t":"Returns the code of the private smart contract at the specified address. Compiled smart contract code is stored as a hexadecimal value. Parameters​ privacyGroupId: string - 32-byte privacy Group ID address: string - 20-byte contract address blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - code stored at the specified address curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getCode\",\"params\":[\"1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=\", \"0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201\", \"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getCode\",\"params\":[\"1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=\", \"0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201\", \"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" }","s":"priv_getCode","u":"/private-networks/reference/api","h":"#priv_getcode","p":656},{"i":723,"t":"Returns the private transaction count for the specified account and group of sender and recipients. ::caution important If sending more than one transaction to be mined in the same block (that is, you are not waiting for the transaction receipt), you must calculate the private transaction nonce outside Besu instead of using priv_getEeaTransactionCount. ::: Parameters​ address: string - account address sender: string - base64-encoded Tessera address of the sender recipients: array of strings - base64-encoded Tessera addresses of recipients Returns​ result: string - integer representing the number of private transactions sent from the address to the specified group of sender and recipients curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getEeaTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=\", [\"KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=\",\"eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg=\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getEeaTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=\", [\"KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=\",\"eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg=\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"priv_getEeaTransactionCount","u":"/private-networks/reference/api","h":"#priv_geteeatransactioncount","p":656},{"i":725,"t":"Polls the specified filter for a private contract and returns an array of changes that have occurred since the last poll. Filters for private contracts can only be created by priv_newFilter so unlike eth_getFilterChanges, priv_getFilterChanges always returns an array of log objects or an empty list. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterId: string - filter ID Returns​ result: array of objects - list of log objects, or an empty list if nothing has changed since the last poll curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterChanges\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterChanges\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d0\", \"blockHash\": \"0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb\", \"transactionHash\": \"0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getFilterChanges","u":"/private-networks/reference/api","h":"#priv_getfilterchanges","p":656},{"i":727,"t":"Returns an array of logs for the specified filter for a private contract. For private contracts, priv_getFilterLogs is the same as eth_getFilterLogs for public contracts except there's no automatic log bloom caching for private contracts. note priv_getFilterLogs is only used for filters created with priv_newFilter. To specify a filter object and get logs without creating a filter, use priv_getLogs. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterId: string - filter ID Returns​ result: array of objects - list of log objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterLogs\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getFilterLogs\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x493\", \"blockHash\": \"0xd9cb3a852e1e02c95f035a2e32d57f82c10cab61faa3e8f5c010adf979bb4786\", \"transactionHash\": \"0x78866dc51fdf189d8cca74f6a8fe54f172348fbd2163bbe80fa8b106cfc7deb4\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d0\", \"blockHash\": \"0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb\", \"transactionHash\": \"0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88\", \"transactionIndex\": \"0x0\", \"address\": \"0x991cc548c154b2953cc48c02f782e1314097dfbb\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getFilterLogs","u":"/private-networks/reference/api","h":"#priv_getfilterlogs","p":656},{"i":729,"t":"Returns an array of logs matching a specified filter object. For private contracts, priv_getLogs is the same as eth_getLogs for public contracts except there is no automatic log bloom caching for private contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterOptions: object - filter options object Returns​ result: array of objects - list of log objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_getLogs\",\"params\":[\"vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x630c507ff633312087dc33c513b66276abcd2fc3\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_getLogs\",\"params\":[\"vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x630c507ff633312087dc33c513b66276abcd2fc3\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x342\", \"blockHash\": \"0xf5954f068fa2f2f7741281e8c753a8e92047e27ab3c4971836d2c89fab86d92b\", \"transactionHash\": \"0xa9ba5cffde9d4ad8997c5c4352d5d49eeea0e9def8a4ea69991b8837c49d4e4f\", \"transactionIndex\": \"0x0\", \"address\": \"0x630c507ff633312087dc33c513b66276abcd2fc3\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x383\", \"blockHash\": \"0x91b73a47d53e3a88d62ed091a89a4be7557ad91b552e7ff7d86bf78977d5d45d\", \"transactionHash\": \"0xc2a185faf00e87434e55b7f70cc4c38be354c2128b4b96b5f5def0b54a2173ec\", \"transactionIndex\": \"0x0\", \"address\": \"0x630c507ff633312087dc33c513b66276abcd2fc3\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ] }","s":"priv_getLogs","u":"/private-networks/reference/api","h":"#priv_getlogs","p":656},{"i":731,"t":"Returns the address of the privacy precompiled contract. The address is derived and based on the value of the privacy-flexible-groups-enabled option. Parameters​ None Returns​ result: string - address of the privacy precompile curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivacyPrecompileAddress\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivacyPrecompileAddress\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x000000000000000000000000000000000000007e\" }","s":"priv_getPrivacyPrecompileAddress","u":"/private-networks/reference/api","h":"#priv_getprivacyprecompileaddress","p":656},{"i":733,"t":"Returns the private transaction if you are a participant, otherwise, null. Parameters​ transaction: string - transaction hash returned by eea_sendRawTransaction. Returns​ result: object - private transaction object, or null if not a participant in the private transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivateTransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getPrivateTransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x2dc6c0\", \"gasPrice\": \"0x0\", \"hash\": \"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498\", \"input\": \"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610221806100606000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f2451461005c5780636057361d1461008757806367e404ce146100b4575b600080fd5b34801561006857600080fd5b5061007161010b565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100b260048036038101908080359060200190929190505050610115565b005b3480156100c057600080fd5b506100c96101cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600254905090565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a18060028190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050905600a165627a7a723058208efaf938851fb2d235f8bf9a9685f149129a30fe0f4b20a6c1885dc02f639eba0029\", \"nonce\": \"0x0\", \"to\": null, \"value\": \"0x0\", \"v\": \"0xfe8\", \"r\": \"0x654a6a9663ca70bb13e27cca14b3777cc92da184e19a151cdeef2ccbbd5c6405\", \"s\": \"0x5dd4667b020c8a5af7ae28d4c3126f8dcb1187f49dcf0de9d7a39b1651892eef\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privateFor\": [\"g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=\"], \"restriction\": \"restricted\" } }","s":"priv_getPrivateTransaction","u":"/private-networks/reference/api","h":"#priv_getprivatetransaction","p":656},{"i":735,"t":"Returns the private transaction count for specified account and privacy group. important If sending more than one transaction to be mined in the same block (that is, you are not waiting for the transaction receipt), you must calculate the private transaction nonce outside Besu instead of using priv_getTransactionCount. Parameters​ address: string - account address privacyGroupId: string - privacy group ID Returns​ result: string - integer representing the number of private transactions sent from the address to the specified privacy group curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionCount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M=\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"priv_getTransactionCount","u":"/private-networks/reference/api","h":"#priv_gettransactioncount","p":656},{"i":737,"t":"Returns information about the private transaction after mining the transaction. Receipts for pending transactions are not available. Parameters​ transaction: string - 32-byte hash of a transaction Returns​ result: object - private Transaction receipt object, or null if no receipt found curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionReceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"priv_getTransactionReceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": \"0x493b76031593402e24e16faa81f677b58e2d53f3\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"logs\": [], \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0x36219e92b5f53d4150aa9ef7d2d793118cced523de6724100da5b534e3ceb4b8\", \"transactionIndex\": \"0x0\", \"output\": \"0x6080604052600436106049576000357c010000000000000000000000000000000000000000000 0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059 57600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b 50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b8060008190555050560 0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029\", \"commitmentHash\": \"0x79b9e6b0856db398ad7dc208f15b1d38c0c0b0c5f99e4a443a2c5a85510e96a5\", \"status\": \"0x1\", \"privateFrom\": \"negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=\", \"privacyGroupId\": \"cD636RZlcqVSpoxT/ExbkWQfBO7kPAZO0QlWHErNSL8=\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" } }","s":"priv_getTransactionReceipt","u":"/private-networks/reference/api","h":"#priv_gettransactionreceipt","p":656},{"i":739,"t":"Creates a log filter for a private contract. To poll for logs associated with the created filter, use priv_getFilterChanges. To get all logs associated with the filter, use priv_getFilterLogs. For private contracts, priv_newFilter is the same as eth_newFilter for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy Group ID filterOptions: object - filter options object note fromBlock and toBlock in the filter options object default to latest. Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_newFilter\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_newFilter\",\"params\": [\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",{\"fromBlock\": \"earliest\",\"toBlock\": \"latest\",\"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"],\"topics\": [\"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\"]}],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4a35b92809d73f4f53a2355d62125442\" }","s":"priv_newFilter","u":"/private-networks/reference/api","h":"#priv_newfilter","p":656},{"i":741,"t":"Provides a transaction trace for a private transaction. Parameters​ privacyGroupId: string - the privacy group ID associated with the transaction transactionHash: string - the hash of the private transaction to trace Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction. If revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"priv_traceTransaction\",\"params\": [\"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", {\"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\"}],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"priv_traceTransaction\", \"params\": [ \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", { \"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\" } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"creationMethod\": \"create\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gas\": \"0xff2e26\", \"init\": \"0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"code\": \"0x\", \"gasUsed\": \"0x1c39\" }, \"subtraces\": 2, \"traceAddress\": [], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"create\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb2ea9\", \"input\": \"0x\", \"to\": \"0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x138e\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" }, { \"action\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"balance\": \"0x0\", \"refundAddress\": \"0x0000000000000000000000000000000000000000\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0, 0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"suicide\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb18a5\", \"input\": \"0x\", \"to\": \"0x00a0000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x30b\", \"output\": \"0x\" }, \"subtraces\": 0, \"traceAddress\": [1], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" } ], \"id\": 1, \"privacyGroupId\": \"Fhya8sZ1SKKH9jMNcZrE2I3i2RJSJIQtrOaZkF8WQcM=\" }","s":"priv_traceTransaction","u":"/private-networks/reference/api","h":"#priv_tracetransaction","p":656},{"i":743,"t":"Uninstalls a filter for a private contract with the specified ID. When a filter is no longer required, call this method. Filters time out when not requested by priv_getFilterChanges or priv_getFilterLogs for 10 minutes. For private contracts, priv_uninstallFilter is the same as eth_uninstallFilter for public contracts. Parameters​ privacyGroupId: string - 32-byte privacy group ID filterId: string - filter ID Returns​ result: boolean - indicates if the filter is successfully uninstalled curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\",\"method\": \"priv_uninstallFilter\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1}' http://127.0.0.1:8545 {\"jsonrpc\": \"2.0\",\"method\": \"priv_uninstallFilter\",\"params\":[\"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\",\"0x4a35b92809d73f4f53a2355d62125442\"],\"id\": 1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"priv_uninstallFilter","u":"/private-networks/reference/api","h":"#priv_uninstallfilter","p":656},{"i":745,"t":"The QBFT API methods provide access to the QBFT consensus engine. note The QBFT API methods are not enabled by default for JSON-RPC. To enable the QBFT API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"QBFT methods","u":"/private-networks/reference/api","h":"#qbft-methods","p":656},{"i":747,"t":"Discards a proposal to add or remove a validator with the specified address. Parameters​ address: string - 20-byte address of proposed validator Returns​ result: boolean - indicates if the proposal is discarded curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_discardValidatorVote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"qbft_discardValidatorVote","u":"/private-networks/reference/api","h":"#qbft_discardvalidatorvote","p":656},{"i":749,"t":"Returns votes cast in the current epoch. Parameters​ None Returns​ result: map of strings to booleans - map of account addresses to corresponding boolean values indicating the vote for each account; if true, the vote is to add a validator. If false, the proposal is to remove a validator. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getPendingVotes\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getPendingVotes\",\"params\":[], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\": true, \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\": true } }","s":"qbft_getPendingVotes","u":"/private-networks/reference/api","h":"#qbft_getpendingvotes","p":656},{"i":751,"t":"Provides the following validator metrics for the specified range: Number of blocks from each validator Block number of the last block proposed by each validator (if any proposed in the specified range) All validators present in the last block of the range Parameters​ fromBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. If you specify: No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less than 100 blocks. Only the first parameter, the call provides metrics for all blocks from the block specified to the latest block. Returns​ result: array of objects - list of validator objects note The proposer of the genesis block has address 0x0000000000000000000000000000000000000000. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getSignerMetrics\",\"params\":[\"1\", \"100\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"address\": \"0x7ffc57839b00206d1ad20c69a1981b489f772031\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x61\" }, { \"address\": \"0x42eb768f2244c8811c63729a21a3569731535f06\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x63\" }, { \"address\": \"0xb279182d99e65703f0076e4812653aab85fca0f0\", \"proposedBlockCount\": \"0x21\", \"lastProposedBlockNumber\": \"0x62\" } ] }","s":"qbft_getSignerMetrics","u":"/private-networks/reference/api","h":"#qbft_getsignermetrics","p":656},{"i":753,"t":"Lists the validators defined in the specified block. Parameters​ block: string - 32-byte block hash Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockHash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"qbft_getValidatorsByBlockHash","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblockhash","p":656},{"i":755,"t":"Lists the validators for the specified block. For all blocks up to the chain head block this method returns the validators that were used at the time the block was produced. Use blockNumber to get the list of validators for that block. For the chain head block there are two validator lists associated with it: The validators that were used at the time the block was produced. This list is returned by passing latest as the input parameter. The validators that will be used to produce the next block. This list is returned by passing pending as the input parameter. In most instances the two lists for the chain head block are the same. However, when voting has completed to add or remove a validator, the validators that will be used to produce the next block are different. Comparing the two lists can be helpful when diagnosing a stalled chain. note When the validator list changes, an INFO log message displays, showing the previous list of validators and the new list of validators. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter Returns​ result: array of strings - list of validator addresses curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x42d4287eac8078828cf5f3486cfe601a275a49a5\", \"0xb1b2bc9582d2901afdc579f528a35ca41403fa85\", \"0xef1bfb6a12794615c9b0b5a21e6741f01e570185\" ] }","s":"qbft_getValidatorsByBlockNumber","u":"/private-networks/reference/api","h":"#qbft_getvalidatorsbyblocknumber","p":656},{"i":757,"t":"Proposes to add or remove a validator with the specified address. Parameters​ address: string - account address proposal: boolean - true to propose adding validator or false to propose removing validator Returns​ result: boolean - true curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"qbft_proposeValidatorVote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",true], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true } *[EEA]: Enterprise Ethereum Alliance","s":"qbft_proposeValidatorVote","u":"/private-networks/reference/api","h":"#qbft_proposevalidatorvote","p":656},{"i":759,"t":"A private network provides a configurable network for testing. This private network uses the Clique (proof of authority) consensus protocol. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.","s":"Create a private network using Clique","u":"/private-networks/tutorials/clique","h":"","p":758},{"i":761,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/clique","h":"#prerequisites","p":758},{"i":763,"t":"Listed on the right-hand side of the page are the steps to create a private network using Clique.","s":"Steps","u":"/private-networks/tutorials/clique","h":"#steps","p":758},{"i":765,"t":"Each node requires a data directory for the blockchain data. When the node starts, Besu saves the node key in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: Clique-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/clique","h":"#1-create-directories","p":758},{"i":767,"t":"In Clique networks, you must include the address of at least one initial signer in the genesis file. For this Clique network, we'll use Node-1 as the initial signer. This requires obtaining the address for Node-1. To get the address for Node-1, in the Node-1 directory, use the public-key export-address subcommand to write the node address to the specified file (node1Address in this example). MacOS Windows besu --data-path=data public-key export-address --to=data/node1Address besu --data-path=data public-key export-address --to=data\\node1Address","s":"2. Get the address for Node-1","u":"/private-networks/tutorials/clique","h":"#2-get-the-address-for-node-1","p":758},{"i":769,"t":"The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The Clique genesis file includes the address of Node-1 as the initial signer in the extraData field. All nodes in a network must use the same genesis file. Copy the following genesis definition to a file called cliqueGenesis.json and save it in the Clique-Network directory: { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"clique\": { \"blockperiodseconds\": 15, \"epochlength\": 30000 } }, \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0xa00000\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"nonce\": \"0x0\", \"timestamp\": \"0x5c51a607\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. In extraData, replace with the address for Node-1, excluding the 0x prefix. { ... \"extraData\":\"0x0000000000000000000000000000000000000000000000000000000000000000b9b81ee349c3807e46bc71aa2632203c5b4620340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", ... } warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"3. Create the genesis file","u":"/private-networks/tutorials/clique","h":"#3-create-the-genesis-file","p":758},{"i":771,"t":"Start Node-1: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\cliqueGenesis.json --network-id 123 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line enables: The JSON-RPC API using the --rpc-http-enabled option The ETH, NET, and CLIQUE APIs using the --rpc-http-api option All-host access to the HTTP JSON-RPC API using the --host-allowlist option All-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"4. Start the first node as the bootnode","u":"/private-networks/tutorials/clique","h":"#4-start-the-first-node-as-the-bootnode","p":758},{"i":773,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. The data directory for Node-2 using the --data-path option. Other options as for Node-1.","s":"5. Start Node-2","u":"/private-networks/tutorials/clique","h":"#5-start-node-2","p":758},{"i":775,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\cliqueGenesis.json --bootnodes= --network-id 123 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,CLIQUE --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The data directory for Node-3 using the --data-path option. The bootnode as for Node-2. Other options as for Node-1.","s":"6. Start Node-3","u":"/private-networks/tutorials/clique","h":"#6-start-node-3","p":758},{"i":777,"t":"Start another terminal, use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 has two peers (Node-2 and Node-3): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" }","s":"7. Confirm the private network is working","u":"/private-networks/tutorials/clique","h":"#7-confirm-the-private-network-is-working","p":758},{"i":779,"t":"Look at the logs displayed to confirm Node-1 is producing blocks and Node-2 and Node-3 are importing blocks. Use the Clique API to add Node-2 or Node-3 as a signer. note To add Node-2 or Node-3 as a signer you need the node address as when specifying Node-1 as the initial signer. Import accounts to MetaMask and send transactions, as described in the Quickstart tutorial. info Besu doesn't support private key management.","s":"Next steps","u":"/private-networks/tutorials/clique","h":"#next-steps","p":758},{"i":781,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the Clique network in the future, start from 4. Start First Node as Bootnode.","s":"Stop the nodes","u":"/private-networks/tutorials/clique","h":"#stop-the-nodes","p":758},{"i":783,"t":"This tutorial shows you how to deploy smart contracts as transactions to a network.","s":"Deploy smart contracts to an Ethereum chain","u":"/private-networks/tutorials/contracts","h":"","p":782},{"i":785,"t":"This tutorial requires a local blockchain network. You can use the Developer Quickstart to rapidly generate one. If deploying a private contract, enable privacy on the network (public contracts can also be deployed on privacy-enabled networks).","s":"Prerequisites","u":"/private-networks/tutorials/contracts","h":"#prerequisites","p":782},{"i":787,"t":"To deploy a smart contract using eth_sendSignedTransaction, use an account's private key to sign and serialize the transaction, and send the API request. This example uses the web3js library to make the API calls. Using the SimpleStorage.sol smart contract as an example, create a new file called compile.js with the following content: compile.js const fs = require(\"fs\").promises; const solc = require(\"solc\"); async function main() { // Load the contract source code const sourceCode = await fs.readFile(\"SimpleStorage.sol\", \"utf8\"); // Compile the source code and retrieve the ABI and bytecode const { abi, bytecode } = compile(sourceCode, \"SimpleStorage\"); // Store the ABI and bytecode into a JSON file const artifact = JSON.stringify({ abi, bytecode }, null, 2); await fs.writeFile(\"SimpleStorage.json\", artifact); } function compile(sourceCode, contractName) { // Create the Solidity Compiler Standard Input and Output JSON const input = { language: \"Solidity\", sources: { main: { content: sourceCode } }, settings: { outputSelection: { \"*\": { \"*\": [\"abi\", \"evm.bytecode\"] } } }, }; // Parse the compiler output to retrieve the ABI and bytecode const output = solc.compile(JSON.stringify(input)); const artifact = JSON.parse(output).contracts.main[contractName]; return { abi: artifact.abi, bytecode: artifact.evm.bytecode.object, }; } main().then(() => process.exit(0)); Run compile.js to get the smart contract's output JSON: node compile.js Run solc to get the contract's bytecode and ABI: solc SimpleStorage.sol --bin --abi Once you have the bytecode and ABI, you can rename the output files to make them easier to use; this tutorial refers to them as SimpleStorage.bin and SimpleStorage.abi. Create a new file named public_tx.js to send the transaction (or run the following commands in a JavaScript console). The Developer Quickstart provides an example of a public transaction script. const web3 = new Web3(host); // use an existing account, or make an account const privateKey = \"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\"; const account = web3.eth.accounts.privateKeyToAccount(privateKey); // read in the contracts const contractJsonPath = path.resolve(__dirname, \"SimpleStorage.json\"); const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); const contractAbi = contractJson.abi; const contractBinPath = path.resolve(__dirname, \"SimpleStorage.bin\"); const contractBin = fs.readFileSync(contractBinPath); // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = \"000000000000000000000000000000000000000000000000000000000000002F\"; // get txnCount for the nonce value const txnCount = await web3.eth.getTransactionCount(account.address); const rawTxOptions = { nonce: web3.utils.numberToHex(txnCount), from: account.address, to: null, //public tx value: \"0x00\", data: \"0x\" + contractBin + contractConstructorInit, // contract binary appended with initialization value gasPrice: \"0x0\", //ETH per unit of gas gasLimit: \"0x24A22\", //max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const tx = new Tx(rawTxOptions); console.log(\"Signing transaction...\"); tx.sign(privateKey); console.log(\"Sending transaction...\"); var serializedTx = tx.serialize(); const pTx = await web3.eth.sendSignedTransaction( \"0x\" + serializedTx.toString(\"hex\").toString(\"hex\"), ); console.log(\"tx transactionHash: \" + pTx.transactionHash); console.log(\"tx contractAddress: \" + pTx.contractAddress); rawTxOptions contains the following fields: nonce - the number of transactions sent from an address. from - address of the sending account. For example 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73. to - address of the receiver. To deploy a contract, set to null. gas - amount of gas provided by the sender for the transaction. gasPrice - price for each unit of gas the sender is willing to pay. data - binary of the contract (in this example there's also a constructor initialization value, so we append that to the binary value). value - amount of Ether/Wei transferred from the sender to the recipient. Run the public_tx.js to send the transaction: node public_tx.js This example code creates the transaction tx, signs it with the private key of the account, serializes it, then calls eth_sendSignedTransaction to deploy the contract.","s":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendsignedtransaction","p":782},{"i":789,"t":"You can use eth_sendTransaction as an alternative to eth_sendSignedTransaction. However, Besu does not support the eth_sendTransaction API call and keeps account management separate for stronger security. Configure Web3Signer with your Besu node to make the eth_sendTransaction API call. Pass the following parameters to the eth_sendTransaction call to Web3Signer. Web3Signer converts the request to an eth_sendRawTransaction call that Besu uses: to - address of the receiver. To deploy a contract, set to null. from - address of the sender account. For example 0x9b790656b9ec0db1936ed84b3bea605873558198. gas - amount of gas provided by the sender for the transaction gasPrice - price for each unit of gas the sender is willing to pay data - one of the following: For contract deployments (this use case) - compiled code of the contract For contract interactions - hash of the invoked method signature and encoded parameters (see Ethereum Contract ABI) For simple ether transfers - empty 'eth_sendTransaction' parameters params: { \"to\": null, \"from\": \"0x9b790656b9ec0db1936ed84b3bea605873558198\", \"gas\": \"0x76c0\", \"gasPrice\": \"0x9184e72a000\", \"data\": \"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\" } Make the request using eth_sendTransaction: 'eth_sendTransaction' curl HTTP request curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{\"from\":\"0x9b790656b9ec0db1936ed84b3bea605873558198\", \"to\":null, \"gas\":\"0x7600\",\"gasPrice\":\"0x9184e72a000\", \"data\":\"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\"}], \"id\":1}' ","s":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts","h":"#use-eth_sendtransaction","p":782},{"i":791,"t":"To deploy a private contract to another node or privacy group member, use the web3js-quorum library and the eea_sendRawTransaction API call. You must use this API call instead of eth_sendTransaction because Besu keeps account management separate for stronger security. The Developer Quickstart provides an example of a private transaction script. This example uses the web3js library to make the API calls. Use web3.priv.generateAndSendRawTransaction by running the following commands in a JavaScript console, or by including them in a private_tx.js file and running node private_tx.js: 'private_tx.js' using 'web3.priv.generateAndSendRawTransaction' const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const bytecode = \"608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033\"; // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = \"000000000000000000000000000000000000000000000000000000000000002F\"; const chainId = 1337; const web3 = new Web3(clientUrl); const web3quorum = new Web3Quorum(web3, chainId); const txOptions = { data: \"0x\" + bytecode + contractConstructorInit, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; console.log(\"Creating contract...\"); const txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions); console.log(\"Getting contractAddress from txHash: \", txHash); const privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt( txHash, ); console.log(\"Private Transaction Receipt: \", privateTxReceipt); return privateTxReceipt; txOptions contains the following field: data - compiled code of the contract (in this example there's also a constructor initialization value, so we append that to the bytecode). The deployment process includes creating the client as in the previous examples, but rather than deploying the contract with to: null, it instead sends the transaction with privateFor: [memberPublicKey/s]. Once you make the API call, you receive a transactionHash, which you can use to get a transactionReceipt containing the contract's address. note This example doesn't use a privacy group and makes a simple node-to-node transaction. To use a privacy group: Create the privacy group using the public keys of the nodes in the group. Specify the privacyGroupId instead of the privateFor option in the txOptions above and then send the transaction. The Developer Quickstart provides an example of a private transaction with a privacy group.","s":"Use eea_sendRawTransaction for private contracts with web3js-quorum","u":"/private-networks/tutorials/contracts","h":"#use-eea_sendrawtransaction-for-private-contracts-with-web3js-quorum","p":782},{"i":793,"t":"You can get started with the Developer Quickstart to rapidly generate local blockchain networks. This tutorial shows you how to interact with smart contracts that have been deployed to a network.","s":"Interact with deployed smart contracts","u":"/private-networks/tutorials/contracts/interact","h":"","p":792},{"i":795,"t":"A network with a deployed smart contract as in the deploying smart contracts tutorial","s":"Prerequisites","u":"/private-networks/tutorials/contracts/interact","h":"#prerequisites","p":792},{"i":797,"t":"This tutorial uses the SimpleStorage.sol contract: pragma solidity ^0.7.0; contract SimpleStorage { uint public storedData; constructor(uint initVal) public { storedData = initVal; } function set(uint x) public { storedData = x; } function get() view public returns (uint retVal) { return storedData; } } Once the contract is deployed, you can perform a read operation using the get function call and a write operation using the set function call. This tutorial uses the web3js library to interact with the contract. A full example of these calls can be found in the Developer Quickstart.","s":"Interact with public contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-public-contracts","p":792},{"i":799,"t":"To perform a read operation, you need the address that the contract was deployed to and the contract's ABI. The contract's ABI can be obtained from compiling the contract; see the deploying smart contracts tutorial for an example. Use the web3.eth.Contract object to create a new instance of the smart contract, then make the get function call from the contract's list of methods, which will return the value stored: async function getValueAtAddress( host, deployedContractAbi, deployedContractAddress, ) { const web3 = new Web3(host); const contractInstance = new web3.eth.Contract( deployedContractAbi, deployedContractAddress, ); const res = await contractInstance.methods.get().call(); console.log(\"Obtained value at deployed contract is: \" + res); return res; }","s":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation","p":792},{"i":801,"t":"To perform a write operation, send a transaction to update the stored value. As with the get call, you need to use the address that the contract was deployed to and the contract's ABI. The account address must correspond to an actual account with some ETH in it to perform the transaction. Because Besu doesn't manage accounts, this address is the address you use in Web3Signer (or equivalent) to manage your accounts. Make the set call passing in your account address, value as the updated value of the contract, and the amount of gas you are willing to spend for the transaction: // You need to use the accountAddress details provided to Besu to send/interact with contracts async function setValueAtAddress( host, accountAddress, value, deployedContractAbi, deployedContractAddress, ) { const web3 = new Web3(host); const contractInstance = new web3.eth.Contract( deployedContractAbi, deployedContractAddress, ); const res = await contractInstance.methods .set(value) .send({ from: accountAddress, gasPrice: \"0xFF\", gasLimit: \"0x24A22\" }); return res; }","s":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation","p":792},{"i":803,"t":"To verify that a value has been updated, perform a get call after a set update call.","s":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value","p":792},{"i":805,"t":"This private contracts example uses the same SimpleStorage.sol contract as in the public contracts example, but it uses the web3js-quorum library and the generateAndSendRawTransaction method to interact with the contract. Both read and write operations are performed using the generateAndSendRawTransaction API call. A full example can be found in the Developer Quickstart.","s":"Interact with private contracts","u":"/private-networks/tutorials/contracts/interact","h":"#interact-with-private-contracts","p":792},{"i":807,"t":"As in the public contracts example, to perform a read operation, you need the address that the contract was deployed to and the contract's ABI. You also need your private and public keys and the recipient's public key. Use the web3.eth.Contract object to create a new instance of the smart contract, extract the signature of function's ABI for the get method, and then use this value as the data parameter for the generateAndSendRawTransaction transaction. The keys remain the same for the sender and recipient, and the to field is the contract's address. Once you make the request, you receive a transactionHash, which you can use to get a transactionReceipt containing the value stored: async function getValueAtAddress( clientUrl, address, contractAbi, fromPrivateKey, fromPublicKey, toPublicKey, ) { const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:22000\")); // eslint-disable-next-line no-underscore-dangle const functionAbi = contract._jsonInterface.find((e) => { return e.name === \"get\"; }); const functionParams = { to: address, data: functionAbi.signature, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( functionParams, ); // console.log(`Transaction hash: ${transactionHash}`); const result = await web3quorum.priv.waitForTransactionReceipt( transactionHash, ); console.log( \"\" + nodeName + \" value from deployed contract is: \" + result.output, ); return result; }","s":"1. Perform a read operation","u":"/private-networks/tutorials/contracts/interact","h":"#1-perform-a-read-operation-1","p":792},{"i":809,"t":"Performing a write operation is almost the same process as the read operation, except that you encode the new value to the set function's ABI, and then append these arguments to the set function's ABI and use this as the data field: async function setValueAtAddress( clientUrl, address, value, contractAbi, fromPrivateKey, fromPublicKey, toPublicKey, ) { const Web3 = require(\"web3\"); const Web3Quorum = require(\"web3js-quorum\"); const web3 = new Web3Quorum(new Web3(\"http://localhost:22000\")); // eslint-disable-next-line no-underscore-dangle const functionAbi = contract._jsonInterface.find((e) => { return e.name === \"set\"; }); const functionArgs = web3quorum.eth.abi .encodeParameters(functionAbi.inputs, [value]) .slice(2); const functionParams = { to: address, data: functionAbi.signature + functionArgs, privateKey: fromPrivateKey, privateFrom: fromPublicKey, privateFor: [toPublicKey], }; const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( functionParams, ); console.log(`Transaction hash: ${transactionHash}`); const result = await web3quorum.priv.waitForTransactionReceipt( transactionHash, ); return result; }","s":"2. Perform a write operation","u":"/private-networks/tutorials/contracts/interact","h":"#2-perform-a-write-operation-1","p":792},{"i":811,"t":"To verify that a value has been updated, perform a get call after a set update call.","s":"3. Verify an updated value","u":"/private-networks/tutorials/contracts/interact","h":"#3-verify-an-updated-value-1","p":792},{"i":813,"t":"You can get started with the Developer Quickstart to rapidly generate local blockchain networks. This tutorial shows you how to transfer funds (ETH) between accounts in a transaction.","s":"Transfer funds between accounts in a transaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"","p":812},{"i":815,"t":"A private network","s":"Prerequisites","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#prerequisites","p":812},{"i":817,"t":"The simplest way to transfer funds between externally-owned accounts is using eth_sendSignedTransaction. This example uses eth_sendSignedTransaction and one of the test accounts to transfer funds to a newly created account. Do not use the test accounts on Ethereum Mainnet or any production network The private key is publicly displayed, which means the account is not secure. Before making the transaction, check the balances of both accounts to verify the funds transfer after the transaction. const web3 = new Web3(host); // Pre-seeded account with 90000 ETH const privateKeyA = \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\"; const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA); var accountABalance = web3.utils.fromWei( await web3.eth.getBalance(accountA.address), ); console.log(\"Account A has balance of: \" + accountABalance); // Create a new account to transfer ETH to var accountB = web3.eth.accounts.create(); var accountBBalance = web3.utils.fromWei( await web3.eth.getBalance(accountB.address), ); console.log(\"Account B has balance of: \" + accountBBalance); Use the test account address (Account A) for the from parameter, the recipient account address (Account B) for the to parameter, and the amount of ETH to transfer between accounts for the value parameter. Sign the transaction with Account A's private key and send it using eth_sendSignedTransaction. // Send some ETH from A to B const rawTxOptions = { nonce: web3.utils.numberToHex( await web3.eth.getTransactionCount(accountA.address), ), from: accountA.address, to: accountB.address, value: \"0x100\", // Amount of ETH to transfer gasPrice: \"0x0\", // ETH per unit of gas gasLimit: \"0x24A22\", // Max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const tx = new Tx(rawTxOptions); console.log(\"Signing transaction...\"); tx.sign(Buffer.from(accountA.privateKey.substring(2), \"hex\")); console.log(\"Sending transaction...\"); var serializedTx = tx.serialize(); const pTx = await web3.eth.sendSignedTransaction( \"0x\" + serializedTx.toString(\"hex\").toString(\"hex\"), ); console.log(\"tx transactionHash: \" + pTx.transactionHash); Once it completes, you can see the updated balances. // After the transaction, there should be some ETH transferred var accountABalance = await getAccountBalance(host, accountA); console.log(\"Account A has an updated balance of: \" + accountABalance); var accountBBalance = await getAccountBalance(host, accountB); console.log(\"Account B has an updatedbalance of: \" + accountBBalance); } A full example can be found in the Developer Quickstart.","s":"Use eth_sendSignedTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendsignedtransaction","p":812},{"i":819,"t":"An alternative to using eth_sendSignedTransaction is eth_sendTransaction. However, Besu does not support the eth_sendTransaction API call and keeps account management separate for stronger security. Instead, Besu uses Web3Signer to make the eth_sendTransaction API call. Use eth_sendTransaction similarly to using eth_sendSignedTransaction (without the signing step which is done by Web3Signer): const web3 = new Web3(host); // Pre-seeded account with 90000 ETH const privateKeyA = \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\"; const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA); var accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address)); console.log(\"Account A has balance of: \" + accountABalance); // Create a new account to transfer ETH to var accountB = web3.eth.accounts.create(); var accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address)); console.log(\"Account B has balance of: \" + accountBBalance); // Send some ETH from A to B const txOptions = { from: accountA.address, to: accountB.address, value: \"0x100\", // Amount of ETH to transfer gasPrice: \"0x0\", // ETH per unit of gas gasLimit: \"0x24A22\" // Max number of gas units the tx is allowed to use }; console.log(\"Creating transaction...\"); const pTx = await web3.eth.sendTransaction(txOptions); console.log(\"tx transactionHash: \" + pTx.transactionHash); // After the transaction, there should be some ETH transferred var accountABalance = await getAccountBalance(host, accountA); console.log(\"Account A has an updated balance of: \" + accountABalance); var accountBBalance = await getAccountBalance(host, accountB); console.log(\"Account B has an updatedbalance of: \" + accountBBalance); }","s":"Use eth_sendTransaction","u":"/private-networks/tutorials/contracts/transfer-funds","h":"#use-eth_sendtransaction","p":812},{"i":821,"t":"A private network provides a configurable network for testing. By configuring a low difficulty and enabling mining, this allows for fast block creation. You can test multi-block and multi-user scenarios on a private network before moving to one of the public testnets. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall.","s":"Create a private network using Ethash","u":"/private-networks/tutorials/ethash","h":"","p":820},{"i":823,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/ethash","h":"#prerequisites","p":820},{"i":825,"t":"Listed on the right-hand side of the page are the steps to create a private network using Ethash.","s":"Steps","u":"/private-networks/tutorials/ethash","h":"#steps","p":820},{"i":827,"t":"Each node requires a data directory for the blockchain data. When the node starts, Besu saves the node key in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: Private-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/ethash","h":"#1-create-directories","p":820},{"i":829,"t":"The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The genesis file includes entries for configuring the blockchain, such as the mining difficulty and initial accounts and balances. All nodes in a network must use the same genesis file. The network ID defaults to the chainID in the genesis file. The fixeddifficulty enables fast block mining. Copy the following genesis definition to a file called privateNetworkGenesis.json and save it in the Private-Network directory: { \"config\": { \"berlinBlock\": 0, \"ethash\": { \"fixeddifficulty\": 1000 }, \"chainID\": 1337 }, \"nonce\": \"0x42\", \"gasLimit\": \"0x1000000\", \"difficulty\": \"0x10000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Don't use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a genesis file","u":"/private-networks/tutorials/ethash","h":"#2-create-a-genesis-file","p":820},{"i":831,"t":"Start Node-1: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-enabled --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line enables: Mining and specifies the account to pay mining rewards to using the --miner-enabled and --miner-coinbase options. JSON-RPC API using the --rpc-http-enabled option. All-host access to the HTTP JSON-RPC API using the --host-allowlist option. All-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. info The miner coinbase account is one of the accounts defined in the genesis file. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"3. Start the first node as a bootnode","u":"/private-networks/tutorials/ethash","h":"#3-start-the-first-node-as-a-bootnode","p":820},{"i":833,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes= --p2p-port=30304 besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes= --p2p-port=30304 The command line specifies: A different port to Node-1 for P2P discovery using the --p2p-port option. The enode URL of Node-1 using the --bootnodes option. A data directory for Node-2 using the --data-path option. A genesis file as for Node-1.","s":"4. Start Node-2","u":"/private-networks/tutorials/ethash","h":"#4-start-node-2","p":820},{"i":835,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../privateNetworkGenesis.json --bootnodes= --p2p-port=30305 besu --data-path=data --genesis-file=..\\privateNetworkGenesis.json --bootnodes= --p2p-port=30305 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery. A data directory for Node-3 using the --data-path option. A bootnode and genesis file as for Node-2.","s":"5. Start Node-3","u":"/private-networks/tutorials/ethash","h":"#5-start-node-3","p":820},{"i":837,"t":"Start another terminal, use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 (the node running the JSON-RPC service) has two peers (Node-2 and Node-3): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" }","s":"6. Confirm the private network is working","u":"/private-networks/tutorials/ethash","h":"#6-confirm-the-private-network-is-working","p":820},{"i":839,"t":"Import accounts to MetaMask and send transactions as described in the Quickstart tutorial. info Besu doesn't support private key management. Send transactions using eth_sendRawTransaction to send ether or, deploy or invoke contracts. Use the JSON-RPC API. Start a node with the --rpc-ws-enabled option and use the RPC Pub/Sub API.","s":"Next steps","u":"/private-networks/tutorials/ethash","h":"#next-steps","p":820},{"i":841,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the private network in the future, start from 3. Start the first node as a bootnode.","s":"Stop the nodes","u":"/private-networks/tutorials/ethash","h":"#stop-the-nodes","p":820},{"i":843,"t":"This example walks through adding and removing an IBFT 2.0 validator.","s":"Add and remove IBFT 2.0 validators","u":"/private-networks/tutorials/ibft/validators","h":"","p":842},{"i":845,"t":"IBFT 2.0 network as configured in the IBFT 2.0 tutorial","s":"Prerequisites","u":"/private-networks/tutorials/ibft/validators","h":"#prerequisites","p":842},{"i":848,"t":"Create a working directory and a data directory for the new node that needs to be added: mkdir -p Node-5/data","s":"1. Create directories","u":"/private-networks/tutorials/ibft/validators","h":"#1-create-directories","p":842},{"i":850,"t":"Change into the working directory for the new Node-5 and start the node, specifying the Node-1 enode URL as the bootnode: besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30307 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8549 The command line specifies: The data directory for Node-5 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"2. Start the node","u":"/private-networks/tutorials/ibft/validators","h":"#2-start-the-node","p":842},{"i":852,"t":"Copy the address of the node. You can find the address in the logs when starting the new node: 2021-05-28 09:49:00.881+10:00 | main | INFO | DefaultP2PNetwork | Node address 0x90626e6a67445aabf1c0615410d108d4733aa90b Or use the public-key export-address subcommand: Subcommand Output besu --data-path=IBFT-Network/Node-5/data public-key export-address 0x90626e6a67445aabf1c0615410d108d4733aa90b","s":"3. Copy the address of the node","u":"/private-networks/tutorials/ibft/validators","h":"#3-copy-the-address-of-the-node","p":842},{"i":854,"t":"Propose adding the new validator from more than half the number of current validators, using ibft_proposeValidatorVote, specifying the address of the proposed validator and true: curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_proposeValidatorVote\",\"params\":[\"0x90626e6a67445aabf1c0615410d108d4733aa90b\", true], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true } Repeat the proposal process for this candidate node from at least two of the other nodes.","s":"4. Propose adding the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#4-propose-adding-the-new-validator","p":842},{"i":856,"t":"Verify that the new validator is now in the list of validators using ibft_getValidatorsByBlockNumber: curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' http://127.0.0.1:8545 [ \"0x189d23d201b03ae1cf9113672df29a5d672aefa3\", \"0x2aabbc1bb9bacef60a09764d1a1f4f04a47885c1\", \"0x44b07d2c28b8ed8f02b45bd84ac7d9051b3349e6\", \"0x4c1ccd426833b9782729a212c857f2f03b7b4c0d\", \"0x90626e6a67445aabf1c0615410d108d4733aa90b\" ] The list of validators contains 5 addresses now.","s":"5. Verify the addition of the new validator","u":"/private-networks/tutorials/ibft/validators","h":"#5-verify-the-addition-of-the-new-validator","p":842},{"i":858,"t":"The process for removing a validator is similar to adding a validator starting from step 2, except you specify false as the second parameter of ibft_proposeValidatorVote.","s":"Remove a validator","u":"/private-networks/tutorials/ibft/validators","h":"#remove-a-validator","p":842},{"i":860,"t":"Use the reference implementations to install private networks using Kubernetes (K8s). Reference implementations are available using: Helm. Helmfile. kubectl. Familiarize yourself with the reference implementations and customize them for your requirements.","s":"Deploy Besu using Kubernetes","u":"/private-networks/tutorials/kubernetes","h":"","p":859},{"i":862,"t":"Quorum-Kubernetes is a repository containing Kubernetes manifests and Helm charts that you can customize and deploy on a local cluster or in the cloud. important We recommend starting with the playground directory and working through the example setups before moving to the Helm charts directory. The helm directory contains charts for the various components, and each chart has a cluster map with features that you can toggle. cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) Setting cluster.cloudNativeServices: true stores keys in AWS Secrets Manager or Azure Key Vault instead of Kubernetes Secrets, and will also make use of AWS IAM or Azure Managed Identities for the pods.","s":"Quorum-Kubernetes","u":"/private-networks/tutorials/kubernetes","h":"#quorum-kubernetes","p":859},{"i":864,"t":"The repository's helm charts support on-premise and cloud providers such as AWS, Azure, GCP, IBM etc. You can configure the provider in the values.yml file of the respective charts by setting cluster.provider to local, aws, or azure. If you use GCP, IBM etc., please set cluster.provider: local and cluster.cloudNativeServices: false. The repository also contains Azure ARM templates and AWS eksctl templates to deploy the required base infrastructure.","s":"Cloud support","u":"/private-networks/tutorials/kubernetes","h":"#cloud-support","p":859},{"i":866,"t":"When using multi-clusters, Kubernetes load balancers disallow TCP and UDP traffic on the same port, which inhibits discovery working natively for each pod. Use the following solutions to mitigate this limitation: Disallow discovery and use static nodes to allow only TCP traffic. This isn't an issue for load balancers or exposing nodes publicly. If you need to use discovery, use something such as CNI which is supported by all major cloud providers, and the cloud templates already have CNI implemented.","s":"Limitations","u":"/private-networks/tutorials/kubernetes","h":"#limitations","p":859},{"i":868,"t":"With the traditional kubenet networking mode, nodes get an IP from the virtual network subnet. Each node in turn uses NAT to configure the pods so that they reach other pods on the virtual network. This limits where they can reach but also more specifically what can reach them. For example, an external VM which must have custom routes does not scale well. CNI, on the other hand, allows every pod to get a unique IP directly from the virtual subnet which removes this restriction. Therefore, it has a limit on the maximum number of pods that can be spun up, so you must plan ahead to avoid IP exhaustion.","s":"CNI","u":"/private-networks/tutorials/kubernetes","h":"#cni","p":859},{"i":870,"t":"You must enable CNI to use multi-cluster, or to connect external nodes to an existing Kubernetes cluster. To connect multiple clusters, they must each have different CIDR blocks to ensure no conflicts, and the first step is to peer the VPCs or VNets together and update the route tables. From that point on you can use static nodes and pods to communicate across the cluster. The same setup also works to connect external nodes and business applications from other infrastructure, either in the cloud or on premise.","s":"Multi-cluster","u":"/private-networks/tutorials/kubernetes","h":"#multi-cluster","p":859},{"i":873,"t":"In Kubernetes, namespaces provide a mechanism for isolating groups of resources within a single cluster. Both namespaces and resources (for example, Stateful Sets or Services) within a namespace must be unique, but resources across namespaces don't need to be. note Namespace-based scoping is not applicable for cluster-wide objects (for example, Storage Class or Persistent Volumes).","s":"Namespaces","u":"/private-networks/tutorials/kubernetes","h":"#namespaces","p":859},{"i":875,"t":"Consider using Stateful Sets instead of Deployments for Besu. The term 'client node' refers to bootnode, validator and member/RPC nodes. For Besu nodes, we only use CLI arguments to keep things consistent.","s":"Nodes","u":"/private-networks/tutorials/kubernetes","h":"#nodes","p":859},{"i":877,"t":"We encourage using role-based access controls (RBACs) for access to the private key of each node, that is, only a specific pod or statefulset is allowed to access a specific secret. If you need to specify a Kube configuration file for each pod, use the KUBE_CONFIG_PATH variable.","s":"Role-based access controls","u":"/private-networks/tutorials/kubernetes","h":"#role-based-access-controls","p":859},{"i":879,"t":"We use separate data volumes to store the blockchain data. This is similar to using separate volumes to store data when using docker containers natively or docker-compose. This is done for a few reasons: Containers are mortal and we do not want to store data on them. Kubernetes host nodes can fail and we want the chain data to persist. Ensure that you provide enough data storage capacity for all nodes on the cluster. Select the appropriate type of Storage Class based on your cloud provider. In the templates, the size of the volume claims is set to 20Gb by default; you can change this depending on your needs. If you have a different storage account than the one in the charts, you may edit those Storage Classes. When using Persistent Volume Claims, set the allowVolumeExpansion to true. This helps keep costs low and enables growing the volume over time rather than creating new volumes and copying data across.","s":"Storage","u":"/private-networks/tutorials/kubernetes","h":"#storage","p":859},{"i":881,"t":"We recommend deploying metrics to get an overview of the network, nodes, and volumes. You can also create alerts. Besu publishes metrics to Prometheus, and you can configure metrics using the kubernetes scraper configuration. We also have custom Grafana dashboards to monitor the blockchain. note Refer to values/monitoring.yml to configure the alerts per your requirements (for example slack or email). cd helm helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --create-namespace --values ./values/monitoring.yml --wait kubectl --namespace besu apply -f ./values/monitoring/ You can configure Besu to suit your environment. For example, use the Elastic charts to log to a file that you can parse using Logstash into an ELK cluster. cd helm helm repo add elastic https://helm.elastic.co helm repo update # if on cloud helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml # if local - set the replicas to 1 helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace besu --create-namespace --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1 helm install kibana --version 7.17.1 elastic/kibana --namespace besu --values ./values/kibana.yml helm install filebeat --version 7.17.1 elastic/filebeat --namespace besu --values ./values/filebeat.yml","s":"Monitoring","u":"/private-networks/tutorials/kubernetes","h":"#monitoring","p":859},{"i":883,"t":"If you require the ingress controllers for the RPC calls or the monitoring dashboards, we have provided example rules that are pre-configured for common use cases. Use these as a reference and develop solutions to match your network topology and requirements.","s":"Ingress Controllers","u":"/private-networks/tutorials/kubernetes","h":"#ingress-controllers","p":859},{"i":885,"t":"You can perform maintenance for Besu on a Kubernetes cluster.","s":"Maintenance","u":"/private-networks/tutorials/kubernetes/maintenance","h":"","p":884},{"i":887,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster with a network Install Kubectl Install Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#prerequisites","p":884},{"i":889,"t":"Over time, as the chain grows, so will the amount of space used by the persistent volume claim (PVC). As of Kubernetes v1.11, certain types of Storage Classes allow volume resizing. Production charts for Azure use Azure Files, and on AWS use EBS Block Store which allow for volume expansion. To update the volume size, you must update the override values file. For example, to increase the size on the transaction nodes volumes, add the following snippet to the txnode values.yml file, with the new size limit (the following example uses 50Gi). storage: sizeLimit: \"50Gi\" pvcSizeLimit: \"50Gi\" Once complete, update the node via helm: helm upgrade tx-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml","s":"Update a persistent volume claim size","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-a-persistent-volume-claim-size","p":884},{"i":891,"t":"important When updating Besu nodes across a cluster, perform the updates as a rolling update and not all at once, especially for the validator pool. If all the validators are taken offline, the chain halts, and you must wait for round changes to expire before blocks are created again. Updates for Besu can be done via Helm in exactly the same manner as other applications. Alternatively, this can be done via kubectl. This example updates a node called besu-validator-3: Set the update policy to use rolling updates (if not done already): kubectl patch statefulset besu-validator-3 --namespace besu -p '{\"spec\":{\"updateStrategy\":{\"type\":\"RollingUpdate\"}}}' Update the Besu version via Helm: helm upgrade bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml --set image.besu.tag=21.10.0 Or via kubectl: kubectl patch statefulset besu-validator-3 --namespace besu --type='json' -p='[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/image\", \"value\":\"hyperledger/besu:21.10.0\"}]'","s":"Update Besu versions","u":"/private-networks/tutorials/kubernetes/maintenance","h":"#update-besu-versions","p":884},{"i":893,"t":"You can create a local or cloud cluster to deploy a Besu network using Kubernetes.","s":"Create a cluster","u":"/private-networks/tutorials/kubernetes/cluster","h":"","p":892},{"i":895,"t":"Clone the Quorum-Kubernetes repository Install Kubectl Install Helm3 Install AWS CLI and eksctl for AWS EKS clusters Install Azure CLI for Azure AKS clusters Install the cloud-specific CLI","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/cluster","h":"#prerequisites","p":892},{"i":897,"t":"Use one of several options to create a local cluster. Select one listed below, or another that you're comfortable with.","s":"Local Clusters","u":"/private-networks/tutorials/kubernetes/cluster","h":"#local-clusters","p":892},{"i":899,"t":"Minikube is one of the most popular options to spin up a local Kubernetes cluster for development. You can install a version based on your architecture. note We recommend at least 2 CPUs and 16GB of RAM. To start the cluster, run the following command: minikube start --cpus 2 --memory 16384 --cni auto","s":"Minikube","u":"/private-networks/tutorials/kubernetes/cluster","h":"#minikube","p":892},{"i":901,"t":"kind (Kubernetes in Docker) is a lightweight tool for running local Kubernetes clusters. The installation is similar to Minikube. To start the cluster, run the following command: kind create cluster","s":"kind","u":"/private-networks/tutorials/kubernetes/cluster","h":"#kind","p":892},{"i":903,"t":"Rancher is a lightweight open source desktop application for Mac, Windows, and Linux. It provides Kubernetes and container management, and allows you to choose the version of Kubernetes to run. It can build, push, pull, and run container images. Built container images can be run without needing a registry. note The official Docker-CLI is not supported but rather uses nerdctl which is a Docker-CLI compatible tool for containerd, and is automatically installed with Rancher Desktop. note For Windows, you must install Windows Subsystem for Linux (WSL) to install Rancher Desktop. Refer to the official Rancher Desktop documentation for system requirements and installation instructions.","s":"Rancher","u":"/private-networks/tutorials/kubernetes/cluster","h":"#rancher","p":892},{"i":906,"t":"AWS Elastic Kubernetes Service (AWS EKS) is one of the most popular platforms to deploy Besu. To create a cluster in AWS, you must install the AWS CLI and eksctl. The template comprises the base infrastructure used to build the cluster and other resources in AWS. We also use some native services with the cluster for performance and best practices, these include: Pod identities. Secrets Store CSI drivers. Dynamic storage classes backed by AWS EBS. The volume claims are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class. CNI networking mode for EKS. By default, EKS clusters use kubenet to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address \"hidden\" behind the node IP. note This approach reduces the number of IP addresses that you must reserve in your network space for pods, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or those on another cloud provider). AWS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. The IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can lead to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster. warning EKS clusters must not use 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24 for the Kubernetes service address range. To provision the cluster: Update cluster.yml Deploy the template: eksctl create cluster -f ./templates/cluster.yml Your .kube/config should be connected to the cluster automatically, but if not, run the commands below and replace AWS_REGION and CLUSTER_NAME with details that are specific to your deployment. aws sts get-caller-identity aws eks --region AWS_REGION update-kubeconfig --name CLUSTER_NAME After the deployment completes, provision the EBS drivers for the volumes. While it is possible to use the in-tree aws-ebs driver that's natively supported by Kubernetes, it is no longer being updated and does not support newer EBS features such as the cheaper and better gp3 volumes. The cluster.yml file (from the steps above) that is included in this folder automatically deploys the cluster with the EBS IAM policies, but you need to install the EBS CSI drivers. This can be done through the AWS Management Console for simplicity, or via a CLI command as below. Replace CLUSTER_NAME, AWS_REGION and AWS_ACCOUNT with details that are specific to your deployment. eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster CLUSTER_NAME --region AWS_REGION --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --approve --role-only --role-name AmazonEKS_EBS_CSI_DriverRole eksctl create addon --name aws-ebs-csi-driver --cluster CLUSTER_NAME --region AWS_REGION --service-account-role-arn arn:aws:iam::AWS_ACCOUNT:role/AmazonEKS_EBS_CSI_DriverRole --force Once the deployment is completed, provision the Secrets Manager IAM and CSI driver. Use besu (or equivalent) for NAMESPACE and replace CLUSTER_NAME, AWS_REGION and AWS_ACCOUNT with details that are specific to your deployment. helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install --namespace kube-system --create-namespace csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml POLICY_ARN=$(aws --region AWS_REGION --query Policy.Arn --output text iam create-policy --policy-name quorum-node-secrets-mgr-policy --policy-document '{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [\"secretsmanager:CreateSecret\",\"secretsmanager:UpdateSecret\",\"secretsmanager:DescribeSecret\",\"secretsmanager:GetSecretValue\",\"secretsmanager:PutSecretValue\",\"secretsmanager:ReplicateSecretToRegions\",\"secretsmanager:TagResource\"], \"Resource\": [\"arn:aws:secretsmanager:AWS_REGION:AWS_ACCOUNT:secret:besu-node-*\"] } ] }') # If you have deployed the above policy before, you can acquire its ARN: POLICY_ARN=$(aws iam list-policies --scope Local \\ --query 'Policies[?PolicyName==`quorum-node-secrets-mgr-policy`].Arn' \\ --output text) eksctl create iamserviceaccount --name quorum-node-secrets-sa --namespace NAMESPACE --region=AWS_REGION --cluster CLUSTER_NAME --attach-policy-arn \"$POLICY_ARN\" --approve --override-existing-serviceaccounts warning The above command creates a service account called quorum-node-secrets-sa and is preconfigured in the helm charts override values.yml files, for ease of use. Optionally, deploy the kubernetes dashboard. You can now use your cluster and you can deploy Helm charts to it.","s":"AWS EKS","u":"/private-networks/tutorials/kubernetes/cluster","h":"#aws-eks","p":892},{"i":908,"t":"Azure Kubernetes Service (AKS) is another popular cloud platform that you can use to deploy Besu. To create a cluster in Azure, you must install the Azure CLI and have admin rights on your Azure subscription to enable some preview features on AKS. The template comprises the base infrastructure used to build the cluster and other resources in Azure. We also make use Azure native services and features after the cluster is created. These include: AAD pod identities. Secrets Store CSI drivers. Dynamic storage classes backed by Azure Files. The volume claims are fixed sizes and can be updated as you grow via helm updates, and won't need to re-provision the underlying storage class. CNI networking mode for AKS. By default, AKS clusters use kubenet, to create a virtual network and subnet. Nodes get an IP address from a virtual network subnet. Network address translation (NAT) is then configured on the nodes, and pods receive an IP address \"hidden\" behind the node IP. note This approach reduces the number of IP addresses you must reserve in your network space for pods to use, but constrains what can connect to the nodes from outside the cluster (for example, on-premise nodes or other cloud providers). AKS Container Networking Interface (CNI) provides each pod with an IP address from the subnet, and can be accessed directly. These IP addresses must be unique across your network space, and must be planned in advance. Each node has a configuration parameter for the maximum number of pods that it supports. The equivalent number of IP addresses per node are then reserved up front for that node. This approach requires more planning, and can leads to IP address exhaustion as your application demands grow, however makes it easier for external nodes to connect to your cluster. warning Please do not create more than one AKS cluster in the same subnet. AKS clusters may not use 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16, or 192.0.2.0/24 for the Kubernetes service address range. To provision the cluster: Enable the preview features that allow you to use AKS with CNI, and a managed identity to authenticate and run cluster operations with other services. We also enable AAD pod identities which use the managed identity. This is in preview, so you must enable this feature by registering the EnablePodIdentityPreview feature: az feature register --name EnablePodIdentityPreview --namespace Microsoft.ContainerService This takes a little while and you can check on progress by running: az feature list --namespace Microsoft.ContainerService -o table Install or update your local Azure CLI with preview features: az extension add --name aks-preview az extension update --name aks-preview Create a resource group if you don't already have one: az group create --name BesuGroup --location \"East US\" Deploy the template: Navigate to the Azure portal, select + Create a resource in the upper left corner. Search for Template deployment (deploy using custom templates) and select Create. Select Build your own template in the editor. Remove the contents (JSON) in the editor and paste in the contents of azuredeploy.json Select Save. Input provisioning parameters in the displayed user interface. Provision the drivers: Run the bootstrap script. Use besu for AKS_NAMESPACE, and update AKS_RESOURCE_GROUP, AKS_CLUSTER_NAME, and AKS_MANAGED_IDENTITY in the commands below to match your settings and deployed resources from step 3. ./scripts/bootstrap.sh \"AKS_RESOURCE_GROUP\" \"AKS_CLUSTER_NAME\" \"AKS_MANAGED_IDENTITY\" \"AKS_NAMESPACE\" You can now use your cluster and you can deploy Helm charts to it.","s":"Azure Kubernetes Service","u":"/private-networks/tutorials/kubernetes/cluster","h":"#azure-kubernetes-service","p":892},{"i":910,"t":"The playground was created to provide an opportunity to deploy quorum-kubernetes in a local environment before attempting in a live environment (such as in the cloud or on-premise). Local deployment can be done with any local Kubernetes tool. Minikube and Rancher Desktop have been tested to work, but any complete Kubernetes solution with support for kubectl should suffice.","s":"Deploy in a local environment","u":"/private-networks/tutorials/kubernetes/playground","h":"","p":909},{"i":912,"t":"Navigate to the playground README. Ensure that your system meets the requirements specified. Choose your Ethereum client (Besu or GoQuorum): quorum-besu or quorum-go. Choose your consensus algorithm. The playground supports Clique, Ethash (PoW), and IBFT2 for Besu, and IBFT for GoQuorum. Follow the instructions from the README for the chosen client and consensus algorithm folder.","s":"Steps","u":"/private-networks/tutorials/kubernetes/playground","h":"#steps","p":909},{"i":914,"t":"Consider the following when deploying and developing with the playground: The playground is created specifically for developers and operators to become familiar with the deployment of Besu in a Kubernetes environment in preparation for going into a cloud or on-premise environment. Thus, it should not be deployed into a production environment. The playground is not a complete reflection of the helm charts as it does not use Helm, but rather static or non-templated code that is deployed through kubectl apply -f. This means that without Helm there's a significant amount of repeated code. This is fine for development but not ideal for a production environment. The playground uses static/hard-coded keys. Automatic key generation is only supported in helm charts. As the playground is for local development, no cloud integration or lifecycle support is offered.","s":"Important notes","u":"/private-networks/tutorials/kubernetes/playground","h":"#important-notes","p":909},{"i":916,"t":"You can deploy Besu Helm charts for a Kubernetes cluster.","s":"Deploy charts","u":"/private-networks/tutorials/kubernetes/charts","h":"","p":915},{"i":918,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Install Kubectl Install Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/charts","h":"#prerequisites","p":915},{"i":920,"t":"Helm is a method of packaging a collection of objects into a chart which can then be deployed to the cluster. After you have cloned the Quorum-Kubernetes repository, change the directory to helm for the rest of this tutorial. cd helm Each helm chart has the following key-map values which you will need to set depending on your needs. The cluster.provider is used as a key for the various cloud features enabled. Please specify only one cloud provider, not both. At present, the charts have full support for cloud native services in both AWS and Azure. Please note that if you use GCP, IBM etc please set cluster.provider: local and set cluster.cloudNativeServices: false. Please update the aws or azure map as shown below if you deploy to either cloud provider. cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted quorumFlags: privacy: false removeKeysOnDelete: false aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId Setting the cluster.cloudNativeServices: true: Stores keys in Azure Key Vault or AWS Secrets Manager. Uses Azure Managed Identities or AWS Identity and Access Management for pod identity access. note You can customize any of the charts in this repository to suit your requirements, and make pull requests to extend functionality.","s":"Provision with Helm charts","u":"/private-networks/tutorials/kubernetes/charts","h":"#provision-with-helm-charts","p":915},{"i":922,"t":"Verify kubectl is connected to cluster using: (use the latest version) kubectl version The result looks similar to: Client Version: version.Info{Major:\"1\", Minor:\"23\", GitVersion:\"v1.23.1\", GitCommit:\"86ec240af8cbd1b60bcc4c03c20da9b98005b92e\", GitTreeState:\"clean\", BuildDate:\"2021-12-16T11:41:01Z\", GoVersion:\"go1.17.5\", Compiler:\"gc\", Platform:\"linux/amd64\"} Server Version: version.Info{Major:\"1\", Minor:\"22\", GitVersion:\"v1.22.3\", GitCommit:\"c92036820499fedefec0f847e2054d824aea6cd1\", GitTreeState:\"clean\", BuildDate:\"2021-10-27T18:35:25Z\", GoVersion:\"go1.16.9\", Compiler:\"gc\", Platform:\"linux/amd64\"}","s":"1. Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/charts","h":"#1-check-that-you-can-connect-to-the-cluster-with-kubectl","p":915},{"i":924,"t":"This tutorial isolates groups of resources (for example, StatefulSets and Services) within a single cluster. note The rest of this tutorial uses besu as the namespace, but you're free to pick any name when deploying, as long as it's consistent across the infrastructure scripts and charts. Run the following in a terminal window: kubectl create namespace besu","s":"2. Create the namespace","u":"/private-networks/tutorials/kubernetes/charts","h":"#2-create-the-namespace","p":915},{"i":926,"t":"This chart deploys Prometheus and Grafana to monitor the metrics of the cluster, nodes and state of the network. Update the admin username and password in the monitoring values file. Configure alerts to the receiver of your choice (for example, email or Slack), then deploy the chart using: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install monitoring prometheus-community/kube-prometheus-stack --version 34.10.0 --namespace=besu --values ./values/monitoring.yml --wait kubectl --namespace besu apply -f ./values/monitoring/ Metrics are collected via a ServiceMonitor that scrapes each Besu pod, using given annotations which specify the port and path to use. For example: template: metadata: annotations: prometheus.io/scrape: \"true\" prometheus.io/port: 9545 prometheus.io/path: \"/metrics\" warning For production use cases, configure Grafana with one of the supported native auth mechanisms. Optionally you can also deploy the Elastic Stack to view logs (and metrics). helm repo add elastic https://helm.elastic.co helm repo update # if on cloud helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml # if local - set the replicas to 1 helm install elasticsearch --version 7.17.1 elastic/elasticsearch --namespace quorum --values ./values/elasticsearch.yml --set replicas=1 --set minimumMasterNodes: 1 helm install kibana --version 7.17.1 elastic/kibana --namespace quorum --values ./values/kibana.yml helm install filebeat --version 7.17.1 elastic/filebeat --namespace quorum --values ./values/filebeat.yml If you install filebeat, please create a filebeat-* index pattern in kibana. All the logs from the nodes are sent to the filebeat index. If you use The Elastic stack for logs and metrics, please deploy metricbeat in a similar manner to filebeat and create an index pattern in Kibana. To connect to Kibana or Grafana, we also need to deploy an ingress so you can access your monitoring endpoints publicly. We use Nginx as our ingress here, and you are free to configure any ingress per your requirements. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install quorum-monitoring-ingress ingress-nginx/ingress-nginx \\ --namespace quorum \\ --set controller.ingressClassResource.name=\"monitoring-nginx\" \\ --set controller.ingressClassResource.controllerValue=\"k8s.io/monitoring-ingress-nginx\" \\ --set controller.replicaCount=1 \\ --set controller.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set defaultBackend.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.admissionWebhooks.patch.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.service.externalTrafficPolicy=Local kubectl apply -f ../ingress/ingress-rules-monitoring.yml Once complete, view the IP address listed under the Ingress section if you're using the Kubernetes Dashboard or on the command line kubectl -n quorum get services quorum-monitoring-ingress-ingress-nginx-controller. note We refer to the ingress here as external-nginx because it deals with monitoring endpoints specifically. We also deploy a second ingress called network-ingress which is for the blockchain nodes only in step 8 You can view the Besu dashboard by going to: http:///d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s You can view the Kibana dashboard (if deployed) by going to: http:///kibana","s":"3. Deploy the monitoring chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#3-deploy-the-monitoring-chart","p":915},{"i":928,"t":"The genesis chart creates the genesis file and keys for the validators. warning It's important to keep the release names of the initial validator pool as per this tutorial, that is validator-n, where n is the node number. Any validators created after the initial pool can be named to anything you like. The override values.yml looks like below: --- quorumFlags: removeGenesisOnDelete: true cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId # the raw Genesis config # rawGenesisConfig.blockchain.nodes set the number of validators/signers rawGenesisConfig: genesis: config: chainId: 1337 algorithm: consensus: qbft # choose from: ibft2 | qbft | clique blockperiodseconds: 10 epochlength: 30000 requesttimeoutseconds: 20 gasLimit: '0x47b760' difficulty: '0x1' coinbase: '0x0000000000000000000000000000000000000000' blockchain: nodes: generate: true count: 4 accountPassword: 'password' Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeGenesisOnDelete: true tells the chart to delete the genesis file when the chart is deleted. If you may wish to retain the genesis on deletion, please set that value to false. The last config item is rawGenesisConfig which has details of the chain you are creating, please edit any of the parameters in there to match your requirements. To set the number of initial validators set the rawGenesisConfig.blockchain.nodes to the number that you'd like. We recommend using the Byzantine formula of N=3F+1 when setting the number of validators. One more thing to note is that when cluster.cloudNativeServices: true is set, the genesis job will not add the Quickstart test accounts into the genesis file. When you are ready deploy the chart with : cd helm helm install genesis ./charts/besu-genesis --namespace besu --create-namespace --values ./values/genesis-besu.yml Once completed, view the genesis and enodes (the list of static nodes) configuration maps that every Besu node uses, and the validator and bootnode node keys as secrets.","s":"4. Deploy the genesis chart","u":"/private-networks/tutorials/kubernetes/charts","h":"#4-deploy-the-genesis-chart","p":915},{"i":930,"t":"This is an optional but recommended step. In a production setup we recommend the use of two ore more bootnodes for best practices. Each Besu node has a map that tells the StatefulSet what to deploy and how to clean up. The default values.yml for the StatefulSet define the following flags which are present in all the override values files. --- quorumFlags: privacy: false removeKeysOnDelete: true isBootnode: true # set this to true if this node is a bootnode usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster cluster: provider: local # choose from: local | aws | azure cloudNativeServices: false reclaimPolicy: Delete # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted aws: # the aws cli commands uses the name 'quorum-node-secrets-sa' so only change this if you altered the name serviceAccountName: quorum-node-secrets-sa # the region you are deploying to region: ap-southeast-2 azure: # the script/bootstrap.sh uses the name 'quorum-pod-identity' so only change this if you altered the name identityName: quorum-pod-identity # the clientId of the user assigned managed identity created in the template identityClientId: azure-clientId keyvaultName: azure-keyvault # the tenant ID of the key vault tenantId: azure-tenantId # the subscription ID to use - this needs to be set explicitly when using multi tenancy subscriptionId: azure-subscriptionId node: besu: metrics: serviceMonitorEnabled: true resources: cpuLimit: 1 cpuRequest: 0.1 memLimit: \"2G\" memRequest: \"1G\" Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeKeysOnDelete: true tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to false. For the bootnodes only, set the quorumFlags.isBootnode: true. When using bootnodes you have to also set quorumFlags.usesBootnodes: true to indicate that all nodes on the network will use these bootnodes. note If you use bootnodes, you must set quorumFlags.usesBootnodes: true in the override values.yaml for every other node type, that is validators.yaml, txnode.yaml and reader.yaml helm install bootnode-1 ./charts/besu-node --namespace besu --values ./values/bootnode.yml helm install bootnode-2 ./charts/besu-node --namespace besu --values ./values/bootnode.yml Once complete, you see two StatefulSets, and the two bootnodes discover themselves and peer. Because there are no validators present yet, there are no blocks created, as seen in the following logs.","s":"5. Deploy the bootnodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#5-deploy-the-bootnodes","p":915},{"i":932,"t":"The validators peer with the bootnodes and themselves, and when a majority of the validators have peered, blocks are proposed and created on the chain. These are the next set of nodes that we will deploy. The charts use four validators (default) to replicate best practices for a network. The override values.yml for the StatefulSet looks like below: --- quorumFlags: privacy: false removeKeysOnDelete: false isBootnode: false # set this to true if this node is a bootnode usesBootnodes: true # set this to true if the network you are connecting to use a bootnode/s that are deployed in the cluster Please set the aws, azure and cluster keys are as per the Provisioning step. quorumFlags.removeKeysOnDelete: true tells the chart to delete the node's keys when the chart is deleted. If you may wish to retain the keys on deletion, please set that value to false. warning Please note that if you delete a majority of the validators, the network will halt. Additionally, if the validator keys are deleted you may not be able to recover as you need a majority of the validators up to vote to add new validators into the pool When using bootnodes (if deployed in the previous step) you have to also set quorumFlags.usesBootnodes: true to indicate that all nodes on the network will use these bootnodes. For the initial validator pool we set all the node flags to false and then deploy. helm install validator-1 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-2 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-3 ./charts/besu-node --namespace besu --values ./values/validator.yml helm install validator-4 ./charts/besu-node --namespace besu --values ./values/validator.yml warning It's important to keep the release names of the validators the same as it is tied to the keys that the genesis chart creates. So we use validator-1, validator-2, etc. in the following command. Once completed, you may need to give the validators a few minutes to peer and for round changes, depending on when the first validator was spun up, before the logs display blocks being created.","s":"6. Deploy the validators","u":"/private-networks/tutorials/kubernetes/charts","h":"#6-deploy-the-validators","p":915},{"i":934,"t":"To add (or remove) more validators to the initial validator pool, you need to deploy a node such as an RPC node (step 8) and then vote that node in. The vote API call must be made on a majority of the existing pool and the new node will then become a validator. Please refer to the Ingress Section for details on making the API calls from your local machine or equivalent.","s":"7. Add/Remove additional validators to the validator pool","u":"/private-networks/tutorials/kubernetes/charts","h":"#7-addremove-additional-validators-to-the-validator-pool","p":915},{"i":936,"t":"An RPC node is simply a node that can be used to make public transactions or perform read heavy operations such as when connected to a chain explorer like BlockScout. The RPC override values.yml for the StatefulSet looks identical to that of the validators above, and will create it's own node keys before the node starts. To deploy an RPC node: helm install rpc-1 ./charts/besu-node --namespace besu --values ./values/reader.yml A Transaction or Member node in turn is one which has an accompanying Private Transaction Manager, such as Tessera; which allow you to make private transactions between nodes. The Transaction override values.yml for the StatefulSet looks identical to that of the validators above and only has quorumFlags.privacy: true to indicate that it is deploying a pair of GoQuorum and Tessera nodes. To deploy a Transaction or Member node: helm install member-1 ./charts/besu-node --namespace besu --values ./values/txnode.yml Logs for member-1 resemble the following for Tessera: Logs for Besu resemble the following: note In these examples we use member-1 and rpc-1 as release names for the deployments. You can pick any release name that you'd like to use in place of those as per your requirements.","s":"8. Deploy RPC or Transaction nodes","u":"/private-networks/tutorials/kubernetes/charts","h":"#8-deploy-rpc-or-transaction-nodes","p":915},{"i":938,"t":"In order to view the Grafana dashboards or connect to the nodes to make transactions from your local machine you can deploy an ingress controller with rules. We use the ingress-nginx ingress controller which can be deployed as follows: helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install quorum-network-ingress ingress-nginx/ingress-nginx \\ --namespace quorum \\ --set controller.ingressClassResource.name=\"network-nginx\" \\ --set controller.ingressClassResource.controllerValue=\"k8s.io/network-ingress-nginx\" \\ --set controller.replicaCount=1 \\ --set controller.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set defaultBackend.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.admissionWebhooks.patch.nodeSelector.\"kubernetes\\.io/os\"=linux \\ --set controller.service.externalTrafficPolicy=Local Use pre-defined rules to test functionality, and alter to suit your requirements (for example, restrict access for API calls to trusted CIDR blocks). Edit the rules file so that the service names match your release name. In the example, we deployed a transaction node with the release name member-1 so the corresponding service is called besu-node-member-1. Once you have settings that match your deployments, deploy the rules as follows: kubectl apply -f ../ingress/ingress-rules-besu.yml Once complete, view the IP address listed under the Ingress section if you're using the Kubernetes Dashboard or on the command line kubectl -n quorum get services quorum-network-ingress-ingress-nginx-controller. The following is an example RPC call, which confirms that the node running the JSON-RPC service is syncing: curl HTTP request JSON result curl -v -X POST -H \"Content-Type: application/json\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' http:///rpc { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4e9\" }","s":"9. Connect to the node from your local machine via an ingress","u":"/private-networks/tutorials/kubernetes/charts","h":"#9-connect-to-the-node-from-your-local-machine-via-an-ingress","p":915},{"i":940,"t":"You can deploy BlockScout to aid with monitoring the blockchain. To do this, update the BlockScout values file and set the database and secret_key_base values. important Changes to the database requires changes to both the database and the blockscout dictionaries. Once completed, deploy the chart using: helm dependency update ./charts/blockscout helm install blockscout ./charts/blockscout --namespace quorum --values ./values/blockscout-goquorum.yaml You can optionally deploy the Quorum-Explorer as a lightweight blockchain explorer. The Quorum Explorer is not recommended for use in production and is intended for demonstration or Development purposes only. The Explorer can give an overview over the whole network, such as querying each node on the network for node or block information, voting (add/remove) validators from the network, demonstrating a SimpleStorage smart contract with privacy enabled, and sending transactions between wallets as you would do in MetaMask. Please see the Explorer page for details on how to use the application. warning The accounts listed in the file below are for test purposes only and should not be used on a production network. To deploy the application, update the Explorer values file with details of your nodes and endpoints and then deploy. helm install quorum-explorer ./charts/explorer --namespace besu --values ./values/explorer-besu.yaml You will also need deploy the ingress (if not already done in Monitoring to access the endpoint on http:///explorer","s":"10. Blockchain explorer","u":"/private-networks/tutorials/kubernetes/charts","h":"#10-blockchain-explorer","p":915},{"i":942,"t":"Use --nat-method=AUTO or --nat-method=KUBERNETES CLI options to let the Besu node automatically configure its IP address and ports. Use mode --nat-method=NONE to be able to set your Besu ports and IP address manually. Default mode is AUTO but Besu will fallback to NONE mode if automatic configuration fails. info The following log shows fallback to NONE mode after an automatic detection failure. INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Configure Kubernetes mode in NAT Manager","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"","p":941},{"i":944,"t":"Follow 3 steps to configure Besu for automatic IP address and ports detection on Kubernetes: Create a load balancer Check if the load balancer is properly deployed Deploy Besu","s":"Automatic configuration","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-configuration","p":941},{"i":946,"t":"Deploy a LoadBalancer service for Besu to recover IP address and ports. Here is an example that you can customize with your own ports and routing rules. --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" name: besu spec: ports: - name: \"json-rpc\" port: 8545 targetPort: 8545 - name: \"rlpx\" port: 30303 targetPort: 30303 selector: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" type: LoadBalancer This service example lists the rules for the different ports used by Besu (json-rpc and rlpx). The default value is used for discovery.","s":"1. Create a load balancer","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#1-create-a-load-balancer","p":941},{"i":948,"t":"Verify the load balancer readiness before launching Besu. Run kubectl describe services besu to check the service status. The command should display the following information: Name: besu Namespace: default Labels: app.kubernetes.io/name=besu app.kubernetes.io/release=1.0.0 Annotations: kubectl.kubernetes.io/last-applied-configuration: {\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app.kubernetes.io/name\":\"besu\",\"app.kubernetes.io/release\":\"1.... Selector: app.kubernetes.io/name=besu,app.kubernetes.io/release=1.0.0 Type: LoadBalancer IP: -------- LoadBalancer Ingress: ****** The load balancer must have an IP address displayed in place of ****** on the LoadBalancer Ingress line to be ready. Run the kubectl describe services besu command again until the load balancer IP address appears in the output.","s":"2. Check if the load balancer is properly deployed","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#2-check-if-the-load-balancer-is-properly-deployed","p":941},{"i":950,"t":"When steps 1 and 2 are completed, deploy Besu using the following YAML example: --- apiVersion: v1 kind: ConfigMap metadata: name: besu-config labels: app.kubernetes.io/name: besu app.kubernetes.io/release: 1.0.0 data: BESU_LOGGING: \"INFO\" BESU_NETWORK: \"dev\" BESU_P2P_ENABLED: \"true\" BESU_RPC_HTTP_ENABLED: \"true\" BESU_RPC_HTTP_APIS: \"eth,net,web3,debug,admin\" KUBE_CONFIG_PATH: \"/opt/besu/shared/kube-config\" --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: besu labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" spec: replicas: 1 strategy: {} template: metadata: creationTimestamp: null labels: app.kubernetes.io/name: besu app.kubernetes.io/release: \"1.0.0\" spec: containers: - name: besu image: \"hyperledger/besu:latest\" imagePullPolicy: Always ports: - containerPort: 8545 - containerPort: 30303 envFrom: - configMapRef: name: besu-config restartPolicy: Always status: {}","s":"3. Deploy Besu","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#3-deploy-besu","p":941},{"i":952,"t":"danger Automatic detection error messages do not prevent you to use Besu. Try the fix indicated for each error or use --nat-method=KUBERNETES CLI option and set IP address and port manually. Possible errors messages for Kubernetes automatic detection failure: Service not found Forbidden Ingress not found","s":"Automatic detection errors","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#automatic-detection-errors","p":941},{"i":954,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used Cause: load balancer did start correctly or has the incorrect name. Fix: check and modify load balancer YAML configuration and restart service. Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Service not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#service-not-found-error-message","p":941},{"i":956,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used Cause: Besu don't have permission to list the services via the Kubernetes API to retrieve IP address and ports from the load balancer. Fix: Give it the required permissions using Role-based access control. If you can't manage permissions, define the IP address and ports manually with NONE mode Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Forbidden. NONE mode will be used INFO | NetworkRunner | Starting Network. tip For development environment, the permission issue can be fixed by running kubectl create clusterrolebinding myapp-view-binding --clusterrole=admin --serviceaccount=default:default This command should only be used on development environment and not in production environment. In production environment, require a finer management of permissions using Kubernetes Role-based access control.","s":"Forbidden error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#forbidden-error-message","p":941},{"i":958,"t":"Error message: Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used Cause: Load balancer did not finish to recover an IP address. Fix: Check that the load balancer is properly deployed before launching Besu. Example error log INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used INFO | NetworkRunner | Starting Network.","s":"Ingress not found error message","u":"/private-networks/tutorials/kubernetes/nat-manager","h":"#ingress-not-found-error-message","p":941},{"i":960,"t":"You can deploy Besu for production on a Kubernetes cluster.","s":"Deploy for production","u":"/private-networks/tutorials/kubernetes/production","h":"","p":959},{"i":962,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Kubectl Helm3","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/production","h":"#prerequisites","p":959},{"i":964,"t":"To get things production-ready, we'll use the same charts, and set a few of the values in the cluster map as in the Deploy section. warning The following tutorial ONLY supports AWS and Azure currently. Other cloud providers will be added in time. warning We recommend using AWS RDS or Azure PostgreSQL in High Availability mode for any Tessera nodes that you use. The templates don't include that functionality. They can be provisioned with CloudFormation or Azure Resource Manager, respectively. Once created, please specify the connection details to the values.yml.","s":"Overview","u":"/private-networks/tutorials/kubernetes/production","h":"#overview","p":959},{"i":967,"t":"Once you have a cluster running, verify kubectl is connected to cluster with: kubectl version Client Version: version.Info{Major:\"1\", Minor:\"23\", GitVersion:\"v1.23.1\", GitCommit:\"86ec240af8cbd1b60bcc4c03c20da9b98005b92e\", GitTreeState:\"clean\", BuildDate:\"2021-12-16T11:41:01Z\", GoVersion:\"go1.17.5\", Compiler:\"gc\", Platform:\"linux/amd64\"} Server Version: version.Info{Major:\"1\", Minor:\"22\", GitVersion:\"v1.22.3\", GitCommit:\"c92036820499fedefec0f847e2054d824aea6cd1\", GitTreeState:\"clean\", BuildDate:\"2021-10-27T18:35:25Z\", GoVersion:\"go1.16.9\", Compiler:\"gc\", Platform:\"linux/amd64\"}","s":"Check that you can connect to the cluster with kubectl","u":"/private-networks/tutorials/kubernetes/production","h":"#check-that-you-can-connect-to-the-cluster-with-kubectl","p":959},{"i":969,"t":"For the rest of this tutorial we use Helm charts. After you have cloned the Quorum-Kubernetes repository, change the directory to helm for the rest of this tutorial. cd helm Each helm chart has the following keys that must be set. Specify either aws or azure for the cluster.provider. Additionally, set cloudNativeServices: true and reclaimPolicy: Retain so that it looks like the following for AWS: cluster: provider: aws # choose from: aws | azure cloudNativeServices: true # set to true to use Cloud Native Services (SecretsManager and IAM for AWS; KeyVault & Managed Identities for Azure) reclaimPolicy: Retain # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted Follow the steps outlined in the deploy charts tutorial to deploy the network.","s":"Deploy the network","u":"/private-networks/tutorials/kubernetes/production","h":"#deploy-the-network","p":959},{"i":971,"t":"The most important thing is to plan your network out on paper first and then test it in a Dev cluster to make sure connectivity works with your applications and you get the required throughput in transactions per second (TPS). We also recommend you test the entire process, from provisioning infrastructure to updating nodes on a Dev cluster, prior to launching your production network. By default, the cloud Kubernetes clusters take care of availability and do multi-zones within a region. The scheduler also ensures that deployments are spread out across zones. Where possible, we recommend you use multiple bootnodes and static nodes to speed up peering. You can connect to APIs and services outside the cluster normally, but connecting into your network (such as adding an on-premise node to the network) might require more configuration. Please check the limitations and use CNI where possible. To connect an external node to your cluster, the easiest way is to use a VPN as seen in the following multi-cluster setup. Finally, we recommend setting up monitoring and alerting from the beginning, so you can get early warnings of issues rather than after failure. We have a monitoring chart which uses Grafana and you can use it with Alertmanager to create alerts or alternatively alert via Cloudwatch or Azure Monitoring.","s":"Best practices","u":"/private-networks/tutorials/kubernetes/production","h":"#best-practices","p":959},{"i":973,"t":"When CNI is used, multi-cluster support is simple, but you have to cater for cross-cluster DNS names. Ideally, you want to create two separate VPCs (or VNets) and make sure they have different base CIDR blocks so that IP addresses don't conflict. Once done, peer the VPCs together and update the subnet route table, so they are effectively a giant single network. When you spin up clusters, use CNI and CIDR blocks to match the subnet's CIDR settings. Then deploy the genesis chart on one cluster and copy across the genesis file and static nodes config maps. Depending on your DNS settings, they might be fine as is, or they might need to be actual IP addresses. That is, you can provision cluster B only after cluster A has Besu nodes up and running. Deploy the network on cluster A, and then on cluster B. Besu nodes on cluster A should work as expected, and Besu nodes on cluster B should use the list of peers provided to communicate with the nodes on cluster A. Keeping the list of peers on the clusters live and up to date can be challenging, so we recommend using the cloud service provider's DNS service such as Route 53 or Azure DNS and adapting the charts to create entries for each node when it comes up.","s":"Multi-cluster support","u":"/private-networks/tutorials/kubernetes/production","h":"#multi-cluster-support","p":959},{"i":975,"t":"You can use the Quorum Explorer on a Kubernetes cluster.","s":"Use the Quorum Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"","p":974},{"i":977,"t":"Clone the Quorum-Kubernetes repository A running Kubernetes cluster Kubectl Helm3 Existing network","s":"Prerequisites","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#prerequisites","p":974},{"i":979,"t":"Quorum-Explorer as a lightweight blockchain explorer. The Quorum Explorer is not recommended for use in production and is intended for demonstration or development purposes only. The explorer can provide an overview over the whole network, such as block information, voting or removing validators from the network, and demonstrates using the SimpleStorage smart contract with privacy enabled, and sending transactions between wallets in one interface. To use the explorer, update the Quorum-Explorer values file with your node details and endpoints, and then deploy.","s":"Deploy the Quorum Explorer helm chart","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#deploy-the-quorum-explorer-helm-chart","p":974},{"i":981,"t":"The Nodes page provides an overview of the nodes on the network. Select the node you would like to interact with from the drop-down on the top right, and you'll get details of the node, block height, peers, queued transactions etc.","s":"Nodes","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#nodes","p":974},{"i":983,"t":"The Validators page simulates a production environment or consortium where each node individually runs API calls to vote to add a validator or remove an existing validator. When using the buttons to remove, discard pending validators, or proposing a validator, the app sends an API request to the selected node in the drop-down only. To add or remove a validator you need to select a majority of the existing validator pool individually, and perform the vote API call by clicking the button. Each node can call a discard on the voting process during or after the validator has been added. The vote calls made from non-validator nodes have no effect on overall consensus.","s":"Validators","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#validators","p":974},{"i":985,"t":"The Explorer page gives you the latest blocks from the chain and the latest transactions as they occur on the network. In addition, you can search by block number or transaction hash using the respective search bar.","s":"Explorer","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#explorer","p":974},{"i":987,"t":"Use the Contracts page to compile and deploy a smart contract. Currently, the only contract available for deployment through the app is the SimpleStorage contract. However, in time, we plan to add more contracts to that view. In this example, we deploy from member-1 and select member-1 and member-3 in the Private For multi-select. Then click on Compile and Deploy Once deployed, you can interact with the contract. As this is a new transaction, select member-1 and member-3 in Interact multi-select, and then click on the appropriate method call to get or set the value at the deployed contract address. To test the private transaction functionality, select member-2 from the drop-down on the top right, you'll notice that you are unable to interact with the contract because member-2 was not part of the transaction. Only members-1 and member-3 responds correctly.","s":"Contracts","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#contracts","p":974},{"i":989,"t":"The Wallet page gives you the functionality to send simple ETH transactions between accounts by providing the account's private key, the recipient's address, and transfer amount in Wei.","s":"Wallet","u":"/private-networks/tutorials/kubernetes/quorum-explorer","h":"#wallet","p":974},{"i":991,"t":"You can create a privacy-enabled network using the Quorum Developer Quickstart. It runs a private Besu network that uses Tessera as its private transaction manager. You can use the Block Explorer, make JSON-RPC requests, and create transactions using MetaMask. This tutorial describes how to make private transactions between nodes, and perform read and write operations on private contracts. important This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.","s":"Create a privacy-enabled network using the Quorum Developer Quickstart","u":"/private-networks/tutorials/privacy/quickstart","h":"","p":990},{"i":993,"t":"To run this tutorial, you must have the following installed: Docker and Docker-compose important If using MacOS or Windows, enable Docker to use up to 6GB of memory on the Advanced tab in Preferences. Nodejs Git command line Curl command line.","s":"Prerequisites","u":"/private-networks/tutorials/privacy/quickstart","h":"#prerequisites","p":990},{"i":996,"t":"To create the docker-compose file and artifacts, run: npx quorum-dev-quickstart Follow the prompts displayed to run Besu, private transactions, and logging with ELK. Enter n for Codefi Orchestrate.","s":"1. Create Docker-compose file","u":"/private-networks/tutorials/privacy/quickstart","h":"#1-create-docker-compose-file","p":990},{"i":998,"t":"caution If running in Windows, please run commands from the GitBash shell In the installation directory, start the network: ./run.sh The script pulls the Docker images starts the network. Pulling the images takes a few minutes the first time. The network details display. ************************************* Quorum Dev Quickstart ************************************* Setting up the index patterns in kibana ................. ---------------------------------- List endpoints and services ---------------------------------- JSON-RPC HTTP service endpoint : http://localhost:8545 JSON-RPC WebSocket service endpoint : ws://localhost:8546 Web block explorer address : http://localhost:25000/ Prometheus address : http://localhost:9090/graph Grafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All Collated logs using Kibana endpoint : http://localhost:5601/app/kibana#/discover For more information on the endpoints and services, refer to README.md in the installation directory. ****************************************************************","s":"2. Start the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#2-start-the-network","p":990},{"i":1000,"t":"To deploy a private contract to another privacy group member, use the web3js-quorum library and the eea_sendRawTransaction API call. You must use this API call instead of eth_sendTransaction because Besu keeps account management separate for stronger security. This example uses the web3js library to make the API calls, the example creates three Besu nodes, with each node having a corresponding Tessera node for privacy. You can access the Besu member nodes for API calls on the following ports: Member1Besu RPC: http://localhost:20000 Member1Tessera: http://localhost:9081 Member2Besu RPC: http://localhost:20002 Member2Tessera: http://localhost:9082 Member3Besu RPC: http://localhost:20004 Member3Tessera: http://localhost:9083 Navigate to the smart_contracts directory and deploy the private transaction: cd smart_contracts npm install node scripts/private/private_tx.js The script deploys the contract and sends an arbitrary value (47) from Member1 to Member3. Once done, it queries all three members (Tessera) to check the value at an address. Only Member1 & Member3 has this information as they were involved in the transaction, Member2 responds with a 0x to indicate it is unaware of the transaction. node scripts/private/private_tx.js Creating contract... Getting contractAddress from txHash: 0xc1b57f6a7773fe887afb141a09a573d19cb0fdbb15e0f2b9ed0dfead6f5b5dbf Waiting for transaction to be mined ... Address of transaction: 0x8220ca987f7bb7f99815d0ef64e1d8a072a2c167 Use the smart contracts 'get' function to read the contract's constructor initialized value .. Waiting for transaction to be mined ... Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000002f Use the smart contracts 'set' function to update that value to 123 .. - from member1 to member3 Transaction hash: 0x387c6627fe87e235b0f2bbbe1b2003a11b54afc737dca8da4990d3de3197ac5f Waiting for transaction to be mined ... Verify the private transaction is private by reading the value from all three members .. Waiting for transaction to be mined ... Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b Waiting for transaction to be mined ... Member2 value from deployed contract is: 0x Waiting for transaction to be mined ... Member3 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b The general contract deployment flow is: Deploy a contract, which returns a transaction hash. Obtain the privacy transaction receipt from the transaction hash. Use the contract address in the privacy transaction receipt to interact with the contract from that point on.","s":"3. Deploy the private contract and interact with the nodes","u":"/private-networks/tutorials/privacy/quickstart","h":"#3-deploy-the-private-contract-and-interact-with-the-nodes","p":990},{"i":1002,"t":"Do one of the following to stop the network: Stop the network: ./stop.sh Stop the network and remove the containers and volumes: ./remove.sh","s":"4. Stop the network","u":"/private-networks/tutorials/privacy/quickstart","h":"#4--stop-the-network","p":990},{"i":1004,"t":"View the web3js-quorum client library example and code examples. You can also test the ERC-20 token example by executing erc20.js, which deploys a HumanStandardToken contract and transfers one token to Node-2. You can verify this by observing the data field of the logs, which is 1.","s":"More examples","u":"/private-networks/tutorials/privacy/quickstart","h":"#more-examples","p":990},{"i":1006,"t":"You can configure Besu and associated Tessera node in a privacy-enabled network to host multiple tenants. In this tutorial we'll add tenants to the Node-1 Besu and Tessera node in a privacy-enabled network. IBFT-Network/ ├── Node-1 │ ├── data │ ├── Tessera ├── Node-2 │ ├── data │ ├── Tessera ├── Node-3 │ ├── data │ ├── Tessera └── Node-4 ├── data ├── Tessera info This tutorial uses JWT public key authentication to create the tenant's JWT, but you can also use username and password authentication.","s":"Configure a multi-tenant node","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"","p":1005},{"i":1008,"t":"A privacy-enabled network.","s":"Prerequisites","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#prerequisites","p":1005},{"i":1011,"t":"In the Node-1 directory, generate the private and public key pair. The key pair, which must be in .pem format, belongs to the operator who uses the key pair to authenticate the tenant JWTs. info This step is not required when using username and password authentication to create the required JWTs.","s":"1. Generate a private and public key pair","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#1-generate-a-private-and-public-key-pair","p":1005},{"i":1013,"t":"In the Node-1/Tessera directory, generate a public/private key pair for each tenant. note The instructions creates an unlocked private key, meaning you do not need a password to decrypt the private key file. Name the key pair nodeKey2 and nodeKey3.","s":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#2-generate-tessera-keys","p":1005},{"i":1015,"t":"In the Node-1/Tessera directory, update the tessera.conf file by adding the new key pairs: { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9101\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9102\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9103\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" }, { \"privateKeyPath\": \"nodeKey2.key\", \"publicKeyPath\": \"nodeKey2.pub\" }, { \"privateKeyPath\": \"nodeKey3.key\", \"publicKeyPath\": \"nodeKey3.pub\" } ] }, \"alwaysSendTo\": [] } info Besu requires orion mode. Add the line \"mode\": \"orion\", to the Tessera configuration file.","s":"3. Update the Tessera configuration file","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#3-update-the-tessera-configuration-file","p":1005},{"i":1017,"t":"Start the Tessera nodes and specify the configuration file.","s":"4. Start Tessera","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#4-start-tessera","p":1005},{"i":1019,"t":"In the Node-1 directory, start Besu Node-1: besu --data-path=data --genesis-file=../genesis.json --rpc-http-authentication-enabled --rpc-http-authentication-jwt-public-key-file=publicKey.pem --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-multi-tenancy-enabled --min-gas-price=0 The command line specifies privacy options: --rpc-http-authentication-enabled enables authentication for JSON-RPC APIs. --rpc-http-authentication-jwt-public-key-file specifies the Operator's public key file. Used to authenticate the tenant JWTs. --privacy-enabled enables privacy. --privacy-url specifies the Quorum to Tessera (Q2T) server address of the Tessera node (Q2T in tessera.conf). --privacy-multi-tenancy-enabled enables multi-tenancy. note --rpc-http-authentication-jwt-public-key-file is only required when using JWT public key authentication. If using username and password authentication, use --rpc-http-authentication-credentials-file instead. Start the remaining Besu nodes.","s":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#5-start-besu-node-1","p":1005},{"i":1021,"t":"Generate the JWT for each tenant and specify the tenant's Tessera public key in the privacyPublicKey field. Ensure you apply the appropriate JSON-RPC API permissions to the token. For example, ensure you enable the PRIV and EEA APIs for privacy. note This step is not required when using username and password authentication to create the required JWTs. Use the authentication token to make requests.","s":"6. Generate the tenant JWTs","u":"/private-networks/tutorials/privacy/multi-tenancy","h":"#6-generate-the-tenant-jwts","p":1005},{"i":1023,"t":"The following steps set up a permissioned network with local node and account permissions. The network uses the IBFT 2.0 proof of authority consensus protocol. danger A permissioned Ethereum network as described here is not protected against all attack vectors. We recommend applying defense in depth to protect your infrastructure.","s":"Create a permissioned network","u":"/private-networks/tutorials/permissioning","h":"","p":1022},{"i":1025,"t":"Besu curl (or similar Web service client)","s":"Prerequisites","u":"/private-networks/tutorials/permissioning","h":"#prerequisites","p":1022},{"i":1028,"t":"Each node requires a data directory for the blockchain data. Create directories for your permissioned network and each of the three nodes, and a data directory for each node: Permissioned-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data └── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create folders","u":"/private-networks/tutorials/permissioning","h":"#1-create-folders","p":1022},{"i":1030,"t":"The configuration file defines the IBFT 2.0 genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called ibftConfigFile.json and save it in the Permissioned-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } Security warning Don't use the accounts in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create the configuration file","u":"/private-networks/tutorials/permissioning","h":"#2-create-the-configuration-file","p":1022},{"i":1032,"t":"In the Permissioned-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/permissioning","h":"#3-generate-node-keys-and-a-genesis-file","p":1022},{"i":1034,"t":"Copy the genesis.json file to the Permisssioned-Network directory.","s":"4. Copy the genesis file to the Permissioned-Network directory","u":"/private-networks/tutorials/permissioning","h":"#4-copy-the-genesis-file-to-the-permissioned-network-directory","p":1022},{"i":1036,"t":"For each node, copy the key files to the data directory for that node Permissioned-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/permissioning","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":1022},{"i":1038,"t":"The permissions configuration file defines the nodes and accounts allowlists. Copy the following permissions configuration to a file called permissions_config.toml and save a copy in the Node-1/data, Node-2/data, Node-3/data, and Node-4/data directories: permissions_config.toml accounts-allowlist=[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"0x627306090abaB3A6e1400e9345bC60c78a8BEf57\"] nodes-allowlist=[] The permissions configuration file includes the first two accounts from the genesis file. Use the perm_addNodesToAllowlist JSON-RPC API method to add permissioned nodes after starting the nodes.","s":"6. Create the permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#6-create-the-permissions-configuration-file","p":1022},{"i":1040,"t":"Use the following command: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" The command line allows you to enable: Nodes and accounts permissions using --permissions-nodes-config-file-enabled and --permissions-accounts-config-file-enabled. The JSON-RPC API using --rpc-http-enabled. The ADMIN, ETH, NET, PERM, and IBFT APIs using --rpc-http-api. All-host access to the HTTP JSON-RPC API using --host-allowlist. All-domain access to the node through the HTTP JSON-RPC API using --rpc-http-cors-origins. When the node starts, the enode URL displays. You need the enode URL to specify Node-1 as a peer and update the permissions configuration file in the following steps.","s":"7. Start Node-1","u":"/private-networks/tutorials/permissioning","h":"#7-start-node-1","p":1022},{"i":1042,"t":"Start another terminal, change to the Node-2 directory, and start Node-2: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30304 --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30304 --rpc-http-port=8546 The command line specifies: A different port to Node-1 for P2P discovery using --p2p-port. A different port to Node-1 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-2 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"8. Start Node-2","u":"/private-networks/tutorials/permissioning","h":"#8-start-node-2","p":1022},{"i":1044,"t":"Start another terminal, change to the Node-3 directory, and start Node-3: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30305 --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30305 --rpc-http-port=8547 The command line specifies: A different port to Node-1 and Node-2 for P2P discovery using --p2p-port. A different port to Node-1 and Node-2 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-3 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"9. Start Node-3","u":"/private-networks/tutorials/permissioning","h":"#9-start-node-3","p":1022},{"i":1046,"t":"Start another terminal, change to the Node-4 directory, and start Node-4: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30306 --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --permissions-nodes-config-file-enabled --permissions-accounts-config-file-enabled --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30306 --rpc-http-port=8548 The command line specifies: A different port to Node-1, Node-2, and Node-3 for P2P discovery using --p2p-port. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using --rpc-http-port. A data directory for Node-4 using --data-path. Other options as for Node-1. When the node starts, the enode URL displays. You need the enode URL to update the permissions configuration file in the following steps.","s":"10. Start Node-4","u":"/private-networks/tutorials/permissioning","h":"#10-start-node-4","p":1022},{"i":1048,"t":"Start another terminal and use the perm_addNodesToAllowlist JSON-RPC API method to add the nodes to the permissions configuration file for each node. Replace , , , and with the enode URL displayed when starting each node. Node-1 Node-2 Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8545 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8546 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"perm_addNodesToAllowlist\",\"params\":[[\"\",\"\",\"\",\"EnodeNode4\"]], \"id\":1}' http://127.0.0.1:8548 tip The curl call is the same for each node except for the JSON-RPC endpoint.","s":"11. Add enode URLs for nodes to permissions configuration file","u":"/private-networks/tutorials/permissioning","h":"#11-add-enode-urls-for-nodes-to-permissions-configuration-file","p":1022},{"i":1050,"t":"Use the admin_addPeer JSON-RPC API method to add Node-1 as a peer for Node-2, Node-3, and Node-4. Replace with the enode URL displayed when starting Node-1. Node-2 Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8546 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548 tip The curl call is the same for each node except for the JSON-RPC endpoint. Replace with the enode URL displayed when starting Node-2. Node-3 Node-4 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8547 curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548 Replace with the enode URL displayed when starting Node-3. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"\"],\"id\":1}' http://127.0.0.1:8548","s":"12. Add nodes as peers","u":"/private-networks/tutorials/permissioning","h":"#12-add-nodes-as-peers","p":1022},{"i":1052,"t":"Check peer count​ Use curl to call the JSON-RPC API net_peerCount method and confirm the nodes are functioning as peers: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8545 The result confirms Node-1 (the node running the JSON-RPC service) has three peers (Node-2, Node-3 and Node-4): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3\" } Send a transaction from an account in the allowlist​ Import the first account from the genesis file into MetaMask and send transactions, as described in the Quickstart tutorial: Account 1 Address: 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 Private key : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 0xad78ebc5ac6200000 (200000000000000000000 in decimal) info Besu doesn't support private key management. Try sending a transaction from an account not in the accounts allowlist​ Import the third account from the genesis file into MetaMask and try to send a transaction, as described in the Quickstart tutorial: Account 3 Address: 0xf17f52151EbEF6C7334FAD080c5704D77216b732 Private key: 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance: 0x90000000000000000000000 (2785365088392105618523029504 in decimal) Start a node not on the nodes allowlist​ In your Permissioned-Network directory, create a Node-5 directory and data directory inside it. Change to the Node-5 directory and start Node-5 specifying the Node-1 enode URL as the bootnode: MacOS Windows besu --data-path=data --bootnodes=\"\" --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30307 --rpc-http-port=8549 besu --data-path=data --bootnodes=\"\" --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ADMIN,ETH,NET,PERM,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"*\" --p2p-port=30307 --rpc-http-port=8549 Start another terminal and use curl to call the JSON-RPC API net_peerCount method: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' localhost:8549 The result confirms Node-5 has no peers even though it specifies Node-1 as a bootnode: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x0\" }","s":"13. Confirm permissioned network is working","u":"/private-networks/tutorials/permissioning","h":"#13-confirm-permissioned-network-is-working","p":1022},{"i":1054,"t":"When finished using the permissioned network, stop all nodes using Ctrl+C in each terminal window. tip To restart the permissioned network in the future, start from step 7.","s":"Stop nodes","u":"/private-networks/tutorials/permissioning","h":"#stop-nodes","p":1022},{"i":1056,"t":"Configuring a network that supports private transactions requires starting a Tessera node for each Besu node. Besu command line options associate the Besu node with the Tessera node. This tutorial assumes you have completed setting up an IBFT 2.0 network to the point where you have created the genesis file and copied the private keys. If not, complete steps 1 to 5 of the Create an IBFT 2.0 tutorial before continuing. important To support privacy, ensure your genesis file includes at least the byzantium milestone. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant. In this tutorial we start Tessera nodes for the four Besu nodes and associate each Besu node with a Tessera node.","s":"Create a privacy-enabled network","u":"/private-networks/tutorials/privacy","h":"","p":1055},{"i":1058,"t":"Install Tessera.","s":"Prerequisites","u":"/private-networks/tutorials/privacy","h":"#prerequisites","p":1055},{"i":1061,"t":"Inside each Node-* directory, create a Tessera directory: IBFT-Network/ ├── Node-1 │ ├── data │ ├── Tessera ├── Node-2 │ ├── data │ ├── Tessera ├── Node-3 │ ├── data │ ├── Tessera └── Node-4 ├── data ├── Tessera","s":"1. Create Tessera directories","u":"/private-networks/tutorials/privacy","h":"#1-create-tessera-directories","p":1055},{"i":1063,"t":"This example creates an unlocked private key, meaning you do not need a password to decrypt the private key file. In each Tessera directory, generate a public/private key pair for the Tessera node: tessera -keygen -filename nodeKey At the prompt, press Enter to create an unlocked key. Tessera generates the public/private key pair and saves the keys in the nodeKey.pub and nodeKey.key files.","s":"2. Generate Tessera keys","u":"/private-networks/tutorials/privacy","h":"#2-generate-tessera-keys","p":1055},{"i":1065,"t":"In the Tessera directory for each node, create a file called tessera.conf, with the following configuration: important In production environments, only specify tls as OFF if another transport security mechanism, such as WireGuard, is in place. Node-1 Node-2 Node-3 Node-4 { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9101\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9102\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9103\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9201\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9202\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9203\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9303\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9301\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9302\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9303\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9403\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } { \"mode\": \"orion\", \"useWhiteList\": false, \"jdbc\": { \"username\": \"sa\", \"password\": \"\", \"url\": \"jdbc:h2:./target/h2/tessera1\", \"autoCreateTables\": true }, \"serverConfigs\": [ { \"app\": \"ThirdParty\", \"serverAddress\": \"http://localhost:9401\", \"communicationType\": \"REST\" }, { \"app\": \"Q2T\", \"serverAddress\": \"http://localhost:9402\", \"communicationType\": \"REST\" }, { \"app\": \"P2P\", \"serverAddress\": \"http://localhost:9403\", \"sslConfig\": { \"tls\": \"OFF\" }, \"communicationType\": \"REST\" } ], \"peer\": [ { \"url\": \"http://localhost:9103\" }, { \"url\": \"http://localhost:9203\" }, { \"url\": \"http://localhost:9303\" } ], \"keys\": { \"passwords\": [], \"keyData\": [ { \"privateKeyPath\": \"nodeKey.key\", \"publicKeyPath\": \"nodeKey.pub\" } ] }, \"alwaysSendTo\": [] } In the configuration file, specify: Different port numbers for the various servers in the serverConfigs section. The address of the Tessera nodes to discover, in the peer section. The location of the public/private key pair.","s":"3. Create Tessera configuration files","u":"/private-networks/tutorials/privacy","h":"#3-create-tessera-configuration-files","p":1055},{"i":1067,"t":"In each Tessera directory, start Tessera specifying the configuration file created in the previous step: tessera -configfile tessera.conf info After starting the first Tessera node and before starting the other nodes, the log message failed to connect to node displays. This is normal behavior. Until you start the other peer nodes, your node is not connected and displays this warning. You can continue to start the other nodes.","s":"4. Start the Tessera nodes","u":"/private-networks/tutorials/privacy","h":"#4-start-the-tessera-nodes","p":1055},{"i":1069,"t":"In the Node-1 directory, start Besu Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --privacy-enabled --privacy-url=http://127.0.0.1:9102 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies privacy options: --privacy-enabled enables privacy --privacy-url specifies the Q2T server address of the Tessera node (Q2T in tessera.conf) --privacy-public-key-file specifies the file containing Tessera node public key (created in 3. Generate Tessera Keys) --rpc-http-api includes EEA and PRIV in the list of JSON-RPC APIs to enable privacy JSON-RPC API methods. --min-gas-price is 0 for a free gas network. note Use the --privacy-marker-transaction-signing-key-file command line option to sign privacy marker transactions using a supplied key. The command line option is mandatory in privacy-enabled paid gas networks. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"5. Start Besu Node-1","u":"/private-networks/tutorials/privacy","h":"#5-start-besu-node-1","p":1055},{"i":1071,"t":"In the Node-2 directory, start Besu Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 --privacy-enabled --privacy-url=http://127.0.0.1:9202 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1. note When running Besu from the Docker image, expose ports.","s":"6. Start Besu Node-2","u":"/private-networks/tutorials/privacy","h":"#6-start-besu-node-2","p":1055},{"i":1073,"t":"In the Node-3 directory, start Besu Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 --privacy-enabled --privacy-url=http://127.0.0.1:9302 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.","s":"7. Start Besu Node-3","u":"/private-networks/tutorials/privacy","h":"#7-start-besu-node-3","p":1055},{"i":1075,"t":"In the Node-4 directory, start Besu Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera/nodeKey.pub --min-gas-price=0 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT,EEA,PRIV --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 --privacy-enabled --privacy-url=http://127.0.0.1:9402 --privacy-public-key-file=Tessera\\nodeKey.pub --min-gas-price=0 The command line specifies the same options as for Node-1 with different ports and Tessera node URL. The --bootnodes option specifies the enode URL of Node-1.","s":"8. Start Besu Node-4","u":"/private-networks/tutorials/privacy","h":"#8-start-besu-node-4","p":1055},{"i":1077,"t":"To use the examples provided in the web3js-quorum library with your privacy network: note This example uses 3 of the 4 nodes configured in the privacy tutorial. Clone the ConsenSys/web3js-quorum repository: git clone https://github.com/ConsenSys/web3js-quorum In the web3js-quorum directory: npm install In the example directory, update the keys.js file to include: chain ID Tessera node public keys Besu node RPC URLs Besu node private keys. In the example/multiNodeExample directory, deploy the contract: node deployContract.js A private transaction receipt returns. Transaction Hash 0x23b57ddc3ecf9c9a548e4401a411420ffc0002fd259a86d5656add7c6108beeb Waiting for transaction to be mined ... Private Transaction Receipt { contractAddress: '0xfee84481da8f4b9a998dfacb38091b3145bb01ab', from: '0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb', to: null, output: '0x6080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f245811461005b5780636057361d1461008257806367e404ce146100ae575b600080fd5b34801561006757600080fd5b506100706100ec565b60408051918252519081900360200190f35b34801561008e57600080fd5b506100ac600480360360208110156100a557600080fd5b50356100f2565b005b3480156100ba57600080fd5b506100c3610151565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b60025490565b604080513381526020810183905281517fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f5929181900390910190a16002556001805473ffffffffffffffffffffffffffffffffffffffff191633179055565b60015473ffffffffffffffffffffffffffffffffffffffff169056fea165627a7a72305820c7f729cb24e05c221f5aa913700793994656f233fe2ce3b9fd9a505ea17e8d8a0029', logs: [] } note If you receive a Method not enabled error, ensure you enabled the appropriate APIs using the --rpc-http-api Copy the contract address from the private transaction receipt and set the CONTRACT_ADDRESS environment variable: export CONTRACT_ADDRESS= example export CONTRACT_ADDRESS=0xfee84481da8f4b9a998dfacb38091b3145bb01ab Store a value in the contract from Node 1: node storeValueFromNode1.js Node 1 stores the value of 1000 (3e8 in hex) and is visible to Node 1 and Node 2. Transaction Hash: 0xd9d71cc6f64675e1a48183ded8f08930af317eb883ebae4c4eec66ae68618d85 Waiting for transaction to be mined ... Event Emited: 0x0000000000000000000000009811ebc35d7b06b3fa8dc5809a1f9c52751e1deb00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8545: 0x00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8546: 0x00000000000000000000000000000000000000000000000000000000000003e8 Waiting for transaction to be mined ... Get Value from http://localhost:8547: 0x Store a value in the contract from Node 2: node storeValueFromNode2.js Node 2 stores the value of 42 (2a in hex) and is visible to Node 1 and Node 2. Transaction Hash: 0xa025433aec47a71b0230f12f43708812fd38ff7b7c1dc89a715f71dcbd5fbdbf Waiting for transaction to be mined ... Event Emited: 0x000000000000000000000000372a70ace72b02cc7f1757183f98c620254f9c8d000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8545: 0x000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8546: 0x000000000000000000000000000000000000000000000000000000000000002a Waiting for transaction to be mined ... Get Value from http://localhost:8547: 0x note As expected, log messages indicate that Node 3 Tessera cannot find payloads because Node 3 does not have access to the private transactions between Node 1 and Node 2.","s":"Use the multi-node example in the web3js-quorum client library","u":"/private-networks/tutorials/privacy/web3js-quorum","h":"","p":1076},{"i":1079,"t":"A private network provides a configurable network for testing. This private network uses the QBFT (proof of authority) consensus protocol. The QBFT network in this tutorial implements the block header validator selection method to manage validators. For a tutorial on how to implement the contract validator selection method, follow the steps in the example smart contract repository. important The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall. This tutorial configures a private network using QBFT for educational purposes only. QBFT requires 4 validators to be Byzantine fault tolerant.","s":"Create a private network using QBFT","u":"/private-networks/tutorials/qbft","h":"","p":1078},{"i":1081,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/qbft","h":"#prerequisites","p":1078},{"i":1083,"t":"Listed on the right-hand side of the page are the steps to create a private network using QBFT with four nodes. The four nodes are all validators.","s":"Steps","u":"/private-networks/tutorials/qbft","h":"#steps","p":1078},{"i":1085,"t":"Each node requires a data directory for the blockchain data. Create directories for your private network, each of the four nodes, and a data directory for each node: QBFT-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data ├── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/qbft","h":"#1-create-directories","p":1078},{"i":1087,"t":"The configuration file defines the QBFT genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the QBFT genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called qbftConfigFile.json and save it in the QBFT-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"qbft\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } note We recommend specifying the latest milestone when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a configuration file","u":"/private-networks/tutorials/qbft","h":"#2-create-a-configuration-file","p":1078},{"i":1089,"t":"In the QBFT-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=qbftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/qbft","h":"#3-generate-node-keys-and-a-genesis-file","p":1078},{"i":1091,"t":"Copy the genesis.json file to the QBFT-Network directory.","s":"4. Copy the genesis file to the QBFT-Network directory","u":"/private-networks/tutorials/qbft","h":"#4-copy-the-genesis-file-to-the-qbft-network-directory","p":1078},{"i":1093,"t":"For each node, copy the key files to the data directory for that node QBFT-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/qbft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":1078},{"i":1095,"t":"In the Node-1 directory, start Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=..\\genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line: Specifies the data directory for Node-1 using the --data-path option. Enables the JSON-RPC API using the --rpc-http-enabled option. Enables the ETH, NET, and QBFT APIs using the --rpc-http-api option. Enables all-host access to the HTTP JSON-RPC API using the --host-allowlist option. Enables all-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/qbft","h":"#6-start-the-first-node-as-the-bootnode","p":1078},{"i":1097,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: The data directory for Node-2 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"7. Start Node-2","u":"/private-networks/tutorials/qbft","h":"#7-start-node-2","p":1078},{"i":1099,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: The data directory for Node-3 using the --data-path option. A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"8. Start Node-3","u":"/private-networks/tutorials/qbft","h":"#8-start-node-3","p":1078},{"i":1101,"t":"Start another terminal, change to the Node-4 directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 The command line specifies: The data directory for Node-4 using the --data-path option. A different port to Node-1, Node-2, and Node-3 for P2P discovery using the --p2p-port option. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"9. Start Node-4","u":"/private-networks/tutorials/qbft","h":"#9-start-node-4","p":1078},{"i":1103,"t":"Start another terminal, use curl to call the JSON-RPC API qbft_getvalidatorsbyblocknumber method and confirm the network has four validators: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"qbft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' localhost:8545 The result displays the four validators: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x73ced0bd3def2e2d9859e3bd0882683a2e6835fb\", \"0x7a175f3542ceb60bf80fb536b3f42e7a30c0a6d7\", \"0x7f6efa6e34f8c9b591a9ad4763e21b3fca31bcd6\", \"0xc64140f1c9d5bb82e54976e568ad39958c3e94be\" ] } Look at the logs to confirm Besu is producing blocks: 2021-05-26 08:47:00.221+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0x4ee4456536e2793523df87288fae76518089eec91c3f7e05e220f1f4d3f6f95b) in 0.016s. Peers: 4 2021-05-26 08:47:02.071+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #2 / 0 tx / 0 pending / 0 (0.0%) gas / (0x6fc47ada7146d75f6a46911d8d4038795b0c99970bbd4ce0c6d6aa60955f66fe) 2021-05-26 08:47:04.051+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #3 / 0 tx / 0 pending / 0 (0.0%) gas / (0x3cb663880a65103266b11a8d8631beca5c482d515ac287125aa077b2e31b80b0) 2021-05-26 08:47:06.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Produced #4 / 0 tx / 0 pending / 0 (0.0%) gas / (0xc2927915ac0c94bab5fc9acea6608455f1c857d69e97191dc2c39e4ac411817b) 2021-05-26 08:47:08.058+10:00 | pool-8-thread-1 | INFO | QbftBesuControllerBuilder | Imported #5 / 0 tx / 0 pending / 0 (0.0%) gas / (0xba63471d62c936733add9b884f5213c3842af9f52460268e39e0666ab82f02a5) important If the key files were not copied to the correct directory in step 5, the network will not start producing blocks. The logs for each node should indicate the public key was loaded from the data/key directory: 2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Loaded public key 0x931d32f1aec4e45b150ee38f3c74157a750fc53f523e63fe2b07bf3fce43a3de64587fc9aaf3736444f2e3eef0eea90be3b67d18be7b5b2b7cb2fcd670416a7e from /QBFT-Network/Node-1/data/key If the keys were not copied to the correct directory, Besu creates a key when starting up: 2021-05-26 08:43:16.592+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to /QBFT-Network/Node-1/data/key If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks.","s":"10. Confirm the private network is working","u":"/private-networks/tutorials/qbft","h":"#10-confirm-the-private-network-is-working","p":1078},{"i":1105,"t":"Use the QBFT API to remove or add validators, or import accounts to MetaMask and send transactions as described in the Quickstart tutorial. note To add or remove nodes as validators you need the node address. The directory created for each node has the node address as the name. Besu doesn't support private key management. You can switch from the block header validator selection method configured here, to the contract validator selection method by updating the genesis file and configuring a transition.","s":"Next steps","u":"/private-networks/tutorials/qbft","h":"#next-steps","p":1078},{"i":1107,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the QBFT network in the future, start from step 6. *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Stop the nodes","u":"/private-networks/tutorials/qbft","h":"#stop-the-nodes","p":1078},{"i":1109,"t":"A private network provides a configurable network for testing. This private network uses the IBFT 2.0 (proof of authority) consensus protocol. danger The steps in this tutorial create an isolated, but not protected or secure, Ethereum private network. We recommend running the private network behind a properly configured firewall. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires 4 validators to be Byzantine fault tolerant.","s":"Create a private network using IBFT 2.0","u":"/private-networks/tutorials/ibft","h":"","p":1108},{"i":1111,"t":"Besu Curl (or similar webservice client).","s":"Prerequisites","u":"/private-networks/tutorials/ibft","h":"#prerequisites","p":1108},{"i":1113,"t":"Listed on the right-hand side of the page are the steps to create a private network using IBFT 2.0 with four nodes. The four nodes are all validators.","s":"Steps","u":"/private-networks/tutorials/ibft","h":"#steps","p":1108},{"i":1115,"t":"Each node requires a data directory for the blockchain data. Create directories for your private network, each of the four nodes, and a data directory for each node: IBFT-Network/ ├── Node-1 │ ├── data ├── Node-2 │ ├── data ├── Node-3 │ ├── data └── Node-4 ├── data","s":"1. Create directories","u":"/private-networks/tutorials/ibft","h":"#1-create-directories","p":1108},{"i":1117,"t":"The configuration file defines the IBFT 2.0 genesis file and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the genesis property defining the IBFT 2.0 genesis file, except for the extraData string, which Besu generates automatically in the resulting genesis file. The second is the blockchain property defining the number of key pairs to generate. Copy the following configuration file definition to a file called ibftConfigFile.json and save it in the IBFT-Network directory: { \"genesis\": { \"config\": { \"chainId\": 1337, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"fe3b557e8fb62b89f4916b721be55ceb828dbd73\": { \"privateKey\": \"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"0xad78ebc5ac6200000\" }, \"627306090abaB3A6e1400e9345bC60c78a8BEf57\": { \"privateKey\": \"c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" }, \"f17f52151EbEF6C7334FAD080c5704D77216b732\": { \"privateKey\": \"ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\", \"comment\": \"private key and this comment are ignored. In a real chain, the private key should NOT be stored\", \"balance\": \"90000000000000000000000\" } } }, \"blockchain\": { \"nodes\": { \"generate\": true, \"count\": 4 } } } note We recommend specifying the latest milestone when creating the configuration file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. warning Do not use the accounts in alloc in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure.","s":"2. Create a configuration file","u":"/private-networks/tutorials/ibft","h":"#2-create-a-configuration-file","p":1108},{"i":1119,"t":"In the IBFT-Network directory, generate the node key and genesis file: besu operator generate-blockchain-config --config-file=ibftConfigFile.json --to=networkFiles --private-key-file-name=key Besu creates the following in the networkFiles directory: genesis.json - The genesis file including the extraData property specifying the four nodes are validators. A directory for each node named using the node address and containing the public and private key for each node. networkFiles/ ├── genesis.json └── keys ├── 0x438821c42b812fecdcea7fe8235806a412712fc0 │ ├── key │ └── key.pub ├── 0xca9c2dfa62f4589827c0dd7dcf48259aa29f22f5 │ ├── key │ └── key.pub ├── 0xcd5629bd37155608a0c9b28c4fd19310d53b3184 │ ├── key │ └── key.pub └── 0xe96825c5ab8d145b9eeca1aba7ea3695e034911a ├── key └── key.pub","s":"3. Generate node keys and a genesis file","u":"/private-networks/tutorials/ibft","h":"#3-generate-node-keys-and-a-genesis-file","p":1108},{"i":1121,"t":"Copy the genesis.json file to the IBFT-Network directory.","s":"4. Copy the genesis file to the IBFT-Network directory","u":"/private-networks/tutorials/ibft","h":"#4-copy-the-genesis-file-to-the-ibft-network-directory","p":1108},{"i":1123,"t":"For each node, copy the key files to the data directory for that node IBFT-Network/ ├── genesis.json ├── Node-1 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-2 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-3 │ ├── data │ │ ├── key │ │ ├── key.pub ├── Node-4 │ ├── data │ │ ├── key │ │ ├── key.pub","s":"5. Copy the node private keys to the node directories","u":"/private-networks/tutorials/ibft","h":"#5-copy-the-node-private-keys-to-the-node-directories","p":1108},{"i":1125,"t":"In the Node-1 directory, start Node-1: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" The command line: Specifies the data directory for Node-1 using the --data-path option. Enables the JSON-RPC API using the --rpc-http-enabled option. Enables the ETH, NET, and IBFT APIs using the --rpc-http-api option. Enables all-host access to the HTTP JSON-RPC API using the --host-allowlist option. Enables all-domain access to the node through the HTTP JSON-RPC API using the --rpc-http-cors-origins option. When the node starts, the enode URL displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps.","s":"6. Start the first node as the bootnode","u":"/private-networks/tutorials/ibft","h":"#6-start-the-first-node-as-the-bootnode","p":1108},{"i":1127,"t":"Start another terminal, change to the Node-2 directory and start Node-2 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8546 The command line specifies: The data directory for Node-2 using the --data-path option. A different port to Node-1 for P2P discovery using the --p2p-port option. A different port to Node-1 for HTTP JSON-RPC using the --rpc-http-port option. The enode URL of Node-1 using the --bootnodes option. Other options as for Node-1.","s":"7. Start Node-2","u":"/private-networks/tutorials/ibft","h":"#7-start-node-2","p":1108},{"i":1129,"t":"Start another terminal, change to the Node-3 directory and start Node-3 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8547 The command line specifies: The data directory for Node-3 using the --data-path option. A different port to Node-1 and Node-2 for P2P discovery using the --p2p-port option. A different port to Node-1 and Node-2 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"8. Start Node-3","u":"/private-networks/tutorials/ibft","h":"#8-start-node-3","p":1108},{"i":1131,"t":"Start another terminal, change to the Node-4 directory and start Node-4 specifying the Node-1 enode URL copied when starting Node-1 as the bootnode: MacOS Windows besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 besu --data-path=data --genesis-file=..\\genesis.json --bootnodes= --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist=\"*\" --rpc-http-cors-origins=\"all\" --rpc-http-port=8548 The command line specifies: The data directory for Node-4 using the --data-path option. A different port to Node-1, Node-2, and Node-3 for P2P discovery using the --p2p-port option. A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the --rpc-http-port option. The bootnode as for Node-2. Other options as for Node-1.","s":"9. Start Node-4","u":"/private-networks/tutorials/ibft","h":"#9-start-node-4","p":1108},{"i":1133,"t":"Start another terminal, use curl to call the JSON-RPC API ibft_getvalidatorsbyblocknumber method and confirm the network has four validators: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"ibft_getValidatorsByBlockNumber\",\"params\":[\"latest\"], \"id\":1}' localhost:8545 The result displays the four validators: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x1e326b6da177ede2d3eb6d7247bd9f6901d40234\", \"0x4aaac297fefe4466ebcb0b23ab90c5f466b11556\", \"0xa267ead2e91e1673e0943b925176b51d9cd4f6d2\", \"0xe3e680bc0ff485d1d415a384721f19e0db65fea7\" ] } Look at the logs to confirm Besu is producing blocks: 2020-12-21 07:22:17.883+10:00 | EthScheduler-Workers-0 | INFO | PersistBlockTask | Imported #1 / 0 tx / 0 om / 0 (0.0%) gas / (0xde088192f27ca376eea969cb7a4a1de445bd923fde0444194c88e630f7705584) in 0.010s. Peers: 4 2020-12-21 07:22:19.057+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=2, Round=0}, hash=0x2ca2652fa79ae2b3b6aadcfb13d5d362ffd6207c3b5ae47971e04eb9d05deaa9 2020-12-21 07:22:21.044+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=3, Round=0}, hash=0x5d9a06cd17127712cfae7d1c25f705f302e146f4b64a73de3c814e1b5a3f9a16 2020-12-21 07:22:23.049+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=4, Round=0}, hash=0x843981375f4cb2bb0f33a09b647ac27da5df2c539d940d8344c907eede57829c 2020-12-21 07:22:25.060+10:00 | pool-8-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=5, Round=0}, hash=0x82b2069961d9185f7857cad1123de72d715729e122441335db486ea436834d6e info If the key files were not copied to the correct directory in step 5, the network will not start producing blocks. The logs for each node should indicate the public key was loaded from the data/key directory: 2020-12-21 07:16:18.360+10:00 | main | INFO | KeyPairUtil | Loaded public key 0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc from /IBFT-Network/Node-1/data/key If the keys were not copied to the correct directory, Besu creates a key when starting up: 2020-12-21 07:33:11.458+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to /IBFT-Network/Node-1/data/key If a new key was created, the validator key specified in the configuration does not match the created key and the node cannot participate in creating blocks.","s":"10. Confirm the private network is working","u":"/private-networks/tutorials/ibft","h":"#10-confirm-the-private-network-is-working","p":1108},{"i":1135,"t":"Use the IBFT API to remove or add validators. note To add or remove nodes as validators you need the node address. The directory created for each node has the node address as the name. This tutorial configures a private network using IBFT 2.0 for educational purposes only. IBFT 2.0 requires four validators to be Byzantine fault tolerant. Import accounts to MetaMask and send transactions as described in the Quickstart tutorial. info Besu doesn't support private key management.","s":"Next steps","u":"/private-networks/tutorials/ibft","h":"#next-steps","p":1108},{"i":1137,"t":"When finished using the private network, stop all nodes using ++ctrl+c++ in each terminal window. tip To restart the IBFT 2.0 network in the future, start from 6. Start First Node as Bootnode. *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers.","s":"Stop the nodes","u":"/private-networks/tutorials/ibft","h":"#stop-the-nodes","p":1108},{"i":1139,"t":"Besu serves as an execution client on public proof-of-stake Ethereum networks such as Ethereum Mainnet, Holesky, and Sepolia. You can also run Besu using proof of work on Ethereum Classic (ETC). Get started by installing Besu.","s":"Besu for public networks","u":"/public-networks","h":"","p":1138},{"i":1141,"t":"The following diagram outlines the high-level architecture of Besu for public networks. If you have any questions about Besu for public networks, ask on the besu channel on Discord.","s":"Architecture","u":"/public-networks","h":"#architecture","p":1138},{"i":1144,"t":"The genesis file defines the first block in the chain, and the first block defines which chain you want to join. For Ethereum Mainnet and public testnets (for example, Holesky) the genesis configuration definition is in Besu and used when specifying a public network using the --network command line option. For private networks, create a JSON genesis file, then specify the genesis file using the --genesis-file command line option. The genesis file specifies the network-wide settings, such as those for a free gas network, so all nodes in a network must use the same genesis file. note You can specify node-level settings on the command line or in the node configuration file. Example IBFT 2.0 genesis file { \"config\": { \"chainId\": 2018, \"berlinBlock\": 0, \"ibft2\": { \"blockperiodseconds\": 2, \"epochlength\": 30000, \"requesttimeoutseconds\": 4 } }, \"nonce\": \"0x0\", \"timestamp\": \"0x58ee40ba\", \"extraData\": \"0xf83ea00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000c0\", \"gasLimit\": \"0x1fffffffffffff\", \"difficulty\": \"0x1\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\": { \"balance\": \"0xad78ebc5ac6200000\" } } }","s":"Genesis file","u":"/public-networks/concepts/genesis-file","h":"","p":1143},{"i":1146,"t":"Transaction mining causes smart contracts to emit events and write logs to the blockchain. The smart contract address is the link to the logs and the blockchain includes the logs, but contracts cannot access logs. Log storage is cheaper than contract storage (that is, it costs less gas) so storing and accessing the required data in logs reduces the cost. For example, use logs to display all transfers made using a specific contract, but not the current state of the contract. A Dapp front end can either access logs using the JSON-RPC API filter methods or subscribe to logs using the RPC Pub/Sub API. Use admin_generateLogBloomCache to improve log retrieval performance.","s":"Events and logs","u":"/public-networks/concepts/events-and-logs","h":"","p":1145},{"i":1148,"t":"Log entries contain up to four topics. The first topic is the event signature hash and up to three topics are the indexed event parameters. A log entry for an event with one indexed parameter { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x84\", \"blockHash\": \"0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336\", \"transactionHash\": \"0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }","s":"Topics","u":"/public-networks/concepts/events-and-logs","h":"#topics","p":1145},{"i":1150,"t":"Up to three event parameters can have the indexed attribute. Logs store these indexed parameters as topics. Indexed parameters are searchable and filterable. Topics are 32 bytes. If an indexed argument is an array (including string and byte datatypes), the log stores the keccak-256 hash of the parameter as a topic. Log data includes non-indexed parameters but is difficult to search or filter. A Solidity contract storing one indexed and one non-indexed parameter and has an event emitting the value of each parameter: pragma solidity ^0.5.1; contract Storage { uint256 public valueIndexed; uint256 public valueNotIndexed; event Event1(uint256 indexed valueIndexed, uint256 valueNotIndexed); function setValue(uint256 _valueIndexed, uint256 _valueNotIndexed) public { valueIndexed = _valueIndexed; valueNotIndexed = _valueNotIndexed; emit Event1(_valueIndexed, _valueNotIndexed); } } A log entry created by invoking the contract in the previous example with valueIndexed set to 5 and valueNotIndexed set to 7: { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x4d6\", \"blockHash\": \"0x7d0ac7c12ac9f622d346d444c7e0fa4dda8d4ed90de80d6a28814613a4884a67\", \"transactionHash\": \"0xe994022ada94371ace00c4e1e20663a01437846ced02f18b3f3afec827002781\", \"transactionIndex\": \"0x0\", \"address\": \"0x43d1f9096674b5722d359b6402381816d5b22f28\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000007\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] }","s":"Event parameters","u":"/public-networks/concepts/events-and-logs","h":"#event-parameters","p":1145},{"i":1152,"t":"The first topic in a log entry is always the event signature hash. The event signature hash is a keccak-256 hash of the event name and input argument types, with argument names ignored. For example, the event Hello(uint256 worldId) has the signature hash keccak('Hello(uint256)'). The signature identifies to which event log topics belong. A Solidity contract with two different events: pragma solidity ^0.5.1; contract Storage { uint256 public valueA; uint256 public valueB; event Event1(uint256 indexed valueA); event Event2(uint256 indexed valueB); function setValue(uint256 _valueA) public { valueA = _valueA; emit Event1(_valueA); } function setValueAgain(uint256 _valueB) public { valueB = _valueB; emit Event2(_valueB); } } The event signature hash for event 1 is keccak('Event1(uint256)') and the event signature hash for event 2 is keccak('Event2(uint256)'). The hashes are: 04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3 for event 1 06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e for event 2. tip You can use a library keccak (sha3) hash function, such as provided in Web3.js, or an online tool, such as https://emn178.github.io/online-tools/keccak_256.html, to generate event signature hashes. Log entries from invoking the Solidity contract in the previous example: [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x84\", \"blockHash\": \"0x5fc573d76ec48ec80cbc43f299ebc306a8168112e3a4485c23e84e9a40f5d336\", \"transactionHash\": \"0xcb52f02342c2498df82c49ac26b2e91e182155c8b2a2add5b6dc4c249511f85a\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\", \"0x0000000000000000000000000000000000000000000000000000000000000001\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x87\", \"blockHash\": \"0x6643a1e58ad857f727552e4572b837a85b3ca64c4799d085170c707e4dad5255\", \"transactionHash\": \"0xa95295fcea7df3b9e47ab95d2dadeb868145719ed9cc0e6c757c8a174e1fcb11\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x\", \"topics\": [ \"0x06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240e\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } ]","s":"Event signature hash","u":"/public-networks/concepts/events-and-logs","h":"#event-signature-hash","p":1145},{"i":1154,"t":"Filter options objects have a topics key to filter logs by topics. Topics are order-dependent. A transaction with a log containing topics [A, B] matches with the following topic filters: [] - Match any topic [A] - Match A in first position [[null], [B]] - Match any topic in first position AND B in second position [[A],[B]] - Match A in first position AND B in second position [[A, C], [B, D]] - Match (A OR C) in first position AND (B OR D) in second position. The following filter option object returns log entries for the Event Parameters example contract with valueIndexed set to 5 or 9: { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x43d1f9096674b5722d359b6402381816d5b22f28\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [ \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"0x0000000000000000000000000000000000000000000000000000000000000009\" ] ] }","s":"Topic filters","u":"/public-networks/concepts/events-and-logs","h":"#topic-filters","p":1145},{"i":1156,"t":"Each node has a private and public key pair, and a node address. Besu uses the private and public key pair to sign and verify transactions, and the node address as an identifier for the node.","s":"Node keys and node address","u":"/public-networks/concepts/node-keys","h":"","p":1155},{"i":1158,"t":"When starting Besu, if the --node-private-key-file option is not specified and a key file does not exist in the data directory for the node, Besu generates a node private key and writes it to the key file. If a key file does exist in the data directory when starting Besu, the node starts using the private key in the key file. info The private key is not encrypted.","s":"Node private key","u":"/public-networks/concepts/node-keys","h":"#node-private-key","p":1155},{"i":1160,"t":"The node public key displays in the log after starting Besu. Also referred to as the node ID, the node public key forms part of the enode URL of a node. You can export the node public key, either to standard output or to a specified file, using the public-key export subcommand.","s":"Node public key","u":"/public-networks/concepts/node-keys","h":"#node-public-key","p":1155},{"i":1162,"t":"Besu generates the node address by creating a hash of the node public key and using the last 20 bytes of the hash as the node address. It is also displayed in the logs after starting Besu. You can export the node address, either to standard output or to a specified file, using the public-key export-address subcommand.","s":"Node address","u":"/public-networks/concepts/node-keys","h":"#node-address","p":1155},{"i":1164,"t":"Use the --node-private-key-file option to specify a custom key file in any location. If the key file exists, the node starts with the private key in the key file. If the key file does not exist, Besu generates a node private key and writes it to the key file. For example, the following command either reads the node private key from privatekeyfile or writes a generated private key to privatekeyfile. besu --node-private-key-file=\"/Users/username/privatekeyfile\"","s":"Specify a custom node private key file","u":"/public-networks/concepts/node-keys","h":"#specify-a-custom-node-private-key-file","p":1155},{"i":1166,"t":"The enode URL identifies a node. For example, the --bootnodes option and the admin_addPeer method specify nodes by the enode URL. The enode URL format is enode://@[?discport=] where: is the node public key, excluding the initial 0x. is the host and TCP port the bootnode is listening on for P2P discovery. Specify the host and TCP port using the --p2p-host and --p2p-port options. The default host is 127.0.0.1 and the default port is 30303. note Standard Ethereum enode URLs allow hostnames as IP addresses only, however Besu provides domain name support in private permissioned networks. If the TCP listening and UDP discovery ports differ, the UDP port is specified as query parameter discport. info If the node public key is 0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f, the host is 10.3.58.6, the TCP listening port is 30303, and the UDP discovery port is 30301, then the enode URL is enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@10.3.58.6:30303?discport=30301 If the --p2p-host or --p2p-port options are not specified and the node public key is 0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f, then the enode URL is enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 The enode URL displays when starting a Besu node. Use the net_enode JSON-RPC API method to get the enode URL of the node. The enode advertised to other nodes during discovery is the external IP address and port, as defined by --nat-method.","s":"Enode URL","u":"/public-networks/concepts/node-keys","h":"#enode-url","p":1155},{"i":1168,"t":"caution Enode URL domain name support is an early access feature that you can use in private permissioned networks only. To use domain names in enode URLs: Configure DNS reverse lookup. Enable DNS support using the early access option --Xdns-enabled. Example enode URL using a domain name enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@mydomain.dev.example.net:30301 tip If deploying Besu using Kubernetes in private permissioned networks, use the --Xdns-enabled and --Xdns-update-enabled options to ensure that Besu can connect to a container after restarting even if the IP address of the container changes. Use the --Xhelp command line option to view early access options and their descriptions. If nodes are not connecting as expected, set the log level to TRACE to help troubleshoot the issue.","s":"Domain name support","u":"/public-networks/concepts/node-keys","h":"#domain-name-support","p":1155},{"i":1170,"t":"Besu offers two formats for storing the world state, Bonsai Tries and Forest of Tries.","s":"Data storage formats","u":"/public-networks/concepts/data-storage-formats","h":"","p":1169},{"i":1172,"t":"Bonsai Tries is a data storage layout policy designed to reduce storage requirements and increase read performance. This is the default for Besu. Bonsai stores leaf values in a trie log, separate from the branches of the trie. Bonsai stores nodes by the location of the node instead of the hash of the node. Bonsai can access the leaf from the underlying storage directly using the account key. This greatly reduces the disk space needed for storage and allows for less resource-demanding and faster read performance. Bonsai inherently prunes orphaned nodes and old branches. To run a node with Bonsai Tries data storage format, use the command line option --data-storage-format=BONSAI. important Do not run an archive node with Bonsai Tries. Bonsai is designed for retrieving recent data only. tip You can read more about Bonsai in Consensys' Guide to Bonsai Tries.","s":"Bonsai Tries","u":"/public-networks/concepts/data-storage-formats","h":"#bonsai-tries","p":1169},{"i":1174,"t":"Forest of Tries, also called forest mode, is another method of representing the world state, and is more suitable for archive nodes. In forest mode, each node in the trie is saved in a key-value store by hash. For each block, the world state is updated with new nodes, leaf nodes, and a new state root. Old leaf nodes remain in the underlying data store. Data is accessed and stored by hash, which increases the size of the database and increases the resources and time needed to access account data. warning Forest pruning using the --pruning-enabled option is no longer supported. We recommend using Bonsai Tries to save disk space.","s":"Forest of Tries","u":"/public-networks/concepts/data-storage-formats","h":"#forest-of-tries","p":1169},{"i":1177,"t":"Forest mode uses significantly more memory than Bonsai. With a full node, forest mode uses an estimated 750 GB of storage, while Bonsai uses an estimated 650 GB of storage. Archive nodes must use forest mode, which uses an estimated 12 TB of storage.","s":"Storage requirements","u":"/public-networks/concepts/data-storage-formats","h":"#storage-requirements","p":1169},{"i":1179,"t":"Forest mode must go through all the branches by hash to read a leaf value. Bonsai can access the leaf from the underlying storage directly using the account key. Bonsai will generally read faster than forest mode, particularly if the blocks are more recent. However, Bonsai becomes increasingly more resource-intensive the further in history you try to read data. To prevent this, you can limit how far Bonsai looks back while reconstructing data. The default limit Bonsai looks back is 512. To change the parameter, use the --bonsai-historical-block-limit option. This might directly impact JSON-RPC API queries. note Using --bonsai-historical-block-limit doesn't affect the size of the database being stored, only how far back to load. This means there is no \"safe minimum\" value to use with this option.","s":"Accessing data","u":"/public-networks/concepts/data-storage-formats","h":"#accessing-data","p":1169},{"i":1181,"t":"The following table shows the ways you can sync a full node with the different data storage formats using fast and snap sync. Data storage format Sync mode Storage estimate Can other nodes sync to your node? Bonsai Fast 1140 GB No Bonsai Snap 1090 GB Yes Bonsai Checkpoint 840 GB No Forest Fast 1200 GB Yes tip We recommend using snap sync with Bonsai for the fastest sync and lowest storage requirements.","s":"Syncing nodes","u":"/public-networks/concepts/data-storage-formats","h":"#syncing-nodes","p":1169},{"i":1183,"t":"Ethereum networks have two identifiers, a network ID and a chain ID. Although they often have the same value, they have different uses. Peer-to-peer communication between nodes uses the network ID, while the transaction signature process uses the chain ID. note EIP-155 introduced using the chain ID as part of the transaction signing process to protect against transaction replay attacks. For most networks, including Mainnet and the public testnets, the network ID and the chain ID are the same, with the network ID defaulting to the chain ID, as specified in the genesis file. Chain ID in the genesis file { \"config\": { \"ethash\": { }, \"chainID\": 1981 }, ... } Besu sets the chain ID (and by default the network ID) automatically, using either the --genesis-file option or when specifying a network using the --network option. The following table lists the available networks and their chain and network IDs. Network Chain Chain ID Network ID Type mainnet ETH 1 1 Production holesky ETH 17000 17000 Test sepolia ETH 11155111 11155111 Test dev ETH 2018 2018 Development classic ETC 61 1 Production mordor ETC 63 7 Test info The Ropsten, Rinkeby, and Kiln testnets are deprecated.","s":"Network ID and chain ID","u":"/public-networks/concepts/network-and-chain-id","h":"","p":1182},{"i":1185,"t":"Usually the network ID is the same as the chain ID, but if you want to separate specific nodes from the rest of the network so they can't connect or synchronize with other nodes, you can override the default network ID for those nodes using the --network-id option.","s":"Specify a different network ID","u":"/public-networks/concepts/network-and-chain-id","h":"#specify-a-different-network-id","p":1182},{"i":1187,"t":"If you update the chain ID (or network ID) of existing nodes, they can no longer peer with other nodes in the network. Nodes need to have a matching genesis file, including the chain ID, in order to peer. In this case, you're effectively running two chains that can't communicate with each other. To change a chain ID and start a new chain: Stop all your nodes using ctrl+c in each terminal window. Update the genesis file with the new chain ID. Make sure all nodes have the same genesis file. Delete the old data directory or point to a new location for each node. Restart the nodes. Warning Starting a new chain is starting from block zero. This means when you start a new chain with a new chain ID, you lose all previous data.","s":"Start a new chain with a new chain ID","u":"/public-networks/concepts/network-and-chain-id","h":"#start-a-new-chain-with-a-new-chain-id","p":1182},{"i":1189,"t":"Ethereum's Proof of Stake (PoS) protocol leverages two separate P2P networks supporting separate clients. Execution clients gossip transactions over their network, enabling them to manage their local transaction pool. Consensus clients gossip blocks over their network, enabling consensus and chain growth. A validator node also runs the validator client. info As as result of the 2022 Merge, Ethereum Mainnet transitioned from Proof of Work (PoW) to PoS consensus.","s":"Node clients","u":"/public-networks/concepts/node-clients","h":"","p":1188},{"i":1191,"t":"Under PoS, a full Ethereum Mainnet node is a combination of an execution client (previously called an Eth1 client client) and a consensus client (previously called an Eth2 client). The consensus client uses the Engine API to communicate with the execution client.","s":"Execution and consensus clients","u":"/public-networks/concepts/node-clients","h":"#execution-and-consensus-clients","p":1188},{"i":1193,"t":"Execution clients, such as Besu, manage the execution layer, including executing transactions and updating the world state. Execution clients serve JSON-RPC API requests and communicate with each other P2P. Besu is an execution client that you can run with: Any consensus client on Mainnet. Any consensus client on a testnet. Teku on Mainnet. Teku on a testnet.","s":"Execution clients","u":"/public-networks/concepts/node-clients","h":"#execution-clients","p":1188},{"i":1195,"t":"The consensus client (also known as the beacon node, CL client or, formerly, the Eth2 client) implements the PoS consensus algorithm, which enables the network to achieve agreement based on validated data from the execution client. Consensus clients serve REST API requests and communicate with each other P2P. Consensus clients, such as Teku contain beacon node implementations. The beacon node is the primary link to the Beacon Chain (i.e. the consensus layer). A consensus client can run without the (bundled) validator to keep up with the head of the chain, allowing the node to stay synced. Validator clients​ To operate a validator node, node operators must also run a validator client and deposit the required ETH into the deposit contract. The validator client handles attestations and block proposal — i.e. performs validator duties on the consensus layer. The validator client may either be run in the same process as the beacon node or separately. Validators earn rewards for performing validator duties, and fee recipients also earn rewards for the inclusion of execution layer transactions.","s":"Consensus clients","u":"/public-networks/concepts/node-clients","h":"#consensus-clients","p":1188},{"i":1197,"t":"The Merge transitioned Ethereum Mainnet to Proof of Stake (PoS) consensus. Under Ethereum's PoS, you must run a full node and stake 32 ETH to become a validator. note To operate a full node on Mainnet, you must run a beacon node, i.e. a consensus client and an execution client. To become a validator, you must also run a validator client (either in the same process as the beacon node or separately). PoS is preferred over Proof of Work and Proof of Authority as a consensus mechanism because it is more secure, requires less energy, and lowers the barrier to entry. The PoS mechanism randomly chooses validators to propose or validate blocks on the Beacon Chain in defined time frames. Proposers are responsible for proposing new consensus blocks, and non-proposing validators are responsible for validating (attesting to) proposed blocks. Validators earn rewards for proposing and attesting to consensus blocks eventually included in the Beacon Chain, and penalized for malicious behavior. Attestations make up the bulk of validator rewards (~85%). Validators also receive transaction fees for included blocks. Each consensus block contains an execution payload, which contains a list of transactions and other data required to execute and validate the payload. When a node validates a consensus block, its consensus client processes the block and sends the execution payload to the execution client, which: Assembles a block on the execution layer. Verifies pre-conditions. Executes transactions. Verifies post-conditions. Sends the validity result back to the consensus client. If the block is valid, the execution client includes it in the execution chain and stores the new state in execution state storage. If a consensus block receives attestations backed by enough staked ETH, the block is included in the Beacon Chain. In the case of competing chains, the chain with the highest number of validator votes is selected.","s":"Proof of stake consensus","u":"/public-networks/concepts/proof-of-stake","h":"","p":1196},{"i":1199,"t":"Besu supports parallel transaction execution, using an optimistic approach to parallelize transactions within a block. You can enable this feature when using the Bonsai Tries data storage format. This page provides an overview of the parallelization mechanism, and metrics that highlight Besu's improved performance. Important Parallel transaction execution is an early access feature. You can enable it using the --Xbonsai-parallel-tx-processing-enabled option.","s":"Parallel transaction execution","u":"/public-networks/concepts/parallel-transaction-execution","h":"","p":1198},{"i":1201,"t":"When parallel transaction execution is enabled, Besu initially executes all transactions within a block in parallel, operating under the optimistic assumption that they can all be executed concurrently without conflict. This parallel execution runs in the background, and Besu proceeds to sequentially process the transactions without waiting for the parallel execution to complete. The following flowchart outlines the transaction execution flow: Besu first determines if a transaction has been completed by the background parallel execution: Completed: If the transaction is completed, Besu examines whether there are any conflicts with previously executed transactions. No conflict: If no conflict is detected, Besu directly applies the state modifications generated in the background to the block, avoiding re-execution. Conflict detected: If a conflict is detected, Besu replays the transaction, using a cache of background reads to improve efficiency. Not completed: If the transaction is not completed, Besu executes it sequentially within the block to ensure its completion, independent of the background execution.","s":"Parallelization mechanism overview","u":"/public-networks/concepts/parallel-transaction-execution","h":"#parallelization-mechanism-overview","p":1198},{"i":1203,"t":"Besu's conflict detection strategy uses the accumulator, a Bonsai Tries feature that tracks addresses and slots touched or modified during block or transaction execution. tip You can read more about Bonsai Tries in Consensys' Guide to Bonsai Tries. If a slot, code, or anything else related to an account is modified, the Bonsai accumulator keeps track of this information. This strategy leverages Bonsai's storage benefits, only keeping track of block-to-block state diffs in Besu storage. The following flowchart outlines how Besu detects conflicts and imports transactions into the block: Besu takes what the accumulator tracks at the block and transaction level, compares the transaction's list of touched addresses to the block's list, and checks for conflicts. In particular: Besu identifies conflicts by checking whether a transaction has interacted with accounts modified by the block (that is, modified by previous transactions). If a conflict is detected, Besu replays the transaction using cached data or data fetched from disk. Each time a transaction is added to the block, Besu incorporates the transaction's tracked list into the block's list. Note The following are excluded from the conflict check: Unchanged accounts read by the block. Rewards given to the validator coinbase address at the end of each transaction. If these were considered, every transaction would conflict with the coinbase address. Besu identifies this address as a conflict only if it is accessed for reasons other than receiving rewards at the transaction's conclusion. The following flowchart outlines how Besu maintains the lists of tracked addresses: Besu's conflict detection strategy is intentionally simple to minimize edge cases. With this approach to parallel transaction execution, approximately 40% of transactions do not require replay. In the future, the conflict detection strategy may be refined to reduce false positives. You can enable parallel transaction execution using the --Xbonsai-parallel-tx-processing-enabled option.","s":"Conflict detection strategy","u":"/public-networks/concepts/parallel-transaction-execution","h":"#conflict-detection-strategy","p":1198},{"i":1205,"t":"Parallel transaction execution uses Besu's resources more efficiently than traditional sequential execution, significantly improving performance. The following metrics were collected on nodes running on Azure VMs (Standard D8as v5 – 8 vCPUs, 32 GiB memory), with Teku and Nimbus as consensus layer (CL) clients: Block processing time - With Teku as CL client, block processing time improves by at least 25%. The 50th percentile decreases from 282 ms to 207 ms and the 95th percentile decreases from 479 ms to 393 ms. With Nimbus as CL client, block processing improves by approximately 45%, with the 50th percentile at 155 ms, and the 95th percentile at 299 ms. Besu running with Nimbus has better performance than with Teku because Nimbus has less overhead on Besu, meaning less context switching and fewer cache misses. Execution throughput - Execution throughput increases, with an average of 96 Mgas/s and peaks of up to 250 Mgas/s. Parallel transactions - Parallel transaction execution introduces two new metrics, which indicate that approximately 40% of transactions are parallelized using this feature: besu_block_processing_parallelized_transactions_counter_total - The number of transactions executed in parallel. besu_block_processing_conflicted_transactions_counter_total - The number of transactions that encountered conflicts and were therefore executed sequentially. Sync time - Snap synchronization time is approximately 27 hours and 5 minutes, with block import time approximately 6 ms on average. CPU profiling - The new payload call time decreases from 251.68 ms to 172.04 ms on average, with notable improvements in SLOAD operation times. During the faster block processing time, Besu uses more CPU and more disk accesses in parallel (higher IOPS). However, when these metrics are averaged on different monitoring tools, the resource usage looks the same as with sequential execution. Overall, parallel transaction execution improves Besu performance with almost no resource usage overhead.","s":"Metrics","u":"/public-networks/concepts/parallel-transaction-execution","h":"#metrics","p":1198},{"i":1207,"t":"Ethereum's move to proof of stake consensus has brought many changes to the way the network operates. An important aspect of proof of stake is the need for validators to provide attestations in a timely and accurate manner. However, missed attestations have become a common occurrence among validators, leading to a loss of rewards and earnings. This page explores the context behind missing attestations.","s":"Attestations","u":"/public-networks/concepts/proof-of-stake/attestations","h":"","p":1206},{"i":1209,"t":"Every epoch (6.4 minutes), a validator proposes an attestation to the network. The attestation is for a specific slot (every 12 seconds) in the epoch. The attestation votes in favor of the validator's view of the chain, in particular, the most recent justified block and the first block in the current epoch (known as source and target checkpoints). This information is collected for all participating validators, enabling the network to reach consensus about the state of the blockchain. Honest nodes have 1/3 * SECONDS_PER_SLOT (4 seconds) from the start of the slot to either receive the block or decide there was no block produced and attest to an “empty” or “skip” slot. Once this time has elapsed, attesters should broadcast their attestation reflecting their local view of the chain. See the official specification for more information about attestations.","s":"What are attestations?","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#what-are-attestations","p":1206},{"i":1211,"t":"Around 85% of validators' rewards come from making attestations. Although committee and slot assignments for attesting are randomized, every active validator will be selected to make exactly one attestation each epoch. Attestations receive rewards only if they're included in Beacon Chain blocks. An attestation contains three votes. Each vote is eligible for a reward, subject to the following conditions: Getting attestations included with the correct source checkpoint within 5 slots Getting attestations included with the correct target checkpoint within 32 slots Getting attestations included with the correct head within 1 slot immediately Each of these duties carries a reward rate, a portion of the entire \"weight denominator,\" or the sum of weighted rewards for each attestation. The remaining weights relate to participating in sync committees and proposing blocks (excluding any tips/MEV, the bulk of block rewards). The following table (from Upgrading Ethereum) breaks down these weights for cumulative rewards: Name Percentage Value TIMELY_SOURCE_WEIGHT 21.9% uint64(14) TIMELY_TARGET_WEIGHT 40.6% uint64(26) TIMELY_HEAD_WEIGHT 21.9% uint64(14) SYNC_REWARD_WEIGHT 3.1% uint64(2) PROPOSER_WEIGHT 12.5% uint64(8) WEIGHT_DENOMINATOR 100% uint64(64)","s":"Attestation rewards","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#attestation-rewards","p":1206},{"i":1213,"t":"If you have attestations with incorrect head votes, your node might be experiencing slow block imports. However, block producers can also be slow to publish blocks, resulting in a majority of validators getting the head vote wrong. A <100% head vote doesn't necessarily imply a problem with your node. In case of a slowdown, identify whether the issue is with the beacon node or the execution client. Block timing logs can be helpful in determining this. If you're using Teku as a consensus layer client, identify late blocks (the block didn't get to Teku in time) with the following kind of log: Late Block Import *** Block: c2b911533a8f8d5e699d1a334e0576d2b9aa4caa726bde8b827548b579b47c68 (4765916) proposer 6230 arrival 3475ms, pre-state_retrieved +5ms, processed +185ms, execution_payload_result_received +1436ms, begin_importing +0ms, transaction_prepared +0ms, transaction_committed +0ms, completed +21ms The time of arrival indicates how much time elapsed after the start of the slot before your node received the block. In this example, the block arrived after 3475ms, which is slower than optimal, but still enough time for Teku to create an attestation 4 seconds into the slot. Typically, delayed arrivals occur when the block producer is slow in generating the block. It's also possible that the block was published on time but took longer to propagate to your node through peer-to-peer gossip. If delayed arrivals are a recurring issue, it might be a problem with your node, such as an incorrect system clock, network issues, or a reduction in the number of peers.","s":"Incorrect attestations","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#incorrect-attestations","p":1206},{"i":1215,"t":"Attestations are complicated. Rewards can be impacted by: The contents of a block (how long it takes to compute). The hardware processing that block (execution speed). How long it takes for the block to arrive to Besu from the consensus layer. The arrival time of the block from other consensus layer peers. Besu and your consensus layer client have no control over how late into a slot they receive blocks. General network latency. The status of either Besu or the consensus layer client. Monitoring your validator carefully for uptime, execution speed, and a valid consensus layer connection will help you explore attestation performance for your node.","s":"Conclusion","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#conclusion","p":1206},{"i":1217,"t":"Upgrading Ethereum Understanding Attestation Misses Block production in Ethereum after the Merge Ethereum Consensus Specs","s":"References","u":"/public-networks/concepts/proof-of-stake/attestations","h":"#references","p":1206},{"i":1219,"t":"You can interact with the Besu JSON-RPC API using different transaction types (specified by the transactionType parameter). The following API objects use a unique format for each transactionType: Pending transaction object Transaction object Transaction call object Transaction receipt object","s":"Transaction types","u":"/public-networks/concepts/transactions/types","h":"","p":1218},{"i":1221,"t":"Transactions with type FRONTIER are legacy transactions that use the transaction format existing before typed transactions were introduced in EIP-2718. They contain the parameters chainId, nonce, gasPrice, gasLimit, to, value, data, v, r, and s. Legacy transactions don't use access lists or incorporate EIP-1559 fee market changes.","s":"FRONTIER transactions","u":"/public-networks/concepts/transactions/types","h":"#frontier-transactions","p":1218},{"i":1223,"t":"Transactions with type ACCESS_LIST are transactions introduced in EIP-2930. They contain, along with the legacy parameters, an accessList parameter, which specifies an array of addresses and storage keys that the transaction plans to access (an access list). ACCESS_LIST transactions must specify an access list, and they don't incorporate EIP-1559 fee market changes. Use the eth_createAccessList API to simulate a transaction which returns the addresses and storage keys that may be used to send the real transaction, and the approximate gas cost.","s":"ACCESS_LIST transactions","u":"/public-networks/concepts/transactions/types","h":"#access_list-transactions","p":1218},{"i":1225,"t":"Transactions with type EIP1559 are transactions introduced in EIP-1559. EIP-1559 addresses the network congestion and overpricing of transaction fees caused by the historical fee market, in which users send transactions specifying a gas price bid using the gasPrice parameter, and miners choose transactions with the highest bids. EIP1559 transactions don't specify gasPrice, and instead use an in-protocol, dynamically changing base fee per gas. At each block, the base fee per gas is adjusted to address network congestion as measured by a gas target. EIP1559 transactions contain, along with the accessList parameter and legacy parameters except for gasPrice, a maxPriorityFeePerGas parameter, which specifies the maximum fee the sender is willing to pay per gas above the base fee (the maximum priority fee per gas), and a maxFeePerGas parameter, which specifies the maximum total fee (base fee + priority fee) the sender is willing to pay per gas. An EIP1559 transaction always pays the base fee of the block it's included in, and it pays a priority fee as priced by maxPriorityFeePerGas or, if the base fee per gas + maxPriorityFeePerGas exceeds maxFeePerGas, it pays a priority fee as priced by maxFeePerGas minus the base fee per gas. The base fee is burned, and the priority fee is paid to the miner that included the transaction. A transaction's priority fee per gas incentivizes miners to include the transaction over other transactions with lower priority fees per gas. EIP1559 transactions must specify both maxPriorityFeePerGas and maxFeePerGas. They must not specify gasPrice.","s":"EIP1559 transactions","u":"/public-networks/concepts/transactions/types","h":"#eip1559-transactions","p":1218},{"i":1227,"t":"Shard blob transactions introduced in EIP-4844 enable scaling the Ethereum network by allowing large amounts of data (blobs) to be included that cannot be directly accessed or processed by the Ethereum Virtual Machine (EVM). When the network includes a blob-carrying transaction in a block, the transaction doesn't actually contain the blob data itself. Instead, it contains a commitment to this data. The EVM can verify this commitment to ensure the data's availability and integrity without directly accessing the data. info A commitment is a type of cryptographic proof that securely and verifiably confirms the existence and integrity of large data blobs. This mechanism significantly reduces the computational and storage burden on the Ethereum network while ensuring that the data is available for those who need it (for example, rollups or other layer 2 solutions that rely on data availability for their security and operation). Blobs are temporarily stored by consensus clients such as Teku, and blocks on the execution layer permanently store the the reference to the blob.","s":"BLOB transactions","u":"/public-networks/concepts/transactions/types","h":"#blob-transactions","p":1218},{"i":1229,"t":"Use the eth_blobBaseFee method to view the current base fee per blob gas in wei. You can also use eth_feeHistory to view the historical blob transaction cost details.","s":"View blob transaction costs","u":"/public-networks/concepts/transactions/types","h":"#view-blob-transaction-costs","p":1218},{"i":1231,"t":"All nodes maintain a transaction pool to store pending transactions before processing. Transaction pools are categorized into the following two types: Layered - Recommended for public blockchain networks. Sequenced - Recommended for private blockchain networks. You can use specific options and methods to configure and monitor the transaction pool. note When submitting private transactions, the privacy marker transaction is submitted to the transaction pool, not the private transaction itself.","s":"Transaction pool","u":"/public-networks/concepts/transactions/pool","h":"","p":1230},{"i":1233,"t":"The layered transaction pool is the default transaction pool implementation. The implementation separates the pool into layers according to value and executability of the transactions. The first layer keeps only the highest-value transactions that can feasibly go into the next block. The other two layers ensure Besu always has a backlog of transactions to fill blocks, maximizing the amount of fees. Layered pools have additional parameters that allow you to limit and configure the number of transactions in different layers, enabling them to handle high volumes and sort transactions at a faster speed. With the layered transaction pool, Besu produces more profitable blocks more quickly, with more denial-of-service protection, and using less CPU than with the legacy transaction pool. If you previously configured transaction pool behavior, upgrade to the layered transaction pool by: Removing the --tx-pool-retention-hours option, which is not applicable because old transactions will expire when the memory cache is full. Replacing the --tx-pool-limit-by-account-percentage option with --tx-pool-max-future-by-sender to limit the number of sequential transactions, instead of percentage of transactions, from a single sender kept in the pool. Removing the --tx-pool-max-size option, which is not applicable because the layered pool is limited by memory size instead of the number of transactions. To configure the maximum memory capacity, use --tx-pool-layer-max-capacity. You can opt out of the layered transaction pool implementation by setting the --tx-pool option to sequenced.","s":"Layered transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#layered-transaction-pool","p":1230},{"i":1235,"t":"In the sequenced transaction pool, transactions are processed strictly in the order they are received. Although sequenced transaction pools lack the flexibility of layered pools, they help maintain a consistent and transparent transaction order, which is often useful in private blockchains. You can select the sequenced transaction pool by setting --tx-pool=sequenced. If you set the enterprise configuration profile using --profile=enterprise or --profile=private, the sequenced transaction pool is set by default. The sequenced transaction pool suits enterprise environments because it functions like a first-in-first-out (FIFO) queue and processes transactions in the order of submission, regardless of the sender. When the pool reaches capacity, the newer transactions are evicted first, reducing the likelihood of a nonce gap and avoiding the need to resubmit older transactions.","s":"Sequenced transaction pool","u":"/public-networks/concepts/transactions/pool","h":"#sequenced-transaction-pool","p":1230},{"i":1237,"t":"When the transaction pool is full, it accepts and retains local transactions in preference to remote transactions. If the transaction pool is full of local transactions, Besu drops the oldest local transactions first. That is, a full transaction pool continues to accept new local transactions by first dropping remote transactions and then by dropping the oldest local transactions.","s":"Dropping transactions when the layered transaction pool is full","u":"/public-networks/concepts/transactions/pool","h":"#dropping-transactions-when-the-layered-transaction-pool-is-full","p":1230},{"i":1240,"t":"You can replace a pending transaction with a transaction that has the same sender and nonce but a higher gas price. If sending a legacy transaction, the old transaction is replaced if the new transaction has a gas price higher than the existing gas price by the percentage specified by --tx-pool-price-bump. If sending an EIP1559 transaction, the old transaction is replaced if one of the following is true: The new transaction's effective gas price is higher than the existing gas price by the percentage specified by --tx-pool-price-bump AND the new effective priority fee is greater than or equal to the existing priority fee. The new transaction's effective gas price is the equal to the existing gas price AND the new effective priority fee is higher than the existing priority fee by the percentage specified by --tx-pool-price-bump. The default value for --tx-pool-price-bump is 10%.","s":"In networks with a base fee and priced gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-a-base-fee-and-priced-gas","p":1230},{"i":1242,"t":"To enable replacing transactions in the transaction pool for zero base fee networks, or free gas networks: If you set zeroBaseFee to true in the genesis file, the transaction pool price bump is set to 0. Specifying a value for transaction pool price bump using --tx-pool-price-bump will cause an error. If the minimum gas price is zero, the transaction pool price bump is set to 0, unless you specify a different value using --tx-pool-price-bump.","s":"In networks with zero base base or free gas","u":"/public-networks/concepts/transactions/pool","h":"#in-networks-with-zero-base-base-or-free-gas","p":1230},{"i":1244,"t":"You can configure and monitor the transaction pool using the following methods, subscriptions, and options: Name Description Method txpool_besuTransactions API method to list transactions in the transaction pool. Method txpool_besuStatistics API method to list statistics of the transaction pool. Method txpool_besuPendingTransactions API method to list pending transactions in the transaction pool. Subscription newPendingTransactions RPC subscription to notify of transactions added to the transaction pool. Subscription droppedPendingTransactions RPC subscription to notify of transactions dropped from the transaction pool. Option --tx-pool Option to specify the type of transaction pool to use. Option --tx-pool-enable-save-restore Option to enable save and restore functionality for the transaction pool. Option --tx-pool-layer-max-capacity Option to specify the maximum memory capacity of the layered transaction pool. Option --tx-pool-limit-by-account-percentage Option to limit the transaction pool by account percentage. Option --tx-pool-max-future-by-sender Option to specify the maximum number of future transactions by sender. Option --tx-pool-max-prioritized Option to specify the maximum number of prioritized transactions. Option --tx-pool-max-prioritized-by-type Option to specify the maximum number of prioritized transactions by type. Option --tx-pool-max-size Option to specify the maximum size of the transaction pool. Option --tx-pool-min-gas-price Option to specify the minimum gas price for transactions in the pool. Option --tx-pool-no-local-priority Option to disable local priority for transactions. Option --tx-pool-price-bump Option to specify the price bump percentage to replace an existing transaction. Option --tx-pool-priority-senders Option to specify sender addresses to prioritize in the transaction pool. Option --tx-pool-retention-hours Option to specify the number of hours to retain transactions in the pool. Option --tx-pool-save-file Option to specify the file for saving the transaction pool state. note The option --tx-pool-layer-max-capacity is applicable only for layered transaction pools.","s":"Transaction pool methods and options","u":"/public-networks/concepts/transactions/pool","h":"#transaction-pool-methods-and-options","p":1230},{"i":1246,"t":"For transactions submitted and added to a block, Besu validates the transactions, as illustrated in the following diagram. Besu repeats the set of transaction pool validations after propagating the transaction. Besu repeats the same set of validations when importing the block that includes the transaction, except the nonce must be exactly right when importing the block. tip Private transactions are not added to the transaction pool. The privacy marker transaction is submitted to the transaction pool but the private transaction itself is directly distributed to the transaction participants. When adding the transaction to a block, Besu performs an additional validation to check that the transaction gas limit is less than the remaining block gas limit. After creating a block, the node imports the block and then repeats the transaction pool validations. info The transaction is only added if the entire transaction gas limit is less than the remaining gas for the block. The total gas used by the transaction is not relevant to this validation. That is, if the total gas used by the transaction is less than the remaining block gas, but the transaction gas limit is more than the remaining block gas, the transaction is not added.","s":"Transaction validation","u":"/public-networks/concepts/transactions/validation","h":"","p":1245},{"i":1248,"t":"Besu supports two node types, commonly referred to as full nodes and archive nodes. A full node consists of an execution and consensus client, and stores a local copy of the blockchain. With a full node, you can check current balances, sign and send transactions, and look at current dapp data. Full nodes can guarantee the latest state of the blockchain (and some older states). However, they can't serve the network with all data requests (for example, the balance of an account at an old block). An archive node is a node that also stores the intermediary state of every account and contract for every block since the genesis block. Archive nodes can do everything full nodes do, and they can also access historical state data. This means that archive nodes require more disk space than full nodes. Besu must connect with other peers to sync with the network. If your node is having trouble peering, try troubleshooting peering.","s":"Sync Besu","u":"/public-networks/get-started/connect/sync-node","h":"","p":1247},{"i":1250,"t":"To sync with a public network, Besu runs two processes in parallel: the world state sync and the blockchain download. While the world state syncs, Besu downloads and imports the blockchain in the background. The blockchain download time depends on CPU, the network, Besu's peers, and disk speed. The blockchain download generally takes longer than the world state sync. Besu must catch up to the current chain head and sync the world state to participate on Mainnet. The following table shows the average world state sync time, and blockchain download time, for each sync mode on Mainnet. All times are hardware dependent; this table is based on running AWS instances m6gd.2xlarge. Each sync mode also has its own world state database size. Sync mode Time to sync world state Time to download blockchain Disk usage Snap ~6 hours ~1.5 days Average disk Checkpoint ~5 hours ~13 hours Smallest disk Fast ~1.5 days ~1.5 days Average disk Full ~weeks ~weeks Largest disk Notes As of late 2023, an average Mainnet snap sync consumes around 1000 GB using Bonsai Tries. Read more about storage requirements across data storage formats and sync modes. Testnets take significantly less time and space to sync.","s":"Sync times","u":"/public-networks/get-started/connect/sync-node","h":"#sync-times","p":1247},{"i":1252,"t":"You can store the world state using Forest of Tries or Bonsai Tries. If you're running a full node, we recommend using Bonsai Tries for the lowest storage requirements.","s":"Storage","u":"/public-networks/get-started/connect/sync-node","h":"#storage","p":1247},{"i":1254,"t":"A full node stores a local copy of the blockchain and the current state of the blockchain. You can run a full node using snap synchronization (snap sync), checkpoint synchronization (checkpoint sync), or fast synchronization (fast sync). Sync nodes for BFT Snap sync and checkpoint sync are not supported for QBFT or IBFT 2.0 networks.","s":"Run a full node","u":"/public-networks/get-started/connect/sync-node","h":"#run-a-full-node","p":1247},{"i":1256,"t":"tip We recommend using snap sync over fast sync because snap sync can be faster than fast sync by several days (for Mainnet). We recommend using snap sync with the Bonsai data storage format for the fastest sync and lowest storage requirements. Enable snap sync using --sync-mode=SNAP. You need Besu version 22.4.0 or later to use snap sync. Instead of downloading the state trie node by node, snap sync downloads as many leaves of the trie as possible, and reconstructs the trie locally. You can't switch from fast sync to snap sync. If your node is blocked in the middle of a fast sync, you can start over using snap sync instead by stopping the node, deleting the data directory, and starting over using --sync-mode=SNAP. You can restart Besu during a snap sync in case of hardware or software problems. The sync resumes from the last valid world state and continues to download blocks starting from the last downloaded block. See how to read the Besu metrics charts when using snap sync.","s":"Snap synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#snap-synchronization","p":1247},{"i":1258,"t":"Enable checkpoint sync using --sync-mode=CHECKPOINT. You need Besu version 22.4.3 or later to use checkpoint sync. Checkpoint sync behaves like snap sync, but instead of syncing from the genesis block, it syncs from a specific checkpoint block configured in the Besu genesis file. Ethereum Mainnet and the Holesky testnet configurations already define default checkpoints, so you don't have to add this yourself. For other networks, you can configure a checkpoint in the genesis file by specifying the block hash, number, and total difficulty as in the following example. Checkpoint configuration example \"checkpoint\": { \"hash\": \"0x844d581cb00058d19f0584fb582fa2de208876ee56bbae27446a679baf4633f4\", \"number\": 14700000, \"totalDifficulty\": \"0xA2539264C62BF98CFC6\" } note If using Clique consensus, the checkpoint must be the beginning of an epoch. If you enable checkpoint sync without a checkpoint configuration in the genesis file, Besu snap syncs from the genesis block. You can restart Besu during a checkpoint sync in case of hardware or software problems. The sync resumes from the last valid world state and continues to download blocks starting from the last downloaded block.","s":"Checkpoint synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#checkpoint-synchronization","p":1247},{"i":1260,"t":"caution It might become impossible to sync Ethereum Mainnet using fast sync in the future. If you sync for the first time or ever need to re-sync, update Besu to a version that supports newer sync methods. Enable fast sync using --sync-mode=FAST. Fast sync downloads the block headers and transaction receipts, and verifies the chain of block headers from the genesis block. When starting fast sync, Besu first downloads the world state for a recent block verified by its peers (referred to as a pivot block), and then begins fast sync from the genesis block. Fast sync is the default for named networks specified using the --network option, except for the dev development network. It's also the default if connecting to Ethereum Mainnet by not specifying the --network or --genesis-file options. Using fast sync with private transactions isn't supported. You can observe the besu_synchronizer_fast_sync_* and besu_synchronizer_world_state_* metrics to monitor fast sync. note When fast syncing, block numbers increase until close to the head block, then the process pauses while the world state download completes. This may take a significant amount of time depending on world state size, during which the current head block doesn't increase. For example, Mainnet may take several days or more to fast sync. Fast sync time may increase because Besu picks new pivot blocks, or because peers prune the world state before it completes downloading. RocksDB error on AWS When running Besu on some cloud providers, a known RocksDB issue causes fast sync to fail occasionally. The following error is displayed repeatedly: EthScheduler-Services-1 (importBlock) | ERROR | PipelineChainDownloader | Chain download failed. Restarting after short delay. java.util.concurrent.CompletionException: org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: block checksum mismatch: The failure has been seen on AWS and Digital Ocean. On AWS, A full restart of the VM is required to restart the fast sync. Fast sync isn't currently supported on Digital Ocean. Pending state nodes stays constant When fast syncing, the pending state nodes count is the number of nodes yet to be downloaded, and it should change constantly. Pending state nodes trend to 0 during fast sync and then goes to 0. If the number stays constant, this could mean your node isn't syncing against any peers. In the following example, the pivot block is 0 and the pending state nodes value is constant. This means the node isn't syncing against any peers. The fact that state nodes have been downloaded means at some stage it was syncing. The easiest solution in this scenario is to restart fast sync to obtain a new pivot block.","s":"Fast synchronization","u":"/public-networks/get-started/connect/sync-node","h":"#fast-synchronization","p":1247},{"i":1262,"t":"An archive node stores all historical states of the blockchain. To run an archive node, enable full synchronization (full sync) using --sync-mode=FULL. Full sync starts from the genesis block and reprocesses all transactions. important Do not run an archive node with the Bonsai Tries data storage format. Bonsai is designed for retrieving recent data only.","s":"Run an archive node","u":"/public-networks/get-started/connect/sync-node","h":"#run-an-archive-node","p":1247},{"i":1264,"t":"This section provides information on connecting Besu to a public Ethereum network.","s":"Connect to a network","u":"/public-networks/get-started/connect","h":"","p":1263},{"i":1266,"t":"info As a Proof of Stake network, running a full Ethereum node requires both an execution client and a consensus client. Run Besu as an execution client with any consensus client on Ethereum Mainnet. If you're using Teku as a consensus client, you can follow the Besu and Teku Mainnet tutorial.","s":"Connect to Mainnet","u":"/public-networks/get-started/connect/mainnet","h":"","p":1265},{"i":1268,"t":"Besu installed. A consensus client installed. For example, Teku.","s":"Prerequisites","u":"/public-networks/get-started/connect/mainnet","h":"#prerequisites","p":1265},{"i":1271,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"1. Generate the shared secret","u":"/public-networks/get-started/connect/mainnet","h":"#1-generate-the-shared-secret","p":1265},{"i":1273,"t":"If you're running the consensus client as a beacon node only, skip to the next step. If you're also running the consensus client as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator). Generate validator keys for one or more validators using the Staking Launchpad. info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"2. Generate validator keys","u":"/public-networks/get-started/connect/mainnet","h":"#2-generate-validator-keys","p":1265},{"i":1275,"t":"Run the following command or specify the options in a configuration file: besu \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=,127.0.0.1,localhost \\ --engine-host-allowlist=,127.0.0.1,localhost \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify: The path to the jwtsecret.hex file generated in step 1 using the --engine-jwt-secret option. The IP address of your Besu node using the --host-allowlist and --engine-host-allowlist options. Also, in the command: --rpc-http-enabled enables the HTTP JSON-RPC service. --rpc-http-host is set to 0.0.0.0 to allow remote RPC connections. --rpc-ws-enabled enables the WebSocket JSON-RPC service. --rpc-ws-host is set to 0.0.0.0 to allow remote RPC connections. --engine-rpc-enabled enables the Engine API. You can modify the option values and add other command line options as needed.","s":"3. Start Besu","u":"/public-networks/get-started/connect/mainnet","h":"#3-start-besu","p":1265},{"i":1277,"t":"Refer to your consensus client documentation to configure and start the consensus client. info If you're running a validator client, make sure you set a fee recipient address. If you're using Teku, follow the Besu and Teku Mainnet tutorial.","s":"4. Start the consensus client","u":"/public-networks/get-started/connect/mainnet","h":"#4-start-the-consensus-client","p":1265},{"i":1279,"t":"After starting Besu and the consensus client, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"SnapSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"ImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/mainnet","h":"#5-wait-for-the-clients-to-sync","p":1265},{"i":1281,"t":"Stake your ETH for one or more validators using the Staking Launchpad. You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"6. Stake ETH","u":"/public-networks/get-started/connect/mainnet","h":"#6-stake-eth","p":1265},{"i":1283,"t":"The Quorum Developer Quickstart uses the Besu Docker image to run a private IBFT 2.0 network of Besu nodes managed by Docker Compose. caution This tutorial runs a private network suitable for education or demonstration purposes and is not intended for running production networks.","s":"Developer Quickstart","u":"/private-networks/tutorials/quickstart","h":"","p":1282},{"i":1285,"t":"One of the following operating systems: Linux on x86_64 architecture macOS on an Intel processor (M1 processor not supported yet) Windows 64-bit edition, with: Windows Subsystem for Linux 2 Docker desktop configured to use the WSL2-based engine Docker and Docker Compose Node.js version 12 or higher Hardhat cURL command line MetaMask info Allow Docker up to 4G of memory or 6G if running the privacy examples. Refer to the Resources section in Docker for Mac and Docker Desktop for details.","s":"Prerequisites","u":"/private-networks/tutorials/quickstart","h":"#prerequisites","p":1282},{"i":1287,"t":"To create the tutorial docker-compose files and artifacts, run: npx quorum-dev-quickstart Follow the prompts displayed to run Besu and logging with ELK. Enter n for Codefi Orchestrate and private transactions. note If you enter y for private transactions, you get three Besu nodes with corresponding Tessera nodes for privacy. You can follow the privacy walk-through, which details how to send private transactions and interact with deployed private contracts.","s":"Generate the tutorial blockchain configuration files","u":"/private-networks/tutorials/quickstart","h":"#generate-the-tutorial-blockchain-configuration-files","p":1282},{"i":1289,"t":"To start the network, go to the installation directory (quorum-test-network if you used the default value) and run: ./run.sh The script builds the Docker images, and runs the Docker containers. Four Besu IBFT 2.0 validator nodes and a non-validator node are created to simulate a base network. When execution is successfully finished, the process lists the available services: Services list ************************************* Quorum Dev Quickstart ************************************* ---------------------------------- List endpoints and services ---------------------------------- JSON-RPC HTTP service endpoint : http://localhost:8545 JSON-RPC WebSocket service endpoint : ws://localhost:8546 Web block explorer address : http://localhost:25000/ Prometheus address : http://localhost:9090/graph Grafana address : http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All Kibana logs address : http://localhost:5601/app/kibana#/discover Collated logs using Grafana Loki : http://localhost:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search= For more information on the endpoints and services, refer to README.md in the installation directory. **************************************************************** Use the JSON-RPC HTTP service endpoint to access the RPC node service from your dapp or from cryptocurrency wallets such as MetaMask. Use the JSON-RPC WebSocket service endpoint to access the Web socket node service from your dapp. Use the Web block explorer address to display the block explorer Web application. Use the Prometheus address to access the Prometheus dashboard. Read more about metrics. Use the Grafana address to access the Grafana dashboard. Read more about metrics. Use the Kibana logs address to access the logs in Kibana. Read more about log management. Use the Grafana Loki logs address to access the logs in Grafana. Read more about log management. To display the list of endpoints again, run: ./list.sh","s":"Start the network","u":"/private-networks/tutorials/quickstart","h":"#start-the-network","p":1282},{"i":1291,"t":"You can use Chainlens Blockchain Explorer to analyze block information, contract metadata, transaction searches, and more. Chainlens has built-in support for privacy-enabled Besu networks. note You must connect to one of the privacy nodes (for example, member1besu), not the dedicated RPC, to allow access for Besu privacy API methods. In production networks, you must secure access to RPC nodes. Clone the Chainlens GitHub repository: git clone https://github.com/web3labs/chainlens-free From the docker-compose directory, run the following command: cd docker-compose NODE_ENDPOINT=member1besu PORT=26000 docker-compose -f docker-compose.yml -f chainlens-extensions/docker-compose-quorum-dev-quickstart.yml up Open http://localhost/ on your browser. You’ll see the new initialization page while it boots up. This may take 5–10 minutes for the all services to start and the ingestion sync to complete. To stop all the services from running, run the following command from the docker-compose directory: docker-compose down -v","s":"Use a block explorer","u":"/private-networks/tutorials/quickstart","h":"#use-a-block-explorer","p":1282},{"i":1293,"t":"The sample network also includes Prometheus and Grafana monitoring tools to let you visualize node health and usage. You can directly access these tools from your browser at the addresses displayed in the endpoint list. Prometheus dashboard Grafana dashboard Grafana Loki logs dashboard For more details on how to configure and use these tools for your own nodes, see the performance monitoring documentation, Prometheus documentation and Grafana documentation. and collated logs via Grafana Loki","s":"Monitor nodes with Prometheus and Grafana","u":"/private-networks/tutorials/quickstart","h":"#monitor-nodes-with-prometheus-and-grafana","p":1282},{"i":1295,"t":"You can run JSON-RPC requests on: HTTP with http://localhost:8545. WebSockets with ws://localhost:8546.","s":"Run JSON-RPC requests","u":"/private-networks/tutorials/quickstart","h":"#run-json-rpc-requests","p":1282},{"i":1297,"t":"This tutorial uses cURL to send JSON-RPC requests over HTTP.","s":"Run with cURL","u":"/private-networks/tutorials/quickstart","h":"#run-with-curl","p":1282},{"i":1299,"t":"You can also run all the requests with the Besu Postman collection. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Run with Postman","u":"/private-networks/tutorials/quickstart","h":"#run-with-postman","p":1282},{"i":1301,"t":"Run the following command from the host shell: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":1}' http://localhost:8545 The result displays the client version of the running node: Result example Result explanation { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"besu/v21.1.2/linux-x86_64/oracle_openjdk-java-11\" } \"jsonrpc\" : \"2.0\" indicates that the JSON-RPC 2.0 spec format is used. \"id\" : 1 is the request identifier used to match the request and the response. This tutorial always uses 1. \"result\" contains the running Besu information: v21.1.2 is the running Besu version number. This may be different when you run this tutorial. linux-x86_64 is the architecture used to build this version. oracle_openjdk-java-11 is the JVM type and version used to build this version. This may be different when you run this tutorial. Successfully calling this method shows that you can connect to the nodes using JSON-RPC over HTTP. From here, you can walk through more interesting requests demonstrated in the rest of this section, or skip ahead to Create a transaction using MetaMask.","s":"Request the node version","u":"/private-networks/tutorials/quickstart","h":"#request-the-node-version","p":1282},{"i":1303,"t":"Peers are the other nodes connected to the node receiving the JSON-RPC request. Poll the peer count using net_peerCount: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":1}' http://localhost:8545 The result indicates that there are four peers (the validators): { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4\" }","s":"Count the peers","u":"/private-networks/tutorials/quickstart","h":"#count-the-peers","p":1282},{"i":1305,"t":"Call eth_blockNumber to retrieve the number of the most recently synchronized block: curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' http://localhost:8545 The result indicates the highest block number synchronized on this node. { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2a\" } Here the hexadecimal value 0x2a translates to decimal as 42, the number of blocks received by the node so far, about two minutes after the new network started.","s":"Request the most recent block number","u":"/private-networks/tutorials/quickstart","h":"#request-the-most-recent-block-number","p":1282},{"i":1307,"t":"This example uses the web3.js library to make the API calls, using the rpcnode accessed on http://localhost:8545. Navigate to the smart_contracts directory and deploy the public transaction: cd smart_contracts npm install node scripts/public/hre_1559_public_tx.js # or via ethers node scripts/public/hre_public_tx.js This deploys the contract and sends an arbitrary value (47) from Member1 to Member3. The script then performs: A read operation on the contract using the get function and the contract's ABI, at the specified address. A write operation using the set function and the contract's ABI, at the address and sets the value to 123. A read operation on all events emitted. The script output is as follows: { address: '0x2b224e70f606267586616586850aC6f4Ae971eCb', privateKey: '0xb3f2ab4d7bb07a4168432fb572ceb57fd9b842ed8dc41256255db6ff95784000', signTransaction: [Function: signTransaction], sign: [Function: sign], encrypt: [Function: encrypt] } create and sign the txn sending the txn tx transactionHash: 0x423d56f958a316d2691e05e158c6a3f37004c27a1ec9697cf9fed2a5c2ae2c2b tx contractAddress: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9 Contract deployed at address: 0xB9A44d3BeF64ABfA1485215736B61880eDe630D9 Use the smart contracts 'get' function to read the contract's constructor initialized value .. Obtained value at deployed contract is: 47 Use the smart contracts 'set' function to update that value to 123 .. sending the txn tx transactionHash: 0xab460da2544687c5fae4089d01b14bbb9bea765449e1fd2c30b30e1761481344 tx contractAddress: null Verify the updated value that was set .. Obtained value at deployed contract is: 123 Obtained all value events from deployed contract : [47,123] We also have a second example that shows how to transfer ETH between accounts. Navigate to the smart_contracts directory and deploy the eth_tx transaction: cd smart_contracts npm install node scripts/public/hre_eth_tx.js The output is as follows: Account A has balance of: 90000 Account B has balance of: 0 create and sign the txn sending the txn tx transactionHash: 0x8b9d247900f2b50a8dded3c0d73ee29f04487a268714ec4ebddf268e73080f98 Account A has an updated balance of: 89999.999999999999999744 Account B has an updated balance of: 0.000000000000000256","s":"Public transactions","u":"/private-networks/tutorials/quickstart","h":"#public-transactions","p":1282},{"i":1309,"t":"You can use MetaMask to send a transaction on your private network. Open MetaMask and connect it to your private network RPC endpoint by selecting Localhost 8545 in the network list. Choose one of the following test accounts and import it into MetaMask by copying the corresponding private key. Do not use the test accounts on Ethereum Mainnet or any production network. The following accounts are test accounts and their private keys are publicly visible in this documentation and in publicly available source code. They are not secure and everyone can use them. Using test accounts on Ethereum Mainnet and production networks can lead to loss of funds and identity fraud. In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. Always secure your Ethereum Mainnet and any production account properly. See for instance MyCrypto \"Protecting Yourself and Your Funds\" guide. \"Test Account 1 (address 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73)\" Private key to copy : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 Initial balance : 200 Eth (200000000000000000000 Wei) \"Test Account 2 (address 0x627306090abaB3A6e1400e9345bC60c78a8BEf57)\" Private key to copy : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 Initial balance : 90000 Eth (90000000000000000000000 Wei) \"Test Account 3 (address 0xf17f52151EbEF6C7334FAD080c5704D77216b732)\" Private key to copy : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f Initial balance : 90000 Eth (90000000000000000000000 Wei) note Besu doesn't incorporate account management. To create your own account, you have to use a third-party tool, such as MetaMask. After importing an existing test account, create another test account from scratch to use as the recipient for a test Ether transaction. In MetaMask, select the new test account and copy its address. In the Block Explorer, search for the new test account by selecting the 🔍 and pasting the test account address into the search box. The new test account displays with a zero balance. Send test Ether from the first test account (containing test Ether) to the new test account (which has a zero balance). tip You can use a zero gas price here as this private test network is a free gas network, but the maximum amount of gas that can be used (the gas limit) for a value transaction must be at least 21000. Refresh the Block Explorer page in your browser displaying the target test account. The updated balance reflects the transaction completed using MetaMask.","s":"Create a transaction using MetaMask","u":"/private-networks/tutorials/quickstart","h":"#create-a-transaction-using-metamask","p":1282},{"i":1311,"t":"You can use a demo dapp called QuorumToken which uses an ERC20 token that is deployed to the network. We'll use Hardhat, Ethers and MetaMask to interact with the network, which involves the following steps: Deploy the contract and save the contract's address. Start the dapp, and read and transact with the deployed token. The dapps/quorumToken directory is this structured in this manner (only relevant paths shown): quorumToken ├── hardhat.config.ts // hardhat network config ├── contracts // the QuorumToken.sol ├── scripts // handy scripts eg: to deploy to a chain ├── test // contract tests └── frontend // dapp done in next.js ├── public ├── src ├── styles ├── tsconfig.json","s":"Smart contract and dapp usage","u":"/private-networks/tutorials/quickstart","h":"#smart-contract-and-dapp-usage","p":1282},{"i":1313,"t":"Once the network is up and running, enter the quorumToken directory and run the following: # install dependencies npm i # compile the contract npm run compile npm run test # deploy the contract to the quickstart network npm run deploy-quorumtoken The output is similar to the following: # compile > quorumToken@1.0.0 compile > npx hardhat compile Generating typings for: 5 artifacts in dir: typechain-types for target: ethers-v6 Successfully generated 24 typings! Compiled 5 Solidity files successfully # test > quorumToken@1.0.0 test > npx hardhat test QuorumToken Deployment ✔ Should have the correct initial supply (1075ms) ✔ Should token transfer with correct balance (78ms) 2 passing (1s) # deploy Contract deploy at: 0x5FbDB2315678afecb367f032d93F642f64180aa3 This will deploy the contract to the network and return the address. Please save this address for the next step.","s":"Deploy the contract","u":"/private-networks/tutorials/quickstart","h":"#deploy-the-contract","p":1282},{"i":1315,"t":"The dapp runs a local website using Next.js, and uses the contract in the previous step deployed on the network. With the blockchain running, and MetaMask connected to localhost on port 8545, import one of our test accounts via private key, and run the following command: cd frontend npm i npm run dev This starts the dapp, binding it to port 3001 on your machine. > webapp@0.1.0 dev > next dev -p 3001 - ready started server on [::]:3001, url: http://localhost:3001 - event compiled client and server successfully in 270 ms (18 modules) - wait compiling... - event compiled client and server successfully in 173 ms (18 modules) In the browser where you have MetaMask enabled and one of the test accounts loaded, open a new tab and navigate to the QuorumToken dapp. Connect to MetaMask and input the address from the previous step. Fox example our contract above deployed to 0x5FbDB2315678afecb367f032d93F642f64180aa3. The dapp will then read the balance of the account from MetaMask and get details of the contract. You can then send funds to another address (any of the other test accounts) on the network, and MetaMask will sign and send the transaction. You can also search for the transaction and view its details in the Block Explorer. The MetMask UI also keeps a record of the transaction.","s":"Run the dapp","u":"/private-networks/tutorials/quickstart","h":"#run-the-dapp","p":1282},{"i":1317,"t":"You can deploy your own dapp to the Quorum Developer Quickstart by configuring your dapp to point to the Quickstart network. We recommend using Hardhat, and you can use the sample hardhat.config.js to configure the networks object in the Hardhat configuration file to specify which networks to connect to for deployments and testing. The Quickstart's RPC service endpoint is http://localhost:8545. For example, the following is the Hardhat configuration file for the QuorumToken dapp used in the Quickstart GoQuorum network: module.exports = { networks: { // in built test network to use when developing contracts hardhat: { chainId: 1337 }, quickstart: { url: \"http://127.0.0.1:8545\", chainId: 1337, // test accounts only, all good ;) accounts: [ \"0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63\", \"0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3\", \"0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f\" ] } }, defaultNetwork: \"hardhat\", ... ... Deploy the contract using: npx hardhat run ./scripts/deploy_quorumtoken.ts --network quickstart","s":"Deploy your own dapp","u":"/private-networks/tutorials/quickstart","h":"#deploy-your-own-dapp","p":1282},{"i":1319,"t":"To shut down the private network without deleting the containers: ./stop.sh This command stops the containers related to the services specified in the docker-compose.yml file. To restart the private network: ./resume.sh","s":"Stop and restart the private network without removing containers","u":"/private-networks/tutorials/quickstart","h":"#stop-and-restart-the-private-network-without-removing-containers","p":1282},{"i":1321,"t":"To shut down the private network and delete all containers and images created from running the sample network and the Pet Shop dapp: ./remove.sh","s":"Stop the private network and remove containers","u":"/private-networks/tutorials/quickstart","h":"#stop-the-private-network-and-remove-containers","p":1282},{"i":1323,"t":"New nodes joining an existing network require the following: The same genesis file used by all other nodes on the running network. A list of nodes to connect to; this is done by specifying bootnodes, or by providing a list of static nodes. A node key pair and optionally an account. If the running network is using permissions, then you need to add the new node's enode details to the permissions file used by existing nodes, or update the onchain permissioning contract. The following steps describe the process to add a new node to the Developer Quickstart.","s":"Add a new node to the network","u":"/private-networks/tutorials/quickstart","h":"#add-a-new-node-to-the-network","p":1282},{"i":1325,"t":"Create a node key pair and account for a new node by running the following script: cd ./extra npm install node generate_node_keys.js --password \"Password\" note The --password parameter is optional.","s":"1. Create the node key files","u":"/private-networks/tutorials/quickstart","h":"#1-create-the-node-key-files","p":1282},{"i":1327,"t":"Navigate to the directory where the configuration files for the network were created. note The directory was specified in an earlier step when running npx quorum-dev-quickstart. The default location is ./quorum-test-network. In the config/nodes directory, create a subdirectory for the new node (for example, newnode), and move the nodekey, nodekey.pub, address and accountkey files from the previous step into this directory.","s":"2. Create new node directory","u":"/private-networks/tutorials/quickstart","h":"#2-create-new-node-directory","p":1282},{"i":1329,"t":"Add an entry for the new node into the docker-compose file: newnode: <<: *besu-def container_name: newnode volumes: - public-keys:/opt/besu/public-keys/ - ./config/besu/:/config - ./config/nodes/newnode:/opt/besu/keys - ./logs/besu:/tmp/besu depends_on: - validator1 networks: quorum-dev-quickstart: ipv4_address: 172.16.239.41 important Select an IP address and port map not being used for the other containers. Mount the newly created folder ./config/nodes/newnode to the /opt/besu/keys directory of the new node, as seen in this example.","s":"3. Update docker-compose","u":"/private-networks/tutorials/quickstart","h":"#3-update-docker-compose","p":1282},{"i":1331,"t":"Update prometheus.yml in the ./config/prometheus/ directory to configure metrics to display in Grafana. Insert the following under scrape_configs section in the file. Change job_name and targets appropriately if you've updated them. - job_name: newnode scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: [newnode:9545]","s":"4. Update Prometheus configuration","u":"/private-networks/tutorials/quickstart","h":"#4-update-prometheus-configuration","p":1282},{"i":1333,"t":"Add the new node's enode address to the static nodes file and permissions file. The enode uses the format enode://pubkey@ip_address:30303. If the nodekey.pub is 4540ea...9c1d78 and the IP address is 172.16.239.41, then the enode address is \"enode://4540ea...9c1d78@172.16.239.41:30303\", which must be added to both files. Alternatively, call the perm_addNodesToAllowlist API method on existing nodes to add the new node without restarting. note Calling the API method by itself only persists for as long as the nodes remain online and is lost on the next restart. On a live network, the new node must be added to the permissions file so that subsequent restarts of the nodes are aware of the change.","s":"5. Update files with the enode address","u":"/private-networks/tutorials/quickstart","h":"#5-update-files-with-the-enode-address","p":1282},{"i":1335,"t":"Once complete, start the network up with ./run.sh. When using the smart contract you can either make changes via a dapp or via RPC API calls.","s":"6. Start the network","u":"/private-networks/tutorials/quickstart","h":"#6-start-the-network","p":1282},{"i":1337,"t":"Docker image Binaries","s":"Installation options","u":"/public-networks/get-started/install","h":"","p":1336},{"i":1339,"t":"If you want to use the latest development version of Besu or a specific commit, build from source. Otherwise, use the binary or Docker image for more stable versions. View the Wiki for instructions to install Besu from source.","s":"Build from source","u":"/public-networks/get-started/install","h":"#build-from-source","p":1336},{"i":1341,"t":"Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets. If you're using Teku as a consensus client, you can follow the Besu and Teku testnet tutorial. note Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.","s":"Connect to a testnet","u":"/public-networks/get-started/connect/testnet","h":"","p":1340},{"i":1343,"t":"Besu installed. A consensus client installed. For example, Teku.","s":"Prerequisites","u":"/public-networks/get-started/connect/testnet","h":"#prerequisites","p":1340},{"i":1346,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and the consensus client. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"1. Generate the shared secret","u":"/public-networks/get-started/connect/testnet","h":"#1-generate-the-shared-secret","p":1340},{"i":1348,"t":"If you're running the consensus client as a beacon node only, skip to the next step. If you're also running the consensus client as a validator client, create a test Ethereum address (you can do this in MetaMask). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of Holesky faucets and Sepolia faucets. note If you can't get testnet ETH using the faucet, you can ask for help on the EthStaker Discord. Generate validator keys for one or more validators using the Holesky Staking Launchpad (or request to become validator on Sepolia). info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"2. Generate validator keys","u":"/public-networks/get-started/connect/testnet","h":"#2-generate-validator-keys","p":1340},{"i":1350,"t":"Run the following command or specify the options in a configuration file: Holesky Sepolia besu \\ --network=holesky \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= besu \\ --network=sepolia \\ --rpc-http-enabled=true \\ --rpc-http-host=0.0.0.0 \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --rpc-ws-host=0.0.0.0 \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify the path to the jwtsecret.hex file generated in step 1 using the --engine-jwt-secret option. You can modify the option values and add other command line options as needed.","s":"3. Start Besu","u":"/public-networks/get-started/connect/testnet","h":"#3-start-besu","p":1340},{"i":1352,"t":"Refer to your consensus client documentation to configure and start the consensus client. info If you're running a validator client, make sure you set a fee recipient address. If you're using Teku, follow the Besu and Teku testnet tutorial.","s":"4. Start the consensus client","u":"/public-networks/get-started/connect/testnet","h":"#4-start-the-consensus-client","p":1340},{"i":1354,"t":"After starting Besu and the consensus client, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running the consensus client as a beacon node only, you're all set. If you're also running the consensus client as a validator client, ensure your clients are fully synced before submitting your staking deposit in the next step. This can take several days.","s":"5. Wait for the clients to sync","u":"/public-networks/get-started/connect/testnet","h":"#5-wait-for-the-clients-to-sync","p":1340},{"i":1356,"t":"Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad. You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"6. Stake ETH","u":"/public-networks/get-started/connect/testnet","h":"#6-stake-eth","p":1340},{"i":1360,"t":"Homebrew Java JDK caution Besu supports: MacOS High Sierra 10.13 or later versions. Java 21+. You can install Java using brew install openjdk@21. Alternatively, you can manually install the Java JDK.","s":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites","p":1357},{"i":1362,"t":"To install Besu using Homebrew: brew tap hyperledger/besu brew install hyperledger/besu/besu To upgrade an existing Besu installation using Homebrew: brew upgrade hyperledger/besu/besu notes If you upgraded your MacOS version between installing and upgrading Besu, when running brew upgrade hyperledger/besu/besu you might be prompted to reinstall command line tools with xcode-select --install. When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command brew tap --repair. To display the Besu version and confirm installation: besu --version To display Besu command line help: besu --help","s":"Install (or upgrade) using Homebrew","u":"/public-networks/get-started/install/binary-distribution","h":"#install-or-upgrade-using-homebrew","p":1357},{"i":1365,"t":"Java JDK 21+ Linux open file limit If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the maximum number of open files allowed using ulimit. If the open files limit is not high enough, a Too many open files RocksDB exception occurs. tip We recommend installing jemalloc to reduce memory usage. If using Ubuntu, you can install it with the command: apt install libjemalloc-dev.","s":"Prerequisites","u":"/public-networks/get-started/install/binary-distribution","h":"#prerequisites-1","p":1357},{"i":1367,"t":"Download the Besu packaged binaries. Unpack the downloaded files and change into the besu- directory. Display Besu command line help to confirm installation: bin/besu --help","s":"Install from packaged binaries","u":"/public-networks/get-started/install/binary-distribution","h":"#install-from-packaged-binaries","p":1357},{"i":1369,"t":"Migrate from a different Ethereum execution client to Besu to contribute to client diversity. To migrate from a different client, configure Besu as an execution client and connect your consensus client to Besu instead of your original execution client. To minimize downtime while Besu syncs and avoid downtime penalties, you can sync Besu with a new consensus layer instance. Once Besu has fully synced you can connect it to your existing consensus client. Find guides to switch from specific clients on the client diversity website.","s":"Migrate to Besu","u":"/public-networks/get-started/migrate-to-besu","h":"","p":1368},{"i":1371,"t":"Besu provides a Docker image to run a Besu node in a Docker container. Use this Docker image to run a single Besu node without installing Besu.","s":"Run Besu from a Docker image","u":"/public-networks/get-started/install/run-docker-image","h":"","p":1370},{"i":1373,"t":"Docker MacOS or Linux info The Docker image doesn't run on Windows.","s":"Prerequisites","u":"/public-networks/get-started/install/run-docker-image","h":"#prerequisites","p":1370},{"i":1375,"t":"To run a Besu node in a container connected to the Ethereum Mainnet: docker run hyperledger/besu:latest note https://hub.docker.com/r/hyperledger/besu/tags lists the available tags for the image. If you previously pulled latest, Docker runs the cached version. To ensure your image is up to date, pull the latest version again using docker pull hyperledger/besu:latest.","s":"Default node for Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#default-node-for-mainnet","p":1370},{"i":1377,"t":"Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using --rpc-http-port, --p2p-port, --rpc-ws-port, --metrics-port, --graphql-http-port, and --metrics-push-port options. To run Besu exposing local ports for access: docker run -p :8545 -p :8546 -p :30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled note The examples on this page expose TCP ports only. To expose UDP ports, specify /udp at the end of the argument for the -p Docker subcommand option: docker run -p :/udp See the docker run -p documentation. To enable JSON-RPC HTTP calls to 127.0.0.1:8545 and P2P discovery on 127.0.0.1:13001: docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled","s":"Expose ports","u":"/public-networks/get-started/install/run-docker-image","h":"#expose-ports","p":1370},{"i":1379,"t":"danger Don't mount a volume at the default data path (/opt/besu). Mounting a volume at the default data path interferes with the operation of Besu and prevents Besu from safely launching. To run a node that maintains the node state (key and database), --data-path must be set to a location other than /opt/besu and a storage volume mounted at that location. When running in a Docker container, --nat-method must be set to DOCKER or AUTO (default). Don't set --nat-method to NONE or UPNP. You can specify Besu environment variables with the Docker image instead of the command line options. Example docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=holesky hyperledger/besu:latest Unsupported address type exception When running Besu from a Docker image, you might get the following exception: Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime. This happens when the IPv6 support in Docker is disabled while connecting to an IPv6 peer, preventing outbound communication. IPv6 is disabled by default in Docker. Enable IPv6 support in Docker to allow outbound IPv6 traffic and allow connection with IPv6 peers.","s":"Start Besu","u":"/public-networks/get-started/install/run-docker-image","h":"#start-besu","p":1370},{"i":1381,"t":"To run a node that mines blocks at a rate suitable for testing purposes with WebSocket enabled: docker run -p 8546:8546 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu","s":"Run a node for testing","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-for-testing","p":1370},{"i":1383,"t":"To run a node on Holesky: docker run -p 30303:30303 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --network=holesky --data-path=/var/lib/besu","s":"Run a node on Holesky testnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-holesky-testnet","p":1370},{"i":1385,"t":"To run a node on Ethereum Mainnet with the HTTP JSON-RPC service enabled: docker run -p 8545:8545 --mount type=bind,source=/,target=/var/lib/besu -p 30303:30303 hyperledger/besu:latest --rpc-http-enabled --data-path=/var/lib/besu","s":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/install/run-docker-image","h":"#run-a-node-on-ethereum-mainnet","p":1370},{"i":1387,"t":"When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run docker container ls and docker volume ls to get the container and volume names. To stop a container: docker stop To delete a container: docker rm ","s":"Stop Besu and clean up resources","u":"/public-networks/get-started/install/run-docker-image","h":"#stop-besu-and-clean-up-resources","p":1370},{"i":1389,"t":"Nodes can connect to Ethereum Mainnet and public testnets. Use the besu command with the required command line options to start a node.","s":"Start Besu","u":"/public-networks/get-started/start-node","h":"","p":1388},{"i":1391,"t":"Besu installed","s":"Prerequisites","u":"/public-networks/get-started/start-node","h":"#prerequisites","p":1388},{"i":1393,"t":"When connecting to a network other than the network previously connected to, you must either delete the local block data or use the --data-path option to specify a different data directory. To delete the local block data, delete the database directory in the besu/build/distribution/besu- directory.","s":"Local block data","u":"/public-networks/get-started/start-node","h":"#local-block-data","p":1388},{"i":1395,"t":"Besu specifies the genesis configuration, and sets the network ID and bootnodes when connecting to Holesky, Sepolia, and Mainnet. info The Ropsten, Rinkeby, and Kiln testnets are deprecated. When you specify --network=dev, Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with --network=dev has an empty bootnodes list by default. The genesis files defining the genesis configurations are in the Besu source files. To define a genesis configuration, create a genesis file (for example, genesis.json) and specify the file using the --genesis-file option.","s":"Genesis configuration","u":"/public-networks/get-started/start-node","h":"#genesis-configuration","p":1388},{"i":1397,"t":"By default, Besu syncs to the current state of the blockchain using fast sync in: Networks specified using --network except for the dev development network. Ethereum Mainnet. We recommend using snap sync for a faster sync, by starting Besu with --sync-mode=SNAP. By default, Besu stores data in the Forest of Tries format. We recommend using Bonsai Tries for lower storage requirements, by starting Besu with --data-storage-format=BONSAI.","s":"Syncing and storage","u":"/public-networks/get-started/start-node","h":"#syncing-and-storage","p":1388},{"i":1399,"t":"To run a node that mines blocks at a rate suitable for testing purposes: besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --host-allowlist=\"*\" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir You can also use the following configuration file on the command line to start a node with the same options as above: network=\"dev\" miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" rpc-http-cors-origins=[\"all\"] host-allowlist=[\"*\"] rpc-ws-enabled=true rpc-http-enabled=true data-path=\"/tmp/tmpdata-path\" Warning The following settings are a security risk in production environments: Enabling the HTTP JSON-RPC service (--rpc-http-enabled) and setting --rpc-http-host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. Setting --host-allowlist to \"*\" allows JSON-RPC API access from any host. Setting --rpc-http-cors-origins to \"all\" or \"*\" allows cross-origin resource sharing (CORS) access from any domain.","s":"Run a node for testing","u":"/public-networks/get-started/start-node","h":"#run-a-node-for-testing","p":1388},{"i":1401,"t":"To run a node on Holesky specifying a data directory: besu --network=holesky --data-path=/ Where and are the path and directory to save the Holesky chain data to. See the guide on connecting to a testnet for more information.","s":"Run a node on Holesky testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-holesky-testnet","p":1388},{"i":1403,"t":"To run a node on Sepolia specifying a data directory: besu --network=sepolia --data-path=/ Where and are the path and directory to save the Sepolia chain data to. See the guide on connecting to a testnet for more information.","s":"Run a node on Sepolia testnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-sepolia-testnet","p":1388},{"i":1405,"t":"To run a node on the Ethereum Mainnet: besu To run a node on Mainnet with the HTTP JSON-RPC service enabled and available for localhost only: besu --rpc-http-enabled See the guide on connecting to Mainnet for more information.","s":"Run a node on Ethereum Mainnet","u":"/public-networks/get-started/start-node","h":"#run-a-node-on-ethereum-mainnet","p":1388},{"i":1407,"t":"If you started Besu with the --rpc-http-enabled option, use cURL to call JSON-RPC API methods to confirm the node is running. eth_chainId returns the chain ID of the network. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' localhost:8545 eth_syncing returns the starting, current, and highest block. curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}' localhost:8545 For example, after connecting to Mainnet, eth_syncing will return something similar to: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x2d0\", \"highestBlock\": \"0x66c0\" } }","s":"Confirm node is running","u":"/public-networks/get-started/start-node","h":"#confirm-node-is-running","p":1388},{"i":1409,"t":"Determine public network system requirements by checking CPU and disk space requirements using Prometheus. Grafana provides a sample dashboard for Besu. tip CPU requirements are highest when syncing to the network and typically reduce after the node is synchronized to the chain head.","s":"System requirements","u":"/public-networks/get-started/system-requirements","h":"","p":1408},{"i":1411,"t":"Besu requires an installation of Java 21+ to run. We currently recommend two Java distributions, OpenJDK 21 and OpenJ9, though you can experiment based on your needs. OpenJDK is the default for many Java users and is balanced in performance and garbage collection. OpenJ9 consumes less memory and system resources, but can have worse performance on some setups. If you have more than 32GB RAM (for Besu and your consensus client), use OpenJDK. If you have less RAM: If you're on Linux (or Unix-based) and your CPU is x86-64 bit architecture (like Intel), use OpenJ9. If you're on ARM-64 CPU architecture (Mac M-series, Raspberry Pi), use OpenJDK. If you have OpenJDK installed or need a fresh installation of OpenJ9, you can pick up the OpenJ9 docker image, or install the OpenJ9 JDK using the following steps: Get the binaries corresponding to your OS architecture. For example: wget https://github.com/ibmruntimes/semeru21-certified-binaries/releases/download/jdk-21.0.3%2B9_openj9-0.44.0/ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz Uncompress the binaries: Command Example tar -xvf YOUR_J9_IMAGE.tar.gz tar -xvf ibm-semeru-certified-jdk_x64_linux_21.0.3.0.tar.gz Move the binaries to bin directory: Command Example sudo cp -r YOUR_IMAGE/ /usr/bin/ sudo cp -r jdk-21.0.3+9/ /usr/bin/ Specify OpenJ9 for Java on your machine: Command Example sudo update-alternatives --install \"/usr/bin/java\" \"java\" \"/usr/bin/YOUR_IMAGE\" 1 sudo update-alternatives --config java (and choose OpenJ9) sudo update-alternatives --install \"/usr/bin/java\" \"java\" \"/usr/bin/jdk-21.0.3+9/bin/java\" Change your JAVA_HOME to OpenJ9 (if using the JDK implementation), where jdk-install-dir is the installation location you specified: Command Example export JAVA_HOME=jdk-install-dir` export JAVA_HOME=/usr/bin/jdk-21.0.3+9","s":"Java distribution and installation","u":"/public-networks/get-started/system-requirements","h":"#java-distribution-and-installation","p":1408},{"i":1413,"t":"For Mainnet and testnets, the minimum Java Virtual Machine (JVM) memory requirement is 8 GB. JVM memory requirements are highest when syncing, but will reduce after the node is synchronized to the chain head. Monitor your system to determine your actual JVM memory needs.","s":"Java Virtual Machine size","u":"/public-networks/get-started/system-requirements","h":"#java-virtual-machine-size","p":1408},{"i":1415,"t":"Fast synchronization with pruning enabled requires approximately 750 GB of disk space. Full synchronization requires approximately 3 TB.","s":"Disk space","u":"/public-networks/get-started/system-requirements","h":"#disk-space","p":1408},{"i":1417,"t":"Use local SSD storage for high throughput nodes (validators and RPC nodes). Read-only nodes can use a lower performance setup. You can use local SSDs through SCSI interfaces. For higher performance in production settings, we recommend upgrading to NVMe interfaces.","s":"Disk type","u":"/public-networks/get-started/system-requirements","h":"#disk-type","p":1408},{"i":1419,"t":"We are running 22.4.2 Mainnet nodes using m6gd.2xlarge boxes. We synchronized the 22.4.2 Mainnet nodes using m6gd.2xlarge boxes. Using a larger box while synchronizing speeds up the sync process by giving it more resources. When the sync is completed, the box size can be reduced. caution If you are using a more recent release than 22.4.2, resource requirements may have increased.","s":"AWS requirements","u":"/public-networks/get-started/system-requirements","h":"#aws-requirements","p":1408},{"i":1421,"t":"When using the Bonsai Tries data storage format, --bonsai-limit-trie-logs-enabled is enabled by default. When enabled, this feature can reduce database growth by more than 3 GB each week on Mainnet. note If --sync-mode=FULL is set, the --bonsai-limit-trie-logs-enabled option is disallowed and must be set to false.","s":"Reduce storage for Bonsai Tries","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"","p":1420},{"i":1423,"t":"If you're running Besu without --bonsai-limit-trie-logs-enabled, you might have a backlog of redundant trie logs. You can prune these using the following instructions. note Ensure you are using Besu version 24.6.0 or later. If you are using an older version, upgrade Besu or refer to the older version of the documentation. caution The following commands are examples. Before executing these example commands on your node, modify them to apply to your node's configuration. Stop Besu. (Optional) Run the Besu trie log prune command. Specify the Bonsai Trie data storage format and the data directory for your Besu database: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune Start Besu. Look for Limit trie logs enabled: retention: 512; prune window: 30000 in your Besu configuration printout at startup.","s":"Limit and prune trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#limit-and-prune-trie-logs","p":1420},{"i":1425,"t":"When you start Besu with --bonsai-limit-trie-logs-enabled, it continuously prunes the unnecessary trie log data, removing it one block at a time. This process begins after an initial reduction in the database size during startup. Enabling --bonsai-limit-trie-logs-enabled on a long-running node does not immediately clear your backlog of trie logs in the same way resyncing does. Instead of resyncing, you can run an offline command to immediately prune old trie logs. To run the offline command, you must shut down Besu for a minimal period. If the --bonsai-limit-trie-logs-enabled option is enabled, you do not need to run the offline command again after initially running it. For minimal downtime, we recommend running the offline command before restarting Besu with --bonsai-limit-trie-logs-enabled. If you are following the guides by Somer Esat or CoinCashew, you have set the following options in your besu.service or execution.service systemd file: ... ExecStart=/usr/local/bin/besu/bin/besu \\ ... --sync-mode=SNAP \\ --data-path=\"/var/lib/besu\" \\ --data-storage-format=BONSAI \\ ... To prune trie logs, the command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune The logs should look similar to the following: 2024-02-02 05:45:41.162+00:00 | main | INFO | KeyPairUtil | Attempting to load public key from /data/besu/key ... 2024-02-02 05:45:43.433+00:00 | main | INFO | TrieLogSubCommand | Estimating trie logs size before pruning... 2024-02-02 05:45:43.837+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size before pruning: 9 GiB 2024-02-02 05:46:09.863+00:00 | main | INFO | TrieLogHelper | Starting pruning: retain 512 trie logs, processing in 1 batches... 2024-02-02 05:46:09.918+00:00 | main | INFO | TrieLogHelper | Saving trie logs to retain in file /data/besu/database/trieLogsToRetain-1 (batch 1)... 2024-02-02 05:46:09.926+00:00 | main | INFO | TrieLogHelper | Obtaining trielogs from db, this may take a few minutes... 2024-02-02 05:46:10.100+00:00 | main | INFO | TrieLogHelper | Clear trie logs... 2024-02-02 05:46:10.155+00:00 | main | INFO | TrieLogHelper | Restoring trie logs retained from batch 1... 2024-02-02 05:46:10.222+00:00 | main | INFO | TrieLogHelper | Key(0): 0xcd50706da7f6f2db7f9d54f3589122760900d9ab2508c20a4ca40b496d930368 ... 2024-02-02 05:46:10.336+00:00 | main | INFO | TrieLogHelper | Key(511): 0x238f9649b59616430ad7e43b8f3cf65bc97cac4aa54a3eddf3ad6ee666ce733e 2024-02-02 05:46:10.441+00:00 | main | INFO | TrieLogHelper | Deleting files... 2024-02-02 05:46:10.446+00:00 | main | INFO | TrieLogSubCommand | Finished pruning. Re-estimating trie logs size... 2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Estimated trie logs size after pruning: 0 B (0 B estimate is normal when using default settings) 2024-02-02 05:46:11.023+00:00 | main | INFO | TrieLogSubCommand | Prune ran successfully. We estimate you freed up 9 GiB! Prune ran successfully. We estimate you freed up 9 GiB! If you are using a TOML configuration file, you can run a command similar to the following: sudo /usr/local/bin/besu/bin/besu --config-file=besu-config.toml storage trie-log prune","s":"Prune outdated trie logs","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-outdated-trie-logs","p":1420},{"i":1427,"t":"Troubleshoot common errors that can occur when using the trie log prune command to reduce your database size for Bonsai Tries. To minimize errors, ensure your command specifies the following: --data-storage-format --data-path --sync-mode","s":"Troubleshoot","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#troubleshoot","p":1420},{"i":1429,"t":"The prune command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune Ensure you stop Besu before running the command.","s":"Prune command for Mainnet","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#prune-command-for-mainnet","p":1420},{"i":1431,"t":"java.lang.IllegalArgumentException: Subcommand only works with data-storage-format=BONSAI The --data-storage-format=BONSAI might be missing. To resolve, add the storage format. The command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu --sync-mode=SNAP storage trie-log prune","s":"Subcommand not working","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#subcommand-not-working","p":1420},{"i":1433,"t":"java.lang.RuntimeException: Column handle not found for segment TRIE_BRANCH_STORAGE Ensure you specify --data-path. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Column handle not found for segment TRIE_BRANCH_STORAGE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-trie_branch_storage","p":1420},{"i":1435,"t":"java.lang.IllegalArgumentException: Trying to retain more trie logs than chain length (0), skipping pruning Ensure you specify the correct --data-path for your node. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Database not detected","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#database-not-detected","p":1420},{"i":1437,"t":"java.lang.IllegalArgumentException: Cannot store generated private key Ensure you specify the correct --data-path for your node. Your command should look similar to the following: sudo /usr/local/bin/besu/bin/besu --data-path=/var/lib/besu --data-storage-format=BONSAI --sync-mode=SNAP storage trie-log prune","s":"Cannot store generated private key","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-store-generated-private-key","p":1420},{"i":1439,"t":"java.lang.IllegalArgumentException: Supplied file does not contain valid keyPair pair. Check your file permissions and try running a sudo command to resolve the issue: sudo /usr/local/bin/besu/bin/besu --data-storage-format=BONSAI --data-path=/var/lib/besu storage --sync-mode=SNAP trie-log prune","s":"Valid keypair not provided","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#valid-keypair-not-provided","p":1420},{"i":1441,"t":"java.lang.RuntimeException: Column handle not found for segment WORLD_STATE Ensure you are using --data-storage-format=BONSAI instead of --data-storage-format=FOREST on an existing Bonsai database.","s":"Column handle not found for segment WORLD_STATE","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#column-handle-not-found-for-segment-world_state","p":1420},{"i":1443,"t":"org.hyperledger.besu.plugin.services.exception.StorageException: org.rocksdb.RocksDBException: While lock file: /data/besu/database/LOCK: Resource temporarily unavailable Check if Besu is already running. You must shut down the Besu client before running the subcommand.","s":"Resource temporarily unavailable","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#resource-temporarily-unavailable","p":1420},{"i":1445,"t":"java.lang.IllegalStateException: Unable to change the sync mode when snap sync is incomplete, please restart with snap sync mode Check that you have specified --sync-mode. The default is --sync-mode=SNAP. Most Mainnet users use SNAP or CHECKPOINT.","s":"Unable to change the sync mode","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#unable-to-change-the-sync-mode","p":1420},{"i":1447,"t":"java.lang.RuntimeException: No finalized block present, can't safely run trie log prune This message might appear if your node is relatively new or recently resynced. To resolve this error, ensure that your node is fully synced and correctly configured to recognize finalized blocks.","s":"Cannot run trie log prune","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#cannot-run-trie-log-prune","p":1420},{"i":1449,"t":"org.hyperledger.besu.util.InvalidConfigurationException: Supplied genesis block does not match chain data stored in /data/besu. Check if you are running the command for a network other than Mainnet. To specify a network, run a command that looks similar to the following: sudo /usr/local/bin/besu/bin/besu --network=holesky --sync-mode=SNAP --data-storage-format=BONSAI --data-path=/var/lib/besu storage trie-log prune","s":"Block does not match stored chain data","u":"/public-networks/how-to/bonsai-limit-trie-logs","h":"#block-does-not-match-stored-chain-data","p":1420},{"i":1451,"t":"Besu comes with a default configuration that is suitable for staking. You can override the default values by specifying configuration options on the command line, as environment variables, or in a TOML configuration file that can be reused across node startups. You can also use a pre-configured profile for some common use cases or create and apply a custom profile.","s":"Configure Besu","u":"/public-networks/how-to/configure-besu","h":"","p":1450},{"i":1453,"t":"For options specified in multiple places, the order of precedence is as follows: Command line Environment variable Configuration file specified by --config-file Pre-configured profile specified by --profile Default values (used if no other configuration source is available) For example, if you specify a config.toml configuration file and staker profile, and an option is not found in the environment variables, Besu looks for it in config.toml. If the option is not found in config.toml, Besu looks for it in staker.toml. If the option is not found in staker.toml, Besu uses the default value for that option.","s":"Configuration order of precedence","u":"/public-networks/how-to/configure-besu","h":"#configuration-order-of-precedence","p":1450},{"i":1455,"t":"note The configuration file is used for node-level settings. You can specify network-wide settings in the genesis file. Specify the configuration file using the --config-file option. The configuration file must be a valid TOML file composed of key/value pairs. Each key is the same as the corresponding command line option name without the leading dashes (--). Values must conform to TOML specifications for string, numbers, arrays, and booleans. Specific differences between the command line and the TOML file format are: Comma-separated lists on the command line are string arrays in the TOML file. Enclose file paths, hexadecimal numbers, URLs, and values in quotes. Table headings are ignored in TOML files. If you specify a valid Besu option under a table heading in the configuration file, Besu ignores the table heading and reads the option in the same way it does for options not under table headings. tip The command line reference includes configuration file examples for each option. Sample TOML configuration file # Valid TOML config file data-path=\"~/besudata\" # Path # Network bootnodes=[\"enode://001@123:4567\", \"enode://002@123:4567\", \"enode://003@123:4567\"] p2p-host=\"1.2.3.4\" p2p-port=1234 max-peers=42 rpc-http-host=\"5.6.7.8\" rpc-http-port=5678 rpc-ws-host=\"9.10.11.12\" rpc-ws-port=9101 # Chain genesis-file=\"~/genesis.json\" # Path to the custom genesis file # Mining miner-enabled=true miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" Starting Besu with a configuration file besu --config-file=/home/me/me_node/config.toml","s":"TOML configuration file","u":"/public-networks/how-to/configure-besu","h":"#toml-configuration-file","p":1450},{"i":1457,"t":"The following tables describe important default values of Besu's configuration. When using the default configuration, Besu is optimized for staking. You can extend these defaults using a profile. For example, extending the default configuration using the staker profile directs Besu to use Mainnet, creating a staking-optimized node ready to run with a validator and consensus client.","s":"Default configuration","u":"/public-networks/how-to/configure-besu","h":"#default-configuration","p":1450},{"i":1459,"t":"Configuration option Default Description discovery-enabled true Besu assumes the node will automatically discover other Ethereum nodes using P2P. p2p-enabled true Besu assumes the node will connect P2P. engine-rpc-enabled true Besu assumes the Engine API will be required to communicate with the consensus layer.","s":"Peering","u":"/public-networks/how-to/configure-besu","h":"#peering","p":1450},{"i":1461,"t":"Configuration option Default Description data-storage-format BONSAI Besu uses Bonsai Tries, the most space-efficient data storage format.","s":"Storage","u":"/public-networks/how-to/configure-besu","h":"#storage","p":1450},{"i":1463,"t":"Configuration option Default Description sync-mode SNAP Besu syncs using snap sync, the most time-efficient sync method. note You can see all default configuration values in the configuration options reference.","s":"Sync","u":"/public-networks/how-to/configure-besu","h":"#sync","p":1450},{"i":1465,"t":"To enable high availability to the RPC Pub/Sub API over WebSocket or the JSON-RPC API, run and synchronize more than one Besu node to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests. tip We don't recommend putting bootnodes behind a load balancer. info We recommend using load balancers over WebSockets because WebSockets are persistent connections associated with specific nodes. If you use load balancers configured in sticky mode over HTTP instead, the connection sticks to the associated node even when the node is congested and there is a lower load node available. If you use load balancers not configured in sticky mode over HTTP, the connections may switch from node to node, so some JSON-RPC requests may not provide expected results (for example, admin methods, net_enode, net_peerCount, and eth_syncing).","s":"High availability of JSON-RPC and RPC Pub/Sub APIs","u":"/public-networks/how-to/configure-ha","h":"","p":1464},{"i":1467,"t":"Use the readiness endpoint to determine when a node is ready. note The minimum number of peers and number of blocks from the best known block for determining if a node considered ready is deployment specific.","s":"Determine when a node is ready","u":"/public-networks/how-to/configure-ha","h":"#determine-when-a-node-is-ready","p":1464},{"i":1469,"t":"Besu obtains the nonce for the next transaction using eth_getTransactionCount. The nonce depends on the transactions in the transaction pool. If sending eth_getTransactionCount and eth_sendRawTransaction requests for a specific account to more than one node, the eth_getTransactionCount results might be incorrect. note If using private transactions, retrieve the nonce using priv_getTransactionCount or priv_getEeaTransactionCount and send the private transactions using eea_sendRawTransaction. To get correct nonces when distributing requests across a cluster, either: Track the next nonce outside of the Besu node (as MetaMask does). Configure the load balancer in sticky mode to send requests from a specific account to a single node, unless that node is unavailable.","s":"Transaction nonces","u":"/public-networks/how-to/configure-ha","h":"#transaction-nonces","p":1464},{"i":1471,"t":"You can subscribe to events using: RPC Pub/Sub over WebSockets. Filters over HTTP. We recommend using RPC Pub/Sub over WebSocket because WebSockets connections associate with a specific node and do not require using the load balancer in sticky mode. If using filters over HTTP, configure the load balancer in sticky mode to associate the subscription with a specific node.","s":"Subscriptions","u":"/public-networks/how-to/configure-ha","h":"#subscriptions","p":1464},{"i":1473,"t":"Dropped subscriptions can occur because of: A disconnected WebSockets connection The removal of the node serving the subscription from the ready pool. If there is a dropped subscription, missed events might occur while reconnecting to a different node. To recover dropped messages, create another subscription and follow the process for that subscription type: newHeads logs newPendingTransactions droppedPendingTransactions syncing.","s":"Recover from dropped subscriptions","u":"/public-networks/how-to/configure-ha","h":"#recover-from-dropped-subscriptions","p":1464},{"i":1475,"t":"To request information on blocks from the last block before the subscription dropped to the first block received from the new subscription, use eth_getBlockByNumber.","s":"New headers","u":"/public-networks/how-to/configure-ha","h":"#new-headers","p":1464},{"i":1477,"t":"To request logs from the block number of the last log received before the subscription dropped to the current chain head, use eth_getLogs.","s":"Logs","u":"/public-networks/how-to/configure-ha","h":"#logs","p":1464},{"i":1479,"t":"To request all pending transactions for the new node, use txpool_besuTransactions. note Nodes do not all store the same pending transactions.","s":"New pending transactions","u":"/public-networks/how-to/configure-ha","h":"#new-pending-transactions","p":1464},{"i":1481,"t":"To request all pending transactions for the new node, use txpool_besuTransactions. note Nodes do not all store the same pending transactions.","s":"Dropped pending transactions","u":"/public-networks/how-to/configure-ha","h":"#dropped-pending-transactions","p":1464},{"i":1483,"t":"The syncing state of each node is specific to that node. To retrieve the syncing state of the new node, use eth_syncing.","s":"Syncing","u":"/public-networks/how-to/configure-ha","h":"#syncing","p":1464},{"i":1485,"t":"You can load a profile to extend Besu's default configuration, using the --profile option. Profiles simplify the process of configuring Besu for common use cases. Besu provides the following pre-configured profiles: Minimalist staker profile Staker profile Enterprise/Private profile Alternatively, you can customize and load external profiles. note Run ./besu --help to view all available profiles. note A configuration option specified in the configuration file or on the command line overrides the same option set in the profile.","s":"Use a profile","u":"/public-networks/how-to/configure-besu/profile","h":"","p":1484},{"i":1487,"t":"--profile=MINIMALIST_STAKER is optimized for stakers who want to maximize their hardware value but don't want to serve full sets of data to their peers, See the minimalist staker profile on GitHub for the custom settings.","s":"Minimalist staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#minimalist-staker-profile","p":1484},{"i":1489,"t":"--profile=STAKER is optimized for stakers who want to maximize their hardware value while also serving full sets of data to their peers. See the staker profile on GitHub for the custom settings.","s":"Staker profile","u":"/public-networks/how-to/configure-besu/profile","h":"#staker-profile","p":1484},{"i":1491,"t":"ENTERPRISE and PRIVATE are aliases for the same profile. --profile=PRIVATE / --profile=ENTERPRISE supports private network operators and enterprises by handling specific use cases that apply to private network operators. See the enterprise/private profile on GitHub for the custom settings. When using this profile, set --sync-mode=FULL and --data-storage-format=FOREST.","s":"Enterprise/Private profile","u":"/public-networks/how-to/configure-besu/profile","h":"#enterpriseprivate-profile","p":1484},{"i":1493,"t":"You can use external profiles to create custom Besu bundles with various plugins and their default options. Add external profiles to a profiles directory under the root Besu directory. Run Besu with --profile set to the external profile file name, without the .toml extension. For example, to load the profiles/custom_profile.toml profile, run: besu --profile=custom_profile note You can overwrite the directory in which to place external profiles using the besu.profiles.dir system property.","s":"Load external profiles","u":"/public-networks/how-to/configure-besu/profile","h":"#load-external-profiles","p":1484},{"i":1496,"t":"For AWS, we recommend the Classic Load Balancer. The Classic Load Balancer is the easiest to configure and work with. Register the Besu instances to the load balancer and use the liveness endpoint for health checks. For finer grain control, use the Application Load Balancer: Configure one target group with n nodes. Configure multiple listeners with one per port (for example, 30303, 8545) you are using and route to the target group. Use the liveness endpoint for health checks. Register the Besu instances multiple times with different ports. This is like configuring microservices on Elastic Container Service (ECS) or Elastic Kubernetes Service (EKS).","s":"AWS","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#aws","p":1494},{"i":1498,"t":"With either AWS load balancer, you can add certificates using ACM (Amazon Certificate Manager), add them to the load balancers, and redirect all HTTP calls to HTTPS.","s":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection","p":1494},{"i":1500,"t":"For Elastic Kubernetes Service (AWS Kubernetes service) use the same load balancer configuration as when running nodes in Kubernetes. Use labels to specify nodes for the load balanced group.","s":"Elastic Kubernetes Service","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#elastic-kubernetes-service","p":1494},{"i":1502,"t":"Where applicable, we strongly recommend using service discovery. That is, pair your load balancer configuration with something that dynamically detects new nodes and removed failed nodes. For Nginx, use multiple upstreams (one for each port). Pair each upstream with a separate server block. Upstreams paired with server blocks upstream discovery_tcp_30303 { server 10.0.1.1:30303; server 10.0.1.2:30303; } upstream rpc_tcp_8545 { server 10.0.1.1:8545; server 10.0.1.2:8545; } server { listen 30303; server_name some.host; location / { proxy_pass http://discovery_tcp_30303; } } server { listen 8545; server_name some.host; location / { proxy_pass http://rpc_tcp_8545; } } ... For HAProxy, create multiple backend and frontend sets. Multiple backend and frontend sets frontend discovery-tcp-30303 bind *:30303 acl ... ... default_backend back-discovery-tcp-30303 frontend rpc-tcp-8545 bind *:8545 acl ... ... default_backend back-rpc-tcp-8545 backend back-discovery-tcp-30303 balance leastconn server node-01 10.0.1.1:30303 weight 1 check server node-02 10.0.1.2:30303 weight 1 check option ... timeout server 600s backend back-rpc-tcp-8545 balance leastconn server node-01 10.0.1.1:8545 weight 1 check server node-02 10.0.1.2:8545 weight 1 check option .... timeout server 600s ...","s":"Manual configurations","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#manual-configurations","p":1494},{"i":1504,"t":"To add HTTPS capability, update the above server blocks to include the certificates and specific ciphers. If you require an HTTP to HTTPS redirection, add separate blocks to return a 301 code with the new URI.","s":"HTTPS redirection","u":"/public-networks/how-to/configure-ha/sample-configuration","h":"#https-redirection-1","p":1494},{"i":1506,"t":"There are many flavors of Java and the Java Virtual Machine (JVM) that work with Besu. They might impact performance, start time, and more. Consider the options carefully when installing Java on your host machine. Currently, we recommend Java 21.","s":"Install and update Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"","p":1505},{"i":1508,"t":"Download the version of Java you would like to install. If you are running Besu outside a virtual environment, like Docker, you must have Java installed on the host machine. tip Download OpenJDK 21. You can find platform-specific installation instructions with the download. The following installation examples use OpenJDK.","s":"Install Java","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java","p":1505},{"i":1510,"t":"You can install OpenJDK on Ubuntu using the apt-get command. Ensure apt libraries are installed and up-to-date: sudo apt update && sudo apt upgrade -y Confirm whether Java is already installed: java -version If a version is returned, and you would like to update, see how to update Java on Ubuntu. If no version is returned, use apt to install the preferred version. sudo apt-get install openjdk-21-jdk Confirm the installation: java -version You might need to update your environment to make Java visible to Besu. Edit the .bashrc file in your home directory (or create it if needed) and add the following lines to the end of the file: .bashrc export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) export PATH=$PATH:$JAVA_HOME/bin Save your changes and source the file: source ~/.bashrc Verify that you updated your environment: echo $JAVA_HOME echo $PATH You should see the JDK versions output.","s":"Install Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-ubuntu","p":1505},{"i":1512,"t":"You can install OpenJDK on MacOS using Homebrew. With brew installed, run: brew install openjdk@21 You can target another version if you prefer. Confirm the installation: java -version The OpenJDK version you install should display. If this command returns command not found: java, check your terminal logs. Brew might prompt you to create a symlink or update your path variables within the logs in the terminal output. If so, run the prompts provided.","s":"Install Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#install-java-on-macos","p":1505},{"i":1515,"t":"To update Java on Ubuntu, uninstall the current versions and follow the instructions to install Java on Ubuntu with your target version. If you started with this guide, you can uninstall Java using the following command: sudo apt-get purge openjdk-\\*","s":"Update Java on Ubuntu","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-ubuntu","p":1505},{"i":1517,"t":"You can update Java on MacOS using Homebrew. List your Homebrew packages: brew ls To update the JDK version (for example, from 17 to 21), uninstall the old version and reinstall the target version: brew uninstall openjdk@17 brew install openjdk@21 note If you installed a version of Java not using Homebrew, it is located at /Library/Java/JavaVirtualMachines and can be safely deleted from that directory. To update point versions of Java, run the upgrade command: brew upgrade openjdk","s":"Update Java on MacOS","u":"/public-networks/how-to/configure-java/install-update-java","h":"#update-java-on-macos","p":1505},{"i":1519,"t":"Java Flight Recorder (JFR) is a monitoring tool that collects information about the Java Virtual Machine (JVM) when Besu is running. Use the JFR as a tool to analyze Besu performance.","s":"Use Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","h":"","p":1518},{"i":1521,"t":"To enable JFR, set BESU_OPTS to the JFR tags as follows: export BESU_OPTS=-XX:StartFlightRecording=disk=true,delay=15s,dumponexit=true,\\ filename=/tmp/recording.jfr,maxsize=1024m,maxage=1d,\\ settings=profile,path-to-gc-roots=true tip When recording, cleanly exiting Besu results in better data. If not possible to cleanly exit, the file may be missing some information not flushed to disk. Inspect the file written to /tmp/recording.jfr with tools such as Mission Control. danger If providing the output file to ConsenSys Quorum support, be aware that while JFR files don't contain secrets such as private keys, some details about the user configuration can be inferred from the JFR output.","s":"Enable Java Flight Recorder","u":"/public-networks/how-to/configure-java/java-flight-recorder","h":"#enable-java-flight-recorder","p":1518},{"i":1523,"t":"You can manage Java Virtual Machine (JVM) memory usage for Besu by modifying the maximum heap size. By default, the JVM uses 25% of system RAM. For example, if you have 16 GB RAM installed, the JVM uses 4 GB by default. On public networks, we recommend setting the maximum heap size to: 3 GB on an 8 GB RAM system. 5 GB on a 16 GB RAM system. 8 GB on a system with at least 24 GB RAM. note Setting a higher maximum heap size speeds up the sync period but doesn't have much impact after sync. Thus, we recommend setting it to 8 GB only when you have available RAM. You can set the maximum heap size using the BESU_OPTS environment variable and the -Xmx option. The following examples set the maximum heap size to 8 GB: Exported environment variable Inline environment variable .service file Set the variable for the whole shell before running Besu. export BESU_OPTS=-Xmx8g Set the variable only for the specific Besu command. BESU_OPTS=-Xmx8g besu [Besu options] [Service] ... Environment=\"BESU_OPTS=-Xmx8g\" ExecStart=besu [Besu options] ...","s":"Manage JVM memory","u":"/public-networks/how-to/configure-java/manage-memory","h":"","p":1522},{"i":1525,"t":"Heap dump file generation is disabled by default. To enable it, set the -XX:+HeapDumpOnOutOfMemoryError Java option. BESU_OPTS=\"-XX:+HeapDumpOnOutOfMemoryError\" When heap dump file generation is enabled, and an out-of-memory error occurs, the heap dump file is saved in the Besu runtime directory by default. The heap dump file might be large and can saturate your drive. It can be up to the size of the allocated memory. For example, for 8 GB heap memory, the file can be up to 8 GB. Specify the directory where you want the dump to be saved using the -XX:HeapDumpPath Java option. BESU_OPTS=\"-XX:HeapDumpPath=///\"","s":"Manage the heap dump","u":"/public-networks/how-to/configure-java/manage-memory","h":"#manage-the-heap-dump","p":1522},{"i":1527,"t":"To reduce Besu memory footprint, the following G1GC Java options are enabled by default: -XX:G1ConcRefinementThreads=2 -XX:G1HeapWastePercent=15 -XX:MaxGCPauseMillis=100 To run Besu without the default G1GC options, use the besu-untuned start script.","s":"Default options","u":"/public-networks/how-to/configure-java/manage-memory","h":"#default-options","p":1522},{"i":1529,"t":"To perform tasks such as attaching a debugger or configuring the garbage collector, pass Java Virtual Machine (JVM) options to Besu. Besu passes the contents of the BESU_OPTS environment variable to the JVM. Set standard JVM options in the BESU_OPTS variable. For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu. BESU_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \\ besu --network=holesky","s":"Pass JVM options","u":"/public-networks/how-to/configure-java/pass-jvm-options","h":"","p":1528},{"i":1531,"t":"To enable communication you must expose Besu ports appropriately. The following shows an example port configuration for a Besu node on AWS. When running Besu from the Docker image, expose ports. info If your nodes are running in AWS, ensure you have appropriate SecurityGroups to allow access to the required ports. tip Besu supports UPnP for home or small office environments where a wireless router or modem provides NAT isolation.","s":"Configure ports","u":"/public-networks/how-to/connect/configure-ports","h":"","p":1530},{"i":1533,"t":"To enable peer discovery, the P2P UDP port must be open for inbound connections. Specify the P2P port using the --p2p-port option. The default is 30303. We also recommend opening the P2P TCP port for inbound connections. This is not strictly required because Besu attempts to open outbound TCP connections. But if no nodes on the network are accepting inbound TCP connections, nodes cannot communicate. Combine the P2P port with the values for the --p2p-host and --p2p-interface options when specifying the P2P host and P2P network interface. info By default, peer discovery listens on 0.0.0.0:30303 (all interfaces). If the device Besu is running on must bind to a specific network interface, specify the interface using the --p2p-interface option.","s":"P2P networking","u":"/public-networks/how-to/connect/configure-ports","h":"#p2p-networking","p":1530},{"i":1535,"t":"To enable access to the JSON-RPC API, open the HTTP JSON-RPC and WebSockets JSON-RPC ports to the intended users of the JSON-RPC API on TCP. Specify the HTTP and WebSockets JSON-RPC ports using the --rpc-http-port and --rpc-ws-port options. The defaults are 8545 and 8546.","s":"JSON-RPC API","u":"/public-networks/how-to/connect/configure-ports","h":"#json-rpc-api","p":1530},{"i":1537,"t":"To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.","s":"Metrics","u":"/public-networks/how-to/connect/configure-ports","h":"#metrics","p":1530},{"i":1539,"t":"Besu peer-to-peer (P2P) discovery happens periodically based on the number of peers in a network and the node's peer limit. The frequency of discovery isn't configurable, but you can: Limit remote connections in public networks. Allowlist peers by IP subnet to create a private network of peers across public networks. Randomly prioritize connections in small, stable networks. info You can use admin_addPeer to attempt a specific connection, but this isn't P2P discovery. In private networks, we recommend using bootnodes to initially discover peers.","s":"Manage peers","u":"/public-networks/how-to/connect/manage-peers","h":"","p":1538},{"i":1541,"t":"The P2P discovery process requires ports to be open to UDP and TCP traffic. If you have a firewall in place, keep those ports open to allow traffic in and out. If you are running a node at home on your network, ensure that your router has those ports open. The discovery stack uses UDP to keep peer discovery lightweight and quick. It only allows a node to find peers and connect to them, without any additional overhead. Once peers have bonded, the data exchange between them is complex and needs a fully featured protocol to support error checking and retries, so the devP2P stack uses TCP. Both stacks work in parallel: the discovery stack adds new peers to the network, and the devP2P stack enables interactions and data flow between them. In detail, the P2P discovery process is as follows: When Besu starts up it advertises its presence and details (including the enode) using UDP before establishing a formal connection with any peer (log messages look like Enode URL enode://....). Besu attempts to connect to the network's bootnodes (a set of predefined nodes used to help bootstrap discovery). Once a connection with a bootnode is established using UDP (ping/pong handshake messages in the debug and trace logs), Besu requests a list of neighbors (potential peers) from the bootnode (find node messages in the debug and trace logs). Besu attempts to connect to each peer using TCP, and get status information from them – such as network details, what the peer believes to be the current chain head, and its list of neighbors. From this point on any traffic to that peer is only done using TCP. Depending on the synchronization method, a common block (the pivot block) is selected that all connected peers (default of 5) have, and Besu syncs from that block till it gets to chain head. Log messages look like Downloading world state from peers for pivot block ........ Besu repeats the same process for each peer in step 4, and any new peers that come along (regardless of client). The more peers Besu is connected to, the more confident it is of having an accurate view of the network.","s":"P2P discovery process","u":"/public-networks/how-to/connect/manage-peers","h":"#p2p-discovery-process","p":1538},{"i":1543,"t":"You can limit peers to reduce the bandwidth, CPU time, and disk access Besu uses to manage and respond to peers. To reduce the maximum number of peers, use the --max-peers option. The default is 25.","s":"Limit peers","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-peers","p":1538},{"i":1545,"t":"You can can define specific IP subnets permitted to interact with the node using the --net-restrict configuration. This restricts access to only those peers whose IP addresses fall within the allowed subnets. This is useful if you maintain a set of nodes and want to restrict which of those can connect to external nodes.","s":"Allowlist peers","u":"/public-networks/how-to/connect/manage-peers","h":"#allowlist-peers","p":1538},{"i":1547,"t":"Prevent eclipse attacks when using --sync-mode and --fast-sync-min-peers on public networks by enabling the remote connection limits. In private and permissioned networks with only trusted peers, enabling the remote connection limits is unnecessary and might adversely affect the speed at which nodes can join the network. Limiting remote connections can cause a closed group of peers to form when the number of nodes in the network is slightly higher than --max-peers. The nodes in this closed group are all connected to each other and can't accept more connections. tip You can use --random-peer-priority-enabled to help prevent closed groups of peers in small, stable networks.","s":"Limit remote connections","u":"/public-networks/how-to/connect/manage-peers","h":"#limit-remote-connections","p":1538},{"i":1549,"t":"JSON-RPC API methods to monitor peer connections include: net_peerCount. admin_peers. debug_metrics. Each peer entry returned by admin_peers includes a protocols section. Use the information in the protocols section to: Determine the health of peers. For example, an external process can use admin_peers and admin_removePeer to disconnect from peers that are stalled at a single difficulty for an extended period of time. Monitor node health. For example, if peers report increasing difficulties but the node is stuck at the same block number, the node may be on a different fork to most peers. Determine which protocol level peers are communicating with. For example, you can see if \"version\": 65 is being used to reduce transaction sharing traffic.","s":"Monitor peer connections","u":"/public-networks/how-to/connect/manage-peers","h":"#monitor-peer-connections","p":1538},{"i":1551,"t":"The default logging configuration doesn't list node connection and disconnection messages. To enable listing them, set the --logging option to DEBUG. For more verbosity, set the option to TRACE. The console logs connection and disconnection events when the log level is DEBUG or higher. If the message Successfully accepted connection from ... displays, connections are getting through the firewalls. Sample log output 2018-10-16 12:37:35.479-04:00 | nioEventLoopGroup-3-1 | INFO | NettyP2PNetwork | Successfully accepted connection from 0xa979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c","s":"List node connections","u":"/public-networks/how-to/connect/manage-peers","h":"#list-node-connections","p":1538},{"i":1553,"t":"To disable P2P discovery, set the --discovery-enabled option to false. With discovery disabled, peers can't open connections with the node unless they were previously discovered or manually peered (for example, using admin_addPeer). Static nodes can also open connections.","s":"Disable discovery","u":"/public-networks/how-to/connect/manage-peers","h":"#disable-discovery","p":1538},{"i":1555,"t":"If you encounter issues with peering, see the troubleshoot peering documentation, which helps you identify and resolve common problems that can occur during the peering process.","s":"Troubleshoot","u":"/public-networks/how-to/connect/manage-peers","h":"#troubleshoot","p":1538},{"i":1557,"t":"Static nodes are a configured set of trusted nodes. Static nodes are exempt from maximum peer and remote connection limits. Besu periodically initiates a connection to any unconnected static node. To mitigate low peer count issues in small networks, we recommend using static nodes, or static nodes and bootnodes. tip Bootnodes and static nodes are both methods for finding peers. Depending on your use case, you can use only bootnodes, only static nodes, or both bootnodes and static nodes. For example: You run multiple nodes on Mainnet, using bootnodes for discovery, but want to ensure your nodes are always connected to each other, using static nodes. You run a small network and want your nodes to reconnect if disconnected, using static nodes. To find peers, configure one or more bootnodes. To configure a specific set of peer connections, use static nodes.","s":"Static nodes","u":"/public-networks/how-to/connect/static-nodes","h":"","p":1556},{"i":1559,"t":"To configure a network of static nodes: List the enode URLs of the nodes in the static-nodes.json file. Save the static-nodes.json file in the data directory (specified by --data-path) of each node. Alternatively, you can explicitly specify the static nodes file on the command line using --static-nodes-file. Start Besu with discovery disabled using --discovery-enabled=false. To update the list of static peers at run time, use the admin_addPeer and admin_removePeer JSON-RPC API methods. note Runtime modifications of static nodes are not persisted between runs. The static-nodes.json file is not updated by the admin_addPeer and admin_removePeer methods. Nodes not in the list of the static nodes are not prevented from connecting. To prevent nodes from connecting, use Permissioning. tip If the added peer does not appear in the peer list (returned by admin_peers), check the the supplied enode URL is correct, the node is running, and the node is listening for TCP connections on the endpoint.","s":"Configure static nodes","u":"/public-networks/how-to/connect/static-nodes","h":"#configure-static-nodes","p":1556},{"i":1561,"t":"The static-nodes.json file must be in the data directory (specified by --data-path) and contain a JSON array of enode URLs. Example [ \"enode://cea71cb65a471037e01508cebcc178f176f9d5267bf29507ea1f6431eb6a5dc67d086dc8dc54358a72299dab1161febc5d7af49d1609c69b42b5e54544145d4f@127.0.0.1:30303\", \"enode://ca05e940488614402705a6b6836288ea902169ecc67a89e1bd5ef94bc0d1933f20be16bc881ffb4be59f521afa8718fc26eec2b0e90f2cd0f44f99bc8103e60f@127.0.0.1:30304\" ] note Each node has a static-nodes.json file. We recommend each node in the network has the same static-nodes.json file.","s":"static-nodes.json file","u":"/public-networks/how-to/connect/static-nodes","h":"#static-nodesjson-file","p":1556},{"i":1563,"t":"Use the --nat-method option to specify the NAT method. Options are: UPNP, KUBERNETES, DOCKER, AUTO, and NONE. The enode advertised to other nodes during discovery is the external IP address and port. The admin_nodeInfo JSON-RPC API method returns the external address and port for the enode and listenAddr properties. While Besu is running, the following are not supported: IP address changes Changing NAT methods. To change the NAT method, restart the node with the --nat-method option set.","s":"Specify the NAT method","u":"/public-networks/how-to/connect/specify-nat","h":"","p":1562},{"i":1565,"t":"AUTO detects if Besu is running inside a Kubernetes cluster or a Docker container. If Besu is running in a Kubernetes cluster, AUTO sets to KUBERNETES. If Besu is running in a Docker container, AUTO sets to DOCKER. If Besu is not running in Kubernetes or Docker container, AUTO sets to NONE. AUTO is the default NAT method. The following log shows an automatic detection failure. The following log shows an automatic detection failure INFO | KubernetesNatManager | Starting kubernetes NAT manager. DEBUG | KubernetesNatManager | Trying to update information using Kubernetes client SDK. DEBUG | NatService | Nat manager failed to configure itself automatically due to the following reason Service not found. NONE mode will be used INFO | NetworkRunner | Starting Network. tip If automatic detection fails, set the IP and ports in NONE mode.","s":"Auto","u":"/public-networks/how-to/connect/specify-nat","h":"#auto","p":1562},{"i":1567,"t":"Specify UPNP to quickly allow inbound peer connections without manual router configuration. Use UPnP in home or small office environments where a wireless router or modem provides NAT isolation. UPnP automatically detects if a node is running in a UPnP environment and provides port forwarding. UPnP might introduce delays during node startup, especially on networks without a UPnP gateway device. Use UPNPP2PONLY if you wish to enable UPnP only for p2p traffic. tip UPnP support is often disabled by default in networking firmware. If disabled by default, you must explicitly enable UPnP support. info When the NAT method is set to UPNP, the advertised port is the same as the listening port.","s":"UPnP","u":"/public-networks/how-to/connect/specify-nat","h":"#upnp","p":1562},{"i":1569,"t":"Specify KUBERNETES to explicitly specify Besu is running inside a Kubernetes cluster. Besu automatically detects if it's running inside of a Kubernetes cluster and interacts with Kubernetes APIs as required to determine external IP addresses and exposed ports. In Kubernetes, the Ingress IP of the load balancer will be used as the external IP for Besu. A load balancer service can map any incoming port to a target port. These mapping rules will be the one retrieved by Besu. A tutorial to Configure the Nat Manager for Kubernetes is available.","s":"Kubernetes","u":"/public-networks/how-to/connect/specify-nat","h":"#kubernetes","p":1562},{"i":1571,"t":"Specify DOCKER to explicitly specify Besu is running inside a Docker container. If you specify DOCKER, you advertise the host IP address not the container IP address. The host IP address is the advertised host specified in the docker run command. If not specified in the docker run command, the advertised host defaults to the values for --p2p-host and --p2p-port.","s":"Docker","u":"/public-networks/how-to/connect/specify-nat","h":"#docker","p":1562},{"i":1573,"t":"Specify NONE to explicitly configure the external IP address and ports advertised using: --p2p-host and --p2p-port for the P2P service. --rpc-http-host and --rpc-http-port for the JSON-RPC HTTP service. The P2P and JSON-RPC HTTP hosts and ports are advertised in the net_services method. tip When the NAT method is set to NONE, the advertised port is the same as the listening port.","s":"None","u":"/public-networks/how-to/connect/specify-nat","h":"#none","p":1562},{"i":1575,"t":"Monitoring enables identification of node and network issues. Specifically, configuring metrics and logging enables: Visual representation of declining node or network performance Collection of log files to enable issue diagnosis. For an overview of monitoring Besu, view this recording.","s":"Monitor Besu","u":"/public-networks/how-to/monitor","h":"","p":1574},{"i":1577,"t":"Dapps use client libraries, such as web3.js, web3j, or ethereumj, to forward JSON-RPC requests to Besu. Any client library implementing core Ethereum RPC methods works with Besu. Use the web3js-quorum library with Besu for privacy features. Use client libraries to: Create signed transactions Create and send private transactions. note Besu does not support key management inside the client.","s":"Use client libraries","u":"/public-networks/how-to/develop/client-libraries","h":"","p":1576},{"i":1579,"t":"Developing for Besu using Hardhat is the same as developing for public Ethereum networks using Hardhat. Hardhat supports Besu with the only difference being Besu does not support private key management. You can therefore use a wallet provider, or specify your private key in the code.","s":"Use Hardhat","u":"/public-networks/how-to/develop/hardhat","h":"","p":1578},{"i":1582,"t":"To add the wallet provider, update the hardhat.config.ts file in the project directory. Replace: with the JSON-RPC endpoint (IP address and port) of a Besu node. with the list of words that make up your account's mnemonic. with your password if used. with your account's private key. module.exports = { // See // for more about customizing your Hardhat configuration! networks: { besuWallet: { url: \"\", accounts: { mnemonic: \"\", path: \"m/44'/60'/0'/0\", initialIndex: 0, count: 1, passphrase: \"\", }, }, }, };","s":"Use an HD wallet","u":"/public-networks/how-to/develop/hardhat","h":"#use-an-hd-wallet","p":1578},{"i":1584,"t":"danger Ensure you do not commit private keys to source control like Github, always inject your keys at runtime as environment variables, or use a vault or similar. const provider = new ethers.JsonRpcApiProvider(); const wallet = new ethers.Wallet(); // connect the wallet to the provider const signer = wallet.connect(provider);","s":"Specify your private key in code","u":"/public-networks/how-to/develop/hardhat","h":"#specify-your-private-key-in-code","p":1578},{"i":1586,"t":"Start a Besu node with JSON-RPC enabled on the endpoint specified in the Hardhat configuration file.","s":"Start a Besu node","u":"/public-networks/how-to/develop/hardhat","h":"#start-a-besu-node","p":1578},{"i":1588,"t":"To deploy a contract onto the Besu network: npx hardhat scripts run ./scripts/deploy_my_contract.ts --network besuWallet","s":"Deploy a contract","u":"/public-networks/how-to/develop/hardhat","h":"#deploy-a-contract","p":1578},{"i":1590,"t":"Besu uses Log4j 2 for logging and provides two methods to configure logging behavior: Basic - Changes the log level. Advanced - Configures the output and format of the logs. Quorum Developer Quickstart provides an example implementation using Elastic Stack for log management.","s":"Use logging","u":"/public-networks/how-to/monitor/logging","h":"","p":1589},{"i":1592,"t":"Use the --logging command line option to specify logging verbosity. The --logging option changes the volume of events displayed in the log. Valid log levels are OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL. The default level is INFO. For most use cases, the basic method provides enough configurability. tip Use the admin_changeLogLevel API method to change the log level while Besu is running.","s":"Basic logging","u":"/public-networks/how-to/monitor/logging","h":"#basic-logging","p":1589},{"i":1594,"t":"You can provide your own logging configuration using the standard Log4j 2 configuration mechanisms. For example, the following Log4j 2 configuration is the same as the default configuration except for the exclusion of logging of stack traces for exceptions: debug.xml INFO To use your custom configuration, set the environment variable LOG4J_CONFIGURATION_FILE to the location of your configuration file. If you have more specific requirements, you can create your own Log4j 2 configuration. For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Besu. To set the debug logging and start Besu connected to the Holesky testnet: LOG4J_CONFIGURATION_FILE=./debug.xml besu --network=holesky","s":"Advanced logging","u":"/public-networks/how-to/monitor/logging","h":"#advanced-logging","p":1589},{"i":1596,"t":"You can log information about invalid transactions that have been removed from the transaction pool. Use the log marker INVALID_TX_REMOVED and the following fields to format the log line as required: txhash - The hash of the transaction. txlog - The human-readable log of the transaction. reason - The reason the transaction is invalid. txrlp - The RLP encoding of the transaction. For example, the following Log4j 2 configuration enables logging of invalid transactions: debug.xml INFO ","s":"Log invalid transactions","u":"/public-networks/how-to/monitor/logging","h":"#log-invalid-transactions","p":1589},{"i":1598,"t":"The Quorum Developer Quickstart logging configuration defines a log rotation to restrict the size of the log files.","s":"Log rotation","u":"/public-networks/how-to/monitor/logging","h":"#log-rotation","p":1589},{"i":1600,"t":"When running Besu on Ethereum Mainnet using snap sync, you might notice graphical patterns that stand out in different metrics charts. These patterns are related to the CPU usage and block time of the Besu sync process.","s":"Understand metrics","u":"/public-networks/how-to/monitor/understand-metrics","h":"","p":1599},{"i":1602,"t":"The following screenshot from monitoring Besu with Prometheus and Grafana shows patterns related to CPU usage. The CPU pattern is a \"staircase\" pattern, where each step represents one of the Besu running stages.","s":"CPU usage","u":"/public-networks/how-to/monitor/understand-metrics","h":"#cpu-usage","p":1599},{"i":1604,"t":"Step 1 highlights blocks import and world state download, two tasks executed in parallel in Besu. Besu manages these two tasks with two different pipelines. This step is CPU-bound.1 The two pipeline stages run on multiple threads. As displayed in the following screenshot (for a VM with 8 CPUs) the CPU load average is about 7.5 and sometimes exceeds 10 (a 100% load for the 8 CPUs is 8). This means there's more work to be done than what the CPUs can handle.","s":"1. Blocks import and world state download","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-blocks-import-and-world-state-download","p":1599},{"i":1606,"t":"Step 2, world state healing, starts just after the world state download in step 1 is complete. The peak in system CPU is related to the high rate of input and output (IO) required during this step. IO usage is around 61% during healing, and it's only 39% during the remaining sync.","s":"2. World state healing","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-world-state-healing","p":1599},{"i":1608,"t":"After steps 1 and 2, world state is downloaded and healed, and block import continues. The visible drop in CPU shows that Besu finished the world state nodes download. The block import step is long because Besu can't parallelize block import -- it must validate each parent block before importing a child. note The Besu team is currently working on other algorithm and implementations to make this block import faster.","s":"3. Blocks import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-blocks-import","p":1599},{"i":1610,"t":"In step 4, Besu executes all transactions of each block. This is when Besu updates the world state after the healing step. The quantity of imported blocks in this step depends on the speed of the sync. This number indicates the cumulated blocks quantity behind head since the last healing step. This step consumes less CPU than the previous steps because the sequential part -- executing transactions on the EVM -- must be single-threaded, reducing the concurrent work at the CPU level.","s":"4. Blocks full import","u":"/public-networks/how-to/monitor/understand-metrics","h":"#4-blocks-full-import","p":1599},{"i":1612,"t":"Once Besu is completely synced, it propagates blocks and executes the transactions inside each block. Step 5, block production and propagation, shows a reduction in CPU consumption due to the idle time while waiting for the new block and the sequential nature of executing transactions on the EVM.","s":"5. Blocks production and propagation","u":"/public-networks/how-to/monitor/understand-metrics","h":"#5-blocks-production-and-propagation","p":1599},{"i":1614,"t":"Block time measures the duration of getting new blocks in Besu. Block time is closely related to CPU usage. The following screenshot shows patterns related to block time as available in the Besu Grafana full dashboard. The block time pattern is also a \"staircase\" pattern.","s":"Block time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#block-time","p":1599},{"i":1616,"t":"Step 1, block import time, is the duration of importing a block. Import includes: Data retrieval over the network. Headers, body, and receipt validation. Persisting the block in the database. Block import takes between a few and tens of milliseconds.","s":"1. Block import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#1-block-import-time","p":1599},{"i":1618,"t":"Step 2, block full import time, is the duration of importing a block (step 1) and executing all its transactions. Block full import takes between 1 and 2 seconds per block, depending on the number and complexity of the transactions.","s":"2. Block full import time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#2-block-full-import-time","p":1599},{"i":1620,"t":"Step 3, block network time, is the duration of propagating a block over the network and executing all its transactions. Block network takes between 13 and 16 seconds. Footnotes​ A CPU-bound task means that the time required to execute the task is determined only by the CPU speed. ↩","s":"3. Block network time","u":"/public-networks/how-to/monitor/understand-metrics","h":"#3-block-network-time","p":1599},{"i":1622,"t":"A CPU-bound task means that the time required to execute the task is determined only by the CPU speed. ↩","s":"Footnotes","u":"/public-networks/how-to/monitor/understand-metrics","h":"#footnote-label","p":1599},{"i":1624,"t":"To enable the Prometheus monitoring and alerting service to access Besu metrics, use the --metrics-enabled option. Use Grafana to visualize the collected data. See the sample Besu Full Grafana dashboard. The Besu example networks have monitoring with Prometheus and Grafana configured. Use Prometheus to monitor the number of blocks your Besu node is behind the chain head, and to alert you that your node is not keeping up with the chain head. This recording shows examples of monitoring Besu.","s":"Use metrics to monitor node performance","u":"/public-networks/how-to/monitor/metrics","h":"","p":1623},{"i":1626,"t":"To use Prometheus with Besu, install the Prometheus main component. On MacOS, install with Homebrew: brew install prometheus tip You can also install: Exporters that send system metrics to Prometheus to monitor non-Besu-specific items such as disk and CPU usage. Other Prometheus components, such as the Alert Manager. Additional configuration is not required for these components because Prometheus handles and analyzes data directly from the feed.","s":"Install Prometheus","u":"/public-networks/how-to/monitor/metrics","h":"#install-prometheus","p":1623},{"i":1628,"t":"To configure Prometheus and run with Besu: Configure Prometheus to poll Besu. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file: Fragment to insert in prometheus.yml Full prometheus.yml example - job_name: besu scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9545 global: scrape_interval: 15s scrape_configs: - job_name: \"prometheus\" static_configs: - targets: [\"localhost:9090\"] - job_name: besu scrape_interval: 15s scrape_timeout: 10s metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9545 Prometheus requires 3 MB of space per node per hour for metrics, with a scrape_interval of 15 seconds. Start Besu with the --metrics-enabled option. To start a single node for testing with metrics enabled, run the following command: Syntax Example besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-enabled To specify the host and port on which Prometheus accesses Besu, use the --metrics-host and --metrics-port options. The default host and port are 127.0.0.1 (localhost) and 9545. danger To avoid DNS rebinding attacks, if running Prometheus on a different host than your Besu node (any host other than localhost), add the hostname that Prometheus uses to --host-allowlist. For example, if Prometheus is configured to get metrics from http://besu.local:8008/metrics, then besu.local must be in --host-allowlist. In another terminal, run Prometheus specifying the prometheus.yml file: prometheus --config.file=prometheus.yml View the Prometheus graphical interface. tip Use a log ingestion tool, such as Logstash, to parse the logs and alert you to configured anomalies.","s":"Set up and run Prometheus with Besu","u":"/public-networks/how-to/monitor/metrics","h":"#set-up-and-run-prometheus-with-besu","p":1623},{"i":1630,"t":"The --metrics-enabled option enables Prometheus polling of Besu, but sometimes metrics are hard to poll (for example, when running inside Docker containers with varying IP addresses). To enable Besu to push metrics to a Prometheus push gateway, use the --metrics-push-enabled option. To configure Prometheus and run with Besu pushing to a push gateway: Configure Prometheus to read from a push gateway. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file: - job_name: push-gateway metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9091 Start the push gateway. You can deploy the push gateway using the Docker image: docker pull prom/pushgateway docker run -d -p 9091:9091 prom/pushgateway Start Besu specifying the --metrics-push-enabled option and port of the push gateway: Syntax Example besu --network=dev --miner-enabled --miner-coinbase --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1 besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins=\"all\" --rpc-http-enabled --metrics-push-enabled --metrics-push-port=9091 --metrics-push-host=127.0.0.1 In another terminal, run Prometheus specifying the prometheus.yml file: prometheus --config.file=prometheus.yml View the Prometheus graphical interface.","s":"Run Prometheus with Besu in push mode","u":"/public-networks/how-to/monitor/metrics","h":"#run-prometheus-with-besu-in-push-mode","p":1623},{"i":1632,"t":"Open a Web browser to http://localhost:9090 to view the Prometheus graphical interface. Choose Graph from the menu bar and click the Console tab below. From the Insert metric at cursor drop-down, select a metric such as besu_blockchain_difficulty_total or ethereum_blockchain_height and click Execute. The values display. Click the Graph tab to view the data as a time-based graph. The query string displays below the graph. For example, {ethereum_blockchain_height{instance=\"localhost:9545\",job=\"prometheus\"}.","s":"View Prometheus graphical interface","u":"/public-networks/how-to/monitor/metrics","h":"#view-prometheus-graphical-interface","p":1623},{"i":1634,"t":"Run the following command to view the full list of available metrics: curl http://localhost:9545/metrics Update the host and port if you are not using the default values. Each metric, such as besu_blockchain_chain_head_gas_limit, starts with a metric category prefix. Metrics specific to Besu use the besu_ prefix, followed by another metric category. You can enable metric categories using the --metrics-category command line option.","s":"View the metrics list","u":"/public-networks/how-to/monitor/metrics","h":"#view-the-metrics-list","p":1623},{"i":1636,"t":"You can send signed transactions using the eth_sendRawTransaction JSON-RPC API method. Signed transactions can be simple value transfers, contract creation, or contract invocation. Set the maximum transaction fee for transactions using the --rpc-tx-feecap CLI option. To accept signed transactions from remote connections, set the API listening host to 0.0.0.0. Use client libraries to create and send a signed raw transaction to transfer Ether and create a smart contract. Private keys Don't use the accounts from the examples on Mainnet or any public network except for testing. The private keys are displayed which means the accounts are not secure. All accounts and private keys in the examples are from the dev.json genesis file in the /besu/config/src/main/resources directory. In production environments avoid exposing your private keys by creating signed transactions offline, or use Web3Signer to isolate your private keys and sign transactions with eth_sendTransaction. caution Setting the listening host to 0.0.0.0 exposes the API service connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet. tip Libraries such as web3j or ethereumj and tools such as MyCrypto can also create signed transactions.","s":"Create and send transactions","u":"/public-networks/how-to/send-transactions","h":"","p":1635},{"i":1638,"t":"You can interact with contracts using eth_call or eth_sendRawTransaction. The table below compares the characteristics of both calls. eth_call eth_sendRawTransaction Read-only Write Invokes contract function locally Broadcasts to the network Does not change state of blockchain Updates the blockchain (for example, transfers ether between accounts) Does not consume gas Requires gas Synchronous Asynchronous Returns the value of a contract function available immediately Returns transaction hash only. A block might not include all possible transactions (for example, if the gas price is too low).","s":"eth_call vs eth_sendRawTransaction","u":"/public-networks/how-to/send-transactions","h":"#eth_call-vs-eth_sendrawtransaction","p":1635},{"i":1640,"t":"Besu doesn't support key management inside the client. Use: Web3Signer with Besu to provide access to your key store and sign transactions. Third-party tools (for example, MetaMask and web3j) for creating accounts.","s":"Use wallets for key management","u":"/public-networks/how-to/send-transactions","h":"#use-wallets-for-key-management","p":1635},{"i":1642,"t":"The Besu EVM tool is a CLI program that executes arbitrary EVM programs and Ethereum State Tests outside the context of an operating node. Use the EVM tool for benchmarking and fuzz testing.","s":"Use the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"","p":1641},{"i":1644,"t":"The EVM tool is part of the standard Besu binary distribution.","s":"Get the EVM tool","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#get-the-evm-tool","p":1641},{"i":1646,"t":"To build from source, run the following from the root of the Besu repository: ./gradlew :ethereum:evmTool:installDist An extractable archive files is created in ethereum/evmtool/build/distributions and an executable installation in ethereum/evmtool/build/install/evmtool. Execute the EVM tool: ethereum/evmtool/build/install/evmtool/bin/evmtool ","s":"Build from source","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#build-from-source","p":1641},{"i":1648,"t":"To run the Besu EVM tool in a container: docker run -rm hyperledger/besu-evmtool:develop Because no data is stored in local directories we recommended using the -rm docker option. The -rm option deletes the container at the end of execution. If you use an option that requires input from standard in, use the -i docker option. The -i option pipes standard input to the EVM tool. If you need to reference files we recommend using a docker file binding, such as -v ${PWD}:/opt/data, which maps the current directory to the /opt/data directory in the container. note The latest tag is the latest released version of Besu. The develop tag is the current main branch code that will go into a future release version of Besu.","s":"Execute with Docker","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#execute-with-docker","p":1641},{"i":1650,"t":"The first mode of the EVM tool runs arbitrary EVM bytecode. Use command line options to specify the code and other contextual information. For example: evmtool --code=5B600080808060045AFA50600056 The EVM tool also has subcommands used for testing code bases. These subcommands are not meant for typical user interactions.","s":"EVM tool options","u":"/public-networks/how-to/troubleshoot/evm-tool","h":"#evm-tool-options","p":1641},{"i":1652,"t":"When upgrading your Besu node, we recommend: Using an orchestration method (for example, Ansible or Chef) to keep all nodes in sync with your desired configuration. Storing your configuration under version control.","s":"Upgrade your Besu node","u":"/public-networks/how-to/upgrade-node","h":"","p":1651},{"i":1654,"t":"You can use the Ansible role on Galaxy directly or customize it to suit your needs. Upgrade the Besu version on nodes by running the play with the new version. For more information, For more information, select Read Me on the Ansible Galaxy Besu page. The playbook: Stops Besu. Downloads the updated version. Applies any new configuration. Starts Besu.","s":"Ansible","u":"/public-networks/how-to/upgrade-node","h":"#ansible","p":1651},{"i":1656,"t":"Nodes store known peers in the peer table. The peer table is not persisted to disk. When a node restarts, the node connects to the specified bootnodes and discovers other nodes through the peer discovery process. The node continues collecting data from where it left off before the restart (assuming there was no data corruption in a failure scenario). Before the node restarted, connected peers saved the node details in their peer tables. These peers can reconnect to the restarted node. The restarted node uses these peers and the bootnodes, to discover more peers. To ensure that the restarted node successfully rejoins the network, ensure you specify at least one operational bootnode.","s":"Find peers on restarting","u":"/public-networks/how-to/upgrade-node","h":"#find-peers-on-restarting","p":1651},{"i":1658,"t":"Your hardware, machine environment, and node configuration can affect your node's ability to serve requests and perform validator duties, including attestation performance. If you notice high resource usage when monitoring your node, you can try the following suggestions: Disable swapping. Besu is an I/O intensive application, especially during sync, enabling swapping hurts Besu's performance. You can disable swap at the OS level. This article provides information on how to disable swap (and caveats). Use a high performance SSD disk with NVMe, since Besu's performance bottleneck is often slow disk I/O. Configure memory and RAM: If you have RAM constraints, use OpenJ9 if you're running on x86_64 Linux architecture to reduce memory usage. Review and change your Java heap size if necessary. 5GB is an appropriate limit. Higher values may improve sync time, but can be reduced after completing sync. Ensure Besu is using jemalloc. If you have 32GB RAM or more, set the Xplugin-rocksdb-high-spec-enabled configuration option to true. Don't use this on RAM machines with 16GB RAM or less if you're running a consensus client on the same hardware. If you're running on ARM64, make sure the glibc version is greater than 2.29. If not, Besu uses a Java implementation instead of the native one for some precompiled contracts, which results in lower performance. On Ubuntu, run ldd --version. See the methods for other environments. Pay attention to what processes are running on the same machine/VM as Besu. Java applications, with default settings, are designed to run alone on the machine. You can run your consensus client on the same machine, but this adds overhead on Besu, and vice versa (on CPU cache misses, CPU scheduler latency, IO, etc.). You should continue to monitor your node after following these suggestions.","s":"Troubleshoot poor performance and resource constraints","u":"/public-networks/how-to/troubleshoot/performance","h":"","p":1657},{"i":1660,"t":"To get detailed information about transaction processing, use the TRACE API. Enable the TRACE API using the --rpc-http-api or --rpc-ws-api command line options. The TRACE API has two sets of trace calls, ad-hoc tracing APIs and transaction-trace filtering APIs.","s":"Trace transactions","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"","p":1659},{"i":1662,"t":"These APIs allow you to use the trace, vmTrace, or stateDiff diagnostic options when tracing calls or transactions. When using Bonsai Tries with the ad-hoc tracing APIs, the requested block or transaction must be within the number of blocks retained (by default, 512 from the head of the chain). The ad-hoc tracing APIs are: trace_call trace_callMany trace_rawTransaction trace_replayBlockTransactions","s":"Ad-hoc tracing APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#ad-hoc-tracing-apis","p":1659},{"i":1664,"t":"These APIs allow you to filter and search by specific information such as the block, address, or transaction. These APIs only use the trace type. To use the transaction-trace filtering APIs, your node must be an archive node, or the requested block or transaction must be within the number of blocks retained when using Bonsai Tries (by default, 512 from the head of the chain). The transaction-trace filtering APIs are: trace_block trace_filter trace_get trace_transaction","s":"Transaction-trace filtering APIs","u":"/public-networks/how-to/troubleshoot/trace-transactions","h":"#transaction-trace-filtering-apis","p":1659},{"i":1666,"t":"Access the Besu API using: JSON-RPC over HTTP, WebSocket, or IPC RPC Pub/Sub over WebSockets GraphQL over HTTP. note HTTP and WebSocket responses are compact JSON by default. You can use --json-pretty-print-enabled to pretty-print the output. The following sections provide information about JSON-RPC, RPC Pub/Sub, and GraphQL.","s":"Access the Besu API","u":"/public-networks/how-to/use-besu-api","h":"","p":1665},{"i":1668,"t":"To enable API access, use the --rpc-http-enabled, --ws-http-enabled, --graphql-http-enabled, and --Xrpc-ipc-enabled options. caution --Xrpc-ipc-enabled is an early access option.","s":"Enable API access","u":"/public-networks/how-to/use-besu-api","h":"#enable-api-access","p":1665},{"i":1670,"t":"To specify the host the API service listens on, use the --rpc-http-host, --rpc-ws-host, and --graphql-http-host options. The default host is 127.0.0.1. To allow remote connections, set the host to 0.0.0.0. caution Setting the host to 0.0.0.0 exposes the API service connection on your node to any remote connection. In a production environment, ensure you use a firewall to avoid exposing your node to the internet.","s":"Service hosts","u":"/public-networks/how-to/use-besu-api","h":"#service-hosts","p":1665},{"i":1672,"t":"To specify the port the API service listens on, use the --rpc-http-port, --rpc-ws-port, and --graphql-http-port options. The default ports are: 8545 for JSON-RPC over HTTP. 8546 for JSON-RPC over WebSocket. 8547 for GraphQL over HTTP. Ports must be exposed appropriately.","s":"Service ports","u":"/public-networks/how-to/use-besu-api","h":"#service-ports","p":1665},{"i":1674,"t":"To specify the socket path for the IPC socket, use the --Xrpc-ipc-path option. The default path is besu.ipc in the Besu data directory. caution --Xrpc-ipc-path is an early access option.","s":"Socket path","u":"/public-networks/how-to/use-besu-api","h":"#socket-path","p":1665},{"i":1676,"t":"To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the --host-allowlist option matches the request host headers. By default, Besu accepts requests and connections from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the API, we recommend using the Besu authentication mechanism with username and password authentication or JWT public key authentication. If your application publishes RPC ports, specify the hostnames when starting Besu. besu --host-allowlist=example.com Specify * for --host-allowlist to effectively disable host protection. caution Specifying * for --host-allowlist is not recommended for production code.","s":"Host allowlist","u":"/public-networks/how-to/use-besu-api","h":"#host-allowlist","p":1665},{"i":1679,"t":"Account management relies on private key management in the client, which is not supported by Besu. To send signed transactions, use eth_sendRawTransaction. eth_sendTransaction is not implemented. For account management, use third-party wallets.","s":"Account management","u":"/public-networks/how-to/use-besu-api","h":"#account-management","p":1665},{"i":1681,"t":"Besu does not support the Whisper and Swarm protocols.","s":"Protocols","u":"/public-networks/how-to/use-besu-api","h":"#protocols","p":1665},{"i":1683,"t":"Subscribe to events, such as logs, using either RPC Pub/Sub over WebSockets or filters over HTTP. Access logs using the following Besu API methods: eth_getFilterChanges eth_getFilterLogs eth_getLogs. Use eth_newFilter to create the filter before using eth_getFilterChanges and eth_getFilterLogs). Access logs for private contracts using the equivalent priv_* methods and specifying the privacy group ID. For example, priv_getLogs. note The following examples use the sample contract included in events and logs.","s":"Access logs using the Besu API","u":"/public-networks/how-to/use-besu-api/access-logs","h":"","p":1682},{"i":1685,"t":"Create a filter using eth_newFilter. If the example contract was deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b, the following request for eth_newFilter creates a filter to log when valueIndexed is set to 5: { \"jsonrpc\": \"2.0\", \"method\": \"eth_newFilter\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [\"0x0000000000000000000000000000000000000000000000000000000000000005\"] ] } ], \"id\": 1 } eth_newFilter returns a filter ID hash (for example, 0x1ddf0c00989044e9b41cc0ae40272df3).","s":"Create a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#create-a-filter","p":1682},{"i":1687,"t":"To poll the filter for changes since the last poll, use eth_getFilterChanges with the filter ID hash returned by eth_newFilter. If the contract had been executed twice since the last poll, with valueIndexed set to 1 and 5, eth_getFilterChanges returns only the log where the topic for valueIndexed is 5: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x21c\", \"blockHash\": \"0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132\", \"transactionHash\": \"0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } ] }","s":"Poll a filter for changes","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#poll-a-filter-for-changes","p":1682},{"i":1689,"t":"To get all logs for a filter, use eth_getFilterLogs. If the contract had been executed twice with valueIndexed set to 5 since the filter was created using eth_newFilter, eth_getFilterLogs returns: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x1a7\", \"blockHash\": \"0x4edda22a242ddc7bc51e2b6b11e63cd67be1af7389470cdea9c869768ff75d42\", \"transactionHash\": \"0x9535bf8830a72ca7d0020df0b547adc4d0ecc4321b7d5b5d6beb1eccee5c0afa\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x21c\", \"blockHash\": \"0xc7e6c9d5b9f522b2c9d2991546be0a8737e587beb6628c056f3c327a44b45132\", \"transactionHash\": \"0xfd1a40f9fbf89c97b4545ec9db774c85e51dd8a3545f969418a22f9cb79417c5\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } ] } tip You can use eth_getLogs with a filter options object to get all logs matching the filter options instead of using eth_newFilter followed by eth_getFilterLogs.","s":"Get all logs for a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-all-logs-for-a-filter","p":1682},{"i":1691,"t":"When a filter is no longer required, use eth_uninstallFilter to remove the filter.","s":"Uninstall a filter","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#uninstall-a-filter","p":1682},{"i":1693,"t":"Filters for private contracts are created, accessed, and uninstalled using: priv_getFilterChanges priv_getFilterLogs priv_getLogs priv_newFilter priv_uninstallFilter. The privacy group ID must be specified as parameter 0 for the priv methods. { \"jsonrpc\": \"2.0\", \"method\": \"priv_newFilter\", \"params\": [ \"4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=\", { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"addresses\": [\"0x991cc548c154b2953cc48c02f782e1314097dfbb\"], \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\" ] } ], \"id\": 1 }","s":"Filters for private contracts","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#filters-for-private-contracts","p":1682},{"i":1695,"t":"To get all logs for a filter options object, use eth_getLogs or priv_getLogs for a private contract. The following request for eth_getLogs returns all the logs where the example contract has been deployed to 0x42699a7612a82f1d9c36148af9c77354759b210b and executed with valueIndexed set to 5. { \"jsonrpc\": \"2.0\", \"method\": \"eth_getLogs\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"topics\": [ [\"0xd3610b1c54575b7f4f0dc03d210b8ac55624ae007679b7a928a4f25a709331a8\"], [\"0x0000000000000000000000000000000000000000000000000000000000000005\"] ] } ], \"id\": 1 } The above example returns the same result as calling eth_newFilter followed by eth_getFilterLogs.","s":"Get logs using a filter options object","u":"/public-networks/how-to/use-besu-api/access-logs","h":"#get-logs-using-a-filter-options-object","p":1682},{"i":1697,"t":"Authentication identifies a user, and authorization verifies user access to requested JSON-RPC methods. Besu verifies users using JSON Web Tokens (JWT). JWT is also used in multi-tenancy to verify tenant data access. Besu supports two mutually exclusive authentication methods: Username and password JWT public key. Besu creates JWT internally with username and password authentication, and externally with JWT public key authentication. info Using JSON-RPC authentication and authorization with MetaMask is not supported. caution To prevent interception of authentication credentials and authenticated tokens, make authenticated requests over HTTPS. We recommend running production deployments behind a network layer that provides SSL termination. Besu does not provide a HTTPS connection natively.","s":"Authenticate and authorize JSON-RPC","u":"/public-networks/how-to/use-besu-api/authenticate","h":"","p":1696},{"i":1699,"t":"Enable authentication from the command line. Supply the credentials file and send a request to the /login endpoint using the username and password. The /login endpoint creates a JWT for making permitted JSON-RPC requests. Using public key authentication disables the /login endpoint.","s":"Username and password authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#username-and-password-authentication","p":1696},{"i":1701,"t":"The toml credentials file defines user details and the JSON-RPC methods they can access. auth.toml [Users.username1] password = \"$2a$10$l3GA7K8g6rJ/Yv.YFSygCuI9byngpEzxgWS9qEg5emYDZomQW7fGC\" permissions=[\"net:*\",\"eth:blockNumber\"] privacyPublicKey=\"U7ANiOOd5L9Z/dMxRFjdbhA1Qragw6fLuYgmgCvLoX4=\" [Users.username2] password = \"$2b$10$6sHt1J0MVUGIoNKvJiK33uaZzUwNmMmJlaVLkIwinkPiS1UBnAnF2\" permissions=[\"net:version\",\"admin:*\"] privacyPublicKey=\"quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE=\" Each user requiring JSON-RPC access the configuration file lists the: Username. Users. is mandatory and followed by the username. That is, replace in [Users.] with the username. Hash of the user password. Use the password hash subcommand to generate the hash. JSON-RPC permissions. Optional. The tenant's Tessera public key using privacyPublicKey. Only used for multi-tenancy. Command Hash output besu password hash --password=MyPassword $2a$10$L3Xb5G/AJOsEK5SuOn9uzOhpCCfuVWTajc5hwWerY6N5xBM/xlrMK","s":"1. Create the credentials file","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-create-the-credentials-file","p":1696},{"i":1703,"t":"Enable authentication for the JSON-RPC API using the --rpc-http-authentication-enabled or --rpc-ws-authentication-enabled option. Specify the credentials file using the --rpc-http-authentication-credentials-file or --rpc-ws-authentication-credentials-file option. note With authentication enabled, you can specify methods that don't require authentication using --rpc-http-api-methods-no-auth or --rpc-ws-api-methods-no-auth.","s":"2. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-enable-authentication","p":1696},{"i":1705,"t":"To generate an authentication token, make a request to the /login endpoint with your username and password. Specify the HTTP port or the WS port to generate a token to authenticate over HTTP or WS respectively. HTTP and WS requires a different token. Generate a token for HTTP Example for HTTP Generate a token for WS Example for WS JSON result curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' /login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' http://localhost:8545/login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' /login curl -X POST --data '{\"username\":\"username1\",\"password\":\"MyPassword\"}' http://localhost:8546/login { \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MDYwNCwiZXhwIjoxNTUwNDYwOTA0fQ.l2Ycqzl_AyvReXBeUSayOlOMS_E8-DCuz3q0Db0DKD7mqyl6q-giWoEtfdWzUEvZbRRi2_ecKO3N6JkXq7zMKQAJbVAEzobfbaaXWcQEpHOjtnK4_Yz-UPyKiXtu7HGdcdl5Tfx3dKoksbqkBl3U3vFWxzmFnuu3dAISfVJYUNA\" } Authentication tokens expire five minutes after generation. If you require access after the token expires, you need to generate a new token.","s":"3. Generate an authentication token","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-generate-an-authentication-token","p":1696},{"i":1707,"t":"Enable authentication from the command line and supply the external JWT provider's public key. caution JWT public authentication disables the Besu /login endpoint, meaning username and password authentication will not work.","s":"JWT public key authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#jwt-public-key-authentication","p":1696},{"i":1709,"t":"The private and accompanying public key files must be in .pem format. The key algorithm can be: RSA with private key length of at least 2048 bits using algorithm RS256, RS384, or RS512. ECDSA private key, using ES256 (secp256r1 or secp256k1), ES384, or ES512. The default value for Besu is RS256. When you use a different key algorithm, you must specify the --rcp-http-authentication-jwt-algorithm option and/or the --rcp-ws-authentication-jwt-algorithm option depending on your needs. RS256 RSA Keys ES256 secp256r1 ECDSA Keys Generate the private key: openssl genrsa -out privateRSAKey.pem 2048 Generate the public key: openssl rsa -pubout -in privateRSAKey.pem -pubout -out publicRSAKey.pem Generate the private key: openssl ecparam -name secp256r1 -genkey -out privateECDSAKey.pem Generate the public key: openssl ec -in privateECDSAKey.pem -pubout -out publicECDSAKey.pem Private key security The private key must be kept secret. Never share private keys publicly or on a Web site, even if advertised as secure. Always keep your private keys safe -- ideally using hardware or vault -- and define a strong security policy and best practices. Compromised keys can provide attackers access to your node's RPC-API.","s":"1. Generate a private and public key pair","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#1-generate-a-private-and-public-key-pair","p":1696},{"i":1711,"t":"Create the JWT using a trusted authentication provider1 or library in your own code. See Java code sample to generate JWT using Vertx for an example implementation. Important The JWT must use one of the RS256, RS384, RS512, ES256, ES384, or ES512 algorithms. Each payload for the JWT must contain: JSON-RPC permissions exp (Expiration Time) claim Optionally, the tenant's Tessera public key using privacyPublicKey. Only used for multi-tenancy. Example JSON Payload Example JWT result { \"permissions\": [\"*:*\"], \"privacyPublicKey\": \"2UKH3VJThkOoKskrLFpwoxCnnRARyobV1bEdgseFHTs=\", \"exp\": 1600899999002 }","s":"2. Create the JWT","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#2-create-the-jwt","p":1696},{"i":1713,"t":"Enable authentication for the JSON-RPC API using the --rpc-http-authentication-enabled or --rpc-ws-authentication-enabled option. Specify the JWT provider's public key file to use with the externally created JWT, using the --rpc-http-authentication-jwt-public-key-file or --rpc-ws-authentication-jwt-public-key-file option. note With authentication enabled, you can specify methods that don't require authentication using --rpc-http-api-methods-no-auth or --rpc-ws-api-methods-no-auth.","s":"3. Enable authentication","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#3-enable-authentication","p":1696},{"i":1715,"t":"Each user has a list of permissions strings defining the methods they can access. To give access to: All API methods, specify [\"*:*\"]. All API methods in an API group, specify [\":*\"]. For example, [\"eth:*\"]. Specific API methods, specify [\":\"]. For example, [\"admin:peers\"]. With authentication enabled, to explicitly specify a user cannot access any methods, include the user with an empty permissions list ([]). Users with an empty permissions list and users not included in the credentials file cannot access any JSON-RPC methods.","s":"JSON-RPC permissions","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#json-rpc-permissions","p":1696},{"i":1717,"t":"Specify the authentication token as a Bearer token in the JSON-RPC request header.","s":"Use an authentication token to make requests","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#use-an-authentication-token-to-make-requests","p":1696},{"i":1719,"t":"In the Authorization tab in the TYPE drop-down list, select Bearer Token and specify the token (generated either externally or by the login request).","s":"Postman","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#postman","p":1696},{"i":1721,"t":"Specify the Bearer in the header. cURL Request with authentication placeholders cURL Request with authentication curl -X POST -H 'Authorization: Bearer ' -d '{\"jsonrpc\":\"2.0\",\"method\":\"\",\"params\":[],\"id\":1}' curl -X POST -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6WyIqOioiXSwidXNlcm5hbWUiOiJ1c2VyMiIsImlhdCI6MTU1MDQ2MTQxNiwiZXhwIjoxNTUwNDYxNzE2fQ.WQ1mqpqzRLHaoL8gOSEZPvnRs_qf6j__7A3Sg8vf9RKvWdNTww_vRJF1gjcVy-FFh96AchVnQyXVx0aNUz9O0txt8VN3jqABVWbGMfSk2T_CFdSw5aDjuriCsves9BQpP70Vhj-tseaudg-XU5hCokX0tChbAqd9fB2138zYm5M' -d '{\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":1}' http://localhost:8545 Footnotes​ for example Auth0 or Keycloak ↩","s":"cURL","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#curl","p":1696},{"i":1723,"t":"for example Auth0 or Keycloak ↩","s":"Footnotes","u":"/public-networks/how-to/use-besu-api/authenticate","h":"#footnote-label","p":1696},{"i":1725,"t":"Many factors can affect the ability of your node to find and maintain peers. Your network router, machine environment, and node configuration are all important. If you have peering issues, start by configuring your ports and managing peers.","s":"Troubleshoot peering","u":"/public-networks/how-to/troubleshoot/peering","h":"","p":1724},{"i":1728,"t":"One or more of the following may be the cause: Your hardware doesn't have enough CPU, disk IOPS, or bandwidth to handle all the peers. Your ports aren't open in your firewall and/or router. Your node is sending large numbers of DNS requests. See issue #4375. You're using checkpoint sync, which doesn't download all historical block data, so your peers may disconnect you when fetching those blocks. Your node is experiencing the normal behavior of peers connecting and disconnecting. This is especially normal soon after you start your node. You can try the following to find more peers: Set p2p-host to your external IP address to allow inbound connections. Restart Besu. This can take a while to build up again. Set -Xdns-enabled to true (only for private networks). Delete the node key (which is autogenerated in your data directory). There are two reasons that this might help find more peers: Your node (identified by the address associated with this key) has been put onto other peers' bad peer lists for some reason. Peer discovery is influenced by the value of the node key. This is related to the node \"distance\" in the discovery algorithm. You can read the Prysm EL and CL peering documentation for more information.","s":"\"Why can’t I find enough peers to sync?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#why-cant-i-find-enough-peers-to-sync","p":1724},{"i":1730,"t":"Check the following settings: Your machine and router's specified DNS should support TCP. You can check your DNS online for TCP support. Google and Cloudflare, 8.8.8.8 and 1.1.1.1, support TCP over port 853. Other DNS might as well. The appropriate ports should be open on your router, or your router should have UPNP enabled. See the next FAQ for more information on router settings. If you use Docker or virtualization, the container should be able to create outbound connections on the host machine.","s":"\"What network or router/modem settings should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#what-network-or-routermodem-settings-should-i-check","p":1724},{"i":1732,"t":"Check that the enode URLs specified for bootnodes or static nodes match the enode URLs displayed when starting the remote nodes.","s":"\"Which URLs should I check?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#which-urls-should-i-check","p":1724},{"i":1734,"t":"If you’re behind NAT, you probably need to set up port forwarding in your router. You might also need to configure your firewall. Forward and open 30303 (if using the default p2p port) for both UDP and TCP. If your router supports UPNP, you can set --nat-method to UPNPP2PONLY.","s":"\"How do I open/forward my ports?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-openforward-my-ports","p":1724},{"i":1736,"t":"You can use this open port checker.","s":"\"How do I test that my ports are open?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#how-do-i-test-that-my-ports-are-open","p":1724},{"i":1738,"t":"The default maximum is 25. Increasing the number of peers increases the bandwidth, CPU, and disk access Besu uses to respond to peers. Hardware with low specifications might result in low peer numbers. You'll experience diminishing returns with a larger number of peers (>100).","s":"\"What's the ideal number of peers for Besu?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-ideal-number-of-peers-for-besu","p":1724},{"i":1740,"t":"Increasing the number of max peers won't speed up Besu syncing, because the bottleneck during sync is disk IO and CPU. Note that Besu's peers are only used for the initial sync and transaction gossip, neither of which affects attestation performance. The beacon node connectivity controls how quickly you receive blocks and how attestations are published. Increasing Besu's peer count increases the load on your node, which may hurt attestations.","s":"\"What's the benefit of increasing the number of peers?\"","u":"/public-networks/how-to/troubleshoot/peering","h":"#whats-the-benefit-of-increasing-the-number-of-peers","p":1724},{"i":1742,"t":"Capture metrics to gain insights into peering behavior over time. To enable Prometheus to access Besu, open the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. Specify the ports for Prometheus and Prometheus push gateway using the --metrics-port and --metrics-push-port options. The defaults are 9545 and 9001.","s":"Metrics","u":"/public-networks/how-to/troubleshoot/peering","h":"#metrics","p":1724},{"i":1744,"t":"GraphQL can reduce the overhead needed for common queries. For example, instead of querying each receipt in a block, GraphQL can get the same result with a single query for the entire block. The Besu GraphQL schema describes the GraphQL implementation for Ethereum. Enable the GraphQL service using command line options. note GraphQL is not supported over WebSocket. Access the GraphQL endpoint at http://:/graphql. Configure and using graphql-http-host and graphql-http-port. The default endpoint is http://127.0.0.1:8547/graphql.","s":"Use GraphQL over HTTP","u":"/public-networks/how-to/use-besu-api/graphql","h":"","p":1743},{"i":1746,"t":"Besu JSON-RPC API methods with an equivalent GraphQL query include a GraphQL request and result in the method example. For example, the following request returns the block number: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{number}}\"}' http://localhost:8547/graphql { \"data\" : { \"block\" : { \"number\" : \"0x281\" } } } The following request returns the gas price: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{gasPrice}\"}' http://localhost:8547/graphql { \"data\" : { \"gasPrice\" : \"0x0\" } } The following syncing request returns data about the synchronization status: Request Response curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{syncing{startingBlock currentBlock highestBlock}}\"}' http://localhost:8547/graphql { \"data\" : { \"syncing\" : { \"startingBlock\" : 665, \"currentBlock\" : 3190, \"highestBlock\" : 26395 } } } note In some cases, for example, when your node is fully synced, the syncing request returns a null response: { \"data\" : { \"syncing\" : null } }","s":"GraphQL requests with cURL","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-curl","p":1743},{"i":1748,"t":"The third-party tool, GraphiQL, provides a tabbed interface for editing and testing GraphQL queries and mutations. GraphiQL also provides access to the Besu GraphQL schema from within the app.","s":"GraphQL requests with GraphiQL app","u":"/public-networks/how-to/use-besu-api/graphql","h":"#graphql-requests-with-graphiql-app","p":1743},{"i":1750,"t":"transactionCount and transactions supports the Pending query. info Besu does not execute pending transactions so results from account, call, and estimateGas for Pending do not reflect pending transactions. Pending transactions Result curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{pending {transactionCount}}\"}' http://localhost:8547/graphql { \"data\": { \"pending\": { \"transactionCount\": 2 } } } Pending transactions Result curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{pending {transactions{hash}}}\"}' http://localhost:8547/graphql { \"data\": { \"pending\": { \"transactions\": [ { \"hash\": \"0xbb3ab8e2113a4afdde9753782cb0680408c0d5b982572dda117a4c72fafbf3fa\" }, { \"hash\": \"0xf6bd6b1bccf765024bd482a71c6855428e2903895982090ab5dbb0feda717af6\" } ] } } }","s":"Pending","u":"/public-networks/how-to/use-besu-api/graphql","h":"#pending","p":1743},{"i":1752,"t":"JSON-RPC APIs allow you to interact with your node. JSON-RPC endpoints are not enabled by default. caution You should secure access to your node's JSON-RPC endpoints. Users with access to your node via JSON-RPC can make calls directly to your node, causing your node to consume resources. To enable JSON-RPC over HTTP or WebSocket, use the --rpc-http-enabled and --rpc-ws-enabled options. To enable JSON-RPC over an IPC socket, use the --Xrpc-ipc-enabled option. caution --Xrpc-ipc-enabled is an early access option. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Use JSON-RPC over HTTP, WebSocket, and IPC","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"","p":1751},{"i":1754,"t":"The geth console is a REPL (Read, Evaluate, & Print Loop) JavaScript console. Use JSON-RPC APIs supported by geth and Besu directly in the console. To use the geth console with Besu: Start Besu with the --rpc-http-enabled or --Xrpc-ipc-enabled option. Specify which APIs to enable using the --rpc-http-api or --Xrpc-ipc-api option. Start the geth console specifying the JSON-RPC endpoint: HTTP endpoint IPC endpoint geth attach http://localhost:8545 geth attach /path/to/besu.ipc Use the geth console to call JSON-RPC API methods that geth and Besu share. eth.syncing","s":"Geth console","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#geth-console","p":1751},{"i":1756,"t":"Besu disables Authentication by default.","s":"JSON-RPC authentication","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#json-rpc-authentication","p":1751},{"i":1759,"t":"To make RPC requests over HTTP, you can use curl. Syntax curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"\",\"params\":[]}' curl -X POST --data '{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}' http://127.0.0.1:8555 { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x60e\" } You can use curl to make multiple RPC requests (batch requests) over HTTP at the same time. Send the requests as an array, and receive an array of responses. The default number of allowed requests in a RPC batch request is 1024. Use the --rpc-http-max-batch-size command line option to update the default value. curl HTTP request JSON result curl -X POST --data '[{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}, {\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"admin_peers\",\"params\":[]}]' http://127.0.0.1:8555 [ { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x60e\" }, { \"jsonrpc\": \"2.0\", \"id\": \"2\", \"result\": [] } ]","s":"HTTP","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#http","p":1751},{"i":1761,"t":"To make RPC requests over WebSocket, you can use wscat, a Node.js based command-line tool. First connect to the WebSocket server using wscat (you only need to connect once per session): wscat -c ws:// After you establish a connection, the terminal displays a '>' prompt. Send individual requests as a JSON data package at each prompt. Syntax wscat WS request JSON result {\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"\",\"params\":[]} {\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]} { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x23\" } You can use wscat to make multiple RPC requests over WebSocket at the same time. Send the requests as an array, and receive an array of responses. wscat WS request JSON result [{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"eth_blockNumber\",\"params\":[]}, {\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"admin_peers\",\"params\":[]}] [ { \"jsonrpc\": \"2.0\", \"id\": \"1\", \"result\": \"0x23\" }, { \"jsonrpc\": \"2.0\", \"id\": \"2\", \"result\": [] } ] note wscat does not support headers. Authentication requires you to pass an authentication token in the request header. To use authentication with WebSocket, you need an app that supports headers.","s":"WebSocket","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#websocket","p":1751},{"i":1763,"t":"Besu provides readiness and liveness endpoints to confirm the Besu node status. Both return a 200 OK status when ready or live and a 503 Service Unavailable status if not ready or live.","s":"Readiness and liveness endpoints","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness-and-liveness-endpoints","p":1751},{"i":1765,"t":"By default, the readiness check requires a connected peer and the node to be within two blocks of the best known block. If you have disabled P2P communication, you do not need peers. A live node with P2P disabled is always ready. Use the query parameters minPeers and maxBlocksBehind to adjust the number of peers required and the number of blocks tolerance. Readiness endpoint curl request example Query parameters example http:///readiness curl -v 'http://localhost:8545/readiness' curl -v 'http://localhost:8545/readiness?minPeers=0&maxBlocksBehind=10'","s":"Readiness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#readiness","p":1751},{"i":1767,"t":"The liveness check requires the JSON-RPC server to be up. You can use the endpoint to verify that the node can respond to RPC calls. The status in the response will always be UP. Liveness endpoint curl request example http:///liveness curl -v 'http://localhost:8545/liveness'","s":"Liveness","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#liveness","p":1751},{"i":1769,"t":"Besu enables the ETH, NET, and WEB3 API methods by default. To enable the ADMIN, CLIQUE, DEBUG, EEA, IBFT, MINER, PERM, PLUGINS, PRIV, TRACE, and TXPOOL API methods, use the --rpc-http-api, --rpc-ws-api, or --Xrpc-ipc-api options. caution --Xrpc-ipc-api is an early access option.","s":"API methods enabled by default","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#api-methods-enabled-by-default","p":1751},{"i":1771,"t":"When you make requests that might have different results depending on the block accessed, the block parameter specifies the block. Methods such as eth_getTransactionByBlockNumberAndIndex have a block parameter. The block parameter can have one of the following values: blockNumber : quantity - The block number, specified in hexadecimal or decimal. 0 represents the genesis block. blockHash : string or object - 32-byte block hash or JSON object specifying the block hash. If using a JSON object, you can specify requireCanonical to indicate whether the block must be a canonical block. See this example. note Only the following methods support the blockHash parameter: eth_call eth_getBalance eth_getCode eth_getProof eth_getStorageAt eth_getTransactionCount earliest : tag - The earliest (genesis) block. latest : tag - The last block mined. pending : tag - When used with eth_getTransactionCount, refers to the last block mined plus pending transactions. When used with qbft_getValidatorsByBlockNumber, returns a list of validators that will be used to produce the next block. finalized : tag - The most recent crypto-economically secure block. It cannot be reorganized outside manual intervention driven by community coordination. safe : tag - The most recent block that is safe from reorganization under honest majority and certain synchronicity assumptions.","s":"Block parameter","u":"/public-networks/how-to/use-besu-api/json-rpc","h":"#block-parameter","p":1751},{"i":1773,"t":"Besu supports CPU and GPU mining, which are configured using command line options. GPU mining tests used Ethminer with the stratum+tcp and getwork schemes. Ethminer has been used with Besu to mine blocks on the Ropsten testnet, ETC Mainnet (uncle block only) and Mordor ETC testnet. note Some mining software supports the getwork scheme as the http scheme. The Ropsten testnet is now deprecated. It transitioned to proof of stake consensus before deprecation.","s":"Configure mining","u":"/public-networks/how-to/use-pow/mining","h":"","p":1772},{"i":1775,"t":"To enable CPU mining, start Besu with the following options: besu --rpc-http-api=ETH,MINER --miner-enabled --miner-coinbase= Where is the account you pay mining rewards to. For example, fe3b557e8fb62b89f4916b721be55ceb828dbd73. Start and stop mining using the miner_start and miner_stop APIs.","s":"Configure CPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-cpu-mining","p":1772},{"i":1777,"t":"Besu supports GPU mining, tested using Ethminer with the stratum+tcp scheme. To enable GPU mining, start Besu with the following options: besu --rpc-http-api=ETH,MINER --miner-enabled --miner-stratum-enabled --miner-coinbase= Where is the account you pay mining rewards to. For example, fe3b557e8fb62b89f4916b721be55ceb828dbd73. Optional command line options are: --miner-stratum-host to specify the host of the mining service. --miner-stratum-port to specify the port of the mining service. note Besu also supports the getwork scheme. Use the --miner-stratum-enabled option and enable the ETH RPCs. The getwork scheme is supported as the http scheme in certain mining software. Start and stop mining using the miner_start and miner_stop APIs.","s":"Configure GPU mining","u":"/public-networks/how-to/use-pow/mining","h":"#configure-gpu-mining","p":1772},{"i":1779,"t":"The JSON-RPC API methods for mining are: miner_start to start mining. miner_stop to stop mining. eth_mining to determine whether the client is actively mining new blocks. eth_getMinerDataByBlockHash and eth_getMinerDataByBlockNumber to get the miner data for a specified block. eth_hashrate to get the number of hashes per second with which the node is mining. Not supported for GPU mining. eth_getWork to get the hash of the current block, the seed hash, and the target boundary condition. Only used when using the getwork scheme. eth_submitWork to submit the PoW solution. Only used when using the getwork scheme.","s":"Mining APIs","u":"/public-networks/how-to/use-pow/mining","h":"#mining-apis","p":1772},{"i":1782,"t":"On mining nodes, log messages indicate block creation. 2019-05-08 20:28:27.026+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=660, Round=0}, hash=0x759afaba4e923d89175d850ceca4b8ef81f7d9c727b0b0b8e714b624a4b8e8cc 2019-05-08 20:28:29.020+10:00 | pool-10-thread-1 | INFO | IbftRound | Importing block to chain. round=ConsensusRoundIdentifier{Sequence=661, Round=0}, hash=0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14 On non-mining nodes, log messages indicate importing blocks. 2019-05-08 20:28:29.026+10:00 | EthScheduler-Workers-1 | INFO | BlockPropagationManager | Imported #661 / 0 tx / 0 om / 0 (0.0%) gas / (0x5443e504256765f06b3cebfbee82276a034ebcc8d685b7c3d1a6010fd4acfa14) in 0.000s. 2019-05-08 20:28:31.031+10:00 | EthScheduler-Workers-0 | INFO | BlockPropagationManager | Imported #662 / 0 tx / 0 om / 0 (0.0%) gas / (0x0ead4e20123d3f1433d8dec894fcce386da4049819b24b309963ce7a8a0fcf03) in 0.000s. To confirm the block number is increasing, use the eth_blockNumber JSON-RPC API method. If there's no block creation in Clique or IBFT 2.0 networks, ensure the validator addresses in the genesis file match running nodes.","s":"Check block creation","u":"/public-networks/how-to/use-pow/mining","h":"#check-block-creation","p":1772},{"i":1784,"t":"If you add a transaction to the transaction pool and the transaction hash returns, but the transaction is never mined, check the --min-gas-price option on mining nodes. If the gasPrice on a transaction is lower than the min-gas-price for the mining node, the transaction will never mine. In free gas networks, you must set --min-gas-price to zero.","s":"No mined transactions","u":"/public-networks/how-to/use-pow/mining","h":"#no-mined-transactions","p":1772},{"i":1786,"t":"Consensus and execution clients communicate with each other using the Engine API. These API methods are a separate subsection of the JSON-RPC API.","s":"Use the Engine API","u":"/public-networks/how-to/use-engine-api","h":"","p":1785},{"i":1788,"t":"The Engine API is enabled by default even if no consensus client configuration exists. You can configure the Engine API to: Specify the service ports. Specify the host allowlist. Example Engine API configuration besu --engine-rpc-port=8551 --engine-host-allowlist=localhost,127.0.0.1 --engine-jwt-secret=jwt.hex","s":"Configure the Engine API","u":"/public-networks/how-to/use-engine-api","h":"#configure-the-engine-api","p":1785},{"i":1790,"t":"To specify the port the Engine API service listens on for HTTP and WebSocket, use the --engine-rpc-port option. The default is 8551. This option is useful when you have another execution engine running on port 8551, in which case you can specify Besu to use another port, for example, --engine-rpc-port 8552.","s":"Service ports","u":"/public-networks/how-to/use-engine-api","h":"#service-ports","p":1785},{"i":1792,"t":"To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the --engine-host-allowlist option matches the request host headers. By default, Besu accepts requests and connections from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the Engine API, we recommend using authentication. If your application publishes RPC ports, specify the hostnames when starting Besu. Specify * for --engine-host-allowlist to effectively disable host protection. caution We don't recommend specifying * for --engine-host-allowlist in production.","s":"Host allowlist","u":"/public-networks/how-to/use-engine-api","h":"#host-allowlist","p":1785},{"i":1794,"t":"By default, authentication for the Engine API is enabled. To disable, set the --engine-jwt-disabled option to true. caution Don't disable JWT authentication in production environments. Disable only for testing purposes. Set the JWT secret by using the --engine-jwt-secret option.","s":"Authentication","u":"/public-networks/how-to/use-engine-api","h":"#authentication","p":1785},{"i":1797,"t":"Prepare to send a payload using engine_forkchoiceUpdatedV1. curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"safeBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"finalizedBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\"},{\"timestamp\": \"0x5\",\"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\"suggestedFeeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\"}],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"validationError\": null }, \"payloadId\": \"0x0000000021f32cc1\" } }","s":"1. Prepare a payload","u":"/public-networks/how-to/use-engine-api","h":"#1-prepare-a-payload","p":1785},{"i":1799,"t":"Get the payload using engine_getPayloadV1 curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadV1\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } }","s":"2. Get the payload","u":"/public-networks/how-to/use-engine-api","h":"#2-get-the-payload","p":1785},{"i":1801,"t":"Execute the payload using engine_newPayloadV1 curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_newPayloadV1\",\"params\":[ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null } }","s":"3. Execute the payload","u":"/public-networks/how-to/use-engine-api","h":"#3-execute-the-payload","p":1785},{"i":1803,"t":"Update the fork choice using engine_forkchoiceUpdatedV1 again. curl HTTP request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\"},null],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null }, \"payloadId\": null } }","s":"4. Update the fork choice","u":"/public-networks/how-to/use-engine-api","h":"#4-update-the-fork-choice","p":1785},{"i":1806,"t":"Subscribe to events by using either RPC Pub/Sub over WebSockets or filters over HTTP. Use RPC Pub/Sub over WebSockets to wait for events instead of polling for them. For example, dapps subscribe to logs and receive notifications when a specific event occurs. Methods specific to RPC Pub/Sub are: eth_subscribe and eth_unsubscribe - create or cancel a subscription for specific events. priv_subscribe and priv_unsubscribe - create or cancel a subscription for private logs. info Unlike other Besu API methods, you cannot call the RPC Pub/Sub methods over HTTP. Use the --rpc-ws-enabled option to enable the WebSockets JSON-RPC service.","s":"Introduction","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#introduction","p":1804},{"i":1808,"t":"WebSockets supports the RPC Pub/Sub API. To create subscriptions, use eth_subscribe or priv_subscribe. Once subscribed, the API publishes notifications using eth_subscription or priv_subscription. Subscriptions couple with connections. If a connection is closed, all subscriptions created over the connection are removed.","s":"Use RPC Pub/Sub","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#use-rpc-pubsub","p":1804},{"i":1810,"t":"eth_subscribe and priv_subscribe return a subscription ID for each subscription created. Notifications include the subscription ID. For example, to create a synchronizing subscription: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"syncing\"] } The result includes the subscription ID of \"0x1\": { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } The notifications also include the subscription ID of \"0x1\": { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x50\", \"highestBlock\": \"0x343c19\" } } }","s":"Subscription ID","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscription-id","p":1804},{"i":1812,"t":"Subscribing to some events (for example, logs) can cause a flood of notifications while the node is synchronizing.","s":"Notifications when synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#notifications-when-synchronizing","p":1804},{"i":1814,"t":"Use eth_subscribe to create subscriptions for the following event types: New headers Logs Pending transactions Dropped transactions Synchronizing Use priv_subscribe to create subscriptions for logs on private contracts. tip Only logs subscriptions are relevant for private transactions because private transactions are anchored to the public chain rather than having their own private blockchain.","s":"Subscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#subscribe","p":1804},{"i":1816,"t":"To notify you about each block added to the blockchain, use the newHeads parameter with eth_subscribe. If a chain reorganization occurs, the subscription publishes notifications for blocks in the new chain. This means the subscription can publish notifications for multiple blocks at the same height on the blockchain. The new headers notification returns block objects. The second parameter is optional. If specified, the notifications include whole transaction objects, Otherwise, the notifications include transaction hashes. To subscribe to new header notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newHeads\", { \"includeTransactions\": true }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 2, \"result\": \"0x1\" } Example notification without the {\"includeTransactions\": true} parameter included: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": { \"number\": \"0x40c22\", \"hash\": \"0x16af2ee1672203c7ac13ff280822008be0f38e1e5bdc675760015ae3192c0e3a\", \"parentHash\": \"0x1fcf5dadfaf2ab4d985eb05d40eaa23605b0db25d736610c4b87173bfe438f91\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00008000000000080000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000000040000000000000000000000000000000000000400000000010000000000000000100000000000020000000000000000000000000000000000010000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x5b2e3c1a49352f1ca9fb5dfe74b7ffbbb6d70e23a12693444e26058d8a8e6296\", \"stateRoot\": \"0xbe8d3bc58bd982421a3ea8b66753404502df0f464ae78a17661d157c406dd38b\", \"receiptsRoot\": \"0x81b175ec1f4d44fbbd6ba08f1bd3950663b307b7cb35751c067b535cc0b58f12\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x7c16e\", \"extraData\": \"0xd783010600846765746887676f312e372e33856c696e757800000000000000002160f780bb1f61eda045c67cdb1297ba37d8349df8035533cb0cf82a7e45f23f3d72bbec125a9f499b3eb110b7d1918d466cb2ede90b38296cfe2aaf452c513f00\", \"size\": \"0x3a1\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x11ac3a\", \"timestamp\": \"0x592afc24\", \"uncles\": [], \"transactions\": [ \"0x419c69d21b14e2e8f911def22bb6d0156c876c0e1c61067de836713043364d6c\", \"0x70a5b2cb2cee6e0b199232a1757fc2a9d6053a4691a7afef8508fd88aeeec703\", \"0x4b3035f1d32339fe1a4f88147dc197a0fe5bbd63d3b9dec2dad96a3b46e4fddd\" ] } } } Example notification with the {\"includeTransactions\": true} parameter included: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\":{ \"subscription\":\"0x1\", \"result\": { .... \"transactions\":[ { \"blockHash\":\"0xa30ee4d7c271ae5150aec494131c5f1f34089c7aa8fb58bd8bb916a55275bb90\", \"blockNumber\":\"0x63\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0x5208\", \"gasPrice\":\"0x3b9aca00\", \"hash\":\"0x11f66c3e96a92e3c14c1c33ad77381221bf8b58a887b4fed6aee456fc6f39b24\", \"input\":\"0x\", \"nonce\":\"0x1\", \"to\":\"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"transactionIndex\":\"0x0\", \"value\":\"0x56bc75e2d63100000\", \"v\":\"0xfe8\", \"r\":\"0x4b57d179c74885ef5f9326fd000665ea7fae44095c1e2016a2817fc671beb8cc\", \"s\":\"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8\", } ], }, } }","s":"New headers","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#new-headers","p":1804},{"i":1818,"t":"To notify you about logs included in new blocks, use the logs parameter with eth_subscribe or priv_subscribe. Specify a filter object to receive notifications only for logs matching your filter. Logs subscriptions have a filter object parameter with the following fields: address - (optional) Either an address or an array of addresses. Returns only logs created from these addresses. topics - (optional) Returns only logs that match the specified topics. fromBlock - (optional) The earliest block from which to return logs. toBlock - (optional) The last block from which to return logs. For private contracts, the privacy group ID must be specified. Only members of a privacy group receive logs for a private contract subscription. If you create a subscription for a privacy group you are not a member of, you will not receive any notifications. If a chain reorganization occurs, the subscription publishes notifications for logs from the old chain with the removed property in the log object set to true. This means the subscription can publish notifications for multiple logs for the same transaction. The logs subscription returns log objects. All logs Specific parameters Result Notification { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"logs\", {}] } { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [ \"logs\", { \"address\": \"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd\", \"topics\": [ \"0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902\" ], \"fromBlock\": \"0x0\", \"toBlock\": \"latest\" } ] } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" } { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x2\", \"result\": { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x2174\", \"blockHash\": \"0x7bc83837534aa13df55ff7db77784b1d1ba666d4c4bdd223cae9fe09c7c37eba\", \"transactionHash\": \"0x942179373e413824c6bc7045e92295aff91b679215446549b4aeb084da46495b\", \"transactionIndex\": \"0x0\", \"address\": \"0x9b8397f1b0fecd3a1a40cdd5e8221fa461898517\", \"data\": \"0x\", \"topics\": [ \"0x199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca072787\", \"0x0000000000000000000000000000000000000000000000000000000000000005\" ] } } } All logs for privacy group Specific parameters Result Notification { \"id\": 1, \"method\": \"priv_subscribe\", \"params\": [\"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"logs\", {}] } { \"id\": 1, \"method\": \"priv_subscribe\", \"params\": [ \"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"logs\", { \"address\": \"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd\", \"topics\": [ \"0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902\" ] } ] } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } { \"jsonrpc\": \"2.0\", \"method\": \"priv_subscription\", \"params\": { \"subscription\": \"0x1\", \"privacyGroupId\": \"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"result\": { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x285\", \"blockHash\": \"0x98490766b16de2a4d044c04d92599d71e626bc96e42f0c74274ef4e03fafd579\", \"transactionHash\": \"0x40034ef14e3a22946693dd2a11efddf3a8850ddcad46b408198df6c176c53ffb\", \"transactionIndex\": \"0x0\", \"address\": \"0x61f96a7ed09877197d4fff0c29b8e523913651a9\", \"data\": \"0x\", \"topics\": [ \"0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410\", \"0x0000000000000000000000000000000000000000000000000000000000000002\" ] } } }","s":"Logs","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#logs","p":1804},{"i":1820,"t":"To notify you about pending transactions added to the transaction pool for the node, use the newPendingTransactions parameter with eth_subscribe. The pending transactions subscription returns the transaction hashes or transaction details of the pending transactions. If the includeTransactions parameter is not included, the default is transaction hashes only. If a chain reorganization occurs, Besu resubmits transactions for inclusion in the new canonical chain. This means the subscription can publish notifications for the same pending transaction more than once. To subscribe to pending transaction notifications and receive transaction hashes only: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newPendingTransactions\", { \"includeTransactions\": false }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": \"0x5705bc8bf875ff03e98adb98489428835892dc6ba6a6b139fee1becbc26db0b8\" } } To subscribe to pending transaction notifications and receive transaction details: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"newPendingTransactions\", { \"includeTransactions\": true }] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x2\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x2\", \"result\": { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0x2540be400\", \"hash\": \"0x7a4185f40ee93cb27eb132f301d0a5414c1f871051f166fc8804c376aab3ffec\", \"input\": \"0x\", \"nonce\": \"0x13\", \"to\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\", \"value\": \"0x8ac7230489e80000\", \"v\": \"0xfe7\", \"r\": \"0xdd9013c67469d2fe79afdc61777c55bdced33c90fa6f9b83d8f9b7e445085123\", \"s\": \"0x45823a1ab22ae9c83876ea435dc5ecc4fe3a83c1bfbc340a5f57df2f5a474fa5\" } } }","s":"Pending transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#pending-transactions","p":1804},{"i":1822,"t":"To notify you about transactions dropped from the transaction pool for the node, use the droppedPendingTransactions parameter with eth_subscribe. The dropped transactions subscription returns the transaction hashes of the dropped transactions. Dropped transactions can be re-added to the transaction pool from a variety of sources. For example, receiving a previously dropped transaction from a peer. As a result, it's possible to receive multiple dropped transaction notifications for the same transaction. To subscribe to dropped transaction notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"droppedPendingTransactions\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } Example notification: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x1\", \"result\": \"0xf57d6a90a7fb30880cfbdf6b432b487d0e94a3b55b34dc4b45e3b0b237ecab4c\" } }","s":"Dropped transactions","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#dropped-transactions","p":1804},{"i":1824,"t":"To notify you about synchronization progress, use the syncing parameter with eth_subscribe. When behind the chain head, the synchronizing subscription returns an object indicating the synchronization progress. When fully synchronized, returns false. To subscribe to synchronizing notifications: { \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"syncing\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x4\" } Example notification while synchronizing: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x4\", \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x3e80\", \"highestBlock\": \"0x67b93c\" } } } Example notification when synchronized with chain head: { \"jsonrpc\": \"2.0\", \"method\": \"eth_subscription\", \"params\": { \"subscription\": \"0x4\", \"result\": false } }","s":"Synchronizing","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#synchronizing","p":1804},{"i":1826,"t":"To cancel a subscription, use the subscription ID with eth_unsubscribe or priv_unsubscribe. Only the connection that created a subscription can unsubscribe from it. When cancelling a subscription for private logs, the privacy group ID must be specified. eth_unsubscribe and priv_unsubscribe return true if subscription successfully unsubscribed; otherwise, returns an error. To unsubscribe from a subscription with subscription ID of 0x1: { \"id\": 1, \"method\": \"eth_unsubscribe\", \"params\": [\"0x1\"] } To unsubscribe from private logs subscription: { \"id\": 1, \"method\": \"priv_unsubscribe\", \"params\": [\"4sSv8eqB6/0lV9I0tBGUhPjjHtLEf3z0eeMc8Lokkyo=\", \"0x2\"] } Example result: { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"Unsubscribe","u":"/public-networks/how-to/use-besu-api/rpc-pubsub","h":"#unsubscribe","p":1804},{"i":1828,"t":"The following objects are parameters for or returned by Besu API methods. info This reference contains API objects that apply to both public and private networks. For private-network-specific API objects, see the private network API object reference.","s":"Besu API objects","u":"/public-networks/reference/api/objects","h":"","p":1827},{"i":1830,"t":"Returned by eth_getBlockByHash and eth_getBlockByNumber. Key Type Value number Quantity, Integer Block number. null when block is pending. hash Data, 32 bytes Hash of the block. null when block is pending. parentHash Data, 32 bytes Hash of the parent block. nonce Data, 8 bytes Hash of the generated proof of work. null when block is pending. sha3Uncles Data, 32 bytes SHA3 of the uncle's data in the block. logsBloom Data, 256 bytes Bloom filter for the block logs. null when block is pending. transactionsRoot Data, 32 bytes Root of the transaction trie for the block. stateRoot Data, 32 bytes Root of the final state trie for the block. receiptsRoot Data, 32 bytes Root of the receipts trie for the block. miner Data, 20 bytes Address to pay mining rewards to. difficulty Quantity, Integer Difficulty for this block. totalDifficulty Quantity, Integer Total difficulty of the chain until this block. This value will always be 0 for an uncle block. extraData Data Extra data field for this block. The first 32 bytes is vanity data you can set using the --miner-extra-data command line option. Stores extra data when used with Clique and IBFT. size Quantity, Integer Size of block in bytes. gasLimit Quantity Maximum gas allowed in this block. gasUsed Quantity Total gas used by all transactions in this block. timestamp Quantity Unix timestamp (milliseconds) for block assembly. transactions Array Array of transaction objects, or 32 byte transaction hashes depending on the specified boolean parameter. uncles Array Array of uncle hashes. baseFeePerGas Quantity The block's base fee per gas. This field is empty for blocks created before EIP-1559.","s":"Block object","u":"/public-networks/reference/api/objects","h":"#block-object","p":1827},{"i":1832,"t":"Returned by eth_feeHistory for the requested block range. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. Key Type Value oldestBlock Quantity, Integer Lowest number block of the returned range. baseFeePerGas Array Array of block base fees per gas, including an extra block value. The extra value is the next block after the newest block in the returned range. Returns zeroes for blocks created before EIP-1559. baseFeePerBlobGas Array Array of base fees per blob gas. Returns zeroes for blocks created before EIP-4844. gasUsedRatio Array Array of block gas used ratios. These are calculated as the ratio of gasUsed and gasLimit. blobGasUsedRatio Array Array of blob gas used ratios. These are calculated as the ratio of blobGasUsed and the max blob gas per block. reward Array Array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty.","s":"Fee history results object","u":"/public-networks/reference/api/objects","h":"#fee-history-results-object","p":1827},{"i":1834,"t":"Parameter for eth_newFilter, eth_getLogs, and priv_getLogs. Used to filter logs. Key Type Required/Optional Value fromBlock Quantity | Tag Optional Integer block number or latest, pending, earliest. See block parameter. Default is latest. toBlock Quantity | Tag Optional Integer block number or latest, pending, earliest. See block parameter. Default is latest. address Data | Array Optional Contract address or array of addresses from which logs originate. topics Array of Data, 32 bytes each Optional Array of topics by which to filter logs. eth_getLogs and priv_getLogs have an extra key. Key Type Required/Optional Value blockHash Data, 32 bytes Optional. Hash of block for which to return logs. If you specify blockHash, you cannot specify fromBlock and toBlock.","s":"Filter options object","u":"/public-networks/reference/api/objects","h":"#filter-options-object","p":1827},{"i":1836,"t":"Returned by eth_getFilterChanges and priv_getLogs. Transaction receipt objects can contain an array of log objects. Key Type Value removed Tag true if log removed because of a chain reorganization. false if a valid log. logIndex Quantity, Integer Log index position in the block. null when log is pending. transactionIndex Quantity, Integer Index position of the starting transaction for the log. null when log is pending. transactionHash Data, 32 bytes Hash of the starting transaction for the log. null when log is pending. blockHash Data, 32 bytes Hash of the block that includes the log. null when log is pending. blockNumber Quantity Number of block that includes the log. null when log is pending. address Data, 20 bytes Address the log originated from. data Data Non-indexed arguments of the log. topics Array of Data, 32 bytes each Event signature hash and 0 to 3 indexed log arguments.","s":"Log object","u":"/public-networks/reference/api/objects","h":"#log-object","p":1827},{"i":1838,"t":"Returned by eth_getMinerDataByBlockHash and eth_getMinerDataByBlockNumber. Key Type Value netBlockReward Quantity, Integer The net block reward, in Wei, is staticBlockReward + transactionFee + uncleInclusionReward. staticBlockReward Quantity, Integer The static block reward, in Wei, is preset on a hard fork. transactionFee Quantity, Integer The transaction fee, in Wei, is sum of upfront cost - refund amount for all transactions. uncleInclusionReward Quantity, Integer The uncle inclusion reward, in Wei, is static block reward * number of ommers/32. uncleRewards Map Map of uncle block hashes and uncle miner coinbase addresses. coinbase Data, 20 bytes Coinbase address. extraData Data Extra data field for this block. The first 32 bytes is vanity data you can set using the --miner-extra-data command line option. difficulty Quantity, Integer Difficulty of this block. totalDifficulty Quantity, Integer Total difficulty of the chain until this block.","s":"Miner data object","u":"/public-networks/reference/api/objects","h":"#miner-data-object","p":1827},{"i":1840,"t":"Returned by txpool_besuPendingTransactions. Key Type Value accessList Array (Optional) List of addresses and storage keys the transaction plans to access. Used in ACCESS_LIST transactions and may be used in EIP1559 transactions. from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity (Optional) Gas price, in Wei, provided by the sender. Not used only in EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in EIP1559 transactions. maxFeePerGas Quantity, Integer (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in EIP1559 transactions. hash Data, 32 bytes Hash of the transaction. input Data Data sent with the transaction to create or invoke a contract. nonce Quantity Number of transactions made by the sender before this one. to Data, 20 bytes Address of the receiver. null if a contract creation transaction. transactionType String Transaction type. value Quantity Value transferred, in Wei. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s.","s":"Pending transaction object","u":"/public-networks/reference/api/objects","h":"#pending-transaction-object","p":1827},{"i":1842,"t":"Returned by debug_storageRangeAt. Key Type Value storage Object Key hash and value. Pre-image key is null if it falls outside the cache. nextKey Hash Hash of next key if further storage in range. Otherwise, not included.","s":"Range object","u":"/public-networks/reference/api/objects","h":"#range-object","p":1827},{"i":1844,"t":"Log information returned as part of the Trace object. Key Type Value pc Integer Current program counter. op String Current OpCode. gas Integer Gas remaining. gasCost Integer Cost in wei of each gas unit. depth Integer Execution depth. exceptionalHaltReasons Array One or more strings representing an error condition causing the EVM execution to terminate. These strings suggest that EVM execution terminated for reasons such as running out of gas or attempting to execute an unknown instruction. Generally a single exceptional halt reason returns but it's possible for more than one to occur at once. stack Array of 32 byte arrays EVM execution stack before executing current operation. memory Array of 32 byte arrays Memory space of the contract before executing current operation. storage Object Storage entries changed by the current transaction.","s":"Structured log object","u":"/public-networks/reference/api/objects","h":"#structured-log-object","p":1827},{"i":1846,"t":"Returned by debug_traceBlock, debug_traceBlockByHash, debug_traceBlockByNumber, debug_traceTransaction, and debug_traceCall. Key Type Value gas Integer Gas used by the transaction. failed Boolean True if transaction failed, otherwise, false. returnValue String Bytes returned from transaction execution (without a 0x prefix). structLogs Array Array of structured log objects.","s":"Trace object","u":"/public-networks/reference/api/objects","h":"#trace-object","p":1827},{"i":1848,"t":"Parameter for trace_filter. All parameters are optional. Key Type Value fromBLock String | Tag Trace starts at this block. toBlock String | Tag Trace stops at this block. fromAddress String Include only traces sent from this address. toAddress String Include only traces with this destination address. after Quantity The offset trace number. count Integer Number of traces to display in a batch.","s":"Trace filter options object","u":"/public-networks/reference/api/objects","h":"#trace-filter-options-object","p":1827},{"i":1850,"t":"Returned by eth_getTransactionByHash, eth_getTransactionByBlockHashAndIndex, and eth_getTransactionByBlockNumberAndIndex. Key Type Value accessList Array (Optional) List of addresses and storage keys the transaction plans to access. Used in ACCESS_LIST transactions and may be used in EIP1559 transactions. blockHash Data, 32 bytes Hash of the block containing this transaction. null when transaction is pending. blockNumber Quantity Block number of the block containing this transaction. null when transaction is pending. chainId Quantity Chain ID. from Data, 20 bytes Address of the sender. gas Quantity Gas provided by the sender. gasPrice Quantity (Optional) Gas price, in Wei, provided by the sender. Used only in non-EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in EIP1559 transactions. maxFeePerGas Quantity, Integer (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in EIP1559 transactions. hash Data, 32 bytes Hash of the transaction. input Data Data sent with the transaction to create or invoke a contract. For private transactions, it's a pointer to the transaction location in Tessera. nonce Quantity Number of transactions made by the sender before this one. to Data, 20 bytes Address of the receiver. null if a contract creation transaction. transactionIndex Quantity, Integer Index position of the transaction in the block. null when transaction is pending. transactionType String Transaction type. value Quantity Value transferred, in Wei. v Quantity ECDSA Recovery ID. r Data, 32 bytes ECDSA signature r. s Data, 32 bytes ECDSA signature s.","s":"Transaction object","u":"/public-networks/reference/api/objects","h":"#transaction-object","p":1827},{"i":1852,"t":"Parameter for eth_call, eth_createAccessList, and eth_estimateGas. All transaction call object parameters are optional. Key Type Value from Data, 20 bytes Address of the sender. to Data, 20 bytes Address of the action receiver. gas Quantity, Integer Gas provided by the sender. eth_call consumes zero gas, but other executions might need this parameter. eth_estimateGas ignores this value. gasPrice Quantity, Integer Gas price, in Wei, provided by the sender. The default is 0. Used only in non-EIP1559 transactions. maxPriorityFeePerGas Quantity, Integer Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Can be used only in EIP1559 transactions. If used, must specify maxFeePerGas. maxFeePerGas Quantity, Integer Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Can be used only in EIP1559 transactions. If used, must specify maxPriorityFeePerGas. maxFeePerBlobGas Quantity, Integer Maximum fee the sender is willing to pay per blob gas. Only used for blob transactions introduced in EIP-4844. value Quantity, Integer Value transferred, in Wei. data Data Hash of the method signature and encoded parameters. For details, see Ethereum Contract ABI. Must be equal to input if both parameters are provided. input Data Hash of the method signature and encoded parameters. For details, see Ethereum Contract ABI. Must be equal to data if both parameters are provided. accessList Array List of addresses and storage keys that the transaction plans to access. Used only in non-FRONTIER transactions. strict Tag Determines if the sender account balance is checked. If true, the balance is checked. If false, the balance is not checked. If not specified, the balance is checked against the gas parameters if supplied. blobVersionedHashes Array List of references to blobs introduced in EIP-4844.","s":"Transaction call object","u":"/public-networks/reference/api/objects","h":"#transaction-call-object","p":1827},{"i":1854,"t":"Returned by eth_getTransactionReceipt. Key Type Value blockHash Data, 32 bytes Hash of block containing this transaction. blockNumber Quantity Block number of block containing this transaction. contractAddress Data, 20 bytes Contract address created, if contract creation transaction, otherwise, null. A failed contract creation transaction still produces a contract address value. cumulativeGasUsed Quantity Total amount of gas used by previous transactions in the block and this transaction. effectiveGasPrice Quantity The actual value per gas deducted from the sender's account. from Data, 20 bytes Address of the sender. gasUsed Quantity Amount of gas used by this specific transaction. logs Array Array of log objects generated by this transaction. logsBloom Data, 256 bytes Bloom filter for light clients to quickly retrieve related logs. status Quantity Either 0x0 (failure), 0x1 (success), or 0x2 (invalid). to Data, 20 bytes Address of the receiver, if sending ether, otherwise, null. transactionHash Data, 32 bytes Hash of the transaction. transactionIndex Quantity, Integer Index position of transaction in the block. transactionType String Transaction type. revertReason String ABI-encoded string that displays the reason for reverting the transaction. Only available if revert reason is enabled. type Quantity Transaction type, 0x00 for legacy transactions, 0x01 for access list types, 0x02 for dynamic fees, and 0x03 for blob transactions. note For pre-Byzantium transactions, the transaction receipt object includes the following instead of status: Key Type Value root Data, 32 bytes Post-transaction state root","s":"Transaction receipt object","u":"/public-networks/reference/api/objects","h":"#transaction-receipt-object","p":1827},{"i":1856,"t":"Returned by trace_replayBlockTransactions. Key Type Value output Boolean Transaction result. 1 for success and 0 for failure. stateDiff Object State changes in the requested block. trace Array Ordered list of calls to other contracts. vmTrace Object Ordered list of EVM actions. transactionHash Data, 32 bytes Hash of the replayed transaction.","s":"Transaction trace object","u":"/public-networks/reference/api/objects","h":"#transaction-trace-object","p":1827},{"i":1858,"t":"At Besu, security is a priority. But regardless of how much effort we put into system security, there might still be vulnerabilities present. If you discover a vulnerability, we need to know about it so we can take steps to address it as quickly as possible. We would like you to help us better protect our clients and our systems. Please follow the process explained on defect response wiki page.","s":"Security disclosure policy","u":"/public-networks/reference/disclosure","h":"","p":1857},{"i":1860,"t":"This reference describes the syntax of the Besu command line interface (CLI) subcommands. note This reference contains subcommands that apply to both public and private networks. For private-network-specific subcommands, see the private network subcommands reference. To start a Besu node using subcommands, run: besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS] If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice. besu Tab+Tab","s":"Subcommands","u":"/public-networks/reference/cli/subcommands","h":"","p":1859},{"i":1862,"t":"Provides blocks related actions.","s":"blocks","u":"/public-networks/reference/cli/subcommands","h":"#blocks","p":1859},{"i":1864,"t":"Syntax Example besu blocks import [--skip-pow-validation-enabled] [--start-block=] [--end-block=] --from= besu blocks import --skip-pow-validation-enabled --start-block=100 --end-block=300 --from=/home/me/me_project/mainnet-export1.blocks --from=/home/me/me_project/mainnet-export2.blocks Imports a block or range of blocks from the specified file into the blockchain database. You can specify the starting index of the block range to import with --start-block. If omitted, the default start block is 0 (the beginning of the chain). You can specify the ending index (exclusive) of the block range to import with --end-block. If omitted, all blocks after the start block are imported. You can specify multiple --from arguments. This can be useful when blocks have been exported over time to multiple files. If multiple files are provided they are read in the order specified in the command. Including --skip-pow-validation-enabled skips validation of the mixHash when importing blocks. note Use --skip-pow-validation-enabled when performing Ethereum Foundation hive testing.","s":"import","u":"/public-networks/reference/cli/subcommands","h":"#import","p":1859},{"i":1866,"t":"Syntax Example besu blocks export [--start-block=] [--end-block=] --to= besu --network=holesky --data-path=/home/data/ blocks export --start-block=100 --end-block=300 --to=/home/exportblock.bin Exports a block or range of blocks from storage to a file in RLP format. If you omit --start-block, the default start block is 0 (the beginning of the chain), and if you omit --end-block, the default end block is the current chain head. If you are not running the command against the default network (Mainnet), specify the --network or --genesis-file parameter.","s":"export","u":"/public-networks/reference/cli/subcommands","h":"#export","p":1859},{"i":1868,"t":"Provides operator actions.","s":"operator","u":"/public-networks/reference/cli/subcommands","h":"#operator","p":1859},{"i":1870,"t":"Syntax Example besu operator generate-log-bloom-cache [--start-block=] [--end-block=] besu --network=holesky --data-path=/project/holesky operator generate-log-bloom-cache --start-block=0 --end-block=100000 tip Manually executing generate-log-bloom-cache is not required unless you set the --auto-log-bloom-caching-enabled command line option to false. Generates cached log bloom indexes for blocks. APIs use the cached indexes for improved log query performance. note Each index file contains 100000 blocks. The last fragment of blocks less that 100000 are not indexed. To generate cached log bloom indexes while the node is running, use the admin_generateLogBloomCache API.","s":"generate-log-bloom-cache","u":"/public-networks/reference/cli/subcommands","h":"#generate-log-bloom-cache","p":1859},{"i":1872,"t":"Provides password related actions.","s":"password","u":"/public-networks/reference/cli/subcommands","h":"#password","p":1859},{"i":1874,"t":"Syntax Example besu password hash --password= besu password hash --password=myPassword123 Generates the hash of a given password. Include the hash in the credentials file for JSON-RPC API authentication.","s":"hash","u":"/public-networks/reference/cli/subcommands","h":"#hash","p":1859},{"i":1876,"t":"Provides node public key related actions. caution To get the public key or address of a node, ensure you use the --data-path or --node-private-key-file option with the public-key command. Otherwise, a new node key is silently generated when starting Besu.","s":"public-key","u":"/public-networks/reference/cli/subcommands","h":"#public-key","p":1859},{"i":1878,"t":"Syntax Example (to standard output) Example (to file) besu public-key export [--node-private-key-file=] [--to=] [--ec-curve=] besu --data-path= public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1 besu --data-path= public-key export --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/not_precious_pub_key --ec-curve=secp256k1 Outputs the node public key to standard output or to the file specified by --to=. You can output the public key associated with a specific private key file using the --node-private-key-file option. The default elliptic curve used for the key is secp256k1. Use the --ec-curve option to choose between secp256k1 or secp256r1.","s":"export","u":"/public-networks/reference/cli/subcommands","h":"#export-1","p":1859},{"i":1880,"t":"Syntax Example (to standard output) Example (to file) besu public-key export-address [--node-private-key-file=] [--to=] [--ec-curve=] besu --data-path= public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --ec-curve=secp256k1 besu --data-path= public-key export-address --node-private-key-file=/home/me/me_node/myPrivateKey --to=/home/me/me_project/me_node_address --ec-curve=secp256k1 Outputs the node address to standard output or to the file specified by --to=. You can output the address associated with a specific private key file using the --node-private-key-file option. The default elliptic curve used for the key is secp256k1. Use the --ec-curve option to choose between secp256k1 or secp256r1.","s":"export-address","u":"/public-networks/reference/cli/subcommands","h":"#export-address","p":1859},{"i":1882,"t":"Syntax Example besu retesteth [--data-path=] [--rpc-http-host=] [--rpc-http-port=] [-l=] [--host-allowlist=[,…]… or * or all] besu retesteth --data-path=/home/me/me_node --rpc-http-port=8590 --host-allowlist=* Runs a Retesteth-compatible server. Retesteth is a developer tool that can generate and run consensus tests against any Ethereum client running such a server. The command accepts the following command line options: --data-path --host-allowlist --rpc-http-host --rpc-http-port --logging","s":"retesteth","u":"/public-networks/reference/cli/subcommands","h":"#retesteth","p":1859},{"i":1884,"t":"Provides storage related actions.","s":"storage","u":"/public-networks/reference/cli/subcommands","h":"#storage","p":1859},{"i":1886,"t":"Syntax besu storage revert-metadata v2-to-v1 Reverts the modifications made by the database metadata refactor. If you need to downgrade Besu, run this subcommand before installing the previous binaries.","s":"revert-metadata","u":"/public-networks/reference/cli/subcommands","h":"#revert-metadata","p":1859},{"i":1888,"t":"Syntax Example besu --config-file storage revert-variables besu --config-file config.toml storage revert-variables Reverts the modifications made by the variables storage feature. If you need to downgrade Besu, first run this subcommand specifying the path to the configuration file normally used to start Besu.","s":"revert-variables","u":"/public-networks/reference/cli/subcommands","h":"#revert-variables","p":1859},{"i":1890,"t":"Syntax Example Example output besu --config-file storage rocksdb usage besu --config-file config.toml storage rocksdb usage |--------------------------------|-----------------|-------------|-----------------|------------------| | Column Family | Keys | Total Size | SST Files Size | Blob Files Size | |--------------------------------|-----------------|-------------|-----------------|------------------| | BLOCKCHAIN | 2355141414 | 933 GiB | 166 GiB | 767 GiB | | VARIABLES | 26 | 240 KiB | 240 KiB | 0 B | | ACCOUNT_INFO_STATE | 9634454 | 496 MiB | 496 MiB | 0 B | | ACCOUNT_STORAGE_STORAGE | 24041432 | 1 GiB | 1 GiB | 0 B | | CODE_STORAGE | 37703864 | 12 GiB | 12 GiB | 0 B | | TRIE_BRANCH_STORAGE | 1885032116 | 138 GiB | 138 GiB | 0 B | | TRIE_LOG_STORAGE | 267301 | 17 GiB | 17 GiB | 0 B | |--------------------------------|-----------------|-------------|-----------------|------------------| | ESTIMATED TOTAL | 4311820607 | 1104 GiB | 337 GiB | 767 GiB | |--------------------------------|-----------------|-------------|-----------------|------------------| Displays the disk space used by the RocksDB key-value database, categorized into column families.","s":"rocksdb usage","u":"/public-networks/reference/cli/subcommands","h":"#rocksdb-usage","p":1859},{"i":1892,"t":"Provides actions related to managing, recording, and logging changes for the Bonsai Trie data. count​ Syntax Example Example output besu --config-file storage trie-log count besu --config-file config.toml storage trie-log count trieLog count: 742311 - canonical count: 681039 - fork count: 217 - orphaned count: 61055 Displays the number of trie logs in the database. This is the number of keys for the TRIE_LOG_STORAGE column family in RocksDB. The following are specified in the trieLog count: canonical count represents the finalized blockchain. fork count represents non-finalized branches of the blockchain. orphaned count represents trie logs not in the blockchain, which can occur during block creation. prune​ Syntax Example Example setting retention limit besu --config-file storage trie-log prune besu --config-file config.toml storage trie-log prune besu --config-file config.toml --bonsai-historical-block-limit=1024 storage trie-log prune Removes all trie log layers below the specified retention limit, including orphaned trie logs. You can configure the retention limit using --bonsai-historical-block-limit. The retention limit should match the configuration used with --bonsai-limit-trie-logs-enabled. The default limit is 512.","s":"trie-log","u":"/public-networks/reference/cli/subcommands","h":"#trie-log","p":1859},{"i":1894,"t":"Syntax Example besu validate-config --config-file besu validate-config --config-file config.toml Performs basic syntax validation of the specified configuration file. Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup).","s":"validate-config","u":"/public-networks/reference/cli/subcommands","h":"#validate-config","p":1859},{"i":1896,"t":"Consensus and execution clients communicate with each other using the Engine API. When running Besu as an execution client, use these API calls to communicate with a consensus client. info The engine API is enabled by default. See the Ethereum Engine API specification for more information. Not all changes to the Engine API are documented on this page.","s":"Engine API methods","u":"/public-networks/reference/engine-api","h":"","p":1895},{"i":1899,"t":"Exchanges a list of supported Engine API methods between the consensus client and Besu. Parameters​ remoteCapabilities: array of strings - Engine API method names that the consensus client supports Returns​ localCapabilities: array of strings - Engine API method names that Besu supports curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_exchangeCapabilities\",\"params\":[[\"engine_exchangeTransitionConfigurationV1\",\"engine_forkchoiceUpdatedV1\",\"engine_getPayloadBodiesByHash\",\"engine_getPayloadBodiesByRangeV1\",\"engine_getPayloadV1\",\"engine_newPayloadV1\"]],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_exchangeCapabilities\", \"params\": [ [ \"engine_exchangeTransitionConfigurationV1\", \"engine_forkchoiceUpdatedV1\", \"engine_getPayloadBodiesByHash\", \"engine_getPayloadBodiesByRangeV1\", \"engine_getPayloadV1\", \"engine_newPayloadV1\" ] ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [ \"engine_getPayloadV1\", \"engine_getPayloadV2\", \"engine_executePayloadV1\", \"engine_newPayloadV1\", \"engine_newPayloadV2\", \"engine_forkchoiceUpdatedV1\", \"engine_forkchoiceUpdatedV2\", \"engine_exchangeTransitionConfigurationV1\", \"engine_getPayloadBodiesByHashV1\", \"engine_getPayloadBodiesByRangeV1\" ] }","s":"engine_exchangeCapabilities","u":"/public-networks/reference/engine-api","h":"#engine_exchangecapabilities","p":1895},{"i":1901,"t":"Sends the transition configuration to the consensus client to verify the configuration between both clients. note The execution client runs this call every 60 seconds in the background. The log displays a warning message if the call hasn't been sent in 120 seconds. Parameters​ transitionConfiguration: object - Transition configuration object Returns​ transitionConfiguration: object - Transition configuration object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_exchangeTransitionConfigurationV1\",\"params\":[{\"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\"}],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_exchangeTransitionConfigurationV1\", \"params\": [ { \"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\" } ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"terminalTotalDifficulty\": 0, \"terminalBlockHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"terminalBlockNumber\": \"0x1\" } }","s":"engine_exchangeTransitionConfigurationV1","u":"/public-networks/reference/engine-api","h":"#engine_exchangetransitionconfigurationv1","p":1895},{"i":1903,"t":"Updates the fork choice with the consensus client. Parameters​ forkchoiceState: object - Fork choice state object payloadAttributes: object - Payload attribute object. Can be null. Returns​ payloadStatus: object - Payload status object payloadId: data - identifier of the payload build process or null curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceUpdatedV1\",\"params\":[{\"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\"},null],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_forkchoiceUpdatedV1\", \"params\": [ { \"headBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"safeBlockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"finalizedBlockHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\" }, null ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"payloadStatus\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null }, \"payloadId\": null } }","s":"engine_forkchoiceUpdatedV1","u":"/public-networks/reference/engine-api","h":"#engine_forkchoiceupdatedv1","p":1895},{"i":1905,"t":"Returns the bodies of the execution payloads corresponding to the specified block hashes. Parameters​ blockHashes: array of strings - Block hashes Returns​ engineGetPayloadBodiesResultV1: array of objects - Execution payload body objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadBodiesByHashV1\",\"params\":[[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\",\"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\"]],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadBodiesByHashV1\", \"params\": [ [ \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\" ] ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [{ \"transactions\": [\"0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65\", \"0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95\", ...], \"withdrawals\": [{ \"index\" : \"0xf0\", \"validatorIndex\" : \"0xf0\", \"address\" : \"0x00000000000000000000000000000000000010f0\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf1\", \"validatorIndex\" : \"0xf1\", \"address\" : \"0x00000000000000000000000000000000000010f1\", \"amount\" : \"0x1\" }] }, { \"transactions\": [\"0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe\", \"0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29\", ...], \"withdrawals\": [{ \"index\" : \"0xf2\", \"validatorIndex\" : \"0xf2\", \"address\" : \"0x00000000000000000000000000000000000010f2\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf3\", \"validatorIndex\" : \"0xf3\", \"address\" : \"0x00000000000000000000000000000000000010f3\", \"amount\" : \"0x1\" }] }] }","s":"engine_getPayloadBodiesByHashV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyhashv1","p":1895},{"i":1907,"t":"Returns the bodies of the execution payloads corresponding to the specified range of block numbers. Parameters​ startBlockNumber: string - Number of the starting block of the range, as a hexadecimal string count: string - Number of blocks in the range (including the starting block), as a hexadecimal string Returns​ engineGetPayloadBodiesResultV1: array of objects - Execution payload body objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadBodiesByRangeV1\",\"params\":[\"0x20\", \"0x2\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadBodiesByRangeV1\", \"params\": [\"0x20\", \"0x2\"], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": [{ \"transactions\": [\"0xf865808506fc23ac00830124f8940101010101010101010101010101010101010101018031a02c4d88bfdc2f6dbf82c33d235c4e785e9fc23b2d0fc7b9d20fc5e9674f1f9d15a016d6d69b925cf26128683ab4a096e196fbb1142d6c6d4e8d3481b9bef1bd0f65\", \"0x02f86c0701843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a039409b4e5603dd8c3cf38232348661a8e99ac518396eeaa128ec9ec2a3eb8127a06b21ab956f5f138cb44fda1a9055bd08980ea4f8040d877c00dac025608d0d95\", ...], \"withdrawals\": [{ \"index\" : \"0xf0\", \"validatorIndex\" : \"0xf0\", \"address\" : \"0x00000000000000000000000000000000000010f0\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf1\", \"validatorIndex\" : \"0xf1\", \"address\" : \"0x00000000000000000000000000000000000010f1\", \"amount\" : \"0x1\" }] }, { \"transactions\": [\"0xf865108506fc23ac00830124f8940101010101010101010101010101010101010101018031a0d9712a3c40ae85aea4ad1bd95a0b7cc7bd805189a9e2517403b11a00a1530f81a053b53b0267a6dcfe9f9a1652307b396b3e8a65e65707a450e60c92baefdbcfbe\", \"0x02f86c0711843b9aca008506fc23ac00830124f89402020202020202020202020202020202020202020180c080a071d36bc93c7ae8cc5c01501e51e5e97a51aa541d1a89c809a2af7eb40e9bc2cba071644230e21c075c1da08916aff5efe9f95a6f6a4f94dc217f6c1bb4a3240b29\", ...], \"withdrawals\": [{ \"index\" : \"0xf2\", \"validatorIndex\" : \"0xf2\", \"address\" : \"0x00000000000000000000000000000000000010f2\", \"amount\" : \"0x1\" }, { \"index\" : \"0xf3\", \"validatorIndex\" : \"0xf3\", \"address\" : \"0x00000000000000000000000000000000000010f3\", \"amount\" : \"0x1\" }] }] }","s":"engine_getPayloadBodiesByRangeV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadbodiesbyrangev1","p":1895},{"i":1909,"t":"Prepares the payload to send to the consensus client. Parameters​ payloadId: data - Identifier of the payload build process Returns​ executionPayload: object - Execution payload object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_getPayloadV1\",\"params\":[\"0x0000000021f32cc1\"],\"id\":1}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_getPayloadV1\", \"params\": [\"0x0000000021f32cc1\"], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 67, \"result\": { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } }","s":"engine_getPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_getpayloadv1","p":1895},{"i":1911,"t":"Executes the payload with the consensus client. Parameters​ executionPayload: object - Execution payload object Returns​ payloadStatus: object - Payload status object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"engine_newPayloadV1\",\"params\":[ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ],\"id\":67}' http://127.0.0.1:8550 { \"jsonrpc\": \"2.0\", \"method\": \"engine_newPayloadV1\", \"params\": [ { \"parentHash\": \"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a\", \"feeRecipient\": \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"stateRoot\": \"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"prevRandao\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"blockNumber\": \"0x1\", \"gasLimit\": \"0x1c9c380\", \"gasUsed\": \"0x0\", \"timestamp\": \"0x5\", \"extraData\": \"0x\", \"baseFeePerGas\": \"0x7\", \"blockHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"transactions\": [] } ], \"id\": 67 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"status\": \"VALID\", \"latestValidHash\": \"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858\", \"validationError\": null } }","s":"engine_newPayloadV1","u":"/public-networks/reference/engine-api","h":"#engine_newpayloadv1","p":1895},{"i":1913,"t":"The following objects are parameters for or returned by the Engine API methods.","s":"Engine API objects","u":"/public-networks/reference/engine-api/objects","h":"","p":1912},{"i":1915,"t":"Parameter for engine_newPayloadV1. Returned by engine_getPayloadV1. Key Type Value parentHash Data, 32 Bytes Hash of the parent block. feeRecipient Data, 20 Bytes Beneficiary of the fee. stateRoot Data, 32 Bytes Root of the final state trie for the block. receiptsRoot Data, 32 Bytes Root of the receipts trie for the block. logsBloom Data, 256 Bytes Bloom filter for light clients to quickly retrieve related logs. prevRandao Data, 32 Bytes Difficulty for this block. blockNumber Quantity, 64 Bits Block number of block containing this transaction. gasLimit Quantity, 64 Bits Maximum gas allowed in this block. gasUsed Quantity, 64 Bits Total gas used by all transactions in this block. timestamp Quantity, 64 Bits Unix timestamp (milliseconds) for block assembly. extraData Data, 0 to 32 Bytes Extra data field for this block. baseFeePerGas Quantity, 256 Bits The block's base fee per gas. This field is empty for blocks created before EIP-1559. blockHash Data, 32 Bytes Hash of the execution block. transactions Array Array of transaction objects, each object is a list representing TransactionType, TransactionPayload, or LegacyTransaction as defined in EIP-2718.","s":"Execution payload object","u":"/public-networks/reference/engine-api/objects","h":"#execution-payload-object","p":1912},{"i":1917,"t":"Parameter for engine_forkchoiceUpdatedV1. Key Type Value headBlockHash Data, 32 Bytes Block hash of the head of the canonical chain. safeBlockHash Data, 32 Bytes \"Safe\" block hash of the canonical chain under certain synchrony and honesty assumptions. This value MUST be either equal to or an ancestor of headBlockHash. finalizedBlockHash Data, 32 Bytes Block hash of the most recent finalized block.","s":"Fork choice state object","u":"/public-networks/reference/engine-api/objects","h":"#fork-choice-state-object","p":1912},{"i":1919,"t":"Parameter for engine_forkchoiceUpdatedV1. Key Type Value timestamp Quantity, 64 Bits Value for the timestamp field of the new payload. prevRandao Data, 32 Bytes Value for the prevRandao field of the new payload. suggestedFeeRecipient Data, 20 Bytes Suggested value for the feeRecipient field of the new payload.","s":"Payload attributes object","u":"/public-networks/reference/engine-api/objects","h":"#payload-attributes-object","p":1912},{"i":1921,"t":"Returned by engine_newPayloadV1 and engine_forkchoiceUpdatedV1. Key Type Value status Enumeration Either \"VALID\", \"INVALID\", \"SYNCING\", \"ACCEPTED\", \"INVALID_BLOCK_HASH\", or \"INVALID_TERMINAL_BLOCK\". latestValidHash Data, 32 Bytes Hash of the most recent valid block in the branch defined by payload and its ancestors. validationError String Message providing additional details on the validation error if the payload is classified as INVALID, INVALID_BLOCK_HASH or INVALID_TERMINAL_BLOCK.","s":"Payload status object","u":"/public-networks/reference/engine-api/objects","h":"#payload-status-object","p":1912},{"i":1923,"t":"Parameter for and returned by engine_exchangeTransitionConfigurationV1. Key Type Value terminalTotalDifficulty Quantity, 256 Bits Maps on the TERMINAL_TOTAL_DIFFICULTY parameter of EIP-3675. terminalBlockHash Data, 32 Bytes Maps on the TERMINAL_BLOCK_HASH parameter of EIP-3675. terminalBlockNumber Quantity, 64 Bits Maps on the TERMINAL_BLOCK_NUMBER parameter of EIP-3675.","s":"Transition configuration object","u":"/public-networks/reference/engine-api/objects","h":"#transition-configuration-object","p":1912},{"i":1926,"t":"The following block explorers are compatible with Besu: BlockScout - See the project documentation for setup instructions. Chainlens Blockchain Explorer - See how to use Chainlens with privacy-enabled networks.","s":"Block explorers","u":"/public-networks/reference/projects-using-besu","h":"#block-explorers","p":1924},{"i":1928,"t":"The Besu genesis file contains network configuration items and genesis block parameters.","s":"Genesis file items","u":"/public-networks/reference/genesis-items","h":"","p":1927},{"i":1930,"t":"Network configuration items are specified in the genesis file in the config object. Item Description Milestone blocks Milestone blocks for the network. chainID Chain ID for the network. ethash Specifies network uses Ethash and contains fixeddifficulty. clique Specifies network uses Clique and contains Clique configuration items. ibft2 Specifies network uses IBFT 2.0 and contains IBFT 2.0 configuration items. qbft Specifies network uses QBFT and contains QBFT configuration items. transitions Specifies block at which to change IBFT 2.0 or QBFT validators. contractSizeLimit Maximum contract size in bytes. Specify in free gas networks. The default is 24576 and the maximum size is 2147483647. evmStackSize Maximum stack size. Specify to increase the maximum stack size in private networks with complex smart contracts. The default is 1024. ecCurve Specifies the elliptic curve to use. Default is secp256k1. discovery Specifies discovery configuration items. The discovery object can be left empty. zeroBaseFee Specifies a base fee of 0 for free gas networks. fixedBaseFee Specifies a constant base fee for blocks, overriding the dynamic base fee calculation of EIP-1559.","s":"Configuration items","u":"/public-networks/reference/genesis-items","h":"#configuration-items","p":1927},{"i":1932,"t":"The purpose of some genesis block parameters varies depending on the consensus protocol (Ethash, Clique, IBFT 2.0, or QBFT). These parameters include: difficulty. extraData. mixHash. The following table describes the genesis block parameters with the same purpose across all consensus protocols. Item Description coinbase Address to pay mining rewards to. Can be any value in the genesis block (commonly set to 0x0000000000000000000000000000000000000000). gasLimit Block gas limit. Total gas limit for all transactions in a block. nonce Used in block computation. Can be any value in the genesis block (commonly set to 0x0). timestamp Creation date and time of the block. Must be before the next block so we recommend specifying 0x0 in the genesis file. alloc Defines accounts with balances or contracts. caution If a Supplied genesis block does not match stored chain data error occurs, use the genesis file matching the genesis block of the data directory, or use the --data-path option to specify a different data directory.","s":"Genesis block parameters","u":"/public-networks/reference/genesis-items","h":"#genesis-block-parameters","p":1927},{"i":1934,"t":"In public networks, the milestone blocks specify the blocks at which the network changed protocol. See a full list of Ethereum protocol releases and their corresponding milestone blocks. Ethereum Mainnet milestone blocks { \"config\": { ... \"homesteadBlock\": 1150000, \"daoForkBlock\": 1920000, \"daoForkSupport\": true, \"eip150Block\": 2463000, \"eip150Hash\": \"0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0\", \"eip155Block\": 2675000, \"eip158Block\": 2675000, \"byzantiumBlock\": 4370000, \"constantinopleBlock\": 7280000, \"constantinopleFixBlock\": 7280000, \"muirGlacierBlock\": 9200000, \"berlinBlock\": 12244000, \"londonBlock\": 12965000, \"arrowGlacierBlock\": 13773000, \"grayGlacierBlock\": 15050000, ... }, } caution Ensure you include a milestone far enough in advance in the genesis file. Not doing so can lead to unexpected and inconsistent behavior without specific errors. In private networks, the milestone block defines the protocol version for the network. Private network milestone block { \"config\": { ... \"berlinBlock\": 0, ... }, } note In private networks, we recommend specifying the latest milestone block. It's implied this includes the preceding milestones. This ensures you use the most up-to-date protocol and have access to the most recent opcodes.","s":"Milestone blocks","u":"/public-networks/reference/genesis-items","h":"#milestone-blocks","p":1927},{"i":1936,"t":"Use fixeddifficulty to specify a fixed difficulty in private networks using Ethash. This will keep the network's difficulty constant and override the difficulty parameter from the genesis file. { \"config\": { ... \"ethash\": { \"fixeddifficulty\": 1000 }, }, ... } tip Using fixeddifficulty is not recommended for use with Ethash outside of test environments. For production networks using Ethash, we recommend setting a low difficulty value in the genesis file instead. Ethash will adjust the difficulty of the network based on hashrate to produce blocks at the targeted frequency.","s":"Fixed difficulty","u":"/public-networks/reference/genesis-items","h":"#fixed-difficulty","p":1927},{"i":1938,"t":"Use the discovery configuration items to specify the bootnodes and discovery-dns-url in the genesis file, in place of using CLI options or listing them in the configuration file. If either CLI option is used, it takes precedence over the genesis file. Anything listed in the configuration file also takes precedence. { \"config\": { \"discovery\": { \"bootnodes\": [ \"enode://c35c3...d615f@1.2.3.4:30303\", \"enode://f42c13...fc456@1.2.3.5:30303\" ], \"dns\": \"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org\" } } }","s":"Discovery configuration items","u":"/public-networks/reference/genesis-items","h":"#discovery-configuration-items","p":1927},{"i":1940,"t":"This reference describes options and subcommands for the EVM tool. note Option names that include trace, such as --trace and --trace.[no]memory exist to support t8ntool reference testing, and are interchangeable with their standard option names.","s":"EVM tool reference","u":"/public-networks/reference/evm-tool","h":"","p":1939},{"i":1943,"t":"Syntax Example --code= --code=5B600080808060045AFA50600056 The code to be executed, in compiled hex code form. Execution fails if this is not set.","s":"code","u":"/public-networks/reference/evm-tool","h":"#code","p":1939},{"i":1945,"t":"Syntax Example --gas= --gas=100000000 Amount of gas to make available to the EVM. The default is 10 billion, a number unlikely to be seen in any production blockchain.","s":"gas","u":"/public-networks/reference/evm-tool","h":"#gas","p":1939},{"i":1947,"t":"Syntax Example --price= --price=10 Price of gas in Gwei. The default is 0. If set to a non-zero value, the sender account must have enough value to cover the gas fees.","s":"price","u":"/public-networks/reference/evm-tool","h":"#price","p":1939},{"i":1949,"t":"Syntax Example --sender=
    --sender=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 The account the invocation is sent from. The specified account must exist in the world state, which, unless specified by --genesis, is the set of accounts used for testing.","s":"sender","u":"/public-networks/reference/evm-tool","h":"#sender","p":1939},{"i":1951,"t":"Syntax Example --receiver=
    --receiver=0x588108d3eab34e94484d7cda5a1d31804ca96fe7 The account the invocation is sent to. The specified account does not need to exist.","s":"receiver","u":"/public-networks/reference/evm-tool","h":"#receiver","p":1939},{"i":1953,"t":"Syntax Example --input= --input=9064129300000000000000000000000000000000000000000000000000000000 The data passed into the call. Corresponds to the data field of the transaction and is returned by the CALLDATA and related opcodes.","s":"input","u":"/public-networks/reference/evm-tool","h":"#input","p":1939},{"i":1955,"t":"Syntax Example --value= --value=1000000000000000000 The value, in wei, attached to this transaction. For operations that query the value or transfer it to other accounts this is the amount that is available. The amount is not reduced to cover intrinsic cost and gas fees.","s":"value","u":"/public-networks/reference/evm-tool","h":"#value","p":1939},{"i":1957,"t":"Syntax --json Provides an operation-by-operation trace of the command in JSON. --trace is an alias for --json.","s":"json, trace","u":"/public-networks/reference/evm-tool","h":"#json-trace","p":1939},{"i":1959,"t":"Syntax --json-alloc Outputs a JSON summary of the post-execution world state and allocations.","s":"json-alloc","u":"/public-networks/reference/evm-tool","h":"#json-alloc","p":1939},{"i":1961,"t":"Syntax --nomemory, --memory Setting --nomemory disables tracing the memory output for each operation. Setting --memory enables it. Memory traces are disabled by default. For memory heavy scripts, disabling memory traces may reduce the volume of JSON output. --trace.[no]memory is an alias for --[no]memory.","s":"[no]memory, trace.[no]memory","u":"/public-networks/reference/evm-tool","h":"#nomemory-tracenomemory","p":1939},{"i":1963,"t":"Syntax --trace.nostack, --trace.stack Setting --trace.nostack disables tracing the operand stack for each operation. Setting --trace.stack enables it. Stack traces are enabled by default.","s":"trace.[no]stack","u":"/public-networks/reference/evm-tool","h":"#tracenostack","p":1939},{"i":1965,"t":"Syntax --trace.noreturndata, --trace.returndata Setting --trace.noreturndata disables tracing the return data for each operation. Setting --trace.returndata enables it. Return data traces are enabled by default.","s":"trace.[no]returndata","u":"/public-networks/reference/evm-tool","h":"#tracenoreturndata","p":1939},{"i":1967,"t":"Syntax --notime, --time Setting --notime disables including time data in the summary output. Setting --time enables it. This is useful for testing and differential evaluations.","s":"[no]time","u":"/public-networks/reference/evm-tool","h":"#notime","p":1939},{"i":1969,"t":"Syntax Example --genesis= --genesis=/opt/besu/genesis.json The Besu genesis file to use when evaluating the EVM. Most useful are the alloc items that set up accounts and their stored memory states. --prestate is a deprecated alias for --genesis.","s":"genesis","u":"/public-networks/reference/evm-tool","h":"#genesis","p":1939},{"i":1971,"t":"Syntax Example --chain= --chain=holesky The well-known network genesis file to use when evaluating the EVM. These values are an alternative to the --genesis option for well-known networks.","s":"chain","u":"/public-networks/reference/evm-tool","h":"#chain","p":1939},{"i":1973,"t":"Syntax Example --repeat= --repeat=1000 Number of times to repeat the contract before gathering timing information. This is useful when benchmarking EVM operations. The default is 0.","s":"repeat","u":"/public-networks/reference/evm-tool","h":"#repeat","p":1939},{"i":1975,"t":"Syntax --revert-reason-enabled Enables tracing the reason included in REVERT operations. The revert reason is enabled by default.","s":"revert-reason-enabled","u":"/public-networks/reference/evm-tool","h":"#revert-reason-enabled","p":1939},{"i":1977,"t":"Syntax Example --fork= --fork=FutureEips Specific fork to evaluate, overriding network settings.","s":"fork","u":"/public-networks/reference/evm-tool","h":"#fork","p":1939},{"i":1979,"t":"Syntax Example --key-value-storage= --key-value-storage=rocksdb Kind of key value storage to use. It might be useful to execute isolated EVM calls in the context of an actual world state. The default is memory, which executes the call only in the context of the world provided by --genesis or --chain at block zero. When set to rocksdb and combined with --data-path, --block-number, and --genesis, a Besu node that isn't currently running can be used to provide the appropriate world state for a transaction. This is useful when evaluating consensus failures.","s":"key-value-storage","u":"/public-networks/reference/evm-tool","h":"#key-value-storage","p":1939},{"i":1981,"t":"Syntax Example --data-path= --data-path=/opt/besu/data When --key-value-storage is set to rocksdb, specifies the location of the database on disk.","s":"data-path","u":"/public-networks/reference/evm-tool","h":"#data-path","p":1939},{"i":1983,"t":"Syntax Example --block-number= --block-number=10000000 The block number to evaluate the code against. Used to ensure that the EVM is evaluating the code against the correct fork, or to specify the world state when --key-value-storage is set to rocksdb.","s":"block-number","u":"/public-networks/reference/evm-tool","h":"#block-number","p":1939},{"i":1985,"t":"Syntax --version Displays the version information. -v is an alias for --version.","s":"version","u":"/public-networks/reference/evm-tool","h":"#version","p":1939},{"i":1987,"t":"caution The following subcommands are used for testing code bases and not meant for typical user interactions.","s":"Subcommands","u":"/public-networks/reference/evm-tool","h":"#subcommands","p":1939},{"i":1989,"t":"Syntax Example evmtool code-validate --file= evmtool code-validate --file=eof.txt Allows Ethereum object formatted (EOF) code to be validated. You can specify a file containing one or more EOF containers or EVM bytecode using the --file option. Each line in the file is considered a separate program. Use command arguments​ If you use command arguments, each argument is considered a separate program. If a code segment includes spaces, it must be contained in quotes. Docker example Example docker run --rm hyperledger/besu-evmtool:develop code-validate \"0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1\" 0xef0002 0xef00010100040200010001030000000000000000 evmtool code-validate \"0xef0001 010008 020002-0007-0002 030000 00 00000002-02010002 59-59-b00001-50-b1 03-b1\" 0xef0002 0xef00010100040200010001030000000000000000 Use standard input​ If no reference tests are passed in using the command line, the EVM tool loads and validates code from standard input. Each line is considered a separate program. Comment lines and blanks are ignored.","s":"code-validate","u":"/public-networks/reference/evm-tool","h":"#code-validate","p":1939},{"i":1991,"t":"Allows the Ethereum state tests to be evaluated. Run evmtool state-test --help for the full list of supported options. Notable options are --json and --nomemory. Set --json for EVM Lab Fuzzing. Whether or not --json is set, a summary JSON object is printed to standard output for each state test executed. Use command arguments​ If you use command arguments, you can list one or more state tests. All the state tests are evaluated in the order they are specified. Docker example CLI example docker run --rm -v ${PWD}:/opt/referencetests hyperledger/besu-evmtool:develop --json state-test /opt/referencetests/GeneralStateTests/stExample/add11.json evmtool --json state-test stExample/add11.json Use standard input​ If no reference tests are passed in using the command line, the EVM tool loads one complete JSON object from standard input and executes that state test. Docker example CLI example docker run --rm -i hyperledger/besu-evmtool:develop --json state-test < stExample/add11.json evmtool --json state-test < stExample/add11.json","s":"state-test","u":"/public-networks/reference/evm-tool","h":"#state-test","p":1939},{"i":1993,"t":"Allows the Ethereum state transition and blockchain tests to be evaluated. See the transition tool reference and Execution Spec Tests for more information about this subcommand.","s":"transition, t8n, t8n-server","u":"/public-networks/reference/evm-tool","h":"#transition-t8n-t8n-server","p":1939},{"i":1995,"t":"When tracing transactions, the trace type options are trace, vmTrace, and stateDiff.","s":"Transaction trace types","u":"/public-networks/reference/trace-types","h":"","p":1994},{"i":1997,"t":"An ordered list of calls to other contracts, excluding precompiled contracts. trace example \"trace\":[ { \"action\":{ \"callType\":\"call\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0xffadea\", \"input\":\"0x\", \"to\":\"0x0100000000000000000000000000000000000000\", \"value\":\"0x0\" }, \"result\":{ \"gasUsed\":\"0x1e\", \"output\":\"0x\" }, \"subtraces\":0, \"traceAddress\":[ ], \"type\":\"call\" } ] Key Value action Transaction details. callType Whether the transaction is call or create. from Address of the transaction sender. gas Gas provided by sender. input Transaction data. to Target of the transaction. value Value transferred in the transaction. result Transaction result. gasUsed Gas used by the transaction. Includes any refunds of unused gas. output Return value of the contract call. Contains only the actual value sent by a RETURN operation. If a RETURN was not executed, the output is empty bytes. subTraces Traces of contract calls made by the transaction. traceAddress Tree list address of where the call occurred, address of the parents, and order of the current sub call. type Whether the transaction is a CALL or CREATE series operation.","s":"trace","u":"/public-networks/reference/trace-types","h":"#trace","p":1994},{"i":1999,"t":"An ordered list of EVM actions when processing the transaction. vmTrace only reports actual data returned from a RETURN opcode and does not return the contents of the reserved output space for the call operations. As a result: vmTrace reports null when a call operation ends because of a STOP, HALT, REVERT, running out of instructions, or any exceptional halts. When a RETURN operation returns data of a different length to the space reserved by the call, vmTrace reports only the data passed to the RETURN operation and does not include pre-existing memory data or trim the returned data. For out of gas operations, vmTrace reports the operation that caused the out of gas exception, including the calculated gas cost. vmTrace does not report ex values because the operation is not executed. vmTrace example \"vmTrace\":{ \"code\":\"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851\", \"ops\":[ { \"cost\":3, \"ex\":{ \"mem\":null, \"push\":[ \"0x8\" ], \"store\":null, \"used\":16756175 }, \"pc\":72, \"sub\":null }, ... ] } Key Value code Code executed by the EVM. ops Sequence of EVM operations (opcodes) executed in the transaction. cost Gas cost of the opcode. Includes memory expansion costs but not gas refunds. For precompiled contract calls, reports only the actual cost. ex Executed operations. mem Memory read or written by the operation. push Adjusted stack items. For swap, includes all intermediate values and the result. Otherwise, is the value pushed onto the stack. store Account storage written by the operation. used Remaining gas taking into account the all but 1/64th rule for calls. pc Program counter. sub Sub call operations.","s":"vmTrace","u":"/public-networks/reference/trace-types","h":"#vmtrace","p":1994},{"i":2001,"t":"State changes in the requested block for each transaction represented as a map of accounts to an object. Besu lists the balance, code, nonce, and storage changes from immediately before the transaction to after the transaction. For the key:value pairs: + indicates the field didn’t exist before and now has the specified value - indicates a deleted value * has a from and a to value. An absent value is distinct from zero when creating accounts or clearing storage. stateDiff example \"stateDiff\":{ \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\":{ \"balance\":{ \"*\":{ \"from\":\"0xffffffffffffffffffffffffffffffffc3e12a20b\", \"to\":\"0xffffffffffffffffffffffffffffffffc3dc5f091\" } }, \"code\":\"=\", \"nonce\":{ \"*\":{ \"from\":\"0x14\", \"to\":\"0x15\" } }, \"storage\":{ } } } Key Value balance Change of balance event. balance.from Balance before the transaction. balance.to Balance after the transaction. code Changes to code. None in this example. nonce Change of nonce. nonce.from Nonce before the transaction. nonce.to Nonce after the transaction. storage Changes to storage. None in this example.","s":"stateDiff","u":"/public-networks/reference/trace-types","h":"#statediff","p":1994},{"i":2003,"t":"The trace options trace, vmTrace, and stateDiff are available for the following ad-hoc tracing API methods: trace_call trace_callMany trace_rawTransaction trace_replayBlockTransactions Only the trace option is available for the following transaction-trace filtering API methods: trace_block trace_filter trace_get trace_transaction","s":"Applicable API methods","u":"/public-networks/reference/trace-types","h":"#applicable-api-methods","p":1994},{"i":2005,"t":"Run Besu as an execution client and Teku as a consensus client on Ethereum Mainnet.","s":"Run Besu and Teku on Mainnet","u":"/public-networks/tutorials/besu-teku-mainnet","h":"","p":2004},{"i":2007,"t":"Install Besu and Teku. Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions. Ensure you meet the system requirements for Besu on public networks.","s":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#1-install-besu-and-teku","p":2004},{"i":2009,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#2-generate-the-shared-secret","p":2004},{"i":2011,"t":"If you're running Teku as a beacon node only, skip to the next step. If you're also running Teku as a validator client, have a funded Ethereum address ready (32 ETH and gas fees for each validator). Generate validator keys and stake your ETH for one or more validators using the Staking Launchpad. info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#3-generate-validator-keys","p":2004},{"i":2013,"t":"Run the following command or specify the options in a configuration file: besu \\ --sync-mode=SNAP \\ --data-storage-format=BONSAI \\ --rpc-http-enabled=true \\ --p2p-host= \\ --host-allowlist=,127.0.0.1,localhost \\ --engine-host-allowlist=,127.0.0.1,localhost \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify: The path to the jwtsecret.hex file generated in step 2 using the --engine-jwt-secret option. The public IP address of your Besu node using the --host-allowlist and --engine-host-allowlist options. Also, in the command: --sync-mode specifies using snap sync. --data-storage-format specifies using Bonsai Tries. --rpc-http-enabled enables the HTTP JSON-RPC service. --engine-rpc-enabled enables the Engine API. You can modify the option values and add other command line options as needed.","s":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#4-start-besu","p":2004},{"i":2015,"t":"Open a new terminal window.","s":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#5-start-teku","p":2004},{"i":2017,"t":"To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the Teku configuration file: teku \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. Also, in the command: --ee-endpoint is set to the default URL of Besu's Engine API. --metrics-enabled enables Teku's metrics exporter. --rest-api-enabled enables Teku's REST API service. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node only","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-only","p":2004},{"i":2019,"t":"To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the Teku configuration file: teku \\ --ee-endpoint http://localhost:8551 \\ --ee-jwt-secret-file \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --checkpoint-sync-url= \\ --validators-proposer-default-fee-recipient= \\ --validator-keys=:[,:,...] Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. An Ethereum address you own as the default fee recipient using the --validators-proposer-default-fee-recipient option. The paths to the keystore .json file and password .txt file created in step 3 for each validator using the --validator-keys option. Separate the .json and .txt files with a colon, and separate entries for multiple validators with commas. Also, in the command: --ee-endpoint is set to the default URL of Besu's Engine API. --metrics-enabled enables Teku's metrics exporter. --rest-api-enabled enables Teku's REST API service. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#beacon-node-and-validator-client","p":2004},{"i":2021,"t":"After starting Besu and Teku, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#6-wait-for-besu-and-teku-to-sync","p":2004},{"i":2023,"t":"Stake your ETH for one or more validators using the Staking Launchpad. You can check your validator status by searching your Ethereum address on the Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-mainnet","h":"#7-stake-eth","p":2004},{"i":2025,"t":"Run Besu as an execution client and Teku as a consensus client on the Holesky and Sepolia Ethereum testnets. note Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. You can connect your consensus client using the beacon node only, without any validator duties.","s":"Run Besu and Teku on a testnet","u":"/public-networks/tutorials/besu-teku-testnet","h":"","p":2024},{"i":2027,"t":"Install Besu and Teku. Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 21+ if using the Besu and Teku binary distributions. Ensure you meet the system requirements for Besu on public networks.","s":"1. Install Besu and Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#1-install-besu-and-teku","p":2024},{"i":2029,"t":"Run the following command: openssl rand -hex 32 | tr -d \"\\n\" > jwtsecret.hex You will specify jwtsecret.hex when starting Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the Engine API.","s":"2. Generate the shared secret","u":"/public-networks/tutorials/besu-teku-testnet","h":"#2-generate-the-shared-secret","p":2024},{"i":2031,"t":"If you're running Teku as a beacon node only, skip to the next step. If you're also running Teku as a validator client, create a test Ethereum address (you can do this in MetaMask). Fund this address with testnet ETH (32 ETH and gas fees for each validator) using a faucet. See the list of Holesky faucets and Sepolia faucets. note If you can't get ETH using the faucet, you can ask for help on the EthStaker Discord. Generate validator keys for one or more validators using the Holesky Staking Launchpad (or request to become validator on Sepolia). info Save the password you use to generate each key pair in a .txt file. You should also have a .json file for each validator key pair.","s":"3. Generate validator keys","u":"/public-networks/tutorials/besu-teku-testnet","h":"#3-generate-validator-keys","p":2024},{"i":2033,"t":"Run the following command or specify the options in a configuration file: Holesky Sepolia besu \\ --network=holesky \\ --rpc-http-enabled=true \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --p2p-host= \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= besu \\ --network=sepolia \\ --rpc-http-enabled=true \\ --rpc-http-cors-origins=\"*\" \\ --rpc-ws-enabled=true \\ --p2p-host= \\ --host-allowlist=\"*\" \\ --engine-host-allowlist=\"*\" \\ --engine-rpc-enabled \\ --engine-jwt-secret= Specify the path to the jwtsecret.hex file generated in step 2 using the --engine-jwt-secret option. You can modify the option values and add other command line options as needed.","s":"4. Start Besu","u":"/public-networks/tutorials/besu-teku-testnet","h":"#4-start-besu","p":2024},{"i":2035,"t":"Open a new terminal window.","s":"5. Start Teku","u":"/public-networks/tutorials/besu-teku-testnet","h":"#5-start-teku","p":2024},{"i":2037,"t":"To run Teku as a beacon node only (without validator duties), run the following command or specify the options in the Teku configuration file: Holesky Sepolia teku \\ --network=holesky \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= teku \\ --network=sepolia \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node only","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-only","p":2024},{"i":2039,"t":"To run Teku as a beacon node and validator in a single process, run the following command or specify the options in the Teku configuration file: Holesky Sepolia teku \\ --network=holesky \\ --ee-endpoint=http://localhost:8551 \\ --ee-jwt-secret-file= \\ --metrics-enabled=true \\ --rest-api-enabled=true \\ --p2p-advertised-ip= \\ --checkpoint-sync-url= \\ --validators-proposer-default-fee-recipient= \\ --validator-keys=:[,:,...] Sepolia is a permissioned network and you can't run a validator client on it without requesting to become a validator first. Specify: The path to the jwtsecret.hex file generated in step 2 using the --ee-jwt-secret-file option. The public IP address of your Teku node using the --p2p-advertised-ip option. The URL of a checkpoint sync endpoint using the --checkpoint-sync-url option. The test Ethereum address created in step 3 as the default fee recipient using the --validators-proposer-default-fee-recipient option. The paths to the keystore .json file and password .txt file created in step 3 for each validator using the --validator-keys option. Separate the .json and .txt files with a colon, and separate entries for multiple validators with commas. You can modify the option values and add other Teku command line options as needed.","s":"Beacon node and validator client","u":"/public-networks/tutorials/besu-teku-testnet","h":"#beacon-node-and-validator-client","p":2024},{"i":2041,"t":"After starting Besu and Teku, your node starts syncing and connecting to peers. Besu logs Teku logs {\"@timestamp\":\"2023-02-03T04:43:49,555\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"DefaultSynchronizer\",\"message\":\"Starting synchronizer.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,556\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"FastSyncDownloader\",\"message\":\"Starting sync\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:49,559\",\"level\":\"INFO\",\"thread\":\"main\",\"class\":\"Runner\",\"message\":\"Ethereum main loop is up.\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:43:53,106\",\"level\":\"INFO\",\"thread\":\"Timer-0\",\"class\":\"DNSResolver\",\"message\":\"Resolved 2409 nodes\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:45:04,803\",\"level\":\"INFO\",\"thread\":\"nioEventLoopGroup-3-10\",\"class\":\"SnapWorldStateDownloader\",\"message\":\"Downloading world state from peers for pivot block 16545859 (0x616ae3c4cf85f95a9bce2814a7282d75dc2eac36 cb9f0fcc6f16386df70da3c5). State root 0xa7114541f42c62a72c8b6bb9901c2ccf4b424cd7f76570a67b82a183b02f25dc pending requests 0\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:46:04,834\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.08%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:48:01,840\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.23%, Peer count: 8\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:49:09,931\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.41%, Peer count: 11\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:50:12,466\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.61%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:20,977\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-3 (batchPersistAccountData)\",\"class\":\"SnapsyncMetricsManager\",\"message\":\"Worldstate download progress: 0.75%, Peer count: 10\",\"throwable\":\"\"} {\"@timestamp\":\"2023-02-03T04:51:28,985\",\"level\":\"INFO\",\"thread\":\"EthScheduler-Services-29 (importBlock)\",\"class\":\"FastImportBlocksStep\",\"message\":\"Block import progress: 180400 of 16545859 (1%)\",\"throwable\":\"\"} 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 2022-03-21 20:43:48.327 INFO - Syncing *** Target slot: 76094, Head slot: 3080, Remaining slots: 73014, Connected peers: 8 2022-03-21 20:44:00.339 INFO - Syncing *** Target slot: 76095, Head slot: 3317, Remaining slots: 72778, Connected peers: 6 2022-03-21 20:44:12.353 INFO - Syncing *** Target slot: 76096, Head slot: 3519, Remaining slots: 72577, Connected peers: 9 If you're running Teku as a beacon node only, you're all set. If you're also running Teku as a validator client, ensure Besu and Teku are fully synced before submitting your staking deposit in the next step. Syncing Besu can take several days.","s":"6. Wait for Besu and Teku to sync","u":"/public-networks/tutorials/besu-teku-testnet","h":"#6-wait-for-besu-and-teku-to-sync","p":2024},{"i":2043,"t":"Stake your testnet ETH for one or more validators using the Holesky Staking Launchpad. You can check your validator status by searching your Ethereum address on the Holesky Beacon Chain explorer. It may take up to multiple days for your validator to be activated and start proposing blocks.","s":"7. Stake ETH","u":"/public-networks/tutorials/besu-teku-testnet","h":"#7-stake-eth","p":2024},{"i":2045,"t":"You can use a cloud provider such as Amazon Elastic Kubernetes Service (EKS) or Azure Kubernetes Service (AKS) to deploy a Besu public node This tutorial walks you through adding an extra node group to your Besu pod.","s":"Deploy a Besu public node using Kubernetes","u":"/public-networks/tutorials/kubernetes","h":"","p":2044},{"i":2048,"t":"Set up a Kubernetes cluster using a managed Kubernetes service such as Amazon EKS.","s":"Prerequisites","u":"/public-networks/tutorials/kubernetes","h":"#prerequisites","p":2044},{"i":2050,"t":"1. Create a security group for discovery​ Create a security group in your VPC that allows traffic from anywhere on ports 30303 and 9000 (or equivalent ports that you are using for discovery). Outbound rules​ Type Protocol Port range Destination All traffic All All 0.0.0.0/0 All traffic All All ::/0 Inbound rules​ Type Protocol Port range Destination Description Custom UDP UDP 9000 0.0.0.0/0 CL client Custom TCP TCP 9000 0.0.0.0/0 CL client Custom UDP UDP 30303 0.0.0.0/0 EL client Custom TCP TCP 30303 0.0.0.0/0 EL client important The key here is to allow traffic on both TCP and UDP for the consensus layer client and the execution layer client. 2. Add a node group to your cluster​ In your VPC settings, enable Auto-assign public IPv4 address on the public subnets on which you spin up your nodes. This allows you to isolate your Besu node on a public subnet and separate it from the other apps and node groups you might have running. If you are using EKSCTL, add the following snippet to your setup: managedNodeGroups: - name: ng-ethereum instanceType: m6a.xlarge desiredCapacity: 1 # Increase this capacity if you need more nodes. subnets: - public-subnet-id1 - public-subnet-id2 - public-subnet-id3 labels: { \"ng\": \"ethereum\" } securityGroups: attachIDs: [\"sg-1234...\"] # The ID of the security group from the previous step. iam: withAddonPolicies: ebs: true # efs: true taints: - key: ethereum value: \"true\" effect: NoSchedule - key: ethereum value: \"true\" effect: NoExecute If you are using Terraform, use something like the following for your new node pool: ng-ethereum = { desired_size = 1 subnet_ids = module.vpc.public_subnets # Only public subnets here. vpc_security_group_ids = [ sg-1234 ] # The ID of the security group from the previous step. instance_types = [\"m6a.xlarge\"] iam_role_name = \"${local.name}-eks-ng-ethereum-role\" taints = [ { key = \"ethereum\" value = \"true\" effect = \"NO_SCHEDULE\" }, { key = \"ethereum\" value = \"true\" effect = \"NO_EXECUTE\" } ] labels = { workloadType = \"ethereum\" } ... 3. Install the EBS or EFS drivers​ We recommend using EBS or NvME storage for your chain data. For most cases, the EBS drivers or EFS drivers are sufficient. However, if you are using instance stores, use the Local Storage Static Provisioner instead. 4. Set up the pod​ Now that the infrastructure is set up, use hostNetworking to bind your pod to the host and use the host node's public IP for your Besu node. First, add the following snippet to your StatefulSet: template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... Next, add an init container and a shared volume to store the public IP. The init container init runs and gets the public IP of the host using the AWS metadata service and saves it to a local shared volume besu-pip (between the init container and the Besu pod). template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... initContainers: - name: init image: alpine/curl:8.5.0 volumeMounts: - name: pip mountPath: /pip - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: /data securityContext: runAsUser: 0 command: - /bin/bash - -xec - | # Get the existing public IP to associate with. PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip) # Store the public IP in a local file to be used by the container. echo -ne \"$PUBLIC_IP_TO_ASSOCIATE\" > /pip/ip # Create the JWT key. openssl rand -hex 32 | tr -d \"\\n\" > /jwt/jwtSecret.hex # Update permissions on the data volume (if needed). chown -R 1000:1000 /data containers: ... volumes: - name: pip emptyDir: {} - name: jwt emptyDir: {} - name: besu-data persistentVolumeClaim: claimName: besu-pvc - name: teku-data persistentVolumeClaim: claimName: teku-pvc When you start Besu up in the pod, use the text file in pip as your p2p-host, which allows traffic in and out as normal. template: metadata: labels: ... spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet affinity: ... initContainers: - name: init image: alpine/curl:8.5.0 volumeMounts: - name: pip mountPath: /pip - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: /data securityContext: runAsUser: 0 command: - /bin/bash - -xec - | # Get the existing public IP to associate with. PUBLIC_IP_TO_ASSOCIATE=$(curl http://ifconfig.me/ip) # Store the public IP in a local file to be used by the container. echo -ne \"$PUBLIC_IP_TO_ASSOCIATE\" > /pip/ip # Create the JWT key. openssl rand -hex 32 | tr -d \"\\n\" > /jwt/jwtSecret.hex # Update permissions on the data volume (if needed). chown -R 1000:1000 /data containers: - name: besu image: hyperledger/besu:latest volumeMounts: - name: pip mountPath: /pip readOnly: true - name: shared-jwt mountPath: /jwt - name: besu-data mountPath: {{ .Values.settings.dataPath }} ports: - name: elc-rpc containerPort: 8545 protocol: TCP - name: elc-ws containerPort: 8546 protocol: TCP - name: elc-rlpx containerPort: 30303 protocol: TCP - name: elc-discovery containerPort: 30303 protocol: UDP - name: elc-metrics containerPort: 8545 protocol: TCP - name: elc-engine containerPort: 8551 protocol: TCP command: - /bin/sh - -c args: - | pip=$(cat /pip/ip) /opt/besu/bin/besu \\ --p2p-host=${pip} \\ ... - name: teku image: consensys/teku:develop ... volumes: - name: pip emptyDir: {} - name: jwt emptyDir: {} - name: besu-data persistentVolumeClaim: claimName: besu-pvc - name: teku-data persistentVolumeClaim: claimName: teku-pvc","s":"Steps","u":"/public-networks/tutorials/kubernetes","h":"#steps","p":2044},{"i":2052,"t":"The process for Azure is much the same as that of AWS with a couple of differences. 1. Create a Network Security Group (NSG)​ Create a NSG with ports 30303 and 9000 (or equivalent) open for TCP and UDP. Bind this NSG with the subnet you've designated for your Ethereum nodes to ensure that nodes initiated within this subnet will automatically inherit these security rules. 2. Add a node pool to your cluster​ In Azure all machines get allocated a public IP by default but you need to turn this on for your new node pool. If you are using Terraform, use something like the following for your new node pool: node_pools = { ... ethereum = { name = \"ethereum\" vm_size = \"Standard_D8as_v5\" vnet_subnet_id = lookup(module.vnet.vnet_subnets_name_id, \"subnet-....\") # The ID of the security group from the previous step. os_disk_size_gb = 100 min_count = 1 max_count = 10 enable_auto_scaling = true enable_node_public_ip = true # This flag lets every node keep its public ip enable_host_encryption = true node_taints = [\"ethereum=true:NoSchedule\", \"ethereum=true:NoExecute\"] node_labels = { \"workloadType\" = \"ethereum\" } } ... } 3. Use Azure StorageClasses to suit your needs​ We recommend using either Azure Disk or Azure Files to store your chain data using the CSI storage drivers. If you are using a Terraform to provision your cluster e.g. terraform-azurerm-aks the CSI drivers are provisioned automatically for you.","s":"Azure AKS","u":"/public-networks/tutorials/kubernetes","h":"#azure-aks","p":2044},{"i":2054,"t":"This reference describes the syntax of the Besu configuration options. info This reference contains options that apply to both public and private networks. For private-network-specific options, see the private network options reference.","s":"Options","u":"/public-networks/reference/cli/options","h":"","p":2053},{"i":2056,"t":"You can specify Besu options: On the command line. besu [OPTIONS] [SUBCOMMAND] As an environment variable. For each command line option, the equivalent environment variable is: Uppercase. _ replaces -. Has a BESU_ prefix. For example, set --miner-coinbase using the BESU_MINER_COINBASE environment variable. In a configuration file. If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file. If using Bash or Z shell, you can view option suggestions by entering -- and pressing the Tab key twice. besu --Tab+Tab caution Characters such as smart quotes and long (em) hyphens don't work in Besu command line options. Ensure quotes aren't automatically converted to smart quotes, or double hyphens combined into em hyphens.","s":"Specify options","u":"/public-networks/reference/cli/options","h":"#specify-options","p":2053},{"i":2058,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-blocks= --api-gas-price-blocks=50 BESU_API_GAS_PRICE_BLOCKS=50 api-gas-price-blocks=50 Number of blocks back from the head block to examine for eth_gasPrice. The default is 100.","s":"api-gas-price-blocks","u":"/public-networks/reference/cli/options","h":"#api-gas-price-blocks","p":2053},{"i":2060,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-max= --api-gas-price-max=20000 BESU_API_GAS_PRICE_MAX=20000 api-gas-price-max=20000 Maximum gas price to return for eth_gasPrice, regardless of the percentile value measured. The default is 500000000000 (500 GWei).","s":"api-gas-price-max","u":"/public-networks/reference/cli/options","h":"#api-gas-price-max","p":2053},{"i":2062,"t":"Syntax Example Environment variable Example configuration file --api-gas-price-percentile= --api-gas-price-percentile=75 BESU_API_GAS_PRICE_PERCENTILE=75 api-gas-price-percentile=75 Percentile value to measure for eth_gasPrice. The default is 50.0. For eth_gasPrice, to return the: Highest gas price in --api-gas-price-blocks, set to 100. Lowest gas price in --api-gas-price-blocks, set to 0.","s":"api-gas-price-percentile","u":"/public-networks/reference/cli/options","h":"#api-gas-price-percentile","p":2053},{"i":2064,"t":"Syntax Example Environment variable Example configuration file --auto-log-bloom-caching-enabled[=] --auto-log-bloom-caching-enabled=false BESU_AUTO_LOG_BLOOM_CACHING_ENABLED=false auto-log-bloom-caching-enabled=false Enables or disables automatic log bloom caching. APIs such as eth_getLogs and eth_getFilterLogs use the cache for improved performance. The default is true. If automatic log bloom caching is enabled and a log bloom query reaches the end of the cache, Besu performs an uncached query for logs not yet written to the cache. Automatic log bloom caching has a small impact on performance. If you are not querying logs blooms for a large number of blocks, you might want to disable automatic log bloom caching.","s":"auto-log-bloom-caching-enabled","u":"/public-networks/reference/cli/options","h":"#auto-log-bloom-caching-enabled","p":2053},{"i":2066,"t":"Syntax Example Environment variable Configuration file --banned-node-ids=[,...]... --banned-node-ids=0xc35c3...d615f,0xf42c13...fc456 BESU_BANNED_NODE_IDS=0xc35c3...d615f,0xf42c13...fc456 banned-node-ids=[\"0xc35c3...d615f\",\"0xf42c13...fc456\"] A list of node IDs with which this node will not peer. The node ID is the public key of the node. You can specify the banned node IDs with or without the 0x prefix. tip The singular --banned-node-id and plural --banned-node-ids are available and are two names for the same option.","s":"banned-node-ids","u":"/public-networks/reference/cli/options","h":"#banned-node-ids","p":2053},{"i":2068,"t":"Syntax Example Environment variable Example configuration file --block-txs-selection-max-time= --block-txs-selection-max-time=1700 BESU_BLOCK_TXS_SELECTION_MAX_TIME=1700 block-txs-selection-max-time=1700 The maximum time, in milliseconds, that can be spent selecting transactions to be included in a block. This value must be less than or equal to the default, 5000. note This option only applies to proof-of-stake and proof-of-work networks. For proof-of-authority networks, see --poa-block-txs-selection-max-time.","s":"block-txs-selection-max-time","u":"/public-networks/reference/cli/options","h":"#block-txs-selection-max-time","p":2053},{"i":2070,"t":"Syntax Example Environment variable Example configuration file --bonsai-historical-block-limit= --bonsai-historical-block-limit=256 BESU_BONSAI_HISTORICAL_BLOCK_LIMIT=256 bonsai-historical-block-limit=256 When using Bonsai Tries, the maximum number of previous blocks for which Bonsai can reconstruct a historical state. The default is 512. note If you plan on querying historical blocks or state using the JSON-RPC API, you might need to adjust the default value or your configured value to avoid errors.","s":"bonsai-historical-block-limit","u":"/public-networks/reference/cli/options","h":"#bonsai-historical-block-limit","p":2053},{"i":2072,"t":"Syntax Example Environment variable Example configuration file --bonsai-limit-trie-logs-enabled=[=] --bonsai-limit-trie-logs-enabled=false BESU_BONSAI_LIMIT_TRIE_LOGS_ENABLED=false bonsai-limit-trie-logs-enabled=false Enables or disables limiting the number of Bonsai Trie logs that are retained. When enabled, this limit is set to the value of --bonsai-historical-block-limit. The default is true, unless --sync-mode=FULL is set, in which case this option is disallowed and must be set to false.","s":"bonsai-limit-trie-logs-enabled","u":"/public-networks/reference/cli/options","h":"#bonsai-limit-trie-logs-enabled","p":2053},{"i":2074,"t":"Syntax Example Environment variable Example configuration file --bonsai-trie-logs-pruning-window-size= --bonsai-trie-logs-pruning-window-size=100000 BESU_BONSAI_TRIE_LOGS_PRUNING_WINDOW_SIZE=100000 bonsai-trie-logs-pruning-window-size=100000 When using --bonsai-limit-trie-logs-enabled, the number of trie logs to prune during one pruning operation. A larger value might impact node performance. The default is 30000.","s":"bonsai-trie-logs-pruning-window-size","u":"/public-networks/reference/cli/options","h":"#bonsai-trie-logs-pruning-window-size","p":2053},{"i":2076,"t":"Syntax Example Environment variable Example configuration file --bootnodes[=[,...]...] --bootnodes=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303 BESU_BOOTNODES=enode://c35c3...d615f@1.2.3.4:30303,enode://f42c13...fc456@1.2.3.5:30303 bootnodes=[\"enode://c35c3...d615f@1.2.3.4:30303\",\"enode://f42c13...fc456@1.2.3.5:30303\"] A list of comma-separated enode URLs for P2P discovery bootstrap. When connecting to Mainnet or public testnets, the default is a predefined list of enode URLs. In private networks defined using --genesis-file or when using --network=dev, the default is an empty list of bootnodes.","s":"bootnodes","u":"/public-networks/reference/cli/options","h":"#bootnodes","p":2053},{"i":2078,"t":"Syntax Example Environment variable Example configuration file --cache-last-blocks= --cache-last-blocks=2048 CACHE_LAST_BLOCKS=2048 cache-last-blocks=2048 The number of recent blocks to cache. Using this option can improve the performance of several RPC calls including: eth_getBlockByNumber, eth_getBlockByHash, eth_getTransactionReceipt, and especially eth_feeHistory. The default is 0.","s":"cache-last-blocks","u":"/public-networks/reference/cli/options","h":"#cache-last-blocks","p":2053},{"i":2080,"t":"Syntax Example Environment variable Example configuration file --color-enabled[=] --color-enabled=false BESU_COLOR_ENABLED=false color-enabled=false Enables or disables color output to console. The default is true.","s":"color-enabled","u":"/public-networks/reference/cli/options","h":"#color-enabled","p":2053},{"i":2082,"t":"Syntax Example Environment variable Example configuration file --compatibility-eth64-forkid-enabled[=] --compatibility-eth64-forkid-enabled=true BESU_COMPATIBILITY_ETH64_FORKID_ENABLED=true compatibility-eth64-forkid-enabled=true Enables or disables the legacy Eth/64 fork ID. For any networks with nodes using Besu v1.4 or earlier and nodes using Besu v20.10.1 or later, either: All nodes must be upgraded to v20.10.1 or later. All nodes using v20.10.1 or later must have --compatibility-eth64-forkid-enabled set to true. The default is false. caution If networks have Besu nodes using v1.4 or earlier and other Besu nodes using v20.10.1 or later, the nodes on different versions cannot communicate unless --compatibility-eth64-forkid-enabled is set to true.","s":"compatibility-eth64-forkid-enabled","u":"/public-networks/reference/cli/options","h":"#compatibility-eth64-forkid-enabled","p":2053},{"i":2084,"t":"Syntax Example Environment variable --config-file= --config-file=/home/me/me_node/config.toml BESU_CONFIG_FILE=/home/me/me_node/config.toml The path to the TOML configuration file. The default is none.","s":"config-file","u":"/public-networks/reference/cli/options","h":"#config-file","p":2053},{"i":2086,"t":"Syntax Example Environment variable Configuration file --data-path= --data-path=/home/me/me_node BESU_DATA_PATH=/home/me/me_node data-path=\"/home/me/me_node\" The path to the Besu data directory. The default is the directory you installed Besu in, or /opt/besu/database if using the Besu Docker image.","s":"data-path","u":"/public-networks/reference/cli/options","h":"#data-path","p":2053},{"i":2088,"t":"Syntax Example Environment variable Configuration file --data-storage-format= --data-storage-format=FOREST BESU_DATA_STORAGE_FORMAT=FOREST data-storage-format=\"BONSAI\" The data storage format to use. Set to BONSAI for Bonsai Tries or FOREST for Forest of Tries. The default is BONSAI.","s":"data-storage-format","u":"/public-networks/reference/cli/options","h":"#data-storage-format","p":2053},{"i":2090,"t":"Syntax Environment variable Example configuration file --discovery-dns-url= BESU_DISCOVERY_DNS_URL=enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org discovery-dns-url=\"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@nodes.example.org\" The enrtree URL of the DNS node list for node discovery via DNS. The default is null.","s":"discovery-dns-url","u":"/public-networks/reference/cli/options","h":"#discovery-dns-url","p":2053},{"i":2092,"t":"Syntax Example Environment variable Example configuration file --discovery-enabled[=] --discovery-enabled=false BESU_DISCOVERY_ENABLED=false discovery-enabled=false Enables or disables P2P discovery. The default is true. note You can override the default DNS server if it's unreliable or doesn't serve TCP DNS requests, using the early access option --Xp2p-dns-discovery-server=.","s":"discovery-enabled","u":"/public-networks/reference/cli/options","h":"#discovery-enabled","p":2053},{"i":2094,"t":"Syntax Example Environment variable Configuration file --engine-host-allowlist=[,...]... or \"*\" --engine-host-allowlist=localhost,127.0.0.1 BESU_ENGINE_HOST_ALLOWLIST=localhost,127.0.0.1 engine-host-allowlist=[\"localhost\",\"127.0.0.1\"] A comma-separated list of hostnames to allow for Engine API access (applies to both HTTP and WebSocket). tip To allow all hostnames, use \"*\". We don't recommend allowing all hostnames in production environments.","s":"engine-host-allowlist","u":"/public-networks/reference/cli/options","h":"#engine-host-allowlist","p":2053},{"i":2096,"t":"Syntax Example Environment variable Configuration file --engine-jwt-disabled[=] --engine-jwt-disabled=true BESU_ENGINE_JWT_DISABLED=true engine-jwt-disabled=true Disables or enables authentication for Engine APIs. The default is false (authentication is enabled by default).","s":"engine-jwt-disabled","u":"/public-networks/reference/cli/options","h":"#engine-jwt-disabled","p":2053},{"i":2098,"t":"Syntax Example Environment variable Configuration file --engine-jwt-secret= --engine-jwt-secret=jwt.hex BESU_ENGINE_JWT_SECRET=\"jwt.hex\" engine-jwt-secret=\"jwt.hex\" Shared secret used to authenticate consensus clients when using the Engine JSON-RPC API (both HTTP and WebSocket). Contents of file must be at least 32 hex-encoded bytes and not begin with 0x. May be a relative or absolute path. See an example of how to generate this.","s":"engine-jwt-secret","u":"/public-networks/reference/cli/options","h":"#engine-jwt-secret","p":2053},{"i":2100,"t":"Syntax Example Environment variable Configuration file --engine-rpc-enabled[= --engine-rpc-enabled BESU_ENGINE_RPC_ENABLED=true engine-rpc-enabled=true Enables or disables the Engine API. The default is true.","s":"engine-rpc-enabled","u":"/public-networks/reference/cli/options","h":"#engine-rpc-enabled","p":2053},{"i":2102,"t":"Syntax Example Environment variable Configuration file --engine-rpc-port= --engine-rpc-port=8551 BESU_ENGINE_RPC_PORT=8551 engine-rpc-port=\"8551\" The listening port for the Engine API calls (ENGINE, ETH) for JSON-RPC over HTTP and WebSocket. The default is 8551.","s":"engine-rpc-port","u":"/public-networks/reference/cli/options","h":"#engine-rpc-port","p":2053},{"i":2104,"t":"Syntax Example Environment variable Configuration file --ethstats=<[ws://|wss://]nodename:secret@host:[port]> --ethstats=Dev-Node-1:secret@127.0.0.1:3001 BESU_ETHSTATS=Dev-Node-1:secret@127.0.0.1:3001 ethstats=\"Dev-Node-1:secret@127.0.0.1:3001\" Reporting URL of an Ethstats server. If specified without a port, the default port is 443 for SSL connections and 80 for non-SSL connections. You can optionally specify ws:// or wss:// in the Ethstats URL. If you specify this scheme, the connection doesn't need to switch from SSL to non-SSL on each retry logic.","s":"ethstats","u":"/public-networks/reference/cli/options","h":"#ethstats","p":2053},{"i":2106,"t":"Syntax Example Environment variable Configuration file --ethstats-cacert-file= --ethstats-cacert-file=./root.cert BESU_ETHSTATS_CACERT_FILE=./root.cert ethstats-cacert-file=\"./root.cert\" Path to the root certificate authority (CA) certificate file of the Ethstats server specified by --ethstats. This option is useful in non-production environments.","s":"ethstats-cacert-file","u":"/public-networks/reference/cli/options","h":"#ethstats-cacert-file","p":2053},{"i":2108,"t":"Syntax Example Environment variable Configuration file --ethstats-contact= --ethstats-contact=contact@mail.com BESU_ETHSTATS_CONTACT=contact@mail.com ethstats-contact=\"contact@mail.com\" Contact email address to send to the Ethstats server specified by --ethstats.","s":"ethstats-contact","u":"/public-networks/reference/cli/options","h":"#ethstats-contact","p":2053},{"i":2110,"t":"Syntax Example Environment variable Configuration file --genesis-file= --genesis-file=/home/me/me_node/customGenesisFile.json BESU_GENESIS_FILE=/home/me/me_node/customGenesisFile.json genesis-file=\"/home/me/me_node/customGenesisFile.json\" The path to the genesis file. caution You can't use the --genesis-file and --network options at the same time.","s":"genesis-file","u":"/public-networks/reference/cli/options","h":"#genesis-file","p":2053},{"i":2112,"t":"Syntax Example Environment variable Example configuration file --genesis-state-hash-cache-enabled=[=] --genesis-state-hash-cache-enabled=true BESU_GENESIS_STATE_HASH_CACHE_ENABLED=true genesis-state-hash-cache-enabled=true Enables or disables fast startup from an existing genesis state hash. The default is false. warning Enabling this option avoids validating the genesis state hash, trading off security for faster node startup times. We only recommend using this option if you are certain that you have not modified your genesis file or database and understand the security implications.","s":"genesis-state-hash-cache-enabled","u":"/public-networks/reference/cli/options","h":"#genesis-state-hash-cache-enabled","p":2053},{"i":2114,"t":"Syntax Example Environment variable Configuration file --graphql-http-cors-origins= --graphql-http-cors-origins=\"http://medomain.com\",\"https://meotherdomain.com\" BESU_GRAPHQL_HTTP_CORS_ORIGINS=\"http://medomain.com\",\"https://meotherdomain.com\" graphql-http-cors-origins=[\"http://medomain.com\",\"https://meotherdomain.com\"] A list of comma-separated origin domain URLs for CORS validation. The default is none.","s":"graphql-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#graphql-http-cors-origins","p":2053},{"i":2116,"t":"Syntax Example Environment variable Configuration file --graphql-http-enabled[=] --graphql-http-enabled BESU_GRAPHQL_HTTP_ENABLED=true graphql-http-enabled=true Enables or disables the GraphQL HTTP service. The default is false. The default GraphQL HTTP service endpoint is http://127.0.0.1:8547/graphql if set to true.","s":"graphql-http-enabled","u":"/public-networks/reference/cli/options","h":"#graphql-http-enabled","p":2053},{"i":2118,"t":"Syntax Example Environment variable Configuration file --graphql-http-host= # to listen on all interfaces --graphql-http-host=0.0.0.0 # to listen on all interfaces BESU_GRAPHQL_HTTP_HOST=0.0.0.0 graphql-http-host=\"0.0.0.0\" The host on which GraphQL HTTP listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0.","s":"graphql-http-host","u":"/public-networks/reference/cli/options","h":"#graphql-http-host","p":2053},{"i":2120,"t":"Syntax Example Environment variable Configuration file --graphql-http-port= # to listen on port 6175 --graphql-http-port=6175 # to listen on port 6175 BESU_GRAPHQL_HTTP_PORT=6175 graphql-http-port=\"6175\" The port (TCP) on which GraphQL HTTP listens. The default is 8547. Ports must be exposed appropriately.","s":"graphql-http-port","u":"/public-networks/reference/cli/options","h":"#graphql-http-port","p":2053},{"i":2122,"t":"Syntax -h, --help Show the help message and exit.","s":"help","u":"/public-networks/reference/cli/options","h":"#help","p":2053},{"i":2124,"t":"Syntax Example Environment variable Configuration file --host-allowlist=[,...]... or \"*\" --host-allowlist=medomain.com,meotherdomain.com BESU_HOST_ALLOWLIST=medomain.com,meotherdomain.com host-allowlist=[\"medomain.com\", \"meotherdomain.com\"] A comma-separated list of hostnames to access the JSON-RPC API and pull Besu metrics. By default, Besu accepts requests from localhost and 127.0.0.1. info This isn't a permissioning feature. To restrict access to the API, we recommend using the Besu authentication mechanism with username and password authentication or JWT public key authentication. note If using Prometheus to pull metrics from a node, you must specify all the other nodes you want to pull metrics from in the list of allowed hostnames. tip To allow all hostnames, use \"*\". We don't recommend allowing all hostnames for production environments.","s":"host-allowlist","u":"/public-networks/reference/cli/options","h":"#host-allowlist","p":2053},{"i":2126,"t":"Syntax Example Environment variable Configuration file --identity= --identity=MyNode BESU_IDENTITY=MyNode identity=\"MyNode\" The name for the node. If specified, it's the second section of the client ID provided by some Ethereum network explorers. For example, in the client ID besu/MyNode/v1.3.4/linux-x86_64/oracle_openjdk-java-11, the node name is MyNode. If a name is not specified, the name section is not included in the client ID. For example, besu/v1.3.4/linux-x86_64/oracle_openjdk-java-11.","s":"identity","u":"/public-networks/reference/cli/options","h":"#identity","p":2053},{"i":2128,"t":"Syntax Example Environment variable Configuration file --json-pretty-print-enabled[=] --json-pretty-print-enabled=true BESU_JSON_PRETTY_PRINT_ENABLED=true json-pretty-print-enabled=true Enables or disables the pretty-print output for HTTP and WebSocket responses. The default is false.","s":"json-pretty-print-enabled","u":"/public-networks/reference/cli/options","h":"#json-pretty-print-enabled","p":2053},{"i":2130,"t":"Syntax Example Environment variable Configuration file --key-value-storage= --key-value-storage=rocksdb BESU_KEY_VALUE_STORAGE=rocksdb key-value-storage=\"rocksdb\" The key-value storage to use. Use this option only if using a storage system provided with a plugin. The default is rocksdb. For development use only, the memory option provides ephemeral storage for sync testing and debugging.","s":"key-value-storage","u":"/public-networks/reference/cli/options","h":"#key-value-storage","p":2053},{"i":2132,"t":"Syntax Example Environment variable Configuration file --kzg-trusted-setup= --kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt BESU_KZG_TRUSTED_SETUP=/etc/besu/kzg-trusted-setup.txt kzg-trusted-setup=/etc/besu/kzg-trusted-setup.txt The path to the C-KZG-4844 trusted setup file. Use this option to pass a custom setup file for custom networks or to override the default setup file for named networks.","s":"kzg-trusted-setup","u":"/public-networks/reference/cli/options","h":"#kzg-trusted-setup","p":2053},{"i":2134,"t":"Syntax Example Environment variable Example configuration file -l, --logging= --logging=DEBUG BESU_LOGGING=DEBUG logging=\"DEBUG\" Sets logging verbosity. Log levels are OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL. The default is INFO.","s":"logging","u":"/public-networks/reference/cli/options","h":"#logging","p":2053},{"i":2136,"t":"Syntax Example Environment variable Configuration file --max-peers= --max-peers=42 BESU_MAX_PEERS=42 max-peers=42 The maximum number of P2P connections you can establish. The default is 25.","s":"max-peers","u":"/public-networks/reference/cli/options","h":"#max-peers","p":2053},{"i":2138,"t":"Syntax Example Environment variable Configuration file --metrics-category=[,metrics-category...]... --metrics-category=BLOCKCHAIN,PEERS,PROCESS BESU_METRICS_CATEGORY=BLOCKCHAIN,PEERS,PROCESS metrics-category=[\"BLOCKCHAIN\",\"PEERS\",\"PROCESS\"] A comma-separated list of categories for which to track metrics. The defaults are BLOCKCHAIN, ETHEREUM, EXECUTORS, JVM, NETWORK, PEERS, PERMISSIONING, PROCESS, PRUNER, RPC, STRATUM, SYNCHRONIZER, and TRANSACTION_POOL. Other categories are KVSTORE_ROCKSDB, KVSTORE_PRIVATE_ROCKSDB, KVSTORE_ROCKSDB_STATS, and KVSTORE_PRIVATE_ROCKSDB_STATS. Categories containing PRIVATE track metrics when you enable private transactions.","s":"metrics-category","u":"/public-networks/reference/cli/options","h":"#metrics-category","p":2053},{"i":2140,"t":"Syntax Example Environment variable Configuration file --metrics-enabled[=] --metrics-enabled BESU_METRICS_ENABLED=true metrics-enabled=true Enables or disables the metrics exporter. The default is false. You can't specify --metrics-enabled with --metrics-push-enabled. That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once.","s":"metrics-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-enabled","p":2053},{"i":2142,"t":"Syntax Example Environment variable Configuration file --metrics-host= --metrics-host=127.0.0.1 BESU_METRICS_HOST=127.0.0.1 metrics-host=\"127.0.0.1\" The host on which Prometheus accesses Besu metrics. The metrics server respects the --host-allowlist option. The default is 127.0.0.1.","s":"metrics-host","u":"/public-networks/reference/cli/options","h":"#metrics-host","p":2053},{"i":2144,"t":"Syntax Example Environment variable Configuration file --metrics-port= --metrics-port=6174 BESU_METRICS_PORT=6174 metrics-port=\"6174\" The port (TCP) on which Prometheus accesses Besu metrics. The default is 9545. Ports must be exposed appropriately.","s":"metrics-port","u":"/public-networks/reference/cli/options","h":"#metrics-port","p":2053},{"i":2146,"t":"Syntax Example Environment variable Configuration file --metrics-protocol= --metrics-protocol=OPENTELEMETRY BESU_METRICS_PROTOCOL=OPENTELEMETRY metrics-protocol=\"OPENTELEMETRY\" Metrics protocol to use: PROMETHEUS, OPENTELEMETRY, or NONE. The default is PROMETHEUS.","s":"metrics-protocol","u":"/public-networks/reference/cli/options","h":"#metrics-protocol","p":2053},{"i":2148,"t":"Syntax Example Environment variable Configuration file --metrics-push-enabled[=] --metrics-push-enabled=true BESU_METRICS_PUSH_ENABLED=true metrics-push-enabled=true Enables or disables push gateway integration. You can't specify --metrics-push-enabled with --metrics-enabled. That is, you can enable either Prometheus polling or Prometheus push gateway support, but not both at once.","s":"metrics-push-enabled","u":"/public-networks/reference/cli/options","h":"#metrics-push-enabled","p":2053},{"i":2150,"t":"Syntax Example Environment variable Configuration file --metrics-push-host= --metrics-push-host=127.0.0.1 BESU_METRICS_PUSH_HOST=127.0.0.1 metrics-push-host=\"127.0.0.1\" The host of the Prometheus Push Gateway. The default is 127.0.0.1. The metrics server respects the --host-allowlist option. note When pushing metrics, ensure you set --metrics-push-host to the machine on which the push gateway is. Generally, this is a different machine to the machine on which Besu is running.","s":"metrics-push-host","u":"/public-networks/reference/cli/options","h":"#metrics-push-host","p":2053},{"i":2152,"t":"Syntax Example Environment variable Configuration file --metrics-push-interval= --metrics-push-interval=30 BESU_METRICS_PUSH_INTERVAL=30 metrics-push-interval=30 The interval, in seconds, to push metrics when in push mode. The default is 15.","s":"metrics-push-interval","u":"/public-networks/reference/cli/options","h":"#metrics-push-interval","p":2053},{"i":2154,"t":"Syntax Example Environment variable Configuration file --metrics-push-port= --metrics-push-port=6174 BESU_METRICS_PUSH_PORT=6174 metrics-push-port=\"6174\" The port (TCP) of the Prometheus Push Gateway. The default is 9001. Ports must be exposed appropriately.","s":"metrics-push-port","u":"/public-networks/reference/cli/options","h":"#metrics-push-port","p":2053},{"i":2156,"t":"Syntax Example Environment variable Configuration file --metrics-push-prometheus-job= --metrics-push-prometheus-job=\"my-custom-job\" BESU_METRICS_PUSH_PROMETHEUS_JOB=\"my-custom-job\" metrics-push-prometheus-job=\"my-custom-job\" The job name when in push mode. The default is besu-client.","s":"metrics-push-prometheus-job","u":"/public-networks/reference/cli/options","h":"#metrics-push-prometheus-job","p":2053},{"i":2158,"t":"Syntax Example Environment variable Configuration file --min-block-occupancy-ratio= --min-block-occupancy-ratio=0.5 BESU_MIN_BLOCK_OCCUPANCY_RATIO=0.5 min-block-occupancy-ratio=\"0.5\" Minimum occupancy ratio for a mined block if the transaction pool is not empty. When filling a block during mining, the occupancy ratio indicates the threshold at which the node stops waiting for smaller transactions to fill the remaining space. The default is 0.8. note Besu ignores the --min-block-occupancy-ratio option for proof-of-stake networks, such as Ethereum Mainnet.","s":"min-block-occupancy-ratio","u":"/public-networks/reference/cli/options","h":"#min-block-occupancy-ratio","p":2053},{"i":2160,"t":"Syntax Example Environment variable Configuration file --min-gas-price= --min-gas-price=1337 BESU_MIN_GAS_PRICE=1337 min-gas-price=1337 The minimum price (in wei) a transaction offers to include it in a mined block. The minimum gas price is the lowest value eth_gasPrice can return. The default is 1000. For a running node, use: miner_getMinGasPrice to get the value. miner_setMinGasPrice to change the value. tip In a free gas network, ensure the minimum gas price is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. You can query a node's gas configuration using eth_gasPrice.","s":"min-gas-price","u":"/public-networks/reference/cli/options","h":"#min-gas-price","p":2053},{"i":2162,"t":"Syntax Example Environment variable Configuration file --min-priority-fee= --min-priority-fee=7 BESU_MIN_PRIORITY_FEE=7 min-priority-fee=7 The minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The default is 0. For a running node, use: miner_getMinPriorityFee to get the value. miner_setMinPriorityFee to change the value.","s":"min-priority-fee","u":"/public-networks/reference/cli/options","h":"#min-priority-fee","p":2053},{"i":2164,"t":"Syntax Example Environment variable Configuration file --miner-coinbase= --miner-coinbase=fe3b557e8fb62b89f4916b721be55ceb828dbd73 BESU_MINER_COINBASE=fe3b557e8fb62b89f4916b721be55ceb828dbd73 miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" The account you pay mining rewards to. You must specify a valid coinbase when you enable mining using the --miner-enabled option or the miner_start JSON-RPC API method. note Besu ignores this option in proof-of-authority networks. In proof-of-stake networks, such as Ethereum Mainnet, this option is used as a last resort for the fee recipient, if the consensus layer client doesn't provide any.","s":"miner-coinbase","u":"/public-networks/reference/cli/options","h":"#miner-coinbase","p":2053},{"i":2166,"t":"Syntax Example Environment variable Configuration file --miner-enabled[=] --miner-enabled=true BESU_MINER_ENABLED=true miner-enabled=true Enables or disables mining when you start the node. The default is false.","s":"miner-enabled","u":"/public-networks/reference/cli/options","h":"#miner-enabled","p":2053},{"i":2168,"t":"Syntax Example Environment variable Configuration file --miner-extra-data= --miner-extra-data=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021 BESU_MINER_EXTRA_DATA=0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021 miner-extra-data=\"0x444F4E27542050414E4943202120484F444C2C20484F444C2C20484F444C2021\" A hex string representing the 32 bytes included in the extra data field of a created block. The default is 0x.","s":"miner-extra-data","u":"/public-networks/reference/cli/options","h":"#miner-extra-data","p":2053},{"i":2170,"t":"Syntax Environment variable Configuration file --miner-stratum-enabled BESU_MINER_STRATUM_ENABLED=true miner-stratum-enabled=true Enables a node to perform stratum mining. The default is false.","s":"miner-stratum-enabled","u":"/public-networks/reference/cli/options","h":"#miner-stratum-enabled","p":2053},{"i":2172,"t":"Syntax Example Environment variable Configuration file --miner-stratum-host= --miner-stratum-host=192.168.1.132 BESU_MINER_STRATUM_HOST=192.168.1.132 miner-stratum-host=\"192.168.1.132\" The host of the stratum mining service. The default is 0.0.0.0.","s":"miner-stratum-host","u":"/public-networks/reference/cli/options","h":"#miner-stratum-host","p":2053},{"i":2174,"t":"Syntax Example Environment variable Configuration file --miner-stratum-port= --miner-stratum-port=8010 BESU_MINER_STRATUM_PORT=8010 miner-stratum-port=\"8010\" The port of the stratum mining service. The default is 8008. You must expose ports appropriately.","s":"miner-stratum-port","u":"/public-networks/reference/cli/options","h":"#miner-stratum-port","p":2053},{"i":2176,"t":"Syntax Example configuration file --nat-method=UPNP nat-method=\"UPNP\" Specify the method for handling NAT environments. The options are: UPNP UPNPP2PONLY KUBERNETES DOCKER AUTO NONE. The default is AUTO. NONE disables NAT functionality. tip UPnP support is often disabled by default in networking firmware. If disabled by default, explicitly enable UPnP support. tip Use UPNPP2PONLY if you wish to enable UPnP for P2P traffic but not JSON-RPC. note Specifying UPNP might introduce delays during node startup, especially on networks without a UPnP gateway device. You must specify DOCKER when using the Besu Docker image.","s":"nat-method","u":"/public-networks/reference/cli/options","h":"#nat-method","p":2053},{"i":2178,"t":"Syntax Example Environment variable Example configuration file --net-restrict=[,,...] --net-restrict=192.168.1.0/24,10.0.0.0/8 BESU_NET_RESTRICT=192.168.1.0/24,10.0.0.0/8 net-restrict=[\"192.168.1.0/24\",\"10.0.0.0/8\"] A comma-separated list of allowed IP subnets. Peers whose IP addresses fall within the specified subnets are granted permission to interact with the node. If not specified, no subnet-based peer permission restrictions are applied.","s":"net-restrict","u":"/public-networks/reference/cli/options","h":"#net-restrict","p":2053},{"i":2180,"t":"Syntax Example Environment variable Configuration file --network= --network=holesky BESU_NETWORK=holesky network=\"holesky\" The predefined network configuration. The default is mainnet. Possible values include the following: Network Chain Type Default Sync Mode Consensus Mechanism Description mainnet ETH Production SNAP A PoS network The main Ethereum network holesky ETH Test SNAP A PoS network Multi-client testnet Hoelsky sepolia ETH Test SNAP A PoS network Multi-client testnet Sepolia lukso ETH Production SNAP A PoS network Network for the Lukso chain dev ETH Development FULL A PoW network Development network with low difficulty to enable local CPU mining classic ETC Production SNAP A PoW network The main Ethereum Classic network mordor ETC Test SNAP A PoW network Testnet for Ethereum Classic tip Values are case insensitive, so either mainnet or MAINNET works. info You can't use the --network and --genesis-file options at the same time. The Ropsten, Rinkeby, and Kiln testnets are deprecated.","s":"network","u":"/public-networks/reference/cli/options","h":"#network","p":2053},{"i":2182,"t":"Syntax Example Environment variable Configuration file --network-id= --network-id=8675309 BESU_NETWORK_ID=8675309 network-id=\"8675309\" The P2P network identifier. Use this option to override the default network ID. The default value is the same as the chain ID defined in the genesis file.","s":"network-id","u":"/public-networks/reference/cli/options","h":"#network-id","p":2053},{"i":2184,"t":"Syntax Example Environment variable Configuration file --node-private-key-file= --node-private-key-file=/home/me/me_node/myPrivateKey BESU_NODE_PRIVATE_KEY_FILE=/home/me/me_node/myPrivateKey node-private-key-file=\"/home/me/me_node/myPrivateKey\" The private key file for the node. The default is the key file in the data directory. If no key file exists, Besu creates a key file containing the generated private key, otherwise, the existing key file specifies the node private key. danger The private key is not encrypted. This option is ignored if --security-module is set to a non-default value.","s":"node-private-key-file","u":"/public-networks/reference/cli/options","h":"#node-private-key-file","p":2053},{"i":2186,"t":"Syntax Example Environment variable Configuration file --p2p-enabled[=] --p2p-enabled=false BESU_P2P_ENABLED=false p2p-enabled=false Enables or disables all P2P communication. The default is true.","s":"p2p-enabled","u":"/public-networks/reference/cli/options","h":"#p2p-enabled","p":2053},{"i":2188,"t":"Syntax Example Environment variable Configuration file --p2p-host= # to listen on all interfaces --p2p-host=0.0.0.0 # to listen on all interfaces BESU_P2P_HOST=0.0.0.0 p2p-host=\"0.0.0.0\" The advertised host that can be used to access the node from outside the network in P2P communication. The default is 127.0.0.1. info If --nat-method is set to NONE, --p2p-host is not overridden and must be specified for the node to be accessed from outside the network.","s":"p2p-host","u":"/public-networks/reference/cli/options","h":"#p2p-host","p":2053},{"i":2190,"t":"Syntax Example Environment variable Configuration file --p2p-interface= --p2p-interface=192.168.1.132 BESU_P2P_INTERFACE=192.168.1.132 p2p-interface=\"192.168.1.132\" The network interface on which the node listens for P2P communication. Use the option to specify the required network interface when the device that Besu is running on has multiple network interfaces. The default is 0.0.0.0 (all interfaces).","s":"p2p-interface","u":"/public-networks/reference/cli/options","h":"#p2p-interface","p":2053},{"i":2192,"t":"Syntax Example Environment variable Configuration file --p2p-port= # to listen on port 1789 --p2p-port=1789 # to listen on port 1789 BESU_P2P_PORT=1789 p2p-port=\"1789\" The P2P listening ports (UDP and TCP). The default is 30303. You must expose ports appropriately.","s":"p2p-port","u":"/public-networks/reference/cli/options","h":"#p2p-port","p":2053},{"i":2194,"t":"Syntax Example Environment variable Configuration file --profile= --profile=STAKER BESU_PROFILE=STAKER profile=\"STAKER\" Loads a pre-configured TOML file containing custom settings for a specific user profile. Possible values are: MINIMALIST_STAKER STAKER ENTERPRISE or PRIVATE (aliases for the same profile) File name of an external profile, without the .toml extension. The default is null.","s":"profile","u":"/public-networks/reference/cli/options","h":"#profile","p":2053},{"i":2196,"t":"Syntax Example Environment variable Configuration file --random-peer-priority-enabled[=] --random-peer-priority-enabled=true BESU_RANDOM_PEER_PRIORITY_ENABLED=true random-peer-priority-enabled=true Enables or disables random prioritization of incoming connections. Enable in small, stable networks to prevent closed groups of peers forming. The default is false.","s":"random-peer-priority-enabled","u":"/public-networks/reference/cli/options","h":"#random-peer-priority-enabled","p":2053},{"i":2198,"t":"Syntax Example Environment variable Configuration file --receipt-compaction-enabled= --receipt-compaction-enabled=true BESU_RECEIPT_COMPACTION_ENABLED=true receipt-compaction-enabled=true Enables or disables receipt compaction. Compacting receipts reduces storage by trimming unnecessary data from transaction receipts. The default is false.","s":"receipt-compaction-enabled","u":"/public-networks/reference/cli/options","h":"#receipt-compaction-enabled","p":2053},{"i":2200,"t":"Syntax Example Environment variable Configuration file --remote-connections-limit-enabled[=] --remote-connections-limit-enabled=false BESU_REMOTE_CONNECTIONS_LIMIT_ENABLED=false remote-connections-limit-enabled=false Enables or disables using the --remote-connections-max-percentage option to limit the percentage of remote P2P connections initiated by peers. The default is true. tip In private and permissioned networks with a level of trust between peers, disabling the remote connection limits may increase the speed at which nodes can join the network. danger To prevent eclipse attacks, ensure you enable the remote connections limit when connecting to any public network, and especially when using --sync-mode and --fast-sync-min-peers.","s":"remote-connections-limit-enabled","u":"/public-networks/reference/cli/options","h":"#remote-connections-limit-enabled","p":2053},{"i":2202,"t":"Syntax Example Environment variable Configuration file --remote-connections-max-percentage= --remote-connections-max-percentage=25 BESU_REMOTE_CONNECTIONS_MAX_PERCENTAGE=25 remote-connections-max-percentage=25 The percentage of remote P2P connections you can establish with the node. Must be between 0 and 100, inclusive. The default is 60.","s":"remote-connections-max-percentage","u":"/public-networks/reference/cli/options","h":"#remote-connections-max-percentage","p":2053},{"i":2204,"t":"Syntax Example Environment variable Configuration file --reorg-logging-threshold= --reorg-logging-threshold=3 BESU_REORG_LOGGING_THRESHOLD=3 reorg-logging-threshold=3 Minimum depth of chain reorganizations to log. The default is 6.","s":"reorg-logging-threshold","u":"/public-networks/reference/cli/options","h":"#reorg-logging-threshold","p":2053},{"i":2206,"t":"Syntax Example Environment variable Configuration file --required-block, --required-blocks[=BLOCK=HASH[,BLOCK=HASH...]...] --required-block=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80 BESU_REQUIRED_BLOCK=6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80 required-block=[\"6485846=0x43f0cd1e5b1f9c4d5cda26c240b59ee4f1b510d0a185aa8fd476d091b0097a80\"] Requires a peer with the specified block number to have the specified hash when connecting, or Besu rejects that peer.","s":"required-block","u":"/public-networks/reference/cli/options","h":"#required-block","p":2053},{"i":2208,"t":"Syntax Example Environment variable Configuration file --revert-reason-enabled[=] --revert-reason-enabled=true BESU_REVERT_REASON_ENABLED=true revert-reason-enabled=true Enables or disables including the revert reason in the transaction receipt, eth_estimateGas error response, eth_call error response, and trace response. The default is false. caution Enabling revert reason may use a significant amount of memory. We don't recommend enabling revert reason when connected to public Ethereum networks.","s":"revert-reason-enabled","u":"/public-networks/reference/cli/options","h":"#revert-reason-enabled","p":2053},{"i":2210,"t":"Syntax Example Environment variable Configuration file --rpc-gas-cap= --rpc-gas-cap=50000000 BESU_RPC_GAS_CAP=50000000 rpc-gas-cap=50000000 Sets a limit on the amount of gas for transaction simulation RPC methods. This option allows users to override the transaction's gas limit. This can prevent the simulation of transactions with high gas usage by setting a predefined cap, preventing DoS attacks. Its value must be greater than or equal to 0. The default is 0, which indicates there is no limit. This cap prevents eth_call requests from using excessive resources.","s":"rpc-gas-cap","u":"/public-networks/reference/cli/options","h":"#rpc-gas-cap","p":2053},{"i":2212,"t":"Syntax Example Environment variable Configuration file --rpc-http-api=[,,...] --rpc-http-api=ETH,NET,WEB3 BESU_RPC_HTTP_API=ETH,NET,WEB3 rpc-http-api=[\"ETH\",\"NET\",\"WEB3\"] A comma-separated list of APIs to enable on the JSON-RPC HTTP channel. When you use this option you must also specify the --rpc-http-enabled option. The available API options are: ADMIN, CLIQUE, DEBUG, EEA, ETH, IBFT, MINER, NET, PERM, PLUGINS, PRIV, QBFT, TRACE, TXPOOL, and WEB3. The default is: ETH, NET, WEB3. tip The singular --rpc-http-api and plural --rpc-http-apis are available and are two names for the same option.","s":"rpc-http-api","u":"/public-networks/reference/cli/options","h":"#rpc-http-api","p":2053},{"i":2214,"t":"Syntax Example Environment variable Configuration file --rpc-http-api-methods-no-auth=[,,...] --rpc-http-api-methods-no-auth=admin_peers,eth_getWork BESU_RPC_HTTP_API_METHODS_NO_AUTH=admin_peers,eth_getWork rpc-http-api-methods-no-auth=[\"admin_peers\",\"eth_getWork\"] A comma-separated list of JSON-RPC API methods to exclude from authentication services. note You must enable JSON-RPC HTTP authentication using --rpc-http-authentication-enabled.","s":"rpc-http-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-http-api-methods-no-auth","p":2053},{"i":2216,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-credentials-file= --rpc-http-authentication-credentials-file=/home/me/me_node/auth.toml BESU_RPC_HTTP_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml rpc-http-authentication-credentials-file=\"/home/me/me_node/auth.toml\" The credentials file for JSON-RPC API authentication.","s":"rpc-http-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-credentials-file","p":2053},{"i":2218,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-enabled[=] --rpc-http-authentication-enabled=true BESU_RPC_HTTP_AUTHENTICATION_ENABLED=true rpc-http-authentication-enabled=true Enables or disables authentication for the JSON-RPC HTTP service.","s":"rpc-http-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-enabled","p":2053},{"i":2220,"t":"Syntax Example Environment variable Configuration file ---rpc-http-authentication-jwt-algorithm= --rpc-http-authentication-jwt-algorithm=ES256 BESU_RPC_HTTP_AUTHENTICATION_JWT_ALGORITHM=ES256 rpc-http-authentication-jwt-algorithm=\"ES256\" The JWT key algorithm used to generate the keypair for JSON-RPC HTTP authentication. Possible values are RS256, RS384, RS512, ES256, ES384, and ES512. The default is RS256.","s":"rpc-http-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-algorithm","p":2053},{"i":2222,"t":"Syntax Example Environment variable Configuration file --rpc-http-authentication-jwt-public-key-file= --rpc-http-authentication-jwt-public-key-file=publicKey.pem BESU_RPC_HTTP_AUTHENTICATION_JWT_PUBLIC_KEY_FILE=\"publicKey.pem\" rpc-http-authentication-jwt-public-key-file=\"publicKey.pem\" The JWT provider's public key file used for JSON-RPC HTTP authentication with an external JWT.","s":"rpc-http-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-authentication-jwt-public-key-file","p":2053},{"i":2224,"t":"Syntax Example Environment variable Configuration file --rpc-http-cors-origins=[,...]... or all or \"*\" --rpc-http-cors-origins=http://medomain.com,http://remix.ethereum.org BESU_RPC_HTTP_CORS_ORIGINS=http://medomain.com,https://meotherdomain.com rpc-http-cors-origins=[\"http://medomain.com\",\"https://meotherdomain.com\"] A comma-separated list of domain URLs for CORS validation. Listed domains can access the node using JSON-RPC. If your client interacts with Besu using a browser app (such as Remix or a block explorer), add the client domain to the list. The default value is \"none\". If you do not list any domains, browser apps cannot interact with your Besu node. note To run a local Besu node with MetaMask, set --rpc-http-cors-origins to chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn. Remember to also include the dapp domain MetaMask interacts with, for example if your app is deployed on Remix and you're using MetaMask to interact with the contract, use --rpc-http-cors-origins=chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn,http://remix.ethereum.org tip For testing and development purposes, use \"all\" or \"*\" to accept requests from any domain. We don't recommend accepting requests from any domain for production environments.","s":"rpc-http-cors-origins","u":"/public-networks/reference/cli/options","h":"#rpc-http-cors-origins","p":2053},{"i":2226,"t":"Syntax Example Environment variable Configuration file --rpc-http-enabled[=] --rpc-http-enabled=true BESU_RPC_HTTP_ENABLED=true rpc-http-enabled=true Enables or disables the JSON-RPC HTTP service. The default is false.","s":"rpc-http-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-enabled","p":2053},{"i":2228,"t":"Syntax Example Environment variable Configuration file --rpc-http-host= # to listen on all interfaces --rpc-http-host=0.0.0.0 BESU_RPC_HTTP_HOST=0.0.0.0 rpc-http-host=\"0.0.0.0\" The host on which JSON-RPC HTTP listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0. caution Setting the host to 0.0.0.0 exposes the RPC connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet.","s":"rpc-http-host","u":"/public-networks/reference/cli/options","h":"#rpc-http-host","p":2053},{"i":2230,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-active-connections= --rpc-http-max-active-connections=100 BESU_RPC_HTTP_MAX_ACTIVE_CONNECTIONS=100 rpc-http-max-active-connections=100 The maximum number of allowed JSON-RPC HTTP connections. Once this limit is reached, incoming connections are rejected. The default is 80.","s":"rpc-http-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-active-connections","p":2053},{"i":2232,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-request-content-length= --rpc-http-max-request-content-length=2097152 BESU_RPC_HTTP_MAX_REQUEST_CONTENT_LENGTH=2097152 rpc-http-max-request-content-length=2097152 The maximum request content length. Besu only accepts JSON-RPC API requests with a body size less than or equal to this value. The default is 5242880 (5 MB).","s":"rpc-http-max-request-content-length","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-request-content-length","p":2053},{"i":2234,"t":"Syntax Example Environment variable Configuration file --rpc-http-max-batch-size= --rpc-http-max-batch-size=1200 BESU_RPC_HTTP_MAX_BATCH_SIZE=1200 rpc-http-max-batch-size=1200 The maximum number of allowed requests in a RPC batch request. The default limit is 1024, and -1 specifies no limit.","s":"rpc-http-max-batch-size","u":"/public-networks/reference/cli/options","h":"#rpc-http-max-batch-size","p":2053},{"i":2236,"t":"Syntax Example Environment variable Configuration file --rpc-http-port= # to listen on port 3435 --rpc-http-port=3435 BESU_RPC_HTTP_PORT=3435 rpc-http-port=\"3435\" The port (TCP) on which JSON-RPC HTTP listens. The default is 8545. You must expose ports appropriately.","s":"rpc-http-port","u":"/public-networks/reference/cli/options","h":"#rpc-http-port","p":2053},{"i":2238,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-ca-clients-enabled[=] --rpc-http-tls-ca-clients-enabled=true BESU_RPC_HTTP_TLS_CA_CLIENTS_ENABLED=true rpc-http-tls-ca-clients-enabled=true Enables or disables clients with trusted CA certificates to connect. The default is false. note You must enable client authentication using the --rpc-http-tls-client-auth-enabled option.","s":"rpc-http-tls-ca-clients-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-ca-clients-enabled","p":2053},{"i":2240,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-client-auth-enabled[=] --rpc-http-tls-client-auth-enabled=true BESU_RPC_HTTP_TLS_CLIENT_AUTH_ENABLED=true rpc-http-tls-client-auth-enabled=true Enables or disables TLS client authentication for the JSON-RPC HTTP service. The default is false. note You must specify --rpc-http-tls-ca-clients-enabled and/or rpc-http-tls-known-clients-file.","s":"rpc-http-tls-client-auth-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-client-auth-enabled","p":2053},{"i":2242,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-cipher-suite=[, ...] --rpc-http-tls-cipher-suite=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 BESU_RPC_HTTP_TLS_CIPHER_SUITE=TLS_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 rpc-http-tls-cipher-suite=[\"TLS_AES_256_GCM_SHA384\",\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\"] A list of comma-separated TLS cipher suites to support. tip The singular --rpc-http-tls-cipher-suite and plural --rpc-http-tls-cipher-suites are available and are two names for the same option.","s":"rpc-http-tls-cipher-suite","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-cipher-suite","p":2053},{"i":2244,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-enabled[=] --rpc-http-tls-enabled=true BESU_RPC_HTTP_TLS_ENABLED=true rpc-http-tls-enabled=true Enables or disables TLS for the JSON-RPC HTTP service. The default is false. note --rpc-http-enabled must be enabled.","s":"rpc-http-tls-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-enabled","p":2053},{"i":2246,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-keystore-file= --rpc-http-tls-keystore-file=/home/me/me_node/keystore.pfx BESU_RPC_HTTP_TLS_KEYSTORE_FILE=/home/me/me_node/keystore.pfx rpc-http-tls-keystore-file=\"/home/me/me_node/keystore.pfx\" The Keystore file (in PKCS #12 format) that contains private key and the certificate presented to the client during authentication.","s":"rpc-http-tls-keystore-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-file","p":2053},{"i":2248,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-keystore-password-file= --rpc-http-tls-keystore-password-file=/home/me/me_node/password BESU_RPC_HTTP_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password rpc-http-tls-keystore-password-file=\"/home/me/me_node/password\" The path to the file containing the password to decrypt the keystore.","s":"rpc-http-tls-keystore-password-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-keystore-password-file","p":2053},{"i":2250,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-known-clients-file= --rpc-http-tls-known-clients-file=/home/me/me_node/knownClients BESU_RPC_HTTP_TLS_KNOWN_CLIENTS_FILE=/home/me/me_node/knownClients rpc-http-tls-known-clients-file=\"/home/me/me_node/knownClients\" The path to the file used to authenticate clients using self-signed certificates or non-public certificates. Must contain the certificate's Common Name, and SHA-256 fingerprint in the format . note You must enable client authentication using the --rpc-http-tls-client-auth-enabled option.","s":"rpc-http-tls-known-clients-file","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-known-clients-file","p":2053},{"i":2252,"t":"Syntax Example Environment variable Configuration file --rpc-http-tls-protocol=[, ...] --rpc-http-tls-protocol=TLSv1.3,TLSv1.2 BESU_RPC_HTTP_TLS_PROTOCOL=TLSv1.3,TLSv1.2 rpc-http-tls-protocol=[\"TLSv1.3\",\"TLSv1.2\"] A list of comma-separated TLS protocols to support. The default is DEFAULT_TLS_PROTOCOLS, a list which includes TLSv1.3 and TLSv1.2. tip The singular --rpc-http-tls-protocol and plural --rpc-http-tls-protocols are available and are two names for the same option.","s":"rpc-http-tls-protocol","u":"/public-networks/reference/cli/options","h":"#rpc-http-tls-protocol","p":2053},{"i":2254,"t":"Syntax Example Environment variable Configuration file --rpc-max-logs-range= --rpc-max-logs-range=500 BESU_RPC_MAX_LOGS_RANGE=500 rpc-max-logs-range=500 When using eth_getLogs, the maximum number of blocks to retrieve logs from. Set to 0 to specify no limit. The default is 5000. caution Using eth_getLogs to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response. We recommend setting a range limit or leaving this option at its default value.","s":"rpc-max-logs-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-logs-range","p":2053},{"i":2256,"t":"Syntax Example Environment variable Configuration file --rpc-max-trace-filter-range= --rpc-max-trace-filter-range=100 --BESU_RPC_MAX_TRACE_FILTER_RANGE=100 rpc-max-trace-filter-range=100 The maximum number of blocks you can supply to the trace_filter method. The value must be equal to or greater than 0. Setting this option to 0 indicates there is no limit. The default is 1000.","s":"rpc-max-trace-filter-range","u":"/public-networks/reference/cli/options","h":"#rpc-max-trace-filter-range","p":2053},{"i":2258,"t":"Syntax Example Environment variable Configuration file --rpc-tx-feecap= --rpc-tx-feecap=1200000000000000000 BESU_RPC_TX_FEECAP=1200000000000000000 rpc-tx-feecap=1200000000000000000 The maximum transaction fee (in Wei) accepted for transactions submitted through the eth_sendRawTransaction RPC. The default is 1000000000000000000 (1 ether). If set to 0, then this option is ignored and no cap is applied.","s":"rpc-tx-feecap","u":"/public-networks/reference/cli/options","h":"#rpc-tx-feecap","p":2053},{"i":2260,"t":"Syntax Example Environment variable Configuration file --rpc-ws-api=[,...]... --rpc-ws-api=ETH,NET,WEB3 BESU_RPC_WS_API=ETH,NET,WEB3 rpc-ws-api=[\"ETH\",\"NET\",\"WEB3\"] A comma-separated list of APIs to enable on the WebSockets channel. When you use this option you must also specify the --rpc-ws-enabled option. The available API options are: ADMIN, CLIQUE, DEBUG, EEA, ETH, IBFT, MINER, NET, PERM, PLUGINS, PRIV, QBFT, TRACE, TXPOOL, and WEB3. The default is: ETH, NET, WEB3. tip The singular --rpc-ws-api and plural --rpc-ws-apis options are available and are two names for the same option.","s":"rpc-ws-api","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api","p":2053},{"i":2262,"t":"Syntax Example Environment variable Configuration file --rpc-ws-api-methods-no-auth=[,,...] --rpc-ws-api-methods-no-auth=admin_peers,eth_getWork BESU_RPC_WS_API_METHODS_NO_AUTH=admin_peers,eth_getWork rpc-ws-api-methods-no-auth=[\"admin_peers\",\"eth_getWork\"] A comma-separated list of JSON-RPC API methods to exclude from authentication services. note You must enable JSON-RPC WebSocket authentication using --rpc-ws-authentication-enabled.","s":"rpc-ws-api-methods-no-auth","u":"/public-networks/reference/cli/options","h":"#rpc-ws-api-methods-no-auth","p":2053},{"i":2264,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-credentials-file= --rpc-ws-authentication-credentials-file=/home/me/me_node/auth.toml BESU_RPC_WS_AUTHENTICATION_CREDENTIALS_FILE=/home/me/me_node/auth.toml rpc-ws-authentication-credentials-file=\"/home/me/me_node/auth.toml\" The path to the credentials file for JSON-RPC API authentication.","s":"rpc-ws-authentication-credentials-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-credentials-file","p":2053},{"i":2266,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-enabled[=] --rpc-ws-authentication-enabled=true BESU_RPC_WS_AUTHENTICATION_ENABLED=true rpc-ws-authentication-enabled=true Enables or disables authentication for the JSON-RPC WebSocket service. note wscat doesn't support headers. Authentication requires you to pass an authentication token in the request header. To use authentication with WebSockets, you need an app that supports headers.","s":"rpc-ws-authentication-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-enabled","p":2053},{"i":2268,"t":"Syntax Example Environment variable Configuration file ---rpc-ws-authentication-jwt-algorithm= --rpc-ws-authentication-jwt-algorithm=ES256 BESU_RPC_WS_AUTHENTICATION_JWT_ALGORITHM=ES256 rpc-ws-authentication-jwt-algorithm=\"ES256\" The JWT key algorithm used to generate the keypair for JSON-RPC WebSocket authentication. Possible values are RS256, RS384, RS512, ES256, ES384, and ES512. The default is RS256.","s":"rpc-ws-authentication-jwt-algorithm","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-algorithm","p":2053},{"i":2270,"t":"Syntax Example Environment variable Configuration file --rpc-ws-authentication-jwt-public-key-file= --rpc-ws-authentication-jwt-public-key-file=publicKey.pem BESU_RPC_WS_AUTHENTICATION_JWT_PUBLIC_KEY_FILE=\"publicKey.pem\" rpc-ws-authentication-jwt-public-key-file=\"publicKey.pem\" The JWT provider's public key file used for JSON-RPC WebSocket authentication with an external JWT.","s":"rpc-ws-authentication-jwt-public-key-file","u":"/public-networks/reference/cli/options","h":"#rpc-ws-authentication-jwt-public-key-file","p":2053},{"i":2272,"t":"Syntax Example Environment variable Configuration file --rpc-ws-enabled[=] --rpc-ws-enabled=true BESU_RPC_WS_ENABLED=true rpc-ws-enabled=true Enables or disables the WebSocket JSON-RPC service. The default is false.","s":"rpc-ws-enabled","u":"/public-networks/reference/cli/options","h":"#rpc-ws-enabled","p":2053},{"i":2274,"t":"Syntax Example Environment variable Configuration file --rpc-ws-host= # to listen on all interfaces --rpc-ws-host=0.0.0.0 BESU_RPC_WS_HOST=0.0.0.0 rpc-ws-host=\"0.0.0.0\" The host on which WebSocket JSON-RPC listens. The default is 127.0.0.1. To allow remote connections, set to 0.0.0.0","s":"rpc-ws-host","u":"/public-networks/reference/cli/options","h":"#rpc-ws-host","p":2053},{"i":2276,"t":"Syntax Example Environment variable Configuration file --rpc-ws-max-active-connections= --rpc-ws-max-active-connections=100 BESU_RPC_WS_MAX_ACTIVE_CONNECTIONS=100 rpc-ws-max-active-connections=100 The maximum number of WebSocket connections allowed for JSON-RPC. Once this limit is reached, incoming connections are rejected. The default is 80.","s":"rpc-ws-max-active-connections","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-active-connections","p":2053},{"i":2278,"t":"Syntax Example Environment variable Configuration file --rpc-ws-max-frame-size= --rpc-ws-max-frame-size=65536 BESU_RPC_WS_MAX_FRAME_SIZE=65536 rpc-ws-max-frame-size=65536 The maximum size in bytes for JSON-RPC WebSocket frames. If this limit is exceeded, the WebSocket disconnects. The default is 1048576 (or 1 MB).","s":"rpc-ws-max-frame-size","u":"/public-networks/reference/cli/options","h":"#rpc-ws-max-frame-size","p":2053},{"i":2280,"t":"Syntax Example Environment variable Configuration file --rpc-ws-port= # to listen on port 6174 --rpc-ws-port=6174 BESU_RPC_WS_PORT=6174 rpc-ws-port=\"6174\" The port (TCP) on which WebSocket JSON-RPC listens. The default is 8546. You must expose ports appropriately.","s":"rpc-ws-port","u":"/public-networks/reference/cli/options","h":"#rpc-ws-port","p":2053},{"i":2282,"t":"Syntax Example Environment variable Configuration file --security-module= --security-module=security_module BESU_SECURITY_MODULE=security_module security-module=\"security_module\" Name of the security module plugin to use. For example, a Hardware Security Module (HSM) or V3 filestore plugin. The default is the node's local private key file specified using --node-private-key-file.","s":"security-module","u":"/public-networks/reference/cli/options","h":"#security-module","p":2053},{"i":2284,"t":"Syntax Example Environment variable Configuration file --static-nodes-file= --static-nodes-file=~/besudata/static-nodes.json BESU_STATIC_NODES_FILE=~/besudata/static-nodes.json static-nodes-file=\"~/besudata/static-nodes.json\" Static nodes JSON file containing the static nodes for this node to connect to. The default is datapath/static-nodes.json.","s":"static-nodes-file","u":"/public-networks/reference/cli/options","h":"#static-nodes-file","p":2053},{"i":2286,"t":"Syntax Example Environment variable Configuration file --strict-tx-replay-protection-enabled[=] --strict-tx-replay-protection-enabled=false STRICT_TX_REPLAY_PROTECTION_ENABLED=false strict-tx-replay-protection-enabled=false Enables or disables replay protection, in accordance with EIP-155, on transactions submitted using JSON-RPC. The default is false.","s":"strict-tx-replay-protection-enabled","u":"/public-networks/reference/cli/options","h":"#strict-tx-replay-protection-enabled","p":2053},{"i":2288,"t":"Syntax Example Environment variable Example configuration file --sync-min-peers= --sync-min-peers=8 BESU_SYNC_MIN_PEERS=8 sync-min-peers=8 The minimum number of peers required before starting sync. The default is 5. Set to 1 to enable static peers to contribute to the initial sync. info This option does not apply to Proof of Stake networks.","s":"sync-min-peers, fast-sync-min-peers","u":"/public-networks/reference/cli/options","h":"#sync-min-peers-fast-sync-min-peers","p":2053},{"i":2290,"t":"Syntax Example Environment variable Configuration file --sync-mode= --sync-mode=SNAP BESU_SYNC_MODE=SNAP sync-mode=\"SNAP\" The synchronization mode. Use SNAP for snap sync, CHECKPOINT for checkpoint sync, FAST for fast sync, and FULL for full sync. The default is FULL when connecting to a private network by not using the --network option and specifying the --genesis-file option. The default is SNAP when using the --network option with named networks, except for the dev development network. SNAP is also the default if running Besu on the default network (Ethereum Mainnet) by specifying neither network nor genesis file. Sync nodes for BFT If you're running a node on a QBFT or IBFT 2.0 network, your node must use fast sync or full sync. tip We recommend using snap sync over fast sync because snap sync can be faster by several days. It might become impossible to sync Ethereum Mainnet using fast sync in the future, as clients drop support for fast sync. We recommend you update Besu to a version that supports newer sync methods. When synchronizing in a mode other than FULL, most historical world state data is unavailable. Any methods attempting to access unavailable world state data return null.","s":"sync-mode","u":"/public-networks/reference/cli/options","h":"#sync-mode","p":2053},{"i":2292,"t":"Syntax Example Environment variable Configuration file --target-gas-limit= --target-gas-limit=8000000 BESU_TARGET_GAS_LIMIT=8000000 target-gas-limit=\"8000000\" The gas limit toward which Besu will gradually move on an existing network, if enough miners are in agreement. To change the block gas limit set in the genesis file without creating a new network, use target-gas-limit. The gas limit between blocks can change only 1/1024th, so the target tells the block creator how to set the gas limit in its block. If the values are the same or within 1/1024th, Besu sets the limit to the specified value. Otherwise, the limit moves as far as it can within that constraint. If a value for target-gas-limit is not specified, the block gas limit remains at the value specified in the genesis file. Use the miner_changeTargetGasLimit API to update the target-gas-limit while Besu is running. Alternatively restart Besu with an updated target-gas-limit value.","s":"target-gas-limit","u":"/public-networks/reference/cli/options","h":"#target-gas-limit","p":2053},{"i":2294,"t":"Syntax Example Environment variable Configuration file --tx-pool= --tx-pool=sequenced BESU_TX_POOL=sequenced tx-pool=\"sequenced\" Type of transaction pool to use. Set to layered to use the layered transaction pool implementation. The default is layered. Set to sequenced to use the sequenced transaction pool. The default is sequenced for the enterprise/private profile.","s":"tx-pool","u":"/public-networks/reference/cli/options","h":"#tx-pool","p":2053},{"i":2296,"t":"Syntax Example Environment variable Configuration file --tx-pool-blob-price-bump= --tx-pool-blob-price-bump=25 BESU_TX_POOL_BLOB_PRICE_BUMP=25 tx-pool-blob-price-bump=\"25\" Sets the price bump policy for re-issued blob transactions as a percentage increase in price. A blob transaction can only replace, or be replaced by, another blob transaction. The default is 100.","s":"tx-pool-blob-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-blob-price-bump","p":2053},{"i":2298,"t":"Syntax Example Environment variable Configuration file --tx-pool-enable-save-restore[=] --tx-pool-enable-save-restore=true BESU_TX_POOL_ENABLE_SAVE_RESTORE=true tx-pool-enable-save-restore=true Enables or disables saving the transaction pool contents to a file on shutdown and reloading it at startup. The default is false. You can define a custom path to the transaction pool file using the --tx-pool-save-file option.","s":"tx-pool-enable-save-restore","u":"/public-networks/reference/cli/options","h":"#tx-pool-enable-save-restore","p":2053},{"i":2300,"t":"Syntax Example Environment variable Configuration file --tx-pool-layer-max-capacity= --tx-pool-layer-max-capacity=20000000 BESU_TX_POOL_LAYER_MAX_CAPACITY=20000000 tx-pool-layer-max-capacity=\"20000000\" Maximum amount of memory (in bytes) that any layer within the layered transaction pool can occupy. The default is 12500000, or 12.5 MB. There are two memory-limited layers in the transaction pool, so the expected memory consumption is twice the value specified by this option, or 25 MB by default. Increase this value if you have spare RAM and the eviction rate is high for your network.","s":"tx-pool-layer-max-capacity","u":"/public-networks/reference/cli/options","h":"#tx-pool-layer-max-capacity","p":2053},{"i":2302,"t":"Syntax Example Environment variable Configuration file --tx-pool-limit-by-account-percentage= --tx-pool-limit-by-account-percentage=0.1 BESU_TX_POOL_LIMIT_BY_ACCOUNT_PERCENTAGE=0.1 tx-pool-limit-by-account-percentage=0.4 The maximum percentage of transactions from a single sender kept in the transaction pool. Accepted values are in the range (0–1]. The default is .001, or 0.1% of transactions from a single sender to be kept in the pool. caution With the layered transaction pool implementation, this option is not applicable. Replace this option with --tx-pool-max-future-by-sender to specify the maximum number of sequential transactions from a single sender kept in the pool. The default value is often unsuitable for private networks. This feature mitigates future-nonce transactions from filling the pool without ever being executable by Besu. This is important for Mainnet, but may cause issues on private networks. Please update this value or set to 1 if you know the nodes gossiping transactions in your network.","s":"tx-pool-limit-by-account-percentage","u":"/public-networks/reference/cli/options","h":"#tx-pool-limit-by-account-percentage","p":2053},{"i":2304,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-future-by-sender= --tx-pool-max-future-by-sender=250 BESU_TX_POOL_MAX_FUTURE_BY_SENDER=250 tx-pool-max-future-by-sender=\"250\" The maximum number of sequential transactions from a single sender kept in the layered transaction pool. The default is 200. Increase this value to allow a single sender to fit more transactions in a single block. For private networks, you can set this in the hundreds or thousands if you want to ensure transactions with large nonce gaps remain in the transaction pool.","s":"tx-pool-max-future-by-sender","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-future-by-sender","p":2053},{"i":2306,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-prioritized= --tx-pool-max-prioritized=1500 BESU_TX_POOL_MAX_PRIORITIZED=1500 tx-pool-max-prioritized=\"1500\" The maximum number of transactions that are prioritized in the layered transaction pool. The default is 2000. For private networks, we recommend setting this value to the maximum number of transactions that fit in a block in your network.","s":"tx-pool-max-prioritized","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized","p":2053},{"i":2308,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-prioritized-by-type= --tx-pool-max-prioritized-by-type=BLOB=6 BESU_TX_POOL_MAX_PRIORITIZED_BY_TYPE=BLOB=6 tx-pool-max-prioritized-by-type=\"BLOB=6\" The maximum number of transactions of a specific transaction type that are prioritized in the layered transaction pool. This option is mostly useful for tuning the amount of prioritized blob transactions in the transaction pool. Keeping the prioritized layer sorted is costly, and only a few blob transactions can fit in a block (currently a maximum of six). Tuning the maximum number of prioritized transactions by type can help maintain the efficiency and performance of the transaction pool. The default is BLOB=6.","s":"tx-pool-max-prioritized-by-type","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-prioritized-by-type","p":2053},{"i":2310,"t":"Syntax Example Environment variable Configuration file --tx-pool-max-size= --tx-pool-max-size=2000 BESU_TX_POOL_MAX_SIZE=2000 tx-pool-max-size=\"2000\" The maximum number of transactions kept in the transaction pool. The default is 4096. caution With the layered transaction pool implementation, this option is not applicable because the layered pool is limited by memory size instead of the number of transactions. To configure the maximum memory capacity, use --tx-pool-layer-max-capacity.","s":"tx-pool-max-size","u":"/public-networks/reference/cli/options","h":"#tx-pool-max-size","p":2053},{"i":2312,"t":"Syntax Example Environment variable Configuration file --tx-pool-min-gas-price= --tx-pool-min-gas-price=2000 BESU_TX_POOL_MIN_GAS_PRICE=2000 tx-pool-min-gas-price=\"2000\" The minimum gas price, in wei, required for a transaction to be accepted into the transaction pool.","s":"tx-pool-min-gas-price","u":"/public-networks/reference/cli/options","h":"#tx-pool-min-gas-price","p":2053},{"i":2314,"t":"Syntax Example Environment variable Configuration file --tx-pool-no-local-priority[=] --tx-pool-no-local-priority=true BESU_TX_POOL_NO_LOCAL_PRIORITY=true tx-pool-no-local-priority=true If this option is set to true, senders of transactions submitted via RPC are not prioritized over remote transactions in the transaction pool. The default is false.","s":"tx-pool-no-local-priority","u":"/public-networks/reference/cli/options","h":"#tx-pool-no-local-priority","p":2053},{"i":2316,"t":"Syntax Example Environment variable Configuration file --tx-pool-price-bump= --tx-pool-price-bump=25 BESU_TX_POOL_PRICE_BUMP=25 tx-pool-price-bump=25 The price bump percentage to replace an existing transaction in the transaction pool. For networks with a base fee and priced gas, the default is 10, or 10%. For networks with zero base fee, or free gas, the default is 0.","s":"tx-pool-price-bump","u":"/public-networks/reference/cli/options","h":"#tx-pool-price-bump","p":2053},{"i":2318,"t":"Syntax Example Environment variable Configuration file --tx-pool-priority-senders=
    [,
    ,...] --tx-pool-priority-senders=0x13003d886a7be927d9451c27eb3bc8d3616e26e9 BESU_TX_POOL_PRIORITY_SENDERS=0x13003d886a7be927d9451c27eb3bc8d3616e26e9 tx-pool-priority-senders=\"0x13003d886a7be927d9451c27eb3bc8d3616e26e9\" A comma-separated list of sender addresses to prioritize in the transaction pool. Transactions sent from these addresses, from any source, are prioritized and only evicted after all others. If not specified, only senders submitting transactions via RPC have priority (unless --tx-pool-no-local-priority is set to true).","s":"tx-pool-priority-senders","u":"/public-networks/reference/cli/options","h":"#tx-pool-priority-senders","p":2053},{"i":2320,"t":"Syntax Example Environment variable Configuration file --tx-pool-retention-hours= --tx-pool-retention-hours=5 BESU_TX_POOL_RETENTION_HOURS=5 tx-pool-retention-hours=5 The maximum period (in hours) to hold pending transactions in the transaction pool. The default is 13. caution With the layered transaction pool implementation, this option is not applicable because old transactions will expire when the memory cache is full.","s":"tx-pool-retention-hours","u":"/public-networks/reference/cli/options","h":"#tx-pool-retention-hours","p":2053},{"i":2322,"t":"Syntax Example Environment variable Configuration file --tx-pool-save-file= --tx-pool-save-file=/home/me/me_node/node_txpool.dump BESU_TX_POOL_SAVE_FILE=/home/me/me_node/node_txpool.dump tx-pool-save-file=\"/home/me/me_node/node_txpool.dump\" The path to the file that stores the transaction pool's content if the save and restore functionality is enabled using --tx-pool-enable-save-restore. The file is created on shutdown and reloaded during startup. The default file name is txpool.dump in the data directory.","s":"tx-pool-save-file","u":"/public-networks/reference/cli/options","h":"#tx-pool-save-file","p":2053},{"i":2324,"t":"Syntax -V, --version Prints version information and exits.","s":"version","u":"/public-networks/reference/cli/options","h":"#version","p":2053},{"i":2326,"t":"Syntax Example Environment variable Configuration file --version-compatibility-protection[=] --version-compatibility-protection=true BESU_VERSION_COMPATIBILITY_PROTECTION=true version-compatibility-protection=true Enables or disables performing version compatibility checks when starting Besu. If set to true, it checks that the version of Besu being started is the same or later than the version of Besu that previously started with the same data directory. The default is false for named networks, such as Mainnet or Holesky, and true for non-named networks.","s":"version-compatibility-protection","u":"/public-networks/reference/cli/options","h":"#version-compatibility-protection","p":2053},{"i":2328,"t":"Syntax -X, --Xhelp Displays the early access options and their descriptions, and exits. caution The displayed options are unstable and may change between releases.","s":"Xhelp","u":"/public-networks/reference/cli/options","h":"#xhelp","p":2053},{"i":2330,"t":"caution This reference contains API methods that apply to both public and private networks. For private-network-specific API methods, see the private network API reference. All JSON-RPC HTTP examples use the default host and port endpoint http://127.0.0.1:8545. If using the --rpc-http-host or --rpc-http-port options, update the endpoint. Most example requests are made against private networks. Depending on network configuration and activity, your example results might be different. Besu JSON-RPC APIs documentation in Postman format View the Besu JSON-RPC APIs documentation in the Postman format and obtain example requests in multiple coding languages. Run in Postman​ Click the following button to fork the collection and run requests directly on your local network. . Download collection​ Alternatively you can download the JSON collection file.","s":"Besu API methods","u":"/public-networks/reference/api","h":"","p":2329},{"i":2332,"t":"The ADMIN API methods provide administrative functionality to manage your node. note The ADMIN API methods are not enabled by default for JSON-RPC. To enable the ADMIN API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"ADMIN methods","u":"/public-networks/reference/api","h":"#admin-methods","p":2329},{"i":2334,"t":"Adds a static node. caution If connections are timing out, ensure the node ID in the enode URL is correct. Parameters​ enode: string - enode URL of peer to add Returns​ result: boolean - true if peer added or false if peer already a static node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_addPeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"admin_addPeer","u":"/public-networks/reference/api","h":"#admin_addpeer","p":2329},{"i":2336,"t":"Changes the log level without restarting Besu. You can change the log level for all logs, or you can change the log level for specific packages or classes. You can specify only one log level per RPC call. Parameters​ level: string - log level log_filter: array - (optional) packages or classes for which to change the log level Returns​ result: string - Success if the log level has changed, otherwise error The following example changes the debug level for specified classes to DEBUG. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"admin_changeLogLevel\", \"params\":[\"DEBUG\", [\"org.hyperledger.besu.ethereum.eth.manager\",\"org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler\"]], \"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\", \"method\":\"admin_changeLogLevel\", \"params\":[\"DEBUG\", [\"org.hyperledger.besu.ethereum.eth.manager\",\"org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.ApiHandler\"]], \"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" } The following example changes the debug level of all logs to WARN. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_changeLogLevel\",\"params\":[\"WARN\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_changeLogLevel\", \"params\": [\"WARN\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"admin_changeLogLevel","u":"/public-networks/reference/api","h":"#admin_changeloglevel","p":2329},{"i":2338,"t":"Generates cached log bloom indexes for blocks. APIs such as eth_getLogs and eth_getFilterLogs use the cache for improved performance. tip Manually executing admin_generateLogBloomCache is not required unless the --auto-log-bloom-caching-enabled command line option is set to false. note Each index file contains 100000 blocks. The last fragment of blocks less than 100000 are not indexed. Parameters​ startBlock: string - block to start generating indexes endBlock: string - block to stop generating indexes Returns​ result: object - log bloom index details: startBlock: string - starting block for the last requested cache generation endBlock: string - ending block for the last requested cache generation currentBlock: string - most recent block added to the cache indexing: boolean - indicates if indexing is in progress boolean - indicates acceptance of the request from this call to generate the cache curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_generateLogBloomCache\", \"params\":[\"0x0\", \"0x10000\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_generateLogBloomCache\", \"params\": [\"0x0\", \"0x10000\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"startBlock\": \"0x0\", \"endBlock\": \"0x10000\", \"currentBlock\": \"0x0\", \"indexing\": true, \"requestAccepted\": true } }","s":"admin_generateLogBloomCache","u":"/public-networks/reference/api","h":"#admin_generatelogbloomcache","p":2329},{"i":2340,"t":"Removes cache files for the specified range of blocks. Parameters​ fromBlock: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter toBlock: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. You can skip a parameter by using an empty string, \"\". If you specify: No parameters, the call removes cache files for all blocks. Only fromBlock, the call removes cache files for the specified block. Only toBlock, the call removes cache files from the genesis block to the specified block. Returns​ result: object - Cache Removed status or error. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_logsRemoveCache\",\"params\":[\"1\", \"100\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_logsRemoveCache\", \"params\": [\"1\", \"100\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"Status\": \"Cache Removed\" } }","s":"admin_logsRemoveCache","u":"/public-networks/reference/api","h":"#admin_logsremovecache","p":2329},{"i":2342,"t":"Repairs cached logs by fixing all segments starting with the specified block number. Parameters​ startBlock: string - decimal index of the starting block to fix; defaults to the head block Returns​ result: object - status of the repair request; Started or Already running curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_logsRepairCache\",\"params\":[\"1200\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"admin_logsRepairCache\", \"params\": [\"1200\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"Status\": \"Started\" } }","s":"admin_logsRepairCache","u":"/public-networks/reference/api","h":"#admin_logsrepaircache","p":2329},{"i":2344,"t":"Returns networking information about the node. The information includes general information about the node and specific information from each running Ethereum sub-protocol (for example, eth). Parameters​ None Returns​ result: object - node object with the following fields: enode: string - enode URL of the node listenAddr: string - host and port for the node name: string - client name id: string - node public key ports: object - peer discovery and listening ports protocols: object - list of objects containing information for each Ethereum sub-protocol note If the node is running locally, the host of the enode and listenAddr display as [::] in the result. When advertising externally, the external address displayed for the enode and listenAddr is defined by --nat-method. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"enode\": \"enode://87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3@[::]:30303\", \"listenAddr\": \"[::]:30303\", \"name\": \"besu/v1.0.1-dev-0d2294a5/osx-x86_64/oracle-java-1.8\", \"id\": \"87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3\", \"ports\": { \"discovery\": 30303, \"listener\": 30303 }, \"protocols\": { \"eth\": { \"config\": { \"chainId\": 2018, \"homesteadBlock\": 0, \"daoForkBlock\": 0, \"daoForkSupport\": true, \"eip150Block\": 0, \"eip155Block\": 0, \"eip158Block\": 0, \"byzantiumBlock\": 0, \"constantinopleBlock\": 0, \"constantinopleFixBlock\": 0, \"ethash\": { \"fixeddifficulty\": 100 } }, \"difficulty\": 78536, \"genesis\": \"0x43ee12d45470e57c86a0dfe008a5b847af9e372d05e8ba8f01434526eb2bea0f\", \"head\": \"0xc6677651f16d07ae59cab3a5e1f0b814ed2ec27c00a93297b2aa2e29707844d9\", \"network\": 2018 } } } }","s":"admin_nodeInfo","u":"/public-networks/reference/api","h":"#admin_nodeinfo","p":2329},{"i":2346,"t":"Returns networking information about connected remote nodes. Parameters​ None Returns​ result: array of objects - list of objects returned for each remote node, with the following fields. version: string - P2P protocol version name: string - client name caps: array of strings - list of Ethereum sub-protocol capabilities network: object - local and remote addresses established at time of bonding with the peer (the remote address might not match the hex value for port; it depends on which node initiated the connection.) port: string - port on the remote node on which P2P discovery is listening id: string - node public key (excluding the 0x prefix, the node public key is the ID in the enode URL enode://@:.) protocols: object - current state of peer including difficulty and head (head is the hash of the highest known block for the peer.) enode: string - enode URL of the remote node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"version\": \"0x5\", \"name\": \"besu/v20.10.4-dev-0905d1b2/osx-x86_64/adoptopenjdk-java-11\", \"caps\": [\"eth/62\", \"eth/63\", \"eth/64\", \"eth/65\", \"IBF/1\"], \"network\": { \"localAddress\": \"192.168.1.229:50115\", \"remoteAddress\": \"168.61.153.255:40303\" }, \"port\": \"0x765f\", \"id\": \"0xe143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc\", \"protocols\": { \"eth\": { \"difficulty\": \"0x1ac\", \"head\": \"0x964090ae9277aef43f47f1b8c28411f162243d523118605f0b1231dbfdf3611a\", \"version\": 65 } }, \"enode\": \"enode://e143eadaf670d49afa3327cae2e655b083f5a89dac037c9af065914a9f8e6bceebcfe7ae2258bd22a9cd18b6a6de07b9790e71de49b78afa456e401bd2fb22fc@127.0.0.1:30303\" } ] }","s":"admin_peers","u":"/public-networks/reference/api","h":"#admin_peers","p":2329},{"i":2348,"t":"Removes a static node. Parameters​ enode: string - enode URL of peer to remove Returns​ result: boolean - true if peer removed or false if peer not a static node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_removePeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"admin_removePeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"admin_removePeer","u":"/public-networks/reference/api","h":"#admin_removepeer","p":2329},{"i":2350,"t":"The DEBUG API methods allow you to inspect and debug the network. The DEBUG API is a more verbose alternative to the TRACE API, and its main purpose is compatibility with tools such as Remix. Where these APIs overlap, we recommend using the TRACE API for production use over the DEBUG API. Specifically, we recommend trace_block over debug_traceBlock, and trace_transaction over debug_traceTransaction. note The DEBUG API methods are not enabled by default for JSON-RPC. To enable the DEBUG API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"DEBUG methods","u":"/public-networks/reference/api","h":"#debug-methods","p":2329},{"i":2352,"t":"Returns account information at the specified index of the specified block. Parameters​ blockHashOrNumber: string - block hash or number at which to retrieve account information txIndex: number - transaction index at which to retrieve account information address: string - contract or account address for which to retrieve information Returns​ result: object - account details object with the following fields: code: data - code for the account. Displays 0x0 if the address is an externally owned account. nonce: quantity - number of transactions made by the account before this one balance: quantity - balance of the account in wei codehash: data - code hash for the account This example uses an externally owned account address for the address parameter. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountAt\",\"params\":[\"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6\", 0, \"0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountAt\", \"params\": [ \"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6\", 0, \"0xbcde5374fce5edbc8e2a8697c15331677e6ebf0b\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"code\": \"0x0\", \"nonce\": \"0x5\", \"balance\": \"0xad78ebc5ac6200000\", \"codehash\": \"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\" } } This example uses a contract address for the address parameter. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountAt\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountAt\", \"params\": [ \"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"code\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b27b880414610030575b600080fd5b61004a60048036038101906100459190610108565b61004c565b005b60606000806000604051935036600085376000803686885af490503d9150816000853e806000811461007d57610093565b60008311156100925761012085019350836040525b5b5060008114156100ec578473ffffffffffffffffffffffffffffffffffffffff167f410d96db3f80b0f89b36888c4d8a94004268f8d42309ac39b7bcba706293e099856040516100e3919061016e565b60405180910390a25b5050505050565b60008135905061010281610227565b92915050565b60006020828403121561011e5761011d610211565b5b600061012c848285016100f3565b91505092915050565b600061014082610190565b61014a818561019b565b935061015a8185602086016101de565b61016381610216565b840191505092915050565b600060208201905081810360008301526101888184610135565b905092915050565b600081519050919050565b600082825260208201905092915050565b60006101b7826101be565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156101fc5780820151818401526020810190506101e1565b8381111561020b576000848401525b50505050565b600080fd5b6000601f19601f8301169050919050565b610230816101ac565b811461023b57600080fd5b5056fea2646970667358221220fdfb5c371055342507b8fb9ca7b0c234f79819bd5cb05c0d467fb605de979eb564736f6c63430008060033\", \"nonce\": \"0x1\", \"balance\": \"0x0\", \"codehash\": \"0xf5f334d41776ed2828fc910d488a05c57fe7c2352aab2d16e30539d7726e1562\" } }","s":"debug_accountAt","u":"/public-networks/reference/api","h":"#debug_accountat","p":2329},{"i":2354,"t":"Retesteth uses debug_accountRange to implement debugging. Returns the accounts for a specified block. Parameters​ blockHashOrNumber: string - block hash or number at which to retrieve account information txIndex: number - transaction index at which to retrieve account information address: string - address hash from which to start limit: integer - maximum number of account entries to return Returns​ result: object - account details object with the following fields: addressMap: map of strings to strings - map of address hashes and account addresses nextKey: string - hash of the next address if any addresses remain in the state, otherwise zero curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_accountRange\",\"params\":[\"12345\", 0, \"0\", 5],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_accountRange\", \"params\": [\"12345\", 0, \"0\", 5], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"addressMap\": { \"0x005e5...86960\": \"0x0000000000000000000000000000000000000000\", \"0x021fe...6ffe3\": \"0x0000000000000000000000000000000000000000\", \"0x028e6...ab776\": \"0x0000000000000000000000000000000000000000\", \"0x02cb5...bc4d8\": \"0x0000000000000000000000000000000000000000\", \"0x03089...23fd5\": \"0x0000000000000000000000000000000000000000\" }, \"nextKey\": \"0x04242954a5cb9748d3f66bcd4583fd3830287aa585bebd9dd06fa6625976be49\" } }","s":"debug_accountRange","u":"/public-networks/reference/api","h":"#debug_accountrange","p":2329},{"i":2356,"t":"Sends a list of signed transactions. This is used to quickly load a network with a lot of transactions. This does the same thing as calling eth_sendRawTransaction multiple times. Parameters​ data: string - signed transaction data array Returns​ result: array of objects - object returned for each transaction, with the following fields: index: string - index of the transaction in the request parameters array success: boolean - indicates whether or not the transaction has been added to the transaction pool errorMessage: string - (optional) error message curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_batchSendRawTransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_batchSendRawTransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"index\": 0, \"success\": true }, { \"index\": 1, \"success\": false, \"errorMessage\": \"Invalid raw transaction hex\" }, { \"index\": 2, \"success\": true }, { \"index\": 3, \"success\": false, \"errorMessage\": \"TRANSACTION_REPLACEMENT_UNDERPRICED\" } ] }","s":"debug_batchSendRawTransaction","u":"/public-networks/reference/api","h":"#debug_batchsendrawtransaction","p":2329},{"i":2358,"t":"Returns a list of invalid blocks. This is used to detect and analyze consensus flaws. Parameters​ None Returns​ result: array of objects - list of block objects curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getBadBlocks\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getBadBlocks\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"block\": { \"number\": \"0xd\", \"hash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"parentHash\": \"0x544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x02c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41\", \"stateRoot\": \"0x861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5\", \"receiptsRoot\": \"0xccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x1\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01\", \"size\": \"0x3a0\", \"gasLimit\": \"0xffffffffffff\", \"gasUsed\": \"0x1a488\", \"timestamp\": \"0x5f5b6824\", \"uncles\": [], \"transactions\": [ { \"blockHash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"blockNumber\": \"0xd\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x1a49e\", \"gasPrice\": \"0x3e8\", \"hash\": \"0xdd8cf045113754c306ba9ac8ac8786235e33bc5c087678084ef260a2a583f127\", \"input\": \"0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033\", \"nonce\": \"0x0\", \"to\": null, \"transactionIndex\": \"0x0\", \"value\": \"0x0\", \"v\": \"0xf9d\", \"r\": \"0xa7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7\", \"s\": \"0x130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fca\" } ] }, \"hash\": \"0x85c2edc1ca74b4863cab46ff6ed4df514a698aa7c29a9bce58742a33af07d7e6\", \"rlp\": \"0xf9039df9025ca0544a2f7a4c8defc0d8da44aa0c0db7c36b56db2605c01ed266e919e936579d31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0861ab7e868e3c23f84b7c4ed86b52a6a4f063633bc45ef29212c33459df84ea5a002c387e001cbe2a8296bfa2e18afbc3480d0e49588b05556148b0bf7c17dec41a0ccd2d33763dc0ac3fe02d4ecbbcd7d2bdc6f57db635ba31007184679303721d7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d86ffffffffffff8301a488845f5b6824b86100000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a49e8080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da0a7a15050302ca4b7d3842d35cdd3cbf25b2c48c0c37f96d78beb6a6a6bc4f1c7a0130d29294b2b6a2b7e89f501eb27772f7abf37bfa28a1ce300daade975589fcac0\" }, { \"block\": { \"number\": \"0x8\", \"hash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"parentHash\": \"0x98ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207\", \"nonce\": \"0x0000000000000000\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"transactionsRoot\": \"0x8ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486\", \"stateRoot\": \"0x140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3bac\", \"receiptsRoot\": \"0x2b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3\", \"miner\": \"0x0000000000000000000000000000000000000000\", \"difficulty\": \"0x2\", \"totalDifficulty\": \"0x2\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701\", \"size\": \"0x3a0\", \"gasLimit\": \"0xffffffffffff\", \"gasUsed\": \"0x1a4c9\", \"timestamp\": \"0x5f5b6b80\", \"uncles\": [], \"transactions\": [ { \"blockHash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"blockNumber\": \"0x8\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x1a4c9\", \"gasPrice\": \"0x3e8\", \"hash\": \"0x675e336a4281b29c619dfd4ccfbd2f930f3728b20caf9e0067284aa3224e6758\", \"input\": \"0x608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033\", \"nonce\": \"0x0\", \"to\": null, \"transactionIndex\": \"0x0\", \"value\": \"0x0\", \"v\": \"0xf9d\", \"r\": \"0x2e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4\", \"s\": \"0x50e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0\" } ] }, \"hash\": \"0x601a3ae9b6eceb2476d249e1cffe058ba3ff2c9c1b28b1ec7a0259fdd1d90121\", \"rlp\": \"0xf9039df9025ca098ae440cd7b904d842daa6c263608969a3c8ce6a9acd6bd1f99b394f5f28a207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0140a9783291704223eb759e3a0db5471a520d349fc17ac2f77ff8582472e3baca08ee998cc699a1f9310a1079458780b3ebee8756f96a0905f5224b89d0eb17486a02b5c77f6e7764d2468178fab7253346b9b8bb6a34b63946f6bdc2f5ad398bfc3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020886ffffffffffff8301a4c9845f5b6b80b86100000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f9013af90137808203e88301a4c98080b8e6608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80636057361d146037578063b05784b8146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b60686088565b6040518082815260200191505060405180910390f35b8060008190555050565b6000805490509056fea26469706673582212208dea039245bf78c381278382d7056eef5083f7d243d8958817ef447e0a403bd064736f6c63430006060033820f9da002e30624c0305e64812e1d9e325ba6e50410314634b008edcb50f45be71fa0d4a050e205faed23c219ba15610de2451d458cbd4221207b2168344cfc972a7973c0c0\" } ] }","s":"debug_getBadBlocks","u":"/public-networks/reference/api","h":"#debug_getbadblocks","p":2329},{"i":2360,"t":"Returns the RLP encoding of the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - RLP-encoded block object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawBlock\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawBlock\",\"params\":[\"0x32026E\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf96096f90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9bf95c56f8ac82d51f8502540be4008303c9e294a68d4c1e3de1b721ad1356bbf827d6bc8cef304f80b844b1bb4d351300dbc7e12342566318001b83aefc9f20080000f3ef25472407fe9c9c69a1470000000242692bb4cd506c409651ab80eb3acfa54551d3dbc9af4493605d79871ba01e474fb147b16b9538d7a59a57738e406158d9cc306a9062b1b7a9f544c35abfa061aabb714c760f2243a16a024811679d402c8822e8b25dfd0038d84298fb5205b87502f87283aa36a754849502f900849502f9108302222794102554afa6b5dbccc86176faef2b2d854201756e8084e2bc7b43c001a04f2398f24bc950db1f5439de3cf6431ea277236595ae8dc5815c0cc671c9f97ca029898786a59c56f086fc0f7a16859f366cf46084add999fe137cbf43693712e8b87c02f87983aa36a7830293748459682f00850165a0bc008255f094fafb56bb5b37c3b0b0ee9d7c31f018aac91dfb778806f05b59d3b2000080c080a0b069dd8967533a773e592c26b1b36df0793d0b9f6eceba34da246f602c2fae58a002009dab32ab63a25b705d9a00e311f7cd5d85e73f9b2c03ffd0e5135c0bb2c6b89502f89283aa36a7018459682f008459682f0983011fec945b9fedd37f0b92e7e282b19cebcf06f57b77c60480a46a62784200000000000000000000000019a1fcc6fcc5832cd2db7704d75efbc800f5a742c001a0c65eb0e48090a8f8830de47f430b9ad11071a62a5db9555619a990d7e9b81738a05a6e826610a5b2ee529a22942ebcd3abd2a8a10228098c8158380e8fcceb962fb9028002f9027c83aa36a7178459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e17852000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f168270000000000000000000000003aa4d7eb55ec2539f5305eb27ea42f6f90f16827000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a004f8666c8e5d0f3c7110994f624d24aa47a1327814289698c3e2777284a5cfdca04ff05f1b8c5beb58972d40e5a7b894d5e28ad2f15a3429c7d2bee6b6a9633730b9019f02f9019b83aa36a70b8459682f008459682f098303644f944284890d4acd0bcb017ece481b96fd4cb457cac88715c0f4db6e0ea0b90124ee1490b20000000000000000000000000000000000000000000000000000000000028c5c0000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d40000000000000000000000001e8c104d068f22d351859cdbfe41a697a98e6ea20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000222e00000000000000000000000000000000000000000000000000015c0f4db6e0ea00000000000000000000000007847f2e0262512206333ffb200f6d9df2da319d400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000c080a0e5270f6291acc162885656bedf64fbcb904c41951221dc0cbbbdca03bb33ce43a01f08c7ed3c231403b55f37a157d80e121b653baa810add8c02aea722631450dcb87c02f87983aa36a7830293758459682f00850165a0bc008255f0948d247f4fbbe81429d3d164a5c9ae0063210edbdc8806f05b59d3b2000080c080a0bb83dd6181c9a7ae3069af3bdf1820b5e556eaf99e385b8d7b3571321fb2966ba02ac193773704524adcd02824796df83407a42cdd81e786b591eba43c4ffc6c40b9028002f9027c83aa36a7048459682f008459682f0983017ac9942ab7c0ab9ab47fcf370d13058bfee28f2ec0940c880169964394fc8860b9020496e178520000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac6790000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000028c5c00000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac67900000000000000000000000062d23ed77d0e5d0205edabe4ce3a27adc49ac679000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000650cb3772886000000000000000000000000000000000000000000000000000000000000222e000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0fc882968005f717a74a2c2fb345f691091cab084f4bd3934358741807bd5a66ea03f81c68d05d06bf851a6ef5ea6874557a221cbadde24f3fa51f777699b5d2804b8d802f8d583aa36a7822c0b8459682f008459682f098303534f943367dfa11e3148a07c2da773e1f65b155b0abe5680b864ad58bdd100000000000000000000000053844f9577c2334e541aec7df7174ece5df1fcf0000000000000000000000000e9e12c660e77a732940bab3c2cf385c843b834b800000000000000000000000000000000000000000006015d637c177581800000c001a0a292e7723d3c950aa8a557bd91dece34ec527d9efe2cc413d582dcd9fc6bf6eba03386ce6f58e862f329946bf32897f7df5d1c8f818fecfafc1223052fb251d97eb8b602f8b383aa36a7138459682f008459682f09832dc6c094ba175fdab00e7fcf603f43be8f68db7f4de9f3a980b844095ea7b300000000000000000000000084a0cc1ab353da6b7817947f7b116b8ea982c3d20000000000000000000000000000000000000000000000068f365aea1e440000c001a0968ed0274829918071d9cef28e1adbf1fd15ec76e5a4f809971e887b4c9f34b6a001ce26485bc7e3ea71fb99866bd43002b264b2ed80e10850203c2f07b78856bdb87c02f87983aa36a7830293768459682f00850165a0bc008255f0946d3b93db4e4078cf6541a68532d00705d9a4da618806f05b59d3b2000080c080a083c831630788e7ee57c87128d18582e29aa51f1f233e91d916c06d0750578156a0549b5a00477f3fb4d8fbf95ba3a636c3a14ff011c1bbf3a717e00d61735cbf34b87c02f87983aa36a7830293778459682f00850165a0bc008255f0940d3a7d69859a0dd6971d39703b15379e05ae2ec48806f05b59d3b2000080c001a0082660b5db2d3a8a58c0b863673ab27f7cfe4c049dcc52c76a00ab45b0358db5a05a7519a2d399cb534480383ac21262fbde2dd85241495d7832dee8bb02c49c87b87c02f87983aa36a7830293788459682f00850165a0bc008255f0941be13f64a2463fc7a76b4092c53328cc965a77fb8806f05b59d3b2000080c001a0e6ee9b85c3b729518524fdaeb25d47f89f6fc6c4d2c4df707187bef74d73f958a0756bbf4ab119805b77466957b5895c1d5bf422c5f65d8a06f7efd37dcb2c87afb87c02f87983aa36a7830293798459682f00850165a0bc008255f094a90b28fd6f8e46ac668fcb688414184a163e2cd28806f05b59d3b2000080c080a0d394dd43c58591e5dda8a7f3a2f4eae1bfd65655b9e9eec5facc6dcb39aa77baa002eeabf3fe9c0a56eae476d2f6452ea72e63a9c9b1180290b792883258f939f5b8f802f8f583aa36a7830283818459682f008459682f1082962494d0f723c6b2226df56fe41e63b9eaa66eb540bcb880b884abac047b000000000000000000000000000000000000000000000000000000000103e9f0f3471dc445d8f209ef546e0d20eaccc12ed0a5b4100007f57d9bc8638dacaf6480000000000000000000000000000000000000000000000000000000001d209b1ea11d77d1ab457eb3e2954cb2b98e77b5b07e2a4f48507af0adc61329ddc210c001a0efa10ab60f3bd1e7c4a8d52a275a568fbe2f5edc9e1eaf386299577ff9ddbd6ba06e62cf2f66b58f655ddd3eae47ce40408445b086f6ea858edb7bd847ee206207f86f82e6e582014482f618949ebf6b12e7e33b8672788e7b2b3330356f6f2c41880de0b6b3a7640000808401546d72a008d6be7aa21be0a43e08e960620f4c40c44010a743ead9919ef9423863c08b12a06a63a7caae4504ee5528e50387ca09974f7124035328a62d1085da2fee6618f9f86f82e1c382014482f618949c68eb31c4d00b94c3e3d4c2887946f8b076b24c880de0b6b3a7640000808401546d72a0c22d48d72c70ccf0a44d0950daf16741838f9333ee0bc5e05ff02b058da1e010a06a20c9f74cbc14c0d5bf3b3c38d3c33a5ace9194cddc2c533afb16459eaa7647f86f82e4cb82014482f61894d531e7aa3c0bee832aaff22642c7a3128d48a81a880de0b6b3a7640000808401546d72a01dbaeffc8e11964c06a722bae73e35bb5de55b8f959592868f2ff5fc13b69bd3a002acadc04665570a2032cdb616de15bdca79127f21302d62db5baf96ae4734e6f86e830176e381d882520894ad346e81c5b26fe563ab1ba2aa4ff811655882ca872386f26fc10000808401546d72a0b6de11598824e338100d5ebe70c0b0f4d6893fbb36f11ad55cf74b2f43afc5dda05101e65e7e84ea9edba6e5bf1a1e07028ae3fa5213240e812e57cf6b29080726b9235302f9234f83aa36a7830137d564748315f52194ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc00000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5000000000000000000000000000077770000000000000000000000000000000191c15235c348207e935e72b9151056a9661d73631d1e2c3f89ffddf8e74efe8a42ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000030ef2c000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000ec15abee257256da1a964434000f59ddd45b1ce67d5df44f1c82fd5bfe95c3b31dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d493470000000000000000000000000000777700000000000000000000000000000001d4b5b35d93f51c8143f6a4cc3d7b320d37ce03989cd88c28601f4ea94cd6554249cff83e4dd8e99a8ef9004b2ac7518996f4784af1f9e52debb6223a697e9652530feda219f333e01f8cd0b31ee83b9c250ee51fde9718ef5fa305cbcd01901200200100002020000400000280000006004000c0020000000000000000000100000000029000000000000000090000000000008000200040000012004020000800000000240002400008000800000020000000001040000000000040824000000000000002040000400000002000080000000000000804000000001001000c84000208000000000180020000014000000000210100510008000082c0000000001200002000000024000008400000000220001800400000008010000052000200000200028000000000800000040200000110000010000010000001020000210004100002000000000900280000010008001000000018004000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc0000000000000000000000000000000000000000000000000000000000034bfbc00000000000000000000000000000000000000000000000000000000002ddb24000000000000000000000000000000000000000000000000000000006436f8d800000000000000000000000000000000000000000000000000000000000002e042ab8767076a555a049372055c846097c99e69c26ab0a24553d21c15de29ea900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b2a7122720155935f15da0807d0054f1a4c3db2a92ec4124bf590ce7a16594f3f1812f260acb049d01ad534a937840a80c0f56fd9a54ca5a8628ed896d14a5f8b2570f5813e35c990656f6300a1a1849429135ada6337646248f6ea03a7f70ac426c1d805216d154ea5a8e5ff953bc04b71b049b4b5bd549b6b0cfa7f8b21dba72a3805c7093d8589f2d4c55b6211441041e8bd7916daed5093fcebd377c31e810a6499e6e26840e3afadc9b339c6abc86b7f89fc3559f4242d373a71389db20219195f6e13069701f6d539dcf63a049726cdd8cadc412d1c43cf3fc0095ae5e2157dc668bdb924d7d7afc2b4632ab8a0e4ef71941a0a6a65645f6cd8570302f90b98bbdd01be238dc07780ee9b93e22ab87f26170d7fc5531347fb9fadcb65dc2ca20442a70be9e785292d533fa9496308a7b1588b50b45c17ea765de525259f036edd3984782399b46793acd5abb9f49e38b309c2363aead57264ac1a44e6432b81127a0bfdc29f01bd04e7db2b2545ed8426d2fe9b3e561793ec8fc875f2a71f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f11fcba848e01c60438611958101321898e95c8fdc936d31389bdba8073b382e5b1e2cd25993ad31586d7525f165fb25a1cf8c22623f983c025d21f0e52ecfec5f0232a753addaad88340ca39f00e9722f35dd25fbe8fdd8846bfc0288215d0638004009396bfcd5e6eb0c587797ae8297decbca48b02407219b910ce163552ed230438292cec430007886beabe7cdf5c6f9c3740a3dd6c52ba88e6d652ce43f90044193c4a42335291795c2cc160dc68b6225edb425a88d27cae159f77df3a2241fbe809c8f1122d245bf439df0761bec97358b96d6653bc83702b559bde5a2d12f771a2a11bc9dc32580bc3ccf9dfacd0a5379587ac5160b45d333a85cde46810ad2875b406f00438aee245ecc63815528a185e9e2a029147db7fcffcb8875e5259f15c3e467de02e035891b131bc715e54e7e27a7acc437bb9f6f84fa4456aa016b3578a73ed8a4706efb935be8b6abe0697e46d878d9c74e274f2816d2fd88146b316731719e125d227e002af95aa13f468a9bae4ff41a4a6036ee7fc321b3249aed4dfb6e75089ec0656ee4e87e1fffefbd74edf55a20d752a85caccf583c0d9e2ef1040b4d36a8e992ad50ce1c4bd2b300b344ca881725c164886a5f8f18035f6e75e67a3eaa2064fc24ff79897edb624e1a67f34deb414d5efaf4c55d482da108aa2ab7504fd5d7f78d91da5c20230380ec013b910b01a26b8bed8a05a004d52db30b7fb01f16347692e9f19f303f48ea8cbbed2d3a3eb277ddf4e9ed8026af5ce92a618c8942caf28b3249044347e14e5c3c2ed5ec0f9cccf1d11a5b290c00773e12c25feafbcceeb8ae6c25a88c9657c627187af6fe0bfea0b3cc36c908a76f90e965bc4135c8596534f444c91aaaaaa6277985e36248bd53ef0f74f103eeac98ba92c5350e4a0c586c851ad25df982e16b2d408de37c687efc6915a41197df379614aa657ab5100627c47896b51b000cb95505bac77e4e440ecd1fe50252fc98f15ee41cafbf717e144da35f424e141639de04ebe5d333e9df8c06821c689d1ef2abbfd12e8a1edc059a9279db7ff44bac1962b5f7297da5c989528229e98a91a3a2e351f371dfa34d4c3676725baa5fa4696f67f4239b5fe1e3fa351d66aa5a2df992426d94ba049bbb4eea0ab22e3b9a7409f2b6719ede64353f4112e4da3919adc16dcd99c545966256493d2699ae529e365c20515d95c013ba2627576fb75a030ffd25b85ed3fc40dbbedbca54427f8dc2255c16b742b3e2b82e1bb634ae73a402927e6dc424d1908942b9b0f2cc17909ed050defe85d24a1986291facbb4ecf9b7ff66c27f8e771d28ec6866e3d24bc97e7be388013df8ba8f407b9147ed9b3581784003a22eeada55656d2be271afce06ef3fca32ac9b77b4f2420d60e892c95418b2a1b7d3dae2738a073ef105e66c08488e8a91e8ebdb5a10e979611bd29245c13cc4c0f5b33eedc5263edd6c27666e0c3f02161114120230511406f9f82102fd8c37c36d4e383e445df4afc6e7dbaa570cfe05b3f6038ec1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5006f155ac97d6757728caceba5530eb745e72277723ad34268b34008a97a27c370e9bc006aeaca4ac36414f35aa41ff400f698623a447c949f7f004f3c3fdb09f2af3c96042e215f0d4bbb23fda72d4f01dd9a55dbdec930919715a23e2cd772a260e2b91324c244d88ce1b83c92dce1aa0e0c255b80ed9325dec0e677563984a1c559ddb4a544eadeb2a38e8ed7736174a30d2bee6e0b65f3766e0b7a4e4d8022dd9f82493a9b1fadd1907147ac29edeb8cf8c7c58fbfa9b82ed3d9f9f05bfc900e52e29a05ca8d445b5245b16928dd61800ebb63933d9c471c2fb38776459641e9debdc606abf6ccfdf8fb41da88ba0745d96fd4557a879fee82e33df32d18b18d7360529f89f3dea680a5cb0c6a7652ee38589e1997f3e64ce4db1d3c04cd628fc0fd6e7ef1944108d48eb742a28467fa4bca693dbc8f923945256da2a83222d172286c82b1949803c54409de4653f258d0cf4266c83d5675ca9b5b3a3fb322b9c493ed7bff0a6165babb19c94d9e2014b13b099f09894fbcf32959b9d4ce71ddf9d24dee8bc40d6be92ee6e1220d84d68ecf1a0424132315c0612802b477b0acabcf346b0ad5ea329ea72f4de7524530bc00ad36baeee835908655faecd350463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea0908c560e84b404afb45f69169d28348ca20bb4f5693db19304d154f60a91ec4e9255be05739f5dc7e0b420d4bde4b188a8520bf39202f81dd3e2f4adcc6f4b4be16880103e0ab232f509729c91ddf0006d6a099a769b38affb89d7489b3bf261106aec362c77acdbb0a71c3da369067eb0f2ee9866a0bbdc4ee41ae81a88d860f1784565b7b1cdd350e8e12241103ff9d57c86c368775530773bafc058cbcea6309bd6d9c144cf6657cac5084ac5fe63ef038a71b3d79e6b7a32cc70039e182052f5cd5e415128e9ab1f553f13c165ea122d089975c1daf617766e12d9f3abb2501571eefde182b767e4b63568d37a8c553671adcee2ee4c7c6d77493e4599cd70d002a718fe0d7c31b7df3893f8b9993c90d7d55eea1c38292f1eae3a7887cfd182977403d5c029a42809f2c6fb8d04aff1c60106ba36367ecca0699866e5ec922ebaeffc4e624d0cc2c748f9c446da0c293d8ba7a28125145ce0936a2dd47172c4502ccf050145fc0584ad8608ee8f6c34c3e718fa5ca616722c5b3549ddb5e2f6a96e82c3d706bf255afda0272c199da51f9a4a869ce8b164694f6ef7593ce08b4bb0afda822eed4a0a7863f532fc0a22de9de5d3456574021b711c42eb1c9190de35ea592568f8ba5528c0f5fadc38e10b14a89a1e49fba9a76ca2478dcca20f8a3c78bb3e1b9869b7375d0deb87819ce7209ad4d73d84a92d08d23649bb50ecb4a1763050b7860afb055461b3158647b453d7977bddde0fac9415327e7eb2ea373fc8abd6793f576e72a47c92d6f6e19fadfdf2c6912365b74929d9b483c19f5146ac5a8dd943caf50b2e0a95fb19066a63a71862a540b2e41731ea66697094e51d309589ce9d25a37c06c9a12839c4c08a050a3ff9e502514f20d573c610466ac5399e11b0153954428f25d16958ab48614d34f768991f84411c401e6900fb0dfaab4108db0ad42fc9ae0a255e60fa4d92747ddda47d07de9f847e7a2be289798c5d34924aae419abdc41d30fb095c6ccabe5c5d5be73ec6197371ea74e08f0583b21901bd748db5348282cabaf57d883f5c55311f1304d7fcd30a9f0b22f810b1a7f089860e4ca0f23ddce9a23d7167762734b10b995d5bd2cf3b31f8f24b18d0a2f7ce1101d3a32d18988f162e91ac94b0f521f24fa287b0d2b97c408079336b89af9e842cf31886c701018ba98d5b0eb0e6d41b67b499f4c466cb1412db0e5937f7ffa83426c9234c713096444d0fc65d1b45f166e54d2a54bc103de110669fbc34555a6d16714ca37651e976b06a7ee96d80af9ff50162016a998451e2ce5819f3346b1fcdf6fe9ff3ec8420d4860a9980ce28fd8c55660983a3fb02cbedb5c638a49e5cdf0b69b71d78e071f1200608e235e6ed0ee8fea5567be12018bcd026412db0538c28bcd4a9afe799d5c677298646943c4200a039d2fced71d985d188f84dfd3132b6a015c50b8a60d712a97c89e0cd7d3a1740244c1522b117dad1220463f5d4af1004c1a2ad6b5708d7d6b28f8ae1e1e7dd1b2d3798b8c2e27a3559c7202aa268099eb3bbdf7c42d0d20b47e5623dba8e6aa1392ff532113c32bd836f4160abb287aefe648aaff6bb0a23928f580347046b64babf354790704538c6ce83f117ac7e83e1e0f54054466cc82b2144cf135be31f24f1b224e2a956827c303b0d82964e284b968c5ebe97688e49ca793a4aba81a3d36eefd8c12e3ce9409be63c3a308636a7b296b804d8125b4f29068ef44d3f2a3c9eb13e61d6365bb96d6973e88a70757b1d9213511d357d252df58d1e848d534d9517165263e803855e8caf387579f1ff0e7e9c3c8e532a2025d8016b70a45c24a546f0b21acf38d16b27eae6466e22396097090291184a7719beb4a55beb89275c6893e01f2075d3b73e165c39335d34a5aa7b280386e30a6df9ba917e1dc6774e2edaa0c87e8f5fcf89306a6fdbcf8cf52cf25f5df473fe350325d510421546765acd00b34ef53e56b01445deea042282e7d6ce20c8f967204c26bda9f2596fa378dc611091ab6db9e1e8d4e9b5c1cc4c4d6ee2ad82b32d08f8cb5a9dd9b03f7aa754f2738ddf2dc0c3318974ff3810765917c251c74ce3d7132c26b5f2ede12a6f62f2e8ddecd5e0d02f99f2ed8ac15641c586d68e093fbe80cefd6a7dbdac6d43e261160807eb82fc2aea870a22b25148d256a083325a5b97bcf0187f748b6c0a1691867344efdd53809fb9edea57669c33780a4aa9e65149937817d3d845d9fccae1876575d5383d06adeacd0f3371209a30e1a9c98446174b0b98560652d0643f120bdabd5484435871b42ad0ce36aa8330c7edd26e64e89eb84e0c72a2c6e49fb24088ae2bdaf7ef07af9bfe381dd6a9ed430a553de1bad4dcefd5239b389090925a69e44e25800d9fccda11ff4e1e4d3049386397f1145c3595ab5115255bc1c1eabb379a37504eda27b1a103b88ae8f174e1d182e3dfbb0b8317d05d6e08c191661b04537421fd84057a9ff5a6eceb68c5bf1f0e356df6e93d936bb6bdccb42127cba43e7615d522242df13f08e5fa162a641430c1431a7d7181dec65202fb618a690c2bf3361d7dc689d5e4a97a550a9b17c8a5ada8f32db3f774e9ed047c02eb7d1ba7add29fa07ab90f290e77bd91ee9b5208b1fb19a37f29dd1a492fa32156a7d43146a336fe6144d19228f975c54ab304565269124e069e864873c0eef23f2e7b012e84ad0c71d76e1b23b8b9a0a66edcd59f4b203a9773ce26baee206254b49efb10cc48bad814b2e299bd478fd4bd8b1ae2c8bd99070b259a9e204e42fc5f65f9e25cb4e4a1a3b67872314fcaeede2abbbc6978660c3e685f6dccb53160d1f7517bbda54177495c23fcf45cdd66363a70a84f2699e239b5071c9e6cb19069f3e0be9f4390c8028ae9960851e34ea18ff88d36ee826c0a4db4e33e94f0ec6651a728a1a2b0c15b30a1783ad4b1d224d87264779a817d107d40c75b77c25addd7b7d6a8b73b2d551f125daed95786920c4130d2061178604f9604a0e2f1c6cdbf3066fd28bf276ee0aee379bc049bc8eba361f4052bd2a698da312c991015c0fbc43ea1d2e72426279fc5181851a15a2f4883018ab01ff8745625f388f05f5fa9abc5d87a710a1227322626115b60f781f4ddd91e205c1cca582a5e37e005396703375846be4f36fdb76c277dc1a2ff1f183cbafc6db485a562f4d08262a207844a3d12261fa0ac479abca76f417df42b037e611b1b6acfda94d5dacc620c3edf5744db24bcc41ef1722dc0e620f8a35c50585a7cecfc97f05bfec21f919420e62a9c4f28ea9585cc056aee08ed8891d077a9647d9c0b5c3141f8c517f13b05bf0a18b99111d2d6e7b4892e78fab35d882e4e153060f0c44cb946d20ad0897a34d2a24d3800b54acd68fdd797aa362560dcede6d12909948bd6f4726a20142eec9c6b78d224b2c24885490bfb492217c6809e0628164579d2c2c16a90f28aa5393ad44c45d4e1500fccdcc684023d7cac4e2cca889333f048cd9a29de018e958d00553c77c74ab50d974df5f654233fb923e809ef6ceabe6a860386603003cc376e90b8bee74f2477343a5ae923aea4ffe99a91b9d9289ddcc3ca316b026b3d369aca474b7941588fc6e9cb062528b10f13b90dd55afd64f7b0ab79163163ce02aed379af25740ac5e37c5628c0b868b7ccfed0ae521c964846f0287d3006952539b2dffaf891bd01fe98a1685e71536d7f33ae85775d11545eb379e0916be616206968605e5033267f6f79cc651c2ce71a790ae5cef19fea7604e479c0793f82db1f8e85bec40d8c6a2dbc9bf76d02a616aced611ae1a7a3756d87dab2855ca585d0048e1e4222ed9d6fa24e3e13677256fbb9959b965727c192696a11474a7f6a6b6c8efb649b1f601c76576f36996ec7a20eee84208232c20e8502903d4e303e4ad7139c654b7e5d2aa262d75672cbb4f653e62ed8e4d28835f7d6d0efb3f39c40558d9cbf19f250681a5c8a59143fec80d6a69d8a265835d6562ef248fa4ac508bd60c9283f6e731baa786828d0f7a635e1d14a448383c8b0243570df4a42799afe03143c227e3fcf0b1393bdf8bacbd26f1041d5e3112c84755942fac77981fe16f048cd882243a8787b09bdc38847a5a9cc9aaf4d30544181ff014dca8b2892c00a933333df6d8ef79041483f2d8c6416897ae7897ca1da85e8f0a493be4520595cd0dd7d32c87999e703704ba0ac7d8b444dba807746123100e2cf7573843a0a755eebad6045d2970a0ef8c9adddff093e79731d5e506f1c43318fb25144ff5fb63041574e89216ebe0ac75d7dcffc35d095691723493c94dcc11d4480bf3fe7b76ba53cae5b409c002f2d1bb5eab08ac993054ec297543798700fe3e2877a4a0cce53599a66eb4f1fef5cafc774277f0e694ebd7f8748fb5140735282e5e0b9bb35b8aeb098775a33820c9b8decad3ad6ce36f79c347dcc2c60a5442d2eab4368827acae1f0ccd52f0475fab95ac57c3c9d7c2649d355756140d5a1e8c6eab8b67a5c169cb899230c4be1dc702323f2b07ee1fcf5657361e250ccbe93bb403abd857eee4335e454e8485a3b055c908c957dca3f9a288299729216103089910386fb994285602ce12b04be1819a2c80394b2410767d9aabdb591e4c4dcd08d1d5bc1bcb532496ff1fc968ac3ff59bc7266d8ecbb67f34b681331685a99b781c9752dfe83d145bd4f3c8ec634f028e850e246aa81f1d03aef40d000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a0bf32b9037b600aae3ecd3dd1838bc9f18ae1661f615cf3d70bc270b6c31f55fb80808080808080a0a2381991afea644ece5cba0d8d69f838f7b123d2e0057a54509e0c61e8b293028080808080808080b8b2f8b030b8adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a0529f2d89256fc038782a4d70b40bf127de906cbe211e7acaa3e928e0fd5cf11d80808080808080a0b4f4d0be01c65da5308bab41d52d8a7c93a1693c170c44d1f619b8364d40e3428080808080808080b90190f9018d30b90189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edbf808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320266d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa5830518dca079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05f3b41e975b46e86d5365943cfe25ae960fc2c7c1bb4eb0025eac5eb0bc6639c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320266a0d6b1b655f66cf8f99d35432492f8fbedfa97a2a48f0efaae65de6738e2594aa50000000000000000000000000000000000000000000000c080a0ae5e67673b90f2d6802e8dba26aadb2e8b81e059d1611afd1908e743e3c0b75da004886b0ac3a810519aa2395bffdd94fbcfe4a2de989ec95d1aea0fcd09afd931b9235302f9234f83aa36a7830137d664748315f42594ac9251ee97ed8bef31706354310c6b020c35d87b80b922e48ed7b3be000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001fe000000000000000000000000000000000000000000000000000000000000020c00000000000000000000000000000000000000000000000000000000000001f60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000002200000000000000000000000009d69394bd71906a235f9113cc04321f573958d3e00000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc10000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000007777000000000000000000000000000000010012f20d5ba20a09e185d452c999c129d712b83c75480e2e029fc895986d361a781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000004f9456000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d65822107fcfd520000000000000000000000000000000000000000000000000000000000000000bbe20eedcc0216c615d3a0550a5507bdb2f9912eba7b608300486e871a4e42491dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934700000000000000000000000000007777000000000000000000000000000000014852ab81d236f35c396d4836a6f82239f5672a4b6136ab9ebdd8669a9f9e831b87a26944e5c04f16b79426135ac11b155922c14178bf3d1ecbb1fb12ccc8119a22df5003de2d5956c745f9e825a8f0ca1bb1e265d4d431781b00765e0fe37280000000000004a00000000000800000020400004002001000000000000000010000000002800000000000100009000000000000a000000050000010004020000000000000000412000008002900000000000000000000000000000000820000000000000002000000400000000000080000000000000800000000001000040c0400000000000000010000000001400000000081000001800800008280000000001200002000000000000008440000000000001000000000004000000000000200200040028000000000000000000200000000000000000010000000020200290004100000000000000902080400010000001000000008000000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001edc100000000000000000000000000000000000000000000000000000000005364e600000000000000000000000000000000000000000000000000000000004456ed000000000000000000000000000000000000000000000000000000006436f8e400000000000000000000000000000000000000000000000000000000000002e0781b2045b8b5226f9c1fd712d8b1a5f1faca84f5fcee87a7d1dd2b57f55617df0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000016202bf20ff78727f38ef16e03bfb3d4895f35cc626f97ede7cc99f48aeff8661fe32015ea8d62ec7a79e01cd398e85867bafdcf55cb6a7121b6fef097f5f5656a5d11ddf336b6879926ea2ae425e91c748a553c9a496cbe2ab556a91689f75ee2b01ad3c43aa774b50a9d8411a9f65be42d6cde781db1a1949a1e886f868917997b21ad05b7c1eb0d208d17426c52831c6347a8db75b12bfeb2970c4dc6666e4eba0492d2ec318089b11ee7ec6087ab6a3df335770526cc0c1679b764d847b4ec1e303d400c12e690aa26a3771e5676e7ac95e2dc7a1b33be698f077c598f880d4203defa26ad36b84573e923af347475c7c7671be245e9859ca1db3c047faeee4b1c0e81d8a92915c2b94ff300e18f77f70ffec15631161e0bc3cdc9143c43422c208187652c1ec83c5d282e10587216eaf56689e5fe236f72c13eb9574afabc622a739cefbbe11aaa4e2e3d4c5415818914fe554a07be374f565d9bcebc0134940e8921b87bd4f6b42a6432e6e176be5ec82bb8eb6bdb7e4acc1f1e99725bd3ab2e3fa52e02c2741dfe6eddf5a3846dfd57f6a72e834faa048cb007826a293d9e163d47f9ea635871b25afcc3561dfce77b3a2604b3c8de90aa24916f41aed62d2e0c0d18f9c259bf614f1321c5b7cf7b5bd73cec408dd85f046bf36302e20f3603b7832071796022e893386de4e3b170135a591b1a44117240ba85876dba586b1f31c13d11b94f892bb9f96bd2931b66ffa5e22b104c549e7c0d5010e4e70e271d48c0bd6e4be68c920ea77af85d12eb155d9b25703eabbd0ede1909565a55f12f7e30e74b0329222f6067cad3b4324a80f570506985d729f7780955333f40e615f065023fb607d975d7a2b9f234137e72260d8f6b586baecf42819f8328dfb3304441f2c9e97d1fab9a3625073ac3d2bff6ba2f8d659cbc6f66e8d9afde1ef229ff39bac1ecd65eddc4953e2726a72daefa76f00d58e11c9a9ba3448fbe0d3a03db78d70ed9c574ddc45de5c73efdf3113ee70a4b42cea9884f85c1b995516912800abeb70f3022d5de6d9f49469161a36a6a309099ca43e388908635ed4ae825a14b7cf5213454a1f345497008ed417e5d33ef84c4934368b36f27606072192a1b43396f89647f0541dd25f55b42c5295d3ab2a22355664608b8dfec3c9d76045b27d8c2bdba7f376a44826bbf4044aed0d57068489fd32a2bf52f8613aa150185aafe655d2b86bf8867a6f7728c4133fb95776545b19767a0d7144f60f5ef038eac390d1cac6f9882211d7302137efc82b93b8f9c55db629f47a2c61931c21d01d5ad967c9dc6c1abfd496a74df2ac4714cfb027bc4d8c0153543ca663ded2af64f7396ed3b2ebd1976386814e94b7f7fcc3a19a4dd876288b905c381bc8f008de145083d6404890a863e1af1dd897aeef2516b20df50befb6c708c9728a22cb31d80b0e953aa71230d2462bb0668dd8701e11bc5240d85184f9298e2c5a3257b5dcc3e138df8b7d4162d6253fb5c21a65e952600c8764c613c6f43d22c861d4380cd688c286e9ffad6bb8582421fcab96b075769cf48b3160f056dfac4041b08287533a769bed0f08fdee9a16c5c8f414eb35830793c7b64341fef79dbc529a7b99f85d4e2e88b64954be967c5ee6386f9131b80b454ce70209f78f2101d0ca71da273735bcbcdc5ea5d3d54b607820b9bc852abb1b733cb7bb5018276d30c4c0a7f9ffcd318499a2041043494b82456ca8ac6f07678a8b770329b7c00f31e70e97ce48bc796570be27577e8986ee4c7fa51da44bdecfddfcf18686cbddc02ca206d9132d451ab55cce8069f631412ad2ae02b1a8245d31c0a65854d07370259f632fe253b2412c5a785148248d660d7cb6bef5240749d6ac4a4ac59384b27e7019c6cae15ef7c82e5a952f4da079b6205f9e16f3d3c84e94b490530c5b602d4bf5e9d34f2a785cdb7f7755d6d467a9d88071bbdf8c79195730db7d0b7872cbdcdabab02bd4b8487b726c5ce6492344ae7e900a21893e7b840b46380ba99278ce95322dc23daa97995d1149d425952913428c8ef8659dd2cc2895f12b08e0532a254fd5674fcac1b0992472ef75337d8d77f6fef3720d4b7b17302478c7d2e3b8dec7af4c681aba5e25d8aa3f4382b0082066c3f7a0b4e42c4637df90d9a1e2f3fd1cffa7e0d5577f5da89353521ed02cb1c39eb5746cef10ceb74c3fdba13199b42516ebfe29af40da64ad81b46b7bf04bf25994255c7a51f6839848810025bb52fe7500cf1ef628a07747894e3b73d53e6b2997d0654f1ffd0c070455400fd7e9d670984ac807a0f8131977ed1806fd3c0927c34b7b4dabf011d31e86b1b7932b70e7b068a2656173d241e8f20bb6be3a3a3767111aa6f459f84be961c2337f6e03ed3cc6c847a3683894288b471504cbdc43a78f856801a10a87c77322e36e0ca426ec67ad3a2a3b79bc5cb81928a79a67a0fb46bb967cbab73fd36022f92d920204de61717dde6a85b7bcf57584c11ce54ac92998f856bf042a01c5020d266b1ccea774955484405f58ad161251d879a87c43d5dbaecd976ac5d04dd2586d70031a86b0dcade14028f36a04508494c7a20e98b3b21f7765e7b3ef68f10960709e63eea35a26ff47424e18df8cc271ff3049262c855d6a131695a395f2ba2f1b039012ac8a2abdf6d9f6b0c432f0ae78b9bccb99f89759434477257ce1f44cc61e95b9c9843ec8efb17c640fc4c837ec125fb25323d3f0644615d21721607fee4d68e2dc9bd29f5b13fafe39b0710d0365dccda35e3c937aed1b6949b2a0a7523011eb706357b85e174376ea7cadbd01ed0dd1bc6a8e5a5a11bc6131f0661dd6365b13c6e2de50b98cba1cde58a921d19936c711424eb625b7c35cba01a0f7dfa8d6f86a2a02425ab48e2c28f8f2f61adbb744c221b9c4f35b16c749c227bcee1202e87537c7441f421c855ce87d858a679f09dcf814bfa1f26f7d9ce18f723d2f84d4b25ec60adbb6367e92270836d03c71ed43413767342a4fb8d6801b8755bf65e7947ed4459ad6486fc1cca1f1cc89df3d307f01d8ac68aa1d08d18aa35a46bf245589c599eddc6337e764c36426f7b7f5d2afde0a76fd3aa536d1a165f9f23cfc65866f574f2289aa5be056dd32c72a204ba8328dd9b0b4643790463484d31623127c09c6cec446a9ac9a53cb6841ca2a097ceef88e537e209880ffdcfd5033bc3f5a885c271e41ee332366345fa867780beb3c1d5eaa496ea09160db3fa7477a2fff436ecee95aa2d51ff42ca9d4fcf021b6e501410fd41098a1a8f6021636ece98c27bd74740b7280d3a5e13d9850fcf7f2118c4c91572ba5826fcc4b0837d0b394f6683cba38fa35a5e2bd242041533bd25939cc873d1f5852a2f57cb172eb17c2e3c351240a0b2b334978b90ac18041b09aead26649b1c1c019e41731e77c6b2211d7da94630507bad027561dc625b7e84094378e599a57b09eb32c2a67cf5f2f0bf9250e6da07b165f97dca10517e9f3fe3561d02ec83a722b544bd6e25ef27d9825d13651443c4d984d7e5d0fd70c2a7f983b3ae8c698d27a2a0bf2d35655f477adc99c56f48773922831746f8af58de941a020986ad7c23fb7d31c2f17f305174db26b40447e64c66216dce98e7a8316dd91dee468e602206a4d1d18fa7827f733037fa87dfc9c74c9df0960867087c776382b94db9420a19e5338e17e8a68cb7621f0b56984610bedd3d9b77dc5447cdb129ecc33596079cf206e93904368cae07f0d449e2095f8abd95f26603d2db047647babc8342200be0095aa5489fd18cd00a52f59b70ff04c4b1e572db76d08bad419abbabb00b9e485e3f017807c12b427b5e0e648cf7b16065e313c1c073ce354a5fc6812c02b8d4b6aa1168c575dad9875087fe9f61702309febfb99b895387cc1104c35e123b713019b5e51c320fc2521cdb5cfca20f617773fd46d3872128b87df6f66a21fb3fa16711245ab65eef629c5e6073efaff5b707657f4442f2eb2637fa71000f14fc691a71aacf902c0c1a1a5d7d8d351b8b3cad57acd0a9e47a1abdcaf2b70aed8b7370a6bb2bb4f3d679c4f9793e4b256deefaef1e6dbcdbb648b917e34822d833d2ac1614aebcf360d328d9271f27c52c93de4a9455ce6cd8d2140ebf6b21c9b172cf47556efc5dff9afb913e328a708292bfb65c96d668f4d0b3a9a21b222039156cba9980d6bf11efbd8dd893378e5dc1b323c57d8f702076c22d125d1489bab2553c5521631c35f7b5236007ce8f37012cace78d6eb39718904b5dc31ddcb6f4f175e52bcf6c6008f6f5a572925600194b9af7ae074dbf85119e3afd141b2ff2652a58f043e97f11b77997a9da1c96c18b5254a107f24e997a3ea61c2069b9d04d49bd1bcd2495b19bc71848f28bfb4f0346b682a1b474e040b056e60a32b5e8aa532103101cb45ca41c6a690c8688523b8566d507f29eb44fe2d2490e81f4343ca61c8783b83e40e3ce66532f186e9d09bd2667cf974a763072a910121aa5e86e151d92a868508b680f795bc30b4502769f41e3afef5f321be9ce2f1cff3eb3308d65aa0ed780cc889f605f35eb5e02ba772d08db2579f8561c61fa09a8e23ea1416fb95ca0c7e139ddd16f04b0c872499e44cb5a03868d6c5fa1300c19a96b8586b8f33bd760c6350713696b7d3236acb0eb35bde2e6378e9ef9b117b02290ead7824d42452e332f6ec95a7f871da9ebdf6ad02c959a1a36ba33ff0089a4f5217b7bfa5379a507b1e994fb7b8fef489f1f2cf6fdedf0e530635ef31faaa1a37457c445836376dc5cdefc7770fbbad8c326955655efe4ecde89bd2f1dc62a2551a45206fd7d42605aa1c0fc80476b741bd7df1f0f2db0fc387614240e78427bb3a8cbbaf9bb112da06ea6942335f88c65d42d17816136509ec39b51079b5eb2a8cd15c3d1fbc56dd72c3499c101e2fc9126e8f194c6c8006faef30917c5e535439c6b0d78be52a4d17a3a25d0878649b668db027eecbbafcfac7a612138c77d1511f9cc5e763eaddbad6d9d8770705ef7b4d062b4c6dc72f30d1d272dca8700ae03a4c6d2cc6a0a03f9bfb2615b2b294515ca80827ec9cbaa7746112530f5e70f236a641c05bbc8647dd130f02db3561f9dfaa1d687235bccb0498202af478a6070dfa49df99785a61eb5fe5f18777569c18b08d2042ae8639abbc225b832a2fbcd95ff43a3fee4fb2962983af8304ef995716110a7ad35c538697c109c01c427ca6cefef3a842fcf74b1c49a3f2da88b85fdb1d05e20cd567538942fa2f0ffbb5d2ff73d60d562d9a0a6894bec3d85a709b43e42ab64e2306cb96919e078b899f3155af56390d06ddc662afe8d2c91fc091e2c5cbbfab3fdb3f49423a5a5f7741f2d70c6736adc66e7c2caa89c6bbc678bb4b445a8a63d120867f01f164dc87adc853633ca7bd4b9d585c2a637d1469da612b5210476fc8d66f90029bdbf7fa5eddc8335cd23deb4bb47e1582e64a03dd021292d34435419af80af178cdfab0fb9374fa0fade48108cd3a571b814231784ac37c9f6071fc6ac0bb018595c9d8afbfcd6f31832b2581f7f7ce7c45d22817aab8ac6df0e0995e12dbd1595c3377b707b816c96ceb1893b9e7c747a577bb7540b89eb3ff7cac878a7a121a37b38fcd3248abfd24b50e25948dcaeff8c1c7ab8b745a93adb87cd54fca223dd940ef4d7eca9dd69243c74ea128ed624e52c7a2257f3950d0c7409d665d912495f8a8a2cf2482c1d51cd7793d3d31f32ffc24374d8606daa2a423931d97019ba2fd3ba773645b7fd01cf75e8201dd29f694a72136b585d940bff8867654223c28d0603d85fe4472d93ee30e35f46e27b8f40f9a9ad03992d9ff23305fc062c7d95971baae1ab074df88d41e09ec9752efff012c482e0cf9aea2b78cc26db146a278d584575ed615f5d168e6df7a832322da093f0aea706cee594207427d3005fd910843f3dc54b14f8b187e3b495b7474792743fc2e43f62bbc7fd50a76513f1fa4073b15a42d1e78a708134238f2521c749d086deeef512823b514aa64122b365efd51e11415de40826971c234d571c3e2a0507226c6ccc540e43a9aa32244b29784ac824c20d3d1b72dc7262f61cce4eefbe9a4ea4cb1061e4a71925aa13f31d6ce80bb7c56bf47b91cf107ab17168dd4fb60614757d7c7f4ebe0320692235fb502621ed9b15b9b3fa23aa1bf266a2a2c3f2386b52625e42e0cd85c37319e3266185419bcf6dea997e52ec8fca5887a68530002fcc5b3619e88d4dc9a918cc36bac2416ffa9b9734ac4e67a93a800f36d7aba4ecfed8d65f62cf6ad13d184a8c6406e3ba17b8aee6af0721ed091e1d225d044629a4ef5153c294a3e87e243e03bdcf6eaf7ee56d9d969a1f054d5774a7e2c363b160386b909c89717aa7015385f4ab8b6c97805c12c37d981ca945134cb1306d39a4d136b42c36d8aacd2c37575a11b17fa50ede8072d667f64bb55e3b54aff2c3c61782e442e088db7c1ce62287477132bef00c17e9992dd42f35b5e098eb97724fc4e697d75812635203abe8f96000d9553012be065980fb16d6d1c0c80457585c6eb699b0e8a6e36c1cd518dd1ffc517afcb9114a4ff629d06cd2f0be1495c4ee09243e96529e6c3a228c923ca2a703930ea94f7a5803645324ba9ea1a08e6c3241fe57a80bd24f780566342561189baed15e85ba9257b701d651754ff534e51279961ff379974e34010d80773b169a140e0ee7c5e2c0312c9dee46fb7b309710d448a43805c7eab513e84e346411b7145f77ff4ced7b32eb641528f78d88af0fe88e0840e9c16f2210e18c1da605bb04a4c963441c06fa839f722b0c67345168bc0fbb1c826f20472c7551a1327eae9eddbc24e63814fb81320cbc6f03488d64587f3e5f53c03db02cb15412e622f9ec9944643d4b5530b0cd4d577489d8ee499ecf2b74fb72423412aca8530fe53c3fc584ed8e39f900843ac73e36fb113c343cc197cd689a09e12f29203c1dfe839630f6932f3a29de81ba787f6044e70dff8981b71fe82f8a4d01f45770a53b090026a003b3e639eca0e6a1e5bdd0aad456e89d83012ea1f53e1a5fe848b33528f7195a7b0c36d4315f1b96b62d5603e87a13e12a97ec335e3922d4339d9575cb26d5691da78a738aa5c84aecc22a93033a6912f84360d13e2e23b0185bdc2cd331bd26ababcc91894935db5c7e1800b8a10db884a7614ceea91f38bbf623c5e7e7238eef06cd9fc9e43507c56e8d6212b7d03ef2db0dfceb040c0b206e1b7eee6ae564b15e4c02e9c3e4179d78bc68a9fbc2166cb8458342f218dc631705602b2ef1c6716dbc08f30810c9e2ab3ac7a03e300e9c21cd2a0240025ed5eda13e6daa246241669acfae65302dbca5c579d3b5c3a4c16a976209e22845337f9ca033329f849f3ccebc69ff01b301d99dbe9e79058fade67bf881c70283f41eaca130d1423e733ccd520f26ebbe8d304cbb8fa2f4bf67e2e041e5e90e840d5510d33a9f700219fbead699901ea3b3f8aa3d5ff0c028ceee5b5e711c29e7740bc98f4b78f15f2aa1e01449f1f15e68023861f540d2ae0541273c641914ea0e6abadbb2f11618bb678c8b7abff1f6d4e9f789706cdbd8dcc1acd4bbd506e42e928d134366d3f32d8caa4b86736bb065b1a3f89354835b7ba5ae1e53cc1bd9f5dfa3e0d49c0a0a8d32670c382712e30f8f4cb8fc980785fb6012df752e02c923d3f56f5764a41629646f9fd7641c8365f0917f85a64d0ba36179e2c2b3045d7b3c6ccfdb60cd5c365c43d88e231465c6616f7d2cab0db88cd79268e5ba0cecb98875958ee3827af7842e35d9cc89c3776e5640f2433a6afccf0e6fff9321e31802746639bf2bf77f375dd6799baa184b48815f24d3fca5d534dfe61d1306d15e97d3a320457ddd2239cc52fb31dbf98709cf090ae59afabbda6da75f4e1373a28bcadc2405e0a7f6dbf9a3e26511fc600a496b4623593213283a1fd33f000000000000000000000000000000000000000000000000000000000000010cf90109b853f851a04dd5a916917c46969db2e2093e73972daa52d5582e183eb0bd08362e7aca1dc280808080808080a03605d0d2c4765be29883abb71f1c4b162f9d6786835ccabb068a243ff819909f8080808080808080b8b2f8b030b8adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ebf901e8b853f851a087eef6c6fab228bc280138441d870592a3910f042806b16f257faf5f1542f9a280808080808080a00ac60a3a5bafa4560edb7bd978a6b8980fa818c5edea7c010986328de4d9b4ba8080808080808080b90190f9018d30b90189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d674400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adf8ab8301edc0808303d09094000077770000000000000000000000000000000180b844a0ca2d080000000000000000000000000000000000000000000000000000000000320267dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d6744830518dba079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a05a4ba290d849b719839872aa1e6999ee672fff37d450956de85fe07c96f172d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000189f901860183039445b9010000000000000400000000000000000000040000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000080000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000f87cf87a940000777700000000000000000000000000000001f842a058313b60ec6c5bfc381e52f0de3ede0faac3cdffea26f7d6bcc3d09b61018691a00000000000000000000000000000000000000000000000000000000000320267a0dbfbf2c535ffc52117d4cc616b8d97bd07cdd8585ab67d9095c067e9de6d67440000000000000000000000000000000000000000000000c080a0d86a71e8e531bae3b2a2e70d98e516ccf31b6583d936ffa31c3772ac265db828a0420f5a8067c7eec5214117647da149eaa4e7c78a10d8ee6fa62001ee1b680f9fb9060002f905fc83aa36a7823d3f647482a9c494bac000000000000000000000000000000000000380b905930001536cb8da3dd105e94414690798c7f100000000057b78da8ccffb3bd38b03c0f12199bb964b426dd6b091efd7dc3ad1a9d321d1713b2ea1189d39280b4791c5c858729090c3b6182ac75951eef74b38191686b35c4669656ca9dc5a0ce7e9399f7efffc03afe7fd6e7485887f6264e97e9856a6978b65c5db3b4ce57cf4812abeba0de10d0d6ee5a2cbc9885a2163a58d1895524adbfd86d795eac74ec74d783b599861bf4b7b3e6daf70b3ae0e5740c88a4dc15b893f76fe074a718bcead52fb2a06d6e5f1cf3ca344ad05dcf5ca10bd9bc2809cd8ecd40a2dd0e03200dadd8f921f0e9953a7e6d8c7dc99e60cf6fe81465175e0cf99b702ac6a13706e64ac349a1119796eb0b6e7d5ae48ad74a5c997d679ef9c637c619587cb98ecf88e620dacdc57701500c74e087533f978831a78bf3857cb6044a8c66e41645cdee74ac7cdac69a8484083eb003827ccfd6b92c77b7097a15f38a419f6f0578f3568465e6fb639f1a8d6e52e9d17a0413100ca8d08b210a2e5adb2bead3dfaada14b2513113802f3996daccac89014dafd1368700300053ad7daeea2a4d4d9e8502aa44337c6ff91165a25de84fe5273b2e5b7f4dda3a0410900125e7778d5c2a59a2ca2ce36bacc9e95812ae1b69a478fc7ecf5ded14b68a80a010d6e03e07137d5de8082773f8a422390cd0a592d81e6e623a42bc69547e6b343e1d9a14e64ac3486116e29a8315486a2324d93d3e33a8344ffdbc2655b76dbf72077e43c13961a6a52f0565f2000881576c7a113e7aa6e9a6ed4679014533f8d1bf80ff44ae5599813e80d2c1f2fd0a03400864952137916724a4504bb118ccaf9236f217a1e43c97e471397a3f86672226dd0e02e00d4dcbfe4dd250a97d0c830b3d93213fd048fed38ea8378018c726be68728e22c687037000e3bb6d2858fba82db877c2e28fa1e2cca4ce57b6bdfdba7513dcd2649da93544083d06f85c8f4d21559e8e7651dcaa0c3aafc4a691fdfb27f2f39ea08ea62feff43cf0d80061500b0b00cb246f3641d83f5c934c477ca641a5c545da8aa0e4662c4c5f26ee70525a04125006cf268fbdcaddb151168bf24d3fa2e09f7445d859ff9e5ba2fe71e7ef8861ba61834a80280ebddf1bc99e8d00ae5d2a0893d64774d4cea1bad7146fc964526b6c4617cd70a68500d00f7e8131b976b9537ab4e2b9c9cf086fcfd82e235cf6c6eabbf8030cc3fd1e395071a840120bfbd7fd4a54397eca0c0f7adc1231dd539950f508f92e237e3aeb91468c38d4083ea0068a89abd38178e2e9f67559758419b6908d48d58967547c9edfe98ba016e050734a809807957936c079272b238748593ee3a73f5c7647d0ece20a5c208769c484474aa2f192b6dcc780a770c9b40b42348219a34a746cb495f3f1efb710a816ac142121461c6f7bf82fb00b0dec5bfbcaa2e32983075c84989e439154bfc7df1d0549680a6c1a4999c18aa010dee074028fcade2995b7daec4562449ccbced0caf7a660f49ac4ea07d485b22348948a0415d001ce8e16f70ca5813141f7f7544586da1364d2f77dd8fbb7cc937c6d46136f93d68f000009a72d59e5a9bdf1de5e60bbb17358bc65e8ff1566fabad6d6eb42ef2781f6d6d40837000bce21c64847942319b4ac1c92b2ee02fe2bfbf43b685908b92a0c3cd25f21641a0417d0084138599419cf73489312bda0d53e1fa748e1f7927380961470ec9fda73b36978c953661c8065aaafe09fb847fb54e35b3c68f771b6953941b2b4e619b486d81761ee187bf828700301cd34529763c60738c12e1ccce6ddff8b8338cda8fda245e5d8d5613d20734408306df96bd65c7b8d5c27299269dd9335ef7cb1f3357145983f365ec2f933686fc6d77d0a01100ca3a3773d3f0a52559ee691776b714fedc8c7b2cd672c7065c295693d0616d37408318007c18e9a9f6e4929e20d8efd4c2428065720ed1938af8e5348c14b373b0a845d1063468d2f96f000000ffff86f9aa5001c001a08f785a1c8e4c549c415dd948da80f86e3aaabc4e7a784604b6362208e0fb6b85a011d366d57b6ad95cda2eb6b618704859b4d433ad7557cad177eff6f6bae578cbc0f90200df8345de7e8203e494e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de7f8203e594e276bc378a527a8792b353cdca5b5e53263dfb9e82168cdf8345de8082062294388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de8182062394388ea662ef2c223ec0b047d41bf3c0f362142ad58212cadf8345de828201949425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de838201979425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de848201999425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8582019a9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8682019b9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b8212cadf8345de8782019e9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de888201a29425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de898201a59425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8a8201a89425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8b8201a99425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8c8201aa9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08df8345de8d8201ac9425c4a76e7d118705e7ea2e9b7d8c59930d8acd3b820f08\" }","s":"debug_getRawBlock","u":"/public-networks/reference/api","h":"#debug_getrawblock","p":2329},{"i":2362,"t":"Returns the RLP encoding of the header of specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - RLP-encoded block header or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawHeader\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_getRawHeader\", \"params\": [\"0x32026E\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf90236a09f73691f6dabca4f0a99b05d0a701995506aa311dcaa9ce9833d6f4ca474c162a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794c6e2459991bfe27cca6d86722f35da23a1e4cb97a078103ea8c47231886481d72ec1afae6eeb06c3773ce24a91323d5c9eed69d4cca0008992da2531db404f07b0871dd620a94ba346963e1b1c6dc7b00748e8593a1ea0b6c3890d9604434fc52f722848c84d1770add20cd75bbc28cdedff42940dbb56b90100200800000400000002000e0000000401000000440100000000c0400600000002000801000000040480020840048000000000400000000000000020004220000011002000000000000204000800000010010002000002000000000040a000000000000400020000010885000000000808000000008800001004002010020300005000000010002110410402000000000000000890000008000000000000000000020040000002000000000000810400000040006000004000004080020000000000000022001000000000000840400000000220250000000000080402000420000418000000000000000400040000004080040010200000000000108020020000808332026e8401c9c380833e3c3c846436f93899d883010b05846765746888676f312e32302e32856c696e7578a0112d8f15793e7df7f8dcdb21c891cff78c0d1839cb5b6dcd06116cdbb99536ae88000000000000000008a0cdb97712af6685bb9650d21d609525913293c48adda7c45990926daada335c9b\" }","s":"debug_getRawHeader","u":"/public-networks/reference/api","h":"#debug_getrawheader","p":2329},{"i":2364,"t":"Returns the RLP encoding of the transaction receipts of the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - array of RLP-encoded transaction receipts curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawReceipts\",\"params\":[\"0x32026E\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawReceipts\",\"params\":[\"0x32026E\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xf901a60182c70eb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000021849e99c31e3113a489d7eb0fd4d8c0edbe47afa00000000000000000000000000000000000000000000000000000000029b92700\", \"0xf901a70183018e1cb9010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000002000000000000000000000008000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000008000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000000f89df89b947753cfad258efbc52a9a1452e42ffbce9be486cbf863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000000828d0386c1122e565f07dd28c7d1340ed5b3315a000000000000000000000000069cda9d6cc6ce05982d0b4fdf9480f2991f39b5aa00000000000000000000000000000000000000000000000000000000029b92700\" ] }","s":"debug_getRawReceipts","u":"/public-networks/reference/api","h":"#debug_getrawreceipts","p":2329},{"i":2366,"t":"Returns the RLP encoding of the specified transaction. Parameters​ transaction: string - 32-byte transaction hash Returns​ result: object - RLP-encoded transaction object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawTransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"debug_getRawTransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf8678084342770c182520894658bdf435d810c91414ec09147daa6db624063798203e880820a95a0af5fc351b9e457a31f37c84e5cd99dd3c5de60af3de33c6f4160177a2c786a60a0201da7a21046af55837330a2c52fc1543cd4d9ead00ddf178dd96935b607ff9b\" }","s":"debug_getRawTransaction","u":"/public-networks/reference/api","h":"#debug_getrawtransaction","p":2329},{"i":2368,"t":"Returns metrics providing information on the internal operation of Besu. The available metrics might change over time. The JVM metrics might vary based on the JVM implementation used. The metric types are: Timer Counter Gauge Parameters​ None Returns​ result: object - metrics object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_metrics\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_metrics\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"jvm\": { \"memory_bytes_init\": { \"heap\": 268435456, \"nonheap\": 2555904 }, \"threads_current\": 41, \"memory_bytes_used\": { \"heap\": 696923976, \"nonheap\": 63633456 }, \"memory_pool_bytes_used\": { \"PS Eden Space\": 669119360, \"Code Cache\": 19689024, \"Compressed Class Space\": 4871144, \"PS Survivor Space\": 2716320, \"PS Old Gen\": 25088296, \"Metaspace\": 39073288 }, ... }, \"process\": { \"open_fds\": 546, \"cpu_seconds_total\": 67.148992, \"start_time_seconds\": 1543897699.589, \"max_fds\": 10240 }, \"rpc\": { \"request_time\": { \"debug_metrics\": { \"bucket\": { \"+Inf\": 2, \"0.01\": 1, \"0.075\": 2, \"0.75\": 2, \"0.005\": 1, \"0.025\": 2, \"0.1\": 2, \"1.0\": 2, \"0.05\": 2, \"10.0\": 2, \"0.25\": 2, \"0.5\": 2, \"5.0\": 2, \"2.5\": 2, \"7.5\": 2 }, \"count\": 2, \"sum\": 0.015925392 } } }, \"blockchain\": { \"difficulty_total\": 3533501, \"announcedBlock_ingest\": { \"bucket\": { \"+Inf\": 0, \"0.01\": 0, \"0.075\": 0, \"0.75\": 0, \"0.005\": 0, \"0.025\": 0, \"0.1\": 0, \"1.0\": 0, \"0.05\": 0, \"10.0\": 0, \"0.25\": 0, \"0.5\": 0, \"5.0\": 0, \"2.5\": 0, \"7.5\": 0 }, \"count\": 0, \"sum\": 0 }, \"height\": 1908793 }, \"peers\": { \"disconnected_total\": { \"remote\": { \"SUBPROTOCOL_TRIGGERED\": 5 }, \"local\": { \"TCP_SUBSYSTEM_ERROR\": 1, \"SUBPROTOCOL_TRIGGERED\": 2, \"USELESS_PEER\": 3 } }, \"peer_count_current\": 2, \"connected_total\": 10 } } }","s":"debug_metrics","u":"/public-networks/reference/api","h":"#debug_metrics","p":2329},{"i":2370,"t":"Re-imports the block matching the specified block number, by rolling the head of the local chain back to the block right before the specified block, then importing the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_replayBlock\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_replayBlock\", \"params\": [\"0x1\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_replayBlock","u":"/public-networks/reference/api","h":"#debug_replayblock","p":2329},{"i":2372,"t":"Triggers a re-synchronization of the world state while retaining imported blocks. This is useful if there are world state database inconsistencies (for example, Bonsai database issues). Parameters​ None Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_resyncWorldState\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_resyncWorldState\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_resyncWorldState","u":"/public-networks/reference/api","h":"#debug_resyncworldstate","p":2329},{"i":2374,"t":"Sets the current head of the local chain to the block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_setHead\",\"params\":[\"0x1\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_setHead\", \"params\": [\"0x1\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"debug_setHead","u":"/public-networks/reference/api","h":"#debug_sethead","p":2329},{"i":2376,"t":"Generates files containing the block trace. A separate file is generated for each transaction in the block. You can also specify a trace file for a specific transaction in a block. Use debug_standardTraceBadBlockToFile to view the trace for an invalid block. Parameters​ blockHash: string - block hash txHash: string - (optional) transaction hash; if omitted, a trace file is generated for each transaction in the block. disableMemory: boolean - (optional) specifies whether to capture EVM memory during the trace; defaults to true Returns​ result: string - location of the generated trace files curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_standardTraceBlockToFile\",\"params\":[\"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc\", { \"txHash\": \"0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6\", \"disableMemory\": false}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_standardTraceBlockToFile\", \"params\": [ \"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc\", { \"txHash\": \"0x4ff04c4aec9517721179c8dd435f47fbbfc2ed26cd4926845ab687420d5580a6\", \"disableMemory\": false } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"/Users/me/mynode/holesky/data/traces/block_0x2dc0b6c4-4-0x4ff04c4a-1612820117332\" ] }","s":"debug_standardTraceBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtraceblocktofile","p":2329},{"i":2378,"t":"Generates files containing the block trace of invalid blocks. A separate file is generated for each transaction in the block. Use debug_standardTraceBlockToFile to view the trace for a valid block. Parameters​ blockHash: string - block hash Returns​ result: string - location of the generated trace files curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_standardTraceBadBlockToFile\",\"params\":[\"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_standardTraceBadBlockToFile\", \"params\": [ \"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"/Users/me/mynode/holesky/data/traces/block_0x53741e9e-0-0x407ec43d-1600951088172\" ] }","s":"debug_standardTraceBadBlockToFile","u":"/public-networks/reference/api","h":"#debug_standardtracebadblocktofile","p":2329},{"i":2380,"t":"Remix uses debug_storageRangeAt to implement debugging. Use the Debugger tab in Remix instead of calling debug_storageRangeAt directly. Returns the contract storage for the specified range. Parameters​ blockHash: string - block hash txIndex: number - transaction index from which to start address: string - contract address startKey: string - start key limit: number - number of storage entries to return Returns​ result: object - range object. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_storageRangeAt\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\",0,\"0x0e0d2c8f7794e82164f11798276a188147fbd415\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",1], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_storageRangeAt\", \"params\": [ \"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\", 0, \"0x0e0d2c8f7794e82164f11798276a188147fbd415\", \"0x0000000000000000000000000000000000000000000000000000000000000000\", 1 ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"storage\": { \"0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563\": { \"key\": null, \"value\": \"0x0000000000000000000000000000000000000000000000000000000000000001\" } }, \"nextKey\": \"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6\" } }","s":"debug_storageRangeAt","u":"/public-networks/reference/api","h":"#debug_storagerangeat","p":2329},{"i":2382,"t":"Remix uses debug_traceTransaction to implement debugging. Use the Debugger tab in Remix instead of calling debug_traceTransaction directly. Reruns the transaction with the same state as when the transaction executed. Parameters​ transactionHash: string - transaction hash options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: object - trace object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceTransaction\",\"params\":[\"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\",{\"disableStorage\":true}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceTransaction\", \"params\": [ \"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\", { \"disableStorage\": true } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null } ] } }","s":"debug_traceTransaction","u":"/public-networks/reference/api","h":"#debug_tracetransaction","p":2329},{"i":2384,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ block: string - RLP of the block options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: object - trace object curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlock\",\"params\":[\"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlock\", \"params\": [ \"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null } ] } }","s":"debug_traceBlock","u":"/public-networks/reference/api","h":"#debug_traceblock","p":2329},{"i":2386,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ blockHash: string - block hash options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlockByHash\",\"params\":[\"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlockByHash\", \"params\": [ \"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": {}, \"reason\": null } ] } ] }","s":"debug_traceBlockByHash","u":"/public-networks/reference/api","h":"#debug_traceblockbyhash","p":2329},{"i":2388,"t":"Returns full trace of all invoked opcodes of all transactions included in the block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceBlockByNumber\",\"params\":[\"0x7224\",{\"disableStorage\":true}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceBlockByNumber\", \"params\": [\"0x7224\", { \"disableStorage\": true }], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null, \"reason\": null } ] } ] }","s":"debug_traceBlockByNumber","u":"/public-networks/reference/api","h":"#debug_traceblockbynumber","p":2329},{"i":2390,"t":"Performs an eth_call within the execution environment of a given block, using the final state of its parent block as the base, and provides a detailed trace of the executed opcodes. Parameters​ call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: object - request options object with the following fields (all optional and default to false): disableStorage: boolean - true disables storage capture. disableMemory: boolean - true disables memory capture. disableStack : boolean - true disables stack capture. Returns​ result: array of objects - list of trace objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceCall\",\"params\":[{\"from\":\"\",\"to\":\"\",\"gas\":\"0xfffff2\",\"gasPrice\":\"0xef\",\"value\":\"0x0\",\"data\":\"\"},\"latest\",{\"disableMemory\":true,\"disableStack\":true,\"disableStorage\":true}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"debug_traceCall\", \"params\": [{\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"0x0050000000000000000000000000000000000000\", \"0xfffff2\",\"0xef\",\"0x0\",\"0x0000000000000000000000000030000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001\"},\"latest\",{\"disableMemory\":true,\"disableStack\":true,\"disableStorage\":true}], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"gas\": 21000, \"failed\": false, \"returnValue\": \"\", \"structLogs\": [ { \"pc\": 0, \"op\": \"STOP\", \"gas\": 0, \"gasCost\": 0, \"depth\": 1, \"stack\": [], \"memory\": [], \"storage\": null, \"reason\": null } ] } ] }","s":"debug_traceCall","u":"/public-networks/reference/api","h":"#debug_tracecall","p":2329},{"i":2392,"t":"The ETH API methods allow you to interact with the blockchain. note Methods with an equivalent GraphQL query include a GraphQL request and result in the method example. The parameter and result descriptions apply to the JSON-RPC requests. The GraphQL specification is defined in the schema.","s":"ETH methods","u":"/public-networks/reference/api","h":"#eth-methods","p":2329},{"i":2394,"t":"Returns a list of account addresses a client owns. note This method returns an empty object because Besu doesn't support key management inside the client. To provide access to your key store and and then sign transactions, use Web3Signer with Besu. Parameters​ None Returns​ result: array of strings - list of 20-byte account addresses owned by the client curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_accounts\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": [] }","s":"eth_accounts","u":"/public-networks/reference/api","h":"#eth_accounts","p":2329},{"i":2396,"t":"Returns the base fee per blob gas in wei. info Shard blob transactions enable scaling Ethereum by allowing blobs of data to be stored temporarily by consensus clients. Parameters​ None Returns​ result: string - hexadecimal integer representing the base fee per blob gas. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blobBaseFee\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eth_blobBaseFee\",\"params\":[],\"id\":51} { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x3f5694c1f\" }","s":"eth_blobBaseFee","u":"/public-networks/reference/api","h":"#eth_blobbasefee","p":2329},{"i":2398,"t":"Returns the index corresponding to the block number of the current chain head. Parameters​ None Returns​ result: string - hexadecimal integer representing the index corresponding to the block number of the current chain head curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_blockNumber\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x2377\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{number}}\"}' http://localhost:8547/graphql { block { number } } { \"data\": { \"block\": { \"number\": 16221 } } }","s":"eth_blockNumber","u":"/public-networks/reference/api","h":"#eth_blocknumber","p":2329},{"i":2400,"t":"Invokes a contract function locally and does not change the state of the blockchain. You can interact with contracts using eth_sendRawTransaction or eth_call. By default, the eth_call error response includes the revert reason. Parameters​ call: object - transaction call object note The strict parameter determines if the sender account balance is checked: If strict:true, the balance is checked and eth_call fails if the sender account has an insufficient balance to send the transaction with the specified gas parameters. If strict:false, the balance is not checked and eth_call can succeed even if the sender account has an insufficient balance. If strict is not specified, the balance is checked against the gas parameters if supplied. If you do not want the sender account balance checked, send zero gas or specify strict:false. blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - return value of the executed contract curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"value\":\"0x1\"}, \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_call\", \"params\": [ { \"to\": \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", \"value\": \"0x1\" }, \"latest\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block {number call (data : {from : \\\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\\\", to: \\\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\\\", data :\\\"0x12a7b914\\\"}){data status}}}\"}' http://localhost:8547/graphql { block { number call(data: {from: \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data: \"0x12a7b914\"}) { data status } } } { \"data\": { \"block\": { \"number\": 17449, \"call\": { \"data\": \"0x\", \"status\": 1 } } } } Example of a simulated contract creation The following example creates a simulated contract by not including the to parameter from the transaction call object in the call parameter. Besu simulates the data to create the contract. curl HTTP JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"data\":\"0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b5061021e806100606000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032\",\"gas\":\"0x439cf\",\"gasPrice\":\"0x0\"},\"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063445df0ac146100465780638da5cb5b14610064578063fdacd576146100ae575b600080fd5b61004e6100dc565b6040518082815260200191505060405180910390f35b61006c6100e2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100da600480360360208110156100c457600080fd5b8101908080359060200190929190505050610107565b005b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806101b76033913960400191505060405180910390fd5b806001819055505056fe546869732066756e6374696f6e206973207265737472696374656420746f2074686520636f6e74726163742773206f776e6572a265627a7a7231582007302f208a10686769509b529e1878bda1859883778d70dedd1844fe790c9bde64736f6c63430005100032\" }","s":"eth_call","u":"/public-networks/reference/api","h":"#eth_call","p":2329},{"i":2402,"t":"Returns the chain ID. Parameters​ None Returns​ result: string - chain ID in hexadecimal curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_chainId\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x7e2\" }","s":"eth_chainId","u":"/public-networks/reference/api","h":"#eth_chainid","p":2329},{"i":2404,"t":"Returns the client coinbase address. The coinbase address is the account to pay mining rewards to. To set a coinbase address, start Besu with the --miner-coinbase option set to a valid Ethereum account address. You can get the Ethereum account address from a client such as MetaMask or Etherscan. For example: Example besu --miner-coinbase=\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" --rpc-http-enabled Parameters​ None Returns​ result: string - coinbase address curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_coinbase\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_coinbase\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }","s":"eth_coinbase","u":"/public-networks/reference/api","h":"#eth_coinbase","p":2329},{"i":2406,"t":"Creates an EIP-2930 access list that you can include in a transaction. Parameters​ transaction: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - access list object with the following fields: accessList: array of objects - list of objects with the following fields: address: string - addresses to be accessed by the transaction storageKeys: array - storage keys to be accessed by the transaction gasUsed: string - approximate gas cost for the transaction if the access list is included curl HTTP wscat WS JSON result curl -X POST --data '{\"method\":\"eth_createAccessList\",\"params\":[{\"from\": \"0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63\", \"data\": \"0x608060806080608155\"}, \"pending\"],\"id\":1,\"jsonrpc\":\"2.0\"}' http://127.0.0.1:8545 { \"method\": \"eth_createAccessList\", \"params\": [ { \"from\": \"0xaeA8F8f781326bfE6A7683C2BD48Dd6AA4d3Ba63\", \"data\": \"0x608060806080608155\" }, \"pending\" ], \"id\": 1, \"jsonrpc\": \"2.0\" } { \"accessList\": [ { \"address\": \"0xa02457e5dfd32bda5fc7e1f1b008aa5979568150\", \"storageKeys\": [ \"0x0000000000000000000000000000000000000000000000000000000000000081\", ] } ] \"gasUsed\": \"0x125f8\" }","s":"eth_createAccessList","u":"/public-networks/reference/api","h":"#eth_createaccesslist","p":2329},{"i":2408,"t":"Returns an estimate of the gas required for a transaction to complete. The estimation process does not use gas and the transaction is not added to the blockchain. The resulting estimate can be greater than the amount of gas the transaction ends up using, for reasons including EVM mechanics and node performance. The eth_estimateGas call does not send a transaction. You must call eth_sendRawTransaction to execute the transaction. By default, the eth_estimateGas error response includes the revert reason. Parameters​ For eth_estimateGas, all fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply). call: object - transaction call object Returns​ result: string - amount of gas used The following example returns an estimate of 21000 wei (0x5208) for the transaction. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_estimateGas\",\"params\":[{\"from\":\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\",\"to\":\"0x44Aa93095D6749A706051658B970b941c72c1D53\",\"value\":\"0x1\"}],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_estimateGas\", \"params\": [ { \"from\": \"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\", \"to\": \"0x44Aa93095D6749A706051658B970b941c72c1D53\", \"value\": \"0x1\" } ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5208\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block{estimateGas (data: {from :\\\"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\\\", to :\\\"0x8888f1f195afa192cfee860698584c030f4c9db1\\\"})}}\"}' http://localhost:8547/graphql { block { estimateGas(data: {from: \"0x6295ee1b4f6dd65047762f924ecd367c17eabf8f\", to: \"0x8888f1f195afa192cfee860698584c030f4c9db1\"}) } } { \"data\": { \"block\": { \"estimateGas\": 21000 } } } The following example request estimates the cost of deploying a simple storage smart contract to the network. The data field contains the hash of the compiled contract you want to deploy. (You can get the compiled contract hash from your IDE, for example, Remix > Compile tab > details > WEB3DEPLOY.) The result is 113355 wei. curl HTTP request JSON result curl -X POST \\ http://127.0.0.1:8545 \\ -H 'Content-Type: application/json' \\ -d '{ \"jsonrpc\": \"2.0\", \"method\": \"eth_estimateGas\", \"params\": [{ \"from\": \"0x8bad598904ec5d93d07e204a366d084a80c7694e\", \"data\": \"0x608060405234801561001057600080fd5b5060e38061001f6000396000f3fe6080604052600436106043576000357c0100000000000000000000000000000000000000000000000000000000900480633fa4f24514604857806355241077146070575b600080fd5b348015605357600080fd5b50605a60a7565b6040518082815260200191505060405180910390f35b348015607b57600080fd5b5060a560048036036020811015609057600080fd5b810190808035906020019092919050505060ad565b005b60005481565b806000819055505056fea165627a7a7230582020d7ad478b98b85ca751c924ef66bcebbbd8072b93031073ef35270a4c42f0080029\" }], \"id\": 1 }' { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1bacb\" }","s":"eth_estimateGas","u":"/public-networks/reference/api","h":"#eth_estimategas","p":2329},{"i":2410,"t":"Returns base fee per gas and transaction effective priority fee per gas history for the requested block range, allowing you to track trends over time. As of EIP-4844, this method tracks transaction blob gas fees as well. Parameters​ blockCount: integer or string - Number of blocks in the requested range. Between 1 and 1024 blocks can be requested in a single query. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. Accepts hexadecimal or integer values. newestBlock: string - hexadecimal or decimal integer representing the highest number block of the requested range, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. array of integers - (optional) A monotonically increasing list of percentile values to sample from each block's effective priority fees per gas in ascending order, weighted by gas used. Returns​ result: object - Fee history results object. curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_feeHistory\",\"params\": [\"0x5\", \"latest\", [20,30]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_feeHistory\", \"params\": [\"0x5\", \"latest\", [20, 30]], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"oldestBlock\": \"0x10b52f\", \"baseFeePerGas\": [ \"0x3fa63a3f\", \"0x37f999ee\", \"0x3e36f20a\", \"0x4099f79a\", \"0x430d532d\", \"0x46fcd4a4\" ], \"baseFeePerBlobGas\": [ \"0x7b7609c19\", \"0x6dbe41789\", \"0x7223341d4\", \"0x6574a002c\", \"0x7223341d4\", \"0x6574a002c\" ], \"gasUsedRatio\": [ 0.017712333333333333, 0.9458865666666667, 0.6534561, 0.6517375666666667, 0.7347769666666667 ], \"blobGasUsedRatio\": [ 0.0, 0.6666666666666666, 0.0, 1.0, 0.0 ], \"reward\": [ [ \"0x3b9aca00\", \"0x59682f00\" ], [ \"0x3a13012\", \"0x3a13012\" ], [ \"0xf4240\", \"0xf4240\" ], [ \"0xf4240\", \"0xf4240\" ], [ \"0xf4240\", \"0xf4240\" ] ] } }","s":"eth_feeHistory","u":"/public-networks/reference/api","h":"#eth_feehistory","p":2329},{"i":2412,"t":"Returns a percentile gas unit price for the most recent blocks, in wei. By default, the last 100 blocks are examined and the 50th percentile gas unit price (that is, the median value) is returned. If there are no blocks, the value for --min-gas-price is returned. The value returned is restricted to values between --min-gas-price and --api-gas-price-max. By default, 1000 wei and 500 gwei. Use the --api-gas-price-blocks, --api-gas-price-percentile , and --api-gas-price-max command line options to configure the eth_gasPrice default values. Parameters​ None Returns​ result: string - percentile gas unit price for the most recent blocks, in wei, as a hexadecimal value curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_gasPrice\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_gasPrice\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x3e8\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{gasPrice}\"}' http://localhost:8547/graphql { gasPrice } { \"data\": { \"gasPrice\": \"0x3e8\" } }","s":"eth_gasPrice","u":"/public-networks/reference/api","h":"#eth_gasprice","p":2329},{"i":2414,"t":"Returns the account balance of the specified address. Parameters​ address: string - 20-byte account address from which to retrieve the balance blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - current balance, in wei, as a hexadecimal value curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBalance\", \"params\": [\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x1cfe56f3795885980000\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{ account ( address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\") { balance } }\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { balance } } { \"data\": { \"account\": { \"balance\": \"0x1ce96a1ffe7620d00000\" } } }","s":"eth_getBalance","u":"/public-networks/reference/api","h":"#eth_getbalance","p":2329},{"i":2416,"t":"Returns information about the block matching the specified block hash. Parameters​ hash: string - 32-byte hash of a block verbose: boolean - if true, returns the full transaction objects; if false, returns the transaction hashes Returns​ result: object - block object, or null when there is no block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockByHash\",\"params\":[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", false],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockByHash\", \"params\": [ \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", false ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": { \"number\": \"0x68b3\", \"hash\": \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"mixHash\": \"0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d\", \"parentHash\": \"0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d\", \"nonce\": \"0x378da40ff335b070\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000\", \"transactionsRoot\": \"0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126\", \"stateRoot\": \"0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233\", \"receiptsRoot\": \"0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a\", \"miner\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"difficulty\": \"0x66e619a\", \"totalDifficulty\": \"0x1e875d746ae\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"size\": \"0x334\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x37993\", \"timestamp\": \"0x5835c54d\", \"uncles\": [], \"transactions\": [ \"0xa0807e117a8dd124ab949f460f08c36c72b710188f01609595223b325e58e0fc\", \"0xeae6d797af50cb62a596ec3939114d63967c374fa57de9bc0f4e2b576ed6639d\" ], \"baseFeePerGas\": \"0x7\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (hash : \\\"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\\\") {number transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot}}\"}' http://localhost:8547/graphql { block(hash: \"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\") { number transactions { hash } timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot } } { \"data\": { \"block\": { \"number\": 17607, \"transactions\": [], \"timestamp\": \"0x5cdbdfb5\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x44c8\", \"gasUsed\": 0, \"gasLimit\": 4700000, \"hash\": \"0xb0efed1fc9326fee967cb2d845d4ebe57c5350a0670c8e86f8052dea6f219f92\", \"nonce\": \"0x0000000000000000\", \"ommerCount\": 0, \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"ommerHash\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b841fae6d25da0b91e3e88669d0a765c98479d86d53e9ea1f3fb6b36d7ff22fa622a3da0c49c20e5562c774e90acae8ad487936f6b6019cd8a782db684693cba1e9800\", \"stateRoot\": \"0xa7086c266aed46cd3bc45579178f8acb36d9d147de575a3ecbf8c7e6f1c737fc\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"transactionCount\": 0, \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"baseFeePerGas\": \"0x7\" } } }","s":"eth_getBlockByHash","u":"/public-networks/reference/api","h":"#eth_getblockbyhash","p":2329},{"i":2418,"t":"Returns information about the block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. verbose: boolean - if true, returns the full transaction objects; if false, returns only the hashes of the transactions. Returns​ result: object - block object, or null when there is no block. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockByNumber\",\"params\":[\"0x68B3\", true],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockByNumber\", \"params\": [\"0x68B3\", true], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"number\": \"0x68b3\", \"hash\": \"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\", \"mixHash\": \"0x24900fb3da77674a861c428429dce0762707ecb6052325bbd9b3c64e74b5af9d\", \"parentHash\": \"0x1f68ac259155e2f38211ddad0f0a15394d55417b185a93923e2abe71bb7a4d6d\", \"nonce\": \"0x378da40ff335b070\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"logsBloom\": \"0x00000000000000100000004080000000000500000000000000020000100000000800001000000004000001000000000000000800040010000020100000000400000010000000000000000040000000000000040000000000000000000000000000000400002400000000000000000000000000000004000004000000000000840000000800000080010004000000001000000800000000000000000000000000000000000800000000000040000000020000000000000000000800000400000000000000000000000600000400000000002000000000000000000000004000000000000000100000000000000000000000000000000000040000900010000000\", \"transactionsRoot\": \"0x4d0c8e91e16bdff538c03211c5c73632ed054d00a7e210c0eb25146c20048126\", \"stateRoot\": \"0x91309efa7e42c1f137f31fe9edbe88ae087e6620d0d59031324da3e2f4f93233\", \"receiptsRoot\": \"0x68461ab700003503a305083630a8fb8d14927238f0bc8b6b3d246c0c64f21f4a\", \"miner\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"difficulty\": \"0x66e619a\", \"totalDifficulty\": \"0x1e875d746ae\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"size\": \"0x334\", \"gasLimit\": \"0x47e7c4\", \"gasUsed\": \"0x37993\", \"timestamp\": \"0x5835c54d\", \"uncles\": [], \"transactions\": [], \"baseFeePerGas\": \"0x7\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (number : 100) {transactions{hash} timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot ommers{hash} ommerAt(index : 1){hash} miner{address} account(address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\"){balance} parent{hash} }}\"}' http://localhost:8547/graphql { block(number: 100) { transactions { hash } timestamp difficulty totalDifficulty gasUsed gasLimit hash nonce ommerCount logsBloom mixHash ommerHash extraData stateRoot receiptsRoot transactionCount transactionsRoot ommers { hash } ommerAt(index: 1) { hash } miner { address } account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { balance } parent { hash } } } { \"data\": { \"block\": { \"transactions\": [], \"timestamp\": \"0x5cd10933\", \"difficulty\": \"0x1\", \"totalDifficulty\": \"0x65\", \"gasUsed\": 0, \"gasLimit\": 4700000, \"hash\": \"0x63b3ea2bc37fec8f82680eb823652da6af8acebb4f6c4d0ff659c55be473c8b0\", \"nonce\": \"0x0000000000000000\", \"ommerCount\": 0, \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"ommerHash\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8414d877d8d0ced37ea138fab55a978f3740367a24a31731322ecdc3368f11e0d4966c9ce17ae59a76fb94eb436e8a386868f6bd6b0a5678e58daf49f5dd940558b00\", \"stateRoot\": \"0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48\", \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"transactionCount\": 0, \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"ommers\": [], \"ommerAt\": null, \"miner\": { \"address\": \"0x9811ebc35d7b06b3fa8dc5809a1f9c52751e1deb\" }, \"account\": { \"balance\": \"0xad0f47f269cbf31ac\" }, \"parent\": { \"hash\": \"0x7bca25e1fa5e395fd6029eb496a70b6b5495843976bf9e49b993c723ded29d9e\" }, \"baseFeePerGas\": \"0x7\" } } }","s":"eth_getBlockByNumber","u":"/public-networks/reference/api","h":"#eth_getblockbynumber","p":2329},{"i":2420,"t":"Returns all transaction receipts for a given block. Transaction receipts provide a way to track the success or failure of a transaction (1 if successful and 0 if failed), as well as the amount of gas used and any event logs that might have been produced by a smart contract during the transaction. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - block object, or null when there is no block. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockReceipts\",\"params\":[\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockReceipts\", \"params\": [\"0x6f55\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"blockNumber\": \"0x6f55\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x18c36\", \"from\": \"0x22896bfc68814bfd855b1a167255ee497006e730\", \"gasUsed\": \"0x18c36\", \"effectiveGasPrice\": \"0x9502f907\", \"logs\": [ { \"address\": \"0xfd584430cafa2f451b4e2ebcf3986a21fff04350\", \"topics\": [ \"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d\", \"0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8\", \"0x000000000000000000000000835281a2563db4ebf1b626172e085dc406bfc7d2\", \"0x00000000000000000000000022896bfc68814bfd855b1a167255ee497006e730\" ], \"data\": \"0x\", \"blockNumber\": \"0x6f55\", \"transactionHash\": \"0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975\", \"transactionIndex\": \"0x0\", \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"logIndex\": \"0x0\", \"removed\": false } ], \"logsBloom\": \"0x00000004000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000080020000000000000200010000000000000000000001000000800000000000000000000000000000000000000000000000000000100100000000000000000000008000000000000000000000000000000002000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xfd584430cafa2f451b4e2ebcf3986a21fff04350\", \"transactionHash\": \"0x4a481e4649da999d92db0585c36cba94c18a33747e95dc235330e6c737c6f975\", \"transactionIndex\": \"0x0\", \"type\": \"0x0\" }, { \"blockHash\": \"0x19514ce955c65e4dd2cd41f435a75a46a08535b8fc16bc660f8092b32590b182\", \"blockNumber\": \"0x6f55\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x1de3e\", \"from\": \"0x712e3a792c974b3e3dbe41229ad4290791c75a82\", \"gasUsed\": \"0x5208\", \"effectiveGasPrice\": \"0x9502f907\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xd42e2b1c14d02f1df5369a9827cb8e6f3f75f338\", \"transactionHash\": \"0xefb83b4e3f1c317e8da0f8e2fbb2fe964f34ee184466032aeecac79f20eacaf6\", \"transactionIndex\": \"0x1\", \"type\": \"0x2\" } ] } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block (hash: \\\"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\\\") {transactions{block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}}\"}' http://localhost:8547/graphql { block (hash: \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\") { transactions { block { hash logsBloom } hash createdContract { address } cumulativeGasUsed gas gasUsed logs{ topics } from{ address } to { address } index } } } { \"data\" : { \"block\" : { \"transactions\" : [ { \"block\" : { \"hash\" : \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\", \"logsBloom\" : \"0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000\" }, \"hash\" : \"0x7afe779fd0c6d4a1b6f330e679a5cf94095eaa57d2ce0c0ef991dfb2b405374f\", \"createdContract\" : null, \"cumulativeGasUsed\" : \"0x5208\", \"gas\" : \"0x61a8\", \"gasUsed\" : \"0x5208\", \"logs\" : [ ], \"from\" : { \"address\" : \"0x66f962241b8ff853849c85a63a0ce20bae4f68d5\" }, \"to\" : { \"address\" : \"0x6be8356826a9fc7b2d911fcc1de6342ae5f5b9a3\" }, \"index\" : \"0x0\" }, { \"block\" : { \"hash\" : \"0x4d746a3381673a5180744a56e78cded4696b77317866c2253566e0fa16967e1d\", \"logsBloom\" : \"0x2e0a8080520608000e38181e0c9081e813a00c184a010d1900c9602240428dc6480004444098428b945010802454104002827420426591a200224016802841900031bd4440828ec9b113081880027c01cc47105c1885d556216200880026160810050028422a4b0c4bc8087372860851000802c8d901158504a482100d488040119c08045e500824402054a0d91cc433188909020a06ac841914a2a082c104a1260460014b8b001b28030202518c040008266038a880026208041d082503589054581223c188004396804801280c00020c492816060a421831c8820ac04460303a9e48128238e0098f319030083808150c4914b8840000206715481500690000\" }, \"hash\" : \"0x412f04ba27c1c096dadb2d8af54ee61034c3d4679fdd025a634e95fa2238713c\", \"createdContract\" : null, \"cumulativeGasUsed\" : \"0xbcdb2\", \"gas\" : \"0xbdfe0\", \"gasUsed\" : \"0xb7baa\", \"logs\" : [ { \"topics\" : [ \"0xd93fde3ea1bb11dcd7a4e66320a05fc5aa63983b6447eff660084c4b1b1b499b\", \"0x00000000000000000000000000000000000000000000000000000000000e4d3a\" ] } ], \"from\" : { \"address\" : \"0xe253f7a6533c62755f470b33fa5bcd659a5db3cd\" }, \"to\" : { \"address\" : \"0x95ff8d3ce9dcb7455beb7845143bea84fe5c4f6f\" }, \"index\" : \"0x1\" } ] } } }","s":"eth_getBlockReceipts","u":"/public-networks/reference/api","h":"#eth_getblockreceipts","p":2329},{"i":2422,"t":"Returns the number of transactions in the block matching the specified block hash. Parameters​ hash: string - 32-byte block hash Returns​ result: number - integer representing the number of transactions in the specified block, or null if no matching block hash is found curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockTransactionCountByHash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockTransactionCountByHash\", \"params\": [ \"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": null } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097\\\"){transactionCount}}\"}' http://localhost:8547/graphql { block(hash: \"0xe455c14f757b0b9b67774baad1be1c180a4c1657df52259dbb685bf375408097\") { transactionCount } } { \"data\": { \"block\": { \"transactionCount\": 1 } } }","s":"eth_getBlockTransactionCountByHash","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbyhash","p":2329},{"i":2424,"t":"Returns the number of transactions in a block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: string - integer representing the number of transactions in the specified block, or null if no matching block number is found curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBlockTransactionCountByNumber\",\"params\":[\"0xe8\"],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getBlockTransactionCountByNumber\", \"params\": [\"0xe8\"], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"0x8\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:232){transactionCount}}\"}' http://localhost:8547/graphql { block(number: 232) { transactionCount } } { \"data\": { \"block\": { \"transactionCount\": 1 } } }","s":"eth_getBlockTransactionCountByNumber","u":"/public-networks/reference/api","h":"#eth_getblocktransactioncountbynumber","p":2329},{"i":2426,"t":"Returns the code of the smart contract at the specified address. Besu stores compiled smart contract code as a hexadecimal value. Parameters​ address: string - 20-byte contract address blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: data - code stored at the specified address curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\", \"latest\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getCode\", \"params\": [\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{account(address: \\\"0xa50a51c09a5c451c52bb714527e1974b686d8e77\\\"){ code }}\"}' http://localhost:8547/graphql { account(address: \"0xa50a51c09a5c451c52bb714527e1974b686d8e77\") { code } } { \"data\": { \"account\": { \"code\": \"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029\" } } }","s":"eth_getCode","u":"/public-networks/reference/api","h":"#eth_getcode","p":2329},{"i":2428,"t":"Polls the specified filter and returns an array of changes that have occurred since the last poll. Parameters​ filterId: string - filter ID Returns​ result: array of strings or objects - if nothing changed since the last poll, an empty list; otherwise: For filters created with eth_newBlockFilter, returns block hashes. For filters created with eth_newPendingTransactionFilter, returns transaction hashes. For filters created with eth_newFilter, returns log objects. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getFilterChanges\",\"params\":[\"0xf8bf5598d9e04fbe84523d42640b9b0e\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getFilterChanges\", \"params\": [\"0xf8bf5598d9e04fbe84523d42640b9b0e\"], \"id\": 1 } Example result from a filter created with eth_newBlockFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xda2bfe44bf85394f0d6aa702b5af89ae50ae22c0928c18b8903d9269abe17e0b\", \"0x88cd3a37306db1306f01f7a0e5b25a9df52719ad2f87b0f88ee0e6753ed4a812\", \"0x4d4c731fe129ff32b425e6060d433d3fde278b565bbd1fd624d5a804a34f8786\" ] } Example result from a filter created with eth_newPendingTransactionFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0x1e977049b6db09362da09491bee3949d9362080ce3f4fc19721196d508580d46\", \"0xa3abc4b9a4e497fd58dc59cdff52e9bb5609136bcd499e760798aa92802769be\" ] } Example result from a filter created with eth_newFilter { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x233\", \"blockHash\": \"0xfc139f5e2edee9e9c888d8df9a2d2226133a9bd87c88ccbd9c930d3d4c9f9ef5\", \"transactionHash\": \"0x66e7a140c8fa27fe98fde923defea7562c3ca2d6bb89798aabec65782c08f63d\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000004\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0x238\", \"blockHash\": \"0x98b0ec0f9fea0018a644959accbe69cd046a8582e89402e1ab0ada91cad644ed\", \"transactionHash\": \"0xdb17aa1c2ce609132f599155d384c0bc5334c988a6c368056d7e167e23eee058\", \"transactionIndex\": \"0x0\", \"address\": \"0x42699a7612a82f1d9c36148af9c77354759b210b\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000007\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] }","s":"eth_getFilterChanges","u":"/public-networks/reference/api","h":"#eth_getfilterchanges","p":2329},{"i":2430,"t":"Returns an array of logs for the specified filter. Leave the --auto-log-bloom-caching-enabled command line option at the default value of true to improve log retrieval performance. note eth_getFilterLogs is only used for filters created with eth_newFilter. To specify a filter object and get logs without creating a filter, use eth_getLogs. Parameters​ filterId: string - filter ID Returns​ result: array of objects - list of log objects curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getFilterLogs\",\"params\":[\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getFilterLogs\", \"params\": [\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb3\", \"blockHash\": \"0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998\", \"transactionHash\": \"0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb6\", \"blockHash\": \"0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc\", \"transactionHash\": \"0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] }","s":"eth_getFilterLogs","u":"/public-networks/reference/api","h":"#eth_getfilterlogs","p":2329},{"i":2432,"t":"Returns an array of logs matching a specified filter object. Leave the --auto-log-bloom-caching-enabled command line option at the default value of true to improve log retrieval performance. caution Using eth_getLogs to get logs from a large range of blocks, especially an entire chain from its genesis block, might cause Besu to hang for an indeterminable amount of time while generating the response. We recommend setting a range limit using the --rpc-max-logs-range option (or leaving it at its default value of 1000). Parameters​ filterOptions: object - filter options object Returns​ result: array of objects - list of log objects curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getLogs\",\"params\":[{\"fromBlock\":\"earliest\", \"toBlock\":\"latest\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"topics\":[]}], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getLogs\", \"params\": [ { \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"topics\": [] } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb3\", \"blockHash\": \"0xe7cd776bfee2fad031d9cc1c463ef947654a031750b56fed3d5732bee9c61998\", \"transactionHash\": \"0xff36c03c0fba8ac4204e4b975a6632c862a3f08aa01b004f570cc59679ed4689\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] }, { \"logIndex\": \"0x0\", \"removed\": false, \"blockNumber\": \"0xb6\", \"blockHash\": \"0x3f4cf35e7ed2667b0ef458cf9e0acd00269a4bc394bb78ee07733d7d7dc87afc\", \"transactionHash\": \"0x117a31d0dbcd3e2b9180c40aca476586a648bc400aa2f6039afdd0feab474399\", \"transactionIndex\": \"0x0\", \"address\": \"0x2e1f232a9439c3d459fceca0beef13acc8259dd8\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000005\", \"topics\": [ \"0x04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3\" ] } ] } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{logs(filter:{fromBlock: 1486000, toBlock: 1486010, addresses: [\\\"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\\\"], topics: [[\\\"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\\\"]]}) {index topics data account{address} transaction{hash} }}\"}' http://localhost:8547/graphql { logs(filter: {fromBlock: 1486000, toBlock: 1486010, addresses: [\"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\"], topics: [[\"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\"]]}) { index topics data account { address } transaction { hash } } } { \"data\": { \"logs\": [ { \"index\": 0, \"topics\": [ \"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\", \"0x0000000000000000000000000000000000000000000000000000000000000004\", \"0x0000000000000000000000000000000000000000000000000000000000508918\" ], \"data\": \"0xa5a04999ec29a8bd19ce32b859280ef9dbb464d846be06f64a1b1012ec08ab03\", \"account\": { \"address\": \"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\" }, \"transaction\": { \"hash\": \"0x36a2186344c6a32760e7700fdf3685936220876c51ff39d071eb48c17f7e802f\" } }, { \"index\": 0, \"topics\": [ \"0x8a22ee899102a366ac8ad0495127319cb1ff2403cfae855f83a89cda1266674d\", \"0x0000000000000000000000000000000000000000000000000000000000000003\", \"0x0000000000000000000000000000000000000000000000000000000000648c72\" ], \"data\": \"0x0ee96b660ad82c8010c90760a03edfbb40b4af5e3634a8c214e4ac7fa1f61492\", \"account\": { \"address\": \"0x7ef66b77759e12caf3ddb3e4aff524e577c59d8d\" }, \"transaction\": { \"hash\": \"0x9e2cc9e84a9e78839d6f4b591dfd98cc7a454a8ee3cd6ccd0a18e662e22d3818\" } } ] } }","s":"eth_getLogs","u":"/public-networks/reference/api","h":"#eth_getlogs","p":2329},{"i":2434,"t":"Returns miner data for the specified block. Parameters​ hash: string - 32-byte block hash Returns​ result: object - miner data object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getMinerDataByBlockHash\",\"params\": [\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getMinerDataByBlockHash\", \"params\": [ \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"netBlockReward\": \"0x47c6f3739f3da800\", \"staticBlockReward\": \"0x4563918244f40000\", \"transactionFee\": \"0x38456548220800\", \"uncleInclusionReward\": \"0x22b1c8c1227a000\", \"uncleRewards\": [ { \"hash\": \"0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974\", \"coinbase\": \"0x0c062b329265c965deef1eede55183b3acb8f611\" } ], \"coinbase\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"difficulty\": \"0x7348c20\", \"totalDifficulty\": \"0xa57bcfdd96\" } }","s":"eth_getMinerDataByBlockHash","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblockhash","p":2329},{"i":2436,"t":"Returns miner data for the specified block. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter. note pending returns the same value as latest. Returns​ result: object - miner data object curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getMinerDataByBlockNumber\",\"params\": [\"0x7689D2\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getMinerDataByBlockNumber\", \"params\": [\"0x7689D2\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"netBlockReward\": \"0x47c6f3739f3da800\", \"staticBlockReward\": \"0x4563918244f40000\", \"transactionFee\": \"0x38456548220800\", \"uncleInclusionReward\": \"0x22b1c8c1227a000\", \"uncleRewards\": [ { \"hash\": \"0x2422d43b4f72e19faf4368949a804494f67559405046b39c6d45b1bd53044974\", \"coinbase\": \"0x0c062b329265c965deef1eede55183b3acb8f611\" } ], \"coinbase\": \"0xb42b6c4a95406c78ff892d270ad20b22642e102d\", \"extraData\": \"0xd583010502846765746885676f312e37856c696e7578\", \"difficulty\": \"0x7348c20\", \"totalDifficulty\": \"0xa57bcfdd96\" } }","s":"eth_getMinerDataByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getminerdatabyblocknumber","p":2329},{"i":2438,"t":"Returns the account and storage values of the specified account, including the Merkle proof. The API allows IoT devices or mobile apps which are unable to run light clients to verify responses from untrusted sources, by using a trusted block hash. Parameters​ address: string - 20-byte address of the account or contract keys: array of strings - list of 32-byte storage keys to generate proofs for blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: object - account details object with the following fields: balance: string - account balance codeHash: string - 32-byte hash of the account code nonce: string - number of transactions sent from the account storageHash: string - 32-byte SHA3 of the storageRoot accountProof: array of strings - list of RLP-encoded Merkle tree nodes, starting with the stateRoot storageProof: array of objects - list of storage entry objects with the following fields: key: string - storage key value: string - storage value proof: array of strings - list of RLP-encoded Merkle tree nodes, starting with the storageHash curl HTTP wscat WS JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getProof\",\"params\": [ \"0a8156e7ee392d885d10eaa86afd0e323afdcd95\", [\"0x0000000000000000000000000000000000000000000000000000000000000347\"], \"latest\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getProof\", \"params\": [ \"0a8156e7ee392d885d10eaa86afd0e323afdcd95\", [\"0x0000000000000000000000000000000000000000000000000000000000000347\"], \"latest\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"accountProof\": [ \"0xf90211a0...608d898380\", \"0xf90211a0...ec33f19580\", \"0xf901d1a0...9e55584480\", \"0xf8718080...18e5777142\" ], \"address\": \"0x0a8156e7ee392d885d10eaa86afd0e323afdcd95\", \"balance\": \"0x0\", \"codeHash\": \"0x2b6975dcaf69f9bb9a3b30bb6a37b305ce440250bf0dd2f23338cb18e5777142\", \"nonce\": \"0x5f\", \"storageHash\": \"0x917688de43091589aa58c1dfd315105bc9de4478b9ba7471616a4d8a43d46203\", \"storageProof\": [ { \"key\": \"0x0000000000000000000000000000000000000000000000000000000000000347\", \"value\": \"0x0\", \"proof\": [ \"0xf90211a0...5176779280\", \"0xf901f1a0...c208d86580\", \"0xf8d180a0...1ce6808080\" ] } ] } }","s":"eth_getProof","u":"/public-networks/reference/api","h":"#eth_getproof","p":2329},{"i":2440,"t":"Returns the value of a storage position at a specified address. Parameters​ address: string - 20-byte storage address index: string - integer index of the storage position blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result : string - value at the specified storage position Calculating the correct position depends on the storage you want to retrieve. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\": \"eth_getStorageAt\",\"params\": [\"0x‭3B3F3E‬\",\"0x0\",\"latest\"],\"id\": 53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getStorageAt\", \"params\": [\"0x‭3B3F3E‬\", \"0x0\", \"latest\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{account(address: \\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\") {storage(slot: \\\"0x04\\\")}}\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { storage(slot: \"0x04\") } } { \"data\": { \"account\": { \"storage\": \"0x0000000000000000000000000000000000000000000000000000000000000000\" } } }","s":"eth_getStorageAt","u":"/public-networks/reference/api","h":"#eth_getstorageat","p":2329},{"i":2442,"t":"Returns transaction information for the specified block hash and transaction index position. Parameters​ block: string - 32-byte hash of a block index: string - integer representing the transaction index position Returns​ result: object - transaction object, or null when there is no transaction curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByBlockHashAndIndex\",\"params\":[\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"0x2\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByBlockHashAndIndex\", \"params\": [ \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"0x2\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"blockNumber\": \"0x1442e\", \"chainId\": 2018, \"from\": \"0x70c9217d814985faef62b124420f8dfbddd96433\", \"gas\": \"0x3d090\", \"gasPrice\": \"0x57148a6be\", \"hash\": \"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6\", \"input\": \"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000\", \"nonce\": \"0x2cb2\", \"to\": \"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953\", \"transactionIndex\": \"0x2\", \"value\": \"0x0\", \"v\": \"0x2a\", \"r\": \"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a\", \"s\": \"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{ block(hash: \\\"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\\\") { transactionAt(index: 0) {block{hash} hash } } }\"}' http://localhost:8547/graphql { block(hash: \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\") { transactionAt(index: 0) { block { hash } hash } } } { \"data\": { \"block\": { \"transactionAt\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\" } } } }","s":"eth_getTransactionByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblockhashandindex","p":2329},{"i":2444,"t":"Returns transaction information for the specified block number and transaction index position. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. index: string - transaction index position Returns​ result: object - transaction object, or null when there is no transaction This request returns the third transaction in the 82990 block on the Ropsten testnet. You can also view this block and transaction on Etherscan. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByBlockNumberAndIndex\",\"params\":[\"82990\", \"0x2\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByBlockNumberAndIndex\", \"params\": [\"82990\", \"0x2\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7\", \"blockNumber\": \"0x1442e\", \"chainId\": 2018, \"from\": \"0x70c9217d814985faef62b124420f8dfbddd96433\", \"gas\": \"0x3d090\", \"gasPrice\": \"0x57148a6be\", \"hash\": \"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6\", \"input\": \"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000\", \"nonce\": \"0x2cb2\", \"to\": \"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953\", \"transactionIndex\": \"0x2\", \"value\": \"0x0\", \"v\": \"0x2a\", \"r\": \"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a\", \"s\": \"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{block(number:20303) {transactionAt(index: 0) {block{hash} hash}}}\"}' http://localhost:8547/graphql { block(number: 20303) { transactionAt(index: 0) { block { hash } hash } } } { \"data\": { \"block\": { \"transactionAt\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\" } } } }","s":"eth_getTransactionByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_gettransactionbyblocknumberandindex","p":2329},{"i":2446,"t":"Returns transaction information for the specified transaction hash. Parameters​ transaction: string - 32-byte transaction hash Returns​ result: object - transaction object, or null when there is no transaction curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionByHash\",\"params\":[\"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionByHash\", \"params\": [ \"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": { \"blockHash\": \"0x510efccf44a192e6e34bcb439a1947e24b86244280762cbb006858c237093fda\", \"blockNumber\": \"0x422\", \"chainId\": 2018, \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0x3b9aca00\", \"hash\": \"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\", \"input\": \"0x\", \"nonce\": \"0x1\", \"to\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"transactionIndex\": \"0x0\", \"value\": \"0x4e1003b28d9280000\", \"v\": \"0xfe7\", \"r\": \"0x84caf09aefbd5e539295acc67217563438a4efb224879b6855f56857fa2037d3\", \"s\": \"0x5e863be3829812c81439f0ae9d8ecb832b531d651fb234c848d1bf45e62be8b9\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{transaction(hash : \\\"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\\\") { block{hash} gas gasPrice hash nonce value from {address} to {address} status}}\"}' http://localhost:8547/graphql { transaction(hash: \"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\") { block { hash } gas gasPrice hash nonce value from { address } to { address } status } } { \"data\": { \"transaction\": { \"block\": { \"hash\": \"0xb1ef35744bade6980c3a933024b2557a8c724a19e5fdd2116bac712aa5e57198\" }, \"gas\": 21000, \"gasPrice\": \"0x2540be400\", \"hash\": \"0x03d80b9ca0a71435399a268609d6d7896f7155d2147cc22b780672bcb59b170d\", \"nonce\": 6, \"value\": \"0x8ac7230489e80000\", \"from\": { \"address\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"to\": { \"address\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\" }, \"status\": 1 } } }","s":"eth_getTransactionByHash","u":"/public-networks/reference/api","h":"#eth_gettransactionbyhash","p":2329},{"i":2448,"t":"Returns the number of transactions sent from a specified address. Use the pending tag to get the next account nonce not used by any pending transactions. Parameters​ address: string - 20-byte account address blockNumber or blockHash: string - hexadecimal or decimal integer representing a block number, block hash, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter Returns​ result: string - integer representing the number of transactions sent from the specified address curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0xc94770007dda54cF92009BFF0dE90c06F603a09f\",\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionCount\", \"params\": [\"0xc94770007dda54cF92009BFF0dE90c06F603a09f\", \"latest\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{ account (address:\\\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\\\"){transactionCount}}\"}' http://localhost:8547/graphql { account(address: \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\") { transactionCount } } { \"data\": { \"account\": { \"transactionCount\": 5 } } }","s":"eth_getTransactionCount","u":"/public-networks/reference/api","h":"#eth_gettransactioncount","p":2329},{"i":2450,"t":"Returns the receipt of a transaction by transaction hash. Receipts for pending transactions are not available. If you enabled revert reason, the receipt includes available revert reasons in the response. Parameters​ transaction: string - 32-byte hash of a transaction Returns​ result: object - transaction receipt object, or null when there is no receipt curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionReceipt\",\"params\":[\"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getTransactionReceipt\", \"params\": [ \"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\" ], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"blockHash\": \"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a\", \"blockNumber\": \"0x50\", \"contractAddress\": null, \"cumulativeGasUsed\": \"0x5208\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gasUsed\": \"0x5208\", \"effectiveGasPrice\": \"0x1\", \"logs\": [], \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"status\": \"0x1\", \"to\": \"0xf17f52151ebef6c7334fad080c5704d77216b732\", \"transactionHash\": \"0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3\", \"transactionIndex\": \"0x0\" } } curl -X POST -H \"Content-Type: application/json\" --data '{\"query\": \"{transaction(hash: \\\"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\\\") {block{hash logsBloom} hash createdContract{address} cumulativeGasUsed gas gasUsed logs{topics} from{address} to{address} index}}\"}' http://localhost:8547/graphql { transaction(hash: \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\") { block { hash logsBloom } hash createdContract { address } cumulativeGasUsed gas gasUsed logs { topics } from { address } to { address } index } } { \"data\": { \"transaction\": { \"block\": { \"hash\": \"0x9270651f9c6fa36232c379d0ecf69b519383aa275815a65f1e03114346668f69\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" }, \"hash\": \"0x5f5366af89e8777d5ae62a1af94a0876bdccbc22417bed0aff361eefa3e37f86\", \"createdContract\": null, \"cumulativeGasUsed\": 21000, \"gas\": 21000, \"gasUsed\": 21000, \"effectiveGasPrice\": \"0x1\", \"logs\": [], \"from\": { \"address\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"to\": { \"address\": \"0x9d8f8572f345e1ae53db1dfa4a7fce49b467bd7f\" }, \"index\": 0 } } }","s":"eth_getTransactionReceipt","u":"/public-networks/reference/api","h":"#eth_gettransactionreceipt","p":2329},{"i":2452,"t":"Returns uncle specified by block hash and index. Parameters​ block: string - 32-byte block hash uncleIndex: string - index of the uncle Returns​ result: object - block object note Uncles don't contain individual transactions. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleByBlockHashAndIndex\",\"params\":[\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\", \"0x0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleByBlockHashAndIndex\", \"params\": [ \"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\", \"0x0\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"difficulty\": \"0x76b123df93230\", \"extraData\": \"0x50505945206e616e6f706f6f6c2e6f7267\", \"gasLimit\": \"0x7a121d\", \"gasUsed\": \"0x7a0175\", \"hash\": \"0xc20189c0b1a4a23116ab3b177e929137f6e826f17fc4c2e880e7258c620e9817\", \"logsBloom\": \"0x890086c024487ca422be846a201a10e41bc2882902312116c1119609482031e9c000e2a708004a10281024028020c505727a12570c4810121c59024490b040894406a1c23c37a0094810921da3923600c71c03044b40924280038d07ab91964a008084264a01641380798840805a284cce201a8026045451002500113a00de441001320805ca2840037000111640d090442c11116d2112948084240242340400236ce81502063401dcc214b9105194d050884721c1208800b20501a4201400276004142f118e60808284506979a86e050820101c170c185e2310005205a82a2100382422104182090184800c02489e033440218142140045801c024cc1818485\", \"miner\": \"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5\", \"mixHash\": \"0xf557cc827e058862aa3ea1bd6088fb8766f70c0eac4117c56cf85b7911f82a14\", \"nonce\": \"0xd320b48904347cdd\", \"number\": \"0x768964\", \"parentHash\": \"0x98d752708b3677df8f439c4529f999b94663d5494dbfc08909656db3c90f6255\", \"receiptsRoot\": \"0x0f838f0ceb73368e7fc8d713a7761e5be31e3b4beafe1a6875a7f275f82da45b\", \"sha3Uncles\": \"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\", \"size\": \"0x21a\", \"stateRoot\": \"0xa0c7d4fca79810c89c517eff8dadb9c6d6f4bcc27c2edfb301301e1cf7dec642\", \"timestamp\": \"0x5cdcbba6\", \"totalDifficulty\": \"0x229ad33cabd4c40d23d\", \"transactionsRoot\": \"0x866e38e91d01ef0387b8e07ccf35cd910224271ccf2b7477b8c8439e8b70f365\", \"uncles\": [] } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\\\"){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}\"}' http://localhost:8547/graphql { block(hash: \"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7\") { ommerAt(index: 0) { difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot } } } { \"data\": { \"block\": { \"difficulty\": \"0x1\", \"extraData\": \"0xf882a00000000000000000000000000000000000000000000000000000000000000000d5949811ebc35d7b06b3fa8dc5809a1f9c52751e1deb808400000000f843b8418e98ef756acdae1e510b1df4b507b7af04eb3802db7fa0f3e73e7d0721b3645e76f4eb3d0dbf0de75620c4405bd5a663247cdd9616482c883053856d857f884a01\", \"gasLimit\": 4700000, \"gasUsed\": 0, \"hash\": \"0x0efe67972b982eb6be5df84e5238eb07475f86afa8a7de708f6a13ac0ff60d6c\", \"logsBloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"mixHash\": \"0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365\", \"nonce\": \"0x0000000000000000\", \"number\": 200, \"receiptsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\", \"stateRoot\": \"0xd650578a04b39f50cc979155f4510ec28c2c0a7c1e5fdbf84609bc7b1c430f48\", \"timestamp\": \"0x5cd109fb\", \"totalDifficulty\": \"0xc9\", \"transactionsRoot\": \"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\" } } }","s":"eth_getUncleByBlockHashAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblockhashandindex","p":2329},{"i":2454,"t":"Returns uncle specified by block number and index. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. uncleIndex: string - index of the uncle Returns​ result: object - block object note Uncles do not contain individual transactions. curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleByBlockNumberAndIndex\",\"params\":[\"0x7689D2\", \"0x0\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleByBlockNumberAndIndex\", \"params\": [\"0x7689D2\", \"0x0\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"difficulty\": \"0x77daec467bf93\", \"extraData\": \"0x50505945206e616e6f706f6f6c2e6f7267\", \"gasLimit\": \"0x7a121d\", \"gasUsed\": \"0x7a0f7b\", \"hash\": \"0x42d83ae9c0743f4b1f9c61ff7ea8b164c1bab3627decd49233760680be006ecf\", \"logsBloom\": \"0x888200800000340120220008640200500408006100038400100581c000080240080a0014e8002010080004088040004022402a000c18010001400100002a041141a0610a0052900600041018c0002a0003090020404c00206010010513d00020005380124e08050480710000000108401012b0901c1424006000083a10a8c1040100a0440081050210124400040044304070004001100000012600806008061d0320800000b40042160600002480000000800000c0002100200940801c000820800048024904710000400640490026000a44300309000286088010c2300060003011380006400200812009144042204810209020410a84000410520c08802941\", \"miner\": \"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5\", \"mixHash\": \"0xf977fcdb52868be410b75ef2becc35cc312f13ab0a6ce400ecd9d445f66fa3f2\", \"nonce\": \"0x628b28403bf1e3d3\", \"number\": \"0x7689d0\", \"parentHash\": \"0xb32cfdfbf4adb05d30f02fcc6fe039cc6666402142954051c1a1cb9cc91aa11e\", \"receiptsRoot\": \"0x9c7c8361d1a24ea2841432234c81974a9920d3eba2b2b1c496b5f925a95cb4ac\", \"sha3Uncles\": \"0x7d972aa1b182b7e93f1db043f03fbdbfac6874fe7e67e162141bcc0aefa6336b\", \"size\": \"0x21a\", \"stateRoot\": \"0x74e97b77813146344d75acb5a52a006cc6dfaca678a10fb8a484a8443e919272\", \"timestamp\": \"0x5cdcc0a7\", \"totalDifficulty\": \"0x229b0583b4bd2698ca0\", \"transactionsRoot\": \"0x1d21626afddf05e5866de66ca3fcd98f1caf5357eba0cc6ec675606e116a891b\", \"uncles\": [] } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:2587){ ommerAt(index: 0) {difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot}}}\"}' http://localhost:8547/graphql { block(number: 2587) { ommerAt(index: 0) { difficulty extraData gasLimit gasUsed hash logsBloom mixHash nonce number receiptsRoot stateRoot timestamp totalDifficulty transactionsRoot } } } { \"data\": { \"block\": { \"ommerAt\": null } } }","s":"eth_getUncleByBlockNumberAndIndex","u":"/public-networks/reference/api","h":"#eth_getunclebyblocknumberandindex","p":2329},{"i":2456,"t":"Returns the number of uncles in a block from a block matching the given block hash. Parameters​ block: string - 32-byte block hash Returns​ result: string - integer representing the number of uncles in the specified block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleCountByBlockHash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleCountByBlockHash\", \"params\": [ \"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": 0x0 } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(hash:\\\"0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426\\\"){ommerCount}}\"}' http://localhost:8547/graphql { block(hash: \"0x65c08d792e4192b9ece6b6f2390da7da464208b22d88490be8add9373917b426\") { ommerCount } } { \"data\": { \"block\": { \"ommerCount\": 2 } } }","s":"eth_getUncleCountByBlockHash","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblockhash","p":2329},{"i":2458,"t":"Returns the number of uncles in a block matching the specified block number. Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: string - integer representing the number of uncles in the specified block curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getUncleCountByBlockNumber\",\"params\":[\"0xe8\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getUncleCountByBlockNumber\", \"params\": [\"0xe8\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{block(number:\\\"0x59fd\\\"){ommerCount}}\"}' http://localhost:8547/graphql { block(number: \"0x59fd\") { ommerCount } } { \"data\": { \"block\": { \"ommerCount\": 0 } } }","s":"eth_getUncleCountByBlockNumber","u":"/public-networks/reference/api","h":"#eth_getunclecountbyblocknumber","p":2329},{"i":2460,"t":"Returns the hash of the current block, the seed hash, and the required target boundary condition. Parameters​ None Returns​ result: array of strings - array with the following items: header: string - 32-byte hash of the current block header (PoW-hash) seed: string - 32-byte seed hash used for the DAG target: string - 32-byte required target boundary condition: 2^256 / difficulty blockNumber: string - hexadecimal integer representing the current block number curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getWork\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_getWork\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ \"0xce5e32ca59cb86799a1879e90150b2c3b882852173e59865e9e79abb67a9d636\", \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"0x00a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3\", \"0x42\" ] }","s":"eth_getWork","u":"/public-networks/reference/api","h":"#eth_getwork","p":2329},{"i":2462,"t":"Returns the number of hashes per second with which the node is mining. When the stratum server is enabled, this method returns the cumulative hashrate of all sealers reporting their hashrate. Parameters​ None Returns​ result: string - number of hashes per second curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x12b\" }","s":"eth_hashrate","u":"/public-networks/reference/api","h":"#eth_hashrate","p":2329},{"i":2464,"t":"Returns an estimate of how much priority fee, in wei, you can pay to get a transaction included in the current block. Parameters​ None Returns​ result: hexadecimal value in wei curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_maxPriorityFeePerGas\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_maxPriorityFeePerGas\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0xf4240\" }","s":"eth_maxPriorityFeePerGas","u":"/public-networks/reference/api","h":"#eth_maxpriorityfeepergas","p":2329},{"i":2466,"t":"Whether the client is actively mining new blocks. Besu pauses mining while the client synchronizes with the network regardless of command settings or methods called. Parameters​ None Returns​ result: boolean - indicates if the client is actively mining new blocks curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_mining\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_mining\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": true }","s":"eth_mining","u":"/public-networks/reference/api","h":"#eth_mining","p":2329},{"i":2468,"t":"Creates a filter to retrieve new block hashes. To poll for new blocks, use eth_getFilterChanges. Parameters​ None Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newBlockFilter\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newBlockFilter\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x9d78b6780f844228b96ecc65a320a825\" }","s":"eth_newBlockFilter","u":"/public-networks/reference/api","h":"#eth_newblockfilter","p":2329},{"i":2470,"t":"Creates a log filter. To poll for logs associated with the created filter, use eth_getFilterChanges. To get all logs associated with the filter, use eth_getFilterLogs. Parameters​ filterOptions: object - filter options object note fromBlock and toBlock in the filter options object default to latest. Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newFilter\",\"params\":[{\"fromBlock\":\"earliest\", \"toBlock\":\"latest\", \"topics\":[]}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newFilter\", \"params\": [{ \"fromBlock\": \"earliest\", \"toBlock\": \"latest\", \"topics\": [] }], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1ddf0c00989044e9b41cc0ae40272df3\" }","s":"eth_newFilter","u":"/public-networks/reference/api","h":"#eth_newfilter","p":2329},{"i":2472,"t":"Creates a filter to retrieve new pending transactions hashes. To poll for new pending transactions, use eth_getFilterChanges. Parameters​ None Returns​ result: string - filter ID curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_newPendingTransactionFilter\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_newPendingTransactionFilter\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x443d6a77c4964707a8554c92f7e4debd\" }","s":"eth_newPendingTransactionFilter","u":"/public-networks/reference/api","h":"#eth_newpendingtransactionfilter","p":2329},{"i":2474,"t":"Returns current Ethereum protocol version. Parameters​ None Returns​ result: string - Ethereum protocol version curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_protocolVersion\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_protocolVersion\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3f\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{protocolVersion}\"}' http://localhost:8547/graphql { protocolVersion } { \"data\": { \"protocolVersion\": 63 } }","s":"eth_protocolVersion","u":"/public-networks/reference/api","h":"#eth_protocolversion","p":2329},{"i":2476,"t":"Sends a signed transaction. A transaction can send ether, deploy a contract, or interact with a contract. Set the maximum transaction fee for transactions using the --rpc-tx-feecap CLI option. You can interact with contracts using eth_sendRawTransaction or eth_call. To avoid exposing your private key, create signed transactions offline and send the signed transaction data using eth_sendRawTransaction. info Besu doesn't implement eth_sendTransaction. Web3Signer provides transaction signing and implements eth_sendTransaction. Parameters​ transaction: string - signed transaction serialized to hexadecimal format note Creating and sending transactions includes examples of creating signed transactions using the web3.js library. Returns​ result: string - 32-byte transaction hash curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendRawTransaction\",\"params\":[\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_sendRawTransaction\", \"params\": [ \"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\" ], \"id\": 1 } { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"mutation {sendRawTransaction(data: \\\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\\\")}\"}' http://localhost:8547/graphql mutation { sendRawTransaction(data: \"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\") } { \"data\": { \"sendRawTransaction\": \"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331\" } }","s":"eth_sendRawTransaction","u":"/public-networks/reference/api","h":"#eth_sendrawtransaction","p":2329},{"i":2478,"t":"Submits the mining hashrate. This is used by mining software such as Ethminer. Parameters​ hashrate: string - 32-byte hexadecimal string representation of the hashrate id: string - 32-byte random hexadecimal ID identifying the client Returns​ result: boolean - indicates if submission is successful curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"eth_submitHashrate\", \"params\":[\"0x0000000000000000000000000000000000000000000000000000000000500000\", \"0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_submitHashrate\", \"params\": [ \"0x0000000000000000000000000000000000000000000000000000000000500000\", \"0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"eth_submitHashrate","u":"/public-networks/reference/api","h":"#eth_submithashrate","p":2329},{"i":2480,"t":"Submits a proof of work (Ethash) solution. This is used by mining software such as Ethminer. Parameters​ nonce: string - retrieved 8-byte nonce header: string - 32-byte hash of the block header (PoW-hash) digest: string - 32-bytes mix digest Returns​ result: boolean - indicates if the provided solution is valid curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\", \"method\":\"eth_submitWork\", \"params\":[\"0x0000000000000001\", \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\", \"0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\", \"method\":\"eth_submitWork\", \"params\":[\"0x0000000000000001\", \"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef\", \"0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000\"],\"id\":73} { \"id\": 1, \"jsonrpc\": \"2.0\", \"result\": true }","s":"eth_submitWork","u":"/public-networks/reference/api","h":"#eth_submitwork","p":2329},{"i":2482,"t":"Returns an object with data about the synchronization status, or false if not synchronizing. note Once the node reaches the head of the chain, eth_syncing returns false, indicating that there is no active syncing target. Parameters​ None Returns​ result: object or boolean - synchronization status data object with the following fields, or false if not synchronizing: startingBlock: string - index of the highest block on the blockchain when the network synchronization starts currentBlock: string - index of the latest block (also known as the best block) for the current node (this is the same index that eth_blockNumber returns.) highestBlock: string - index of the highest known block in the peer network (that is, the highest block so far discovered among peer nodes. This is the same value as currentBlock if the current node has no peers.) pulledStates: string - if fast synchronizing, the number of state entries fetched so far, or null if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.) knownStates: string - if fast synchronizing, the number of states the node knows of so far, or null if this is not known or not relevant (if full synchronizing or fully synchronized, this field is not returned.) curl HTTP wscat WS JSON result curl GraphQL GraphQL GraphQL result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":51}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_syncing\", \"params\": [], \"id\": 51 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": { \"startingBlock\": \"0x0\", \"currentBlock\": \"0x1518\", \"highestBlock\": \"0x9567a3\", \"pulledStates\": \"0x203ca\", \"knownStates\": \"0x200636\" } } curl -X POST -H \"Content-Type: application/json\" --data '{ \"query\": \"{syncing{startingBlock currentBlock highestBlock pulledStates knownStates}}\"}' http://localhost:8547/graphql { syncing { startingBlock currentBlock highestBlock pulledStates knownStates } } { \"data\": { \"syncing\": { \"startingBlock\": 0, \"currentBlock\": 5400, \"highestBlock\": 9791395, \"pullStates\": 132042, \"knownStates\": 2098742 } } }","s":"eth_syncing","u":"/public-networks/reference/api","h":"#eth_syncing","p":2329},{"i":2484,"t":"Uninstalls a filter with the specified ID. When a filter is no longer required, call this method. Filters time out when not requested by eth_getFilterChanges or eth_getFilterLogs for 10 minutes. Parameters​ filterId: string - filter ID Returns​ result: boolean - indicates if the filter is successfully uninstalled curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_uninstallFilter\",\"params\":[\"0x70355a0b574b437eaa19fe95adfedc0a\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"eth_uninstallFilter\", \"params\": [\"0x70355a0b574b437eaa19fe95adfedc0a\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"eth_uninstallFilter","u":"/public-networks/reference/api","h":"#eth_uninstallfilter","p":2329},{"i":2486,"t":"The MINER API methods allow you to control the node's mining operation, or settings related to block creation in general. note The MINER API methods are not enabled by default for JSON-RPC. To enable the MINER API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"MINER methods","u":"/public-networks/reference/api","h":"#miner-methods","p":2329},{"i":2488,"t":"Updates the target gas limit set using the --target-gas-limit command line option. Parameters​ gasPrice: number - target gas price in wei Returns​ result: string - Success or error curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_changeTargetGasLimit\",\"params\":[800000], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_changeTargetGasLimit\", \"params\": [800000], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"miner_changeTargetGasLimit","u":"/public-networks/reference/api","h":"#miner_changetargetgaslimit","p":2329},{"i":2490,"t":"Retrieves the current extra data field that is used when producing blocks. Parameters​ None Returns​ result: string - Hexadecimal string representation of the extra data bytes. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getExtraData\",\"params\":[], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getExtraData\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x68656c6c6f20776f726c64\" }","s":"miner_getExtraData","u":"/public-networks/reference/api","h":"#miner_getextradata","p":2329},{"i":2492,"t":"Gets the minimum gas price (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-gas-price command line option, or is set to 1000 if the command line option is not specified. Use miner_setMinGasPrice to change the current value of the gas price. Parameters​ None Returns​ result: string - Minimum gas price (in wei) as a hexadecimal string curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getMinGasPrice\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getMinGasPrice\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x3e8\" }","s":"miner_getMinGasPrice","u":"/public-networks/reference/api","h":"#miner_getmingasprice","p":2329},{"i":2494,"t":"Gets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-priority-fee command line option, or is set to 0 if the command line option is not specified. Use miner_setMinPriorityFee to change the current value of the fee. Parameters​ None Returns​ result: string - Minimum priority fee per gas (in wei) as a hexadecimal string curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_getMinPriorityFee\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_getMinPriorityFee\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"0x1\" }","s":"miner_getMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_getminpriorityfee","p":2329},{"i":2496,"t":"Sets the coinbase, the address for the mining rewards. note You can also use miner_setEtherbase as an alternative method. They both work the same way. Etherbase is a historic name for coinbase. Parameters​ coinbase: string - Account address you pay mining rewards to Returns​ result: boolean - true when address is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setCoinbase\",\"params\":[\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setCoinbase\", \"params\": [\"0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setCoinbase","u":"/public-networks/reference/api","h":"#miner_setcoinbase","p":2329},{"i":2498,"t":"Sets a new value for the extra data field that is used when producing blocks. Parameters​ extraData: string - Hexadecimal representation of the extra data field, with a maximum of 32 bytes. Returns​ result: string - true or false curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setExtraData\",\"params\":[\"0x0010203\"], \"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setExtraData\", \"params\": [\"0x0010203\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"params\": [\"0x0010203\"], \"id\": 1, \"result\": \"true\" }","s":"miner_setExtraData","u":"/public-networks/reference/api","h":"#miner_setextradata","p":2329},{"i":2500,"t":"Sets the minimum gas price (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-gas-price command line option, or is set to 1000 if the command line option is not specified. Use miner_getMinGasPrice to get the current value of the gas price. Parameters​ minGasPrice: string - Minimum gas price in hexadecimal Returns​ result: boolean - true when the gas price is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setMinGasPrice\",\"params\":[\"0x5dc\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setMinGasPrice\", \"params\": [\"0x5dc\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setMinGasPrice","u":"/public-networks/reference/api","h":"#miner_setmingasprice","p":2329},{"i":2502,"t":"Sets the minimum priority fee per gas (in wei) offered by a transaction to be included in a block. The initial value is set using the --min-priority-fee command line option, or is set to 0 if the command line option is not specified. Use miner_getMinPriorityFee to get the current value of the fee. Parameters​ minPriorityFeePerGas: string - Minimum priority fee per gas in hexadecimal Returns​ result: boolean - true when the fee is set curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_setMinPriorityFee\",\"params\":[\"0x0a\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_setMinPriorityFee\", \"params\": [\"0x0a\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_setMinPriorityFee","u":"/public-networks/reference/api","h":"#miner_setminpriorityfee","p":2329},{"i":2504,"t":"Starts the mining process. To start mining, you must first specify a miner coinbase using the --miner-coinbase command line option or using miner_setCoinbase. Parameters​ None Returns​ result: boolean - true if mining starts, or if the node is already mining curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_start\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_start\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_start","u":"/public-networks/reference/api","h":"#miner_start","p":2329},{"i":2506,"t":"Stops the mining process on the client. Parameters​ None Returns​ result: boolean - true if mining stops, or if the node is not mining curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"miner_stop\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"miner_stop\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": true }","s":"miner_stop","u":"/public-networks/reference/api","h":"#miner_stop","p":2329},{"i":2508,"t":"The NET API methods provide network-related information.","s":"NET methods","u":"/public-networks/reference/api","h":"#net-methods","p":2329},{"i":2510,"t":"Returns the enode URL. Parameters​ None Returns​ result: string - enode URL of the node curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303\" }","s":"net_enode","u":"/public-networks/reference/api","h":"#net_enode","p":2329},{"i":2512,"t":"Whether the client is actively listening for network connections. Parameters​ None Returns​ result: boolean - indicates if the client is actively listening for network connections curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53} { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": true }","s":"net_listening","u":"/public-networks/reference/api","h":"#net_listening","p":2329},{"i":2514,"t":"Returns the number of peers currently connected to the client. Parameters​ None Returns​ result: string - number of connected peers in hexadecimal curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_peerCount\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"net_peerCount\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5\" }","s":"net_peerCount","u":"/public-networks/reference/api","h":"#net_peercount","p":2329},{"i":2516,"t":"Returns enabled services (for example, jsonrpc) and the host and port for each service. note The --nat-method setting affects the JSON-RPC and P2P host and port values, but not the metrics host and port values. Parameters​ None Returns​ result: object - enabled services curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"jsonrpc\": { \"host\": \"127.0.0.1\", \"port\": \"8545\" }, \"p2p\": { \"host\": \"127.0.0.1\", \"port\": \"30303\" }, \"metrics\": { \"host\": \"127.0.0.1\", \"port\": \"9545\" } } }","s":"net_services","u":"/public-networks/reference/api","h":"#net_services","p":2329},{"i":2518,"t":"Returns the network ID. Parameters​ None Returns​ result: string - current network ID Network ID Chain Network Description 1 ETH Mainnet Main Ethereum network 17000 ETH Holesky PoS test network 11155111 ETH Sepolia PoS test network 2018 ETH Dev PoW development network 1 ETC Classic Main Ethereum Classic network 7 ETC Mordor PoW test network note For almost all networks, network ID and chain ID are the same. The only networks in the table above with different network and chain IDs are Classic with a chain ID of 61 and Mordor with a chain ID of 63. curl HTTP request wscat WS request JSON result for Mainnet JSON result for Holesky curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"net_version\", \"params\": [], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 51, \"result\": \"1\" } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"5\" }","s":"net_version","u":"/public-networks/reference/api","h":"#net_version","p":2329},{"i":2520,"t":"The PLUGINS API methods provide plugin-related functionality. note The PLUGINS API methods are not enabled by default for JSON-RPC. To enable the PLUGINS API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"PLUGINS methods","u":"/public-networks/reference/api","h":"#plugins-methods","p":2329},{"i":2522,"t":"Reloads specified plugin configuration. Parameters​ plugin: string - plugin Returns​ result: string - Success curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"plugins_reloadPluginConfig\",\"params\":[\"tech.pegasys.plus.plugin.kafka.KafkaPlugin\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"plugins_reloadPluginConfig\", \"params\": [\"tech.pegasys.plus.plugin.kafka.KafkaPlugin\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": \"Success\" }","s":"plugins_reloadPluginConfig","u":"/public-networks/reference/api","h":"#plugins_reloadpluginconfig","p":2329},{"i":2524,"t":"The TRACE API is a more concise alternative to the DEBUG API. note The TRACE API methods are not enabled by default for JSON-RPC. To enable the TRACE API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"TRACE methods","u":"/public-networks/reference/api","h":"#trace-methods","p":2329},{"i":2526,"t":"Provides transaction processing of type trace for the specified block. note Your node must be an archive node, or the requested block must be within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order; if revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_block\",\"params\":[\"0x6\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_block\", \"params\": [\"0x6\"], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad82\", \"input\": \"0x0000000000000000000000000000000000000999\", \"to\": \"0x0020000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": { \"gasUsed\": \"0x7536\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"call\" }, { \"action\": { \"address\": \"0x0020000000000000000000000000000000000000\", \"balance\": \"0x300\", \"refundAddress\": \"0x0000000000000999000000000000000000000000\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"suicide\" }, { \"action\": { \"author\": \"0x0000000000000000000000000000000000000000\", \"rewardType\": \"block\", \"value\": \"0x1bc16d674ec80000\" }, \"blockHash\": \"0x71512d31e18f828cef069a87bc2c7514a8ca334f9ee72625efdf5cc2d43768dd\", \"blockNumber\": 6, \"result\": null, \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": null, \"transactionPosition\": null, \"type\": \"reward\" } ], \"id\": 1 }","s":"trace_block","u":"/public-networks/reference/api","h":"#trace_block","p":2329},{"i":2528,"t":"Executes the given call and returns a number of possible traces for it. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ call: object - transaction call object blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x0010000000000000000000000000000000000000\",\"gas\":\"0xfffff2\",\"gasPrice\":\"0xef\",\"value\":\"0x0\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\",\"nonce\":\"0x0\"},[\"trace\"],\"latest\"],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_call\", \"params\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"to\": \"0x0010000000000000000000000000000000000000\", \"gas\": \"0xfffff2\", \"gasPrice\": \"0xef\", \"value\": \"0x0\", \"data\": \"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\", \"nonce\": \"0x0\" }, [\"trace\"], \"latest\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\" : \"0xffabba\", \"input\" : \"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\", \"to\" : \"0x0010000000000000000000000000000000000000\", \"value\" : \"0x0\" }, \"result\" : { \"gasUsed\" : \"0x9c58\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, \"id\" : 2 },","s":"trace_call","u":"/public-networks/reference/api","h":"#trace_call","p":2329},{"i":2530,"t":"Performs multiple call traces on top of the same block. You can trace dependent transactions. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_callMany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"trace_callMany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"latest\"],\"id\":1} { \"jsonrpc\": \"2.0\", \"result\": [ { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x407d73d8a49eeb85d32cf465507dd71d507100c1\", \"gas\" : \"0x1dcd12f8\", \"input\" : \"0x\", \"to\" : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"value\" : \"0x186a0\" }, \"result\" : { \"gasUsed\" : \"0x0\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, { \"output\" : \"0x\", \"stateDiff\" : null, \"trace\" : [ { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x407d73d8a49eeb85d32cf465507dd71d507100c1\", \"gas\" : \"0x1dcd12f8\", \"input\" : \"0x\", \"to\" : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", \"value\" : \"0x186a0\" }, \"result\" : { \"gasUsed\" : \"0x0\", \"output\" : \"0x\" }, \"subtraces\" : 0, \"traceAddress\" : [ ], \"type\" : \"call\" } ], \"vmTrace\" : null }, ], \"id\" : 1 },","s":"trace_callMany","u":"/public-networks/reference/api","h":"#trace_callmany","p":2329},{"i":2532,"t":"Returns traces matching the specified filter. The maximum number of blocks you can supply to trace_filter is 1000 by default. You can adjust this limit using the --rpc-max-trace-filter-range option. note Your node must be an archive node, or the requested blocks must be within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ traceFilterOptions: object - trace filter options object Returns​ result: array of objects - list of calls to other contracts containing one object per call, in transaction execution order curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_filter\",\"params\":[{\"fromBlock\":\"0x1\",\"toBlock\":\"0x21\",\"after\":2,\"count\":2,\"fromAddress\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"]}],\"id\":415}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_filter\", \"params\": [ { \"fromBlock\": \"0x1\", \"toBlock\": \"0x21\", \"after\": 2, \"count\": 2, \"fromAddress\": [\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"] } ], \"id\": 415 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad82\", \"input\": \"0x0000000000000000000000000000000000000999\", \"to\": \"0x0020000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0xcd5d9c7acdcbd3fb4b24a39e05a38e32235751bb0c9e4f1aa16dc598a2c2a9e4\", \"blockNumber\": 6, \"result\": { \"gasUsed\": \"0x7536\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [], \"transactionHash\": \"0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e\", \"transactionPosition\": 0, \"type\": \"call\" }, { \"action\": { \"callType\": \"call\", \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0xffad52\", \"input\": \"0xf000000000000000000000000000000000000000000000000000000000000001\", \"to\": \"0x0030000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0xeed85fe57db751442c826cfe4fdf43b10a5c2bc8b6fd3a8ccced48eb3fb35885\", \"blockNumber\": 7, \"result\": { \"gasUsed\": \"0x1b\", \"output\": \"0xf000000000000000000000000000000000000000000000000000000000000002\" }, \"subtraces\": 0, \"traceAddress\": [], \"transactionHash\": \"0x47f4d445ea1812cb1ddd3464ab23d2bfc6ed408a8a9db1c497f94e8e06e85286\", \"transactionPosition\": 0, \"type\": \"call\" } ], \"id\": 415 }","s":"trace_filter","u":"/public-networks/reference/api","h":"#trace_filter","p":2329},{"i":2534,"t":"Returns a trace at the given position. note Your node must be an archive node, or the requested transaction must be contained in a block within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ transaction: string - transaction hash indexPositions: array - Index positions of the traces Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_get\",\"params\":[\"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\",[\"0x0\"]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_get\", \"params\": [ \"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\", [\"0x0\"] ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"action\" : { \"callType\" : \"call\", \"from\" : \"0x1c39ba39e4735cb65978d4db400ddd70a72dc750\", \"gas\" : \"0x13e99\", \"input\" : \"0x16c72721\", \"to\" : \"0x2bd2326c993dfaef84f696526064ff22eba5b362\", \"value\" : \"0x0\" }, \"blockHash\" : \"0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add\" \"blockNumber\": 3068185, \"result\": { \"gasUsed\": \"0x183\", \"output\" : \"0x0000000000000000000000000000000000000000000000000000000000000001\" }, \"subtraces\" : 0, \"traceAddress\" : [ 0 ], \"transactionHash\": \"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\", \"transactionPosition\": 2, \"type\" : \"call\" }, \"id\" : 1 },","s":"trace_get","u":"/public-networks/reference/api","h":"#trace_get","p":2329},{"i":2536,"t":"Traces a call to eth_sendRawTransaction without making the call, returning the traces. note When using Bonsai, the requested transaction must be contained in a block within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ data - string - Raw transaction data options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"trace_rawTransaction\",\"params\":[\"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\",[\"trace\"]],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_rawTransaction\", \"params\": [ \"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\", [\"trace\"] ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": { \"output\" : \"0x\" \"stateDiff\": null, \"from\" : \"0x1c39ba39e4735cb65978d4db400ddd70a72dc750\", \"trace\": [{ \"action\": { ... }, \"result\": { \"gasUsed\": \"0x0\", \"output\": \"0x\" } \"subtraces\": 0, \"traceAddress\": [], \"type\": \"call\" }], \"vmTrace\": null }, \"id\" : 1 },","s":"trace_rawTransaction","u":"/public-networks/reference/api","h":"#trace_rawtransaction","p":2329},{"i":2538,"t":"Provides transaction processing tracing per block. note When using Bonsai, the requested block must be within the number of blocks retained (by default, 512 from the head of the chain). Parameters​ blockNumber: string - hexadecimal or decimal integer representing a block number, or one of the string tags latest, earliest, pending, finalized, or safe, as described in block parameter note pending returns the same value as latest. options: array of strings - list of tracing options; tracing options are trace, vmTrace, and stateDiff. Specify any combination of the three options including none of them. Returns​ result: array of objects - list of transaction trace objects containing one object per transaction, in transaction execution order; if revert reason is enabled with --revert-reason-enabled, the trace list items in the returned transaction trace object include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"trace_replayBlockTransactions\",\"params\": [\"0x12\",[\"trace\",\"vmTrace\",\"stateDiff\"]],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_replayBlockTransactions\", \"params\": [\"0x12\", [\"trace\", \"vmTrace\", \"stateDiff\"]], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\":[ { \"output\":\"0x\", \"vmTrace\":{ \"code\":\"0x7f3940be4289e4c3587d88c1856cc95352461992db0a584c281226faefe560b3016000527f14c4d2c102bdeb2354bfc3dc96a95e4512cf3a8461e0560e2272dbf884ef3905601052600851\", \"ops\":[ { \"cost\":3, \"ex\":{ \"mem\":null, \"push\":[ \"0x8\" ], \"store\":null, \"used\":16756175 }, \"pc\":72, \"sub\":null }, ... ] }, \"trace\":[ { \"action\":{ \"callType\":\"call\", \"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\":\"0xffadea\", \"input\":\"0x\", \"to\":\"0x0100000000000000000000000000000000000000\", \"value\":\"0x0\" }, \"result\":{ \"gasUsed\":\"0x1e\", \"output\":\"0x\" }, \"subtraces\":0, \"traceAddress\":[ ], \"type\":\"call\" } ], \"stateDiff\":{ \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\":{ \"balance\":{ \"*\":{ \"from\":\"0xffffffffffffffffffffffffffffffffc3e12a20b\", \"to\":\"0xffffffffffffffffffffffffffffffffc3dc5f091\" } }, \"code\":\"=\", \"nonce\":{ \"*\":{ \"from\":\"0x14\", \"to\":\"0x15\" } }, \"storage\":{ } } }, \"transactionHash\":\"0x2a5079cc535c429f668f13a7fb9a28bdba6831b5462bd04f781777b332a8fcbd\", }, {...} ] }","s":"trace_replayBlockTransactions","u":"/public-networks/reference/api","h":"#trace_replayblocktransactions","p":2329},{"i":2540,"t":"Provides transaction processing of type trace for the specified transaction. note Your node must be an archive node, or the requested transaction must be contained in a block within the number of blocks retained when using Bonsai (by default, 512 from the head of the chain). Parameters​ transaction: string - transaction hash Returns​ result: array of objects - list of calls to other contracts containing one object per call, in the order called by the transaction; if revert reason is enabled with --revert-reason-enabled, the returned list items include the revert reason. curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\": \"2.0\", \"method\": \"trace_transaction\",\"params\": [\"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\"],\"id\": 1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"trace_transaction\", \"params\": [ \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\" ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"result\": [ { \"action\": { \"creationMethod\": \"create\", \"from\": \"0x627306090abab3a6e1400e9345bc60c78a8bef57\", \"gas\": \"0xff2e26\", \"init\": \"0x60006000600060006000732c2b9c9a4a25e24b174f26114e8926a9f2128fe45af2600060006000600060007300a00000000000000000000000000000000000005af2\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"code\": \"0x\", \"gasUsed\": \"0x1c39\" }, \"subtraces\": 2, \"traceAddress\": [], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"create\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb2ea9\", \"input\": \"0x\", \"to\": \"0x2c2b9c9a4a25e24b174f26114e8926a9f2128fe4\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x138e\", \"output\": \"0x\" }, \"subtraces\": 1, \"traceAddress\": [0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" }, { \"action\": { \"address\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"balance\": \"0x0\", \"refundAddress\": \"0x0000000000000000000000000000000000000000\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": null, \"subtraces\": 0, \"traceAddress\": [0, 0], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"suicide\" }, { \"action\": { \"callType\": \"callcode\", \"from\": \"0x30753e4a8aad7f8597332e813735def5dd395028\", \"gas\": \"0xfb18a5\", \"input\": \"0x\", \"to\": \"0x00a0000000000000000000000000000000000000\", \"value\": \"0x0\" }, \"blockHash\": \"0x7e9a993adc6f043c0a9b6a385e6ed3fa370586c55823251b8fa7033cf89d414e\", \"blockNumber\": 19, \"result\": { \"gasUsed\": \"0x30b\", \"output\": \"0x\" }, \"subtraces\": 0, \"traceAddress\": [1], \"transactionHash\": \"0x4c253746668dca6ac3f7b9bc18248b558a95b5fc881d140872c2dff984d344a7\", \"transactionPosition\": 3, \"type\": \"call\" } ], \"id\": 1 }","s":"trace_transaction","u":"/public-networks/reference/api","h":"#trace_transaction","p":2329},{"i":2542,"t":"The TXPOOL API methods allow you to inspect the contents of the transaction pool. note The TXPOOL API methods are not enabled by default for JSON-RPC. To enable the TXPOOL API methods, use the --rpc-http-api or --rpc-ws-api options.","s":"TXPOOL methods","u":"/public-networks/reference/api","h":"#txpool-methods","p":2329},{"i":2544,"t":"Lists pending transactions that match the supplied filter conditions. Parameters​ numResults: number - integer representing the maximum number of results to return fields: object - object of fields used to create the filter condition Each field in the object corresponds to a field name containing an operator, and a value for the operator. A field name can only be specified once, and can only contain one operator. For example, you cannot query transactions with a gas price between 8 and 9 Gwei by using both the gt and lt operator in the same field name instance. All filters must be satisfied for a transaction to be returned. Field name Value Value type Supported operators from Address of the sender. Data, 20 bytes eq to Address of the receiver, or \"contract_creation\". Data, 20 bytes eq, action gas Gas provided by the sender. Quantity eq, gt, lt gasPrice Gas price, in wei, provided by the sender. Quantity eq, gt, lt value Value transferred, in wei. Quantity eq, gt, lt nonce Number of transactions made by the sender. Quantity eq, gt, lt Supported operators: eq (equal to) lt (less than) gt (greater than) action note The only supported action is \"contract_creation\". Returns​ result: array of objects - list of objects with details of the pending transaction curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuPendingTransactions\",\"params\":[2,{\"from\":{\"eq\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"},\"gas\":{\"lt\":\"0x5209\"},\"nonce\":{\"gt\":\"0x1\"}}],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"txpool_besuPendingTransactions\", \"params\": [ 2, { \"from\": { \"eq\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\" }, \"gas\": { \"lt\": \"0x5209\" }, \"nonce\": { \"gt\": \"0x1\" } } ], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"from\": \"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\", \"gas\": \"0x5208\", \"gasPrice\": \"0xab5d04c00\", \"hash\": \"0xb7b2f4306c1c228ec94043da73b582594007091a7dfe024b1f8d6d772284e54b\", \"input\": \"0x\", \"nonce\": \"0x2\", \"to\": \"0xf8be4ebda7f62d79a665294ec1263bfdb59aabf2\", \"value\": \"0x0\", \"v\": \"0xfe8\", \"r\": \"0x5beb711e652c6cf0a589d3cea904eefc4f45ce4372652288701d08cc4412086d\", \"s\": \"0x3af14a56e63aa5fb7dcb444a89708363a9d2c1eba1f777c67690288415080ded\" } ] }","s":"txpool_besuPendingTransactions","u":"/public-networks/reference/api","h":"#txpool_besupendingtransactions","p":2329},{"i":2546,"t":"Lists statistics about the node transaction pool. Parameters​ None Returns​ result: object - transaction pool statistics object with the following fields: maxSize: number - maximum number of transactions kept in the transaction pool; use the --tx-pool-max-size option to configure the maximum size. localCount: number - number of transactions submitted directly to this node remoteCount: number - number of transactions received from remote nodes curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuStatistics\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuStatistics\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"maxSize\": 4096, \"localCount\": 1, \"remoteCount\": 0 } }","s":"txpool_besuStatistics","u":"/public-networks/reference/api","h":"#txpool_besustatistics","p":2329},{"i":2548,"t":"Lists transactions in the node transaction pool. Parameters​ None Returns​ result: array of objects - list of transactions curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"txpool_besuTransactions\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"txpool_besuTransactions\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": [ { \"hash\": \"0x8a66830098be4006a3f63a03b6e9b67aa721e04bd6b46d420b8f1937689fb4f1\", \"isReceivedFromLocalSource\": true, \"addedToPoolAt\": \"2019-03-21T01:35:50.911Z\" }, { \"hash\": \"0x41ee803c3987ceb5bcea0fad7a76a8106a2a6dd654409007d9931032ea54579b\", \"isReceivedFromLocalSource\": true, \"addedToPoolAt\": \"2019-03-21T01:36:00.374Z\" } ] }","s":"txpool_besuTransactions","u":"/public-networks/reference/api","h":"#txpool_besutransactions","p":2329},{"i":2550,"t":"The WEB3 API methods provide functionality for the Ethereum ecosystem.","s":"WEB3 methods","u":"/public-networks/reference/api","h":"#web3-methods","p":2329},{"i":2552,"t":"Returns the current client version. Parameters​ None Returns​ result: string - current client version curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"web3_clientVersion\", \"params\": [], \"id\": 1 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"besu/\" }","s":"web3_clientVersion","u":"/public-networks/reference/api","h":"#web3_clientversion","p":2329},{"i":2554,"t":"Returns a SHA3 hash of the specified data. The result value is a Keccak-256 hash, not the standardized SHA3-256. Parameters​ data: string - data to convert to a SHA3 hash Returns​ result: string - SHA3 result of the input data curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_sha3\",\"params\":[\"0x68656c6c6f20776f726c00\"],\"id\":53}' http://127.0.0.1:8545 { \"jsonrpc\": \"2.0\", \"method\": \"web3_sha3\", \"params\": [\"0x68656c6c6f20776f726c00\"], \"id\": 53 } { \"jsonrpc\": \"2.0\", \"id\": 53, \"result\": \"0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f\" }","s":"web3_sha3","u":"/public-networks/reference/api","h":"#web3_sha3","p":2329},{"i":2557,"t":"Lists enabled APIs and the version of each. Parameters​ None Returns​ result: map of strings to strings - enabled APIs and their versions curl HTTP request wscat WS request JSON result curl -X POST --data '{\"jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 {\"jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1} { \"jsonrpc\": \"2.0\", \"id\": 1, \"result\": { \"web3\": \"1.0\", \"eth\": \"1.0\", \"net\": \"1.0\" } }","s":"rpc_modules","u":"/public-networks/reference/api","h":"#rpc_modules","p":2329}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,0.839,1,5.365,2,4.199,3,3.533,4,4.108,5,4.198,6,1.485,7,1.318,8,2.651,9,2.898,10,5.661,11,3.929,12,4.429,13,2.483,14,2.951,15,2.702,16,3.872,17,4.627,18,3.842,19,4.271,20,5.343,21,3.408,22,4.627,23,1.752,24,4.429,25,4.627,26,4.77,27,4.028,28,3.408,29,3.842,30,2.324,31,3.237,32,4.429,33,3.361,34,3.842,35,3.626,36,1.242,37,2.454,38,2.978,39,4.537,40,1.93,41,4.14,42,4.661,43,4.37,44,4.14,45,4.833,46,4.429,47,5.117,48,2.036,49,3.842,50,4.14,51,6.1,52,5.789,53,2.312,54,4.028,55,4.271]],["t/4",[6,1.521,7,1.99,12,5.896,15,4.079,40,1.354,56,1.538,57,2.22,58,2.598,59,3.083,60,9.65,61,5.262,62,3.865,63,5.383,64,1.322,65,2.872,66,4.203,67,6.251,68,2.715,69,5.8,70,6.251,71,4.725,72,7.138,73,4.539,74,3.491,75,6.139,76,4.831,77,1.396]],["t/6",[0,0.893,3,3.666,4,3.155,6,2.388,8,2.824,16,3.53,56,1.423,74,4.197,78,5.075,79,6.023,80,4.205,81,2.331,82,4.251,83,3.172,84,1.524,85,3.044,86,2.354,87,3.965,88,5.411,89,2.986,90,2.579,91,1.793,92,5.565,93,4.078,94,2.853,95,3.397,96,3.172,97,1.766,98,3.604,99,1.889,100,3.711,101,4.871,102,2.724,103,3.74,104,2.301,105,2.541,106,2.816,107,2.006,108,3.683,109,5.739,110,2.891,111,3.189]],["t/8",[6,2.229,7,2.411,8,3.038,56,1.865,82,5.789,112,7.029,113,7.815,114,5.5,115,7.369,116,8.949,117,8.104,118,8.104,119,8.104]],["t/11",[2,3.283,6,2.323,7,2.403,56,1.06,81,2.346,90,3.501,105,3.449,106,4.979,120,1.687,121,1.899,122,3.624,123,1.35,124,3.388,125,3.889,126,5.776,127,7.24,128,4.377,129,4.188,130,4.104,131,3.628,132,6.256,133,2.426,134,10.091,135,10.919,136,5.989,137,3.707,138,4.104,139,6.214,140,3.578,141,3.507]],["t/13",[0,0.872,106,4.207,121,1.653,124,3.728,131,5.383,142,6.349,143,6.091]],["t/15",[0,0.824,2,4.349,21,6.463,81,3.291,83,4.477,106,3.976,126,8.101,138,5.757,142,6.001,144,10.038,145,10.038]],["t/17",[74,4.778,106,4.332,123,2.064,146,7.043]],["t/19",[0,0.836,6,2.165,33,4.932,64,1.284,74,5.274,77,1.356,81,2.546,100,4.053,106,4.965,114,4.41,121,2.041,124,2.726,126,6.267,127,5.148,128,4.749,142,4.642,147,2.354,148,1.455,149,5.764,150,6.755,151,4.369,152,4.932,153,4.218,154,6.267,155,6.788,156,5.636,157,1.582,158,4.807]],["t/21",[2,2.328,6,2.031,7,1.704,64,1.548,74,2.99,81,2.244,84,1.467,90,2.483,100,3.572,106,5.03,112,4.968,120,1.613,121,1.065,123,1.291,126,5.524,127,7.607,133,2.32,146,7.736,148,1.283,154,5.524,155,5.983,156,4.968,157,1.907,159,4.005,160,4.745,161,3.121,162,3.421,163,4.494,164,4.005,165,4.092,166,2.051,167,3.687,168,2.975,169,2.654,170,5.002,171,2.54,172,6.845,173,4.407,174,2.611,175,5.354]],["t/23",[6,2.363,7,2.081,8,2.168,9,2.37,23,2.767,77,1.459,84,2.66,90,3.031,91,2.694,103,5.619,121,1.301,176,6.459,177,6.993,178,3.543,179,6.359,180,5.38,181,3.392,182,4.094,183,5.173,184,2.987,185,3.831,186,2.549,187,4.659,188,2.833,189,2.785]],["t/25",[0,0.859,2,3.842,14,3.678,71,3.901,84,1.414,93,3.784,100,3.443,106,4.98,111,2.959,120,1.555,121,1.995,126,7.367,127,6.053,141,3.233,146,7.898,153,3.584,157,2.132,160,4.627,161,3.043,162,3.298,190,2.853,191,6.598,192,4.602,193,4.072,194,3.86,195,4.035,196,3.171,197,3.908,198,3.712,199,3.678,200,2.811,201,3.901,202,3.254,203,4.309,204,3.554,205,6.097,206,2.758,207,1.725,208,4.248]],["t/27",[0,0.749,3,3.48,56,1.351,66,4.797,79,5.717,106,4.471,107,2.573,123,1.721,147,2.765,161,3.763,209,4.09,210,6.259,211,5.578,212,4.833,213,4.158,214,7.632,215,3.145,216,3.725,217,5.578]],["t/29",[0,0.815,2,4.161,6,1.89,9,3.07,37,1.586,77,1.045,84,2.128,86,1.982,104,1.937,105,3.868,106,4.53,114,3.4,121,1.851,123,1.129,124,2.101,141,2.933,148,1.598,163,3.189,169,2.321,181,1.9,188,2.029,192,4.175,193,4.827,216,2.445,218,3.705,219,3.279,220,4.682,221,5.232,222,4.175,223,4.93,224,4.842,225,2.525,226,2.951,227,1.733,228,3.578,229,2.412,230,4.345,231,1.656,232,2.792,233,3.752,234,3.251,235,1.9,236,3.539,237,3.279,238,2.588,239,2.514,240,4.256,241,3.337,242,2.321]],["t/31",[2,2.779,6,1.555,86,3.487,90,2.963,106,4.171,121,2.03,125,4.696,127,7.727,160,4.141,161,2.723,170,4.365,193,3.644,204,6.277,220,6.39,243,5.467,244,5.698,245,4.112,246,6.39,247,6.593,248,4.884,249,6.593,250,8.17,251,3.322]],["t/33",[23,3.124,56,1.397,59,2.802,86,3.124,102,3.614,106,4.93,210,4.816,234,5.124,252,4.507,253,7.004,254,6.848,255,6.074,256,6.61,257,6.074,258,4.452,259,8.247,260,4.325]],["t/35",[0,0.847,86,3.417,106,4.088,121,1.607,124,3.623,131,5.232,136,8.637,142,6.17,143,5.919,261,6.389]],["t/37",[0,0.956,64,1.588,84,2.057,89,4.031,106,3.802,121,1.813,139,6.18,184,3.431,217,5.871,234,6.327,262,6.18,263,8.033,264,8.033,265,4.172,266,8.033]],["t/39",[15,3.494,23,2.266,40,2.339,83,4.176,106,4.226,107,1.931,120,1.613,121,1.065,141,4.587,179,5.208,181,3.643,210,3.494,234,3.718,256,3.925,259,8.184,267,5.208,268,6.325,269,4.866,270,6.845,271,5.983,272,3.79,273,6.379,274,9.862,275,6.845,276,6.325,277,6.845,278,6.845,279,6.845,280,8.184,281,2.325,282,3.601,283,6.845,284,3.29]],["t/41",[0,0.731,6,1.212,7,1.586,13,2.987,14,3.55,23,2.108,30,2.796,43,3.005,56,1.521,59,3.477,62,3.08,64,1.473,80,5.267,84,1.365,99,1.692,106,2.522,122,2.391,124,2.235,137,3.299,157,1.297,160,3.228,161,2.122,174,2.429,178,2.7,181,2.022,187,3.55,188,2.159,206,2.662,210,4.547,251,2.589,255,6.613,256,7.403,257,4.1,258,4.203,285,3.55,286,2.7,287,3.583,288,1.826,289,5.885,290,3.617,291,3.344,292,3.519,293,6.368,294,4.622,295,4.846,296,3.807,297,5.139,298,2.533,299,1.639,300,2.637,301,6.368,302,5.885]],["t/43",[0,0.584,7,1.771,39,3.484,40,1.204,56,1.858,99,1.889,107,3.07,114,4.039,122,2.67,124,2.496,133,2.41,147,2.156,187,5.357,196,3.418,207,1.859,209,3.189,217,4.349,256,7.664,267,8.281,284,4.619,298,3.822,303,7.111,304,4.244,305,4.715,306,5.056,307,4.79,308,8.041,309,5.056,310,4.715,311,3.965,312,2.589,313,4.001,314,6.216]],["t/45",[0,0.731,3,2.429,4,2.825,6,1.695,56,0.943,64,1.053,84,1.365,92,5.159,93,3.652,94,4.463,95,4.907,96,4.581,97,2.551,98,5.206,100,4.648,101,4.363,106,2.522,114,3.617,121,1.731,130,3.652,131,3.228,141,3.12,147,1.931,150,4.222,155,5.567,157,1.297,167,3.43,174,2.429,185,4.083,186,3.133,207,1.665,286,2.7,315,7.816,316,5.762,317,4.981,318,2.919,319,5.885,320,4.29,321,2.522,322,4.846,323,4.363,324,4.622,325,2.754,326,5.583,327,6.368,328,2.767,329,3.617,330,5.567,331,3.141]],["t/47",[95,4.752,96,4.437,97,2.471,98,5.042,156,7.22,165,5.946,166,2.98,186,3.034,332,6.013,333,6.938,334,8.324,335,4.723,336,7.385,337,6.595]],["t/49",[0,0.761,71,6.745,90,4.138,95,4.43,96,4.137,97,2.303,98,5.781,104,3.001,141,4.544,156,8.28,157,1.889,186,2.829,335,5.416,338,6.058,339,8.108,340,7.058,341,5.171]],["t/51",[81,2.698,94,3.303,95,3.932,96,3.671,97,2.044,98,4.172,121,1.281,125,3.317,165,4.92,178,3.49,186,3.765,194,6.192,229,3.317,240,5.852,258,3.884,262,5.299,342,7.523,343,7.523,344,7.249,345,4.976,346,4.964,347,5.974,348,7.195,349,5.747,350,5.974,351,5.299,352,6.643,353,5.852]],["t/53",[0,0.551,5,3.046,6,2.167,64,1.111,81,2.203,95,5.438,96,5.077,97,2.827,98,4.685,99,1.785,121,1.046,133,2.278,157,1.883,158,4.159,186,3.855,209,3.013,218,4.159,291,2.523,294,4.877,314,5.873,323,4.603,335,3.19,343,4.777,344,7.799,345,5.588,346,4.337,349,3.649,354,2.95,355,6.209,356,4.686,357,4.389,358,5.873,359,9.244,360,6.209,361,6.719,362,4.109,363,6.719,364,2.436,365,2.672]],["t/55",[6,1.722,71,5.349,94,3.629,95,4.321,96,4.034,97,2.247,98,5.693,140,4.521,157,2.288,166,3.365,171,3.357,174,3.451,186,3.426,320,6.093,321,3.582,351,5.824,366,8.359,367,7.123]],["t/57",[0,0.887,2,2.388,6,1.336,7,1.748,9,2.702,21,4.52,61,3.558,86,2.324,93,6.2,102,3.649,103,3.692,104,2.272,106,3.772,121,1.805,122,2.636,124,2.464,130,4.026,157,1.94,163,2.625,181,3.024,186,2.141,190,3.035,201,4.151,227,1.427,237,3.845,238,3.035,258,3.313,318,3.218,368,4.066,369,6.772,370,5.491,371,4.244,372,4.52,373,4.729,374,5.41,375,2.976,376,4.4,377,3.781,378,3.664,379,4.637,380,4.196,381,4.991,382,5.874,383,5.095,384,5.491]],["t/59",[0,0.852,6,1.976,42,4.022,56,1.184,65,2.211,86,4.042,93,7,121,1.969,122,3.001,130,4.583,131,4.05,148,1.498,216,3.264,225,2.366,226,2.766,227,1.624,237,4.378,238,3.455,318,3.663,374,4.539,377,5.592,378,5.418,385,3.705,386,6.081,387,4.109,388,7.385,389,4.725]],["t/61",[0,0.964,6,2.092,8,2.526,56,1.074,93,6.304,94,2.91,95,3.464,99,1.927,102,2.778,104,2.347,106,3.856,121,1.129,130,4.159,148,1.359,157,2.57,171,2.691,186,3.353,209,3.252,216,2.962,223,3.6,225,2.147,226,2.51,227,1.474,234,3.939,237,3.973,316,3.756,374,5.53,379,5.966,390,2.681,391,4.335,392,7.252,393,6.702,394,1.815,395,4.2]],["t/63",[0,0.825,5,3.447,6,1.447,8,2.92,13,3.567,31,4.65,56,1.488,64,1.257,68,1.988,81,2.493,84,2.668,94,3.051,96,3.391,97,1.888,102,3.849,105,2.718,124,2.669,131,5.705,182,3.725,195,4.65,300,3.148,318,3.486,331,3.75,335,3.61,350,5.519,364,2.004,365,3.024,396,4.404,397,5.786,398,2.384,399,4.65,400,3.546,401,6.363,402,3.801,403,4.597,404,4.65,405,5.122]],["t/65",[0,0.867,6,1.279,8,3.097,56,1.768,73,3.816,81,2.203,84,2.643,105,3.304,120,1.584,121,2.004,122,2.523,129,3.931,131,5.357,133,2.278,141,3.292,143,3.853,147,2.803,229,2.708,291,2.523,375,3.919,385,3.115,400,5.894,406,2.808,407,5.654,408,3.931,409,5.256,410,6.333,411,1.446,412,4.016,413,4.455,414,2.133,415,5.113]],["t/67",[0,0.705,1,3.812,3,2.309,4,2.685,5,3.895,6,2.271,8,2.592,16,3.005,68,1.582,78,2.822,81,2.817,83,2.699,84,1.297,87,3.374,105,3.887,114,3.437,120,2.564,121,1.337,130,4.928,151,3.405,160,3.067,161,3.625,168,2.63,178,2.566,181,1.921,183,3.746,209,2.714,237,4.707,346,4.031,364,2.265,399,3.701,405,4.077,416,4.605,417,5.064,418,3.953,419,5.593,420,3.991,421,5.29,422,5.593,423,3.541,424,3.117,425,6.052,426,6.052,427,4.393,428,4.303,429,6.052,430,3.658,431,5.29,432,4.077,433,4.493,434,6.052,435,5.593,436,3.844,437,4.734,438,5.593,439,5.29,440,5.064]],["t/69",[0,1.046,5,4.067,6,1.708,8,2.899,71,6.608,84,2.394,94,4.484,98,4.547,103,4.718,124,3.149,341,6.23,364,2.364,371,5.423,399,6.834,441,8.291,442,6.512,443,6.378]],["t/71",[0,0.908,5,2.854,6,1.198,90,2.283,99,2.347,103,3.311,105,4.714,120,1.484,124,2.21,143,3.61,146,4.053,160,4.478,161,2.945,169,2.441,174,2.402,190,3.82,195,3.85,210,3.213,213,2.87,229,2.537,258,2.971,286,2.669,318,2.886,325,5.801,328,2.736,365,2.504,371,3.805,372,4.053,418,4.111,428,4.475,444,8.821,445,4.312,446,7.393,447,4.478,448,3.763,449,2.607,450,5.817,451,4.924,452,3.683]],["t/73",[0,0.734,8,2.32,9,2.537,15,3.27,56,1.324,84,2.208,89,2.69,99,2.376,105,4.344,131,4.533,141,3.138,161,3.91,174,3.412,189,2.135,206,3.738,209,2.872,213,4.077,223,5.116,236,3.787,325,5.59,326,4.015,328,3.887,375,4.728,411,1.379,414,2.839,418,4.183,444,4.388,448,5.346,453,6.805,454,5.169,455,4.874,456,3.673,457,4.183,458,5.169,459,9.007,460,3.673]],["t/75",[0,0.58,6,1.345,56,1.417,91,3.285,99,2.882,105,4.719,110,4.41,131,3.581,209,3.168,216,3.907,286,4.056,325,5.772,365,2.81,408,5.598,444,4.84,461,4.549,462,1.877,463,4.092,464,3.168,465,4.052,466,7.873,467,7.065,468,4.84,469,5.376,470,7.065]],["t/77",[0,0.833,7,0.982,8,2.275,23,1.305,56,0.922,57,0.759,59,1.171,65,1.091,84,1.879,99,1.654,104,2.498,105,4.472,120,0.929,122,2.338,124,3.98,140,3.113,147,1.195,157,2.412,188,2.616,196,1.895,207,1.628,217,2.411,224,2.239,235,1.252,253,2.927,258,2.939,260,1.807,264,3.299,281,0.979,286,2.64,288,1.697,291,1.48,305,2.614,323,2.701,325,5.463,328,5.539,349,2.141,354,4.192,407,3.809,412,4.614,413,5.118,414,1.252,418,5.727,428,2.803,444,5.288,471,6.725,472,2.75,473,2.575,474,2.073,475,2.357,476,4.067,477,2.179,478,3,479,1.957,480,2.614,481,3.942,482,2.261,483,3.299,484,3.643,485,4.623,486,2.656,487,2.803,488,3.25,489,3.942,490,2.331,491,2.862,492,0.987]],["t/79",[0,0.884,6,0.979,8,1.335,16,3.791,56,1.776,57,1.47,58,1.287,59,1.528,65,2.112,66,2.705,99,1.367,104,1.665,105,2.729,106,2.037,121,1.817,122,3.419,123,0.97,124,4.099,130,2.95,131,4.616,147,2.761,148,1.888,159,3.01,186,1.569,215,2.633,216,2.101,229,2.073,241,2.868,251,2.092,288,1.913,318,2.358,346,3.582,377,2.771,400,5.26,411,1.107,412,6.98,413,6.681,414,1.633,430,3.11,459,4.497,472,3.588,473,3.36,474,4.016,493,8.712,494,3.955,495,5.144,496,1.087,497,2.607,498,3.524,499,2.488,500,3.819]],["t/81",[8,2.833,56,1.06,84,1.534,91,2.434,103,3.764,105,4.592,111,3.209,121,1.502,124,2.512,141,3.507,147,2.926,163,2.677,180,4.608,181,2.272,190,3.095,206,4.885,209,3.209,235,2.272,236,4.232,288,1.272,307,4.821,325,5.724,371,4.327,400,4.501,428,5.089,444,4.903,445,4.903,446,5.989,466,5.195,501,5.481,502,5.989,503,6.256,504,3.263]],["t/83",[3,2.842,8,3.081,56,1.65,79,4.669,84,2.545,99,1.979,104,3.208,105,4.545,112,5.407,121,1.734,141,3.649,147,2.258,184,3.543,190,3.221,207,1.948,214,6.233,257,4.796,325,4.286,357,3.536,400,5.196,406,3.113,407,4.556,505,4.611,506,4.731,507,6.136,508,4.272,509,3.887,510,7.449,511,6.233,512,4.405]],["t/85",[8,2.347,89,3.798,104,2.927,105,4.366,124,3.942,161,4.463,162,5.614,181,3.878,206,3.781,325,5.282,414,2.872,513,5.599]],["t/87",[0,0.407,8,3.078,23,1.642,42,4.98,84,2.542,89,2.082,91,1.25,99,1.974,104,2.404,105,4.123,112,3.599,120,1.169,121,0.772,123,2,141,2.429,161,3.298,175,3.878,206,3.105,212,2.123,215,1.71,218,4.599,295,5.653,318,4.536,325,4.811,357,4.23,400,2.312,406,4.136,466,3.599,505,4.599,506,6.731,512,2.932,514,4.958,515,6.824,516,3.525,517,7.622,518,9.313,519,7.377,520,3.773,521,7.035,522,4.582,523,4.441,524,4.783,525,4.958]],["t/89",[0,0.846,8,3.153,56,1.324,64,1.059,84,2.604,91,2.598,99,2.737,105,4.68,123,1.687,141,3.138,257,5.758,318,4.1,325,5.59,406,4.661,414,2.034,507,5.536,512,3.787,517,7.059,518,9.022,519,6.832,521,6.358,526,5.01,527,5.406]],["t/91",[0,0.761,23,3.071,56,1.374,57,1.785,105,4.077,122,3.482,124,3.255,147,2.812,196,4.458,258,4.377,288,1.648,325,4.932,407,5.672,412,5.544,413,6.149,471,6.607,472,6.469,473,6.058,474,4.878]],["t/93",[0,0.463,3,2.154,6,1.83,7,2.036,8,3.195,9,2.319,56,0.836,81,1.851,83,2.519,84,2.882,99,1.5,105,3.435,120,1.331,121,1.496,130,3.238,131,4.144,133,1.914,141,2.767,142,6.298,161,1.882,162,2.823,181,3.052,190,2.442,199,3.148,216,2.306,224,3.207,237,3.093,251,3.325,261,3.496,325,2.442,385,4.457,399,3.454,400,3.813,405,3.804,406,2.36,414,1.793,419,5.218,420,2.256,421,4.936,422,5.218,423,3.304,424,2.966,427,4.099,428,4.015,462,1.5,476,3.688,506,3.586,507,3.496,508,3.238,515,3.636,528,3.804,529,8.177,530,5.061,531,3.148,532,3.688]],["t/95",[8,2.842,9,3.469,37,1.909,56,1.735,84,2.62,121,2.037,123,1.359,181,3.478,199,4.017,211,4.406,223,3.577,236,4.26,251,2.929,317,5.635,385,3.34,400,5.703,406,4.052,428,5.122,462,1.914,506,4.575,507,4.46,509,3.76,515,4.638,533,6.029,534,4.173,535,4.092,536,4.131,537,2.115,538,4.46]],["t/97",[2,2.842,8,2.772,84,2.858,85,3.578,104,2.704,105,2.987,111,3.747,129,4.89,131,4.235,147,2.534,166,2.504,181,3.74,199,4.659,224,4.746,357,3.967,397,8.131,476,7.693,512,4.941,539,5.756,540,5.629]],["t/99",[2,4.14,8,2.899,56,1.329,84,1.922,89,3.767,105,4.553,147,2.72,206,3.75,212,3.841,325,5.508,402,4.484,445,6.146,522,8.291,539,5.643,541,8.971]],["t/101",[0,0.723,2,2.998,7,1.213,8,3.354,9,1.381,36,1.142,63,3.281,73,2.766,77,0.85,84,2.893,85,3.138,99,1.294,104,1.576,105,2.62,129,4.289,131,3.715,133,1.651,140,2.434,157,1.795,175,3.809,181,2.798,185,4.04,186,2.991,197,2.085,212,2.085,219,6.282,223,2.418,224,2.766,235,1.546,298,3.506,321,1.929,325,2.106,341,2.715,349,3.981,353,6.266,375,2.065,476,7.707,487,3.462,539,5.793,542,5.915,543,3.93,544,4.075,545,3.809,546,1.257,547,1.881,548,2.312,549,2.715,550,4.787,551,1.98]],["t/103",[0,0.805,2,2.493,8,2.975,23,1.612,34,3.535,56,1.305,64,1.212,66,3.855,84,2.743,85,3.138,104,2.372,105,1.741,123,0.919,131,2.468,137,2.523,147,2.222,157,1.493,168,2.116,173,3.135,181,1.546,185,3.36,207,1.273,219,2.668,228,2.911,229,1.963,237,2.668,242,1.889,244,3.397,260,2.232,265,2.116,312,3.571,318,2.232,321,1.929,325,2.106,365,1.937,375,3.737,376,3.053,396,2.821,406,4.099,414,1.546,461,3.135,463,2.821,464,2.184,465,2.793,476,4.787,478,3.706,512,2.88,538,3.015,539,5.598,543,3.93,550,3.181,552,3.93,553,4.87,554,4.075,555,4.87,556,3.535,557,3.181,558,4.719,559,3.462,560,3.015,561,4.5,562,4.406,563,3.809,564,4.5,565,2.645,566,2.715,567,4.5,568,4.5,569,4.87,570,3.93,571,3.809,572,2.715,573,3.397,574,4.5,575,4.075,576,4.075,577,3.535,578,3.706]],["t/105",[8,2.841,23,2.876,56,1.622,81,2.848,84,2.347,103,4.569,105,3.105,124,3.049,137,4.5,169,3.369,195,5.313,210,4.435,252,4.15,255,5.593,256,7.221,257,5.593,258,4.1,318,3.982,371,5.252,372,5.593,516,6.176,573,6.059,579,7.594,580,8.028]],["t/107",[56,1.434,104,3.134,105,3.461,107,2.731,120,2.761,141,4.745,210,4.943,225,2.867,226,3.351,227,1.968,256,7.22,267,7.369,581,9.684,582,8.949]],["t/109",[0,0.691,8,3.23,56,1.247,84,2.668,105,3.837,129,4.927,164,4.927,182,4.126,224,4.783,242,4.164,252,4.022,256,4.829,317,8.399,409,6.587,415,6.408,476,7.013,477,4.653,516,5.987,530,7.318,532,5.5,549,4.695,583,7.047]],["t/111",[0,0.859,3,2.517,7,1.643,8,3.325,57,1.27,58,1.651,64,1.51,84,2.851,99,1.753,105,3.263,136,5.521,146,4.248,161,2.199,181,2.095,190,3.947,217,4.035,219,3.614,223,3.276,242,2.559,256,6.003,262,4.248,263,5.521,281,1.639,288,1.173,375,3.871,376,4.136,400,3.077,406,2.758,408,3.86,409,5.161,414,2.095,476,6.837,527,3.988,530,5.651,538,4.084,545,5.161,584,6.598,585,3.368,586,4.789,587,3.368,588,5.021,589,6.097]],["t/113",[0,0.703,4,3.797,8,3.179,84,2.802,85,3.665,91,1.518,105,4.257,121,1.332,123,1.879,161,3.82,162,4.278,181,2.717,206,4.163,207,1.574,235,2.717,256,3.451,298,2.394,325,2.603,375,4.223,376,3.773,385,2.791,406,2.516,408,5.008,414,1.911,476,7.78,478,4.58,501,5.657,513,3.726,548,2.858,586,8.32,590,5.562,591,7.163,592,4.857,593,3.822,594,2.84]],["t/115",[0,0.646,9,2.917,13,3.695,56,1.167,64,1.303,84,1.688,89,4.319,102,3.017,122,2.957,168,3.423,185,3.611,210,4.021,219,4.315,222,5.494,223,5.685,242,3.054,252,3.763,256,5.898,260,3.611,267,5.994,291,2.957,312,2.868,325,3.406,430,4.762,476,7.929,528,5.306,588,5.994,595,8.299,596,4.562,597,5.144,598,5.994,599,6.161,600,7.877,601,7.877]],["t/117",[0,0.674,8,2.129,40,2.303,56,0.841,64,0.939,83,3.661,84,2.263,105,2.029,107,1.601,120,1.338,141,4.021,171,2.106,179,4.319,181,3.708,210,2.897,224,4.661,256,3.255,268,5.245,269,4.036,271,4.962,272,3.322,273,6.698,274,8.909,280,7.174,281,2.038,284,2.728,312,2.067,335,2.695,530,5.08,535,3.224,537,1.666,582,5.245,588,4.319,602,7.584,603,5.676,604,5.676,605,5.676,606,5.676,607,5.676,608,2.329,609,5.676,610,5.676,611,5.676,612,5.676,613,5.676,614,4.962,615,5.676,616,5.676,617,5.676,618,5.676,619,5.676,620,8.207,621,5.676,622,2.21,623,5.676]],["t/119",[0,0.764,3,2.779,4,2.143,6,0.919,7,1.202,8,3.235,9,2.066,13,1.353,14,1.609,31,1.764,37,0.764,56,0.922,57,0.555,58,0.722,64,0.477,67,2.257,68,0.754,73,1.639,84,2.855,85,2.667,91,1.571,94,1.158,96,1.287,97,0.717,99,0.766,102,1.85,104,1.563,105,3.848,112,2.094,121,1.365,123,1.757,129,2.826,131,1.462,142,2.887,157,0.588,160,1.462,161,3.255,162,2.414,175,2.257,181,2.313,190,2.693,199,1.609,206,2.603,207,0.754,212,1.235,219,1.58,222,2.012,223,3.092,224,1.639,225,0.854,226,0.998,229,1.163,235,1.533,236,1.706,262,1.858,263,2.414,281,0.717,298,1.921,300,1.195,325,3.15,335,1.37,365,1.921,376,3.027,385,1.338,390,2.303,397,2.195,398,0.905,399,1.764,400,4.733,401,2.414,402,1.442,403,1.744,404,1.764,406,1.206,407,1.764,408,3.645,410,3.309,414,1.533,415,3.675,447,1.462,453,2.195,461,1.858,462,0.766,476,7.34,480,1.913,501,3.538,504,1.315,506,3.067,507,2.99,508,2.77,513,1.786,515,1.858,530,1.786,538,2.99,548,1.37,586,6.759,587,1.473,589,7.493,591,6.785,592,3.897,593,1.832,594,1.362,624,1.944,625,1.623,626,2.522,627,2.522,628,1.744,629,2.257,630,1.506]],["t/121",[0,0.809,6,1.877,7,2.455,74,4.306,78,4.597,107,2.781,108,6.132,109,7.956,110,4.008,111,4.421,631,4.18,632,4.397,633,5.496,634,6.641]],["t/123",[0,0.927,14,6.294,56,1.672,62,4.412,78,4.254,212,3.905,213,5.146,255,5.872,291,3.425,628,5.514,631,3.867,632,4.068,633,5.085,634,6.144,635,4.09,636,7.632,637,5.717,638,7.36,639,7.973,640,6.248]],["t/127",[0,0.742,56,1.34,76,5.468,82,5.407,102,3.465,209,4.056,213,4.123,285,7.123,480,5.997,631,5.179,641,6.883,642,8.547,643,4.794,644,8.359,645,8.359,646,5.908,647,6.883,648,7.569,649,6.431]],["t/129",[0,0.865,56,1.904,68,1.746,207,2.407,213,4.802,225,3.119,226,3.186,286,2.831,318,3.061,389,3.949,448,7.36,596,5.332,597,4.362,631,5.22,641,8.016,643,3.54,647,9.063,650,8.507,651,5.389,652,9.735,653,5.838,654,7.005,655,5.838,656,3.658,657,6.171,658,3.597,659,5.082,660,2.74,661,5.838,662,3.884,663,4.037]],["t/132",[0,0.825,4,3.373,77,2.091,81,2.493,82,4.545,90,2.758,122,2.855,166,2.278,204,4.096,225,2.251,229,3.064,285,4.239,287,6.737,288,1.351,341,4.239,365,3.024,367,4.239,560,4.707,573,5.303,631,4.772,642,5.786,664,6.363,665,7.294,666,4.581,667,4.966,668,3.546,669,7.027,670,5.406,671,4.202,672,6.647,673,4.096,674,3.968,675,4.895,676,6.136,677,6.363,678,7.027,679,4.449]],["t/134",[56,1.843,75,6.816,77,1.648,169,3.659,225,2.793,226,3.265,304,3.435,372,6.074,596,6.676,631,4,634,6.355,662,3.981,663,5.703,680,7.38,681,8.718,682,8.718]],["t/136",[0,0.781,23,3.151,56,1.926,68,3.03,121,1.804,194,5.568,202,4.693,235,3.021,631,4.035,632,5.573,633,6.46]],["t/138",[68,2.751,209,4.717,562,5.258,632,5.487,633,5.865,643,5.576,665,7.636]],["t/140",[0,0.659,12,3.127,30,2.417,56,0.815,57,1.545,58,2.986,64,0.91,68,2.894,74,2.405,120,2.454,123,1.514,124,1.932,207,1.44,227,1.631,238,4.096,242,2.135,296,6.617,312,2.004,329,3.127,411,1.185,496,2.442,497,2.79,632,4.937,683,5.169,684,4.04,685,3.985,686,4.444,687,2.121,688,3.596,689,8.237,690,5.088,691,5.088,692,5.088,693,5.088,694,5.599,695,3.291,696,5.707,697,3.65,698,3.914,699,3.221,700,5.088,701,5.088,702,5.088,703,4.443,704,5.088]],["t/142",[7,1.257,9,1.432,37,1.995,40,0.855,56,1.479,68,2.611,86,2.982,102,2.885,120,1.775,121,1.172,122,2.828,123,0.953,125,3.63,139,4.849,164,4.407,184,2.692,195,3.088,200,3.209,206,2.11,217,3.088,225,1.495,226,1.747,227,1.026,231,2.492,235,1.603,288,1.601,346,2.369,364,1.331,378,2.635,411,2.15,445,3.459,447,3.817,449,3.73,478,3.842,492,1.885,630,2.635,632,5.321,633,4.199,671,4.977,689,5.073,694,3.522,703,4.075,705,6.538,706,5.384,707,6.96,708,4.666,709,2.507,710,4.075,711,2.986,712,2.035,713,4.362,714,3.401,715,2.276,716,3.748,717,1.432,718,4.225,719,6.302,720,4.414,721,4.414,722,6.96,723,3.59,724,10.725,725,4.075,726,6.078,727,3.59]],["t/144",[1,3.916,26,5.399,58,2.209,68,2.893,120,2.848,121,1.374,157,1.798,288,1.569,497,4.474,548,4.191,632,3.937,687,2.333,689,5.946,694,6.157,705,6.407,728,6.276,729,6.157,730,8.157,731,8.157,732,5.607,733,5.112,734,5.946,735,6.047,736,5.946]],["t/146",[68,2.794,121,1.663,151,4.702,202,4.121,235,4.288,284,5.662,632,5.537,660,4.833,706,6.387,737,5.38,738,6.536,739,5.458,740,7.204,741,9.34,742,6.536]],["t/148",[4,3.495,6,2.311,8,2.668,57,1.516,58,1.971,81,3.372,84,1.688,88,5.994,104,2.549,121,1.226,131,3.992,142,4.708,157,1.604,166,3.081,206,3.292,219,4.315,253,5.847,290,5.841,299,2.028,322,5.994,376,4.937,424,2.857,501,4.474,557,5.144,566,4.391,573,5.494,594,3.717,666,3.59,685,3.911,706,4.708,727,5.6,743,7.279,744,4.05,745,7.877,746,7.173]],["t/150",[0,0.809,23,3.264,56,1.46,81,3.881,196,4.738,290,5.599,747,6.439,748,5.599,749,5.829,750,6.029,751,5.547,752,6.347,753,6.536,754,6.179]],["t/152",[6,2.064,8,2.219,81,3.555,90,3.102,121,1.331,165,5.112,204,4.606,242,3.316,245,4.304,285,4.768,290,4.857,292,4.726,300,3.541,364,2.254,566,4.768,673,4.606,674,6.214,747,5.585,755,5.761,756,5.761,757,5.294,758,8.304,759,4.19,760,6.08,761,5.761,762,6.207]],["t/154",[0,0.708,7,1.515,12,3.456,30,2.672,39,2.982,74,2.658,77,1.75,99,2.897,103,3.2,120,1.434,157,1.239,180,7.02,184,2.175,189,2.028,200,2.593,216,2.485,227,1.237,231,2.772,239,2.555,242,3.345,304,3.141,354,2.672,365,3.986,375,2.58,398,1.908,454,6.962,519,4.035,562,4.312,592,4.911,674,3.176,744,3.129,749,5.101,756,7.345,760,7.125,763,7.752,764,2.686,765,8.627,766,5.092,767,8.627,768,6.085,769,5.624,770,5.624,771,6.085,772,6.085,773,6.085,774,3.638,775,3.918,776,3.278,777,3.2,778,6.085,779,4.244,780,6.085,781,4.911,782,3.176,783,4.911,784,6.085]],["t/156",[0,0.984,5,3.938,58,2.174,74,4.784,82,5.193,83,4.885,121,1.867,159,5.083,162,4.342,186,2.65,210,5.59,231,2.403,324,6.306,365,3.455,448,5.193,712,3.501,746,6.059,755,5.852,785,9.164,786,8.028,787,5.76,788,7.011]],["t/158",[0,1.047,6,1.835,7,1.413,8,1.473,13,2.663,23,1.879,56,0.841,57,1.856,58,2.643,59,2.437,65,1.57,77,0.991,78,2.647,82,3.393,84,1.216,86,1.879,103,4.316,121,0.883,123,1.071,124,1.992,125,3.307,148,2.257,163,2.123,176,4.961,180,3.655,181,2.606,182,4.021,183,3.514,188,1.924,208,3.655,215,1.957,227,1.153,232,2.647,285,5.375,375,4.087,408,3.321,465,3.255,492,1.42,496,1.734,499,2.745,548,2.695,625,3.194,631,2.407,640,3.889,656,3.109,674,2.962,683,2.238,685,2.818,687,2.169,713,3.288,758,5.724,789,4.819,790,4.319,791,4.12,792,3.707,793,3.356,794,5.245,795,3.959,796,3.959,797,4.581]],["t/160",[111,4.343,121,1.507,148,1.815,216,3.955,288,2.238,318,4.439,354,4.252,503,8.465,798,9.684,799,8.465,800,6.754,801,9.684,802,8.104,803,8.104,804,6.325]],["t/162",[6,1.928,14,5.649,77,2.101,121,1.577,124,3.556,128,6.196,152,6.434,189,4.01,190,4.381,365,4.03]],["t/164",[0,0.778,56,1.713,64,1.154,74,3.047,83,3.111,121,1.086,164,5.549,171,2.589,190,3.016,204,3.757,225,2.065,226,2.414,227,1.417,288,2.268,304,3.924,321,2.763,365,2.774,399,4.266,402,3.487,406,2.915,408,4.081,411,2.042,449,3.927,631,4.569,632,3.111,633,3.889,673,3.757,705,5.063,706,4.17,764,3.078,805,6.446,806,5.308,807,4.699,808,8.291,809,4.959,810,6.975,811,6.097,812,6.975,813,6.497,814,4,815,6.975,816,6.975]],["t/166",[68,2.254,81,2.826,106,3.414,121,1.86,143,4.943,162,4.308,164,5.043,186,2.629,216,3.52,284,4.143,288,2.232,304,4.351,387,4.432,414,2.736,431,7.534,471,4.992,513,5.335,808,7.534,817,8.794,818,6.559,819,7.965,820,5.152,821,4.251]],["t/168",[121,1.833,188,3.312,234,5.307,284,4.696,288,1.736,376,6.124,512,5.777,711,5.777,803,8.176,808,8.541,817,7.885,821,4.818,822,9.77,823,9.77,824,7.253]],["t/170",[0,0.768,33,7.282,56,1.698,213,5.652,221,8.177,227,1.901,231,2.588,282,3.598,309,6.65,318,4.288,421,8.177,451,7.317,711,5.531,803,7.827,821,4.613,825,8.177,826,6.524]],["t/172",[85,4.461,125,4.93,414,3.308,448,6.229,792,7.99,821,6.033]],["t/174",[0,0.855,56,1.543,81,3.416,107,2.939,121,1.622,225,3.622,226,3.606,227,2.117]],["t/176",[56,1.653,631,4.732]],["t/178",[0,0.73,6,2.116,74,4.856,86,3.681,89,3.737,123,1.679,157,2.265,213,4.056,227,1.808,288,2.257,304,4.415,449,3.685,711,5.262,740,7.416,827,6.327,828,8.223]],["t/180",[0,0.856,6,1.532,14,4.488,56,1.545,64,1.331,77,2.138,78,3.754,99,2.139,107,2.271,121,1.253,123,1.968,148,2.169,189,4.227,227,1.636,243,3.776,252,3.845,398,2.524,411,1.733,494,4.17,597,5.258,660,3.303,735,7.146,829,5.614,830,5.843,831,4.201,832,4.76,833,6.297]],["t/182",[0,0.573,4,3.095,6,1.328,36,1.636,40,1.959,56,1.033,57,1.343,58,2.373,59,2.071,64,1.154,68,1.824,86,2.309,90,2.53,91,2.392,97,1.732,107,2.675,120,1.644,121,1.086,157,1.421,227,1.417,260,3.197,281,2.676,288,1.686,299,1.796,312,2.54,492,1.746,496,1.474,663,4.217,761,4.699,834,2.973,835,6.097,836,2.698,837,2.69,838,6.446,839,7.217,840,7.654,841,6.446,842,5.456,843,4.17,844,1.956,845,5.456,846,3.078,847,5.308,848,6.446,849,5.456,850,6.446]],["t/184",[0,0.437,1,2.36,5,2.411,7,1.949,16,2.64,26,3.253,40,1.573,56,0.788,57,1.507,58,3.227,59,1.579,68,1.391,77,0.929,86,2.591,107,1.5,120,2.573,121,1.445,122,2.939,124,2.747,148,0.997,151,2.992,157,1.083,180,3.424,193,4.142,209,2.385,225,1.575,226,1.841,227,1.081,231,2.833,239,4.584,272,2.153,288,1.391,296,3.179,364,1.402,389,3.145,414,1.689,449,2.202,496,2.559,548,2.525,687,2.068,728,3.781,729,3.709,732,5.191,735,3.644,825,4.649,851,4.649,852,5.563,853,3.145,854,4.915,855,3.583,856,4.915,857,4.775,858,4.292,859,4.915,860,4.915,861,3.781,862,4.906,863,4.649,864,3.526]],["t/186",[0,0.542,2,2.244,4,2.927,6,1.993,8,2.368,36,1.548,56,0.977,58,1.651,68,2.387,77,1.152,90,2.393,95,3.152,96,2.943,97,1.639,120,1.555,121,1.758,123,1.245,125,2.659,148,1.236,185,3.024,189,3.043,207,1.725,216,2.695,231,2.525,237,3.614,242,2.559,243,3.095,288,2.008,300,4.677,304,3.324,404,4.035,411,1.965,423,3.86,449,4.334,492,1.651,496,1.394,546,1.703,572,3.678,666,3.008,684,3.321,729,4.602,764,2.912,865,6.598,866,6.598,867,6.598,868,3.646,869,3.368,870,4.602,871,5.767,872,4.729]],["t/188",[0,0.844,6,1.958,8,2.044,93,6.567,94,3.16,95,3.763,102,3.017,103,4.142,106,4.535,121,1.226,124,2.765,130,4.517,148,1.476,157,2.565,163,2.946,186,3.137,216,4.2,227,1.601,237,4.315,251,3.203,258,3.717,316,4.08,318,3.611,371,4.762,372,5.071,374,4.474,379,6.131]],["t/190",[0,0.866,6,1.452,7,0.964,9,1.099,30,1.7,36,0.908,40,1.854,56,0.909,64,0.64,77,2.094,81,1.27,95,1.85,104,1.987,106,1.534,107,1.092,120,0.913,121,0.956,123,1.9,130,2.221,147,1.174,148,0.726,157,2.644,184,3.103,186,1.181,225,1.818,226,2.125,227,1.248,235,2.756,374,5.72,379,2.989,380,7.167,381,8.211,398,1.214,460,7.342,551,1.575,857,3.157,873,3.029,874,2.021,875,1.949,876,9.102,877,5.674,878,3.579,879,5.178,880,3.579,881,6.384,882,3.579,883,3.873,884,3.873,885,3.873,886,4.558,887,4.558,888,3.241,889,4.803]],["t/193",[64,1.534,77,1.62,157,2.323,227,1.885,364,2.444,374,5.268,394,2.321,398,2.908,449,3.84,460,6.541,717,2.631,876,8.11,881,10.338,888,7.761,890,4.996,891,8.571,892,9.275]],["t/195",[64,1.588,120,2.263,157,2.373,364,2.53,370,7.509,394,2.402,411,2.067,460,6.68,622,3.738,717,2.723,857,4.936,876,8.282,893,5.214,894,9.599,895,8.033]],["t/197",[64,1.496,104,2.927,157,2.488,186,3.426,364,2.384,374,6.938,379,4.403,380,6.714,394,2.264,411,1.947,460,6.441,717,2.566,876,7.985,889,7.075,896,9.045,897,9.045,898,9.045]],["t/199",[9,2.609,64,1.521,77,1.606,157,2.507,235,2.92,364,2.424,370,7.194,374,5.224,380,7.357,394,2.302,460,7.058,717,2.609,876,8.068,890,4.954,899,8.499,900,9.197]],["t/201",[64,1.496,77,1.961,157,2.288,235,2.872,364,2.384,380,7.302,394,2.264,460,6.441,717,2.566,876,7.985,879,6.281,886,6.715,887,6.715,890,4.872,901,9.399,902,9.045]],["t/203",[64,1.508,157,2.299,184,3.26,186,2.782,227,1.853,364,2.404,370,7.134,380,7.33,383,6.62,384,8.831,394,2.282,411,1.963,460,6.474,717,2.587,876,8.026,903,7.134,904,7.632,905,9.121]],["t/205",[64,1.534,130,5.319,157,2.516,235,2.945,364,2.444,370,7.255,374,5.268,381,8.783,394,2.321,460,7.084,717,2.631,876,8.11,890,4.996,906,8.571,907,9.275]],["t/207",[64,1.508,77,1.972,157,2.299,235,2.896,364,2.404,381,8.718,394,2.282,460,6.474,717,2.587,876,8.026,879,6.305,886,6.771,887,6.771,890,4.913,901,7.632,908,9.121]],["t/209",[64,1.508,157,2.299,184,3.26,186,2.782,227,1.853,364,2.404,370,7.134,381,8.718,383,6.62,384,8.831,394,2.282,411,1.963,460,6.474,717,2.587,876,8.026,903,7.134,904,7.632,909,9.121]],["t/211",[0,0.994,1,2.809,4,3.936,5,2.87,6,1.949,8,1.643,26,3.872,42,3.187,56,0.938,78,2.953,86,2.096,87,4.946,121,1.935,123,1.674,125,4.472,133,3.007,148,1.919,181,2.01,212,2.711,227,1.287,229,2.551,231,1.751,243,5.952,291,3.331,357,3.006,398,2.781,492,1.584,500,4.7,509,3.304,566,3.53,792,5.794,793,6.561,910,6.439,911,5.109,912,4.595,913,3.744,914,4.135,915,3.744,916,3.006,917,2.766,918,3.631]],["t/213",[0,0.905,6,1.862,13,3.425,56,1.448,68,1.909,89,3.066,107,2.059,121,1.136,123,2.081,125,3.941,189,2.433,210,6.014,212,3.125,227,2.241,238,5.312,239,4.631,243,4.588,288,1.297,411,2.105,683,4.349,684,5.551,916,3.466,919,7.3,920,7.3,921,7.3,922,4.918,923,7.3,924,4.228,925,5.71,926,5.299]],["t/215",[0,0.386,5,2.132,6,1.834,8,1.852,9,2.448,10,3.414,14,2.622,31,2.876,37,2.553,43,2.219,56,0.697,64,0.778,81,1.542,86,1.557,89,1.975,99,2.292,107,1.326,121,1.5,122,2.681,123,1.628,124,1.651,128,2.876,133,1.594,139,3.028,147,1.426,148,1.617,152,2.987,168,2.044,169,2.768,181,2.267,187,2.622,190,2.034,216,1.921,217,2.876,225,1.393,226,1.628,229,1.895,243,6.274,291,2.681,337,3.118,346,2.206,357,2.233,365,3.432,367,2.622,398,2.706,405,3.168,411,1.012,427,3.414,447,3.618,477,2.599,500,3.491,524,3.028,532,3.072,534,2.724,593,2.987,683,1.855,684,3.593,793,2.781,795,3.28,804,5.636,806,3.579,814,2.697,824,3.491,916,4.574,927,3.118,928,4.703,929,5.974,930,3.118,931,2.493,932,2.811,933,5.075,934,2.576,935,2.811,936,2.843,937,3.028,938,5.3,939,3.28,940,6.241]],["t/217",[6,1.521,64,1.322,68,2.09,85,3.421,86,2.646,99,2.758,104,2.586,121,1.9,140,5.764,147,2.423,163,3.883,171,4.279,225,2.366,226,2.766,227,2.11,242,3.099,243,6.279,321,3.165,447,4.05,448,4.777,821,5.12,843,4.777,941,4.139]],["t/219",[0,0.771,3,2.069,4,2.406,5,2.459,6,1.788,7,1.35,8,2.06,30,2.381,40,2.394,56,0.803,77,0.947,78,2.529,79,3.4,87,3.024,90,1.967,92,6.658,93,5.929,94,4.148,95,4.487,96,3.541,97,1.972,98,4.76,100,2.831,101,6.434,102,3.041,123,1.023,181,1.722,189,1.808,286,2.299,316,5.355,332,3.279,365,3.158,942,4.741,943,3.11,944,3.716,945,5.424,946,4.934,947,3.716]],["t/221",[0,0.715,2,0.969,6,1.532,37,0.754,40,2.361,48,2.778,56,0.422,64,1.02,68,0.745,71,1.684,77,1.078,81,0.934,85,1.219,95,4.824,96,3.222,97,1.794,103,1.498,121,0.96,122,1.069,123,1.363,131,1.443,148,1.156,154,2.298,157,2.124,160,1.443,161,0.949,163,2.308,167,4.986,168,1.238,169,2.801,171,1.057,173,1.833,174,2.756,186,3.475,189,2.408,202,1.404,209,2.142,212,1.219,215,0.982,260,1.305,273,1.702,299,0.733,311,1.588,312,1.037,328,2.682,354,2.097,394,1.195,395,1.649,405,1.918,423,1.666,432,1.918,440,2.383,447,1.443,490,1.684,537,0.836,550,1.86,559,2.025,635,1.277,759,3.539,764,1.257,821,1.404,913,1.684,946,3.239,947,4.949,948,1.986,949,1.951,950,2.298,951,1.763,952,2.632,953,6.451,954,1.721,955,3.997,956,2.227,957,2.227,958,2.227,959,2.632,960,2.489,961,1.547,962,3.156,963,1.986,964,5.702,965,5.702,966,1.32,967,4.272,968,4.272,969,4.367,970,4.418,971,3.635,972,4.414,973,3.997,974,1.395,975,2.383,976,2.383,977,3.736,978,2.298]],["t/223",[0,0.484,2,0.91,6,1.122,37,1.2,40,2.356,48,2.669,64,0.975,77,1.356,81,1.485,83,1.193,84,0.573,85,1.94,90,0.97,95,4.703,111,1.199,121,1.08,122,1.004,123,0.855,148,0.849,157,2.136,160,2.987,161,3.282,163,2.595,167,1.44,168,1.969,169,1.757,171,2.881,174,1.728,186,3.519,189,2.588,235,0.849,242,1.037,247,2.158,260,1.226,291,1.004,354,1.989,387,1.375,391,1.599,394,1.134,398,1.42,420,1.81,440,3.791,464,1.199,490,1.581,494,4.022,537,0.785,559,3.221,658,3.737,759,3.399,821,2.234,913,2.679,946,3.111,948,1.865,952,4.187,953,5.269,955,3.791,961,2.461,962,3.391,963,3.16,964,4.187,965,4.187,966,1.24,967,4.103,968,4.103,969,4.194,970,4.244,972,5.447,973,4.932,974,2.22,979,3.656,980,5.764,981,6.412,982,3.656,983,6.412,984,2.471,985,1.901,986,7.371,987,6.065,988,7.793,989,5.894,990,2.238,991,4.53,992,2.674,993,2.674]],["t/225",[0,0.927,2,2.604,5,3.471,6,2.15,8,2.619,56,1.134,78,3.571,84,1.641,92,4.435,93,4.391,94,3.072,98,6.325,99,2.682,137,3.966,141,3.751,143,4.391,157,2.056,167,4.124,174,2.921,186,2.335,195,4.683,286,3.246,315,5.826,316,3.966,326,7.526,328,3.328,364,2.661,379,3.727,729,5.34,941,3.966,994,6.407,995,5.826]],["t/227",[0,0.497,6,1.152,8,1.57,40,2.079,42,3.046,56,0.896,64,1.001,77,1.745,81,1.984,98,6.221,99,1.608,104,1.958,157,2.035,166,2.574,167,3.26,189,3.33,212,3.679,231,1.674,252,2.891,282,2.328,288,1.076,321,2.397,326,3.794,332,5.195,539,2.806,547,2.337,565,3.287,622,2.357,733,3.505,831,3.158,832,3.579,846,4.41,946,2.714,967,5.081,968,5.081,969,3.658,996,3.658,997,5.29,998,4.221,999,4.605,1000,7.191,1001,3.794,1002,2.965,1003,4.418,1004,6.052,1005,3.344,1006,5.064,1007,3.794,1008,5.612,1009,3.618,1010,5.593,1011,3.844,1012,3.374,1013,4.013,1014,4.884,1015,4.146,1016,3.794]],["t/229",[0,0.633,6,1.468,8,2,40,2.217,77,1.347,98,5.744,99,2.694,157,2.308,186,2.352,189,2.57,231,2.133,242,2.99,411,1.66,414,2.448,546,1.99,547,2.978,622,3.949,667,5.036,673,4.153,712,3.107,776,4.153,832,6.701,946,3.458,967,4.559,968,4.559,969,4.661,1000,9.483,1015,6.948,1017,6.74]],["t/231",[37,2.266,42,5.993,81,2.804,133,2.899,147,2.593,157,1.742,189,2.85,248,5.112,288,1.52,326,7.464,332,5.17,379,5.796,398,2.681,521,6.08,608,4.885,777,4.498,1003,4.397,1018,4.397,1019,5.965,1020,3.717,1021,6.349,1022,7.476,1023,7.563]],["t/235",[7,2.561,40,1.94,157,1.604,235,2.501,288,1.4,535,4.474,539,3.652,546,2.654,547,3.042,608,3.232,666,3.59,831,4.111,1003,4.05,1007,4.937,1008,5.144,1020,3.423,1021,5.847,1024,8.044,1025,5.685,1026,5.071,1027,5.717,1028,8.044,1029,4.517,1030,5.6,1031,6.885,1032,5.847,1033,6.885,1034,6.29,1035,7.465,1036,5.847,1037,6.591,1038,6.885,1039,6.356]],["t/237",[0,0.824,6,1.911,8,2.604,77,2.09,98,5.088,107,2.831,121,1.562,123,1.894,153,5.452,189,3.988,227,2.04]],["t/239",[0,0.595,57,1.396,58,3.067,59,3.489,62,3.508,98,5.571,104,2.347,120,2.77,123,1.837,157,1.477,167,3.906,174,3.715,186,2.212,200,3.09,210,4.97,227,1.474,286,3.075,312,2.64,326,6.89,328,4.231,379,3.53,411,1.561,492,2.751,496,2.323,497,3.676,686,3.402,687,2.573,1040,6.339,1041,6.702,1042,6.702,1043,4.384,1044,7.252]],["t/241",[6,1.048,37,2.127,57,2.224,58,2.892,64,1.567,65,2.621,98,2.79,99,1.463,123,1.514,129,3.221,140,4.012,157,2.121,167,4.324,174,2.1,223,2.733,281,1.367,282,3.087,286,2.334,288,1.684,291,2.067,298,2.19,312,3.791,326,8.216,379,5.808,398,1.726,528,5.407,663,4.853,834,2.614,836,2.695,837,2.687,941,2.852,949,3.772,1040,7.017,1041,7.418,1042,7.418,1045,5.088,1046,4.367,1047,7.41,1048,4.607,1049,3.914,1050,5.088,1051,3.996,1052,5.088]],["t/243",[6,1.894,85,4.259,98,5.042,123,1.877,140,4.972,326,7.461,328,4.323,414,3.158,462,2.643,565,5.403,622,3.874,671,5.497,1040,8.696]],["t/245",[72,5.335,77,1.505,98,5.523,99,2.29,147,2.613,157,2.434,166,2.582,167,5.87,174,3.288,189,2.873,203,5.629,252,4.117,265,3.746,286,3.654,318,3.951,321,3.414,326,5.403,379,4.196,385,3.996,523,5.152,941,4.465,953,6.075,1051,6.256,1053,8.089,1054,5.806]],["t/247",[6,2.21,64,1.341,71,4.795,98,4.11,99,2.154,122,3.045,123,2.191,148,1.964,157,2.589,163,3.033,166,2.43,169,3.145,189,2.703,209,3.636,261,5.02,286,3.438,299,2.088,321,3.212,423,4.745,432,5.463,452,4.745,764,3.579,832,4.795,953,6.474,961,4.405,977,8.198,978,6.544]],["t/249",[0,0.426,6,1.743,36,1.218,40,2.363,48,1.997,53,4,56,0.769,62,2.512,64,0.859,77,1.343,89,2.181,98,5.131,121,1.197,147,1.574,148,0.973,157,2.386,163,3.786,169,2.982,171,1.927,174,1.981,188,1.76,189,2.563,196,2.496,282,2.957,284,2.496,286,2.202,318,2.38,321,2.057,394,1.299,395,3.007,546,1.34,775,5.896,807,3.498,821,2.561,946,3.448,953,5.644,961,2.82,963,3.622,967,7.112,968,4.547,970,4.703,1000,6.435,1055,5.581,1056,6.015,1057,6.435,1058,2.596]],["t/251",[0,0.478,6,1.862,40,2.378,53,3.653,64,0.964,77,1.461,98,5.418,121,1.302,148,1.092,157,1.993,163,3.659,169,2.26,171,2.162,174,2.223,189,2.788,282,3.217,284,2.801,286,2.47,394,1.458,546,1.504,622,2.269,775,5.385,776,3.139,821,2.874,946,3.75,953,5.455,961,3.165,963,4.064,967,4.945,968,4.945,970,5.115,1000,10.157,1055,6.071,1056,6.542,1057,6.999]],["t/253",[0,0.576,6,1.336,71,5.632,90,2.546,94,2.817,95,3.353,96,3.131,97,1.743,98,3.558,99,2.53,122,2.636,156,5.095,157,2.649,163,2.625,168,3.051,186,2.905,229,2.829,262,4.52,291,3.576,316,3.636,365,2.792,423,4.107,568,6.487,667,4.585,764,3.098,787,4.654,831,3.664,944,4.809,995,9.898,1059,7.283,1060,7.268,1061,6.487,1062,8.725,1063,5.665,1064,7.02]],["t/255",[0,0.778,2,1.872,6,2.2,8,2.458,9,1.562,16,3.985,27,4.189,56,0.815,79,3.451,84,1.18,90,1.997,92,3.189,93,3.157,94,3.221,95,2.63,96,4.644,97,2.353,99,2.517,102,2.109,121,0.857,131,2.79,137,4.158,141,2.697,143,3.157,148,1.032,157,2.255,167,2.965,168,2.393,171,2.043,173,3.544,174,2.1,186,3.73,190,2.381,195,3.367,216,2.249,223,2.733,227,1.119,229,2.219,247,4.443,256,3.157,284,2.646,286,3.403,291,3.014,315,4.189,316,4.158,321,2.18,323,3.772,328,2.393,356,3.84,365,2.19,379,2.68,479,2.733,821,2.715,824,4.087,941,2.852,942,4.812,949,3.772,994,4.607,995,4.189,1065,4.189,1066,4.443,1067,5.088,1068,5.088,1069,2.752,1070,6.478,1071,4.607,1072,4.306,1073,4.812,1074,4.306]],["t/257",[0,0.615,6,1.583,8,0.784,21,1.944,38,1.699,40,1.804,47,1.669,48,1.162,53,2.192,56,0.953,64,0.499,68,0.79,77,1.86,81,0.99,90,3.017,94,1.212,96,4.608,97,2.566,107,0.852,121,1.295,122,1.134,123,1.214,140,1.51,147,0.916,148,0.566,153,1.64,157,2.227,162,1.51,163,1.13,165,2.999,166,0.905,167,1.627,168,1.312,169,2.496,171,3.086,186,1.53,189,3.643,197,3.561,209,1.354,212,2.755,213,1.377,227,1.308,231,1.78,248,1.805,252,1.443,286,1.28,288,0.537,299,0.777,320,2.034,321,1.987,332,3.891,341,2.797,365,1.201,379,1.47,391,4.481,411,1.08,414,0.959,447,1.531,535,1.715,536,1.732,537,0.886,539,2.326,546,2.147,547,1.938,565,4.874,746,3.499,759,3.153,787,2.002,809,2.147,831,2.618,846,2.214,946,1.354,947,2.069,967,5.306,968,4.432,969,1.826,970,3.068,974,1.48,996,1.826,997,2.64,998,2.106,1002,2.458,1003,2.58,1005,1.669,1006,2.527,1007,3.145,1009,3.847,1011,1.918,1014,2.437,1016,1.893,1018,1.553,1019,2.106,1058,1.51,1075,5.194,1076,2.64,1077,4.198,1078,2.437,1079,3.02,1080,3.642,1081,2.362,1082,3.725,1083,2.936,1084,1.627,1085,4.897,1086,1.369,1087,1.52,1088,2.791,1089,4.267,1090,4.246,1091,4.636,1092,2.362,1093,2.437,1094,4.198,1095,2.64,1096,2.791,1097,2.362,1098,2.242,1099,2.791,1100,2.242,1101,2.64,1102,2.64]],["t/259",[0,0.733,3,1.9,9,1.413,37,2.367,39,3.652,42,3.752,56,1.323,64,1.233,77,1.855,99,1.323,104,2.412,110,3.031,133,1.688,157,2.353,167,4.812,178,2.112,181,1.581,186,3.524,189,3.851,197,2.132,223,2.473,235,2.367,251,2.025,288,1.763,311,2.777,332,4.506,390,1.841,398,3.109,433,3.697,513,3.083,535,6.33,536,6.09,537,1.462,546,1.285,547,2.879,588,3.79,608,3.058,699,4.362,750,3.046,782,2.599,832,2.945,1003,5.099,1016,4.673,1020,2.164,1021,5.534,1082,5.534,1103,8.256,1104,4.354,1105,4.603,1106,4.603,1107,4.603,1108,1.813,1109,3.541,1110,3.896,1111,4.603,1112,8.256,1113,4.168,1114,3.011,1115,4.603]],["t/261",[0,0.315,5,1.737,6,1.643,30,2.674,62,1.854,68,1.002,87,2.137,90,1.39,99,1.618,107,2.137,131,1.942,133,1.299,140,3.044,147,1.846,157,2.582,163,1.433,168,2.646,169,3.652,171,3.72,173,3.92,174,2.323,186,2.632,188,2.064,189,1.277,195,2.344,229,1.544,231,1.06,232,1.787,234,2.082,244,2.673,245,1.929,284,1.842,286,1.625,291,1.439,316,4.47,321,4.45,341,4.224,345,2.317,349,2.082,351,2.467,357,3.597,358,3.35,367,2.137,379,4.584,385,1.777,420,1.531,479,1.903,492,0.959,500,2.845,521,2.725,524,2.467,546,1.572,563,2.998,565,3.307,673,2.064,776,2.064,789,1.916,807,4.102,821,1.89,874,2,927,2.541,941,1.985,944,2.625,953,2.137,967,6.449,970,7.041,990,3.207,1014,6.114,1070,3.093,1081,8.221,1082,8.547,1116,6.623,1117,5.765,1118,4.52,1119,4.52,1120,3.542,1121,3.093,1122,5.323,1123,5.627,1124,3.207,1125,3.832,1126,3.832,1127,3.832,1128,3.832,1129,5.096]],["t/263",[0,0.532,6,1.716,77,1.132,90,3.271,121,1.009,148,1.215,151,3.646,166,2.701,186,1.977,189,2.16,218,4.012,227,1.832,234,7.04,260,2.971,321,2.567,357,3.077,367,5.781,411,2.413,414,2.058,436,4.116,452,6.559,546,1.673,560,4.012,596,3.754,666,5.11,667,5.889,668,3.022,673,3.491,776,3.491,957,8.11,1119,4.811,1130,5.989,1131,5.423,1132,5.989,1133,5.978,1134,5.989,1135,5.989,1136,5.989,1137,5.989,1138,4.012,1139,5.989,1140,9.582,1141,5.665,1142,5.989]],["t/265",[7,2.561,40,1.94,157,1.604,235,2.501,288,1.4,535,4.474,539,3.652,546,2.654,547,3.042,608,3.232,666,3.59,831,4.111,1003,4.05,1007,4.937,1008,5.144,1020,3.423,1021,5.847,1024,8.044,1025,5.685,1026,5.071,1027,5.717,1028,8.044,1029,4.517,1030,5.6,1031,6.885,1032,5.847,1033,6.885,1034,6.29,1035,7.465,1036,5.847,1037,6.591,1038,6.885,1039,6.356]],["t/267",[0,0.746,6,1.248,57,1.262,58,2.961,59,3.346,62,3.172,96,4.654,97,2.258,104,2.122,120,2.656,123,1.715,157,1.336,167,5.621,174,4.298,186,3.735,200,2.794,202,3.234,207,1.715,210,4.641,227,1.333,286,2.781,328,4.897,379,3.192,411,1.412,492,2.611,496,2.205,497,3.324,686,3.077,687,2.402,948,4.574,1043,3.965,1143,6.558,1144,5.293,1145,6.061,1146,6.558,1147,5.733,1148,5.293]],["t/269",[0,0.422,6,0.979,37,2.023,57,2.171,58,2.823,64,1.506,65,2.519,96,2.294,97,1.278,104,1.665,123,1.441,133,1.744,140,2.571,157,2.193,167,2.771,174,1.962,185,2.358,186,3.983,235,1.633,281,1.278,282,2.937,286,2.181,288,1.619,291,1.931,298,2.046,312,3.316,316,3.955,379,6.158,385,2.385,398,1.613,528,5.144,554,4.305,663,4.616,834,2.512,836,2.59,837,2.583,941,2.664,949,3.524,976,6.39,1046,4.198,1047,7.123,1048,4.305,1049,3.657,1051,3.734,1058,2.571,1059,3.465,1065,3.914,1144,7.349,1145,7.057,1149,5.144,1150,4.305,1151,5.144]],["t/271",[6,1.877,85,4.221,96,4.397,97,2.448,123,1.86,140,4.928,186,3.611,328,4.284,414,3.13,462,2.619,565,5.354,622,3.839,671,5.447,1144,7.956]],["t/273",[72,5.213,77,1.471,96,4.789,97,2.667,99,2.237,147,2.553,157,2.408,167,5.784,174,3.213,186,2.568,189,2.807,203,5.5,252,4.022,265,3.66,286,3.57,321,3.335,341,4.695,379,4.099,385,3.904,523,5.034,941,4.362,953,5.986,968,6.349,1051,6.112,1053,7.971,1054,5.672]],["t/275",[6,1.722,81,2.965,94,3.629,96,4.034,97,2.247,111,4.056,121,1.408,125,3.645,178,3.835,186,2.759,240,6.431,258,4.269,262,5.824,342,7.985,343,7.985,344,7.695,345,5.468,349,4.913,350,6.565,351,5.824,352,7.3,353,6.431]],["t/277",[1,3.885,6,1.667,19,7.067,83,5.369,96,3.906,97,2.175,121,1.363,149,6.501,166,2.623,186,3.672,234,4.756,253,6.501,354,3.845,367,6.136,447,5.578,557,5.719,666,3.992,668,4.084,1057,7.328,1094,7.328,1152,5.234,1153,5.178,1154,8.092]],["t/279",[6,2.203,64,1.331,71,4.76,96,3.59,97,1.999,122,3.023,123,2.183,148,1.955,157,2.583,163,3.011,166,2.412,169,3.122,189,2.683,209,3.61,286,3.413,299,2.072,321,3.188,423,4.71,432,5.423,452,4.71,548,3.822,764,3.553,953,6.452,961,4.372,977,8.159,978,6.496,1083,4.71,1085,6.126]],["t/281",[0,0.447,6,1.793,40,2.364,48,3.065,56,0.807,62,2.636,64,0.901,77,1.392,89,2.289,121,1.24,147,1.653,148,1.021,157,2.346,163,3.876,169,3.09,171,2.023,174,2.079,188,1.848,189,2.656,196,2.62,284,2.62,286,2.311,318,2.499,321,2.159,394,1.364,395,3.157,546,1.407,759,4.615,807,3.672,821,2.688,946,3.573,947,7.099,953,5.777,961,2.96,963,3.802,967,7.033,968,4.712,969,4.817,970,4.874,1055,5.784,1056,6.233,1058,2.724,1155,5.037]],["t/283",[0,0.401,6,1.682,40,2.375,48,2.829,64,0.809,66,3.868,77,1.284,121,1.145,123,0.923,133,1.658,148,0.917,157,2.407,163,3.676,169,1.897,171,1.815,174,2.806,189,2.451,207,1.279,284,2.351,286,2.074,394,1.224,452,2.862,546,1.263,547,1.889,759,3.603,776,2.635,777,2.573,821,2.412,946,3.298,947,6.733,953,5.48,961,2.657,963,3.412,967,4.349,968,4.349,969,4.446,970,4.498,999,3.722,1055,7.134,1056,7.688,1075,10.225,1076,6.429,1108,1.781,1156,4.52,1157,4.52]],["t/285",[0,0.383,6,1.634,36,1.664,37,2.274,40,2.344,64,0.771,77,1.239,107,1.315,121,1.104,148,0.874,157,2.372,158,2.886,163,3.21,169,1.808,171,1.73,174,1.779,189,2.364,207,1.219,231,1.29,273,4.24,284,2.241,286,1.977,394,1.167,502,3.902,546,1.203,547,2.739,548,2.214,608,1.913,777,2.452,821,2.3,832,2.757,874,3.702,946,3.181,947,6.571,953,4.786,961,2.533,963,3.252,967,4.194,968,4.194,969,4.288,970,4.338,996,4.288,998,4.947,1055,6.963,1060,2.923,1075,5.724,1077,9.981,1083,4.15,1085,3.548,1158,7.933,1159,4.947,1160,7.093,1161,7.093,1162,7.093,1163,4.309,1164,4.309,1165,4.309,1166,3.902]],["t/287",[0,0.906,3,3.357,6,2.102,7,1.558,8,1.624,9,1.775,40,2.099,56,1.507,68,1.637,76,5.32,77,1.093,84,1.341,89,2.628,102,2.398,103,3.292,121,1.718,124,2.197,148,2.18,157,1.275,176,3.784,189,2.933,197,2.68,209,2.807,234,3.4,371,3.784,395,3.625,406,2.616,411,1.894,414,1.987,737,4.03,946,2.807,950,5.051,954,3.784,1167,10.096,1168,10.096,1169,3.828,1170,8.213,1171,7.101,1172,8.132,1173,5.238]],["t/289",[0,0.933,2,2.444,6,2.396,8,1.864,13,2.225,40,1.469,64,0.784,68,1.24,81,2.844,84,2.661,99,1.26,104,1.535,131,2.404,143,2.72,148,0.889,151,4.043,157,0.966,160,2.404,161,1.581,181,1.506,186,2.192,198,2.669,207,1.24,219,2.599,229,1.912,248,6.794,315,3.61,330,4.147,331,2.339,385,2.199,407,2.901,420,1.895,424,4.88,447,2.404,487,3.373,547,1.832,573,3.308,666,2.162,732,2.404,781,3.828,1011,3.013,1119,3.521,1152,2.836,1174,7.656,1175,5.468,1176,6.456,1177,2.324,1178,2.936,1179,4.564,1180,7.186,1181,5.37,1182,3.054,1183,4.744,1184,3.013,1185,4.744]],["t/291",[6,1.781,157,2.336,161,3.822,197,4.005,231,2.588,362,5.721,367,5.215,424,4.159,546,2.414,666,5.652,668,4.362,744,6.376,1181,7.098]],["t/293",[7,1.748,9,1.991,40,2.165,77,1.663,84,1.504,85,3.005,99,1.865,123,1.324,137,3.636,148,1.316,157,2.362,173,4.52,186,2.141,189,3.175,201,4.151,231,2.635,291,2.636,321,3.772,328,3.051,424,3.922,439,6.136,447,4.828,546,1.812,628,4.244,666,3.2,668,3.274,744,3.609,796,4.896,946,4.271,1005,5.974,1006,7.971,1084,3.781,1186,7.02,1187,7.02,1188,5.665,1189,7.02,1190,6.136,1191,7.02,1192,5.665,1193,7.02]],["t/295",[40,2.312,77,1.62,102,3.553,161,3.091,176,5.607,189,3.091,231,2.566,608,3.805,666,4.228,668,4.325,744,5.865,946,5.115,1194,8.571,1195,8.571]],["t/297",[0,0.628,6,1.457,77,1.337,84,1.641,107,2.16,121,1.758,148,1.892,165,6.751,197,3.278,216,3.127,225,2.267,226,2.65,231,3.124,248,7.177,424,4.811,594,3.613,787,5.077,1176,6.467,1181,4.74,1196,6.174,1197,7.896,1198,6.693,1199,4.93,1200,4.863,1201,5.989]],["t/299",[0,0.584,6,1.354,40,2.125,71,5.682,81,3.15,84,1.524,120,2.265,121,1.496,123,1.342,148,1.801,157,1.957,158,4.402,185,3.26,198,4.001,231,3.011,248,5.744,282,2.735,424,2.579,452,4.161,454,7.754,479,3.53,480,4.715,546,1.835,547,3.711,869,3.63,946,3.189,1017,8.399,1152,4.251,1176,3.83,1184,4.516,1202,8.399,1203,9.609,1204,6.571,1205,5.279,1206,5.056,1207,5.411,1208,3.484,1209,3.63,1210,5.562]],["t/301",[0,0.864,6,1.555,8,2.12,9,2.317,56,1.726,78,3.81,84,1.751,102,3.129,148,1.974,157,1.664,161,2.723,231,2.913,242,3.168,251,3.322,375,3.464,424,4.227,546,2.109,666,4.801,668,4.911,744,4.201,796,8.886,954,4.939,1181,6.519,1211,5.93]],["t/303",[0,0.62,36,1.771,40,2.162,56,1.118,77,1.319,81,2.476,84,2.143,123,1.425,157,1.538,161,2.517,163,2.824,213,4.56,231,3.303,248,4.514,420,3.017,424,4.332,460,4.33,531,5.577,547,3.863,635,3.386,666,4.56,1174,5.087,1176,4.068,1204,6.978,1212,6.978,1213,7.551,1214,6.601,1215,10.003,1216,7.26,1217,7.551,1218,6.094]],["t/305",[7,2.198,56,1.789,64,1.829,102,3.381,112,6.407,148,2.264,215,3.815,225,2.614,226,3.055,318,4.046,377,6.822,378,6.305,400,4.117,662,3.725,1219,6.283,1220,6.276]],["t/307",[33,6.618,77,1.82,235,3.308,373,7.019,380,7.313,383,7.563,879,6.29]],["t/309",[16,4.644,57,1.801,58,2.341,64,1.547,122,3.512,148,1.753,178,3.966,208,6.022,215,4.276,377,5.038,380,5.591,383,6.789,385,4.337,406,3.909,496,1.977,834,2.581,873,7.317,1220,6.65,1221,9.354]],["t/311",[0,0.785,56,1.046,64,1.582,77,1.671,86,2.339,99,1.877,122,2.653,123,1.333,130,4.052,133,2.395,143,4.052,181,2.243,215,4.189,223,3.508,291,2.653,374,6.603,380,5.719,383,5.128,398,3,468,4.84,537,2.808,660,2.899,662,2.981,774,4.223,834,1.949,1152,4.223,1220,5.023,1222,6.176,1223,7.065,1224,7.065,1225,6.248,1226,7.065,1227,5.023,1228,6.176,1229,8.006,1230,7.065,1231,7.065,1232,5.376,1233,9.567,1234,6.529,1235,7.065,1236,7.065,1237,7.065]],["t/313",[0,0.943,56,1.018,57,1.323,58,3.305,77,1.639,86,1.481,120,2.836,122,2.58,123,1.911,124,1.57,130,2.565,143,3.94,207,1.17,213,2.039,215,3.963,223,2.221,225,1.324,226,1.548,227,2.335,231,1.237,235,1.42,272,2.781,282,1.72,285,2.494,316,3.559,377,7.07,380,6.392,496,2.79,499,2.163,879,4.302,1238,5.228,1239,4.133,1240,4.133,1241,4.473,1242,7.313,1243,4.473,1244,4.133,1245,3.499,1246,5.101,1247,5.75,1248,2.88]],["t/315",[16,4.851,56,1.447,122,4.421,148,1.831,178,4.142,374,5.549,377,5.263,378,6.145,400,4.557,873,7.642,1219,7.178,1249,9.029]],["t/317",[0,0.93,37,2.043,61,3.908,64,1.677,65,2.133,77,1.979,99,2.048,130,4.422,133,2.614,148,1.445,182,3.778,207,2.016,261,4.773,291,2.895,374,4.379,378,4.024,398,2.418,468,5.282,509,4.024,537,2.977,683,3.999,933,3.778,1219,5.76,1225,6.624,1228,6.74,1229,6.452,1249,7.125,1250,7.71,1251,7.71,1252,8.413,1253,7.71,1254,10.142,1255,7.71,1256,7.71]],["t/319",[0,0.954,56,1.046,77,2.03,105,4.656,120,2.557,123,2.046,130,4.052,143,5.486,225,2.092,226,2.445,227,2.362,235,2.243,377,7.112,380,7.486,415,7.28,879,5.577,1219,5.434,1239,6.529,1240,6.529,1245,5.526,1257,7.065]],["t/321",[9,2.157,15,6.112,37,2.015,40,2.292,43,4.742,56,1.126,77,1.966,107,2.145,123,1.435,161,4.15,189,3.751,252,3.632,420,3.038,453,5.786,534,4.404,546,1.962,712,4.05,1011,4.829,1182,4.895,1258,7.604,1259,7.604,1260,7.604,1261,7.604,1262,10.049,1263,7.604]],["t/323",[0,0.796,2,1.951,6,2.142,8,2.145,9,1.627,16,4.105,27,4.364,56,0.849,79,3.595,84,1.229,90,2.08,92,3.322,93,3.289,94,3.318,95,5.07,99,2.576,121,0.893,131,2.907,137,4.283,141,2.81,143,3.289,148,1.075,157,2.292,167,3.089,168,2.493,171,2.128,173,3.693,174,2.188,186,3.772,190,2.48,209,2.572,216,2.343,223,2.848,227,1.166,229,2.311,247,4.629,256,3.289,284,2.757,286,2.432,291,3.105,315,4.364,316,4.283,321,2.272,323,3.929,328,2.493,356,4,365,2.281,379,2.792,479,2.848,821,2.829,824,4.258,941,2.971,942,5.014,949,3.929,994,4.8,995,4.364,1065,4.364,1066,4.629,1067,5.3,1068,5.3,1069,2.867,1070,6.673,1071,4.8,1072,4.486,1073,5.014,1074,4.486]],["t/325",[0,0.697,6,1.523,8,0.552,15,1.087,21,2.397,37,1.315,40,2.176,43,4.206,47,1.177,53,1.626,56,0.551,68,0.557,77,1.557,81,0.698,89,0.894,90,2.452,94,0.854,95,4.258,107,0.601,121,1.052,122,0.799,123,0.936,140,1.064,147,0.646,148,0.698,153,1.156,157,2.016,160,1.887,161,1.983,162,1.064,163,0.796,165,2.226,166,1.486,167,1.147,168,0.925,169,2.308,171,2.508,176,1.287,186,2.831,189,3.094,197,2.894,207,0.557,209,0.955,212,0.912,213,1.697,227,1.209,231,1.372,235,0.676,248,1.273,252,1.017,286,1.579,288,0.378,299,0.548,320,1.434,321,1.965,332,2.999,341,2.076,365,0.847,375,2.103,379,1.036,391,4.041,411,0.802,414,0.676,447,1.079,480,1.412,492,1.242,535,1.209,536,1.221,537,0.625,539,1.726,546,1.745,547,2.298,565,4.037,566,1.187,658,2.672,712,0.858,733,2.156,746,2.597,759,1.824,776,2.006,787,1.412,809,1.514,831,2.589,846,3.28,874,1.943,946,1.67,953,2.076,961,1.156,967,5.02,968,3.997,969,2.251,970,3.034,974,1.043,986,3.255,987,3.255,996,2.251,998,2.597,1001,2.334,1002,2.431,1003,2.551,1005,2.057,1007,3.11,1008,2.432,1009,3.557,1011,3.151,1012,2.076,1013,2.469,1014,1.718,1016,1.335,1018,1.095,1019,1.485,1030,1.514,1058,1.064,1075,3.005,1077,1.782,1080,3.601,1081,1.665,1082,2.764,1083,2.179,1084,1.147,1085,3.775,1086,0.965,1087,1.072,1088,1.968,1089,3.289,1090,3.45,1091,3.441,1092,1.665,1093,1.718,1094,3.116,1095,1.861,1096,1.968,1097,1.665,1098,1.581,1099,1.968,1100,1.581,1101,1.861,1102,1.861,1264,1.665,1265,2.702,1266,3.723,1267,2.129,1268,3.723,1269,3.723,1270,8.49,1271,3.723,1272,3.723,1273,3.723,1274,2.129,1275,2.129,1276,2.129,1277,3.723,1278,2.129,1279,2.129,1280,2.129,1281,2.129,1282,2.129,1283,2.129,1284,2.129,1285,2.129,1286,2.129,1287,2.129,1288,2.129,1289,2.129,1290,2.129,1291,1.968,1292,1.718]],["t/327",[0,0.885,3,1.417,6,1.131,9,1.054,37,1.967,39,2.911,40,1.006,42,2.99,56,1.099,62,1.797,64,1.228,77,1.619,99,0.987,104,1.922,107,1.048,110,3.018,121,0.578,123,0.701,148,0.696,157,2.373,160,1.883,161,2.826,167,4.568,176,3.591,178,2.519,181,1.18,186,3.875,189,3.595,197,1.591,223,1.845,235,1.886,251,2.416,288,1.648,291,1.395,311,2.072,332,3.591,345,2.246,375,1.575,390,1.374,391,4.437,398,2.907,433,2.758,513,2.3,535,5.897,536,5.671,537,1.091,546,0.959,547,3.275,588,2.827,608,3.045,658,5.327,699,3.476,712,2.394,750,2.272,782,1.939,827,2.642,832,2.197,1003,4.36,1011,2.36,1016,3.724,1020,1.615,1021,5.51,1082,4.41,1103,7.837,1104,3.248,1105,5.49,1106,3.434,1107,5.49,1108,1.353,1109,2.642,1110,2.906,1111,3.434,1112,7.837,1113,3.109,1114,2.246,1293,3.716,1294,3.716,1295,3.716,1296,3.716,1297,3.716,1298,3.716,1299,3.716]],["t/329",[0,0.342,5,1.889,6,1.523,30,2.856,62,2.016,90,1.512,99,1.107,107,2.55,131,2.112,133,1.413,140,3.251,147,1.972,157,2.578,163,1.558,168,2.827,169,3.802,171,3.855,173,4.188,174,2.481,186,2.44,188,2.205,189,1.389,195,2.549,229,1.679,231,1.153,232,1.943,234,2.263,244,2.906,245,2.097,284,2.003,286,1.767,291,1.565,316,4.682,321,4.446,341,4.46,349,2.263,351,2.683,357,3.088,367,2.323,379,4.772,385,1.932,420,1.665,479,2.069,492,1.043,524,2.683,546,1.679,563,3.26,565,2.263,673,2.245,789,2.083,807,4.382,821,2.055,927,2.763,941,2.159,944,2.855,953,2.323,967,6.417,970,7.056,990,3.487,1014,6.456,1070,3.363,1081,8.488,1082,8.758,1116,7.902,1117,6.088,1118,4.829,1119,4.829,1120,3.851,1121,3.363,1122,3.643,1123,3.851,1129,5.443]],["t/331",[0,0.532,6,1.716,77,1.132,90,3.271,121,1.009,148,1.215,151,3.646,166,2.701,186,1.977,189,2.16,218,4.012,227,1.832,234,7.04,260,2.971,321,2.567,357,3.077,367,5.781,411,2.413,414,2.058,436,4.116,452,6.559,546,1.673,560,4.012,596,3.754,666,5.11,667,5.889,668,3.022,673,3.491,776,3.491,957,8.11,1119,4.811,1130,5.989,1131,5.423,1132,5.989,1133,5.978,1134,5.989,1135,5.989,1136,5.989,1137,5.989,1138,4.012,1139,5.989,1140,9.582,1141,5.665,1142,5.989]],["t/333",[7,2.561,40,1.94,157,1.604,235,2.501,288,1.4,535,4.474,539,3.652,546,2.654,547,3.042,608,3.232,666,3.59,831,4.111,1003,4.05,1007,4.937,1008,5.144,1020,3.423,1021,5.847,1024,8.044,1025,5.685,1026,5.071,1027,5.717,1028,8.044,1029,4.517,1030,5.6,1031,6.885,1032,5.847,1033,6.885,1034,6.29,1035,7.465,1036,5.847,1037,6.591,1038,6.885,1039,6.356]],["t/335",[0,0.969,6,1.241,23,2.158,42,4.557,57,1.255,58,1.632,59,1.936,95,4.325,123,1.23,148,1.697,157,2.289,160,3.304,161,3.746,167,3.512,174,2.487,176,3.941,186,4.115,189,3.018,286,3.839,318,2.989,328,2.833,332,3.941,357,3.095,375,2.764,379,4.407,391,6.218,492,2.603,658,6.583,712,2.627,953,3.635,1003,3.352,1292,5.261,1300,9.054,1301,6.519]],["t/337",[0,0.461,6,0.66,37,1.489,57,1.845,58,2.793,59,2.105,62,1.678,64,1.172,65,1.961,72,2.147,77,0.606,85,1.485,95,3.893,99,0.922,104,1.819,120,1.921,123,1.689,133,1.176,140,2.81,147,1.052,157,2.213,167,4.824,174,3.657,185,1.59,186,3.955,189,1.156,200,1.478,202,1.711,203,2.266,207,0.907,210,2.869,227,0.705,235,1.101,252,1.657,265,1.508,281,0.862,282,2.162,286,2.383,288,1.26,291,1.302,298,1.38,312,2.58,316,2.912,321,1.374,328,3.892,341,1.934,379,5.666,385,2.606,398,1.088,411,0.747,414,1.101,462,0.922,492,1.407,496,1.498,497,1.758,523,2.074,528,3.787,554,2.903,565,1.884,622,1.351,663,3.398,671,1.917,686,1.627,687,1.485,834,1.955,836,2.016,837,2.01,941,2.912,948,2.419,949,2.376,953,3.951,968,3.324,975,4.704,1043,2.097,1046,3.267,1047,5.543,1048,2.903,1049,2.466,1051,4.08,1053,5.261,1054,2.337,1058,1.734,1059,2.337,1065,2.64,1147,3.032,1148,2.799,1302,3.469,1303,8.955,1304,7.087,1305,3.469,1306,3.469,1307,3.032,1308,3.469]],["t/339",[0,0.985,6,1.919,37,1.63,57,1.185,58,1.54,62,2.976,63,4.145,64,1.018,77,1.075,81,2.017,84,1.863,95,4.153,99,2.31,121,0.958,123,1.161,160,6.251,161,4.377,171,2.284,174,3.847,178,2.609,186,3.526,189,2.051,207,1.609,242,2.386,251,2.502,258,2.904,273,3.678,286,2.609,291,2.311,328,4.382,375,2.609,420,4.028,471,3.564,482,3.529,490,3.639,492,1.54,624,4.145,782,3.212,948,4.292,953,3.431,1147,5.379,1148,4.966,1182,3.962,1208,3.015,1309,6.154,1310,3.564]],["t/341",[6,1.736,81,2.99,94,3.659,95,4.357,111,4.09,121,1.42,125,3.676,178,3.867,186,2.782,240,6.484,258,4.304,262,5.872,342,8.026,343,8.026,344,7.734,345,5.514,349,4.954,350,6.62,351,5.872,352,7.36,353,6.484]],["t/343",[6,2.195,64,1.322,71,4.725,95,3.817,122,3.001,123,2.175,148,1.946,157,2.577,163,2.989,166,2.394,186,2.437,189,2.663,209,3.583,286,3.388,299,2.057,321,3.165,375,3.388,423,4.676,432,5.383,452,4.676,492,2,548,3.794,764,3.527,953,6.429,961,4.34,977,8.12,978,6.449,1083,4.676,1085,6.081]],["t/345",[0,0.447,6,1.793,40,2.364,48,3.065,56,0.807,62,2.636,64,0.901,77,1.392,89,2.289,95,4.95,121,1.24,147,1.653,148,1.021,157,2.346,163,3.876,169,3.09,171,2.023,174,2.079,188,1.848,189,2.656,196,2.62,284,2.62,286,2.311,318,2.499,321,2.159,394,1.364,395,3.157,546,1.407,759,4.615,807,3.672,821,2.688,946,3.573,953,5.777,961,2.96,963,3.802,967,7.033,968,4.712,969,4.817,970,4.874,1055,5.784,1056,6.233,1058,2.724,1155,5.037]],["t/347",[0,0.401,6,1.682,40,2.375,48,2.829,64,0.809,66,3.868,77,1.284,95,4.695,121,1.145,123,0.923,133,1.658,148,0.917,157,2.407,163,3.676,169,1.897,171,1.815,174,2.806,189,2.451,207,1.279,284,2.351,286,2.074,394,1.224,452,2.862,546,1.263,547,1.889,759,3.603,776,2.635,777,2.573,821,2.412,946,3.298,953,5.48,961,2.657,963,3.412,967,4.349,968,4.349,969,4.446,970,4.498,999,3.722,1055,7.134,1056,7.688,1075,10.225,1076,6.429,1108,1.781,1156,4.52,1157,4.52]],["t/349",[0,0.426,6,1.743,37,1.376,40,2.353,64,0.859,77,1.343,95,4.836,121,1.197,148,0.973,157,2.062,160,2.632,161,3.602,163,1.942,169,2.014,174,1.981,186,3.452,189,2.563,227,1.055,284,2.496,286,2.202,318,2.38,391,3.104,394,1.299,492,2.292,494,2.69,658,5.822,776,4.142,821,2.561,874,4.013,946,3.448,953,5.105,961,2.82,963,3.622,967,4.547,968,4.547,969,4.648,970,4.703,980,5.708,981,7.106,983,4.799,986,6.722,987,4.539,988,7.106,1055,5.581,1292,4.191,1311,5.268,1312,5.193]],["t/351",[0,0.407,6,1.696,37,2.361,40,2.366,64,0.82,77,1.297,95,4.727,107,1.398,121,1.156,148,0.929,157,2.417,158,3.069,163,3.332,169,1.923,171,1.84,174,1.891,189,2.476,207,1.296,231,1.372,273,4.441,284,2.383,286,2.102,394,1.241,502,4.149,546,1.28,548,2.354,608,2.034,776,4.002,777,2.607,821,2.445,832,2.932,874,3.877,946,3.331,953,4.967,961,2.693,963,3.458,967,4.393,968,4.393,969,4.491,970,4.544,1055,7.182,1060,3.108,1077,9.654,1083,4.347,1085,3.773,1158,8.233,1159,5.182,1163,4.582,1164,4.582,1165,4.582,1166,4.149]],["t/353",[6,1.457,8,2.619,9,2.863,10,5.557,14,4.269,31,4.683,37,3.181,64,1.266,99,3,107,2.16,121,1.192,123,1.445,124,2.688,128,4.683,148,1.892,152,4.863,168,3.328,181,2.431,186,3.445,190,3.311,243,3.592,365,3.045,500,5.684,534,4.435,793,4.527,795,5.34,814,4.391,933,5.883,935,4.577,936,4.629,937,4.93,938,7.494,939,5.34]],["t/355",[40,1.571,96,4.137,97,2.303,122,3.482,148,1.738,166,3.417,186,3.931,216,3.788,344,6.354,348,8.108,560,5.741,1313,7.956,1314,7.815,1315,9.275,1316,11.407]],["t/357",[167,5.834,185,4.965,186,3.817,1060,6.79]],["t/359",[6,1.811,123,1.795,148,2.172,186,3.811,216,3.887,242,3.69,243,6.253,328,4.136,523,5.688,560,5.891,1016,5.965,1119,7.064]],["t/361",[0,0.651,6,1.51,16,3.939,56,1.175,86,2.627,93,6.59,102,3.039,103,4.172,121,1.788,124,2.785,130,4.55,147,2.405,148,1.487,163,2.967,184,2.835,209,3.558,216,3.24,227,1.612,237,4.346,238,4.969,258,3.744,318,4.737,371,4.796,372,5.108,374,4.506,377,6.19,378,5.393,380,4.742,381,5.64,382,6.639,383,5.758,384,6.206]],["t/362",[0,0.875,6,1.3,7,1.105,9,1.258,30,1.948,36,1.041,40,1.881,56,1.011,64,0.734,77,2.165,81,2.239,95,2.119,104,1.436,107,1.251,120,1.046,121,1.063,123,1.904,130,2.544,147,1.345,148,0.831,184,3.341,225,2.022,226,2.363,227,1.388,235,2.968,238,1.918,374,4.728,377,7.014,378,2.315,380,7.176,381,8.535,398,1.391,551,1.804,857,3.511,873,3.47,874,2.315,875,2.233,877,4.1,878,4.1,879,5.48,880,4.1,881,6.965,882,4.1,886,5.069,887,5.069,888,3.713,1200,2.818,1317,9.188,1318,4.437,1319,4.437,1320,4.437]],["t/365",[64,1.56,77,1.648,227,1.917,364,2.486,374,5.358,377,6.209,394,2.361,398,2.958,449,3.906,717,2.676,881,10.416,888,7.895,890,5.082,891,8.718,1317,8.195,1321,9.434]],["t/367",[64,1.602,120,2.283,238,4.187,364,2.552,377,6.781,378,5.054,394,2.424,411,2.085,622,3.771,717,2.747,857,4.979,893,5.26,1317,8.326,1322,9.684]],["t/369",[9,2.631,64,1.534,77,1.62,122,3.482,235,2.945,238,4.01,364,2.444,374,5.268,377,6.654,378,4.84,380,7.385,394,2.321,717,2.631,890,4.996,899,8.571,1317,8.11,1323,9.275]],["t/371",[64,1.534,77,1.992,235,2.945,364,2.444,377,6.144,380,7.385,394,2.321,717,2.631,879,6.352,886,6.885,887,6.885,890,4.996,901,7.761,1317,8.11,1324,9.275]],["t/373",[64,1.484,122,3.369,184,3.206,186,2.736,227,1.823,238,3.879,364,2.364,377,6.556,378,4.682,380,7.275,382,7.507,383,6.512,384,8.741,394,2.245,411,1.931,717,2.545,903,7.017,904,7.507,1317,7.945,1325,8.971]],["t/375",[64,1.547,122,3.512,130,5.364,235,2.97,238,4.045,364,2.465,374,5.313,377,6.679,378,4.882,381,8.816,394,2.341,717,2.653,890,5.038,906,8.644,1317,8.152,1326,9.354]],["t/377",[64,1.534,77,1.992,235,2.945,364,2.444,377,6.144,381,8.783,394,2.321,717,2.631,879,6.352,886,6.885,887,6.885,890,4.996,901,7.761,1317,8.11,1327,9.275]],["t/379",[64,1.534,184,3.315,186,2.829,227,1.885,364,2.444,377,6.144,381,8.783,382,7.761,383,6.732,384,8.922,394,2.321,411,1.997,717,2.631,903,7.255,904,7.761,1317,8.11,1328,9.275]],["t/381",[0,0.89,6,2.064,30,3.755,56,1.763,70,6.689,148,1.603,162,4.275,163,3.198,178,3.626,204,4.606,216,3.493,229,3.446,291,3.211,329,4.857,365,3.402,420,3.416,460,4.904,974,4.19,1059,5.761,1329,9.479,1330,6.689,1331,10.02,1332,7.476,1333,10.843,1334,7.156]],["t/383",[6,1.811,86,4.305,121,1.481,159,5.568,215,3.282,225,2.818,226,3.293,321,3.769,662,4.015,754,5.965,1219,5.405,1335,8.602,1336,7.064,1337,6.41,1338,7.444]],["t/385",[121,1.823,215,4.039,288,2.081,385,4.49,406,4.048,521,6.885,662,4.086,754,6.07,1219,6.652,1335,7.189,1338,7.575,1339,7.369,1340,7.815]],["t/387",[0,0.52,6,1.205,23,2.096,84,1.901,86,2.096,104,2.871,121,1.885,125,2.551,157,2.735,159,3.705,166,1.897,178,2.684,188,2.146,261,3.919,262,6.593,288,1.125,321,4.395,350,4.595,385,2.936,390,3.279,424,3.218,527,3.827,548,3.006,662,3.743,666,2.886,686,2.97,728,4.501,732,3.209,764,2.794,800,4.416,820,3.785,831,3.304,933,3.102,1029,3.631,1153,5.245,1159,4.416,1208,3.102,1335,4.7,1338,4.952,1341,6.077,1342,4.501,1343,5.851,1344,6.331,1345,5.298,1346,6.331,1347,4.416,1348,5.298,1349,6.331]],["t/389",[12,5.754,86,3.354,215,3.494,241,5.649,297,8.176,331,4.996,631,4.295,754,6.351,1219,5.754,1335,8.932,1350,7.066]],["t/391",[0,1.006,6,1.38,30,3.184,56,1.074,73,4.119,86,2.401,107,2.045,121,1.964,123,2.074,152,4.606,202,3.576,207,1.896,215,2.501,225,2.147,226,2.51,227,1.979,287,4.08,311,4.043,398,2.274,406,3.031,658,3.906,754,6.103,792,4.736,917,3.168,1219,6.243,1335,9.368,1338,5.672,1351,10.158,1352,6.068,1353,6.702,1354,6.702,1355,6.702,1356,6.339]],["t/393",[0,0.869,6,2.014,8,2.135,13,3.861,56,1.219,81,2.698,86,2.725,90,2.986,125,3.317,186,2.511,194,4.816,216,3.362,243,3.861,290,4.675,331,4.059,333,5.741,412,4.92,420,4.227,560,5.095,673,4.434,814,4.72,875,4.143,1342,5.852,1357,7.195,1358,7.607,1359,7.607,1360,8.052,1361,5.852,1362,6.888,1363,7.607,1364,6.11,1365,3.861,1366,5.095]],["t/395",[0,0.95,5,3.649,6,1.532,8,2.088,21,5.183,23,2.665,34,5.843,81,2.639,102,3.084,141,5.111,153,4.372,272,3.258,331,5.707,375,3.413,631,3.413,712,3.244,755,5.423,814,5.982,872,4.17,875,4.052,935,6.235,936,6.306,1365,3.776,1367,7.439,1368,5.046,1369,7.037,1370,6.736,1371,5.515,1372,6.103,1373,6.297,1374,7.037]],["t/397",[0,0.886,6,2.377,7,2.113,8,2.799,56,1.257,62,4.104,121,1.321,148,1.59,181,2.694,188,2.876,236,5.018,237,4.648,292,6.556,464,3.805,656,4.648,686,3.981,795,5.918,939,5.918,1347,5.918,1375,7.101,1376,5.463,1377,7.842,1378,5.716,1379,6.848,1380,6.638,1381,4.915]],["t/399",[0,0.789,5,3.224,6,2.219,8,1.845,16,3.53,23,2.354,56,1.423,58,2.405,59,2.112,64,1.176,78,3.316,84,1.524,86,2.354,99,1.889,102,3.681,104,2.301,105,3.89,108,3.683,111,3.189,120,1.676,121,1.496,122,2.67,124,3.373,133,2.41,157,1.448,161,2.37,178,3.015,181,2.258,207,1.859,213,3.241,233,4.457,291,2.67,329,4.039,492,1.78,504,3.241,625,4.001,1181,4.402,1347,4.96,1380,8.513,1381,4.118,1382,5.95,1383,5.411,1384,5.411,1385,6.216,1386,6.571]],["t/401",[631,4.638,632,5.613,1387,6.857]],["t/403",[0,0.452,1,2.442,6,1.803,7,1.371,23,1.823,30,2.417,42,2.771,56,0.815,68,2.099,77,1.654,78,3.744,81,2.632,107,2.672,108,4.158,121,1.249,122,2.067,137,2.852,171,2.043,225,2.805,231,2.221,235,3.008,272,3.249,287,3.098,300,2.28,304,2.923,329,3.127,354,4.159,357,3.811,414,1.748,464,3.599,565,2.99,587,2.81,632,5.454,660,2.259,679,4.697,934,3.016,941,2.852,1069,2.752,1181,3.408,1313,5.599,1368,5.032,1380,8.658,1387,7.244,1388,5.599,1389,4.306,1390,4.306,1391,5.088,1392,5.505,1393,6.717,1394,4.812,1395,4.812,1396,4.306,1397,4.443,1398,5.088,1399,4.087,1400,5.088,1401,5.088,1402,5.088,1403,3.709,1404,4.443]],["t/405",[0,0.459,6,2.282,7,1.392,11,4.149,23,2.687,37,1.481,62,5.619,84,2.247,86,1.851,107,1.577,110,2.273,125,2.253,157,2.136,160,4.114,161,3.495,166,1.675,171,2.074,176,3.379,178,2.37,187,4.525,200,2.381,207,1.462,225,1.655,231,1.546,321,2.214,329,6.808,335,2.654,354,2.454,390,3,411,1.203,420,2.233,436,3.55,464,2.506,632,3.62,658,5.147,679,3.27,754,3.504,782,4.987,915,3.305,1313,5.661,1336,4.149,1337,3.765,1347,3.898,1380,7.475,1387,5.088,1393,4.677,1394,4.886,1395,4.886,1405,4.677,1406,5.165,1407,5.165,1408,3.036,1409,5.589,1410,5.589,1411,5.589,1412,6.491,1413,4.057,1414,5.589]],["t/407",[7,2.594,68,3.199,225,3.085,272,4.218,284,5.008,632,4.647,739,6.805,1387,6.532]],["t/409",[0,0.873,6,1.58,13,3.894,14,3.215,23,1.909,30,2.531,37,1.528,56,1.44,57,1.11,61,4.929,72,3.569,78,3.871,81,1.89,107,1.626,108,5.038,120,1.359,121,0.897,148,1.994,171,2.14,188,4.34,207,1.508,252,3.965,256,3.306,287,4.67,292,3.186,354,2.531,375,2.444,398,1.808,399,3.526,401,4.825,411,1.241,658,3.106,662,2.433,686,2.705,712,3.345,753,3.823,911,4.653,918,3.306,939,5.789,956,4.51,1025,4.121,1058,2.882,1340,4.653,1376,3.712,1404,4.653,1415,6.946,1416,4.653,1417,5.04,1418,5.328,1419,4.825,1420,2.825,1421,8.3,1422,5.766,1423,4.387,1424,5.04,1425,6.946,1426,5.766,1427,7.849,1428,5.04,1429,3.712]],["t/411",[0,0.865,6,1.752,13,3.133,14,3.723,37,1.769,56,0.989,57,1.285,61,4.666,62,3.23,78,4.293,107,1.884,108,5.457,148,1.974,188,4.174,207,1.746,252,4.397,287,5.18,292,3.69,375,2.831,398,2.094,658,3.597,662,2.818,712,2.691,752,5.927,753,4.428,911,5.389,1058,3.338,1371,4.575,1375,10.303,1404,5.389,1416,5.389,1419,5.588,1420,3.272,1425,8.816,1428,5.838,1429,4.3,1430,10.535,1431,7.429,1432,5.588,1433,6.678,1434,5.588]],["t/413",[0,0.975,13,3.494,56,1.759,57,1.434,58,1.864,64,1.639,72,4.611,120,2.337,121,1.543,124,2.615,210,3.802,227,1.514,229,3.002,232,4.623,272,3.015,288,1.324,292,6.156,300,4.105,321,3.926,500,5.53,686,5.226,789,3.723,795,5.195,1378,5.018,1379,8.991,1412,6.136,1435,6.884,1436,6.511,1437,5.668,1438,6.511,1439,6.511,1440,5.668]],["t/415",[56,1.297,75,5.178,80,5.178,86,2.899,212,3.749,229,3.529,290,4.973,292,4.839,364,2.308,406,3.66,420,3.498,528,5.899,631,4.666,675,5.638,686,4.108,748,4.973,749,5.178,764,3.865,961,4.756,1114,5.294,1152,5.234,1365,4.108,1379,9.714,1441,8.882,1442,8.757]],["t/417",[0,0.603,7,1.46,14,4.093,31,3.586,37,0.552,40,2.117,56,0.988,58,1.467,64,1.103,68,1.533,77,0.364,81,0.683,86,1.616,107,1.031,120,1.865,121,0.324,122,0.783,148,0.915,184,1.306,187,2.721,194,1.22,196,1.757,200,1.557,201,1.233,215,0.719,223,1.815,225,1.082,227,1.608,231,1.011,232,2.276,261,4.128,272,0.844,282,2.255,288,1.745,316,1.08,331,1.028,364,0.549,374,3.33,385,2.263,394,0.915,406,3.689,411,1.98,473,4.356,496,2.225,516,1.482,519,2.423,545,1.631,587,3.748,591,4.084,595,2.95,622,3.081,632,3.275,660,2.002,668,1.705,686,4.14,689,2.462,717,0.591,719,4.906,732,2.972,733,2.827,734,1.404,735,2.504,751,1.173,774,2.185,776,3.158,777,1.922,789,2.931,852,1.985,853,2.161,917,1.597,1015,2.504,1081,4.586,1114,2.95,1138,2.263,1222,3.195,1378,7.222,1379,5.925,1387,1.307,1425,1.745,1436,4.266,1441,7.687,1443,5.863,1444,3.655,1445,2.085,1446,5.863,1447,3.655,1448,3.655,1449,3.378,1450,6.418,1451,3.378,1452,3.655,1453,3.655,1454,3.655,1455,2.085,1456,3.655,1457,3.655,1458,3.923,1459,2.117,1460,3.655,1461,3.655,1462,3.655,1463,3.378,1464,3.655,1465,3.655,1466,3.195,1467,2.859,1468,3.655,1469,3.655,1470,2.085,1471,3.655,1472,3.655,1473,3.655,1474,2.085,1475,3.655,1476,2.085,1477,2.085,1478,3.714,1479,3.655,1480,3.655,1481,3.655,1482,1.745,1483,3.655,1484,2.085,1485,2.085,1486,3.655,1487,3.655,1488,3.655,1489,2.085,1490,2.085,1491,2.085,1492,2.085,1493,1.631,1494,2.085,1495,1.26,1496,2.085,1497,2.085,1498,2.085,1499,1.822,1500,2.085,1501,2.085]],["t/419",[6,2.16,8,3.193,84,2.881,99,2.443,104,2.976,181,2.92,185,4.216,406,5.144,577,6.676,911,7.422,1034,5.625,1502,5.625,1503,5.128]],["t/421",[0,0.591,3,2.748,31,4.406,56,1.735,66,3.789,68,3.064,78,3.36,79,6.076,86,3.209,108,3.732,120,1.698,133,2.442,162,3.601,188,3.286,202,3.553,217,4.406,227,1.464,233,4.516,235,2.287,253,7.196,254,5.229,292,3.981,294,5.229,295,5.482,309,5.122,385,3.34,594,3.4,632,4.324,757,4.46,819,6.658,1169,4.406,1219,4.092,1378,8.814,1387,4.516,1407,6.658,1420,3.53,1437,5.482,1504,5.122]],["t/423",[6,1.877,56,1.46,62,4.768,78,4.597,107,2.781,108,6.132,188,3.342,287,5.547,292,5.447,658,5.31,1378,8.546,1505,9.11]],["t/425",[0,0.795,3,3.695,23,3.206,56,1.434,68,2.532,78,4.516,79,6.07,86,3.877,121,1.507,364,2.552,632,4.319,1378,8.481,1387,6.07,1506,7.189]],["t/427",[0,0.824,3,3.83,81,3.291,86,3.324,251,4.082,632,5.337,1378,8.061,1387,6.293,1390,7.852,1506,7.452,1507,8.4]],["t/429",[3,3.732,7,1.451,53,2.545,56,1.239,68,1.524,79,3.653,86,3.54,91,1.469,99,1.548,107,2.359,137,3.018,166,1.746,207,1.524,225,1.725,235,2.655,321,2.308,354,4.694,364,1.536,558,3.752,565,6.593,632,2.599,633,3.249,660,2.391,683,2.298,1368,5.243,1378,7.626,1388,5.833,1390,4.558,1408,4.543,1506,4.326,1508,5.827,1509,5.827,1510,4.064,1511,5.385,1512,5.094,1513,10.691,1514,5.827,1515,5.827,1516,8.364,1517,5.914,1518,9.783,1519,4.434,1520,5.827,1521,5.385,1522,5.827,1523,8.364,1524,5.827,1525,5.827,1526,5.827,1527,5.827,1528,5.827,1529,5.827,1530,5.827,1531,5.827,1532,5.827,1533,5.827,1534,3.992,1535,5.827,1536,5.827]],["t/432",[0,0.946,3,3.049,5,3.623,56,1.538,68,2.09,79,5.009,81,2.62,86,2.646,142,4.777,188,2.709,207,2.09,213,3.643,235,3.296,251,3.249,333,5.574,480,5.298,630,4.171,631,3.388,632,5.445,633,5.788,706,4.777,729,5.574,1365,3.749,1378,8.223,1387,5.009,1507,6.687,1537,7.385,1538,10.381,1539,7.991]],["t/434",[7,1.629,40,2.167,56,1.751,64,0.694,68,2.373,78,1.958,79,2.632,81,1.377,86,1.39,99,1.738,103,2.208,107,2.267,120,0.99,121,0.654,123,0.792,184,1.501,187,3.648,188,3.335,192,2.929,201,2.483,210,3.34,225,1.243,227,1.33,229,1.692,231,1.162,233,5.039,235,2.552,272,1.7,284,3.864,329,2.385,331,2.071,364,1.107,398,2.051,406,1.755,411,0.904,471,2.432,472,4.564,479,2.085,494,2.175,519,2.784,527,2.538,546,1.084,632,3.586,660,2.685,662,1.772,717,1.191,719,6.727,732,3.316,735,2.877,742,3.284,851,3.671,868,2.32,879,2.159,934,2.3,958,3.284,1025,3.248,1313,2.929,1378,8.114,1381,2.432,1450,9.11,1451,6.047,1458,5.257,1466,7.027,1507,3.514,1521,3.88,1540,4.199,1541,4.199,1542,4.199,1543,4.199,1544,4.199,1545,4.199,1546,3.389,1547,4.199,1548,4.857,1549,4.199,1550,4.199,1551,4.199,1552,4.199,1553,4.199,1554,3.514,1555,3.671,1556,3.88,1557,3.88,1558,2.703,1559,4.199,1560,4.199,1561,3.048,1562,3.88,1563,3.195]],["t/437",[56,1.573,79,6.658,480,7.042,631,4.503,1378,7.155,1507,8.888,1537,9.816]],["t/439",[0,0.911,7,1.842,12,4.202,37,1.96,53,3.232,56,1.461,68,2.58,75,4.375,79,6.96,99,2.622,187,6.19,188,3.345,210,3.777,231,2.73,233,4.638,472,5.16,496,2.085,546,1.91,551,4.515,631,3.137,632,4.401,660,3.036,662,3.122,683,2.918,759,3.625,1058,3.698,1378,8.312,1441,7.964,1458,3.953,1548,5.492,1555,6.467,1564,4.019]],["t/441",[0,0.468,14,4.593,31,3.49,56,1.432,64,0.944,81,1.871,91,1.439,166,1.709,184,2.039,187,4.593,188,4.089,190,2.467,196,2.742,231,1.578,235,1.811,239,3.459,260,2.616,261,3.532,288,1.014,364,1.504,374,3.241,377,3.073,406,4.041,411,2.708,436,3.624,473,3.726,496,1.206,499,2.76,516,4.057,546,2.126,608,2.341,622,2.222,632,3.674,637,3.577,660,2.341,744,4.236,917,2.492,1119,4.236,1133,3.783,1378,7.132,1419,4.775,1441,4.605,1449,5.273,1450,8.452,1458,3.048,1478,7.357,1495,3.449,1499,8.452,1554,4.775,1555,4.988,1556,5.273,1557,5.273,1565,4.236,1566,5.706,1567,5.706,1568,5.706,1569,5.706,1570,5.706,1571,5.706,1572,5.706,1573,5.706,1574,5.706,1575,4.988]],["t/443",[6,1.555,59,3.461,65,2.913,68,2.136,81,2.678,84,1.751,94,3.278,121,1.916,122,3.068,171,3.032,216,3.337,292,4.515,300,3.383,354,3.587,369,5.808,385,4.883,427,5.93,464,4.722,673,4.401,727,5.808,807,5.504,1174,5.504,1200,5.189,1377,11.376,1576,8.17,1577,8.17,1578,8.17]],["t/445",[0,0.792,8,3.39,84,2.893,99,1.901,105,2.558,123,1.35,129,4.188,131,4.892,161,3.217,207,1.872,215,3.328,219,3.921,224,4.065,258,3.378,310,4.745,312,2.606,406,4.034,420,2.859,424,2.596,463,5.59,464,3.209,465,5.535,476,4.675,531,3.99,532,4.675,538,4.43,629,5.598,937,4.608,1179,4.546,1579,5.598,1580,5.446,1581,5.989,1582,4.327]],["t/447",[0,0.768,8,2.975,84,2.657,85,4.005,121,1.456,129,5.473,131,4.741,207,2.446,219,5.124,223,4.644,406,3.909,476,6.109,504,4.264,538,7.098,577,6.789,629,7.317,630,4.882]],["t/449",[0,0.882,3,1.728,8,3.069,9,2.391,34,3.287,36,2.216,37,1.838,38,2.548,40,2.11,56,0.671,83,2.02,84,2.534,85,1.939,91,2.126,97,2.094,105,2.479,121,1.08,128,2.769,129,5.528,131,2.295,161,1.509,163,1.694,181,1.438,206,1.893,219,3.8,223,4.185,281,2.094,288,1.498,298,1.801,299,1.166,312,2.525,323,3.102,368,2.623,400,3.235,406,2.899,415,6.415,424,1.643,476,6.171,492,1.736,527,2.737,531,2.525,538,4.294,546,1.79,551,1.841,577,3.287,586,5.034,629,8.748,630,4.4,789,2.263,806,3.446,844,2.365,874,2.363,1025,4.691,1583,6.171,1584,4.185,1585,3.362,1586,2.535,1587,4.528,1588,6.41,1589,4.185,1590,4.528,1591,4.185]],["t/451",[8,2.87,56,1.307,84,2.714,99,3.365,123,2.087,223,5.492,257,5.683,408,6.473,462,2.939,505,5.464,506,5.606,508,5.062,520,6.717,538,6.848,1592,5.773]],["t/453",[8,3.012,38,4.931,40,2.04,56,0.922,64,1.678,84,2.487,99,1.653,142,6.583,161,2.074,215,2.146,223,4.351,229,2.508,235,1.976,257,4.007,288,1.558,304,2.266,307,4.192,424,3.179,462,1.653,463,3.605,464,2.791,465,3.569,505,3.852,506,3.953,508,3.569,511,5.208,515,5.643,520,4.736,531,4.886,535,3.535,536,5.026,538,3.852,539,4.064,846,4.86,1593,10.145,1594,10.145,1595,4.112,1596,8.764,1597,8.764,1598,6.856,1599,5.022,1600,6.223,1601,5.751]],["t/455",[0,0.984,2,3.097,8,3.179,34,3.734,37,1.363,64,1.263,81,1.686,84,2.744,85,2.202,99,2.029,104,1.665,105,3.255,122,1.931,123,1.718,129,3.01,131,2.607,133,1.744,147,1.56,181,1.633,202,2.537,207,1.345,209,2.307,216,2.101,224,2.922,228,4.565,251,2.092,298,2.046,299,1.324,311,4.257,325,3.302,353,3.657,357,2.442,397,3.914,406,4.212,414,2.424,428,3.657,463,2.979,464,2.307,465,2.95,476,7.834,492,1.287,512,3.042,538,5.637,539,5.23,548,2.442,550,3.36,552,4.151,557,3.36,558,3.312,575,4.305,576,4.305,577,3.734,586,3.734,629,5.973,630,2.685,728,3.657,913,3.042,1025,2.554,1583,3.36,1584,4.754,1602,5.144]],["t/457",[23,2.867,37,1.621,40,2.315,48,3.331,76,3.699,81,2.006,83,2.729,160,3.102,161,2.887,178,2.594,181,2.75,215,2.11,227,1.244,234,3.324,235,1.943,258,4.087,260,2.805,312,2.228,346,2.871,376,3.836,408,3.581,459,8.787,537,1.796,560,5.361,625,3.443,671,3.381,800,4.268,1084,5.415,1090,5.131,1179,6.942,1216,4.442,1467,4.787,1502,6.148,1603,5.655,1604,5.121,1605,6.119,1606,6.119,1607,4.787,1608,8.661,1609,8.661,1610,6.119,1611,6.119,1612,8.661,1613,6.119,1614,6.119,1615,5.349,1616,6.119]],["t/459",[0,0.894,3,3.288,6,1.641,56,1.276,84,1.847,86,2.854,104,2.789,120,2.817,181,2.736,209,3.865,225,2.552,226,2.983,227,1.752,232,4.02,365,3.428,430,5.21,482,4.943,674,4.498,1072,6.742,1084,4.643,1502,7.679,1503,7.001]],["t/461",[0,0.321,13,2.905,15,1.998,36,1.453,38,2.202,40,2.188,43,1.847,49,2.841,53,1.71,54,2.979,64,1.271,84,2.039,91,1.937,97,1.908,104,3.079,120,1.46,121,0.609,138,2.245,157,0.797,184,1.399,188,1.327,197,1.676,198,2.202,204,2.108,232,2.888,234,2.126,251,1.592,281,1.908,288,1.101,298,2.463,299,1.594,300,1.621,312,2.255,390,2.289,398,1.941,404,2.394,411,0.843,424,1.42,430,3.743,482,3.551,536,4.406,537,2.255,546,1.01,547,1.512,844,2.155,846,2.733,961,3.363,962,2.705,1002,1.918,1012,2.182,1018,2.013,1025,1.943,1084,2.108,1090,4.458,1248,3.987,1311,2.682,1408,2.126,1502,7.229,1503,6.307,1582,2.366,1592,2.043,1595,1.836,1617,3.159,1618,5.263,1619,6.192,1620,3.617,1621,3.014,1622,3.422,1623,3.276,1624,3.276,1625,4.712,1626,2.454,1627,2.682,1628,3.363,1629,3.617,1630,2.29,1631,5.413,1632,5.722,1633,3.159,1634,3.159,1635,3.159,1636,3.617,1637,2.841,1638,3.914,1639,3.914,1640,3.914,1641,3.617,1642,3.914,1643,2.783,1644,2.73,1645,3.914,1646,3.062,1647,5.182,1648,4.403,1649,3.914,1650,3.617,1651,3.422]],["t/463",[12,4.783,23,2.788,40,2.109,64,1.393,258,3.974,288,1.908,504,3.839,521,5.987,536,4.829,537,3.654,560,5.213,1179,5.348,1216,6.112,1502,6.567,1503,5.986,1618,5.769,1632,7.782,1652,8.421,1653,7.361,1654,8.421,1655,8.421,1656,7.782,1657,8.421,1658,6.796,1659,8.421]],["t/465",[0,0.755,40,1.558,56,1.362,57,1.77,73,5.224,84,1.971,102,3.523,153,4.995,208,5.921,215,3.172,463,5.327,465,5.274,482,5.274,764,4.059,1108,3.349,1310,5.327,1340,9.158,1502,6.94,1503,6.327,1660,7.422]],["t/467",[3,3.65,4,3.135,6,2.48,8,2.482,56,1.606,77,1.234,87,3.939,104,2.286,121,1.489,123,1.333,131,3.581,132,6.176,154,5.702,157,1.949,170,5.111,181,3.037,189,2.355,213,3.221,215,3.299,251,2.873,313,3.975,316,6.022,341,3.939,399,4.321,448,8.113,480,4.684,1661,6.944,1662,5.245]],["t/469",[6,2.21,8,1.615,64,1.029,71,3.68,77,1.531,104,3.564,120,1.467,121,1.579,131,4.442,132,7.661,141,3.049,147,2.657,157,2.364,161,2.921,163,2.328,166,2.626,168,3.809,169,3.399,174,2.374,189,2.921,209,2.791,229,2.508,309,4.425,316,5.704,351,5.643,398,1.951,424,2.257,447,3.154,448,7.396,452,3.641,821,4.322,1101,5.44,1176,3.352,1184,6.443,1661,7.993,1663,5.44,1664,7.661,1665,6.223,1666,3.953,1667,6.223,1668,5.208]],["t/471",[2,3.648,74,4.685,102,4.108,106,4.248,121,1.669,193,4.784]],["t/473",[0,0.914,6,1.064,37,1.481,56,0.828,74,2.441,77,1.945,86,3.164,102,3.66,103,2.94,106,4.601,114,3.175,120,2.625,121,2.005,122,2.099,123,1.055,124,2.849,146,3.599,147,1.695,148,1.965,163,2.09,169,2.168,193,5.346,196,4.593,216,2.283,217,3.418,227,1.649,235,2.577,242,2.168,251,2.273,288,0.993,304,2.035,318,2.562,371,3.379,378,2.917,389,3.305,398,1.752,477,3.089,509,2.917,524,3.599,660,3.921,697,5.381,821,2.757,864,6.336,916,2.654,917,2.441,933,2.738,1365,2.622,1669,6.792,1670,5.589]],["t/475",[0,0.778,9,1.978,37,3.064,43,3.292,56,1.405,64,1.154,77,1.218,86,2.309,89,2.929,104,2.257,106,4.58,107,2.675,120,2.236,121,1.942,122,2.619,123,1.789,141,3.417,147,2.115,148,1.307,174,2.661,181,2.215,193,4.23,229,2.811,235,2.215,243,5.055,357,3.312,398,2.187,414,2.215,477,3.854,509,3.64,713,4.04,931,3.697,933,5.28,1365,3.272,1671,6.975,1672,6.615,1673,8.765,1674,4.865]],["t/477",[0,0.719,56,1.297,58,2.754,59,3.75,77,1.529,106,3.468,107,2.47,120,2.977,121,1.713,123,1.652,193,3.906,227,2.237,411,1.885,492,2.754,496,1.85,687,2.314,946,3.927,1675,8.375]],["t/479",[0,0.903,7,2.18,57,1.686,58,2.191,59,2.6,68,2.29,73,4.973,77,1.922,106,3.468,121,1.874,148,1.641,163,4.723,193,4.909,492,2.754,821,4.319,1676,7.328,1677,8.757,1678,6.849,1679,8.092,1680,6.226]],["t/481",[0,0.558,6,2.178,36,2.495,40,1.579,48,3.586,53,4.072,62,3.29,64,1.125,77,1.188,89,3.915,106,2.694,121,2.171,131,4.725,147,2.827,148,1.275,193,5.759,198,5.246,207,1.779,365,2.706,414,2.96,492,1.702,524,4.38,874,5.551,1681,6.802,1682,5.946]],["t/483",[0,0.575,2,4.548,6,1.335,7,1.382,9,2.29,36,1.645,40,1.188,48,3.106,57,0.657,58,0.855,59,1.014,64,0.565,74,1.492,77,1.551,84,2.525,89,2.331,99,0.907,104,1.796,105,2.886,106,4.279,111,1.531,112,2.479,114,1.94,121,2.052,123,1.047,127,2.264,140,2.774,146,2.199,147,2.126,148,1.513,157,1.809,170,1.824,174,2.117,175,2.671,181,1.084,186,2.463,193,5.573,198,3.123,201,2.019,204,1.839,207,0.893,219,3.841,221,2.985,222,2.382,223,3.481,224,3.152,225,1.011,226,1.182,227,0.694,228,2.041,235,1.084,262,4.514,288,0.607,304,1.243,310,2.264,341,1.904,365,1.358,385,3.744,387,2.854,410,2.339,414,1.084,492,0.855,517,6.085,518,2.535,548,4.217,826,3.871,1092,2.671,1561,2.479,1583,2.23,1683,3.415,1684,2.169,1685,2.169]],["t/485",[0,0.719,2,3.744,56,1.297,58,2.754,59,3.75,77,1.529,106,3.468,107,2.47,120,2.977,123,1.652,193,3.906,227,2.237,411,1.885,492,2.754,496,1.85,687,2.314,946,3.927,1675,8.375]],["t/487",[0,0.908,2,3.002,57,1.699,58,2.209,59,2.621,68,2.308,73,5.013,77,1.932,106,3.496,121,1.722,148,1.654,163,4.737,193,4.934,492,2.768,821,4.353,1678,6.905,1679,8.157,1680,6.276,1686,8.827,1687,8.827]],["t/489",[0,0.88,2,3.648,62,5.188,193,4.784,492,2.684,1688,10.725]],["t/491",[0,0.818,2,4.26,56,0.891,68,1.574,77,2.342,106,5.178,121,1.983,123,2.047,148,2.148,164,3.522,193,3.818,207,1.574,227,2.024,235,1.911,288,1.07,304,2.191,402,4.278,414,1.911,632,3.818,633,3.356,660,2.469,705,4.369,753,3.991,926,4.369,946,5.341,1678,4.708,1689,6.019,1690,5.261,1691,6.019]],["t/493",[0,0.936,6,0.831,9,1.238,37,2.806,43,2.06,56,0.647,64,0.722,68,1.764,81,1.431,86,2.728,89,1.833,102,3.156,103,2.296,106,2.671,107,1.231,114,2.48,120,2.185,121,1.947,122,1.639,124,2.367,125,3.735,141,2.139,146,2.811,147,1.324,148,1.264,163,2.522,168,1.897,169,2.615,174,3.536,181,1.386,188,1.48,193,4.468,197,1.869,202,2.153,204,2.352,216,2.755,217,2.67,225,1.293,226,1.511,227,1.675,229,3.321,230,3.169,231,1.208,232,2.036,233,2.737,234,2.371,235,2.943,236,2.582,237,2.392,238,1.888,239,1.833,240,3.104,241,2.434,242,1.693,243,2.048,244,3.045,249,3.523,251,1.775,329,2.48,357,2.073,371,2.639,414,1.386,509,2.279,524,2.811,558,2.811,572,2.434,660,3.381,684,4.147,713,2.529,821,4.064,864,5.464,916,2.073,917,1.907,931,2.314,933,4.541,937,2.811,1016,2.737,1365,3.164,1669,5.644,1672,4.704,1673,6.232,1674,3.045,1692,5.275,1693,3.104]],["t/495",[0,0.611,3,2.842,36,2.325,48,3.813,79,4.669,106,4.412,121,1.159,123,1.87,141,4.857,160,3.775,161,4.394,210,6.313,211,4.556,212,4.244,213,5.916,214,6.233,215,3.418,225,2.206,226,2.578,227,1.514,411,1.604,505,4.611,775,4.796,874,3.887,1368,4.669,1694,7.449]],["t/497",[0,0.799,8,2.852,23,2.401,56,1.074,58,2.437,59,3.264,84,2.518,91,1.829,99,3.121,105,4.199,120,1.709,122,2.723,123,1.837,131,3.676,141,3.553,223,3.6,225,2.147,226,2.51,227,1.474,231,2.006,235,2.302,257,4.669,325,4.753,406,3.031,408,4.243,462,1.927,491,5.264,492,1.815,496,1.532,505,4.489,507,4.489,508,4.159,520,5.518,526,5.672,538,4.489,687,1.916,1592,3.785]],["t/499",[0,0.671,36,1.916,40,2.277,56,1.56,91,2.06,97,2.029,99,2.17,105,3.764,184,3.764,281,2.029,299,2.103,325,5.323,418,5.336,508,4.685,517,7.214,526,6.39,660,3.352,844,2.292,1495,6.366,1598,6.39,1599,6.593,1695,6.837,1696,7.55]],["t/501",[0,0.829,8,1.986,56,1.134,58,2.526,59,3.354,84,2.163,91,1.931,99,2.682,105,4.036,120,1.805,121,1.192,123,1.905,223,3.801,225,2.267,226,2.65,227,1.556,325,4.884,400,3.571,408,4.48,462,2.034,466,5.557,492,1.916,496,1.618,505,6.991,506,6.411,515,4.93,516,5.444,520,7.682,538,4.74,687,2.023,938,5.684,1592,3.996]],["t/503",[36,1.861,40,2.264,91,2.001,97,1.97,99,2.108,102,3.039,105,4.107,123,1.497,184,3.693,281,1.97,299,2.042,325,5.264,418,5.182,460,4.55,506,6.562,508,4.55,515,6.653,660,3.255,844,2.225,1495,4.796,1598,6.206,1599,6.402,1695,6.639,1697,8.341,1698,7.933]],["t/505",[8,3.156,56,1.529,84,2.772,99,2.742,105,3.689,224,5.862,532,6.741]],["t/507",[0,0.899,8,3.173,64,1.191,84,2.896,104,2.331,105,3.465,161,3.231,219,5.31,224,5.506,281,1.789,349,5.265,390,2.663,420,3.872,424,2.613,482,6.72,483,6.029,538,4.46,585,3.678,804,6.331,846,3.18,951,4.46,1002,3.53,1089,4.777,1408,5.95,1617,5.814,1699,7.204,1700,4.853,1701,6.658]],["t/509",[0,0.972,8,3.071,84,2.82,105,3.523,219,5.4,224,5.599,281,2.448,390,3.644,1702,9.11,1703,8.617]],["t/511",[0,0.922,5,2.955,6,1.241,90,2.365,99,2.763,103,3.429,105,4.696,120,1.537,124,2.288,143,3.739,146,4.197,160,3.304,161,2.173,163,2.438,169,2.528,190,2.819,210,3.328,213,2.972,229,2.627,251,2.651,258,3.077,286,2.764,318,2.989,325,5.741,365,2.593,371,3.941,372,4.197,428,4.635,444,8.755,446,7.576,447,4.589,448,3.897,449,2.699,450,6.025,451,5.099,452,3.815,463,3.776,464,2.923,465,3.739]],["t/513",[0,0.749,105,4.579,120,2.89,200,3.886,225,2.701,226,3.156,227,1.853,325,5.54,428,6.484,444,8.4,492,2.282,526,7.134,1695,7.632,1704,8.429]],["t/515",[0,0.595,6,1.38,8,2.526,36,1.701,48,2.789,68,1.896,77,1.266,84,2.086,99,2.92,105,4.199,121,1.129,146,4.669,148,1.359,163,2.712,188,2.458,196,3.486,229,2.922,230,5.264,325,5.081,357,3.443,400,5.126,418,4.736,428,5.156,432,4.885,444,6.67,463,4.2,464,3.252,465,4.159,662,4.108,792,7.179,1058,3.625,1090,3.702,1429,4.669,1510,5.058,1705,7.252,1706,7.252,1707,7.252,1708,7.252,1709,7.252]],["t/517",[0,0.691,56,1.247,84,2.301,85,3.605,105,3.01,137,4.362,140,5.367,166,2.523,171,3.125,174,3.213,207,2.202,215,2.904,286,4.552,321,3.335,325,4.643,328,3.66,418,8.131,444,5.769,463,4.877,464,3.776,465,6.157,492,2.107,667,5.5,688,5.5,1710,8.421,1711,8.421]],["t/519",[7,2.309,8,2.406,12,5.268,72,5.741,82,5.544,83,4.137,84,2.444,168,4.031,229,3.738,230,6.732,237,5.081,324,6.732,333,6.469,420,3.705,596,5.372,675,5.971,1342,6.594,1366,5.741,1712,8.571,1713,7.761,1714,9.275]],["t/521",[0,0.761,7,2.309,8,2.406,12,5.268,56,1.374,83,5.088,84,1.987,110,3.771,133,3.144,170,4.955,181,2.945,212,3.971,414,2.945,599,7.255,671,5.125,1060,5.814,1129,7.761,1332,8.108,1715,9.275,1716,7.485,1717,7.058]],["t/523",[0,0.646,6,1.499,56,1.167,68,2.06,82,4.708,84,1.688,99,2.092,121,1.226,152,5.002,162,3.937,164,4.609,222,5.494,288,1.4,298,3.133,324,5.717,346,3.695,565,4.278,625,4.432,666,3.59,712,4.145,749,4.657,766,6.591,783,6.356,785,6.591,788,6.356,809,5.6,814,4.517,954,4.762,1177,3.859,1666,5.002,1718,7.279,1719,5.847,1720,6.885,1721,7.877,1722,8.044,1723,7.877,1724,7.877,1725,7.877,1726,6.885,1727,6.591,1728,7.877]],["t/526",[0,0.881,8,2.786,66,4.428,84,2.533,85,3.605,104,2.725,105,3.01,133,2.854,157,2.187,194,4.927,219,6.476,224,4.783,281,2.091,312,3.066,324,7.793,367,4.695,463,6.219,464,4.815,479,4.181,577,6.112,666,3.839,1177,4.126,1729,8.399]],["t/528",[56,1.796,68,2.327,74,3.887,85,3.81,121,1.73,129,5.207,157,2.265,164,5.207,239,3.737,318,4.079,321,3.524,365,3.539,400,5.655,414,2.825,557,5.812,1122,7.779,1342,6.327,1730,8.899,1731,8.899,1732,6.771,1733,5.995]],["t/530",[6,1.708,8,2.328,84,1.922,89,3.767,121,1.894,129,5.249,171,3.329,184,3.206,239,3.767,318,5.122,324,6.512,400,5.941,747,5.859,757,5.554,960,7.842,1342,6.378,1732,6.827,1734,7.842,1735,8.971,1736,4.832]],["t/532",[0,0.646,2,2.679,8,2.044,14,4.391,66,4.142,83,3.513,84,2.204,168,3.423,181,2.501,199,4.391,206,3.292,215,2.716,367,4.391,375,4.36,414,2.501,463,5.956,464,4.612,527,4.762,539,5.629,577,5.717,594,4.853,630,4.111,723,5.6,931,4.175,1200,5.002,1342,5.6,1350,5.494,1736,4.243,1737,7.877,1738,7.877,1739,7.877,1740,7.877,1741,7.877,1742,6.356,1743,6.161]],["t/534",[0,0.788,2,3.265,6,1.827,13,4.503,84,2.496,105,3.431,181,3.048,222,6.695,224,5.452,227,1.951,248,5.738,375,4.07,424,3.482,527,5.803,539,4.451,1177,4.703,1666,6.097]],["t/536",[0,0.611,64,1.232,65,2.061,83,3.322,84,2.124,110,3.029,129,4.358,207,1.948,212,3.189,215,2.569,237,4.08,290,4.231,291,2.797,297,6.011,349,4.046,400,5.539,406,3.113,445,5.103,478,5.668,557,4.865,723,5.296,728,5.296,739,4.865,800,5.195,804,4.865,931,3.948,1069,3.723,1109,5.296,1131,8.295,1342,5.296,1366,4.611,1664,6.511,1666,4.731,1743,5.826,1744,7.449,1745,7.449,1746,7.449,1747,6.511,1748,7.449,1749,7.449,1750,8.665,1751,7.449,1752,6.233,1753,7.449,1754,7.449]],["t/538",[0,0.707,18,6.256,84,2.335,121,1.696,133,2.922,166,3.265,227,1.752,242,3.342,262,5.549,325,4.712,378,4.498,397,6.559,400,5.573,412,5.152,413,5.715,667,5.629,673,4.643,944,5.905,954,5.21,1342,6.128,1755,7.965,1756,7.965,1757,7.965,1758,6.956,1759,8.619]],["t/540",[13,3.92,28,5.38,66,4.395,84,1.791,100,4.361,139,5.38,161,2.785,166,2.504,169,4.568,207,2.185,298,3.324,313,4.702,321,3.31,325,5.368,333,5.828,375,3.543,411,1.799,446,9.857,931,4.429,954,6.459,1357,7.305,1478,6.359,1732,6.359,1736,4.501,1760,9.874,1761,7.722]],["t/542",[0,0.915,2,3.612,6,1.419,8,2.573,9,3.682,20,3.412,23,1.649,56,1.323,77,2.018,84,2.603,85,2.132,89,3.13,104,1.612,105,4.421,106,3.538,107,2.103,121,0.775,123,1.871,147,1.51,181,1.581,193,2.221,207,1.949,222,6.231,223,6.141,224,6.748,225,2.207,226,2.58,227,1.515,228,2.977,235,1.581,236,2.945,313,2.802,407,3.046,414,1.581,424,2.704,476,3.253,490,2.945,1178,3.083,1181,3.083,1762,4.603,1763,4.354,1764,4.98,1765,3.615]],["t/544",[0,0.742,23,2.995,56,1.34,57,1.741,58,2.264,59,2.686,99,2.403,105,4.366,229,3.645,257,5.824,325,4.857,375,3.835,492,2.264,505,5.599,520,6.883,526,7.075,740,5.532,792,5.908,1695,9.399,1704,10.379]],["t/546",[0,0.792,3,2.731,7,1.782,15,4.926,35,4.903,56,1.06,57,2.102,58,2.733,59,2.125,64,1.184,84,1.534,99,1.901,102,3.697,103,5.076,104,2.316,162,3.578,163,3.609,174,2.731,178,3.035,197,3.064,207,1.872,212,3.064,257,4.608,291,2.687,406,2.991,463,7.067,464,5.241,465,5.535,496,1.512,505,4.43,535,4.065,536,4.104,585,3.654,789,3.578,1766,8.076,1767,5.776,1768,7.157,1769,8.436]],["t/548",[40,1.782,213,4.795,465,6.033,631,4.46,776,5.666,1770,9.196,1771,6.871,1772,8.803]],["t/550",[463,6.336,464,4.905,631,4.638,1773,8.324]],["t/552",[0,0.703,40,2.189,42,3.029,56,0.891,57,1.917,58,2.981,64,0.995,81,1.973,90,3.613,91,2.158,121,0.937,123,1.615,171,3.176,207,1.574,215,2.076,225,1.782,226,2.083,227,1.223,239,2.527,394,1.506,463,4.957,464,4.467,477,3.326,496,2.517,505,3.726,549,3.356,587,5.538,683,2.374,918,3.451,1607,4.708,1769,5.261,1771,7.086,1774,8.308,1775,7.163,1776,8.335,1777,7.163,1778,7.482,1779,6.019,1780,6.019,1781,6.019]],["t/554",[0,0.856,8,2.706,40,2.073,84,2.235,161,4.227,242,3.122,281,2.591,288,1.431,390,2.976,420,4.167,482,4.616,506,5.112,515,5.183,634,7.795,1216,5.843,1774,5.614,1782,7.439,1783,8.05,1784,8.05,1785,8.05,1786,8.05,1787,5.614,1788,8.05,1789,10.431,1790,8.05]],["t/556",[12,5.862,30,4.532,178,4.376,291,3.876,331,5.09,463,7.046,464,5.455,492,2.583]],["t/558",[0,0.774,5,4.277,13,5.407,31,5.77,43,4.452,56,1.707,68,2.467,82,5.64,105,3.372,120,2.224,148,1.768,207,2.467,258,4.452,290,5.358,400,4.4,401,7.895,402,4.716,931,5.001]],["t/560",[8,2.886,13,5.219,56,1.797,81,2.92,82,3.807,84,2.668,85,4.763,105,3.671,120,1.501,121,1.731,129,3.726,131,4.514,148,1.193,157,1.814,171,2.363,206,2.662,209,2.856,219,3.488,224,5.059,242,2.469,244,6.212,284,3.061,288,1.132,310,4.222,400,5.657,457,5.817,458,5.139,494,3.299,556,4.622,799,5.567,927,4.222,937,6.613,1121,5.139,1579,4.981,1580,4.846,1581,5.329,1791,5.567,1792,5.139]],["t/562",[0,0.755,5,4.169,31,6.94,56,1.681,68,2.967,142,5.498,147,3.441,216,3.756,290,5.224,365,3.658,400,5.292,402,4.597,414,2.92,560,5.693,674,5.922,758,6.415,1084,4.954]],["t/564",[0,0.616,6,2.128,7,1.867,8,1.946,16,3.723,23,2.483,56,1.836,59,3.32,77,1.31,84,1.607,103,5.237,151,4.22,176,6.02,180,4.829,181,3.161,182,3.674,183,4.642,184,2.68,189,2.5,225,2.221,226,2.595,227,2.024,232,3.498,331,3.699,492,1.877,625,4.22,656,4.108,699,4.388,961,4.073,1108,2.731,1169,7.283,1772,6.276,1793,7.5,1794,7.5,1795,5.866]],["t/566",[0,0.966,1,4.335,2,4.005,6,1.86,8,2.535,23,3.235,56,1.447,77,1.706,78,4.557,104,3.162,189,3.256,286,4.142,494,5.061,833,7.642]],["t/568",[0,0.904,1,5.343,2,4.174,3,3.345,4,3.89,5,3.974,6,1.386,7,1.813,8,2.533,9,2.769,10,5.285,11,3.583,12,4.135,13,2.264,14,2.691,15,2.464,16,3.615,17,4.22,18,3.504,19,3.896,20,4.988,21,3.108,22,4.22,23,1.598,24,4.039,25,4.22,26,4.453,27,3.673,28,3.108,29,3.504,30,2.119,31,2.952,32,4.039,33,3.066,34,3.504,35,3.307,36,1.132,37,2.323,38,2.716,39,4.295,40,1.866,41,3.776,42,4.412,43,4.137,44,3.776,45,4.575,46,4.039,47,4.845,48,1.857,49,3.504,50,3.776,51,5.695,52,5.405,53,2.109,54,3.673,55,3.896,56,1.078,77,1.272,107,1.362,189,2.427,225,1.429,226,1.671,227,0.981,252,2.306,411,1.039,735,3.307,1796,6.365]],["t/570",[0,0.89,1,4.811,2,4.259,6,1.628,30,3.755,40,1.449,43,4.036,56,1.267,64,1.414,77,2.187,107,2.412,123,1.613,189,4.173,225,2.532,226,2.96,227,1.738,252,5.18,286,4.597,1796,7.476]],["t/572",[6,2.397,7,2.163,8,3.112,30,3.814,56,1.287,59,3.739,170,5.851,181,3.477,197,3.719,235,2.758,281,2.158,331,5.401,462,2.308,492,2.174,509,4.534,1108,4.585]],["t/574",[0,0.633,8,1.354,9,2.605,23,2.555,37,2.045,47,2.883,84,2.32,91,1.946,99,1.386,105,2.758,133,1.768,142,4.613,147,1.582,161,3.061,166,1.563,168,2.267,181,2.45,184,1.865,199,6.038,281,2.281,288,2.186,325,3.337,400,4.283,406,3.225,424,3.331,460,2.992,506,4.901,507,4.777,508,4.425,515,3.359,531,2.909,537,1.531,539,2.419,540,3.515,546,1.992,608,4.813,637,3.27,774,3.119,777,4.058,802,4.366,1020,4.706,1023,5.382,1176,2.81,1179,3.313,1582,3.154,1592,2.723,1595,3.62,1702,4.821,1797,6.703,1798,3.515,1799,7.684,1800,5.198,1801,5.382,1802,2.201]],["t/576",[8,1.195,9,2.416,13,2.16,37,2.525,84,2.485,91,1.161,99,1.223,105,2.511,110,1.872,120,1.085,157,1.941,158,2.85,161,3.42,166,1.379,181,2.23,184,1.646,188,2.887,199,3.917,215,1.588,224,2.615,235,2.23,281,2.115,288,2.112,312,1.676,325,1.991,349,2.501,385,2.135,390,2.597,400,3.276,406,1.924,460,4.029,468,3.154,483,3.853,487,3.273,488,2.403,506,2.924,507,2.85,508,2.64,515,2.964,535,2.615,536,4.029,537,2.062,546,2.46,549,2.567,608,4.758,637,5.339,662,1.943,777,4.479,804,3.007,846,2.032,932,2.752,951,2.85,962,2.011,1002,2.256,1020,4.142,1108,1.676,1179,2.924,1311,3.154,1408,2.501,1420,2.256,1458,2.46,1502,4.296,1503,3.917,1595,3.996,1618,3.154,1621,2.241,1626,2.886,1630,2.694,1631,4.025,1797,5.273,1802,3.594,1803,2.087,1804,3.273,1805,4.255,1806,3.211,1807,3.853,1808,3.418]],["t/578",[12,4.783,13,3.95,30,3.697,56,1.59,59,3.51,100,4.395,122,3.162,163,3.149,178,3.57,210,5.481,217,5.15,237,4.613,255,5.421,256,6.779,257,5.421,258,3.974,260,3.86,291,3.162,302,9.922,410,5.769,471,4.877,583,7.047,597,5.5,979,6.796,1809,8.421,1810,8.421,1811,8.421]],["t/580",[0,0.768,7,2.329,23,3.097,56,1.385,122,3.512,124,3.283,210,5.853,256,7.111,269,6.65,271,8.177,272,3.786,276,8.644,308,7.827,375,3.966,398,2.933,1495,5.655,1558,6.022,1812,8.644]],["t/582",[0,0.544,7,1.062,8,1.106,11,3.166,13,2,16,3.288,23,3.03,42,2.146,56,0.981,58,1.067,59,1.266,64,0.705,77,1.156,84,0.914,86,2.192,94,1.711,96,2.954,97,1.645,98,2.161,99,1.759,105,1.524,106,1.689,107,1.203,111,1.912,121,1.031,122,3.721,124,1.497,128,2.608,143,2.445,153,2.316,164,2.495,171,1.582,174,2.526,187,2.377,189,1.421,190,1.844,206,1.782,210,4.672,216,1.742,224,2.422,225,2.934,226,3.167,234,2.316,235,1.354,237,3.628,242,1.654,252,2.037,255,2.745,256,6.276,259,3.728,260,1.955,267,7.541,272,1.726,288,0.758,290,2.422,308,3.568,313,4.568,316,2.209,346,2,373,2.873,376,2.673,398,1.337,528,2.873,549,2.377,551,3.301,566,2.377,585,2.177,587,3.38,593,2.708,594,3.125,602,3.941,674,2.226,686,3.107,712,2.669,751,2.399,1074,6.35,1368,2.673,1431,3.441,1495,2.578,1558,2.745,1564,2.316,1685,2.708,1722,3.336,1733,2.873,1813,4.264,1814,4.264,1815,4.264,1816,3.941,1817,4.264,1818,3.728,1819,4.05,1820,4.264,1821,4.264,1822,4.264,1823,4.264,1824,4.264,1825,2.921,1826,3.941,1827,3.728,1828,3.941,1829,4.264,1830,4.264,1831,4.264,1832,4.264,1833,4.264,1834,5.541,1835,4.264,1836,4.264,1837,4.264,1838,4.264,1839,4.264]],["t/584",[6,2.404,8,3.123,30,3.845,56,1.297,170,5.88,181,3.494,197,3.749,210,4.47,225,2.593,226,3.03,227,2.566,235,2.78,331,5.936,394,2.191,504,3.992,509,4.57,1819,5.356]],["t/586",[0,0.703,9,1.707,40,1.019,56,1.607,62,2.911,64,0.995,77,1.495,100,3.141,123,1.615,133,2.04,147,1.825,148,1.604,160,4.338,209,2.699,216,2.458,225,3.212,226,3.755,227,2.421,231,1.665,291,2.26,311,3.356,364,2.859,447,3.051,543,4.857,559,4.279,699,3.522,717,3.077,732,3.051,733,3.486,764,2.656,918,3.451,1019,4.198,1034,3.681,1118,4.468,1504,4.279,1660,4.857,1840,4.198,1841,5.562,1842,5.562,1843,5.261,1844,5.562,1845,3.773,1846,4.708,1847,5.037,1848,4.58,1849,4.58,1850,4.369,1851,4.857,1852,3.991,1853,4.58,1854,5.037,1855,5.562,1856,8.039,1857,7.91,1858,9.205,1859,4.369]],["t/589",[0,0.661,2,4.313,64,1.331,77,2.269,106,5.146,121,1.253,148,1.955,229,3.244,288,1.431,304,2.931,364,2.122,394,2.015,411,1.733,414,2.556,717,2.283,890,4.336,946,5.687,1678,6.297,1860,7.439,1861,8.05,1862,7.439]],["t/591",[2,4.271,64,1.425,77,2.262,106,4.973,114,4.895,120,2.032,148,1.615,200,3.672,364,2.272,394,2.157,411,1.856,622,3.356,717,2.445,857,5.603,893,4.681,946,5.359,1208,4.223,1863,8.619]],["t/593",[2,4.358,37,2.417,64,1.508,77,1.593,106,5.075,146,5.872,148,1.709,161,4.271,364,2.404,394,2.282,717,2.587,1864,8.429,1865,8.429,1866,9.121,1867,8.429]],["t/595",[2,4.308,64,1.46,77,1.542,106,5.016,120,2.081,146,5.683,148,1.654,161,4.221,200,3.761,364,2.326,394,2.209,411,1.9,622,3.437,717,2.504,857,5.688,893,4.794,1208,4.325,1868,8.827]],["t/597",[0,0.661,2,2.738,64,1.331,77,2.269,106,5.146,121,1.974,148,1.955,229,3.244,288,1.431,304,2.931,364,2.122,394,2.015,411,1.733,414,2.556,717,2.283,890,4.336,946,5.687,1678,6.297,1860,7.439,1862,7.439,1869,8.05]],["t/599",[64,1.425,77,2.262,106,4.973,114,4.895,120,2.032,121,1.954,148,1.615,200,3.672,364,2.272,394,2.157,411,1.856,622,3.356,717,2.445,857,5.603,893,4.681,946,5.359,1208,4.223,1870,8.619]],["t/601",[37,2.417,64,1.508,77,1.593,106,5.075,121,1.994,146,5.872,148,1.709,161,4.271,364,2.404,394,2.282,717,2.587,1864,8.429,1865,8.429,1867,8.429,1871,9.121]],["t/603",[64,1.46,77,1.542,106,5.016,120,2.081,121,1.971,146,5.683,148,1.654,161,4.221,200,3.761,364,2.326,394,2.209,411,1.9,622,3.437,717,2.504,857,5.688,893,4.794,1208,4.325,1872,8.827]],["t/605",[36,2.104,64,1.484,77,1.567,106,5.045,121,1.983,148,1.681,161,4.056,210,4.58,213,4.09,364,2.364,394,2.245,411,1.931,505,5.554,717,2.545,1873,8.971,1874,11.174,1875,8.971]],["t/607",[6,2.072,30,3.122,64,1.589,77,1.242,84,1.524,92,6.303,93,4.078,100,3.711,104,2.301,148,1.333,157,2.556,170,3.799,207,1.859,227,1.445,315,8.281,321,4.31,364,1.874,394,1.78,411,1.531,597,4.644,658,6.558,668,3.316,717,2.017,869,5.95,870,4.96,943,4.078,1438,6.216,1876,6.278,1877,6.571,1878,9.609,1879,7.111,1880,9.609]],["t/609",[0,0.73,8,2.884,64,1.472,77,1.554,84,2.382,102,3.409,105,4.334,120,2.098,148,1.668,197,3.81,200,3.791,300,3.685,364,2.345,394,2.227,403,5.379,404,5.442,411,1.916,622,3.465,717,2.524,893,4.833,1881,7.754,1882,8.899]],["t/611",[0,0.815,2,3.378,6,1.623,8,2.212,9,3.547,20,4.101,56,0.887,64,1.41,77,2.076,84,2.548,89,3.58,104,1.937,105,4.373,106,2.371,110,2.434,121,0.932,123,1.609,147,1.815,148,1.122,181,1.9,193,2.67,207,1.565,223,5.903,224,6.497,227,1.733,228,3.578,235,1.9,236,3.539,364,1.578,394,1.498,407,3.661,414,1.9,424,3.093,572,3.337,660,2.456,717,1.698,890,3.224,1178,3.705,1181,3.705,1762,5.532,1883,5.009,1884,5.986,1885,5.532,1886,5.232]],["t/613",[8,2.309,64,1.472,77,1.554,84,1.907,105,4.334,120,2.098,148,1.668,200,3.791,364,2.345,394,2.227,411,1.916,412,7.593,413,8.422,622,3.465,717,2.524,893,4.833,1881,7.754,1887,8.899]],["t/615",[64,1.403,77,1.482,105,4.607,120,2.543,146,5.463,148,1.59,200,3.615,227,1.724,325,5.574,364,2.236,394,2.7,411,1.827,444,8.553,622,3.304,717,2.407,857,5.548,893,4.609,1027,6.159,1888,8.486]],["t/617",[9,3.648,64,1.393,77,1.875,105,4.596,120,1.985,121,1.311,123,1.589,148,1.578,181,4.083,197,3.605,282,3.239,364,2.219,394,2.107,400,3.927,412,5.034,413,5.583,717,2.388,1889,8.421,1890,6.796,1891,8.421,1892,8.421]],["t/619",[8,2.347,64,1.496,77,1.58,84,1.938,105,4.366,120,2.132,148,1.695,200,3.854,364,2.384,375,3.835,377,6.882,378,4.721,394,2.264,411,1.947,622,3.522,717,2.566,893,4.913,1881,7.834,1893,9.045]],["t/621",[8,2.104,9,2.3,61,4.11,64,1.341,77,2.028,105,4.543,120,1.912,123,1.53,148,1.52,235,2.575,282,3.119,306,5.766,313,4.563,364,2.137,374,4.606,377,6.612,380,7.598,394,2.029,499,3.922,717,2.3,890,4.368,1894,8.109,1895,8.109,1896,8.109,1897,7.494,1898,5.886]],["t/623",[64,1.46,77,1.932,105,4.318,148,1.654,235,2.802,364,2.326,377,6.508,380,7.571,394,2.209,449,3.655,717,2.504,879,6.512,890,4.755,1245,6.905,1899,8.157,1900,8.827,1901,8.157]],["t/625",[64,1.403,77,1.884,93,4.866,105,4.462,143,6.803,148,1.59,235,2.694,364,2.236,374,4.82,377,6.39,394,2.124,415,9.5,449,3.514,683,3.346,717,2.407,890,4.571,1229,7.101,1234,7.842,1252,6.299,1902,8.486,1903,8.486,1904,8.486]],["t/627",[64,1.602,68,2.532,77,1.691,105,4.5,121,1.507,148,1.815,364,2.552,394,2.424,400,4.516,717,2.747,917,4.23,1905,9.684,1906,9.684,1907,9.684,1908,9.684]],["t/629",[0,0.637,1,3.445,6,1.478,8,2.015,15,3.964,56,1.15,58,2.55,78,3.621,80,4.592,86,2.571,96,3.463,97,1.929,104,2.513,108,4.022,120,1.83,121,1.586,157,1.582,194,4.543,218,4.807,243,3.643,256,4.453,420,4.543,464,3.482,479,3.855,587,3.964,631,3.292,679,4.543,751,4.369,752,4.999,754,4.867,763,5.521,911,6.267,936,6.159,1381,4.497,1403,5.231,1437,5.909,1909,7.176,1910,7.765,1911,7.176,1912,7.765]],["t/631",[6,2.042,7,2.671,82,6.411,114,6.092,420,4.285,1347,7.481]],["t/633",[0,0.649,6,1.027,8,1.4,40,0.914,53,2.357,58,1.351,64,0.893,69,8.329,86,1.787,88,4.107,99,3.15,107,2.231,108,4.098,137,2.796,151,6.178,171,2.003,312,1.965,325,3.421,329,5.319,420,4.737,451,4.221,464,2.42,471,3.126,628,3.263,658,2.907,660,3.843,662,5.003,679,3.158,744,4.068,763,8.43,764,2.382,782,4.129,874,2.817,927,3.578,933,3.876,934,2.956,936,5.662,941,2.796,985,3.837,1019,3.764,1159,5.518,1360,4.107,1399,4.006,1403,3.636,1561,3.917,1663,4.718,1684,3.428,1850,3.917,1909,4.987,1913,4.987,1914,5.397,1915,6.62,1916,3.764,1917,4.221,1918,5.397,1919,4.516,1920,4.718,1921,5.167]],["t/635",[157,2.083,171,3.795,287,5.754,660,4.195,662,4.315,763,7.27,933,5.01,1381,5.922,1850,7.422,1852,6.78,1921,6.679]],["t/637",[6,1.555,23,2.705,56,1.56,64,1.351,69,5.93,90,2.963,104,2.644,121,1.272,148,1.531,153,4.437,171,3.032,287,4.597,292,4.515,376,5.121,420,3.264,631,3.464,658,4.401,660,3.352,662,3.447,686,3.833,751,4.597,752,6.78,754,7.716,933,4.003,985,5.808,1437,6.217,1850,5.93,1852,5.417,1921,5.336,1922,6.217,1923,8.17,1924,6.593,1925,6.217]],["t/639",[0,0.795,58,2.424,73,5.5,78,4.516,86,3.877,91,2.442,208,6.235,587,5.978,660,3.973,763,6.885,844,2.716,1911,8.949,1921,6.325,1922,7.369,1926,9.684]],["t/641",[0,0.73,30,3.907,68,2.907,100,4.644,108,4.609,215,3.069,231,2.462,235,2.825,354,3.907,398,2.79,420,3.555,551,3.618,632,3.969,755,5.995,763,6.327,792,5.812,809,6.327,874,4.644,934,4.875,1512,7.779,1916,6.206,1920,7.779,1927,11.118,1928,8.899,1929,8.899]],["t/643",[0,0.806,6,2.249,8,2.871,9,2.084,30,3.227,56,1.749,62,3.555,68,1.922,107,2.073,121,1.144,170,5.249,181,3.119,197,3.146,210,3.751,225,2.176,226,2.543,227,1.996,235,2.333,331,5.457,394,1.839,504,3.35,509,3.835,699,7.69,1819,4.495,1846,5.748,1847,6.15,1848,5.592,1849,5.592,1851,5.931,1852,4.873,1853,5.592,1854,6.15]],["t/645",[23,3.658,138,6.336,346,5.183]],["t/647",[8,1.776,9,3.027,40,1.808,56,1.387,57,1.318,64,1.132,77,2.166,95,4.472,96,4.176,97,2.325,110,4.665,111,4.785,121,1.065,148,1.283,166,2.051,181,2.173,189,3.824,252,4.472,332,5.66,346,4.392,357,3.25,394,1.713,534,3.964,537,2.009,565,3.718,671,3.782,890,3.687,946,5.145,1003,3.519,1069,3.421,1930,6.845,1931,10.671,1932,6.845,1933,6.845,1934,5.728]],["t/649",[23,3.622,138,6.273,535,6.213,932,6.539]],["t/651",[0,0.526,7,1.595,40,1.987,56,1.526,64,1.479,77,1.948,95,4.272,96,3.989,97,2.221,137,3.318,184,2.289,186,2.728,189,2.135,227,1.302,235,2.034,394,1.603,398,2.804,411,2.218,513,3.965,535,6.663,537,3.273,699,3.748,903,5.01,1003,5.298,1086,4.054,1169,6.302,1420,3.138,1592,3.343,1726,5.599,1935,12.153,1936,5.919,1937,5.919,1938,6.405,1939,6.405,1940,5.919,1941,5.919,1942,6.405,1943,6.405,1944,7.818,1945,5.919]],["t/653",[0,0.526,7,1.595,40,1.987,56,1.526,64,1.479,77,1.948,95,4.272,96,3.989,97,2.221,137,3.318,184,2.289,186,2.728,189,2.135,227,1.302,235,2.034,394,1.603,398,2.804,411,2.218,513,3.965,535,6.663,536,6.969,537,3.273,699,3.748,903,5.01,1003,5.298,1086,4.054,1169,6.302,1420,3.138,1592,3.343,1726,5.599,1936,5.919,1937,5.919,1940,5.919,1941,5.919,1944,7.818,1945,5.919,1946,6.405,1947,6.405,1948,6.405,1949,6.405]],["t/655",[0,0.784,7,1.392,37,2.778,40,2.154,57,2.364,61,4.114,64,1.342,91,2.047,96,3.62,110,3.3,121,0.87,123,1.055,182,2.738,184,2.901,186,3.656,288,1.698,311,3.116,411,1.203,535,5.427,536,4.654,537,2.805,547,2.159,656,3.062,764,2.467,961,3.036,1003,2.874,1016,5.088,1113,4.677,1420,2.738,1495,4.906,1579,4.372,1592,4.987,1662,4.149,1802,3.425,1944,7.095,1950,8.775,1951,4.372,1952,5.589,1953,5.589,1954,5.589,1955,5.589,1956,8.116,1957,8.116,1958,8.116,1959,4.372,1960,5.589,1961,5.589,1962,5.589]],["t/657",[0,0.856,6,2.203,8,2.706,30,3.534,57,1.55,58,2.896,59,3.436,64,1.331,163,3.011,170,5.573,181,3.312,197,3.446,227,1.636,235,2.556,239,4.38,331,5.144,411,1.733,492,2.61,496,2.445,509,4.201,587,5.325,683,4.114,1963,2.508]],["t/659",[0,0.724,23,2.923,57,1.699,58,3.023,59,3.873,94,3.542,98,6.419,120,2.608,124,3.098,207,2.308,227,1.794,411,1.9,492,3.023,496,1.865,687,2.333,1564,4.794]],["t/661",[36,1.809,37,3.003,40,1.718,57,1.484,65,2.806,91,1.944,97,1.915,123,1.455,174,2.942,281,1.915,282,2.966,288,1.37,299,2.917,326,6.357,328,3.351,379,5.517,462,2.048,496,1.629,537,2.263,585,3.936,608,3.164,687,2.038,777,4.055,834,2.798,836,2.193,837,2.187,844,2.163,1046,4.675,1051,7.361,1052,9.372,1963,2.403,1964,4.024,1965,2.381]],["t/663",[36,1.538,37,1.738,40,2.127,57,1.262,65,2.515,91,1.654,97,1.629,123,1.237,133,2.223,157,2.125,166,1.965,207,1.715,265,3.951,281,2.258,288,1.166,299,2.686,326,5.699,335,3.114,398,2.85,414,2.082,462,2.415,496,1.386,504,2.99,537,3.063,546,1.693,608,2.691,635,4.077,687,1.733,709,3.256,777,3.449,834,2.508,836,1.865,837,1.86,844,1.84,962,2.865,966,3.041,1046,4.191,1050,8.401,1086,2.973,1087,3.301,1802,2.767,1803,2.973,1963,2.044,1965,2.025,1966,3.256,1967,3.234,1968,5.293,1969,5.293,1970,5.293]],["t/665",[7,1.091,23,2.735,36,1.028,37,2.461,40,2.027,57,0.844,91,1.105,97,1.089,123,1.752,133,2.293,147,2.051,157,2.604,166,2.783,186,3.061,189,1.461,207,1.769,265,3.59,281,1.68,288,0.779,299,2.127,306,3.117,312,2.463,335,3.212,362,2.681,379,4.021,398,1.374,414,1.392,462,2.666,496,0.926,504,3.084,537,2.726,546,1.131,635,4.165,686,3.875,687,1.158,709,3.359,820,4.938,834,1.866,836,1.247,837,1.243,844,1.23,966,3.137,1001,2.748,1043,4.09,1046,3.119,1069,2.191,1086,3.067,1087,3.405,1108,2.463,1138,5.749,1802,1.85,1803,3.067,1963,1.366,1965,1.353,1966,3.359,1967,3.336,1968,3.538,1969,3.538,1970,3.538,1971,3.832,1972,3.832,1973,6.765,1974,7.221,1975,6.913,1976,7.221,1977,3.832,1978,3.832,1979,3.832]],["t/667",[36,1.771,37,2.001,40,2.023,57,1.454,65,2.767,91,1.904,97,1.875,123,1.425,157,2.037,281,1.875,288,1.342,299,2.887,326,6.27,390,3.698,398,3.136,462,2.006,496,1.596,537,2.936,608,4.104,687,1.995,777,3.971,834,2.76,836,2.148,837,2.142,844,2.118,1020,3.282,1046,4.611,1802,3.186,1963,2.353,1965,2.331,1968,6.094,1969,6.094,1970,6.094,1980,10.003]],["t/669",[2,3.268,36,1.668,37,1.884,40,1.974,57,1.369,65,2.658,91,1.793,97,1.766,147,2.156,174,2.713,211,5.877,228,4.251,260,3.26,281,2.386,282,3.696,288,1.264,299,2.802,326,6.023,328,3.09,379,5.674,462,1.889,496,1.503,537,2.087,546,1.835,585,3.63,622,3.742,687,1.879,715,3.206,834,2.651,836,2.023,837,2.017,844,1.995,1046,4.43,1963,2.216,1964,5.015,1965,2.195,1981,9.609,1982,7.111,1983,7.111]],["t/671",[36,1.724,37,2.932,40,1.664,57,1.415,65,2.718,91,1.853,97,1.825,123,1.386,140,3.673,174,2.804,281,1.825,282,4.735,288,1.306,299,2.849,326,6.937,328,4.269,379,5.75,462,1.952,496,1.553,537,2.157,608,3.015,622,2.862,687,1.942,777,3.865,834,2.71,836,2.09,837,2.084,844,2.061,1045,9.078,1046,4.529,1963,2.29,1964,5.127,1965,2.269]],["t/673",[0,0.719,8,2.272,23,2.899,57,1.686,58,3.012,59,3.864,84,1.876,105,3.13,120,2.594,207,2.29,227,1.78,258,4.132,325,3.786,411,1.885,492,3.012,496,1.85,505,7.451,687,2.314]],["t/675",[0,0.845,5,2.105,6,0.884,8,2.927,9,1.317,23,1.537,36,1.089,37,1.23,40,1.198,57,0.894,64,0.768,65,1.956,81,2.318,84,2.83,90,1.684,91,1.171,94,1.863,95,2.218,96,2.071,97,1.756,99,1.878,102,2.708,104,1.503,105,3.421,110,1.888,129,2.717,142,2.776,161,2.356,185,2.128,197,1.988,206,1.941,219,2.544,223,4.752,224,5.436,229,1.871,281,1.756,288,1.257,290,2.637,296,2.776,299,2.204,300,1.923,335,4.065,390,2.614,399,2.84,403,2.807,404,2.84,405,3.128,406,1.941,408,2.717,424,1.684,457,3.033,458,3.747,462,1.878,483,3.886,496,0.981,506,2.949,508,2.663,515,2.989,531,2.589,532,3.033,535,2.637,536,2.663,537,2.075,538,2.874,549,2.589,608,1.905,687,1.227,834,1.951,836,1.321,837,1.317,844,1.302,974,2.275,1020,2.018,1025,2.305,1046,3.259,1580,3.533,1592,2.423,1666,2.949,1963,1.447,1965,1.434,1984,3.533,1985,7.07,1986,6.18,1987,4.291]],["t/677",[0,0.719,23,2.899,57,1.686,58,3.012,59,3.864,94,3.513,96,5.633,97,2.175,120,2.594,124,3.074,207,2.29,227,1.78,411,1.885,492,3.012,496,1.85,687,2.314,1564,4.756]],["t/679",[36,1.809,37,3.003,40,1.718,57,1.484,65,2.806,91,1.944,97,1.915,123,1.455,174,2.942,186,3.093,281,1.915,282,2.966,288,1.37,299,2.917,328,3.351,379,5.517,462,2.048,496,1.629,537,2.263,585,3.936,608,3.164,687,2.038,777,4.055,834,2.798,836,2.193,837,2.187,844,2.163,1046,4.675,1051,7.361,1963,2.403,1964,4.024,1965,2.381,1988,10.142]],["t/681",[2,3.24,36,1.647,37,1.86,40,1.964,57,1.351,65,2.635,91,1.77,97,1.743,147,2.128,167,5.824,174,2.678,186,2.905,211,5.826,228,4.196,260,3.218,281,2.366,282,4.158,288,1.248,299,2.783,328,3.051,379,3.417,462,1.865,496,1.483,537,2.06,546,1.812,585,3.583,622,2.734,687,1.855,715,3.165,834,2.628,836,1.997,837,1.991,844,1.969,1046,4.391,1053,5.211,1963,2.187,1964,4.971,1965,2.167,1989,6.487,1990,9.525,1991,5.491,1992,5.491]],["t/683",[7,1.087,23,2.728,36,1.024,37,2.456,40,2.024,57,0.84,91,1.101,97,1.084,123,1.749,133,2.286,147,2.045,157,2.602,166,2.777,186,3.056,189,1.455,207,1.764,265,3.581,281,1.675,288,0.776,299,2.121,306,3.104,312,2.456,335,3.202,362,2.67,379,4.011,398,1.369,414,1.386,462,2.661,496,0.923,504,3.074,537,2.72,546,1.127,635,4.156,686,3.866,687,1.154,709,3.348,820,4.926,834,1.861,836,1.242,837,1.238,844,1.225,966,3.127,1001,2.737,1043,4.981,1046,3.109,1069,2.182,1086,3.057,1087,3.394,1108,2.456,1138,5.737,1802,1.842,1803,3.057,1963,1.36,1965,1.348,1966,3.348,1967,3.326,1968,3.523,1969,3.523,1970,3.523,1971,3.817,1972,3.817,1974,7.203,1975,6.896,1976,7.203,1977,3.817,1978,3.817,1979,3.817,1993,6.744]],["t/685",[36,1.784,37,2.015,40,2.028,57,1.464,65,2.78,91,1.917,97,1.888,123,1.435,157,2.292,186,3.065,252,3.632,281,1.888,288,1.351,299,2.897,390,2.811,398,3.151,462,2.02,496,1.607,537,2.949,608,3.12,687,2.009,834,2.772,836,2.163,837,2.157,844,2.133,1020,3.304,1046,4.633,1802,3.208,1963,2.369,1965,2.348,1991,5.948,1992,5.948,1994,10.049,1995,6.363]],["t/687",[36,1.576,37,1.78,40,1.928,57,1.293,65,2.557,91,1.694,97,1.669,123,1.268,133,2.278,157,2.153,166,2.013,186,2.82,207,1.757,252,3.21,265,4.018,281,2.296,288,1.194,299,2.721,335,3.19,398,2.898,414,2.133,462,2.456,496,1.42,504,3.063,537,3.102,546,1.734,635,4.145,687,1.776,709,3.336,834,2.55,836,1.911,837,1.906,844,1.885,962,2.935,966,3.115,1046,4.262,1086,3.046,1087,3.382,1150,7.736,1802,2.835,1803,3.046,1963,2.094,1965,2.074,1966,3.336,1967,3.314,1991,5.256,1992,5.256,1995,5.623]],["t/689",[2,2.551,36,1.759,37,2.962,40,1.687,57,1.444,65,2.755,91,1.891,97,1.863,123,1.415,140,3.749,174,2.861,186,3.41,281,1.863,282,4.3,288,1.333,299,2.878,328,4.327,379,5.797,462,1.992,496,1.585,537,2.201,622,2.92,687,1.982,834,2.747,836,2.133,837,2.127,844,2.104,1046,4.591,1963,2.337,1964,5.197,1965,2.315,1996,9.958]],["t/691",[0,0.894,23,2.854,57,1.659,58,2.991,59,3.846,74,3.765,106,4.316,120,2.569,197,3.69,227,1.752,258,4.068,411,1.856,492,3.142,496,1.821,687,2.278,1675,9.093,1819,5.271]],["t/693",[2,4.196,36,1.576,37,3.016,40,1.566,57,1.293,65,2.557,91,1.694,97,1.669,104,2.992,106,2.661,131,3.405,174,3.527,193,2.997,207,1.757,235,2.133,281,1.669,288,1.194,299,2.721,305,4.455,398,3.569,462,2.456,496,1.42,537,2.713,687,1.776,834,2.55,836,1.911,837,1.906,844,1.885,937,4.326,951,5.723,1046,4.262,1089,4.455,1090,4.719,1118,4.988,1690,8.081,1802,2.835,1963,2.094,1965,2.074,1997,5.422,1998,5.623,1999,5.623,2000,9.244]],["t/695",[0,0.489,36,1.397,40,1.439,57,1.146,65,2.739,91,1.501,97,1.479,102,3.253,103,3.131,104,2.748,120,1.403,121,1.68,124,2.09,174,3.24,193,3.788,207,1.557,216,2.432,235,2.696,281,1.479,288,1.058,299,2.549,305,3.947,368,3.448,371,3.599,385,2.76,398,3.104,462,2.256,496,1.258,537,2.493,660,3.485,687,1.573,834,2.343,836,1.693,837,1.689,844,1.67,864,5.631,916,5.635,917,4.986,937,3.833,951,5.257,1046,3.915,1089,5.631,1090,5.054,1118,4.419,1666,3.781,1802,2.512,1921,3.888,1963,1.855,1965,1.838,1997,4.804,1998,4.982,1999,4.982,2001,8.493]],["t/697",[2,4.106,36,1.822,40,2.045,57,1.495,65,2.819,91,1.958,97,1.929,106,3.075,131,5.164,193,3.463,281,1.929,288,1.38,299,2.927,398,3.565,462,2.063,496,1.641,537,2.279,687,2.052,715,3.501,834,2.811,836,2.209,837,2.202,844,2.178,1046,4.697,1802,3.276,1963,2.42,1965,2.397,2002,10.189,2003,7.765,2004,7.765]],["t/699",[36,1.848,40,2.056,57,1.516,65,2.845,91,1.986,97,1.956,121,1.889,193,4.587,281,1.956,288,1.4,299,2.948,398,2.47,462,2.092,496,1.664,537,2.312,687,2.081,715,3.551,834,2.837,836,2.24,837,2.234,844,2.209,916,3.74,917,3.441,1046,4.741,1802,3.323,1963,2.454,1965,2.432,2005,10.284,2006,7.877,2007,7.877]],["t/701",[2,2.679,36,1.848,40,1.742,57,1.516,65,2.845,77,1.796,91,1.986,97,1.956,106,4.073,121,1.226,148,1.927,186,2.402,193,3.513,281,1.956,288,1.4,299,2.948,462,2.092,496,1.664,537,2.312,687,2.081,715,3.551,834,2.837,836,2.24,837,2.234,844,2.209,951,6.366,1046,4.741,1090,4.021,1963,2.454,1965,2.432,2008,6.591,2009,10.284]],["t/703",[2,4.204,36,1.586,37,3.024,40,1.572,57,1.301,65,2.568,91,1.705,97,1.679,104,3.004,106,2.677,131,3.426,193,3.015,207,1.768,235,2.146,281,1.679,288,1.202,299,2.729,328,4.035,398,3.579,462,2.466,496,1.429,537,2.725,687,1.786,834,2.561,836,1.923,837,1.917,844,1.896,937,4.353,951,5.747,1046,4.28,1089,4.482,1090,4.739,1118,5.019,1690,8.115,1802,2.852,1963,2.107,1965,2.087,1997,5.456,1998,5.657,1999,5.657,2010,9.283]],["t/705",[36,1.626,40,1.6,57,1.334,65,2.612,91,1.748,97,1.721,104,3.056,121,1.672,193,4.212,207,1.812,235,2.201,281,1.721,288,1.232,299,2.765,328,4.104,398,3.368,462,2.509,496,1.465,537,2.772,687,1.832,834,2.605,836,1.971,837,1.966,844,1.944,916,5.476,917,4.692,937,4.463,951,5.846,1046,4.353,1089,4.596,1090,4.82,1118,5.145,1802,2.925,1963,2.16,1965,2.14,1997,5.594,1998,5.8,1999,5.8,2011,9.443]],["t/707",[0,0.719,8,2.272,23,2.899,57,1.686,58,3.012,59,3.864,84,1.876,105,3.13,120,2.594,207,2.29,227,1.78,258,4.132,325,3.786,411,1.885,491,8.737,492,3.012,496,1.85,687,2.314]],["t/709",[8,1.794,36,1.622,40,2.24,57,0.868,74,1.97,84,0.966,91,1.744,97,1.12,105,2.471,133,1.529,157,2.071,161,3.142,166,2.824,169,1.749,181,1.432,182,2.209,184,1.612,206,1.885,207,1.179,258,2.128,265,3.005,281,2.088,288,2.1,298,1.794,299,2.427,312,3.433,325,2.99,335,2.141,414,2.195,462,1.837,484,4.167,496,0.953,504,2.056,508,2.586,537,2.468,546,1.785,594,2.128,608,1.85,635,3.1,685,4.175,687,1.192,709,2.239,834,2.601,836,1.967,837,1.961,844,1.265,962,1.97,966,2.091,1018,2.319,1020,1.96,1086,2.044,1087,2.27,1108,2.517,1408,4.567,1648,3.206,1798,3.038,1803,2.044,1963,1.405,1965,1.392,1966,2.239,1967,2.224,2012,6.914,2013,6.914,2014,6.914,2015,6.39,2016,3.432,2017,2.47,2018,2.514,2019,5.261,2020,6.39,2021,4.167,2022,2.537,2023,4.167,2024,4.167,2025,4.167]],["t/711",[7,1.576,9,2.516,36,1.485,37,1.677,40,1.503,57,1.219,65,2.833,91,2.237,97,1.572,99,1.682,105,3.66,121,1.381,123,1.674,181,2.816,227,2.255,281,1.572,288,1.125,299,2.636,325,5.236,398,1.985,400,4.137,462,1.682,496,1.338,526,6.939,537,3.257,660,3.64,687,1.673,834,2.447,836,1.801,837,1.796,844,1.776,1025,3.143,1108,3.23,1495,5.363,1586,3.242,1802,2.671,1963,1.973,1965,1.955,2026,7.159,2027,8.871,2028,8.871,2029,8.871,2030,5.851]],["t/713",[36,1.557,40,1.553,57,1.278,91,2.312,97,1.649,105,3.276,123,1.729,133,2.25,157,2.139,166,1.989,206,3.831,207,1.736,265,3.984,281,2.608,288,1.18,299,2.703,325,3.964,335,3.151,414,2.107,462,2.435,496,1.403,504,3.026,508,3.806,537,3.324,546,1.713,608,3.761,635,4.111,687,1.754,709,3.295,834,2.529,836,1.888,837,1.883,844,1.862,962,2.899,966,3.078,1020,3.984,1086,3.009,1087,3.341,1248,5.902,1803,3.009,1963,2.068,1965,2.049,1966,3.295,1967,3.274,2031,9.167,2032,4.927]],["t/715",[40,1.767,57,1.55,65,2.886,91,2.918,97,1.999,105,4.136,123,1.519,281,1.999,288,1.431,299,2.979,325,5.004,462,2.139,496,1.701,508,4.616,537,3.062,687,2.127,740,6.379,834,2.878,836,2.29,837,2.283,844,2.258,1517,4.866,1963,2.508,1965,2.485,2030,7.439,2033,10.431]],["t/717",[0,0.555,8,2.751,9,2.633,36,1.586,40,1.572,56,1.001,57,1.301,65,2.568,84,2.563,91,1.705,97,1.679,105,2.416,129,3.956,223,5.264,224,3.84,229,2.724,281,1.679,288,1.202,299,2.729,400,3.153,415,7.064,461,4.353,462,1.796,496,1.429,535,5.273,536,5.324,537,2.725,538,4.185,608,2.774,626,5.91,628,4.087,629,5.288,630,3.528,687,1.786,834,2.561,836,1.923,837,1.917,844,1.896,1020,2.938,1046,4.28,1588,6.247,1963,2.107,1965,2.087,1986,8.115,2034,9.283]],["t/719",[9,1.562,36,2.222,40,2.071,56,1.189,57,1.06,64,0.91,65,2.221,91,1.388,97,1.367,105,3.721,123,1.514,181,1.748,184,2.869,235,3.008,257,5.168,281,2.353,288,0.978,299,2.439,325,5.287,398,2.97,400,2.567,418,7.547,462,1.463,496,1.163,505,4.969,508,3.157,517,7.133,518,4.087,520,6.108,537,1.616,660,2.259,687,1.455,834,2.215,836,1.566,837,1.562,844,2.657,1108,2.923,1495,4.853,1598,7.41,1599,4.443,1696,5.088,1697,3.996,1802,3.387,1963,1.715,1965,1.7,2035,8.027,2036,6.279,2037,8.027,2038,8.027]],["t/721",[8,1.57,15,5.1,36,1.42,37,2.882,40,1.455,57,1.165,91,2.167,97,1.503,105,2.163,123,1.621,133,2.051,157,1.75,160,4.355,161,3.33,166,1.813,190,3.716,207,1.582,265,3.734,281,2.481,288,1.527,299,2.572,325,2.617,335,2.873,414,1.921,462,2.283,496,1.279,504,2.759,508,3.471,537,3.192,546,2.218,608,3.526,624,4.077,635,3.853,687,1.599,709,3.005,777,3.183,834,2.371,836,1.721,837,1.717,844,1.697,962,2.643,966,2.806,1020,2.63,1086,3.895,1087,3.046,1803,2.743,1963,1.886,1965,1.868,1966,3.005,1967,2.985,2015,7.941,2039,8.593,2040,8.593,2041,5.593]],["t/723",[0,0.473,2,2.823,8,2.523,36,1.352,37,2.987,40,1.647,56,0.854,57,1.11,65,2.296,84,2.416,91,1.454,97,1.432,123,1.566,133,1.954,157,1.174,166,1.727,197,2.468,199,5.932,209,2.585,281,2.061,288,1.025,291,2.165,299,2.504,325,3.589,400,3.871,406,2.41,414,1.83,461,3.712,462,1.532,482,3.306,496,1.218,507,6.586,527,3.485,536,4.76,537,3.123,539,2.673,548,2.737,558,3.712,576,4.825,578,4.387,630,3.009,687,1.524,834,2.29,836,1.64,837,1.635,844,1.617,966,2.673,1002,2.825,1046,3.827,1153,3.409,1802,2.433,1803,2.614,1963,1.797,1965,1.78,2042,8.3,2043,8.3,2044,8.3,2045,8.3]],["t/725",[8,2.06,28,3.492,36,2.203,37,1.437,40,2.063,57,1.044,65,2.196,91,2.369,97,1.347,99,1.441,105,1.938,123,1.023,161,2.646,169,3.079,188,2.691,281,2.333,288,1.411,299,2.418,325,2.345,328,2.357,341,3.024,398,2.945,462,1.441,488,4.902,496,1.146,508,3.11,537,2.331,542,4.377,608,2.225,622,2.112,687,1.433,820,4.746,832,4.695,834,2.19,836,1.543,837,1.538,844,2.634,846,3.504,962,2.369,1018,2.789,1020,2.357,1108,3.42,1621,2.64,1628,2.946,1630,3.173,1802,3.963,1963,1.69,1965,1.675,2036,6.211,2046,6.327,2047,4.539,2048,3.937,2049,4.539,2050,4.242,2051,5.012,2052,7.94,2053,7.94,2054,3.596,2055,5.012,2056,5.012,2057,5.012,2058,4.741,2059,3.279,2060,4.377,2061,4.377]],["t/727",[0,0.596,8,2.268,36,2.051,37,1.923,40,2.138,57,0.925,65,2.008,91,2.205,97,1.194,99,1.928,105,1.718,123,1.369,161,3.247,181,1.526,188,3.302,202,2.37,207,1.257,281,1.802,288,1.554,299,2.251,325,2.078,328,3.154,398,1.507,414,1.526,416,3.657,462,1.277,485,3.568,488,5.458,496,1.016,508,2.756,537,2.13,608,1.972,622,2.826,671,2.656,687,1.27,834,2.002,836,1.367,837,1.363,844,2.453,846,4.299,918,2.756,962,3.17,1018,3.731,1020,2.089,1108,3.184,1621,3.533,1628,3.942,1630,4.246,1802,3.062,1806,3.352,1963,1.498,1965,1.484,2016,3.657,2036,5.677,2047,4.022,2050,3.759,2054,4.812,2055,4.441,2056,4.441,2057,4.441,2058,6.344,2059,4.387,2060,5.857,2061,3.878,2062,6.073,2063,3.488,2064,2.939,2065,7.257,2066,4.806,2067,4.806,2068,4.806]],["t/729",[8,1.941,36,2.101,37,1.982,40,2.157,57,0.963,91,1.886,97,1.243,105,1.788,123,0.944,161,2.986,181,1.588,188,3.036,227,1.017,281,1.858,288,1.592,299,2.306,325,2.163,328,3.251,398,1.569,414,1.588,462,1.329,485,3.714,488,3.904,496,1.057,508,2.869,537,1.469,608,2.053,622,2.913,671,2.765,687,1.322,834,2.064,836,1.423,837,1.419,844,2.513,846,4.387,918,2.869,962,3.267,1018,3.846,1020,2.174,1058,2.501,1108,3.874,1621,3.641,1628,4.063,1630,4.377,1802,3.156,1806,3.49,1963,1.559,1965,1.545,2016,3.807,2036,5.851,2054,4.959,2059,4.522,2060,6.036,2061,4.038,2064,3.06,2069,3.49,2070,4.187,2071,7.48,2072,6.912,2073,6.912,2074,7.48,2075,6.912,2076,5.003,2077,5.003,2078,5.003,2079,7.48,2080,5.003,2081,5.003,2082,5.003]],["t/731",[36,1.796,37,2.992,40,1.71,57,1.474,65,2.793,91,1.931,97,1.902,105,4.036,120,1.805,161,2.552,227,1.556,281,2.507,288,1.361,299,2.907,325,3.311,444,5.245,462,2.034,496,1.618,537,2.247,546,1.976,586,7.327,687,2.023,715,3.452,834,2.785,836,2.178,837,2.172,844,2.148,1046,4.654,1208,3.751,1589,7.076,1963,2.386,1965,2.364,2083,7.657,2084,10.095]],["t/733",[8,2.673,36,1.502,38,3.604,40,1.889,57,1.233,65,2.474,84,2.514,91,1.615,97,1.591,131,4.533,142,5.346,281,2.559,288,1.138,299,2.652,390,3.306,424,2.323,462,1.702,496,1.353,506,4.068,515,4.124,531,3.571,537,1.88,538,3.965,539,2.97,546,1.653,637,4.015,687,1.693,774,3.829,834,2.467,836,1.822,837,1.817,844,1.797,846,4.548,1046,4.123,1108,3.256,1592,3.343,1595,4.834,1598,5.01,1599,5.169,1800,4.315,1801,4.467,1963,1.996,1965,1.978,2085,8.943,2086,6.405,2087,6.405,2088,6.405,2089,5.919,2090,6.405,2091,6.405]],["t/735",[0,0.517,2,3.005,8,2.648,36,1.477,37,2.705,40,1.496,56,0.932,57,1.212,65,2.444,84,2.498,91,2.228,97,1.563,105,3.648,123,1.667,133,2.134,157,1.282,166,1.886,197,2.695,281,2.194,288,1.119,291,2.364,299,2.628,325,4.414,406,2.631,414,1.999,461,4.053,462,1.672,482,3.61,496,1.33,508,3.61,527,3.805,537,2.996,539,2.919,548,2.989,558,4.053,575,5.268,578,4.79,630,3.285,687,1.663,834,2.437,836,1.791,837,1.785,844,1.766,966,2.919,1002,3.084,1046,4.073,1153,3.722,1601,8.165,1803,2.854,1963,1.961,1965,1.944,2092,8.835]],["t/737",[8,2.265,13,2.903,36,1.452,38,3.482,40,1.962,54,4.709,57,1.191,65,2.415,84,2.576,91,1.561,97,1.537,178,2.624,183,3.831,188,2.098,265,2.689,281,2.168,288,1.1,299,2.604,390,2.288,462,1.644,482,5.8,496,1.308,508,3.549,515,3.984,537,1.816,548,2.938,608,2.539,687,1.635,834,2.408,836,1.76,837,1.755,844,1.736,846,2.731,962,2.703,1002,3.032,1020,2.689,1108,3.178,1311,4.239,1408,3.361,1420,3.032,1595,2.903,1598,4.841,1621,3.012,1622,5.41,1623,5.179,1626,3.879,1627,4.239,1628,3.361,1630,3.621,1805,5.719,1963,1.928,1965,1.911,2093,8.73,2094,6.188,2095,6.188,2096,6.188,2097,6.188,2098,6.188,2099,6.188,2100,6.188,2101,6.188,2102,6.188]],["t/739",[0,0.694,8,2.195,36,2.316,40,1.433,57,1.14,65,2.34,91,2.489,97,1.471,99,2.248,105,2.116,161,3.29,181,1.88,188,3.346,207,1.548,227,1.719,281,1.471,288,1.052,299,2.541,325,2.56,407,5.174,411,1.275,414,1.88,462,1.573,486,3.989,488,6.183,496,1.251,508,3.396,537,2.483,608,2.429,635,2.655,687,1.565,834,2.334,836,1.684,837,1.679,844,2.769,1020,2.573,1108,3.594,1963,1.845,1965,1.828,2036,6.618,2046,3.989,2047,4.955,2049,4.955,2062,4.955,2070,4.955,2072,7.818,2073,7.818,2075,7.818,2103,4.21,2104,4.056,2105,8.46,2106,8.46,2107,8.46,2108,5.921]],["t/741",[8,1.418,15,1.711,23,1.11,36,2.064,37,1.449,40,2.273,43,1.582,48,1.289,49,2.433,53,3.489,57,0.645,65,1.512,84,1.885,91,1.746,97,1.719,99,1.452,104,1.085,105,1.198,120,1.289,133,1.136,138,4.58,161,1.117,184,2.854,232,2.55,235,1.064,281,1.358,288,0.596,299,2.562,311,1.869,312,3.203,325,1.45,390,1.239,398,1.714,407,2.05,424,2.511,462,0.891,492,1.368,496,0.708,508,4.58,537,1.605,546,1.787,547,3.397,687,0.886,834,1.508,836,0.954,837,0.951,844,1.942,846,3.525,961,1.821,962,3.489,1001,2.101,1012,3.86,1018,4.523,1108,1.991,1177,1.642,1420,2.679,1502,4.234,1503,3.86,1586,1.225,1592,2.853,1595,1.573,1621,3.888,1628,4.778,1637,3.968,1643,5.678,1644,5.57,1646,6.247,1802,1.414,1963,1.045,1965,1.035,2109,3.352,2110,8.72,2111,3.352,2112,3.352,2113,5.467,2114,3.098,2115,3.098,2116,2.93,2117,3.098,2118,7.38,2119,7.38,2120,7.38,2121,3.098,2122,5.052,2123,3.098,2124,3.098,2125,3.098,2126,2.93,2127,2.93,2128,3.098,2129,3.098,2130,3.098]],["t/743",[8,2.33,36,2.425,40,1.521,57,1.24,65,2.859,81,2.112,91,2.82,97,1.6,105,2.303,123,1.216,161,3.445,173,4.148,181,2.045,281,1.6,282,2.478,288,1.145,299,2.661,310,4.272,312,2.346,321,2.552,325,2.786,414,2.045,462,1.712,488,6.136,492,1.612,496,1.361,508,3.695,537,2.636,585,3.289,608,2.643,687,1.703,776,3.47,834,2.477,836,1.833,837,1.827,844,2.899,1020,2.8,1060,4.039,1403,4.34,1963,2.008,1964,3.362,1965,1.989,2036,7.024,2049,5.391,2050,5.04,2062,5.391,2131,7.247,2132,5.954,2133,5.632,2134,8.98]],["t/745",[0,0.724,23,2.923,57,1.699,58,3.023,59,3.873,94,3.542,95,6.05,120,2.608,124,3.098,207,2.308,227,1.794,411,1.9,492,3.023,496,1.865,687,2.333,1564,4.794]],["t/747",[36,1.809,37,3.003,40,1.718,57,1.484,65,2.806,91,1.944,97,1.915,123,1.455,174,2.942,186,3.093,281,1.915,282,2.966,288,1.37,299,2.917,328,3.351,379,5.517,462,2.048,496,1.629,537,2.263,585,3.936,608,3.164,687,2.038,777,4.055,834,2.798,836,2.193,837,2.187,844,2.163,1046,4.675,1051,7.361,1963,2.403,1964,4.024,1965,2.381,2135,10.142]],["t/749",[2,3.24,36,1.647,37,1.86,40,1.964,57,1.351,65,2.635,91,1.77,97,1.743,147,2.128,167,5.824,174,2.678,186,2.905,211,5.826,228,4.196,260,3.218,281,2.366,282,4.158,288,1.248,299,2.783,328,3.051,379,3.417,462,1.865,496,1.483,537,2.06,546,1.812,585,3.583,622,2.734,687,1.855,715,3.165,834,2.628,836,1.997,837,1.991,844,1.969,1046,4.391,1053,5.211,1963,2.187,1964,4.971,1965,2.167,1989,6.487,1991,5.491,1992,5.491,2136,9.525]],["t/751",[7,1.087,23,2.728,36,1.024,37,2.456,40,2.024,57,0.84,91,1.101,97,1.084,123,1.749,133,2.286,147,2.045,157,2.602,166,2.777,186,3.056,189,1.455,207,1.764,265,3.581,281,1.675,288,0.776,299,2.121,306,3.104,312,2.456,335,3.202,362,2.67,379,4.011,398,1.369,414,1.386,462,2.661,496,0.923,504,3.074,537,2.72,546,1.127,635,4.156,686,3.866,687,1.154,709,3.348,820,4.926,834,1.861,836,1.242,837,1.238,844,1.225,966,3.127,1001,2.737,1043,4.981,1046,3.109,1069,2.182,1086,3.057,1087,3.394,1108,2.456,1138,5.737,1802,1.842,1803,3.057,1963,1.36,1965,1.348,1966,3.348,1967,3.326,1968,3.523,1969,3.523,1970,3.523,1971,3.817,1972,3.817,1974,7.203,1975,6.896,1976,7.203,1977,3.817,1978,3.817,1979,3.817,2137,6.744]],["t/753",[36,1.784,37,2.015,40,2.028,57,1.464,65,2.78,91,1.917,97,1.888,123,1.435,157,2.292,186,3.065,252,3.632,281,1.888,288,1.351,299,2.897,390,2.811,398,3.151,462,2.02,496,1.607,537,2.949,608,3.12,687,2.009,834,2.772,836,2.163,837,2.157,844,2.133,1020,3.304,1046,4.633,1802,3.208,1963,2.369,1965,2.348,1991,5.948,1992,5.948,1995,6.363,2138,10.049]],["t/755",[0,0.836,31,2.769,36,1.062,37,1.2,40,1.6,57,0.872,65,1.919,89,1.902,90,3.427,91,1.142,97,1.125,123,0.854,133,1.535,157,2.537,158,5.848,166,1.357,167,2.439,169,1.756,171,1.68,174,1.728,186,3.799,188,1.535,207,1.184,234,2.46,245,4.243,251,1.841,265,3.014,281,2.346,288,0.805,299,2.17,321,2.747,328,1.968,334,3.789,335,2.15,354,1.988,357,4.002,398,3.849,407,2.769,408,4.058,414,1.438,462,2.51,492,1.133,496,0.957,504,2.064,512,2.678,537,2.474,596,2.623,635,3.11,662,1.911,687,1.197,709,2.248,834,1.914,836,1.288,837,1.284,844,1.27,934,2.481,941,3.593,962,3.03,966,2.1,1046,3.198,1071,3.789,1086,2.053,1087,2.279,1307,6.063,1412,2.803,1592,3.62,1802,1.911,1803,2.053,1963,1.411,1965,1.398,1966,2.248,1967,2.233,1991,3.542,1992,3.542,1995,3.789,2139,4.528]],["t/757",[2,2.483,3,2.785,36,1.712,37,2.922,40,1.657,57,1.405,65,2.706,79,4.576,91,1.841,97,1.813,123,1.377,140,3.649,174,2.785,186,3.364,214,6.109,281,1.813,282,4.242,288,1.297,299,2.839,328,4.25,379,5.735,462,1.939,496,1.543,505,4.519,537,2.143,622,2.843,687,1.929,834,2.698,836,2.076,837,2.071,844,2.048,1046,4.509,1963,2.275,1964,5.104,1965,2.254,2140,9.78]],["t/759",[0,0.702,1,3.794,3,3.263,6,2.459,8,3.248,16,4.246,23,2.831,29,6.207,33,5.431,68,2.236,92,4.953,93,4.904,94,3.431,98,4.334,99,2.272,148,2.032,195,5.23,316,4.43,365,3.402,498,5.859,551,3.477,875,4.304,930,5.67,2141,5.965]],["t/761",[56,1.604,215,3.735,834,2.988,843,6.475,2142,9.064]],["t/763",[0,0.839,6,1.946,8,2.653,98,5.183,99,2.717,329,5.808,398,3.206,551,4.158,1743,7.998,2143,7.422,2144,8.252]],["t/765",[6,1.948,8,2.029,9,2.218,36,1.834,40,2.257,48,3.008,53,3.416,56,1.158,81,2.564,98,3.964,99,2.078,107,2.206,111,3.507,121,2.074,147,3.46,218,4.841,288,2.291,304,4.408,868,4.321]],["t/767",[0,0.785,6,1.821,9,3.077,36,2.727,37,3.393,42,4.815,56,1.417,63,4.759,64,1.168,77,1.671,81,2.316,98,4.849,104,2.286,121,1.891,123,1.333,133,2.395,181,3.444,189,2.355,288,1.7,304,2.572,326,5.997,513,4.373,562,3.531,643,3.745,699,4.134,982,5.702,1114,6.557,2145,7.065,2146,5.486,2147,7.065,2148,7.065]],["t/769",[0,0.647,1,1.808,2,2.174,4,1.808,6,1.7,7,1.014,8,2.891,9,3.052,16,2.023,36,2.095,37,2.089,39,1.996,40,2.188,42,2.051,43,3.721,52,4.744,77,1.797,90,2.86,98,3.996,99,1.082,104,1.318,107,1.149,111,2.866,121,1.39,123,0.769,124,1.43,157,0.83,181,1.294,189,3.586,190,3.41,198,2.292,207,1.065,216,1.664,252,1.946,304,1.483,312,1.483,316,2.11,326,2.554,354,1.789,365,1.621,368,2.36,414,1.294,539,1.889,547,1.573,593,5.008,635,1.827,662,1.719,671,2.251,733,2.36,734,2.745,831,2.126,846,1.798,868,2.251,946,1.827,967,2.409,968,2.409,969,2.463,996,2.463,998,2.842,999,3.1,1001,2.554,1002,1.996,1003,4.054,1005,2.251,1007,2.554,1008,2.661,1009,2.435,1010,3.765,1011,4.059,1018,2.095,1019,2.842,1025,2.023,1030,7.317,1034,2.492,1265,2.957,1336,5.853,1661,2.957,1662,3.025,1765,2.957,1787,5.499,2149,4.074,2150,4.074,2151,4.074,2152,4.074,2153,3.288,2154,3.025,2155,3.409,2156,3.409,2157,3.288,2158,3.288,2159,2.957,2160,2.522,2161,2.791,2162,4.074]],["t/771",[0,0.855,6,1.528,7,1.371,36,1.883,39,2.697,45,2.873,56,1.189,57,1.824,58,3.249,59,3.287,91,2.024,98,2.79,107,2.264,120,2.454,121,1.621,123,1.039,124,2.817,159,3.221,189,2.675,193,4.225,225,1.63,226,1.905,227,2.116,239,4.372,243,2.583,288,1.427,496,2.713,551,2.238,562,2.752,643,2.918,662,2.323,852,5.146,853,4.746,862,3.451,864,3.65,916,3.811,917,3.506,2146,4.603,2163,4.812,2164,6.478,2165,7.017,2166,4.812,2167,3.772]],["t/773",[0,0.816,6,1.424,36,2.791,39,2.451,48,3.445,56,1.108,57,0.963,58,3.099,89,3.141,91,1.886,107,2.527,120,1.763,121,1.893,123,1.411,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,2.162,238,4.298,239,3.141,243,3.509,288,1.767,304,2.723,387,2.573,449,2.072,496,2.617,562,2.501,643,2.652,683,3.92,684,2.518,852,4.063,853,4.423,916,4.719,917,4.342,2146,4.289,2163,4.374,2164,6.036,2165,6.538,2166,4.374,2168,2.673,2169,4.959,2170,5.851,2171,6.036]],["t/775",[0,0.735,6,1.424,36,2.714,39,2.451,48,3.445,53,3.913,56,1.108,57,0.963,58,3.099,89,3.141,91,1.886,107,2.527,120,1.763,121,1.957,123,1.411,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,2.02,238,4.298,239,3.141,243,3.509,288,1.767,304,2.723,387,2.573,449,2.072,496,2.617,562,2.501,643,2.652,683,3.92,684,2.518,852,4.063,853,4.423,916,4.253,917,3.913,2146,4.289,2163,4.374,2164,6.036,2165,6.538,2166,4.374,2168,2.673,2169,4.959,2172,5.851,2173,6.036]],["t/777",[0,0.666,36,2.459,40,1.775,48,3.119,53,3.542,57,1.561,58,2.029,59,2.408,91,2.045,97,2.014,107,2.287,121,1.911,125,4.224,258,3.827,288,1.441,299,2.698,312,2.953,357,3.85,387,4.17,492,2.029,663,6.336,834,2.891,836,2.307,837,2.3,839,6.171,844,2.275,1700,5.463,2168,4.333,2174,6.171,2175,6.786]],["t/779",[0,0.603,2,2.5,8,1.907,9,2.084,36,2.304,37,1.947,42,3.699,48,4.256,53,4.834,56,1.088,59,2.182,84,1.575,98,3.725,102,2.815,108,3.807,121,2.072,123,1.386,157,2.001,158,4.549,174,3.748,188,2.491,197,4.206,207,1.922,242,2.85,251,2.988,326,6.937,375,3.116,406,3.072,477,4.061,504,3.35,662,3.101,663,4.443,875,3.699,2176,4.443,2177,4.495]],["t/781",[0,0.936,6,2.171,8,2.406,98,4.701,107,3.217,121,1.775,147,2.812,229,3.738,243,4.351,284,4.458,452,5.427,562,4.636,759,4.544,821,4.574,1069,4.636,1563,7.058,2168,4.955,2178,6.732]],["t/783",[6,2.022,84,2.276,160,5.383,161,3.54,420,4.243,875,5.346,1412,6.575]],["t/785",[0,0.755,6,2.343,8,2.386,74,4.017,78,4.289,81,3.015,105,4.056,108,4.764,109,7.422,110,3.739,111,4.124,120,2.675,133,3.117,161,3.782,181,2.92,420,4.533,875,4.629]],["t/787",[0,0.656,2,2.296,7,1.233,8,0.964,9,1.054,14,2.762,15,2.529,23,1.231,37,1.313,38,1.196,40,2.304,41,1.662,42,2.493,45,1.109,48,0.817,57,0.954,59,1.104,64,1.228,65,0.588,67,1.662,68,1.554,77,1.038,78,0.991,84,1.987,99,1.579,108,1.101,121,0.579,122,0.798,147,0.644,160,2.511,161,2.827,162,1.062,166,1.114,171,2.205,181,1.18,182,1.821,190,0.919,199,2.762,223,1.845,225,0.629,231,1.028,235,0.675,258,1.754,281,0.528,286,0.901,288,0.661,312,1.804,331,1.048,338,2.428,385,0.985,406,2.484,411,0.457,416,1.617,420,1.979,424,2.449,453,6.776,463,1.231,465,1.219,479,1.055,507,1.315,527,1.285,531,2.072,539,2.297,546,2.189,549,2.072,588,2.828,624,3.337,634,3.337,660,0.872,846,0.938,869,3.033,875,1.07,931,1.126,974,2.427,1005,1.174,1018,1.911,1025,1.055,1084,2.002,1169,1.3,1175,3.77,1176,1.145,1177,1.041,1178,1.315,1216,2.698,1311,1.456,1334,1.778,1420,3.308,1429,1.368,1582,1.285,1592,1.94,1595,2.324,1607,2.907,1618,6.354,1628,1.154,1766,1.778,1771,1.388,1774,8.044,1787,1.482,1834,1.778,1876,1.145,1922,3.77,2179,3.11,2180,1.858,2181,3.249,2182,5.943,2183,2.125,2184,2.125,2185,4.954,2186,2.125,2187,1.715,2188,3.717,2189,4.412,2190,2.125,2191,2.125,2192,3.717,2193,1.715,2194,4.145,2195,2.125,2196,2.125,2197,2.125,2198,2.125,2199,2.125,2200,2.125,2201,2.125,2202,2.125,2203,2.125,2204,2.125,2205,2.125,2206,2.759,2207,1.964,2208,2.125,2209,3.717,2210,2.125,2211,4.954,2212,1.542,2213,1.715,2214,2.125,2215,2.125,2216,3.717,2217,2.125,2218,2.125,2219,2.125,2220,1.858,2221,2.125,2222,2.125,2223,3.717,2224,2.125,2225,1.778,2226,1.964,2227,3.435,2228,1.964,2229,3.717,2230,2.125,2231,3.435,2232,2.125,2233,2.125,2234,1.964,2235,1.778,2236,1.778,2237,1.964,2238,1.964,2239,2.125,2240,1.964,2241,1.858,2242,1.964,2243,1.964,2244,1.858,2245,1.964,2246,1.964,2247,3.249,2248,1.858,2249,2.125,2250,1.617,2251,2.125]],["t/789",[0,0.821,2,2.57,3,1.935,7,1.882,15,2.589,16,2.518,23,1.679,30,2.227,37,2.002,40,1.28,56,1.338,57,0.976,58,1.269,59,2.244,64,0.839,65,2.499,76,3.066,84,1.087,102,1.943,121,0.79,133,1.719,147,1.538,148,0.951,161,3.567,199,5.035,231,1.403,288,1.605,312,3.644,375,2.151,385,2.352,390,1.875,396,2.938,402,2.536,408,2.968,420,3.019,424,3.63,462,2.399,492,1.269,496,1.072,531,4.213,536,2.909,624,3.417,832,2.999,834,2.085,836,1.443,837,1.439,913,2.999,974,3.703,1023,3.538,1046,2.339,1047,3.968,1084,2.732,1175,3.86,1176,2.732,1178,3.14,1179,3.222,1220,6.421,1310,2.938,1582,3.066,1583,3.313,1586,1.854,1591,4.688,1595,3.545,1618,3.475,1660,4.094,1798,3.417,2179,4.245,2250,3.86,2252,8.845,2253,4.245,2254,7.557,2255,3.86,2256,5.073,2257,5.073,2258,5.073,2259,5.073,2260,5.073,2261,5.073]],["t/791",[0,0.889,2,1.169,7,1.389,8,1.827,9,0.975,15,1.754,16,1.706,23,1.847,37,0.91,40,2.137,42,2.808,56,0.509,59,2.407,64,1.579,68,1.459,77,0.6,78,2.602,84,2.045,85,1.471,99,1.482,104,1.805,105,3.185,108,2.89,121,1.387,123,0.648,161,2.701,171,2.07,181,1.091,207,0.899,215,1.185,225,1.017,227,0.698,235,1.771,281,0.853,288,0.991,312,2.951,325,4.127,375,1.457,385,1.593,387,1.767,396,1.99,402,1.718,406,2.332,411,0.74,416,2.615,418,2.244,420,2.813,453,6.167,463,3.231,464,2.501,465,3.199,477,1.899,479,1.706,482,1.971,506,4.472,508,1.971,512,2.032,515,2.212,538,2.127,546,1.817,624,2.315,630,3.675,855,2.315,974,3.45,996,3.372,1018,1.767,1025,1.706,1265,2.494,1311,2.354,1429,2.212,1595,1.612,1607,4.363,1628,1.866,1766,2.876,1771,3.643,1774,7.761,1775,2.876,1776,4.668,1777,2.876,1782,5.155,1787,2.397,1922,4.245,2189,4.141,2206,2.551,2212,2.494,2225,2.876,2226,3.176,2227,5.155,2228,3.176,2236,2.876,2252,2.615,2253,2.876,2255,2.615,2262,7.042,2263,3.436,2264,3.436,2265,3.436,2266,6.507,2267,3.004,2268,3.004,2269,3.004,2270,6.782,2271,3.436,2272,3.436,2273,7.042,2274,3.004,2275,3.436,2276,3.436,2277,3.176]],["t/793",[6,2.253,74,4.306,78,4.597,107,2.781,108,5.106,109,7.956,110,4.008,111,4.421,160,4.997,161,3.286,420,3.938,875,4.962,1310,5.71,1412,6.102]],["t/795",[6,2.002,160,6.235,161,4.1,420,4.914,875,5.295]],["t/797",[0,0.932,40,2.236,62,3.23,64,1.104,78,3.114,83,2.979,108,3.459,161,3.784,162,3.338,181,3.605,183,4.134,231,1.847,258,5.358,281,2.286,312,3.836,346,4.319,420,2.668,463,3.868,465,3.83,479,3.315,513,4.134,836,2.618,872,3.459,875,4.633,1216,4.847,1310,3.868,1604,5.588,2181,5.838,2193,5.389,2278,6.678,2279,9.206,2280,11.354,2281,6.678,2282,9.206,2283,6.678,2284,6.678]],["t/799",[0,0.532,30,2.845,31,3.964,37,1.717,40,2.195,63,4.366,64,1.072,83,2.891,99,1.722,160,4.57,161,3.927,162,3.239,171,3.848,190,2.802,203,6.772,239,2.722,242,2.513,258,4.255,281,2.239,312,2.36,346,3.04,398,2.032,420,4.142,492,1.622,546,2.327,624,4.366,875,3.262,974,3.175,1108,2.36,1618,6.177,1771,4.233,1774,7.232,2187,5.23,2189,4.811,2206,7.697,2213,5.23,2285,7.882,2286,5.989,2287,8.332,2288,8.332,2289,5.989,2290,6.481,2291,6.481]],["t/801",[0,0.789,2,3.803,23,1.87,37,2.963,40,2.126,45,2.947,56,1.211,83,3.647,84,2.06,161,3.204,163,3.058,171,3.034,190,2.442,203,5.34,228,3.376,231,1.562,239,2.371,242,3.171,258,2.665,281,1.402,312,2.977,346,2.649,375,3.467,406,3.417,408,3.304,420,2.256,424,2.048,477,3.12,513,3.496,531,3.148,546,2.719,762,4.099,782,2.947,974,2.767,1005,3.12,1084,3.042,1220,4.015,1618,3.869,1771,3.688,1774,6.704,1840,3.938,2187,4.557,2189,4.192,2206,4.192,2213,4.557,2235,4.725,2250,4.297,2285,4.936,2287,7.556,2288,7.556,2289,5.218,2292,5.647,2293,9.612,2294,5.647,2295,5.218,2296,5.647,2297,5.647,2298,5.647]],["t/803",[83,4.692,163,4.601,231,2.91,312,4.479,395,6.093,546,2.715]],["t/805",[0,0.977,8,2.219,59,2.54,64,1.969,78,3.988,83,3.814,108,4.43,161,4.173,162,4.275,181,2.715,183,5.294,312,3.114,346,4.012,414,2.715,463,4.953,464,3.835,465,4.904,492,2.14,509,4.463,513,5.294,872,4.43,1310,4.953,2181,7.476,2299,10.02]],["t/807",[0,0.69,8,1.17,9,2.385,31,2.758,37,2.498,40,2.313,64,0.746,65,1.248,83,2.011,84,0.966,99,1.198,160,2.286,161,3.142,162,2.254,171,2.566,181,2.67,190,1.95,199,2.514,200,1.921,226,1.561,235,1.432,242,2.681,258,2.128,281,1.717,288,1.229,299,1.78,346,2.116,385,2.091,390,1.667,414,1.432,420,2.762,462,1.198,464,2.022,479,2.239,492,1.129,506,2.864,507,2.792,515,2.903,523,2.696,546,2.17,941,2.336,974,2.209,1023,3.145,1025,2.239,1108,1.642,1340,3.639,1618,4.737,1628,5.121,1771,4.516,1774,7.789,1775,3.774,1776,3.774,1777,3.774,1778,3.942,1787,3.145,2187,3.639,2189,5.133,2206,5.133,2220,3.942,2267,6.044,2268,6.044,2269,6.044,2274,3.942,2277,4.167,2285,3.942,2286,4.167,2299,4.167,2300,4.167,2301,4.167,2302,4.167,2303,4.167,2304,4.167,2305,4.167,2306,4.167,2307,4.167,2308,4.167,2309,4.167,2310,6.39,2311,4.167,2312,4.167,2313,4.167,2314,4.51,2315,4.51,2316,4.51]],["t/809",[0,0.437,37,2.074,40,2.312,83,2.372,85,2.277,162,2.658,171,2.904,200,2.266,226,1.841,231,2.569,258,2.51,281,1.944,288,1.391,299,2.015,346,3.672,390,1.966,414,1.689,464,2.385,506,3.378,513,3.292,515,3.424,536,3.05,546,2.397,671,2.939,698,3.781,941,2.755,1025,2.64,1618,5.362,1628,5.044,1771,5.112,1774,8.446,1775,4.451,1776,4.451,1777,4.451,1778,4.649,1787,3.709,1922,4.047,2187,4.292,2189,5.81,2220,4.649,2267,6.842,2268,6.842,2269,6.842,2274,4.649,2295,4.915,2301,7.233,2302,4.915,2303,4.915,2304,4.915,2305,4.915,2306,4.915,2307,4.915,2308,4.915,2309,4.915,2310,7.233,2311,4.915,2312,4.915,2313,4.915,2317,7.827,2318,5.318,2319,5.318,2320,5.318]],["t/811",[83,4.692,163,4.601,231,2.91,312,4.479,395,6.093,546,2.715]],["t/813",[2,3.323,6,1.86,20,6.693,45,5.099,74,4.268,78,4.557,84,2.094,107,2.756,108,5.061,109,7.885,110,3.973,111,4.381,318,4.479,875,4.917,1412,6.048,1582,5.906]],["t/815",[6,2.125,8,2.896]],["t/817",[0,0.768,1,3.033,2,4.03,3,1.256,4,1.461,5,1.492,6,0.627,8,1.398,9,1.528,10,2.389,16,1.634,20,4.684,30,1.445,37,1.427,40,2.292,43,4.112,45,5.154,50,2.575,51,2.575,64,0.891,78,1.535,84,2.116,99,1.431,108,1.705,122,1.236,133,1.116,163,2.015,166,0.986,168,1.431,171,2.537,183,2.038,196,1.582,198,1.852,223,1.634,241,1.835,318,2.469,376,2.064,395,1.907,406,2.251,424,1.954,462,1.816,479,1.634,507,2.038,509,1.718,517,5.412,531,1.835,539,1.526,546,1.39,662,1.389,846,1.453,869,2.75,872,1.705,934,1.803,974,1.613,1005,1.819,1018,1.693,1084,2.902,1175,4.099,1177,1.613,1182,2.119,1225,2.15,1582,5.97,1628,1.788,1771,2.15,1774,6.525,1876,1.773,2179,5.721,2189,6.945,2213,2.657,2231,3.042,2235,2.755,2236,2.755,2237,3.042,2238,3.042,2240,3.042,2241,8.178,2242,3.042,2243,3.042,2244,2.878,2245,3.042,2246,3.042,2247,2.878,2248,2.878,2321,3.292,2322,2.878,2323,3.042,2324,2.755,2325,3.042,2326,4.978,2327,3.042,2328,7.301,2329,5.387,2330,3.042,2331,7.301,2332,4.978,2333,3.042,2334,7.301,2335,3.042,2336,3.292,2337,3.292,2338,3.292,2339,3.042,2340,3.042,2341,3.042,2342,3.292,2343,4.978,2344,3.042]],["t/819",[0,0.818,2,2.782,16,2.142,40,2.321,43,3.86,45,5.5,50,3.375,51,3.375,56,0.99,59,1.984,76,2.608,84,1.432,99,1.146,102,1.653,122,1.62,163,1.614,166,1.293,171,2.48,202,2.128,223,2.142,312,2.433,375,1.829,388,3.987,396,2.499,402,2.157,406,1.803,424,2.424,517,5.603,531,2.406,546,1.114,551,1.754,630,2.252,737,2.778,846,1.904,869,2.202,974,2.114,1005,2.384,1084,2.324,1175,5.085,1177,2.114,1182,2.778,1220,4.751,1582,4.944,1628,2.343,1771,2.818,1774,6.949,1876,2.324,2179,5.592,2189,6.072,2213,3.482,2235,3.611,2236,3.611,2241,8.71,2244,3.772,2247,3.772,2248,3.772,2252,7.008,2253,3.611,2266,3.987,2324,3.611,2325,3.987,2326,6.176,2327,3.987,2328,8.511,2330,3.987,2331,8.511,2332,6.176,2333,3.987,2334,8.511,2335,3.987,2339,3.987,2340,3.987,2341,3.987,2343,6.176,2344,3.987,2345,6.683,2346,4.315]],["t/821",[1,4.499,3,2.942,6,2.381,8,3.124,16,3.828,23,2.553,29,5.597,33,4.897,68,2.016,87,4.299,99,2.048,120,1.818,122,2.895,133,2.614,148,2.124,157,2.066,168,3.351,181,2.448,195,4.716,365,3.067,404,4.716,412,6.062,460,4.422,471,4.466,498,5.282,544,6.452,548,3.661,551,3.135,818,5.867,830,5.597,831,4.024,875,3.881,930,5.112,2141,5.378]],["t/823",[56,1.604,215,3.735,834,2.988,843,6.475,2142,9.064]],["t/825",[0,0.839,6,1.946,8,2.653,99,2.717,101,7.005,329,5.808,398,3.206,551,4.158,1743,7.998,2143,7.422,2144,8.252]],["t/827",[6,1.948,8,2.656,9,2.218,36,1.834,40,2.257,48,3.008,53,3.416,56,1.158,81,2.564,99,2.078,107,2.206,111,3.507,121,2.074,147,3.46,218,4.841,288,2.291,304,4.408,868,4.321]],["t/829",[0,0.701,1,2.051,2,2.905,4,2.051,6,1.957,7,1.151,8,2.923,9,2.916,16,2.296,39,2.265,40,2.12,42,2.327,43,4.03,52,3.432,77,1.967,90,2.556,91,1.166,99,1.228,101,3.168,104,1.496,107,1.304,111,3.829,120,1.09,121,0.72,123,0.872,124,1.623,148,0.867,157,1.435,181,1.468,189,3.871,190,3.047,198,2.602,207,1.209,216,1.888,252,2.209,304,1.683,312,1.683,316,2.395,354,2.03,365,1.839,368,2.678,404,2.828,411,0.995,414,1.468,447,2.343,539,2.144,547,1.786,548,3.346,593,4.476,635,2.073,662,1.951,671,2.555,734,3.115,764,2.041,831,3.678,868,2.555,946,2.073,996,4.26,998,3.225,1005,2.555,1011,4.476,1030,6.79,1133,3.066,1265,3.356,1336,5.232,1661,3.356,1662,3.432,1787,4.915,2153,3.731,2154,3.432,2157,3.731,2158,3.731,2159,3.356,2160,2.862,2161,3.168,2347,2.977,2348,5.897,2349,4.624,2350,4.273,2351,4.624,2352,4.273]],["t/831",[0,0.835,2,3.132,7,1.305,36,1.817,39,2.568,56,1.147,57,1.773,58,3.082,59,2.735,77,0.915,107,2.184,120,2.769,121,1.583,123,1.461,124,2.718,133,1.777,159,3.067,189,3.069,193,4.107,225,1.552,226,1.814,227,2.067,239,4.271,243,2.459,251,2.131,252,2.504,288,1.376,496,2.548,548,3.677,551,2.131,562,2.62,643,2.779,662,2.212,732,5.954,733,5.89,734,5.217,852,5.002,853,4.579,862,3.286,864,3.476,916,3.677,917,3.383,1083,3.067,1178,3.245,2146,4.441,2353,4.582,2354,4.582]],["t/833",[0,0.843,36,2.921,39,3.12,48,3.951,56,1.319,77,1.112,89,2.674,107,2.897,121,1.978,123,1.68,169,2.469,189,3.424,225,1.886,226,2.204,227,2.087,238,4.81,243,4.178,288,1.977,304,3.243,387,3.274,449,2.637,562,3.183,643,3.375,683,3.512,684,3.205,916,5.281,917,4.859,2146,5.108,2168,3.402,2169,5.905,2170,6.967,2353,5.567,2354,5.567]],["t/835",[0,0.548,36,2.794,39,3.272,48,3.541,53,4.602,56,1.363,77,1.166,89,2.804,107,2.971,121,2.001,123,1.737,169,2.59,189,3.511,225,1.977,226,2.311,227,1.357,238,4.555,243,4.319,288,2.018,304,3.352,387,3.434,449,2.765,562,3.338,643,3.54,683,2.634,684,3.361,916,5.002,917,4.602,2146,5.279,2168,3.568,2169,6.104,2172,7.201,2353,5.838,2354,5.838]],["t/837",[0,0.642,36,2.401,40,1.734,48,3.008,53,3.416,57,1.97,58,2.562,59,2.322,68,2.045,91,1.972,97,1.942,107,2.206,121,1.956,125,4.125,258,3.691,272,3.166,288,1.39,299,2.635,312,2.847,357,3.713,387,4.021,492,1.957,663,6.188,834,2.824,836,2.224,837,2.218,839,5.951,844,2.194,1700,5.268,2168,4.178,2174,5.951,2175,6.544]],["t/839",[0,0.956,2,2.779,8,2.12,9,2.317,56,1.21,57,1.573,58,2.916,59,3.127,84,2.257,102,3.129,107,2.304,108,4.232,120,1.926,121,1.272,161,2.723,197,3.498,227,1.66,251,3.322,375,3.464,406,4.871,420,3.264,477,4.515,504,3.724,687,2.159,791,5.93,875,4.112,1179,5.189,1583,5.336,1798,5.504,2177,4.997]],["t/841",[0,0.936,6,2.171,8,2.959,53,4.051,107,3.217,121,1.775,147,2.812,229,3.738,243,4.351,284,4.458,452,5.427,562,4.636,821,4.574,1069,4.636,1563,7.058,2168,4.955,2178,6.732]],["t/843",[64,1.74,96,4.692,97,2.613,140,5.258,159,6.155,186,3.209,328,4.572,2355,8.803]],["t/845",[6,2.022,96,5.518,97,3.073,148,1.991,875,5.346]],["t/848",[99,2.667,100,5.239,121,1.863,140,5.018,171,3.725,242,3.893,288,1.784,304,4.357,689,6.762,2356,10.038,2357,9.277]],["t/850",[0,0.897,36,2.809,56,0.906,57,1.178,58,2.997,89,3.637,100,3.194,107,1.726,120,1.442,121,1.958,123,1.634,169,2.373,171,2.271,189,2.04,193,2.729,225,1.812,226,2.118,227,2.344,238,4.347,239,2.57,243,4.063,288,1.787,304,3.153,449,2.534,496,2.531,683,4.31,684,3.08,852,3.324,853,3.618,874,4.52,916,4.773,917,4.391,2146,3.509,2169,4.057,2358,3.788,2359,5.655,2360,4.938,2361,5.655]],["t/852",[0,0.656,9,2.945,37,3.352,39,3.915,40,2.068,56,1.184,107,2.254,121,1.795,171,2.966,181,3.296,188,2.709,251,3.249,288,1.42,338,5.219,699,6.074,792,5.219,1114,6.276,1420,3.915,2357,7.385,2362,7.385,2363,6.986,2364,7.991,2365,7.991,2366,7.991,2367,9.594,2368,7.991,2369,6.986]],["t/854",[0,0.642,36,1.834,37,2.072,40,1.734,57,1.505,65,2.163,85,3.348,91,1.972,97,1.942,121,1.593,123,1.475,140,3.909,166,2.343,171,2.902,186,3.481,260,3.585,282,4.389,288,1.39,291,2.936,299,2.635,355,7.227,357,3.713,379,5.555,496,1.653,834,2.824,836,2.224,837,2.218,844,2.194,1046,3.605,1144,6.311,1963,2.437,2370,7.82,2371,6.311,2372,7.82]],["t/856",[0,0.696,37,2.248,40,1.828,57,1.633,65,2.347,171,3.149,186,3.619,235,2.694,288,1.508,299,2.184,395,4.915,398,3.383,496,1.793,834,2.977,836,2.414,837,2.407,874,4.429,976,7.101,1046,3.912,1150,7.101,1561,7.832,1963,2.644,2367,7.842,2373,8.486,2374,8.486,2375,8.486,2376,8.486]],["t/858",[48,3.792,85,4.221,107,2.781,123,1.86,140,4.928,186,3.611,328,4.284,462,2.619,551,4.008,565,5.354,622,3.839,671,5.447,843,5.893,1144,7.956]],["t/860",[0,1.014,6,1.765,8,2.406,13,4.351,34,6.732,81,3.041,141,6.053,153,5.038,331,6.092,631,3.932,1365,4.351,1367,8.571,1374,8.108,2377,5.741,2378,9.275,2379,5.814]],["t/862",[0,0.697,9,2.409,21,5.468,23,1.971,40,1.933,64,0.985,74,4.325,100,3.107,103,3.131,107,1.679,147,1.805,153,3.234,159,3.483,168,2.587,190,2.574,197,2.549,211,3.641,231,2.35,235,2.696,272,2.41,282,3.267,297,4.804,304,3.605,365,2.368,375,4.198,420,2.378,464,2.67,622,2.318,630,3.107,755,4.01,814,4.87,818,4.53,935,6.453,936,6.526,974,2.917,1029,6.191,1365,4.645,1368,3.732,1371,4.078,1372,4.969,1373,4.657,2377,6.129,2380,5.953,2381,5.018,2382,4.982,2383,4.982,2384,5.953,2385,3.947,2386,4.804,2387,5.204,2388,6.854,2389,4.982,2390,4.657,2391,4.01]],["t/864",[0,0.633,23,3.358,74,4.43,77,1.347,81,2.528,102,2.954,148,1.445,231,2.806,235,2.448,369,5.482,420,3.08,622,3.003,764,3.403,814,4.422,935,6.774,936,6.851,1029,5.816,1208,3.778,1364,5.724,1366,4.773,1368,4.833,1369,8.865,1370,8.487,2377,4.773,2389,6.452,2392,7.71,2393,7.21,2394,5.724,2395,6.031,2396,8.865,2397,7.125,2398,6.832,2399,6.452]],["t/866",[0,1.008,7,1.818,10,5.299,23,2.417,43,4.615,100,3.81,102,2.796,121,1.522,122,2.741,141,3.577,147,2.213,237,3.999,242,2.831,254,5.299,296,4.364,305,4.84,405,4.918,412,4.364,414,2.318,666,3.328,683,2.879,684,5.551,695,5.846,696,5.19,727,6.953,764,3.222,793,4.317,814,5.609,842,5.71,931,5.184,949,5.001,1365,3.425,1371,5.001,2381,3.7,2391,4.918,2398,4.918,2400,8.549,2401,7.3,2402,6.381,2403,7.26]],["t/868",[0,0.595,6,2.092,64,1.199,73,4.119,121,1.515,122,2.723,142,4.335,147,2.199,148,1.359,153,3.939,166,2.173,212,3.105,241,4.043,291,2.723,328,3.152,351,7.077,354,3.184,466,5.264,494,3.756,666,4.438,668,3.382,713,4.2,756,7.405,763,5.156,933,5.386,995,5.518,1666,4.606,1951,5.672,2144,5.852,2391,7.915,2403,5.383,2404,6.702,2405,6.339,2406,7.067,2407,5.672,2408,6.339,2409,6.339,2410,6.702,2411,5.156,2412,6.702,2413,6.339]],["t/870",[0,0.829,66,4.027,80,4.527,86,3.739,89,3.215,100,3.996,120,1.805,121,1.758,125,3.086,147,2.321,157,1.56,163,2.864,216,3.127,241,5.628,286,3.246,369,5.444,378,3.996,410,5.245,412,4.577,414,2.431,551,3.113,755,5.158,793,4.527,814,4.391,1069,3.827,1362,6.407,1364,5.684,1365,3.592,1558,4.93,2381,6.086,2391,5.158,2403,5.684,2407,5.989,2414,6.693,2415,6.179,2416,7.076,2417,7.076,2418,7.657]],["t/873",[23,2.725,64,1.75,80,4.867,151,6.58,194,4.816,206,3.44,207,2.152,231,2.277,242,3.192,269,5.852,272,3.332,325,3.559,399,5.034,447,4.172,456,6.068,466,5.974,498,5.639,509,4.296,706,4.92,712,3.317,1108,2.997,1208,4.033,1365,3.861,1680,5.852,1716,6.643,2381,5.363,2419,8.34,2420,7.195]],["t/875",[0,0.931,56,1.681,121,1.916,186,2.805,206,3.844,215,3.172,231,2.544,243,4.314,330,8.04,331,4.536,333,6.415,396,5.327,420,3.674,521,6.539,630,4.8,698,6.539,1396,7.194,1819,5.625,2421,9.197]],["t/877",[0,0.903,8,2.272,9,2.484,77,1.529,121,1.363,122,3.288,123,1.652,124,4.225,128,5.356,147,3.337,148,1.641,212,4.712,242,3.396,717,2.484,1208,4.29,1330,6.849,1372,5.124,2391,7.414,2422,8.757,2423,8.757,2424,6.663,2425,8.092,2426,8.092]],["t/879",[0,0.88,2,1.992,23,2.78,39,2.87,89,2.46,90,2.125,99,1.556,111,2.627,120,1.381,121,1.307,133,1.986,169,2.272,171,2.174,184,2.094,190,4.243,216,2.393,231,2.323,235,2.665,239,2.46,242,2.272,269,5.969,282,2.253,288,2.161,321,2.32,349,3.182,396,3.393,402,4.197,411,1.261,560,3.626,566,3.266,596,3.393,628,5.075,632,3.745,658,3.155,706,7.056,712,4.319,737,3.772,744,3.012,789,2.928,814,3.359,830,4.252,843,3.502,1029,3.359,1174,3.946,1208,2.87,1350,4.086,1365,2.748,1371,4.013,1387,3.672,1503,3.266,1680,5.969,2381,2.969,2398,3.946,2427,4.458,2428,5.858,2429,4.582,2430,3.72,2431,6.775,2432,5.858,2433,4.582,2434,5.858,2435,4.902]],["t/881",[0,0.687,6,0.851,36,1.612,40,1.164,56,1.649,64,1.136,74,1.954,77,0.781,81,1.466,99,2.494,111,2.006,121,0.696,148,1.759,153,2.429,163,2.57,170,2.39,174,2.621,188,1.516,207,1.17,213,4.617,231,2.314,292,3.797,331,2.206,364,1.179,365,1.779,378,2.334,420,1.787,546,2.614,558,2.88,631,4.295,686,3.925,706,2.674,751,5.282,752,2.88,754,2.804,814,2.565,939,4.792,1029,3.94,1059,3.013,1177,2.191,1246,3.32,1313,3.12,1347,3.12,1352,3.743,1365,2.098,1376,2.88,1415,3.743,1417,3.91,1424,3.91,1427,3.61,1510,4.792,1834,3.743,1925,5.228,2377,7.577,2379,2.804,2381,2.267,2419,7.505,2436,4.473,2437,6.35,2438,4.133,2439,7.855,2440,4.133,2441,4.133,2442,4.133,2443,4.133,2444,4.133,2445,4.133,2446,4.133,2447,6.35,2448,8.675,2449,6.35,2450,6.35,2451,3.91,2452,4.133,2453,4.133,2454,4.133,2455,4.133,2456,4.133,2457,4.133]],["t/883",[0,0.931,6,1.751,23,3.045,58,2.302,64,1.521,78,4.289,81,3.72,127,6.098,128,5.625,148,1.724,254,6.676,292,5.082,312,3.349,331,4.536,754,5.765,913,5.438,1058,4.597,1182,5.921,1227,6.539,1672,6.415,2458,9.197]],["t/885",[56,1.604,83,4.831,1365,5.081,2381,5.49,2459,10.831]],["t/887",[6,1.928,68,2.649,464,4.543,631,5.101,1365,5.645,1368,6.351,1388,7.066,2379,6.351,2381,5.135,2460,8.176]],["t/889",[0,0.902,5,2.805,7,2.174,36,1.452,56,0.917,64,1.444,77,1.766,84,1.326,90,2.245,121,1.574,122,3.278,157,1.26,163,3.783,171,2.297,174,2.361,184,2.212,190,2.676,269,4.4,273,3.699,321,2.451,367,3.45,448,3.699,479,3.072,546,2.253,666,2.821,706,6.924,712,3.518,744,5.2,750,3.785,789,3.093,869,3.159,934,3.39,935,3.699,936,5.277,1029,3.549,1084,3.333,1365,2.903,1680,4.4,1684,3.93,2377,5.404,2394,4.594,2419,4.042,2431,4.994,2435,5.179,2461,4.994,2462,6.188,2463,4.994,2464,6.188,2465,4.841,2466,5.719,2467,5.719,2468,6.188,2469,10.114,2470,6.188,2471,6.188,2472,4.841,2473,5.719]],["t/891",[0,0.466,36,1.331,53,4.211,56,1.861,64,0.939,76,3.431,80,3.356,83,2.532,90,2.059,99,1.508,121,1.5,157,1.156,163,4.612,168,2.467,169,2.201,185,2.602,186,3.418,197,2.43,213,2.587,231,2.27,243,2.663,305,3.763,312,2.067,414,1.802,448,3.393,449,2.35,479,2.818,546,1.465,556,4.12,558,3.655,689,3.824,737,6.207,955,6.868,1034,3.472,1082,4.214,1117,4.319,1361,4.036,1406,5.245,1580,4.319,1684,6.708,1742,4.581,1795,4.44,2377,5.967,2379,6.621,2381,2.877,2419,6.296,2424,6.245,2472,4.44,2474,4.75,2475,4.962,2476,8.207,2477,5.676,2478,5.245,2479,5.676,2480,5.676,2481,5.676,2482,5.676,2483,5.676]],["t/893",[0,0.855,6,1.983,56,1.543,74,4.551,99,2.768,420,4.163,814,5.975,1365,4.888,2381,5.281]],["t/895",[212,3.873,464,4.056,631,5.57,814,5.187,935,6.714,936,6.79,1365,4.243,1368,5.67,1388,6.309,1819,7.471,2379,5.67,2381,5.693,2399,7.569,2460,7.3,2484,7.075,2485,7.569]],["t/897",[0,0.816,74,4.345,99,2.643,133,4.034,227,2.022,307,6.701,387,5.115,398,3.119,572,5.546,658,5.358,2381,5.042,2486,7.22,2487,9.947]],["t/899",[7,2.113,48,4.15,68,2.219,74,3.707,78,3.957,107,3.043,115,6.457,133,2.876,207,2.219,213,3.868,225,2.513,227,1.724,354,3.726,365,3.375,631,3.598,674,4.429,714,5.716,748,6.128,1208,4.158,1365,3.981,1727,7.101,2381,5.469,2403,6.299,2488,9.432,2489,7.418,2490,7.842,2491,6.848,2492,8.486]],["t/901",[7,2.349,68,3.014,74,4.121,99,2.506,107,2.661,225,2.793,631,4,632,4.208,656,5.168,843,5.64,1365,5.407,2381,6.309,2488,8.247,2493,9.302,2494,7.614]],["t/903",[0,0.555,12,3.84,14,3.769,23,2.238,68,2.772,80,3.997,81,2.216,102,2.59,122,2.538,202,3.334,207,2.428,213,3.082,235,3.366,242,2.622,255,4.353,287,3.804,290,3.84,309,4.806,331,3.334,375,2.866,562,5.3,631,4.839,632,4.141,633,5.176,640,4.631,656,3.703,665,6.738,688,4.415,918,3.877,1365,4.355,1382,5.657,1423,5.144,1819,5.678,2385,4.482,2494,5.456,2495,10.547,2496,9.977,2497,5.91,2498,6.76,2499,8.579,2500,6.76,2501,6.76,2502,6.247,2503,6.76]],["t/906",[0,0.648,2,1.118,6,1.409,12,1.05,18,1.342,21,2.117,23,1.782,24,1.548,37,2.206,40,1.475,56,0.487,64,0.306,68,0.484,73,1.05,74,0.808,77,0.574,80,1.094,81,0.606,83,0.825,86,1.47,99,2.212,102,1.701,103,0.973,104,1.064,121,1.536,122,0.694,124,0.649,128,1.131,133,0.627,138,1.061,147,0.997,148,0.616,151,1.85,159,1.082,163,2.306,166,1.33,168,0.804,170,0.988,173,1.191,174,0.706,190,3.2,203,1.208,207,0.484,210,0.944,212,1.901,213,0.843,217,1.131,225,1.314,227,0.376,235,0.587,241,1.031,242,1.275,255,1.191,269,2.338,272,2.496,273,1.966,286,0.784,290,1.868,291,0.694,307,2.215,312,0.673,354,0.812,368,1.904,369,1.315,375,1.394,385,0.857,387,0.951,398,0.58,411,0.398,420,3.614,461,1.191,462,0.491,464,1.991,466,1.342,479,0.918,494,0.958,551,0.752,594,1.552,597,1.208,598,1.407,599,2.572,631,1.882,660,2.803,664,1.548,668,0.862,673,0.996,706,2.654,712,1.325,713,1.071,737,1.191,744,0.951,750,2.011,754,1.159,756,2.215,764,0.816,776,0.996,782,2.317,783,1.492,800,1.29,814,1.061,855,2.991,886,2.441,918,1.886,930,1.226,933,3.868,934,1.801,935,5.589,939,1.29,950,1.492,954,1.118,974,0.906,994,2.752,1029,1.886,1034,2.715,1043,1.118,1054,1.246,1097,1.447,1177,0.906,1208,0.906,1313,2.293,1330,3.472,1334,1.548,1350,1.29,1360,4.095,1364,1.373,1365,2.525,1371,2.253,1372,4.872,1416,1.492,1420,1.611,1561,1.342,1684,2.088,1716,1.492,1722,2.572,1758,1.492,1795,6.513,1819,2.011,1840,2.293,2212,1.342,2377,3.817,2379,1.159,2381,5.116,2388,4.343,2391,4.154,2394,1.373,2398,2.215,2399,5.16,2403,2.441,2405,1.617,2406,3.222,2411,2.338,2413,1.617,2419,4.462,2425,3.039,2431,1.492,2435,2.752,2439,1.548,2465,6.175,2484,4.824,2489,1.617,2504,1.709,2505,1.407,2506,1.548,2507,7.908,2508,6.968,2509,3.906,2510,1.492,2511,1.617,2512,1.709,2513,2.874,2514,1.709,2515,1.492,2516,1.617,2517,1.617,2518,1.709,2519,1.709,2520,1.709,2521,1.709,2522,3.288,2523,1.849,2524,1.849,2525,7.401,2526,7.401,2527,1.849,2528,1.849,2529,1.849,2530,1.617,2531,1.849,2532,1.709,2533,1.849,2534,1.849,2535,3.288,2536,3.288,2537,3.472,2538,5.381,2539,1.849,2540,1.849,2541,1.849,2542,1.849,2543,1.849,2544,1.849,2545,1.849,2546,1.849,2547,1.849,2548,1.849,2549,1.849,2550,1.849,2551,1.849,2552,3.288,2553,1.849,2554,3.288,2555,1.849,2556,1.849,2557,1.849,2558,1.849,2559,1.849,2560,1.849,2561,1.849,2562,1.849,2563,1.849,2564,1.849,2565,1.849]],["t/908",[0,0.833,6,1.638,18,1.776,21,4.214,23,1.391,37,2.514,40,0.415,53,1.069,56,0.622,57,0.471,64,0.405,68,1.443,73,1.39,74,1.069,77,0.427,80,1.447,81,0.802,86,1.391,99,2.412,102,0.938,103,4.775,104,0.792,120,1.543,121,1.477,122,0.919,124,0.859,133,1.424,137,1.268,147,1.274,148,0.787,151,3.683,153,1.329,163,2.756,164,1.432,166,1.653,174,0.934,182,2.058,190,1.058,192,1.707,196,1.176,203,1.598,207,0.64,210,2.144,225,0.725,231,0.677,233,1.534,235,0.777,241,1.365,242,0.949,255,2.705,267,3.197,269,2.987,272,2.649,291,1.577,305,1.623,307,1.649,325,1.816,328,1.064,346,1.148,354,1.075,368,1.418,369,1.74,375,1.781,385,1.135,387,1.258,398,0.767,411,0.527,414,0.777,420,3.212,447,1.24,461,1.576,462,1.116,466,1.776,471,1.418,494,1.268,499,1.184,551,0.995,595,3.39,597,1.598,598,1.862,599,3.286,631,1.781,658,3.526,660,2.685,662,1.033,668,1.141,673,1.318,706,1.463,712,1.693,713,1.418,744,1.258,750,2.569,756,2.83,800,1.707,814,2.409,868,1.352,930,1.623,933,4.448,936,5.735,950,1.975,974,2.058,977,1.914,985,1.74,1029,1.404,1043,1.48,1058,1.223,1177,1.199,1208,1.199,1334,2.048,1359,6.809,1364,1.817,1365,1.971,1366,1.515,1371,1.677,1372,1.432,1416,1.975,1429,1.576,1548,1.817,1558,1.576,1561,1.776,1592,1.277,1684,1.554,1819,2.569,1840,1.707,1913,2.262,1919,2.048,2143,1.776,2377,2.6,2381,5.145,2391,5.417,2398,4.963,2403,4.097,2405,2.139,2406,4.751,2411,2.987,2413,2.139,2419,2.744,2431,1.975,2435,3.515,2485,8.235,2489,2.139,2504,2.262,2507,2.139,2508,3.515,2509,4.751,2510,1.975,2511,2.139,2512,2.262,2513,3.672,2514,2.262,2515,1.975,2516,2.139,2517,2.139,2518,2.262,2519,2.262,2520,2.262,2521,2.262,2566,1.515,2567,8.041,2568,4.201,2569,4.201,2570,4.201,2571,2.447,2572,2.447,2573,2.447,2574,2.447,2575,2.447,2576,2.447,2577,4.201,2578,2.447,2579,2.139,2580,4.201,2581,4.201,2582,4.201,2583,4.201,2584,2.447]],["t/910",[1,3.765,23,2.81,74,5.182,99,2.254,100,4.429,102,3.25,168,3.688,254,6.159,336,6.299,364,2.844,420,4.31,464,3.805,656,4.648,737,5.463,764,3.745,814,4.866,934,4.648,937,5.463,1364,6.299,1365,5.565,2379,5.319,2382,7.101,2488,7.418,2495,7.842,2496,7.418,2585,8.486,2586,8.486]],["t/912",[3,3.14,7,2.049,56,1.732,81,2.698,94,4.246,96,3.671,98,4.172,101,5.639,102,3.153,123,1.553,215,3.649,216,3.362,290,4.675,442,5.974,443,7.523,464,4.745,640,5.639,783,6.643,947,5.639,1159,5.741,1434,8.855,1511,9.779,1548,6.11,1713,6.888,2382,8.855,2385,7.016,2587,8.231]],["t/914",[0,0.74,5,4.087,7,1.614,9,2.557,15,5.293,56,0.96,74,2.831,78,5.228,99,1.722,102,3.454,110,2.635,159,3.792,170,3.463,198,3.646,202,3.196,212,2.775,308,5.423,333,4.52,346,3.04,347,4.704,364,2.954,416,4.932,420,4.478,457,4.233,793,3.832,814,5.171,895,5.423,918,3.717,934,3.55,1029,5.171,1072,5.069,1084,3.491,1152,3.874,1159,4.52,1313,4.52,1364,4.811,1365,3.04,1374,5.665,1827,5.665,2371,5.23,2377,6.939,2379,4.062,2382,9.86,2398,4.366,2588,5.665,2589,5.989,2590,5.423,2591,5.665,2592,6.481]],["t/916",[56,1.588,420,4.285,1029,6.151,1365,5.031,2377,6.639,2381,5.436]],["t/918",[68,2.674,464,4.585,631,5.13,1365,5.676,1368,6.41,1388,7.132,2379,6.41,2381,5.183,2460,8.252]],["t/920",[0,0.837,7,0.798,9,2.437,21,6.285,23,2.222,40,1.927,48,1.233,65,0.887,72,1.984,74,2.932,81,1.051,91,1.329,99,0.852,102,1.228,103,1.686,105,1.146,120,0.756,121,0.82,123,0.605,124,1.85,133,1.087,147,0.972,150,2.125,153,1.741,163,1.199,169,2.603,190,1.386,207,1.755,211,3.223,225,0.949,231,2.922,242,2.603,257,2.064,258,1.513,272,2.133,282,2.027,286,1.359,304,1.167,306,2.279,307,2.159,328,1.393,375,3.642,396,1.856,412,1.916,413,2.125,420,2.681,464,3.852,471,1.856,475,3.15,487,2.279,492,0.802,493,2.279,509,2.751,511,2.682,524,2.064,546,0.827,566,1.787,622,3.027,660,3.19,680,2.507,706,3.15,740,5.649,814,4.926,872,1.66,875,1.613,935,6.095,936,6.737,938,2.38,974,1.57,1029,4.458,1108,1.167,1246,2.38,1360,4.01,1365,2.472,1366,4.812,1368,3.304,1369,2.802,1370,2.682,1371,3.61,1372,3.927,1373,4.122,1388,2.236,1423,2.439,1510,2.236,1819,1.96,2377,5.318,2381,2.671,2383,2.682,2385,2.125,2386,2.587,2387,2.802,2388,2.587,2389,4.41,2390,4.122,2391,4.521,2393,2.279,2396,4.607,2398,2.159,2461,4.253,2465,2.507,2537,4.122,2566,1.984,2593,2.802,2594,2.802,2595,2.802,2596,2.802,2597,2.682,2598,2.802,2599,4.41,2600,2.802,2601,2.802,2602,2.802,2603,2.802,2604,2.802,2605,4.607,2606,2.802,2607,2.802,2608,4.607,2609,2.279,2610,4.607]],["t/922",[0,0.86,86,2.685,213,5.596,215,2.797,299,2.088,395,4.697,635,3.636,776,4.368,843,4.848,1219,4.606,1898,5.886,2176,4.902,2379,6.57,2381,4.11,2611,9.685,2612,7.494,2613,7.494,2614,7.494,2615,9.685,2616,9.685,2617,7.494,2618,7.494,2619,9.685,2620,9.685,2621,7.494,2622,7.494,2623,7.494,2624,7.494,2625,7.494]],["t/924",[0,0.686,7,2.081,56,1.582,64,1.382,68,2.185,99,2.22,150,5.541,151,4.702,194,4.89,207,2.185,272,3.383,325,3.613,369,5.941,420,3.338,456,4.792,498,5.725,521,5.941,559,5.941,562,4.177,572,4.659,660,3.429,875,5.378,956,6.536,1029,4.792,1181,5.173,1429,5.38,1685,5.307,2168,4.465,2379,5.238,2381,4.235,2419,6.978,2424,6.359]],["t/926",[0,0.736,5,1.206,6,0.859,10,1.932,36,1.058,37,0.705,40,1.773,56,0.87,62,3.345,64,0.746,72,1.647,74,1.162,77,0.465,81,0.872,86,0.881,99,1.199,102,1.019,111,1.193,121,0.914,123,0.502,124,0.934,127,1.764,128,1.628,133,0.902,147,0.807,148,1.101,152,1.69,163,2.587,170,2.411,174,2.241,176,1.609,188,1.991,192,1.856,206,1.112,207,0.696,212,1.139,213,3.529,225,0.788,226,0.921,227,0.541,231,2.813,241,1.484,242,1.032,272,1.077,282,1.024,292,4.954,312,0.969,331,1.312,368,1.541,378,1.389,385,1.234,398,0.834,399,1.628,420,3.581,449,1.102,464,4.228,479,1.321,527,1.609,546,2.171,551,1.082,558,1.713,565,1.445,567,2.459,572,1.484,587,2.303,631,3.801,683,1.049,686,3.632,751,3.892,752,3.781,754,3.682,814,1.526,843,1.591,879,1.368,913,1.574,933,1.304,934,1.458,939,4.096,1029,3.368,1159,3.147,1177,1.304,1181,1.647,1238,2.025,1313,3.147,1314,1.823,1352,2.227,1365,1.248,1366,2.793,1371,1.823,1376,3.781,1384,2.025,1413,1.932,1417,6.768,1418,2.459,1427,6.248,1458,3.138,1672,7.645,1684,1.69,1742,2.148,1925,2.025,1959,3.529,2377,6.642,2379,3.682,2381,1.349,2391,1.793,2398,1.793,2419,5.493,2437,2.459,2438,2.459,2439,7.039,2440,2.459,2441,2.459,2442,2.459,2443,2.459,2444,2.459,2445,2.459,2446,2.459,2447,4.169,2448,6.392,2449,4.169,2450,4.169,2451,2.326,2452,2.459,2453,2.459,2454,2.459,2455,2.459,2456,2.459,2457,2.459,2626,1.764,2627,2.326,2628,2.661,2629,2.661,2630,4.169,2631,2.661,2632,2.661,2633,2.082,2634,2.661,2635,8.243,2636,3.349,2637,2.459,2638,2.459,2639,2.661,2640,2.661,2641,2.459,2642,2.459,2643,2.459,2644,2.459,2645,2.459,2646,2.459,2647,2.661,2648,1.668,2649,2.661,2650,2.661,2651,2.661]],["t/928",[0,0.73,1,1.318,2,1.011,9,2.104,21,4.096,23,0.984,40,1.982,42,3.202,48,1.143,56,0.733,62,1.437,74,2.162,77,1.111,81,0.974,90,1.078,91,1.248,94,1.192,95,2.364,98,1.506,99,2.19,108,1.539,110,1.208,111,1.332,121,1.469,133,1.007,148,0.557,166,2.469,169,1.919,174,1.133,185,2.269,186,2.879,189,3.624,197,1.272,207,0.777,211,1.817,225,0.88,231,2.735,242,1.152,243,1.394,273,1.776,282,2.854,291,1.116,307,2.001,342,2.112,365,1.182,368,1.721,372,1.913,375,1.26,396,1.721,398,0.932,412,1.776,413,1.97,420,1.977,443,2.112,462,0.789,464,3.327,471,1.721,475,1.776,479,1.475,493,2.112,546,1.277,551,1.208,622,1.927,631,1.26,660,3.652,733,1.721,740,3.89,759,1.456,776,1.6,777,1.562,782,1.551,793,1.757,811,2.597,820,1.776,831,1.551,875,1.495,879,1.528,916,1.411,934,1.627,935,4.435,936,5.706,938,2.206,946,2.852,947,2.035,961,1.614,967,1.757,968,1.757,969,1.796,970,1.817,996,1.796,1001,1.862,1002,1.456,1005,1.642,1029,4.255,1058,1.485,1153,1.757,1177,2.425,1265,2.156,1314,3.391,1360,3.766,1366,3.938,1372,3.722,1373,2.324,1396,2.324,1397,2.398,1510,2.072,1685,1.887,1819,1.817,1917,2.324,2176,1.796,2377,3.064,2381,2.508,2385,3.282,2386,2.398,2389,2.486,2390,2.324,2391,3.334,2394,2.206,2398,2.001,2419,3.232,2433,2.324,2472,2.324,2509,2.156,2537,3.871,2566,1.839,2597,2.486,2599,4.142,2600,2.597,2601,2.597,2602,2.597,2603,2.597,2604,2.597,2605,4.326,2606,2.597,2607,2.597,2608,4.326,2609,2.112,2610,4.326,2652,2.597,2653,2.971,2654,2.486,2655,4.949,2656,2.971,2657,4.949,2658,2.486,2659,2.971,2660,2.971,2661,2.746,2662,2.971,2663,2.971,2664,2.035,2665,2.971,2666,2.746]],["t/930",[0,0.84,5,1.336,6,0.936,7,1.224,9,2.094,21,4.072,23,0.976,30,1.294,36,1.153,40,1.879,48,1.891,56,1.093,74,2.147,77,0.515,86,0.976,91,1.24,99,1.306,105,1.053,121,1.593,125,1.188,147,0.894,151,1.658,157,0.6,169,1.906,184,1.053,186,0.899,188,0.999,207,1.285,211,1.802,225,0.873,227,0.599,231,3,242,1.143,243,4.801,252,1.408,273,2.939,282,4.062,286,1.249,291,1.107,306,3.495,328,1.281,354,1.294,357,3.003,365,1.955,375,1.249,396,1.707,411,0.634,412,1.762,413,1.954,420,2.527,464,3.31,471,1.707,475,3.781,479,1.463,487,2.095,493,2.095,524,1.897,546,1.905,551,1.999,585,1.504,622,2.463,631,2.084,660,3.029,686,1.383,706,2.939,740,6.259,755,1.985,910,2.139,934,1.614,935,4.413,936,5.685,938,2.188,940,2.576,1029,2.819,1177,1.444,1200,1.872,1360,3.741,1365,1.383,1366,3.043,1372,2.876,1373,2.305,1397,3.967,1467,2.305,1819,1.802,1917,2.305,2377,3.915,2381,3.206,2385,1.954,2386,2.378,2390,2.305,2391,3.312,2394,2.188,2398,1.985,2419,3.211,2424,4.813,2461,3.967,2465,2.305,2472,3.845,2478,4.543,2505,2.243,2506,2.466,2509,2.139,2537,3.845,2566,1.824,2593,2.576,2594,2.576,2595,2.576,2596,2.576,2597,2.466,2598,2.576,2599,4.114,2600,2.576,2601,2.576,2602,2.576,2603,2.576,2604,2.576,2605,4.297,2606,2.576,2607,2.576,2608,4.297,2609,2.095,2610,4.297,2667,2.947,2668,2.947,2669,2.723,2670,2.723,2671,2.723,2672,2.947,2673,2.947,2674,2.947,2675,2.576,2676,2.947,2677,2.947,2678,2.947,2679,2.947,2680,2.723,2681,2.947,2682,4.543,2683,2.947,2684,2.947,2685,2.947,2686,2.947,2687,2.378]],["t/932",[0,0.756,6,1.602,7,0.913,9,2.613,36,1.379,40,0.995,42,1.845,48,2.26,53,1.601,56,1.246,86,1.214,90,1.33,99,1.954,105,1.31,121,1.67,125,2.965,157,1.197,167,1.975,168,1.593,169,1.422,171,1.36,174,1.399,185,2.694,186,3.832,188,1.243,189,1.222,197,1.569,207,0.959,217,2.242,225,1.085,231,2.857,242,2.279,243,3.948,273,2.191,282,3.543,307,2.469,345,2.216,354,2.58,368,3.404,372,2.36,379,1.784,396,2.123,411,0.789,414,1.164,420,3.362,475,2.191,479,1.82,503,3.205,512,2.168,546,2.377,551,2.39,566,2.044,585,1.871,622,3.587,631,3.568,660,1.504,662,1.547,740,5.633,759,1.796,824,2.721,934,2.008,935,2.191,936,2.216,940,3.205,941,1.899,949,5.04,1029,4.826,1039,2.958,1069,1.832,1082,2.721,1177,1.796,1200,2.328,1366,4.554,1397,2.958,1403,2.469,1467,2.867,1585,2.721,1685,2.328,1917,2.867,2176,2.216,2377,5.209,2381,2.979,2393,2.606,2394,2.721,2410,3.388,2419,5.496,2424,2.79,2427,2.79,2472,6.582,2474,3.068,2505,2.79,2506,3.068,2509,2.661,2597,3.068,2598,3.205,2669,3.388,2670,3.388,2671,3.388,2680,3.388,2682,3.388,2688,8.415,2689,3.666]],["t/934",[42,4.082,58,2.029,59,3.112,74,3.542,121,1.911,167,5.645,171,3.009,174,3.094,176,4.902,185,4.804,186,3.542,242,3.145,286,3.438,291,3.045,312,3.816,328,3.524,331,3.999,420,3.24,457,5.296,540,5.463,551,3.297,757,5.02,764,3.579,782,4.232,949,5.556,974,3.973,1366,5.02,1672,5.656,1840,5.656,2648,5.083]],["t/936",[0,0.739,7,1.875,8,1.954,9,1.432,21,4.849,36,2.506,56,1.334,58,2.673,64,0.835,81,1.655,83,2.252,84,2.4,86,1.672,90,1.832,99,1.341,107,1.424,121,1.961,122,1.896,133,1.712,162,2.524,168,2.194,181,1.603,186,2.297,188,2.553,207,1.32,273,4.502,282,1.942,318,2.315,346,2.369,372,4.849,375,2.141,400,4.201,418,6.976,420,3.989,438,6.96,534,2.924,546,1.944,585,2.577,631,3.193,660,3.09,764,3.324,855,5.073,956,3.95,974,3.69,995,3.842,1177,2.474,1350,3.522,1381,2.924,1434,4.225,1504,3.59,1685,3.207,2176,4.553,2377,4.662,2394,5.591,2419,4.919,2424,5.731,2472,5.891,2473,4.666,2661,4.666,2690,5.049,2691,4.666,2692,4.414,2693,5.049,2694,4.666,2695,5.049]],["t/938",[0,0.638,1,1.768,6,1.196,7,1.935,36,1.823,37,1.056,40,1.973,56,0.59,57,1.209,58,1.572,59,1.184,62,3.038,64,1.286,65,1.103,68,1.042,74,1.741,77,0.696,81,1.307,84,1.346,86,1.32,91,1.005,97,0.99,121,1.373,124,1.399,127,6.363,128,4.754,130,2.286,142,2.382,152,2.531,157,0.812,163,1.491,170,2.129,174,1.52,176,2.409,182,1.953,184,1.424,225,1.18,226,1.379,228,2.382,231,3.059,252,1.904,258,1.881,272,3.571,288,0.708,299,1.617,300,1.65,311,2.222,312,2.83,372,4.044,398,1.25,418,4.102,420,3.834,464,3.956,479,3.118,496,0.842,572,2.222,631,1.69,660,3.189,663,2.409,752,2.566,754,3.937,757,2.467,774,2.382,834,1.733,836,1.134,837,1.13,844,1.118,933,1.953,934,2.183,974,1.953,1058,3.14,1182,2.566,1246,2.959,1313,2.78,1314,2.73,1365,1.87,1672,8.124,2017,2.183,2018,2.222,2377,4.812,2379,3.937,2414,3.484,2419,2.603,2433,3.117,2439,5.256,2599,3.335,2635,9.328,2637,3.683,2638,3.683,2641,3.683,2642,3.683,2643,3.683,2644,3.683,2645,3.683,2646,3.683,2666,3.683,2696,3.985,2697,3.985,2698,3.683,2699,3.985,2700,3.985]],["t/940",[0,0.801,1,2.142,2,1.642,5,3.301,6,1.858,26,4.453,30,2.119,56,0.715,77,1.531,78,2.251,80,4.305,81,1.582,84,1.034,105,1.725,111,3.265,120,1.138,121,1.365,124,1.694,147,1.464,157,0.983,160,2.447,161,1.609,163,3.279,167,2.6,169,2.824,178,2.047,186,1.472,197,2.067,227,0.981,231,1.335,242,1.872,292,4.024,305,3.2,307,3.252,318,2.213,329,2.742,365,1.92,368,2.796,398,1.513,406,2.018,420,4.4,464,4.378,479,2.397,509,2.519,546,2.704,566,2.691,587,3.717,594,2.278,631,3.087,711,5.184,737,3.108,764,2.13,782,3.8,789,2.413,934,2.644,1029,2.768,1211,3.504,1264,3.776,1347,3.367,1366,2.988,1381,6.622,1506,5.405,1585,3.583,1672,3.367,2177,2.952,2193,3.896,2377,5.427,2419,4.756,2494,3.896,2692,8.534,2701,4.827,2702,4.827,2703,4.827,2704,7.281,2705,4.827,2706,4.827,2707,4.039,2708,4.827,2709,4.827,2710,4.827,2711,4.827,2712,4.827]],["t/942",[0,0.888,6,1.139,7,2.123,37,2.259,40,2.118,56,1.471,107,2.405,121,0.932,148,1.861,163,2.239,178,2.538,183,3.705,188,2.029,215,2.064,227,1.216,231,1.656,251,4.038,272,2.423,349,4.631,375,3.615,411,1.289,494,5.925,532,3.909,649,4.256,683,3.362,713,6.625,714,4.032,715,4.477,723,4.256,804,3.909,918,6.206,933,4.177,1365,4,1412,3.705,1493,4.682,1503,3.337,1736,3.224,1819,3.661,2713,5.986,2714,5.532,2715,5.986,2716,8.526,2717,4.256,2718,6.881,2719,5.214,2720,4.831,2721,4.831]],["t/944",[7,2.329,29,6.789,37,2.478,43,5.411,53,4.086,56,1.698,99,2.485,148,1.753,196,4.496,420,4.581,551,3.803,683,3.689,918,5.364,931,6.078,933,4.583,1365,4.388,2717,6.65]],["t/946",[0,0.772,37,1.825,56,1.783,57,1.81,58,2.353,64,1.555,89,2.892,127,6.234,153,3.741,184,2.462,272,4.334,398,2.16,411,1.483,420,2.751,546,1.778,660,4.393,683,4.901,684,3.467,824,5.113,933,3.375,1384,5.241,1534,6.442,1653,6.021,2407,5.388,2493,5.558,2636,5.113,2722,8.689,2723,6.365,2724,6.021,2725,5.558,2726,8.689,2727,8.689,2728,8.689,2729,5.241,2730,9.403,2731,8.689,2732,6.442]],["t/948",[7,1.704,37,2.481,43,5.036,56,1.699,68,2.448,148,1.283,168,2.975,170,3.657,178,2.902,184,2.446,196,3.29,225,2.772,226,2.369,244,4.774,272,4.32,395,3.964,411,1.474,504,4.268,556,4.968,660,2.808,662,3.951,710,5.524,931,5.656,933,5.887,1408,3.718,1420,3.354,1504,4.866,1653,5.983,1672,6.53,2379,5.869,2419,4.47,2630,6.325,2664,6.414,2722,9.862,2725,5.524,2733,6.845,2734,6.845,2735,6.845,2736,6.845,2737,6.845,2738,5.983]],["t/950",[0,0.497,7,1.507,28,5.532,36,2.016,40,1.455,48,2.328,56,1.858,64,1.001,235,1.921,251,2.461,282,3.305,288,1.076,420,3.433,551,2.461,579,5.29,633,3.374,660,4.462,679,3.541,683,2.387,694,4.221,934,3.315,946,4.48,1384,7.603,1408,3.287,1534,4.146,1595,2.839,2398,4.077,2426,5.593,2451,5.29,2493,6.935,2723,7.941,2724,5.29,2725,8.063,2726,9.233,2727,9.233,2728,9.233,2729,6.539,2732,4.146,2739,5.064,2740,6.052,2741,6.052,2742,6.052,2743,6.052,2744,6.052,2745,6.052,2746,6.052,2747,6.052,2748,6.052,2749,6.052,2750,6.052,2751,7.941,2752,6.052,2753,6.052,2754,6.052]],["t/952",[0,0.877,37,2.214,56,1.238,139,5.38,147,2.534,183,6.614,195,5.111,227,1.698,231,2.312,234,5.803,272,3.383,585,4.266,597,5.458,649,5.941,683,3.295,713,4.84,804,5.458,918,6.127,933,4.094,954,5.052,1090,6.013,1365,3.92,1672,5.828,1736,4.501,1819,5.111,2714,7.722,2717,7.597,2755,7.722]],["t/954",[0,0.838,6,1.198,7,2.2,40,2.146,43,4.169,64,1.041,107,2.879,148,1.913,163,2.354,178,2.669,183,5.469,188,2.134,196,3.026,215,2.171,234,3.419,240,4.475,251,3.592,272,4.132,349,4.799,353,4.475,375,4.328,423,3.683,494,4.576,532,5.77,597,4.111,660,2.583,713,5.912,715,3.983,723,6.281,821,3.104,918,5.067,931,4.683,1026,4.053,1090,4.51,1365,4.145,1493,4.924,1503,4.926,1736,3.391,2718,7.13,2719,5.403,2720,5.08,2721,5.08,2739,5.268]],["t/956",[0,0.91,5,3.345,6,0.935,7,1.837,37,1.955,40,2.004,43,2.319,56,0.728,59,1.459,62,2.377,64,0.813,68,1.285,78,3.441,81,2.419,99,1.305,106,4.181,107,2.081,124,2.59,128,4.513,148,1.383,163,1.838,178,2.083,188,1.666,215,1.695,225,1.455,229,1.98,234,2.669,237,2.692,251,3,252,2.347,272,1.989,349,4.008,364,2.596,375,4.476,398,1.541,423,2.875,447,2.49,490,2.905,494,4.59,532,4.82,549,2.739,597,4.82,649,3.493,683,2.91,713,5.132,715,3.995,723,5.246,918,4.232,926,3.566,931,2.604,933,3.615,1090,3.767,1208,3.615,1330,5.772,1365,4.621,1493,3.843,1503,4.114,1585,3.648,1684,3.121,1736,2.647,2379,3.08,2718,5.955,2719,4.513,2720,3.965,2721,3.965,2755,6.819,2756,4.914,2757,4.914,2758,4.914,2759,4.914,2760,4.541]],["t/958",[0,0.838,6,1.198,7,2.2,29,4.569,37,1.668,40,2.146,43,4.169,56,0.932,64,1.041,107,2.492,148,1.656,163,2.354,168,2.736,178,2.669,183,5.469,188,2.134,196,3.026,215,2.171,234,3.419,251,3.592,349,4.799,375,4.328,420,2.515,423,3.683,494,4.576,532,5.77,597,4.111,710,5.08,713,5.912,715,3.983,723,6.281,824,4.673,918,5.067,931,4.683,933,3.084,1090,4.51,1365,4.145,1493,4.924,1503,4.926,1672,6.162,1736,3.391,2178,4.569,2718,7.13,2719,5.403,2720,5.08,2721,5.08]],["t/960",[5,4.91,56,1.604,420,4.327,1365,5.081,2381,5.49]],["t/962",[68,2.725,464,4.672,1365,5.739,1368,6.532,1388,7.267,2379,6.532,2381,5.281,2460,8.409]],["t/964",[0,0.902,5,3.287,7,1.806,13,3.402,23,2.401,82,4.335,86,2.401,99,1.927,102,2.778,104,2.347,121,1.129,123,1.368,140,3.625,151,4.08,176,4.384,211,4.435,231,2.006,258,3.422,260,3.324,321,2.872,365,2.884,368,5.639,375,3.075,400,3.382,414,2.302,420,2.897,447,3.676,479,3.6,494,3.756,546,1.872,782,3.785,814,4.159,875,3.65,935,5.82,936,6.645,982,5.852,1029,4.159,1366,4.489,1396,5.672,2381,3.676,2394,5.383,2395,5.672,2398,4.885,2427,5.518,2509,5.264,2664,4.968,2761,7.252,2762,7.252,2763,7.252]],["t/967",[68,2.185,86,2.767,213,5.369,215,2.882,395,4.84,479,4.149,776,4.501,1219,4.746,1898,6.065,2379,6.698,2381,5.416,2611,9.874,2612,7.722,2613,7.722,2614,7.722,2615,9.874,2616,9.874,2617,7.722,2618,7.722,2619,9.874,2620,9.874,2621,7.722,2622,7.722,2623,7.722,2624,7.722,2625,7.722]],["t/969",[0,0.674,6,1.08,7,2.4,9,1.61,21,3.655,23,1.879,40,1.898,113,4.581,123,1.071,147,1.721,150,5.442,169,2.201,207,1.484,231,3.231,272,2.298,282,3.708,286,2.407,304,2.067,328,2.467,375,2.407,396,3.288,420,3.279,464,2.545,475,6.314,487,4.036,524,3.655,551,2.308,706,4.906,740,6.853,814,3.255,875,4.852,935,6.698,936,5.828,1029,5.528,1039,4.581,1365,3.85,1368,3.558,1371,3.889,1373,4.44,1388,3.959,1510,3.959,2176,3.431,2377,6.936,2381,2.877,2385,3.763,2386,6.623,2387,4.962,2388,4.581,2396,4.962,2461,6.623,2465,4.44,2593,7.174,2594,4.962,2595,4.962,2596,4.962]],["t/971",[0,0.875,1,3.33,5,2.278,6,1.896,7,1.251,13,2.358,59,1.493,66,2.643,76,3.038,80,2.972,81,2.461,84,1.077,85,2.152,86,3.298,99,1.335,100,2.623,121,1.551,125,2.026,137,2.603,140,2.512,148,0.942,163,1.88,196,2.416,197,2.152,216,2.053,231,1.39,237,2.753,241,2.802,243,2.358,272,2.034,291,1.887,292,4.963,324,3.648,335,2.386,337,3.332,354,3.295,365,3.573,368,2.911,369,3.573,371,3.038,376,3.151,411,1.082,412,4.486,420,2.008,456,2.882,461,3.236,565,2.73,666,2.291,679,4.392,710,4.056,752,3.236,755,3.386,764,2.218,793,2.972,804,3.283,814,2.882,936,3.038,954,4.537,974,2.463,1029,2.882,1049,3.573,1060,4.705,1069,2.512,1177,2.463,1207,3.825,1357,4.394,1358,6.936,1360,3.825,1363,4.645,1364,3.731,1365,2.358,1366,3.111,1383,3.825,1396,3.931,1482,4.206,1684,3.192,1925,6.835,1984,3.825,2381,5.668,2403,3.731,2411,3.573,2509,3.648,2687,4.056,2764,5.026,2765,5.026,2766,5.026,2767,5.026,2768,4.645,2769,5.026,2770,5.026]],["t/973",[0,0.805,6,1.395,23,1.612,37,1.942,39,2.386,56,1.305,68,1.273,77,0.85,89,2.045,99,1.947,100,2.542,102,1.865,121,1.72,125,3.552,133,1.651,147,1.477,157,1.493,163,1.821,189,2.443,194,2.85,211,2.978,230,3.535,231,2.028,242,1.889,272,2.967,336,3.615,354,4.306,357,2.312,365,1.937,378,2.542,396,2.821,398,2.298,402,2.434,412,2.911,420,2.928,447,2.468,479,2.418,517,6.038,566,2.715,628,2.944,660,1.998,737,3.135,762,3.535,764,2.149,793,2.88,814,2.793,863,4.257,933,3.591,936,2.944,946,2.184,974,2.386,1029,4.203,1054,3.281,1058,2.434,1208,2.386,1362,6.134,1517,2.944,1558,3.135,1727,4.075,1827,4.257,1921,6.405,1984,3.706,2159,3.535,2255,3.706,2347,3.135,2381,6.416,2403,5.441,2406,3.535,2407,5.733,2414,7.705,2415,3.93,2416,4.5,2417,4.5,2509,3.535,2591,4.257,2771,4.87,2772,4.87,2773,4.87,2774,4.87,2775,3.93,2776,4.87,2777,4.075]],["t/975",[0,0.889,464,4.857,1365,5.081,1381,6.273,2381,5.49]],["t/977",[6,1.946,68,2.674,286,4.335,464,4.585,1365,5.676,1368,6.41,1388,7.132,2379,6.41,2381,5.183,2460,8.252]],["t/979",[0,0.914,5,3.377,6,1.887,23,2.466,26,4.556,77,1.301,78,3.474,84,1.596,105,2.662,111,3.34,120,1.756,121,1.159,133,2.525,157,1.517,160,3.775,161,2.483,163,2.786,167,4.012,178,3.158,186,2.272,210,3.802,318,3.415,328,3.237,365,2.963,406,3.113,420,2.976,464,4.996,546,1.922,587,3.802,764,3.287,782,3.887,789,3.723,1211,5.407,1264,5.826,1347,5.195,1381,7.365,1506,7.359,2193,6.011,2494,6.011,2707,6.233]],["t/981",[6,1.765,23,3.071,84,1.987,121,2.006,125,3.738,157,1.889,329,5.268,658,4.996,739,6.058,782,4.84,957,7.255,1199,5.971,1310,5.372,1345,7.761,1347,6.469,2143,6.732,2393,6.594,2778,8.108,2779,9.275]],["t/983",[0,0.548,5,3.027,59,3.128,65,1.847,68,1.746,69,4.847,70,7.201,83,2.979,85,2.859,94,2.679,121,1.767,140,3.338,147,2.791,167,6.116,174,3.512,185,3.061,186,3.979,242,2.59,265,2.902,286,3.903,312,4.134,313,3.757,319,6.171,328,4.578,329,3.793,364,1.76,379,3.251,406,2.791,540,4.499,658,4.959,739,4.362,779,4.658,949,4.575,1051,6.682,1054,4.499,1152,3.992,1192,7.429,1199,4.3,1734,5.838,2780,5.389]],["t/985",[0,0.774,6,1.796,84,2.47,90,3.422,157,2.348,166,2.827,233,7.225,329,5.358,341,5.26,390,3.488,528,6.355,635,5.169,1381,5.464,1585,7.004,2395,7.38,2781,8.718]],["t/987",[0,0.497,1,2.685,8,2.229,13,2.839,36,2.551,37,1.603,48,3.305,53,4.364,62,2.927,64,1.001,69,6.237,84,2.141,159,3.541,160,3.067,161,4.18,171,2.246,174,2.309,231,1.674,240,4.303,258,2.856,260,2.774,291,2.272,312,2.203,321,2.397,329,3.437,412,5.137,418,8.334,420,4.767,455,4.605,479,3.005,492,1.515,546,1.562,624,5.788,658,6.187,739,3.953,779,4.221,1199,3.896,1310,5.787,1345,5.064,2143,4.393,2193,4.884,2411,4.303,2430,3.844,2778,5.29,2782,5.29,2783,5.29,2784,4.884]],["t/989",[2,3.237,8,2.469,9,2.699,23,3.151,37,2.521,45,4.966,47,5.258,84,2.039,258,4.491,318,4.362,329,5.405,406,3.977,1084,5.126,1211,6.907,1582,5.753,1585,7.064,2180,8.318,2255,7.241,2300,8.794]],["t/991",[0,0.967,5,3.309,6,2.243,8,3.187,26,4.465,56,1.081,57,1.405,58,1.827,65,2.019,68,2.884,78,3.405,83,3.256,84,2.363,99,2.598,105,2.609,108,3.781,120,1.721,121,1.136,157,1.487,161,2.433,162,3.649,197,3.125,318,3.346,346,3.425,375,3.095,400,3.405,464,3.273,504,3.328,513,4.519,729,5.092,875,4.922,974,4.792,1264,5.71,1381,4.228,1506,5.419,2177,4.465,2785,5.71]],["t/993",[0,0.913,7,2.216,68,2.327,120,2.098,197,3.81,225,3.292,226,3.848,354,3.907,562,4.448,631,3.773,632,5.408,643,4.717,674,4.644,809,6.327,834,2.455,875,4.479,1387,5.578,1390,6.961,1852,5.9,2515,7.181,2786,8.899,2787,8.899]],["t/996",[7,2.29,8,2.386,56,1.362,68,2.967,77,1.606,84,1.971,99,2.443,108,4.764,188,3.117,464,4.124,632,4.102,654,6.998,662,3.881,679,5.381,1314,6.301,1387,5.765,1415,7.696,1850,6.676,2194,7.696,2788,7.194,2789,8.499,2790,8.04]],["t/998",[0,0.483,6,1.873,37,2.608,40,2.179,57,1.622,58,2.109,68,2.204,107,2.377,108,3.051,137,3.051,157,1.2,178,2.497,188,1.996,209,2.641,225,1.744,231,1.629,272,4.349,291,2.211,304,3.069,321,2.332,331,2.905,354,2.586,398,1.847,464,2.641,472,4.108,496,1.245,497,2.985,562,2.944,587,5.803,631,3.573,632,2.627,633,4.699,662,2.485,679,3.446,751,3.314,752,3.792,782,3.074,1069,2.944,1366,3.646,1381,3.411,1403,3.967,1423,6.413,1427,6.801,1429,3.792,1432,4.928,1458,3.147,1848,4.482,1959,4.607,2427,4.482,2791,5.889,2792,5.148,2793,4.108,2794,5.148,2795,5.443,2796,5.443,2797,5.443,2798,5.443,2799,5.443,2800,5.443,2801,5.443,2802,5.443]],["t/1000",[0,0.785,2,1.172,7,0.858,8,2.107,16,1.711,37,1.87,40,1.887,42,1.735,56,1.045,58,1.766,59,2.411,63,2.322,64,0.925,84,2.632,99,1.486,105,2.902,110,1.402,121,1.488,124,1.21,147,1.045,160,2.835,161,3.938,162,2.795,163,1.289,178,1.461,196,1.657,218,4.368,228,2.061,231,0.954,258,2.639,281,0.856,304,1.255,312,2.956,325,1.491,375,1.461,387,1.772,390,2.609,395,1.996,396,1.996,397,2.623,400,2.608,402,1.723,406,1.441,410,2.361,418,5.303,420,4.331,463,3.239,464,1.546,465,3.207,479,1.711,482,3.207,538,2.134,545,2.696,546,2.798,548,4.538,558,6.155,585,1.76,594,1.627,630,1.799,631,1.461,683,1.359,737,2.219,806,2.623,974,1.689,1018,2.876,1310,1.996,1311,2.361,1385,3.013,1429,2.219,1510,2.404,1548,2.559,1607,2.696,1773,2.623,2164,2.782,2206,2.559,2225,2.885,2252,2.623,2253,2.885,2270,2.885,2784,2.782,2803,3.447,2804,3.447,2805,3.447,2806,3.447,2807,3.447,2808,3.447,2809,3.447,2810,3.447,2811,3.447,2812,3.447,2813,3.447,2814,5.168,2815,5.593,2816,2.885,2817,8.249,2818,7.503,2819,5.593,2820,3.447,2821,2.502,2822,3.447,2823,3.447,2824,3.447,2825,3.447,2826,5.593]],["t/1002",[6,2.434,7,2.499,133,3.403,235,3.187,284,6.145,328,4.363,706,6.001,2827,9.277,2828,9.277]],["t/1004",[1,3.885,15,4.47,36,2.054,48,3.368,62,4.235,64,1.991,121,1.363,133,2.968,161,2.919,188,2.968,215,3.02,288,1.556,298,3.483,395,5.072,420,3.498,463,5.072,464,3.927,465,5.022,473,7.189,777,4.605,1025,4.347,1582,5.294,2829,8.757,2830,8.757,2831,8.757,2832,8.092]],["t/1006",[0,0.74,6,1.974,9,1.838,36,2.115,40,2.342,48,2.493,53,2.831,56,1.335,66,3.408,96,2.891,99,1.722,105,3.223,120,2.125,121,1.948,148,1.215,174,2.472,181,2.058,239,2.722,251,2.635,288,1.992,400,5.689,407,3.964,474,4.742,493,6.41,499,4.361,759,3.175,875,4.538,879,3.332,982,5.23,2626,4.297,2833,5.423]],["t/1008",[6,2.103,105,3.949,120,2.605]],["t/1011",[0,0.899,8,2.254,9,3.402,36,2.038,61,4.403,81,3.59,99,2.308,110,3.532,121,1.352,181,2.758,251,3.532,304,3.163,346,4.075,474,5.759,493,6.176,499,5.297,534,6.946,551,3.532,627,7.594,879,4.467,2626,5.76,2834,8.028]],["t/1013",[8,2.884,9,3.603,77,1.554,99,2.364,110,3.618,121,1.385,147,2.698,198,5.007,207,2.327,242,3.451,304,3.24,493,6.327,533,7.447,534,6.439,640,6.096,660,3.651,879,4.576,887,6.606,1245,6.961,2835,8.223,2836,8.899,2837,8.899]],["t/1015",[9,2.196,40,2.384,56,0.776,77,1.352,81,1.719,121,0.816,125,2.113,140,2.62,148,0.982,150,6.105,163,1.961,171,1.945,174,2,226,1.814,238,2.267,251,2.131,282,2.016,304,1.909,377,2.824,400,2.445,494,4.77,534,3.036,622,2.041,779,6.423,879,3.982,917,4.442,1791,8.05,2537,4.1,2626,3.476,2835,4.844,2838,4.231,2839,4.844,2840,4.844,2841,4.844,2842,4.844,2843,4.844,2844,4.844,2845,8.51,2846,4.844,2847,8.51,2848,4.387,2849,4.844,2850,4.844,2851,4.844,2852,4.844,2853,4.844,2854,4.844,2855,4.844,2856,8.51,2857,4.582,2858,8.51,2859,4.231,2860,5.242,2861,5.242,2862,5.242,2863,5.242,2864,4.844]],["t/1017",[77,1.873,107,3.025,121,1.669,123,2.023,148,2.01,400,5.002]],["t/1019",[0,0.807,9,2.989,36,1.725,37,1.296,56,1.309,57,0.942,58,3.082,59,1.453,77,1.716,81,1.604,105,4.223,107,2.074,120,2.903,121,1.53,123,1.667,181,3.346,189,1.63,193,2.182,207,1.279,225,1.448,226,1.693,227,0.994,239,2.054,288,0.869,304,1.781,400,3.43,412,5.283,413,5.86,424,1.774,464,2.194,474,5.542,493,3.478,496,2.554,499,5.956,523,2.924,630,2.553,852,2.657,853,2.892,879,2.515,917,2.137,1196,2.992,1197,3.826,1219,2.778,1916,3.412,2146,2.805,2358,3.028,2626,3.243,2838,3.948,2848,6.154,2865,4.276,2866,3.948,2867,4.52,2868,4.892]],["t/1021",[0,0.852,9,2.267,57,1.538,58,2,59,3.083,64,1.322,65,2.211,81,3.403,99,2.123,105,2.856,106,3.165,110,3.249,120,1.884,123,1.508,147,2.423,170,4.27,181,2.537,207,2.09,216,4.24,400,3.727,473,6.78,474,5.46,491,5.8,493,5.682,499,5.021,505,4.947,551,3.249,879,4.109,974,3.915,1025,3.967,2430,5.075,2626,5.298,2833,6.687,2869,6.986]],["t/1023",[0,0.691,2,2.864,3,3.213,6,2.25,7,2.097,33,6.819,74,3.678,92,4.877,93,4.829,94,3.379,96,3.756,97,2.091,106,4.682,121,1.311,170,4.499,195,5.15,231,2.329,316,4.362,354,3.697,365,3.349,369,5.987,504,3.839,551,3.424,826,5.873,2636,6.251,2870,6.112,2871,8.421,2872,8.421,2873,6.251]],["t/1025",[56,1.588,215,3.699,272,4.341,472,7.481,834,2.959,843,6.411]],["t/1028",[6,1.958,36,1.848,40,2.323,48,3.029,53,3.441,81,2.582,99,2.092,106,4.073,111,3.532,121,2.048,147,3.472,218,4.876,288,2.338,304,4.169,759,3.859]],["t/1030",[0,0.338,1,1.828,2,2.193,4,1.828,6,1.227,7,1.026,8,2.804,9,3.261,16,3.201,39,2.019,40,2.221,43,3.748,48,1.585,52,4.786,56,0.61,57,0.793,77,1.953,90,2.881,96,2.875,97,1.601,106,1.632,110,3.653,111,2.891,121,1.236,148,1.488,166,1.932,181,1.308,189,3.446,190,3.434,198,2.318,252,3.794,282,1.585,299,1.061,304,1.5,312,1.5,332,3.897,357,1.956,368,2.386,447,2.088,534,3.734,537,1.209,539,1.91,547,1.591,565,2.238,593,5.044,662,1.738,671,3.562,733,2.386,734,2.776,759,3.159,831,2.15,846,1.818,868,2.277,918,2.363,946,1.848,947,2.823,967,2.436,968,2.436,969,2.491,970,2.52,996,2.491,998,2.874,1001,2.583,1002,2.019,1003,2.118,1005,2.277,1007,2.583,1009,2.463,1011,2.617,1030,7.351,1069,2.059,1078,3.325,1080,2.991,1153,2.436,1265,2.991,1336,5.896,1662,3.059,1787,5.539,1934,3.448,2153,3.325,2154,3.059,2155,3.448,2156,3.448,2157,3.325,2158,3.325,2658,3.448,2874,3.808]],["t/1032",[0,0.502,6,1.165,7,1.524,8,2.247,9,3.568,37,1.621,40,2.342,56,1.283,77,1.755,99,1.626,104,1.98,106,2.424,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,304,3.66,332,3.699,345,3.699,346,2.871,660,2.511,829,6.04,946,3.884,1003,3.146,2875,5.655,2876,5.349,2877,5.349,2878,7.571,2879,5.349,2880,8.55,2881,5.349,2882,5.349,2883,5.349]],["t/1034",[6,2.042,39,5.255,77,1.873,304,3.905,829,7.481,2884,10.725]],["t/1036",[6,1.271,9,3.378,36,1.567,39,3.272,40,2.429,48,2.568,53,2.917,77,1.166,106,2.645,121,1.916,147,2.025,288,2.117,304,2.431,759,3.272,829,4.658,2880,8.881]],["t/1038",[0,0.611,2,3.789,7,1.855,39,4.857,49,5.407,57,1.434,58,1.864,59,2.212,77,2.074,104,2.41,106,4.704,107,2.101,121,2.052,148,2.088,174,2.842,189,2.483,193,4.421,252,3.558,304,2.712,312,2.712,357,3.536,492,1.864,868,4.116,1069,3.723,1676,6.233,1678,7.754,2885,7.449,2886,7.449,2887,7.449,2888,7.449,2889,7.449]],["t/1040",[0,0.9,2,3.299,7,1.795,36,1.118,45,2.486,56,1.068,57,1.674,58,3.153,59,3.094,77,1.988,96,2.125,106,4.642,107,1.344,120,2.883,121,1.772,122,1.789,123,0.899,124,2.531,125,1.92,148,0.893,159,2.788,163,1.782,189,2.403,192,3.323,193,3.879,225,2.135,226,1.649,239,4.073,242,1.848,288,1.281,496,2.626,551,1.937,562,2.381,643,2.525,662,2.01,852,4.724,862,5.452,864,3.159,916,3.423,917,3.149,946,4.914,1675,3.625,2146,4.134,2167,3.264,2358,2.949,2890,5.818,2891,3.159]],["t/1042",[0,0.735,2,2.544,7,1.246,36,2.101,48,3.445,56,1.108,57,0.963,58,3.099,77,1.858,89,3.141,106,4.214,107,2.527,120,2.632,121,1.893,123,0.944,148,0.938,163,1.871,169,1.94,189,2.493,193,3.336,225,1.481,226,1.731,227,1.017,238,4.298,239,3.141,242,1.94,288,1.767,304,2.723,387,2.573,449,2.072,496,2.617,551,2.034,562,2.501,643,2.652,662,2.111,683,3.92,684,2.518,852,4.063,862,4.689,916,3.551,917,3.267,946,4.457,2146,4.289,2168,2.673,2170,5.851,2171,6.036,2358,3.097,2890,6.036,2891,3.317]],["t/1044",[0,0.727,2,2.51,7,1.223,36,2.079,48,2.838,53,3.871,56,1.093,57,0.946,58,3.085,77,1.844,89,3.099,106,4.181,107,2.499,120,2.614,121,1.949,123,0.927,148,0.921,163,1.838,169,1.905,189,2.459,193,3.291,225,1.455,226,1.7,227,0.999,238,4.26,239,3.099,242,1.905,288,1.751,304,2.687,387,2.526,449,2.035,496,2.605,551,1.998,562,2.456,643,2.604,662,2.073,683,3.885,684,2.473,852,4.008,862,4.626,916,3.503,917,3.223,946,4.417,2146,4.232,2168,2.625,2172,5.772,2173,5.955,2358,3.042,2890,5.955,2891,3.258]],["t/1046",[0,0.72,2,2.477,7,1.202,36,2.057,48,2.8,53,3.181,56,1.078,57,0.929,58,3.071,77,1.83,89,3.058,106,4.15,107,2.473,120,2.596,121,1.989,123,0.911,148,0.905,163,1.805,169,1.872,189,2.427,193,3.248,225,1.429,226,1.671,227,0.981,238,4.222,239,3.058,242,1.872,288,1.735,304,2.651,387,2.482,449,1.999,496,2.593,551,1.963,562,2.413,643,2.559,662,2.037,683,3.85,684,2.429,759,4.295,852,3.955,862,4.564,916,3.457,917,3.181,946,4.378,2146,4.176,2168,2.579,2358,2.988,2890,5.876,2891,3.2,2892,6.093,2893,6.093]],["t/1048",[0,0.532,36,1.52,48,2.493,53,2.831,57,1.736,58,2.256,59,1.925,77,1.132,106,2.567,107,2.543,121,1.986,147,3.144,148,1.215,174,2.472,229,2.612,288,1.992,312,2.36,387,3.332,414,2.058,492,1.622,587,3.308,662,2.735,671,3.581,759,3.175,834,3.251,836,3.188,837,3.179,916,3.077,917,2.831,1034,3.964,1046,5.168,1676,5.423,1963,2.019,2168,3.463,2894,5.989,2895,5.989,2896,5.989,2897,6.481,2898,11.209,2899,5.989,2900,5.989,2901,5.989]],["t/1050",[0,0.468,36,1.932,48,3.719,53,4.625,57,1.586,58,2.062,59,1.694,107,2.727,121,2.053,125,2.299,147,1.73,174,2.177,229,2.299,288,2.079,312,2.077,414,1.811,492,1.428,587,2.913,662,4.079,671,3.153,759,4.737,834,3.328,836,3.328,837,3.319,916,4.59,917,4.223,1034,5.913,1692,4.463,2894,5.273,2895,5.273,2896,5.273,2899,5.273,2900,7.613,2901,8.935,2902,9.668,2903,8.238,2904,5.706]],["t/1052",[0,0.458,2,3.42,6,0.654,8,1.827,9,1.997,36,2.239,37,1.478,38,1.933,40,1.617,41,2.688,42,2.808,43,2.633,46,2.876,48,1.322,53,2.437,54,2.615,55,2.773,56,1.043,57,1.355,58,2.849,59,1.657,68,0.899,77,0.974,84,1.737,91,1.407,97,1.385,99,0.913,102,1.316,106,1.361,107,1.986,108,2.89,120,1.315,121,1.864,123,1.052,125,3.266,169,1.333,189,2.701,193,3.975,196,1.652,197,2.388,218,2.127,238,2.412,239,2.343,243,2.617,251,1.397,258,1.622,272,1.391,288,1.584,294,2.494,299,2.086,304,2.951,312,2.031,375,1.457,387,1.767,406,3.387,477,1.899,492,1.396,496,2.214,504,2.543,524,2.212,562,1.718,643,1.821,663,4.257,759,1.684,834,2.236,836,1.587,837,1.582,839,2.615,844,1.565,846,1.517,852,3.03,862,3.497,874,4.23,875,2.808,916,1.631,917,1.501,1069,1.718,1087,2.808,1153,2.032,1682,3.004,1736,3.005,2146,3.199,2154,2.551,2168,1.836,2174,4.245,2175,4.668,2177,3.412,2358,2.127,2359,5.155,2361,5.155,2890,4.502,2891,2.278,2905,3.436,2906,3.436,2907,3.436,2908,2.443,2909,5.578,2910,3.436]],["t/1054",[0,0.951,6,2.206,106,4.589,107,2.684,121,1.481,147,2.885,229,3.835,284,4.574,452,5.568,551,3.869,562,4.757,821,4.693,1563,7.241,2168,5.084,2178,6.907,2911,7.68]],["t/1056",[0,0.497,6,1.902,8,2.592,9,1.717,26,3.701,36,1.42,39,2.965,56,1.701,77,1.501,81,2.817,84,1.297,96,4.851,97,2.701,99,2.283,102,3.291,104,1.958,105,2.163,107,2.424,121,1.952,147,2.605,148,1.61,168,2.63,186,1.846,189,2.864,197,2.591,216,2.472,225,1.792,226,2.094,227,1.23,231,1.674,342,4.303,343,4.303,344,4.146,345,3.658,354,2.657,400,5.072,407,5.255,410,4.146,417,5.064,551,2.461,759,2.965,874,3.158,875,5.474,927,4.013,934,4.707,1661,4.393,2785,4.734,2912,5.593]],["t/1058",[400,5.206,631,4.732]],["t/1061",[6,1.489,36,1.834,40,2.396,48,3.008,53,3.416,96,3.488,99,2.078,121,1.956,147,2.371,288,2.152,304,3.727,400,5.86,759,3.832,2908,5.56]],["t/1063",[8,2.693,9,3.678,64,1.322,77,1.813,99,2.758,110,4.221,121,1.244,147,2.423,198,4.496,242,3.099,304,2.91,400,5.693,533,8.687,534,6.013,654,6.081,868,4.416,879,4.109,887,7.707,1245,6.251,1850,5.8,1851,6.449,2857,6.986,2859,6.449,2913,7.991,2914,7.991,2915,7.385]],["t/1065",[5,1.076,7,0.591,9,2.051,16,1.178,36,0.557,37,0.629,40,2.407,48,0.913,53,1.037,77,0.714,89,0.997,99,0.63,121,1.231,123,0.772,125,2.914,147,0.72,148,0.767,150,6.835,164,1.389,166,0.711,176,2.473,197,1.016,238,2.772,282,2.466,304,0.864,312,0.864,364,0.626,377,3.895,387,1.22,399,1.452,400,1.908,494,3.321,533,1.986,534,1.375,622,2.497,683,0.936,759,1.163,764,1.047,779,7.19,879,4.601,910,1.723,917,4.874,1219,1.348,1504,1.687,1791,5.604,2383,1.986,2537,5.015,2626,4.251,2838,1.915,2839,5.925,2840,5.925,2841,5.925,2842,5.925,2843,6.683,2844,5.925,2845,9.527,2846,2.193,2847,9.527,2848,5.365,2849,2.193,2850,5.925,2851,5.925,2852,5.925,2853,5.925,2854,5.925,2855,5.925,2856,5.925,2857,5.604,2858,5.925,2859,5.174,2864,5.925,2916,2.373,2917,2.373,2918,2.373,2919,2.373,2920,2.373,2921,2.373,2922,2.373,2923,2.373]],["t/1067",[77,1.396,86,3.437,99,2.123,107,3.569,121,2.018,123,1.508,125,3.22,147,2.423,148,1.498,168,3.473,188,2.709,234,4.34,244,5.574,251,3.249,304,2.91,349,4.34,368,4.628,400,5.693,432,5.383,512,4.725,551,3.249,662,4.38,927,5.298,1069,3.994,1207,6.081,2838,6.449,2924,7.991]],["t/1069",[0,0.539,6,1.249,7,1.05,9,3.091,36,1.89,37,1.117,39,2.065,53,1.841,56,1.194,57,1.263,58,2.897,59,2.393,77,1.407,84,1.406,99,1.12,104,1.364,105,4.534,107,1.851,110,1.714,120,2.657,121,1.625,123,1.716,181,2.888,189,2.187,193,2.927,207,1.102,223,3.258,224,3.727,225,2.386,226,2.789,227,1.638,235,1.338,239,2.756,243,1.977,288,1.166,304,1.535,398,1.322,400,3.758,424,3.575,491,3.059,492,1.055,496,2.303,505,2.609,547,1.628,551,1.714,562,2.107,643,2.234,662,1.779,852,3.565,853,3.881,916,3.116,917,3.52,1176,2.27,1181,2.609,1196,4.929,1197,5.133,1219,2.394,1890,3.402,2146,3.763,2358,2.609,2838,3.402,2848,5.492,2866,5.296,2867,6.065,2891,2.795,2925,3.527,2926,2.839,2927,3.895,2928,3.895]],["t/1071",[9,2.151,36,2.637,39,2.497,48,2.917,56,1.486,58,2.993,68,1.333,89,2.14,105,4.017,107,2.139,120,2.365,121,1.812,123,1.709,181,2.408,189,2.527,193,3.382,207,1.333,225,1.509,226,1.764,227,1.541,238,3.279,239,3.184,243,3.557,288,1.348,296,3.046,304,1.855,400,2.377,414,1.618,424,2.751,496,2.528,562,2.547,632,2.273,633,2.841,643,2.701,683,2.99,852,4.119,853,4.484,916,4.762,917,4.684,1196,4.638,1197,5.932,1890,4.113,2146,4.349,2169,5.028,2170,5.932,2171,6.12,2358,3.155,2866,6.12,2891,3.379,2925,4.265,2929,7.583]],["t/1073",[9,2.204,36,2.669,39,2.581,53,3.395,56,1.368,58,3.022,89,2.212,105,4.066,107,2.192,120,2.403,121,1.831,123,1.742,181,2.467,189,2.59,193,3.466,225,1.56,226,1.823,227,1.579,238,3.36,239,3.263,243,3.646,288,1.381,304,1.918,400,2.457,414,1.672,424,2.819,496,2.552,562,2.633,643,2.792,683,2.077,852,4.221,853,4.595,916,4.84,917,4.749,1196,4.753,1197,6.079,1890,4.251,2146,4.457,2169,5.153,2172,6.079,2173,6.271,2358,3.261,2866,6.271,2891,3.492,2925,4.408,2930,7.771]],["t/1075",[9,2.204,36,2.669,39,2.581,56,1.368,58,3.022,89,2.212,105,4.066,107,2.192,120,2.403,121,1.831,123,1.742,181,2.467,189,2.59,193,3.466,225,1.56,226,1.823,227,1.579,238,3.36,239,3.263,243,3.646,288,1.381,304,1.918,400,2.457,414,1.672,424,2.819,496,2.552,562,2.633,643,2.792,683,2.077,759,3.807,852,4.221,853,4.595,916,4.84,917,4.749,1196,4.753,1197,6.079,1890,4.251,2146,4.457,2169,5.153,2358,3.261,2866,6.271,2891,3.492,2892,6.503,2893,6.503,2925,4.408,2931,7.771]],["t/1077",[0,0.567,6,0.636,8,2.445,9,1.547,11,4.048,23,1.107,36,2.06,37,1.445,39,1.637,40,1.951,48,3.378,53,3.018,56,0.808,58,1.365,59,1.62,64,1.318,77,0.584,84,2.641,90,1.212,91,0.843,104,1.082,105,1.949,120,1.286,121,1.953,124,1.173,148,0.626,161,2.657,163,1.25,181,1.061,187,3.041,188,1.849,190,3.447,207,1.806,216,1.365,230,2.426,231,0.925,234,1.815,281,0.83,304,2.515,318,1.532,364,0.881,385,1.55,390,2.554,400,2.543,420,1.335,463,3.159,464,3.575,465,1.917,482,4.572,492,0.836,496,0.706,530,2.069,546,2.846,548,5.091,558,6.904,585,1.706,631,1.417,717,0.948,759,1.637,792,2.183,875,1.682,917,1.46,973,2.797,1018,2.804,1090,1.706,1114,3.297,1133,2.216,1225,3.562,1311,2.29,1368,2.095,1388,3.804,1390,2.614,1420,1.637,1595,1.568,1773,2.543,2430,2.123,2793,3.804,2932,3.342,2933,3.342,2934,3.342,2935,3.342,2936,3.342,2937,3.342,2938,3.342,2939,3.342,2940,3.342,2941,3.342,2942,3.342,2943,3.342,2944,3.342,2945,3.342,2946,4.401,2947,3.342,2948,5.454,2949,5.454,2950,5.454,2951,3.342,2952,3.088,2953,3.342,2954,3.342,2955,3.342,2956,5.454]],["t/1079",[0,0.749,1,2.927,3,2.517,6,2.394,7,1.643,8,3.077,16,3.276,23,2.184,26,4.035,29,4.789,33,4.19,64,1.091,68,1.725,81,2.163,92,3.821,93,3.784,94,2.647,95,5.396,99,1.753,141,4.473,148,1.962,157,1.344,160,3.344,161,3.043,186,3.445,197,2.825,316,3.418,342,4.691,343,4.691,344,4.52,365,2.624,375,2.797,391,3.944,492,2.285,498,4.52,551,3.712,658,4.917,759,3.233,875,5.685,930,4.374,1368,4.136,2141,4.602,2785,5.161]],["t/1081",[56,1.604,215,3.735,834,2.988,843,6.475,2142,9.064]],["t/1083",[0,0.802,6,1.86,8,2.535,95,4.667,99,2.596,121,1.833,186,2.98,329,5.549,345,7.118,398,3.063,551,3.973,1743,7.642,2143,7.092,2144,7.885]],["t/1085",[6,1.958,8,2.044,36,1.848,40,2.323,48,3.029,53,3.441,81,2.582,95,3.763,99,2.092,111,3.532,121,2.048,147,3.472,288,2.338,304,4.169,345,4.762,759,3.859]],["t/1087",[0,0.507,1,1.73,2,2.1,4,1.73,6,1.459,7,0.971,8,2.847,9,3.205,16,1.936,39,1.911,40,2.201,43,3.617,48,1.5,52,4.584,56,0.578,57,0.751,77,1.973,90,2.78,95,4.164,99,1.036,110,3.544,111,2.769,121,1.193,123,0.736,124,1.369,148,1.436,166,1.85,181,1.238,189,3.527,190,3.314,198,2.195,207,1.02,216,1.593,252,3.661,282,1.5,299,1.004,304,1.42,312,1.42,316,2.02,332,3.733,354,1.713,357,1.852,365,1.551,368,2.259,534,3.576,537,1.145,539,1.809,547,1.506,565,2.119,593,4.868,635,1.749,662,1.646,671,3.412,733,2.259,734,2.628,759,3.025,831,2.036,846,1.721,868,2.155,918,2.237,946,1.749,967,2.306,968,2.306,969,2.358,970,2.385,996,2.358,998,2.72,1001,2.445,1002,1.911,1003,2.006,1005,2.155,1007,2.445,1009,2.332,1011,3.922,1030,7.182,1069,1.95,1078,3.148,1080,2.831,1153,2.306,1265,2.831,1336,5.69,1661,2.831,1662,2.896,1787,5.346,1934,3.264,2153,3.148,2154,2.896,2155,3.264,2156,3.264,2157,3.148,2158,3.148,2159,2.831,2160,2.414,2161,2.672,2658,3.264,2957,3.9]],["t/1089",[0,0.502,6,1.165,7,1.524,8,2.247,9,3.568,37,1.621,40,2.342,56,1.283,77,1.755,95,2.923,99,1.626,104,1.98,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,304,3.66,332,3.699,345,3.699,346,2.871,660,2.511,829,6.04,946,3.884,1003,3.146,2876,5.349,2877,5.349,2878,7.571,2879,5.349,2880,8.55,2881,5.349,2882,5.349,2883,5.349,2958,6.119]],["t/1091",[6,2.042,39,5.255,77,1.873,95,5.123,304,3.905,829,7.481]],["t/1093",[6,1.271,9,3.378,36,1.567,39,3.272,40,2.429,48,2.568,53,2.917,77,1.166,95,3.19,121,1.916,147,2.025,288,2.117,304,2.431,759,3.272,829,4.658,2880,8.881]],["t/1095",[0,0.892,7,1.312,36,2.391,39,2.581,45,2.749,56,1.151,57,1.778,58,3.22,59,3.229,95,2.516,107,2.192,120,2.774,121,1.771,123,1.466,124,2.728,159,3.082,189,2.59,193,4.119,225,1.56,226,1.823,227,2.209,239,4.281,243,2.471,288,1.812,304,2.829,449,2.181,496,2.687,551,2.142,562,2.633,643,2.792,662,2.223,852,5.016,853,4.595,862,3.302,864,3.492,916,3.69,917,3.395,2146,4.457,2167,3.609,2358,3.261,2891,3.492,2959,6.503]],["t/1097",[0,0.827,36,2.814,39,2.52,48,3.503,56,1.131,57,0.99,58,3.12,89,3.207,107,2.569,120,1.8,121,1.907,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.188,238,4.357,239,3.207,243,3.582,288,1.791,304,2.78,387,2.645,449,2.13,496,2.635,562,2.571,643,2.726,683,3.974,684,2.589,852,4.147,853,4.515,916,4.784,917,4.402,2146,4.379,2168,2.748,2169,5.063,2170,5.973,2171,6.162,2358,3.184,2891,3.411,2959,6.39]],["t/1099",[0,0.747,36,2.739,39,2.52,48,3.503,53,3.978,56,1.131,57,0.99,58,3.12,89,3.207,107,2.569,120,1.8,121,1.969,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.048,238,4.357,239,3.207,243,3.582,288,1.791,304,2.78,387,2.645,449,2.13,496,2.635,562,2.571,643,2.726,683,3.974,684,2.589,852,4.147,853,4.515,916,4.324,917,3.978,2146,4.379,2168,2.748,2169,5.063,2172,5.973,2173,6.162,2358,3.184,2891,3.411,2959,6.39]],["t/1101",[0,0.739,36,2.723,39,2.474,48,3.464,53,3.29,56,1.115,57,0.972,58,3.106,89,3.163,107,2.54,120,1.775,121,2.007,123,1.421,169,1.958,189,2.51,193,3.359,225,1.495,226,1.747,227,2.029,238,4.318,239,3.163,243,3.533,288,1.775,304,2.742,387,2.596,449,2.091,496,2.623,562,2.524,643,2.676,683,3.938,684,2.541,759,4.413,852,4.091,853,4.453,916,4.276,917,3.934,2146,4.319,2168,2.698,2169,4.993,2358,3.126,2891,3.348,2892,6.302,2893,6.302,2959,6.302]],["t/1103",[0,0.245,6,0.946,9,2.918,36,2.093,39,2.436,40,2.331,48,1.149,53,1.305,56,0.736,57,0.575,58,0.748,59,0.887,77,0.522,91,0.753,97,0.742,99,1.978,107,1.801,110,1.215,121,0.774,123,0.564,125,1.204,131,1.514,147,0.906,148,0.56,157,1.301,158,3.953,171,1.845,181,2.027,185,3.413,186,1.948,188,1.685,190,1.292,197,3.539,251,3.847,265,3.235,288,0.531,299,1.28,304,2.325,312,1.088,338,3.247,345,3.005,354,1.312,387,1.536,424,2.999,449,2.059,492,0.748,547,4.586,550,3.247,551,1.215,585,1.525,662,1.26,663,3.005,759,2.436,834,1.372,836,0.85,837,0.847,839,2.273,844,0.838,869,4.22,874,2.595,931,2.635,975,2.5,1046,1.377,1058,1.493,1307,2.611,1729,5.823,2168,1.596,2176,1.806,2362,8.744,2363,8.271,2369,4.346,2648,4.667,2960,2.987,2961,2.987,2962,2.987,2963,2.987,2964,8.744,2965,2.987,2966,2.5,2967,2.611,2968,2.761,2969,2.611,2970,6.918,2971,2.987,2972,2.987,2973,2.987,2974,7.445,2975,2.987,2976,2.987,2977,2.987,2978,2.987,2979,2.987,2980,2.987,2981,2.987,2982,2.761,2983,4.972,2984,4.346,2985,2.987,2986,4.972,2987,4.594,2988,2.761]],["t/1105",[0,0.607,2,2.516,8,1.919,9,2.099,37,2.615,56,1.096,59,2.197,77,1.292,84,1.585,95,3.534,99,1.965,102,2.834,108,3.832,121,1.844,147,2.243,148,1.849,157,1.507,161,2.466,163,2.767,174,3.765,186,3.613,189,2.466,197,3.168,207,1.935,242,2.869,304,2.694,328,4.289,375,3.137,391,4.423,406,3.092,477,4.088,492,2.47,504,3.373,658,5.315,660,3.036,875,3.724,953,4.125,980,5.492,2177,4.525,2636,5.492]],["t/1107",[0,0.881,6,2.044,8,2.185,94,3.379,95,4.022,107,2.375,121,1.671,125,3.393,147,2.553,178,3.57,229,3.393,240,5.987,258,3.974,262,5.421,284,4.047,342,5.987,343,5.987,344,5.769,349,4.574,350,6.112,351,5.421,352,6.796,353,5.987,452,4.927,551,3.424,562,4.209,775,5.421,821,4.153,1563,6.408,2168,4.499,2178,6.112]],["t/1109",[0,0.817,1,3.327,3,2.861,6,2.425,8,3.216,16,3.723,23,2.483,26,4.587,29,5.444,33,4.763,68,1.961,81,2.459,92,4.344,93,4.301,94,3.009,96,4.986,97,2.776,99,1.992,148,2.095,186,2.288,195,4.587,316,3.885,342,5.332,343,5.332,344,5.138,365,2.983,498,5.138,551,3.049,759,3.674,875,5.012,930,4.972,2141,5.231,2785,5.866]],["t/1111",[56,1.604,215,3.735,834,2.988,843,6.475,2142,9.064]],["t/1113",[0,0.795,6,1.843,8,2.512,96,4.319,97,2.405,99,2.573,121,1.823,186,2.954,329,5.5,345,7.08,398,3.036,551,3.938,1743,7.575,2143,7.029,2144,7.815]],["t/1115",[6,1.958,8,2.044,36,1.848,40,2.323,48,3.029,53,3.441,81,2.582,96,3.513,99,2.092,111,3.532,121,2.048,147,3.472,288,2.338,304,4.169,345,4.762,759,3.859]],["t/1117",[0,0.504,1,1.718,2,2.088,4,1.718,6,1.452,7,0.964,8,2.84,9,3.198,16,1.923,39,1.898,40,2.198,43,3.6,48,1.49,52,4.558,56,0.574,57,0.746,77,1.969,90,2.767,96,3.403,97,1.525,99,1.029,110,3.53,111,2.753,121,1.187,123,0.731,124,1.359,148,1.627,166,1.84,181,1.23,189,3.357,190,3.299,198,2.179,207,1.013,216,1.582,252,3.644,282,1.49,299,0.997,304,1.41,312,1.41,316,2.006,332,3.712,354,1.7,357,1.839,365,1.54,368,2.243,534,3.556,537,1.137,539,1.796,547,1.496,565,2.104,593,4.845,635,1.737,662,1.634,671,3.393,733,2.243,734,2.609,759,3.008,831,2.021,846,1.709,868,2.14,918,2.221,946,1.737,947,2.653,967,2.29,968,2.29,969,2.341,970,2.369,996,2.341,998,2.701,1001,2.428,1002,1.898,1003,1.991,1005,2.14,1007,2.428,1009,2.315,1011,3.9,1030,7.16,1069,1.936,1078,3.125,1080,2.811,1153,2.29,1265,2.811,1336,5.664,1661,2.811,1662,2.875,1787,5.321,1934,3.241,2153,3.125,2154,2.875,2155,3.241,2156,3.241,2157,3.125,2158,3.125,2159,2.811,2160,2.397,2161,2.653,2658,3.241,2874,3.579]],["t/1119",[0,0.502,6,1.165,7,1.524,8,2.247,9,3.568,37,1.621,40,2.342,56,1.283,77,1.755,96,2.729,99,1.626,104,1.98,110,3.521,111,2.744,121,1.795,123,1.154,147,2.626,181,1.943,186,1.867,189,2.887,235,1.943,304,3.66,332,3.699,345,3.699,346,2.871,660,2.511,829,6.04,946,3.884,1003,3.146,2875,5.655,2876,5.349,2877,5.349,2878,7.571,2879,5.349,2880,8.55,2881,5.349,2882,5.349,2883,5.349]],["t/1121",[6,2.042,39,5.255,77,1.873,96,4.784,304,3.905,829,7.481]],["t/1123",[6,1.271,9,3.378,36,1.567,39,3.272,40,2.429,48,2.568,53,2.917,77,1.166,96,2.979,121,1.916,147,2.025,288,2.117,304,2.431,759,3.272,829,4.658,2880,8.881]],["t/1125",[0,0.892,7,1.312,36,2.391,39,2.581,45,2.749,56,1.151,57,1.778,58,3.22,59,3.229,96,2.349,107,2.192,120,2.774,121,1.771,123,1.466,124,2.728,159,3.082,189,2.59,193,4.119,225,1.56,226,1.823,227,2.209,239,4.281,243,2.471,288,1.812,304,2.829,449,2.181,496,2.687,551,2.142,562,2.633,643,2.792,662,2.223,852,5.016,853,4.595,862,3.302,864,3.492,916,3.69,917,3.395,2146,4.457,2167,3.609,2358,4.811,2360,6.271]],["t/1127",[0,0.827,36,2.814,39,2.52,48,3.503,56,1.131,57,0.99,58,3.12,89,3.207,107,2.569,120,1.8,121,1.907,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.188,238,4.357,239,3.207,243,3.582,288,1.791,304,2.78,387,2.645,449,2.13,496,2.635,562,2.571,643,2.726,683,3.974,684,2.589,852,4.147,853,4.515,916,4.784,917,4.402,2146,4.379,2168,2.748,2169,5.063,2170,5.973,2171,6.162,2358,4.727,2360,6.162]],["t/1129",[0,0.747,36,2.739,39,2.52,48,3.503,53,3.978,56,1.131,57,0.99,58,3.12,89,3.207,107,2.569,120,1.8,121,1.969,123,1.441,169,1.995,189,2.545,193,3.406,225,1.523,226,1.78,227,2.048,238,4.357,239,3.207,243,3.582,288,1.791,304,2.78,387,2.645,449,2.13,496,2.635,562,2.571,643,2.726,683,3.974,684,2.589,852,4.147,853,4.515,916,4.324,917,3.978,2146,4.379,2168,2.748,2169,5.063,2172,5.973,2173,6.162,2358,4.727,2360,6.162]],["t/1131",[0,0.739,36,2.723,39,2.474,48,3.464,53,3.29,56,1.115,57,0.972,58,3.106,89,3.163,107,2.54,120,1.775,121,2.007,123,1.421,169,1.958,189,2.51,193,3.359,225,1.495,226,1.747,227,2.029,238,4.318,239,3.163,243,3.533,288,1.775,304,2.742,387,2.596,449,2.091,496,2.623,562,2.524,643,2.676,683,3.938,684,2.541,759,4.413,852,4.091,853,4.453,916,4.276,917,3.934,2146,4.319,2168,2.698,2169,4.993,2358,3.126,2360,6.078,2891,3.348,2892,6.302,2893,6.302]],["t/1133",[0,0.269,6,1.02,9,3.018,36,2.188,39,2.626,40,2.285,56,0.794,57,0.63,58,0.819,59,0.972,77,0.571,90,2.855,91,0.825,97,0.813,99,2.091,107,1.92,110,1.33,121,0.834,123,0.617,125,1.319,131,1.659,147,0.992,148,0.613,157,2.006,158,3.318,171,1.989,181,2.162,185,3.609,186,2.077,188,1.817,190,1.415,197,3.719,251,4.18,288,0.582,299,1.38,304,2.479,312,1.191,338,3.501,345,3.24,354,1.437,387,1.683,424,1.187,449,2.22,492,0.819,547,3.04,550,3.501,551,1.33,585,1.67,646,6.433,662,1.381,663,3.24,759,1.603,834,1.479,836,0.931,837,0.928,839,2.49,844,0.918,869,1.67,874,1.708,931,2.841,976,2.738,1046,1.509,1058,1.636,1150,2.738,1729,6.157,1898,7.149,2168,1.748,2176,1.978,2369,4.686,2648,4.934,2966,2.738,2967,2.86,2968,3.024,2969,2.86,2970,2.738,2982,3.024,2984,4.686,2987,4.954,2988,3.024,2989,3.272,2990,3.272,2991,3.272,2992,3.272,2993,9.85,2994,3.272,2995,3.272,2996,3.272,2997,3.272,2998,7.275,2999,3.272,3000,7.275,3001,3.272,3002,3.272,3003,3.272,3004,3.272,3005,3.272,3006,3.272,3007,3.272,3008,3.272,3009,3.272,3010,3.272,3011,3.272,3012,3.024,3013,5.36,3014,3.272]],["t/1135",[0,0.806,2,2.5,6,1.399,8,2.549,9,2.084,26,4.495,37,2.603,56,1.088,59,2.182,81,2.409,84,1.575,96,4.936,97,2.44,99,1.952,102,2.815,108,3.807,121,1.839,147,2.228,148,1.377,174,3.748,186,3.375,197,3.146,207,1.922,242,2.85,251,2.988,304,2.676,328,4.269,342,5.225,343,5.225,344,5.035,345,4.443,375,3.116,406,3.072,477,4.061,504,3.35,660,3.015,875,4.944,2177,4.495,2785,5.748]],["t/1137",[0,0.864,6,2.005,8,2.12,94,3.278,96,3.644,97,2.029,107,2.97,121,1.814,125,3.292,147,2.477,178,3.464,229,3.292,240,5.808,243,3.833,258,3.855,262,5.26,284,3.927,342,5.808,343,5.808,344,5.597,349,4.437,350,5.93,351,5.26,352,6.593,353,5.808,452,4.78,562,4.084,775,5.26,821,4.029,1069,4.084,1563,6.217,2168,4.365,2178,5.93]],["t/1139",[0,0.742,3,4.66,4,4.013,6,1.722,56,1.809,68,2.365,92,6.505,100,4.721,107,2.551,181,2.872,215,3.119,298,3.598,631,3.835,764,3.992,914,5.908,915,5.349,943,5.187,2393,6.431,3015,6.565,3016,7.3]],["t/1141",[6,2.229,7,2.411,56,1.865,82,5.789,112,7.029,113,7.815,114,5.5,115,7.369,116,8.949,117,8.104,118,8.104,119,8.104,181,3.718]],["t/1144",[0,0.825,3,1.953,4,2.272,6,2.143,8,1.328,40,2.11,43,2.416,48,1.969,56,0.758,57,0.986,64,1.258,77,2.092,87,2.855,90,2.76,96,2.284,97,1.272,99,1.36,114,2.908,121,1.413,123,1.897,148,1.426,157,1.55,181,2.416,189,3.992,207,1.339,220,4.005,225,2.689,226,3.143,227,1.546,231,2.105,252,3.635,414,1.625,424,1.857,539,2.374,547,1.977,628,3.095,733,2.965,759,2.508,764,2.26,831,2.672,846,2.26,915,3.027,946,2.296,947,3.508,967,3.027,968,3.027,969,3.095,970,3.131,996,3.095,998,3.571,1001,3.209,1002,2.508,1003,2.633,1005,2.829,1006,4.284,1007,3.209,1009,3.061,1011,3.252,1069,3.804,1078,4.132,1080,3.716,1115,4.731,1181,3.169,1350,3.571,1662,3.801,2154,3.801,2420,4.476,3017,3.801,3018,5.12]],["t/1146",[0,0.971,37,1.738,57,1.262,58,2.275,59,2.7,64,1.085,81,2.15,83,2.925,84,1.405,104,2.122,111,4.077,124,3.663,160,4.608,161,4.081,187,3.656,188,4.459,190,2.836,206,2.741,208,4.222,212,2.808,260,3.006,288,1.166,362,4.011,423,3.837,424,2.379,488,3.423,492,1.641,513,4.06,540,4.418,548,3.114,549,3.656,583,5.488,662,2.767,673,3.533,697,4.348,712,3.664,791,4.76,1174,6.124,1582,3.965,1733,4.418,2516,5.733,2532,6.061,2946,5.293,3019,4.663,3020,5.733]],["t/1148",[37,2.043,40,2.039,133,2.614,187,6.318,188,3.438,218,4.773,235,2.448,288,1.37,328,3.351,345,4.661,354,4.453,390,2.85,462,2.694,622,3.003,846,4.476,962,3.368,1018,3.965,1023,5.378,1069,3.854,1458,5.418,1621,3.753,1628,4.188,1630,4.512,2016,5.867,2054,5.112,2059,7.278,2347,6.53,3021,7.125,3022,7.125,3023,7.125,3024,5.867,3025,6.222]],["t/1150",[37,1.302,40,2.088,64,0.813,99,1.305,104,2.388,133,2.501,147,1.49,161,2.953,181,2.813,187,4.941,188,3.339,190,3.832,218,3.042,231,2.041,233,3.08,258,2.319,288,1.312,328,2.135,354,2.157,390,1.816,462,3.056,468,3.366,488,3.851,512,2.905,537,1.442,546,1.268,592,3.965,608,3.028,622,1.913,698,3.493,712,1.98,846,3.257,874,2.564,962,2.146,1020,2.135,1152,4.411,1216,5.356,1458,6.322,1604,4.112,1621,2.392,1628,2.669,1630,2.875,1798,3.31,1802,2.073,2054,3.258,2059,5.955,2347,3.164,2911,3.965,2946,5.955,3026,4.914,3027,4.914,3028,4.295,3029,4.914,3030,4.541,3031,9.103,3032,7.705,3033,9.851,3034,4.541,3035,4.541,3036,7.379,3037,8.861,3038,4.914,3039,4.914,3040,4.914,3041,4.914,3042,4.541,3043,4.541,3044,3.843,3045,3.566]],["t/1152",[0,0.331,23,1.334,28,2.594,36,1.486,37,1.679,40,2.184,48,2.437,64,1.048,89,1.692,110,1.638,161,2.609,181,2.818,184,1.44,187,7.008,188,2.654,229,1.624,236,2.383,258,3.695,288,1.126,328,2.753,357,1.913,390,4.221,465,2.311,468,2.76,512,2.383,593,2.559,622,2.467,627,3.522,656,2.207,660,2.599,698,4.504,712,1.624,764,2.796,846,3.917,962,2.767,1018,3.257,1023,7.474,1069,2.014,1216,5.682,1458,3.385,1579,3.152,1592,2.103,1604,3.372,1621,3.084,1628,3.441,1630,3.707,1767,3.252,1798,2.714,2016,3.066,2054,4.2,2059,5.365,2061,3.252,2347,4.079,2946,5.113,3021,3.724,3022,3.724,3023,3.724,3024,4.821,3025,3.252,3028,5.538,3030,3.724,3031,5.855,3034,3.724,3035,3.724,3046,4.029,3047,4.029,3048,4.029,3049,7.829,3050,7.829,3051,4.029,3052,6.335,3053,4.029,3054,4.029,3055,6.335,3056,4.029,3057,4.029,3058,4.029,3059,4.029,3060,4.029,3061,3.372,3062,4.029,3063,4.029,3064,4.029,3065,4.029,3066,4.029,3067,4.029]],["t/1154",[7,2.148,9,1.726,37,1.612,40,2.082,64,1.006,84,1.304,161,2.028,187,3.393,188,3.397,227,1.753,231,1.683,235,1.932,281,1.511,311,3.393,462,1.617,486,4.099,488,5.69,517,8.19,518,6.404,519,5.72,565,5.443,566,3.393,635,2.729,874,3.176,1058,5.976,1069,5.45,1108,3.141,1595,2.855,1804,8.74,1967,3.001,2059,7.593,2104,4.169,2347,3.918,3032,4.76,3042,5.624,3044,4.76,3045,4.417,3068,6.085,3069,4.631,3070,6.085]],["t/1156",[0,0.768,8,2.975,9,3.252,37,3.038,56,1.385,84,2.004,121,2.012,147,2.836,181,3.64,223,4.644,236,5.531,395,5.418,534,6.641]],["t/1158",[0,0.661,8,3.176,9,3.802,56,1.714,77,2.215,107,3.264,110,3.273,121,1.905,123,1.519,227,1.636,251,3.273,286,4.422,288,1.854,304,3.798,409,6.297,513,4.983]],["t/1160",[0,0.707,9,3.561,56,1.276,77,1.505,91,2.174,107,2.431,121,2.016,123,1.626,181,3.986,188,2.922,331,4.251,455,6.559,516,6.128,662,3.637,699,5.043,916,4.092,917,3.765,1114,6.588,1169,5.271,1420,4.223]],["t/1162",[0,0.886,9,3.06,37,3.308,56,1.598,77,1.482,99,2.254,107,2.393,110,3.45,121,1.943,123,1.601,181,3.426,188,2.876,390,3.989,608,3.482,662,3.58,699,4.965,777,4.463,820,5.073,1114,6.523,1169,5.19,1420,4.158]],["t/1164",[0,0.62,7,1.88,8,3.312,9,3.864,56,1.481,64,1.249,77,2.229,107,2.13,110,4.067,121,1.934,123,1.425,153,4.101,162,3.775,164,4.418,225,2.236,227,1.535,286,4.241,513,6.192,3071,10.003,3072,7.551]],["t/1166",[0,0.59,3,1.81,6,0.903,8,1.231,9,2.46,23,1.571,37,1.904,42,2.387,56,1.064,57,0.913,58,1.187,59,1.409,61,2.404,64,0.784,89,1.992,91,1.196,102,1.817,106,1.879,107,1.338,121,1.822,122,1.781,123,1.826,181,2.754,207,1.24,227,1.763,236,2.805,238,4.496,239,4.595,241,2.645,243,3.371,251,1.929,252,2.266,313,2.669,411,1.547,462,1.26,492,2.171,594,2.239,660,1.946,662,2.002,683,4.818,684,4.87,695,5.785,696,6.167,713,2.747,864,3.145,916,5.69,917,5.113,922,3.195,924,5.024,933,3.521,1018,2.439,1169,2.901,1252,3.521,1692,3.71,1765,3.443,2732,4.923,3073,4.744,3074,4.384,3075,3.195,3076,4.744,3077,7.186,3078,4.744,3079,4.744,3080,4.744,3081,4.744,3082,4.384]],["t/1168",[0,1.011,6,1.649,8,2.247,37,1.621,56,1.283,62,2.96,64,1.012,86,2.867,102,3.317,103,3.218,106,3.43,114,3.476,120,2.577,121,0.952,124,3.528,148,1.147,163,2.289,169,2.373,188,2.074,209,2.744,216,2.499,225,1.812,226,2.118,227,2.221,229,2.466,230,4.442,231,1.693,232,2.854,235,2.75,237,3.352,371,6.077,420,2.445,524,3.94,590,5.655,596,3.544,660,4.124,797,4.938,821,3.018,864,6.665,916,4.773,917,4.391,933,2.998,1365,2.871,1495,3.699,1669,8.412,1921,5.656,3083,6.119,3084,6.119,3085,5.655]],["t/1170",[56,1.514,61,5.183,190,4.422,206,4.274,347,7.422,357,4.855,501,5.808,1736,6.517,3086,5.378,3087,7.591]],["t/1172",[0,0.681,2,1.961,9,1.635,35,3.95,56,0.854,61,2.922,68,2.17,73,3.275,81,1.89,83,3.702,121,1.827,122,2.165,124,2.024,151,3.244,162,4.861,164,3.374,188,1.954,190,3.589,197,2.468,225,1.707,226,1.995,227,1.172,229,2.324,242,2.236,288,1.891,291,2.165,320,3.884,362,3.526,367,3.215,390,2.131,402,2.882,403,3.485,411,1.241,546,1.488,549,3.215,630,3.009,659,6.316,673,4.471,712,4.732,749,3.409,750,3.526,813,3.95,1124,4.825,1736,5.731,1795,4.51,2160,3.569,2510,4.653,2517,5.04,3086,6.733,3088,5.766,3089,6.946,3090,7.256,3091,5.076,3092,5.766,3093,5.766,3094,5.328,3095,4.021,3096,3.884]],["t/1174",[0,0.74,2,2.204,9,1.838,102,2.482,120,1.528,121,1.834,124,3.165,147,2.734,151,3.646,157,1.32,163,2.424,171,3.346,173,4.173,190,4.484,206,4.334,227,1.317,242,2.513,288,1.843,291,2.433,312,2.36,321,2.567,365,2.578,367,5.027,368,3.754,387,3.332,390,3.333,403,5.451,492,1.622,494,4.67,501,5.121,523,3.874,546,1.673,711,3.832,729,4.52,744,3.332,749,3.832,750,3.964,813,4.44,868,4.982,966,3.005,1248,4.173,1736,4.857,2510,5.23,3086,3.408,3087,8.321,3090,7.882,3091,3.964,3095,4.52]],["t/1177",[0,1.06,121,1.688,291,3.211,494,6.167,674,4.463,712,4.798,760,7.709,813,5.859,872,4.43,1898,6.207,3086,5.703,3087,8.839,3097,7.156,3098,9.313,3099,7.903,3100,8.552,3101,7.903]],["t/1179",[0,0.886,2,2.025,9,1.689,57,1.146,58,1.49,59,1.768,73,4.824,110,2.421,124,2.09,139,3.833,149,4.419,151,3.35,157,2.017,159,3.483,162,4.949,165,3.559,169,2.309,190,2.574,198,3.35,207,1.557,217,3.641,227,1.726,288,1.509,291,3.189,320,4.01,390,2.201,411,1.282,457,3.888,462,1.582,477,3.29,494,4.399,546,2.192,594,2.809,659,4.53,666,4.921,709,2.956,711,3.52,712,2.399,744,3.061,800,6.906,931,3.155,1159,4.152,1337,5.721,1348,4.982,1717,4.53,1736,3.207,1763,5.204,2160,3.685,2176,5.134,2510,4.804,3086,6.424,3087,6.305,3090,7.424,3102,5.953,3103,5.953,3104,5.502,3105,6.854,3106,5.204,3107,3.888]],["t/1181",[0,0.803,7,1.818,61,4.957,81,2.393,89,3.066,121,1.717,229,2.942,288,1.738,300,5.235,365,2.904,376,4.576,404,6.745,494,3.781,712,4.748,760,8.376,872,3.781,1412,4.519,1499,8.549,1558,4.7,1720,6.381,3086,6.196,3087,5.419,3098,5.71,3108,7.43,3109,7.3,3110,7.3,3111,4.918,3112,7.3,3113,6.746,3114,5.71]],["t/1183",[0,0.885,1,3.759,3,1.742,4,3.097,5,3.164,6,2.404,7,1.137,13,2.142,33,2.9,36,1.988,40,1.9,45,4.952,56,0.676,77,1.48,78,2.129,84,1.816,85,2.988,87,3.892,89,1.917,90,4.388,91,3.249,101,3.128,104,1.478,121,0.711,123,1.317,125,2.813,181,1.45,184,1.632,189,2.824,207,1.194,223,2.267,227,1.418,231,1.263,236,2.7,251,1.857,318,2.093,357,2.168,378,2.383,398,1.432,411,1.503,414,2.216,455,3.474,546,1.178,679,2.672,826,3.185,914,2.982,915,2.7,918,2.618,946,2.047,996,2.76,997,3.991,1023,3.185,1027,3.314,1184,2.9,1206,3.246,1558,2.94,2393,4.963,2870,3.314,2911,3.685,3016,3.685,3017,5.182,3115,3.991,3116,3.991,3117,3.685,3118,6.451,3119,6.451,3120,3.991,3121,3.821,3122,3.991,3123,3.685,3124,3.991,3125,3.991]],["t/1185",[0,0.736,6,2.425,86,2.97,90,3.254,91,3.212,121,1.894,150,5.948,204,4.832,212,3.841,227,1.823,273,5.363,402,4.484,411,1.931,414,2.848,490,5.305,628,5.423,1119,6.66,1350,6.257]],["t/1187",[0,0.502,6,1.649,68,1.6,77,1.755,90,4.64,91,3.02,104,1.98,107,3.083,121,1.916,125,3.49,147,3.048,157,1.246,163,3.239,164,3.581,169,2.373,171,4.444,173,3.94,189,3.35,198,3.443,242,2.373,247,4.938,248,3.658,284,2.941,286,2.594,288,1.539,304,2.228,311,3.412,357,2.905,368,3.544,378,3.194,410,4.192,414,1.943,490,3.618,512,3.618,562,3.059,572,3.412,740,3.743,821,3.018,913,3.618,974,2.998,1054,4.122,1058,3.059,1563,4.656,1984,4.656,2168,3.269,3095,4.268]],["t/1189",[3,2.842,4,3.305,6,2.121,68,1.948,74,3.254,84,2.124,90,2.702,92,5.741,94,4.47,100,3.887,102,2.853,120,2.337,121,1.159,157,1.517,185,3.415,186,3.024,215,4.096,238,3.221,251,3.029,298,2.963,299,1.917,316,3.858,357,3.536,375,3.158,402,4.955,442,5.407,789,4.955,943,4.272,953,4.153,1024,5.826,1747,6.511,3126,6.511,3127,7.754,3128,6.884,3129,8.295,3130,6.011]],["t/1191",[0,0.724,3,3.368,4,3.916,59,2.621,94,4.438,121,1.374,152,5.606,215,4.657,298,4.4,312,4.028,378,4.607,827,7.865,872,4.572,1564,4.794,1859,6.407,3127,6.905,3131,8.827,3132,8.157]],["t/1193",[4,4.695,56,1.567,57,1.584,58,2.06,59,2.444,65,2.277,68,2.152,84,1.764,87,5.9,94,4.246,104,2.664,147,2.496,163,3.078,206,3.44,215,4.404,238,3.559,298,5.079,375,3.49,378,4.296,501,4.675,764,3.633,3015,5.974,3133,4.767,3134,5.954]],["t/1195",[6,0.998,40,0.888,45,2.736,59,1.557,65,1.45,68,2.408,81,1.719,83,3.454,84,1.123,85,2.244,90,2.809,94,4.714,120,1.236,121,1.829,122,1.968,141,3.794,143,3.006,147,1.589,150,3.476,157,1.068,161,1.747,186,3.82,202,2.585,215,4.381,235,1.664,238,2.267,245,2.638,288,0.932,298,3.08,300,2.171,346,3.633,354,2.302,378,2.736,379,2.552,396,3.036,402,2.62,414,1.664,443,3.727,507,3.245,557,3.424,583,4.387,764,2.314,1083,4.531,1110,4.1,1208,2.568,1209,2.676,1712,4.844,3015,3.805,3127,4.1,3132,4.844,3133,5.333,3134,2.95,3135,6.416,3136,4.387,3137,5.242,3138,4.844,3139,5.242,3140,7.156,3141,4.844,3142,4.844,3143,6.249,3144,3.727,3145,5.893,3146,6.769]],["t/1197",[3,1.452,4,2.687,16,1.889,45,3.16,68,1.972,81,1.985,84,1.616,85,2.593,90,3.625,92,4.368,93,2.182,94,4.61,100,1.986,104,2.782,121,1.461,147,1.154,152,2.417,157,2.431,166,1.14,167,2.05,171,2.247,186,3.788,190,1.646,206,2.531,207,0.995,215,3.615,235,1.923,252,1.818,288,0.676,291,1.429,298,4.57,299,0.98,321,1.507,346,1.785,354,1.671,362,2.328,379,4.865,385,2.808,395,3.507,398,1.193,399,3.704,402,1.902,406,2.531,414,1.208,430,3.661,432,2.564,435,3.517,457,3.955,530,4.668,560,2.356,658,2.05,712,1.534,746,2.654,761,2.564,789,1.902,800,4.224,809,2.706,837,1.079,872,3.137,913,2.25,943,4.325,948,4.224,953,2.122,974,1.865,1020,1.654,1024,2.977,1083,3.543,1152,2.275,1182,2.45,1209,1.943,1886,3.327,2347,2.45,2385,2.523,3126,3.327,3127,6.724,3133,2.204,3135,5.549,3140,3.517,3144,6.112,3146,3.327,3147,3.806,3148,3.806,3149,3.517,3150,3.806,3151,3.806,3152,3.517,3153,3.517,3154,3.327,3155,3.806]],["t/1199",[0,0.933,23,2.571,56,1.15,61,3.936,83,3.463,84,2.437,85,3.324,102,2.974,103,5.358,120,2.681,124,2.726,157,1.582,197,3.324,227,1.578,288,1.38,298,4.053,329,4.41,371,4.694,373,5.231,399,4.749,456,4.453,599,6.074,686,3.643,712,3.129,869,3.964,912,9.099,1347,5.416,1733,5.231,1736,4.183,3086,4.084,3156,7.176,3157,7.176,3158,7.176]],["t/1201",[0,0.466,7,1.413,42,2.857,56,1.784,68,1.484,73,3.224,84,2.692,85,2.43,110,2.308,113,4.581,120,1.338,152,3.605,157,1.963,162,2.837,170,3.033,177,9.377,202,4.048,203,3.707,206,2.372,216,2.318,261,3.514,298,5.139,346,2.663,433,4.214,456,4.707,545,4.44,558,3.655,574,5.245,577,4.12,747,3.707,827,4.036,912,8.133,934,6.597,1069,2.837,1666,3.605,1668,4.75,1719,6.093,1733,3.824,2064,3.472,2415,9.425,2717,6.854,3117,4.581,3156,5.245,3159,5.676,3160,5.245,3161,4.962,3162,4.75]],["t/1203",[0,0.622,2,2.577,7,1.886,15,1.956,35,2.625,37,2.656,56,1.615,81,1.256,84,2.562,85,1.641,103,2.015,113,4.914,114,2.177,120,1.435,124,1.345,137,1.985,140,1.916,147,1.846,157,2.221,162,3.044,178,1.625,186,1.169,196,3.642,197,1.641,206,1.602,207,1.002,227,0.779,229,1.544,236,3.601,261,2.372,264,3.207,288,1.082,291,1.439,298,3.014,313,2.156,321,1.518,333,2.673,334,3.207,373,4.102,385,1.777,396,3.527,398,2.952,445,2.625,452,2.242,512,2.266,570,6.114,571,7.842,579,7.544,599,2.998,622,1.492,673,2.064,697,2.541,712,2.454,733,3.527,749,2.266,869,1.956,912,5.499,913,2.266,932,2.291,1026,5.557,1083,3.563,1124,3.207,1310,2.22,1413,2.782,1503,2.137,1732,2.916,1736,4.081,1765,2.782,1804,2.725,2064,2.344,2255,2.916,2415,9.291,2652,3.35,2717,6.695,3086,4.539,3117,4.914,3128,3.542,3158,3.542,3160,5.627,3163,7.576,3164,4.42,3165,6.089,3166,3.832,3167,3.832,3168,3.832,3169,5.096,3170,3.35,3171,3.207,3172,3.832,3173,3.832,3174,3.832,3175,3.832,3176,3.093,3177,3.542,3178,3.832]],["t/1205",[0,0.601,7,0.907,40,0.617,56,1.242,68,1.529,72,2.254,83,3.266,84,2.207,85,3.589,89,1.529,94,1.461,103,1.915,121,0.567,124,1.278,151,4.121,157,1.87,166,1.751,171,2.169,179,2.771,197,1.559,198,2.049,204,1.962,215,2.526,291,2.75,292,2.012,298,4.394,300,1.508,312,1.326,313,2.049,320,2.453,321,4.24,324,4.243,346,1.708,354,1.599,357,1.729,362,3.575,367,2.03,373,2.453,414,1.156,433,2.703,530,2.254,585,1.859,656,1.995,674,1.901,675,3.764,686,3.436,748,3.32,749,2.153,763,2.589,775,2.345,787,2.414,874,1.901,912,7.475,936,2.201,971,2.771,980,2.703,1020,1.583,1094,6.128,1169,2.227,1206,2.589,1403,2.453,1440,2.771,1719,5.437,1733,6.184,1734,3.183,1756,3.365,1758,2.939,2064,2.227,2176,2.201,2404,3.365,2409,3.183,2415,2.939,2648,2.283,3097,3.047,3108,2.453,3116,3.183,3133,2.109,3134,4.121,3136,6.128,3176,6.765,3177,3.365,3179,3.642,3180,3.642,3181,3.642,3182,3.183,3183,8.383,3184,5.402,3185,6.765,3186,3.642,3187,10.209,3188,3.642,3189,5.846,3190,3.642,3191,3.642,3192,3.642,3193,3.642,3194,4.892,3195,2.771,3196,7.328,3197,3.642,3198,5.846,3199,3.365,3200,3.642,3201,3.642,3202,3.642,3203,3.365,3204,3.642,3205,2.495,3206,3.642,3207,3.642,3208,3.365,3209,3.642,3210,3.365]],["t/1207",[6,1.555,18,5.93,19,6.593,23,2.705,92,6.099,94,3.278,169,3.168,179,6.217,186,3.212,197,3.498,242,3.168,321,3.236,329,4.64,346,3.833,376,5.121,457,5.336,573,5.698,818,6.217,930,5.417,943,6.039,1083,4.78,1227,5.808,1381,4.732,1742,6.593,1816,7.55,3126,7.142,3144,8.285,3146,7.142,3195,8.014,3211,8.17,3212,7.55,3213,8.17]],["t/1209",[6,1.702,14,3.571,30,2.812,40,1.085,62,4.326,72,3.965,74,2.798,90,3.244,94,2.57,107,1.807,111,2.872,120,1.51,121,0.997,131,3.246,136,5.36,143,3.673,157,2.272,158,3.965,167,3.45,178,3.792,186,2.728,206,2.677,212,3.829,260,2.936,264,5.36,291,2.405,321,2.537,351,4.124,379,3.118,385,2.97,479,3.18,565,4.857,759,3.138,832,3.787,1015,4.388,1053,7.649,1069,3.202,1070,5.169,1073,5.599,1403,4.315,1459,3.71,1898,4.649,2160,3.965,2499,5.919,2590,5.36,3111,4.315,3144,8.868,3164,7.479,3214,6.405,3215,6.405,3216,6.405,3217,5.919,3218,6.405,3219,5.919,3220,5.919]],["t/1211",[3,1.891,7,1.85,14,2.764,36,1.163,90,1.798,104,3.202,131,2.513,133,1.681,147,3,156,3.599,157,1.815,167,4.002,186,2.266,218,3.069,222,3.458,235,1.574,245,2.495,300,2.053,379,2.413,385,2.299,436,3.149,440,4.149,448,2.964,456,5.109,523,2.964,546,1.28,550,5.819,563,3.878,580,4.582,658,2.671,660,2.034,728,3.525,739,3.238,870,3.458,874,2.588,932,2.964,938,3.681,948,3.458,974,3.64,1020,2.155,1053,3.681,1083,6.75,1138,3.069,1383,3.773,1459,2.872,1558,3.192,1664,4.334,1765,3.599,2475,4.334,2777,4.149,2821,6.467,3111,5.005,3115,4.334,3135,2.932,3144,8.626,3145,3.773,3152,4.582,3153,4.582,3164,7.182,3221,7.429,3222,4.958,3223,4.582,3224,4.958,3225,8.65,3226,4.958,3227,4.334,3228,4.958,3229,4.334,3230,4.958,3231,7.429,3232,7.429,3233,4.958,3234,4.958,3235,4.958,3236,4.958,3237,4.958,3238,4.958,3239,4.958,3240,4.958,3241,4.582,3242,4.958,3243,4.958,3244,4.958]],["t/1213",[0,0.367,6,0.851,7,1.114,40,0.758,64,0.74,85,1.915,88,3.404,94,1.795,99,1.188,107,1.262,110,1.819,121,1.664,125,3.371,157,2.561,158,4.253,159,2.617,166,1.34,167,4.506,168,1.944,173,2.88,186,1.364,188,2.329,197,2.942,215,2.37,236,4.063,237,4.583,245,4.211,261,2.769,262,2.88,290,2.54,298,1.779,299,1.151,321,4.235,322,3.404,341,2.494,353,4.885,379,2.177,385,2.074,477,2.472,487,3.18,560,2.769,565,2.429,572,2.494,585,2.283,596,2.591,747,2.921,759,2.191,764,1.974,913,2.645,934,2.45,949,3.064,954,2.704,1059,4.629,1062,5.545,1138,2.769,1182,2.88,1190,8.854,1218,3.61,1685,2.841,1752,3.743,2493,3.61,2821,3.247,3129,3.743,3133,2.591,3134,4.707,3135,2.645,3144,4.885,3164,4.987,3219,4.133,3245,4.133,3246,7.731,3247,4.473,3248,4.473,3249,4.133,3250,5.75,3251,4.473,3252,6.006,3253,4.473,3254,4.473,3255,4.473,3256,4.473,3257,6.871,3258,4.473,3259,4.473,3260,4.473,3261,4.473,3262,4.473,3263,4.473,3264,8.366,3265,4.473,3266,4.473,3267,4.473,3268,4.473,3269,4.473,3270,4.473,3271,4.473]],["t/1215",[6,1.336,56,1.601,83,3.131,85,3.005,86,2.324,94,4.863,110,2.854,121,1.093,125,2.829,128,4.293,137,4.934,157,2.469,182,3.439,186,2.905,215,3.285,292,3.879,298,3.789,321,2.78,337,6.316,385,3.255,559,6.772,596,4.066,781,5.665,789,3.509,1083,4.107,1190,8.327,1342,4.991,1343,6.487,1381,4.066,1408,3.813,1717,5.342,1825,4.809,3133,7.02,3144,6.772,3164,5.095,3252,6.136,3272,7.02,3273,6.487]],["t/1217",[3,4.897,5,4.593,94,4.065,157,2.064,448,6.056,1024,7.925,2729,7.709,3144,7.203,3195,7.709,3274,9.362]],["t/1219",[0,0.894,7,2.146,56,1.276,57,1.659,58,2.157,59,3.236,61,4.368,84,2.775,89,3.619,123,1.626,147,2.613,184,3.08,265,3.746,312,3.138,462,2.29,466,6.256,482,4.943,1108,4.715,1310,4.992,3275,8.794]],["t/1221",[0,0.864,61,4.141,84,2.73,124,2.868,168,3.551,169,3.168,184,3.764,235,2.594,286,3.464,288,1.452,398,2.562,447,4.141,462,2.17,531,4.555,539,3.788,546,2.109,774,4.884,996,4.939,1005,4.515,1184,6.688,1205,6.065,1206,5.808,1209,4.17,1697,7.644,1800,5.504,1801,5.698,3171,6.837,3276,7.55,3277,7.55,3278,7.142]],["t/1223",[0,0.814,9,2.812,37,2.626,59,2.212,84,2.725,123,1.87,124,3.91,169,2.889,184,2.662,235,2.365,281,1.85,398,3.108,406,3.113,424,2.702,447,3.775,462,2.633,712,3.995,1174,5.018,1184,6.295,1205,5.53,1206,5.296,1209,3.802,1336,5.53,1697,5.407,1802,3.143,2411,5.296,2780,6.011,3171,6.233,3176,6.011,3278,6.511,3279,8.665,3280,6.884,3281,6.511,3282,5.826,3283,6.511]],["t/1225",[0,0.529,6,1.227,28,2.653,37,1.708,40,1.092,84,2.61,104,2.57,123,1.951,147,1.249,157,1.313,169,1.598,184,1.473,199,3.594,235,1.308,316,2.134,406,1.722,423,2.411,424,4.347,447,2.088,462,2.59,471,2.386,509,2.15,531,5.009,570,3.325,598,3.135,630,2.15,668,3.704,671,2.277,732,4.025,746,2.874,761,2.776,789,2.059,855,2.776,1100,3.059,1176,4.278,1177,5.633,1178,6.036,1184,4.094,1188,3.325,1205,4.786,1206,2.929,1208,5.48,1209,6.652,1337,2.776,1459,2.386,1651,3.602,1685,2.617,1697,2.991,1845,6.774,2250,4.906,2385,2.732,2928,3.808,3278,3.602,3281,3.602,3282,3.223,3284,7.869,3285,5.958,3286,4.12,3287,6.447,3288,7.518,3289,7.518,3290,2.823,3291,4.12,3292,4.12,3293,4.12]],["t/1227",[3,3.635,6,1.814,13,4.47,16,4.015,48,2.139,64,0.92,73,4.593,84,2.042,85,2.381,92,3.221,94,2.231,104,2.617,120,1.311,122,2.088,124,2.838,157,1.647,184,1.988,190,3.497,202,2.743,215,1.918,216,3.303,235,2.567,242,2.157,251,2.261,254,4.036,286,2.358,288,2.127,298,2.212,331,2.743,346,2.609,393,5.139,395,4.683,399,3.401,477,3.073,532,3.632,625,4.55,630,2.902,636,7.974,663,3.362,667,5.281,673,2.995,712,2.241,756,3.746,757,3.442,762,4.036,764,2.454,781,4.488,895,6.767,959,5.139,979,4.488,1084,2.995,1184,3.532,1206,3.954,1350,3.879,2408,4.861,3097,4.654,3133,4.683,3134,3.129,3223,5.139,3294,5.139,3295,8.509,3296,4.488,3297,5.561,3298,5.561,3299,5.561,3300,5.139]],["t/1229",[0,0.951,47,5.258,62,5.605,84,2.039,260,4.362,424,3.452,492,2.381,782,4.966,1174,6.41,1177,4.662,1208,4.662,1209,4.858,1337,6.41,3295,8.238,3301,9.516,3302,7.963]],["t/1231",[0,0.633,6,1.93,7,1.92,8,2.94,84,2.846,85,3.301,105,2.756,111,4.548,121,1.2,148,1.445,168,3.351,181,2.448,184,2.756,185,5.519,190,3.334,207,2.016,212,3.301,219,5.556,224,4.379,227,1.567,265,3.351,292,4.261,357,3.661,365,4.034,445,5.282,492,1.93,532,5.036,3133,4.466,3303,7.125,3304,6.222]],["t/1233",[0,0.55,2,1.473,28,2.789,33,2.751,56,0.993,80,3.964,82,2.589,84,2.757,89,1.819,120,1.021,122,1.626,141,4.017,148,1.537,157,1.67,158,2.681,166,2.456,185,5.944,194,2.535,199,3.737,216,1.769,227,1.876,231,1.198,272,1.753,291,3.079,298,1.723,320,2.918,328,2.913,337,2.872,357,2.057,362,2.649,396,2.509,402,2.165,411,0.933,432,2.918,448,2.589,452,2.535,462,1.151,528,2.918,546,1.73,557,2.829,630,3.498,666,4.207,668,2.02,674,4.279,706,2.589,744,3.447,748,2.46,761,2.918,827,3.08,869,5.388,870,4.675,872,2.244,941,2.244,1034,2.649,1060,2.715,1069,2.165,1084,2.333,1117,3.296,1159,3.021,1209,2.211,1440,3.296,1697,3.144,1719,3.216,1808,3.216,1876,4.417,2064,2.649,2429,5.243,3095,3.021,3133,7.032,3304,3.496,3305,4.003,3306,4.332,3307,3.786,3308,3.786,3309,3.786,3310,4.003,3311,4.332,3312,4.332,3313,3.496,3314,3.388,3315,4.332]],["t/1235",[0,0.725,8,1.633,79,5.538,84,2.796,85,3.783,111,2.823,148,1.18,185,5.69,199,3.51,231,2.824,242,2.441,246,4.924,258,2.971,311,5.691,351,4.053,364,1.659,385,2.919,411,1.355,444,4.312,445,4.312,521,4.475,539,2.919,596,3.646,658,3.391,673,3.391,869,3.213,1060,3.946,1069,5.102,1093,5.08,1097,4.924,1131,5.268,1246,4.673,1581,5.268,1666,3.998,1750,5.503,2429,4.924,3115,5.503,3133,3.646,3205,4.312,3304,9.408,3316,5.817,3317,6.295,3318,6.295,3319,5.817,3320,5.817,3321,5.817,3322,6.295,3323,5.503,3324,6.295,3325,5.817]],["t/1237",[56,1.219,74,5.578,84,2.939,171,3.055,185,5.361,201,6.257,389,6.257,475,4.92,809,5.852,872,6.058,927,5.457,1069,5.289,1199,7.53,3326,10.582]],["t/1240",[7,1.443,84,2.597,123,1.84,133,1.965,171,4.192,185,4.889,199,3.232,265,2.519,282,2.229,286,4.79,323,3.971,356,5.811,406,3.482,411,1.248,414,1.84,424,4.396,539,2.687,546,1.496,570,6.724,776,3.122,787,7.071,869,5.444,870,6.803,1034,5.966,1054,7.184,1176,6.99,1209,5.444,1210,8.342,1697,4.207,1845,6.685,3095,5.811,3284,4.678]],["t/1242",[0,0.799,6,1.853,77,1.266,84,2.626,89,3.045,120,1.709,123,1.837,165,4.335,185,5.785,189,2.417,231,3.041,248,5.82,282,2.789,423,4.243,424,3.532,546,2.513,547,3.76,869,4.97,1034,4.435,1090,3.702,1176,6.797,1181,4.489,1202,6.339,1208,3.553,1209,3.702,1210,9.587,3327,5.264]],["t/1244",[0,0.447,2,1.85,7,0.83,37,0.883,58,1.361,59,2.047,74,2.376,77,0.95,80,1.97,84,2.789,120,1.282,123,2.128,140,1.665,148,0.624,165,1.992,166,2.384,184,2.464,185,6.111,199,4.437,200,1.42,206,1.393,207,0.871,227,2.7,258,1.572,265,1.448,286,1.413,292,1.841,398,2.162,424,1.973,452,3.183,475,1.992,492,2.484,660,1.367,666,2.48,668,4.09,674,1.739,744,2.797,817,4.39,868,4.397,869,6.149,870,4.808,1034,2.038,1176,4.286,1196,2.038,1199,2.145,1210,4.255,1338,2.606,1440,4.14,1495,2.014,1845,4.321,1876,5.068,2429,5.393,2566,5.428,3133,4.609,3313,2.689,3328,2.788,3329,3.332,3330,2.913,3331,2.913,3332,4.255,3333,2.913,3334,6.673]],["t/1246",[0,0.64,7,1.318,8,2.023,56,1.513,73,3.006,83,2.361,84,2.912,99,1.406,104,1.713,105,1.892,112,3.842,121,0.824,129,3.097,131,2.683,140,5.445,157,2.557,175,4.14,185,4.684,186,3.476,196,2.544,197,3.965,219,4.272,224,3.006,229,2.133,231,2.157,251,2.152,262,3.408,291,1.987,362,5.664,414,1.68,424,4.478,523,6.108,528,3.565,532,3.457,539,2.454,666,4.658,671,2.925,1383,4.028,2143,3.842,2371,7.473,2475,4.627,3290,5.343,3335,4.429]],["t/1248",[2,2.845,6,1.592,39,2.855,43,3.947,56,1.239,64,0.964,65,1.612,74,2.545,81,1.91,84,1.249,86,1.929,94,2.338,102,2.232,111,3.75,121,2.061,124,2.045,125,3.943,157,1.993,161,1.942,184,2.083,189,1.942,190,3.616,196,2.801,198,3.279,206,4.468,208,3.752,215,2.009,223,2.893,260,3.834,288,1.739,291,2.188,298,2.318,300,2.413,314,5.094,331,2.874,357,2.766,406,2.435,490,3.445,521,4.143,635,2.613,749,3.445,750,3.564,797,4.702,806,4.434,813,7.324,872,6.104,1093,4.702,1337,3.925,1736,3.139,1920,5.094,2176,3.522,3015,4.229,3095,4.064,3336,5.385,3337,5.827,3338,5.827]],["t/1250",[0,0.369,4,3.721,6,1.312,7,1.118,31,2.747,56,1.242,61,2.276,68,1.802,75,6.333,81,1.472,85,1.923,87,2.504,90,1.629,110,1.826,111,4.803,125,1.81,131,2.276,137,3.57,147,2.09,162,2.245,173,2.892,177,3.758,181,1.426,197,1.923,206,4.661,207,1.174,245,2.26,260,2.059,288,0.798,291,1.686,300,5.212,321,4.416,337,2.978,354,1.972,357,2.132,362,2.747,373,3.025,404,2.747,494,4.873,501,6.333,563,3.513,564,7.751,566,3.843,675,2.892,711,2.656,712,2.778,744,2.309,748,2.551,749,6.333,750,2.747,760,3.193,775,2.892,872,2.326,874,2.344,912,3.26,935,2.685,1133,2.978,1208,2.2,1339,3.418,1412,2.78,1440,6.382,1558,4.438,1736,2.419,1825,3.077,3086,2.362,3097,3.758,3108,4.643,3111,3.025,3196,8.223,3252,3.926,3339,4.491,3340,4.15,3341,5.746,3342,3.926,3343,4.491,3344,6.369,3345,4.491,3346,4.491]],["t/1252",[0,0.951,68,2.488,81,3.12,121,1.481,190,4.115,206,3.977,365,3.785,501,5.405,572,5.306,712,3.835,872,4.929,1736,6.73,3086,6.094,3087,7.064,3114,7.444]],["t/1254",[0,0.676,6,1.567,39,4.033,68,2.152,74,3.595,95,3.932,96,3.671,97,2.044,102,3.153,111,4.745,121,1.82,190,3.559,204,6.3,206,3.44,260,3.773,300,5.412,404,6.472,871,7.195,872,5.481,3108,7.878,3111,7.878]],["t/1256",[0,0.96,4,2.293,30,2.269,56,1.352,61,2.619,74,2.257,75,5.972,81,1.694,107,2.576,120,1.218,121,1.572,157,1.86,162,2.583,186,1.576,206,3.203,213,2.356,229,2.083,242,2.004,284,2.484,288,1.362,300,5.557,304,1.882,313,2.908,320,3.481,365,3.048,404,6.177,480,3.427,490,3.056,501,2.935,573,3.605,630,3.999,686,2.424,712,3.088,740,3.161,789,4.565,820,4.58,821,2.549,913,3.056,927,3.427,954,3.124,958,4.043,980,3.837,1029,2.964,1121,4.171,1720,4.518,1825,3.541,2486,3.751,3086,2.718,3091,5.585,3106,4.518,3108,8.409,3114,4.043,3250,4.325,3341,3.541,3347,5.081,3348,5.168,3349,5.168,3350,4.043]],["t/1258",[0,0.762,3,2.029,4,2.36,6,1.012,7,1.324,34,3.86,40,1.326,56,1.517,64,1.294,75,4.628,77,1.622,87,2.965,94,2.134,98,2.696,107,1.5,120,1.845,123,1.003,148,2.046,157,2.325,166,2.345,174,2.029,186,1.622,189,3.638,202,2.623,206,2.223,207,1.391,212,2.277,213,2.424,242,2.062,252,2.541,300,5.277,305,3.526,313,2.992,390,2.893,411,1.145,447,2.696,480,3.526,501,3.021,630,2.776,820,4.679,821,2.623,831,2.776,913,3.145,915,3.145,927,3.526,1049,3.781,1053,3.948,1121,4.292,1825,3.644,3108,5.272,3111,8.686,3250,4.451,3290,3.644,3350,4.16,3351,5.318,3352,5.318,3353,5.318,3354,5.318,3355,5.318,3356,3.709,3357,5.318]],["t/1260",[0,0.601,3,1.855,4,2.779,6,1.393,7,1.21,8,0.754,23,0.963,36,0.682,40,1.061,56,1.084,63,1.959,64,0.804,68,0.76,75,5.527,77,0.508,78,1.356,81,0.953,84,1.042,85,1.245,86,0.963,90,1.763,102,2.4,107,0.82,120,0.685,121,1.525,123,0.917,125,2.95,137,2.518,143,1.668,157,2.294,163,1.088,166,1.877,168,1.264,169,1.128,171,1.804,189,2.088,198,3.525,203,1.899,205,2.687,206,4.255,207,0.76,209,1.304,213,1.326,227,0.988,237,1.593,242,1.128,244,2.028,245,2.447,254,2.111,260,2.229,265,3.181,272,1.177,291,1.092,292,1.607,300,5.27,313,2.735,321,2.481,331,1.434,349,2.641,367,3.493,391,2.906,395,2.816,403,1.758,404,7.301,405,4.931,411,1.047,423,1.702,437,2.275,452,1.702,457,1.899,477,1.607,482,1.668,492,0.728,501,4.158,544,2.433,546,0.751,547,2.419,566,1.621,660,1.193,662,1.227,670,3.456,671,1.607,679,1.702,686,1.364,744,1.495,763,2.068,804,1.899,814,1.668,821,3.61,826,3.391,872,1.506,934,2.663,935,3.745,956,2.275,1028,4.9,1049,2.068,1061,2.687,1062,2.347,1069,2.43,1072,2.275,1084,1.566,1090,3.198,1097,2.275,1148,2.347,1153,1.72,1431,2.347,1482,2.433,1620,2.687,1685,1.847,2160,1.8,2486,2.111,2687,2.347,2832,2.687,2966,2.433,3142,4.493,3341,1.992,3358,5.726,3359,2.908,3360,2.908,3361,2.687,3362,2.908,3363,2.908,3364,2.908,3365,2.908,3366,2.908,3367,2.687,3368,2.687,3369,2.908,3370,2.908,3371,4.862,3372,4.862,3373,2.908,3374,2.687,3375,2.908]],["t/1262",[0,0.671,61,4.141,68,2.754,84,1.751,107,2.304,111,3.663,120,1.926,121,1.814,157,1.664,189,2.723,190,3.533,197,3.498,204,4.401,206,3.415,288,1.872,300,4.825,549,4.555,712,3.292,813,7.984,872,6.036,1337,5.504,1736,4.401,2160,5.057,3086,5.538,3089,6.837,3376,6.837,3377,8.17]],["t/1264",[3,4.013,6,2.002,23,3.483,56,1.558,86,3.483,176,6.359,178,4.46,181,3.34]],["t/1266",[0,0.702,3,4.137,4,4.811,6,1.628,7,2.129,56,1.606,68,2.835,81,2.804,92,4.953,94,4.777,121,1.331,215,4.456,251,3.477,298,4.313,509,4.463,572,4.768,872,4.43,875,4.304,943,4.904,3134,6.101]],["t/1268",[56,1.573,64,1.757,94,4.262,215,3.663,631,5.245,3134,5.976]],["t/1271",[0,0.903,7,2.18,40,1.864,56,1.297,59,2.6,68,2.29,94,3.513,107,2.47,123,1.652,147,2.655,180,5.638,215,3.796,225,2.593,474,4.605,499,4.235,519,5.806,1020,3.806,1225,5.719,1232,6.663,1314,5.999,1372,5.124,1564,4.756,3378,7.067,3379,7.067,3380,7.54]],["t/1273",[0,0.817,3,2.861,9,3.171,20,5.138,37,1.987,45,3.914,57,1.444,68,2.604,77,1.739,94,3.995,110,4.049,121,1.167,133,2.542,147,3.389,186,3.781,215,3.855,251,3.049,291,2.816,424,2.72,534,5.767,551,3.049,572,5.552,868,4.144,879,3.856,941,3.885,943,4.301,1015,5.138,1020,3.259,1209,3.828,2664,5.138,3135,4.435,3381,5.567,3382,5.866]],["t/1275",[0,0.629,7,1.287,36,1.212,37,1.369,40,2.034,56,1.496,57,1.475,58,3.271,59,1.535,68,1.351,77,1.338,86,2.537,110,2.101,120,2.757,121,0.804,122,2.877,123,1.446,148,0.969,174,1.972,193,3.418,225,2.704,226,1.789,227,2.192,231,2.12,239,4.744,242,2.004,272,3.102,389,4.531,449,2.14,474,4.03,496,2.279,497,2.619,546,1.334,551,2.101,687,2.669,857,3.94,861,5.448,933,2.532,1026,3.327,1372,3.024,1564,6.352,3380,5.249,3383,5.994,3384,7.663,3385,7.663,3386,4.325]],["t/1277",[0,0.73,4,3.948,7,2.216,12,5.054,37,2.358,56,1.318,68,2.327,94,4.461,107,2.51,148,1.668,186,2.714,215,4.182,231,2.462,251,3.618,331,4.389,507,5.508,572,6.199,875,4.479,974,4.36,1209,4.542,1984,6.771,3134,6.256]],["t/1279",[40,1.453,53,4.029,56,0.992,65,0.884,68,1.375,75,5.072,86,3.054,94,2.687,107,1.483,121,0.818,125,4.581,137,1.655,157,0.651,168,1.389,186,0.975,188,1.782,197,1.368,206,2.197,215,2.958,216,1.305,219,1.751,231,0.884,245,4.317,251,3.487,265,1.389,272,3.734,300,4.217,338,2.087,501,1.815,523,5.127,551,1.299,572,3.734,646,5.602,775,2.058,776,1.722,941,1.655,943,1.833,985,6.558,1153,5.072,1248,2.058,1459,4.968,2486,2.32,2648,3.296,3069,2.432,3130,6.922,3134,1.798,3135,1.89,3143,2.579,3164,8.654,3341,2.19,3358,2.5,3387,9.317,3388,8.708,3389,2.674,3390,2.674,3391,3.196,3392,2.674,3393,2.674,3394,2.579,3395,2.674,3396,2.674,3397,2.674,3398,2.674,3399,2.674,3400,2.674,3401,2.674,3402,4.4,3403,2.674,3404,2.674,3405,2.674,3406,2.674,3407,2.674,3408,7.178,3409,2.674,3410,4.4,3411,2.674,3412,2.674,3413,2.674,3414,2.674,3415,2.674,3416,2.674,3417,2.674,3418,4.4,3419,2.674,3420,2.579,3421,2.674,3422,2.674,3423,3.196,3424,2.674,3425,2.674,3426,6.709,3427,2.674,3428,2.674,3429,2.674,3430,2.674,3431,2.674,3432,2.674,3433,2.674,3434,2.674,3435,2.674,3436,2.674,3437,2.674,3438,2.674,3439,2.674,3440,2.674,3441,2.674,3442,2.674,3443,2.674,3444,2.674,3445,2.674,3446,2.674,3447,2.272]],["t/1281",[0,0.736,3,3.423,37,2.377,45,4.682,66,4.718,90,3.254,107,2.53,133,3.041,137,4.647,157,1.827,186,3.712,196,4.312,233,5.624,291,3.369,354,3.939,379,4.367,436,5.698,943,6.408,1381,5.196,1408,4.873,3135,5.305,3341,6.146,3381,6.66]],["t/1283",[0,0.713,5,3.938,6,2.283,8,2.841,26,5.313,56,1.622,68,3.136,78,4.051,96,3.875,97,2.158,108,4.5,121,1.352,209,3.896,375,3.683,464,3.896,632,4.885,633,4.843,729,6.059,875,4.372,1264,6.795,1387,5.446,1506,6.449,2785,6.795]],["t/1285",[0,0.584,7,1.771,48,2.735,64,1.176,68,1.859,102,2.724,105,2.541,115,5.411,122,2.67,133,2.41,148,1.333,151,4.001,176,4.299,213,3.241,225,2.105,226,2.461,251,2.891,290,4.039,331,3.507,346,3.336,354,3.122,469,5.411,562,4.803,591,8.041,632,5.596,643,3.769,665,6.974,674,3.711,766,5.95,782,3.711,787,4.715,796,4.96,834,1.962,1208,3.484,1387,4.457,1564,3.862,1770,6.216,1898,5.161,2177,4.349,2433,5.562,2496,8.399,2497,6.216,2502,6.571,3448,6.216,3449,7.111,3450,5.739,3451,7.111,3452,7.111,3453,7.111]],["t/1287",[7,2.502,8,3.107,56,1.488,68,2.628,77,1.328,84,2.412,99,2.02,105,3.591,108,3.939,121,1.564,159,4.449,161,2.534,188,2.577,207,1.988,218,4.707,228,4.545,400,3.546,406,3.178,420,3.038,464,3.41,632,3.391,654,5.786,662,3.208,679,4.449,782,3.968,875,3.827,1310,4.404,1314,5.209,1387,4.766,1415,6.363,1850,7.294,2194,6.363,2355,6.363,2788,5.948,2789,7.027,2790,6.647,3454,7.027]],["t/1289",[0,0.922,1,1.7,6,1.442,13,1.798,37,2.977,40,1.95,56,0.568,57,1.661,58,2.357,68,1.981,80,2.266,85,1.641,96,1.709,97,0.952,99,1.018,107,1.081,108,1.985,121,1.343,124,3.519,157,1.543,162,4.314,178,1.625,186,1.857,188,3.808,208,3.92,233,2.402,235,1.217,255,2.467,272,4.66,291,3.536,298,1.524,304,2.217,310,2.541,331,1.89,345,2.317,375,2.582,398,2.706,411,0.825,464,2.73,472,6.019,496,1.287,497,3.086,546,0.989,556,2.782,587,5.365,631,2.582,632,2.716,633,2.137,662,2.569,679,2.242,686,2.857,751,4.263,752,6.454,754,3.817,764,1.691,1152,2.291,1159,2.673,1208,1.878,1211,2.782,1375,5.096,1381,4.388,1427,6.114,1428,3.35,1429,2.467,1432,3.207,2177,2.344,2178,2.782,2780,3.093,2792,3.35,2793,2.673,2794,3.35,2795,3.542,2796,3.542,2797,3.542,2798,3.542,2799,3.542,2800,3.542,2801,3.542,2802,3.542,3455,3.832,3456,3.832,3457,3.832,3458,3.832,3459,3.35]],["t/1291",[0,0.452,5,2.496,6,1.528,7,1.999,16,2.733,30,2.417,42,2.771,56,1.189,58,2.009,59,1.635,64,0.91,68,2.477,84,1.18,86,1.823,102,2.109,105,3.386,107,1.553,111,2.469,120,1.298,121,1.249,122,2.067,124,2.817,133,1.866,137,2.852,157,1.121,161,1.835,171,2.043,178,2.334,207,1.44,225,2.377,233,3.451,272,3.249,284,2.646,287,3.098,291,2.067,300,2.28,304,2.923,329,3.127,354,3.524,464,2.469,492,1.378,632,5.154,679,3.221,739,3.596,774,3.291,934,3.016,1181,3.408,1313,5.599,1368,3.451,1380,8.144,1381,3.189,1382,4.607,1384,4.189,1385,4.812,1386,5.088,1387,7.244,1388,5.599,1389,4.306,1390,4.306,1391,5.088,1393,4.607,1394,4.812,1395,4.812,1398,5.088,1399,4.087,1400,5.088,1401,5.088,1402,5.088,1403,3.709,1404,4.443,1510,3.84,3460,4.607,3461,5.505,3462,5.505]],["t/1293",[0,0.633,6,1.468,12,6.437,30,3.385,37,2.043,73,4.379,83,3.439,104,2.495,121,1.578,124,2.706,148,1.445,188,3.438,291,2.895,292,5.604,398,2.418,587,3.936,656,6.208,662,3.253,675,4.964,751,6.376,752,8.053,753,5.112,754,7.104,782,4.024,1375,8.487,1399,5.724,1432,6.452,1437,5.867,1684,4.897,3463,6.74]],["t/1295",[57,2.025,58,2.633,65,2.91,68,2.751,496,2.223,497,5.332,2793,7.337,2794,9.196]],["t/1297",[0,0.855,57,2.006,58,2.608,65,2.883,406,4.355,496,2.202,789,5.208,834,2.875,875,5.244]],["t/1299",[6,1.468,7,1.92,12,5.76,15,3.936,40,1.306,56,1.678,57,2.181,58,2.538,59,3.012,60,10.075,61,5.14,62,3.729,63,5.194,64,1.275,65,3.135,66,4.055,67,6.031,68,2.963,69,5.597,70,6.031,71,4.559,72,7.453,73,4.379,74,3.368,75,5.997,76,4.661,77,1.347]],["t/1301",[0,0.966,7,1.312,28,3.391,36,2.166,40,1.727,56,1.151,57,1.496,58,1.945,61,2.67,64,0.871,65,2.555,68,2.975,84,1.129,86,1.744,89,3.263,91,1.96,97,2.293,99,1.399,115,4.008,121,1.21,150,3.492,159,3.082,166,1.578,176,3.184,178,2.233,184,1.883,213,4.956,215,1.817,225,1.56,235,1.672,236,3.115,239,2.212,255,5.003,285,4.333,288,0.936,291,1.978,299,2.799,310,3.492,312,1.918,430,3.184,492,1.318,496,1.113,585,2.689,662,2.223,665,3.823,758,3.674,789,2.633,834,1.453,836,1.498,837,1.494,844,2.18,875,4.648,1015,3.609,1058,2.633,1412,3.261,1506,3.91,1848,4.008,2177,3.222,2355,4.408,2412,4.868,2636,3.91,2729,4.008,2793,3.674,3448,4.604,3464,4.868,3465,5.267,3466,5.267,3467,4.868,3468,6.793,3469,5.267,3470,5.267,3471,5.267]],["t/1303",[0,0.702,36,2.006,40,1.837,57,1.646,58,2.14,65,2.366,86,2.831,91,2.157,97,2.124,121,1.688,125,4.798,186,2.608,288,1.52,299,2.791,345,5.17,385,3.965,585,4.365,834,2.359,836,2.432,837,2.426,844,2.399,1153,5.057,2046,5.761,2174,6.508,2175,7.156,2793,5.965,3472,7.903]],["t/1305",[6,1.478,36,1.822,40,1.726,91,1.958,97,1.929,107,2.19,121,1.586,157,2.316,166,3.407,171,2.882,204,5.488,288,1.38,299,2.623,312,2.827,357,3.687,385,3.6,546,2.004,549,4.329,585,3.964,761,5.231,834,2.142,836,2.209,837,2.202,844,2.178,1086,3.52,1087,3.908,1403,5.231,2160,4.807,2511,6.788,2636,5.764,2698,7.176,2793,5.416,2952,7.176,3105,6.267,3473,6.498,3474,8.906]],["t/1307",[0,0.824,2,3.208,7,1.52,37,2.291,40,1.783,42,1.936,43,4.081,45,2.007,51,3.008,59,1.142,63,5.116,64,1.01,83,1.715,84,1.308,99,1.622,121,1.182,123,0.726,124,1.35,160,3.095,161,3.64,162,3.796,163,3.234,181,1.221,187,3.404,223,4.293,231,2.392,258,4.967,304,2.223,312,1.4,318,1.763,346,3.562,395,2.227,406,3.614,409,4.776,420,4.204,465,2.205,513,2.381,517,4.183,546,2.818,547,1.485,565,2.089,631,2.589,869,4.815,974,1.884,1179,2.442,1311,4.183,1412,2.381,1420,2.992,1429,3.931,1510,4.259,1548,4.533,1582,2.325,1595,1.804,1607,3.008,1618,4.183,1628,4.125,1684,2.442,1767,3.104,1773,4.646,1787,2.682,2164,6.128,2206,5.637,2225,5.11,2793,2.682,2814,7.991,2816,3.218,2817,3.554,2818,3.554,2946,3.104,3475,3.846,3476,3.846,3477,3.846,3478,3.846,3479,3.846,3480,6.106,3481,9.432,3482,3.846,3483,6.106,3484,3.846,3485,3.846,3486,3.846,3487,3.846,3488,3.846,3489,3.846,3490,3.846]],["t/1309",[0,0.893,1,5.643,2,4.297,3,2.56,4,2.978,5,3.042,6,1.858,7,1.312,8,2.645,9,2.437,10,3.825,11,2.38,12,2.993,13,1.504,14,1.787,15,1.636,16,2.617,17,2.802,18,2.327,19,2.587,20,3.61,21,2.064,22,2.802,23,1.061,24,2.682,25,2.802,26,3.223,27,2.439,28,2.064,29,2.327,30,1.407,31,1.96,32,2.682,33,2.036,34,2.327,35,2.196,36,0.752,37,2.276,38,1.804,39,4.209,40,1.654,41,2.507,42,3.378,43,4.359,44,2.507,45,3.503,46,2.682,47,3.709,48,1.233,49,2.327,50,2.507,51,4.122,52,3.912,53,1.4,54,2.439,55,2.587,56,0.475,58,0.802,84,1.666,86,1.061,99,1.4,133,1.087,157,1.073,163,1.199,171,2.885,197,2.256,207,0.838,228,1.916,229,1.292,233,3.304,235,1.018,248,4.012,286,1.359,287,1.804,294,2.327,295,2.439,329,1.821,375,1.359,387,1.648,398,1.005,406,2.203,424,2.82,477,1.771,507,1.984,546,0.827,587,1.636,656,1.756,658,3.615,662,2.224,666,1.461,668,1.495,764,1.415,934,1.756,977,2.507,1069,1.602,1084,1.727,1176,1.727,1179,4.262,1181,1.984,1381,3.052,1399,2.38,1459,1.856,1534,2.196,1565,2.38,2177,5.649,2385,2.125,2590,2.682,2636,2.38,3171,2.682,3491,3.205,3492,2.962,3493,2.327,3494,3.205]],["t/1311",[0,0.843,1,3.952,6,1.955,7,1.586,37,1.687,40,2.292,84,1.365,90,2.31,107,1.796,161,3.424,162,3.183,181,2.022,208,6.613,304,2.319,312,2.319,397,4.846,420,4.444,449,2.637,473,5.817,511,5.329,551,2.589,614,5.567,737,4.1,796,6.212,868,3.519,946,2.856,982,5.139,1179,4.044,1310,3.688,1429,5.734,1466,5.567,1650,5.885,1742,5.139,2177,3.895,2206,4.727,3335,5.329,3495,7.453,3496,6.368,3497,5.885,3498,6.368,3499,6.368,3500,6.368,3501,5.567,3502,5.885,3503,6.368,3504,6.368,3505,6.368]],["t/1313",[1,4.63,6,1.809,7,2.006,37,2.135,40,2.201,42,2.785,43,2.611,48,2.128,68,2.9,77,0.966,108,2.866,110,3.276,161,3.478,184,3.396,281,1.374,304,2.015,310,5.342,354,2.429,408,3.237,420,4.624,473,3.614,479,2.747,550,5.262,551,2.25,566,3.085,624,7.798,631,2.346,796,5.619,843,3.307,868,3.057,874,4.205,941,2.866,1179,3.514,1216,4.016,1366,3.425,1420,2.711,1459,3.205,1582,3.345,1773,7.942,1850,4.016,2194,4.63,2788,6.302,2926,3.727,3495,7.951,3506,8.056,3507,5.113,3508,5.533,3509,5.533,3510,5.113,3511,5.533,3512,5.533,3513,5.533,3514,5.113]],["t/1315",[0,0.602,1,3.91,2,3.336,6,1.395,7,1.213,8,1.263,9,1.381,20,3.336,37,1.942,40,1.242,43,2.298,62,2.356,64,0.805,68,2.564,74,2.127,84,1.889,86,2.427,107,2.067,111,2.184,120,1.148,133,2.485,157,0.992,161,2.938,162,2.434,171,1.807,187,4.087,197,2.085,208,6.314,215,2.528,223,2.418,225,1.442,233,3.053,287,2.74,310,4.86,387,2.504,396,2.821,406,3.064,420,2.928,512,4.334,551,2.98,558,3.135,624,5.937,679,5.157,683,2.891,689,3.281,757,3.015,782,3.825,795,3.397,855,3.281,917,2.127,926,3.535,931,2.581,941,2.523,1074,5.733,1219,5.006,1356,4.257,1381,2.821,1399,3.615,1505,4.5,1510,3.397,1534,3.336,1548,3.615,1565,3.615,1592,2.542,1641,6.774,1684,3.093,1773,5.578,1852,3.229,2177,6.432,2664,3.336,3187,6.774,3495,4.075,3501,4.257,3502,4.5,3514,4.5,3515,8.814,3516,4.87,3517,4.87,3518,4.87,3519,4.87,3520,4.87,3521,4.87]],["t/1317",[0,0.929,1,4.34,2,2.845,6,2.31,7,1.451,40,2.275,41,4.558,50,4.558,55,4.702,58,1.458,64,0.964,68,1.524,77,1.461,78,3.9,86,1.929,108,5.864,123,1.099,148,2.003,161,2.788,208,6.299,272,2.359,365,2.318,410,3.992,420,3.908,431,5.094,464,2.613,587,2.974,753,3.863,796,8.218,917,2.545,996,5.056,1108,2.122,1212,5.385,1265,6.071,1382,4.876,1434,4.876,1963,1.816,2788,4.558,2793,4.064,3495,4.876,3522,5.827,3523,5.385,3524,5.827,3525,5.827]],["t/1319",[6,2.183,8,2.975,77,1.634,123,1.765,202,4.613,225,2.77,235,3.64,272,3.786,284,4.496,632,4.172,738,7.317,739,6.109,740,5.721,821,4.613,932,5.591,1393,7.827,2827,8.644,3526,9.354]],["t/1321",[6,2.253,8,2.558,68,2.578,99,2.619,208,6.347,235,3.13,633,5.496,738,7.711,739,6.439,740,6.029,753,6.536,2828,9.11,3527,9.858,3528,9.858]],["t/1323",[0,0.896,2,2.434,6,2.078,7,2.403,9,2.03,23,2.37,68,2.524,77,1.685,78,3.338,81,2.346,85,3.064,86,2.37,106,4.324,108,3.707,121,2,123,1.35,146,4.608,161,2.385,163,2.677,171,4.052,174,3.682,189,2.385,220,5.598,227,1.454,242,2.776,243,3.358,286,4.092,398,3.026,414,2.272,504,3.263,534,4.145,551,2.91,737,4.608,782,3.735,793,4.232,916,3.398,1200,4.546]],["t/1325",[2,3.155,7,2.309,9,2.631,68,2.425,99,2.464,121,1.923,171,3.442,207,2.425,227,1.885,462,2.464,534,5.372,631,3.932,879,6.352,1016,5.814,1429,5.971,1510,6.469,1773,7.058,3529,9.275]],["t/1327",[1,3.625,6,2.005,37,2.165,64,1.351,68,2.136,77,1.839,99,2.798,108,4.232,121,1.272,123,1.541,148,1.531,164,4.78,171,3.032,207,2.136,304,4.482,411,1.759,451,6.39,464,4.722,512,4.831,551,4.282,679,4.78,818,6.217,1548,6.065,2788,6.39,2859,6.593,2915,7.55,3530,8.17,3531,8.17,3532,7.142,3533,8.17]],["t/1329",[0,0.624,6,1.447,9,2.157,37,2.015,40,1.288,56,1.126,64,1.257,77,1.328,99,2.02,108,3.939,121,1.564,171,3.729,174,2.901,181,2.414,197,3.255,211,4.65,217,4.65,235,2.414,304,2.768,464,3.41,632,3.391,658,4.096,679,4.449,683,2.999,705,5.519,706,4.545,783,6.136,933,3.725,1387,4.766,2323,7.027,2347,4.895,2687,6.136,3532,8.784,3534,7.604,3535,7.604,3536,7.604,3537,7.604,3538,7.604,3539,7.604,3540,7.604,3541,7.604,3542,7.604,3543,7.027,3544,7.604,3545,7.604]],["t/1331",[7,2.113,77,1.482,148,1.59,152,5.389,163,4.035,169,3.291,176,5.13,304,3.09,496,1.793,653,7.418,662,3.58,686,5.062,752,5.463,776,4.571,999,6.457,1065,6.457,1109,6.033,1459,6.249,2430,5.389,3532,7.418,3546,7.418,3547,8.486,3548,7.418,3549,9.432,3550,7.842,3551,7.842,3552,7.418,3553,7.418,3554,8.486]],["t/1333",[0,0.569,6,1.319,37,2.846,59,2.804,61,3.513,76,4.19,77,2.014,106,3.74,121,1.938,140,4.72,169,2.688,171,3.986,174,3.603,202,3.418,207,1.812,286,2.939,312,3.438,336,5.145,339,6.059,492,2.363,509,3.617,523,4.143,532,4.527,554,5.8,559,4.928,793,4.098,799,6.059,821,5.297,916,5.1,933,3.396,941,3.59,1200,4.402,1579,5.422,1676,5.8,1680,4.928,2859,5.594,3543,6.405,3555,6.931,3556,6.931,3557,6.931]],["t/1335",[0,0.795,6,1.843,58,2.424,59,2.876,107,2.731,160,4.908,161,3.228,169,3.755,208,6.235,312,3.526,354,4.252,479,4.808,934,5.305,974,4.745,1684,7.438,2792,8.465]],["t/1337",[632,4.928,633,6.16,634,7.443]],["t/1339",[0,0.927,14,6.294,56,1.672,62,4.412,78,4.254,212,3.905,213,5.146,255,5.872,291,3.425,628,5.514,631,3.867,632,4.068,633,5.085,634,6.144,635,4.09,636,7.632,637,5.717,638,7.36,639,7.973,640,6.248]],["t/1341",[0,0.852,6,1.521,7,1.99,56,1.538,65,2.211,68,2.715,86,2.646,87,5.788,94,4.627,106,3.165,121,1.244,186,3.517,202,5.12,207,2.09,215,4.363,298,3.179,457,5.219,490,4.725,572,4.455,875,4.022,914,6.78,915,4.725,1069,3.994,3134,5.841,3135,4.725,3145,6.081]],["t/1343",[56,1.573,64,1.757,94,4.262,215,3.663,631,5.245,3134,5.976]],["t/1346",[0,0.903,7,2.18,40,1.864,56,1.297,59,2.6,68,2.29,94,3.513,107,2.47,123,1.652,147,2.655,180,5.638,215,3.796,225,2.593,474,4.605,499,4.235,519,5.806,1020,3.806,1225,5.719,1232,6.663,1314,5.999,1372,5.124,1564,4.756,3378,7.067,3379,7.067,3380,7.54]],["t/1348",[0,0.908,1,2.793,3,2.402,9,2.895,20,4.312,30,2.764,37,2.341,45,5.328,57,1.212,65,1.741,68,2.31,77,1.543,87,4.926,94,3.545,99,1.672,110,3.592,117,5.268,119,5.268,121,0.98,133,2.134,147,3.095,186,3.687,207,1.646,215,3.52,251,2.559,291,2.364,398,1.974,424,2.283,457,4.111,490,3.722,534,5.117,551,2.559,572,4.926,596,3.646,868,3.478,879,3.237,914,5.77,915,5.224,941,3.261,943,3.61,1015,4.312,1020,2.736,1209,3.213,2177,3.85,3135,3.722,3381,4.673,3382,4.924,3558,10.228,3559,5.817]],["t/1350",[0,0.439,7,1.331,36,1.254,40,2.305,56,1.163,58,3.23,68,1.397,77,1.372,110,2.173,120,1.852,123,1.482,148,1.002,174,2.039,193,4.579,225,2.326,226,1.85,227,2.086,239,4.311,242,2.073,449,2.213,474,4.898,496,2.416,546,1.379,551,2.173,687,2.713,852,4.266,857,5.278,862,4.924,914,3.491,915,3.16,1026,3.441,1372,3.127,1564,6.42,3380,6.38,3383,8.03,3386,6.573,3560,3.661,3561,4.472]],["t/1352",[0,0.73,7,2.216,12,5.054,37,2.358,56,1.318,68,2.327,87,4.961,94,4.461,107,2.51,148,1.668,186,2.714,215,4.182,231,2.462,251,3.618,331,4.389,507,5.508,572,6.199,875,4.479,974,4.36,1209,4.542,1984,6.771,3134,6.256]],["t/1354",[40,1.457,53,4.041,56,0.782,65,0.889,68,1.381,75,5.088,86,3.063,94,2.698,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,2.967,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,265,1.397,272,3.744,300,4.047,338,2.1,501,1.826,523,5.143,551,1.307,572,3.749,646,5.62,775,2.07,776,1.732,941,1.665,943,1.844,985,6.577,1153,5.088,1248,2.07,1459,4.983,2486,2.333,2648,3.312,3069,2.446,3130,6.944,3134,1.809,3135,1.901,3143,2.594,3164,8.667,3341,2.202,3358,2.515,3387,9.334,3388,8.725,3389,2.69,3390,2.69,3392,2.69,3393,2.69,3394,2.594,3395,2.69,3396,2.69,3397,2.69,3398,2.69,3399,2.69,3400,2.69,3401,2.69,3402,4.421,3403,2.69,3404,2.69,3405,2.69,3406,2.69,3407,2.69,3408,7.2,3409,2.69,3410,4.421,3411,2.69,3412,2.69,3413,2.69,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,4.421,3419,2.69,3420,2.594,3421,2.69,3422,2.69,3424,2.69,3425,2.69,3426,6.73,3427,2.69,3428,2.69,3429,2.69,3430,2.69,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,2.69,3439,2.69,3440,2.69,3441,2.69,3442,2.69,3443,2.69,3444,2.69,3445,2.69,3446,2.69,3447,2.286,3562,2.81,3563,2.81]],["t/1356",[0,0.719,3,3.341,37,2.32,45,4.57,66,4.605,87,4.882,90,3.176,107,2.47,133,2.968,137,4.536,157,1.784,186,3.672,196,4.209,233,5.489,291,3.288,354,3.845,379,4.263,436,5.561,915,6.508,943,6.312,1381,5.072,1408,4.756,3135,5.178,3341,5.999,3381,6.501]],["t/1360",[0,0.742,56,1.34,76,5.468,82,5.407,102,3.465,209,4.056,213,4.123,285,7.123,480,5.997,631,5.179,641,6.883,642,8.547,643,4.794,644,8.359,645,8.359,646,5.908,647,6.883,648,7.569,649,6.431]],["t/1362",[0,0.87,56,1.909,68,1.768,207,1.768,213,4.833,225,3.139,226,3.213,286,2.866,318,3.099,389,3.997,448,7.388,596,5.377,597,4.415,631,5.24,641,8.068,643,3.583,647,9.103,650,8.579,651,5.456,652,9.798,654,7.064,655,5.91,656,3.703,657,6.247,658,3.641,659,5.144,660,2.774,661,5.91,662,3.917,663,4.087]],["t/1365",[0,0.825,4,3.373,77,2.091,81,2.493,82,4.545,90,2.758,122,2.855,166,2.278,204,4.096,225,2.251,229,3.064,285,4.239,287,6.737,288,1.351,341,4.239,365,3.024,367,4.239,560,4.707,573,5.303,631,4.772,642,5.786,646,4.966,665,7.294,666,4.581,667,4.966,668,3.546,669,7.027,670,5.406,671,4.202,672,6.647,673,4.096,674,3.968,675,4.895,676,6.136,677,6.363,678,7.027,679,4.449]],["t/1367",[56,1.843,75,6.816,77,1.648,169,3.659,225,2.793,226,3.265,304,3.435,372,6.074,596,6.676,631,4,634,6.355,662,3.981,663,5.703,680,7.38,681,8.718,682,8.718]],["t/1369",[3,2.804,31,4.495,35,5.035,56,1.876,86,3.253,89,4.125,94,4.44,148,1.377,171,2.727,212,3.146,215,4.59,286,3.116,298,4.402,300,4.582,479,3.649,630,3.835,792,4.8,862,4.607,980,5.456,1356,6.424,1666,4.667,1732,5.592,1769,8.587,3133,4.256,3447,5.225,3564,6.791,3565,9.824,3566,9.078,3567,7.349]],["t/1371",[0,0.781,23,3.151,56,1.926,68,3.03,121,1.804,194,5.568,202,4.693,235,3.021,631,4.035,632,5.573,633,6.46]],["t/1373",[68,2.725,251,4.237,477,5.758,562,5.208,632,5.456,633,5.809,643,5.523,665,7.563]],["t/1375",[0,0.686,3,3.188,4,3.707,13,3.92,56,1.238,68,3.08,86,2.767,121,1.301,207,2.185,213,4.871,216,3.413,235,2.653,354,3.669,398,2.62,556,6.065,632,5.254,633,5.957,635,4.791,694,7.452,827,5.941,1423,8.963,1966,4.149,2064,5.111,2159,6.065,3568,8.356]],["t/1377",[0,0.659,12,3.127,30,2.417,56,0.815,57,1.545,58,2.986,64,0.91,68,2.894,74,2.405,120,2.454,123,1.514,124,1.932,207,1.44,227,1.631,238,4.096,242,2.135,296,6.617,312,2.004,329,3.127,411,1.185,496,2.442,497,2.79,632,4.937,683,5.169,684,4.04,685,3.985,686,4.444,687,2.121,688,3.596,689,8.237,690,5.088,691,5.088,692,5.088,693,5.088,694,5.599,695,3.291,696,5.707,697,3.65,698,3.914,699,3.221,700,5.088,701,5.088,702,5.088,703,4.443,704,5.088]],["t/1379",[7,1.251,9,1.426,37,1.989,40,0.851,56,1.475,64,0.831,68,2.605,86,2.974,102,2.875,120,1.769,121,1.168,122,2.818,123,0.948,125,3.62,139,4.832,164,4.392,184,2.682,195,3.074,200,3.198,206,2.101,217,3.074,225,1.488,226,1.739,227,1.021,231,2.485,235,1.596,288,1.596,346,2.358,364,1.325,378,2.623,411,2.145,445,3.443,447,3.804,449,3.719,478,3.825,492,1.878,630,2.623,632,5.313,633,4.185,671,4.963,689,5.056,694,3.505,703,4.056,705,6.52,706,5.369,707,6.936,708,4.645,709,2.495,710,4.056,711,2.972,712,2.026,713,4.347,714,3.386,715,2.266,716,3.731,717,1.426,718,4.206,719,6.281,720,4.394,721,4.394,722,6.936,723,3.573,724,10.709,725,4.056,726,6.057,727,3.573]],["t/1381",[1,3.916,26,5.399,58,2.209,68,2.893,120,2.848,121,1.374,157,1.798,288,1.569,497,4.474,548,4.191,632,3.937,687,2.333,689,5.946,694,6.157,705,6.407,728,6.276,729,6.157,730,8.157,731,8.157,732,5.607,733,5.112,734,5.946,735,6.047,736,5.946]],["t/1383",[68,3.129,121,1.562,288,1.784,632,4.477,689,6.762,694,7.001,705,7.286,718,8.4,736,6.762,915,5.936,3560,6.877,3569,10.038]],["t/1385",[3,3.509,4,4.08,57,1.77,58,2.84,68,2.967,120,2.675,121,1.431,272,3.723,288,1.635,496,2.398,632,4.102,689,7.644,694,6.415,703,7.422,705,6.676,718,7.696,736,6.196,3570,9.197]],["t/1387",[68,2.794,121,1.663,151,4.702,202,4.121,235,4.288,284,5.662,632,5.537,660,4.833,706,6.387,737,5.38,738,6.536,739,5.458,740,7.204,741,9.34,742,6.536]],["t/1389",[0,0.809,3,3.761,4,4.374,56,1.46,81,3.232,86,3.264,87,5.496,107,2.781,121,1.842,181,3.13,225,3.505,226,3.412,227,2.003]],["t/1391",[56,1.653,631,4.732]],["t/1393",[0,0.73,6,2.116,74,4.856,86,3.681,89,3.737,123,1.679,157,2.265,213,4.056,227,1.808,288,2.257,304,4.415,449,3.685,711,5.262,740,7.416,827,6.327,828,8.223]],["t/1395",[0,0.789,4,3.155,6,1.354,14,3.965,56,1.612,64,1.176,77,2.126,78,3.316,86,2.354,87,3.965,91,1.793,99,1.889,107,2.006,121,1.107,123,2.053,148,2.184,189,4.275,227,1.445,231,1.967,243,4.508,251,2.891,252,4.59,398,2.229,411,1.531,494,3.683,597,4.644,735,6.583,829,4.96,830,5.161,831,3.711,832,4.205,914,4.644,915,4.205,1027,5.161,3123,5.739,3124,6.216,3125,6.216]],["t/1397",[0,0.983,3,2.901,4,3.373,6,2.142,56,1.773,61,3.854,78,3.546,81,2.493,107,2.834,111,3.41,123,1.435,190,3.288,206,3.178,260,3.486,288,1.786,300,5.156,320,5.122,365,3.997,404,4.65,411,2.163,671,4.202,679,4.449,712,4.05,746,5.303,1736,5.413,3086,3.999,3087,5.645,3096,5.122,3108,5.122,3347,5.041]],["t/1399",[0,0.437,1,2.36,5,2.411,7,1.949,16,2.64,26,3.253,40,1.573,56,0.788,57,1.507,58,3.227,59,1.579,68,1.391,77,0.929,86,2.591,107,1.5,120,2.573,121,1.445,122,2.939,124,2.747,148,0.997,151,2.992,157,1.083,180,3.424,193,4.142,225,1.575,226,1.841,227,1.081,231,2.833,239,4.584,272,2.153,288,1.391,296,3.179,364,1.402,368,3.08,389,3.145,414,1.689,449,2.202,496,2.559,548,2.525,687,2.068,728,3.781,729,3.709,732,5.191,735,3.644,825,4.649,851,4.649,852,5.563,853,3.145,854,4.915,855,3.583,856,4.915,857,4.775,858,4.292,859,4.915,860,4.915,861,3.781,862,4.906,863,4.649,864,3.526]],["t/1401",[30,3.939,35,6.146,56,1.329,68,2.346,86,2.97,87,5.002,90,3.254,121,1.396,123,1.693,178,3.804,288,2.163,291,3.369,304,4.069,449,5.275,868,4.957,915,6.608,3560,6.146,3571,8.971,3572,8.971]],["t/1403",[30,3.939,35,6.146,56,1.329,68,2.346,86,2.97,87,5.002,90,3.254,121,1.396,123,1.693,178,3.804,288,2.163,291,3.369,304,4.069,449,5.275,868,4.957,914,7.298,3561,7.507,3573,8.971,3574,8.971]],["t/1405",[3,3.451,4,5.42,13,4.243,30,3.971,35,6.197,56,1.663,57,1.741,58,2.811,68,2.937,86,2.995,120,2.648,121,1.748,178,3.835,272,3.661,291,3.396,496,2.373,1565,6.715]],["t/1407",[0,0.573,4,3.095,6,1.328,36,1.636,40,1.959,56,1.033,57,1.343,58,2.373,59,2.071,64,1.154,68,1.824,86,2.309,90,2.53,91,2.392,97,1.732,107,2.675,120,1.644,121,1.086,157,1.421,227,1.417,260,3.197,281,2.676,288,1.686,299,1.796,312,2.54,492,1.746,496,1.474,663,4.217,761,4.699,834,2.973,835,6.097,836,2.698,837,2.69,838,6.446,839,7.217,840,7.654,841,6.446,842,5.456,843,4.17,844,1.956,845,5.456,846,3.078,847,5.308,848,6.446,849,5.456,850,6.446]],["t/1409",[0,0.719,6,2.095,23,2.899,56,1.297,81,3.946,88,6.663,90,3.176,121,1.363,181,2.78,196,4.209,204,4.717,229,3.529,245,4.407,290,4.973,300,3.626,673,4.717,747,5.719,748,6.251,749,5.178,750,5.356,751,4.927,752,5.638,753,5.806,754,5.489,761,5.899]],["t/1411",[0,0.785,7,0.985,36,0.928,43,1.867,56,0.925,64,1.582,68,1.035,72,2.449,76,4.677,81,1.297,83,2.785,94,1.588,115,5.887,123,1.178,129,2.315,141,1.939,151,2.226,163,2.894,164,2.315,169,1.534,215,1.365,225,2.601,228,2.365,242,2.422,260,1.814,285,5.933,290,2.247,291,1.486,304,1.441,354,1.737,357,1.879,362,3.82,365,1.574,411,0.852,469,3.011,471,2.292,551,1.609,572,3.482,573,2.76,631,4.813,632,1.765,633,2.206,634,5.212,642,6.686,646,4.079,665,2.872,674,2.065,748,3.547,755,2.665,757,2.449,766,3.311,818,3.011,946,1.774,956,3.095,1114,3.775,1208,3.06,1339,3.011,1370,3.311,1682,3.459,1800,4.207,2207,3.656,2385,2.623,2397,3.656,2491,5.04,2497,3.459,3450,5.04,3507,5.771,3575,7.481,3576,10.49,3577,3.656,3578,3.656,3579,3.957,3580,3.656,3581,3.459,3582,3.957,3583,3.957,3584,3.656,3585,3.957,3586,3.957,3587,3.957,3588,3.656,3589,3.957,3590,3.957,3591,7.737,3592,3.957,3593,3.957,3594,3.957,3595,6.245,3596,6.245,3597,3.957,3598,6.245,3599,6.245,3600,3.957,3601,6.552,3602,6.245,3603,3.957,3604,6.245,3605,6.245,3606,6.245,3607,3.957,3608,3.957,3609,3.957,3610,3.656,3611,3.957,3612,3.957]],["t/1413",[4,3.916,81,3.626,87,4.921,90,3.202,121,1.374,165,5.277,204,4.755,242,3.423,245,4.443,285,4.921,290,5.013,292,4.878,300,3.655,673,4.755,674,6.305,747,5.765,756,5.946,757,5.464,758,8.426,760,6.276,761,5.946,762,6.407,2648,5.533]],["t/1415",[53,4.268,81,3.86,120,2.303,204,6.342,403,5.906,404,5.975,749,5.777,750,5.975,760,6.946,872,5.061,3099,9.029,3101,9.029,3176,9.502]],["t/1417",[0,0.984,5,3.938,58,2.174,74,4.784,82,5.193,83,4.885,121,1.867,159,5.083,162,4.342,186,2.65,210,5.59,231,2.403,324,6.306,365,3.455,448,5.193,712,3.501,746,6.059,755,5.852,785,9.164,786,8.028,787,5.76,788,7.011]],["t/1419",[0,1.008,4,4.65,68,2.12,81,2.659,85,3.472,121,1.631,151,5.897,204,5.645,209,3.636,291,3.935,300,4.34,337,5.377,354,3.561,367,4.521,372,5.221,673,4.368,744,4.17,934,4.442,1585,6.02,2160,5.02,3340,9.685,3492,11.344,3613,11.613,3614,7.089]],["t/1421",[0,0.676,4,3.652,53,3.595,61,4.172,103,4.329,120,2.91,147,2.496,188,3.587,207,2.152,227,1.673,231,2.927,288,1.463,291,3.091,300,3.408,411,1.772,622,3.205,666,4.824,673,4.434,711,4.867,712,3.317,760,5.852,1736,4.434,1747,7.195,2400,7.195,3086,6.151,3091,6.472,3344,7.607,3376,6.888]],["t/1423",[0,0.798,7,2.067,12,3.275,56,1.834,61,2.922,64,1.373,68,2.17,107,1.626,120,1.957,121,0.897,123,1.088,148,1.556,168,2.506,170,3.08,188,3.822,202,2.843,207,1.508,209,2.585,213,4.433,216,2.355,225,2.88,227,1.172,284,2.771,288,1.891,298,2.293,300,2.387,304,2.099,331,2.843,348,5.04,403,6.431,448,3.447,480,3.823,562,2.882,572,3.215,640,3.95,666,3.784,711,3.409,712,3.919,736,3.884,969,3.485,1026,3.712,1093,6.698,1200,3.662,1693,4.099,2176,3.485,3086,4.365,3091,7.181,3096,3.884,3107,3.766,3307,5.04,3313,4.653,3347,3.823,3601,3.95,3615,5.766,3616,4.185,3617,5.766]],["t/1425",[0,0.312,7,1.708,9,0.618,35,1.493,36,1.419,40,2.303,42,1.913,56,0.748,63,1.469,68,2.119,77,1.056,85,1.627,107,1.072,120,1.776,121,0.339,133,0.739,137,1.129,148,0.409,156,2.759,157,0.444,168,2.196,181,0.692,188,3.847,203,1.424,225,2.231,227,0.772,231,1.051,242,0.845,251,4.259,288,1.219,300,1.574,310,2.52,313,1.227,321,0.863,328,0.947,338,6.842,354,1.669,365,0.867,376,1.367,403,6.038,411,0.469,414,0.692,475,3.02,517,2.604,547,1.468,556,1.582,559,1.55,630,1.138,666,2.757,711,1.289,712,2.438,736,1.469,738,1.705,739,1.424,740,1.333,744,3.528,807,1.469,817,1.759,821,1.075,843,3.02,868,1.205,927,1.445,931,1.155,937,1.404,946,0.978,1049,1.55,1166,3.18,1207,1.659,1403,1.469,1478,3.845,1580,4.603,1693,1.55,1732,2.892,1752,1.824,2176,2.298,2178,1.582,2427,1.659,2984,1.906,3069,3.845,3086,3.181,3091,6.853,3095,1.52,3096,2.56,3098,6.339,3107,1.424,3182,4.417,3307,1.906,3347,2.52,3388,9.599,3566,2.015,3601,2.604,3616,2.759,3618,1.906,3619,3.512,3620,2.18,3621,2.18,3622,2.18,3623,2.18,3624,2.18,3625,2.18,3626,2.18,3627,2.18,3628,10.476,3629,2.18,3630,2.18,3631,2.18,3632,6.861,3633,2.18,3634,2.18,3635,8.59,3636,2.18,3637,2.18,3638,2.18,3639,2.015,3640,2.18,3641,2.18,3642,2.18,3643,2.18,3644,2.18,3645,2.18,3646,2.18,3647,2.18,3648,2.18,3649,2.18,3650,2.18,3651,3.801,3652,3.801,3653,3.801,3654,1.618,3655,2.18,3656,1.705]],["t/1427",[0,0.73,7,2.216,61,4.51,123,1.679,188,3.016,216,3.634,225,3.292,288,1.976,300,3.685,341,4.961,403,5.379,449,3.685,494,4.609,673,4.793,711,5.262,712,3.586,744,4.576,797,7.181,1090,5.675,1227,6.327,1732,6.771,1736,4.793,3086,4.68,3091,5.442]],["t/1429",[7,2.271,56,1.351,68,2.385,168,3.964,188,3.092,216,3.725,225,3.343,284,4.384,288,2.006,300,3.777,403,6.825,712,4.55,736,6.144,843,5.452,2176,5.514,3091,5.578,3096,6.144,3347,6.047,3601,6.248,3616,6.62]],["t/1431",[7,2.146,61,4.368,100,4.498,174,3.288,188,2.922,225,2.552,288,2.232,300,3.569,403,5.21,699,5.043,712,5.219,736,5.806,843,5.152,1063,6.956,2176,5.21,3091,5.271,3096,8.05,3195,6.559,3347,5.715,3601,5.905,3616,6.256,3657,7.213]],["t/1433",[7,2.216,123,1.679,183,5.508,188,3.016,216,3.634,225,2.635,288,2.155,300,3.685,403,5.379,449,3.685,557,5.812,712,4.48,736,5.995,843,5.319,2176,5.379,3091,5.442,3096,5.995,3347,5.9,3601,6.096,3616,6.459,3658,7.779,3659,7.447,3660,7.447,3661,8.223]],["t/1435",[7,2.097,90,3.054,121,1.311,123,1.589,188,3.64,216,3.439,225,2.493,288,2.101,291,3.162,300,3.487,403,6.491,449,3.487,475,5.034,547,3.252,550,5.5,712,4.327,736,5.672,843,5.034,1015,5.769,1658,6.796,1736,4.536,2176,5.09,3091,6.567,3096,5.672,3347,5.583,3601,5.769,3616,6.112,3657,7.047]],["t/1437",[7,2.198,8,2.29,9,2.504,110,3.589,121,1.374,123,1.665,188,2.992,190,3.817,216,3.605,225,2.614,288,2.147,300,3.655,403,5.336,449,3.655,550,5.765,712,4.458,736,5.946,843,5.277,2176,5.336,3091,5.399,3096,5.946,3347,5.853,3601,6.047,3616,6.407,3657,7.387]],["t/1439",[68,2.29,77,1.922,106,3.468,186,2.671,188,2.968,196,4.209,225,2.593,235,2.78,237,4.797,288,1.956,300,3.626,403,5.294,534,5.072,712,4.436,736,5.899,1063,7.067,1736,4.717,2926,5.899,3091,5.356,3096,5.899,3347,5.806,3601,7.54,3616,6.356,3657,7.328,3662,7.655]],["t/1441",[0,0.788,183,5.942,216,3.921,286,4.07,288,2.07,557,6.27,630,5.01,711,5.676,712,4.695,3086,5.048,3096,6.467,3658,8.391,3659,8.033,3660,8.033,3663,9.599,3664,8.391]],["t/1443",[56,1.716,68,3.03,77,1.662,151,5.354,168,4.136,196,4.574,215,3.282,305,6.309,699,5.568,738,7.444,739,6.215,979,7.68,1760,8.794,1792,7.68,3367,8.794,3368,8.794,3665,9.516]],["t/1445",[0,0.742,4,4.013,123,1.707,169,3.508,196,4.348,300,5.44,411,1.947,471,5.239,494,6.328,821,4.461,1366,5.599,2783,7.907,3108,8.229,3111,6.093,3347,5.997,3666,9.045,3667,9.045]],["t/1447",[68,2.308,121,1.722,148,1.654,157,2.253,171,3.276,188,2.992,216,3.605,234,4.794,240,6.276,300,3.655,306,6.276,335,5.252,403,5.336,490,5.22,709,4.382,1063,7.124,1090,4.506,2160,5.464,2738,7.716,3091,5.399,3447,6.276,3619,8.157,3658,7.716,3668,8.157,3669,8.827]],["t/1449",[4,3.707,6,2.034,7,2.081,68,2.794,90,3.031,123,1.577,157,1.702,188,2.833,189,2.785,190,3.613,196,4.017,225,3.164,288,2.093,300,3.46,403,5.052,712,4.306,736,5.629,843,4.995,1058,4.177,2176,5.052,2926,5.629,3091,5.111,3096,5.629,3347,5.541,3560,5.725,3601,5.725,3616,6.065,3670,8.356,3671,8.356]],["t/1451",[0,0.886,56,1.257,77,1.482,99,2.254,121,1.321,123,1.601,148,2.34,153,4.609,170,4.534,225,2.513,226,2.937,227,1.724,273,5.073,364,2.236,411,2.323,546,2.19,717,2.407,729,5.918,913,5.018,943,4.866,1182,5.463,1227,6.033,1693,6.033,2777,7.101,3205,7.392,3654,6.299,3672,8.486]],["t/1453",[0,0.799,7,1.806,13,3.402,14,4.043,56,1.628,64,1.199,66,3.814,77,1.92,123,2.217,148,2.202,183,6.804,225,2.147,226,2.51,227,2.491,311,4.043,364,2.566,411,2.096,546,2.513,717,2.762,946,3.252,1182,4.669,1504,5.156,2176,5.886,3205,7.53,3656,8.598,3673,6.339,3674,5.672,3675,9.737]],["t/1455",[0,0.531,6,1.231,9,1.173,18,3.002,40,1.897,56,1.333,58,2.253,61,2.096,64,0.684,77,2.227,89,1.737,90,1.5,104,1.338,107,1.166,114,2.349,121,0.644,123,1.502,147,1.96,148,2.028,152,4.107,153,2.246,162,2.067,166,1.937,186,2.428,189,2.653,202,2.04,207,1.081,212,2.768,225,2.665,226,3.115,227,2.105,228,2.472,229,1.667,231,1.789,238,2.796,245,4.531,288,0.735,318,1.896,331,2.04,376,2.592,398,1.297,402,2.067,414,2.053,449,3.297,496,1.366,534,2.395,537,1.898,546,1.669,548,1.964,593,4.107,660,1.697,687,1.709,732,3.277,753,2.742,857,2.126,858,3.338,917,1.807,946,3.57,1086,1.875,1387,2.592,1558,5.796,1802,2.728,1856,3.338,1876,2.228,1964,2.158,1997,3.338,2420,3.615,3074,3.822,3654,8.033,3676,4.136,3677,4.136,3678,4.136,3679,2.627,3680,4.136,3681,4.136,3682,4.136,3683,4.136,3684,4.136,3685,4.136,3686,3.822,3687,4.136,3688,4.136,3689,4.136,3690,4.136,3691,4.136,3692,3.822]],["t/1457",[0,1.01,4,3.625,7,2.034,56,1.56,64,1.351,68,2.136,94,3.278,99,2.17,121,1.272,148,2.184,186,2.492,197,3.498,215,2.817,257,6.78,373,5.504,411,2.65,504,3.724,546,2.109,769,7.55,943,6.039,1218,8.499,1558,5.26,2664,5.597,3205,7.214,3674,6.39]],["t/1459",[0,0.681,3,3.164,56,1.738,58,2.075,59,2.463,81,2.719,86,2.746,94,3.328,120,2.767,121,1.827,148,1.554,227,1.685,238,5.075,282,4.514,378,4.328,411,1.785,417,9.822,684,4.174,910,6.02,918,4.756,1495,5.013,1564,5.775,3133,4.803]],["t/1461",[0,0.795,56,1.434,61,5.936,148,1.815,227,1.968,288,2.081,411,2.085,433,7.189,712,4.72,750,5.923,1495,5.854,1736,5.216,3086,6.159]],["t/1463",[0,0.749,30,4.004,56,1.351,148,2.298,207,2.385,227,2.294,300,5.305,321,3.612,331,4.498,411,2.43,433,6.771,492,2.282,494,4.724,546,2.354,1495,5.514,3108,7.605]],["t/1465",[0,0.875,6,1.103,13,3.909,23,1.919,43,5.331,56,0.858,57,1.604,58,2.441,59,2.474,64,0.959,65,2.698,68,1.516,82,3.465,86,3.23,120,1.366,121,1.93,129,3.391,133,1.965,148,1.561,192,4.043,204,3.122,212,2.481,229,2.336,230,4.207,243,2.719,251,2.357,291,2.176,299,1.492,365,3.314,385,2.687,407,5.096,447,2.938,492,1.451,494,4.316,496,1.761,497,4.944,524,3.732,630,3.025,746,4.043,789,5.331,791,4.207,840,4.678,929,4.85,930,3.843,931,6.235,980,4.303,1680,4.121,2174,4.411,2381,2.938,2664,3.971,3082,5.356,3285,5.356,3693,7.283,3694,5.796]],["t/1467",[0,0.768,121,1.785,125,3.77,143,5.364,157,2.336,165,5.591,166,3.435,207,2.446,212,4.005,333,6.524,420,3.737,587,4.775,747,7.489,2505,7.118,2664,8.495]],["t/1469",[0,0.942,2,3.185,8,2.429,43,3.23,56,1.387,63,4.611,65,2.952,84,2.575,121,1.786,129,4.005,133,2.32,148,1.283,185,3.138,194,4.005,207,1.79,212,4.008,291,2.57,299,1.762,353,4.866,406,4.46,461,4.407,494,3.545,538,4.237,539,5.571,549,3.816,550,4.47,552,8.612,566,3.816,571,5.354,575,5.728,576,5.728,931,3.628,941,4.85,1583,4.47,1792,5.524,2177,4.186,2381,3.469,3327,4.968,3693,5.983]],["t/1471",[0,1.005,43,4.923,58,2.61,81,2.639,86,2.665,121,1.624,148,1.509,187,4.488,212,4.466,365,3.202,407,6.379,488,5.444,494,5.403,496,2.204,497,5.865,789,6.119,791,7.571,931,5.529,2566,4.983,3019,5.723,3693,9.118]],["t/1473",[7,2.081,85,3.578,86,2.767,89,3.509,99,2.22,121,1.663,184,2.987,185,3.831,187,4.659,188,2.833,234,4.539,249,6.744,300,3.46,328,3.632,341,5.957,387,4.297,497,4.235,824,6.203,1199,7.584,2566,7.942,2664,5.725,3015,6.065,3195,6.359,3331,7.305,3333,7.305,3695,6.536,3696,7.722]],["t/1475",[0,0.809,65,2.727,157,2.584,168,4.284,171,3.658,178,4.18,385,4.571,820,5.893,1069,4.928,1199,6.347,2566,7.328,3697,8.249]],["t/1477",[0,0.809,65,2.727,90,3.576,157,2.008,166,2.953,168,4.284,188,4.013,245,4.962,260,4.519,385,4.571,820,5.893,1199,6.347,2069,6.876,2566,6.102]],["t/1479",[0,0.824,65,2.777,84,2.564,121,1.863,171,3.725,190,4.341,207,2.625,265,5.201,414,3.187,3328,8.4]],["t/1481",[0,0.824,65,2.777,84,2.564,121,1.863,171,3.725,190,4.341,207,2.625,265,5.201,414,3.187,3328,8.4]],["t/1483",[0,0.824,121,1.99,147,3.044,171,3.725,206,5.002,212,4.298,300,4.955,549,5.597,840,8.101]],["t/1485",[0,0.799,7,1.806,13,3.402,23,2.401,56,1.628,62,3.508,68,1.896,76,4.384,77,1.266,85,3.105,123,1.368,148,2.297,153,3.939,207,2.546,225,2.147,226,2.51,227,2.234,231,2.006,241,4.043,257,4.669,273,4.335,373,4.885,411,1.561,414,2.302,596,4.2,913,4.288,931,5.161,1182,4.669,1227,5.156,3205,9.189,3674,7.616,3698,7.252,3699,6.702,3700,6.339]],["t/1487",[30,4.107,125,3.77,153,5.081,231,3.172,288,1.662,447,4.741,546,2.414,628,6.932,872,4.845,1218,7.549,1389,7.317,1825,6.408,3015,6.789,3205,6.408,3309,8.177,3674,8.969,3699,8.644,3701,9.354]],["t/1489",[30,4.215,125,3.869,153,5.214,231,3.223,288,1.706,546,2.478,628,5.803,872,4.972,1218,7.747,1389,7.509,1825,6.576,3015,6.968,3205,6.576,3309,8.391,3674,9.112,3702,8.871]],["t/1491",[0,0.877,6,2.034,8,3.056,30,3.669,40,1.415,79,6.698,102,3.201,153,4.539,170,4.465,212,3.578,231,2.956,288,1.485,300,3.46,346,5.012,414,2.653,557,5.458,712,3.368,913,4.941,1389,6.536,3205,8.069,3320,7.722,3321,7.722,3376,6.993,3664,7.305,3700,7.305,3703,7.722]],["t/1493",[0,0.825,56,1.773,64,1.257,68,2.628,77,1.328,99,2.02,152,4.829,153,4.13,174,2.901,202,3.75,207,1.988,227,1.545,231,2.103,241,6.676,256,4.36,290,4.319,304,4.098,332,4.597,411,1.637,595,6.136,660,3.12,931,4.03,1248,4.895,1504,5.406,2383,6.363,3141,7.027,3205,8.937,3654,5.645,3704,7.604,3705,7.604,3706,7.604,3707,7.604]],["t/1496",[0,0.93,31,5.607,43,5.345,56,1.358,64,1.098,66,4.821,80,3.925,89,2.787,100,3.464,121,1.033,128,4.06,133,3.107,148,2.122,196,4.406,235,2.107,267,6.976,272,3.711,321,2.629,325,3.964,336,6.805,365,2.64,587,4.68,683,3.615,924,3.844,931,6.003,935,3.968,939,6.394,1171,5.357,1177,3.252,1314,4.547,1365,3.114,1459,5.309,1482,5.555,1534,4.547,1828,6.134,2407,5.192,2484,5.192,2732,4.547,2760,6.134,3016,7.398,3463,8.013,3708,6.638]],["t/1498",[0,0.795,43,5.527,174,4.468,312,3.526,374,6.652,375,4.106,496,2.475,931,6.207,935,5.789,3709,9.684,3710,8.465,3711,8.949]],["t/1500",[0,0.941,43,5.411,68,2.446,121,1.785,123,1.765,148,1.753,272,4.641,325,4.045,414,2.97,931,6.078,935,5.591,939,6.524,1365,5.817,2725,7.549]],["t/1502",[0,0.531,36,2.112,40,2.245,43,3.757,58,1.992,66,4.187,80,2.445,99,1.099,121,1.612,133,1.402,147,1.96,148,0.775,157,1.317,164,3.783,171,1.535,196,4.327,227,1.314,231,1.789,272,1.674,328,1.797,349,2.246,365,1.645,402,2.067,534,4.611,598,3.147,683,1.631,684,4.531,695,6.191,800,6.279,842,3.235,924,3.745,926,4.693,931,2.192,1081,5.058,1219,7.103,1332,3.615,1534,6.692,2635,3.615,2717,2.94,2732,6.692,3225,7.869,3388,5.058,3501,7.869,3712,9.768,3713,4.136,3714,6.466,3715,6.466,3716,4.136,3717,6.466,3718,6.466,3719,6.466,3720,6.466,3721,6.466,3722,4.136,3723,4.136,3724,4.136,3725,9.002,3726,6.466,3727,6.466,3728,6.466,3729,6.466,3730,6.466]],["t/1504",[15,4.695,81,3.015,104,2.976,157,2.311,163,3.44,171,3.413,174,4.329,212,3.938,281,2.284,374,5.224,402,4.597,496,2.601,855,6.196,1219,5.224,1242,8.04,3711,8.499,3731,8.499,3732,9.197,3733,9.197]],["t/1506",[56,1.34,83,4.034,100,4.721,107,2.551,227,1.838,239,3.798,260,4.146,285,7.123,291,3.396,321,3.582,333,6.309,365,3.598,573,6.309,631,3.835,646,5.908,756,6.093,757,6.953,758,6.309,1717,6.883,3273,8.359,3734,9.045]],["t/1508",[0,0.719,7,2.18,56,1.297,64,1.448,68,2.29,75,7.118,212,3.749,213,3.992,229,3.529,239,3.677,285,6.136,364,2.308,461,5.638,631,5.354,632,3.906,640,5.999,646,5.719,756,5.899,757,5.421,792,5.719,1416,7.067,3575,8.609]],["t/1510",[0,0.676,7,1.421,11,4.236,14,4.593,30,3.617,40,0.966,56,0.845,77,1.688,99,1.516,163,4.199,169,2.213,174,2.177,213,5.333,216,2.33,225,1.689,226,1.975,242,3.195,261,3.532,281,2.046,285,6.523,304,2.077,305,3.783,354,2.505,364,2.171,395,3.305,448,3.411,449,2.363,465,3.272,631,4.96,642,6.269,646,3.726,663,4.98,676,6.648,677,9.791,697,3.783,809,4.057,868,3.153,974,2.795,1114,4.98,1313,3.979,1420,2.795,1924,4.605,2159,4.141,2433,4.463,3454,5.273,3575,6.444,3601,6.624,3610,5.273,3735,9.668,3736,5.706,3737,5.706,3738,5.706,3739,5.706,3740,7.613]],["t/1512",[0,0.637,23,2.571,68,2.664,99,2.063,163,2.904,183,4.807,188,3.454,196,3.732,213,5.184,225,3.017,281,1.929,285,5.681,387,3.993,449,3.215,456,4.453,631,5.315,641,5.909,643,4.116,647,8.653,648,6.498,654,7.753,662,3.276,663,4.694,717,2.202,809,5.521,1420,3.804,1459,4.497,2168,5.444,3575,7.97,3741,7.765]],["t/1515",[0,0.742,7,2.797,35,6.197,40,1.532,107,2.551,163,3.383,213,5.12,225,2.678,260,4.146,285,6.811,631,3.835,640,6.197,676,9.064,677,7.569,1459,5.239,2131,9.064,3575,7.075,3601,6.197,3742,9.045]],["t/1517",[0,0.821,64,1.249,68,1.975,163,4.195,164,4.418,207,1.975,213,5.663,225,2.236,285,6.254,304,2.749,398,2.368,410,5.173,448,5.979,631,4.241,641,8.535,642,5.746,643,4.002,646,4.932,647,9.087,648,6.319,655,6.601,664,6.319,680,5.907,709,3.749,740,4.618,741,6.601,1459,4.374,2131,8.073,3095,5.267,3575,5.907,3743,7.551,3744,7.551]],["t/1519",[0,0.774,56,1.707,68,2.467,72,5.84,83,4.208,178,4,285,6.427,292,5.213,656,6.314,756,6.355,757,5.84,758,6.58,794,8.718,795,6.58,3460,7.895,3745,10.652]],["t/1521",[7,1.748,8,1.821,9,1.991,23,2.324,56,1.04,77,2.025,102,2.689,120,1.655,128,4.293,148,1.316,178,2.976,195,4.293,229,2.829,231,1.942,235,2.229,288,1.248,299,1.807,339,6.136,447,3.558,464,3.148,471,4.066,656,3.845,749,4.151,764,4.204,782,3.664,795,4.896,954,4.244,1114,4.244,1124,5.874,1372,4.107,1420,4.667,1758,5.665,1966,3.485,3195,5.342,3745,10.715,3746,7.971,3747,7.02,3748,7.02,3749,7.02,3750,7.02,3751,7.02,3752,9.525,3753,7.971,3754,7.02,3755,6.136,3756,6.136,3757,7.02,3758,7.02,3759,7.02]],["t/1523",[0,0.725,6,0.931,7,1.218,13,2.295,40,1.246,53,2.137,56,1.64,64,1.216,68,1.279,77,0.854,168,2.126,181,1.553,207,1.279,212,2.094,225,1.448,227,1.796,231,3.177,272,2.977,285,2.727,290,5.582,300,3.045,322,3.722,337,3.243,354,2.148,364,2.329,365,2.925,375,2.074,411,1.583,477,2.703,631,2.074,668,4.914,674,2.553,675,3.149,717,2.989,744,5.418,756,3.295,757,3.028,758,6.164,759,2.397,760,8.755,787,3.243,807,3.295,874,2.553,971,3.722,1026,3.149,1114,4.446,1717,3.722,1848,3.722,2491,8.934,2589,4.52,2648,6.161,2707,4.093,3510,4.52,3746,7.396,3760,8.818,3761,6.429,3762,4.892,3763,4.892,3764,8.838,3765,4.892,3766,4.892]],["t/1525",[0,0.576,56,1.04,64,1.161,77,2.117,110,3.873,120,2.245,123,1.324,200,2.991,227,1.936,231,1.942,285,5.311,304,3.468,341,3.914,354,4.182,411,2.051,628,4.244,667,4.585,674,5.643,725,5.665,744,3.609,760,6.772,868,5.264,1011,4.458,1060,4.4,1090,3.583,2648,5.971,3746,7.971,3760,10.143,3767,12.121,3768,9.525,3769,7.02,3770,7.02,3771,7.02,3772,7.02]],["t/1527",[0,0.749,7,2.271,56,1.816,68,2.385,107,2.573,120,2.15,202,4.498,227,2.294,285,5.085,411,2.43,673,4.913,674,4.76,1429,5.872,3773,9.121,3774,11.289,3775,9.121,3776,9.121,3777,9.121,3778,9.121]],["t/1529",[40,1.315,56,1.788,83,3.463,107,2.19,148,1.455,168,3.375,182,3.804,227,2.071,231,3.146,285,4.329,298,4.053,364,2.047,408,5.962,717,3.226,756,5.231,757,4.807,758,7.931,764,3.427,1169,4.749,1208,3.804,1441,6.267,1716,6.267,1722,6.074,1846,6.074,3560,5.32,3578,7.176,3746,9.516,3779,6.498,3780,6.788,3781,6.074,3782,7.765]],["t/1531",[7,1.933,23,2.571,56,1.788,64,1.284,68,2.664,81,2.546,102,2.974,120,1.83,121,1.586,122,2.916,124,2.726,148,1.455,216,3.171,229,3.129,251,3.157,296,6.09,364,2.047,378,4.053,498,5.32,632,3.463,633,4.329,683,4.761,713,4.497,716,5.764,935,6.09,944,5.32,1412,4.807,1439,6.788,1924,6.267,2430,6.471,3783,7.176,3784,7.176,3785,5.909,3786,7.176]],["t/1533",[0,0.731,6,1.955,56,1.319,68,1.665,81,2.088,86,3.683,120,1.501,121,1.386,123,1.938,125,3.589,201,3.765,210,6.192,212,2.726,227,2.087,238,5.655,239,3.74,251,2.589,287,5.779,365,2.533,378,3.323,411,1.917,546,1.644,683,4.617,684,4.483,695,6.14,696,4.527,726,5.139,924,3.688,925,4.981,926,4.622,937,4.1,1859,4.622,2732,4.363,3316,5.885,3787,8.596,3788,6.368]],["t/1535",[0,0.681,57,2.464,58,3.333,59,3.158,120,1.955,123,1.565,124,2.911,227,1.685,287,4.666,411,1.785,471,4.803,496,2.48,497,5.389,683,4.882,687,2.192,695,4.957,1264,6.487,1534,5.682,3789,6.94]],["t/1537",[0,0.707,56,1.276,120,2.032,123,1.626,124,3.025,227,1.752,287,4.85,411,1.856,683,5.107,686,5.89,688,8.201,695,5.152,751,7.287,1674,7.6,2633,6.742,3790,7.534]],["t/1539",[0,0.796,6,2.397,8,2.515,42,3.626,56,1.067,86,3.627,99,1.914,125,5.187,148,1.35,166,2.158,181,3.078,193,3.213,212,3.084,238,4.192,243,3.38,251,2.929,365,2.866,389,4.26,405,6.53,478,5.482,638,5.814,666,4.419,684,5.514,807,4.853,910,5.229,933,3.53,937,4.638,944,4.935,1200,4.575,1208,3.53,1692,5.635,1886,6.298,2406,5.229,3334,5.482,3791,6.658]],["t/1541",[0,0.826,6,1.546,7,0.858,40,0.947,56,1.491,62,1.667,65,0.954,68,0.901,75,2.038,81,1.13,85,3.021,86,3.334,90,2.029,100,1.799,102,1.32,103,1.813,104,1.115,107,0.972,120,0.813,121,1.264,122,2.1,125,4.831,147,1.696,157,1.654,168,1.498,171,2.075,174,1.315,178,1.461,188,2.752,196,1.657,202,1.7,204,1.857,206,1.441,215,1.189,216,1.408,231,0.954,232,2.608,234,4.41,238,2.418,242,1.337,243,3.31,245,2.815,246,2.696,253,2.559,260,1.58,263,4.68,287,3.97,288,0.994,291,2.1,300,1.427,316,1.786,318,2.564,354,1.513,396,3.239,398,1.753,410,2.361,411,0.742,414,1.094,427,4.059,439,3.013,479,2.777,492,0.863,501,1.958,509,1.799,528,2.322,545,2.696,551,1.402,566,1.922,596,1.996,658,1.857,683,2.783,684,4.811,695,4.854,696,5.773,727,5.017,737,2.219,759,1.689,764,1.521,782,3.683,792,3.653,806,2.623,833,2.696,874,1.799,912,2.502,916,3.35,917,1.506,922,2.322,937,3.601,1060,2.161,1090,1.76,1104,3.013,1227,2.451,1310,1.996,1350,3.901,1376,5.747,1408,1.872,1504,2.451,1924,2.782,2141,2.404,2176,3.381,2371,2.782,2494,2.782,2579,3.013,2719,3.42,2777,2.885,2821,2.502,3194,2.885,3212,3.185,3281,3.013,3358,4.375,3447,2.451,3785,2.623,3792,3.447,3793,3.185,3794,3.185,3795,3.185,3796,3.447,3797,3.185,3798,3.447,3799,3.447,3800,5.593,3801,3.447,3802,3.447,3803,3.447]],["t/1543",[0,0.931,56,1.362,124,3.228,125,5.179,166,2.755,227,1.869,321,3.642,375,3.899,411,1.98,666,4.192,668,4.289,673,6.113,748,5.224,749,5.438,971,6.998,1876,4.954,2784,7.422,3804,8.04]],["t/1545",[0,0.89,37,2.266,86,2.831,121,1.853,122,3.211,124,3.002,125,3.446,142,7.117,148,1.603,212,3.661,231,2.366,241,4.768,252,4.085,445,5.859,456,4.904,628,5.17,933,5.313,1310,4.953,1350,7.563,2167,5.859,2406,7.87,3805,7.903,3806,7.903,3807,7.476]],["t/1547",[0,0.749,6,2.257,8,1.712,86,3.926,106,2.613,120,2.468,121,1.629,125,4.943,130,3.784,139,5.878,147,2,149,4.898,166,1.977,181,2.095,201,3.901,220,5.161,222,4.602,229,2.659,291,2.477,300,3.78,325,4.526,337,4.374,389,6.19,404,4.035,423,3.86,437,8.188,490,3.901,494,3.418,516,4.691,596,3.821,638,5.324,666,4.772,787,4.374,944,4.52,1196,4.035,1757,6.097,1845,4.136,1876,3.554,2870,4.789,3618,5.767,3808,6.097,3809,6.598]],["t/1549",[0,0.854,30,2.862,57,1.255,58,1.632,59,1.936,64,1.72,71,3.855,84,1.397,85,2.791,86,2.158,89,2.738,104,2.93,114,3.703,121,1.619,125,5.051,147,1.977,157,1.328,166,1.953,176,5.473,178,2.764,180,4.197,194,3.815,213,2.972,217,3.987,241,3.635,257,4.197,281,1.619,292,5.003,316,5.388,321,2.582,367,3.635,378,3.402,414,2.07,492,1.632,673,3.512,727,4.635,747,5.913,807,4.392,831,4.725,1022,5.699,1071,5.455,2174,4.961,2347,4.197,3463,7.914,3695,5.099,3810,9.612,3811,6.025,3812,6.025,3813,5.455,3814,6.519]],["t/1551",[36,1.647,40,2.053,53,3.066,86,4.013,114,3.987,120,1.655,121,1.093,148,1.316,159,4.107,187,3.914,188,4.109,201,5.632,227,1.936,231,2.635,232,3.274,234,5.174,251,2.854,291,2.636,310,6.316,398,2.987,411,1.511,477,3.879,662,2.962,753,4.654,776,3.781,787,4.654,1420,3.439,2141,4.896,2212,5.095,2719,5.826,2821,5.095,3017,5.211,3695,7.451,3761,6.136,3815,5.342,3816,7.02,3817,7.02,3818,7.02,3819,7.02,3820,7.02]],["t/1553",[0,0.73,64,1.472,86,3.681,120,2.098,121,1.73,125,4.48,200,4.737,227,1.808,231,2.462,238,3.848,287,6.256,490,5.262,622,3.465,649,6.327,684,6.103,793,5.262,827,6.327,910,6.459,1692,6.961,3327,6.459]],["t/1555",[12,5.549,30,4.29,85,4.183,125,5.093,236,5.777,237,5.352,313,5.497,341,5.447,596,5.659,797,7.885,1063,7.885,1227,6.946,3203,9.029,3250,8.176]],["t/1557",[0,0.992,4,2.545,6,1.574,28,3.693,42,2.887,56,0.849,64,0.949,66,3.016,68,2.162,86,3.514,121,2.085,125,4.534,130,3.289,133,1.944,147,1.739,148,1.817,212,2.456,216,2.343,229,2.311,231,2.288,237,3.142,243,5.498,249,4.629,291,2.154,365,2.281,389,3.391,492,1.435,509,4.316,566,3.198,628,4.999,666,2.615,668,2.675,684,2.887,792,5.401,793,7.657,807,3.864,830,4.163,913,3.391,944,5.665,1153,3.391,2402,5.014,3695,4.486,3821,5.735,3822,5.735]],["t/1559",[0,0.861,6,1.064,56,0.828,57,1.076,58,1.399,59,1.66,68,2.499,76,3.379,77,1.945,86,3.164,106,2.214,107,1.577,121,2.005,123,1.531,125,3.851,139,5.225,140,2.794,147,1.695,148,1.047,163,3.035,196,2.687,200,2.381,207,1.462,225,1.655,226,1.934,229,2.253,281,1.388,288,1.442,304,2.035,318,2.562,321,2.214,398,3.288,449,2.314,492,2.031,550,3.651,587,2.853,684,4.085,695,3.341,725,4.511,793,7.401,868,3.089,916,3.853,917,3.545,924,3.237,1680,3.974,1692,6.348,1881,3.898,2609,3.974,2738,4.886,2926,3.765,3162,4.677,3810,5.165,3812,7.5,3823,8.353]],["t/1561",[6,1.628,40,1.837,57,1.646,64,1.414,77,2.079,121,1.688,123,1.613,147,3.288,207,2.236,235,2.715,288,1.927,304,3.114,365,3.402,414,2.715,449,3.541,793,7.04,916,4.06,917,3.736,1802,3.608,3823,10.408,3824,8.552,3825,8.552]],["t/1563",[0,0.603,7,1.83,37,2.932,56,1.088,57,1.415,58,1.839,59,2.182,68,1.922,102,2.815,121,1.529,123,1.386,169,4.291,227,2.249,231,2.033,241,5.477,281,1.825,313,4.135,332,4.443,492,3.17,632,3.278,683,3.874,684,3.699,713,7.13,714,4.951,715,3.313,716,5.456,821,3.624,916,4.664,922,4.951,933,4.813,1365,3.448,3826,7.349,3827,6.791]],["t/1565",[0,0.669,6,1.069,7,2.386,40,2.083,56,1.557,68,2.749,107,2.298,148,1.053,163,2.101,178,2.382,183,3.478,188,2.761,215,1.937,229,2.264,231,2.908,235,3.043,251,3.312,272,2.274,349,4.425,375,3.454,411,1.209,492,1.406,494,4.22,532,3.669,632,4.688,683,2.216,713,5.551,714,7.517,715,4.321,723,3.994,804,5.32,918,6.028,933,2.753,1365,5.459,1412,5.043,1493,4.394,1503,3.132,1736,3.026,2381,4.129,2717,7.473,2718,6.574,2719,4.982,2720,4.534,2721,4.534,2908,3.994]],["t/1567",[0,0.734,6,1.702,23,2.961,68,1.675,86,2.121,102,3.426,120,2.108,121,1.392,122,2.405,123,1.208,125,2.581,148,1.2,200,3.81,202,4.41,229,2.581,231,1.772,238,2.77,251,2.604,266,5.36,313,3.604,364,2.357,411,1.925,414,2.034,492,1.603,498,4.388,649,4.554,683,4.063,713,5.18,716,9.72,727,4.554,918,3.673,922,4.315,924,3.71,925,5.01,944,4.388,1062,5.169,1206,4.554,1361,4.554,1439,5.599,1674,4.467,1693,4.554,1808,4.755,1917,5.01,1924,5.169,2609,4.554,2717,4.554,3784,5.919,3785,6.805,3786,5.919,3787,5.36,3828,5.599,3829,5.919]],["t/1569",[0,0.595,13,3.402,37,1.921,43,4.595,56,1.74,59,2.154,68,2.546,81,2.377,123,1.837,127,4.808,133,2.458,148,1.359,211,5.955,241,5.429,272,2.935,296,4.335,375,3.075,386,5.518,549,4.043,683,4.335,713,4.2,747,4.736,875,3.65,918,4.159,931,5.161,933,5.386,1310,4.2,1365,5.92,1459,4.2,1672,5.058,1685,4.606,2381,4.935,2609,5.156,2717,5.156,2908,6.922]],["t/1571",[37,3.077,56,1.201,68,3.037,123,2.398,225,3.103,235,3.327,238,4.532,239,5.338,411,1.746,546,2.093,632,5.669,683,3.198,922,7.823,933,5.69,2609,5.766,2908,5.766]],["t/1573",[0,0.637,37,2.057,57,1.961,58,3.021,123,1.465,148,1.455,229,3.129,231,2.148,238,5.22,239,4.775,241,4.329,272,4.124,414,2.465,492,2.55,496,2.551,683,5.074,713,4.497,715,4.594,922,7.661,924,4.497,933,3.804,2609,5.521,3830,7.765]],["t/1575",[6,2.106,56,1.307,62,4.27,72,5.464,77,1.542,83,3.937,120,2.848,121,1.722,148,1.654,188,3.75,212,3.779,237,6.06,292,6.113,686,4.141,795,6.157,1102,7.716,1347,6.157,1437,6.717,3831,7.387,3832,8.827,3833,8.827]],["t/1577",[0,0.93,3,2.942,8,2,9,2.187,56,1.783,57,1.484,58,2.538,65,2.133,84,2.173,99,2.694,100,4.024,102,2.954,103,4.055,105,2.756,141,3.778,207,2.016,208,4.964,215,4.152,223,3.828,266,6.452,375,3.269,406,3.223,463,5.874,464,3.458,465,6.904,492,1.93,764,3.403,1767,6.222,1812,7.125,2908,5.482,3834,7.125]],["t/1579",[0,0.988,3,3.341,6,1.667,8,2.856,9,3.122,15,4.47,23,2.899,56,1.783,78,5.133,89,3.677,102,4.216,123,1.652,181,2.78,217,5.356,375,3.713,414,2.78,796,8.395,1211,6.356,2409,7.655]],["t/1582",[0,0.517,2,3.765,6,1.198,8,2.292,9,2.506,23,2.084,30,2.764,36,1.477,37,1.668,40,2.255,56,0.932,57,1.965,58,2.555,77,1.099,121,0.98,148,1.18,153,3.419,163,2.354,174,2.402,291,2.364,304,2.292,354,2.764,398,1.974,449,2.607,496,1.867,547,2.431,587,5.211,683,2.482,796,4.39,879,4.543,917,2.75,933,3.084,946,2.823,974,3.084,1034,3.85,1153,3.722,1211,6.413,1772,5.268,2180,7.723,3497,5.817,3523,5.817,3835,11.068,3836,6.295,3837,6.295,3838,6.295,3839,5.817,3840,6.295,3841,6.295,3842,6.295]],["t/1584",[0,0.656,2,2.718,8,2.693,9,3.271,14,4.455,23,3.437,28,5.145,40,2.068,58,2,86,2.646,128,4.887,171,3.853,195,4.887,216,3.264,326,5.009,364,2.106,496,1.689,587,4.079,636,6.687,717,2.267,725,6.449,843,4.777,1211,7.535,1389,6.251,1774,8.043,2390,6.251,3843,7.991,3844,7.991,3845,7.991,3846,7.991]],["t/1586",[56,1.514,57,1.968,58,2.559,77,1.786,107,2.884,120,2.41,121,1.592,123,1.929,148,1.916,587,5.22,796,7.132]],["t/1588",[6,2.29,56,1.5,68,2.649,161,3.377,420,4.047,796,7.066,1066,8.176,1429,6.523,2788,7.925,3839,9.362,3847,10.131]],["t/1590",[0,0.894,23,3.608,48,3.315,56,1.276,61,4.368,64,1.425,78,4.02,108,4.465,114,4.895,141,4.223,148,2.042,169,3.342,188,4.39,357,4.092,375,3.654,432,5.806,464,3.865,492,2.157,939,6.011,1376,5.549,1420,4.223,1915,7.213,2515,6.956,3848,7.534]],["t/1592",[0,0.94,23,2.608,56,1.167,59,2.339,68,2.06,114,6.504,123,1.486,148,1.476,169,3.988,186,2.402,187,4.391,188,4.378,225,2.332,226,2.726,227,2.09,229,3.174,232,3.673,251,4.182,368,4.562,411,1.696,492,2.574,560,4.876,662,3.323,706,4.708,913,4.657,1090,4.021,1915,6.591,2719,4.817,3815,5.994,3849,7.279]],["t/1594",[0,0.654,7,1.357,23,1.805,40,2.015,48,3.623,56,1.395,64,0.901,77,0.952,81,1.787,86,1.805,87,3.039,99,1.448,107,2.248,148,2.331,153,2.96,164,3.189,168,2.369,188,3.193,212,2.334,231,2.867,232,2.542,291,2.047,298,3.17,332,5.694,364,1.437,399,3.334,411,1.173,414,1.73,671,4.403,717,2.26,915,3.223,1169,3.334,1208,2.67,1248,5.131,1376,3.509,1554,6.668,1716,4.399,1846,4.263,1922,6.064,2212,5.784,2648,3.417,2719,3.334,3560,3.734,3781,4.263,3848,8.234,3850,4.765,3851,5.037,3852,5.037,3853,5.037,3854,5.037,3855,5.037,3856,5.037,3857,5.037,3858,5.037,3859,5.037,3860,5.037,3861,5.037,3862,5.037,3863,5.037,3864,5.037,3865,5.037,3866,5.037,3867,5.451,3868,5.451,3869,5.037,3870,5.037,3871,5.037,3872,5.451,3873,5.451]],["t/1596",[0,0.441,7,1.963,40,1.856,48,2.066,61,2.722,64,0.888,81,1.761,84,2.537,120,1.266,148,1.75,178,2.277,185,2.462,188,3.715,224,3.05,226,1.859,328,2.334,332,5.646,390,1.985,535,3.05,536,3.08,869,2.741,1025,2.666,1089,6.192,1248,5.075,1503,4.395,1554,8.611,1922,5.998,2212,7.469,2270,4.494,2407,9.26,2648,3.366,3848,4.695,3851,4.963,3852,4.963,3853,4.963,3854,4.963,3855,4.963,3856,4.963,3857,4.963,3858,4.963,3859,7.285,3860,4.963,3861,4.963,3862,4.963,3863,4.963,3864,4.963,3865,4.963,3866,4.963,3869,4.963,3870,7.285,3871,7.285,3874,5.371,3875,5.371,3876,5.371,3877,5.371,3878,5.371,3879,5.371,3880,5.371,3881,5.371,3882,5.371,3883,5.371,3884,5.371,3885,5.371,3886,5.371,3887,5.371,3888,5.371,3889,5.371,3890,5.371,3891,5.371]],["t/1598",[77,1.769,78,4.725,108,5.248,142,6.056,148,1.899,188,4.351,252,4.84,464,4.543,744,5.209,3892,10.131]],["t/1600",[0,0.749,3,3.48,4,4.046,56,1.672,68,2.385,85,3.905,89,3.83,157,1.858,300,4.675,321,3.612,675,5.872,686,4.279,748,5.18,932,5.452,1029,5.23,1060,5.717,1959,8.831,2782,7.973,3108,6.144,3893,7.632,3894,9.121]],["t/1602",[7,2.309,56,1.689,68,2.425,133,3.144,147,2.812,292,5.125,551,3.771,675,5.971,748,6.479,751,5.219,752,5.971,932,5.544,966,4.3,1405,7.761,1412,5.741,1431,7.485,1959,9.663,3895,8.571]],["t/1604",[7,1.818,36,1.712,56,1.448,66,3.839,68,1.909,75,4.317,89,3.066,100,3.81,157,1.487,197,3.125,198,4.107,206,3.051,291,2.741,298,2.904,357,5.593,375,3.095,416,5.555,501,4.146,551,3.977,557,4.768,662,3.08,737,4.7,748,6.977,763,5.19,776,3.932,912,5.299,931,5.184,1138,4.519,1405,6.109,1425,8.184,1431,5.891,1651,6.381,1729,5.71,2648,6.913,3157,6.746,3196,6.381,3779,8.184,3896,7.3,3897,6.746,3898,6.746]],["t/1606",[36,1.96,48,3.214,75,4.941,81,2.74,82,4.995,107,2.357,206,4.466,290,4.746,300,3.46,313,6.627,501,6.069,523,4.995,551,4.789,563,6.536,675,5.38,728,5.941,748,4.746,932,4.995,934,4.578,1420,4.094,1592,4.361,1685,5.307,3120,7.305,3199,7.722,3899,9.34,3900,9.34,3901,8.356]],["t/1608",[11,5.684,36,1.796,48,2.945,56,1.673,75,5.969,100,3.996,121,1.192,141,3.751,147,2.321,157,2.542,168,3.328,186,2.335,197,5.343,206,4.219,207,2.002,260,3.51,320,5.158,443,5.444,490,4.527,501,5.734,551,4.105,559,5.444,748,4.349,912,5.557,927,5.077,974,3.751,1098,5.684,1199,4.93,1412,4.74,2178,5.557,3899,6.693,3902,7.657,3903,7.657]],["t/1610",[56,1.488,84,2.153,100,3.968,114,4.319,147,2.305,157,2.292,163,2.844,166,2.278,194,4.449,197,3.255,206,3.178,245,3.827,298,3.997,300,3.148,337,5.041,362,4.65,455,5.786,501,4.319,512,4.496,551,5.201,566,4.239,577,5.519,585,3.881,625,4.278,673,4.096,748,5.707,759,3.725,820,4.545,930,5.041,1339,5.786,1719,5.645,1729,5.948,1797,6.22,3229,6.647,3899,8.784]],["t/1612",[5,3.907,56,1.276,84,2.335,147,2.613,157,2.558,171,3.199,262,7.016,298,4.334,300,3.569,321,3.414,479,4.279,551,3.504,558,5.549,625,4.85,723,6.128,748,4.895,874,4.498,934,4.721,1412,5.335,1719,6.398,1752,7.213,2908,6.128,3904,7.965,3905,8.619,3906,8.619]],["t/1614",[7,2.146,13,4.043,56,1.614,157,2.638,171,3.199,321,4.973,437,6.742,675,5.549,748,4.895,752,5.549,754,5.403,872,4.465,932,6.514,1188,6.956,1405,7.213,1412,5.335,1959,9.347,2821,6.256,3895,7.965,3907,7.213]],["t/1616",[6,1.68,36,2.071,104,2.857,137,4.572,157,2.58,186,2.692,197,5.422,288,1.569,318,4.046,321,3.496,391,5.277,482,5.062,549,4.921,551,3.589,711,5.22,789,4.412,1680,6.276,2427,6.717,3907,7.387,3908,7.387,3909,8.827,3910,7.387]],["t/1618",[36,2.608,48,4.276,84,2.382,137,4.609,157,2.587,166,2.666,197,5.192,253,6.606,298,3.539,318,4.079,321,3.524,551,4.521,565,4.833,566,4.961,872,5.759,1177,4.36,3907,7.447]],["t/1620",[6,2.266,40,1.449,53,3.736,81,2.804,84,1.832,137,4.43,157,2.425,198,4.812,262,5.506,298,4.313,318,3.92,321,4.294,337,5.67,551,3.477,565,4.645,747,5.585,748,6.159,789,4.275,3342,7.476,3761,7.476,3779,9.074,3907,7.156,3911,7.903,3912,7.903]],["t/1622",[40,1.716,81,3.321,198,5.7,298,4.03,321,4.012,337,6.717,747,6.617,748,6.834,3779,10.069,3912,9.362]],["t/1624",[0,0.914,6,1.418,30,3.27,56,1.832,64,1.639,72,4.611,90,3.596,120,2.337,121,1.543,124,2.615,148,1.396,157,1.517,166,2.232,227,1.514,245,4.989,272,3.015,288,1.324,292,6.563,354,3.27,396,4.314,686,4.65,751,6.269,752,7.173,753,4.939,754,4.669,795,5.195,872,3.858,930,4.939,1412,4.611,1437,5.668,1925,7.543]],["t/1626",[0,0.642,56,1.516,73,4.442,81,2.564,148,1.466,212,3.348,229,3.152,288,1.39,289,7.227,290,4.442,292,4.321,297,9.209,338,5.108,375,3.316,406,3.269,528,5.268,557,5.108,631,5.133,641,5.951,643,4.145,647,5.951,675,5.035,686,3.669,748,4.442,749,4.624,751,7.253,764,4.518,961,4.248,1114,4.728,1152,4.675,1925,5.951,3460,6.544]],["t/1628",[0,0.622,1,1.7,7,1.516,37,1.015,53,1.674,56,1.664,58,2.16,62,1.854,64,1.427,68,2.257,77,1.063,81,1.256,89,1.609,107,1.717,120,2.571,121,1.179,123,1.149,124,1.345,148,1.617,157,0.781,174,2.323,188,2.064,193,2.716,194,2.242,195,2.344,210,1.956,225,1.135,227,1.237,229,1.544,239,4.414,387,1.97,394,0.959,411,0.825,496,2.118,502,3.207,565,2.082,656,2.099,683,2.988,686,5.401,732,4.374,733,4.388,734,2.582,735,4.172,750,2.344,751,6.612,764,1.691,776,3.28,852,3.307,853,3.601,872,1.985,999,6.567,1065,2.916,1109,4.329,1177,2.983,1252,2.845,1404,3.093,1424,3.35,1440,2.916,1459,4.388,1565,4.52,1666,2.434,1834,3.207,1921,2.503,1925,2.916,2046,2.582,2168,2.048,2633,2.998,2739,3.207,2870,2.782,3075,2.582,3546,7.544,3548,5.323,3549,6.623,3550,7.976,3551,5.627,3552,5.323,3553,6.623,3893,3.207,3913,5.096,3914,6.089,3915,3.832,3916,3.207,3917,3.35,3918,3.832,3919,3.832,3920,3.542,3921,3.832]],["t/1630",[0,0.559,7,1.1,37,1.804,56,1.576,58,2.334,62,2.137,64,1.373,68,2.439,77,1.189,107,1.92,120,2.876,123,1.284,148,1.276,157,0.9,162,2.209,174,1.686,210,2.256,227,1.687,235,1.403,387,2.272,394,1.106,420,1.765,454,3.566,496,2.129,519,2.93,632,4.16,633,2.464,683,1.743,686,5.81,688,8.498,689,2.977,732,4.728,733,4.809,734,2.977,735,4.663,751,6.238,852,3.697,853,4.025,933,2.165,1109,3.142,1423,3.362,1459,2.559,1674,7.733,2046,4.585,2168,2.361,2739,3.698,2908,3.142,3546,5.95,3548,3.863,3549,3.863,3552,3.863,3553,3.863,3893,3.698,3898,4.084,3913,3.698,3920,4.084,3922,3.863,3923,4.419,3924,6.807,3925,4.419,3926,6.807,3927,5.95]],["t/1632",[62,4.928,64,1.284,69,8.254,210,3.964,287,4.369,288,1.38,298,3.089,307,6.864,321,3.075,472,5.416,537,2.279,546,2.004,594,3.664,658,4.183,662,4.299,686,4.78,739,5.072,751,4.369,764,3.427,1065,5.909,1199,4.999,1208,3.804,1399,5.764,1852,6.755,2212,5.636,2385,5.148,2781,7.176,3893,6.498,3928,7.765,3929,12.073,3930,7.765,3931,7.765,3932,7.765,3933,7.765,3934,7.765]],["t/1634",[0,0.94,7,2.561,13,3.695,56,1.167,62,3.81,68,2.06,107,2.222,120,1.857,147,2.388,163,2.946,212,3.372,225,3.045,226,2.726,227,1.601,239,3.308,387,4.05,398,2.47,411,1.696,546,2.033,683,3.106,686,6.172,764,3.476,834,2.173,872,4.08,1019,7.173,1818,10.612,1843,6.885,3935,7.877,3936,7.877]],["t/1636",[0,0.909,1,2.17,2,3.006,4,2.17,5,3.334,6,0.931,8,2.734,9,2.989,16,2.429,32,4.093,57,0.942,58,1.841,59,2.624,64,1.216,77,0.854,84,2.59,86,2.926,99,2.611,121,1.145,160,2.479,161,2.946,181,1.553,189,1.63,198,2.752,201,2.892,209,2.194,215,1.687,216,1.998,223,5.702,227,0.994,229,1.971,231,2.445,239,3.088,272,1.98,296,5.283,304,1.781,364,1.938,389,4.349,406,3.074,447,2.479,460,2.805,463,2.833,465,4.218,492,1.224,498,3.351,546,1.263,656,2.68,662,2.064,668,2.281,671,2.703,764,3.246,861,5.229,869,2.497,924,4.26,1179,3.107,1209,2.497,1220,3.478,1580,3.722,1582,4.446,1583,3.195,1666,4.671,1796,4.276,1819,2.992,2141,3.412,2252,3.722,2255,3.722,2654,4.093,3834,4.52,3937,4.276,3938,4.52,3939,4.892,3940,4.276]],["t/1638",[0,0.599,2,2.483,6,1.39,13,3.425,64,1.617,74,3.189,81,2.393,84,2.096,104,2.362,111,4.386,156,5.299,157,1.487,161,3.676,162,3.649,163,2.73,169,2.831,204,3.932,206,3.051,258,4.615,281,2.429,307,4.918,312,2.658,318,3.346,334,6.109,390,2.699,424,4.001,509,3.81,513,4.519,546,1.884,830,5.299,954,4.413,1176,3.932,1179,4.636,1310,4.228,1339,5.555,1558,4.7,1582,4.413,1583,6.388,1648,6.953,1798,4.918,3220,6.746,3941,7.3,3942,7.3]],["t/1640",[0,0.749,2,3.102,9,3.202,23,3.02,56,1.672,64,1.508,84,1.954,99,2.423,102,3.494,124,3.201,190,3.944,215,3.145,223,4.528,294,6.62,295,6.94,375,3.867,463,5.282,477,5.04,656,4.996,1220,6.484,2177,5.578,2908,6.484]],["t/1642",[0,0.761,1,5.061,3,3.538,56,1.374,121,1.444,179,7.058,206,3.876,298,3.689,346,4.351,461,5.971,625,6.951,656,6.249,1819,5.672,2816,7.761,3781,8.922,3943,8.571,3944,8.571]],["t/1644",[56,1.573,129,6.215,455,8.082,625,5.976,634,7.155,656,5.818,1169,6.496]],["t/1646",[7,2.29,14,5.128,56,1.362,68,2.405,77,1.606,99,2.443,227,1.869,255,5.921,298,4.514,625,5.175,631,3.899,656,5.038,813,6.301,1248,5.921,1340,7.422,1368,5.765,3945,9.197,3946,9.197,3947,9.197,3948,9.197,3949,9.197,3950,7.422]],["t/1648",[0,0.908,15,3.213,56,1.512,68,2.31,74,2.75,77,1.543,78,2.936,81,2.064,190,2.722,207,1.646,211,3.85,213,4.027,227,2.522,235,3.241,242,2.441,260,4.05,288,1.119,298,2.504,304,3.717,331,3.104,338,4.111,365,3.514,372,5.688,452,3.683,625,4.971,632,5.199,635,3.962,651,5.08,656,4.84,659,4.79,697,4.174,740,3.85,742,7.985,764,2.778,774,3.763,926,4.569,1159,4.39,1169,5.403,1592,4.611,1966,4.386,3950,5.08,3951,5.503,3952,6.295,3953,6.295,3954,6.295]],["t/1650",[0,0.894,1,3.824,15,5.563,64,1.425,68,2.254,88,6.559,123,1.626,178,3.654,225,2.552,226,2.983,227,1.752,453,6.559,471,4.992,494,4.465,625,6.724,656,5.969,699,6.376,1069,4.308,1208,4.223,1310,4.992,2816,7.213,3950,6.956,3955,8.619,3956,7.965,3957,7.965]],["t/1652",[0,0.774,56,1.397,64,1.56,121,1.794,128,5.77,148,2.16,152,5.992,190,4.079,213,4.301,300,3.906,365,3.753,396,5.464,448,5.64,492,2.361,990,7.895,1329,8.247,2790,8.247,3958,9.434]],["t/1654",[0,0.676,56,1.828,68,2.152,73,4.675,75,4.867,107,2.322,121,1.281,148,1.543,153,4.471,162,4.114,163,3.078,170,4.398,171,3.927,178,4.486,213,5.331,242,3.192,284,3.956,291,3.973,329,4.675,448,4.92,658,4.434,1246,6.11,1329,9.25,1330,6.438,1331,9.779,1562,7.607,3959,8.231]],["t/1656",[0,0.551,6,1.279,72,4.159,85,2.877,86,3.061,121,2.058,123,1.744,125,5.265,133,2.278,143,3.853,159,3.931,168,4.018,190,2.905,216,3.776,243,4.958,249,5.422,288,1.643,291,2.523,310,4.455,346,3.152,417,5.623,544,5.623,684,3.382,749,3.973,782,3.507,803,5.623,804,4.388,821,6.084,868,3.713,910,6.71,927,4.455,1558,6.804,1680,4.777,1919,5.623,3960,6.719]],["t/1658",[0,0.776,7,1.525,23,1.278,30,1.694,56,1.399,65,1.068,68,2.756,80,3.621,82,4.55,83,4.485,85,1.652,94,2.457,104,1.249,114,2.192,115,2.937,120,1.443,121,1.185,133,1.308,141,1.891,148,1.426,149,2.865,151,2.171,161,1.286,169,1.497,174,1.472,178,1.636,186,1.177,200,3.243,213,2.791,215,2.112,216,1.576,227,0.784,231,1.694,282,1.484,285,4.244,291,1.449,292,3.384,299,0.993,300,3.152,313,2.171,321,1.528,323,2.644,350,2.801,362,2.36,364,1.614,373,4.125,411,0.831,414,2.416,447,1.956,492,0.966,546,0.996,572,4.244,586,2.801,630,2.014,665,2.801,666,1.759,670,2.744,672,3.374,673,3.298,674,3.196,675,3.942,676,3.114,744,1.984,746,2.692,748,3.478,749,3.621,757,5.363,770,5.659,785,3.23,787,2.559,788,3.114,927,2.559,934,2.114,974,1.891,1178,2.389,1200,2.451,1292,6.992,1342,2.744,1361,2.744,1371,2.644,1663,3.374,1733,2.6,1736,2.079,1825,4.195,1849,4.659,1984,2.937,2064,2.36,2393,2.744,2430,2.451,2490,3.566,2491,7.625,2729,2.937,2768,3.566,2782,3.374,3015,2.801,3089,3.23,3104,3.566,3144,2.744,3145,2.937,3194,3.23,3195,2.937,3246,3.566,3448,3.374,3576,3.566,3580,3.566,3588,3.566,3760,3.23,3900,3.374,3961,3.566,3962,3.859,3963,3.859,3964,3.566,3965,3.566,3966,3.859,3967,3.859,3968,3.859,3969,3.859,3970,3.859,3971,3.859,3972,3.859,3973,3.859,3974,3.859,3975,3.859,3976,3.859,3977,3.859]],["t/1660",[0,0.881,58,2.687,59,3.968,84,2.301,85,3.605,120,1.985,140,4.209,178,3.57,225,2.493,226,2.914,227,1.711,231,2.329,232,6.132,312,3.066,357,3.998,488,4.395,496,1.779,687,2.225,782,4.395,3978,7.361]],["t/1662",[0,0.869,59,3.473,65,2.277,84,2.267,90,2.986,122,3.091,140,5.289,157,2.155,166,2.466,227,1.673,232,5.757,245,4.143,312,2.997,411,1.772,456,4.72,475,4.92,1633,6.643,1736,4.434,3086,4.329,3107,5.376,3978,9.25,3979,5.974,3980,5.974,3981,8.231,3982,7.195,3983,7.607,3984,7.195]],["t/1664",[0,0.937,37,2.072,59,3.595,65,2.163,84,2.594,90,2.837,121,1.593,122,2.936,157,2.324,166,2.343,178,3.316,184,2.795,212,3.348,232,5.322,233,4.902,245,3.936,411,1.684,456,4.485,475,4.675,488,5.955,764,3.451,813,5.358,1634,6.311,1635,6.311,1736,4.212,3086,4.113,3107,5.108,3985,6.311,3986,6.836]],["t/1666",[0,0.852,7,1.99,23,2.646,56,1.184,57,2.35,58,3.055,59,2.373,120,1.884,124,2.805,176,4.831,178,3.388,207,2.09,411,1.72,430,4.831,496,2.437,497,5.844,685,5.154,789,5.764,790,6.081,791,7.535,1420,3.915,3987,7.385,3988,9.594,3989,8.378]],["t/1668",[0,0.749,58,2.282,59,2.708,120,3.163,124,3.963,209,4.09,227,2.294,371,5.514,496,2.591,685,4.528,687,2.41,790,8.591,3990,9.111]],["t/1670",[0,0.836,5,3.52,58,2.55,59,3.026,86,3.765,121,1.586,122,2.916,123,1.465,209,3.482,216,3.171,227,1.578,231,2.819,239,5.506,272,4.124,296,6.09,364,2.047,389,6.025,411,1.672,496,2.153,685,3.855,687,2.052,861,7.244,924,4.497,1666,4.932,2141,5.416,3075,5.231,3940,6.788]],["t/1672",[0,0.686,57,2.057,58,3.107,59,2.482,123,1.577,227,1.698,272,3.383,296,4.995,411,1.799,496,2.623,497,4.235,683,5.175,685,5.305,687,2.208,789,5.888,924,4.84,1534,5.725,2430,5.307,3789,6.993,3991,7.722]],["t/1674",[0,0.755,56,1.362,123,1.735,124,3.228,209,4.124,227,2.306,288,1.635,304,3.349,371,5.56,411,1.98,449,5.321,790,9.365,3459,9.92,3990,9.158,3992,9.197]],["t/1676",[0,0.716,5,2.805,9,1.755,15,3.159,33,3.93,40,1.479,56,1.78,58,1.549,59,1.838,65,3.204,80,3.659,86,2.89,103,3.255,106,2.451,107,1.745,123,2.072,124,2.172,139,3.984,142,3.699,181,1.965,193,4.511,196,2.975,200,2.637,201,5.162,209,2.775,227,1.258,239,5.187,251,2.516,365,3.472,386,4.709,391,5.218,399,3.785,405,4.169,411,1.332,474,3.255,496,1.308,497,3.137,499,4.892,683,2.44,685,3.072,879,3.182,1054,4.169,1058,3.093,1059,4.169,1252,6.48,1565,4.594,1921,4.042,2626,4.103,2870,4.492,3075,4.169,3917,5.41,3993,6.188]],["t/1679",[0,0.936,2,3.88,8,2.406,9,2.631,56,1.374,84,1.987,102,3.553,141,4.544,215,3.199,223,4.605,294,6.732,295,7.058,375,5.238,406,3.876,1211,6.732,1583,6.058,2252,7.058,3300,8.571]],["t/1681",[56,1.604,102,4.149,316,5.61,3994,10.831,3995,10.831]],["t/1683",[0,1.04,7,2.446,8,1.907,56,1.088,58,1.839,59,2.182,64,1.625,91,1.853,99,1.952,104,2.378,105,2.627,123,1.386,124,3.448,161,3.274,168,3.194,187,5.477,188,4.004,207,1.922,325,3.178,485,5.456,488,5.127,492,2.458,496,1.553,497,3.725,753,4.873,764,3.243,789,4.91,791,5.334,1840,5.126,2048,7.13,2063,7.13,2069,5.126,2103,5.225,3019,5.225,3996,7.349]],["t/1685",[0,0.624,7,1.893,36,1.784,37,2.015,40,2.243,64,1.662,65,2.103,91,2.534,97,1.888,99,2.67,161,2.534,188,2.577,231,2.103,281,1.888,390,2.811,420,3.038,486,5.122,488,5.874,492,1.903,635,3.41,844,2.133,874,3.968,1586,2.779,1967,3.75,2059,4.597,2103,8.513,2104,5.209,3024,7.647,3032,5.948,3044,5.948,3045,5.519,3997,7.027]],["t/1687",[0,0.58,36,2.244,37,1.872,40,2.206,91,2.413,97,1.755,161,2.355,169,2.74,188,2.395,231,1.954,281,2.376,288,1.256,298,2.81,299,1.819,328,3.07,390,2.612,488,4.993,622,2.751,820,5.719,844,1.982,846,4.222,874,4.993,962,3.086,1621,3.439,1628,3.837,1630,4.134,1853,5.376,2046,7.307,2048,6.944,2054,4.684,2059,5.783,2103,5.023,3024,5.376,3032,7.483,3044,5.526,3045,6.944,3998,6.529,3999,6.529,4000,6.529]],["t/1689",[0,0.89,7,1.499,36,1.412,37,2.268,40,2.237,91,1.518,97,1.495,99,1.599,161,2.006,188,2.901,227,1.739,229,2.425,231,1.665,281,1.495,288,1.521,298,2.394,299,1.549,328,3.72,488,5.662,622,3.333,630,3.141,844,1.688,846,4.788,874,3.141,962,3.739,1058,3.008,1108,2.191,1621,4.167,1628,4.649,1630,5.008,1853,4.58,2054,5.675,2059,5.174,2063,7.23,2069,4.198,2103,6.085,3024,6.513,3032,4.708,3044,6.695,3045,7.875,3998,5.562,3999,5.562,4000,5.562,4001,6.019,4002,6.019,4003,6.019]],["t/1691",[0,0.872,81,3.482,173,6.839,328,4.616,488,6.457,2133,9.285]],["t/1693",[0,0.642,8,2.029,36,1.834,37,2.072,40,2.257,91,2.581,97,1.942,99,2.078,105,2.795,123,1.475,124,2.745,161,2.607,325,3.382,462,2.078,485,5.806,486,5.268,488,4.081,491,5.676,492,2.562,547,3.02,635,3.507,844,2.194,1586,2.858,1967,3.857,2047,8.566,2049,6.544,2058,6.836,2059,4.728,2060,6.311,2062,6.544,2104,5.358,2131,6.311,2132,7.227,4004,7.82]],["t/1695",[0,0.595,7,2.424,8,1.881,36,1.701,37,1.921,40,2.22,64,1.61,65,2.006,91,1.829,97,1.801,161,3.245,188,3.3,227,1.474,231,2.006,281,2.418,298,2.884,299,1.867,312,2.64,414,2.302,420,2.897,485,5.383,486,4.885,488,3.785,492,1.815,635,3.252,844,2.034,855,4.885,874,3.785,1108,2.64,1586,2.65,1967,3.576,2059,4.384,2063,5.264,2069,7.667,2103,5.156,2104,4.968,3024,7.409,3032,5.672,3044,5.672,3045,5.264]],["t/1697",[0,0.818,5,2.728,6,1.146,9,2.428,23,2.834,56,1.607,57,1.917,58,2.142,65,2.368,68,1.574,86,1.993,93,4.908,99,1.599,102,3.279,124,3.004,139,3.875,181,2.717,209,2.699,236,3.559,241,3.356,251,2.447,288,1.07,357,2.858,365,2.394,395,5.769,412,3.598,413,3.991,420,2.404,471,5.769,472,4.198,473,5.59,474,6.028,492,2.142,493,4.279,496,1.809,499,6.058,500,4.468,789,3.008,879,4.401,930,3.991,974,2.949,1371,4.123,1916,4.198,2168,3.216,2177,3.681,2626,5.675,3133,3.486,3850,5.261,4005,6.019,4006,6.019,4007,5.562]],["t/1699",[0,0.899,9,2.464,57,1.672,58,2.174,65,3.03,77,1.517,99,2.308,120,2.048,181,2.758,200,3.701,225,2.572,226,3.006,406,3.631,474,4.569,499,5.297,587,6.122,879,4.467,974,4.256,1546,9.679,1916,6.059,2626,5.76,2926,5.852,3805,8.028]],["t/1701",[0,0.856,7,1.633,9,1.86,40,1.54,56,0.971,57,2.009,58,2.611,77,1.588,81,2.15,106,2.597,110,2.667,124,3.191,147,1.988,148,1.229,181,2.082,225,1.942,227,1.333,252,3.133,390,4.375,398,2.056,400,3.059,412,3.92,413,4.348,471,6.526,492,1.641,699,3.837,782,3.423,879,6.084,1034,4.011,1420,3.213,1916,4.574,2626,7.47,2833,5.488,2869,5.733,2927,6.061,3654,4.869,4008,6.558,4009,6.558,4010,6.558,4011,6.558,4012,6.558,4013,6.558,4014,6.558,4015,6.558,4016,6.558,4017,6.558,4018,6.558,4019,6.558]],["t/1703",[0,0.921,57,1.454,58,3.259,59,3.331,77,1.959,81,2.476,120,2.815,123,1.887,207,1.975,227,2.033,447,3.827,492,2.807,496,2.37,499,6.299,687,2.964,1238,7.612,1916,7.823]],["t/1705",[40,1.422,57,1.889,58,2.101,64,1.388,65,1.621,81,2.752,89,2.46,110,4.8,123,1.105,124,2.056,171,2.174,242,2.272,288,1.905,299,1.508,358,5.121,473,8.269,496,2.494,499,4.746,587,2.99,683,3.311,687,3.119,789,2.928,834,2.957,836,3.048,837,3.04,879,3.012,974,2.87,1117,6.389,1403,3.946,1546,4.727,2395,4.582,2626,3.884,4020,10.717,4021,5.858,4022,8.396,4023,5.858,4024,5.858,4025,5.858,4026,5.858,4027,5.858,4028,5.858,4029,5.858]],["t/1707",[9,2.609,56,1.362,100,4.8,120,2.168,181,3.603,198,5.175,200,3.918,209,4.124,225,2.723,226,3.183,241,5.128,474,5.968,499,5.953,587,4.695,879,4.729,1546,7.422,2626,6.098,2775,7.422,2926,6.196]],["t/1709",[0,0.791,8,3.102,9,3.704,10,3.414,16,4.284,23,1.557,27,3.579,28,3.028,56,0.697,58,1.177,59,1.397,61,2.384,77,0.821,89,1.975,110,3.917,123,0.887,124,1.651,180,3.028,181,2.74,227,1.451,242,1.824,252,2.247,396,2.724,411,1.012,443,7.365,469,3.579,472,3.28,474,3.755,496,0.994,499,3.453,524,3.028,546,1.214,566,2.622,660,1.93,687,1.243,709,2.335,922,3.168,1060,6.039,1170,3.795,1171,3.795,1173,7.221,1200,2.987,1232,7.331,1372,2.752,1658,3.795,1795,3.679,1799,5.974,1825,3.222,2390,3.679,2505,3.579,2506,3.936,2591,4.111,2694,4.346,2834,4.346,2870,3.414,3314,3.679,4030,8.629,4031,7.139,4032,7.221,4033,3.936,4034,3.936,4035,5.974,4036,3.936,4037,3.936,4038,7.139,4039,4.111,4040,4.703,4041,7.139,4042,8.629,4043,4.703,4044,4.703,4045,4.703,4046,7.139,4047,4.703,4048,4.703,4049,4.703,4050,4.703]],["t/1711",[0,0.986,9,1.941,15,4.779,30,3.005,40,1.808,57,1.802,58,1.713,64,1.765,99,1.818,106,3.708,110,2.783,130,3.925,133,2.32,141,3.354,147,2.075,181,2.173,197,2.93,227,1.391,235,2.173,285,3.816,299,1.762,321,2.711,400,3.192,412,4.092,413,4.538,443,4.866,465,3.925,474,6.319,499,3.311,530,5.796,753,4.538,1117,5.208,2431,5.524,2833,5.728,2869,8.184,4032,5.728,4033,5.728,4034,5.728,4035,5.728,4036,5.728,4037,5.728,4051,6.845,4052,6.845,4053,9.363,4054,6.845,4055,6.845]],["t/1713",[0,0.952,9,3.067,57,1.351,58,3.199,59,3.211,77,1.888,81,2.301,99,1.865,120,2.733,123,1.797,181,3.432,207,1.836,227,1.936,241,3.914,447,3.558,474,6.098,492,2.706,496,2.285,499,6.184,687,2.857,1238,7.248,2775,5.665]],["t/1715",[40,1.657,45,3.81,57,1.405,58,1.827,59,3.499,64,1.617,77,1.275,104,3.165,106,4.368,120,1.721,123,2.223,124,4.135,147,2.213,212,3.125,252,3.487,325,3.157,398,3.458,471,7.115,492,3.164,499,3.531,537,2.143,832,5.783,1585,5.419,1916,5.092,2609,5.19,4056,7.3,4057,7.3,4058,7.3]],["t/1717",[57,2.006,58,2.608,65,2.883,123,1.966,391,6.229,473,7.99,499,5.04,4059,9.108]],["t/1719",[65,2.727,93,5.653,110,4.008,123,1.86,184,3.523,241,5.496,398,3.091,473,7.731,658,5.31,739,6.439,1199,6.347,1546,7.956,1852,6.536,4059,8.617]],["t/1721",[40,1.354,57,1.538,58,2,64,1.322,65,2.872,93,5.953,123,1.508,391,4.777,496,1.689,499,5.021,519,6.883,834,3.368,836,2.953,837,2.945,2017,5.687,2793,5.574,3911,7.385,4059,10.08,4060,7.991,4061,7.991,4062,7.991,4063,7.991,4064,7.991,4065,7.991,4066,7.991,4067,7.991,4068,7.991,4069,7.385,4070,7.385]],["t/1723",[40,1.853,64,1.809,4069,10.109,4070,10.109]],["t/1725",[6,1.765,107,2.616,121,1.775,125,4.978,148,2.138,149,6.885,197,3.971,237,5.081,350,6.732,364,2.444,375,3.932,445,6.354,573,6.469,683,3.658,743,8.571,757,5.741,792,6.058,3785,7.058]],["t/1728",[0,0.411,6,0.952,7,1.862,8,1.298,9,2.541,12,2.842,30,2.197,37,1.982,56,0.741,65,1.384,75,2.958,86,2.476,107,1.411,120,1.179,121,1.801,122,1.879,125,4.901,133,1.696,134,4.624,137,2.592,157,1.524,162,2.501,166,1.499,178,2.121,231,2.069,236,2.958,237,2.741,238,2.163,239,2.101,241,2.789,255,3.221,282,1.924,287,2.815,288,1.329,291,3.732,300,2.072,304,1.822,354,2.197,357,2.375,398,1.569,406,2.091,407,3.06,423,2.927,432,3.37,443,3.557,477,4.133,543,4.038,546,1.291,556,3.631,557,3.268,560,3.097,572,2.789,596,2.898,667,3.268,683,1.973,684,3.765,740,3.06,748,2.842,749,2.958,792,4.885,821,2.467,929,4.187,932,2.991,933,2.451,1066,4.038,1207,5.692,1337,3.37,1350,3.49,1361,3.557,1503,4.17,1669,4.187,1736,2.695,1825,3.428,1921,3.268,2141,3.49,3111,3.37,3136,4.187,3170,4.374,3210,4.624,3245,4.624,3695,5.851,3785,3.807,3787,4.187,3804,4.374,4039,4.374,4071,5.003,4072,5.003,4073,5.003,4074,5.003,4075,5.003,4076,5.003,4077,4.624]],["t/1730",[0,0.624,7,1.893,30,3.338,86,2.517,99,2.02,102,4.311,120,1.792,123,1.435,178,3.224,196,4.83,231,2.78,235,2.414,239,3.193,287,4.278,291,2.855,632,3.391,683,3.963,695,6.728,716,5.645,726,6.136,756,5.122,757,6.22,789,3.801,941,3.939,1579,5.948,1921,7.351,1951,5.948,2430,4.829,3785,8.565,4078,7.604,4079,7.604,4080,7.604,4081,7.604,4082,7.604,4083,7.604,4084,7.604]],["t/1732",[107,2.806,121,1.852,123,1.877,196,4.781,243,4.667,389,5.882,662,4.197,793,5.882,916,5.651,917,5.199,1058,4.972]],["t/1734",[0,0.713,102,3.328,148,1.628,231,3.03,238,3.756,242,4.247,266,9.164,287,4.888,354,3.814,366,8.028,411,1.87,492,2.174,509,4.534,683,4.319,695,5.193,696,6.176,713,6.343,716,6.449,930,5.76,2141,6.059,2732,5.951,3785,8.333,3828,7.594,4085,8.687]],["t/1736",[0,0.898,287,6.155,683,4.314,4086,10.939]],["t/1738",[0,0.713,56,1.287,124,3.049,125,5.075,166,3.593,212,3.719,281,2.158,299,2.236,367,6.106,411,1.87,668,4.051,748,4.934,749,5.137,830,7.949,971,6.611,1138,5.378,1825,5.951,2778,7.594,2784,7.011,3577,8.028,3614,7.594,3804,7.594,4087,8.687]],["t/1740",[0,0.642,42,3.936,56,1.158,83,3.488,84,1.676,86,2.589,121,1.593,125,4.599,128,4.783,149,5.806,157,1.593,166,2.343,207,2.045,300,4.725,313,4.4,337,5.185,354,3.434,367,6.362,373,6.896,385,3.626,748,4.442,749,4.624,931,4.145,950,6.311,1059,5.268,1153,4.624,1808,5.806,1876,4.212,3129,6.544,3135,4.624,3144,8.113,3900,6.836,3961,7.227,3964,7.227]],["t/1742",[0,0.666,56,1.201,120,1.912,123,1.53,124,2.846,125,3.268,227,1.648,287,4.563,321,3.212,411,1.746,432,5.463,683,5.013,686,5.963,688,8.017,695,4.848,751,7.152,789,4.054,1674,7.31,2633,6.343,3790,7.089,4088,6.171,4089,8.109,4090,8.109]],["t/1744",[0,0.799,3,2.767,56,1.074,64,1.199,102,2.778,120,1.709,124,2.545,141,3.553,147,2.199,148,1.359,157,1.983,194,4.243,207,1.896,225,2.147,226,2.51,227,1.474,239,4.089,242,2.812,272,2.935,299,1.867,411,1.561,414,2.302,482,4.159,496,2.057,497,3.676,504,3.306,587,4.97,594,5.187,630,3.785,673,3.906,683,3.84,685,6.59,789,3.625,1227,5.156,1383,5.518,1950,6.068,3194,6.068,4091,7.252,4092,6.702]],["t/1746",[7,2.149,40,2.364,56,0.697,57,0.905,58,1.177,59,1.397,64,1.427,65,3.23,104,1.522,121,0.732,157,1.454,166,2.139,182,4.228,184,3.084,204,2.533,207,1.23,281,2.393,288,2.075,299,1.211,300,4.289,424,1.706,430,5.824,492,1.787,531,3.98,594,4.547,685,3.544,834,2.381,836,2.454,837,2.448,845,3.679,846,2.076,847,5.432,849,5.584,913,2.781,1176,2.533,1408,2.554,1595,3.349,1840,3.28,2017,4.727,2018,4.811,2022,4.855,3447,3.344,4093,4.346,4094,4.703,4095,4.346,4096,4.703,4097,4.703,4098,4.703]],["t/1748",[1,4.186,23,3.816,56,1.397,124,3.311,210,4.816,294,6.848,295,7.179,456,5.41,594,4.452,656,5.168,685,5.723,779,6.58,1852,6.255,1950,7.895,2433,7.38,4099,11.527,4100,8.718]],["t/1750",[2,2.129,40,2.348,48,2.407,56,0.927,84,2.585,102,2.398,182,4.311,184,3.145,251,2.545,265,5.663,288,1.962,298,2.49,299,2.62,312,2.279,390,3.253,594,4.802,834,2.428,836,2.503,837,2.496,2017,4.82,2018,4.906,2022,4.951,2590,5.238,4101,7.96,4102,5.784,4103,5.471,4104,6.259,4105,6.259]],["t/1752",[0,0.654,6,1.038,7,1.357,12,4.526,15,2.782,16,2.706,40,0.923,56,1.18,57,2.394,58,3.163,59,2.797,60,7.882,61,4.039,62,2.636,63,3.672,64,0.901,65,2.204,66,2.867,67,4.263,68,2.084,69,3.956,70,4.263,71,3.223,72,5.831,73,4.526,74,2.381,75,4.712,76,3.295,77,0.952,120,2.804,121,1.613,122,2.047,124,3.306,151,3.067,209,3.573,227,1.914,312,1.985,371,3.295,411,1.173,423,3.189,471,3.157,496,1.684,497,2.763,587,4.068,687,1.44,789,3.983,790,7.168,974,2.67,1200,3.462,1310,3.157,1339,4.148,1684,3.462,3459,4.765,3990,6.431]],["t/1754",[0,0.922,40,1.104,56,1.664,57,2.002,58,2.955,59,3.507,73,3.703,102,2.497,107,2.554,120,2.452,123,1.708,162,3.259,180,4.197,227,1.84,312,2.374,492,1.632,496,2.198,587,5.31,790,7.915,1722,7.082,1766,5.455,2212,8.87,2793,4.547,3394,5.261,3989,5.261,3990,7.306,4106,12.78,4107,6.519,4108,4.732,4109,6.519,4110,6.519]],["t/1756",[56,1.62,200,4.661,411,2.355,499,5.291]],["t/1759",[0,0.769,36,1.856,40,2.101,48,2.076,57,1.803,58,2.748,65,3.364,66,2.838,91,2.362,97,2.326,122,2.026,163,2.018,166,1.617,225,1.598,226,1.868,227,1.097,288,1.665,299,2.827,321,2.137,385,2.502,394,1.351,406,2.256,411,1.703,414,1.713,430,3.263,462,1.434,496,2.425,546,1.393,744,2.775,789,3.954,834,3.271,836,2.664,837,2.656,844,2.627,974,3.876,1047,4.221,1478,7.127,1802,3.338,1876,2.907,4111,4.987,4112,4.987,4113,4.987,4114,7.311,4115,7.911,4116,7.911,4117,4.516,4118,4.987]],["t/1761",[0,0.82,36,1.767,40,2.102,48,1.942,57,1.734,58,2.254,65,3.211,66,2.655,81,1.655,86,2.982,91,2.271,97,2.237,102,2.885,147,1.531,207,1.32,225,1.495,226,1.747,242,2.921,288,0.897,299,2.75,321,2,385,2.341,391,5.384,394,1.264,406,3.148,408,2.954,414,1.603,427,3.665,430,3.052,462,1.341,473,3.298,479,2.507,497,5.061,499,4.357,518,3.748,654,5.731,656,2.766,662,2.13,680,3.95,687,2.38,779,3.522,789,3.764,844,2.526,974,3.69,1047,3.95,1069,2.524,1177,2.474,1192,4.075,1208,2.474,1219,2.868,1770,4.414,1802,3.178,1965,3.583,2168,2.698,4111,4.666,4112,4.666,4113,4.666,4114,6.96,4118,4.666,4119,5.049,4120,5.049,4121,7.531]],["t/1763",[23,3.071,44,7.255,56,1.689,121,1.444,272,3.754,281,2.303,336,9.171,509,4.84,587,4.734,663,5.607,1408,6.71,1792,7.485,2664,8.463,4122,9.275,4123,9.275]],["t/1765",[0,0.599,28,4.7,58,1.827,64,1.617,65,2.019,81,3.206,86,2.417,121,1.522,125,4.445,143,4.186,157,2.246,166,2.93,196,3.509,200,4.167,238,4.229,242,2.831,336,5.419,344,5.001,357,3.466,378,3.81,411,1.572,456,4.186,462,2.598,496,1.543,587,3.726,594,4.615,774,5.846,834,3.043,1100,5.419,2505,5.555,2664,7.556,4124,7.3,4125,7.3,4126,6.746,4127,7.3,4128,7.3,4129,7.3]],["t/1767",[0,0.713,28,5.593,57,1.672,58,3.001,64,1.437,65,2.403,81,2.848,121,1.352,196,4.176,312,3.163,336,8.13,354,4.808,395,5.031,430,5.252,496,1.836,587,5.59,774,5.193,834,3.021,1219,4.934,1408,4.719,2784,7.011,4126,8.028,4130,8.687,4131,8.687]],["t/1769",[0,0.661,45,4.201,56,1.192,58,2.61,59,3.858,96,3.59,98,4.08,120,2.459,124,2.826,192,5.614,209,3.61,227,2.12,232,3.754,256,4.616,371,4.866,411,1.733,491,5.843,492,2.61,496,1.701,505,4.983,687,2.127,732,4.08,790,7.937,1675,6.126,1771,5.258,2167,5.515,2719,4.923,3990,8.418,4132,6.736]],["t/1771",[0,0.801,7,1.813,16,2.397,30,2.119,40,1.937,57,1.402,64,0.798,65,1.335,84,1.034,89,2.027,102,1.849,123,1.842,124,1.694,133,1.636,152,3.066,154,3.896,157,2.69,158,2.988,166,1.446,186,1.472,189,2.427,204,2.6,207,1.262,261,2.988,265,3.164,281,1.199,299,1.243,331,2.381,335,2.292,340,5.541,378,2.519,390,2.692,398,1.513,461,3.108,462,2.594,492,1.822,537,1.417,546,1.246,547,1.864,548,3.457,552,5.876,566,2.691,585,2.464,608,1.98,635,2.165,649,3.432,709,3.615,764,2.13,820,4.353,941,2.5,949,3.307,962,2.109,966,2.238,974,2.365,975,4.039,1020,2.098,1086,2.188,1087,2.429,1108,3.192,1621,3.544,1648,3.432,1668,4.039,1797,2.988,1966,5.202,1967,3.591,2160,4.507,2463,3.896,3217,4.461,4133,4.22,4134,4.827,4135,4.039,4136,4.461,4137,4.461,4138,4.461,4139,4.461,4140,4.827,4141,4.827,4142,4.827,4143,4.827,4144,4.827]],["t/1773",[0,0.918,1,3.327,4,3.327,56,1.475,87,6.233,92,4.344,94,3.009,102,3.814,148,1.405,157,2.028,168,3.259,207,1.961,225,2.221,226,2.595,227,1.524,496,1.585,548,5.654,748,4.26,943,4.301,953,4.181,1027,7.228,1109,7.948,1341,5.138,1561,5.444,2393,7.08,3121,6.276,3123,8.036,3350,5.866,4145,8.704,4146,8.333,4147,6.931,4148,8.704]],["t/1775",[0,0.719,2,3.744,7,2.18,56,1.63,58,2.191,59,2.6,64,1.448,107,3.104,120,2.594,227,1.78,284,4.209,496,1.85,548,5.715,732,5.578,734,5.899,748,4.973,1083,5.124,1178,5.421,4149,8.092,4150,8.092,4151,7.067,4152,7.328]],["t/1777",[0,0.833,1,2.761,2,2.981,7,1.55,45,3.248,56,1.631,58,2.193,59,1.848,64,1.029,102,3.886,107,2.472,120,2.736,123,1.654,207,1.627,225,1.843,226,2.154,227,2.238,239,3.68,272,3.548,284,2.991,496,1.852,548,5.874,683,3.456,732,6.103,734,4.192,1083,3.641,1109,7.83,1178,3.852,2463,5.022,3350,4.868,4145,7.661,4146,5.208,4147,5.751,4148,7.661,4149,5.751,4150,5.751,4151,5.022,4152,5.208,4153,8.614]],["t/1779",[0,0.962,57,1.387,58,1.803,59,2.139,102,2.76,107,2.032,121,1.121,123,1.359,157,2.231,166,2.158,171,2.674,215,2.484,219,3.946,254,5.229,260,3.302,261,4.46,284,3.463,288,1.28,390,4.05,436,4.575,442,5.229,492,1.803,548,5.98,565,3.913,732,3.651,747,4.705,948,5.025,1109,6.892,1177,3.53,1459,4.173,2324,6.029,4145,6.298,4148,8.474,4151,5.814,4152,6.029,4154,6.658,4155,6.298,4156,6.298,4157,7.204,4158,6.658,4159,6.658,4160,7.204]],["t/1782",[0,0.388,6,0.899,36,2.03,37,1.251,40,2.304,57,0.909,58,1.182,59,1.403,68,1.235,77,0.825,90,2.598,96,2.107,97,1.173,98,2.394,121,1.347,157,2.225,166,1.415,185,3.283,186,1.441,188,2.428,189,1.574,197,4.443,216,1.929,234,3.89,251,3.926,367,2.633,416,3.594,424,2.598,460,4.107,492,1.182,547,4.383,548,3.401,585,3.656,663,2.855,776,3.858,869,3.656,1058,2.361,1152,2.823,1729,5.602,2363,8.441,2966,5.994,2967,6.261,2969,6.261,2970,5.994,2998,6.619,3000,6.619,3473,3.952,4161,8.923,4162,9.656,4163,4.723,4164,4.723,4165,4.723,4166,4.723,4167,4.723,4168,4.723,4169,4.723,4170,7.162,4171,4.723,4172,4.723,4173,7.162,4174,4.723,4175,4.723,4176,4.723]],["t/1784",[6,1.579,27,8.091,84,2.806,121,1.655,174,3.164,185,3.802,196,3.986,227,1.685,231,2.294,248,4.957,281,2.06,390,3.066,424,4.49,531,4.624,548,5.877,746,5.784,1176,6.322,1181,5.134,1196,7.178]],["t/1786",[0,0.809,57,1.898,58,2.467,59,3.767,94,3.955,147,2.989,215,3.4,298,3.921,378,5.145,402,4.928,492,2.467,1564,5.354,4177,9.858]],["t/1788",[56,1.267,58,2.14,59,3.536,64,1.414,94,3.431,120,2.016,123,2.046,148,2.231,193,3.814,215,2.949,239,4.553,272,3.462,286,3.626,411,1.841,474,4.498,524,5.506,683,3.373,1564,7.17,4178,7.903,4179,7.903,4180,7.903]],["t/1790",[0,0.97,56,1.247,58,2.687,59,2.501,64,1.393,68,2.202,123,2.026,227,2.182,272,3.409,298,3.349,387,5.521,411,1.813,496,1.779,497,4.268,683,5.071,913,4.979,924,4.877,1564,6.762,4181,9.386,4182,8.421]],["t/1792",[0,0.74,5,2.938,33,4.116,40,1.527,56,1.66,58,1.622,59,1.925,65,3.26,80,3.832,86,2.985,103,3.408,106,2.567,107,1.828,123,2.115,124,2.275,139,4.173,142,3.874,193,4.625,196,3.115,200,2.761,201,5.332,209,2.906,227,1.317,239,5.123,251,2.635,365,3.586,386,4.932,391,5.39,405,4.366,411,1.395,447,3.285,496,1.369,497,3.285,499,3.135,683,2.556,685,3.218,1054,4.366,1058,3.239,1059,4.366,1252,6.693,1564,6.088,1565,4.811,1921,4.233,2870,4.704,3075,4.366,3917,5.665]],["t/1794",[0,0.713,1,3.854,5,3.938,26,5.313,59,2.58,120,2.048,200,5.365,209,3.896,227,2.226,231,3.03,282,3.341,364,2.29,411,1.87,447,4.403,474,6.622,499,5.297,1372,6.408,1564,6.514]],["t/1797",[0,0.642,40,2.183,57,1.505,65,2.163,91,1.972,97,1.942,186,2.385,288,1.39,299,2.635,406,3.269,496,1.653,530,4.841,834,2.824,836,2.224,837,2.218,844,2.194,1408,4.248,1595,3.669,2588,6.836,4183,5.951,4184,6.836,4185,8.926,4186,6.544,4187,6.544,4188,7.82,4189,7.82,4190,7.82,4191,7.82,4192,5.454,4193,5.676,4194,6.544,4195,6.117,4196,6.117,4197,6.544,4198,7.227]],["t/1799",[0,0.611,36,1.747,40,2.095,57,1.434,65,2.061,84,1.596,91,1.878,97,1.85,288,1.324,299,2.552,496,1.574,530,4.611,834,2.735,836,2.119,837,2.113,844,2.089,846,3.287,962,3.254,1002,3.649,1003,3.83,1005,4.116,1008,4.865,1009,4.453,1012,4.153,1013,4.939,1018,3.83,1035,5.407,1621,3.626,1626,4.669,1627,5.103,2019,5.668,2032,5.53,4185,5.826,4192,5.195,4199,6.233,4200,7.449,4201,5.826,4202,5.018,4203,6.233,4204,5.103,4205,6.233,4206,5.53,4207,5.296,4208,5.826,4209,5.826]],["t/1801",[0,0.573,36,1.636,40,2.162,57,1.343,65,1.93,84,1.495,91,1.759,97,1.732,186,2.128,288,1.24,298,2.774,299,2.441,496,1.474,530,4.318,834,2.617,836,1.984,837,1.978,844,1.956,846,3.078,962,3.047,1002,3.417,1003,3.587,1005,3.854,1008,4.556,1009,4.17,1012,3.889,1013,4.625,1018,3.587,1035,5.063,1408,3.789,1595,3.272,1621,3.395,1626,4.372,1627,4.779,2019,5.308,2032,5.178,4185,5.456,4192,4.865,4195,5.456,4196,5.456,4201,5.456,4202,4.699,4203,5.837,4204,4.779,4205,5.837,4206,5.178,4207,4.959,4208,5.456,4209,7.419,4210,5.629,4211,6.446,4212,6.446]],["t/1803",[0,0.651,40,2.192,57,1.527,65,2.195,71,4.691,91,2.001,97,1.97,163,2.967,186,2.42,288,1.41,299,2.66,496,1.676,556,5.758,834,2.851,836,2.257,837,2.25,844,2.225,1408,4.309,1595,4.847,2627,6.935,4183,6.037,4184,6.935,4186,6.639,4187,6.639,4192,5.533,4193,5.758,4194,6.639,4195,6.206,4196,6.206,4197,6.639,4209,8.988,4213,7.332]],["t/1806",[0,0.867,8,1.743,56,0.995,57,1.293,58,3.087,59,1.995,64,1.111,99,2.456,120,2.179,187,6.347,188,3.134,208,4.326,212,4.525,227,1.365,251,2.732,272,2.72,312,2.446,341,3.746,385,3.115,488,3.507,492,2.645,496,1.953,497,5.357,542,5.422,558,4.326,630,3.507,687,1.776,789,5.69,791,8.263,2046,4.526,2566,5.723,3019,6.572,4214,4.877,4215,4.877,4216,6.209,4217,8.543,4218,5.422,4219,6.209]],["t/1808",[0,0.908,58,2.209,59,3.285,86,4,99,2.939,102,3.381,328,3.836,437,6.905,479,4.382,497,4.474,789,4.412,791,6.407,1059,5.946,2566,7.479,3019,6.276,4214,6.407,4215,6.407,4218,7.124,4220,6.717,4221,8.157,4222,8.157]],["t/1810",[36,2.215,40,2.253,64,1.146,91,3.14,97,2.345,99,2.509,104,3.476,147,2.101,204,3.733,281,1.721,299,2.765,300,2.87,492,2.363,844,2.649,845,5.422,846,3.059,847,5.274,849,5.422,1002,5.651,1586,3.451,1623,5.8,2566,7.888,4214,6.854,4215,6.854,4218,5.594,4220,5.274,4223,6.931]],["t/1812",[64,1.723,121,1.622,187,5.809,188,3.532,204,5.613,423,6.097,3019,7.408,4214,7.563,4224,10.42]],["t/1814",[0,0.873,7,2.065,8,3.212,84,2.653,90,3.008,99,2.825,111,3.719,161,2.764,171,3.078,181,2.633,184,2.964,187,4.624,188,3.978,204,4.467,229,3.342,265,3.604,391,4.957,806,6.311,1199,5.34,2566,7.265,3335,6.94,4215,6.02,4218,6.693,4225,8.293]],["t/1816",[0,0.334,36,0.956,40,2.261,48,1.567,64,1.304,66,2.143,84,1.913,90,2.318,91,1.612,97,1.958,104,2.889,111,2.866,123,0.769,140,2.037,147,1.235,157,1.819,166,1.221,171,2.926,198,2.292,202,2.009,227,0.828,281,1.012,282,3.033,299,2.299,340,3.1,341,2.272,390,2.362,391,3.82,414,1.294,462,2.372,492,1.973,539,1.889,565,2.213,637,2.554,732,2.065,744,2.095,831,2.126,844,2.212,957,3.187,1001,2.554,1002,3.863,1003,2.095,1005,2.251,1009,2.435,1012,2.272,1013,2.701,1032,3.025,1036,3.025,1059,4.305,1108,2.327,1341,2.791,1586,2.882,1626,2.554,2566,4.881,2707,3.409,3019,2.897,3332,3.187,3356,2.842,3696,5.906,4202,2.745,4204,2.791,4214,8.087,4215,4.639,4220,4.863,4226,7.287,4227,4.074,4228,4.074,4229,4.074,4230,3.1,4231,4.074,4232,3.1,4233,4.074,4234,4.074,4235,4.074,4236,4.074,4237,4.074,4238,4.074,4239,3.561,4240,4.074,4241,4.074,4242,4.074,4243,4.074,4244,4.074,4245,4.074,4246,4.074,4247,4.074,4248,3.561,4249,4.074,4250,4.074,4251,4.074,4252,3.561,4253,4.074,4254,4.074,4255,4.074,4256,4.074,4257,4.074,4258,4.074,4259,4.074]],["t/1818",[0,0.251,7,0.762,8,1.317,36,2.119,37,2.652,40,2.299,66,1.61,84,0.656,90,1.841,91,2.413,97,1.878,99,1.348,104,0.991,105,2.702,123,1.226,157,1.324,161,1.692,171,1.136,188,4.213,198,1.723,212,2.173,227,1.536,231,0.847,281,2.081,282,1.178,288,0.902,299,2.326,325,3.269,328,2.825,332,1.851,340,2.33,341,1.707,385,3.014,414,0.972,418,3.315,462,2.008,486,3.419,488,3.392,492,2.261,508,1.756,622,1.976,635,1.373,820,1.831,844,2.12,846,3.699,962,2.217,1002,2.487,1018,2.61,1025,1.52,1058,2.537,1059,3.419,1108,2.753,1586,3.302,1621,2.471,1628,2.757,1630,2.97,1700,3.419,1802,1.292,1967,1.51,2054,3.365,2059,5.461,2060,2.471,2061,2.471,2104,3.477,2566,6.197,3045,2.223,3095,2.136,3332,2.395,4214,6.557,4215,4.717,4218,5.245,4220,2.33,4221,2.83,4260,5.075,4261,5.075,4262,3.062,4263,3.062,4264,3.062,4265,3.062,4266,3.062,4267,6.006,4268,3.062,4269,3.062,4270,3.062,4271,3.062]],["t/1820",[0,0.358,36,2.174,38,2.457,40,2.263,56,0.647,64,1.533,84,2.681,90,2.446,91,2.337,97,2.302,104,1.413,121,0.68,140,2.182,171,1.62,185,2.001,198,2.457,265,4.602,281,1.084,282,1.679,291,1.639,299,2.726,340,3.322,341,2.434,385,3.127,390,3.426,411,0.94,414,1.386,424,1.584,462,1.792,479,2.168,492,2.319,531,2.434,539,2.024,546,1.127,622,1.7,774,2.61,782,3.52,844,2.6,1002,3.304,1018,2.245,1059,2.941,1110,3.415,1581,3.654,1586,3.387,1592,2.279,1625,3.322,1700,4.543,1800,2.941,1801,3.045,2566,5.737,3019,4.795,3331,7.203,3332,3.415,4135,3.654,4214,7.272,4215,5.981,4220,5.132,4226,7.615,4272,4.366,4273,4.035,4274,4.366,4275,4.366,4276,3.817,4277,4.035,4278,4.035,4279,4.366,4280,4.366]],["t/1822",[0,0.514,14,3.49,36,2.064,40,2.143,64,1.683,66,3.292,84,2.823,91,2.219,97,2.185,121,0.974,125,2.522,140,3.129,185,4.034,203,4.088,281,1.554,299,2.842,385,4.08,390,2.314,414,1.987,462,1.663,492,2.202,827,4.45,844,2.468,954,3.784,1002,4.311,1199,7.979,1586,3.216,1685,3.975,2566,5.447,3019,4.45,3332,4.896,3333,7.692,4214,7.386,4215,6.387,4220,4.763,4281,6.259,4282,6.259]],["t/1824",[0,0.502,36,2.032,40,2.278,64,1.662,90,3.142,91,2.184,97,2.497,204,6.632,245,4.359,281,2.151,299,2.814,300,3.586,462,1.626,492,2.516,585,3.124,622,3.373,844,2.82,845,4.787,846,2.701,847,4.656,849,4.787,930,4.057,985,6.157,1108,2.228,1586,3.674,2566,6.223,3019,4.351,3332,4.787,3447,4.351,3472,9.289,4214,7.296,4215,6.286,4220,6.59,4283,6.119,4284,6.119]],["t/1826",[0,0.558,8,2.419,36,2.495,40,2.097,64,1.125,86,2.252,91,3.122,97,1.689,99,1.807,105,2.431,123,1.283,188,3.16,281,2.315,282,3.586,299,2.4,310,4.51,325,2.941,492,2.333,637,4.264,844,1.908,1002,4.568,1090,3.472,1586,3.407,1700,4.582,2566,7.992,4216,9.83,4217,8.616,4219,9.83,4267,6.286,4285,11.443]],["t/1828",[6,2.3,7,2.198,8,3.134,30,3.876,56,1.307,59,3.761,170,4.716,181,2.802,212,3.779,235,2.802,251,3.589,281,2.192,331,5.455,462,2.345,492,2.209,509,4.607,1108,4.611]],["t/1830",[0,0.616,9,1.072,28,2.433,37,1.001,84,2.004,90,1.371,92,2.189,96,1.686,98,1.916,99,1.004,100,1.973,110,1.537,122,1.419,123,0.713,157,2.649,166,1.804,168,1.643,184,1.351,188,1.281,190,1.634,206,1.58,225,1.119,226,1.308,227,0.768,231,1.046,244,2.636,265,3.721,281,0.939,288,2.204,335,1.794,390,3.684,424,2.723,462,1.004,468,2.589,482,2.167,488,1.973,539,1.752,546,1.554,547,1.46,548,1.794,566,2.107,608,4.888,668,1.763,732,3.052,744,3.097,777,1.988,831,3.918,832,2.235,1003,1.943,1005,2.089,1009,3.6,1012,2.107,1013,2.506,1016,4.706,1020,4.716,1021,2.806,1025,2.99,1069,1.889,1083,2.211,1098,2.806,1108,1.376,1177,1.852,1178,2.34,1184,2.4,1205,2.806,1208,1.852,1209,1.929,1248,4.833,1341,5.143,1595,4.017,1626,2.369,1797,6.718,1802,3.613,1803,3.882,1806,2.636,1964,1.973,2648,2.369,3061,3.163,3091,4.591,3154,3.304,3169,3.163,3290,4.126,3356,2.636,3581,3.304,3697,3.163,3910,3.163,4202,2.546,4204,2.589,4207,2.687,4230,2.876,4232,2.876,4286,3.304,4287,3.78]],["t/1832",[0,0.642,9,1.509,13,3.672,65,1.471,99,2.079,104,1.721,123,1.003,157,2.696,166,1.593,168,3.401,184,1.901,194,3.112,248,5.551,281,2.931,288,0.945,410,3.644,424,4.141,546,2.397,578,5.956,832,3.145,941,2.755,1005,2.939,1012,2.965,1016,4.906,1043,6.191,1054,3.583,1083,3.112,1177,5.018,1184,4.971,1205,3.948,1208,3.835,1209,5.228,1348,4.451,1797,3.292,1802,5.303,1803,2.411,1845,3.334,1876,2.865,3114,4.16,3295,6.602,3296,4.292,3302,4.451,4207,3.781,4288,4.915,4289,5.318,4290,4.915,4291,4.915,4292,9.464,4293,4.915,4294,5.318]],["t/1834",[0,0.491,9,2.817,30,3.743,37,2.631,40,1.682,123,1.609,147,1.815,157,2.33,161,1.995,166,2.554,184,3.047,188,3.668,227,2.325,265,3.705,281,1.487,288,1.765,390,2.213,411,1.835,462,2.638,485,6.329,486,5.744,488,4.45,546,2.201,608,3.498,635,4.853,862,3.752,1016,3.752,1020,3.705,1621,4.15,1797,5.278,1802,4.566,1803,3.865,1966,4.233,1967,4.205,2059,5.154,2069,5.947,2103,4.256,2104,5.841,4295,8.526]],["t/1836",[9,1.569,37,2.135,53,2.417,84,2.036,90,2.007,104,2.607,107,2.272,147,1.678,157,1.935,166,1.658,184,1.978,186,1.688,187,3.085,188,4.544,235,1.757,265,4.82,281,1.374,282,2.128,288,2.057,328,3.501,340,4.21,390,3.512,482,3.173,485,4.107,546,1.428,547,2.137,608,4.282,622,2.155,698,5.728,777,2.91,862,3.468,962,2.417,1020,4.129,1023,3.859,1108,2.933,1152,3.307,1458,5.576,1595,5.203,1621,2.693,1628,3.005,1630,3.237,1797,5.881,1802,3.399,1803,3.652,1804,5.728,1966,2.747,2048,4.016,2054,3.669,2059,3.345]],["t/1838",[0,0.456,9,1.577,37,2.142,40,1.614,47,5.781,71,3.288,84,1.733,90,2.017,157,2.438,166,1.666,184,1.988,211,4.945,225,1.647,226,1.925,227,1.13,231,1.538,244,3.879,281,1.381,288,1.975,390,2.056,454,4.488,546,1.435,608,3.318,732,4.098,733,5.519,777,2.925,793,4.781,831,4.973,1003,2.859,1016,5.069,1020,2.417,1021,4.128,1025,2.761,1069,2.78,1083,6.121,1084,2.995,1110,4.35,1174,3.746,1209,2.839,1341,6.528,1797,7.179,1803,5.257,2167,3.81,3227,4.861,3290,3.81,3356,3.879,4155,4.861,4156,4.861,4296,4.861,4297,7.069,4298,7.069,4299,7.069,4300,5.561,4301,5.561,4302,4.861,4303,5.561,4304,4.861]],["t/1840",[0,0.845,9,2.005,23,2.341,37,2.268,40,0.786,47,5.289,84,2.647,91,1.171,99,1.234,124,1.63,133,1.574,161,2.356,166,1.391,168,2.018,184,2.527,199,6.05,227,1.945,281,1.153,288,2.005,385,2.153,390,2.614,398,1.456,424,3.736,460,2.663,527,2.807,531,2.589,537,1.363,539,2.153,540,3.128,546,2.21,608,4.226,668,3.297,712,1.871,774,2.776,777,3.718,802,3.886,855,3.128,1020,3.721,1023,4.931,1176,2.501,1177,3.464,1178,4.377,1208,3.464,1209,5.258,1582,2.807,1592,2.423,1595,2.178,1797,6.984,1798,3.128,1799,7.165,1800,4.763,1801,4.931,1802,1.959,1803,3.205,1845,2.911,2250,5.38,2411,3.301,3275,3.747,3279,4.059,3282,3.632,3284,7.724,3288,3.886,3289,3.886,3290,3.181,3330,4.059]],["t/1842",[9,3.603,104,2.88,184,3.18,281,2.21,390,4.483,461,5.729,546,2.869,633,4.961,637,5.578,712,4.48,941,4.609,1043,5.379,1108,3.24,1182,5.729,1595,4.175,1763,7.779,2064,5.442,3807,7.779,4305,8.223,4306,7.779]],["t/1844",[9,1.569,47,3.057,68,1.447,84,1.186,110,2.25,133,2.731,147,1.678,161,1.844,168,3.501,169,2.146,178,2.346,184,1.978,188,1.876,194,3.237,232,2.58,260,5.085,281,2.001,291,3.025,298,4.753,341,3.085,346,3.779,423,3.237,424,3.786,455,4.21,479,2.747,523,3.307,537,2.789,546,1.428,608,3.305,625,5.346,640,3.791,671,3.057,674,4.205,712,3.247,750,3.384,764,2.442,937,3.562,948,3.859,954,3.345,966,2.565,1020,3.501,1060,3.468,1090,2.824,1108,2.933,1174,3.727,1175,4.21,1376,5.187,1503,4.492,1685,3.514,1802,4.68,1803,4.731,1849,4.21,2161,3.791,2168,4.304,2347,3.562,2474,4.63,2873,5.981,3781,4.328,4307,4.21,4308,4.837,4309,4.107,4310,4.328,4311,5.533,4312,5.113]],["t/1846",[0,0.681,9,2.352,84,2.515,184,2.964,188,2.811,202,4.09,281,2.641,282,3.19,298,3.299,349,5.775,424,3.857,537,2.434,546,2.14,608,3.403,614,7.25,622,3.229,637,5.199,1018,4.264,1019,5.784,1108,3.02,1802,4.487,1803,3.76,1964,4.328,4313,7.25,4314,7.664,4315,7.664,4316,7.25,4317,7.664,4318,6.487,4319,6.487]],["t/1848",[9,2.234,37,2.725,40,1.742,104,3.328,107,2.222,157,2.095,166,3.081,184,2.815,227,1.601,232,6.024,284,3.786,462,2.732,486,5.306,527,4.762,537,3.563,546,2.033,662,3.323,1153,4.657,1478,5.994,1656,7.279,1797,4.876,1803,3.571,1966,5.106,2104,5.396,3985,6.356,4320,7.279,4321,7.877,4322,7.279]],["t/1850",[0,0.78,8,1.012,9,1.751,23,2.044,37,2.031,40,0.661,47,4.816,84,2.767,90,1.415,91,1.557,99,1.036,124,1.369,133,1.322,157,1.775,161,2.058,164,2.282,166,1.85,168,1.695,184,2.207,199,5.632,227,1.771,235,1.96,265,3.331,281,0.969,288,1.95,385,1.809,390,2.833,398,1.223,400,1.819,424,3.445,460,2.237,527,2.358,531,2.175,537,1.145,539,1.809,540,2.628,546,1.978,608,4.145,626,3.41,668,2.88,712,1.572,774,2.332,777,3.247,802,3.264,855,2.628,962,1.704,996,2.358,1020,3.788,1023,4.307,1152,2.332,1176,2.101,1177,3.025,1178,3.822,1208,3.025,1209,4.848,1458,2.084,1582,2.358,1592,2.036,1595,4.089,1621,1.899,1630,2.282,1685,2.477,1703,3.41,1797,7.165,1798,2.628,1799,6.414,1800,4.16,1801,4.307,1802,1.646,1803,3.475,1804,2.773,1845,2.445,2250,4.699,2411,2.773,3275,3.148,3279,3.41,3282,3.051,3284,7.034,3288,3.264,3289,3.264,3290,2.672,4133,3.41,4323,3.604]],["t/1852",[0,0.858,2,1.286,3,2.298,9,1.708,23,2.835,30,2.644,37,1.989,40,0.64,43,4.041,47,4.732,84,2.24,123,1.416,124,1.327,138,2.167,161,2.007,184,1.351,196,4.116,199,5.828,227,0.768,242,1.466,248,2.259,282,1.454,288,1.771,298,1.503,312,1.376,331,1.864,356,4.2,385,1.752,390,2.226,398,1.888,411,0.814,424,3.936,462,2.883,492,1.507,509,3.143,531,2.107,536,3.454,546,2.21,547,1.46,593,2.4,608,2.471,622,1.472,668,3.501,712,1.523,747,2.468,777,3.167,782,3.143,826,2.636,855,2.546,1023,4.2,1108,1.376,1152,3.6,1176,2.036,1177,3.678,1178,4.647,1184,3.825,1206,4.282,1208,2.951,1209,5.086,1339,2.876,1582,2.285,1592,3.143,1618,4.126,1647,5.04,1648,4.282,1797,6.168,1802,2.541,1803,4.517,1845,2.369,1966,1.876,2250,5.713,2411,2.687,2926,2.546,3276,3.493,3282,2.956,3283,3.304,3284,6.058,3288,5.04,3289,5.04,3290,2.589,3295,5.337,3296,4.86,4324,3.78,4325,3.304,4326,3.78]],["t/1854",[0,0.518,2,1.365,7,1,9,1.792,13,1.883,37,2.347,84,2.761,99,1.067,104,1.299,110,1.632,120,0.946,124,1.409,157,1.962,158,2.485,161,2.952,166,1.203,184,3.655,188,2.647,199,2.238,206,1.678,207,1.05,212,1.719,215,1.384,235,2.006,281,0.997,288,1.902,349,2.181,385,1.861,390,2.335,398,1.259,406,1.678,424,2.833,460,3.623,468,2.75,482,2.302,487,2.854,488,2.095,512,2.374,536,2.302,537,2.292,546,2.286,549,2.238,598,3.055,608,4.39,630,2.095,637,3.96,662,1.694,762,2.914,777,4.107,804,2.622,837,1.139,846,1.772,932,2.4,951,2.485,962,1.754,1002,1.967,1012,2.238,1020,3.394,1084,3.403,1089,2.662,1108,2.3,1177,1.967,1179,2.55,1182,2.585,1209,2.049,1248,4.067,1291,3.71,1311,2.75,1408,3.431,1458,2.145,1502,3.863,1503,3.522,1595,2.963,1617,3.24,1618,2.75,1621,1.954,1624,3.36,1626,2.517,1628,2.181,1630,2.349,1631,3.509,1697,2.914,1700,2.704,1797,6.624,1802,2.665,1803,1.82,1804,2.854,1806,2.8,1807,3.36,1808,2.98,2234,3.71,2912,3.71,3275,3.24,3290,2.75,3295,2.854,4327,3.509,4328,4.015,4329,4.015,4330,4.015,4331,4.015]],["t/1856",[9,2.317,36,1.916,65,2.26,84,2.257,138,4.685,157,1.664,161,2.723,169,3.168,184,2.92,206,3.415,232,3.81,281,2.029,288,1.452,299,2.103,311,5.871,312,2.975,390,3.02,398,3.302,546,2.109,547,3.155,608,3.352,625,4.597,804,5.336,951,5.057,1020,3.551,1108,3.834,1420,4.003,1628,4.437,1633,6.593,1802,3.447,1964,4.264,3117,6.593,3979,5.93,3980,5.93]],["t/1858",[7,2.097,16,5.331,33,5.348,37,2.231,56,1.247,85,3.605,137,4.362,215,2.904,242,3.265,246,6.587,290,6.098,306,5.987,317,6.587,322,6.408,329,4.783,430,5.09,487,5.987,551,3.424,596,4.877,639,7.361,910,6.112,929,7.047,954,5.09,1366,5.213,1758,6.796,1808,6.251,1845,5.278,4332,8.421,4333,10.737,4334,8.421,4335,8.421]],["t/1860",[0,0.814,6,2.121,8,2.89,9,2.113,30,3.27,56,1.759,62,3.603,68,1.948,107,2.101,121,1.159,170,3.98,181,2.365,207,1.948,210,3.802,212,3.189,225,2.206,226,2.578,227,2.014,235,2.365,331,5.494,394,1.864,504,3.395,509,3.887,699,7.714,1819,4.556,1846,5.826,1847,6.233,1848,5.668,1849,5.668,1851,6.011,1852,4.939,1853,5.668,1854,6.233]],["t/1862",[23,3.622,138,6.273,157,2.228,932,6.539]],["t/1864",[0,0.647,1,2.383,3,2.049,23,1.778,40,1.582,56,1.167,64,0.888,66,4.912,77,1.797,83,2.395,90,1.948,104,1.738,107,3.231,111,2.408,120,2.426,123,2.067,157,2.658,162,2.684,186,3.343,197,5.069,207,1.404,225,1.59,311,2.994,321,2.127,394,1.344,411,1.156,442,7.469,547,2.074,697,6.822,698,3.818,711,3.176,789,2.684,1007,3.366,1015,7.508,1043,5.646,1049,3.818,1114,3.247,1458,4.212,3850,4.695,4336,7.285,4337,5.371,4338,4.963,4339,4.963,4340,7.883,4341,5.371,4342,5.371,4343,6.891,4344,5.371,4345,5.371]],["t/1866",[4,3.095,6,1.805,40,1.606,56,1.405,61,3.535,64,1.154,68,1.824,77,1.882,90,3.44,107,3.262,123,1.316,157,2.645,189,2.325,225,2.065,245,3.511,260,3.197,288,1.24,394,1.746,411,2.32,462,1.853,535,3.962,547,2.694,697,7.667,712,2.811,826,4.865,1043,4.217,1049,4.959,1114,6.514,3560,4.779,4336,8.765,4338,6.446,4339,6.446,4343,8.291,4346,6.975,4347,6.975,4348,6.975]],["t/1868",[23,3.658,138,6.336,346,5.183]],["t/1870",[0,0.711,40,1.467,56,1.283,59,2.572,64,1.012,68,1.6,77,1.069,81,2.006,83,2.729,107,2.443,110,4.69,120,1.442,121,0.952,147,1.855,157,2.047,188,4.174,207,1.6,225,1.812,226,2.118,227,1.244,229,2.466,231,1.693,235,1.943,288,1.088,298,2.434,346,4.063,362,3.743,394,1.531,594,2.888,622,2.383,649,4.351,697,5.742,714,4.122,820,3.658,1458,6.163,1733,4.122,1806,8.353,2064,7.531,3020,5.349,3327,4.442,3560,4.192,3913,5.121,4349,8.661,4350,6.119,4351,6.119,4352,6.119,4353,8.004]],["t/1872",[23,3.622,138,6.273,879,5.625,932,6.539]],["t/1874",[56,1.681,57,1.77,58,2.302,59,2.731,64,1.521,77,1.606,104,2.976,110,3.739,390,4.751,394,2.302,499,4.449,879,6.607,1413,6.676,1916,6.415,4354,9.197,4355,9.197]],["t/1876",[0,0.707,8,2.236,9,3.673,23,2.854,37,2.284,56,1.276,77,1.505,107,2.431,110,3.504,121,1.954,138,4.943,171,3.199,181,3.794,209,3.865,216,3.52,225,2.552,227,1.752,288,1.532,449,3.569,637,5.403,932,5.152,1198,7.534]],["t/1878",[0,0.808,8,2.949,9,3.693,40,1.667,56,1.458,64,1.394,77,2.065,121,1.769,123,1.111,181,3.609,212,2.521,227,1.713,288,1.909,318,2.7,394,1.474,407,3.602,411,1.268,449,3.49,660,2.416,890,3.172,1114,5.95,1167,4.928,1168,8.236,1169,5.154,1170,6.801,1171,8.67,1173,4.928,1420,5.263,1883,7.053,2385,3.905,4356,8.428,4357,5.443,4358,7.788,4359,7.788,4360,5.889]],["t/1880",[0,0.805,8,2.943,9,3.591,37,3.006,40,1.662,56,1.453,64,1.388,77,2.062,121,1.766,123,1.105,181,3.115,212,2.508,227,1.706,288,1.905,318,2.685,394,1.466,407,3.583,411,1.261,449,3.476,660,2.403,890,3.155,1114,5.932,1167,4.902,1168,8.211,1169,5.135,1170,6.775,1171,8.649,1173,4.902,1420,5.251,1883,7.026,2385,3.884,4357,5.413,4358,7.759,4359,7.759,4361,8.396,4362,5.858]],["t/1882",[1,2.999,3,2.579,7,1.683,40,2.093,56,1.375,58,2.994,64,1.118,68,2.772,78,3.153,94,2.712,110,2.749,114,3.84,188,2.292,193,4.141,201,3.997,215,2.331,225,2.749,226,2.34,227,1.374,239,4.793,288,1.884,309,4.806,394,1.692,449,2.799,496,2.528,656,3.703,683,2.666,764,2.984,826,4.715,1219,5.273,3815,5.144,4363,10.547,4364,5.91,4365,5.019,4366,4.907,4367,6.76,4368,5.91,4369,6.247,4370,6.76]],["t/1884",[23,3.622,138,6.273,712,4.408,932,6.539]],["t/1886",[56,1.689,68,2.425,168,4.031,242,3.597,394,2.321,512,5.484,540,6.248,631,3.932,634,6.248,699,5.427,711,5.484,712,3.738,1384,8.68,1502,6.976,2724,8.108,3162,7.761,4371,9.275,4372,9.275,4373,8.571]],["t/1888",[0,0.671,56,1.823,64,1.351,68,2.136,77,2.15,103,4.297,107,2.304,123,1.541,148,1.531,242,3.168,394,2.045,449,4.361,540,5.504,699,4.78,712,4.696,717,3.305,946,5.226,1069,4.084,1207,6.217,1502,7.127,3162,6.837,3656,6.39,4373,7.55]],["t/1890",[0,0.32,9,1.751,36,1.448,40,2.422,56,0.915,64,1.021,77,1.659,111,1.749,394,0.976,449,1.615,517,6.921,546,1.007,547,3.901,662,1.646,664,5.167,670,5.449,675,3.976,711,2.306,712,2.488,717,1.106,744,3.941,749,2.306,750,2.385,946,3.437,1420,1.911,1898,4.482,2964,3.604,3098,3.051,3182,10.791,3290,4.23,3295,2.773,3303,3.604,3656,3.051,3659,5.167,3661,3.604,4374,5.706,4375,3.9,4376,3.9,4377,3.9,4378,3.9,4379,6.175,4380,6.175,4381,6.175,4382,3.9,4383,3.9,4384,6.175,4385,6.175,4386,3.9,4387,3.9,4388,3.9,4389,3.9,4390,3.9,4391,6.175,4392,3.604,4393,3.9,4394,3.9,4395,3.9,4396,3.9]],["t/1892",[0,0.559,7,1.1,9,1.253,23,1.463,56,1.492,64,1.543,71,4.025,77,1.936,104,1.43,111,3.723,120,1.042,123,1.284,138,2.534,148,1.276,157,1.691,166,2.039,169,1.714,188,4.136,231,1.222,288,0.785,307,2.977,313,2.486,328,1.92,335,3.232,341,2.464,375,1.873,394,1.703,403,5.639,411,0.951,449,2.819,460,2.534,659,3.362,662,1.864,666,5.054,670,3.142,711,2.613,712,4.06,795,3.082,932,2.641,946,4.971,966,3.85,1058,2.209,1152,2.641,1153,7.216,1337,4.585,1420,2.165,3086,4.905,3091,7.463,3094,7.673,3107,2.886,3133,2.559,3313,7.527,3639,6.29,3656,6.494,3659,3.698,4135,5.696,4374,4.084,4392,4.084,4397,4.419,4398,4.419,4399,4.419,4400,4.419,4401,4.419]],["t/1894",[56,1.678,61,3.908,64,1.677,77,2.103,83,3.439,123,1.455,148,1.445,184,2.756,186,3.672,196,5.447,227,2.061,288,1.37,318,3.535,394,2.836,449,3.193,477,5.604,566,4.299,737,4.964,946,5.609,1467,6.031,1693,5.482,1856,6.222,1915,6.452,3654,5.724,3656,6.031,4312,7.125,4402,7.71]],["t/1896",[0,0.877,3,3.188,12,4.746,30,3.669,56,1.238,59,3.81,68,2.185,94,4.287,120,1.97,147,2.534,169,3.241,178,3.543,212,3.578,215,4.062,251,3.398,291,3.138,298,4.25,312,3.043,329,4.746,378,5.576,411,1.799,1564,6.743]],["t/1899",[40,2.202,56,1.293,57,1.191,59,3.003,91,2.201,94,3.503,97,2.168,102,3.874,215,3.01,281,1.537,288,1.1,299,2.247,318,2.837,398,1.94,462,1.644,492,2.749,496,1.308,537,2.562,660,3.582,687,1.635,834,2.408,836,1.76,837,1.755,844,2.449,1564,5.493,1586,2.262,1802,3.683,1965,1.911,3794,5.719,4183,6.643,4192,4.316,4193,6.336,4199,7.305,4210,7.045,4403,6.188,4404,6.188,4405,6.188,4406,6.188,4407,7.631,4408,6.188,4409,8.067,4410,6.188,4411,6.188,4412,6.188,4413,6.188,4414,5.719]],["t/1901",[40,2.179,57,1.134,68,1.54,91,2.125,94,2.363,97,2.093,148,2.013,177,4.928,188,1.996,207,1.54,215,3.394,234,3.199,281,1.463,288,1.047,298,2.343,299,2.17,312,3.069,318,2.7,368,3.411,395,3.411,406,2.462,462,1.565,492,1.474,496,1.245,509,3.074,527,3.56,547,3.801,565,4.578,662,2.485,687,1.556,834,2.325,836,1.675,837,1.67,844,2.364,953,5.487,1002,4.129,1008,6.428,1108,3.911,1586,2.152,1965,1.818,4192,4.108,4193,6.117,4407,5.148,4415,5.443,4416,5.889,4417,5.889,4418,8.428,4419,5.889,4420,9.095,4421,9.095,4422,5.889,4423,7.788]],["t/1903",[40,2.232,57,1.146,71,5.022,85,2.549,91,2.142,94,2.389,97,2.109,163,2.227,186,1.816,206,2.488,215,2.053,236,3.52,255,3.833,281,1.479,288,1.509,299,2.186,462,1.582,492,1.49,496,1.258,530,6.129,592,4.804,687,1.573,834,2.343,836,1.693,837,1.689,844,2.382,1108,4.321,1408,4.613,1586,2.176,1595,5.355,1965,1.838,2627,7.424,4183,4.53,4184,5.204,4185,4.657,4186,7.107,4187,7.107,4192,4.152,4193,6.165,4194,7.107,4195,4.657,4196,4.657,4197,7.107,4209,8.929,4213,5.502,4424,5.953,4425,5.953,4426,5.502]],["t/1905",[37,2.616,40,2.383,57,0.95,84,1.587,91,1.867,97,1.839,123,0.931,157,1.508,228,2.95,281,1.839,288,0.877,298,2.945,299,1.906,390,2.737,462,1.311,492,1.235,496,1.043,530,4.583,537,1.449,687,1.304,834,2.043,836,1.404,837,1.4,844,2.077,1002,4.837,1084,5.318,1108,2.696,1458,5.275,1586,1.804,1615,6.472,1621,2.403,1802,3.124,1965,1.524,3908,6.196,4192,3.442,4193,5.374,4414,4.561,4427,4.561,4428,4.936,4429,4.314,4430,4.936,4431,4.561,4432,4.561,4433,6.842,4434,9.124,4435,4.561,4436,6.842,4437,4.561,4438,4.561,4439,4.561,4440,6.842,4441,4.561,4442,6.842,4443,4.561]],["t/1907",[37,2.553,40,2.36,57,0.905,84,1.53,91,1.8,97,1.773,104,1.522,107,2.014,123,0.887,157,1.962,166,2.585,228,2.811,281,1.773,288,0.836,298,2.84,299,1.838,462,1.249,492,1.177,496,0.994,530,4.419,537,2.828,687,1.243,834,1.97,836,1.338,837,1.334,844,2.002,1002,4.72,1043,5.216,1084,5.19,1086,3.236,1108,2.599,1153,2.781,1458,5.148,1586,1.719,1615,6.241,1700,3.168,1802,1.984,1965,1.452,3908,5.974,4192,3.28,4193,5.182,4409,4.346,4427,4.346,4431,4.346,4432,4.346,4433,6.597,4434,8.903,4435,4.346,4436,6.597,4437,4.346,4438,4.346,4439,4.346,4440,6.597,4441,4.346,4442,6.597,4443,4.346,4444,4.703,4445,4.703,4446,4.703,4447,4.703]],["t/1909",[40,2.106,57,1.219,84,1.357,85,2.711,91,2.237,94,2.54,97,2.203,215,2.183,236,3.744,255,4.076,281,1.572,288,1.577,298,2.518,299,2.284,406,2.646,462,1.682,492,1.584,496,1.338,530,6.339,687,1.673,834,2.447,836,1.801,837,1.796,844,2.488,846,2.794,962,2.766,1002,3.102,1003,3.255,1005,3.499,1008,4.135,1009,3.785,1012,3.53,1013,4.198,1018,3.255,1035,4.595,1108,3.23,1586,2.314,1621,3.082,1626,3.969,1627,4.337,1965,1.955,2019,4.818,2032,4.7,2588,5.534,4185,4.952,4192,4.416,4193,6.439,4197,5.298,4198,5.851,4199,5.298,4201,4.952,4202,4.265,4203,5.298,4204,4.337,4205,5.298,4206,4.7,4207,4.501,4208,4.952,4209,4.952,4448,5.851,4449,6.331]],["t/1911",[36,1.218,40,2.216,57,1,84,1.648,91,1.939,94,2.083,97,1.91,186,1.584,215,1.791,281,1.29,288,0.923,298,3.059,299,1.979,462,1.379,492,1.299,496,1.097,530,5.669,687,1.372,834,2.121,836,1.477,837,1.473,844,2.157,846,3.394,962,3.359,1002,3.767,1003,3.954,1005,4.249,1008,5.022,1009,4.597,1012,4.287,1013,5.098,1018,3.954,1035,5.581,1108,3.686,1408,4.177,1586,1.898,1595,2.436,1621,3.743,1626,4.82,1627,5.268,1965,1.603,2019,5.851,2032,5.708,4185,6.015,4192,3.622,4193,3.769,4194,4.345,4195,4.062,4196,4.062,4201,6.015,4202,5.18,4203,6.435,4204,5.268,4205,6.435,4206,5.708,4207,5.467,4208,6.015,4209,7.163,4210,4.191,4211,4.799,4212,4.799,4448,4.799]],["t/1913",[7,2.645,59,3.154,281,2.638,462,2.822,492,2.658,1108,3.867,1564,5.769]],["t/1915",[0,0.386,9,1.334,84,2.064,99,1.249,122,1.766,147,1.426,157,2.559,166,1.409,168,2.044,184,1.681,188,1.594,206,1.966,215,1.622,235,1.493,252,2.247,281,1.168,288,2.125,298,1.871,335,2.233,390,2.639,398,1.475,424,3.13,462,1.249,468,4.891,469,7.882,482,2.697,488,2.454,546,1.214,547,1.816,549,2.622,608,4.79,668,2.193,777,2.473,831,2.454,832,2.781,932,2.811,962,2.054,966,2.181,1003,2.418,1005,2.599,1009,4.268,1012,2.622,1013,3.118,1016,2.948,1020,4.739,1025,3.544,1035,3.414,1085,3.579,1098,3.491,1108,2.599,1177,2.304,1184,4.534,1205,3.491,1208,2.304,1209,3.644,1248,4.596,1621,2.289,1626,2.948,1797,6.412,1802,3.012,1806,3.28,1807,3.936,1808,3.491,3091,4.366,3154,4.111,3169,3.936,3275,3.795,3277,4.346,3290,3.222,3450,7.775,3581,4.111,3910,3.936,4199,3.936,4201,3.679,4202,3.168,4204,3.222,4207,3.344,4210,3.795,4450,4.703,4451,4.703]],["t/1917",[9,2.267,90,3.766,152,5.075,157,2.486,184,2.856,245,4.022,288,2.049,335,3.794,356,5.574,390,4.263,462,2.123,546,2.679,608,4.731,709,3.967,1020,5.011,1668,6.687,2160,4.947,2463,6.449,4135,8.687,4183,6.081,4186,6.687,4187,6.687,4426,9.594,4452,7.991,4453,7.991,4454,7.385]],["t/1919",[9,2.407,171,4.403,184,3.033,288,1.918,462,2.254,469,6.457,530,7.344,546,3.222,608,4.427,777,4.463,1009,6.45,1020,3.688,1025,5.89,1035,7.832,1797,5.253,1849,6.457,3450,6.848,4183,6.457,4201,6.638,4455,8.486]],["t/1921",[9,2.3,23,2.685,157,1.652,184,2.898,186,3.542,201,4.795,234,4.405,252,3.874,281,2.014,288,1.441,300,3.358,390,2.998,528,5.463,530,6.488,537,2.38,546,2.093,608,3.327,659,6.171,782,4.232,1020,3.524,1089,6.949,1090,4.14,1408,4.405,2160,5.02,4183,6.171,4195,6.343,4196,6.343,4210,6.544,4454,7.494,4456,8.109,4457,10.481,4458,10.481,4459,8.109]],["t/1923",[9,2.407,184,3.033,211,7.256,281,2.108,288,1.508,462,3.317,468,5.813,469,8.211,546,2.19,608,3.482,1020,3.688,1184,7.535,1797,6.679,3450,6.848,4407,7.418,4420,7.842,4421,7.842,4423,7.842,4460,8.486,4461,11.864,4462,8.486,4463,8.486]],["t/1926",[0,0.774,6,1.796,7,2.349,12,5.358,30,5.061,56,1.397,105,3.372,111,4.231,120,2.224,157,1.922,309,6.707,640,6.463,755,6.355,1380,9.016,1381,6.676,1772,7.895,2692,8.247]],["t/1928",[6,1.965,56,1.529,77,1.803,148,1.934,157,2.102,189,4.055,235,3.277,462,2.742,961,5.606]],["t/1930",[0,0.862,6,2.339,8,1.258,77,0.847,90,1.759,91,1.223,95,4.674,96,3.921,97,2.183,98,4.455,101,5.005,123,2.386,148,1.967,157,1.993,160,2.457,161,2.435,169,1.88,186,1.479,189,1.616,235,3.107,253,3.599,273,2.898,367,2.703,411,1.892,424,2.65,547,1.872,578,3.689,598,3.689,608,1.989,668,4.563,684,4.424,744,5.031,832,2.867,946,2.174,947,3.322,953,2.703,961,5.993,996,2.931,1028,3.792,1108,2.66,1167,4.057,1168,4.057,1170,3.913,1172,4.481,1181,4.522,1184,3.079,1194,4.481,1195,4.481,1202,4.238,1205,3.599,1208,4.307,1209,4.487,1376,4.704,1495,2.931,1661,5.303,1919,4.057,2348,4.057,4117,4.057,4464,4.848,4465,4.848,4466,4.848]],["t/1932",[0,0.775,2,1.863,7,1.364,26,4.891,37,1.451,43,2.585,77,1.397,84,1.174,89,2.3,90,1.987,94,3.209,95,2.617,96,2.443,97,1.36,98,2.776,101,3.753,104,1.773,123,1.509,157,2.612,161,1.826,168,2.381,189,4.07,190,2.369,209,2.456,227,1.113,231,2.213,252,2.617,288,1.846,304,2.912,316,4.143,321,2.169,341,3.054,365,2.179,414,1.739,424,2.901,449,2.268,460,3.141,462,2.51,504,2.497,539,2.54,546,2.064,548,2.601,566,3.054,666,3.646,733,3.173,781,4.421,831,2.859,846,3.53,941,2.837,961,2.975,1001,3.434,1003,2.817,1005,3.027,1007,3.434,1009,3.274,1011,3.479,1058,3.998,1083,3.205,1090,2.796,1178,3.391,1495,3.311,1558,3.527,2159,3.976,2926,3.69,3290,3.753,3336,7.391,3922,4.788]],["t/1934",[0,0.42,3,2.903,4,2.272,6,2.143,8,2.356,18,3.716,30,2.248,40,2.167,77,0.894,104,2.462,123,1.436,124,1.797,157,2.375,169,1.985,181,1.625,189,1.706,202,2.525,207,1.339,209,2.296,212,2.192,213,2.334,216,3.108,228,3.061,252,2.446,282,1.969,316,5.208,354,2.248,365,2.036,372,3.296,398,1.605,432,3.449,458,4.132,547,1.977,560,3.169,635,2.296,872,2.652,946,3.412,978,4.132,998,5.307,1017,4.476,1090,2.614,1661,8.694,1685,3.252,2159,3.716,2160,3.169,2161,3.508,2515,4.132,3105,4.132,3249,4.731,3673,4.476,4467,4.731,4468,5.12,4469,4.731,4470,5.12,4471,4.731,4472,4.731,4473,5.12,4474,5.12,4475,5.12,4476,4.731,4477,7.609,4478,4.731,4479,4.731,4480,5.12,4481,4.731,4482,7.609,4483,4.731,4484,5.12,4485,5.12,4486,5.12,4487,5.12,4488,5.12,4489,5.12,4490,5.12,4491,5.12,4492,4.731]],["t/1936",[0,0.993,1,3.095,5,3.162,6,2.051,8,1.81,40,2.2,77,1.656,101,8.285,123,1.316,157,1.421,158,4.318,189,3.161,229,2.811,231,1.93,273,4.17,364,1.838,365,3.772,396,4.04,461,4.491,462,1.853,546,1.8,597,4.556,630,3.64,830,5.063,831,6.312,946,3.128,1028,5.456,1100,5.178,1133,4.625,1208,3.417,1459,4.04,2348,9.018,3791,6.446,3797,6.446,4493,6.097]],["t/1938",[0,0.927,40,2.246,77,2.097,123,1.445,137,5.229,148,2.117,189,3.365,227,2.051,243,4.736,398,3.165,684,5.684,789,3.827,917,3.345,946,3.433,961,4.159,1504,5.444,1819,6.174,1921,6.593,2652,6.693,3673,8.824,4494,7.657,4495,7.657,4496,7.657]],["t/1940",[1,4.08,102,3.523,104,2.976,207,2.405,227,2.501,232,5.292,286,3.899,331,5.596,504,4.192,625,5.175,656,5.038,660,4.656,699,5.381,764,4.059,1169,5.625,4497,8.499,4498,9.197,4499,9.197]],["t/1943",[15,6.109,64,1.66,231,2.777,298,4.76,349,5.452,394,2.512,516,7.137,624,6.762,1225,6.556,3956,9.277,4500,10.038]],["t/1945",[5,4.39,13,4.543,64,1.602,111,4.343,166,2.901,394,2.424,411,2.085,424,3.513,542,7.815,625,5.449,776,5.216,974,4.745,1084,5.216,2687,7.815,4501,9.684,4502,9.684,4503,9.684]],["t/1947",[2,3.209,64,1.56,199,5.26,231,2.61,248,5.64,394,2.361,411,2.031,424,4.181,546,2.975,547,3.643,560,5.84,1152,5.64,1176,5.082,1209,4.816,1214,8.247,4504,8.718,4505,9.434,4506,7.895]],["t/1949",[0,0.781,1,4.222,2,4.25,64,1.574,123,2.186,189,3.172,206,3.977,231,2.633,286,4.035,394,2.381,501,5.405,527,5.753,3327,6.907,3937,8.318,4507,9.516,4508,9.516]],["t/1951",[2,4.115,64,1.691,123,1.929,242,3.965,286,4.335,394,2.559,527,6.182,3937,8.939,4509,10.226,4510,10.226]],["t/1953",[64,1.63,84,2.112,228,5.893,281,2.448,288,2.104,312,3.589,394,2.467,408,5.768,932,5.893,1025,4.894,2161,6.754,4511,9.858,4512,9.858,4513,9.858]],["t/1955",[2,3.155,13,4.351,47,5.125,64,1.534,84,1.987,346,4.351,394,2.321,424,3.364,546,2.944,594,4.377,673,4.996,1084,6.144,1174,6.248,1209,4.734,1214,8.108,1582,5.607,1722,7.255,4514,9.275,4515,9.275,4516,9.275]],["t/1957",[23,3.386,57,2.48,225,3.028,232,5.642,346,5.676,394,2.559,889,7.998]],["t/1959",[57,2.329,206,4.274,298,4.067,394,2.559,501,5.808,837,2.9,1011,7.684,1420,5.01,4517,8.939]],["t/1961",[57,1.659,120,2.032,147,2.613,200,5.091,231,3.015,232,5.573,346,4.043,394,2.157,411,1.856,673,4.643,674,6.904,706,5.152,889,6.742,1420,5.339,1429,5.549,2691,7.965,4497,7.965,4518,10.07,4519,8.619]],["t/1963",[120,2.746,147,2.91,200,4.09,231,3.223,232,5.433,346,4.503,394,2.402,411,2.067,1376,7.5,4520,11.649,4521,11.649,4522,9.599]],["t/1965",[120,2.731,147,2.885,200,4.054,231,3.206,232,5.404,281,2.878,288,2.059,346,4.464,394,2.381,411,2.049,4523,11.588,4524,11.588]],["t/1967",[0,0.788,1,4.259,104,3.106,120,2.263,200,4.09,231,3.223,288,1.706,321,4.967,394,2.402,1420,4.703,4108,6.968,4517,8.391,4525,11.649,4526,9.599]],["t/1969",[0,0.931,2,3.128,56,1.362,64,1.521,77,1.606,189,3.782,190,3.977,206,3.844,231,2.544,354,4.038,394,2.302,625,5.175,674,4.8,889,7.194,961,4.995,1011,5.841,1027,6.676,4108,6.676,4527,9.197,4528,9.197,4529,9.197]],["t/1971",[0,0.781,6,2.206,64,1.574,76,5.753,77,1.662,143,6.645,189,3.862,227,1.934,394,2.381,546,2.456,625,5.354,1951,9.064,4108,6.907,4530,9.516,4531,9.516]],["t/1973",[0,0.788,64,1.588,161,3.199,166,2.876,168,4.172,178,4.07,321,4.614,346,4.503,394,2.402,411,2.067,547,3.707,625,5.401,1435,8.871,2371,7.747,3943,8.871,4532,9.599,4533,9.599]],["t/1975",[104,3.219,120,3.002,232,4.639,346,4.667,394,2.489,411,2.142,1502,7.789,1503,7.101]],["t/1977",[6,1.965,64,1.707,71,6.103,212,4.419,231,2.855,273,6.17,394,2.583,4108,7.492,4534,10.322,4535,10.322]],["t/1979",[0,0.962,9,3.107,23,3.209,56,1.067,64,1.191,68,1.884,84,1.544,90,2.613,94,2.891,121,1.121,157,1.974,166,2.158,179,7.376,189,3.231,206,4.052,231,1.993,248,4.306,260,3.302,288,1.28,298,3.856,312,3.529,394,1.803,405,4.853,411,1.551,449,2.983,498,4.935,501,6.222,546,2.828,625,4.054,670,5.122,674,3.76,712,2.903,762,5.229,804,4.705,1859,5.229,2430,4.575,2493,5.814,4108,5.229,4536,7.204,4537,6.658]],["t/1981",[9,2.796,64,1.63,123,1.86,164,5.768,231,2.727,288,2.104,394,2.467,546,2.544,670,7.009,711,5.829,712,3.973,749,5.829,4364,8.617,4538,9.858]],["t/1983",[0,0.73,9,2.524,15,5.675,64,1.472,71,5.262,123,1.679,157,2.47,166,2.666,206,3.719,216,3.634,231,2.462,394,2.227,501,5.054,546,2.297,550,5.812,625,5.007,670,6.327,712,3.586,826,7.754,4108,8.07,4539,8.899,4540,8.899]],["t/1985",[178,4.46,213,5.944,394,2.633,662,4.439,774,6.288,889,8.229]],["t/1987",[0,0.839,1,4.537,7,2.546,15,5.22,88,7.781,209,4.585,471,5.922,699,5.983,1208,5.01,1310,5.922,3957,9.45]],["t/1989",[0,0.868,1,2.19,3,1.883,15,5.88,61,2.502,64,1.469,68,1.291,77,1.552,104,1.597,122,1.853,123,0.931,133,1.673,147,2.694,186,3.388,225,2.631,226,3.417,227,1.003,235,2.821,291,1.853,331,2.434,333,6.197,394,1.235,402,4.441,408,2.888,453,3.756,593,3.135,625,4.166,632,3.302,651,3.983,656,2.704,698,6.317,742,3.861,750,3.019,890,2.659,931,2.616,1030,3.509,1048,6.196,1108,1.797,1169,4.528,1592,3.864,1856,3.983,3426,5.791,3660,4.13,3781,6.95,3950,7.171,3951,4.314,4541,4.936,4542,7.404,4543,7.404,4544,7.404,4545,7.404,4546,7.404,4547,7.404,4548,7.404,4549,7.404,4550,7.404,4551,7.404,4552,9.873,4553,7.404,4554,9.873,4555,7.404,4556,7.404,4557,4.936]],["t/1991",[0,0.835,1,5.636,3,2,40,1.312,57,2.37,64,1.682,68,2.408,102,2.008,122,1.968,123,0.989,133,2.625,147,1.589,206,5.235,225,2.727,226,1.814,227,1.574,231,2.142,261,3.245,291,1.968,298,3.08,311,2.923,331,2.585,398,2.428,408,3.067,596,3.036,625,4.357,632,4.536,651,6.249,656,2.872,698,5.506,742,6.057,774,3.134,872,2.715,931,2.779,934,2.872,1108,2.819,1169,5.632,1420,2.568,1592,4.041,1819,4.736,3208,4.844,3944,4.844,3950,7.431,3951,6.769,3989,4.231,4108,5.621,4517,4.582,4518,4.844,4558,5.242,4559,5.242,4560,5.242,4561,9.208]],["t/1993",[1,5.196,3,3.695,30,4.252,111,4.343,122,3.636,178,4.106,206,4.048,291,3.636,298,3.852,331,4.776,656,5.305,699,5.666,953,6.529,2729,7.369,4108,7.029]],["t/1995",[84,2.254,184,3.76,227,2.138,232,6.081,3979,7.636,3980,7.636]],["t/1997",[0,0.443,9,1.531,23,1.787,37,2.481,40,1.944,64,0.893,84,2.702,99,2.102,104,1.746,138,4.537,161,3.438,184,1.929,199,4.411,232,4.368,235,1.713,260,2.474,261,4.897,281,2.326,288,0.959,298,2.147,299,2.411,311,4.411,312,4.317,341,3.009,346,3.711,398,2.48,424,3.741,527,3.263,540,3.636,546,2.834,586,3.917,608,2.214,762,3.917,782,2.817,832,3.191,1012,3.009,1098,4.006,1420,3.876,1459,3.126,1582,3.263,1592,2.817,1637,3.917,1643,3.837,1644,5.518,1765,3.917,2530,4.718,3584,4.987,4248,4.718,4252,4.718,4302,4.718,4562,4.987,4563,4.987,4564,4.987,4565,4.987,4566,4.987,4567,4.987,4568,4.987,4569,4.987,4570,5.397,4571,4.516]],["t/1999",[0,0.338,2,2.193,9,1.169,15,3.291,40,1.83,64,0.681,68,1.077,84,1.381,85,1.764,89,1.73,104,2.907,127,2.732,137,2.134,138,2.363,161,1.373,162,2.059,182,2.019,190,1.782,281,2.684,284,1.98,286,1.747,288,1.733,298,3.573,299,1.66,311,2.297,312,3.765,346,5.713,398,1.292,408,2.411,423,2.411,424,3.751,523,2.463,546,2.319,578,3.135,586,2.991,625,4.469,637,2.583,640,2.823,671,3.562,674,4.145,688,5.187,697,2.732,712,1.66,750,3.943,762,4.679,961,2.238,1060,4.978,1066,3.325,1100,3.059,1174,6.569,1182,2.653,1292,3.325,1376,4.151,1420,2.019,1502,2.52,1595,1.933,1658,3.325,2161,5.441,2466,3.808,2474,5.395,2513,5.636,3304,3.325,3756,5.636,3781,3.223,3813,8.653,3979,7.843,4302,3.602,4307,3.135,4308,3.602,4309,4.786,4571,5.395,4572,3.808,4573,6.943,4574,3.808,4575,3.808,4576,3.808,4577,3.448,4578,3.808,4579,3.808,4580,3.808,4581,3.808,4582,4.12,4583,4.12,4584,4.12]],["t/2001",[2,2.771,9,1.593,15,5.366,38,3.161,40,2.184,43,5.492,56,0.832,64,1.585,65,1.554,84,2.572,99,1.492,123,1.06,147,1.703,156,4.078,157,1.144,168,4.568,169,4.513,187,3.132,206,2.348,211,3.436,248,3.358,286,2.382,398,1.761,534,3.254,539,5.396,546,2.88,585,4.158,712,4.497,715,3.673,740,3.436,966,2.605,1025,2.789,1108,2.045,1166,4.701,1561,4.078,3980,5.913,4585,5.618,4586,5.618,4587,5.618,4588,5.618,4589,5.192,4590,5.192,4591,5.192,4592,5.192,4593,5.618,4594,5.618,4595,5.618,4596,5.618]],["t/2003",[7,2.74,13,5.163,59,3.268,84,1.876,140,4.377,227,2.237,232,6.068,488,4.57,492,2.754,1633,7.067,1634,7.067,1635,7.067,3978,7.655,3979,6.356,3980,6.356,3982,7.655,3983,8.092,3984,7.655,3985,7.067,3986,7.655]],["t/2005",[3,3.975,4,4.623,56,1.543,68,2.725,94,4.181,215,4.219,298,4.145,3134,5.863]],["t/2007",[0,0.927,6,1.736,56,1.816,64,1.508,81,2.99,129,5.337,181,2.896,216,4.611,227,1.853,285,5.085,290,5.18,631,4.786,634,6.144,646,5.957,873,7.134,1713,9.447,3134,6.352]],["t/2009",[0,0.908,7,2.198,40,1.874,56,1.307,59,2.621,68,2.308,107,2.49,123,1.665,147,2.676,180,5.683,215,3.044,225,2.614,474,4.642,499,4.27,519,5.853,1020,3.836,1225,5.765,1232,6.717,1314,6.047,1372,5.165,1564,4.794,3134,4.967,3378,7.124,3379,7.124,3380,7.578]],["t/2011",[0,0.817,3,2.861,9,3.171,20,5.138,37,1.987,45,5.197,57,1.444,68,2.604,77,1.739,110,4.049,121,1.167,133,2.542,147,3.389,186,3.781,215,2.586,251,3.049,291,2.816,424,2.72,534,5.767,551,3.049,572,5.552,868,4.144,879,3.856,941,3.885,943,5.71,1015,5.138,1020,3.259,1209,3.828,2664,5.138,3134,5.603,3135,4.435,3381,5.567,3382,5.866]],["t/2013",[0,0.853,7,1.364,37,1.451,40,2.068,48,2.107,56,1.184,57,1.054,58,2.765,59,1.627,61,2.776,68,1.432,77,1.397,110,2.227,120,2.604,121,0.853,123,1.96,148,1.027,174,2.09,181,3.298,193,3.567,225,2.797,226,1.896,227,2.245,238,2.369,239,4.362,242,2.124,272,2.217,288,1.421,300,3.911,449,2.268,474,4.206,494,2.837,496,1.996,546,1.414,551,2.227,712,3.223,857,2.817,933,3.918,1026,3.527,1372,3.205,1564,6.47,1736,2.951,3086,2.881,3096,3.69,3108,3.69,3347,3.632,3380,5.479,3386,4.584,4597,5.062,4598,7.998,4599,7.998]],["t/2015",[171,4.06,287,6.155,562,5.468,2168,5.845]],["t/2017",[0,0.767,7,1.337,37,1.423,40,1.94,48,2.066,59,3.056,68,2.061,77,1.631,110,2.184,120,2.426,121,1.227,123,1.487,148,1.006,150,6.192,174,2.049,181,2.503,186,1.638,202,2.649,225,2.765,226,1.859,227,2.328,231,1.486,238,3.409,242,2.083,272,2.174,300,4.261,373,3.618,411,1.156,449,2.224,474,4.146,546,1.386,551,2.184,587,4.024,686,4.381,857,4.053,917,4.495,922,5.31,933,4.576,1026,3.458,1114,3.247,1372,4.612,1564,2.917,3111,6.291,3134,6.166,3135,3.176,3145,4.087,3380,5.4,4600,8.611,4601,4.695,4602,4.695,4603,4.695,4604,4.494,4605,7.285]],["t/2019",[0,0.769,3,1.699,7,1.109,9,2.367,37,1.815,40,1.883,48,1.713,53,1.946,57,1.318,59,2.782,66,2.343,68,1.791,77,2.004,85,1.907,99,1.183,110,1.811,120,2.208,121,0.693,123,1.292,147,1.351,148,0.835,150,5.533,174,1.699,186,3.391,194,2.607,225,2.471,226,1.542,227,2.26,231,1.232,242,1.728,272,1.803,300,3.879,373,3.001,379,3.334,380,2.663,402,3.424,411,2.017,449,3.455,474,3.602,507,4.24,546,1.15,551,2.785,587,4.26,686,3.915,857,3.522,879,4.291,917,4.092,1026,2.868,1114,2.693,1209,4.26,1372,4.008,1564,2.42,2347,2.868,3111,5.621,3134,5.271,3135,2.634,3380,4.692,3382,5.358,3679,2.829,4600,7.839,4604,3.728,4605,6.33,4606,4.455,4607,4.117,4608,4.117,4609,6.33,4610,4.117,4611,4.117]],["t/2021",[40,1.457,53,4.041,56,1.153,65,0.889,68,1.381,75,5.088,86,3.063,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,1.109,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,265,1.397,272,3.744,300,4.227,338,2.1,501,1.826,523,5.143,551,1.307,572,3.749,646,5.62,775,2.07,776,1.732,941,1.665,943,1.844,985,6.577,1153,5.088,1248,2.07,1459,4.983,2486,2.333,2648,3.312,3069,2.446,3130,6.944,3134,4.841,3135,1.901,3143,2.594,3164,8.667,3341,2.202,3358,2.515,3387,9.334,3388,8.725,3389,2.69,3390,2.69,3392,2.69,3393,2.69,3394,2.594,3395,2.69,3396,2.69,3397,2.69,3398,2.69,3399,2.69,3400,2.69,3401,2.69,3402,4.421,3403,2.69,3404,2.69,3405,2.69,3406,2.69,3407,2.69,3408,7.2,3409,2.69,3410,4.421,3411,2.69,3412,2.69,3413,2.69,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,4.421,3419,2.69,3420,2.594,3421,2.69,3422,2.69,3424,2.69,3425,2.69,3426,6.73,3427,2.69,3428,2.69,3429,2.69,3430,2.69,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,2.69,3439,2.69,3440,2.69,3441,2.69,3442,2.69,3443,2.69,3444,2.69,3445,2.69,3446,2.69,3447,2.286,3562,2.81,3563,2.81]],["t/2023",[0,0.736,3,3.423,37,2.377,45,4.682,66,4.718,90,3.254,107,2.53,133,3.041,137,4.647,157,1.827,186,3.712,196,4.312,233,5.624,291,3.369,354,3.939,379,4.367,436,5.698,943,6.408,1381,5.196,1408,4.873,3135,5.305,3341,6.146,3381,6.66]],["t/2025",[0,0.696,3,3.237,6,1.615,56,1.257,65,2.347,68,2.821,86,2.81,87,4.731,94,4.329,106,3.361,121,1.321,186,3.619,202,5.321,207,2.219,215,4.306,298,3.375,457,5.542,490,5.018,914,7.047,915,5.018,1069,4.242,3134,4.775,3135,5.018,3145,6.457]],["t/2027",[0,0.927,6,1.736,56,1.816,64,1.508,81,2.99,129,5.337,181,2.896,216,4.611,227,1.853,285,5.085,290,5.18,631,4.786,634,6.144,646,5.957,873,7.134,1713,9.447,3134,6.352]],["t/2029",[0,0.908,7,2.198,40,1.874,56,1.307,59,2.621,68,2.308,107,2.49,123,1.665,147,2.676,180,5.683,215,3.044,225,2.614,474,4.642,499,4.27,519,5.853,1020,3.836,1225,5.765,1232,6.717,1314,6.047,1372,5.165,1564,4.794,3134,4.967,3378,7.124,3379,7.124,3380,7.578]],["t/2031",[0,0.915,1,2.842,3,2.444,9,2.923,20,4.388,30,2.812,37,2.37,45,5.378,57,1.233,65,1.772,68,2.338,77,1.562,87,3.571,99,1.702,110,3.636,117,5.36,119,5.36,121,0.997,133,2.171,147,3.124,186,3.707,207,1.675,215,2.209,251,2.604,291,2.405,398,2.008,424,2.323,457,4.183,490,3.787,534,5.18,551,2.604,572,4.986,596,3.71,868,3.539,879,3.293,914,5.841,915,5.288,941,3.318,943,3.673,1015,4.388,1020,2.784,1209,3.27,2177,3.917,3134,5.032,3135,3.787,3381,4.755,3382,5.01,3558,10.306,3559,5.919]],["t/2033",[0,0.452,7,1.371,40,2.293,48,2.117,56,1.189,58,3.06,68,1.44,77,1.402,110,2.238,120,1.892,123,1.514,148,1.032,174,2.1,181,2.548,193,4.644,225,2.377,226,1.905,227,2.116,238,3.471,239,4.372,242,2.135,449,2.28,474,4.982,496,2.2,546,1.421,551,2.238,687,2.121,852,4.36,857,5.353,862,5.032,914,3.596,915,3.255,933,3.933,1026,3.544,1372,3.221,1564,6.48,3380,6.49,3386,6.717,3560,3.772,3561,4.607,4597,7.418]],["t/2035",[171,4.06,287,6.155,562,5.468,2168,5.845]],["t/2037",[0,0.741,7,1.263,37,1.344,40,2.206,48,1.951,59,2.244,68,1.976,77,1.577,110,2.062,121,1.176,123,1.426,148,0.951,150,5.011,174,1.935,181,2.867,186,1.547,202,2.502,225,2.238,226,1.755,227,2.28,238,3.905,242,1.967,300,4.646,449,2.1,474,4.75,546,1.309,551,2.062,587,2.589,686,3.545,857,5.146,914,3.313,915,2.999,917,4.372,922,6.084,933,4.903,1026,3.266,1372,5.285,3111,6.742,3134,6.314,3135,2.999,3145,3.86,3380,6.187,3560,3.475,3561,4.245,4600,8.956,4601,6.606,4602,6.606,4603,6.606,4604,6.324]],["t/2039",[0,0.813,1,1.892,3,1.627,6,0.812,7,1.062,9,2.303,37,2.151,40,1.968,48,1.64,53,2.893,57,1.275,59,1.266,65,1.18,66,2.243,68,2.123,77,1.911,85,1.826,99,1.759,106,1.689,110,1.734,121,1.031,123,1.249,147,1.293,148,0.799,150,2.827,174,1.627,181,2.102,186,3.544,194,2.495,202,2.103,215,1.471,225,1.961,226,1.476,227,2.299,238,2.863,242,1.654,300,3.79,379,3.224,380,2.549,402,3.31,411,1.748,449,2.742,457,2.785,474,3.483,490,2.522,507,4.099,546,1.101,551,3.301,587,2.177,686,2,857,3.405,879,4.174,914,4.325,915,2.522,917,3.546,922,4.461,933,3.978,1026,2.745,1069,2.131,1209,4.144,1372,3.875,2347,2.745,3111,5.469,3134,5.576,3135,2.522,3380,4.537,3382,5.18,3560,2.921,3679,2.708,4600,6.794,4601,3.728,4602,3.728,4603,3.728,4604,3.568,4607,3.941,4608,3.941,4609,6.12,4610,3.941,4611,3.941]],["t/2041",[40,1.457,53,4.041,56,1.153,65,0.889,68,1.381,75,5.088,86,3.063,107,1.49,121,0.822,125,4.589,137,1.665,157,0.655,168,1.397,186,0.981,188,1.791,197,1.376,206,2.208,215,1.109,216,1.313,219,1.761,231,0.889,245,4.33,251,3.498,265,1.397,272,3.744,300,4.227,338,2.1,501,1.826,523,5.143,551,1.307,572,3.749,646,5.62,775,2.07,776,1.732,941,1.665,943,1.844,985,6.577,1153,5.088,1248,2.07,1459,4.983,2486,2.333,2648,3.312,3069,2.446,3130,6.944,3134,4.841,3135,1.901,3143,2.594,3164,8.667,3341,2.202,3358,2.515,3387,9.334,3388,8.725,3389,2.69,3390,2.69,3392,2.69,3393,2.69,3394,2.594,3395,2.69,3396,2.69,3397,2.69,3398,2.69,3399,2.69,3400,2.69,3401,2.69,3402,4.421,3403,2.69,3404,2.69,3405,2.69,3406,2.69,3407,2.69,3408,7.2,3409,2.69,3410,4.421,3411,2.69,3412,2.69,3413,2.69,3414,2.69,3415,2.69,3416,2.69,3417,2.69,3418,4.421,3419,2.69,3420,2.594,3421,2.69,3422,2.69,3424,2.69,3425,2.69,3426,6.73,3427,2.69,3428,2.69,3429,2.69,3430,2.69,3431,2.69,3432,2.69,3433,2.69,3434,2.69,3435,2.69,3436,2.69,3437,2.69,3438,2.69,3439,2.69,3440,2.69,3441,2.69,3442,2.69,3443,2.69,3444,2.69,3445,2.69,3446,2.69,3447,2.286,3562,2.81,3563,2.81]],["t/2043",[0,0.719,3,3.341,37,2.32,45,4.57,66,4.605,87,4.882,90,3.176,107,2.47,133,2.968,137,4.536,157,1.784,186,3.672,196,4.209,233,5.489,291,3.288,354,3.845,379,4.263,436,5.561,915,6.508,943,6.312,1381,5.072,1408,4.756,3135,5.178,3341,5.999,3381,6.501]],["t/2045",[0,0.736,23,2.97,56,1.655,121,1.739,140,4.484,159,5.249,181,2.848,272,4.523,325,3.879,420,3.584,764,3.959,814,5.145,875,4.515,936,5.423,939,6.257,1016,5.624,1365,5.242,2355,7.507,2391,6.044,2484,7.017,2485,7.507,3710,7.842]],["t/2048",[0,0.839,231,2.829,272,4.139,354,4.49,375,4.335,764,4.513,1365,5.676,2381,5.183,2484,7.998,3710,8.939]],["t/2050",[0,0.712,3,2.797,7,0.908,9,1.817,16,2.231,31,0.89,36,0.856,37,0.385,40,2.21,48,0.559,53,0.635,56,1.286,58,0.364,68,0.693,74,1.963,77,0.637,90,0.528,91,0.668,94,0.584,99,1.194,106,1.049,107,0.41,120,0.343,121,0.997,122,1.687,127,1.756,153,2.441,163,0.991,171,0.54,174,1.715,180,3.362,181,2.84,184,0.947,185,0.667,190,1.943,197,0.623,215,2.019,225,1.08,231,1.009,235,2.034,238,1.145,239,1.887,242,1.414,272,0.589,282,2.97,286,1.123,288,1.59,291,0.546,298,0.579,316,3.572,318,0.667,325,2.531,354,1.973,365,0.579,367,0.811,369,1.034,402,0.727,407,1.62,474,4.061,498,0.996,509,0.759,512,1.566,518,1.08,519,1.756,546,1.16,547,1.409,551,1.077,630,0.759,631,0.617,633,2.506,660,4.576,683,2.059,684,1.836,686,0.682,687,0.384,694,1.015,695,4.616,696,4.162,706,3.499,712,1.068,714,0.98,726,1.174,727,3.712,755,0.98,759,0.713,779,1.015,788,1.174,793,0.86,842,1.138,868,0.804,886,1.08,913,0.86,926,1.056,933,3.139,935,0.87,938,1.08,941,0.753,984,1.344,1020,1.151,1043,1.601,1054,3.028,1060,0.912,1069,0.727,1200,0.924,1207,1.107,1225,1.73,1232,2.016,1314,1.815,1330,1.138,1362,2.217,1384,3.42,1495,0.879,1534,1.815,1561,1.056,1564,0.79,1727,1.217,1800,1.784,1840,1.015,2116,5.117,2381,0.737,2388,1.174,2391,3.028,2398,2.457,2399,1.217,2406,4.65,2424,1.107,2429,1.138,2461,3.627,2465,3.515,2467,2.448,2484,1.138,2508,3.052,2636,1.967,2725,4.214,2729,2.775,2731,1.344,2732,3.577,2751,5.409,2821,1.056,3133,1.534,3134,2.938,3136,2.217,3378,2.138,3379,2.138,3740,2.448,3783,1.344,3787,1.217,3789,1.217,4077,2.448,4181,1.272,4322,2.448,4612,1.455,4613,3.371,4614,5.222,4615,1.455,4616,1.455,4617,4.494,4618,1.455,4619,2.649,4620,1.455,4621,1.455,4622,1.455,4623,1.455,4624,1.455,4625,2.649,4626,2.649,4627,1.455,4628,3.647,4629,2.649,4630,1.455,4631,1.455,4632,1.344,4633,1.455,4634,1.455,4635,1.455,4636,1.455,4637,1.455,4638,1.455,4639,1.455,4640,1.455,4641,1.455,4642,1.344,4643,1.455,4644,4.494,4645,3.647,4646,3.647,4647,3.647,4648,7.721,4649,2.649,4650,2.649,4651,3.647,4652,7.331,4653,2.649,4654,2.649,4655,2.649,4656,2.649,4657,2.649,4658,2.649,4659,2.649,4660,2.649,4661,3.647,4662,2.649,4663,2.649,4664,2.649,4665,4.494,4666,4.494,4667,4.494,4668,1.455,4669,1.455,4670,5.853,4671,1.455,4672,1.455,4673,1.455,4674,1.455,4675,1.455,4676,1.455]],["t/2052",[0,0.868,3,3.528,6,0.828,7,1.083,16,4.081,36,1.577,40,2.289,42,2.189,48,1.673,53,1.9,77,0.759,85,1.862,89,1.826,90,1.577,91,1.097,99,1.786,121,1.646,127,2.883,171,2.495,174,1.659,181,2.135,185,3.768,190,1.88,216,1.776,242,2.607,282,3.161,287,2.447,288,0.773,322,3.309,325,2.907,365,1.73,396,2.519,411,0.936,414,1.381,456,2.494,512,2.571,551,1.768,653,3.801,660,1.784,683,1.715,695,2.6,696,3.092,712,1.753,749,2.571,757,2.692,776,2.342,842,3.402,918,3.856,926,3.156,933,3.294,935,2.6,936,6.045,995,3.309,1011,2.762,1138,2.692,1246,3.228,1467,3.402,1840,3.033,2381,3.408,2406,5.966,2485,3.639,2507,5.877,2508,5.626,2509,4.88,2732,2.979,3089,3.639,4222,4.019,4613,4.019,4632,7.596,4642,4.019,4677,8.22,4678,4.349,4679,4.349,4680,4.349,4681,4.349,4682,4.349,4683,4.349,4684,4.349,4685,4.349,4686,4.349,4687,4.349,4688,4.349,4689,4.349,4690,4.349,4691,4.349,4692,4.349,4693,4.349,4694,4.349,4695,4.349,4696,4.349,4697,4.349]],["t/2054",[6,2.334,8,3.181,30,4.004,56,1.351,148,1.709,170,4.873,181,2.896,212,3.905,227,2.604,235,2.896,251,3.708,331,6.047,394,2.282,504,4.158,509,4.76]],["t/2056",[0,0.703,9,1.707,40,1.019,56,1.607,62,2.911,64,0.995,77,1.495,100,3.141,123,1.615,133,2.04,147,1.825,148,1.604,160,4.338,209,2.699,216,2.458,225,3.212,226,3.755,227,2.421,231,1.665,291,2.26,311,3.356,364,2.859,447,3.051,543,4.857,559,4.279,699,3.522,717,3.077,732,3.051,733,3.486,764,2.656,918,3.451,1019,4.198,1034,3.681,1118,4.468,1504,4.279,1660,4.857,1840,4.198,1841,5.562,1842,5.562,1843,5.261,1844,5.562,1845,3.773,1846,4.708,1847,5.037,1848,4.58,1849,4.58,1850,4.369,1851,4.857,1852,3.991,1853,4.58,1854,5.037,1855,5.562,1856,8.039,1857,7.91,1858,9.205,1859,4.369]],["t/2058",[59,3.575,64,1.82,77,1.529,148,1.641,157,2.242,166,2.623,245,4.407,364,2.308,394,2.191,411,1.885,424,4.366,717,2.484,800,6.107,1138,5.421,1176,6.484,1201,6.849,3161,7.655,4698,8.092,4699,11.006,4700,8.757]],["t/2060",[59,3.523,64,1.784,77,1.482,148,1.59,246,6.638,281,2.108,364,2.236,394,2.124,411,1.827,424,4.529,546,2.19,668,3.957,717,2.407,1176,6.725,1188,6.848,1201,6.638,1575,7.418,3185,6.848,4506,7.101,4701,8.486,4702,10.79,4703,8.486,4704,8.486]],["t/2062",[59,3.714,64,1.677,77,1.347,148,1.445,157,2.066,231,2.806,281,1.915,364,2.032,394,1.93,411,1.66,424,4.748,546,1.99,547,2.978,717,2.187,761,5.194,1138,4.773,1176,7.051,1188,6.222,1201,7.933,3114,6.031,3185,6.222,4705,7.71,4706,10.142,4707,7.71,4708,7.71]],["t/2064",[0,0.523,56,0.943,59,1.891,64,1.473,77,1.112,83,4.581,120,2.1,148,1.193,157,1.297,166,1.908,188,4.433,200,3.795,282,2.449,351,4.1,364,1.678,394,1.594,411,1.371,594,4.847,628,3.85,667,4.159,697,4.222,714,6.919,717,1.806,764,2.81,893,3.459,918,6.379,944,4.363,1717,4.846,1733,4.29,1806,9.004,1881,6.212,2063,4.622,2064,7.998,2069,4.441,3756,5.567,4709,6.368,4710,6.368]],["t/2066",[9,2.172,13,3.592,64,1.266,77,1.337,91,3.147,121,2.108,123,1.445,125,3.086,148,1.435,181,2.431,202,3.776,227,1.556,229,3.086,357,3.635,364,2.018,394,1.916,398,2.401,414,2.431,660,3.141,717,2.172,1018,3.937,1019,5.34,4711,12.816,4712,7.657,4713,7.657,4714,7.657,4715,7.657,4716,6.179,4717,6.179]],["t/2068",[6,1.862,30,3.205,64,1.617,77,1.275,84,1.564,92,6.388,93,4.186,100,3.81,104,2.362,148,1.368,157,2.502,170,3.9,207,1.909,227,1.484,315,5.555,321,3.873,356,5.092,362,4.465,364,1.924,394,1.827,411,1.572,546,1.884,658,6.617,668,3.405,717,2.071,869,6.014,943,4.186,1438,6.381,1876,6.346,1877,6.746,3910,6.109,4718,9.78,4719,7.3,4720,6.746]],["t/2070",[0,0.814,57,1.434,58,1.864,59,2.212,64,1.639,77,1.301,148,1.858,157,2.519,166,2.232,206,4.143,207,1.948,242,2.889,364,1.963,394,1.864,411,2.134,512,4.405,546,2.558,594,3.515,668,3.474,717,2.113,1090,3.802,1100,5.53,1337,8.331,1666,4.731,1736,4.012,2411,5.296,3086,6.504,3106,6.511,3107,4.865,4721,6.884,4722,9.913,4723,7.449]],["t/2072",[64,1.647,77,1.31,120,2.347,148,1.405,157,1.528,166,2.247,188,4.037,200,3.195,227,1.524,231,3.092,282,2.884,300,3.105,364,1.977,394,1.877,411,1.615,475,4.483,546,1.936,622,2.92,666,5.808,717,2.127,913,4.435,1337,5.052,1881,6.945,2400,6.556,3086,6.519,3091,7.283,3327,5.444,3376,6.276,4724,6.931,4725,7.5]],["t/2074",[0,0.628,64,1.669,77,1.337,83,3.415,120,1.805,121,1.192,133,2.595,148,1.435,166,2.294,188,4.23,313,4.308,346,3.592,364,2.018,394,1.916,403,7.544,411,1.648,546,1.976,562,5.645,666,3.49,717,2.172,969,4.629,1717,5.826,3086,6.314,3091,7.632,3614,6.693,4726,6.407,4727,10.095,4728,7.657]],["t/2076",[0,0.856,4,3.571,6,1.532,8,2.088,64,1.725,77,1.822,86,2.665,87,4.488,148,1.509,181,2.556,189,2.683,238,3.481,243,3.776,252,3.845,364,2.122,394,2.015,398,3.628,402,4.024,411,2.246,684,4.052,717,2.283,735,5.515,832,4.76,833,6.297,916,4.952,917,4.556,2579,7.037,3679,5.112,4729,8.05,4730,8.05,4731,8.05,4732,8.05]],["t/2078",[0,0.681,58,2.075,64,1.758,77,1.448,83,3.699,104,2.684,148,1.554,157,1.689,166,2.485,227,1.685,312,3.02,364,2.186,394,2.075,411,1.785,547,3.203,717,2.352,820,7.016,1361,5.896,1617,6.693,1733,5.587,2064,7.571,2160,5.134,2486,6.02,3302,6.94,3697,6.94,4286,7.25,4698,7.664,4733,10.633,4734,8.293]],["t/2080",[64,1.896,77,1.634,120,2.205,148,1.753,200,3.985,282,3.598,364,2.465,394,2.341,411,2.014,717,2.653,893,5.081,1420,4.583,1881,7.997,2212,6.789,4735,12.926,4736,9.354]],["t/2082",[0,0.961,6,1.695,56,1.648,64,1.473,71,3.765,77,1.112,89,2.674,91,1.606,120,2.421,121,1.938,148,1.193,200,2.713,209,2.856,213,2.903,231,2.464,282,3.426,309,8.323,364,1.678,378,3.323,394,1.594,411,1.371,441,8.231,448,3.807,451,6.967,480,7.376,622,2.48,717,1.806,857,4.58,893,3.459,1697,4.622,3327,4.622,4737,11.707,4738,11.707,4739,6.368,4740,5.885,4741,11.124]],["t/2084",[64,1.63,77,1.722,148,1.847,364,2.598,394,2.467,411,2.122,449,4.082,715,4.445,717,2.796,890,5.31,946,5.308,3654,7.318,3692,9.11,4742,9.858]],["t/2086",[0,0.736,56,1.803,64,1.484,77,1.567,148,1.681,288,2.264,304,4.069,364,2.364,394,2.245,411,1.931,449,3.715,631,3.804,632,4.001,633,5.002,717,2.545,805,8.291,4364,7.842,4369,8.291,4743,8.971,4744,8.971]],["t/2088",[0,0.719,61,4.438,64,1.448,77,1.529,148,1.641,231,2.422,288,2.244,364,2.308,394,2.191,411,1.885,712,5.089,717,2.484,1736,5.929,3086,6.331,3087,8.171,3664,7.655,4745,8.757,4746,8.757,4747,8.757]],["t/2090",[64,1.496,77,1.58,121,1.748,148,1.695,364,2.384,394,2.264,398,2.836,411,1.947,684,6.148,717,2.566,917,4.906,1595,4.243,1684,5.745,1921,8.344,4748,9.045,4749,9.045,4750,9.045,4751,9.045]],["t/2092",[0,0.661,64,1.725,65,2.227,77,1.406,120,1.898,124,2.826,148,1.509,200,3.43,207,2.105,227,1.636,238,3.481,273,4.812,282,3.096,364,2.122,371,4.866,394,2.015,411,2.246,477,4.448,684,6.383,695,4.812,717,2.283,893,4.372,1219,4.572,1317,5.723,1685,5.112,1881,7.275,1921,7.558,3015,5.843,4752,8.05,4753,8.05,4754,8.05]],["t/2094",[0,0.661,5,3.649,40,1.767,59,2.391,64,1.331,77,1.406,122,4.345,124,2.826,148,1.509,170,4.301,229,3.244,239,4.859,364,2.749,365,3.202,394,2.015,398,2.524,402,4.024,447,4.08,496,1.701,497,4.08,509,4.201,717,2.283,1252,8.59,1564,6.649,3679,5.112,4179,7.439,4368,7.037,4755,8.05,4756,8.05]],["t/2096",[59,2.664,64,1.484,77,1.567,120,2.634,148,1.681,200,3.822,364,2.364,394,2.245,411,2.406,474,6.401,499,5.405,622,3.494,717,2.545,1564,6.919,4757,8.971,4758,11.174,4759,8.971]],["t/2098",[0,0.84,30,3.434,57,1.505,58,1.957,59,2.322,64,1.693,77,1.788,94,3.138,110,3.18,148,1.466,180,5.035,182,3.832,215,2.697,364,2.061,394,1.957,449,3.238,474,6.001,496,1.653,497,3.964,499,3.783,509,4.081,536,4.485,608,3.209,717,2.218,1018,4.021,1020,3.399,1049,5.56,1225,5.108,1372,4.576,1564,6.575,3668,7.227,4180,7.227,4760,7.82,4761,7.82,4762,7.82,4763,7.82]],["t/2100",[58,3.092,59,2.754,64,1.534,77,1.62,120,2.689,148,1.738,200,3.951,282,3.567,364,2.444,394,2.321,411,1.997,717,2.631,857,4.769,893,5.038,1564,7,4764,9.275]],["t/2102",[45,4.534,57,1.672,58,3.151,59,2.58,64,1.437,77,1.517,148,1.628,312,3.163,364,2.29,394,2.174,411,1.87,496,1.836,497,4.403,683,3.426,717,2.464,789,4.342,924,5.031,1564,7.051,4178,8.028,4181,7.594,4366,6.306,4765,8.687,4766,8.687]],["t/2104",[64,1.24,77,1.31,86,3.701,121,1.74,123,2.109,147,2.274,148,1.405,202,3.699,227,1.524,242,2.908,280,6.556,364,1.977,394,1.877,411,1.615,477,4.144,683,3.927,687,1.982,717,2.127,917,4.35,980,5.567,1109,5.332,1152,5.952,1219,4.26,1335,7.392,1353,6.931,1354,10.331,3795,6.931,3813,6.276,4007,11.005,4767,7.5,4768,7.5,4769,7.5,4770,7.5,4771,6.556,4772,7.5]],["t/2106",[0,0.702,5,3.877,64,1.414,77,1.894,93,4.904,123,1.613,148,1.603,227,1.738,364,2.858,374,6.159,394,2.14,449,3.541,717,2.426,890,4.606,1152,5.112,1219,4.857,1247,7.156,1248,5.506,1335,9.591,4773,11.907,4774,8.552,4775,8.552,4776,8.552]],["t/2108",[37,2.478,64,1.547,77,1.634,123,1.765,148,1.753,364,2.465,394,2.341,406,3.909,717,2.653,1219,5.313,1335,9.847,1351,8.644,1352,7.827,1355,8.644,4777,9.354,4778,9.354,4779,9.354]],["t/2110",[0,0.742,6,1.722,64,1.496,77,2.133,148,1.695,189,4.378,209,4.056,227,1.838,321,3.582,364,2.384,394,2.264,414,2.872,449,3.745,490,5.349,717,2.566,890,4.872,4780,9.045,4781,9.045,4782,9.045]],["t/2112",[0,0.584,16,4.77,64,1.589,77,1.678,120,2.265,121,1.107,148,1.333,186,2.169,189,4.182,200,3.03,206,5.089,227,1.953,286,3.015,320,4.79,321,2.816,364,1.874,365,2.828,368,4.118,390,4.501,394,1.78,404,4.349,411,1.531,622,2.769,711,4.205,717,2.017,857,4.941,1026,4.578,1666,4.516,1693,6.832,2064,6.656,2463,5.739,3274,6.571,4724,6.571,4783,7.111,4784,7.111,4785,7.111]],["t/2114",[64,1.448,77,1.529,148,1.641,186,2.671,364,2.308,394,2.191,398,2.746,402,4.377,411,1.885,496,2.544,685,5.976,715,3.948,717,2.484,852,6.859,862,5.489,864,5.806,917,3.825,3679,5.561,4786,8.757,4787,8.757,4788,8.757,4789,8.092]],["t/2116",[64,1.425,77,1.505,120,2.569,148,1.615,200,3.672,231,2.384,272,4.411,282,3.315,364,2.272,394,2.157,411,2.346,496,2.737,587,4.4,622,3.356,685,6.43,717,2.445,857,4.432,893,4.681,4092,7.965,4790,8.619]],["t/2118",[40,1.828,64,1.403,77,1.482,86,2.81,122,3.186,148,1.59,210,5.508,231,2.347,239,3.563,364,2.236,389,5.018,394,2.124,411,1.827,496,2.638,685,6.198,717,2.407,861,6.033,924,6.871,3075,5.716,3383,6.638,4365,6.299,4791,8.486,4792,7.101]],["t/2120",[40,1.819,64,1.393,77,1.471,148,1.578,296,5.034,364,2.219,394,2.107,411,1.813,496,2.631,683,4.91,685,6.181,695,5.034,717,2.388,924,6.847,2430,5.348,3991,7.782,4366,6.112,4793,10.737,4794,8.421,4795,8.421,4796,8.421]],["t/2122",[234,5.769,394,2.658,596,7.165,1412,6.575,2017,5.818,3753,8.888]],["t/2124",[0,0.843,5,2.887,9,1.806,40,1.509,56,1.521,57,1.226,58,1.594,59,2.645,64,1.053,65,1.762,77,1.112,103,3.349,106,2.522,121,1.386,122,3.857,123,1.201,124,3.126,142,3.807,148,1.193,181,2.022,201,3.765,207,1.665,229,2.566,239,4.313,251,2.589,364,2.347,365,3.543,394,1.594,398,2.793,399,3.895,402,3.183,405,4.29,411,1.371,447,3.228,474,3.349,499,4.968,628,3.85,686,4.819,717,1.806,751,3.583,879,3.274,1252,8.258,1423,7.816,1565,4.727,2626,4.222,3075,4.29,3679,4.044,4368,5.567,4797,6.368,4798,6.368,4799,6.368,4800,6.368]],["t/2126",[3,2.984,6,1.489,23,2.589,64,1.887,77,1.366,91,2.878,104,2.531,121,1.593,123,1.931,148,1.466,176,6.188,215,3.935,285,5.707,364,2.061,394,1.957,565,4.248,660,4.967,717,2.218,1381,4.529,1685,4.967,3467,9.46,3468,8.948,4801,7.82,4802,7.82,4803,7.82,4804,7.82,4805,7.82,4806,7.82,4807,7.82]],["t/2128",[57,2.317,64,1.448,77,1.529,120,2.064,148,1.641,200,3.731,364,2.308,394,2.191,411,1.885,430,5.294,496,1.85,497,4.438,622,3.41,717,2.484,857,5.659,893,4.756,1420,4.29,3988,11.67,3989,10.191,4808,8.757]],["t/2130",[0,1.008,1,3.598,9,3.482,23,3.47,64,1.341,77,1.416,78,3.782,148,1.52,227,2.13,256,4.65,290,4.606,300,3.358,364,2.137,394,2.029,411,1.746,546,3.168,670,5.766,674,4.232,712,4.68,717,2.3,2719,4.96,4537,7.494,4809,8.109,4810,8.109,4811,8.109,4812,8.109]],["t/2132",[0,0.646,6,1.958,64,1.303,77,2.12,130,7.545,148,1.476,153,5.586,227,1.601,273,4.708,364,2.076,394,1.971,408,4.609,411,1.696,449,3.261,518,5.847,660,3.232,717,2.234,755,7.714,3296,6.356,4813,12.14,4814,7.877,4815,10.284,4816,11.451,4817,7.877]],["t/2134",[64,1.857,77,1.58,114,5.137,148,1.695,188,3.807,231,2.502,232,4.218,251,4.567,364,2.384,368,5.239,394,2.264,411,1.947,717,2.566,1090,4.617,2719,5.532,3815,6.883,4818,9.045,4819,9.045,4820,9.045,4821,9.045,4822,9.045,4823,9.045]],["t/2136",[64,1.56,77,1.648,86,3.124,148,1.768,166,2.827,238,4.079,364,2.486,394,2.361,411,2.031,427,6.848,668,4.4,717,2.676,971,7.179,1876,6.705,3686,10.652,4824,8.718,4825,9.434]],["t/2138",[3,2.901,6,1.447,8,2.607,58,1.903,64,1.257,77,1.328,84,1.629,85,3.255,106,3.011,111,3.41,120,1.792,125,3.064,148,1.425,204,4.096,235,2.414,364,2.004,394,1.903,398,2.384,402,3.801,411,1.637,571,7.86,686,5.841,717,2.157,758,5.303,1818,10.467,3679,4.829,4153,5.948,4826,7.604,4827,7.604,4828,7.604,4829,7.604,4830,7.604,4831,7.604,4832,7.604,4833,7.604,4834,7.604,4835,7.604,4836,7.604,4837,7.604]],["t/2140",[64,1.382,77,1.459,102,3.201,120,3.024,123,1.577,148,1.566,200,3.56,364,2.202,394,2.091,411,1.799,479,4.149,490,4.941,509,4.361,622,3.254,686,6.156,688,6.978,717,2.37,751,6.012,857,4.297,893,4.539,1114,5.052,1674,5.828,2046,5.629,4838,8.356]],["t/2142",[56,1.329,64,1.484,77,1.567,124,3.149,148,1.681,193,4.001,227,1.823,239,4.693,364,2.364,394,2.245,411,1.931,686,6.148,717,2.545,751,5.048,1219,5.095,2395,7.017,3075,6.044,3927,7.842,4365,6.66,4839,8.971,4840,8.291]],["t/2144",[56,1.351,64,1.508,77,1.593,124,3.201,148,1.709,296,5.452,364,2.404,394,2.282,411,1.963,683,4.452,686,6.011,695,5.452,717,2.587,751,5.132,2430,5.792,2633,7.134,4366,6.62,4841,7.973,4842,9.121,4843,7.973]],["t/2146",[0,0.761,64,1.534,77,1.62,148,1.738,316,5.909,364,2.444,394,2.321,411,1.997,686,6.046,715,4.182,717,2.631,751,6.418,1379,7.485,1436,8.108,4844,9.275,4845,9.275,4846,9.275]],["t/2148",[64,1.361,77,1.437,102,3.153,120,2.91,123,1.553,148,1.543,200,3.507,364,2.169,394,2.06,479,4.087,490,4.867,509,4.296,686,5.991,688,8.536,717,2.335,751,5.954,857,5.441,893,4.471,895,6.888,1674,7.38,2046,5.545,4847,8.231]],["t/2150",[56,1.15,64,1.284,68,2.03,77,1.356,89,3.261,110,3.157,148,1.455,193,3.463,207,2.03,216,3.171,227,1.578,231,2.148,239,4.775,364,2.047,394,1.943,411,1.672,686,6.036,688,8.564,717,2.202,751,4.369,757,7.039,1219,4.41,1674,7.106,2395,6.074,3075,5.231,3927,6.788,4365,5.764,4840,7.176,4848,7.765]],["t/2152",[64,1.508,77,1.593,148,1.709,364,2.404,394,2.282,411,1.963,494,4.724,565,4.954,686,6.011,688,8.601,717,2.587,999,6.94,1419,7.632,4849,9.121,4850,11.289,4851,9.121]],["t/2154",[64,1.484,77,1.567,148,1.681,296,5.363,364,2.364,394,2.245,411,1.931,683,4.407,686,5.71,688,8.32,695,5.363,717,2.545,751,5.048,1674,6.257,2430,5.698,3790,7.842,4366,6.512,4841,7.842,4843,7.842,4852,8.971]],["t/2156",[56,1.267,64,1.414,77,1.493,148,1.603,153,6.467,215,2.949,364,2.254,394,2.14,411,1.841,494,4.43,660,3.509,686,5.586,688,8.177,717,2.426,751,6.699,811,10.945,4853,8.552,4854,10.843,4855,8.552]],["t/2158",[3,2.695,4,3.135,6,1.345,56,1.046,64,1.168,77,1.234,84,2.05,92,4.092,121,1.1,148,1.324,157,2.551,165,4.223,185,3.239,207,1.847,227,1.436,284,3.396,313,3.975,364,1.862,394,1.768,411,1.521,523,4.223,548,4.542,558,4.549,585,3.606,593,4.487,717,2.004,750,4.321,764,3.118,832,4.178,943,4.052,1196,7.11,1755,6.529,3308,8.363,4292,10.024,4856,12.523,4857,7.065,4858,7.065,4859,7.065,4860,7.065,4861,7.065,4862,7.065]],["t/2160",[0,0.746,6,1.248,47,3.624,64,1.085,68,1.715,77,1.145,84,1.948,104,2.122,121,1.624,148,1.704,157,1.336,165,6.735,169,2.543,216,2.679,229,2.643,231,2.515,248,6.237,281,1.629,347,4.76,364,1.728,394,1.641,411,1.412,424,4.714,546,2.693,548,3.114,594,3.095,717,1.86,787,4.348,1133,4.348,1176,6.374,1181,4.06,1196,6.382,1198,5.733,1199,4.222,1200,4.165,1201,7.111,3114,5.13,4863,6.558,4864,9.091,4865,6.558,4866,5.733,4867,5.733]],["t/2162",[0,0.681,47,4.583,64,1.372,68,2.169,77,1.448,84,1.777,104,2.684,121,1.291,148,1.554,157,1.689,165,4.957,169,3.216,347,6.02,364,2.186,394,2.075,411,1.785,424,3.008,546,2.744,547,3.203,717,2.352,1177,4.063,1196,7.178,1209,4.233,1845,7.76,4868,8.293,4869,10.633,4870,8.293,4871,7.25,4872,7.25]],["t/2164",[0,0.792,2,3.283,3,2.731,4,3.175,6,1.837,23,2.37,37,1.896,56,1.06,57,1.378,58,1.791,59,2.125,64,1.184,77,1.25,92,5.59,93,4.104,94,2.872,120,2.275,123,1.35,148,1.341,186,2.183,207,1.872,215,2.468,227,2.219,364,1.886,394,1.791,477,3.955,492,1.791,507,4.43,548,4.582,593,4.546,717,2.03,732,5.923,733,4.145,764,3.159,820,4.278,858,5.776,943,4.104,1083,4.188,1178,4.43,1209,3.654,3133,4.145,4151,5.776,4873,7.157,4874,7.157,4875,7.157,4876,7.157]],["t/2166",[64,1.56,77,1.648,107,2.661,120,2.224,121,1.468,148,1.768,200,4.019,364,2.486,394,2.361,411,2.031,548,4.479,622,3.674,717,2.676,732,6.309,857,5.927,893,5.124,4877,9.434]],["t/2168",[64,1.437,77,1.517,99,2.308,104,2.811,148,1.628,157,1.769,288,1.946,364,2.29,394,2.174,411,1.87,537,2.55,608,3.564,717,2.464,732,6.079,966,4.028,1016,7.893,1018,4.467,1020,3.775,1025,4.313,1225,5.674,4878,8.687,4879,8.687,4880,8.687,4881,8.687]],["t/2170",[77,1.662,83,4.244,120,2.731,121,1.481,148,1.783,364,2.508,394,2.381,411,2.049,548,4.518,622,3.706,717,2.699,732,5.873,857,4.893,4153,9.773,4882,9.516]],["t/2172",[64,1.534,77,1.62,148,1.738,239,3.895,272,3.754,364,2.444,394,2.321,411,1.997,548,4.403,717,2.631,732,6.261,861,6.594,4153,10.081,4365,6.885,4883,9.275,4884,9.275,4885,9.275]],["t/2174",[64,1.496,77,1.58,148,1.695,272,3.661,296,5.407,364,2.384,394,2.264,411,1.947,548,4.295,683,4.429,717,2.566,732,6.192,2430,5.745,4153,9.993,4366,6.565,4886,9.045,4887,9.045,4888,9.045,4889,9.045]],["t/2176",[0,0.752,6,1.745,56,0.983,57,1.278,58,1.661,64,1.098,77,1.159,102,3.512,120,2.161,121,1.033,123,1.981,148,1.244,200,4.474,202,3.274,207,1.736,227,1.349,229,3.694,238,2.87,258,3.132,313,3.735,364,1.749,394,1.661,411,2.261,492,1.661,557,4.335,632,4.684,633,3.701,713,6.559,714,6.175,715,4.133,716,9.123,727,4.719,925,5.192,1062,5.357,1206,4.719,1361,4.719,1365,3.114,1674,4.629,1693,4.719,1917,5.192,2609,4.719,3828,8.013,3829,6.134,4890,6.638,4891,6.638]],["t/2178",[37,2.149,64,1.733,77,1.416,106,4.151,121,1.262,122,3.045,123,1.977,125,4.224,142,4.848,148,1.52,170,4.333,364,2.137,394,2.029,398,2.543,402,4.054,456,4.65,717,2.3,933,5.135,1208,3.973,1310,4.697,2167,7.955,2406,8.429,3679,5.15,3806,7.494,3807,7.089,4892,8.109,4893,8.109,4894,8.109,4895,8.109,4896,8.109]],["t/2180",[0,0.416,1,4.007,3,3.446,4,4.44,5,4.094,6,2.479,7,1.263,45,5.585,64,0.839,74,2.216,77,1.32,78,3.524,87,5.58,90,2.741,94,2.035,100,2.647,104,1.642,120,1.196,148,1.416,184,1.813,189,1.691,215,2.606,227,1.031,229,2.044,251,2.062,300,2.1,321,2.009,338,4.936,364,1.337,394,1.269,399,3.102,411,1.627,412,4.517,414,1.61,442,6.555,490,2.999,494,2.628,546,1.95,548,2.408,679,2.968,717,1.439,721,4.434,748,2.881,830,3.682,831,2.647,833,3.968,872,2.628,913,2.999,914,4.936,915,2.999,954,3.066,1027,3.682,1495,3.066,2393,5.373,3016,7.289,3108,7.559,3121,4.245,3123,4.094,3124,4.434,3125,4.434,3127,7.828,3560,3.475,4897,5.073,4898,5.073,4899,5.073,4900,7.557,4901,5.073]],["t/2182",[0,0.713,6,2.471,64,1.437,77,1.913,90,3.151,91,2.762,148,1.628,189,2.895,227,1.765,236,5.137,238,3.756,252,4.15,273,5.193,364,2.29,394,2.174,411,2.358,414,2.758,546,2.242,717,2.464,4902,8.687,4903,8.687,4904,8.687,4905,8.687]],["t/2184",[8,3.322,9,3.82,16,3.508,56,1.046,64,1.168,77,2.187,99,1.877,110,2.873,121,1.891,123,1.333,148,1.324,195,4.321,227,1.436,231,1.954,235,2.243,286,4.056,288,1.256,304,2.572,364,1.862,394,1.768,409,5.526,411,2.06,546,1.823,593,4.487,637,4.429,717,2.004,890,3.806,1074,5.526,1152,4.223,1883,5.912,1885,6.529,4906,7.065]],["t/2186",[64,1.574,77,1.662,120,2.243,148,1.783,200,4.054,238,5.623,282,3.66,364,2.508,378,4.966,394,2.381,411,2.049,717,2.699,893,5.169,1881,8.082,4907,9.516]],["t/2188",[0,0.646,6,1.958,40,1.742,64,1.303,77,1.376,121,1.601,123,1.486,124,3.61,148,1.476,210,5.25,231,2.179,238,5.446,239,4.319,251,3.203,364,2.076,378,4.111,394,1.971,411,1.696,461,6.621,492,1.971,713,4.562,715,3.551,717,2.234,922,5.306,924,5.956,3075,5.306,3383,6.161,4365,5.847,4792,6.591,4908,7.877,4909,7.877]],["t/2190",[0,0.691,6,2.25,56,1.247,64,1.393,66,4.428,68,2.202,77,1.471,81,2.761,121,1.311,123,1.589,148,1.578,210,6.355,227,1.711,238,5.383,364,2.219,378,4.395,394,2.107,411,1.813,717,2.388,861,5.987,924,4.877,925,6.587,4910,8.421,4911,8.421,4912,8.421,4913,8.421]],["t/2192",[40,1.846,64,1.425,77,1.505,148,1.615,238,5.429,296,5.152,364,2.272,394,2.157,411,1.856,683,4.952,695,5.152,696,6.128,717,2.445,924,6.921,2430,5.474,2732,5.905,4366,6.256,4914,10.897,4915,8.619,4916,8.619,4917,8.619]],["t/2194",[8,2.104,64,1.341,77,2.028,79,5.083,148,1.964,153,4.405,202,3.999,212,3.472,231,2.243,235,2.575,241,4.521,364,2.137,394,2.029,411,1.746,414,2.575,471,4.697,546,2.093,595,6.544,660,3.327,717,2.3,931,4.298,954,4.902,1182,5.221,1595,3.804,3205,7.955,3654,7.78,3674,6.343,3702,7.494,3703,7.494,4918,8.109,4919,8.109,4920,8.109,4921,8.109]],["t/2196",[6,1.579,64,1.372,77,1.448,86,2.746,120,2.506,125,4.989,139,5.34,148,1.554,200,3.533,222,8.634,325,3.586,364,2.186,386,6.311,394,2.075,411,1.785,437,6.487,516,5.896,622,3.229,638,6.693,717,2.352,857,5.467,893,4.505,944,5.682,1845,7.357,3334,6.311,4922,8.293]],["t/2198",[64,1.425,77,1.505,84,1.847,120,2.032,148,1.615,200,3.672,288,1.532,364,2.272,394,2.157,411,1.856,482,7.586,622,3.356,673,4.643,712,3.473,717,2.445,857,5.603,3618,7.534,3987,11.968,4572,7.965,4923,8.619,4924,8.619]],["t/2200",[0,0.74,6,1.974,8,1.681,42,3.262,64,1.072,77,1.132,86,4.225,106,2.567,114,3.681,120,2.125,121,1.009,125,4.179,130,3.717,139,4.173,148,1.215,181,2.058,195,3.964,200,3.841,216,2.647,220,5.069,227,1.317,229,2.612,238,2.802,282,2.493,300,3.733,318,2.971,337,4.297,364,1.708,367,3.613,389,7.4,394,1.622,404,3.964,411,1.395,494,3.357,666,5.561,717,1.838,870,6.289,893,3.52,1196,3.964,1361,4.608,1876,3.491,1881,6.289,2870,4.704,3808,5.989,4925,6.481]],["t/2202",[64,1.425,77,1.505,86,4.157,121,1.342,148,1.615,238,3.727,318,3.951,364,2.272,389,7.425,394,2.157,411,1.856,427,6.256,547,3.329,717,2.445,870,6.011,1110,6.742,1138,5.335,1876,6.437,4415,7.965,4926,7.965,4927,10.897,4928,8.619]],["t/2204",[64,1.521,77,1.606,90,3.336,148,1.724,165,5.498,188,4.356,340,6.998,364,2.424,394,2.302,411,1.98,717,2.609,775,5.921,2873,6.827,4929,12.307,4930,9.197,4931,11.348,4932,9.197]],["t/2206",[56,1.329,64,1.484,77,1.567,81,4.296,86,2.97,123,2.108,125,4.503,148,1.681,157,2.276,166,2.688,364,2.364,390,3.317,394,2.245,717,2.545,1092,7.017,4933,8.971,4934,8.971,4935,8.971,4936,8.971]],["t/2208",[0,0.616,3,2.861,6,1.428,64,1.24,77,1.31,84,1.607,86,2.483,104,2.427,120,2.635,148,1.405,181,2.381,200,3.195,209,3.363,232,3.498,364,1.977,365,2.983,394,1.877,411,1.615,430,6.758,447,3.801,482,4.301,622,2.92,674,3.914,717,2.127,857,5.12,893,4.073,1072,5.866,1084,4.04,1090,5.083,1502,7.793,1503,7.104,1647,6.276,1648,5.332,4937,7.5]],["t/2210",[0,0.584,58,2.917,64,1.176,65,1.967,77,1.242,82,4.251,84,2.059,122,2.67,139,7.007,148,1.333,151,4.001,227,1.445,231,2.658,273,4.251,323,4.871,356,4.96,364,1.874,394,1.78,411,1.531,424,4.551,471,4.118,492,1.78,546,1.835,547,3.711,570,5.739,585,3.63,666,4.961,675,4.578,717,2.017,833,5.562,1084,3.83,1648,5.056,2780,7.754,2870,5.161,4492,6.571,4938,7.111,4939,9.609,4940,7.111,4941,8.399,4942,7.111]],["t/2212",[0,0.542,13,4.283,45,4.764,57,1.27,58,3.147,59,3.354,64,1.091,77,1.152,95,3.152,96,2.943,98,3.344,118,5.521,120,2.152,123,1.245,148,1.236,192,4.602,227,2.296,229,2.659,232,3.077,256,3.784,357,3.132,364,1.739,394,1.651,398,2.069,402,3.298,411,1.42,414,2.095,491,4.789,496,2.657,505,4.084,660,3.746,717,1.871,732,3.344,1675,5.021,1771,5.962,2167,6.254,2719,4.035,3679,4.19,4132,5.521,4716,5.324,4717,5.324,4943,6.097,4944,6.097,4945,6.097,4946,6.598,4947,6.097]],["t/2214",[0,0.637,57,1.961,58,3.22,59,3.585,64,1.284,77,1.356,120,2.402,148,1.455,207,2.03,272,3.143,364,2.047,394,1.943,398,2.435,402,3.881,492,3.137,496,2.649,499,5.5,717,2.202,1765,5.636,3679,4.932,4948,7.176,4949,7.176,4950,7.176,4951,7.765,4952,7.176]],["t/2216",[57,1.699,58,3.17,59,2.621,64,1.46,77,1.932,148,1.654,364,2.326,394,2.209,496,2.553,499,6.126,717,2.504,890,4.755,1916,8.833,4953,8.157,4954,8.827,4955,8.157]],["t/2218",[57,1.727,58,3.188,64,1.484,77,1.567,120,2.115,148,1.681,200,3.822,272,3.632,364,2.364,394,2.245,496,2.692,499,6.162,717,2.545,857,5.746,893,4.873,4956,8.971]],["t/2220",[0,0.651,9,2.25,57,1.527,58,3.046,64,1.312,77,1.385,110,3.226,148,1.487,364,2.091,394,1.985,411,1.708,443,5.64,474,6.402,496,2.572,499,5.888,546,2.048,717,2.25,954,4.796,3662,6.935,4032,8.647,4033,6.639,4034,6.639,4035,6.639,4036,6.639,4037,6.639,4957,7.332,4958,7.332,4959,7.933,4960,7.332]],["t/2222",[0,0.661,9,3.472,57,1.55,58,3.063,64,1.331,77,1.822,148,1.509,181,3.886,241,4.488,364,2.122,394,2.015,474,6.669,496,2.587,499,5.921,717,2.283,890,4.336,2775,6.496,2865,7.037,4961,8.05,4962,7.439]],["t/2224",[0,0.899,1,2.383,5,2.435,26,3.285,40,1.335,56,1.383,57,1.034,58,2.867,64,1.304,65,2.181,68,1.404,74,2.346,77,0.938,78,2.505,104,1.738,121,1.454,124,1.885,148,1.006,157,1.094,161,1.79,174,2.049,186,1.638,201,4.661,207,1.404,208,3.458,215,2.719,229,2.164,231,1.486,364,2.078,365,2.136,394,1.344,398,3.226,402,2.684,411,1.156,420,2.145,447,2.722,496,2.316,546,1.386,572,2.994,715,2.421,717,1.523,764,2.37,779,6.514,852,6.222,862,3.366,864,7.849,917,2.346,1310,5.96,1381,3.11,1399,5.852,2177,5.712,3679,3.411,4789,4.963,4963,5.371,4964,5.371,4965,5.371,4966,6.362,4967,5.371,4968,5.371,4969,5.371,4970,5.371,4971,5.371]],["t/2226",[57,1.756,58,3.207,64,1.508,77,1.593,120,2.15,148,1.709,200,3.886,272,3.692,364,2.404,394,2.282,411,1.963,496,2.708,622,3.552,717,2.587,720,7.973,857,5.805,893,4.954]],["t/2228",[0,0.616,5,3.4,40,1.27,57,1.444,58,3.102,64,1.24,77,1.31,86,3.701,121,1.55,122,2.816,148,1.405,209,3.363,210,3.828,216,3.063,231,2.755,239,4.182,296,5.952,364,2.624,389,5.888,394,1.877,411,1.615,496,2.517,717,2.127,861,7.08,924,5.767,1666,4.763,2141,5.231,3075,5.052,3383,5.866,3940,6.556,4365,5.567,4792,6.276,4972,7.5]],["t/2230",[57,1.584,58,3.089,64,1.361,77,1.437,86,3.504,122,3.091,148,1.543,166,2.466,351,5.299,364,2.169,386,6.263,394,2.06,411,1.772,436,7.428,479,4.087,496,2.609,666,3.752,668,3.839,717,2.335,1092,6.438,1876,6.3,4771,7.195,4973,7.607,4974,9.779,4975,8.231]],["t/2232",[56,1.158,57,1.505,58,3.03,59,2.322,64,1.293,65,3.476,77,1.366,148,1.466,182,5.931,201,4.624,356,5.454,362,4.783,364,2.061,394,1.957,411,1.684,496,2.411,546,2.018,668,3.647,717,2.218,744,4.021,874,4.081,1658,6.311,1876,6.147,3908,6.544,3916,6.544,4976,7.82,4977,10.236,4978,7.82,4979,7.82]],["t/2234",[36,1.96,58,3.107,64,1.382,65,2.956,77,1.459,122,3.138,123,1.577,148,1.566,166,2.504,364,2.202,394,2.091,411,1.799,496,2.489,666,4.871,668,3.897,717,2.37,1478,9.447,1876,6.345,4117,6.993,4726,6.993,4980,10.685,4981,8.356]],["t/2236",[40,1.46,57,1.659,58,3.142,64,1.425,77,1.505,148,1.615,296,5.152,364,2.272,394,2.157,411,1.856,496,2.653,683,4.713,695,5.152,717,2.445,924,6.311,1534,5.905,2430,5.474,4366,6.256,4982,8.619,4983,8.619,4984,8.619,4985,8.619]],["t/2238",[0,0.633,58,3.013,64,1.275,77,1.347,86,2.553,120,2.671,130,4.422,148,1.445,200,3.285,207,2.016,215,4.428,227,1.567,364,2.032,374,4.379,377,6.485,394,1.93,411,1.66,496,2.544,499,3.729,622,3.003,717,2.187,857,5.215,893,4.188,1238,5.867,1247,10.075,4986,7.71]],["t/2240",[57,1.434,58,3.182,64,1.232,77,1.731,120,2.337,123,1.405,143,4.272,148,1.396,200,3.173,207,1.948,215,4.386,272,3.015,364,1.963,377,6.85,394,1.864,411,1.604,496,2.687,499,3.603,622,2.901,717,2.113,857,5.097,893,4.046,1238,8.478,1247,6.233,4039,6.511,4987,7.449]],["t/2242",[13,3.567,58,3.116,64,1.257,77,1.328,102,2.913,148,1.425,227,1.545,229,3.064,357,3.61,364,2.004,377,6.89,394,1.903,398,2.384,402,3.801,414,2.414,496,2.631,660,3.12,717,2.157,1242,11.181,1246,8.355,3679,4.829,4716,6.136,4717,6.136,4988,7.604,4989,7.604,4990,7.604,4991,7.604,4992,7.604]],["t/2244",[57,1.633,58,3.226,64,1.403,77,1.482,120,2.797,148,1.59,200,3.615,207,2.219,272,3.435,364,2.236,377,6.725,394,2.124,411,1.827,496,2.724,622,3.304,717,2.407,857,5.548,893,4.609,4993,8.486]],["t/2246",[8,2.168,9,2.37,58,2.948,61,4.235,64,1.382,77,1.866,148,1.566,215,2.882,235,2.653,306,5.941,313,4.702,364,2.202,374,4.746,377,6.345,380,7.421,394,2.091,496,2.489,499,4.042,717,2.37,890,4.501,1897,7.722,1898,6.065,4994,8.356,4995,8.356,4996,8.356]],["t/2248",[58,2.991,64,1.425,77,1.903,148,1.615,235,2.736,364,2.272,377,6.437,380,7.506,394,2.157,449,3.569,496,2.525,717,2.445,879,6.456,890,4.643,1245,6.742,1899,7.965,1901,7.965,4997,8.619]],["t/2250",[0,0.887,58,2.902,61,3.558,64,1.161,77,1.663,120,2.245,143,6.2,148,1.316,181,2.229,207,1.836,215,4.311,223,3.485,227,1.427,235,2.229,364,1.85,374,5.41,377,6.245,394,1.757,449,2.907,468,4.809,496,2.45,499,4.607,537,2.06,660,2.88,717,1.991,890,3.781,1152,4.196,1222,6.136,1225,4.585,1227,4.991,1228,6.136,1229,5.874,1238,5.342,4998,7.02,4999,7.02,5000,7.02,5001,7.02,5002,7.02]],["t/2252",[13,3.567,58,3.116,64,1.257,77,1.328,102,2.913,104,2.461,148,1.425,227,1.545,229,3.064,316,5.83,357,3.61,364,2.004,377,6.89,394,1.903,398,3.151,402,3.801,411,1.637,414,2.414,496,2.631,660,3.12,717,2.157,1244,7.027,3679,4.829,4716,6.136,4717,6.136,5003,7.604,5004,7.604,5005,7.604,5006,7.604,5007,7.604,5008,7.604,5009,7.604]],["t/2254",[0,0.782,56,1.04,58,2.706,64,1.161,77,1.226,90,2.546,110,2.854,123,1.324,148,1.316,157,2.202,166,2.103,188,4.109,189,2.34,209,3.148,227,1.427,231,2.635,321,2.78,364,1.85,365,2.792,394,1.757,411,2.051,423,4.107,430,4.244,546,1.812,547,2.711,549,3.914,666,4.342,667,4.585,668,3.274,717,1.991,958,5.491,1043,5.758,1084,3.781,1361,4.991,1383,5.342,1876,5.824,2069,6.643,4720,6.487,5010,6.487,5011,9.525,5012,7.02,5013,6.487,5014,6.487]],["t/2256",[58,2.906,64,1.341,77,1.416,148,1.52,157,1.652,166,2.43,227,1.648,231,2.243,232,5.416,323,5.556,356,5.656,364,2.137,394,2.029,411,1.746,488,6.061,492,2.029,546,2.093,547,4.048,585,4.14,666,3.697,668,3.782,717,2.3,1133,5.377,1876,6.255,2926,5.463,3985,6.544,5010,7.494,5015,10.481,5016,8.109]],["t/2258",[36,1.945,47,4.583,58,3.098,64,1.372,77,1.448,84,2.278,148,1.554,159,4.853,170,4.431,201,4.904,219,4.543,227,1.685,231,2.294,364,2.186,394,2.075,411,1.785,547,3.203,593,5.267,668,3.868,717,2.352,869,5.991,1179,5.267,1209,4.233,1583,5.417,4941,7.25,5017,8.293,5018,10.633,5019,8.293,5020,8.293]],["t/2260",[0,0.545,13,4.3,45,4.784,58,3.076,59,3.363,64,1.098,77,1.159,95,3.171,96,2.961,98,3.364,118,5.555,120,2.161,123,1.252,148,1.244,192,4.629,227,2.415,229,2.675,232,3.096,256,3.806,357,3.151,364,1.749,394,1.661,398,2.081,402,3.318,411,1.429,414,2.107,491,4.818,497,3.364,505,4.109,660,3.761,687,3.248,717,1.883,732,3.364,1675,5.051,1771,5.987,2167,6.28,2719,4.06,3679,4.216,4132,5.555,4716,5.357,4717,5.357,4943,6.134,4944,6.134,4945,6.134,4947,6.134,5021,6.638]],["t/2262",[0,0.637,57,1.961,58,3.22,59,3.585,64,1.284,77,1.356,120,2.402,148,1.455,207,2.03,272,3.143,364,2.047,394,1.943,398,2.435,402,3.881,492,3.137,497,3.936,499,5.5,687,3.19,717,2.202,1765,5.636,3679,4.932,4948,7.176,4949,7.176,4950,7.176,4952,7.176,5022,7.765]],["t/2264",[57,1.686,58,3.16,59,2.6,64,1.448,77,1.922,148,1.641,364,2.308,394,2.191,449,3.626,499,6.108,687,3.181,717,2.484,890,4.717,1916,8.808,4953,8.092,4955,8.092,5023,8.757]],["t/2266",[0,0.637,57,1.495,58,3.021,64,1.284,65,2.148,77,1.356,81,2.546,102,3.903,120,1.83,148,1.455,200,3.308,207,2.03,242,3.011,272,3.143,364,2.047,391,6.798,394,1.943,408,4.543,473,5.072,477,4.291,497,5.164,499,6.342,687,3.005,717,2.202,779,5.416,857,5.239,893,4.218,1965,2.397,5024,7.765]],["t/2268",[0,0.651,9,2.25,57,1.527,58,3.046,64,1.312,77,1.385,110,3.226,148,1.487,364,2.091,394,1.985,411,1.708,443,5.64,474,6.402,497,4.021,499,5.888,546,2.048,687,3.037,717,2.25,954,4.796,3662,6.935,4032,8.647,4033,6.639,4034,6.639,4035,6.639,4036,6.639,4037,6.639,4957,7.332,4958,7.332,4960,7.332,5025,7.933]],["t/2270",[0,0.661,9,3.472,57,1.55,58,3.063,64,1.331,77,1.822,148,1.509,181,3.886,241,4.488,364,2.122,394,2.015,474,6.669,497,4.08,499,5.921,687,3.058,717,2.283,890,4.336,2775,6.496,2865,7.037,4962,7.439,5026,8.05]],["t/2272",[57,1.756,58,3.207,64,1.508,77,1.593,120,2.15,148,1.709,200,3.886,272,3.692,364,2.404,394,2.282,411,1.963,497,4.623,622,3.552,687,3.24,717,2.587,857,5.805,893,4.954,5027,9.121]],["t/2274",[40,1.46,57,1.659,58,3.142,64,1.425,77,1.505,86,2.854,122,3.236,148,1.615,210,4.4,231,2.384,239,3.619,364,2.272,389,5.097,394,2.157,411,1.856,497,4.368,687,3.158,717,2.445,861,6.128,924,6.311,3075,5.806,3383,6.742,4365,6.398,4792,7.213,5028,8.619]],["t/2276",[57,1.584,58,3.089,64,1.361,77,1.437,86,3.504,122,3.091,148,1.543,166,2.466,351,5.299,364,2.169,386,6.263,394,2.06,411,1.772,436,7.428,479,4.087,497,4.172,666,3.752,668,3.839,687,3.09,717,2.335,1092,6.438,1876,6.3,4771,7.195,4973,7.607,4974,9.779,5029,8.231]],["t/2278",[36,1.931,57,1.584,58,3.089,64,1.361,77,1.437,148,1.543,364,2.169,394,2.06,411,1.772,497,5.363,608,3.377,666,3.752,668,3.839,687,3.09,717,2.335,744,4.232,1876,6.3,3149,11.408,3695,6.438,3916,6.888,4726,6.888,5030,10.582,5031,8.231,5032,8.231,5033,8.231]],["t/2280",[40,1.46,57,1.659,58,3.142,64,1.425,77,1.505,148,1.615,296,5.152,364,2.272,394,2.157,411,1.856,497,4.368,683,4.713,687,3.158,695,5.152,717,2.445,924,6.311,2430,5.474,3789,7.213,4366,6.256,4841,7.534,4843,7.534,5034,8.619,5035,8.619]],["t/2282",[0,0.864,8,2.732,9,2.987,16,6.325,64,1.742,74,3.569,77,2.035,121,1.272,123,1.541,148,1.531,256,6.039,364,2.153,394,2.045,411,1.759,660,3.352,717,2.317,1074,8.237,1200,5.189,1825,5.597,1826,7.55,5036,8.17,5037,8.17,5038,8.17,5039,8.17,5040,8.17,5041,8.17]],["t/2284",[57,1.659,64,1.425,77,1.903,86,2.854,121,2.059,148,1.615,235,2.736,364,2.272,394,2.157,411,1.856,717,2.445,793,7.658,890,4.643,3823,10.976,5042,8.619,5043,8.619,5044,8.619,5045,8.619]],["t/2286",[0,0.681,33,7.862,57,1.596,58,2.075,64,1.372,77,1.448,84,1.777,120,1.955,148,1.554,200,3.533,219,4.543,364,2.186,394,2.075,411,1.785,622,3.229,717,2.352,869,5.991,893,4.505,1184,5.267,1881,7.416,3116,7.25,3117,9.99,3305,7.664,4325,10.26,5046,8.293]],["t/2288",[6,1.532,36,1.888,42,4.052,64,1.725,77,1.406,81,2.639,92,4.662,107,2.271,120,1.898,125,4.204,148,1.509,165,4.812,166,2.412,168,3.498,170,4.301,227,1.636,231,2.227,251,3.273,300,5.251,364,2.122,394,2.015,411,1.733,717,2.283,793,4.76,874,4.201,943,4.616,1196,7.077,3564,7.439,4824,7.439,5047,10.431,5048,8.05]],["t/2290",[0,0.904,3,2.778,4,3.23,6,2.24,8,1.252,56,1.078,64,0.798,68,1.904,77,1.531,78,2.251,86,1.598,95,2.306,96,2.153,97,1.199,102,2.789,121,1.365,123,1.374,124,1.694,148,0.905,163,1.805,189,2.427,204,3.922,206,3.043,213,2.2,215,1.665,227,1.782,229,1.945,281,1.199,288,1.294,300,5.468,320,3.252,364,1.272,365,2.896,394,1.208,404,6.736,411,2.102,452,2.824,457,3.153,492,1.822,494,3.772,501,4.135,572,2.691,660,1.98,671,2.667,679,2.824,717,1.369,789,2.413,871,4.22,872,5.427,937,3.108,1097,3.776,1148,3.896,1199,3.108,1337,3.252,1595,2.264,1792,5.876,2486,3.504,3108,7.42,3111,4.905,3341,3.307,3347,3.2,5049,4.827,5050,4.827,5051,4.827]],["t/2292",[0,0.664,6,1.539,56,1.549,59,1.651,64,0.92,68,1.454,76,3.362,77,1.664,99,1.477,123,1.798,148,1.042,157,2.264,163,3.024,169,3.136,171,2.064,189,2.695,202,2.743,231,2.636,286,2.358,318,2.549,364,1.466,394,1.392,414,1.766,424,4.719,456,4.637,523,3.324,546,2.868,560,3.442,637,3.486,666,5.865,717,1.577,732,2.819,818,6.153,821,2.743,1154,5.139,1397,4.488,1459,7.102,3105,4.488,3138,5.139,3965,5.139,4721,5.139,5052,5.561,5053,5.561,5054,5.561,5055,5.561,5056,8.086,5057,5.561,5058,5.139]],["t/2294",[0,0.963,64,1.372,77,1.448,84,2.515,141,4.063,148,1.554,184,2.964,185,5.38,231,2.942,364,2.186,394,2.075,411,2.289,717,2.352,869,5.991,3133,6.798,3205,5.682,3304,9.472,3319,7.664,3700,7.25,5059,8.293,5060,8.293,5061,8.293]],["t/2296",[64,1.312,77,1.385,84,2.462,148,1.487,185,5.268,203,5.182,231,2.195,237,4.346,364,2.091,367,4.423,387,4.079,394,1.985,411,1.708,717,2.25,869,5.866,870,5.533,1034,6.319,1138,4.911,1176,6.799,1210,6.206,1795,6.206,3295,9.201,5062,7.332,5063,7.332,5064,7.933,5065,7.933]],["t/2298",[0,0.633,64,1.275,77,2.103,84,2.173,120,2.838,148,1.445,153,4.188,182,3.778,185,5.886,200,3.285,227,1.567,252,3.683,364,2.032,394,1.93,411,1.66,449,3.193,622,3.003,717,2.187,868,6.912,869,6.146,1693,5.482,2008,6.452,5066,7.71,5067,10.142,5068,7.71,5069,7.125]],["t/2300",[6,1.336,64,1.161,77,1.226,82,4.196,84,2.041,123,1.324,148,1.316,185,5.556,227,1.427,230,5.095,357,3.333,364,1.85,367,3.914,394,1.757,411,2.051,456,4.026,546,2.458,608,2.88,666,3.2,668,3.274,674,5.643,717,1.991,728,4.991,869,5.519,971,5.342,1084,3.781,1853,5.342,1876,5.824,2491,5.665,3133,7.239,3241,6.487,3323,6.136,3904,6.487,3916,7.971,5070,7.02,5071,7.02,5072,7.02,5073,7.02,5074,7.02,5075,7.02,5076,7.02]],["t/2302",[2,3.279,4,2.518,6,1.835,8,2.129,36,1.331,56,0.841,64,0.939,77,0.991,80,3.356,84,2.581,103,2.985,121,0.883,123,1.071,141,2.781,148,1.064,163,2.123,166,1.701,185,5.76,194,5.641,197,2.43,199,5.889,201,3.356,202,2.799,209,2.545,217,3.472,227,1.668,231,1.57,237,3.109,298,2.258,317,4.44,364,1.496,394,1.42,411,1.767,423,3.321,452,4.802,539,2.632,546,2.488,666,4.394,668,3.828,717,1.61,869,5.392,870,3.959,1034,3.472,1043,3.431,1366,3.514,1719,4.214,1876,3.057,2402,4.962,2675,4.962,3129,4.75,3133,3.288,3308,4.962,3314,7.54,4926,5.245,5077,5.676,5078,5.676,5079,5.676,5080,5.676,5081,5.676,5082,5.676]],["t/2304",[6,1.354,8,1.845,44,5.562,64,1.176,77,1.242,84,2.609,122,2.67,148,1.333,157,1.448,166,2.13,185,5.581,194,6.368,199,5.357,216,2.904,231,1.967,291,2.67,364,1.874,367,3.965,394,1.78,411,1.531,452,6.368,523,4.251,539,3.297,546,1.835,628,4.299,667,4.644,668,3.316,717,2.017,869,5.555,1719,5.279,1876,5.862,3133,4.118,3314,5.562,3325,6.571,5083,7.111,5084,7.111,5085,7.111,5086,7.111,5087,6.216,5088,7.111,5089,7.111]],["t/2306",[6,1.995,8,2.104,64,1.341,77,1.416,84,2.488,148,1.52,157,1.652,166,3.14,185,5.627,231,2.243,364,2.137,365,3.226,394,2.029,411,1.746,546,2.093,668,4.888,717,2.3,869,5.928,1876,6.255,3133,4.697,3334,6.171,5087,7.089,5090,8.109,5091,8.109,5092,8.109,5093,8.109,5094,8.109]],["t/2308",[0,0.545,64,1.098,77,1.159,83,2.961,84,2.75,148,1.244,157,1.352,166,2.746,184,3.276,185,5.634,212,2.842,227,1.349,260,3.043,360,6.134,364,1.749,394,1.661,396,3.844,411,1.429,433,4.927,445,4.547,596,3.844,668,4.897,717,1.883,869,5.36,1084,3.575,1129,7.671,1876,5.656,2427,5.051,3133,5.309,3295,6.518,3310,6.134,3334,9.585,5087,5.802,5095,6.638,5096,6.638,5097,6.638,5098,6.638,5099,6.638,5100,6.638,5101,6.638]],["t/2310",[0,0.607,64,1.224,77,1.292,80,4.375,84,2.538,141,3.625,148,1.849,166,2.956,185,5.94,209,3.318,227,1.504,364,1.95,394,1.852,411,1.593,630,3.861,666,3.373,668,4.602,674,5.15,717,2.099,744,3.804,869,6.046,1876,6.38,2429,7.719,3133,6.431,3314,5.787,4726,6.191,5102,7.399,5103,7.399,5104,7.399,5105,6.837]],["t/2312",[47,4.763,64,1.425,77,1.505,81,2.826,84,2.335,148,1.615,165,5.152,185,5.756,201,5.097,364,2.272,394,2.157,424,4.555,717,2.445,869,6.1,1176,4.643,1196,7.308,4504,7.965,5106,8.619,5107,8.619,5108,8.619]],["t/2314",[58,2.091,64,1.382,74,5.145,77,1.459,84,2.524,148,1.566,185,5.691,199,4.659,219,4.578,227,1.698,231,2.312,282,3.214,364,2.202,389,4.941,394,2.091,411,1.799,622,3.254,717,2.37,789,4.177,869,6.013,1684,5.307,3334,6.359,5109,8.356,5110,10.685,5111,8.356]],["t/2316",[6,1.958,64,1.303,77,1.376,84,2.204,148,1.476,185,5.565,248,4.708,286,3.339,364,2.076,394,1.971,411,2.214,424,3.73,547,3.042,717,2.234,776,5.54,869,5.845,870,5.494,1034,4.817,1176,6.784,1181,4.876,1208,5.039,1209,5.25,1210,6.161,5062,7.279,5063,9.504,5112,7.877]],["t/2318",[14,4.239,37,2.662,58,1.903,64,1.257,74,3.321,77,1.328,84,2.412,123,1.435,148,1.425,185,5.708,199,5.603,219,4.165,231,2.103,282,2.924,364,2.004,394,1.903,398,2.384,402,3.801,527,4.597,717,2.157,869,6.112,1684,4.829,1761,7.027,1845,7.805,3323,6.647,3327,5.519,3334,7.647,3679,4.829,5113,7.604,5114,7.604,5115,7.604,5116,7.604]],["t/2320",[64,1.312,77,1.385,80,4.691,84,2.608,141,3.887,148,1.487,185,5.786,209,3.558,227,1.612,265,3.448,364,2.091,394,1.985,411,1.708,668,3.7,674,4.14,717,2.25,807,5.344,869,5.866,872,4.109,1117,6.037,1141,6.935,1440,6.037,2064,4.852,3095,5.533,3133,4.595,3313,9.273,3342,6.935,5117,7.933,5118,10.333,5119,7.933]],["t/2322",[0,0.628,64,1.266,77,2.097,84,1.641,99,2.034,120,2.38,148,1.435,182,3.751,185,5.504,190,3.311,258,3.613,288,1.361,304,2.788,313,4.308,364,2.018,394,1.916,411,1.648,449,3.17,660,3.141,717,2.172,817,8.147,868,6.896,869,6.129,890,4.124,1693,5.444,2008,6.407,5069,7.076,5120,7.657,5121,7.657,5122,7.657,5123,7.657,5124,7.657]],["t/2324",[178,4.503,213,5.64,394,2.658,774,6.349,3753,8.888,3989,8.572]],["t/2326",[4,3.305,6,1.887,56,1.65,64,1.232,77,1.301,83,3.322,107,3.142,120,1.756,148,1.396,196,4.765,200,3.173,213,5.797,217,4.556,231,2.061,282,3.813,288,1.324,304,2.712,309,8.444,364,1.963,394,1.864,411,1.604,414,3.147,480,4.939,622,2.901,660,4.067,717,2.113,764,3.287,827,5.296,915,4.405,1152,4.453,5125,7.449,5126,9.913,5127,7.449]],["t/2328",[124,3.429,169,3.789,209,4.381,227,2.393,318,4.479,371,5.906,372,6.29,394,2.445,662,4.968,836,2.779,1495,5.906,3085,9.029,3753,8.176,5128,9.77]],["t/2330",[0,0.681,6,2.235,7,1.436,8,2.76,12,4.714,15,2.943,30,2.531,40,0.977,56,1.229,57,2.048,58,2.821,59,3.348,60,8.138,61,4.207,62,2.789,63,3.884,64,1.759,65,2.69,66,3.032,67,4.51,68,2.17,69,4.185,70,4.51,71,3.409,72,6.02,73,3.275,74,2.518,75,4.908,76,3.485,77,1.007,89,2.421,148,1.081,163,2.156,170,3.08,181,1.83,209,2.585,212,2.468,227,1.172,235,1.83,239,3.486,299,1.484,331,4.093,411,1.241,436,3.662,492,2.077,496,2.055,509,3.009,540,3.884,566,3.215,587,4.237,683,3.273,826,4.021,1963,1.797]],["t/2332",[0,0.724,23,2.923,57,1.699,58,3.023,59,3.873,120,2.608,121,1.374,192,8.426,207,2.308,227,1.794,258,4.166,375,3.742,411,1.9,492,3.023,496,1.865,687,2.333,5129,8.827]],["t/2334",[36,1.712,40,1.657,57,1.405,65,2.706,86,2.417,91,2.466,97,1.813,121,1.717,125,4.445,140,3.649,174,3.731,209,3.273,216,2.982,281,1.813,282,3.762,288,1.297,299,2.839,305,4.84,321,2.891,462,1.939,496,1.543,537,2.143,550,4.768,622,2.843,687,1.929,793,5.783,834,2.698,836,2.076,837,2.071,844,2.048,916,5.236,917,4.272,1060,4.576,1963,2.275,1964,3.81,1965,2.254,5130,9.78]],["t/2336",[7,1.856,36,2.096,40,1.888,56,0.738,57,1.435,58,1.246,64,1.233,65,2.744,91,2.253,97,2.219,114,7.026,123,1.406,133,1.688,169,4.48,188,4.118,202,2.456,212,2.132,227,1.012,269,6.352,281,1.237,288,1.325,299,2.734,312,1.813,368,4.317,462,1.323,492,1.246,496,1.575,537,2.188,637,3.122,680,5.831,687,1.97,821,2.456,834,2.736,836,2.12,837,2.114,844,2.506,951,5.53,1046,4.118,1090,2.542,1177,2.44,1586,1.82,1802,2.101,1963,2.323,1965,2.301,2719,5.464,3849,4.603,5131,4.98,5132,6.516,5133,7.454,5134,7.454,5135,7.454,5136,4.98]],["t/2338",[0,0.375,36,1.637,40,1.826,57,0.879,59,1.356,65,2.828,77,0.797,81,1.497,83,2.037,91,1.76,97,1.734,107,1.969,110,4.383,120,1.076,140,2.282,147,1.384,157,2.356,188,2.872,201,2.7,207,1.194,225,1.352,226,1.58,227,0.928,229,1.84,231,1.263,235,1.45,281,1.134,282,2.685,284,2.195,288,0.812,298,1.816,299,2.181,312,1.662,362,2.793,462,1.213,492,1.143,496,0.965,537,3.001,585,3.563,622,1.778,649,3.246,687,1.207,697,3.027,714,3.076,764,2.015,782,2.383,820,5.065,834,1.926,836,1.299,837,1.295,844,1.958,846,3.74,847,5.312,985,3.246,1046,2.105,1108,1.662,1458,6.334,1586,1.669,1733,3.076,1806,5.91,1963,1.423,1964,3.643,1965,1.41,2063,3.314,2064,6.86,2069,3.185,2160,2.826,2352,7.831,3020,6.102,3327,3.314,3913,3.821,4353,6.451,5137,7.831,5138,8.474,5139,4.566,5140,4.566,5141,4.566]],["t/2340",[0,0.405,36,2.084,40,1.951,57,0.95,65,2.048,77,1.724,91,1.867,97,1.839,123,1.863,133,2.51,157,2.468,166,2.218,189,1.645,207,1.291,265,3.861,281,1.839,288,0.877,299,2.287,312,3.235,328,4.827,335,3.515,414,1.567,462,2.81,486,4.988,492,1.235,496,1.043,504,3.375,537,3.105,546,1.274,635,3.984,687,1.304,709,3.676,832,2.919,834,2.043,836,1.404,837,1.4,844,2.077,966,3.433,1015,3.381,1043,2.984,1046,2.275,1086,3.356,1087,3.727,1090,2.519,1108,1.797,1138,4.583,1408,4.022,1586,1.804,1803,3.356,1963,1.538,1965,1.524,1966,3.676,1967,3.652,2064,6.793,2104,5.072,5142,4.936,5143,4.936]],["t/2342",[36,2.187,40,2.097,57,1.309,65,2.943,68,1.779,91,2.351,97,2.315,107,3.228,123,1.283,157,2.167,166,2.038,188,2.306,245,3.424,281,1.689,288,1.209,299,2.738,305,4.51,411,1.464,462,1.807,492,1.702,496,1.437,537,1.997,597,6.089,661,8.15,687,1.798,834,2.572,836,1.935,837,1.929,844,2.615,1046,3.136,1087,3.424,1108,2.477,1408,5.064,1458,3.634,1586,2.486,1963,2.12,1965,2.1,2064,4.16,3113,6.286,3660,5.692,5137,6.286,5144,6.802,5145,6.802]],["t/2344",[3,2.474,6,1.234,7,1.034,9,1.177,36,0.974,37,1.1,40,2.142,45,3.385,57,0.799,64,0.687,65,1.794,68,1.696,74,1.813,91,2.013,97,1.031,101,2.844,104,1.343,110,1.688,121,1.687,125,1.673,147,1.966,178,4.149,181,1.318,189,1.384,207,1.086,212,1.777,215,1.432,235,1.318,239,2.723,241,3.616,245,2.089,252,1.983,281,1.611,282,1.597,285,2.315,288,0.738,299,2.322,316,4.673,398,1.302,462,1.103,492,1.039,496,0.877,537,2.648,547,4.33,660,3.274,662,2.736,679,2.429,683,3.557,684,3.264,687,1.097,713,2.404,715,1.872,831,2.167,834,1.789,836,1.181,837,1.177,844,1.164,916,4.646,917,1.813,922,2.797,924,3.756,946,1.862,996,2.51,1025,2.061,1108,3.563,1138,2.57,1963,1.294,1965,1.282,2348,3.474,2732,5.467,3017,4.814,3827,8.336,4467,3.836,4469,3.836,4471,3.836,4472,3.836,4476,3.836,4478,3.836,4479,3.836,4481,3.836,4483,3.836,4571,5.427,5146,6.485,5147,4.151,5148,4.151,5149,4.151,5150,4.151,5151,4.151,5152,4.151,5153,4.151,5154,4.151,5155,4.151]],["t/2346",[3,1.59,6,1.523,7,1.038,9,1.845,36,0.978,37,1.723,40,2.069,42,2.097,45,2.175,57,0.802,65,1.799,74,1.82,86,2.154,91,2.279,97,1.035,104,1.349,121,1.689,125,3.224,143,2.39,147,1.263,157,0.849,178,1.767,181,2.065,206,1.742,213,4.12,215,1.437,238,2.813,245,4.026,260,1.91,281,1.987,285,2.323,288,0.741,299,2.059,316,4.682,321,1.65,389,6.143,390,1.54,398,2.039,427,3.025,462,1.107,496,0.881,537,3.049,546,1.076,566,2.323,660,3.282,679,2.438,683,3.565,684,2.097,687,1.101,715,1.879,761,2.807,831,3.395,834,1.794,836,1.185,837,1.182,844,1.169,916,4.292,917,2.841,924,2.413,1018,2.143,1019,2.906,1022,3.643,1025,2.069,1058,2.083,1108,3.291,1225,2.722,1765,3.025,1802,2.744,1963,1.298,1965,1.287,3012,3.851,3468,3.643,3731,3.851,3793,3.851,4206,3.093,4571,3.487,4573,3.643,4740,3.851,4941,5.686,5156,4.167,5157,4.167,5158,6.504,5159,4.167,5160,4.167,5161,4.167,5162,4.167,5163,4.167,5164,4.167,5165,4.167,5166,4.167,5167,4.167,5168,4.167,5169,4.167,5170,4.167,5171,4.167,5172,4.167,5173,4.167]],["t/2348",[36,1.848,40,1.742,57,1.516,65,2.845,91,1.986,97,1.956,121,1.601,125,4.615,281,1.956,282,3.955,288,1.4,299,2.948,328,4.976,462,2.092,496,1.664,537,2.312,622,3.067,687,2.081,793,6.081,834,2.837,836,2.24,837,2.234,844,2.209,916,4.883,917,3.441,1963,2.454,1964,4.111,1965,2.432,5174,10.284]],["t/2350",[0,0.89,5,3.203,6,1.345,26,4.321,57,1.36,58,2.715,59,3.964,76,4.271,120,2.255,122,2.653,207,1.847,212,3.025,227,1.436,232,4.462,291,2.653,309,5.023,338,4.614,365,3.805,411,1.521,492,2.715,496,1.493,656,3.87,687,1.867,764,3.118,789,5.422,1634,5.702,1635,5.702,2719,7.659,3755,6.176,3815,5.376,4313,6.176,4316,6.176,4966,5.702,5175,7.065]],["t/2352",[0,0.523,2,4.06,7,1.011,15,4.942,36,2.09,37,2.847,40,2.152,43,4.205,47,2.243,57,1.227,64,1.054,65,2.465,84,1.365,91,2.247,97,2.213,123,1.202,133,1.376,157,1.298,161,2.124,166,2.357,168,1.764,178,3.778,241,3.553,281,1.583,288,1.584,299,2.492,390,2.356,462,2.09,492,1.595,496,1.347,537,1.87,539,3.647,540,2.734,547,3.441,549,4.386,662,1.713,687,1.684,782,2.118,834,2.458,836,1.812,837,1.807,844,2.499,846,3.472,1002,1.989,1025,2.015,1108,2.32,1458,3.404,1586,2.329,1797,3.944,1963,1.986,1965,1.967,2154,3.013,2322,5.57,4206,3.013,5176,3.751,5177,3.548,5178,7.269,5179,4.059,5180,4.059,5181,6.372,5182,4.059,5183,4.059,5184,4.059,5185,4.059,5186,4.059,5187,3.751,5188,3.751,5189,4.059,5190,4.059]],["t/2354",[0,0.42,2,3.83,7,1.275,36,1.785,37,2.983,40,2.029,57,0.986,65,2.105,84,1.097,91,1.919,97,1.89,107,1.444,123,0.966,141,2.508,157,1.55,166,2.721,178,3.226,206,2.14,211,4.654,248,3.061,281,2.255,288,0.91,299,2.338,390,3.717,462,1.36,492,1.281,496,1.082,523,3.061,537,3.154,547,3.883,549,4.243,637,3.209,666,2.334,668,2.388,687,1.353,782,2.672,834,2.099,836,1.456,837,1.452,844,2.134,874,2.672,941,2.652,1001,6.735,1025,2.542,1108,2.771,1458,2.735,1586,1.871,1803,2.321,1963,1.595,1965,1.581,2347,3.296,2719,3.131,4306,6.652,4363,4.731,5176,4.731,5177,4.476,5191,7.609,5192,7.609,5193,5.12,5194,5.12,5195,5.12,5196,5.12,5197,5.12,5198,5.12,5199,5.12,5200,5.12,5201,5.12]],["t/2356",[0,0.445,6,1.032,7,1.35,36,1.863,40,2.193,48,2.086,53,2.369,57,1.044,65,1.5,66,2.852,84,2.609,91,1.368,97,1.347,140,2.711,147,1.644,185,2.486,223,3.942,227,1.102,234,2.946,261,3.357,281,1.972,282,3.054,288,1.669,299,2.418,312,1.975,321,2.148,398,1.7,406,2.267,414,1.722,462,2.109,496,1.146,537,2.757,547,2.095,585,2.769,622,3.092,687,1.433,834,2.19,836,1.543,837,1.538,844,1.521,931,2.875,951,6.811,1025,2.693,1089,3.596,1090,2.769,1108,2.891,1225,3.542,1396,4.242,1458,6.142,1583,3.542,1718,5.012,1802,3.963,1808,4.026,1963,1.69,1964,2.831,1965,1.675,2654,4.539,5202,9.392,5203,7.94,5204,5.424]],["t/2358",[0,0.308,36,0.881,38,3.37,40,2.213,57,0.723,84,1.283,91,0.947,94,1.506,97,0.932,157,1.737,166,1.794,281,1.488,288,0.667,299,1.924,390,3.672,398,1.878,424,2.173,462,0.997,496,0.793,531,3.339,535,3.402,539,3.955,546,1.546,687,0.992,715,1.692,732,3.036,744,3.08,774,3.58,831,3.126,834,1.652,836,1.068,837,1.065,844,1.053,846,4.384,962,2.616,1001,3.754,1002,2.935,1003,3.08,1005,3.31,1007,3.754,1008,3.912,1009,3.58,1012,3.339,1013,3.971,1032,4.446,1036,4.446,1089,2.489,1108,2.181,1341,4.103,1592,3.126,1595,2.81,1621,2.916,1626,3.754,1627,4.103,1630,3.505,1700,4.035,1800,4.035,1801,4.177,1802,1.584,1963,1.17,1965,1.159,2717,2.669,3356,4.177,3460,3.141,4202,4.035,4204,4.103,4230,4.558,4232,4.558,4577,5.012,5205,3.754,5206,5.989,5207,5.989,5208,7.473,5209,3.754,5210,3.754,5211,3.754,5212,3.754,5213,3.754,5214,5.989,5215,5.989,5216,3.754,5217,3.754,5218,3.754,5219,5.236,5220,3.754,5221,5.989,5222,5.989,5223,3.754,5224,3.754,5225,3.754,5226,7.473,5227,3.754,5228,3.754,5229,3.754,5230,3.754,5231,3.754,5232,5.989,5233,3.754,5234,3.754,5235,3.754,5236,3.754,5237,3.754]],["t/2360",[36,1.636,40,1.606,57,1.343,65,2.624,91,1.759,97,1.732,123,1.316,133,2.364,157,2.355,166,2.09,207,1.824,265,4.122,281,2.676,288,1.24,299,2.774,335,3.312,414,2.215,462,2.52,496,1.474,504,3.18,535,5.387,536,5.439,537,2.784,546,1.8,635,4.253,687,1.843,709,3.463,834,2.617,836,1.984,837,1.978,844,1.956,962,3.047,966,3.234,1086,3.162,1087,3.511,1108,3.453,1803,3.162,1963,2.173,1965,2.154,1966,3.463,1967,3.44,5238,9.484,5239,6.975]],["t/2362",[36,2.124,40,1.904,57,1.255,65,2.505,91,2.283,97,2.249,123,1.23,133,2.21,157,2.289,166,1.953,207,1.705,265,3.935,281,2.583,288,1.159,299,2.678,335,3.095,391,5.412,414,2.07,462,2.405,492,1.632,496,1.378,504,2.972,535,5.142,536,5.192,537,3.053,546,1.683,635,4.06,687,1.723,709,3.237,834,2.498,836,1.854,837,1.849,844,2.539,962,2.848,966,3.023,1086,2.955,1087,3.281,1090,3.328,1586,2.383,1803,2.955,1963,2.031,1965,2.013,1966,3.237,1967,3.215,5240,6.519,5241,6.519,5242,6.519,5243,6.519]],["t/2364",[36,1.576,40,1.928,57,1.293,65,2.557,84,1.981,91,1.694,97,1.669,123,1.268,133,2.278,157,2.153,166,2.013,207,1.757,265,4.018,281,2.625,288,1.194,299,2.721,335,3.19,414,2.133,462,2.456,482,5.301,496,1.42,504,3.063,535,5.25,536,5.301,537,2.713,546,1.734,635,4.145,687,1.776,709,3.336,834,2.55,836,1.911,837,1.906,844,1.885,962,2.935,966,3.115,1086,3.046,1087,3.382,1108,2.446,1802,2.835,1803,3.046,1963,2.094,1965,2.074,1966,3.336,1967,3.314,5244,9.244,5245,6.719,5246,6.719]],["t/2366",[36,1.861,40,1.75,57,1.527,65,2.858,84,2.608,91,2.001,97,1.97,123,1.497,281,2.566,288,1.41,299,2.958,390,2.933,462,2.108,496,1.676,535,5.869,536,5.925,537,2.329,608,3.255,687,2.096,834,2.851,836,2.257,837,2.25,844,2.225,1020,3.448,1108,3.762,1963,2.472,1965,2.449,5247,10.333,5248,7.933]],["t/2368",[0,0.271,13,1.549,15,1.685,23,1.093,36,2.047,40,2.308,48,4.678,53,1.442,56,0.489,57,0.636,58,0.826,65,1.494,74,1.442,85,1.414,91,1.362,97,1.341,111,1.481,125,1.331,141,1.618,169,1.28,178,1.4,184,1.18,269,2.347,281,1.341,288,0.587,299,1.764,321,1.308,346,1.549,389,1.952,462,0.877,492,0.826,496,0.698,500,2.451,547,4.747,686,4.094,687,0.873,715,1.489,750,4.19,758,4.778,776,1.779,789,1.65,834,1.49,836,0.939,837,0.937,844,1.515,874,1.723,957,2.583,1108,1.966,1116,2.886,1153,3.193,1208,1.618,1463,3.051,1512,5.989,1586,1.207,1963,1.029,1965,1.019,2064,2.019,2675,4.72,3095,2.303,3227,4.72,3420,4.358,3760,4.519,3811,4.99,3897,4.99,3922,2.886,4308,2.886,5249,3.302,5250,3.302,5251,3.302,5252,3.302,5253,5.4,5254,3.302,5255,3.302,5256,3.302,5257,3.302,5258,3.302,5259,3.302,5260,3.302,5261,3.302,5262,3.302,5263,3.302,5264,3.302,5265,3.302,5266,3.302,5267,3.302,5268,3.302,5269,3.302,5270,3.302,5271,3.302,5272,3.302,5273,3.302,5274,3.302,5275,3.302,5276,3.302,5277,3.302,5278,3.302,5279,3.302,5280,5.4,5281,5.4,5282,5.4,5283,5.4,5284,5.4,5285,5.4,5286,4.72,5287,5.4,5288,5.4,5289,5.4,5290,5.4,5291,5.4,5292,5.4,5293,3.302,5294,3.302,5295,3.302,5296,3.302,5297,3.302,5298,3.302,5299,5.4,5300,3.302,5301,3.302,5302,3.302,5303,3.302]],["t/2370",[36,2.032,40,1.851,57,1.178,65,2.396,74,2.673,90,2.22,91,2.184,97,2.151,123,1.896,133,2.074,157,2.508,166,2.595,168,2.659,197,3.708,203,3.997,207,1.6,245,3.08,265,3.764,281,2.151,288,1.088,299,2.588,335,2.905,414,1.943,462,2.301,492,1.531,496,1.293,504,2.789,537,2.95,546,1.579,635,3.884,687,1.617,709,3.038,800,4.268,834,2.389,836,1.741,837,1.736,844,2.429,951,5.361,955,5.121,962,2.673,966,2.837,1002,2.998,1058,3.059,1086,2.774,1087,3.08,1090,3.124,1586,2.236,1803,2.774,1963,1.907,1965,1.889,1966,3.038,1967,3.018,2143,4.442,5304,6.119,5305,6.119]],["t/2372",[0,0.591,36,2.274,40,2.071,57,1.387,64,1.191,65,2.682,91,2.445,97,2.408,157,1.467,197,3.084,203,4.705,204,3.881,206,4.052,237,3.946,281,1.789,288,1.28,299,2.82,458,5.814,462,1.914,475,4.306,492,1.803,496,1.522,501,5.506,537,2.115,687,1.904,711,5.732,715,3.248,834,2.674,836,2.049,837,2.043,844,2.719,951,6.001,1090,3.678,1586,2.633,1603,6.658,1963,2.245,1965,2.224,3086,3.789,5306,7.204,5307,7.204]],["t/2374",[36,2.115,40,1.899,57,1.248,65,2.494,74,2.831,90,2.351,91,2.274,97,2.239,123,1.223,133,2.197,157,2.283,166,2.701,207,1.695,231,1.793,245,3.262,260,2.971,265,3.918,281,2.239,288,1.152,299,2.669,335,3.077,414,2.058,462,2.395,492,1.622,496,1.369,504,2.954,537,3.043,546,1.673,635,4.043,687,1.713,709,3.218,834,2.487,836,1.843,837,1.838,844,2.529,951,5.581,962,2.831,966,3.005,1002,3.175,1058,3.239,1086,2.938,1087,3.262,1090,3.308,1586,2.369,1803,2.938,1963,2.019,1965,2.001,1966,3.218,1967,3.196,5308,6.481,5309,6.481]],["t/2376",[0,0.437,36,1.836,40,2.159,57,1.024,62,2.572,65,2.165,77,1.906,84,2.195,91,1.974,97,1.944,110,4.164,123,1.477,147,2.373,157,2.325,164,3.112,212,2.277,227,1.591,232,5.324,235,1.689,261,3.292,281,1.321,282,2.046,288,0.945,299,2.391,313,2.992,390,2.893,402,2.658,411,1.145,462,1.413,492,1.331,496,1.124,537,2.726,622,3.048,625,2.992,674,2.776,687,1.405,759,2.606,834,2.159,836,1.513,837,1.509,844,2.195,1046,2.452,1089,3.526,1586,1.944,1621,2.589,1963,1.657,1964,2.776,1965,1.642,2270,7.771,4088,4.047,4343,4.649,5310,4.915,5311,7.264,5312,5.318,5313,7.827,5314,4.915,5315,5.318,5316,5.318,5317,5.318,5318,5.318]],["t/2378",[0,0.538,36,2.133,40,2.168,57,1.262,62,3.172,65,2.515,77,1.822,84,1.405,91,2.293,97,2.258,110,4.243,147,1.988,157,2.41,164,3.837,186,2,232,4.866,235,2.082,281,1.629,288,1.166,299,2.686,390,2.424,402,3.278,462,1.742,492,1.641,496,1.386,537,2.668,547,2.533,687,1.733,834,2.508,836,1.865,837,1.86,844,2.55,1046,3.023,1089,4.348,1586,2.397,1621,3.192,1963,2.044,1965,2.025,5310,6.061,5314,6.061,5319,6.558,5320,6.558,5321,6.558,5322,6.558,5323,6.558]],["t/2380",[0,0.669,9,2.311,36,2.248,37,2.158,40,2.208,57,1.081,65,2.254,73,3.191,84,1.204,91,2.054,97,2.023,107,2.298,123,1.06,141,2.753,157,1.144,161,2.715,166,2.871,281,2.38,288,0.998,299,2.467,312,2.045,390,2.077,462,1.492,492,1.406,496,1.187,537,2.813,546,1.45,547,2.17,630,2.932,666,2.561,687,1.485,712,3.862,834,2.247,836,1.598,837,1.593,844,2.285,1008,3.669,1043,4.925,1046,2.59,1108,2.966,1458,3.002,1586,2.053,1595,2.636,1621,2.735,1852,3.725,1963,1.751,1965,1.735,2016,4.275,2347,3.617,2719,3.436,3780,4.911,4305,8.857,4306,4.911,4966,6.574,5177,4.911,5187,5.192,5188,5.192,5324,5.618,5325,5.618,5326,5.618,5327,5.618]],["t/2382",[0,0.612,7,1.24,36,2.096,40,2.261,57,0.959,65,2.471,73,2.829,84,1.914,91,1.88,97,1.851,141,2.44,200,3.806,206,2.082,227,1.815,232,2.323,281,1.237,282,3.814,284,2.394,288,0.885,298,1.981,299,2.3,312,1.813,349,2.705,390,1.841,411,1.072,414,1.581,424,2.704,462,1.323,492,1.246,496,1.052,537,1.462,547,3.45,622,2.903,630,2.599,674,3.89,687,1.316,712,3.004,834,2.057,836,1.417,837,1.413,844,2.091,1025,2.473,1108,3.611,1376,4.799,1586,1.82,1595,2.336,1628,2.705,1852,3.302,1963,1.552,1964,4.662,1965,1.538,2719,3.046,2873,3.697,3493,3.615,3780,4.354,4088,6.798,4307,3.79,4309,3.697,4310,3.896,4316,7.809,4318,3.896,4319,3.896,4966,6.016,5311,3.896,5328,4.98,5329,6.016,5330,4.019,5331,4.98,5332,4.98]],["t/2384",[7,1.331,36,2.185,40,2.259,57,1.029,65,2.576,84,1.145,91,1.981,97,1.951,104,1.729,157,1.897,200,3.968,227,1.893,232,3.663,281,1.951,282,3.582,284,2.569,288,0.95,299,2.397,349,2.903,411,1.151,424,2.849,462,1.42,492,1.337,496,1.129,535,3.035,537,1.569,547,3.597,622,3.059,674,4.099,687,1.412,712,3.165,834,2.167,836,1.52,837,1.516,844,2.203,872,2.768,1025,2.653,1108,3.738,1376,5.057,1586,1.953,1595,2.507,1798,3.6,1963,1.665,1964,4.86,1965,1.65,2161,3.661,2873,3.967,3493,3.879,4088,7.086,4307,4.067,4309,3.967,4310,4.18,4313,4.672,4318,4.18,4319,4.18,5311,4.18,5329,4.313,5330,4.313,5333,5.344,5334,5.344]],["t/2386",[7,1.287,36,2.142,40,2.284,57,0.995,65,2.526,84,1.107,91,1.932,97,1.903,104,1.672,157,1.561,200,3.891,227,1.856,232,3.574,281,1.903,282,3.512,284,2.484,288,0.919,299,2.351,349,2.807,390,1.911,398,1.62,411,1.113,424,2.779,462,1.373,492,1.293,496,1.092,537,1.517,547,3.527,622,2.984,674,3.999,687,1.366,712,3.088,834,2.114,836,1.47,837,1.466,844,2.149,872,2.677,1025,2.566,1046,2.383,1108,3.677,1376,4.933,1503,2.881,1586,1.889,1595,2.424,1621,2.516,1798,3.481,1802,2.181,1963,1.61,1964,4.766,1965,1.596,2161,3.541,2873,3.837,3493,3.751,4088,6.949,4307,3.933,4309,3.837,4310,4.043,4314,4.776,4318,4.043,4319,4.043,5311,4.043,5329,4.171,5330,4.171,5335,5.168,5336,5.168]],["t/2388",[7,1.161,36,2.014,40,2.238,57,0.898,65,2.375,84,0.999,91,1.789,97,1.762,104,1.509,133,1.581,157,1.748,166,1.397,200,3.657,207,1.219,227,1.744,232,3.308,265,3.083,281,2.132,282,3.689,284,2.241,288,0.829,299,2.21,335,2.214,349,2.533,398,1.462,411,1.004,414,1.48,424,2.573,462,1.884,492,1.167,496,0.985,504,2.126,537,2.082,546,1.203,547,3.315,622,2.762,635,3.181,674,3.702,687,1.232,709,2.315,712,2.858,834,1.957,836,1.326,837,1.323,844,1.989,872,2.415,962,2.037,966,2.162,1025,2.315,1046,2.15,1086,2.114,1087,2.347,1108,3.493,1376,4.567,1503,2.6,1586,1.704,1595,3.327,1798,3.141,1802,1.968,1803,2.114,1963,1.453,1964,4.48,1965,1.44,1966,2.315,1967,2.3,2161,3.194,2873,3.462,3493,3.385,4088,6.532,4307,3.548,4309,3.462,4310,3.647,4315,4.309,4318,3.647,4319,3.647,5311,3.647,5329,5.724,5330,3.763,5337,4.663,5338,4.663]],["t/2390",[0,0.364,7,1.105,23,1.469,36,1.953,40,2.189,57,0.854,65,2.303,83,1.979,84,0.951,91,1.722,97,1.696,133,1.504,157,1.904,166,1.329,200,3.546,206,1.854,207,1.16,227,1.692,232,3.184,265,2.967,281,1.696,282,3.201,284,2.133,288,0.789,298,2.716,299,2.143,312,2.486,335,3.242,349,2.41,364,1.169,398,1.391,411,0.955,414,1.409,424,2.477,456,2.544,462,1.814,492,1.11,496,0.938,504,2.022,537,2.004,546,1.145,547,3.215,622,2.659,635,3.062,674,3.564,687,1.172,709,2.203,712,2.752,782,2.315,834,1.884,836,1.262,837,1.258,844,1.915,962,1.938,966,2.057,1025,2.203,1046,2.045,1086,2.011,1087,2.233,1098,3.294,1108,3.881,1208,2.174,1376,4.396,1413,3.22,1503,2.474,1586,1.621,1595,3.203,1648,3.154,1802,1.872,1803,2.011,1963,1.382,1964,4.344,1965,1.37,1966,2.203,1967,2.188,2161,3.039,2873,3.294,3493,3.22,4088,6.334,4307,3.376,4309,3.294,4310,3.47,4317,4.1,4318,3.47,4319,3.47,5311,3.47,5329,3.58,5330,3.58,5339,4.437,5340,4.437,5341,4.437]],["t/2392",[45,4.607,57,1.699,58,2.209,59,2.621,64,1.46,65,3.06,104,2.857,111,3.958,122,3.314,170,4.716,207,2.308,212,3.779,252,4.217,299,2.848,462,2.345,492,3.023,594,4.166,685,5.998,1310,5.112,1495,5.336,1840,6.157,1950,7.387]],["t/2394",[0,0.535,2,3.079,9,2.568,23,2.158,37,2.399,40,2.07,56,1.341,57,1.255,65,2.505,84,1.397,91,2.283,97,2.249,102,2.497,124,2.288,190,2.819,207,1.705,215,3.587,223,3.237,281,2.583,288,1.159,299,2.678,375,2.764,398,2.839,462,1.732,477,3.602,492,2.266,496,1.378,537,1.914,608,2.675,687,1.723,715,2.939,777,3.429,832,3.855,834,2.498,836,1.854,837,1.849,844,2.539,1108,2.374,1220,4.635,1517,5.473,1586,2.383,1802,2.751,1963,2.031,1965,2.013,2322,7.914,2908,4.635,5342,6.519,5343,6.519]],["t/2396",[3,2.767,40,1.649,47,4.007,57,1.396,84,1.554,91,1.829,94,2.91,97,1.801,120,1.709,122,2.723,190,3.136,215,2.501,251,2.949,281,2.418,288,1.73,299,2.83,424,3.532,462,1.927,496,1.532,537,2.129,687,1.916,715,3.27,834,2.686,836,2.063,837,2.057,844,2.034,966,3.362,979,5.852,1086,3.287,1177,4.77,1208,4.77,1209,4.97,1519,5.518,1803,3.287,1963,2.26,1965,2.239,2408,6.339,3294,6.702,3295,8.354,5344,9.737,5345,7.252]],["t/2398",[40,2.299,57,1.159,90,3.105,91,2.158,97,2.126,157,2.21,166,3.25,182,2.949,184,2.151,228,5.116,245,4.308,260,3.924,281,2.126,288,1.77,299,2.793,462,1.599,492,1.506,496,1.272,537,1.767,594,2.84,685,4.945,687,1.59,715,2.714,834,2.993,836,2.435,837,2.428,844,2.401,966,2.791,1086,2.728,1458,4.573,1519,6.513,1586,2.2,1803,2.728,1963,1.875,1965,1.858,2017,3.297,2018,3.356,2022,3.386,3473,5.037,4093,5.562,5346,6.019,5347,6.019,5348,6.019]],["t/2400",[0,0.262,2,2.64,7,0.796,36,0.75,40,2.211,43,4.601,56,0.473,57,1.012,64,0.869,74,1.396,84,1.435,91,1.689,97,1.663,99,1.397,104,1.701,111,1.433,123,1.264,133,1.083,157,1.879,161,3.074,166,2.325,169,1.239,182,1.566,184,1.142,196,4.123,199,4.327,206,1.336,207,1.375,248,1.91,258,1.508,265,2.285,281,1.663,288,1.931,298,1.271,299,2.375,312,3.359,335,1.517,349,1.736,390,1.181,406,2.197,411,0.688,414,1.015,424,2.429,430,1.932,460,1.833,462,2.59,492,0.8,496,1.111,504,1.457,524,2.058,537,1.966,546,1.729,594,1.508,628,1.932,635,3.003,685,3.325,687,0.845,709,1.587,747,2.087,826,2.229,834,2.545,836,1.905,837,1.9,844,1.879,962,1.396,966,1.482,1002,1.566,1018,2.703,1086,1.449,1087,1.609,1090,1.631,1108,2.439,1310,1.851,1408,3.638,1502,1.955,1503,1.782,1517,4.049,1583,2.087,1586,1.168,1621,1.556,1648,6.098,1701,4.859,1798,2.153,1803,1.449,1963,1.638,1965,0.987,1966,1.587,1967,1.576,2017,1.751,2018,1.782,2019,4.001,2020,6.189,2021,2.954,2022,1.798,2023,2.954,2024,2.954,2025,2.954,2780,5.405,2926,2.153,4325,4.596,5349,3.196,5350,5.258,5351,3.196,5352,3.196,5353,2.794,5354,3.196,5355,3.196,5356,3.196]],["t/2402",[40,2.133,57,1.516,65,2.845,90,3.73,91,3.061,97,2.554,281,2.554,288,1.4,299,2.948,462,2.092,492,1.971,496,1.664,537,2.312,687,2.081,715,3.551,834,2.837,835,6.885,836,2.24,837,2.234,844,2.885,1086,3.571,1519,7.826,1586,2.879,1963,2.454,1965,2.432,5357,7.877,5358,7.877]],["t/2404",[2,3.483,3,3.384,37,3.208,38,3.562,40,1.979,56,1.314,57,1.219,58,1.584,64,1.467,65,2.454,91,2.237,97,2.203,107,1.786,120,1.492,186,1.931,215,3.059,227,1.287,231,2.454,281,2.203,288,1.125,299,2.636,462,1.682,492,1.584,496,1.874,537,1.858,548,3.006,687,1.673,715,2.854,732,4.496,733,6.766,764,2.794,834,2.447,836,1.801,837,1.796,844,2.488,858,5.109,1083,3.705,1178,3.919,1517,5.363,1586,2.314,1963,1.973,1965,1.955,2177,3.872,5359,5.851,5360,6.331,5361,6.331]],["t/2406",[7,1.875,9,1.432,36,1.184,37,2.386,40,2.204,57,0.972,84,2.4,91,1.273,97,1.254,99,1.341,104,2.437,124,3.749,133,1.712,157,1.534,166,1.513,207,1.32,265,3.914,281,1.87,288,1.601,299,1.939,312,1.838,335,2.397,398,3.131,414,1.603,424,1.832,462,2.001,492,1.264,496,1.067,504,2.302,537,2.931,546,1.303,635,3.377,687,1.334,709,2.507,712,2.035,834,2.078,836,1.436,837,1.432,844,1.416,962,2.206,966,2.341,1012,4.199,1025,3.739,1086,2.289,1087,2.541,1108,4.079,1174,3.401,1184,3.207,1586,1.845,1802,3.178,1803,2.289,1963,1.573,1965,1.559,1966,2.507,1967,2.49,3176,4.075,3280,4.666,3282,5.891,3283,4.414,5362,7.531,5363,5.049,5364,7.531,5365,7.531,5366,5.049,5367,5.049,5368,5.049,5369,5.049]],["t/2408",[0,0.574,6,0.648,7,1.378,36,1.299,38,1.915,40,2.264,47,3.059,57,1.066,64,1.157,65,1.532,81,1.116,83,1.518,84,2.237,85,2.37,91,2.236,97,2.002,104,1.792,111,1.527,121,0.53,140,1.702,157,1.128,160,1.725,161,2.332,170,1.819,182,2.712,184,1.979,227,0.692,231,0.942,235,1.081,281,1.738,288,1.689,298,1.354,299,2.687,312,2.935,323,2.332,354,1.495,390,2.047,399,2.082,406,1.423,411,0.733,420,2.212,424,3.447,430,2.058,462,0.904,492,1.385,496,1.17,519,2.257,537,0.999,542,2.747,546,0.879,594,1.607,624,4.713,625,1.915,628,2.058,666,2.524,685,3.474,687,0.9,697,2.257,712,1.372,782,1.777,834,2.622,836,1.99,837,1.985,844,2.261,934,1.865,1002,1.668,1025,2.749,1084,2.982,1090,1.738,1108,2.016,1174,2.293,1502,2.082,1503,3.087,1517,3.347,1583,2.223,1586,2.023,1625,4.213,1647,7.421,1852,2.257,1963,1.725,1965,1.051,2017,3.033,2018,3.087,2022,1.915,2255,2.59,3098,7.434,3493,4.018,4102,3.146,4966,2.747,5370,3.404,5371,3.404,5372,3.404,5373,3.404,5374,5.536,5375,5.536,5376,3.404,5377,3.404,5378,3.404,5379,3.404,5380,3.404,5381,3.404]],["t/2410",[0,0.294,13,2.706,36,1.699,40,2.239,57,0.69,65,2.297,84,1.236,91,1.455,97,1.433,122,1.345,123,0.676,133,1.214,147,1.086,157,2.168,166,1.728,194,2.096,201,2.118,207,0.937,227,0.728,265,2.507,281,2.062,288,0.637,299,2.138,311,1.997,318,1.642,321,1.419,335,1.701,367,1.997,398,1.123,414,1.137,424,3.302,462,1.533,492,1.444,496,0.757,504,1.633,537,2.126,546,1.869,571,4.513,594,1.69,635,3.724,687,0.947,709,1.778,753,2.375,761,2.413,777,1.884,789,1.791,834,1.592,836,1.019,837,1.016,844,1.618,966,1.661,1043,5.02,1054,3.886,1057,2.998,1083,2.096,1086,2.615,1087,1.803,1108,2.1,1113,2.998,1177,3.549,1184,2.275,1208,1.755,1209,4.966,1348,6.061,1586,1.309,1802,1.511,1803,3.764,1845,3.616,1951,2.802,1963,1.116,1965,1.106,1966,1.778,1967,1.767,2970,6.061,3169,2.998,3185,2.891,3225,3.131,3295,2.547,3296,2.891,3302,2.998,3374,3.31,4117,2.998,4206,4.283,4207,2.547,4288,3.31,4290,3.31,4291,3.31,4293,3.31,5286,3.131,5382,3.582,5383,3.582,5384,3.582,5385,3.582,5386,3.582,5387,3.582,5388,3.582,5389,3.582,5390,3.582,5391,3.582,5392,3.582,5393,3.582,5394,3.582,5395,3.582,5396,5.769,5397,5.769,5398,3.582,5399,3.582,5400,3.582,5401,3.582,5402,3.582,5403,3.582,5404,3.31,5405,3.582,5406,5.769,5407,8.99]],["t/2412",[0,0.388,40,2.155,47,4.781,57,0.909,59,2.867,91,1.806,97,1.779,142,2.823,148,0.885,157,2.114,182,2.314,184,1.688,225,1.399,226,1.635,227,0.96,281,2.578,288,1.538,299,2.486,318,2.165,411,1.863,424,4.342,462,1.255,492,1.182,496,0.998,531,4.824,537,1.386,546,2.819,594,2.229,685,4.295,687,1.248,715,2.129,820,2.823,834,2.664,836,2.037,837,2.032,844,2.009,1086,2.141,1133,3.132,1138,2.924,1175,6.584,1176,6.448,1196,4.381,1201,5.602,1517,4.33,1575,4.129,1586,1.726,1876,3.858,1963,1.472,1965,1.458,2017,2.587,2018,2.633,2022,2.658,2160,4.434,3161,4.129,3184,4.365,3185,7.792,4506,3.952,5219,6.261,5408,4.723,5409,4.723]],["t/2414",[2,3.373,37,2.628,38,5.027,40,2.283,43,5.26,47,2.752,57,0.959,91,1.88,97,1.851,123,0.94,133,1.688,157,1.82,166,1.492,182,2.44,184,1.78,207,1.302,260,2.283,265,3.24,281,2.219,288,1.588,299,2.553,335,2.365,390,1.841,414,1.581,462,1.98,492,1.246,496,1.052,504,2.27,537,2.911,546,1.924,549,2.777,594,2.35,608,2.043,635,4.006,685,4.435,687,1.316,709,2.473,777,2.619,834,2.736,836,2.12,837,2.114,844,2.091,962,2.176,966,2.309,1086,3.379,1087,2.507,1517,4.506,1586,1.82,1621,2.424,1803,2.258,1963,1.552,1965,1.538,1966,2.473,1967,2.456,2017,2.728,2018,2.777,2022,2.802,4136,4.603,5353,4.354,5410,4.98,5411,4.98,5412,4.019,5413,4.98]],["t/2416",[40,2.225,57,0.661,84,1.91,91,1.407,97,1.385,123,0.648,157,2.048,166,2.428,178,1.457,182,1.684,184,1.228,281,2.013,282,1.322,288,1.251,299,2.086,390,4.114,462,0.913,492,0.86,496,0.726,537,1.009,539,3.758,547,2.719,594,1.622,608,1.41,622,2.172,685,3.496,687,0.908,732,1.742,744,1.767,831,4.23,834,2.236,836,1.587,837,1.582,844,1.565,872,1.78,1002,1.684,1003,4.167,1005,4.478,1007,5.08,1009,4.845,1012,4.519,1013,2.278,1020,1.493,1032,4.141,1036,2.551,1058,1.718,1080,2.494,1108,2.564,1341,2.354,1517,3.372,1586,1.256,1595,1.612,1626,5.08,1627,2.354,1963,1.071,1964,1.793,1965,1.061,2017,1.882,2018,1.916,2022,1.933,2032,4.141,3356,5.653,3815,2.615,4101,5.508,4103,3.004,4202,5.459,4204,5.552,4207,3.966,4208,4.363,4230,2.615,4232,6.167,4239,3.004,4286,3.004,4429,4.876,5414,3.436,5415,3.436,5416,3.176,5417,3.176,5418,3.176,5419,3.176,5420,3.176,5421,3.176,5422,3.176,5423,3.176,5424,2.876,5425,3.176,5426,3.176,5427,2.876,5428,3.176,5429,3.176,5430,3.176,5431,3.436,5432,3.436,5433,7.042,5434,5.893,5435,6.507,5436,2.773,5437,3.436,5438,3.436,5439,3.436,5440,3.004,5441,3.436,5442,3.436]],["t/2418",[2,0.984,36,1.464,37,1.282,38,1.628,40,2.285,43,2.284,57,0.557,84,1.74,91,1.221,97,1.202,123,0.546,133,0.981,157,1.991,166,2.186,178,1.226,182,1.417,184,1.034,207,0.756,265,2.103,281,2.017,282,1.862,288,1.109,299,1.878,335,1.373,390,3.878,414,0.918,462,1.286,492,0.724,496,0.611,504,1.319,537,1.421,539,3.383,546,0.747,547,2.41,594,1.365,622,1.126,635,2.17,685,3.098,687,0.764,709,1.436,732,3.163,744,1.487,831,3.808,834,2.013,836,1.377,837,1.373,844,1.358,872,1.498,962,1.264,966,1.341,973,2.421,1002,1.417,1003,3.751,1005,4.032,1007,4.573,1009,4.361,1012,4.068,1013,1.918,1032,3.593,1036,2.147,1037,4.05,1058,1.446,1080,2.1,1086,1.311,1087,1.456,1098,3.593,1108,2.272,1138,2.996,1341,1.982,1586,1.057,1595,2.271,1626,4.573,1627,1.982,1803,1.311,1963,0.901,1964,1.51,1965,0.893,1966,1.436,1967,1.427,2017,1.585,2018,1.613,2022,1.628,2032,3.593,3356,5.089,3697,2.421,3815,2.201,4101,4.881,4103,2.529,4202,4.915,4204,4.998,4207,3.441,4208,3.786,4230,2.201,4232,5.552,4239,2.529,4429,2.529,5412,3.906,5416,4.473,5417,2.673,5418,2.673,5419,2.673,5420,2.673,5421,2.673,5422,2.673,5423,2.673,5424,2.421,5425,2.673,5426,2.673,5427,2.421,5428,2.673,5429,2.673,5430,2.673,5434,5.222,5435,5.767,5440,2.529,5443,2.893,5444,2.893,5445,2.893,5446,4.231,5447,2.893,5448,2.893,5449,2.893,5450,2.893,5451,2.334,5452,2.893,5453,2.893,5454,2.893,5455,2.893,5456,2.673,5457,2.673,5458,2.893,5459,2.893]],["t/2420",[0,0.202,23,0.814,36,1.299,37,2.41,40,2.384,57,0.473,84,1.727,91,1.063,97,1.047,133,0.833,157,2.071,158,1.522,160,1.246,161,0.819,166,0.737,182,1.204,184,1.979,187,1.371,188,2.732,207,0.643,265,1.833,281,1.375,288,1.167,299,1.69,313,1.383,328,1.068,335,1.167,349,1.335,376,1.541,390,3.514,414,0.781,424,2.68,462,1.12,482,2.418,492,0.615,496,0.519,504,1.121,537,1.238,546,0.635,547,0.949,571,1.923,594,1.16,622,0.957,635,1.891,685,2.749,687,0.65,709,1.221,804,1.606,834,1.811,836,1.199,837,1.196,844,1.183,846,3.26,951,2.61,962,2.868,966,1.14,1002,3.216,1012,4.494,1018,1.264,1084,1.324,1086,1.114,1087,1.237,1108,1.535,1311,2.889,1408,2.29,1413,1.784,1458,3.507,1586,0.898,1595,3.466,1621,2.695,1624,6.746,1625,4.213,1626,5.053,1627,1.684,1628,3.008,1630,3.24,1700,1.656,1803,1.114,1951,1.923,1963,0.766,1965,0.759,1966,1.221,1967,1.212,2017,1.347,2018,1.371,2022,1.383,2054,1.63,2059,3.347,4327,3.686,5460,2.458,5461,2.458,5462,6.565,5463,5.537,5464,4.217,5465,2.458,5466,4.217,5467,4.217,5468,2.458,5469,2.458,5470,2.458,5471,2.458,5472,4.217,5473,2.458,5474,2.458,5475,2.458,5476,2.458,5477,2.458,5478,6.565,5479,2.458,5480,2.272,5481,2.272,5482,2.272,5483,2.272,5484,5.117,5485,4.217,5486,2.458,5487,2.458,5488,2.458,5489,2.458,5490,2.458,5491,2.458,5492,2.458,5493,2.458,5494,2.458,5495,2.458,5496,2.458,5497,2.458]],["t/2422",[36,1.345,40,2.295,57,1.104,84,1.772,91,2.085,97,2.054,123,1.56,157,2.387,166,2.905,182,2.81,183,3.55,184,2.05,281,2.054,288,1.723,299,2.732,390,3.923,462,1.524,492,1.435,496,1.212,537,1.683,594,2.707,608,2.353,685,4.814,687,1.516,834,2.928,836,2.352,837,2.345,844,2.319,966,2.659,1020,2.493,1058,4.133,1517,4.999,1586,2.096,1595,3.879,1803,2.6,1963,1.787,1965,1.771,2017,3.142,2018,3.198,2022,3.227,4101,6.468,5436,4.629,5498,5.735,5499,5.735,5500,5.3,5501,5.735,5502,5.735]],["t/2424",[36,1.236,40,2.238,57,1.014,84,1.665,91,1.96,97,1.93,123,1.466,133,1.785,157,2.397,166,3.257,182,2.581,183,3.261,184,1.883,207,1.377,265,3.377,281,2.293,288,1.641,299,2.624,335,2.501,414,1.672,462,2.064,492,1.318,496,1.113,504,2.401,537,2.71,546,1.359,594,2.486,635,3.485,685,4.585,687,1.392,709,2.615,834,2.812,836,2.21,837,2.204,844,2.18,962,2.301,966,3.603,1058,3.884,1086,2.388,1087,2.651,1519,5.913,1586,1.925,1595,2.471,1803,3.523,1963,1.641,1965,1.626,1966,2.615,1967,2.598,2017,2.885,2018,2.937,2022,2.964,4101,6.079,4577,4.408,5451,4.251,5503,5.267,5504,5.267,5505,4.868,5506,5.267,5507,5.267]],["t/2426",[2,1.694,15,5.689,37,2.628,40,2.217,56,0.738,57,0.959,91,1.88,97,1.851,123,1.406,133,1.688,157,1.82,160,3.778,161,2.978,166,1.492,182,2.44,184,1.78,190,3.223,207,1.302,265,3.24,281,2.219,288,1.763,299,2.553,335,2.365,390,1.841,414,1.581,462,1.98,492,1.246,496,1.052,504,2.27,537,2.622,546,1.924,594,2.35,608,2.043,624,3.355,635,4.006,685,4.435,687,1.316,709,2.473,777,2.619,834,2.736,836,2.12,837,2.114,844,2.091,962,2.176,966,2.309,1086,3.379,1087,2.507,1517,4.506,1586,1.82,1621,2.424,1803,2.258,1963,1.552,1965,1.538,1966,2.473,1967,2.456,2017,2.728,2018,2.777,2022,2.802,2041,6.889,4137,4.603,5353,4.354,5412,6.016,5508,4.98,5509,8.934]],["t/2428",[36,2.156,37,1.765,40,2.258,57,0.827,64,1.349,65,1.843,84,0.921,91,2.508,97,2.283,99,2.795,123,0.811,157,0.875,169,2.584,188,1.457,281,2.47,288,1.45,299,2.92,328,2.895,341,2.396,390,2.463,398,1.347,462,1.142,488,5.92,492,1.076,496,0.908,537,1.955,622,2.594,637,2.694,687,1.136,820,3.983,832,2.541,834,1.838,836,1.222,837,1.219,844,2.578,846,4.056,962,2.91,1108,2.426,1586,1.571,1621,3.243,1628,3.619,1630,3.898,1802,2.811,1963,1.339,1965,1.327,2046,5.496,2048,3.119,2050,3.362,2051,3.972,2054,4.417,2059,4.027,2103,4.737,3024,5.07,3025,5.377,3043,3.972,5510,6.157,5511,6.157,5512,4.298,5513,4.298,5514,4.298,5515,4.298,5516,4.298,5517,4.298,5518,4.298,5519,4.298,5520,4.298,5521,4.298,5522,3.972,5523,4.298,5524,4.298,5525,4.298]],["t/2430",[0,0.61,36,1.743,37,1.968,40,2.197,57,0.954,65,2.055,83,2.211,91,2.247,97,1.845,99,1.974,120,1.169,123,1.402,188,3.593,202,2.445,207,1.296,225,1.468,226,1.716,227,1.008,281,1.845,282,1.907,288,1.583,299,2.293,328,3.229,398,1.554,411,1.067,462,1.317,488,5.531,492,1.241,496,1.048,537,1.455,546,1.28,549,2.764,622,2.893,687,1.31,714,3.34,834,2.05,836,1.41,837,1.406,844,2.084,846,4.367,958,3.878,962,3.245,1108,3.244,1586,1.812,1621,3.616,1628,4.035,1630,4.347,1733,3.34,1802,3.135,1806,3.458,1963,1.545,1965,1.531,2050,3.878,2054,4.926,2059,4.491,2063,5.392,2064,3.032,2069,3.458,2103,3.525,3025,5.995,3045,3.599,5526,4.958,5527,4.958,5528,4.582,5529,4.582,5530,4.582,5531,6.865,5532,4.582,5533,4.582,5534,4.582,5535,4.582]],["t/2432",[0,0.413,2,2.193,36,1.18,37,2.74,40,2.328,56,0.449,57,0.583,58,0.758,83,1.351,84,1.382,90,1.099,91,1.268,97,1.249,110,1.231,120,0.714,123,0.571,157,1.024,182,1.484,184,1.082,188,3.227,189,1.009,209,1.358,225,0.897,226,1.048,227,1.31,231,0.838,281,1.249,282,1.165,288,1.838,299,1.933,321,1.199,328,2.185,365,1.205,390,2.384,398,0.95,411,1.083,423,1.772,430,1.831,462,0.805,486,4.344,488,2.624,492,0.758,496,0.64,546,1.298,547,1.942,549,1.688,594,1.429,622,1.958,635,1.358,666,1.38,667,1.978,685,3.201,687,0.8,714,2.04,834,2.071,836,1.43,837,1.426,844,1.41,846,3.314,958,3.933,962,2.197,1043,3.898,1046,1.396,1058,1.514,1084,1.631,1108,3.033,1133,2.008,1361,2.153,1383,2.304,1458,4.012,1586,1.107,1621,2.448,1628,2.731,1630,2.942,1733,2.04,1802,2.122,1806,2.112,1876,1.631,1963,0.944,1965,0.935,1967,1.494,2017,1.659,2018,1.688,2022,1.704,2054,3.334,2059,6.446,2064,1.852,2069,3.507,2070,2.534,2104,3.445,3025,4.058,3045,2.198,5013,2.799,5014,2.799,5522,2.799,5528,2.799,5529,2.799,5530,2.799,5531,6.939,5532,4.647,5533,2.799,5534,2.799,5535,2.799,5536,3.028,5537,2.799,5538,3.028,5539,5.029,5540,5.029,5541,7.508,5542,7.508,5543,3.028,5544,3.028,5545,3.028,5546,3.028,5547,3.028,5548,3.028,5549,3.028,5550,3.028,5551,3.028]],["t/2434",[36,2.387,40,2.252,57,1.205,91,2.219,97,2.185,123,1.181,157,1.792,281,2.185,288,1.809,299,2.62,390,3.762,462,1.663,492,1.566,496,1.323,537,1.837,608,2.568,687,1.654,732,4.46,733,5.097,831,3.267,834,2.428,836,1.78,837,1.775,844,2.468,1003,3.218,1020,2.72,1108,3.204,1586,2.287,1963,1.95,1965,1.932,2026,5.051,3356,4.365,4155,5.471,4296,5.471,4297,5.471,4298,5.471,4299,5.471,4304,5.471,5424,5.238,5427,5.238,5552,6.259,5553,6.259,5554,5.471,5555,5.784,5556,5.784,5557,5.784,5558,5.784,5559,5.784,5560,5.784,5561,5.784,5562,5.784]],["t/2436",[36,2.268,40,2.164,57,1.098,91,2.077,97,2.046,123,1.076,133,1.934,157,1.969,166,1.709,207,1.492,265,3.58,281,2.401,288,1.718,299,2.489,335,2.709,390,2.109,414,1.811,462,2.188,492,1.428,496,1.206,504,2.601,537,2.418,546,1.473,635,3.694,687,1.508,709,2.833,732,4.175,733,4.771,831,2.978,834,2.273,836,1.623,837,1.618,844,2.311,962,2.492,966,2.646,1003,2.934,1086,2.587,1087,2.872,1108,2.999,1586,2.085,1803,2.587,1963,1.778,1965,1.762,1966,2.833,1967,2.814,2026,4.605,3356,3.979,4156,4.988,4296,4.988,4297,4.988,4298,4.988,4299,4.988,4304,4.988,5424,4.775,5427,4.775,5555,5.273,5556,5.273,5557,5.273,5558,5.273,5559,5.273,5560,5.273,5561,5.273,5562,5.273,5563,5.706,5564,5.706,5565,5.273]],["t/2438",[0,0.288,2,3.452,7,1.414,9,2.557,14,1.959,15,1.793,36,1.677,37,1.894,40,2.11,43,3.374,57,0.676,59,1.043,68,0.919,84,0.753,91,1.432,92,4.755,97,1.411,104,1.137,107,1.602,110,1.428,121,0.884,122,1.319,123,0.663,130,2.015,133,1.191,157,1.672,161,1.171,166,1.702,207,0.919,215,1.212,265,2.468,281,1.775,288,0.624,299,1.84,335,1.668,390,2.643,395,2.035,398,2.574,414,1.115,430,2.124,462,1.509,492,0.879,496,0.742,504,1.602,527,2.124,535,3.226,536,3.257,537,3.429,539,2.633,546,2.326,608,3.369,635,3.206,687,0.928,709,1.744,712,3.633,777,1.848,779,2.45,782,1.834,834,1.567,836,0.999,837,0.997,844,1.593,846,2.507,925,2.748,962,1.535,966,1.629,1020,3.107,1025,2.82,1086,1.593,1087,1.768,1108,2.989,1586,1.284,1621,1.71,1802,3.464,1803,1.593,1807,2.94,1963,1.095,1965,1.085,1966,1.744,1967,1.733,2026,2.835,2347,2.262,2530,4.965,2783,3.071,3061,2.94,4138,3.247,4202,2.367,5178,5.248,5566,7.149,5567,3.513,5568,3.513,5569,3.513,5570,7.149,5571,3.513,5572,5.679,5573,5.679,5574,3.513,5575,5.679,5576,7.149,5577,3.513,5578,3.513,5579,3.513,5580,3.513,5581,3.513,5582,3.513,5583,3.513,5584,3.513,5585,3.513,5586,3.513,5587,3.513,5588,3.513]],["t/2440",[2,1.613,37,2.298,38,4.043,40,2.215,57,0.913,91,1.812,97,1.785,123,1.356,133,1.608,157,1.767,166,1.421,182,2.324,184,1.695,207,1.24,265,3.123,281,2.154,288,1.542,299,2.491,335,2.252,390,1.754,414,1.506,462,1.909,492,1.187,496,1.002,504,2.162,537,3.052,546,2.239,549,2.645,550,3.098,566,2.645,578,3.61,594,2.239,608,1.946,628,2.868,635,3.89,685,4.307,687,1.254,709,2.355,712,4.409,777,2.495,834,2.67,836,2.044,837,2.038,844,2.016,846,2.094,962,2.072,966,2.199,1008,4.693,1086,2.15,1087,2.387,1458,3.839,1517,5.244,1586,1.734,1621,2.309,1803,3.258,1804,6.88,1963,1.478,1965,1.465,1966,2.355,1967,2.339,2017,2.599,2018,2.645,2022,2.669,2026,3.828,4139,4.384,5412,5.799,5589,4.744,5590,4.744,5591,4.744,5592,7.186,5593,7.186]],["t/2442",[36,1.592,40,2.331,57,0.847,84,2.155,91,1.711,97,1.685,123,0.83,157,2.164,178,1.866,182,2.156,184,1.573,281,1.685,288,1.472,299,2.396,390,4.226,424,1.596,462,1.169,492,1.101,496,0.93,531,2.454,537,1.992,539,2.041,546,1.136,547,2.621,594,2.077,608,1.806,685,4.112,687,1.163,774,2.631,834,2.568,836,1.93,837,1.925,844,1.903,846,1.942,962,1.922,966,2.041,996,2.661,1020,1.913,1046,2.029,1108,2.471,1458,4.425,1586,1.608,1592,2.297,1595,2.065,1621,2.142,1630,2.575,1700,5.579,1800,2.965,1801,3.07,1803,1.995,1804,4.825,1963,1.371,1965,1.359,2017,2.411,2018,2.454,2022,2.476,3017,3.267,3474,3.847,4323,4.067,5436,5.476,5554,5.932,5594,4.401,5595,4.067,5596,4.067,5597,4.067,5598,4.067,5599,4.067,5600,4.067,5601,4.067,5602,4.067,5603,4.067,5604,4.067,5605,7.239,5606,6.271,5607,3.683,5608,4.067,5609,3.847]],["t/2444",[36,1.495,40,2.259,57,0.781,62,1.963,65,1.123,84,2.303,87,2.263,91,1.607,97,1.583,123,0.766,133,1.376,157,2.266,166,1.909,178,1.721,182,1.989,184,1.451,207,1.061,265,2.769,281,2.213,288,1.398,294,2.946,299,2.294,335,1.927,390,3.799,414,1.289,424,1.472,462,1.693,492,1.016,496,0.858,504,1.85,531,2.263,537,2.309,539,1.882,546,1.645,547,2.461,594,1.916,635,2.857,685,3.905,687,1.073,709,2.015,774,2.426,834,2.458,836,1.812,837,1.807,844,1.787,846,1.791,962,2.783,966,1.882,996,2.454,1046,1.871,1086,1.84,1087,2.043,1108,2.32,1458,4.203,1586,1.484,1592,2.118,1595,1.904,1621,1.976,1630,2.375,1700,5.299,1800,2.734,1801,2.831,1803,1.84,1804,4.53,1963,1.265,1965,1.253,1966,2.015,1967,2.002,2017,2.224,2018,2.263,2022,2.284,3017,3.013,3123,3.276,3474,3.548,4133,3.548,5359,3.751,5451,3.276,5554,3.548,5595,3.751,5596,3.751,5597,3.751,5598,3.751,5599,3.751,5600,3.751,5601,3.751,5602,3.751,5603,3.751,5604,3.751,5605,3.548,5606,5.889,5607,3.397,5608,3.751,5609,3.548,5610,6.372,5611,4.059,5612,4.059,5613,4.059]],["t/2446",[36,0.989,37,2.766,38,3.693,40,2.326,49,3.059,57,0.811,84,2.335,91,1.655,97,1.63,123,0.795,157,1.337,178,1.787,182,2.065,184,1.507,281,1.63,288,1.432,299,2.341,390,4.166,424,3.299,462,1.12,492,1.055,496,0.891,531,5.071,537,1.237,539,4.217,546,2.347,594,1.989,608,1.729,685,4.001,687,1.114,774,2.52,775,2.714,834,2.509,836,1.867,837,1.861,844,1.841,846,1.86,962,1.841,996,2.548,1002,2.065,1018,2.167,1020,1.832,1108,2.389,1408,4.377,1517,3.967,1586,1.541,1592,2.2,1595,1.977,1621,2.052,1625,3.207,1630,2.466,1703,3.685,1800,2.839,1801,2.94,1963,1.313,1965,1.301,2017,2.309,2018,2.35,2022,2.372,3017,3.129,3493,3.059,4273,3.895,4276,3.685,4277,3.895,4278,3.895,5404,3.895,5607,3.527,5614,4.215,5615,6.563,5616,4.215,5617,4.215,5618,4.215,5619,4.215,5620,4.215,5621,6.065,5622,8.059,5623,4.215]],["t/2448",[0,0.618,2,3.396,36,1.767,37,2.646,38,2.841,40,2.238,57,0.972,84,1.93,91,1.899,97,1.87,123,1.421,133,1.712,157,1.835,166,2.698,182,2.474,184,1.805,265,3.914,281,1.87,288,1.601,299,2.57,335,2.397,390,1.867,462,2.001,492,1.264,496,1.067,504,2.302,527,4.553,537,2.931,539,2.341,552,4.075,594,2.383,608,2.072,635,3.377,685,4.472,687,1.334,709,2.507,777,2.655,834,2.755,836,2.142,837,2.136,844,2.112,874,2.635,941,2.615,962,2.206,966,3.492,1002,2.474,1086,2.289,1087,2.541,1586,1.845,1621,2.458,1803,3.414,1963,1.573,1965,1.559,1966,3.739,1967,2.49,2017,2.766,2018,2.815,2022,2.841,4101,5.891,5412,4.075,5624,5.049,5625,5.049,5626,5.049]],["t/2450",[13,2.881,36,0.908,37,2.508,38,2.179,40,2.326,49,2.811,54,2.947,57,0.746,84,2.261,91,1.548,97,1.525,104,1.253,120,0.913,157,1.251,182,1.898,184,1.384,188,2.586,265,1.683,281,1.525,288,1.356,299,2.235,390,3.901,424,2.767,430,2.341,462,1.029,482,5.428,492,0.969,496,0.818,537,1.137,547,1.496,594,1.828,608,1.589,685,3.788,687,1.023,834,2.395,836,1.747,837,1.742,844,1.722,846,1.709,962,1.692,1002,3.738,1012,4.84,1020,1.683,1108,2.236,1311,2.653,1408,2.104,1458,4.076,1502,3.755,1503,3.423,1517,2.341,1586,1.415,1595,3.579,1617,3.125,1621,1.885,1622,3.385,1623,3.241,1624,7.265,1625,4.672,1626,5.442,1627,4.207,1628,2.104,1629,3.579,1630,2.266,1963,1.207,1965,1.196,2017,2.122,2018,2.159,2022,2.179,2059,2.341,3493,5.537,4276,3.385,4327,5.368,5480,3.579,5481,3.579,5482,3.579,5483,3.579,5484,5.674,5605,3.385,5607,3.241,5609,6.669,5621,5.674,5627,3.873,5628,3.873]],["t/2452",[36,1.413,40,2.215,44,2.956,57,0.728,84,0.81,91,1.519,97,1.496,123,0.713,157,1.905,166,2.565,182,1.852,184,1.351,207,0.988,235,1.2,281,1.496,288,1.334,299,2.204,390,3.684,447,1.916,462,1.004,492,0.946,496,0.799,537,1.768,539,3.97,547,2.899,594,1.784,608,1.551,685,3.727,687,0.999,732,1.916,744,1.943,831,4.469,834,2.362,836,1.713,837,1.708,844,1.689,846,1.668,1002,1.852,1003,4.403,1005,4.732,1007,5.368,1009,5.119,1012,4.774,1013,2.506,1020,1.643,1032,2.806,1036,2.806,1080,2.743,1108,2.193,1192,3.05,1341,5.866,1458,3.218,1586,1.381,1626,5.368,1627,2.589,1963,1.178,1965,1.167,2017,2.07,2018,2.107,2022,2.127,2032,4.471,3356,5.972,4202,5.768,4204,5.866,4230,2.876,4232,6.516,5436,3.05,5440,3.304,5446,5.264,5456,3.493,5629,3.493,5630,3.78,5631,3.493,5632,3.78,5633,6.022,5634,3.78,5635,3.493,5636,3.493,5637,3.78,5638,3.78,5639,3.78,5640,3.493,5641,3.78,5642,3.78,5643,3.78,5644,3.78,5645,3.78,5646,3.493,5647,3.78,5648,3.78,5649,3.78,5650,3.78,5651,3.78,5652,3.78,5653,3.78,5654,3.78,5655,3.78]],["t/2454",[36,1.453,40,2.202,57,0.753,84,0.839,91,1.562,97,1.538,123,0.738,133,1.327,157,1.938,166,2.85,182,1.918,184,1.399,207,1.619,235,1.243,265,2.691,281,1.908,288,1.365,299,2.248,335,1.858,390,2.84,414,1.243,462,1.645,492,0.98,496,0.827,504,1.784,537,2.255,539,3.562,546,1.01,547,2.391,594,1.847,635,2.777,685,3.814,687,1.034,709,1.943,732,1.984,744,2.013,831,4.009,834,2.409,836,1.761,837,1.756,844,1.737,846,1.728,962,1.71,966,1.815,1003,3.95,1005,4.245,1007,4.816,1009,4.592,1012,4.283,1013,2.595,1086,1.774,1087,1.97,1108,2.255,1192,3.159,1341,5.983,1458,3.308,1586,1.431,1595,1.836,1626,4.816,1803,1.774,1963,1.22,1965,1.209,1966,1.943,1967,1.93,2017,2.144,2018,2.182,2022,2.202,3356,5.358,4202,5.175,4204,5.263,4230,2.979,4232,5.846,5446,5.413,5451,3.159,5457,3.617,5565,3.617,5629,3.617,5631,3.617,5635,3.617,5636,3.617,5640,3.617,5646,3.617,5656,3.914,5657,3.914,5658,3.914,5659,3.914,5660,3.914,5661,3.914,5662,3.914,5663,3.914,5664,3.914,5665,3.914,5666,3.914,5667,3.914,5668,3.914,5669,3.914,5670,3.914,5671,3.914,5672,3.914,5673,3.914]],["t/2456",[36,1.969,40,2.302,48,2.253,57,1.128,91,2.117,97,2.085,123,1.105,157,2.476,166,2.515,182,2.87,184,2.094,281,2.085,288,1.744,299,2.759,390,3.104,462,1.556,492,1.466,496,1.238,537,2.464,594,2.764,608,2.403,685,4.872,687,1.548,834,2.957,836,2.388,837,2.381,844,2.355,846,2.585,966,2.716,1020,2.546,1058,2.928,1341,5.752,1413,4.252,1586,2.141,1803,2.656,1963,1.825,1965,1.809,2017,3.209,2018,3.266,2022,3.296,5434,7.026,5436,4.727,5500,5.413,5674,5.858,5675,5.858,5676,5.858,5677,5.858]],["t/2458",[36,1.856,40,2.247,57,1.039,91,1.995,97,1.965,123,1.493,133,1.829,157,2.337,166,3.09,182,2.644,184,1.929,207,1.411,265,3.438,281,2.326,288,1.665,299,2.655,335,2.562,414,1.713,462,2.102,492,1.351,496,1.14,504,2.46,537,2.749,546,1.393,547,2.084,594,2.547,635,3.548,685,4.65,687,1.426,709,2.679,834,2.845,836,2.25,837,2.244,844,2.219,962,2.357,966,3.668,1002,2.644,1058,2.698,1086,2.447,1087,2.716,1341,5.42,1586,1.972,1803,3.586,1963,1.682,1965,1.666,1966,2.679,1967,2.662,2017,2.956,2018,3.009,2022,3.037,5434,6.62,5451,4.355,5505,4.987,5678,5.397,5679,5.397,5680,5.397,5681,5.397]],["t/2460",[0,0.476,7,1.443,36,1.954,40,2.1,57,1.116,65,2.305,81,2.731,91,2.101,97,2.069,157,1.987,166,1.737,260,4.471,281,2.069,288,1.03,299,2.511,390,4.176,391,4.98,442,4.207,462,1.54,492,1.451,496,1.225,537,3.316,608,4.002,687,1.532,715,2.613,831,3.025,834,2.299,836,1.649,837,1.644,844,2.337,948,5.811,961,3.148,962,2.532,966,2.687,1008,3.786,1020,4.239,1086,2.628,1459,5.649,1586,2.118,1802,3.516,1803,2.628,1963,1.806,1965,1.789,2324,8.163,2350,5.356,4158,5.356,4159,7.7,5682,5.796,5683,5.796,5684,5.796,5685,5.796,5686,5.796]],["t/2462",[36,1.771,40,1.694,57,1.454,65,2.767,91,1.904,97,1.875,120,1.78,121,1.175,166,2.997,281,2.786,288,1.342,299,2.887,390,3.698,462,2.006,492,1.89,496,1.596,537,2.216,548,3.585,565,5.433,687,1.995,715,3.405,834,2.76,836,2.148,837,2.142,844,2.118,1177,4.901,1219,4.289,1963,2.353,1965,2.331,3229,6.601,3813,6.319,4153,5.907,4493,8.744,5687,7.551,5688,10.003,5689,7.551]],["t/2464",[36,2.336,40,2.099,47,5.502,57,1.444,65,2.755,84,1.607,91,2.511,97,2.473,104,2.427,157,1.528,260,3.438,281,2.473,288,1.333,299,2.878,322,5.707,462,1.992,492,1.877,496,1.585,546,1.936,687,1.982,715,3.381,834,2.747,836,2.133,837,2.127,844,2.793,1086,3.4,1178,4.642,1209,3.828,1586,2.741,1845,4.701,1963,2.337,1965,2.315,3098,5.866,5407,6.931,5690,7.5,5691,7.5]],["t/2466",[6,1.336,40,2.053,56,1.04,57,1.351,65,2.635,91,2.402,97,2.366,157,1.94,171,3.535,204,3.781,215,3.729,225,2.079,231,1.942,246,5.491,261,4.345,281,1.743,282,2.7,288,1.248,299,2.783,312,2.556,436,6.049,462,1.865,492,2.384,496,1.483,548,5.133,585,3.583,687,1.855,715,3.165,834,2.628,836,1.997,837,1.991,844,2.672,1517,5.758,1586,2.566,1963,2.187,1964,3.664,1965,2.167,3361,6.487,4154,6.487,5692,7.02]],["t/2468",[0,0.616,36,2.336,40,2.099,57,1.444,65,2.755,91,2.819,97,2.473,99,1.992,157,2.028,171,3.695,281,1.863,288,1.333,299,2.878,390,2.772,462,1.992,488,5.197,492,1.877,496,1.585,537,2.201,549,4.181,687,1.982,715,3.381,834,2.747,836,2.133,837,2.127,844,2.793,1586,2.741,1963,2.337,1965,2.315,2046,5.052,2048,5.444,5510,6.931,5693,7.5,5694,7.5]],["t/2470",[0,0.734,36,2.098,40,2.113,57,1.233,65,2.474,91,2.598,97,2.221,99,2.376,188,3.493,207,1.675,227,1.817,281,1.591,288,1.138,299,2.652,407,5.47,411,1.379,462,1.702,486,6.024,488,6.343,492,1.603,496,1.353,537,1.88,635,4.01,687,1.693,834,2.467,836,1.822,837,1.817,844,2.508,1108,3.752,1586,2.341,1963,1.996,1965,1.978,1967,3.159,2046,4.315,2048,4.649,2059,3.872,2063,4.649,2070,5.36,2103,4.554,2104,6.127,3997,5.919,5537,5.919,5695,6.405,5696,6.405]],["t/2472",[0,0.607,36,2.315,40,2.09,57,1.424,65,2.73,84,2.114,91,2.8,97,2.451,99,1.965,171,3.662,265,4.289,281,1.838,288,1.315,299,2.858,390,2.735,462,1.965,488,5.15,492,1.852,496,1.563,537,2.172,549,4.125,687,1.955,715,3.336,834,2.722,836,2.104,837,2.099,844,2.768,1586,2.704,1963,2.305,1965,2.284,2046,4.984,2048,5.37,5511,6.837,5697,7.399,5698,7.399]],["t/2474",[3,3.483,36,2.141,40,2.273,57,1.27,91,2.302,97,2.267,182,3.233,184,2.358,213,4.161,260,3.024,281,2.267,288,1.86,299,2.908,316,4.729,462,1.753,492,1.651,496,1.394,537,1.937,594,3.114,685,5.197,687,1.743,715,2.975,834,3.116,836,2.597,837,2.589,844,2.561,1586,2.411,1963,2.056,1965,2.037,2017,3.614,2018,3.678,2022,3.712,3122,5.767,5699,6.598,5700,6.598,5701,6.598,5702,10.468]],["t/2476",[0,0.784,8,1.2,9,1.311,23,1.531,36,1.653,40,2.145,56,0.685,57,0.89,58,1.157,61,2.343,64,0.765,84,2.681,91,1.777,97,1.75,99,2.269,104,1.496,141,3.453,161,2.846,182,2.265,184,1.653,207,1.209,223,5.378,227,0.94,231,1.279,251,1.88,281,1.148,288,1.697,296,2.764,299,2.459,390,1.709,406,3.992,420,1.847,462,1.228,465,2.652,477,2.555,492,1.157,496,0.977,537,2.069,561,4.273,588,3.518,594,2.182,608,1.897,668,2.156,685,4.24,687,1.222,834,2.635,836,2.005,837,1.999,844,1.977,869,2.36,1020,2.009,1086,2.096,1179,2.936,1209,2.36,1220,3.287,1310,4.082,1580,3.518,1583,5.577,1586,1.69,1648,3.287,1666,2.936,1767,3.731,1819,2.828,1963,1.441,1965,1.428,1986,7.465,1987,6.513,2017,2.533,2018,2.578,2022,2.602,2252,5.363,3938,4.273,4100,6.513,5703,4.624,5704,7.047]],["t/2478",[0,0.542,36,2.141,40,2.078,57,1.27,65,2.525,91,2.849,97,2.267,215,2.275,219,3.614,222,4.602,236,3.901,281,1.639,282,2.538,288,1.173,299,2.695,462,1.753,492,1.651,496,1.394,537,3.072,548,4.334,585,3.368,608,3.746,687,1.743,764,2.912,834,2.519,836,1.877,837,1.871,844,2.561,951,4.084,1020,3.967,1086,4.138,1586,2.411,1750,5.767,1963,2.056,1964,3.443,1965,2.037,3350,5.161,3831,5.521,4146,5.521,4493,9.15,5132,5.767,5705,6.598,5706,6.598,5707,6.598,5708,6.598,5709,6.598,5710,6.598]],["t/2480",[0,0.542,23,2.184,36,1.548,40,1.546,57,1.27,65,2.525,91,1.664,92,3.821,97,1.639,100,3.443,101,4.52,157,1.344,186,2.012,219,3.614,254,6.626,281,1.639,282,2.538,288,1.173,299,2.695,390,3.375,391,5.457,442,4.789,462,1.753,496,1.394,537,3.072,539,4.233,548,3.132,549,3.678,585,3.368,608,4.295,687,1.743,764,2.912,834,2.519,836,1.877,837,1.871,844,1.851,960,5.767,1020,3.967,1963,2.056,1964,3.443,1965,2.037,2648,4.136,3350,5.161,4146,5.521,5132,7.98,5711,9.129,5712,9.129,5713,9.129,5714,9.129,5715,6.598,5716,6.598]],["t/2482",[6,1.119,7,0.913,40,2.146,57,0.706,90,1.33,91,1.482,97,1.46,107,1.034,111,1.644,121,1.434,125,2.965,143,4.826,157,1.876,166,1.761,182,1.796,184,1.31,204,6.251,206,2.456,207,0.959,245,1.845,260,2.694,281,2.441,288,1.637,299,2.166,300,3.046,317,2.867,351,2.36,404,3.594,414,1.866,436,2.328,462,0.974,479,1.82,492,0.917,496,0.775,537,2.704,546,0.946,547,1.416,585,1.871,594,1.73,622,2.865,635,1.644,685,3.652,687,0.969,715,1.653,761,4.956,834,2.322,836,1.672,837,1.667,840,4.743,844,1.648,845,6.582,846,1.618,847,7.48,849,7.205,872,3.044,910,2.661,1025,3.652,1108,2.678,1408,3.192,1458,4.496,1459,2.123,1519,4.472,1586,1.34,1595,2.757,1963,1.142,1964,1.913,1965,1.132,2017,2.008,2018,2.044,2022,2.063,2347,2.36,2505,2.79,3105,5.937,3170,3.205,3335,4.918,3447,4.178,3473,3.068,4095,3.388,5717,8.415,5718,9.211,5719,3.666,5720,3.666,5721,3.666,5722,3.666,5723,3.666,5724,3.666,5725,3.666,5726,3.666,5727,3.666,5728,3.666]],["t/2484",[36,2.225,40,1.959,57,1.343,65,2.981,81,2.287,91,2.916,97,2.355,123,1.316,173,4.491,281,1.732,282,2.683,288,1.24,299,2.774,310,4.625,312,2.54,321,2.763,462,1.853,488,6.312,492,2.373,496,1.474,537,2.047,585,3.561,687,1.843,776,3.757,834,2.617,836,1.984,837,1.978,844,2.66,1060,4.372,1403,4.699,1586,2.549,1963,2.173,1964,3.64,1965,2.154,2048,5.063,2050,5.456,2063,5.063,2131,7.654,2133,6.097,5729,6.975,5730,6.975]],["t/2486",[0,0.696,57,1.633,58,2.969,59,3.828,110,3.45,120,2.543,122,3.186,128,5.19,157,1.728,207,2.219,227,1.724,231,2.347,346,3.981,411,1.827,460,4.866,492,2.969,496,1.793,548,4.029,687,2.242,732,6.013,932,5.073,1200,5.389]],["t/2488",[0,0.587,36,2.264,40,1.98,47,3.955,57,1.378,65,2.67,91,2.434,97,2.397,163,2.677,166,2.144,225,2.119,226,2.477,227,1.454,231,1.98,281,1.778,288,1.272,299,2.811,424,3.961,462,1.901,492,1.791,496,1.512,531,3.99,537,2.101,666,4.399,687,1.891,834,2.663,836,2.036,837,2.03,844,2.707,951,5.974,1046,3.3,1090,3.654,1176,3.855,1459,6.324,1586,2.616,1963,2.23,1965,2.21,5058,6.614,5731,7.157,5732,7.157]],["t/2490",[0,0.607,36,2.315,40,2.09,57,1.424,65,2.73,91,2.488,97,2.451,157,1.507,158,4.58,260,3.392,281,1.838,288,1.973,299,2.858,462,1.965,492,1.852,496,1.563,537,2.896,549,4.125,608,3.036,687,1.955,715,3.336,834,2.722,836,2.104,837,2.099,844,2.768,1016,6.186,1025,3.673,1046,3.411,1086,3.354,1586,2.704,1963,2.305,1965,2.284,3831,6.191,5733,7.399,5734,7.399,5735,7.399]],["t/2492",[0,0.734,36,2.098,40,1.987,42,3.224,47,4.942,57,1.233,65,2.474,84,1.372,91,2.255,97,2.221,104,2.073,123,1.208,157,1.305,165,5.346,169,2.484,225,2.648,226,3.095,227,1.817,231,2.474,260,2.936,281,1.591,288,1.138,299,2.652,347,4.649,424,4.045,462,1.702,492,1.603,496,1.353,537,2.625,546,2.308,687,1.693,715,2.888,834,2.467,836,1.822,837,1.817,844,2.508,1086,2.904,1133,4.247,1176,6.007,1196,3.917,1586,2.341,1963,1.996,1965,1.978,2821,4.649,4866,5.599,4867,5.599,5219,5.599,5736,6.405]],["t/2494",[0,0.725,36,2.072,40,1.975,42,3.168,47,4.882,57,1.212,65,2.444,84,1.349,91,2.228,97,2.194,104,2.037,123,1.188,157,1.282,165,5.281,169,2.441,225,2.616,226,3.058,227,1.795,231,2.444,260,2.886,281,1.563,288,1.119,299,2.628,347,4.569,424,3.205,462,1.672,492,1.575,496,1.33,537,2.593,546,2.28,547,2.431,687,1.663,715,2.838,834,2.437,836,1.791,837,1.785,844,2.478,1002,3.084,1086,2.854,1177,4.329,1196,3.85,1209,5.65,1586,2.301,1845,6.399,1963,1.961,1965,1.944,2821,4.569,4871,5.503,4872,5.503,5737,6.295]],["t/2496",[0,0.562,2,2.328,36,2.196,37,2.827,38,3.851,40,1.943,57,1.318,65,2.59,76,4.138,91,2.361,97,2.325,100,3.572,207,1.79,231,2.59,281,1.7,282,3.601,288,1.217,299,2.747,376,4.291,414,2.173,462,1.818,492,2.343,496,1.446,509,3.572,537,2.009,548,4.445,660,2.808,687,1.809,733,6.181,834,2.583,836,1.947,837,1.941,844,2.626,1083,5.478,1178,4.237,1337,4.611,1586,2.502,1963,2.133,1964,3.572,1965,2.113,5738,6.845,5739,6.845,5740,6.845,5741,6.325]],["t/2498",[0,0.576,36,2.234,40,1.964,57,1.351,65,2.635,91,2.402,97,2.366,157,1.43,158,4.345,171,2.605,231,1.942,281,1.743,282,3.664,288,1.922,299,2.783,462,1.865,492,1.757,496,1.483,537,2.796,546,1.812,608,2.88,622,2.734,668,3.274,687,1.855,834,2.628,836,1.997,837,1.991,844,2.672,1003,3.609,1016,5.971,1020,3.051,1025,4.729,1046,3.236,1086,3.182,1586,3.481,1963,2.187,1965,2.167,3831,5.874,5742,7.02,5743,7.02,5744,9.525]],["t/2500",[0,0.728,36,2.081,40,1.879,42,3.187,47,3.499,57,1.219,65,2.454,84,1.357,91,2.237,97,2.203,104,2.049,123,1.194,157,1.29,165,5.303,225,2.627,226,3.07,227,1.803,231,3.07,260,2.902,281,1.572,282,3.412,288,1.125,299,2.636,347,4.595,424,4.238,462,1.682,492,1.584,496,1.338,537,1.858,546,2.289,687,1.673,834,2.447,836,1.801,837,1.796,844,2.488,1086,2.87,1133,4.198,1176,6.293,1196,3.872,1586,2.314,1963,1.973,1964,3.304,1965,1.955,4866,5.534,4867,5.534,5745,6.331,5746,6.331,5747,6.331]],["t/2502",[0,0.722,36,2.064,40,1.87,42,3.15,47,3.459,57,1.205,65,2.434,84,1.341,91,2.219,97,2.185,104,2.025,123,1.181,157,1.275,165,5.26,225,2.605,226,3.045,227,1.788,231,3.054,260,2.869,281,1.554,282,3.384,288,1.112,299,2.62,347,4.543,424,3.192,462,1.663,492,1.566,496,1.323,537,1.837,546,2.271,547,2.417,687,1.654,834,2.428,836,1.78,837,1.775,844,2.468,1086,2.837,1177,4.311,1196,3.828,1209,5.938,1586,2.287,1845,6.379,1963,1.95,1964,3.267,1965,1.932,4871,5.471,4872,5.471,5748,6.259,5749,6.259,5750,6.259]],["t/2504",[0,0.782,36,2.234,40,2.053,57,1.351,65,2.635,85,3.005,91,2.402,97,2.366,107,3.049,121,1.093,123,1.324,225,2.079,226,2.429,227,1.427,281,1.743,282,3.664,288,1.248,299,2.783,305,4.654,462,1.865,492,1.757,496,1.483,548,5.505,687,1.855,715,3.165,732,4.828,733,5.517,834,2.628,836,1.997,837,1.991,844,2.672,1069,3.509,1586,2.566,1963,2.187,1964,3.664,1965,2.167,4151,5.665,5741,6.487,5751,7.02]],["t/2506",[36,2.379,40,2.119,57,1.484,65,2.806,85,3.301,91,2.557,97,2.519,121,1.2,215,2.659,281,1.915,282,3.901,284,4.875,288,1.37,299,2.917,462,2.048,492,1.93,496,1.629,548,5.38,687,2.038,715,3.476,834,2.798,836,2.193,837,2.187,844,2.845,1586,2.818,1963,2.403,1964,4.024,1965,2.381,4152,6.452,5752,7.71]],["t/2508",[6,2.022,23,3.517,59,3.154,178,4.503,492,2.658,932,6.349,2167,7.277]],["t/2510",[36,1.975,40,1.819,57,1.621,65,2.97,91,2.123,97,2.091,121,1.311,281,2.667,288,1.497,299,3.043,462,2.237,496,1.779,537,2.472,687,2.225,715,3.796,834,2.962,836,2.395,837,2.388,844,2.362,916,5.098,917,4.69,1963,2.624,1965,2.6,5753,10.737,5754,8.421]],["t/2512",[6,1.986,40,1.767,57,1.55,65,2.886,86,3.454,91,2.03,97,1.999,215,3.597,261,4.983,281,1.999,282,3.096,288,1.431,299,2.979,436,6.625,462,2.139,496,1.701,585,4.109,687,2.127,715,3.629,834,2.878,836,2.29,837,2.283,844,2.258,924,6.041,1517,4.866,1963,2.508,1964,4.201,1965,2.485,5755,10.431]],["t/2514",[40,2.114,57,1.474,65,2.793,86,3.342,91,2.546,97,2.507,125,4.068,166,3.024,215,2.641,260,3.51,281,2.507,288,1.361,299,2.907,462,2.034,492,1.916,496,1.618,537,2.247,687,2.023,715,3.452,834,2.785,836,2.178,837,2.172,844,2.832,1086,3.471,1517,6.103,1586,2.798,1963,2.386,1965,2.364,2174,5.826,4206,5.684,5756,7.657]],["t/2516",[36,1.494,40,2.215,57,1.714,58,1.594,64,1.053,65,2.464,91,1.606,97,1.582,120,2.1,147,1.931,149,4.727,207,1.665,231,1.762,238,3.851,239,5.094,272,4.158,281,2.212,288,1.132,299,2.644,462,1.692,492,1.594,496,1.346,546,2.299,683,4.784,686,4.178,687,1.683,713,3.688,715,2.871,834,2.457,836,1.811,837,1.806,844,2.881,1108,2.319,1534,4.363,1963,1.984,1965,1.966,2633,4.981,2732,4.363,3075,6.919,5757,8.907]],["t/2518",[1,4.018,3,2.893,4,3.364,6,2.482,36,2.124,40,1.972,45,5.235,57,1.46,65,2.098,78,2.377,89,2.14,90,3.89,91,3.183,97,2.249,207,1.333,260,2.336,281,1.883,288,0.906,299,2.76,338,4.953,414,1.618,442,5.504,462,1.354,492,1.275,496,1.077,537,1.496,679,2.982,687,1.347,715,2.298,834,2.092,836,1.45,837,1.445,844,2.54,855,3.433,874,2.66,914,3.328,915,4.484,1495,3.081,1517,4.584,1519,3.878,1558,3.281,1586,1.862,1963,1.588,1965,1.573,2393,5.391,2911,4.113,3016,7.309,3017,3.783,3118,4.709,3119,4.709,3120,4.455,3121,6.346,3122,4.455,3127,5.932,5758,5.096,5759,5.096]],["t/2520",[0,0.73,23,2.946,57,1.713,58,3.035,59,3.883,120,2.621,207,2.327,227,1.808,256,7.284,258,4.199,411,1.916,492,3.035,496,1.88,687,2.352,932,5.319]],["t/2522",[36,2.401,40,2.051,57,1.505,65,2.832,91,2.581,97,2.542,123,1.475,148,1.466,256,6.544,281,1.942,288,1.39,299,2.938,462,2.078,492,1.957,496,1.653,537,3.005,687,2.067,834,2.824,836,2.224,837,2.218,844,2.871,951,6.336,1586,2.858,1963,2.437,1965,2.414,2008,6.544,5760,7.82,5761,7.82,5762,7.82]],["t/2524",[0,0.73,57,1.713,58,3.035,59,3.96,76,5.379,120,2.621,207,2.327,227,1.808,232,5.655,291,3.341,411,1.916,492,2.782,496,1.88,687,2.352,2719,5.442,5763,8.899]],["t/2526",[0,0.305,23,1.23,36,1.741,37,0.984,38,2.091,40,2.209,43,1.753,57,0.715,65,2.053,84,1.273,85,1.591,90,1.348,91,1.498,93,2.131,97,1.475,104,1.202,120,1.4,121,0.925,123,0.701,133,2.014,138,4.257,157,2.014,161,1.238,166,1.78,184,3.031,207,1.553,232,1.733,235,1.18,245,1.87,265,2.582,281,1.843,288,0.66,298,1.478,299,2.546,311,2.072,312,3.088,335,1.764,398,1.863,411,0.8,414,1.18,424,1.348,456,2.131,462,1.578,475,2.221,492,0.93,496,0.785,504,1.694,537,1.744,546,1.916,547,3.581,635,2.664,687,0.982,709,1.845,775,4.779,813,2.545,834,1.639,836,1.057,837,1.054,844,1.666,846,1.64,961,2.018,962,3.704,966,1.723,1001,2.329,1012,2.072,1018,1.91,1083,2.174,1086,1.684,1087,1.87,1108,2.163,1177,1.82,1420,1.82,1502,4.54,1503,4.138,1586,1.358,1592,1.939,1595,3.978,1621,3.613,1628,4.032,1634,2.998,1637,2.697,1643,5.277,1644,5.177,1646,5.806,1802,1.568,1803,1.684,1963,1.158,1965,1.147,1966,1.845,1967,1.832,2126,3.248,2127,3.248,3086,1.954,3107,2.427,5764,3.716,5765,3.716,5766,3.434,5767,3.434,5768,5.49,5769,7.423,5770,3.434,5771,5.49,5772,3.716,5773,3.716,5774,3.716,5775,3.716]],["t/2528",[0,0.316,36,0.902,38,3.436,40,2.334,48,1.479,57,0.74,65,2.101,84,1.308,90,1.395,91,1.54,97,1.517,104,1.245,123,0.726,133,2.07,138,2.205,157,1.761,161,1.282,166,2.275,184,1.374,207,1.597,218,2.381,227,1.757,232,4.682,235,1.221,245,1.936,265,2.654,281,1.886,288,1.085,298,2.429,299,2.226,311,2.144,312,3.832,335,1.826,398,1.914,411,0.828,414,1.221,424,2.215,456,2.205,462,1.622,475,2.299,492,0.962,496,0.813,504,1.753,531,2.144,537,2.229,539,1.783,546,1.96,547,1.485,635,3.405,687,1.016,709,1.909,715,1.734,834,1.685,836,1.094,837,1.091,844,1.713,846,3.352,954,2.325,962,1.68,966,1.783,1012,2.144,1018,3.14,1086,1.743,1087,1.936,1108,3.148,1177,1.884,1413,2.791,1420,2.992,1586,1.406,1592,2.007,1595,2.864,1637,2.791,1643,2.734,1644,2.682,1802,2.576,1803,1.743,1859,2.791,1963,1.198,1965,1.187,1966,1.909,1967,1.897,3086,2.023,3107,2.512,3979,4.432,3980,4.432,3982,3.362,5776,3.846,5777,6.106,5778,3.846,5779,3.846,5780,6.106,5781,3.846,5782,3.846]],["t/2530",[0,0.285,36,0.814,40,2.385,57,0.668,65,1.961,66,1.824,83,1.547,84,1.205,90,1.258,91,0.875,97,0.862,104,1.123,123,0.654,133,1.905,138,3.224,157,1.824,161,1.156,166,1.684,184,2.009,207,1.47,218,2.147,227,1.656,232,4.708,235,1.101,245,1.746,265,2.443,281,1.396,288,0.617,298,1.38,299,2.305,311,1.934,312,3.676,335,1.647,398,1.762,411,0.747,414,1.785,424,2.039,456,1.989,462,1.493,475,2.074,496,0.733,504,1.581,537,2.08,546,1.829,547,2.171,566,1.934,635,2.521,687,0.917,709,1.722,715,1.564,834,1.551,836,0.987,837,0.984,844,0.973,846,2.481,962,1.515,966,1.608,1012,3.134,1018,4.929,1086,1.573,1087,1.746,1108,2.047,1177,1.7,1345,2.903,1420,3.993,1592,2.934,1595,3.823,1637,4.08,1643,3.997,1644,3.921,1802,2.372,1803,1.573,1859,2.518,1963,1.081,1965,1.071,1966,1.722,1967,1.711,2019,4.277,3086,1.824,3107,2.266,3979,5.144,3980,5.144,5783,3.469,5784,3.469,5785,5.621,5786,5.621,5787,5.621]],["t/2532",[0,0.52,36,0.945,38,4.405,40,2.257,48,2.437,57,0.776,58,1.008,65,2.166,84,0.863,90,1.462,91,1.598,97,1.573,121,0.986,123,0.76,133,1.366,138,3.633,157,1.595,161,1.343,166,1.898,184,2.264,207,1.054,227,1.287,232,3.651,235,1.279,245,2.028,281,1.573,288,0.716,298,1.603,299,2.484,311,2.247,312,3.73,398,1.263,411,1.364,424,2.298,456,2.311,462,1.07,475,2.409,486,2.714,488,4.086,492,1.008,496,0.851,546,1.635,547,3.023,666,1.837,668,1.879,687,1.065,775,2.594,813,2.76,834,1.748,836,1.146,837,1.143,844,1.777,846,2.796,962,2.767,1002,1.974,1012,3.532,1018,2.072,1043,2.436,1058,2.014,1100,2.991,1108,3.231,1133,2.672,1153,2.383,1177,1.974,1420,3.104,1586,1.473,1592,3.306,1621,3.084,1628,3.441,1636,5.855,1637,4.598,1643,4.504,1644,4.419,1646,4.955,1802,1.7,1876,2.17,1963,1.256,1965,1.244,1975,3.372,2104,2.76,2911,3.252,2926,2.714,3086,2.119,3107,2.632,3985,5.113,4320,3.724,5766,3.724,5767,3.724,5768,3.724,5770,3.724,5771,3.724,5788,4.029,5789,4.029,5790,4.029,5791,4.029,5792,4.029,5793,4.029,5794,4.029,5795,4.029,5796,4.029,5797,4.029]],["t/2534",[0,0.394,36,1.702,40,2.329,48,1.848,57,0.925,65,2.419,84,2.087,90,1.743,91,1.83,97,1.802,121,1.13,133,1.629,138,2.756,157,1.478,161,1.602,166,1.44,184,1.718,207,1.257,232,3.385,235,2.304,245,2.419,281,1.802,288,0.854,299,2.508,311,2.679,312,3.807,390,1.777,398,1.507,411,1.035,424,1.743,456,2.756,462,1.277,475,2.873,492,1.203,496,1.016,537,1.411,546,1.24,547,2.803,687,1.27,813,3.292,834,2.002,836,1.367,837,1.363,844,2.036,846,3.203,962,2.099,1012,2.679,1108,2.642,1177,2.355,1413,3.488,1420,2.355,1458,2.568,1586,1.756,1592,2.508,1621,2.339,1628,2.61,1637,3.488,1643,3.417,1644,3.352,1646,3.759,1802,3.062,1804,5.16,1963,1.498,1965,1.484,2016,3.657,3086,2.527,3107,3.139,3986,4.201,5798,4.806,5799,4.806,5800,7.257,5801,4.441,5802,4.806,5803,4.806,5804,4.806,5805,4.806,5806,4.806,5807,4.806]],["t/2536",[0,0.403,36,1.731,40,2.268,57,0.946,65,2.451,84,1.899,90,1.782,91,1.861,97,1.833,104,1.59,123,0.927,133,1.666,138,2.818,157,1.503,161,1.638,166,1.472,184,1.756,202,2.423,207,1.285,218,3.042,227,2.002,232,5.364,235,2.343,245,2.473,281,1.833,288,1.575,299,2.536,311,2.739,312,4.037,398,2.314,411,1.058,456,2.818,462,1.305,475,2.937,492,1.23,496,1.038,537,2.166,547,1.898,687,1.298,715,2.215,834,2.036,836,1.398,837,1.394,844,2.07,846,2.169,974,2.407,1012,2.739,1018,3.794,1108,2.687,1177,2.407,1420,3.615,1583,3.209,1586,1.796,1595,3.462,1643,3.493,1644,3.427,1802,3.114,1859,3.566,1963,1.531,1965,1.517,2654,4.112,3086,2.584,3107,3.209,3979,5.356,3980,5.356,3984,4.295,5801,4.541,5808,4.914,5809,4.914]],["t/2538",[0,0.307,15,1.91,23,1.239,36,1.749,38,2.105,40,2.284,43,1.765,57,0.72,65,2.063,84,1.994,85,1.602,90,1.357,91,1.506,97,1.852,104,1.933,120,1.408,123,0.706,133,2.025,138,2.145,157,1.895,166,1.79,207,1.562,218,2.316,227,1.73,232,5.198,235,1.188,245,1.883,265,2.596,281,1.852,288,0.665,298,1.488,299,2.192,311,2.086,335,1.776,398,2.338,411,0.805,414,1.188,456,2.145,462,1.587,475,2.236,492,1.495,496,0.79,504,1.705,537,2.189,539,1.735,546,0.965,635,2.678,687,0.989,688,2.443,709,1.857,712,1.508,715,1.687,834,1.648,836,1.064,837,1.061,844,2.091,961,2.032,962,1.634,966,1.735,1086,1.696,1087,1.883,1108,3.1,1177,2.927,1502,4.56,1503,4.157,1586,1.367,1633,3.019,1644,2.609,1802,2.52,1803,1.696,1859,2.715,1963,1.166,1965,1.155,1966,1.857,1967,1.845,3086,1.967,3107,2.443,3979,5.412,3980,5.412,4248,3.27,4252,3.27,4309,2.777,4562,3.457,4563,3.457,4564,3.457,4565,3.457,4566,3.457,4567,5.52,4568,3.457,4569,3.457,4573,3.27,4574,3.457,4575,3.457,4576,3.457,4577,3.13,4578,3.457,4579,3.457,4580,3.457,4581,3.457,4589,3.457,4590,3.457,4591,3.457,4592,3.457,5810,3.741,5811,3.741,5812,3.741,5813,3.741]],["t/2540",[0,0.273,15,1.696,23,1.1,36,2.054,37,1.438,40,2.257,43,1.568,48,1.278,49,2.411,53,3.47,57,0.639,65,1.903,84,2.013,85,1.422,90,1.205,91,1.368,97,1.709,99,1.442,104,1.075,120,1.279,121,0.845,123,0.627,133,1.126,138,4.555,157,1.105,161,1.107,166,0.995,184,3.129,207,0.869,232,1.549,235,1.723,245,1.672,281,1.348,288,0.59,299,2.552,311,1.852,312,3.188,390,1.228,398,1.701,411,0.715,424,2.495,456,1.905,462,0.882,475,1.986,492,1.358,496,0.702,537,0.975,546,1.776,547,3.381,687,0.878,813,2.276,834,1.497,836,0.945,837,0.942,844,1.93,846,3.506,961,1.804,962,3.47,1001,2.082,1012,3.836,1018,4.502,1108,1.976,1177,1.628,1420,2.659,1502,4.208,1503,3.836,1586,1.214,1592,2.832,1595,1.558,1621,3.867,1628,4.314,1635,2.681,1637,3.939,1643,5.647,1644,5.54,1646,6.213,1802,1.402,1963,1.035,1965,1.026,2110,8.091,2114,3.07,2115,3.07,2116,2.904,2117,3.07,2118,7.34,2119,7.34,2120,7.34,2121,3.07,2122,5.015,2123,3.07,2124,3.07,2125,3.07,2126,2.904,2127,2.904,2128,3.07,2129,3.07,2130,3.07,3086,1.747,3107,2.17,5814,3.322,5815,3.322]],["t/2542",[0,0.724,57,1.699,58,3.023,59,3.873,84,1.891,120,2.608,122,3.314,182,4.325,185,4.046,207,2.308,227,1.794,411,1.9,492,3.023,496,1.865,687,2.333,3755,7.716,4132,10.11]],["t/2544",[0,0.469,23,1.89,31,2.163,36,1.339,37,1.513,38,3.212,40,2.131,47,3.155,48,1.36,57,0.681,64,0.585,65,1.579,84,1.938,91,1.44,97,1.418,99,0.939,102,2.75,123,0.667,133,1.199,138,4.117,147,1.072,166,2.151,184,1.264,199,4.595,207,0.925,228,2.114,235,1.812,265,2.481,281,1.783,288,1.276,299,2.122,318,1.621,323,2.422,346,4.537,356,2.466,362,2.163,385,1.639,390,1.307,398,1.79,414,1.123,424,3.508,462,0.939,479,1.755,488,3.747,492,0.885,496,0.747,509,1.845,531,3.183,539,3.329,540,2.382,546,2.496,594,1.669,608,2.342,660,3.381,668,1.649,687,0.934,774,2.114,777,3.002,782,1.845,834,1.575,836,1.006,837,1.003,844,1.601,846,1.561,948,3.982,966,1.639,1002,1.732,1018,1.818,1025,5.052,1058,1.767,1095,3.091,1108,3.293,1176,3.075,1582,2.138,1586,1.292,1592,1.845,1625,2.691,1700,2.382,1797,5.102,1800,2.382,1801,2.466,1802,1.492,1803,1.603,1963,1.102,1965,1.092,2089,3.268,2648,2.216,2926,2.382,3069,2.691,3330,3.091,4506,2.959,5816,3.536,5817,10.176,5818,10.176,5819,10.59,5820,5.709,5821,3.536,5822,3.536,5823,3.536,5824,3.536,5825,3.536,5826,3.536,5827,3.536]],["t/2546",[0,0.52,7,1.576,36,2.081,40,1.879,57,1.219,65,2.454,73,3.596,84,2.595,91,1.597,97,1.572,121,1.594,148,1.187,166,3.628,185,5.087,219,3.468,227,1.287,281,1.572,288,1.125,299,2.636,385,2.936,389,3.744,398,1.985,462,1.682,496,1.338,547,2.445,668,4.137,687,1.673,715,2.854,744,4.561,834,2.447,836,1.801,837,1.796,844,1.776,869,3.232,1025,3.143,1108,3.23,1338,6.939,1876,3.41,1963,1.973,1965,1.955,3314,4.952,5105,5.851,5828,8.871,5829,8.871,5830,8.871,5831,8.871]],["t/2548",[36,2.178,40,2.264,57,1.301,65,2.568,84,2.272,91,2.341,97,2.306,121,1.052,185,3.099,281,1.679,282,3.571,288,1.202,299,2.729,390,3.432,398,2.911,462,1.796,492,1.692,496,1.429,687,1.786,715,3.048,834,2.561,836,1.923,837,1.917,844,2.604,1108,2.461,1586,2.471,1802,2.852,1963,2.107,1965,2.087,3328,5.657,3426,7.262,4161,8.579,5832,6.76,5833,6.76,5834,9.283,5835,9.283,5836,6.76,5837,6.76,5838,6.76]],["t/2550",[3,4.052,23,3.517,59,3.154,258,5.013,492,2.658,1771,6.937,5839,10.622]],["t/2552",[36,1.834,40,2.128,57,1.505,65,2.832,91,2.581,97,2.542,213,4.666,215,3.53,260,4.692,281,2.542,288,1.39,299,2.938,462,2.078,492,1.957,496,1.653,537,2.295,687,2.067,715,3.526,834,2.824,836,2.224,837,2.218,844,2.871,1517,4.728,1586,2.858,1963,2.437,1965,2.414,3464,7.227,5840,7.82,5841,7.82]],["t/2554",[40,1.969,57,1.36,65,2.647,91,2.413,97,2.376,123,1.333,281,2.376,288,2.159,299,3.127,390,4.01,462,1.877,468,6.554,492,1.768,496,1.493,537,2.808,546,1.823,687,1.867,834,2.639,836,2.01,837,2.004,844,2.683,1169,4.321,1517,5.783,1586,2.582,1592,3.687,1660,5.702,1963,2.201,1965,2.181,3028,6.176,3061,9.728,5842,7.065,5843,7.065,5844,7.065,5845,7.065]],["t/2557",[36,1.822,40,2.045,45,4.053,57,1.495,59,3.026,65,2.819,91,1.958,97,1.929,120,2.402,147,2.354,211,4.749,213,4.644,281,1.929,288,1.38,299,2.927,398,2.435,462,2.063,496,1.641,537,2.991,687,2.052,715,3.501,834,2.811,836,2.209,837,2.202,844,2.178,1771,5.072,1963,2.42,1965,2.397,2167,5.32,5286,9.941,5846,10.189]]],"invertedIndex":[["",{"_index":40,"t":{"2":{"position":[[743,1],[828,1],[956,1],[1041,1],[1173,1],[1258,1]]},"4":{"position":[[288,1]]},"39":{"position":[[204,1],[294,1],[304,1],[360,1],[392,1],[469,1],[471,1],[473,2],[526,3],[605,1],[607,1],[609,2],[665,3],[669,1],[700,2],[703,1]]},"43":{"position":[[189,5]]},"117":{"position":[[201,1],[293,1],[303,1],[359,1],[391,1],[455,1],[563,1],[565,2],[633,2],[884,1],[990,1],[992,2],[1104,1],[1270,1],[1272,3],[1276,1],[1307,2],[1310,1]]},"142":{"position":[[881,3]]},"182":{"position":[[519,1],[558,1],[634,1],[636,1]]},"184":{"position":[[730,1],[884,3],[974,3]]},"190":{"position":[[349,1],[396,1],[445,1],[512,1],[556,1],[619,1],[668,1],[721,1]]},"219":{"position":[[599,1],[611,1],[613,3],[627,1],[629,3],[633,1],[635,2],[638,3],[642,1],[644,1],[656,1],[658,3],[672,1],[674,3],[678,1],[680,2],[683,3],[687,1],[689,1],[701,1],[703,3],[716,1],[718,3],[722,1],[724,2],[727,3],[731,1],[733,1],[745,1],[747,3],[759,1],[761,3],[765,1],[767,2],[770,3],[774,1]]},"221":{"position":[[1054,3],[1222,1],[1234,1],[1236,3],[1248,1],[1324,2],[1342,1],[1352,1],[1354,1],[1394,1],[1417,3],[1441,1],[1443,1],[1445,1],[1447,1],[1449,2],[1452,3],[1456,1],[1458,1],[1470,1],[1472,3],[1484,1],[1560,2],[1578,1],[1588,1],[1590,1],[1619,1],[1712,1],[1714,1],[1716,1],[1718,1],[1720,2],[1723,3],[1727,1],[1729,1],[1741,1],[1743,3],[1756,1],[1832,2],[1850,1],[1861,1],[1863,1],[1903,1],[1926,3],[1950,1],[1952,1],[1954,1],[1956,1],[1958,2],[1961,3],[1965,1],[1967,1],[1979,1],[1981,3],[1994,1],[2070,2],[2088,1],[2099,1],[2101,1],[2130,1],[2223,1],[2225,1],[2227,1],[2229,1],[2231,2],[2234,3],[2238,1]]},"223":{"position":[[702,3],[934,1],[946,1],[948,3],[960,1],[1110,2],[1128,1],[1138,1],[1140,1],[1223,1],[1246,3],[1270,1],[1272,1],[1274,1],[1276,1],[1278,2],[1281,3],[1285,1],[1287,1],[1299,1],[1301,3],[1313,1],[1463,2],[1481,1],[1491,1],[1493,1],[1565,1],[1658,1],[1660,1],[1662,1],[1664,1],[1666,2],[1669,3],[1673,1],[2266,1],[2278,1],[2280,3],[2292,1],[2442,2],[2460,1],[2470,1],[2472,1],[2544,1],[2637,1],[2639,2],[2642,1],[2769,1],[2771,1],[2773,1],[2775,2],[2778,3],[2782,1],[2784,1],[2796,1],[2798,3],[2810,1],[2960,2],[2978,1],[2988,1],[2990,1],[3062,1],[3155,1],[3157,2],[3160,1],[3288,1],[3290,1],[3292,1],[3294,2],[3297,3],[3301,1]]},"227":{"position":[[162,1],[174,1],[221,1],[297,1],[299,2],[799,3],[921,1]]},"229":{"position":[[218,1],[230,1],[260,1],[337,1],[339,2],[342,3],[346,1]]},"235":{"position":[[256,1],[447,2],[458,1]]},"249":{"position":[[311,1],[323,1],[325,3],[339,1],[439,2],[457,1],[469,1],[471,1],[536,1],[538,1],[540,1],[542,2],[545,3],[549,1],[551,1],[563,1],[565,3],[579,1],[679,2],[697,1],[709,1],[711,1],[749,2],[752,1],[790,2],[793,1],[795,1],[797,2],[800,3],[804,1]]},"251":{"position":[[308,1],[320,1],[322,3],[336,1],[436,2],[454,1],[466,1],[468,1],[532,1],[534,1],[536,1],[538,2],[541,3],[545,1],[547,1],[559,1],[561,3],[575,1],[675,2],[693,1],[705,1],[707,1],[749,1],[751,1],[753,1],[755,2],[758,3],[762,1]]},"257":{"position":[[145,1],[157,1],[203,1],[381,1],[383,2],[719,2],[722,1],[1664,1],[2133,1],[2165,1]]},"265":{"position":[[256,1],[447,2],[458,1]]},"281":{"position":[[311,1],[323,1],[325,3],[338,1],[414,2],[432,1],[443,1],[445,1],[510,1],[512,1],[514,1],[516,2],[519,3],[523,1],[525,1],[537,1],[539,3],[552,1],[628,2],[646,1],[657,1],[659,1],[700,1],[702,1],[704,1],[706,2],[709,3],[713,1]]},"283":{"position":[[290,1],[302,1],[304,3],[317,1],[427,2],[445,1],[456,1],[458,1],[516,2],[519,1],[577,2],[580,1],[638,1],[640,1],[642,1],[644,2],[647,3],[651,1],[653,1],[665,1],[667,3],[680,1],[790,2],[808,1],[819,1],[821,1],[870,2],[873,1],[923,2],[926,1],[960,1],[962,1],[964,1],[966,2],[969,3],[973,1]]},"285":{"position":[[388,1],[400,1],[445,1],[626,2],[644,1],[655,1],[657,1],[723,2],[726,1],[792,1],[794,1],[796,1],[798,2],[801,3],[805,1],[807,1],[819,1],[864,1],[1045,2],[1063,1],[1074,1],[1076,1],[1115,3],[1119,2],[1122,1],[1207,1],[1209,1],[1211,1],[1213,2],[1216,3],[1220,1]]},"287":{"position":[[401,1],[414,1],[426,1],[452,5],[458,2],[461,5],[467,1]]},"289":{"position":[[172,1],[1173,1],[1184,1]]},"293":{"position":[[286,1],[298,1],[300,4],[305,2],[308,3],[344,4],[349,1]]},"295":{"position":[[113,1],[125,1],[127,3],[164,3],[168,1],[170,3],[174,1]]},"299":{"position":[[395,1],[407,1],[448,3],[452,2],[455,3],[459,1]]},"303":{"position":[[340,1],[371,1],[395,2],[427,6],[434,2],[437,2]]},"321":{"position":[[125,1],[127,3],[140,1],[188,1],[827,1],[1101,1],[1103,1],[1105,2],[1108,3],[1112,1]]},"325":{"position":[[348,1],[360,1],[405,1],[482,1],[484,2],[992,1],[1038,1],[1098,2],[1145,1],[1205,2],[1252,1],[1312,2],[1359,1],[1419,1],[1421,2],[1542,1],[1544,1],[1556,1],[1601,1],[1752,1],[1754,2],[2090,1],[2136,1],[2196,2],[2243,1],[2303,2],[2350,1],[2410,2],[2457,1],[2517,2],[2566,1],[13568,1],[14657,2],[14678,1],[14680,2],[14801,1],[16049,1],[16514,1],[16546,1]]},"327":{"position":[[1680,1],[1865,1]]},"333":{"position":[[256,1],[447,2],[458,1]]},"345":{"position":[[311,1],[323,1],[325,3],[337,1],[413,2],[431,1],[441,1],[443,1],[508,1],[510,1],[512,1],[514,2],[517,3],[521,1],[523,1],[535,1],[537,3],[549,1],[625,2],[643,1],[653,1],[655,1],[696,1],[698,1],[700,1],[702,2],[705,3],[709,1]]},"347":{"position":[[290,1],[302,1],[304,3],[316,1],[426,2],[444,1],[454,1],[456,1],[514,2],[517,1],[575,2],[578,1],[636,1],[638,1],[640,1],[642,2],[645,3],[649,1],[651,1],[663,1],[665,3],[677,1],[787,2],[805,1],[815,1],[817,1],[866,2],[869,1],[919,2],[922,1],[956,1],[958,1],[960,1],[962,2],[965,3],[969,1]]},"349":{"position":[[532,1],[544,1],[546,3],[558,1],[635,2],[653,1],[663,1],[665,1],[786,1],[788,1],[790,1],[792,2],[795,3],[799,1],[801,1],[813,1],[815,3],[827,1],[904,2],[922,1],[932,1],[934,1],[1064,1],[1066,1],[1068,1],[1070,2],[1073,3],[1077,1]]},"351":{"position":[[388,1],[400,1],[402,3],[414,1],[491,2],[509,1],[519,1],[521,1],[587,2],[590,1],[656,1],[658,1],[660,1],[662,2],[665,3],[669,1],[671,1],[683,1],[685,3],[697,1],[774,2],[792,1],[802,1],[804,1],[889,2],[892,1],[931,3],[935,1],[937,1],[939,1],[941,2],[944,3],[948,1]]},"355":{"position":[[85,1]]},"362":{"position":[[345,1],[381,1],[419,1],[475,1],[508,1],[543,1],[589,1]]},"417":{"position":[[272,1],[356,1],[462,1],[551,1],[646,1],[722,1],[827,1],[922,1],[986,1],[1098,1],[1255,1],[1339,1],[1445,1],[1535,1],[1636,1],[1713,1],[1818,1],[1913,1],[1977,1],[2089,1],[2226,1],[2345,1],[2355,1],[2850,1],[2905,1],[2945,1],[2971,1],[2986,1],[3046,1],[3101,1],[3137,1],[3159,1],[3174,1]]},"434":{"position":[[50,1],[90,1],[150,1],[180,1],[187,1],[213,1],[218,1],[239,1],[769,1],[805,1],[858,1],[886,1],[893,1],[909,1],[971,1],[989,1]]},"449":{"position":[[1146,1],[1219,1],[2048,2],[2059,1],[2153,1],[2261,1],[2381,1],[2447,1],[2449,1],[2682,1],[2684,2],[2695,1]]},"453":{"position":[[233,1],[946,1],[1043,2],[1074,1],[1133,1],[1926,1]]},"457":{"position":[[258,1],[289,1],[297,1],[311,1],[376,1],[389,1],[401,1],[450,2],[495,2],[508,1],[548,2],[551,2],[576,1],[605,1],[622,2],[708,1],[710,1]]},"461":{"position":[[474,1],[525,1],[564,1],[811,3],[1752,1],[1754,1],[1987,1],[2028,1],[2030,1],[2042,1],[2219,2],[2415,3],[2549,1],[2551,1],[2553,1],[2735,1],[2773,1],[3077,1],[3079,1]]},"463":{"position":[[113,2],[219,2],[301,2],[385,2]]},"465":{"position":[[200,1]]},"481":{"position":[[414,1],[450,1]]},"483":{"position":[[1442,1],[1484,1],[1531,1]]},"499":{"position":[[124,1],[163,1],[165,1],[320,1],[417,1],[419,1],[421,1],[423,1]]},"503":{"position":[[139,1],[178,1],[180,1],[392,1],[489,1],[491,1],[493,1],[495,1]]},"548":{"position":[[17,1]]},"552":{"position":[[199,1],[206,1],[208,1],[244,1],[283,1],[345,1],[352,1],[354,1],[390,1],[429,1]]},"554":{"position":[[199,1],[201,1],[218,2],[349,2]]},"568":{"position":[[930,1],[1015,1],[1143,1],[1228,1],[1360,1],[1445,1]]},"570":{"position":[[293,1]]},"586":{"position":[[200,1]]},"633":{"position":[[561,1]]},"647":{"position":[[94,1],[123,1],[156,1]]},"651":{"position":[[66,1],[82,1],[96,1],[235,1],[253,1]]},"653":{"position":[[66,1],[82,1],[96,1],[236,1],[254,1]]},"655":{"position":[[333,1],[488,3],[615,1],[741,3],[757,1],[846,2],[879,1],[881,1],[939,1],[1028,1]]},"661":{"position":[[512,1],[556,1]]},"663":{"position":[[598,1],[610,1],[624,1],[638,1],[640,1],[779,1],[781,1]]},"665":{"position":[[1324,1],[1363,1],[1365,1],[1488,2],[1491,1],[1614,2],[1617,1],[1740,1],[1742,1],[1744,1]]},"667":{"position":[[530,1],[569,1],[708,1],[710,1]]},"669":{"position":[[501,1],[540,1],[646,1],[648,1]]},"671":{"position":[[546,1],[590,1]]},"675":{"position":[[1861,1],[1968,1]]},"679":{"position":[[540,1],[584,1]]},"681":{"position":[[520,1],[559,1],[664,1],[666,1]]},"683":{"position":[[1333,1],[1372,1],[1374,1],[1497,2],[1500,1],[1623,2],[1626,1],[1749,1],[1751,1],[1753,1]]},"685":{"position":[[549,1],[588,1],[727,1],[729,1]]},"687":{"position":[[632,1],[671,1],[810,1],[812,1]]},"689":{"position":[[571,1],[615,1]]},"693":{"position":[[828,1],[877,1]]},"695":{"position":[[1396,1],[1445,1]]},"697":{"position":[[416,1],[455,1],[548,1],[550,1]]},"699":{"position":[[367,1],[406,1],[719,1],[721,1]]},"701":{"position":[[446,1],[495,1]]},"703":{"position":[[843,1],[892,1]]},"705":{"position":[[1220,1],[1269,1]]},"709":{"position":[[1052,1],[1160,1],[1218,2],[1257,1],[1265,1],[1438,1],[1446,1],[1590,1],[1604,1],[1606,1],[1608,1],[1610,1],[1620,1],[1631,1],[1658,1],[1686,1],[1688,1],[1690,1],[1692,1]]},"711":{"position":[[934,1],[1020,1]]},"713":{"position":[[746,1],[854,1]]},"715":{"position":[[469,1],[556,1]]},"717":{"position":[[1072,1],[1180,1]]},"719":{"position":[[912,1],[951,1],[953,1],[1112,1],[1209,1],[1211,1],[1213,1],[1215,1]]},"721":{"position":[[937,1],[1471,1]]},"723":{"position":[[355,3],[1320,1],[1365,1]]},"725":{"position":[[914,1],[953,1],[955,1],[1298,1],[1439,1],[1441,1],[1443,1],[1445,1]]},"727":{"position":[[946,1],[985,1],[987,1],[1330,1],[1471,1],[1473,2],[1476,1],[1819,1],[1960,1],[1962,1],[1964,1],[1966,1]]},"729":{"position":[[1048,1],[1087,1],[1089,1],[1432,1],[1573,1],[1575,2],[1578,1],[1921,1],[2062,1],[2064,1],[2066,1],[2068,1]]},"731":{"position":[[482,1],[566,1]]},"733":{"position":[[651,1],[690,1],[2522,1],[2524,1]]},"735":{"position":[[967,1],[1012,1]]},"737":{"position":[[664,1],[703,1],[938,3],[2334,1],[2336,1]]},"739":{"position":[[1192,1],[1268,1]]},"741":{"position":[[769,1],[834,1],[906,1],[973,1],[975,2],[986,1],[988,1],[1018,1],[1020,1],[1032,1],[1296,2],[1411,1],[1504,2],[1539,3],[1675,2],[1678,1],[1690,1],[1871,2],[1986,1],[2024,2],[2194,2],[2197,1],[2209,1],[2348,2],[2642,2],[2645,1],[2657,1],[2838,2],[2953,1],[2990,2],[3160,1],[3162,2],[3239,1]]},"743":{"position":[[892,1],[936,1]]},"747":{"position":[[540,1],[584,1]]},"749":{"position":[[520,1],[559,1],[664,1],[666,1]]},"751":{"position":[[1333,1],[1372,1],[1374,1],[1497,2],[1500,1],[1623,2],[1626,1],[1749,1],[1751,1],[1753,1]]},"753":{"position":[[549,1],[588,1],[727,1],[729,1]]},"755":{"position":[[1520,1],[1559,1],[1698,1],[1700,1]]},"757":{"position":[[571,1],[615,1]]},"765":{"position":[[248,3],[259,1],[261,3],[270,3],[281,1],[283,3],[292,3],[303,3]]},"769":{"position":[[376,1],[388,1],[435,1],[484,1],[486,2],[954,1],[1000,1],[1227,2],[1274,1],[1505,2],[1552,1],[1783,1],[1785,1],[1787,1],[2086,1],[2088,3],[2344,3],[2348,1]]},"777":{"position":[[288,1],[333,1]]},"787":{"position":[[356,1],[393,1],[434,1],[436,2],[486,1],[536,2],[603,1],[619,1],[621,1],[661,2],[723,1],[756,2],[821,1],[866,1],[868,2],[943,1],[945,1],[978,1],[986,1],[1008,1],[1010,2],[1023,1],[1042,1],[1044,4],[1049,1],[1051,4],[1080,1],[1082,1],[1084,2],[1087,2],[1090,2],[1165,1],[1219,1],[1277,1],[1338,2],[1341,1],[1358,2],[1910,1],[1928,2],[1992,1],[2078,1],[2131,2],[2179,1],[2247,1],[2314,1],[2356,1],[2422,1],[2458,2],[2513,1],[2591,1],[2661,2],[2712,1],[2786,1],[2788,1],[2902,1],[2916,1],[2943,2],[3108,2],[3160,1],[3300,1],[3328,1],[3373,1],[3421,2],[3457,1],[3459,1],[3516,1],[3518,1]]},"789":{"position":[[1030,1],[1823,1]]},"791":{"position":[[662,1],[698,1],[741,1],[1413,2],[1468,1],[1546,1],[1630,1],[1649,1],[1689,1],[1738,1],[1740,1],[1753,1],[1764,1],[1874,2],[1927,1],[2043,2],[2078,1],[2137,2],[2182,2]]},"797":{"position":[[98,1],[157,1],[170,1],[181,1],[211,1],[224,1],[229,1],[280,1],[301,1],[303,1]]},"799":{"position":[[503,1],[505,1],[518,1],[559,1],[630,2],[643,1],[743,1],[745,1],[765,1]]},"801":{"position":[[582,2],[786,1],[788,1],[801,1],[842,1],[913,2],[926,1],[1039,3],[1055,1]]},"807":{"position":[[800,1],[802,1],[815,1],[851,1],[890,1],[944,2],[1011,1],[1046,2],[1049,1],[1065,3],[1076,3],[1101,1],[1103,1],[1230,2],[1255,1],[1326,2],[1329,2],[1398,1],[1466,2],[1482,2],[1485,1],[1496,1],[1498,1],[1533,1],[1535,1],[1552,2],[1570,1]]},"809":{"position":[[351,1],[353,1],[366,1],[402,1],[441,1],[495,2],[562,1],[597,2],[600,1],[616,3],[627,3],[650,1],[750,1],[752,1],[795,1],[894,2],[919,1],[990,2],[1059,1],[1127,2],[1145,1]]},"817":{"position":[[507,1],[525,2],[580,1],[667,1],[741,1],[808,2],[850,1],[852,1],[872,2],[928,1],[978,1],[1045,2],[1087,1],[1089,1],[1409,2],[1457,1],[1459,1],[1546,2],[1611,2],[1657,2],[1701,2],[1753,2],[1805,1],[1987,1],[2015,1],[2060,1],[2108,2],[2144,1],[2146,1],[2223,2],[2306,1],[2399,1],[2401,1],[2441,1],[2533,1],[2535,1],[2555,1]]},"819":{"position":[[407,1],[425,2],[480,1],[567,1],[641,1],[747,1],[749,1],[769,2],[825,1],[875,1],[981,1],[983,1],[1003,2],[1048,1],[1050,1],[1114,2],[1160,2],[1203,2],[1255,2],[1308,1],[1386,1],[1388,1],[1412,2],[1495,1],[1588,1],[1590,1],[1630,1],[1722,1],[1724,1],[1744,1]]},"827":{"position":[[249,3],[260,1],[262,3],[271,3],[282,1],[284,3],[293,3],[304,3]]},"829":{"position":[[522,1],[534,1],[564,1],[590,2],[609,2],[688,1],[734,1],[961,2],[1008,1],[1239,1],[1241,1],[1243,1]]},"837":{"position":[[328,1],[373,1]]},"852":{"position":[[125,1],[132,1],[139,1],[159,1]]},"854":{"position":[[378,1],[422,1]]},"856":{"position":[[265,1],[496,1]]},"862":{"position":[[453,1],[474,1],[480,1],[515,1],[600,1]]},"881":{"position":[[959,1],[1111,1]]},"906":{"position":[[4111,2],[4152,1],[4154,1],[4492,3],[4496,1],[4498,1],[4500,3],[4504,1],[4626,1],[4698,1]]},"908":{"position":[[2870,1]]},"920":{"position":[[788,1],[809,1],[815,1],[850,1],[935,1],[989,1],[1296,1],[1445,1],[1509,1],[1649,1],[1788,1],[1846,1]]},"926":{"position":[[1099,1],[1234,1],[1691,1],[2300,1],[2321,1],[2385,1],[2475,1],[2509,1],[2567,1],[2629,1],[2711,1]]},"928":{"position":[[415,1],[436,1],[442,1],[482,1],[631,1],[695,1],[835,1],[974,1],[1032,1],[1157,1],[1182,1],[1331,1],[1352,1],[1359,1],[2435,1]]},"930":{"position":[[415,1],[481,1],[612,1],[633,1],[639,1],[696,1],[949,1],[1098,1],[1162,1],[1302,1],[1441,1],[1499,1]]},"932":{"position":[[427,1],[493,1]]},"938":{"position":[[388,1],[409,1],[470,1],[557,1],[591,1],[649,1],[711,1],[793,1],[1837,1],[1884,1]]},"942":{"position":[[403,1],[426,1],[467,1],[490,1],[556,1],[569,1],[699,1],[715,1]]},"950":{"position":[[584,2],[916,2]]},"954":{"position":[[305,1],[328,1],[369,1],[392,1],[458,1],[471,1],[601,1],[617,1]]},"956":{"position":[[448,1],[471,1],[512,1],[535,1],[601,1],[614,1],[736,1],[752,1]]},"958":{"position":[[301,1],[324,1],[365,1],[388,1],[454,1],[467,1],[597,1],[613,1]]},"969":{"position":[[423,1],[442,1],[476,1],[561,1],[615,1]]},"998":{"position":[[272,37],[332,37],[410,17],[557,1],[617,1],[666,1],[711,1],[757,1],[898,1],[1045,64]]},"1000":{"position":[[1064,1],[1406,3],[1569,2],[1608,3],[1787,2],[1937,3],[2027,2],[2066,3],[2214,3],[2298,3]]},"1006":{"position":[[221,3],[232,1],[234,3],[243,1],[245,3],[257,3],[268,1],[270,3],[279,1],[281,3],[293,3],[304,1],[306,3],[315,1],[317,3],[329,3],[340,3],[349,3]]},"1015":{"position":[[91,1],[141,1],[173,3],[241,2],[261,1],[263,1],[356,2],[359,1],[445,2],[448,1],[519,1],[534,2],[565,1],[567,2],[578,1],[580,1],[613,2],[616,1],[649,2],[652,1],[685,1],[687,2],[698,1],[713,3],[728,1],[730,1],[796,2],[799,1],[867,2],[870,1],[938,1],[940,1],[942,2],[961,2],[964,1]]},"1028":{"position":[[197,3],[208,1],[210,3],[219,3],[230,1],[232,3],[241,3],[252,1],[254,3],[263,3],[274,3]]},"1030":{"position":[[543,1],[556,1],[568,1],[614,1],[690,1],[692,2],[931,1],[977,1],[1204,2],[1251,1],[1482,2],[1529,1],[1760,1],[1762,1],[1764,2],[1781,1],[1792,1],[1823,1],[1825,1],[1827,1]]},"1032":{"position":[[491,3],[508,3],[517,3],[564,1],[566,3],[574,1],[576,3],[588,3],[635,1],[637,3],[645,1],[647,3],[659,3],[706,1],[708,3],[716,1],[718,3],[730,3],[777,3],[785,3]]},"1036":{"position":[[92,3],[109,3],[120,1],[122,3],[131,1],[133,1],[135,3],[143,1],[145,1],[147,3],[159,3],[170,1],[172,3],[181,1],[183,1],[185,3],[193,1],[195,1],[197,3],[209,3],[220,1],[222,3],[231,1],[233,1],[235,3],[243,1],[245,1],[247,3],[259,3],[270,1],[272,3],[281,1],[283,1],[285,3],[293,1],[295,1],[297,3]]},"1052":{"position":[[332,1],[377,1],[631,1],[716,1],[2223,1],[2268,1]]},"1061":{"position":[[17,1],[72,3],[83,1],[85,3],[94,1],[96,3],[108,3],[119,1],[121,3],[130,1],[132,3],[144,3],[155,1],[157,3],[166,1],[168,3],[180,3],[191,3],[200,3]]},"1065":{"position":[[272,1],[322,1],[354,3],[422,2],[442,1],[444,1],[537,2],[540,1],[626,2],[629,1],[700,1],[715,2],[746,1],[748,2],[759,1],[761,1],[794,2],[797,1],[830,2],[833,1],[866,1],[868,2],[879,1],[894,3],[909,1],[911,1],[977,1],[979,1],[981,2],[1000,2],[1003,1],[1005,1],[1055,1],[1087,3],[1155,2],[1175,1],[1177,1],[1270,2],[1273,1],[1359,2],[1362,1],[1433,1],[1448,2],[1479,1],[1481,2],[1492,1],[1494,1],[1527,2],[1530,1],[1563,2],[1566,1],[1599,1],[1601,2],[1612,1],[1627,3],[1642,1],[1644,1],[1710,1],[1712,1],[1714,2],[1733,2],[1736,1],[1738,1],[1788,1],[1820,3],[1888,2],[1908,1],[1910,1],[2003,2],[2006,1],[2092,2],[2095,1],[2166,1],[2181,2],[2212,1],[2214,2],[2225,1],[2227,1],[2260,2],[2263,1],[2296,2],[2299,1],[2332,1],[2334,2],[2345,1],[2360,3],[2375,1],[2377,1],[2443,1],[2445,1],[2447,2],[2466,2],[2469,1],[2471,1],[2521,1],[2553,3],[2621,2],[2641,1],[2643,1],[2736,2],[2739,1],[2825,2],[2828,1],[2899,1],[2914,2],[2945,1],[2947,2],[2958,1],[2960,1],[2993,2],[2996,1],[3029,2],[3032,1],[3065,1],[3067,2],[3078,1],[3093,3],[3108,1],[3110,1],[3176,1],[3178,1],[3180,2],[3199,2],[3202,1]]},"1077":{"position":[[689,3],[721,1],[1686,2],[1689,1],[2343,3],[2528,3],[2673,3],[2818,3],[3134,3],[3319,3],[3464,3],[3609,3]]},"1085":{"position":[[180,3],[191,1],[193,3],[202,3],[213,1],[215,3],[224,3],[235,1],[237,3],[246,3],[257,3]]},"1087":{"position":[[527,1],[540,1],[552,1],[597,1],[673,1],[675,2],[914,1],[960,1],[1187,2],[1234,1],[1465,2],[1512,1],[1743,1],[1745,1],[1747,2],[1764,1],[1775,1],[1806,1],[1808,1],[1810,1]]},"1089":{"position":[[483,3],[500,3],[509,3],[556,1],[558,3],[566,1],[568,3],[580,3],[627,1],[629,3],[637,1],[639,3],[651,3],[698,1],[700,3],[708,1],[710,3],[722,3],[769,3],[777,3]]},"1093":{"position":[[84,3],[101,3],[112,1],[114,3],[123,1],[125,1],[127,3],[135,1],[137,1],[139,3],[151,3],[162,1],[164,3],[173,1],[175,1],[177,3],[185,1],[187,1],[189,3],[201,3],[212,1],[214,3],[223,1],[225,1],[227,3],[235,1],[237,1],[239,3],[251,3],[262,1],[264,3],[273,1],[275,1],[277,3],[285,1],[287,1],[289,3]]},"1103":{"position":[[309,1],[348,1],[533,1],[535,1],[621,1],[646,1],[653,1],[672,1],[686,1],[693,1],[700,1],[715,1],[836,1],[854,1],[861,1],[889,1],[903,1],[910,1],[922,1],[937,1],[1038,1],[1056,1],[1063,1],[1091,1],[1105,1],[1112,1],[1124,1],[1139,1],[1240,1],[1258,1],[1265,1],[1293,1],[1307,1],[1314,1],[1326,1],[1341,1],[1442,1],[1460,1],[1467,1],[1495,1],[1509,1],[1516,1],[1528,1],[1543,1],[1862,1],[1869,1],[1876,1],[1890,1],[2214,1],[2221,1],[2228,1],[2242,1]]},"1115":{"position":[[180,3],[191,1],[193,3],[202,3],[213,1],[215,3],[224,3],[235,1],[237,3],[246,3],[257,3]]},"1117":{"position":[[535,1],[548,1],[560,1],[606,1],[682,1],[684,2],[923,1],[969,1],[1196,2],[1243,1],[1474,2],[1521,1],[1752,1],[1754,1],[1756,2],[1773,1],[1784,1],[1815,1],[1817,1],[1819,1]]},"1119":{"position":[[483,3],[500,3],[509,3],[556,1],[558,3],[566,1],[568,3],[580,3],[627,1],[629,3],[637,1],[639,3],[651,3],[698,1],[700,3],[708,1],[710,3],[722,3],[769,3],[777,3]]},"1123":{"position":[[84,3],[101,3],[112,1],[114,3],[123,1],[125,1],[127,3],[135,1],[137,1],[139,3],[151,3],[162,1],[164,3],[173,1],[175,1],[177,3],[185,1],[187,1],[189,3],[201,3],[212,1],[214,3],[223,1],[225,1],[227,3],[235,1],[237,1],[239,3],[251,3],[262,1],[264,3],[273,1],[275,1],[277,3],[285,1],[287,1],[289,3]]},"1133":{"position":[[309,1],[348,1],[533,1],[535,1],[621,1],[646,1],[653,1],[672,1],[686,1],[693,1],[700,1],[715,1],[836,1],[854,1],[861,1],[873,1],[1056,1],[1074,1],[1081,1],[1093,1],[1276,1],[1294,1],[1301,1],[1313,1],[1496,1],[1514,1],[1521,1],[1533,1],[1929,1],[1936,1],[1943,1],[1957,1],[2281,1],[2288,1],[2295,1],[2309,1]]},"1144":{"position":[[710,1],[722,1],[768,1],[844,1],[846,2],[1240,1],[1286,1],[1321,1],[1323,1],[1325,1]]},"1148":{"position":[[192,1],[534,1],[675,1],[677,1]]},"1150":{"position":[[562,1],[768,1],[783,1],[816,1],[882,1],[884,1],[1012,1],[1419,1],[1560,1],[1562,1]]},"1152":{"position":[[428,1],[594,1],[603,1],[636,1],[685,1],[694,1],[727,1],[729,1],[1314,1],[1316,1],[1658,1],[1799,1],[1801,2],[1804,1],[2146,1],[2287,1],[2289,1],[2291,1]]},"1154":{"position":[[187,2],[593,1],[708,1],[782,1],[923,1],[925,1],[927,1]]},"1183":{"position":[[609,1],[621,1],[633,1],[635,2],[654,2],[657,3],[661,1]]},"1195":{"position":[[809,1]]},"1205":{"position":[[231,1]]},"1209":{"position":[[511,1]]},"1213":{"position":[[615,3]]},"1225":{"position":[[899,1],[1121,1]]},"1258":{"position":[[619,1],[762,1]]},"1260":{"position":[[1654,1],[1662,1],[1688,1]]},"1271":{"position":[[48,1],[61,1]]},"1275":{"position":[[79,1],[105,1],[131,1],[155,1],[179,1],[236,1],[300,1],[323,1]]},"1279":{"position":[[2465,3],[2588,3],[2712,3],[2835,3],[2958,3]]},"1289":{"position":[[391,37],[451,37],[618,1],[678,1],[727,1],[772,1],[818,1],[943,1],[1021,1],[1220,64]]},"1299":{"position":[[356,1]]},"1301":{"position":[[252,1],[342,1],[354,1],[420,1]]},"1303":{"position":[[292,1],[337,1]]},"1305":{"position":[[266,1],[312,1]]},"1307":{"position":[[264,1],[714,1],[952,1],[1309,2],[1422,2],[1591,2],[1687,1]]},"1309":{"position":[[1038,1],[1123,1],[1251,1],[1336,1],[1468,1],[1553,1],[1999,2]]},"1311":{"position":[[430,3],[452,2],[478,3],[492,2],[515,3],[527,2],[569,3],[578,2],[596,3],[609,2],[633,3],[644,3],[652,3],[663,3]]},"1313":{"position":[[91,1],[120,1],[172,1],[287,1],[297,1],[325,1],[503,1],[510,1],[535,1],[577,1],[627,1],[694,1]]},"1315":{"position":[[365,1],[384,1]]},"1317":{"position":[[540,1],[542,1],[554,1],[556,2],[623,1],[639,2],[654,1],[701,2],[733,2],[746,1],[957,1],[959,1],[961,2],[991,3],[995,3]]},"1329":{"position":[[69,3]]},"1346":{"position":[[48,1],[61,1]]},"1350":{"position":[[95,1],[115,1],[141,1],[167,1],[197,1],[221,1],[245,1],[268,1],[298,1],[321,1],[372,1],[392,1],[418,1],[444,1],[474,1],[498,1],[522,1],[545,1],[575,1],[598,1]]},"1354":{"position":[[2469,3],[2592,3],[2716,3],[2839,3],[2962,3]]},"1379":{"position":[[887,3]]},"1399":{"position":[[730,1],[884,3],[974,3]]},"1407":{"position":[[519,1],[558,1],[634,1],[636,1]]},"1425":{"position":[[956,3],[999,1],[1001,3],[1022,1],[1052,1],[1083,1],[1085,3],[1365,1],[1372,1],[1379,1],[1393,1],[1445,3],[1479,1],[1486,1],[1493,1],[1513,1],[1589,1],[1596,1],[1603,1],[1623,1],[1702,1],[1709,1],[1716,1],[1732,1],[1831,1],[1838,1],[1845,1],[1861,1],[1980,1],[1987,1],[1994,1],[2010,1],[2101,1],[2108,1],[2115,1],[2131,1],[2182,1],[2189,1],[2196,1],[2212,1],[2289,1],[2296,1],[2303,1],[2319,1],[2396,3],[2430,1],[2437,1],[2444,1],[2460,1],[2569,1],[2576,1],[2583,1],[2599,1],[2649,1],[2656,1],[2663,1],[2683,1],[2765,1],[2772,1],[2779,1],[2799,1],[2928,1],[2935,1],[2942,1],[2962,1]]},"1455":{"position":[[355,1],[358,2],[1038,1],[1086,1],[1093,1],[1317,1],[1355,1],[1389,1]]},"1491":{"position":[[75,1]]},"1502":{"position":[[357,1],[405,1],[429,1],[475,1],[484,1],[532,1],[534,1],[575,1],[577,1],[586,1],[633,1],[635,1],[669,1],[671,1],[673,3],[814,3],[818,3],[901,3],[905,3],[1091,3],[1254,4],[1279,3]]},"1510":{"position":[[128,2]]},"1515":{"position":[[248,2]]},"1523":{"position":[[972,3],[1037,3]]},"1529":{"position":[[469,1]]},"1541":{"position":[[1429,1],[1869,8]]},"1551":{"position":[[340,3],[449,1],[473,1],[480,1],[498,1]]},"1561":{"position":[[132,1],[445,1]]},"1565":{"position":[[440,1],[463,1],[504,1],[527,1],[593,1],[606,1],[736,1],[752,1]]},"1582":{"position":[[385,1],[387,1],[389,2],[462,2],[530,1],[544,1],[589,1],[686,3],[690,2],[693,2],[696,2],[699,2]]},"1584":{"position":[[179,1],[251,1],[298,2],[349,1]]},"1594":{"position":[[524,1],[529,1],[531,1],[540,1],[548,1],[584,2],[685,2]]},"1596":{"position":[[739,1],[744,1],[746,1],[755,1],[763,1]]},"1620":{"position":[[281,1]]},"1622":{"position":[[103,1]]},"1676":{"position":[[653,1],[735,1]]},"1685":{"position":[[216,1],[273,1],[275,1],[390,1],[535,1],[537,1],[539,2],[550,1]]},"1687":{"position":[[304,1],[343,1],[345,1],[752,1],[893,1],[895,1],[897,1],[899,1]]},"1689":{"position":[[197,1],[236,1],[238,1],[645,1],[786,1],[788,2],[791,1],[1198,1],[1339,1],[1341,1],[1343,1],[1345,1]]},"1693":{"position":[[243,1],[301,1],[351,1],[470,1],[541,1],[543,1],[545,2],[556,1]]},"1695":{"position":[[292,1],[347,1],[349,1],[464,1],[609,1],[611,1],[613,2],[624,1]]},"1701":{"position":[[126,1],[322,1]]},"1705":{"position":[[763,1],[1088,1]]},"1711":{"position":[[484,1],[501,8],[599,1]]},"1715":{"position":[[126,8],[443,5]]},"1721":{"position":[[743,1]]},"1723":{"position":[[30,1]]},"1746":{"position":[[253,2],[315,1],[324,1],[326,1],[336,1],[338,1],[349,1],[359,1],[361,1],[363,1],[483,2],[540,1],[549,1],[551,1],[564,1],[572,1],[574,1],[726,2],[823,1],[832,1],[834,1],[846,1],[848,1],[866,1],[888,1],[911,1],[919,1],[921,1],[923,1],[1035,1],[1044,1],[1046,1],[1058,1],[1065,1],[1067,1]]},"1750":{"position":[[290,2],[365,1],[375,1],[388,1],[412,1],[414,1],[416,1],[502,2],[579,1],[589,1],[602,1],[620,1],[622,1],[701,2],[704,1],[783,1],[785,1],[787,1],[789,1],[791,1]]},"1752":{"position":[[805,1]]},"1754":{"position":[[44,1]]},"1759":{"position":[[341,1],[390,1],[909,1],[911,1],[960,2],[963,1],[1004,2],[1007,1],[1009,1]]},"1761":{"position":[[286,3],[556,1],[604,1],[913,1],[915,1],[963,2],[966,1],[1007,2],[1010,1],[1012,1]]},"1771":{"position":[[281,1],[391,1],[769,1],[814,1],[852,1],[1090,1],[1240,1]]},"1782":{"position":[[85,1],[104,1],[111,1],[123,1],[308,1],[327,1],[334,1],[346,1],[592,1],[617,1],[624,1],[650,1],[666,1],[673,1],[680,1],[695,1],[807,1],[832,1],[839,1],[865,1],[881,1],[888,1],[895,1],[910,1]]},"1792":{"position":[[539,1],[647,1]]},"1797":{"position":[[650,1],[690,1],[709,1],[843,2],[880,1],[882,1]]},"1799":{"position":[[189,1],[228,1],[1387,2],[1390,1],[1392,1]]},"1801":{"position":[[156,1],[1315,2],[1318,1],[1354,1],[1393,1],[1527,1],[1529,1]]},"1803":{"position":[[484,1],[524,1],[543,1],[677,2],[698,1],[700,1]]},"1810":{"position":[[185,1],[245,1],[297,1],[342,1],[405,1],[465,1],[500,1],[577,1],[579,1],[581,1]]},"1816":{"position":[[571,1],[632,1],[662,2],[665,1],[683,1],[728,1],[813,1],[873,1],[908,1],[2418,3],[2438,1],[2649,1],[2651,1],[2653,1],[2655,1],[2737,1],[2830,1],[2832,4],[2854,1],[3429,1],[3431,2],[3434,2],[3437,1],[3439,1]]},"1818":{"position":[[1197,1],[1254,3],[1258,1],[1260,1],[1308,1],[1318,1],[1387,1],[1458,2],[1501,1],[1503,1],[1505,1],[1507,1],[1552,1],[1554,1],[1614,1],[1649,1],[1993,1],[2134,1],[2136,1],[2138,1],[2140,1],[2209,1],[2315,3],[2319,1],[2321,1],[2370,1],[2428,1],[2497,1],[2568,1],[2570,1],[2572,1],[2574,1],[2576,1],[2621,1],[2623,1],[2684,1],[2785,1],[3128,1],[3269,1],[3271,1],[3273,1],[3275,1]]},"1820":{"position":[[655,1],[730,1],[761,2],[764,1],[782,1],[827,1],[851,1],[911,1],[1015,1],[1017,1],[1102,1],[1177,1],[1207,2],[1210,1],[1228,1],[1273,1],[1297,1],[1357,1],[1392,1],[1848,1],[1850,1],[1852,1]]},"1822":{"position":[[559,1],[638,1],[656,1],[701,1],[725,1],[785,1],[889,1],[891,1]]},"1824":{"position":[[295,1],[355,1],[373,1],[418,1],[462,1],[522,1],[557,1],[636,1],[638,1],[640,1],[698,1],[758,1],[799,1],[801,1]]},"1826":{"position":[[439,1],[497,1],[546,1],[653,1],[671,1],[715,1]]},"1834":{"position":[[133,1],[256,1],[375,1]]},"1838":{"position":[[174,1],[191,1],[531,1]]},"1840":{"position":[[657,1]]},"1848":{"position":[[89,1],[138,1]]},"1850":{"position":[[978,1]]},"1852":{"position":[[771,1]]},"1864":{"position":[[34,1],[66,1],[89,1]]},"1866":{"position":[[34,1],[57,1]]},"1870":{"position":[[54,1],[85,1]]},"1878":{"position":[[77,1],[110,1],[128,1]]},"1880":{"position":[[85,1],[118,1],[140,1]]},"1882":{"position":[[30,1],[51,1],[76,1],[101,1],[128,1],[175,1]]},"1890":{"position":[[146,1],[179,1],[197,1],[211,1],[229,1],[248,1],[250,1],[266,1],[273,1],[286,1],[303,1],[321,1],[323,1],[356,1],[374,1],[388,1],[406,1],[425,1],[427,1],[440,1],[453,1],[463,1],[473,1],[483,1],[485,1],[497,1],[502,1],[512,1],[522,1],[528,1],[530,1],[551,1],[561,1],[571,1],[581,1],[587,1],[589,1],[615,1],[626,1],[634,1],[642,1],[648,1],[650,1],[665,1],[676,1],[685,1],[694,1],[700,1],[702,1],[724,1],[737,1],[747,1],[757,1],[763,1],[765,1],[784,1],[793,1],[802,1],[811,1],[817,1],[819,1],[852,1],[870,1],[884,1],[902,1],[921,1],[923,1],[941,1],[954,1],[965,1],[975,1],[985,1],[987,1],[1020,1],[1038,1],[1052,1],[1070,1],[1089,1]]},"1899":{"position":[[624,1],[695,1],[697,1],[887,1],[889,2],[901,1],[903,1],[943,1],[1238,1],[1240,1]]},"1901":{"position":[[735,1],[819,1],[821,1],[973,1],[975,2],[987,1],[989,1],[1029,1],[1181,1],[1183,1]]},"1903":{"position":[[724,1],[794,1],[796,1],[1063,2],[1071,2],[1083,1],[1085,1],[1125,1],[1144,1],[1278,2],[1299,1],[1301,1]]},"1905":{"position":[[532,1],[607,1],[609,1],[750,1],[752,2],[764,1],[766,1],[806,2],[1266,5],[1287,2],[1298,1],[1325,1],[1345,1],[1402,1],[1410,2],[1413,1],[1423,1],[1450,1],[1470,1],[1527,1],[1535,2],[1538,2],[1541,1],[2000,5],[2021,2],[2032,1],[2059,1],[2079,1],[2136,1],[2144,2],[2147,1],[2157,1],[2184,1],[2204,1],[2261,1],[2269,2],[2272,2],[2275,1]]},"1907":{"position":[[568,1],[670,1],[672,1],[712,2],[1172,5],[1193,2],[1204,1],[1231,1],[1251,1],[1308,1],[1316,2],[1319,1],[1329,1],[1356,1],[1376,1],[1433,1],[1441,2],[1444,2],[1447,1],[1906,5],[1927,2],[1938,1],[1965,1],[1985,1],[2042,1],[2050,2],[2053,1],[2063,1],[2090,1],[2110,1],[2167,1],[2175,2],[2178,2],[2181,1]]},"1909":{"position":[[348,1],[444,1],[446,1],[486,1],[1645,2],[1648,1],[1650,1]]},"1911":{"position":[[278,1],[1437,2],[1440,1],[1476,1],[1539,1],[1541,1],[2700,2],[2703,1],[2705,2],[2717,1],[2719,1],[2758,1],[2892,1],[2894,1]]},"1934":{"position":[[221,1],[233,1],[235,3],[705,3],[709,2],[712,1],[1002,1],[1014,1],[1016,3],[1038,3],[1042,2],[1045,1]]},"1936":{"position":[[194,1],[206,1],[208,3],[222,1],[248,2],[251,2],[254,3],[258,1]]},"1938":{"position":[[317,1],[329,1],[344,1],[359,1],[439,2],[533,1],[535,1],[537,1]]},"1991":{"position":[[965,1],[1014,1]]},"1997":{"position":[[102,1],[284,2],[330,2],[365,2],[382,1],[384,1]]},"1999":{"position":[[993,1],[1039,2],[1072,2],[1095,2],[1098,3],[1102,1],[1104,1]]},"2001":{"position":[[253,1],[355,1],[557,5],[668,1],[670,2],[695,5],[728,1],[730,2],[745,1],[747,1],[749,1]]},"2009":{"position":[[48,1],[61,1]]},"2013":{"position":[[79,1],[98,1],[129,1],[155,1],[185,1],[241,1],[304,1],[327,1]]},"2017":{"position":[[148,1],[186,1],[233,1],[258,1],[284,1],[323,1]]},"2019":{"position":[[150,1],[188,1],[235,1],[260,1],[286,1],[332,1],[392,1]]},"2021":{"position":[[2453,3],[2576,3],[2700,3],[2823,3],[2946,3]]},"2029":{"position":[[48,1],[61,1]]},"2033":{"position":[[95,1],[115,1],[141,1],[171,1],[195,1],[225,1],[248,1],[278,1],[301,1],[352,1],[372,1],[398,1],[428,1],[452,1],[482,1],[505,1],[535,1],[558,1]]},"2037":{"position":[[164,1],[184,1],[222,1],[269,1],[294,1],[320,1],[359,1],[410,1],[430,1],[468,1],[515,1],[540,1],[566,1],[605,1]]},"2039":{"position":[[166,1],[186,1],[224,1],[271,1],[296,1],[322,1],[361,1],[407,1],[467,1]]},"2041":{"position":[[2453,3],[2576,3],[2700,3],[2823,3],[2946,3]]},"2050":{"position":[[1091,1],[1217,1],[1236,1],[1280,1],[1369,1],[1583,1],[1585,1],[1600,1],[1615,1],[1643,1],[1694,1],[1696,1],[1706,1],[1708,1],[1778,1],[1809,1],[1855,1],[1857,1],[1859,1],[1865,1],[1884,1],[1900,1],[1916,2],[1919,1],[1925,1],[1944,1],[1960,1],[1975,1],[1977,1],[1986,1],[1988,1],[2003,1],[2016,1],[2018,3],[2515,3],[2588,3],[2881,3],[2954,3],[3184,1],[3186,1],[3287,1],[3389,1],[3399,1],[3442,1],[3455,1],[3476,1],[3566,3],[3601,2],[3626,2],[3900,3],[3973,3],[4203,1],[4205,1],[4306,1],[4408,1],[4418,1],[4461,1],[4474,1],[4495,1],[4750,2],[4779,2],[5136,1],[5176,1],[5196,1],[5198,3],[5245,3],[5280,2],[5305,2]]},"2052":{"position":[[618,1],[620,1],[622,3],[635,1],[637,1],[644,1],[665,1],[701,1],[752,6],[759,1],[830,1],[846,1],[860,1],[885,1],[914,1],[921,1],[991,1],[1010,1],[1080,1],[1082,1],[1099,1],[1112,1],[1114,1],[1116,3],[1120,1]]},"2056":{"position":[[200,1]]},"2094":{"position":[[112,3],[392,4]]},"2118":{"position":[[82,1],[140,1]]},"2120":{"position":[[82,1],[132,1]]},"2124":{"position":[[105,3],[799,4]]},"2188":{"position":[[73,1],[122,1]]},"2192":{"position":[[73,1],[114,1]]},"2224":{"position":[[109,3],[1136,3]]},"2228":{"position":[[78,1]]},"2236":{"position":[[78,1]]},"2274":{"position":[[76,1]]},"2280":{"position":[[76,1]]},"2330":{"position":[[775,1]]},"2334":{"position":[[768,1],[812,1]]},"2336":{"position":[[969,1],[1018,1],[1254,1],[1336,1],[1338,1],[1387,1]]},"2338":{"position":[[1092,1],[1191,1],[1193,1],[1232,1],[1343,1],[1345,1]]},"2340":{"position":[[533,3],[1002,1],[1089,1],[1091,1],[1130,1],[1158,1],[1160,1]]},"2342":{"position":[[440,1],[523,1],[525,1],[564,1],[586,1],[588,1]]},"2344":{"position":[[642,4],[996,1],[1035,1],[1435,1],[1475,2],[1491,1],[1500,1],[1512,1],[1735,1],[1760,1],[1762,2],[1961,1],[1963,1],[1965,1],[1967,1]]},"2346":{"position":[[1124,1],[1163,1],[1165,1],[1325,1],[1406,2],[1580,1],[1589,1],[1706,1],[1708,2],[1875,1],[1877,1],[1879,1]]},"2348":{"position":[[691,1],[735,1]]},"2352":{"position":[[1028,1],[1087,1],[1207,2],[1218,1],[1220,1],[1259,1],[1407,1],[1409,1],[1747,1],[1806,1],[1926,2],[1937,1],[1939,1],[1978,1],[3365,1],[3367,1]]},"2354":{"position":[[825,1],[917,1],[919,1],[958,1],[974,1],[1300,2],[1383,1],[1385,1]]},"2356":{"position":[[2104,1],[2143,1],[2145,1],[2175,2],[2178,1],[2256,2],[2259,1],[2289,2],[2292,1],[2378,1],[2380,1],[2382,1]]},"2358":{"position":[[370,1],[409,1],[411,1],[422,1],[2010,3],[2030,1],[2032,1],[3019,1],[3021,1],[3023,2],[4972,2],[4975,1],[4986,1],[6574,3],[6594,1],[6596,1],[7582,1],[7584,1],[7586,2],[9535,1],[9537,1],[9539,1]]},"2360":{"position":[[589,1],[50091,1]]},"2362":{"position":[[533,1],[617,1],[619,1],[1801,1]]},"2364":{"position":[[640,1],[679,1],[2394,1],[2396,1]]},"2366":{"position":[[542,1],[796,1]]},"2368":{"position":[[437,1],[494,3],[506,1],[508,1],[547,1],[556,1],[579,1],[619,2],[666,1],[707,2],[736,1],[901,2],[904,3],[908,2],[922,1],[1028,2],[1038,1],[1056,1],[1075,1],[1087,1],[1250,2],[1284,1],[1286,1],[1288,2],[1305,1],[1361,1],[1373,1],[1536,2],[1560,2],[1581,2],[1593,1],[1617,1],[1629,1],[1658,2],[1670,1],[1744,1],[1746,2],[1796,1],[1798,1],[1800,1]]},"2370":{"position":[[636,1],[714,1],[716,1],[765,1]]},"2372":{"position":[[408,1],[474,3],[486,1],[488,1],[537,1]]},"2374":{"position":[[538,1],[612,1],[614,1],[663,1]]},"2376":{"position":[[803,1],[942,1],[1016,1],[1088,1],[1193,1],[1195,2],[1206,1],[1208,1],[1247,1],[1332,1],[1334,1]]},"2378":{"position":[[547,1],[624,1],[695,2],[706,1],[708,1],[747,1],[832,1],[834,1]]},"2380":{"position":[[792,1],[856,1],[1049,2],[1060,1],[1062,1],[1101,1],[1114,1],[1186,1],[1279,1],[1281,2],[1364,1],[1366,1]]},"2382":{"position":[[501,1],[835,1],[901,1],[973,1],[998,1],[1000,2],[1011,1],[1013,1],[1052,1],[1100,3],[1118,1],[1120,1],[1190,3],[1204,3],[1224,1],[1226,1],[1228,1],[1230,1]]},"2384":{"position":[[359,1],[1867,1],[1927,1],[3202,2],[3213,1],[3215,1],[3254,1],[3302,3],[3320,1],[3322,1],[3392,3],[3406,3],[3426,1],[3428,1],[3430,1],[3432,1]]},"2386":{"position":[[357,1],[687,1],[753,1],[824,2],[835,1],[837,1],[876,1],[878,1],[926,3],[944,1],[946,1],[1016,3],[1030,3],[1045,3],[1064,1],[1066,1],[1068,1],[1070,1],[1072,1]]},"2388":{"position":[[560,1],[856,1],[935,1],[960,3],[972,1],[974,1],[1013,1],[1015,1],[1063,3],[1081,1],[1083,1],[1153,3],[1167,3],[1203,1],[1205,1],[1207,1],[1209,1],[1211,1]]},"2390":{"position":[[696,1],[1103,1],[1497,1],[1499,1],[1538,1],[1540,1],[1588,3],[1606,1],[1608,1],[1678,3],[1692,3],[1728,1],[1730,1],[1732,1],[1734,1],[1736,1]]},"2394":{"position":[[509,1],[565,3],[578,1],[580,1],[620,2],[623,1]]},"2396":{"position":[[476,1],[530,1]]},"2398":{"position":[[401,1],[460,3],[473,1],[475,1],[524,1],[582,2],[644,1],[652,1],[661,1],[663,1],[665,1],[675,1],[686,1],[704,1],[706,1],[708,1]]},"2400":{"position":[[1401,1],[1453,1],[1455,1],[1524,2],[1536,2],[1548,1],[1550,1],[1595,1],[1653,2],[1692,1],[1700,1],[1873,1],[1881,1],[2025,1],[2039,1],[2041,1],[2043,1],[2045,1],[2055,1],[2066,1],[2093,1],[2121,1],[2123,1],[2125,1],[2127,1],[3867,1],[4996,1]]},"2402":{"position":[[241,1],[296,3],[309,1],[311,1],[359,1]]},"2404":{"position":[[617,1],[673,3],[686,1],[688,1],[773,1]]},"2406":{"position":[[971,1],[1017,1],[1019,1],[1106,2],[1119,2],[1148,1],[1150,1],[1166,1],[1168,1],[1242,1],[1314,1],[1316,1],[1318,1],[1341,1]]},"2408":{"position":[[1144,1],[1203,1],[1205,1],[1328,1],[1330,2],[1342,1],[1344,1],[1393,1],[1451,2],[1633,1],[1641,1],[1765,1],[1767,1],[1769,1],[1779,1],[1790,1],[1813,1],[1815,1],[1817,1],[2081,1],[2095,1],[2105,1],[2189,1],[2213,1],[2251,1],[2256,2],[2316,2],[2902,3],[2914,2],[2917,1],[2966,1]]},"2410":{"position":[[1196,1],[1291,1],[1293,1],[1332,1],[1378,1],[1463,2],[1487,1],[1578,2],[1597,1],[1691,2],[1714,1],[1755,2],[1768,1],[1770,1],[1799,2],[1802,1],[1829,2],[1832,1],[1855,2],[1858,1],[1881,2],[1884,1],[1907,1],[1909,1],[1911,1],[1913,1]]},"2412":{"position":[[450,1],[844,1],[900,3],[913,1],[915,1],[963,1],[1021,2],[1078,1],[1089,1],[1091,1],[1101,1],[1123,1],[1125,1]]},"2414":{"position":[[705,1],[830,1],[832,1],[897,1],[955,2],[967,2],[978,1],[1037,1],[1047,1],[1049,4],[1084,1],[1149,1],[1159,1],[1161,1],[1163,1],[1173,1],[1186,1],[1224,1],[1226,1],[1228,1]]},"2416":{"position":[[554,1],[616,1],[694,2],[706,1],[708,1],[748,1],[2199,3],[2219,1],[2360,2],[2386,1],[2388,1],[2446,2],[2472,1],[2779,1],[2863,1],[2885,1],[2892,1],[3065,1],[3067,1],[3069,1],[3079,1],[3090,1],[3125,3],[4650,1],[4652,1],[4654,1]]},"2418":{"position":[[707,1],[797,1],[799,1],[838,1],[2289,3],[2309,3],[2336,1],[2338,1],[2396,2],[2424,1],[2649,1],[2762,5],[2798,1],[2819,1],[2834,1],[2841,1],[3021,1],[3028,1],[3048,1],[3055,1],[3063,1],[3073,1],[3138,1],[3148,1],[3157,1],[3164,1],[3166,1],[3168,1],[3170,1],[3180,1],[3191,1],[3209,3],[4719,3],[4749,1],[4807,2],[4821,1],[4856,2],[4869,1],[4948,2],[4974,1],[4976,1],[4978,1]]},"2420":{"position":[[805,1],[889,1],[891,1],[930,1],[932,1],[1218,1],[1220,1],[1289,1],[1570,2],[1847,1],[1849,2],[2582,2],[2585,1],[2870,3],[3604,1],[3606,1],[3608,1],[3666,2],[3942,1],[4027,1],[4042,1],[4050,1],[4067,1],[4090,1],[4100,1],[4145,1],[4161,1],[4166,1],[4176,1],[4184,1],[4186,1],[4188,1],[4190,1],[4199,1],[4201,1],[4211,1],[4213,1],[4230,1],[4232,1],[4234,1],[4244,1],[4246,1],[4255,1],[4339,1],[4858,2],[4868,1],[4958,1],[4986,1],[5004,1],[5026,1],[5045,1],[5047,1],[5049,2],[5059,1],[5061,1],[5073,1],[5120,2],[5128,1],[5130,1],[5142,1],[5189,2],[5200,1],[5208,2],[5211,1],[5221,1],[5223,1],[5232,1],[5316,1],[5835,2],[5845,1],[5935,1],[5963,1],[5982,1],[6005,1],[6025,1],[6027,1],[6029,1],[6040,1],[6042,1],[6183,1],[6185,1],[6187,2],[6197,1],[6199,1],[6211,1],[6258,2],[6266,1],[6268,1],[6280,1],[6327,2],[6338,1],[6346,1],[6348,1],[6350,1],[6352,1],[6354,1]]},"2422":{"position":[[533,1],[611,1],[682,2],[694,1],[696,1],[741,1],[799,2],[948,1],[1032,1],[1051,1],[1053,1],[1055,1],[1065,1],[1076,1],[1100,1],[1102,1],[1104,1]]},"2424":{"position":[[676,1],[775,1],[777,1],[823,1],[881,2],[965,1],[986,1],[1005,1],[1007,1],[1009,1],[1019,1],[1030,1],[1054,1],[1056,1],[1058,1]]},"2426":{"position":[[731,1],[853,1],[855,1],[1390,1],[1532,5],[1568,1],[1633,1],[1640,1],[1642,1],[1644,1],[1654,1],[1667,1],[2172,1],[2174,1],[2176,1]]},"2428":{"position":[[663,1],[775,1],[838,1],[877,1],[1088,1],[1090,1],[1166,1],[1205,1],[1346,1],[1348,1],[1406,1],[1445,1],[1447,1],[1854,1],[1925,1],[1927,2],[1930,1],[2337,1],[2408,1],[2410,1],[2412,1],[2414,1]]},"2430":{"position":[[631,1],[740,1],[742,1],[781,1],[783,1],[1189,1],[1260,1],[1262,2],[1265,1],[1671,1],[1742,1],[1744,1],[1746,1],[1748,1]]},"2432":{"position":[[922,1],[977,1],[979,1],[1094,2],[1097,1],[1099,2],[1110,1],[1112,1],[1151,1],[1153,1],[1559,1],[1630,1],[1632,2],[1635,1],[2041,1],[2112,1],[2114,1],[2116,1],[2118,1],[2440,5],[2476,1],[2672,1],[2700,1],[2710,1],[2724,1],[2731,1],[2733,1],[2735,1],[2737,1],[2747,1],[2757,1],[2759,1],[2783,1],[2994,2],[3086,1],[3144,2],[3162,1],[3241,1],[3243,2],[3246,1],[3270,1],[3481,2],[3573,1],[3631,2],[3649,1],[3728,1],[3730,1],[3732,1],[3734,1],[3736,1]]},"2434":{"position":[[356,1],[427,1],[498,2],[509,1],[511,1],[550,1],[734,1],[736,1],[873,1],[875,2],[1060,1],[1062,1]]},"2436":{"position":[[501,1],[596,1],[598,1],[637,1],[821,1],[823,1],[960,1],[962,2],[1147,1],[1149,1]]},"2438":{"position":[[1379,1],[1539,1],[1595,1],[1722,2],[1733,1],[1735,1],[1774,1],[1792,1],[1901,2],[2179,1],[2181,1],[2285,1],[2367,1],[2369,1],[2371,1],[2373,1],[2375,1]]},"2440":{"position":[[447,1],[783,1],[885,1],[887,1],[996,1],[1054,2],[1193,1],[1258,1],[1282,1],[1284,1],[1286,1],[1296,1],[1309,1],[1391,1],[1393,1],[1395,1]]},"2442":{"position":[[569,1],[650,1],[728,2],[739,1],[741,1],[780,1],[1448,1],[1450,1],[1519,2],[1606,1],[1650,1],[1652,1],[1654,4],[1689,1],[1773,1],[1799,1],[1807,1],[1814,1],[1821,1],[1823,1],[1825,1],[1827,1],[1837,1],[1848,1],[1867,1],[1878,1],[1957,2],[2037,1],[2039,1],[2041,1],[2043,1]]},"2444":{"position":[[826,1],[935,1],[937,1],[976,1],[1644,1],[1646,1],[1816,1],[1839,1],[1865,1],[1873,1],[1880,1],[1887,1],[1889,1],[1891,1],[1893,1],[1903,1],[1914,1],[1933,1],[1944,1],[2023,2],[2103,1],[2105,1],[2107,1],[2109,1]]},"2446":{"position":[[463,1],[531,1],[602,2],[614,1],[616,1],[656,1],[1262,1],[1264,1],[1352,1],[1426,1],[1540,1],[1630,1],[1638,1],[1645,1],[1682,1],[1692,1],[1697,1],[1707,1],[1716,1],[1718,1],[1720,1],[1730,1],[1747,1],[1758,1],[1837,2],[2010,1],[2068,2],[2077,1],[2135,2],[2150,1],[2152,1],[2154,1]]},"2448":{"position":[[762,1],[895,1],[897,1],[942,1],[1000,2],[1012,2],[1132,1],[1197,1],[1216,1],[1218,1],[1220,1],[1230,1],[1243,1],[1267,1],[1269,1],[1271,1]]},"2450":{"position":[[609,1],[678,1],[749,2],[761,1],[763,1],[802,1],[1077,3],[1796,1],[1798,1],[2122,1],[2212,1],[2220,1],[2237,1],[2260,1],[2270,1],[2307,1],[2316,1],[2323,1],[2333,1],[2338,1],[2348,1],[2356,1],[2358,1],[2360,1],[2370,1],[2387,1],[2398,1],[3008,2],[3210,3],[3222,1],[3280,2],[3289,1],[3347,2],[3361,1],[3363,1],[3365,1]]},"2452":{"position":[[492,1],[567,1],[645,2],[656,1],[658,1],[697,1],[2155,2],[2158,1],[2160,1],[2218,2],[2511,1],[2595,1],[2615,1],[2757,1],[2759,1],[2761,1],[2763,1],[2773,1],[2784,1],[4173,1],[4175,1],[4177,1]]},"2454":{"position":[[638,1],[744,1],[746,1],[785,1],[2243,2],[2246,1],[2248,1],[2306,2],[2535,1],[2557,1],[2577,1],[2719,1],[2721,1],[2723,1],[2725,1],[2735,1],[2746,1],[2764,1],[2766,1],[2768,1]]},"2456":{"position":[[478,1],[550,1],[621,2],[632,1],[634,1],[677,1],[735,2],[878,1],[962,1],[975,1],[977,1],[979,1],[989,1],[1000,1],[1018,1],[1020,1],[1022,1]]},"2458":{"position":[[610,1],[702,1],[704,1],[749,1],[807,2],[892,1],[918,1],[931,1],[933,1],[935,1],[945,1],[956,1],[974,1],[976,1],[978,1]]},"2460":{"position":[[369,1],[613,1],[668,3],[680,1],[682,1],[721,1],[940,1],[942,1]]},"2462":{"position":[[476,1],[523,1]]},"2464":{"position":[[341,1],[409,3],[421,1],[423,1],[472,1]]},"2466":{"position":[[415,1],[469,3],[482,1],[484,1],[529,1]]},"2468":{"position":[[308,1],[370,3],[382,1],[384,1],[460,1]]},"2470":{"position":[[547,1],[604,2],[663,2],[666,3],[678,1],[680,1],[756,1]]},"2472":{"position":[[350,1],[425,3],[437,1],[439,1],[515,1]]},"2474":{"position":[[291,1],[354,3],[366,1],[368,1],[414,1],[472,2],[536,1],[554,1],[556,1],[566,1],[590,1],[592,1]]},"2476":{"position":[[1183,1],[1249,1],[1470,2],[1481,1],[1483,1],[1590,1],[1648,2],[1961,1],[2208,1],[2210,1],[2220,1],[2312,1],[2314,1]]},"2478":{"position":[[597,1],[659,1],[800,2],[811,1],[813,1],[857,1]]},"2480":{"position":[[855,1],[899,1]]},"2482":{"position":[[1441,1],[1496,3],[1509,1],[1511,1],[1551,1],[1684,1],[1686,1],[1744,2],[1866,1],[1876,1],[1943,1],[1945,1],[1947,1],[1957,1],[1970,1],[2084,1],[2086,1],[2088,1]]},"2484":{"position":[[510,1],[621,1],[623,1],[667,1]]},"2488":{"position":[[354,1],[442,1],[444,1],[493,1]]},"2490":{"position":[[336,1],[398,3],[410,1],[412,1],[478,1]]},"2492":{"position":[[548,1],[612,3],[624,1],[626,1],[673,1]]},"2494":{"position":[[570,1],[637,3],[649,1],[651,1],[696,1]]},"2496":{"position":[[520,1],[637,1],[639,1],[683,1]]},"2498":{"position":[[400,1],[485,1],[487,1],[558,1]]},"2500":{"position":[[583,1],[666,1],[668,1],[712,1]]},"2502":{"position":[[607,1],[692,1],[694,1],[738,1]]},"2504":{"position":[[410,1],[465,3],[477,1],[479,1],[523,1]]},"2506":{"position":[[285,1],[339,3],[351,1],[353,1],[397,1]]},"2510":{"position":[[295,1],[489,1]]},"2512":{"position":[[397,1],[442,1]]},"2514":{"position":[[301,1],[358,3],[371,1],[373,1],[419,1]]},"2516":{"position":[[484,1],[523,1],[536,1],[574,2],[584,1],[623,2],[637,1],[675,1],[677,1],[679,1]]},"2518":{"position":[[741,1],[796,3],[809,1],[811,1],[855,1],[857,1],[901,1]]},"2522":{"position":[[320,1],[446,1],[448,1],[497,1]]},"2526":{"position":[[887,1],[959,1],[961,1],[991,1],[993,1],[1005,1],[1222,2],[1336,1],[1374,2],[1409,3],[1543,2],[1546,1],[1558,1],[1699,2],[1989,2],[1992,1],[2004,1],[2115,2],[2267,3],[2342,1],[2344,2],[2355,1]]},"2528":{"position":[[1400,1],[1454,1],[1456,1],[1904,2],[1927,2],[1938,1],[1940,1],[1970,1],[1981,1],[2001,1],[2017,1],[2019,1],[2021,1],[2032,1],[2034,1],[2047,1],[2064,1],[2118,1],[2140,1],[2409,1],[2465,1],[2473,2],[2485,1],[2487,1],[2499,1],[2520,1],[2527,2],[2542,1],[2562,1],[2564,1],[2566,2],[2576,1],[2585,1],[2587,2],[2600,1],[2607,2],[2615,1],[2619,2]]},"2530":{"position":[[1563,1],[1593,1],[1595,1],[1606,1],[1626,1],[1642,1],[1644,1],[1646,1],[1657,1],[1659,1],[1672,1],[1689,1],[1743,1],[1767,1],[1780,1],[1836,1],[1848,2],[1860,1],[1862,1],[1874,1],[1892,1],[1899,2],[1914,1],[1934,1],[1936,1],[1938,2],[1948,1],[1957,1],[1959,2],[1972,1],[1979,2],[1982,1],[1993,1],[2013,1],[2029,1],[2031,1],[2033,1],[2044,1],[2046,1],[2059,1],[2076,1],[2130,1],[2154,1],[2167,1],[2223,1],[2235,2],[2247,1],[2249,1],[2261,1],[2279,1],[2286,2],[2301,1],[2321,1],[2323,1],[2325,2],[2335,1],[2344,1],[2346,2],[2359,1],[2366,2],[2369,2],[2377,1],[2381,2]]},"2532":{"position":[[844,1],[900,1],[902,1],[1029,1],[1031,2],[1044,1],[1046,1],[1076,1],[1078,1],[1090,1],[1307,2],[1421,1],[1459,2],[1494,3],[1628,2],[1631,1],[1643,1],[1884,2],[1998,1],[2098,2],[2133,3],[2267,1],[2269,2],[2282,1]]},"2534":{"position":[[708,1],[761,1],[841,2],[852,1],[854,1],[884,1],[895,1],[897,1],[910,1],[927,1],[981,1],[1002,1],[1023,1],[1079,1],[1087,2],[1102,1],[1207,1],[1238,1],[1309,2],[1324,1],[1344,1],[1346,1],[1350,2],[1475,1],[1484,2],[1492,1],[1496,2]]},"2536":{"position":[[867,1],[931,1],[1031,2],[1042,1],[1044,1],[1074,1],[1085,1],[1118,1],[1175,2],[1188,1],[1190,3],[1194,2],[1207,1],[1242,1],[1276,3],[1295,3],[1315,2],[1323,1],[1327,2]]},"2538":{"position":[[1105,1],[1231,1],[1233,1],[1273,1],[1473,1],[1519,2],[1552,2],[1575,2],[1578,3],[1582,1],[1584,2],[1597,1],[1779,2],[1825,2],[1860,2],[1877,1],[1879,2],[1955,5],[2066,1],[2068,2],[2093,5],[2126,1],[2128,2],[2143,1],[2145,1],[2147,2],[2238,2],[2241,5],[2247,1],[2249,1]]},"2540":{"position":[[807,1],[868,1],[939,2],[950,1],[952,1],[982,1],[984,1],[996,1],[1260,2],[1375,1],[1468,2],[1503,3],[1639,2],[1642,1],[1654,1],[1835,2],[1950,1],[1988,2],[2158,2],[2161,1],[2173,1],[2312,2],[2606,2],[2609,1],[2621,1],[2802,2],[2917,1],[2954,2],[3124,1],[3126,2],[3137,1]]},"2544":{"position":[[1547,1],[1621,1],[1626,1],[1636,1],[1689,2],[1699,1],[1716,2],[1728,1],[1742,1],[1744,1],[1746,2],[1757,1],[1759,1],[1798,1],[1800,1],[2240,1],[2242,1],[2244,1]]},"2546":{"position":[[678,1],[717,1],[770,1],[772,1]]},"2548":{"position":[[286,1],[353,3],[365,1],[367,1],[406,1],[408,1],[567,2],[570,1],[729,1],[731,1],[733,1]]},"2552":{"position":[[260,1],[322,3],[334,1],[336,1],[393,1]]},"2554":{"position":[[403,1],[495,1],[497,1],[606,1]]},"2557":{"position":[[349,1],[388,1],[432,1],[434,1]]}}}],["0",{"_index":547,"t":{"101":{"position":[[877,1]]},"227":{"position":[[208,2]]},"229":{"position":[[247,2]]},"235":{"position":[[288,1]]},"257":{"position":[[191,2],[1073,4]]},"259":{"position":[[235,2],[582,1]]},"265":{"position":[[288,1]]},"283":{"position":[[956,3]]},"285":{"position":[[433,2],[852,2]]},"289":{"position":[[1186,1]]},"299":{"position":[[243,2],[424,2]]},"303":{"position":[[72,2],[216,1]]},"325":{"position":[[394,2],[1590,2],[2618,4],[15136,4]]},"327":{"position":[[324,2],[1011,1],[1083,1],[1120,1]]},"333":{"position":[[288,1]]},"347":{"position":[[952,3]]},"461":{"position":[[2396,2]]},"655":{"position":[[860,5]]},"741":{"position":[[2059,4],[2482,2],[2501,3],[2505,3],[3006,2]]},"769":{"position":[[422,2]]},"829":{"position":[[551,2]]},"1030":{"position":[[602,2]]},"1069":{"position":[[1024,1]]},"1087":{"position":[[586,2]]},"1103":{"position":[[644,1],[688,1],[695,1],[702,1],[905,1],[912,1],[924,1],[1107,1],[1114,1],[1126,1],[1309,1],[1316,1],[1328,1],[1511,1],[1518,1],[1530,1]]},"1117":{"position":[[594,2]]},"1133":{"position":[[644,1],[688,1],[695,1],[702,1]]},"1144":{"position":[[756,2]]},"1242":{"position":[[201,2],[379,2]]},"1260":{"position":[[2273,1],[2309,2],[2446,1]]},"1307":{"position":[[2003,1]]},"1425":{"position":[[2841,1],[2845,2]]},"1435":{"position":[[86,4]]},"1582":{"position":[[661,2]]},"1693":{"position":[[219,1]]},"1771":{"position":[[349,1]]},"1782":{"position":[[668,1],[675,1],[682,1],[830,1],[883,1],[890,1],[897,1]]},"1830":{"position":[[928,1]]},"1836":{"position":[[865,1]]},"1852":{"position":[[475,2]]},"1856":{"position":[[111,1]]},"1864":{"position":[[525,1]]},"1866":{"position":[[345,1]]},"1890":{"position":[[524,1],[583,1],[644,1],[696,1],[759,1],[813,1]]},"1901":{"position":[[578,2],[850,2],[1058,2]]},"1915":{"position":[[782,1]]},"1930":{"position":[[1038,1]]},"1934":{"position":[[1035,2]]},"1947":{"position":[[81,2]]},"1973":{"position":[[188,2]]},"2050":{"position":[[295,4],[3152,1],[4171,1]]},"2062":{"position":[[398,2]]},"2078":{"position":[[395,2]]},"2162":{"position":[[270,2]]},"2202":{"position":[[308,1]]},"2210":{"position":[[453,2],[471,2]]},"2254":{"position":[[245,1]]},"2256":{"position":[[311,2],[337,1]]},"2258":{"position":[[359,2]]},"2316":{"position":[[378,2]]},"2344":{"position":[[1549,2],[1568,2],[1610,2],[1628,2],[1646,2],[1667,2],[1693,2],[1722,2]]},"2352":{"position":[[948,2],[1159,2],[1667,2],[1878,2]]},"2354":{"position":[[783,2],[786,4],[897,2],[900,4]]},"2356":{"position":[[2156,2]]},"2368":{"position":[[1383,2],[1394,2],[1406,2],[1417,2],[1429,2],[1441,2],[1451,2],[1461,2],[1472,2],[1483,2],[1494,2],[1504,2],[1514,2],[1524,2],[1534,1],[1548,2],[1558,1]]},"2378":{"position":[[804,1]]},"2380":{"position":[[928,2]]},"2382":{"position":[[1128,2],[1152,2],[1166,2]]},"2384":{"position":[[3330,2],[3354,2],[3368,2]]},"2386":{"position":[[954,2],[978,2],[992,2]]},"2388":{"position":[[1091,2],[1115,2],[1129,2]]},"2390":{"position":[[1616,2],[1640,2],[1654,2]]},"2416":{"position":[[3217,2],[3364,2],[4534,2]]},"2418":{"position":[[3299,2],[3446,2],[4616,2]]},"2420":{"position":[[157,1]]},"2432":{"position":[[2770,2],[3257,2]]},"2442":{"position":[[1629,2],[1796,2]]},"2444":{"position":[[1759,2],[1862,2]]},"2450":{"position":[[3359,1]]},"2452":{"position":[[2331,2],[2612,2],[3122,2]]},"2454":{"position":[[2355,2],[2574,2]]},"2458":{"position":[[972,1]]},"2482":{"position":[[1989,2]]},"2494":{"position":[[187,1]]},"2502":{"position":[[187,1]]},"2526":{"position":[[1525,2],[1832,2],[1851,4],[1968,2],[2248,2]]},"2528":{"position":[[2544,2]]},"2530":{"position":[[1916,2],[2303,2]]},"2532":{"position":[[1610,2],[2114,2],[2249,2]]},"2534":{"position":[[1326,2],[1348,1]]},"2536":{"position":[[1257,2]]},"2540":{"position":[[2023,4],[2446,2],[2465,3],[2469,3],[2970,2]]},"2546":{"position":[[768,1]]}}}],["0\",\"class\":\"dnsresolver\",\"message\":\"resolv",{"_index":3397,"t":{"1279":{"position":[[623,44]]},"1354":{"position":[[623,44]]},"2021":{"position":[[607,44]]},"2041":{"position":[[607,44]]}}}],["0\",\"throwabl",{"_index":3406,"t":{"1279":{"position":[[1057,18]]},"1354":{"position":[[1057,18]]},"2021":{"position":[[1041,18]]},"2041":{"position":[[1041,18]]}}}],["0.0",{"_index":2970,"t":{"1103":{"position":[[704,6],[926,6],[1128,6],[1330,6],[1532,6]]},"1133":{"position":[[704,6]]},"1782":{"position":[[684,6],[899,6]]},"2410":{"position":[[1716,4],[1741,4],[1751,3]]}}}],["0.0.0.0",{"_index":861,"t":{"184":{"position":[[782,7]]},"1275":{"position":[[670,7],[792,7]]},"1399":{"position":[[782,7]]},"1636":{"position":[[353,8],[1018,7]]},"1670":{"position":[[197,8],[234,7]]},"2118":{"position":[[331,8]]},"2172":{"position":[[246,8]]},"2190":{"position":[[387,7]]},"2228":{"position":[[286,8],[323,7]]},"2274":{"position":[[283,7]]}}}],["0.0.0.0/0",{"_index":4614,"t":{"2050":{"position":[[265,9],[384,9],[424,9],[465,9],[506,9]]}}}],["0.0.0.0:18000",{"_index":1530,"t":{"429":{"position":[[699,13]]}}}],["0.0.0.0:30303",{"_index":3788,"t":{"1533":{"position":[[586,13]]}}}],["0.000",{"_index":4173,"t":{"1782":{"position":[[769,7],[984,7]]}}}],["0.000000000000000256",{"_index":3490,"t":{"1307":{"position":[[2231,20]]}}}],["0.005",{"_index":5284,"t":{"2368":{"position":[[1134,8],[1420,8]]}}}],["0.01",{"_index":5282,"t":{"2368":{"position":[[1100,7],[1386,7]]}}}],["0.010",{"_index":2996,"t":{"1133":{"position":[[789,7]]}}}],["0.015925392",{"_index":5293,"t":{"2368":{"position":[[1272,11]]}}}],["0.016",{"_index":2972,"t":{"1103":{"position":[[789,7]]}}}],["0.017712333333333333",{"_index":5398,"t":{"2410":{"position":[[1599,21]]}}}],["0.025",{"_index":5285,"t":{"2368":{"position":[[1146,8],[1432,8]]}}}],["0.05",{"_index":5287,"t":{"2368":{"position":[[1178,7],[1464,7]]}}}],["0.075",{"_index":5283,"t":{"2368":{"position":[[1111,8],[1397,8]]}}}],["0.08",{"_index":3409,"t":{"1279":{"position":[[1266,6]]},"1354":{"position":[[1266,6]]},"2021":{"position":[[1250,6]]},"2041":{"position":[[1250,6]]}}}],["0.1",{"_index":2675,"t":{"930":{"position":[[1708,3]]},"2302":{"position":[[383,4]]},"2368":{"position":[[1158,6],[1444,6]]}}}],["0.23",{"_index":3412,"t":{"1279":{"position":[[1494,6]]},"1354":{"position":[[1494,6]]},"2021":{"position":[[1478,6]]},"2041":{"position":[[1478,6]]}}}],["0.25",{"_index":5289,"t":{"2368":{"position":[[1200,7],[1486,7]]}}}],["0.41",{"_index":3414,"t":{"1279":{"position":[[1722,6]]},"1354":{"position":[[1722,6]]},"2021":{"position":[[1706,6]]},"2041":{"position":[[1706,6]]}}}],["0.44.0/ibm",{"_index":3594,"t":{"1411":{"position":[[984,10]]}}}],["0.5",{"_index":5290,"t":{"2368":{"position":[[1211,6],[1497,6]]}}}],["0.5.1",{"_index":3030,"t":{"1150":{"position":[[537,7]]},"1152":{"position":[[403,7]]}}}],["0.61",{"_index":3417,"t":{"1279":{"position":[[1951,6]]},"1354":{"position":[[1951,6]]},"2021":{"position":[[1935,6]]},"2041":{"position":[[1935,6]]}}}],["0.6517375666666667",{"_index":5401,"t":{"2410":{"position":[[1652,19]]}}}],["0.6534561",{"_index":5400,"t":{"2410":{"position":[[1641,10]]}}}],["0.6666666666666666",{"_index":5403,"t":{"2410":{"position":[[1721,19]]}}}],["0.7.0",{"_index":2278,"t":{"797":{"position":[[67,7]]}}}],["0.7347769666666667",{"_index":5402,"t":{"2410":{"position":[[1672,18]]}}}],["0.75",{"_index":3420,"t":{"1279":{"position":[[2180,6]]},"1354":{"position":[[2180,6]]},"2021":{"position":[[2164,6]]},"2041":{"position":[[2164,6]]},"2368":{"position":[[1123,7],[1409,7]]}}}],["0.8",{"_index":4862,"t":{"2158":{"position":[[468,4]]}}}],["0.8.20",{"_index":1217,"t":{"303":{"position":[[351,9]]}}}],["0.8.4",{"_index":1605,"t":{"457":{"position":[[226,7]]}}}],["0.9458865666666667",{"_index":5399,"t":{"2410":{"position":[[1621,19]]}}}],["00",{"_index":4549,"t":{"1989":{"position":[[602,2],[764,2]]}}}],["0000000000000000000000000000000000000000000000000000000000000000",{"_index":1276,"t":{"325":{"position":[[13570,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000001",{"_index":1262,"t":{"321":{"position":[[897,67],[1033,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000002",{"_index":1277,"t":{"325":{"position":[[13638,67],[14590,66]]}}}],["0000000000000000000000000000000000000000000000000000000000000003",{"_index":1290,"t":{"325":{"position":[[14522,67]]}}}],["000000000000000000000000000000000000000000000000000000000000002f",{"_index":2228,"t":{"787":{"position":[[2593,67]]},"791":{"position":[[1548,67]]}}}],["0000000000000000000000000000000000000000000000000000000000000101",{"_index":1283,"t":{"325":{"position":[[14046,67]]}}}],["0000000000000000000000000000000000000000000000000000000000010101",{"_index":1285,"t":{"325":{"position":[[14182,67]]}}}],["000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57",{"_index":1289,"t":{"325":{"position":[[14454,67]]}}}],["00000000000000000000000065463bf6268e5cc409b6501ec846487b935a1446",{"_index":1281,"t":{"325":{"position":[[13910,67]]}}}],["0000000000000000000000009a6d82ef3912d5ab60473124bccd2f2a640769d7",{"_index":1279,"t":{"325":{"position":[[13774,67]]}}}],["000000000000000000000000fe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1287,"t":{"325":{"position":[[14318,67]]}}}],["0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059",{"_index":2097,"t":{"737":{"position":[[1201,91]]}}}],["00000002",{"_index":4550,"t":{"1989":{"position":[[605,8],[767,8]]}}}],["0002",{"_index":4547,"t":{"1989":{"position":[[590,4],[752,4]]}}}],["0007",{"_index":4546,"t":{"1989":{"position":[[585,4],[747,4]]}}}],["001",{"_index":5081,"t":{"2302":{"position":[[374,5]]}}}],["01",{"_index":3729,"t":{"1502":{"position":[[1006,2],[1171,2]]}}}],["010008",{"_index":4544,"t":{"1989":{"position":[[571,6],[733,6]]}}}],["02",{"_index":3388,"t":{"1279":{"position":[[136,2],[288,2],[430,2],[572,2],[716,2],[1096,2],[1324,2],[1552,2],[1781,2],[2010,2],[2239,2]]},"1354":{"position":[[136,2],[288,2],[430,2],[572,2],[716,2],[1096,2],[1324,2],[1552,2],[1781,2],[2010,2],[2239,2]]},"1425":{"position":[[1340,2],[1343,2],[1454,2],[1457,2],[1564,2],[1567,2],[1677,2],[1680,2],[1806,2],[1809,2],[1955,2],[1958,2],[2076,2],[2079,2],[2157,2],[2160,2],[2264,2],[2267,2],[2405,2],[2408,2],[2544,2],[2547,2],[2624,2],[2627,2],[2740,2],[2743,2],[2903,2],[2906,2]]},"1502":{"position":[[1051,2],[1215,2]]},"2021":{"position":[[120,2],[272,2],[414,2],[556,2],[700,2],[1080,2],[1308,2],[1536,2],[1765,2],[1994,2],[2223,2]]},"2041":{"position":[[120,2],[272,2],[414,2],[556,2],[700,2],[1080,2],[1308,2],[1536,2],[1765,2],[1994,2],[2223,2]]}}}],["020002",{"_index":4545,"t":{"1989":{"position":[[578,6],[740,6]]}}}],["02010002",{"_index":4551,"t":{"1989":{"position":[[614,8],[776,8]]}}}],["03",{"_index":3426,"t":{"1279":{"position":[[2431,2],[2554,2],[2678,2],[2801,2],[2924,2]]},"1354":{"position":[[2435,2],[2558,2],[2682,2],[2805,2],[2928,2]]},"1989":{"position":[[642,2],[804,2]]},"2021":{"position":[[2419,2],[2542,2],[2666,2],[2789,2],[2912,2]]},"2041":{"position":[[2419,2],[2542,2],[2666,2],[2789,2],[2912,2]]},"2548":{"position":[[546,2],[708,2]]}}}],["030000",{"_index":4548,"t":{"1989":{"position":[[595,6],[757,6]]}}}],["03t04:43:49,555\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"defaultsynchronizer\",\"message\":\"start",{"_index":3389,"t":{"1279":{"position":[[139,97]]},"1354":{"position":[[139,97]]},"2021":{"position":[[123,97]]},"2041":{"position":[[123,97]]}}}],["03t04:43:49,556\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"fastsyncdownloader\",\"message\":\"start",{"_index":3562,"t":{"1354":{"position":[[291,96]]},"2021":{"position":[[275,96]]},"2041":{"position":[[275,96]]}}}],["03t04:43:49,556\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"snapsyncdownloader\",\"message\":\"start",{"_index":3391,"t":{"1279":{"position":[[291,96]]}}}],["03t04:43:49,559\",\"level\":\"info\",\"thread\":\"main\",\"class\":\"runner\",\"message\":\"ethereum",{"_index":3393,"t":{"1279":{"position":[[433,84]]},"1354":{"position":[[433,84]]},"2021":{"position":[[417,84]]},"2041":{"position":[[417,84]]}}}],["03t04:43:53,106\",\"level\":\"info\",\"thread\":\"tim",{"_index":3396,"t":{"1279":{"position":[[575,47]]},"1354":{"position":[[575,47]]},"2021":{"position":[[559,47]]},"2041":{"position":[[559,47]]}}}],["03t04:45:04,803\",\"level\":\"info\",\"thread\":\"nioeventloopgroup",{"_index":3400,"t":{"1279":{"position":[[719,59]]},"1354":{"position":[[719,59]]},"2021":{"position":[[703,59]]},"2041":{"position":[[703,59]]}}}],["03t04:46:04,834\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3407,"t":{"1279":{"position":[[1099,54]]},"1354":{"position":[[1099,54]]},"2021":{"position":[[1083,54]]},"2041":{"position":[[1083,54]]}}}],["03t04:48:01,840\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3411,"t":{"1279":{"position":[[1327,54]]},"1354":{"position":[[1327,54]]},"2021":{"position":[[1311,54]]},"2041":{"position":[[1311,54]]}}}],["03t04:49:09,931\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3413,"t":{"1279":{"position":[[1555,54]]},"1354":{"position":[[1555,54]]},"2021":{"position":[[1539,54]]},"2041":{"position":[[1539,54]]}}}],["03t04:50:12,466\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3416,"t":{"1279":{"position":[[1784,54]]},"1354":{"position":[[1784,54]]},"2021":{"position":[[1768,54]]},"2041":{"position":[[1768,54]]}}}],["03t04:51:20,977\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3419,"t":{"1279":{"position":[[2013,54]]},"1354":{"position":[[2013,54]]},"2021":{"position":[[1997,54]]},"2041":{"position":[[1997,54]]}}}],["03t04:51:28,985\",\"level\":\"info\",\"thread\":\"ethschedul",{"_index":3421,"t":{"1279":{"position":[[2242,54]]},"1354":{"position":[[2242,54]]},"2021":{"position":[[2226,54]]},"2041":{"position":[[2226,54]]}}}],["04474795f5b996ff80cb47c148d4c5ccdbe09ef27551820caa9c2f8ed149cce3",{"_index":3059,"t":{"1152":{"position":[[884,64]]}}}],["04:00",{"_index":3817,"t":{"1551":{"position":[[443,5]]}}}],["05",{"_index":2363,"t":{"852":{"position":[[100,2]]},"1103":{"position":[[596,2],[811,2],[1013,2],[1215,2],[1417,2],[1837,2],[2189,2]]},"1782":{"position":[[60,2],[283,2],[567,2],[782,2]]}}}],["05:45:41.162+00:00",{"_index":3629,"t":{"1425":{"position":[[1346,18]]}}}],["05:45:43.433+00:00",{"_index":3631,"t":{"1425":{"position":[[1460,18]]}}}],["05:45:43.837+00:00",{"_index":3633,"t":{"1425":{"position":[[1570,18]]}}}],["05:46:09.863+00:00",{"_index":3634,"t":{"1425":{"position":[[1683,18]]}}}],["05:46:09.918+00:00",{"_index":3636,"t":{"1425":{"position":[[1812,18]]}}}],["05:46:09.926+00:00",{"_index":3638,"t":{"1425":{"position":[[1961,18]]}}}],["05:46:10.100+00:00",{"_index":3641,"t":{"1425":{"position":[[2082,18]]}}}],["05:46:10.155+00:00",{"_index":3642,"t":{"1425":{"position":[[2163,18]]}}}],["05:46:10.222+00:00",{"_index":3643,"t":{"1425":{"position":[[2270,18]]}}}],["05:46:10.336+00:00",{"_index":3646,"t":{"1425":{"position":[[2411,18]]}}}],["05:46:10.441+00:00",{"_index":3649,"t":{"1425":{"position":[[2550,18]]}}}],["05:46:10.446+00:00",{"_index":3650,"t":{"1425":{"position":[[2630,18]]}}}],["05:46:11.023+00:00",{"_index":3651,"t":{"1425":{"position":[[2746,18],[2909,18]]}}}],["06df6fb2d6d0b17a870decb858cc46bf7b69142ab7b9318f7603ed3fd4ad240",{"_index":3060,"t":{"1152":{"position":[[961,64]]}}}],["07/schema",{"_index":1954,"t":{"655":{"position":[[376,12]]}}}],["07:16:18.360+10:00",{"_index":3011,"t":{"1133":{"position":[[1910,18]]}}}],["07:22:17.883+10:00",{"_index":2994,"t":{"1133":{"position":[[602,18]]}}}],["07:22:19.057+10:00",{"_index":2997,"t":{"1133":{"position":[[817,18]]}}}],["07:22:21.044+10:00",{"_index":3002,"t":{"1133":{"position":[[1037,18]]}}}],["07:22:23.049+10:00",{"_index":3005,"t":{"1133":{"position":[[1257,18]]}}}],["07:22:25.060+10:00",{"_index":3008,"t":{"1133":{"position":[[1477,18]]}}}],["07:33:11.458+10:00",{"_index":3014,"t":{"1133":{"position":[[2262,18]]}}}],["08",{"_index":4162,"t":{"1782":{"position":[[63,2],[286,2],[570,2],[785,2]]}}}],["08:43:16.592+10:00",{"_index":2983,"t":{"1103":{"position":[[1843,18],[2195,18]]}}}],["08:47:00.221+10:00",{"_index":2965,"t":{"1103":{"position":[[602,18]]}}}],["08:47:02.071+10:00",{"_index":2973,"t":{"1103":{"position":[[817,18]]}}}],["08:47:04.051+10:00",{"_index":2976,"t":{"1103":{"position":[[1019,18]]}}}],["08:47:06.058+10:00",{"_index":2978,"t":{"1103":{"position":[[1221,18]]}}}],["08:47:08.058+10:00",{"_index":2980,"t":{"1103":{"position":[[1423,18]]}}}],["0905d1b2/osx",{"_index":5160,"t":{"2346":{"position":[[1212,12]]}}}],["09:49:00.881+10:00",{"_index":2365,"t":{"852":{"position":[[106,18]]}}}],["0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",{"_index":2100,"t":{"737":{"position":[[1480,89]]}}}],["0a8156e7ee392d885d10eaa86afd0e323afdcd95",{"_index":5575,"t":{"2438":{"position":[[1381,43],[1597,43]]}}}],["0d2294a5/osx",{"_index":5149,"t":{"2344":{"position":[[1250,12]]}}}],["0d9217f0a1f7c602fd67052d20171ff73b156d1b87ea258cb6a5d94f71298158",{"_index":1288,"t":{"325":{"position":[[14386,67]]}}}],["0m",{"_index":3264,"t":{"1213":{"position":[[834,5],[861,5],[889,5]]}}}],["0x",{"_index":1018,"t":{"231":{"position":[[36,2]]},"257":{"position":[[1118,2]]},"325":{"position":[[15181,2]]},"461":{"position":[[2146,5]]},"709":{"position":[[1668,5]]},"725":{"position":[[1282,5]]},"727":{"position":[[1314,5],[1803,5]]},"729":{"position":[[1416,5],[1905,5]]},"741":{"position":[[1478,5],[1798,5],[2019,4],[2765,5],[2985,4]]},"769":{"position":[[2075,2]]},"787":{"position":[[2897,4],[3368,4]]},"791":{"position":[[1748,4]]},"817":{"position":[[2055,4]]},"1000":{"position":[[1161,2],[2259,2]]},"1077":{"position":[[2860,2],[3651,2]]},"1148":{"position":[[518,5]]},"1152":{"position":[[1642,5],[2130,5]]},"1166":{"position":[[255,3]]},"1799":{"position":[[1258,5]]},"1801":{"position":[[1186,5]]},"1818":{"position":[[1977,5],[3112,5]]},"1820":{"position":[[1579,5]]},"1846":{"position":[[314,2]]},"1909":{"position":[[1516,5]]},"1911":{"position":[[1308,5],[2571,5]]},"2066":{"position":[[425,2]]},"2098":{"position":[[360,3]]},"2168":{"position":[[455,3]]},"2346":{"position":[[643,2]]},"2400":{"position":[[1590,4],[2103,5]]},"2420":{"position":[[1581,5]]},"2446":{"position":[[966,5]]},"2526":{"position":[[1369,4]]},"2528":{"position":[[1983,5],[2522,4]]},"2530":{"position":[[1608,5],[1769,5],[1894,4],[1995,5],[2156,5],[2281,4]]},"2532":{"position":[[1454,4]]},"2536":{"position":[[1087,4],[1237,4]]},"2540":{"position":[[1442,5],[1762,5],[1983,4],[2729,5],[2949,4]]},"2544":{"position":[[1987,5]]}}}],["0x0",{"_index":846,"t":{"182":{"position":[[577,6]]},"227":{"position":[[756,6],[813,6],[831,6]]},"257":{"position":[[395,6],[2655,3]]},"325":{"position":[[496,6],[1434,6],[1452,6],[1766,6],[14693,6],[14711,6]]},"453":{"position":[[330,6],[862,6],[1230,6],[1762,6]]},"461":{"position":[[1524,6],[2213,5]]},"507":{"position":[[307,6]]},"576":{"position":[[997,3]]},"725":{"position":[[969,6],[1210,6]]},"727":{"position":[[1001,6],[1242,6],[1490,6],[1731,6]]},"729":{"position":[[1103,6],[1344,6],[1592,6],[1833,6]]},"733":{"position":[[777,6],[2168,6],[2196,6]]},"737":{"position":[[1103,6]]},"741":{"position":[[1290,5],[1865,5],[2279,6],[2832,5]]},"769":{"position":[[911,6]]},"787":{"position":[[3007,6]]},"817":{"position":[[1650,6]]},"819":{"position":[[1153,6]]},"1030":{"position":[[704,6]]},"1052":{"position":[[2262,5]]},"1087":{"position":[[687,6]]},"1117":{"position":[[696,6]]},"1144":{"position":[[858,6]]},"1148":{"position":[[206,6],[446,6]]},"1150":{"position":[[1026,6],[1267,6]]},"1152":{"position":[[1330,6],[1570,6],[1818,6],[2058,6]]},"1407":{"position":[[577,6]]},"1687":{"position":[[359,6],[600,6]]},"1689":{"position":[[252,6],[493,6],[805,6],[1046,6]]},"1746":{"position":[[566,5]]},"1799":{"position":[[1218,6]]},"1801":{"position":[[1146,6]]},"1810":{"position":[[519,6]]},"1818":{"position":[[1474,6],[1663,6],[1905,6],[2799,6],[3040,6]]},"1824":{"position":[[576,6]]},"1854":{"position":[[868,3]]},"1909":{"position":[[1476,6]]},"1911":{"position":[[1268,6],[2531,6]]},"1932":{"position":[[619,5],[729,3]]},"2338":{"position":[[1163,7],[1248,6],[1294,6]]},"2352":{"position":[[454,3],[1269,6],[3277,6]]},"2358":{"position":[[2794,6],[2833,6],[2849,6],[7358,6],[7397,6],[7413,6]]},"2420":{"position":[[1721,6],[1823,6],[2561,6],[2576,5],[5202,5]]},"2428":{"position":[[1461,6],[1702,6],[1944,6],[2185,6]]},"2430":{"position":[[797,6],[1037,6],[1279,6],[1519,6]]},"2432":{"position":[[1167,6],[1407,6],[1649,6],[1889,6]]},"2438":{"position":[[1972,6],[2269,6]]},"2440":{"position":[[858,6]]},"2442":{"position":[[1279,6]]},"2444":{"position":[[1475,6]]},"2446":{"position":[[1060,6]]},"2450":{"position":[[1790,5]]},"2452":{"position":[[639,5]]},"2454":{"position":[[728,7]]},"2456":{"position":[[673,3]]},"2482":{"position":[[1570,6]]},"2526":{"position":[[1216,5]]},"2528":{"position":[[1612,6],[1898,5],[2467,5]]},"2530":{"position":[[1876,6],[2263,6]]},"2532":{"position":[[1301,5],[1878,5]]},"2534":{"position":[[833,7],[1081,5]]},"2536":{"position":[[1220,6]]},"2540":{"position":[[1254,5],[1829,5],[2243,6],[2796,5]]},"2544":{"position":[[2070,6]]}}}],["0x0\"],\"id\":1",{"_index":5631,"t":{"2452":{"position":[[454,15]]},"2454":{"position":[[600,15]]}}}],["0x00",{"_index":2234,"t":{"787":{"position":[[2883,7]]},"1854":{"position":[[1341,4]]}}}],["0x0000000000000000",{"_index":1036,"t":{"235":{"position":[[421,18]]},"265":{"position":[[421,18]]},"333":{"position":[[421,18]]},"1816":{"position":[[1102,21]]},"2358":{"position":[[693,21],[5257,21]]},"2416":{"position":[[3328,21]]},"2418":{"position":[[3410,21]]},"2452":{"position":[[3824,21]]}}}],["0x0000000000000000000000000000000000000000",{"_index":1001,"t":{"227":{"position":[[314,45]]},"325":{"position":[[937,45],[2035,45]]},"665":{"position":[[1039,43]]},"683":{"position":[[1052,43]]},"741":{"position":[[2303,44]]},"751":{"position":[[1052,43]]},"769":{"position":[[501,45]]},"928":{"position":[[1485,44]]},"1030":{"position":[[876,45]]},"1087":{"position":[[859,45]]},"1117":{"position":[[868,45]]},"1144":{"position":[[1185,45]]},"1816":{"position":[[2007,45]]},"1932":{"position":[[411,44]]},"2354":{"position":[[995,45],[1060,45],[1125,45],[1190,45],[1255,44]]},"2358":{"position":[[1598,45],[6162,45]]},"2526":{"position":[[2016,45]]},"2540":{"position":[[2267,44]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000",{"_index":1008,"t":{"227":{"position":[[677,69],[852,68]]},"235":{"position":[[323,66]]},"265":{"position":[[323,66]]},"325":{"position":[[1473,68],[14732,68]]},"333":{"position":[[323,66]]},"769":{"position":[[832,69]]},"1799":{"position":[[1090,69]]},"1801":{"position":[[1018,69]]},"1901":{"position":[[602,69],[874,69],[1082,69]]},"1909":{"position":[[1348,69]]},"1911":{"position":[[1140,69],[2403,69]]},"2358":{"position":[[530,69],[5094,69]]},"2380":{"position":[[977,69]]},"2440":{"position":[[927,68],[1322,68]]},"2460":{"position":[[793,69]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000\",\"suggestedfeerecipi",{"_index":4190,"t":{"1797":{"position":[[477,93]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000\"},{\"timestamp",{"_index":4188,"t":{"1797":{"position":[[373,83]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":1627,"t":{"461":{"position":[[828,517]]},"737":{"position":[[1817,516]]},"1799":{"position":[[558,517]]},"1801":{"position":[[486,517]]},"1909":{"position":[[816,517]]},"1911":{"position":[[608,517],[1871,517]]},"2358":{"position":[[812,517],[5376,517]]},"2416":{"position":[[3380,517]]},"2418":{"position":[[3462,517]]},"2420":{"position":[[2887,517]]},"2450":{"position":[[1094,517],[2491,516]]},"2452":{"position":[[3216,517]]}}}],["0x000000000000000000000000000000000000000000000000000000000000000001a54556254bfa3db2daa7673435ec63649925c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":1004,"t":{"227":{"position":[[394,239]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000004d04551bdd9ae08af1fd661e49d4ab662c98c532c7ec0e4656a27e4de7d330af578ab1e4f5e49e085ff1d78673c7388ed9ccf017fbe89e53066bfa4018142c0701",{"_index":5231,"t":{"2358":{"position":[[6268,199]]}}}],["0x00000000000000000000000000000000000000000000000000000000000000008c6a091f07e4ba3930f2f5fabbfc5b1c70986319096760ba200a6abc0d30e33c2d501702d1b58d7f75807bdbf981044557628611319121170b96466ec06bb3fd01",{"_index":5213,"t":{"2358":{"position":[[1704,199]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000@:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",{"_index":2151,"t":{"769":{"position":[[656,140]]}}}],["addresses\":[\"stzpbqhcofd9zafdnc00e/n2ofv9p4/ztbbeevtxj3e=\",\"quhb1pqpgn1w8zszsyiifncealvy/m/rausyq5wvmre=\"],\"name\":\"group",{"_index":2027,"t":{"711":{"position":[[501,123],[761,123]]}}}],["addressmap",{"_index":5192,"t":{"2354":{"position":[[469,11],[960,13]]}}}],["addto",{"_index":1710,"t":{"517":{"position":[[65,5]]}}}],["adequ",{"_index":1762,"t":{"542":{"position":[[482,8]]},"611":{"position":[[692,8]]}}}],["adjust",{"_index":1100,"t":{"257":{"position":[[2503,6]]},"325":{"position":[[16884,6]]},"1225":{"position":[[486,8]]},"1765":{"position":[[287,6]]},"1936":{"position":[[478,6]]},"1999":{"position":[[1435,8]]},"2070":{"position":[[448,6]]},"2532":{"position":[[134,6]]}}}],["admin",{"_index":192,"t":{"25":{"position":[[90,5]]},"29":{"position":[[134,7]]},"434":{"position":[[342,5]]},"908":{"position":[[168,5]]},"926":{"position":[[124,5]]},"1040":{"position":[[738,6]]},"1465":{"position":[[828,5]]},"1769":{"position":[[74,6]]},"2212":{"position":[[371,6]]},"2260":{"position":[[360,6]]},"2332":{"position":[[4,5],[89,5],[162,5]]}}}],["admin:p",{"_index":4058,"t":{"1715":{"position":[[293,16]]}}}],["admin_addp",{"_index":1692,"t":{"493":{"position":[[964,14],[1048,13]]},"1050":{"position":[[8,13]]},"1166":{"position":[[77,13]]},"1539":{"position":[[395,13]]},"1553":{"position":[[217,15]]},"1559":{"position":[[434,13],[615,13]]}}}],["admin_changeloglevel",{"_index":3849,"t":{"1592":{"position":[[313,20]]},"2336":{"position":[[1284,23]]}}}],["admin_generatelogbloomcach",{"_index":3020,"t":{"1146":{"position":[[609,27]]},"1870":{"position":[[671,27]]},"2338":{"position":[[157,27],[1122,30]]}}}],["admin_logsremovecach",{"_index":5143,"t":{"2340":{"position":[[1032,24]]}}}],["admin_logsrepaircach",{"_index":5145,"t":{"2342":{"position":[[470,24]]}}}],["admin_nodeinfo",{"_index":3826,"t":{"1563":{"position":[[204,14]]}}}],["admin_p",{"_index":3810,"t":{"1549":{"position":[[73,12],[129,11],[292,11]]},"1559":{"position":[[857,13]]}}}],["admin_removep",{"_index":3812,"t":{"1549":{"position":[[308,16]]},"1559":{"position":[[452,16],[633,16]]}}}],["administ",{"_index":191,"t":{"25":{"position":[[56,10]]}}}],["administr",{"_index":5129,"t":{"2332":{"position":[[30,14]]}}}],["advanc",{"_index":2515,"t":{"906":{"position":[[1336,8]]},"908":{"position":[[1422,8]]},"993":{"position":[[172,8]]},"1590":{"position":[[117,8]]},"1934":{"position":[[767,7]]}}}],["advantag",{"_index":1741,"t":{"532":{"position":[[345,12]]}}}],["advers",{"_index":3809,"t":{"1547":{"position":[[259,9]]}}}],["adversari",{"_index":363,"t":{"53":{"position":[[505,11]]}}}],["advertis",{"_index":922,"t":{"213":{"position":[[352,10]]},"1166":{"position":[[1706,10]]},"1541":{"position":[[819,10]]},"1563":{"position":[[120,10]]},"1567":{"position":[[643,10]]},"1571":{"position":[[107,9],[194,10],[295,10]]},"1573":{"position":[[71,10],[249,10],[332,10]]},"1709":{"position":[[995,10]]},"2017":{"position":[[292,10],[528,10]]},"2037":{"position":[[328,10],[574,10],[810,10]]},"2039":{"position":[[330,10],[862,10]]},"2188":{"position":[[197,10]]},"2344":{"position":[[667,11]]}}}],["ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",{"_index":2158,"t":{"769":{"position":[[1568,67]]},"829":{"position":[[1024,67]]},"1030":{"position":[[1545,67]]},"1087":{"position":[[1528,67]]},"1117":{"position":[[1537,67]]}}}],["aedead2c33b41c31b4afd2246c6bf5131c209d4b0ca6c2247778ac7be7443a00",{"_index":1282,"t":{"325":{"position":[[13978,67]]}}}],["affect",{"_index":149,"t":{"19":{"position":[[128,7]]},"277":{"position":[[214,6]]},"1179":{"position":[[665,6]]},"1547":{"position":[[269,6]]},"1658":{"position":[[63,6]]},"1725":{"position":[[17,6]]},"1740":{"position":[[218,7]]},"2516":{"position":[[118,7]]}}}],["affin",{"_index":4647,"t":{"2050":{"position":[[2578,9],[2944,9],[3963,9]]}}}],["again",{"_index":556,"t":{"103":{"position":[[313,6]]},"560":{"position":[[643,6]]},"891":{"position":[[279,6]]},"948":{"position":[[782,5]]},"1289":{"position":[[1989,6]]},"1375":{"position":[[321,5]]},"1425":{"position":[[645,5]]},"1728":{"position":[[708,6]]},"1803":{"position":[[56,6]]}}}],["against",{"_index":826,"t":{"170":{"position":[[116,7]]},"483":{"position":[[843,7],[1112,7]]},"1023":{"position":[[234,7]]},"1183":{"position":[[354,7]]},"1260":{"position":[[2382,7],[2529,7]]},"1852":{"position":[[1741,7]]},"1866":{"position":[[490,7]]},"1882":{"position":[[377,7]]},"1983":{"position":[[102,8],[162,7]]},"2330":{"position":[[371,7]]},"2400":{"position":[[700,7]]}}}],["agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005",{"_index":3782,"t":{"1529":{"position":[[403,65]]}}}],["aggreg",{"_index":1407,"t":{"405":{"position":[[181,10]]},"421":{"position":[[171,9]]}}}],["ago",{"_index":1518,"t":{"429":{"position":[[510,3],[616,3],[784,3]]}}}],["agre",{"_index":132,"t":{"11":{"position":[[346,5]]},"467":{"position":[[463,5]]},"469":{"position":[[191,5],[476,6]]}}}],["agreement",{"_index":3138,"t":{"1195":{"position":[[171,9]]},"2292":{"position":[[268,10]]}}}],["ahead",{"_index":2412,"t":{"868":{"position":[[577,5]]},"1301":{"position":[[1062,5]]}}}],["aid",{"_index":2701,"t":{"940":{"position":[[29,3]]}}}],["ak",{"_index":2485,"t":{"895":{"position":[[145,3]]},"908":{"position":[[25,5],[243,4],[710,4],[727,3],[1213,3],[1834,3],[1866,3],[2071,3],[2652,3],[2691,3]]},"2045":{"position":[[105,5]]},"2052":{"position":[[1356,3]]}}}],["aks_cluster_nam",{"_index":2582,"t":{"908":{"position":[[3315,17],[3483,18]]}}}],["aks_managed_ident",{"_index":2583,"t":{"908":{"position":[[3337,20],[3502,22]]}}}],["aks_namespac",{"_index":2580,"t":{"908":{"position":[[3269,14],[3525,15]]}}}],["aks_resource_group",{"_index":2581,"t":{"908":{"position":[[3295,19],[3462,20]]}}}],["alert",{"_index":1925,"t":{"637":{"position":[[375,8]]},"881":{"position":[[106,7],[345,6]]},"926":{"position":[[193,6]]},"971":{"position":[[1071,8],[1260,6],[1284,5]]},"1624":{"position":[[40,8],[381,5]]},"1626":{"position":[[304,5]]},"1628":{"position":[[1913,5]]}}}],["alertmanag",{"_index":2769,"t":{"971":{"position":[[1237,12]]}}}],["algorithm",{"_index":443,"t":{"69":{"position":[[109,10]]},"912":{"position":[[189,10],[365,9]]},"928":{"position":[[1304,10]]},"1195":{"position":[[123,10]]},"1608":{"position":[[355,9]]},"1709":{"position":[[78,9],[152,9],[326,10],[388,9],[444,9]]},"1711":{"position":[[247,11]]},"1728":{"position":[[1140,10]]},"2220":{"position":[[261,9]]},"2268":{"position":[[253,9]]}}}],["algorithm=\"es256",{"_index":4960,"t":{"2220":{"position":[[231,17]]},"2268":{"position":[[223,17]]}}}],["algorithm=[,:[,[,metr",{"_index":4827,"t":{"2138":{"position":[[83,18]]}}}],["cater",{"_index":2771,"t":{"973":{"position":[[67,5]]}}}],["caus",{"_index":423,"t":{"67":{"position":[[222,5]]},"93":{"position":[[975,5]]},"186":{"position":[[452,5]]},"221":{"position":[[2698,7]]},"247":{"position":[[382,7]]},"253":{"position":[[441,5]]},"279":{"position":[[386,7]]},"343":{"position":[[404,7]]},"954":{"position":[[138,6]]},"956":{"position":[[130,6]]},"958":{"position":[[138,6]]},"1146":{"position":[[19,6]]},"1225":{"position":[[150,6]]},"1242":{"position":[[287,5]]},"1260":{"position":[[1532,6]]},"1547":{"position":[[355,5]]},"1728":{"position":[[40,6]]},"1752":{"position":[[249,7]]},"1812":{"position":[[51,5]]},"1844":{"position":[[316,7]]},"1999":{"position":[[653,6]]},"2254":{"position":[[414,5]]},"2302":{"position":[[899,5]]},"2432":{"position":[[316,5]]}}}],["caution",{"_index":209,"t":{"27":{"position":[[0,7]]},"43":{"position":[[93,7]]},"53":{"position":[[531,7]]},"61":{"position":[[0,7]]},"67":{"position":[[150,7]]},"73":{"position":[[181,7]]},"75":{"position":[[251,7]]},"81":{"position":[[356,7]]},"127":{"position":[[18,7]]},"138":{"position":[[22,7]]},"184":{"position":[[616,7]]},"221":{"position":[[323,7],[2559,7]]},"247":{"position":[[242,7]]},"257":{"position":[[1439,7]]},"279":{"position":[[246,7]]},"287":{"position":[[0,7]]},"323":{"position":[[535,7]]},"325":{"position":[[15824,7]]},"343":{"position":[[264,7]]},"361":{"position":[[226,7]]},"455":{"position":[[852,7]]},"459":{"position":[[140,7]]},"469":{"position":[[370,7]]},"560":{"position":[[650,7]]},"586":{"position":[[583,7]]},"723":{"position":[[100,9]]},"998":{"position":[[0,7]]},"1168":{"position":[[0,7]]},"1260":{"position":[[0,7]]},"1283":{"position":[[134,7]]},"1360":{"position":[[18,7]]},"1419":{"position":[[281,7]]},"1423":{"position":[[324,7]]},"1636":{"position":[[980,7]]},"1668":{"position":[[125,7]]},"1670":{"position":[[206,7]]},"1674":{"position":[[136,7]]},"1676":{"position":[[716,7]]},"1697":{"position":[[523,7]]},"1707":{"position":[[95,7]]},"1752":{"position":[[99,7],[463,7]]},"1769":{"position":[[231,7]]},"1792":{"position":[[609,7]]},"1794":{"position":[[116,7]]},"1876":{"position":[[42,7]]},"1932":{"position":[[805,7]]},"1934":{"position":[[714,7]]},"1987":{"position":[[0,7]]},"2056":{"position":[[583,7]]},"2082":{"position":[[557,7]]},"2110":{"position":[[275,7]]},"2208":{"position":[[357,7]]},"2228":{"position":[[295,7]]},"2254":{"position":[[289,7]]},"2302":{"position":[[449,7]]},"2310":{"position":[[245,7]]},"2320":{"position":[[279,7]]},"2328":{"position":[[88,7]]},"2330":{"position":[[0,7]]},"2334":{"position":[[20,7]]},"2432":{"position":[[191,7]]}}}],["caveat",{"_index":3963,"t":{"1658":{"position":[[497,9]]}}}],["cb9f0fcc6f16386df70da3c5",{"_index":3404,"t":{"1279":{"position":[[935,26]]},"1354":{"position":[[935,26]]},"2021":{"position":[[919,26]]},"2041":{"position":[[919,26]]}}}],["cd",{"_index":1510,"t":{"429":{"position":[[118,2]]},"515":{"position":[[151,2]]},"881":{"position":[[404,2],[888,2]]},"920":{"position":[[226,2]]},"928":{"position":[[2437,2]]},"969":{"position":[[166,2]]},"1000":{"position":[[810,2]]},"1291":{"position":[[551,2]]},"1307":{"position":[[191,2],[1854,2]]},"1315":{"position":[[272,2]]},"1325":{"position":[[83,2]]}}}],["cd636rzlcqvspoxt/exbkwqfbo7kpazo0qlwhernsl8",{"_index":2102,"t":{"737":{"position":[[1756,47]]}}}],["cea2b0602db61f92b76ec4402875cc38eedc9fc425cb1b697fc2265d50fc20fb",{"_index":1263,"t":{"321":{"position":[[965,67]]}}}],["certain",{"_index":2463,"t":{"889":{"position":[[126,7]]},"1771":{"position":[[1329,7]]},"1777":{"position":[[673,7]]},"1917":{"position":[[209,7]]},"2112":{"position":[[497,7]]}}}],["certif",{"_index":374,"t":{"57":{"position":[[190,12],[567,12]]},"59":{"position":[[47,12]]},"61":{"position":[[106,12],[280,11]]},"188":{"position":[[347,12]]},"190":{"position":[[115,11],[198,12],[589,11],[1161,11],[1261,11],[1360,11]]},"193":{"position":[[208,11]]},"197":{"position":[[67,11],[123,11],[228,11]]},"199":{"position":[[239,11]]},"205":{"position":[[246,12]]},"311":{"position":[[55,12],[82,12],[306,12],[373,12]]},"315":{"position":[[141,11]]},"317":{"position":[[289,12]]},"361":{"position":[[139,12]]},"362":{"position":[[144,11],[205,12],[979,11]]},"365":{"position":[[175,11]]},"369":{"position":[[206,11]]},"375":{"position":[[213,12]]},"417":{"position":[[1017,11],[1136,11],[2008,11],[2127,11]]},"441":{"position":[[890,11]]},"621":{"position":[[311,11]]},"625":{"position":[[352,11]]},"1498":{"position":[[43,12],[74,11]]},"1504":{"position":[[71,12]]},"2106":{"position":[[210,11],[237,11]]},"2238":{"position":[[266,12]]},"2246":{"position":[[344,11]]},"2250":{"position":[[359,12],[386,13]]}}}],["certifi",{"_index":3591,"t":{"1411":{"position":[[925,9],[1002,9],[1133,9]]}}}],["certificate'",{"_index":5001,"t":{"2250":{"position":[[417,13]]}}}],["chain",{"_index":90,"t":{"6":{"position":[[264,5]]},"11":{"position":[[484,5],[556,6]]},"21":{"position":[[602,6]]},"23":{"position":[[292,5]]},"31":{"position":[[95,5]]},"49":{"position":[[108,6],[212,5]]},"71":{"position":[[700,5]]},"132":{"position":[[81,6]]},"152":{"position":[[241,5]]},"182":{"position":[[150,5]]},"186":{"position":[[250,5]]},"219":{"position":[[564,6]]},"223":{"position":[[872,5]]},"253":{"position":[[260,5]]},"255":{"position":[[393,6]]},"257":{"position":[[1790,6],[1810,5],[1952,6],[2369,6],[2431,5]]},"261":{"position":[[33,5]]},"263":{"position":[[538,5],[711,5]]},"323":{"position":[[328,6]]},"325":{"position":[[16175,6],[16195,5],[16337,6],[16750,6],[16812,5]]},"329":{"position":[[33,5]]},"331":{"position":[[538,5],[711,5]]},"393":{"position":[[321,7]]},"511":{"position":[[628,5]]},"552":{"position":[[588,5],[606,5],[651,5]]},"637":{"position":[[357,5]]},"675":{"position":[[763,6]]},"755":{"position":[[71,5],[244,5],[606,5],[841,6]]},"769":{"position":[[1148,6],[1422,6],[1700,6]]},"829":{"position":[[882,6],[1156,6]]},"879":{"position":[[315,5]]},"889":{"position":[[18,5]]},"891":{"position":[[194,5]]},"928":{"position":[[1937,5]]},"932":{"position":[[145,6]]},"936":{"position":[[135,5]]},"985":{"position":[[55,5]]},"1030":{"position":[[1125,6],[1399,6],[1677,6]]},"1077":{"position":[[366,5]]},"1087":{"position":[[1108,6],[1382,6],[1660,6]]},"1117":{"position":[[1117,6],[1391,6],[1669,6]]},"1133":{"position":[[894,6],[1114,6],[1334,6],[1554,6]]},"1144":{"position":[[48,6],[89,5]]},"1183":{"position":[[59,5],[247,5],[291,5],[475,5],[536,5],[580,5],[677,5],[888,5],[919,5],[925,5]]},"1185":{"position":[[42,5]]},"1187":{"position":[[18,5],[177,5],[250,6],[309,5],[334,6],[436,5],[608,5],[675,5],[692,5]]},"1189":{"position":[[293,5]]},"1195":{"position":[[430,5],[555,6]]},"1197":{"position":[[658,5],[948,6],[1656,5],[1823,6],[1855,7],[1867,5]]},"1209":{"position":[[213,6],[784,6]]},"1211":{"position":[[283,5]]},"1250":{"position":[[404,5]]},"1260":{"position":[[328,5],[1690,5]]},"1281":{"position":[[156,5]]},"1311":{"position":[[563,5]]},"1356":{"position":[[180,5]]},"1365":{"position":[[81,6]]},"1401":{"position":[[198,5]]},"1403":{"position":[[198,5]]},"1407":{"position":[[150,5]]},"1409":{"position":[[273,5]]},"1413":{"position":[[197,5]]},"1435":{"position":[[73,5]]},"1449":{"position":[[95,5]]},"1455":{"position":[[1319,5]]},"1477":{"position":[[110,5]]},"1541":{"position":[[1497,5],[1783,5]]},"1624":{"position":[[362,5],[433,5]]},"1662":{"position":[[288,7]]},"1664":{"position":[[371,7]]},"1782":{"position":[[144,6],[367,6]]},"1814":{"position":[[342,5]]},"1816":{"position":[[108,5],[200,6]]},"1818":{"position":[[852,5],[944,5]]},"1820":{"position":[[366,5],[458,6]]},"1824":{"position":[[108,5],[686,5]]},"1830":{"position":[[878,5]]},"1836":{"position":[[176,5]]},"1838":{"position":[[932,5]]},"1850":{"position":[[540,5]]},"1864":{"position":[[549,7]]},"1866":{"position":[[369,7],[443,5]]},"1917":{"position":[[126,6],[197,5]]},"1930":{"position":[[160,5]]},"1932":{"position":[[863,5]]},"1979":{"position":[[311,5]]},"2023":{"position":[[156,5]]},"2043":{"position":[[180,5]]},"2050":{"position":[[2105,5]]},"2052":{"position":[[1236,5]]},"2180":{"position":[[241,5],[562,5]]},"2182":{"position":[[261,5]]},"2204":{"position":[[193,5]]},"2254":{"position":[[378,5]]},"2370":{"position":[[91,5]]},"2374":{"position":[[35,5]]},"2398":{"position":[[67,5],[214,5]]},"2402":{"position":[[12,5],[65,5]]},"2432":{"position":[[280,5]]},"2482":{"position":[[136,6]]},"2518":{"position":[[97,5],[388,5],[475,5],[504,5],[537,5]]},"2526":{"position":[[235,7]]},"2528":{"position":[[199,7]]},"2530":{"position":[[221,7]]},"2532":{"position":[[364,7]]},"2534":{"position":[[230,7]]},"2536":{"position":[[241,7]]},"2538":{"position":[[178,7]]},"2540":{"position":[[268,7]]}}}],["chain=/l",{"_index":4130,"t":{"1767":{"position":[[240,23]]}}}],["endpoint:port>/readi",{"_index":4127,"t":{"1765":{"position":[[446,24]]}}}],["endpoint=http://localhost:8551",{"_index":4601,"t":{"2017":{"position":[[155,30]]},"2037":{"position":[[191,30],[437,30]]},"2039":{"position":[[193,30]]}}}],["energi",{"_index":3147,"t":{"1197":{"position":[[527,7]]}}}],["enforc",{"_index":126,"t":{"11":{"position":[[217,8]]},"15":{"position":[[30,7]]},"19":{"position":[[474,8]]},"21":{"position":[[339,7]]},"25":{"position":[[486,9],[561,7]]}}}],["engin",{"_index":1564,"t":{"439":{"position":[[422,6]]},"582":{"position":[[696,7]]},"659":{"position":[[62,7]]},"677":{"position":[[62,7]]},"745":{"position":[[58,7]]},"1191":{"position":[[211,6]]},"1271":{"position":[[239,6]]},"1275":{"position":[[240,6],[304,6],[327,6],[445,6],[537,6],[835,6],[866,6]]},"1285":{"position":[[238,6]]},"1346":{"position":[[239,6]]},"1350":{"position":[[272,6],[302,6],[325,6],[549,6],[579,6],[602,6],[719,6]]},"1459":{"position":[[203,6],[244,6]]},"1786":{"position":[[70,6]]},"1788":{"position":[[4,6],[109,6],[187,6],[219,6],[242,6],[286,6]]},"1790":{"position":[[24,6],[88,6],[187,6],[287,6]]},"1792":{"position":[[191,6],[401,6],[547,6],[655,6]]},"1794":{"position":[[35,6],[80,6],[254,6]]},"1896":{"position":[[70,6],[193,6],[244,6],[314,6]]},"1899":{"position":[[30,6],[139,6],[245,6]]},"1913":{"position":[[60,6]]},"2009":{"position":[[223,6]]},"2013":{"position":[[245,6],[308,6],[331,6],[449,6],[548,6],[748,6],[779,6]]},"2017":{"position":[[700,6]]},"2019":{"position":[[1113,6]]},"2029":{"position":[[223,6]]},"2033":{"position":[[252,6],[282,6],[305,6],[509,6],[539,6],[562,6],[679,6]]},"2050":{"position":[[5063,6]]},"2094":{"position":[[57,6],[118,6],[207,6],[304,6]]},"2096":{"position":[[57,6],[94,6],[149,6],[213,6]]},"2098":{"position":[[57,6],[84,6],[143,6],[239,6]]},"2100":{"position":[[57,6],[93,6],[141,6],[189,6]]},"2102":{"position":[[57,6],[82,6],[129,6],[179,6],[196,8]]}}}],["engine_exchangecap",{"_index":4406,"t":{"1899":{"position":[[654,30]]}}}],["engine_exchangetransitionconfigurationv1",{"_index":4407,"t":{"1899":{"position":[[699,43],[1124,43]]},"1901":{"position":[[765,43]]},"1923":{"position":[[30,41]]}}}],["engine_executepayloadv1",{"_index":4411,"t":{"1899":{"position":[[991,26]]}}}],["engine_forkchoiceupdatedv1",{"_index":4183,"t":{"1797":{"position":[[32,27]]},"1803":{"position":[[29,26]]},"1899":{"position":[[743,29],[1064,29]]},"1903":{"position":[[754,29]]},"1917":{"position":[[14,27]]},"1919":{"position":[[14,27]]},"1921":{"position":[[36,27]]}}}],["engine_forkchoiceupdatedv2",{"_index":4413,"t":{"1899":{"position":[[1094,29]]}}}],["engine_getpayloadbodiesbyhash",{"_index":4408,"t":{"1899":{"position":[[773,32]]}}}],["engine_getpayloadbodiesbyhashv1",{"_index":4414,"t":{"1899":{"position":[[1168,34]]},"1905":{"position":[[562,34]]}}}],["engine_getpayloadbodiesbyrangev1",{"_index":4409,"t":{"1899":{"position":[[806,35],[1203,34]]},"1907":{"position":[[598,35]]}}}],["engine_getpayloadv1",{"_index":4199,"t":{"1799":{"position":[[22,19]]},"1899":{"position":[[842,22],[945,22]]},"1909":{"position":[[378,22]]},"1915":{"position":[[47,20]]}}}],["engine_getpayloadv2",{"_index":4410,"t":{"1899":{"position":[[968,22]]}}}],["engine_newpayloadv1",{"_index":4210,"t":{"1801":{"position":[[26,19]]},"1899":{"position":[[865,21],[1018,22]]},"1911":{"position":[[1506,22]]},"1915":{"position":[[14,20]]},"1921":{"position":[[12,19]]}}}],["engine_newpayloadv2",{"_index":4412,"t":{"1899":{"position":[[1041,22]]}}}],["enginegetpayloadbodiesresultv1",{"_index":4427,"t":{"1905":{"position":[[156,31]]},"1907":{"position":[[317,31]]}}}],["enod",{"_index":916,"t":{"211":{"position":[[667,5]]},"213":{"position":[[36,5]]},"215":{"position":[[308,5],[405,5],[585,5],[1304,5]]},"473":{"position":[[210,5]]},"493":{"position":[[435,5]]},"695":{"position":[[58,5],[169,5],[239,7],[274,5],[343,5],[523,5]]},"699":{"position":[[89,5]]},"705":{"position":[[52,7],[87,5],[156,5],[336,5]]},"771":{"position":[[723,5],[752,5]]},"773":{"position":[[94,5],[242,5],[487,5],[838,5]]},"775":{"position":[[94,5],[242,5],[487,5]]},"831":{"position":[[928,5],[957,5]]},"833":{"position":[[94,5],[250,5],[365,5],[499,5]]},"835":{"position":[[94,5],[250,5],[365,5]]},"850":{"position":[[95,5],[195,5],[587,5]]},"928":{"position":[[2596,6]]},"1040":{"position":[[979,5],[1012,5]]},"1042":{"position":[[911,5],[944,5]]},"1044":{"position":[[933,5],[966,5]]},"1046":{"position":[[951,5],[984,5]]},"1048":{"position":[[226,5]]},"1050":{"position":[[128,5],[659,5],[985,5]]},"1052":{"position":[[1463,5]]},"1069":{"position":[[1288,5],[1317,5]]},"1071":{"position":[[65,5],[207,5],[554,5],[966,5]]},"1073":{"position":[[65,5],[207,5],[554,5],[966,5]]},"1075":{"position":[[65,5],[207,5],[554,5],[966,5]]},"1095":{"position":[[794,5],[823,5]]},"1097":{"position":[[94,5],[236,5],[456,5],[848,5]]},"1099":{"position":[[94,5],[236,5],[456,5]]},"1101":{"position":[[94,5],[236,5],[456,5]]},"1125":{"position":[[794,5],[823,5]]},"1127":{"position":[[94,5],[236,5],[456,5],[848,5]]},"1129":{"position":[[94,5],[236,5],[456,5]]},"1131":{"position":[[94,5],[236,5],[456,5]]},"1160":{"position":[[132,5]]},"1166":{"position":[[4,5],[119,5],[134,5],[503,5],[1001,5],[1408,5],[1578,5],[1673,5],[1700,5]]},"1168":{"position":[[8,5],[144,5],[259,5]]},"1323":{"position":[[364,5]]},"1333":{"position":[[19,5],[84,5],[223,5]]},"1541":{"position":[[870,6],[965,5],[975,14]]},"1559":{"position":[[49,5],[894,5]]},"1561":{"position":[[112,5]]},"1563":{"position":[[114,5],[285,5]]},"1732":{"position":[[15,5],[76,5]]},"2076":{"position":[[419,5],[542,5]]},"2334":{"position":[[85,5],[119,6],[135,5]]},"2344":{"position":[[274,6],[290,5],[610,5],[730,5],[1037,8]]},"2346":{"position":[[691,5],[868,6],[884,5],[1711,8]]},"2348":{"position":[[35,6],[51,5]]},"2510":{"position":[[12,5],[66,5]]}}}],["enode://002@123:4567",{"_index":3682,"t":{"1455":{"position":[[1138,23]]}}}],["enode://003@123:4567",{"_index":3683,"t":{"1455":{"position":[[1162,23]]}}}],["enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2007,"t":{"699":{"position":[[564,154]]}}}],["enode://4540ea...9c1d78@172.16.239.41:30303",{"_index":3557,"t":{"1333":{"position":[[240,46]]}}}],["enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303",{"_index":5754,"t":{"2510":{"position":[[334,154]]}}}],["enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305",{"_index":2006,"t":{"699":{"position":[[408,155]]}}}],["enode://87ec35d558352cc55cd1bf6a472557797f91287b78fe5e86760219124563450ad1bb807e4cc61e86c574189a851733227155551a14b9d0e1f62c5e11332a18a3@[::]:30303",{"_index":5147,"t":{"2344":{"position":[[1046,150]]}}}],["enode://@[?discport=/genesis.json",{"_index":865,"t":{"186":{"position":[[99,24]]}}}],["file=:[,/besu",{"_index":1929,"t":{"641":{"position":[[246,21]]}}}],["homebrew",{"_index":641,"t":{"127":{"position":[[0,8]]},"129":{"position":[[22,9],[140,9],[478,8]]},"1360":{"position":[[0,8]]},"1362":{"position":[[22,9],[140,9],[473,8]]},"1512":{"position":[[39,9]]},"1517":{"position":[[35,9],[55,8],[298,9]]},"1626":{"position":[[91,9]]}}}],["homesteadblock",{"_index":4467,"t":{"1934":{"position":[[239,17]]},"2344":{"position":[[1531,17]]}}}],["honest",{"_index":3217,"t":{"1209":{"position":[[489,6]]},"1771":{"position":[[1309,6]]}}}],["honesti",{"_index":4453,"t":{"1917":{"position":[[231,7]]}}}],["host",{"_index":239,"t":{"29":{"position":[[733,4]]},"154":{"position":[[621,4]]},"184":{"position":[[200,4],[523,4],[774,4],[866,4],[924,5]]},"213":{"position":[[338,4],[439,4],[467,4]]},"441":{"position":[[87,4],[100,5]]},"493":{"position":[[1291,4]]},"528":{"position":[[251,6]]},"530":{"position":[[232,7]]},"552":{"position":[[131,4]]},"657":{"position":[[228,4],[298,4]]},"771":{"position":[[155,4],[331,4],[525,4],[574,4]]},"773":{"position":[[338,4],[583,4]]},"775":{"position":[[338,4],[583,4]]},"799":{"position":[[451,5]]},"801":{"position":[[711,5]]},"831":{"position":[[190,4],[401,4],[644,4],[693,4]]},"850":{"position":[[272,4]]},"879":{"position":[[279,4]]},"1006":{"position":[[83,4]]},"1019":{"position":[[249,4]]},"1040":{"position":[[237,4],[480,4],[801,4],[846,4]]},"1042":{"position":[[284,4],[565,4]]},"1044":{"position":[[284,4],[565,4]]},"1046":{"position":[[284,4],[565,4]]},"1052":{"position":[[1644,4],[1869,4]]},"1069":{"position":[[169,4],[447,4]]},"1071":{"position":[[293,4],[640,4]]},"1073":{"position":[[293,4],[640,4]]},"1075":{"position":[[293,4],[640,4]]},"1095":{"position":[[155,4],[306,4],[586,4],[635,4]]},"1097":{"position":[[313,4],[533,4]]},"1099":{"position":[[313,4],[533,4]]},"1101":{"position":[[313,4],[533,4]]},"1125":{"position":[[155,4],[306,4],[586,4],[635,4]]},"1127":{"position":[[313,4],[533,4]]},"1129":{"position":[[313,4],[533,4]]},"1131":{"position":[[313,4],[533,4]]},"1166":{"position":[[278,4],[356,4],[390,4],[431,4],[903,4],[1195,4]]},"1275":{"position":[[183,4],[247,4],[516,4],[544,4],[655,4],[777,4]]},"1301":{"position":[[35,4]]},"1350":{"position":[[249,4],[279,4],[526,4],[556,4]]},"1399":{"position":[[200,4],[523,4],[774,4],[866,4],[924,5]]},"1506":{"position":[[200,4]]},"1508":{"position":[[160,4]]},"1533":{"position":[[454,4],[511,4]]},"1571":{"position":[[121,4],[171,4],[205,4],[306,4],[344,4]]},"1573":{"position":[[95,4],[147,4],[229,5]]},"1628":{"position":[[1197,4],[1264,4],[1309,4],[1435,4],[1465,4],[1536,4],[1674,4]]},"1634":{"position":[[116,4]]},"1636":{"position":[[345,4],[1010,4]]},"1670":{"position":[[15,4],[67,5],[82,5],[107,4],[133,4],[189,4],[226,4]]},"1676":{"position":[[68,4],[191,4],[233,4],[618,4],[661,4],[699,4],[743,4]]},"1728":{"position":[[597,4]]},"1730":{"position":[[489,4]]},"1744":{"position":[[438,6],[475,4]]},"1777":{"position":[[399,4],[419,4]]},"1788":{"position":[[163,4],[249,4]]},"1792":{"position":[[68,4],[198,4],[240,4],[554,4],[592,4],[662,4]]},"1882":{"position":[[131,4],[252,4],[498,4],[524,4]]},"2013":{"position":[[189,4],[252,4],[527,4],[555,4]]},"2033":{"position":[[229,4],[259,4],[486,4],[516,4]]},"2050":{"position":[[2374,4],[2391,4],[2723,4],[3823,5]]},"2094":{"position":[[64,4],[125,4],[214,4]]},"2118":{"position":[[233,4]]},"2124":{"position":[[57,4],[111,4],[208,4]]},"2142":{"position":[[159,4],[241,4]]},"2150":{"position":[[179,4],[276,4],[356,4]]},"2172":{"position":[[195,4]]},"2188":{"position":[[208,4],[365,4]]},"2228":{"position":[[187,4],[315,4]]},"2274":{"position":[[179,4]]},"2330":{"position":[[216,4],[286,4]]},"2344":{"position":[[333,4],[598,4]]},"2516":{"position":[[56,4],[147,4],[189,4],[538,7],[586,7],[639,7]]}}}],["host:port",{"_index":3074,"t":{"1166":{"position":[[259,11]]},"1455":{"position":[[652,11]]}}}],["host=\"0.0.0.0",{"_index":4792,"t":{"2118":{"position":[[214,14]]},"2188":{"position":[[178,14]]},"2228":{"position":[[168,14]]},"2274":{"position":[[160,14]]}}}],["host=\"1.2.3.4",{"_index":3684,"t":{"1455":{"position":[[1190,14]]}}}],["host=\"127.0.0.1",{"_index":4840,"t":{"2142":{"position":[[138,16]]},"2150":{"position":[[158,16]]}}}],["host=\"192.168.1.132",{"_index":4885,"t":{"2172":{"position":[[170,20]]}}}],["host=\"5.6.7.8",{"_index":3687,"t":{"1455":{"position":[[1241,14]]}}}],["host=\"9.10.11.12",{"_index":3689,"t":{"1455":{"position":[[1282,17]]}}}],["host=${pip",{"_index":4675,"t":{"2050":{"position":[[5184,11]]}}}],["host=0.0.0.0",{"_index":3383,"t":{"1275":{"position":[[118,12],[166,12]]},"1350":{"position":[[154,12],[232,12],[431,12],[509,12]]},"2118":{"position":[[127,12]]},"2188":{"position":[[109,12]]},"2228":{"position":[[119,12]]},"2274":{"position":[[115,12]]}}}],["host=127.0.0.1",{"_index":3927,"t":{"1630":{"position":[[1046,14],[1266,14]]},"2142":{"position":[[87,14]]},"2150":{"position":[[97,14]]}}}],["host=192.168.1.132",{"_index":4883,"t":{"2172":{"position":[[99,18]]}}}],["host=:/grafana",{"_index":1923,"t":{"637":{"position":[[202,32]]}}}],["http:///jsonrpc",{"_index":1926,"t":{"639":{"position":[[163,32]]}}}],["http://:/graphql",{"_index":4091,"t":{"1744":{"position":[[398,29]]}}}],["http:///d/xe4v0wgzz/besu",{"_index":2649,"t":{"926":{"position":[[3296,36]]}}}],["http:///explor",{"_index":2712,"t":{"940":{"position":[[1490,28]]}}}],["http:///kibana",{"_index":2651,"t":{"926":{"position":[[3423,26]]}}}],["http:///rpc",{"_index":2699,"t":{"938":{"position":[[1813,23]]}}}],["http:///jsonrpc",{"_index":1912,"t":{"629":{"position":[[413,23]]}}}],["http://besu.local:8008/metr",{"_index":3918,"t":{"1628":{"position":[[1613,31]]}}}],["http://discovery_tcp_30303",{"_index":3722,"t":{"1502":{"position":[[547,27]]}}}],["http://ifconfig.me/ip",{"_index":4658,"t":{"2050":{"position":[[3264,22],[4283,22]]}}}],["http://json",{"_index":1952,"t":{"655":{"position":[[346,12]]}}}],["http://localhost",{"_index":1398,"t":{"403":{"position":[[814,17]]},"1291":{"position":[[716,17]]}}}],["http://localhost:20000",{"_index":2803,"t":{"1000":{"position":[[515,22]]}}}],["http://localhost:20002",{"_index":2807,"t":{"1000":{"position":[[593,22]]}}}],["http://localhost:20004",{"_index":2811,"t":{"1000":{"position":[[671,22]]}}}],["http://localhost:25000",{"_index":2795,"t":{"998":{"position":[[668,23]]},"1289":{"position":[[729,23]]}}}],["http://localhost:3000/d/ak6exlspxfemkykexfch/quorum",{"_index":3455,"t":{"1289":{"position":[[1023,51]]}}}],["http://localhost:3000/d/xe4v0wgzz/besu",{"_index":2797,"t":{"998":{"position":[[759,38]]},"1289":{"position":[[820,38]]}}}],["http://localhost:3001",{"_index":3517,"t":{"1315":{"position":[[445,21]]}}}],["http://localhost:5601/app/kibana#/discov",{"_index":2801,"t":{"998":{"position":[[900,42]]},"1289":{"position":[[945,42]]}}}],["http://localhost:8080",{"_index":1545,"t":{"434":{"position":[[302,22]]}}}],["http://localhost:8545",{"_index":2793,"t":{"998":{"position":[[559,21]]},"1077":{"position":[[2547,22],[3338,22]]},"1289":{"position":[[620,21]]},"1295":{"position":[[44,22]]},"1301":{"position":[[136,21]]},"1303":{"position":[[205,21]]},"1305":{"position":[[171,21]]},"1307":{"position":[[91,22]]},"1317":{"position":[[375,22]]},"1721":{"position":[[680,21]]},"1754":{"position":[[428,21]]}}}],["http://localhost:8545/l",{"_index":4131,"t":{"1767":{"position":[[272,32]]}}}],["http://localhost:8545/login",{"_index":4023,"t":{"1705":{"position":[[528,27]]}}}],["http://localhost:8545/readi",{"_index":4128,"t":{"1765":{"position":[[479,33]]}}}],["http://localhost:8545/readiness?minpeers=0&maxblocksbehind=10",{"_index":4129,"t":{"1765":{"position":[[521,63]]}}}],["http://localhost:8546",{"_index":2949,"t":{"1077":{"position":[[2692,22],[3483,22]]}}}],["http://localhost:8546/login",{"_index":4025,"t":{"1705":{"position":[[735,27]]}}}],["http://localhost:8547",{"_index":2950,"t":{"1077":{"position":[[2837,22],[3628,22]]}}}],["http://localhost:8547/graphql",{"_index":2022,"t":{"709":{"position":[[1408,29]]},"1746":{"position":[[285,29],[510,29],[793,29]]},"1750":{"position":[[335,29],[549,29]]},"2398":{"position":[[614,29]]},"2400":{"position":[[1843,29]]},"2408":{"position":[[1603,29]]},"2412":{"position":[[1048,29]]},"2414":{"position":[[1054,29]]},"2416":{"position":[[2749,29]]},"2418":{"position":[[2768,29]]},"2420":{"position":[[3912,29]]},"2422":{"position":[[918,29]]},"2424":{"position":[[935,29]]},"2426":{"position":[[1538,29]]},"2432":{"position":[[2446,29]]},"2440":{"position":[[1163,29]]},"2442":{"position":[[1659,29]]},"2444":{"position":[[1786,29]]},"2446":{"position":[[1510,29]]},"2448":{"position":[[1102,29]]},"2450":{"position":[[2092,29]]},"2452":{"position":[[2481,29]]},"2454":{"position":[[2505,29]]},"2456":{"position":[[848,29]]},"2458":{"position":[[862,29]]},"2474":{"position":[[506,29]]},"2476":{"position":[[1922,29]]},"2482":{"position":[[1836,29]]}}}],["http://localhost:8551",{"_index":4606,"t":{"2019":{"position":[[166,21]]}}}],["http://localhost:9081",{"_index":2805,"t":{"1000":{"position":[[554,21]]}}}],["http://localhost:9082",{"_index":2809,"t":{"1000":{"position":[[632,21]]}}}],["http://localhost:9083",{"_index":2813,"t":{"1000":{"position":[[710,21]]}}}],["http://localhost:9090",{"_index":3928,"t":{"1632":{"position":[[22,21]]}}}],["http://localhost:9090/graph",{"_index":2796,"t":{"998":{"position":[[713,27]]},"1289":{"position":[[774,27]]}}}],["http://localhost:9101",{"_index":2846,"t":{"1015":{"position":[[303,24]]},"1065":{"position":[[484,24]]}}}],["http://localhost:9102",{"_index":2849,"t":{"1015":{"position":[[392,24]]},"1065":{"position":[[573,24]]}}}],["http://localhost:9103",{"_index":2850,"t":{"1015":{"position":[[481,24]]},"1065":{"position":[[662,24],[1503,23],[2236,23],[2969,23]]}}}],["http://localhost:9201",{"_index":2918,"t":{"1065":{"position":[[1217,24]]}}}],["http://localhost:9202",{"_index":2919,"t":{"1065":{"position":[[1306,24]]}}}],["http://localhost:9203",{"_index":2852,"t":{"1015":{"position":[[589,23]]},"1065":{"position":[[770,23],[1395,24],[2272,23],[3005,23]]}}}],["http://localhost:9301",{"_index":2920,"t":{"1065":{"position":[[1950,24]]}}}],["http://localhost:9302",{"_index":2921,"t":{"1065":{"position":[[2039,24]]}}}],["http://localhost:9303",{"_index":2853,"t":{"1015":{"position":[[625,23]]},"1065":{"position":[[806,23],[1539,23],[2128,24],[3041,23]]}}}],["http://localhost:9401",{"_index":2922,"t":{"1065":{"position":[[2683,24]]}}}],["http://localhost:9402",{"_index":2923,"t":{"1065":{"position":[[2772,24]]}}}],["http://localhost:9403",{"_index":2854,"t":{"1015":{"position":[[661,23]]},"1065":{"position":[[842,23],[1575,23],[2308,23],[2861,24]]}}}],["http://localhost:9545/metr",{"_index":3935,"t":{"1634":{"position":[[75,29]]}}}],["http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json",{"_index":1955,"t":{"655":{"position":[[396,59]]}}}],["http://rpc_tcp_8545",{"_index":3723,"t":{"1502":{"position":[[648,20]]}}}],["https://,\"method\":\"[,:8088/services/collector",{"_index":1453,"t":{"417":{"position":[[427,34],[1410,34]]}}}],["instance_typ",{"_index":4637,"t":{"2050":{"position":[[1763,14]]}}}],["instancetyp",{"_index":4618,"t":{"2050":{"position":[[1047,13]]}}}],["instanti",{"_index":1839,"t":{"582":{"position":[[1631,12]]}}}],["instead",{"_index":630,"t":{"119":{"position":[[1815,7]]},"142":{"position":[[553,7]]},"432":{"position":[[331,7]]},"447":{"position":[[250,7]]},"449":{"position":[[34,7],[353,7],[825,7]]},"455":{"position":[[461,7]]},"532":{"position":[[415,7]]},"717":{"position":[[161,7]]},"723":{"position":[[309,7]]},"735":{"position":[[278,7]]},"791":{"position":[[168,7],[2546,7],[2970,7]]},"819":{"position":[[199,8]]},"862":{"position":[[728,7]]},"875":{"position":[[29,7]]},"1000":{"position":[[160,7]]},"1019":{"position":[[1052,8]]},"1172":{"position":[[275,7]]},"1225":{"position":[[380,7]]},"1227":{"position":[[354,8]]},"1233":{"position":[[1173,7],[1366,7]]},"1256":{"position":[[342,7],[624,7]]},"1258":{"position":[[159,7]]},"1369":{"position":[[210,7]]},"1379":{"position":[[553,7]]},"1425":{"position":[[380,7]]},"1441":{"position":[[126,7]]},"1465":{"position":[[514,8]]},"1658":{"position":[[1270,7]]},"1689":{"position":[[1448,7]]},"1744":{"position":[[72,7]]},"1806":{"position":[[137,7]]},"1854":{"position":[[1545,7]]},"1936":{"position":[[457,8]]},"2050":{"position":[[2264,8]]},"2310":{"position":[[384,7]]},"2380":{"position":[[86,7]]},"2382":{"position":[[88,7]]}}}],["instruct",{"_index":640,"t":{"123":{"position":[[185,12]]},"158":{"position":[[22,13]]},"903":{"position":[[675,13]]},"912":{"position":[[300,12]]},"1013":{"position":[[94,12]]},"1339":{"position":[[185,12]]},"1423":{"position":[[154,13]]},"1508":{"position":[[243,12]]},"1515":{"position":[[72,12]]},"1844":{"position":[[483,12]]},"1926":{"position":[[109,13]]},"1999":{"position":[[323,13]]}}}],["insuffici",{"_index":1701,"t":{"507":{"position":[[514,12]]},"2400":{"position":[[444,12],[627,12]]}}}],["integ",{"_index":1803,"t":{"576":{"position":[[603,7]]},"663":{"position":[[96,7]]},"665":{"position":[[304,7],[493,7]]},"683":{"position":[[317,7],[506,7]]},"687":{"position":[[110,7]]},"709":{"position":[[314,7]]},"713":{"position":[[185,7]]},"721":{"position":[[286,7]]},"723":{"position":[[571,7]]},"735":{"position":[[435,7]]},"751":{"position":[[317,7],[506,7]]},"755":{"position":[[1045,7]]},"1830":{"position":[[89,7],[785,7],[846,7],[1159,7]]},"1832":{"position":[[213,7]]},"1834":{"position":[[148,7],[271,7]]},"1836":{"position":[[239,7],[333,7]]},"1838":{"position":[[115,7],[243,7],[335,7],[464,7],[840,7],[900,7]]},"1840":{"position":[[455,7],[610,7]]},"1844":{"position":[[72,7],[135,7],[166,7],[210,7]]},"1846":{"position":[[144,7]]},"1848":{"position":[[348,7]]},"1850":{"position":[[776,7],[931,7],[1461,7]]},"1852":{"position":[[242,7],[409,7],[548,7],[735,7],[947,7],[1082,7]]},"1854":{"position":[[1077,7]]},"2340":{"position":[[110,7],[293,7]]},"2354":{"position":[[339,7]]},"2360":{"position":[[106,7]]},"2362":{"position":[[116,7]]},"2364":{"position":[[134,7]]},"2370":{"position":[[242,7]]},"2374":{"position":[[148,7]]},"2388":{"position":[[142,7]]},"2390":{"position":[[278,7]]},"2396":{"position":[[223,7]]},"2398":{"position":[[134,7]]},"2400":{"position":[[892,7]]},"2406":{"position":[[174,7]]},"2410":{"position":[[245,7],[509,7],[570,7],[802,8]]},"2414":{"position":[[201,7]]},"2418":{"position":[[130,7]]},"2420":{"position":[[355,7]]},"2422":{"position":[[155,7]]},"2424":{"position":[[140,7],[356,7]]},"2426":{"position":[[243,7]]},"2436":{"position":[[101,7]]},"2438":{"position":[[456,7]]},"2440":{"position":[[134,7],[230,7]]},"2442":{"position":[[161,7]]},"2444":{"position":[[152,7]]},"2448":{"position":[[266,7],[446,7]]},"2454":{"position":[[108,7]]},"2456":{"position":[[157,7]]},"2458":{"position":[[134,7],[349,7]]},"2460":{"position":[[416,7]]},"2526":{"position":[[300,7]]},"2528":{"position":[[303,7]]},"2530":{"position":[[459,7]]},"2538":{"position":[[243,7]]},"2544":{"position":[[103,7]]}}}],["integr",{"_index":895,"t":{"195":{"position":[[165,12]]},"914":{"position":[[821,11]]},"1227":{"position":[[475,9],[629,9]]},"2148":{"position":[[211,12]]}}}],["intel",{"_index":766,"t":{"154":{"position":[[91,5]]},"523":{"position":[[225,5]]},"1285":{"position":[[81,5]]},"1411":{"position":[[547,7]]}}}],["intend",{"_index":1264,"t":{"325":{"position":[[144,6]]},"940":{"position":[[606,8]]},"979":{"position":[[122,8]]},"991":{"position":[[500,8]]},"1283":{"position":[[239,8]]},"1535":{"position":[[98,8]]}}}],["intens",{"_index":3104,"t":{"1179":{"position":[[309,9]]},"1658":{"position":[[306,9]]}}}],["intention",{"_index":3174,"t":{"1203":{"position":[[1682,13]]}}}],["interact",{"_index":1310,"t":{"339":{"position":[[636,8]]},"465":{"position":[[151,8]]},"789":{"position":[[851,12]]},"793":{"position":[[128,8]]},"797":{"position":[[489,8]]},"805":{"position":[[194,8]]},"981":{"position":[[99,8]]},"987":{"position":[[389,8],[479,8],[743,8]]},"1000":{"position":[[2633,8]]},"1203":{"position":[[846,10]]},"1219":{"position":[[8,8]]},"1287":{"position":[[419,8]]},"1311":{"position":[[144,8]]},"1541":{"position":[[703,12]]},"1545":{"position":[[52,8]]},"1569":{"position":[[164,9]]},"1638":{"position":[[8,8]]},"1650":{"position":[[308,13]]},"1752":{"position":[[27,8]]},"1987":{"position":[[97,13]]},"2178":{"position":[[363,8]]},"2224":{"position":[[455,9],[648,8],[857,9],[947,8]]},"2392":{"position":[[33,8]]},"2400":{"position":[[93,8]]},"2476":{"position":[[80,8],[201,8]]}}}],["intercept",{"_index":4006,"t":{"1697":{"position":[[542,12]]}}}],["interchang",{"_index":4499,"t":{"1940":{"position":[[196,15]]}}}],["interest",{"_index":3471,"t":{"1301":{"position":[[991,11]]}}}],["interfac",{"_index":210,"t":{"27":{"position":[[48,11],[69,9],[215,9]]},"33":{"position":[[148,9]]},"39":{"position":[[75,9]]},"41":{"position":[[512,10],[672,11]]},"71":{"position":[[431,10]]},"105":{"position":[[275,10]]},"107":{"position":[[178,10]]},"115":{"position":[[312,9]]},"117":{"position":[[78,9]]},"156":{"position":[[163,11],[253,11]]},"213":{"position":[[556,11],[633,10],[656,9],[682,9]]},"239":{"position":[[117,9],[168,9]]},"267":{"position":[[122,9],[173,9]]},"337":{"position":[[16,9],[68,9]]},"413":{"position":[[413,10]]},"434":{"position":[[498,10],[1255,10]]},"439":{"position":[[150,10]]},"495":{"position":[[118,10],[168,9],[281,9],[337,9],[490,10]]},"511":{"position":[[363,10]]},"578":{"position":[[4,10],[123,11]]},"580":{"position":[[30,10],[72,9]]},"582":{"position":[[26,10],[74,9],[1054,10],[1666,9]]},"584":{"position":[[77,9]]},"605":{"position":[[266,10]]},"643":{"position":[[77,9]]},"906":{"position":[[1154,9]]},"908":{"position":[[1238,9],[3196,10]]},"979":{"position":[[441,10]]},"1417":{"position":[[163,11],[253,11]]},"1533":{"position":[[469,9],[532,10],[605,12],[683,10],[706,9],[732,9]]},"1628":{"position":[[1832,10]]},"1630":{"position":[[1423,10]]},"1632":{"position":[[77,10]]},"1748":{"position":[[50,9]]},"1860":{"position":[[61,9]]},"2118":{"position":[[101,10],[159,10]]},"2188":{"position":[[92,10],[141,10]]},"2190":{"position":[[183,9],[289,9],[360,11],[400,12]]},"2228":{"position":[[97,10]]},"2274":{"position":[[95,10]]}}}],["interface=\"192.168.1.132",{"_index":4913,"t":{"2190":{"position":[[145,25]]}}}],["interface=192.168.1.132",{"_index":4911,"t":{"2190":{"position":[[84,23]]}}}],["interface=,127.0.0.1,localhost",{"_index":4599,"t":{"2013":{"position":[[217,23],[280,23]]}}}],["ipc",{"_index":790,"t":{"158":{"position":[[332,3]]},"1666":{"position":[[61,3]]},"1668":{"position":[[104,3],[140,3]]},"1674":{"position":[[35,3],[62,3],[151,3]]},"1752":{"position":[[416,3],[443,3],[478,3]]},"1754":{"position":[[232,3],[316,3],[403,3]]},"1769":{"position":[[214,3],[246,3]]}}}],["ipv4",{"_index":4615,"t":{"2050":{"position":[[737,4]]}}}],["ipv4_address",{"_index":3542,"t":{"1329":{"position":[[300,13]]}}}],["ipv6",{"_index":724,"t":{"142":{"position":[[907,4],[964,4],[1022,4],[1068,4],[1114,4],[1155,4],[1194,4]]},"1379":{"position":[[913,4],[970,4],[1028,4],[1074,4],[1120,4],[1161,4],[1200,4]]}}}],["irrelev",{"_index":5370,"t":{"2408":{"position":[[595,10]]}}}],["irresolv",{"_index":1064,"t":{"253":{"position":[[454,12]]}}}],["isbootnod",{"_index":2669,"t":{"930":{"position":[[398,11]]},"932":{"position":[[409,11]]}}}],["isn't",{"_index":405,"t":{"63":{"position":[[490,5]]},"67":{"position":[[287,5]]},"93":{"position":[[871,5]]},"215":{"position":[[1338,5]]},"221":{"position":[[469,5]]},"675":{"position":[[885,5]]},"866":{"position":[[285,5]]},"1260":{"position":[[839,5],[2038,5],[2368,5],[2515,5]]},"1539":{"position":[[151,5],[452,5]]},"1676":{"position":[[337,5]]},"1792":{"position":[[344,5]]},"1979":{"position":[[431,5]]},"2124":{"position":[[421,5]]}}}],["isol",{"_index":498,"t":{"79":{"position":[[983,8]]},"759":{"position":[[185,9]]},"821":{"position":[[313,9]]},"873":{"position":[[50,9]]},"924":{"position":[[14,8]]},"1079":{"position":[[432,9]]},"1109":{"position":[[187,9]]},"1531":{"position":[[423,10]]},"1567":{"position":[[184,10]]},"1636":{"position":[[906,7]]},"1979":{"position":[[144,8]]},"2050":{"position":[[824,7]]}}}],["isreceivedfromlocalsourc",{"_index":5834,"t":{"2548":{"position":[[488,28],[650,28]]}}}],["issu",{"_index":237,"t":{"29":{"position":[[709,6]]},"57":{"position":[[203,6]]},"59":{"position":[[60,6]]},"61":{"position":[[119,6]]},"67":{"position":[[240,6],[882,6]]},"93":{"position":[[993,6]]},"103":{"position":[[593,6]]},"186":{"position":[[458,6]]},"188":{"position":[[360,6]]},"361":{"position":[[152,6]]},"397":{"position":[[44,7]]},"493":{"position":[[1267,6]]},"519":{"position":[[231,6]]},"536":{"position":[[421,5]]},"578":{"position":[[171,5]]},"582":{"position":[[1223,5],[1245,5]]},"866":{"position":[[294,5]]},"956":{"position":[[820,5]]},"971":{"position":[[1133,6]]},"1168":{"position":[[882,6]]},"1213":{"position":[[346,5],[1442,6],[1530,7]]},"1260":{"position":[[1526,5]]},"1439":{"position":[[161,6]]},"1555":{"position":[[17,6]]},"1557":{"position":[[224,6]]},"1575":{"position":[[54,7],[214,5]]},"1725":{"position":[[181,7]]},"1728":{"position":[[246,5]]},"2296":{"position":[[215,6]]},"2302":{"position":[[905,6]]},"2372":{"position":[[177,8]]}}}],["istanbul",{"_index":1101,"t":{"257":{"position":[[2757,8]]},"325":{"position":[[17118,8]]},"469":{"position":[[160,9]]}}}],["it'",{"_index":1685,"t":{"483":{"position":[[2243,4]]},"582":{"position":[[1388,4]]},"924":{"position":[[228,4]]},"928":{"position":[[80,4]]},"932":{"position":[[1761,4]]},"936":{"position":[[280,4]]},"1213":{"position":[[1279,4]]},"1225":{"position":[[1014,4]]},"1260":{"position":[[682,4]]},"1569":{"position":[[116,4]]},"1606":{"position":[[241,4]]},"1822":{"position":[[414,4]]},"1844":{"position":[[551,4]]},"1850":{"position":[[1221,4]]},"1934":{"position":[[1125,4]]},"2092":{"position":[[281,4]]},"2126":{"position":[[169,4]]}}}],["item",{"_index":961,"t":{"221":{"position":[[955,4]]},"223":{"position":[[478,4],[1994,4]]},"247":{"position":[[38,4]]},"249":{"position":[[147,4]]},"251":{"position":[[146,4]]},"279":{"position":[[38,4]]},"281":{"position":[[147,4]]},"283":{"position":[[140,4]]},"285":{"position":[[147,4]]},"325":{"position":[[15537,4]]},"343":{"position":[[38,4]]},"345":{"position":[[147,4]]},"347":{"position":[[140,4]]},"349":{"position":[[200,4]]},"351":{"position":[[147,4]]},"415":{"position":[[156,5]]},"461":{"position":[[1793,5],[1982,4]]},"564":{"position":[[333,5]]},"655":{"position":[[606,8]]},"741":{"position":[[434,5]]},"928":{"position":[[1887,4]]},"1626":{"position":[[229,5]]},"1928":{"position":[[53,5]]},"1930":{"position":[[22,5],[84,4],[324,6],[405,6],[477,6],[955,6]]},"1932":{"position":[[296,4]]},"1938":{"position":[[32,5]]},"1969":{"position":[[145,5]]},"1999":{"position":[[1450,6]]},"2460":{"position":[[176,6]]},"2526":{"position":[[698,5]]},"2538":{"position":[[819,5]]},"2540":{"position":[[544,5]]}}}],["itself",{"_index":532,"t":{"93":{"position":[[846,7]]},"109":{"position":[[240,7]]},"215":{"position":[[556,7]]},"445":{"position":[[550,7]]},"505":{"position":[[92,7]]},"675":{"position":[[410,7]]},"942":{"position":[[603,6]]},"954":{"position":[[47,6],[505,6]]},"956":{"position":[[47,6],[648,6]]},"958":{"position":[[47,6],[501,6]]},"1227":{"position":[[346,7]]},"1231":{"position":[[490,7]]},"1246":{"position":[[533,6]]},"1333":{"position":[[471,6]]},"1565":{"position":[[640,6]]}}}],["jar",{"_index":303,"t":{"43":{"position":[[60,6]]}}}],["java",{"_index":285,"t":{"41":{"position":[[46,4]]},"127":{"position":[[9,4],[84,4],[110,4],[190,4]]},"132":{"position":[[0,4]]},"152":{"position":[[61,4]]},"158":{"position":[[552,5],[577,4],[621,4]]},"313":{"position":[[941,4]]},"1301":{"position":[[333,4],[741,4]]},"1360":{"position":[[9,4],[84,4],[110,4],[190,4]]},"1365":{"position":[[0,4]]},"1411":{"position":[[33,4],[77,4],[199,4],[1312,4],[1401,6],[1466,4],[1542,6]]},"1413":{"position":[[38,4]]},"1506":{"position":[[26,4],[39,4],[187,4],[238,4]]},"1508":{"position":[[24,4],[138,4]]},"1510":{"position":[[167,4],[194,4],[282,4],[429,4],[493,4],[704,8]]},"1512":{"position":[[171,4],[276,5]]},"1515":{"position":[[10,4],[96,4],[187,4]]},"1517":{"position":[[15,4],[283,4],[434,5]]},"1519":{"position":[[0,4],[84,4]]},"1523":{"position":[[15,4]]},"1525":{"position":[[104,4],[570,4]]},"1527":{"position":[[52,4]]},"1529":{"position":[[89,4]]},"1658":{"position":[[770,4],[1250,4],[1510,4]]},"1711":{"position":[[89,4]]},"2007":{"position":[[121,4]]},"2027":{"position":[[121,4]]},"2126":{"position":[[332,4],[498,4]]},"2344":{"position":[[1277,4]]},"2346":{"position":[[1245,4]]}}}],["java.lang.illegalargumentexcept",{"_index":3657,"t":{"1431":{"position":[[0,35]]},"1435":{"position":[[0,35]]},"1437":{"position":[[0,35]]},"1439":{"position":[[0,35]]}}}],["java.lang.illegalstateexcept",{"_index":3666,"t":{"1445":{"position":[[0,32]]}}}],["java.lang.runtimeexcept",{"_index":3658,"t":{"1433":{"position":[[0,27]]},"1441":{"position":[[0,27]]},"1447":{"position":[[0,27]]}}}],["java.util.concurrent.completionexcept",{"_index":3366,"t":{"1260":{"position":[[1743,41]]}}}],["java_hom",{"_index":3610,"t":{"1411":{"position":[[1594,9]]},"1510":{"position":[[849,10]]}}}],["java_home=$(dirnam",{"_index":3736,"t":{"1510":{"position":[[652,19]]}}}],["java_home=/usr/bin/jdk",{"_index":3612,"t":{"1411":{"position":[[1772,22]]}}}],["java_home=jdk",{"_index":3611,"t":{"1411":{"position":[[1738,13]]}}}],["javadoc",{"_index":302,"t":{"41":{"position":[[703,8]]},"578":{"position":[[154,8],[163,7]]}}}],["javascript",{"_index":1766,"t":{"546":{"position":[[29,10],[374,10]]},"787":{"position":[[1801,10]]},"791":{"position":[[490,10]]},"1754":{"position":[[58,10]]}}}],["jdbc",{"_index":2840,"t":{"1015":{"position":[[133,7]]},"1065":{"position":[[314,7],[1047,7],[1780,7],[2513,7]]}}}],["jdbc:h2:./target/h2/tessera1",{"_index":2841,"t":{"1015":{"position":[[184,31]]},"1065":{"position":[[365,31],[1098,31],[1831,31],[2564,31]]}}}],["jdk",{"_index":642,"t":{"127":{"position":[[14,3],[195,4]]},"132":{"position":[[5,3]]},"1360":{"position":[[14,3],[195,4]]},"1365":{"position":[[5,3]]},"1411":{"position":[[780,3],[1269,3],[1628,3],[1655,3]]},"1510":{"position":[[399,3],[890,3]]},"1517":{"position":[[96,3]]}}}],["jdk_x64_linux_21.0.3.0.tar.gz",{"_index":3596,"t":{"1411":{"position":[[1012,29],[1143,29]]}}}],["jemalloc",{"_index":672,"t":{"132":{"position":[[302,8]]},"1365":{"position":[[302,8]]},"1658":{"position":[[928,9]]}}}],["jfr",{"_index":3745,"t":{"1519":{"position":[[21,5],[141,3]]},"1521":{"position":[[10,4],[36,3],[558,3],[679,3]]}}}],["jk",{"_index":384,"t":{"57":{"position":[[608,4]]},"203":{"position":[[199,3],[230,4]]},"209":{"position":[[207,3],[238,4]]},"361":{"position":[[367,3]]},"373":{"position":[[200,4],[240,4]]},"379":{"position":[[170,4],[210,4]]}}}],["job",{"_index":811,"t":{"164":{"position":[[509,3]]},"928":{"position":[[2325,3]]},"2156":{"position":[[149,4],[198,4],[242,4],[251,3]]}}}],["job=\"mi",{"_index":4854,"t":{"2156":{"position":[[134,7],[227,7]]}}}],["job=\",\"params\":[],\"id\":1",{"_index":4062,"t":{"1721":{"position":[[168,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2902,"t":{"1050":{"position":[[211,77],[331,77],[451,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2903,"t":{"1050":{"position":[[735,77],[855,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"\"],\"id\":1",{"_index":2904,"t":{"1050":{"position":[[1047,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_addpeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1",{"_index":5130,"t":{"2334":{"position":[[312,217],[552,215]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_changeloglevel\",\"params\":[\"warn",{"_index":5136,"t":{"2336":{"position":[[1154,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_generatelogbloomcach",{"_index":5139,"t":{"2338":{"position":[[974,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_logsremovecache\",\"params\":[\"1",{"_index":5142,"t":{"2340":{"position":[[897,65]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_logsrepaircache\",\"params\":[\"1200",{"_index":5144,"t":{"2342":{"position":[[339,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_nodeinfo\",\"params\":[],\"id\":1",{"_index":5146,"t":{"2344":{"position":[[846,64],[933,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_peers\",\"params\":[],\"id\":1",{"_index":5158,"t":{"2346":{"position":[[980,61],[1064,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"admin_removepeer\",\"params\":[\"enode://f59c0ab603377b6ec88b89d5bb41b98fc385030ab1e4b03752db6f7dab364559d92c757c13116ae6408d2d33f0138e7812eb8b696b2a22fe3332c4b5127b22a3@127.0.0.1:30304\"],\"id\":1",{"_index":5174,"t":{"2348":{"position":[[229,220],[472,218]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_discard\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1052,"t":{"241":{"position":[[1078,100]]},"661":{"position":[[272,100],[404,99]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsignermetrics\",\"params\":[\"1",{"_index":1973,"t":{"665":{"position":[[1134,67],[1241,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsigners\",\"params\":[\"latest",{"_index":1050,"t":{"241":{"position":[[781,67]]},"663":{"position":[[424,67],[523,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_getsignersathash\",\"params\":[\"0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48",{"_index":1980,"t":{"667":{"position":[[224,133],[389,132]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_proposals\",\"param",{"_index":1981,"t":{"669":{"position":[[345,58],[435,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"clique_propose\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1045,"t":{"241":{"position":[[230,99]]},"671":{"position":[[294,99],[432,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountat\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c",{"_index":5185,"t":{"2352":{"position":[[1542,124]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountat\",\"params\":[\"0xc8df1f061abb4d0c107b2b1a794ade8780b3120e681f723fe55a7be586d95ba6",{"_index":5179,"t":{"2352":{"position":[[823,124]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_accountrange\",\"params\":[\"12345",{"_index":5193,"t":{"2354":{"position":[[716,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_batchsendrawtransaction\",\"params\":[\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ba0ac74ecfa0e9b85785f042c143ead4780931234cc9a032fce99fab1f45e0d90faa02fd17e8eb433d4ca47727653232045d4f81322619c0852d3fe8ddcfcedb66a43\",\"0x416\",\"0xf868018203e882520894627306090abab3a6e1400e9345bc60c78a8bef57872386f26fc10000801ca0b24ea1bee8fe36984c36acbf80979a4509f23fc17141851e08d505c0df158aa0a00472a05903d4cd7a811bd4d5c59cc105d93f5943f3393f253e92e65fc36e7ce0\",\"0xf868808203e882520894627306090abab3a6e1400e9345bc60c78a8bef5787470de4df820000801ca0f7936b4de04792e3c65095cfbfd1399d231368f5f05f877588c0c8509f6c98c9a01834004dead527c8da1396eede42e1c60e41f38a77c2fd13a6e495479c729b99\"],\"id\":1",{"_index":5203,"t":{"2356":{"position":[[608,737],[1368,735]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getbadblocks\",\"params\":[],\"id\":1",{"_index":5206,"t":{"2358":{"position":[[212,68],[303,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawblock\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5238,"t":{"2360":{"position":[[413,77],[513,75]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawheader\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5240,"t":{"2362":{"position":[[432,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawreceipts\",\"params\":[\"0x32026e\"],\"id\":1",{"_index":5244,"t":{"2364":{"position":[[458,80],[561,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_getrawtransaction\",\"params\":[\"0x3a2fd1a5ea9ffee477f449be53a49398533d2c006a5815023920d1c397298df3\"],\"id\":1",{"_index":5247,"t":{"2366":{"position":[[238,141],[402,139]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_metrics\",\"params\":[],\"id\":1",{"_index":5250,"t":{"2368":{"position":[[351,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_replayblock\",\"params\":[\"0x1\"],\"id\":1",{"_index":5304,"t":{"2370":{"position":[[541,72]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_resyncworldstate\",\"params\":[],\"id\":1",{"_index":5306,"t":{"2372":{"position":[[313,72]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_sethead\",\"params\":[\"0x1\"],\"id\":1",{"_index":5308,"t":{"2374":{"position":[[447,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_standardtracebadblocktofile\",\"params\":[\"0x53741e9e94791466d117c5f9e41a2ed1de3f73d39920c621dfc2f294e7779baa",{"_index":5319,"t":{"2378":{"position":[[372,143]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_standardtraceblocktofile\",\"params\":[\"0x2dc0b6c43144e314a86777b4bd4f987c0790a6a0b21560671d221ed81a23f2dc",{"_index":5312,"t":{"2376":{"position":[[663,139]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_storagerangeat\",\"params\":[\"0x2b76b3a2fc44c0e21ea183d06c846353279a7acf12abcc6fb9d5e8fb14ae2f8c\",0,\"0x0e0d2c8f7794e82164f11798276a188147fbd415\",\"0x0000000000000000000000000000000000000000000000000000000000000000\",1",{"_index":5325,"t":{"2380":{"position":[[512,248]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblock\",\"params\":[\"0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0\"],\"id\":1",{"_index":5333,"t":{"2384":{"position":[[506,1338]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblockbyhash\",\"params\":[\"0xaceb3b2c9b25b0589230873921eb894b28722011b8df63977145517d754875a5",{"_index":5335,"t":{"2386":{"position":[[523,132]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_traceblockbynumber\",\"params\":[\"0x7224\",{\"disablestorage\":tru",{"_index":5337,"t":{"2388":{"position":[[726,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_tracecall\",\"params\":[{\"from\":\"\",\"to\":\"\",\"gas\":\"0xfffff2\",\"gasprice\":\"0xef\",\"value\":\"0x0\",\"data\":\"\"},\"latest\",{\"disablememory\":true,\"disablestack\":true,\"disablestorage\":tru",{"_index":5339,"t":{"2390":{"position":[[862,209]]}}}],["jsonrpc\":\"2.0\",\"method\":\"debug_tracetransaction\",\"params\":[\"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e\",{\"disablestorage\":true}],\"id\":1",{"_index":5331,"t":{"2382":{"position":[[648,164]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eea_sendrawtransaction\",\"param",{"_index":1985,"t":{"675":{"position":[[1255,61],[1570,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_exchangecapabilities\",\"params\":[[\"engine_exchangetransitionconfigurationv1\",\"engine_forkchoiceupdatedv1\",\"engine_getpayloadbodiesbyhash\",\"engine_getpayloadbodiesbyrangev1\",\"engine_getpayloadv1\",\"engine_newpayloadv1\"]],\"id\":67",{"_index":4405,"t":{"1899":{"position":[[339,262]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_exchangetransitionconfigurationv1\",\"params\":[{\"terminaltotaldifficulti",{"_index":4419,"t":{"1901":{"position":[[470,107]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_forkchoiceupdatedv1\",\"params\":[{\"headblockhash",{"_index":4184,"t":{"1797":{"position":[[110,83]]},"1803":{"position":[[113,83]]},"1903":{"position":[[353,83]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadbodiesbyhashv1\",\"params\":[[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c\",\"0xfe88c94d860f01a17f961bf4bdfb6e0c6cd10d3fda5cc861e805ca1240c58553\"]],\"id\":1",{"_index":4428,"t":{"1905":{"position":[[289,220]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadbodiesbyrangev1\",\"params\":[\"0x20",{"_index":4445,"t":{"1907":{"position":[[450,79]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadv1\",\"params\":[\"0x0000000021f32cc1\"],\"id\":1",{"_index":4449,"t":{"1909":{"position":[[236,89]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_getpayloadv1\",\"params\":[\"0x1\"],\"id\":1",{"_index":4200,"t":{"1799":{"position":[[92,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"engine_newpayloadv1\",\"param",{"_index":4211,"t":{"1801":{"position":[[96,59]]},"1911":{"position":[[218,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"params\":[],\"id\":53",{"_index":5342,"t":{"2394":{"position":[[423,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blobbasefee\",\"params\":[],\"id\":51",{"_index":5344,"t":{"2396":{"position":[[322,66],[411,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blocknumber\",\"params\":[],\"id\":1",{"_index":2698,"t":{"938":{"position":[[1747,65]]},"1305":{"position":[[105,65]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_blocknumber\",\"params\":[],\"id\":51",{"_index":5346,"t":{"2398":{"position":[[312,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":5354,"t":{"2400":{"position":[[2401,101]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\",\"value\":\"0x1",{"_index":5352,"t":{"2400":{"position":[[1244,114]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_chainid\",\"params\":[],\"id\":1",{"_index":838,"t":{"182":{"position":[[195,61]]},"1407":{"position":[[195,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_chainid\",\"params\":[],\"id\":51",{"_index":5357,"t":{"2402":{"position":[[156,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_coinbase\",\"params\":[],\"id\":53",{"_index":5360,"t":{"2404":{"position":[[531,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_estimategas\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x44aa93095d6749a706051658b970b941c72c1d53\",\"value\":\"0x1\"}],\"id\":53",{"_index":5371,"t":{"2408":{"position":[[938,183]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_feehistory\",\"param",{"_index":5385,"t":{"2410":{"position":[[1084,53]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gasprice\",\"params\":[],\"id\":53",{"_index":5409,"t":{"2412":{"position":[[758,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getbalance\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":5410,"t":{"2414":{"position":[[563,99]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockbyhash\",\"params\":[\"0xd5f1812548be429cbdc6376b29611fc49e06f1359758c4ceaaa3b393e2239f9c",{"_index":5414,"t":{"2416":{"position":[[387,127]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockbynumber\",\"params\":[\"0x68b3",{"_index":5443,"t":{"2418":{"position":[[600,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblockreceipts\",\"params\":[\"latest\"],\"id\":1",{"_index":5460,"t":{"2420":{"position":[[704,78]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblocktransactioncountbyhash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":53",{"_index":5498,"t":{"2422":{"position":[[357,153]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getblocktransactioncountbynumber\",\"params\":[\"0xe8\"],\"id\":51",{"_index":5503,"t":{"2424":{"position":[[560,93]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getcode\",\"params\":[\"0xa50a51c09a5c451c52bb714527e1974b686d8e77",{"_index":5508,"t":{"2426":{"position":[[592,96]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getfilterchanges\",\"params\":[\"0xf8bf5598d9e04fbe84523d42640b9b0e\"],\"id\":1",{"_index":5512,"t":{"2428":{"position":[[534,106]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getfilterlogs\",\"params\":[\"0x5ace5de3985749b6a1b2b0d3f3e1fb69\"],\"id\":1",{"_index":5526,"t":{"2430":{"position":[[505,103]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getlogs\",\"params\":[{\"fromblock\":\"earliest",{"_index":5536,"t":{"2432":{"position":[[723,75]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyblockhashandindex\",\"params\":[\"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7",{"_index":5594,"t":{"2442":{"position":[[383,146]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyblocknumberandindex\",\"params\":[\"82990",{"_index":5611,"t":{"2444":{"position":[[699,87]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionbyhash\",\"params\":[\"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44\"],\"id\":53",{"_index":5614,"t":{"2446":{"position":[[297,143]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactioncount\",\"params\":[\"0xc94770007dda54cf92009bff0de90c06f603a09f\",\"latest\"],\"id\":1",{"_index":5624,"t":{"2448":{"position":[[613,126]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_gettransactionreceipt\",\"params\":[\"0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f\"],\"id\":53",{"_index":5627,"t":{"2450":{"position":[[442,144]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclebyblockhashandindex\",\"params\":[\"0xc48fb64230a82f65a08e7280bd8745e7fea87bc7c206309dee32209fe9a985f7",{"_index":5630,"t":{"2452":{"position":[[313,140]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclebyblocknumberandindex\",\"params\":[\"0x7689d2",{"_index":5656,"t":{"2454":{"position":[[515,84]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclecountbyblockhash\",\"params\":[\"0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238\"],\"id\":1",{"_index":5674,"t":{"2456":{"position":[[309,146]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getunclecountbyblocknumber\",\"params\":[\"0xe8\"],\"id\":1",{"_index":5678,"t":{"2458":{"position":[[501,86]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_getwork\",\"params\":[],\"id\":1",{"_index":5684,"t":{"2460":{"position":[[529,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_hashrate\",\"params\":[],\"id\":1",{"_index":5688,"t":{"2462":{"position":[[330,62],[415,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_maxpriorityfeepergas\",\"params\":[],\"id\":1",{"_index":5690,"t":{"2464":{"position":[[244,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_mining\",\"params\":[],\"id\":53",{"_index":5692,"t":{"2466":{"position":[[331,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newblockfilter\",\"params\":[],\"id\":1",{"_index":5693,"t":{"2468":{"position":[[217,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newfilter\",\"params\":[{\"fromblock\":\"earliest",{"_index":5695,"t":{"2470":{"position":[[404,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_newpendingtransactionfilter\",\"params\":[],\"id\":1",{"_index":5697,"t":{"2472":{"position":[[246,81]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_protocolversion\",\"params\":[],\"id\":1",{"_index":5699,"t":{"2474":{"position":[[199,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_sendrawtransaction\",\"params\":[\"0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833\"],\"id\":1",{"_index":5703,"t":{"2476":{"position":[[870,290]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_sendtransaction\",\"params\":[{\"from\":\"0x9b790656b9ec0db1936ed84b3bea605873558198",{"_index":2258,"t":{"789":{"position":[[1929,112]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1",{"_index":841,"t":{"182":{"position":[[354,61]]},"1407":{"position":[[354,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":51",{"_index":5719,"t":{"2482":{"position":[[1356,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"eth_uninstallfilter\",\"params\":[\"0x70355a0b574b437eaa19fe95adfedc0a\"],\"id\":1",{"_index":5729,"t":{"2484":{"position":[[382,105]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_discardvalidatorvote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185",{"_index":1988,"t":{"679":{"position":[[278,111],[421,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_discardvalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1151,"t":{"269":{"position":[[1379,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getpendingvotes\",\"param",{"_index":1990,"t":{"681":{"position":[[356,62],[450,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getsignermetrics\",\"params\":[\"1",{"_index":1993,"t":{"683":{"position":[[1147,65],[1252,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getvalidatorsbyblockhash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256",{"_index":1994,"t":{"685":{"position":[[231,139],[402,138]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_getvalidatorsbyblocknumber\",\"params\":[\"latest",{"_index":1150,"t":{"269":{"position":[[1039,81]]},"687":{"position":[[430,81],[543,80]]},"856":{"position":[[152,81]]},"1133":{"position":[[162,81]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"0x90626e6a67445aabf1c0615410d108d4733aa90b",{"_index":2370,"t":{"854":{"position":[[229,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1149,"t":{"269":{"position":[[264,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"ibft_proposevalidatorvote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",tru",{"_index":1996,"t":{"689":{"position":[[303,114],[449,113]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_changetargetgaslimit\",\"params\":[800000",{"_index":5731,"t":{"2488":{"position":[[248,74]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getextradata\",\"param",{"_index":5733,"t":{"2490":{"position":[[244,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getmingasprice\",\"params\":[],\"id\":1",{"_index":5736,"t":{"2492":{"position":[[455,70]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_getminpriorityfee\",\"params\":[],\"id\":1",{"_index":5737,"t":{"2494":{"position":[[474,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setcoinbase\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"],\"id\":1",{"_index":5740,"t":{"2496":{"position":[[386,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setextradata\",\"params\":[\"0x0010203",{"_index":5742,"t":{"2498":{"position":[[297,71]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setmingasprice\",\"params\":[\"0x5dc\"],\"id\":1",{"_index":5746,"t":{"2500":{"position":[[483,77]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_setminpriorityfee\",\"params\":[\"0x0a\"],\"id\":1",{"_index":5749,"t":{"2502":{"position":[[505,79]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_start\",\"params\":[],\"id\":1",{"_index":5751,"t":{"2504":{"position":[[326,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"miner_stop\",\"params\":[],\"id\":1",{"_index":5752,"t":{"2506":{"position":[[202,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_enode\",\"params\":[],\"id\":1",{"_index":5753,"t":{"2510":{"position":[[155,59],[237,57]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":1",{"_index":4068,"t":{"1721":{"position":[[616,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_listening\",\"params\":[],\"id\":53",{"_index":5755,"t":{"2512":{"position":[[247,64],[334,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_peercount\",\"params\":[],\"id\":1",{"_index":2175,"t":{"777":{"position":[[147,63]]},"837":{"position":[[147,63]]},"1052":{"position":[[141,63],[2057,63]]},"1303":{"position":[[141,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_peercount\",\"params\":[],\"id\":53",{"_index":5756,"t":{"2514":{"position":[[214,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_services\",\"params\":[],\"id\":1",{"_index":5757,"t":{"2516":{"position":[[338,62],[423,60]]}}}],["jsonrpc\":\"2.0\",\"method\":\"net_version\",\"params\":[],\"id\":53",{"_index":5758,"t":{"2518":{"position":[[656,62]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addaccountstoallowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032",{"_index":2000,"t":{"693":{"position":[[466,113],[659,112]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addnodestoallowlist\",\"params\":[[\"\",\"\",\"\",\"enodenode4",{"_index":2898,"t":{"1048":{"position":[[319,125],[496,125],[673,125],[850,125]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_addnodestoallowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2001,"t":{"695":{"position":[[602,377],[1011,376]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_getaccountsallowlist\",\"param",{"_index":2002,"t":{"697":{"position":[[242,67],[341,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_getnodesallowlist\",\"param",{"_index":2005,"t":{"699":{"position":[[199,64],[295,63]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_reloadpermissionsfromfile\",\"param",{"_index":2009,"t":{"701":{"position":[[262,72],[366,71]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_removeaccountsfromallowlist\",\"params\":[[\"0xb9b81ee349c3807e46bc71aa2632203c5b462032",{"_index":2010,"t":{"703":{"position":[[471,118],[669,117]]}}}],["jsonrpc\":\"2.0\",\"method\":\"perm_removenodesfromallowlist\",\"params\":[[\"enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303\",\"enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304",{"_index":2011,"t":{"705":{"position":[[416,382],[830,381]]}}}],["jsonrpc\":\"2.0\",\"method\":\"plugins_reloadpluginconfig\",\"params\":[\"tech.pegasys.plus.plugin.kafka.kafkaplugin\"],\"id\":1",{"_index":5760,"t":{"2522":{"position":[[177,120]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_call\",\"params\":[\"tb8nvyqqznhnegf/3mysyb+heud4spwn90rz3goskrw",{"_index":2012,"t":{"709":{"position":[[652,96],[864,95]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_debuggetstateroot\",\"params\":[\"xjdxvwoemrs2mckkwlgartzwixffu/tmvxi3ekssvtk=\",\"latest\"],\"id\":1",{"_index":2031,"t":{"713":{"position":[[470,127],[620,125]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_deleteprivacygroup\",\"params\":[\"ewutvoc5nlvwmwtfdrrk/wvv0dcyqo/pauvx5bnebtk=\"],\"id\":1",{"_index":2033,"t":{"715":{"position":[[209,119],[351,117]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_distributerawtransaction\",\"param",{"_index":2034,"t":{"717":{"position":[[452,68],[774,67]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getcode\",\"params\":[\"1ljxsip4jop6urn9wyspewwqoop1c4npqjylb4fexua",{"_index":2039,"t":{"721":{"position":[[587,99],[774,98]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_geteeatransactioncount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":2043,"t":{"723":{"position":[[764,112],[1054,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getprivacyprecompileaddress\",\"param",{"_index":2084,"t":{"731":{"position":[[294,74],[400,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_getprivatetransaction\",\"params\":[\"0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498",{"_index":2085,"t":{"733":{"position":[[339,136],[507,135]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_gettransactioncount\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":2092,"t":{"735":{"position":[[611,109],[801,108]]}}}],["jsonrpc\":\"2.0\",\"method\":\"priv_gettransactionreceipt\",\"params\":[\"0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d\"],\"id\":1",{"_index":2093,"t":{"737":{"position":[[354,144],[521,142]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_discardvalidatorvote\",\"params\":[\"0xef1bfb6a12794615c9b0b5a21e6741f01e570185",{"_index":2135,"t":{"747":{"position":[[278,111],[421,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_discardvalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1308,"t":{"337":{"position":[[1945,111]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getpendingvotes\",\"param",{"_index":2136,"t":{"749":{"position":[[356,62],[450,61]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getsignermetrics\",\"params\":[\"1",{"_index":2137,"t":{"751":{"position":[[1147,65],[1252,64]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getvalidatorsbyblockhash\",\"params\":[\"0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256",{"_index":2138,"t":{"753":{"position":[[231,139],[402,138]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_getvalidatorsbyblocknumber\",\"params\":[\"latest",{"_index":1307,"t":{"337":{"position":[[1605,81]]},"755":{"position":[[1318,81],[1431,80]]},"1103":{"position":[[162,81]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_proposevalidatorvote\",\"params\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",{"_index":1306,"t":{"337":{"position":[[830,110]]}}}],["jsonrpc\":\"2.0\",\"method\":\"qbft_proposevalidatorvote\",\"params\":[\"42d4287eac8078828cf5f3486cfe601a275a49a5\",tru",{"_index":2140,"t":{"757":{"position":[[303,114],[449,113]]}}}],["jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1",{"_index":5846,"t":{"2557":{"position":[[205,61],[289,59]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_block\",\"params\":[\"0x6\"],\"id\":1",{"_index":5764,"t":{"2526":{"position":[[798,66]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_call\",\"params\":[{\"from\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\",\"to\":\"0x0010000000000000000000000000000000000000\",\"gas\":\"0xfffff2\",\"gasprice\":\"0xef\",\"value\":\"0x0\",\"data\":\"0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002\",\"nonce\":\"0x0\"},[\"trace\"],\"latest\"],\"id\":1",{"_index":5776,"t":{"2528":{"position":[[864,513]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_callmany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"id\":1",{"_index":5783,"t":{"2530":{"position":[[847,342]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_callmany\",\"params\":[[[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]],[{\"from\":\"0x407d73d8a49eeb85d32cf465507dd71d507100c1\",\"to\":\"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\",\"value\":\"0x186a0\"},[\"trace\"]]],\"latest\"],\"latest\"],\"id\":1",{"_index":5784,"t":{"2530":{"position":[[1212,350]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_filter\",\"params\":[{\"fromblock\":\"0x1\",\"toblock\":\"0x21\",\"after\":2,\"count\":2,\"fromaddress\":[\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"]}],\"id\":415",{"_index":5789,"t":{"2532":{"position":[[640,181]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_get\",\"params\":[\"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3\",[\"0x0\"]],\"id\":1",{"_index":5799,"t":{"2534":{"position":[[550,135]]}}}],["jsonrpc\":\"2.0\",\"method\":\"trace_rawtransaction\",\"params\":[\"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675\",[\"trace\"]],\"id\":1",{"_index":5808,"t":{"2536":{"position":[[678,166]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besupendingtransactions\",\"params\":[2,{\"from\":{\"eq\":\"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73\"},\"gas\":{\"lt\":\"0x5209\"},\"nonce\":{\"gt\":\"0x1\"}}],\"id\":1",{"_index":5821,"t":{"2544":{"position":[[1339,185]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besustatistics\",\"params\":[],\"id\":1",{"_index":5831,"t":{"2546":{"position":[[514,71],[608,69]]}}}],["jsonrpc\":\"2.0\",\"method\":\"txpool_besutransactions\",\"params\":[],\"id\":1",{"_index":5832,"t":{"2548":{"position":[[190,73]]}}}],["jsonrpc\":\"2.0\",\"method\":\"web3_clientversion\",\"params\":[],\"id\":1",{"_index":3464,"t":{"1301":{"position":[[67,68]]},"2552":{"position":[[169,68]]}}}],["jsonrpc\":\"2.0\",\"method\":\"web3_sha3\",\"params\":[\"0x68656c6c6f20776f726c00\"],\"id\":53",{"_index":5842,"t":{"2554":{"position":[[294,86]]}}}],["jump",{"_index":1749,"t":{"536":{"position":[[207,5]]}}}],["justifi",{"_index":3216,"t":{"1209":{"position":[[251,9]]}}}],["jvm",{"_index":758,"t":{"152":{"position":[[82,5],[137,3],[298,3]]},"158":{"position":[[587,3],[606,3]]},"562":{"position":[[178,3]]},"1301":{"position":[[756,3]]},"1413":{"position":[[59,5],[93,3],[254,3]]},"1506":{"position":[[60,5]]},"1519":{"position":[[105,5]]},"1523":{"position":[[36,5],[116,3],[194,3]]},"1529":{"position":[[110,5],[203,4],[221,3]]},"2138":{"position":[[374,4]]},"2368":{"position":[[123,3],[159,3],[549,6]]}}}],["jwt",{"_index":474,"t":{"77":{"position":[[91,5]]},"79":{"position":[[1030,5],[1075,3]]},"91":{"position":[[82,5]]},"1006":{"position":[[385,3],[438,4]]},"1011":{"position":[[184,5],[292,5]]},"1019":{"position":[[157,3],[548,3],[642,5],[879,3],[927,3]]},"1021":{"position":[[13,3],[348,5]]},"1271":{"position":[[170,3]]},"1275":{"position":[[334,3],[452,3]]},"1346":{"position":[[170,3]]},"1350":{"position":[[332,3],[609,3],[726,3]]},"1676":{"position":[[497,3]]},"1697":{"position":[[146,6],[153,3],[300,3],[329,3],[407,3]]},"1699":{"position":[[178,3]]},"1707":{"position":[[68,3],[103,3]]},"1709":{"position":[[384,3],[440,3]]},"1711":{"position":[[11,3],[118,3],[179,3],[280,3],[473,3]]},"1713":{"position":[[142,3],[208,4],[249,3],[296,3]]},"1788":{"position":[[293,3]]},"1794":{"position":[[87,3],[138,3],[228,3],[261,3]]},"2009":{"position":[[154,3]]},"2013":{"position":[[338,3],[456,3]]},"2017":{"position":[[193,3],[448,3]]},"2019":{"position":[[195,3],[582,3]]},"2029":{"position":[[154,3]]},"2033":{"position":[[312,3],[569,3],[686,3]]},"2037":{"position":[[229,3],[475,3],[730,3]]},"2039":{"position":[[231,3],[782,3]]},"2050":{"position":[[3069,3],[3084,4],[3412,3],[3612,3],[4088,3],[4103,4],[4431,3],[4701,3],[4716,4],[5291,3]]},"2096":{"position":[[64,3],[101,3],[156,3]]},"2098":{"position":[[64,3],[91,3],[150,3]]},"2124":{"position":[[581,3]]},"2220":{"position":[[82,3],[134,3],[227,3],[253,3]]},"2222":{"position":[[81,3],[134,3],[257,3],[297,3],[383,4]]},"2268":{"position":[[80,3],[130,3],[219,3],[245,3]]},"2270":{"position":[[79,3],[130,3],[249,3],[289,3],[380,4]]}}}],["jwt/jwtsecret.hex",{"_index":4662,"t":{"2050":{"position":[[3457,18],[4476,18]]}}}],["jwt_token",{"_index":4061,"t":{"1721":{"position":[[152,12]]}}}],["jwtsecret.hex",{"_index":3380,"t":{"1271":{"position":[[63,13],[94,13]]},"1275":{"position":[[354,14],[394,13]]},"1346":{"position":[[63,13],[94,13]]},"1350":{"position":[[352,14],[629,14],[668,13]]},"2009":{"position":[[63,13],[94,13]]},"2013":{"position":[[358,14],[398,13]]},"2017":{"position":[[218,14],[394,13]]},"2019":{"position":[[220,14],[528,13]]},"2029":{"position":[[63,13],[94,13]]},"2033":{"position":[[332,14],[589,14],[628,13]]},"2037":{"position":[[254,14],[500,14],[676,13]]},"2039":{"position":[[256,14],[728,13]]}}}],["k8",{"_index":1367,"t":{"395":{"position":[[79,6]]},"860":{"position":[[79,6]]}}}],["kabelwavw7okoen1+oko+aba4hhz/7dacowvqz9nx5m",{"_index":1601,"t":{"453":{"position":[[1850,47]]},"735":{"position":[[721,48],[910,48]]}}}],["keccak",{"_index":3028,"t":{"1150":{"position":[[272,6]]},"1152":{"position":[[97,6],[1065,6]]},"2554":{"position":[[65,6]]}}}],["keccak('event1(uint256",{"_index":3057,"t":{"1152":{"position":[[771,25]]}}}],["keccak('event2(uint256",{"_index":3058,"t":{"1152":{"position":[[841,26]]}}}],["keccak('hello(uint256",{"_index":3048,"t":{"1152":{"position":[[255,25]]}}}],["keccak256(rlp",{"_index":1033,"t":{"235":{"position":[[258,18]]},"265":{"position":[[258,18]]},"333":{"position":[[258,18]]}}}],["keep",{"_index":396,"t":{"63":{"position":[[42,4]]},"103":{"position":[[991,7]]},"789":{"position":[[148,5]]},"791":{"position":[[212,5]]},"819":{"position":[[142,5]]},"875":{"position":[[182,4]]},"879":{"position":[[806,4]]},"920":{"position":[[1109,4]]},"928":{"position":[[98,4]]},"930":{"position":[[816,4]]},"932":{"position":[[1779,4]]},"969":{"position":[[735,4]]},"973":{"position":[[968,7]]},"1000":{"position":[[204,5]]},"1195":{"position":[[526,4]]},"1203":{"position":[[341,5],[430,7]]},"1233":{"position":[[201,5]]},"1315":{"position":[[1262,5]]},"1541":{"position":[[109,4],[289,4]]},"1624":{"position":[[413,7]]},"1652":{"position":[[109,4]]},"1709":{"position":[[1024,4]]},"1936":{"position":[[94,4]]},"2052":{"position":[[949,4]]},"2308":{"position":[[459,7]]}}}],["kept",{"_index":3314,"t":{"1233":{"position":[[1233,4]]},"1709":{"position":[[922,4]]},"2302":{"position":[[289,4],[431,4],[672,4]]},"2304":{"position":[[271,4]]},"2310":{"position":[[194,4]]},"2546":{"position":[[204,4]]}}}],["key",{"_index":9,"t":{"2":{"position":[[135,4],[731,3],[944,3],[1161,3]]},"23":{"position":[[335,4]]},"29":{"position":[[301,3],[400,3],[469,3],[527,3]]},"57":{"position":[[15,3],[153,3]]},"73":{"position":[[655,4],[768,3]]},"93":{"position":[[142,3],[227,4]]},"95":{"position":[[48,3],[185,4],[322,4],[450,4],[547,3]]},"101":{"position":[[977,3]]},"115":{"position":[[118,3],[219,4]]},"119":{"position":[[291,4],[308,3],[476,3],[487,3]]},"142":{"position":[[232,4]]},"190":{"position":[[131,3]]},"199":{"position":[[231,3]]},"215":{"position":[[341,4],[672,3],[714,4]]},"255":{"position":[[921,3]]},"259":{"position":[[1029,3]]},"287":{"position":[[396,4]]},"293":{"position":[[281,4]]},"301":{"position":[[281,3]]},"321":{"position":[[1193,3]]},"323":{"position":[[854,3]]},"327":{"position":[[1590,3]]},"353":{"position":[[47,3],[89,4]]},"362":{"position":[[160,4]]},"369":{"position":[[198,3]]},"449":{"position":[[466,3],[2069,3],[2280,3]]},"475":{"position":[[1009,3]]},"483":{"position":[[554,3],[653,3],[722,3],[780,3]]},"493":{"position":[[323,3]]},"542":{"position":[[69,3],[88,4],[154,4],[200,3],[246,3],[299,3],[324,3],[438,3],[616,4],[670,3],[809,3],[876,3],[945,3],[1003,3]]},"568":{"position":[[322,4],[918,3],[1131,3],[1348,3]]},"574":{"position":[[40,3],[655,3],[729,4]]},"576":{"position":[[40,3],[1054,3],[1141,4]]},"586":{"position":[[557,3]]},"611":{"position":[[92,3],[145,3],[298,3],[373,3],[478,3],[503,3],[785,3],[952,4]]},"617":{"position":[[72,3],[121,3],[214,3],[256,3],[325,3]]},"621":{"position":[[299,3]]},"643":{"position":[[475,3]]},"647":{"position":[[134,3],[166,3],[541,3]]},"675":{"position":[[449,4]]},"711":{"position":[[60,4],[217,4]]},"717":{"position":[[311,3],[328,3]]},"719":{"position":[[249,4]]},"765":{"position":[[103,3]]},"767":{"position":[[285,3],[438,3],[509,3]]},"769":{"position":[[1104,3],[1167,3],[1378,3],[1441,3],[1656,3],[1719,3],[2476,4]]},"779":{"position":[[407,3]]},"787":{"position":[[85,3],[4281,3]]},"791":{"position":[[2911,4]]},"807":{"position":[[182,4],[214,4],[461,4]]},"817":{"position":[[311,3],[1360,3]]},"827":{"position":[[103,3]]},"829":{"position":[[838,3],[901,3],[1112,3],[1175,3],[1574,4]]},"839":{"position":[[125,3]]},"852":{"position":[[235,3],[333,3]]},"862":{"position":[[681,4],[718,3]]},"877":{"position":[[80,3]]},"914":{"position":[[703,5],[719,3]]},"920":{"position":[[268,3],[369,3],[1811,3],[2025,4],[2039,3]]},"928":{"position":[[47,4],[997,3],[1639,4],[2712,4]]},"930":{"position":[[1464,3],[1782,4],[1895,4],[1957,4]]},"932":{"position":[[637,4],[750,4],[812,4],[985,4],[1850,4]]},"936":{"position":[[294,4]]},"969":{"position":[[208,4]]},"989":{"position":[[128,4]]},"1006":{"position":[[396,3]]},"1011":{"position":[[57,3],[71,3],[148,3]]},"1013":{"position":[[59,3],[135,4],[198,3],[217,3]]},"1015":{"position":[[80,3],[690,7]]},"1019":{"position":[[168,3],[559,3],[600,3],[890,3],[938,3]]},"1021":{"position":[[73,3]]},"1030":{"position":[[80,3],[383,3],[1081,3],[1144,3],[1355,3],[1418,3],[1633,3],[1696,3],[1954,4]]},"1032":{"position":[[57,3],[182,3],[458,3],[512,4],[570,3],[641,3],[712,3],[781,3]]},"1036":{"position":[[24,3],[139,3],[189,3],[239,3],[289,3]]},"1052":{"position":[[627,3],[807,3],[1099,4]]},"1056":{"position":[[331,5]]},"1063":{"position":[[41,4],[104,3],[167,3],[281,4],[323,3],[346,4]]},"1065":{"position":[[871,7],[1604,7],[2337,7],[3070,7],[3419,3]]},"1069":{"position":[[289,3],[567,3],[798,3],[857,3],[893,5],[1100,3],[1182,4]]},"1071":{"position":[[434,3],[781,3]]},"1073":{"position":[[434,3],[781,3]]},"1075":{"position":[[434,3],[781,3]]},"1077":{"position":[[395,4],[437,5]]},"1087":{"position":[[76,3],[375,3],[1064,3],[1127,3],[1338,3],[1401,3],[1616,3],[1679,3],[2142,4]]},"1089":{"position":[[49,3],[174,3],[450,3],[504,4],[562,3],[633,3],[704,3],[773,3]]},"1093":{"position":[[24,3],[131,3],[181,3],[231,3],[281,3]]},"1103":{"position":[[1631,3],[1788,3],[1906,3],[2100,4],[2162,3],[2265,3],[2473,3],[2504,3],[2566,3]]},"1105":{"position":[[308,3]]},"1117":{"position":[[80,3],[383,3],[1073,3],[1136,3],[1347,3],[1410,3],[1625,3],[1688,3],[2157,4]]},"1119":{"position":[[49,3],[174,3],[450,3],[504,4],[562,3],[633,3],[704,3],[773,3]]},"1123":{"position":[[24,3],[131,3],[181,3],[231,3],[281,3]]},"1133":{"position":[[1698,3],[1855,3],[1973,3],[2167,4],[2229,3],[2332,3],[2540,3],[2571,3],[2633,3]]},"1135":{"position":[[465,3]]},"1154":{"position":[[37,3]]},"1156":{"position":[[35,3],[98,3]]},"1158":{"position":[[42,3],[81,3],[171,3],[196,3],[211,3],[307,3],[318,3],[345,3]]},"1160":{"position":[[16,3],[110,3],[184,4],[256,3]]},"1162":{"position":[[70,3],[289,3]]},"1164":{"position":[[23,3],[59,3],[92,3],[142,3],[153,3],[170,3],[225,3],[250,3],[325,3],[379,3],[422,3]]},"1166":{"position":[[228,4],[760,3],[1260,3]]},"1172":{"position":[[390,4]]},"1174":{"position":[[185,3]]},"1179":{"position":[[157,4]]},"1223":{"position":[[199,4],[468,4]]},"1273":{"position":[[250,4],[359,3],[437,3]]},"1309":{"position":[[290,4],[430,4],[1026,3],[1239,3],[1456,3]]},"1315":{"position":[[236,4]]},"1323":{"position":[[247,3]]},"1325":{"position":[[14,3]]},"1329":{"position":[[147,5]]},"1348":{"position":[[477,4],[638,3],[716,3]]},"1379":{"position":[[232,4]]},"1425":{"position":[[1421,3]]},"1437":{"position":[[67,3]]},"1455":{"position":[[266,3]]},"1521":{"position":[[606,5]]},"1577":{"position":[[358,3]]},"1579":{"position":[[187,3],[268,3]]},"1582":{"position":[[332,4],[365,4]]},"1584":{"position":[[40,4],[95,4],[291,6]]},"1636":{"position":[[482,4],[593,4],[678,4],[839,4],[927,4]]},"1640":{"position":[[21,3],[107,3]]},"1676":{"position":[[508,3]]},"1679":{"position":[[37,3]]},"1697":{"position":[[311,4],[418,3]]},"1699":{"position":[[235,3]]},"1701":{"position":[[830,3]]},"1707":{"position":[[90,4]]},"1709":{"position":[[36,3],[74,3],[113,3],[200,4],[322,3],[496,4],[523,4],[549,4],[617,4],[715,4],[805,4],[885,3],[910,3],[955,4],[1042,4],[1158,4]]},"1711":{"position":[[387,3]]},"1713":{"position":[[164,3],[260,3],[307,3]]},"1728":{"position":[[786,3],[957,4],[1079,4]]},"1830":{"position":[[57,3]]},"1832":{"position":[[176,3]]},"1834":{"position":[[81,3],[587,4],[592,3]]},"1836":{"position":[[116,3]]},"1838":{"position":[[75,3]]},"1840":{"position":[[44,3],[117,4]]},"1842":{"position":[[34,3],[64,3],[94,3],[163,3]]},"1844":{"position":[[54,3]]},"1846":{"position":[[125,3]]},"1848":{"position":[[57,3]]},"1850":{"position":[[122,3],[195,4]]},"1852":{"position":[[120,3],[1482,4]]},"1854":{"position":[[39,3],[1564,3]]},"1856":{"position":[[43,3]]},"1860":{"position":[[444,3]]},"1876":{"position":[[21,3],[68,3],[143,3],[175,3],[210,3]]},"1878":{"position":[[66,3],[93,3],[198,3],[224,3],[325,3],[351,3],[481,3],[575,3],[614,3],[648,3],[705,3]]},"1880":{"position":[[66,3],[101,3],[210,3],[244,3],[345,3],[379,3],[635,3],[669,3],[726,3]]},"1890":{"position":[[268,4],[1135,3]]},"1892":{"position":[[412,4]]},"1915":{"position":[[68,3]]},"1917":{"position":[[42,3]]},"1919":{"position":[[42,3]]},"1921":{"position":[[64,3]]},"1923":{"position":[[72,3]]},"1979":{"position":[[17,3],[54,3],[88,3]]},"1981":{"position":[[68,3]]},"1983":{"position":[[225,3]]},"1997":{"position":[[386,3]]},"1999":{"position":[[1106,3]]},"2001":{"position":[[751,3]]},"2011":{"position":[[218,4],[346,3],[424,3]]},"2019":{"position":[[420,3],[464,3],[922,4]]},"2031":{"position":[[437,4],[598,3],[676,3]]},"2039":{"position":[[495,3],[539,3],[1216,4]]},"2050":{"position":[[540,3],[1391,4],[1440,4],[1861,3],[1921,3],[3416,4],[4435,4]]},"2056":{"position":[[557,3]]},"2066":{"position":[[352,3]]},"2124":{"position":[[592,3]]},"2130":{"position":[[57,3],[99,3],[156,3],[188,3]]},"2184":{"position":[[70,3],[101,3],[210,3],[263,3],[305,3],[343,3],[375,3],[417,4],[446,3],[482,4],[506,3]]},"2220":{"position":[[257,3]]},"2222":{"position":[[92,3],[145,3],[268,3],[319,3]]},"2246":{"position":[[332,3]]},"2268":{"position":[[249,3]]},"2270":{"position":[[90,3],[141,3],[260,3],[311,3]]},"2282":{"position":[[338,3],[378,3]]},"2344":{"position":[[412,3]]},"2346":{"position":[[624,3],[670,3]]},"2380":{"position":[[349,3],[1188,6]]},"2394":{"position":[[121,3],[181,3]]},"2406":{"position":[[601,4]]},"2438":{"position":[[321,5],[370,4],[1124,4],[1146,3],[2183,6]]},"2476":{"position":[[298,4]]}}}],["key(0",{"_index":3644,"t":{"1425":{"position":[[2321,7]]}}}],["key(511",{"_index":3647,"t":{"1425":{"position":[[2462,9]]}}}],["key.pub",{"_index":2880,"t":{"1032":{"position":[[580,7],[651,7],[722,7],[789,7]]},"1036":{"position":[[151,7],[201,7],[251,7],[301,7]]},"1089":{"position":[[572,7],[643,7],[714,7],[781,7]]},"1093":{"position":[[143,7],[193,7],[243,7],[293,7]]},"1119":{"position":[[572,7],[643,7],[714,7],[781,7]]},"1123":{"position":[[143,7],[193,7],[243,7],[293,7]]}}}],["key/valu",{"_index":3676,"t":{"1455":{"position":[[244,9]]}}}],["key:valu",{"_index":4585,"t":{"2001":{"position":[[236,9]]}}}],["key=\"invalid_tx_remov",{"_index":3883,"t":{"1596":{"position":[[853,25]]}}}],["keycloak",{"_index":4070,"t":{"1721":{"position":[[734,8]]},"1723":{"position":[[21,8]]}}}],["keydata",{"_index":2855,"t":{"1015":{"position":[[717,10]]},"1065":{"position":[[898,10],[1631,10],[2364,10],[3097,10]]}}}],["keygen",{"_index":2913,"t":{"1063":{"position":[[207,6]]}}}],["keypair",{"_index":3662,"t":{"1439":{"position":[[73,7]]},"2220":{"position":[[292,7]]},"2268":{"position":[[284,7]]}}}],["keypairutil",{"_index":2984,"t":{"1103":{"position":[[1878,11],[2230,11]]},"1133":{"position":[[1945,11],[2297,11]]},"1425":{"position":[[1381,11]]}}}],["keys.j",{"_index":2934,"t":{"1077":{"position":[[341,7]]}}}],["keys:/opt/besu/publ",{"_index":3536,"t":{"1329":{"position":[[125,21]]}}}],["keys=:30303",{"_index":693,"t":{"140":{"position":[[389,20]]},"1377":{"position":[[389,20]]}}}],["localportws>:8546",{"_index":692,"t":{"140":{"position":[[367,18]]},"1377":{"position":[[367,18]]}}}],["locat",{"_index":164,"t":{"21":{"position":[[176,9]]},"109":{"position":[[172,8]]},"142":{"position":[[281,8],[348,9]]},"164":{"position":[[39,8],[222,8]]},"166":{"position":[[104,8]]},"491":{"position":[[517,9]]},"523":{"position":[[144,7]]},"528":{"position":[[288,10]]},"582":{"position":[[204,9]]},"908":{"position":[[2793,8]]},"1065":{"position":[[3388,8]]},"1164":{"position":[[75,9]]},"1172":{"position":[[254,8]]},"1187":{"position":[[542,8]]},"1327":{"position":[[190,8]]},"1379":{"position":[[281,8],[348,9]]},"1411":{"position":[[1691,8]]},"1502":{"position":[[523,8],[624,8]]},"1517":{"position":[[314,7]]},"1594":{"position":[[819,8]]},"1850":{"position":[[1255,8]]},"1981":{"position":[[119,8]]},"2376":{"position":[[558,8]]},"2378":{"position":[[267,8]]}}}],["lock",{"_index":1760,"t":{"540":{"position":[[11,6],[249,7]]},"1443":{"position":[[101,4]]}}}],["log",{"_index":188,"t":{"23":{"position":[[312,4]]},"29":{"position":[[620,3]]},"41":{"position":[[458,4]]},"77":{"position":[[1392,4],[1547,4],[1631,3]]},"158":{"position":[[420,4]]},"168":{"position":[[3,3]]},"249":{"position":[[935,4]]},"261":{"position":[[1826,4],[1851,3]]},"281":{"position":[[844,4]]},"329":{"position":[[1578,4],[1603,3]]},"345":{"position":[[840,4]]},"387":{"position":[[499,5]]},"397":{"position":[[103,7]]},"409":{"position":[[38,3],[152,4],[480,4],[520,3],[584,3],[617,3],[672,3],[719,4],[819,4],[882,4]]},"411":{"position":[[31,3],[145,4],[297,4],[419,3],[471,4],[634,4]]},"421":{"position":[[99,4],[190,4]]},"423":{"position":[[31,4]]},"432":{"position":[[203,3]]},"434":{"position":[[400,4],[437,4],[1057,4],[1334,3],[1470,5]]},"439":{"position":[[111,7],[398,4]]},"441":{"position":[[67,4],[445,5],[499,5],[562,5],[622,3],[697,3],[796,3]]},"461":{"position":[[803,7]]},"493":{"position":[[1178,3]]},"515":{"position":[[343,4]]},"576":{"position":[[427,4],[447,3],[1270,5]]},"725":{"position":[[271,3],[436,3]]},"727":{"position":[[20,4],[198,3],[352,4],[537,3]]},"729":{"position":[[20,4],[174,3],[367,3]]},"737":{"position":[[930,7]]},"739":{"position":[[10,3],[57,4],[136,4]]},"755":{"position":[[894,3]]},"779":{"position":[[12,4]]},"852":{"position":[[62,4]]},"881":{"position":[[819,3]]},"926":{"position":[[1016,4],[1726,4],[1811,4]]},"930":{"position":[[2765,5]]},"932":{"position":[[2113,4]]},"936":{"position":[[947,4],[1001,4]]},"942":{"position":[[328,3]]},"954":{"position":[[296,3]]},"956":{"position":[[439,3]]},"958":{"position":[[292,3]]},"996":{"position":[[148,7]]},"998":{"position":[[871,4]]},"1004":{"position":[[265,5]]},"1067":{"position":[[222,3]]},"1077":{"position":[[1680,5],[3672,3]]},"1103":{"position":[[549,4],[1742,4]]},"1133":{"position":[[549,4],[1809,4]]},"1146":{"position":[[67,4],[137,4],[174,5],[208,5],[214,3],[334,4],[374,4],[514,4],[573,4],[648,3]]},"1148":{"position":[[0,3],[142,3]]},"1150":{"position":[[61,4],[257,3],[317,3],[888,3]]},"1152":{"position":[[21,3],[321,3],[1241,3]]},"1154":{"position":[[51,4],[116,3],[506,3]]},"1160":{"position":[[36,3]]},"1162":{"position":[[163,4]]},"1168":{"position":[[838,3]]},"1172":{"position":[[182,4]]},"1213":{"position":[[414,4],[592,4]]},"1279":{"position":[[101,4],[111,4]]},"1287":{"position":[[135,7]]},"1289":{"position":[[930,4],[997,4],[1075,4],[1784,4],[1811,4],[1843,3],[1880,4],[1907,4],[1940,3]]},"1293":{"position":[[272,4],[475,4]]},"1354":{"position":[[101,4],[111,4]]},"1421":{"position":[[69,4],[256,4]]},"1423":{"position":[[51,4],[108,5],[514,3],[743,3],[785,4]]},"1425":{"position":[[45,4],[103,3],[259,4],[343,4],[463,5],[570,4],[790,4],[1103,5],[1278,3],[1292,4],[1531,4],[1640,4],[1768,5],[1875,4],[2144,7],[2229,4],[2722,4],[2816,4],[3246,3]]},"1427":{"position":[[62,3]]},"1429":{"position":[[175,3]]},"1431":{"position":[[346,3]]},"1433":{"position":[[286,3]]},"1435":{"position":[[63,4],[336,3]]},"1437":{"position":[[299,3]]},"1439":{"position":[[287,3]]},"1447":{"position":[[78,3]]},"1449":{"position":[[409,3]]},"1473":{"position":[[370,4]]},"1477":{"position":[[11,4],[50,3]]},"1512":{"position":[[302,5],[391,4]]},"1541":{"position":[[941,4],[1216,6],[1336,6],[1795,3]]},"1551":{"position":[[12,7],[125,7],[207,4],[257,3],[408,3]]},"1565":{"position":[[338,3],[394,3]]},"1575":{"position":[[100,7],[194,3]]},"1590":{"position":[[22,7],[68,7],[106,3],[168,5],[261,3]]},"1592":{"position":[[10,7],[49,7],[74,7],[135,4],[146,3],[359,3]]},"1594":{"position":[[25,7],[218,7],[1092,7]]},"1596":{"position":[[8,3],[109,3],[178,3],[265,3],[439,7]]},"1598":{"position":[[32,7],[64,3],[105,3]]},"1628":{"position":[[1853,3],[1904,4]]},"1683":{"position":[[29,5],[105,4],[304,4],[506,5]]},"1685":{"position":[[181,3]]},"1687":{"position":[[261,3]]},"1689":{"position":[[11,4],[1415,4]]},"1695":{"position":[[11,4],[155,4]]},"1782":{"position":[[17,3],[522,3]]},"1806":{"position":[[198,4],[467,5]]},"1812":{"position":[[41,5]]},"1814":{"position":[[85,4],[193,4],[229,4]]},"1818":{"position":[[20,4],[57,4],[168,4],[195,4],[350,4],[418,4],[519,5],[582,5],[691,4],[926,4],[983,3],[1074,4],[1109,4],[1135,3],[1152,4],[1245,8],[1310,7],[2146,4],[2307,7],[2420,7]]},"1826":{"position":[[208,5],[527,4]]},"1830":{"position":[[461,5]]},"1834":{"position":[[75,5],[442,4],[538,5],[694,5]]},"1836":{"position":[[103,3],[151,3],[215,4],[247,3],[290,3],[392,4],[407,3],[495,4],[510,3],[587,4],[602,3],[673,4],[688,3],[739,3],[799,4],[880,3]]},"1844":{"position":[[0,3]]},"1846":{"position":[[363,3]]},"1854":{"position":[[691,4],[711,3],[839,5]]},"1870":{"position":[[38,3],[184,3],[267,3],[325,3],[398,3],[469,3],[618,3]]},"1882":{"position":[[547,7]]},"1892":{"position":[[53,7],[186,3],[240,3],[368,4],[666,4],[841,3],[895,3],[986,3],[1013,3],[1085,5],[1249,4]]},"1901":{"position":[[190,3]]},"1915":{"position":[[410,5]]},"2021":{"position":[[85,4],[95,4]]},"2041":{"position":[[85,4],[95,4]]},"2064":{"position":[[70,3],[118,3],[197,3],[259,3],[399,3],[434,3],[516,4],[561,3],[638,4],[716,3]]},"2072":{"position":[[83,4],[132,4],[211,4],[285,4]]},"2074":{"position":[[77,4],[126,4],[219,4],[282,4],[315,4]]},"2134":{"position":[[141,7],[160,3]]},"2204":{"position":[[63,7],[99,7],[156,7],[218,4]]},"2254":{"position":[[65,4],[96,4],[147,4],[227,4],[322,4]]},"2336":{"position":[[12,3],[66,3],[84,5],[112,3],[181,3],[233,3],[318,3],[369,3],[1073,4]]},"2338":{"position":[[17,3],[219,3],[534,3]]},"2342":{"position":[[15,4]]},"2420":{"position":[[219,4],[1210,7],[2862,7],[4132,5],[5038,6],[6018,6]]},"2428":{"position":[[454,3]]},"2430":{"position":[[20,4],[68,3],[154,3],[292,4],[426,3]]},"2432":{"position":[[20,4],[78,3],[164,3],[224,4],[458,4],[624,3],[2749,7]]},"2450":{"position":[[1069,7],[2302,4],[3202,7]]},"2470":{"position":[[10,3],[34,4],[112,4]]}}}],["log4j",{"_index":3848,"t":{"1590":{"position":[[10,5]]},"1594":{"position":[[66,5],[127,5],[920,5]]},"1596":{"position":[[409,5]]}}}],["log4j_configuration_fil",{"_index":3872,"t":{"1594":{"position":[[787,24]]}}}],["log4j_configuration_file=./debug.xml",{"_index":3873,"t":{"1594":{"position":[[1149,36]]}}}],["log_filt",{"_index":5131,"t":{"2336":{"position":[[243,11]]}}}],["logger",{"_index":1554,"t":{"434":{"position":[[1078,7]]},"441":{"position":[[26,6]]},"1594":{"position":[[611,9],[696,10]]},"1596":{"position":[[1099,9],[1109,7],[1219,9],[1303,10]]}}}],["logger=splunk",{"_index":1549,"t":{"434":{"position":[[755,13]]}}}],["logging=\"debug",{"_index":4822,"t":{"2134":{"position":[[120,15]]}}}],["logging=[,info\",\"params\":[[,/ibft",{"_index":3013,"t":{"1133":{"position":[[2122,13],[2493,13]]}}}],["network>/qbft",{"_index":2986,"t":{"1103":{"position":[[2055,13],[2426,13]]}}}],["networkfil",{"_index":2878,"t":{"1032":{"position":[[234,12],[477,13]]},"1089":{"position":[[226,12],[469,13]]},"1119":{"position":[[226,12],[469,13]]}}}],["networkrunn",{"_index":2721,"t":{"942":{"position":[[701,13]]},"954":{"position":[[603,13]]},"956":{"position":[[738,13]]},"958":{"position":[[599,13]]},"1565":{"position":[[738,13]]}}}],["never",{"_index":27,"t":{"2":{"position":[[475,5]]},"255":{"position":[[644,5]]},"323":{"position":[[580,5]]},"568":{"position":[[662,5]]},"1309":{"position":[[770,5]]},"1709":{"position":[[935,5]]},"1784":{"position":[[106,5],[276,5]]}}}],["new",{"_index":171,"t":{"21":{"position":[[495,3]]},"55":{"position":[[193,3]]},"61":{"position":[[203,3]]},"117":{"position":[[1106,3]]},"164":{"position":[[372,3]]},"217":{"position":[[7,3],[198,3],[405,3]]},"221":{"position":[[268,3]]},"223":{"position":[[126,3],[409,3],[890,3],[1861,3],[2231,3]]},"249":{"position":[[37,3]]},"251":{"position":[[37,3]]},"255":{"position":[[740,3]]},"257":{"position":[[1619,3],[1725,3],[1822,3],[2027,3],[2397,3]]},"261":{"position":[[29,3],[194,3],[368,3],[580,3],[718,3],[787,3]]},"281":{"position":[[37,3]]},"283":{"position":[[37,3]]},"285":{"position":[[37,3]]},"323":{"position":[[673,3]]},"325":{"position":[[16004,3],[16110,3],[16207,3],[16412,3],[16778,3]]},"329":{"position":[[29,3],[211,3],[385,3],[597,3],[735,3],[804,3]]},"339":{"position":[[269,3]]},"345":{"position":[[37,3]]},"347":{"position":[[37,3]]},"351":{"position":[[37,3]]},"403":{"position":[[864,3]]},"405":{"position":[[777,3]]},"409":{"position":[[516,3]]},"443":{"position":[[288,3]]},"517":{"position":[[217,3]]},"530":{"position":[[20,3]]},"552":{"position":[[285,3],[431,3]]},"560":{"position":[[500,3]]},"582":{"position":[[336,3]]},"633":{"position":[[376,3]]},"635":{"position":[[38,3]]},"637":{"position":[[128,3]]},"755":{"position":[[964,3]]},"787":{"position":[[281,3],[1713,3],[1912,3],[3162,3]]},"791":{"position":[[1651,3],[1691,3]]},"799":{"position":[[276,3],[520,3],[561,3]]},"801":{"position":[[803,3],[844,3]]},"807":{"position":[[264,3],[892,3]]},"809":{"position":[[106,3],[443,3]]},"817":{"position":[[509,3],[884,3],[1807,3]]},"819":{"position":[[409,3],[781,3]]},"848":{"position":[[56,3]]},"850":{"position":[[42,3]]},"852":{"position":[[85,3]]},"854":{"position":[[19,3]]},"856":{"position":[[16,3]]},"879":{"position":[[883,3]]},"889":{"position":[[495,3]]},"932":{"position":[[1092,3]]},"934":{"position":[[223,3]]},"987":{"position":[[430,3]]},"1015":{"position":[[76,3]]},"1103":{"position":[[2254,3],[2469,3]]},"1133":{"position":[[2321,3],[2536,3]]},"1174":{"position":[[258,3],[287,3]]},"1187":{"position":[[330,3],[432,3],[538,3],[604,3],[671,3],[688,3]]},"1197":{"position":[[728,3],[1677,3]]},"1205":{"position":[[1007,3],[1535,3]]},"1237":{"position":[[271,3]]},"1240":{"position":[[188,3],[412,3],[548,3],[634,3],[719,3]]},"1260":{"position":[[1356,3],[2705,3]]},"1291":{"position":[[766,3]]},"1305":{"position":[[453,3]]},"1309":{"position":[[1888,3],[1965,3],[2064,3],[2186,3]]},"1315":{"position":[[720,3]]},"1323":{"position":[[0,3],[353,3],[522,3]]},"1325":{"position":[[41,3]]},"1327":{"position":[[286,3]]},"1329":{"position":[[21,3],[506,3]]},"1333":{"position":[[8,3],[411,3],[587,3]]},"1369":{"position":[[346,3]]},"1447":{"position":[[141,3]]},"1475":{"position":[[122,3]]},"1479":{"position":[[44,3]]},"1481":{"position":[[44,3]]},"1483":{"position":[[94,3]]},"1502":{"position":[[152,3]]},"1504":{"position":[[201,3]]},"1541":{"position":[[648,3],[1941,3]]},"1584":{"position":[[181,3],[253,3]]},"1612":{"position":[[224,3]]},"1614":{"position":[[44,3]]},"1654":{"position":[[147,3],[321,3]]},"1705":{"position":[[1220,3]]},"1779":{"position":[[159,3]]},"1814":{"position":[[73,3]]},"1816":{"position":[[196,3],[323,3],[545,3]]},"1818":{"position":[[37,3]]},"1820":{"position":[[444,3]]},"1876":{"position":[[201,3]]},"1919":{"position":[[122,3],[199,3],[299,3]]},"2015":{"position":[[7,3]]},"2035":{"position":[[7,3]]},"2050":{"position":[[1556,3]]},"2052":{"position":[[507,3],[592,3]]},"2292":{"position":[[352,3]]},"2466":{"position":[[38,3],[253,3]]},"2468":{"position":[[29,3],[59,3]]},"2472":{"position":[[29,3],[74,3]]},"2498":{"position":[[7,3]]}}}],["newaddress",{"_index":1158,"t":{"285":{"position":[[239,12],[710,12],[779,12]]},"351":{"position":[[239,12],[574,12],[643,12]]}}}],["newer",{"_index":1097,"t":{"257":{"position":[[2228,5]]},"325":{"position":[[16609,5]]},"906":{"position":[[2467,5]]},"1235":{"position":[[755,5]]},"1260":{"position":[[186,5]]},"2290":{"position":[[1024,5]]}}}],["newest",{"_index":4289,"t":{"1832":{"position":[[394,6]]}}}],["newestblock",{"_index":5383,"t":{"2410":{"position":[[525,12]]}}}],["newhead",{"_index":3696,"t":{"1473":{"position":[[361,8]]},"1816":{"position":[[64,8],[619,12]]}}}],["newli",{"_index":2323,"t":{"817":{"position":[[201,5]]},"1329":{"position":[[423,5]]}}}],["newnod",{"_index":3532,"t":{"1327":{"position":[[309,9]]},"1329":{"position":[[60,8],[99,7]]},"1331":{"position":[[245,7]]}}}],["newnode:9545",{"_index":3554,"t":{"1331":{"position":[[357,14]]}}}],["newpendingtransact",{"_index":3331,"t":{"1244":{"position":[[413,22]]},"1473":{"position":[[375,22]]},"1820":{"position":[[93,22],[703,26],[1150,26]]}}}],["newvalidatorcontractaddress",{"_index":991,"t":{"223":{"position":[[2179,29],[2739,29]]}}}],["newvalu",{"_index":1056,"t":{"249":{"position":[[240,10],[525,10]]},"251":{"position":[[238,10],[521,10]]},"281":{"position":[[240,10],[499,10]]},"283":{"position":[[226,10],[505,10],[566,10],[627,10]]},"345":{"position":[[240,10],[497,10]]},"347":{"position":[[226,10],[503,10],[564,10],[625,10]]}}}],["next",{"_index":941,"t":{"217":{"position":[[317,4]]},"225":{"position":[[326,4]]},"241":{"position":[[399,4]]},"245":{"position":[[162,4]]},"255":{"position":[[345,4]]},"261":{"position":[[713,4]]},"269":{"position":[[448,4]]},"273":{"position":[[167,4]]},"323":{"position":[[280,4]]},"329":{"position":[[730,4]]},"337":{"position":[[1014,4],[2442,4]]},"403":{"position":[[803,5]]},"633":{"position":[[465,5]]},"755":{"position":[[489,4],[750,4]]},"807":{"position":[[962,4]]},"809":{"position":[[513,4]]},"932":{"position":[[166,4]]},"1233":{"position":[[273,4]]},"1273":{"position":[[74,4]]},"1279":{"position":[[3270,4]]},"1313":{"position":[[868,4]]},"1315":{"position":[[386,4]]},"1333":{"position":[[550,4]]},"1348":{"position":[[74,4]]},"1354":{"position":[[3274,4]]},"1469":{"position":[[31,4],[581,4]]},"1730":{"position":[[335,4]]},"1771":{"position":[[1068,4]]},"1832":{"position":[[373,4]]},"1842":{"position":[[158,4]]},"1932":{"position":[[691,4]]},"2011":{"position":[[58,4]]},"2021":{"position":[[3227,4]]},"2031":{"position":[[58,4]]},"2041":{"position":[[3227,4]]},"2050":{"position":[[2592,5]]},"2354":{"position":[[583,4]]},"2448":{"position":[[97,4]]}}}],["next.j",{"_index":3502,"t":{"1311":{"position":[[625,7]]},"1315":{"position":[[36,8]]}}}],["nextkey",{"_index":4306,"t":{"1842":{"position":[[137,7]]},"2354":{"position":[[553,8],[1303,10]]},"2380":{"position":[[1284,10]]}}}],["ng",{"_index":4617,"t":{"2050":{"position":[[1035,2],[1219,5],[1571,2],[1830,2]]}}}],["nginx",{"_index":2635,"t":{"926":{"position":[[2053,5],[2167,5],[2210,5],[2294,5],[2378,6],[2468,6],[3020,5],[3084,5]]},"938":{"position":[[177,5],[258,5],[301,5],[382,5],[463,6],[550,6],[1532,5]]},"1502":{"position":[[192,6]]}}}],["nginx/ingress",{"_index":2638,"t":{"926":{"position":[[2280,13]]},"938":{"position":[[368,13]]}}}],["nimbu",{"_index":3183,"t":{"1205":{"position":[[272,6],[522,6],[680,6],[733,6]]}}}],["nioeventloopgroup",{"_index":3818,"t":{"1551":{"position":[[451,17]]}}}],["no]memori",{"_index":4519,"t":{"1961":{"position":[[295,11]]}}}],["no_execut",{"_index":4641,"t":{"2050":{"position":[[1962,12]]}}}],["no_schedul",{"_index":4640,"t":{"2050":{"position":[[1902,13]]}}}],["node",{"_index":121,"t":{"11":{"position":[[31,4],[101,5],[198,4],[235,5],[423,5]]},"13":{"position":[[4,4]]},"19":{"position":[[33,4],[50,4],[141,4],[227,4],[320,5],[449,5],[511,6]]},"21":{"position":[[114,5]]},"23":{"position":[[330,4]]},"25":{"position":[[71,5],[148,5],[266,4],[324,4],[458,4],[512,4],[550,5],[611,4]]},"29":{"position":[[99,6],[193,5],[574,5],[674,4],[796,5],[911,4]]},"31":{"position":[[7,4],[35,4],[121,4],[184,4],[260,4],[408,5]]},"35":{"position":[[63,4]]},"37":{"position":[[88,6],[187,6]]},"39":{"position":[[494,4]]},"45":{"position":[[461,5],[554,5],[601,5],[620,5]]},"51":{"position":[[308,5]]},"53":{"position":[[603,5]]},"57":{"position":[[243,4],[294,4],[331,5],[358,5]]},"59":{"position":[[32,5],[121,5],[235,5],[273,4],[316,4]]},"61":{"position":[[185,5]]},"65":{"position":[[82,4],[162,5],[208,4],[239,5],[257,4],[361,5],[489,5],[575,5]]},"67":{"position":[[88,4],[515,4]]},"79":{"position":[[80,5],[162,5],[252,5],[393,4],[469,5],[609,5],[659,6]]},"81":{"position":[[30,5],[164,5]]},"83":{"position":[[376,5],[461,4],[498,5]]},"87":{"position":[[87,5]]},"93":{"position":[[425,5],[541,5],[623,5]]},"95":{"position":[[17,5],[83,4],[131,4],[172,4],[342,5],[412,4],[438,4],[535,4]]},"113":{"position":[[183,5],[364,5]]},"119":{"position":[[171,4],[1227,5],[1343,5],[1925,5],[2051,5],[2232,5]]},"136":{"position":[[43,4],[114,4]]},"142":{"position":[[197,4],[221,4]]},"144":{"position":[[9,4]]},"146":{"position":[[18,6],[47,4]]},"148":{"position":[[255,5]]},"152":{"position":[[213,4]]},"156":{"position":[[42,5],[68,7],[86,5]]},"158":{"position":[[488,5]]},"160":{"position":[[55,5]]},"162":{"position":[[59,5]]},"164":{"position":[[376,5]]},"166":{"position":[[24,4],[50,5],[300,5]]},"168":{"position":[[85,5],[144,5]]},"174":{"position":[[71,5]]},"180":{"position":[[255,4]]},"182":{"position":[[109,4]]},"184":{"position":[[9,4],[363,4],[825,4]]},"186":{"position":[[9,4],[491,5],[525,4],[566,4]]},"188":{"position":[[302,5]]},"190":{"position":[[152,5],[302,6]]},"211":{"position":[[73,5],[102,6],[243,5],[288,5],[402,6],[438,6],[553,6]]},"213":{"position":[[11,5]]},"215":{"position":[[329,4],[426,5],[667,4],[1281,5]]},"217":{"position":[[178,4],[270,6],[343,5],[384,5]]},"221":{"position":[[553,5],[2252,5],[2342,6]]},"223":{"position":[[1687,5],[1777,6],[3315,5],[3405,6]]},"237":{"position":[[11,4]]},"249":{"position":[[70,5],[818,5]]},"251":{"position":[[69,5],[776,5]]},"255":{"position":[[843,5]]},"257":{"position":[[1171,5],[1351,5],[1623,5],[1729,4],[2798,4]]},"263":{"position":[[251,4]]},"275":{"position":[[182,5]]},"277":{"position":[[202,5]]},"281":{"position":[[70,5],[727,5]]},"283":{"position":[[63,5],[1096,5]]},"285":{"position":[[70,5],[1397,5]]},"287":{"position":[[173,5],[483,5],[538,5],[633,5]]},"297":{"position":[[14,6],[209,5],[219,4]]},"299":{"position":[[162,6],[216,4]]},"323":{"position":[[776,5]]},"325":{"position":[[15234,5],[15736,5],[16008,5],[16114,4],[17159,4]]},"327":{"position":[[2245,5]]},"331":{"position":[[251,4]]},"339":{"position":[[620,6]]},"341":{"position":[[178,5]]},"345":{"position":[[70,5],[723,5]]},"347":{"position":[[63,5],[1092,5]]},"349":{"position":[[123,5],[1091,5]]},"351":{"position":[[70,5],[1125,5]]},"353":{"position":[[42,4]]},"361":{"position":[[62,5],[96,5],[204,5]]},"362":{"position":[[94,4],[309,6]]},"383":{"position":[[89,6]]},"385":{"position":[[47,4],[122,4]]},"387":{"position":[[42,5],[76,5],[262,4],[494,4],[538,5],[652,6]]},"391":{"position":[[46,4],[108,4],[277,4],[471,4],[494,5],[530,4]]},"397":{"position":[[27,4]]},"399":{"position":[[411,5],[568,6]]},"403":{"position":[[456,4],[797,5]]},"409":{"position":[[216,5]]},"413":{"position":[[71,4],[346,4]]},"417":{"position":[[3412,5]]},"425":{"position":[[26,4]]},"434":{"position":[[694,4]]},"443":{"position":[[82,4],[153,5],[185,5],[274,6]]},"447":{"position":[[80,6]]},"449":{"position":[[201,5],[865,5]]},"461":{"position":[[339,5]]},"467":{"position":[[5,4],[106,4]]},"469":{"position":[[247,4],[332,4],[520,4]]},"471":{"position":[[29,4]]},"473":{"position":[[34,5],[84,4],[141,5],[170,4],[518,5],[572,5],[902,4],[930,4],[956,4],[1048,5],[1097,4]]},"475":{"position":[[4,5],[81,4],[159,4],[668,5],[772,4],[1054,4]]},"477":{"position":[[10,4],[55,5]]},"479":{"position":[[14,5],[40,4],[354,4]]},"481":{"position":[[12,5],[78,4],[133,5],[158,5],[187,5],[270,5],[310,4],[343,5],[381,4],[397,4],[416,5],[425,4],[433,4],[452,5],[461,4],[469,4],[516,4],[535,4],[556,4]]},"483":{"position":[[92,4],[345,4],[371,4],[458,5],[1000,4],[1034,4],[1159,5],[1176,4],[1297,5],[1425,4],[1467,4],[1516,4],[1591,4],[1599,4],[1659,4],[1736,4],[1804,4],[1861,5],[1867,4],[1973,4],[1991,4],[2045,5],[2164,4],[2194,4],[2227,4],[2288,4],[2324,4]]},"487":{"position":[[42,4],[350,4]]},"491":{"position":[[48,5],[139,5],[305,5],[344,5],[416,6],[503,6],[588,5],[675,5],[979,5]]},"493":{"position":[[86,4],[368,4],[395,4],[768,5],[778,4],[898,4],[994,4],[1036,5],[1111,4],[1132,5],[1232,4],[1354,5],[1469,4]]},"495":{"position":[[22,5]]},"501":{"position":[[52,5]]},"515":{"position":[[177,4]]},"523":{"position":[[128,5]]},"528":{"position":[[38,4],[129,5]]},"530":{"position":[[60,6],[127,6],[182,5]]},"538":{"position":[[103,5],[283,5]]},"542":{"position":[[286,4]]},"552":{"position":[[97,5]]},"560":{"position":[[385,4],[474,4],[548,4],[772,5]]},"582":{"position":[[819,4],[839,4]]},"589":{"position":[[504,5]]},"597":{"position":[[69,5],[108,5],[257,5],[323,5],[450,5]]},"599":{"position":[[69,5],[124,5],[215,5],[277,4]]},"601":{"position":[[69,5],[124,5],[207,5],[269,4]]},"603":{"position":[[69,5],[121,5],[206,5],[277,4]]},"605":{"position":[[69,5],[124,5],[203,5],[247,4]]},"611":{"position":[[465,4]]},"617":{"position":[[275,5]]},"627":{"position":[[222,4]]},"629":{"position":[[128,5],[148,6]]},"637":{"position":[[344,5]]},"643":{"position":[[315,4]]},"647":{"position":[[362,6]]},"655":{"position":[[715,4]]},"695":{"position":[[5,5],[18,5],[149,4],[471,5]]},"699":{"position":[[6,5],[19,5],[103,5],[116,5]]},"701":{"position":[[25,5]]},"705":{"position":[[8,5],[23,5],[287,5]]},"711":{"position":[[19,6],[183,5]]},"765":{"position":[[5,4],[70,4],[98,4],[189,6],[226,5],[252,4],[274,4],[296,4]]},"767":{"position":[[136,4],[206,4],[237,4],[252,4],[328,4]]},"769":{"position":[[149,4],[206,5],[2015,5],[2053,4]]},"771":{"position":[[6,4],[621,4],[706,4],[773,4]]},"773":{"position":[[38,4],[65,4],[87,4],[125,4],[701,4],[775,4],[851,4],[911,4],[969,4]]},"775":{"position":[[38,4],[65,4],[87,4],[125,4],[701,4],[712,4],[786,4],[797,4],[879,4],[936,4],[965,4]]},"777":{"position":[[95,5],[246,4],[267,5],[279,4]]},"779":{"position":[[38,4],[69,4],[80,4],[135,4],[145,4],[177,4],[187,4],[219,4],[251,4]]},"781":{"position":[[50,5],[173,4]]},"787":{"position":[[1435,4],[4191,4]]},"789":{"position":[[241,4]]},"791":{"position":[[40,4],[567,4],[2819,4],[2827,4],[2923,5]]},"827":{"position":[[5,4],[70,4],[98,4],[189,6],[226,5],[253,4],[275,4],[297,4]]},"829":{"position":[[236,5]]},"831":{"position":[[6,4],[741,4],[911,4],[978,4]]},"833":{"position":[[38,4],[65,4],[87,4],[125,4],[441,4],[512,4],[570,4],[629,4]]},"835":{"position":[[38,4],[65,4],[87,4],[125,4],[441,4],[452,4],[499,4],[571,4]]},"837":{"position":[[95,5],[246,4],[258,4],[307,5],[319,4]]},"839":{"position":[[264,4]]},"841":{"position":[[50,5],[178,4]]},"848":{"position":[[60,4],[98,4]]},"850":{"position":[[46,4],[67,5],[88,4],[393,4],[450,4],[524,4],[600,4],[658,4]]},"852":{"position":[[24,5],[89,5],[161,4]]},"854":{"position":[[471,4],[507,6]]},"866":{"position":[[247,5],[331,5]]},"868":{"position":[[46,5],[100,4]]},"870":{"position":[[65,5],[326,5],[422,5]]},"875":{"position":[[79,5],[130,6],[146,6]]},"877":{"position":[[92,5]]},"879":{"position":[[284,5],[399,5]]},"881":{"position":[[66,6]]},"889":{"position":[[414,5],[619,4],[666,4]]},"891":{"position":[[29,5],[442,4],[730,4]]},"906":{"position":[[701,5],[816,6],[874,4],[1030,5],[1086,5],[1350,4],[1476,4],[1517,5],[1670,5],[4069,4],[4487,4],[4667,4],[4761,4],[4988,4]]},"908":{"position":[[793,5],[908,6],[966,4],[1124,5],[1180,5],[1436,4],[1562,4],[1603,5],[1757,5]]},"920":{"position":[[1341,4],[1429,4]]},"926":{"position":[[81,5],[1740,5],[3230,5]]},"928":{"position":[[209,4],[527,4],[615,4],[1542,6],[2623,6],[2665,4],[2707,4]]},"930":{"position":[[141,4],[442,4],[994,4],[1082,4],[1624,5],[2164,5],[2327,4],[2429,4],[2520,4]]},"932":{"position":[[178,5],[454,4],[1251,5],[1344,4],[1420,4],[1513,4],[1606,4],[1699,4]]},"934":{"position":[[87,4],[107,4],[140,4],[227,4]]},"936":{"position":[[7,4],[24,4],[289,4],[310,4],[340,5],[379,4],[454,4],[599,6],[813,6],[854,5],[896,4]]},"938":{"position":[[58,5],[1111,4],[1191,4],[1612,4]]},"940":{"position":[[743,4],[767,4],[1253,5]]},"942":{"position":[[77,4]]},"964":{"position":[[344,5]]},"971":{"position":[[319,5],[631,5],[788,4],[923,4]]},"973":{"position":[[541,5],[731,5],[814,5],[867,5],[948,5],[1194,4]]},"979":{"position":[[522,4]]},"981":{"position":[[4,5],[43,5],[76,4],[180,5]]},"983":{"position":[[80,4],[306,4],[497,4],[628,5]]},"991":{"position":[[326,6]]},"1000":{"position":[[352,6],[369,4],[405,4],[454,5],[841,4],[1210,4]]},"1004":{"position":[[202,4]]},"1006":{"position":[[46,4],[148,4],[172,4],[225,4],[261,4],[297,4],[333,4]]},"1011":{"position":[[7,4]]},"1013":{"position":[[7,4]]},"1015":{"position":[[7,4]]},"1017":{"position":[[18,5]]},"1019":{"position":[[7,4],[36,4],[765,4],[1086,6]]},"1023":{"position":[[61,4]]},"1028":{"position":[[5,4],[132,6],[169,5],[201,4],[223,4],[245,4],[267,4]]},"1030":{"position":[[75,4],[146,6],[1783,8]]},"1032":{"position":[[52,4],[343,5],[386,4],[407,4],[471,5]]},"1036":{"position":[[9,5],[65,4],[113,4],[163,4],[213,4],[263,4]]},"1038":{"position":[[47,5],[187,4],[200,4],[213,4],[230,4],[391,5],[573,5],[598,6]]},"1040":{"position":[[108,5],[351,5],[566,5],[617,5],[887,4],[962,4],[1033,4]]},"1042":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[761,4],[830,4],[877,4],[894,4]]},"1044":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[709,4],[772,4],[783,4],[852,4],[899,4],[916,4]]},"1046":{"position":[[38,4],[66,4],[155,5],[436,5],[698,4],[706,4],[718,4],[781,4],[789,4],[801,4],[870,4],[917,4],[934,4]]},"1048":{"position":[[91,5],[144,5],[265,5],[271,4],[278,4],[285,4],[292,4],[1046,4]]},"1050":{"position":[[49,4],[70,4],[78,4],[90,4],[162,4],[170,4],[177,4],[184,4],[590,4],[693,4],[701,4],[708,4],[1019,4]]},"1052":{"position":[[89,5],[240,4],[252,4],[303,5],[312,4],[323,4],[1264,4],[1280,5],[1346,4],[1407,4],[1434,4],[1456,4],[2156,4],[2201,4]]},"1054":{"position":[[55,5]]},"1056":{"position":[[85,4],[104,5],[155,4],[177,5],[705,5],[729,5],[759,4],[779,5]]},"1061":{"position":[[12,4],[76,4],[112,4],[148,4],[184,4]]},"1063":{"position":[[192,5]]},"1065":{"position":[[34,5],[244,4],[251,4],[258,4],[265,4],[3344,5]]},"1067":{"position":[[176,4],[211,6],[255,4],[326,6],[338,4],[423,6]]},"1069":{"position":[[7,4],[36,4],[754,4],[845,4],[1271,4],[1338,4]]},"1071":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"1073":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"1075":{"position":[[7,4],[36,4],[58,4],[96,4],[879,4],[919,4],[979,4]]},"1077":{"position":[[119,5],[383,4],[405,4],[424,4],[507,4],[2104,4],[2112,4],[2140,4],[2203,4],[2214,4],[2898,4],[2906,4],[2934,4],[2994,4],[3005,4],[3699,4],[3743,4],[3807,4],[3818,4]]},"1083":{"position":[[105,6],[121,5]]},"1085":{"position":[[5,4],[123,6],[160,5],[184,4],[206,4],[228,4],[250,4]]},"1087":{"position":[[71,4],[142,6],[1766,8]]},"1089":{"position":[[44,4],[335,5],[378,4],[399,4],[463,5]]},"1093":{"position":[[9,5],[65,4],[105,4],[155,4],[205,4],[255,4]]},"1095":{"position":[[7,4],[31,4],[406,4],[691,4],[777,4],[844,4]]},"1097":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[785,4],[861,4],[919,4]]},"1099":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[722,4],[796,4],[807,4],[886,4],[915,4]]},"1101":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[719,4],[731,4],[805,4],[813,4],[825,4],[904,4],[933,4]]},"1103":{"position":[[1756,4],[2578,4]]},"1105":{"position":[[162,5],[195,4],[240,4],[253,4]]},"1107":{"position":[[50,5],[251,5]]},"1113":{"position":[[109,6],[125,5]]},"1115":{"position":[[5,4],[123,6],[160,5],[184,4],[206,4],[228,4],[250,4]]},"1117":{"position":[[75,4],[146,6],[1775,8]]},"1119":{"position":[[44,4],[335,5],[378,4],[399,4],[463,5]]},"1123":{"position":[[9,5],[65,4],[105,4],[155,4],[205,4],[255,4]]},"1125":{"position":[[7,4],[31,4],[406,4],[691,4],[777,4],[844,4]]},"1127":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[785,4],[861,4],[919,4]]},"1129":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[722,4],[796,4],[807,4],[886,4],[915,4]]},"1131":{"position":[[38,4],[65,4],[87,4],[125,4],[654,4],[711,4],[719,4],[731,4],[805,4],[813,4],[825,4],[904,4],[933,4]]},"1133":{"position":[[1823,4],[2645,4]]},"1135":{"position":[[68,5],[101,4],[146,4],[159,4]]},"1137":{"position":[[50,5],[175,4],[280,5]]},"1144":{"position":[[533,5],[605,4],[655,4]]},"1156":{"position":[[5,4],[51,4],[148,4],[186,5]]},"1158":{"position":[[29,4],[135,5],[158,4],[277,4]]},"1160":{"position":[[4,4],[85,4],[98,4],[147,5],[172,4]]},"1162":{"position":[[19,4],[58,4],[121,4],[208,4]]},"1164":{"position":[[10,4],[113,4],[212,4],[312,4],[409,4]]},"1166":{"position":[[27,5],[106,5],[216,4],[748,4],[1248,4],[1618,5],[1690,5],[1726,5]]},"1168":{"position":[[792,5]]},"1172":{"position":[[241,5],[270,4],[302,5],[552,5],[585,4],[719,4]]},"1174":{"position":[[126,6],[154,4],[262,6],[274,6],[312,5]]},"1177":{"position":[[68,5],[181,5]]},"1181":{"position":[[55,4],[183,5],[202,5]]},"1183":{"position":[[171,5]]},"1185":{"position":[[89,5],[172,6],[229,5]]},"1187":{"position":[[55,6],[97,5],[119,5],[355,5],[460,5],[560,5],[578,6]]},"1189":{"position":[[319,4]]},"1191":{"position":[[35,4]]},"1195":{"position":[[47,5],[358,4],[391,4],[575,4],[638,5],[644,4],[939,4]]},"1197":{"position":[[117,4],[185,4],[224,5],[381,4],[1272,4]]},"1205":{"position":[[186,5]]},"1209":{"position":[[496,5]]},"1213":{"position":[[57,4],[296,5],[371,4],[1003,4],[1372,4],[1481,5]]},"1215":{"position":[[649,5]]},"1231":{"position":[[4,5]]},"1246":{"position":[[788,4]]},"1248":{"position":[[18,4],[59,5],[77,6],[91,4],[198,5],[300,5],[510,4],[520,4],[644,5],[673,5],[755,5],[795,6],[871,4]]},"1252":{"position":[[94,5]]},"1254":{"position":[[7,4],[110,4],[243,5]]},"1256":{"position":[[380,4],[388,5],[543,4],[648,5]]},"1260":{"position":[[2096,5],[2154,5],[2183,5],[2258,5],[2363,4],[2470,5],[2510,4],[2568,5]]},"1262":{"position":[[11,4],[82,5],[258,4]]},"1266":{"position":[[58,4]]},"1273":{"position":[[51,4]]},"1275":{"position":[[499,4]]},"1279":{"position":[[51,4],[3093,4]]},"1283":{"position":[[101,5]]},"1287":{"position":[[275,5],[308,5]]},"1289":{"position":[[223,5],[249,4],[1342,4],[1488,4]]},"1291":{"position":[[233,5],[390,6]]},"1293":{"position":[[94,4],[357,6]]},"1301":{"position":[[212,5],[922,5]]},"1303":{"position":[[20,5],[43,4]]},"1305":{"position":[[260,5],[412,4]]},"1307":{"position":[[222,4],[280,4],[1885,4]]},"1323":{"position":[[4,5],[101,5],[141,5],[233,6],[242,4],[419,6],[526,4]]},"1325":{"position":[[9,4],[45,4],[106,4]]},"1327":{"position":[[290,4]]},"1329":{"position":[[25,4],[510,5]]},"1333":{"position":[[47,5],[394,5],[415,4],[511,5],[591,4],[669,5]]},"1341":{"position":[[375,4]]},"1348":{"position":[[51,4]]},"1354":{"position":[[51,4],[3097,4]]},"1371":{"position":[[43,4],[114,4]]},"1375":{"position":[[14,4]]},"1379":{"position":[[197,4],[221,4]]},"1381":{"position":[[9,4]]},"1383":{"position":[[9,4]]},"1385":{"position":[[9,4]]},"1387":{"position":[[18,6],[47,4]]},"1389":{"position":[[0,5],[130,5]]},"1395":{"position":[[307,4]]},"1399":{"position":[[9,4],[363,4],[825,4]]},"1401":{"position":[[9,4]]},"1403":{"position":[[9,4]]},"1405":{"position":[[9,4],[53,4]]},"1407":{"position":[[109,4]]},"1409":{"position":[[245,4]]},"1413":{"position":[[169,4]]},"1417":{"position":[[42,5],[68,7],[86,5]]},"1419":{"position":[[30,5],[97,5]]},"1423":{"position":[[417,5]]},"1425":{"position":[[290,4]]},"1435":{"position":[[160,5]]},"1437":{"position":[[123,5]]},"1447":{"position":[[122,4],[207,4]]},"1451":{"position":[[247,4]]},"1455":{"position":[[40,4]]},"1457":{"position":[[328,4]]},"1459":{"position":[[81,4],[129,5],[180,4]]},"1465":{"position":[[126,4],[197,5],[445,6],[563,4],[582,4],[626,4],[741,4],[749,5]]},"1467":{"position":[[47,4],[163,4]]},"1469":{"position":[[253,5],[612,4],[733,5],[751,4]]},"1471":{"position":[[186,4],[367,5]]},"1473":{"position":[[100,4],[247,5]]},"1479":{"position":[[48,5],[88,5]]},"1481":{"position":[[48,5],[88,5]]},"1483":{"position":[[26,4],[51,5],[98,5]]},"1496":{"position":[[310,6]]},"1500":{"position":[[113,5],[156,5]]},"1502":{"position":[[156,5],[181,6],[1001,4],[1046,4],[1166,4],[1210,4]]},"1531":{"position":[[127,4],[208,5]]},"1533":{"position":[[317,5],[377,5]]},"1541":{"position":[[181,4],[349,4],[1063,5],[1299,4]]},"1545":{"position":[[70,4],[249,5],[315,6]]},"1547":{"position":[[295,5],[412,5],[474,5]]},"1549":{"position":[[430,4],[504,4],[548,4]]},"1551":{"position":[[47,4]]},"1553":{"position":[[134,4],[240,5]]},"1557":{"position":[[7,5],[45,6],[59,5],[191,5],[276,6],[293,5],[339,5],[449,6],[485,6],[522,5],[595,5],[650,6],[695,5],[744,6],[859,6]]},"1559":{"position":[[33,6],[67,5],[193,5],[252,5],[298,5],[528,5],[659,5],[695,5],[747,5],[920,4],[945,4]]},"1561":{"position":[[457,4],[510,4]]},"1563":{"position":[[140,5],[453,4]]},"1567":{"position":[[227,4],[330,4]]},"1575":{"position":[[37,4],[152,4]]},"1582":{"position":[[181,5]]},"1586":{"position":[[13,4]]},"1608":{"position":[[152,5]]},"1624":{"position":[[343,4],[401,4]]},"1628":{"position":[[674,4],[803,4],[1455,4]]},"1636":{"position":[[1069,4],[1184,4]]},"1642":{"position":[[133,5]]},"1652":{"position":[[25,5],[118,5]]},"1654":{"position":[[112,5]]},"1656":{"position":[[0,5],[91,4],[110,4],[171,5],[217,4],[364,4],[406,4],[484,5],[504,4],[598,4]]},"1658":{"position":[[40,4],[228,5],[1788,4]]},"1664":{"position":[[196,4],[220,5]]},"1670":{"position":[[285,4],[394,4]]},"1725":{"position":[[44,4],[123,4]]},"1728":{"position":[[195,4],[405,4],[537,5],[781,4],[904,4],[1074,4],[1107,4]]},"1732":{"position":[[60,5],[122,6]]},"1740":{"position":[[262,4],[412,5]]},"1746":{"position":[[968,4]]},"1752":{"position":[[46,5],[193,4],[243,5],[262,4]]},"1763":{"position":[[67,4]]},"1765":{"position":[[66,4],[190,4]]},"1767":{"position":[[102,4]]},"1779":{"position":[[345,4]]},"1782":{"position":[[10,6],[515,6],[1206,6]]},"1784":{"position":[[162,6],[249,5]]},"1812":{"position":[[92,4]]},"1820":{"position":[[79,5]]},"1822":{"position":[[75,5]]},"1860":{"position":[[284,4]]},"1870":{"position":[[646,4]]},"1876":{"position":[[9,4],[88,5],[130,4],[205,4]]},"1878":{"position":[[80,4],[211,4],[338,4],[469,4],[635,4]]},"1880":{"position":[[88,4],[231,4],[366,4],[492,4],[656,4]]},"1979":{"position":[[421,4]]},"2011":{"position":[[35,4]]},"2013":{"position":[[510,4]]},"2017":{"position":[[24,4],[507,4]]},"2019":{"position":[[24,4]]},"2021":{"position":[[35,4],[3065,4]]},"2025":{"position":[[294,4]]},"2031":{"position":[[35,4]]},"2037":{"position":[[24,4],[789,4]]},"2039":{"position":[[24,4],[841,4]]},"2041":{"position":[[35,4],[3065,4]]},"2045":{"position":[[135,4],[188,4]]},"2050":{"position":[[661,4],[798,6],[842,4],[906,4],[1133,6],[1560,4],[2427,5]]},"2052":{"position":[[269,5],[290,5],[383,4],[511,4],[596,4],[944,4]]},"2066":{"position":[[64,4],[120,4],[223,4],[281,4],[306,4],[330,4],[363,5],[396,4],[462,4],[490,4]]},"2074":{"position":[[387,4]]},"2082":{"position":[[311,5],[348,5],[396,5],[445,5],[587,5],[630,5],[665,5]]},"2090":{"position":[[323,4],[337,4]]},"2104":{"position":[[125,4],[172,4],[215,4]]},"2112":{"position":[[430,4]]},"2124":{"position":[[660,5],[697,5]]},"2126":{"position":[[149,5],[345,4]]},"2158":{"position":[[380,4]]},"2160":{"position":[[342,5],[515,5],[525,4]]},"2162":{"position":[[287,5]]},"2166":{"position":[[196,5]]},"2170":{"position":[[140,4]]},"2176":{"position":[[495,4]]},"2178":{"position":[[381,5]]},"2184":{"position":[[57,4],[88,4],[197,4],[280,5],[469,4]]},"2188":{"position":[[244,4],[418,4]]},"2190":{"position":[[206,4]]},"2200":{"position":[[542,5]]},"2202":{"position":[[286,5]]},"2224":{"position":[[419,4],[672,5],[703,4]]},"2228":{"position":[[366,4],[481,4]]},"2282":{"position":[[365,4]]},"2284":{"position":[[64,5],[91,5],[190,5],[239,5],[277,5],[292,4]]},"2290":{"position":[[636,5],[670,4],[711,4]]},"2302":{"position":[[986,5]]},"2332":{"position":[[74,5]]},"2334":{"position":[[14,5],[70,4],[240,4]]},"2344":{"position":[[41,5],[102,4],[235,4],[307,4],[355,4],[400,4],[569,4]]},"2346":{"position":[[54,6],[155,5],[492,4],[558,4],[612,4],[658,4],[908,4]]},"2348":{"position":[[17,5],[157,4]]},"2408":{"position":[[295,4]]},"2438":{"position":[[999,6],[1238,6]]},"2462":{"position":[[55,4]]},"2482":{"position":[[107,4],[573,4],[766,6],[827,4],[1127,4]]},"2504":{"position":[[236,4]]},"2506":{"position":[[116,4]]},"2510":{"position":[[83,4]]},"2526":{"position":[[81,4],[105,5]]},"2532":{"position":[[209,4],[233,5]]},"2534":{"position":[[49,4],[73,5]]},"2540":{"position":[[87,4],[111,5]]},"2546":{"position":[[27,4],[370,4],[441,5]]},"2548":{"position":[[26,4]]}}}],["node'",{"_index":1200,"t":{"297":{"position":[[341,6]]},"362":{"position":[[137,6]]},"443":{"position":[[44,6]]},"532":{"position":[[178,6]]},"930":{"position":[[1888,6]]},"932":{"position":[[743,6]]},"1323":{"position":[[357,6]]},"1333":{"position":[[12,6]]},"1423":{"position":[[452,6]]},"1539":{"position":[[105,6]]},"1658":{"position":[[75,6]]},"1709":{"position":[[1200,6]]},"1752":{"position":[[140,6]]},"2050":{"position":[[2396,6]]},"2160":{"position":[[647,6]]},"2282":{"position":[[317,6]]},"2486":{"position":[[47,6]]}}}],["node.j",{"_index":1770,"t":{"548":{"position":[[0,7]]},"1285":{"position":[[271,7]]},"1761":{"position":[[58,7]]}}}],["node1address",{"_index":2145,"t":{"767":{"position":[[363,13]]}}}],["node>,127.0.0.1,localhost",{"_index":3385,"t":{"1275":{"position":[[210,25],[274,25]]}}}],["node_endpoint=http://member1besu:8545",{"_index":1410,"t":{"405":{"position":[[422,37]]}}}],["node_endpoint=http://rpcnode:8545",{"_index":1392,"t":{"403":{"position":[[275,33]]}}}],["node_endpoint=member1besu",{"_index":3461,"t":{"1291":{"position":[[569,25]]}}}],["node_label",{"_index":4694,"t":{"2052":{"position":[[1068,11]]}}}],["node_pool",{"_index":4679,"t":{"2052":{"position":[[607,10]]}}}],["node_taint",{"_index":4691,"t":{"2052":{"position":[[998,11]]}}}],["nodej",{"_index":2787,"t":{"993":{"position":[[201,6]]}}}],["nodekey",{"_index":2915,"t":{"1063":{"position":[[224,7]]},"1327":{"position":[[332,8]]}}}],["nodekey.key",{"_index":2857,"t":{"1015":{"position":[[750,14]]},"1063":{"position":[[374,11]]},"1065":{"position":[[931,14],[1664,14],[2397,14],[3130,14]]}}}],["nodekey.pub",{"_index":2859,"t":{"1015":{"position":[[782,13]]},"1063":{"position":[[358,11]]},"1065":{"position":[[963,13],[1696,13],[2429,13],[3162,13]]},"1327":{"position":[[341,12]]},"1333":{"position":[[146,11]]}}}],["nodekey2",{"_index":2836,"t":{"1013":{"position":[[226,8]]}}}],["nodekey2.key",{"_index":2860,"t":{"1015":{"position":[[819,15]]}}}],["nodekey2.pub",{"_index":2861,"t":{"1015":{"position":[[852,14]]}}}],["nodekey3",{"_index":2837,"t":{"1013":{"position":[[239,9]]}}}],["nodekey3.key",{"_index":2862,"t":{"1015":{"position":[[890,15]]}}}],["nodekey3.pub",{"_index":2863,"t":{"1015":{"position":[[923,14]]}}}],["nodenam",{"_index":2315,"t":{"807":{"position":[[1487,8]]}}}],["nodes\",\"throw",{"_index":3399,"t":{"1279":{"position":[[673,22]]},"1354":{"position":[[673,22]]},"2021":{"position":[[657,22]]},"2041":{"position":[[657,22]]}}}],["nodes.json",{"_index":3823,"t":{"1559":{"position":[[87,10],[120,10],[577,10]]},"1561":{"position":[[11,10],[475,10],[550,10]]},"2284":{"position":[[120,10],[172,10],[220,11],[343,11]]}}}],["noexecut",{"_index":4631,"t":{"2050":{"position":[[1476,9]]}}}],["nomemori",{"_index":4518,"t":{"1961":{"position":[[9,9],[38,8]]},"1991":{"position":[[152,9]]}}}],["non",{"_index":1152,"t":{"277":{"position":[[188,3]]},"289":{"position":[[661,3]]},"299":{"position":[[316,3]]},"311":{"position":[[71,3]]},"415":{"position":[[138,3]]},"914":{"position":[[454,3]]},"983":{"position":[[614,3]]},"1150":{"position":[[335,3],[444,3]]},"1197":{"position":[[754,3]]},"1289":{"position":[[235,3]]},"1626":{"position":[[211,3]]},"1782":{"position":[[504,3]]},"1836":{"position":[[770,3]]},"1850":{"position":[[719,3]]},"1852":{"position":[[491,3],[1538,3]]},"1892":{"position":[[593,3]]},"1947":{"position":[[96,3]]},"2104":{"position":[[366,3],[529,3]]},"2106":{"position":[[327,3]]},"2184":{"position":[[584,3]]},"2250":{"position":[[375,3]]},"2326":{"position":[[553,3]]}}}],["nonc",{"_index":539,"t":{"97":{"position":[[2,5],[302,6],[356,5],[376,5]]},"99":{"position":[[87,5],[155,5],[217,5]]},"101":{"position":[[256,7],[284,6],[393,6],[586,6],[649,5],[710,5],[868,5],[998,5],[1317,5],[1338,5],[1385,5]]},"103":{"position":[[51,6],[72,5],[307,5],[343,6],[972,5],[1026,5],[1220,5],[1343,5],[1441,6]]},"227":{"position":[[747,8]]},"235":{"position":[[415,5]]},"257":{"position":[[386,8],[2647,5]]},"265":{"position":[[415,5]]},"325":{"position":[[487,8],[1757,8]]},"333":{"position":[[415,5]]},"453":{"position":[[853,8],[1753,8]]},"455":{"position":[[180,6],[405,7],[580,5],[733,6],[945,6],[1027,6]]},"532":{"position":[[33,6],[138,7],[227,5],[368,6]]},"534":{"position":[[16,5]]},"574":{"position":[[252,5]]},"723":{"position":[[290,5]]},"733":{"position":[[2159,8]]},"735":{"position":[[259,5]]},"769":{"position":[[902,8]]},"787":{"position":[[2685,5],[2790,6],[3586,5]]},"817":{"position":[[1461,6]]},"829":{"position":[[612,8]]},"1030":{"position":[[695,8]]},"1087":{"position":[[678,8]]},"1117":{"position":[[687,8]]},"1144":{"position":[[849,8]]},"1221":{"position":[[189,6]]},"1235":{"position":[[822,5]]},"1240":{"position":[[86,5]]},"1246":{"position":[[319,5]]},"1469":{"position":[[17,5],[83,5],[364,5],[511,6],[586,5]]},"1816":{"position":[[1093,8]]},"1820":{"position":[[1585,8]]},"1830":{"position":[[258,5]]},"1840":{"position":[[874,5]]},"1850":{"position":[[1276,5]]},"1932":{"position":[[531,5]]},"2001":{"position":[[135,6],[685,9],[925,5],[941,6],[959,5],[998,5]]},"2302":{"position":[[780,5]]},"2304":{"position":[[532,5]]},"2352":{"position":[[505,6],[1276,8],[3250,8]]},"2358":{"position":[[684,8],[2785,8],[5248,8],[7349,8]]},"2416":{"position":[[1013,8],[2632,5],[2953,5],[3319,8]]},"2418":{"position":[[1103,8],[2510,5],[2902,5],[3401,8]]},"2438":{"position":[[819,6],[2061,8]]},"2442":{"position":[[1172,8]]},"2444":{"position":[[1368,8]]},"2446":{"position":[[972,8],[1458,5],[1665,5],[1959,8]]},"2448":{"position":[[110,5]]},"2452":{"position":[[1577,8],[2396,5],[2678,5],[3815,8]]},"2454":{"position":[[1665,8],[2420,5],[2640,5]]},"2480":{"position":[[105,6],[138,5]]},"2528":{"position":[[1889,8]]},"2538":{"position":[[2083,9]]},"2544":{"position":[[981,5],[1719,8],[1993,8]]}}}],["nonce\":\"0x1",{"_index":4253,"t":{"1816":{"position":[[3145,14]]}}}],["nonce.from",{"_index":4595,"t":{"2001":{"position":[[948,10]]}}}],["nonce.to",{"_index":4596,"t":{"2001":{"position":[[989,8]]}}}],["none",{"_index":715,"t":{"142":{"position":[[474,4]]},"669":{"position":[[39,4]]},"681":{"position":[[53,4]]},"697":{"position":[[76,4]]},"699":{"position":[[48,4]]},"701":{"position":[[95,4]]},"731":{"position":[[162,4]]},"749":{"position":[[53,4]]},"942":{"position":[[265,4],[350,4],[671,4]]},"954":{"position":[[115,4],[573,4]]},"956":{"position":[[107,4],[415,4],[708,4]]},"958":{"position":[[115,4],[569,4]]},"1379":{"position":[[474,4]]},"1563":{"position":[[104,5]]},"1565":{"position":[[286,5],[708,4],[830,4]]},"1573":{"position":[[8,4],[322,5]]},"2001":{"position":[[903,4],[1055,4]]},"2084":{"position":[[202,5]]},"2114":{"position":[[433,5]]},"2146":{"position":[[250,5]]},"2176":{"position":[[177,5],[204,4]]},"2188":{"position":[[353,5]]},"2224":{"position":[[588,7]]},"2344":{"position":[[204,4]]},"2346":{"position":[[73,4]]},"2358":{"position":[[98,4]]},"2368":{"position":[[238,4]]},"2372":{"position":[[198,4]]},"2394":{"position":[[261,4]]},"2396":{"position":[[180,4]]},"2398":{"position":[[91,4]]},"2402":{"position":[[34,4]]},"2404":{"position":[[416,4]]},"2412":{"position":[[555,4]]},"2460":{"position":[[110,4]]},"2462":{"position":[[204,4]]},"2464":{"position":[[130,4]]},"2466":{"position":[[178,4]]},"2468":{"position":[[109,4]]},"2472":{"position":[[138,4]]},"2474":{"position":[[55,4]]},"2482":{"position":[[233,4]]},"2490":{"position":[[87,4]]},"2492":{"position":[[306,4]]},"2494":{"position":[[314,4]]},"2504":{"position":[[171,4]]},"2506":{"position":[[52,4]]},"2510":{"position":[[35,4]]},"2512":{"position":[[78,4]]},"2514":{"position":[[75,4]]},"2516":{"position":[[223,4]]},"2518":{"position":[[36,4]]},"2528":{"position":[[651,4]]},"2530":{"position":[[400,4]]},"2536":{"position":[[457,4]]},"2538":{"position":[[591,4]]},"2546":{"position":[[62,4]]},"2548":{"position":[[61,4]]},"2552":{"position":[[48,4]]},"2557":{"position":[[56,4]]}}}],["nonheap",{"_index":5253,"t":{"2368":{"position":[[600,10],[687,10]]}}}],["normal",{"_index":1207,"t":{"299":{"position":[[354,8]]},"971":{"position":[[715,9]]},"1067":{"position":[[278,6]]},"1425":{"position":[[2862,6]]},"1728":{"position":[[430,6],[504,6]]},"1888":{"position":[[305,8]]},"2050":{"position":[[3864,7]]}}}],["north",{"_index":1127,"t":{"261":{"position":[[1308,5]]}}}],["noschedul",{"_index":4630,"t":{"2050":{"position":[[1427,10]]}}}],["notabl",{"_index":3208,"t":{"1205":{"position":[[1612,7]]},"1991":{"position":[[119,7]]}}}],["note",{"_index":207,"t":{"25":{"position":[[641,4]]},"43":{"position":[[461,4]]},"45":{"position":[[641,4]]},"77":{"position":[[1203,4],[1577,4]]},"83":{"position":[[346,4]]},"103":{"position":[[1136,4]]},"113":{"position":[[359,4]]},"119":{"position":[[2227,4]]},"129":{"position":[[185,4],[396,4]]},"140":{"position":[[470,4]]},"186":{"position":[[330,4]]},"267":{"position":[[543,4]]},"283":{"position":[[975,4]]},"285":{"position":[[1222,4]]},"289":{"position":[[878,4]]},"313":{"position":[[1083,4]]},"317":{"position":[[532,4]]},"325":{"position":[[159,4]]},"337":{"position":[[434,4]]},"339":{"position":[[693,4]]},"347":{"position":[[971,4]]},"351":{"position":[[950,4]]},"391":{"position":[[342,4]]},"399":{"position":[[367,4]]},"405":{"position":[[71,4]]},"409":{"position":[[532,4]]},"411":{"position":[[337,4]]},"429":{"position":[[249,4]]},"432":{"position":[[215,4]]},"445":{"position":[[558,4]]},"447":{"position":[[166,4]]},"455":{"position":[[496,4]]},"481":{"position":[[68,4]]},"483":{"position":[[1981,4]]},"491":{"position":[[615,4]]},"517":{"position":[[139,4]]},"536":{"position":[[368,4]]},"540":{"position":[[313,4]]},"542":{"position":[[229,4],[1043,4]]},"546":{"position":[[264,4]]},"552":{"position":[[482,4]]},"558":{"position":[[128,4]]},"607":{"position":[[391,4]]},"611":{"position":[[424,4]]},"659":{"position":[[70,4]]},"663":{"position":[[238,4]]},"665":{"position":[[635,4],[988,4]]},"673":{"position":[[87,4]]},"677":{"position":[[70,4]]},"683":{"position":[[648,4],[1001,4]]},"687":{"position":[[252,4]]},"693":{"position":[[130,4]]},"695":{"position":[[285,4]]},"703":{"position":[[136,4]]},"705":{"position":[[98,4]]},"707":{"position":[[88,4]]},"709":{"position":[[456,4]]},"713":{"position":[[327,4]]},"721":{"position":[[428,4]]},"727":{"position":[[239,4]]},"739":{"position":[[390,4]]},"745":{"position":[[66,4]]},"751":{"position":[[648,4],[1001,4]]},"755":{"position":[[848,4]]},"769":{"position":[[1789,4]]},"779":{"position":[[165,4]]},"791":{"position":[[2754,4]]},"829":{"position":[[1245,4]]},"873":{"position":[[261,4]]},"881":{"position":[[292,4]]},"899":{"position":[[153,4]]},"903":{"position":[[308,4],[485,4]]},"906":{"position":[[883,4]]},"908":{"position":[[975,4]]},"920":{"position":[[560,4],[1023,4],[2166,4]]},"924":{"position":[[109,4]]},"926":{"position":[[3038,4]]},"928":{"position":[[2253,4]]},"930":{"position":[[730,4],[2211,4]]},"932":{"position":[[877,4]]},"936":{"position":[[1039,4]]},"969":{"position":[[649,4]]},"1013":{"position":[[85,4]]},"1019":{"position":[[848,4]]},"1021":{"position":[[246,4]]},"1069":{"position":[[1050,4]]},"1071":{"position":[[987,4]]},"1077":{"position":[[85,4],[1691,4],[3654,4]]},"1087":{"position":[[1812,4]]},"1105":{"position":[[140,4]]},"1117":{"position":[[1821,4]]},"1135":{"position":[[46,4]]},"1144":{"position":[[584,4]]},"1166":{"position":[[480,4]]},"1179":{"position":[[614,4]]},"1183":{"position":[[257,4]]},"1197":{"position":[[162,4]]},"1203":{"position":[[1159,4]]},"1231":{"position":[[350,4]]},"1244":{"position":[[2043,4]]},"1250":{"position":[[966,5]]},"1258":{"position":[[764,4]]},"1260":{"position":[[972,4]]},"1287":{"position":[[210,4]]},"1291":{"position":[[189,4]]},"1309":{"position":[[1595,4]]},"1325":{"position":[[155,4]]},"1327":{"position":[[86,4]]},"1333":{"position":[[440,4]]},"1341":{"position":[[190,4]]},"1348":{"position":[[359,4]]},"1362":{"position":[[185,5]]},"1375":{"position":[[104,4]]},"1377":{"position":[[470,4]]},"1421":{"position":[[199,4]]},"1423":{"position":[[168,4]]},"1455":{"position":[[0,4]]},"1463":{"position":[[121,4]]},"1467":{"position":[[62,4]]},"1469":{"position":[[315,4]]},"1479":{"position":[[83,4]]},"1481":{"position":[[83,4]]},"1485":{"position":[[345,4],[400,4]]},"1493":{"position":[[375,4]]},"1517":{"position":[[248,4]]},"1523":{"position":[[385,4]]},"1559":{"position":[[491,4]]},"1561":{"position":[[447,4]]},"1577":{"position":[[331,4]]},"1608":{"position":[[306,4]]},"1648":{"position":[[594,4]]},"1666":{"position":[[112,4]]},"1683":{"position":[[431,4]]},"1703":{"position":[[264,4]]},"1713":{"position":[[324,4]]},"1740":{"position":[[119,4]]},"1744":{"position":[[321,4]]},"1746":{"position":[[925,4]]},"1761":{"position":[[1014,4]]},"1771":{"position":[[605,4]]},"1773":{"position":[[283,4]]},"1777":{"position":[[511,4]]},"1854":{"position":[[1454,4]]},"1860":{"position":[[90,4]]},"1864":{"position":[[1009,4]]},"1870":{"position":[[492,4]]},"1901":{"position":[[109,4]]},"1934":{"position":[[1047,4]]},"1940":{"position":[[67,4]]},"2025":{"position":[[109,4]]},"2031":{"position":[[327,4]]},"2068":{"position":[[376,4]]},"2070":{"position":[[350,4]]},"2092":{"position":[[233,4]]},"2124":{"position":[[612,4]]},"2150":{"position":[[299,4]]},"2158":{"position":[[473,4]]},"2164":{"position":[[447,4]]},"2176":{"position":[[444,4]]},"2214":{"position":[[378,4]]},"2224":{"position":[[678,4]]},"2238":{"position":[[313,4]]},"2240":{"position":[[325,4]]},"2244":{"position":[[255,4]]},"2250":{"position":[[509,4]]},"2262":{"position":[[370,4]]},"2266":{"position":[[285,4]]},"2332":{"position":[[80,4]]},"2338":{"position":[[282,4]]},"2340":{"position":[[435,4]]},"2344":{"position":[[557,4]]},"2350":{"position":[[403,4]]},"2360":{"position":[[248,4]]},"2362":{"position":[[258,4]]},"2364":{"position":[[276,4]]},"2370":{"position":[[384,4]]},"2374":{"position":[[290,4]]},"2388":{"position":[[284,4]]},"2390":{"position":[[420,4]]},"2392":{"position":[[63,4]]},"2394":{"position":[[51,4]]},"2400":{"position":[[278,4],[1046,4]]},"2406":{"position":[[317,4]]},"2410":{"position":[[746,4]]},"2414":{"position":[[355,4]]},"2418":{"position":[[273,4]]},"2420":{"position":[[498,4]]},"2424":{"position":[[283,4]]},"2426":{"position":[[397,4]]},"2430":{"position":[[181,4]]},"2436":{"position":[[244,4]]},"2438":{"position":[[610,4]]},"2440":{"position":[[384,4]]},"2444":{"position":[[294,4]]},"2452":{"position":[[175,4]]},"2454":{"position":[[250,4],[376,4]]},"2458":{"position":[[276,4]]},"2470":{"position":[[226,4]]},"2476":{"position":[[616,4]]},"2482":{"position":[[93,4]]},"2486":{"position":[[122,4]]},"2496":{"position":[[55,4]]},"2516":{"position":[[88,4]]},"2518":{"position":[[343,4]]},"2520":{"position":[[62,4]]},"2524":{"position":[[62,4]]},"2526":{"position":[[71,4],[442,4]]},"2528":{"position":[[72,4],[445,4]]},"2530":{"position":[[94,4],[601,4]]},"2532":{"position":[[199,4]]},"2534":{"position":[[39,4]]},"2536":{"position":[[87,4]]},"2538":{"position":[[51,4],[385,4]]},"2540":{"position":[[77,4]]},"2542":{"position":[[82,4]]},"2544":{"position":[[1125,4]]}}}],["noth",{"_index":2051,"t":{"725":{"position":[[469,7]]},"2428":{"position":[[190,7]]}}}],["notic",{"_index":2782,"t":{"987":{"position":[[713,6]]},"1600":{"position":[[65,6]]},"1658":{"position":[[180,6]]}}}],["notif",{"_index":4214,"t":{"1806":{"position":[[215,13]]},"1808":{"position":[[138,13]]},"1810":{"position":[[89,13],[348,13]]},"1812":{"position":[[68,13]]},"1816":{"position":[[164,13],[247,13],[335,12],[423,13],[487,13],[556,14],[738,12],[2665,12]]},"1818":{"position":[[145,13],[832,14],[908,13],[1047,13],[1184,12],[2196,12]]},"1820":{"position":[[505,13],[604,13],[837,13],[1055,13],[1283,13]]},"1822":{"position":[[468,13],[544,14],[711,13]]},"1824":{"position":[[280,14],[428,12],[650,12]]}}}],["notifi",{"_index":3332,"t":{"1244":{"position":[[456,6],[570,6]]},"1816":{"position":[[3,6]]},"1818":{"position":[[3,6]]},"1820":{"position":[[3,6]]},"1822":{"position":[[3,6]]},"1824":{"position":[[3,6]]}}}],["notim",{"_index":4525,"t":{"1967":{"position":[[9,7],[34,6]]}}}],["now",{"_index":1561,"t":{"434":{"position":[[1398,3]]},"483":{"position":[[1874,3]]},"633":{"position":[[160,3]]},"856":{"position":[[33,3],[542,4]]},"906":{"position":[[5141,3]]},"908":{"position":[[3549,3]]},"1773":{"position":[[380,3]]},"2001":{"position":[[299,3]]},"2050":{"position":[[2292,3]]}}}],["npm",{"_index":1773,"t":{"550":{"position":[[0,3]]},"1000":{"position":[[829,3]]},"1077":{"position":[[292,3]]},"1307":{"position":[[210,3],[1873,3]]},"1313":{"position":[[114,3],[143,3],[159,3],[220,3]]},"1315":{"position":[[284,3],[290,3]]},"1325":{"position":[[94,3]]}}}],["npx",{"_index":2788,"t":{"996":{"position":[[54,3]]},"1287":{"position":[[64,3]]},"1313":{"position":[[327,3],[537,3]]},"1317":{"position":[[1026,3]]},"1327":{"position":[[151,3]]},"1588":{"position":[[44,3]]}}}],["nsg",{"_index":4677,"t":{"2052":{"position":[[119,6],[135,3],[213,3]]}}}],["null",{"_index":1595,"t":{"453":{"position":[[241,5],[1141,5]]},"461":{"position":[[691,5]]},"574":{"position":[[365,4],[454,4]]},"576":{"position":[[298,5],[570,5],[881,5]]},"733":{"position":[[69,5],[219,4],[2181,5]]},"737":{"position":[[262,4]]},"741":{"position":[[2463,5]]},"787":{"position":[[759,5],[2858,5],[3797,5]]},"789":{"position":[[506,5],[1038,5]]},"791":{"position":[[2537,5]]},"950":{"position":[[626,4]]},"1077":{"position":[[842,5]]},"1154":{"position":[[240,8]]},"1307":{"position":[[1548,4]]},"1746":{"position":[[1020,4],[1060,4]]},"1797":{"position":[[838,4]]},"1801":{"position":[[1522,4]]},"1803":{"position":[[672,4],[693,4]]},"1830":{"position":[[111,4],[178,4],[315,4],[467,4]]},"1836":{"position":[[280,4],[397,4],[500,4],[592,4],[678,4]]},"1840":{"position":[[991,4]]},"1842":{"position":[[101,4]]},"1850":{"position":[[379,4],[489,4],[1393,4],[1517,4]]},"1854":{"position":[[296,5],[988,5]]},"1903":{"position":[[175,5],[297,4],[1066,4],[1273,4],[1294,4]]},"1911":{"position":[[2887,4]]},"1999":{"position":[[243,4]]},"2090":{"position":[[376,5]]},"2194":{"position":[[395,5]]},"2290":{"position":[[1208,5]]},"2358":{"position":[[2807,5],[7371,5]]},"2380":{"position":[[1195,5]]},"2382":{"position":[[1219,4]]},"2384":{"position":[[3421,4]]},"2386":{"position":[[1059,4]]},"2388":{"position":[[1182,5],[1198,4]]},"2390":{"position":[[1707,5],[1723,4]]},"2416":{"position":[[272,4]]},"2418":{"position":[[484,4],[4734,5]]},"2420":{"position":[[588,4],[1061,5],[2714,5],[4960,5],[5937,5]]},"2422":{"position":[[230,4],[736,4]]},"2424":{"position":[[431,4]]},"2442":{"position":[[262,4]]},"2444":{"position":[[433,4]]},"2446":{"position":[[176,4]]},"2450":{"position":[[325,4],[929,5],[3108,5]]},"2454":{"position":[[2759,4]]},"2482":{"position":[[940,4],[1152,4]]},"2526":{"position":[[1813,5],[2229,5],[2290,5],[2319,5]]},"2528":{"position":[[2003,5],[2602,4]]},"2530":{"position":[[1628,5],[1974,4],[2015,5],[2361,4]]},"2536":{"position":[[1105,5],[1310,4]]},"2540":{"position":[[2427,5]]}}}],["number",{"_index":166,"t":{"21":{"position":[[360,6]]},"47":{"position":[[98,6]]},"55":{"position":[[122,6],[221,6]]},"97":{"position":[[15,6]]},"132":{"position":[[139,6]]},"148":{"position":[[112,6],[178,6]]},"227":{"position":[[803,9],[1029,6]]},"245":{"position":[[204,6]]},"247":{"position":[[80,6]]},"257":{"position":[[840,6]]},"263":{"position":[[340,6],[401,6]]},"277":{"position":[[7,6]]},"279":{"position":[[80,6]]},"325":{"position":[[1424,9],[14683,9],[14903,6]]},"331":{"position":[[340,6],[401,6]]},"343":{"position":[[80,6]]},"355":{"position":[[130,6],[167,6]]},"387":{"position":[[147,7]]},"405":{"position":[[721,7]]},"429":{"position":[[365,8]]},"441":{"position":[[710,6]]},"469":{"position":[[210,6],[292,6]]},"517":{"position":[[269,6]]},"538":{"position":[[85,6],[265,6]]},"540":{"position":[[105,6]]},"574":{"position":[[267,6]]},"576":{"position":[[150,6]]},"647":{"position":[[531,6]]},"663":{"position":[[125,7]]},"665":{"position":[[66,6],[109,6],[333,7],[522,7]]},"683":{"position":[[66,6],[109,6],[346,7],[535,7]]},"687":{"position":[[139,7]]},"709":{"position":[[343,7],[1238,7],[1448,6],[1633,9]]},"713":{"position":[[214,7]]},"721":{"position":[[315,7]]},"723":{"position":[[596,6]]},"735":{"position":[[460,6]]},"751":{"position":[[66,6],[109,6],[346,7],[535,7]]},"755":{"position":[[1074,7]]},"787":{"position":[[3063,6],[3598,6]]},"817":{"position":[[1708,6]]},"819":{"position":[[1210,6]]},"854":{"position":[[57,6]]},"868":{"position":[[524,6]]},"906":{"position":[[914,6],[1401,6],[1449,6]]},"908":{"position":[[1006,6],[1487,6],[1535,6]]},"928":{"position":[[214,7],[1226,6],[2043,6],[2121,6],[2213,6]]},"985":{"position":[[156,6]]},"1030":{"position":[[65,6],[373,6]]},"1065":{"position":[[3255,7]]},"1087":{"position":[[61,6],[365,6]]},"1117":{"position":[[65,6],[373,6]]},"1197":{"position":[[1890,6]]},"1205":{"position":[[1179,6],[1290,6]]},"1213":{"position":[[1560,6]]},"1233":{"position":[[485,6],[1138,6],[1381,6]]},"1244":{"position":[[1099,6],[1203,6],[1310,6],[1898,6]]},"1258":{"position":[[514,7],[699,9]]},"1260":{"position":[[1002,7],[2173,6],[2319,6]]},"1301":{"position":[[607,7]]},"1305":{"position":[[37,6],[232,6],[379,6]]},"1365":{"position":[[139,6]]},"1455":{"position":[[416,8],[633,8]]},"1467":{"position":[[79,6],[99,6]]},"1477":{"position":[[31,6]]},"1539":{"position":[[68,6]]},"1543":{"position":[[135,6]]},"1547":{"position":[[402,6]]},"1549":{"position":[[536,7]]},"1610":{"position":[[207,6]]},"1618":{"position":[[190,6]]},"1624":{"position":[[316,6]]},"1662":{"position":[[224,6]]},"1664":{"position":[[283,6]]},"1728":{"position":[[217,7]]},"1738":{"position":[[42,6],[193,8],[254,6]]},"1740":{"position":[[15,6]]},"1746":{"position":[[172,7],[340,8]]},"1759":{"position":[[562,6]]},"1765":{"position":[[298,6],[331,6]]},"1771":{"position":[[304,7]]},"1779":{"position":[[302,6]]},"1782":{"position":[[1013,6]]},"1816":{"position":[[910,9]]},"1830":{"position":[[72,6],[103,7]]},"1832":{"position":[[228,6]]},"1834":{"position":[[162,6],[285,6]]},"1836":{"position":[[639,6]]},"1838":{"position":[[533,6]]},"1840":{"position":[[889,6]]},"1848":{"position":[[334,7],[356,6]]},"1850":{"position":[[440,6],[1291,6]]},"1854":{"position":[[149,6]]},"1892":{"position":[[353,6],[402,6]]},"1907":{"position":[[91,8],[139,6],[222,6]]},"1915":{"position":[[505,6]]},"1945":{"position":[[120,6]]},"1973":{"position":[[48,6]]},"1979":{"position":[[391,7]]},"1983":{"position":[[74,6]]},"2058":{"position":[[175,6]]},"2064":{"position":[[662,6]]},"2070":{"position":[[251,6]]},"2072":{"position":[[263,6]]},"2074":{"position":[[300,6]]},"2078":{"position":[[168,6]]},"2136":{"position":[[135,6]]},"2206":{"position":[[445,6]]},"2230":{"position":[[226,6]]},"2234":{"position":[[197,6]]},"2254":{"position":[[198,6]]},"2256":{"position":[[208,6]]},"2276":{"position":[[218,6]]},"2288":{"position":[[160,6]]},"2302":{"position":[[617,6]]},"2304":{"position":[[216,6]]},"2306":{"position":[[199,6],[366,6]]},"2308":{"position":[[242,6],[608,6]]},"2310":{"position":[[171,6],[399,6]]},"2340":{"position":[[139,7],[322,7]]},"2342":{"position":[[77,7]]},"2352":{"position":[[129,6],[186,6],[523,6]]},"2354":{"position":[[156,6],[213,6],[357,6]]},"2358":{"position":[[424,9],[4988,9]]},"2360":{"position":[[135,7]]},"2362":{"position":[[145,7]]},"2364":{"position":[[163,7]]},"2370":{"position":[[50,7],[271,7]]},"2374":{"position":[[83,7],[177,7]]},"2380":{"position":[[242,6],[360,6],[369,6]]},"2388":{"position":[[171,7]]},"2390":{"position":[[307,7]]},"2398":{"position":[[45,6],[192,6],[654,6],[688,9]]},"2400":{"position":[[921,7],[1673,7],[1883,6],[2068,9]]},"2406":{"position":[[203,7]]},"2410":{"position":[[265,6],[603,6]]},"2414":{"position":[[230,7]]},"2416":{"position":[[750,9],[2546,7],[2865,6],[3092,9]]},"2418":{"position":[[65,7],[159,7],[840,9],[2416,7]]},"2420":{"position":[[384,7]]},"2422":{"position":[[12,6],[146,6],[180,6]]},"2424":{"position":[[12,6],[75,7],[169,7],[381,6],[457,6]]},"2426":{"position":[[272,7]]},"2436":{"position":[[130,7]]},"2438":{"position":[[485,7],[835,6]]},"2440":{"position":[[259,7]]},"2444":{"position":[[56,6],[181,7]]},"2448":{"position":[[12,6],[295,7],[471,6]]},"2452":{"position":[[1608,9],[2402,6],[2684,6],[3846,9]]},"2454":{"position":[[33,6],[137,7],[1696,9],[2426,6],[2646,6]]},"2456":{"position":[[12,6],[182,6]]},"2458":{"position":[[12,6],[69,7],[163,7],[374,6]]},"2460":{"position":[[455,6]]},"2462":{"position":[[12,6],[235,6]]},"2482":{"position":[[897,6],[1106,6]]},"2488":{"position":[[105,6]]},"2514":{"position":[[12,6],[106,6]]},"2526":{"position":[[153,6],[329,7]]},"2528":{"position":[[38,6],[135,6],[332,7]]},"2530":{"position":[[157,6],[488,7]]},"2532":{"position":[[58,6],[282,6]]},"2534":{"position":[[148,6]]},"2536":{"position":[[177,6]]},"2538":{"position":[[114,6],[272,7]]},"2540":{"position":[[186,6]]},"2544":{"position":[[94,6],[136,6],[987,6]]},"2546":{"position":[[164,6],[181,6],[311,6],[320,6],[388,6],[397,6]]}}}],["number=10000000",{"_index":4540,"t":{"1983":{"position":[[48,15]]}}}],["number=[,:///login",{"_index":4022,"t":{"1705":{"position":[[445,11],[652,11]]}}}],["port>:/udp",{"_index":700,"t":{"140":{"position":[[636,17]]},"1377":{"position":[[636,17]]}}}],["portal",{"_index":1913,"t":{"633":{"position":[[85,7]]},"908":{"position":[[2855,7]]}}}],["portion",{"_index":3224,"t":{"1211":{"position":[[692,7]]}}}],["posit",{"_index":1804,"t":{"576":{"position":[[617,8]]},"1154":{"position":[[231,8],[281,8],[306,8],[344,8],[369,8],[421,8],[453,9]]},"1203":{"position":[[1916,10]]},"1836":{"position":[[257,8],[347,8]]},"1850":{"position":[[1475,8]]},"1854":{"position":[[1091,8]]},"2440":{"position":[[31,8],[163,8],[489,8],[522,8]]},"2442":{"position":[[83,9],[204,8]]},"2444":{"position":[[85,9],[375,8]]},"2534":{"position":[[29,9],[319,9]]}}}],["possibl",{"_index":954,"t":{"221":{"position":[[475,9]]},"287":{"position":[[207,8]]},"301":{"position":[[236,9]]},"523":{"position":[[167,8]]},"538":{"position":[[289,9]]},"540":{"position":[[150,9],[303,9]]},"906":{"position":[[2332,8]]},"952":{"position":[[191,8]]},"971":{"position":[[570,9],[890,9]]},"1213":{"position":[[1289,8]]},"1256":{"position":[[444,9]]},"1521":{"position":[[302,8]]},"1638":{"position":[[532,8]]},"1822":{"position":[[419,8]]},"1844":{"position":[[556,8]]},"1858":{"position":[[249,9]]},"2180":{"position":[[194,8]]},"2194":{"position":[[218,8]]},"2220":{"position":[[334,8]]},"2268":{"position":[[331,8]]},"2528":{"position":[[48,8]]}}}],["post",{"_index":837,"t":{"182":{"position":[[183,4],[342,4]]},"241":{"position":[[218,4],[769,4],[1066,4]]},"269":{"position":[[252,4],[1027,4],[1367,4]]},"337":{"position":[[818,4],[1593,4],[1933,4]]},"661":{"position":[[260,4]]},"663":{"position":[[412,4]]},"665":{"position":[[1122,4]]},"667":{"position":[[212,4]]},"669":{"position":[[333,4]]},"671":{"position":[[282,4]]},"675":{"position":[[1243,4]]},"679":{"position":[[266,4]]},"681":{"position":[[344,4]]},"683":{"position":[[1135,4]]},"685":{"position":[[219,4]]},"687":{"position":[[418,4]]},"689":{"position":[[291,4]]},"693":{"position":[[454,4]]},"695":{"position":[[590,4]]},"697":{"position":[[230,4]]},"699":{"position":[[187,4]]},"701":{"position":[[250,4]]},"703":{"position":[[459,4]]},"705":{"position":[[404,4]]},"709":{"position":[[640,4],[1170,4]]},"711":{"position":[[424,4]]},"713":{"position":[[458,4]]},"715":{"position":[[197,4]]},"717":{"position":[[440,4]]},"719":{"position":[[536,4]]},"721":{"position":[[575,4]]},"723":{"position":[[752,4]]},"725":{"position":[[564,4]]},"727":{"position":[[604,4]]},"729":{"position":[[418,4]]},"731":{"position":[[282,4]]},"733":{"position":[[327,4]]},"735":{"position":[[599,4]]},"737":{"position":[[342,4]]},"739":{"position":[[556,4]]},"741":{"position":[[522,4]]},"743":{"position":[[546,4]]},"747":{"position":[[266,4]]},"749":{"position":[[344,4]]},"751":{"position":[[1135,4]]},"753":{"position":[[219,4]]},"755":{"position":[[1306,4]]},"757":{"position":[[291,4]]},"777":{"position":[[135,4]]},"789":{"position":[[1917,4]]},"837":{"position":[[135,4]]},"854":{"position":[[217,4]]},"856":{"position":[[140,4]]},"938":{"position":[[1699,4]]},"1048":{"position":[[307,4],[484,4],[661,4],[838,4]]},"1050":{"position":[[199,4],[319,4],[439,4],[723,4],[843,4],[1035,4]]},"1052":{"position":[[129,4],[2045,4]]},"1103":{"position":[[150,4]]},"1133":{"position":[[150,4]]},"1197":{"position":[[1510,4]]},"1301":{"position":[[55,4]]},"1303":{"position":[[129,4]]},"1305":{"position":[[93,4]]},"1407":{"position":[[183,4],[342,4]]},"1705":{"position":[[353,4],[465,4],[564,4],[672,4]]},"1721":{"position":[[121,4],[269,4]]},"1746":{"position":[[205,4],[435,4],[678,4]]},"1750":{"position":[[242,4],[454,4]]},"1759":{"position":[[95,4],[239,4],[742,4]]},"1797":{"position":[[98,4]]},"1799":{"position":[[80,4]]},"1801":{"position":[[84,4]]},"1803":{"position":[[101,4]]},"1854":{"position":[[1599,4]]},"1899":{"position":[[327,4]]},"1901":{"position":[[458,4]]},"1903":{"position":[[341,4]]},"1905":{"position":[[277,4]]},"1907":{"position":[[438,4]]},"1909":{"position":[[224,4]]},"1911":{"position":[[206,4]]},"1959":{"position":[[50,4]]},"2334":{"position":[[300,4]]},"2336":{"position":[[541,4],[1142,4]]},"2338":{"position":[[962,4]]},"2340":{"position":[[885,4]]},"2342":{"position":[[327,4]]},"2344":{"position":[[834,4]]},"2346":{"position":[[968,4]]},"2348":{"position":[[217,4]]},"2352":{"position":[[811,4],[1530,4]]},"2354":{"position":[[704,4]]},"2356":{"position":[[596,4]]},"2358":{"position":[[200,4]]},"2360":{"position":[[401,4]]},"2362":{"position":[[420,4]]},"2364":{"position":[[446,4]]},"2366":{"position":[[226,4]]},"2368":{"position":[[339,4]]},"2370":{"position":[[529,4]]},"2372":{"position":[[301,4]]},"2374":{"position":[[435,4]]},"2376":{"position":[[651,4]]},"2378":{"position":[[360,4]]},"2380":{"position":[[500,4]]},"2382":{"position":[[636,4]]},"2384":{"position":[[494,4]]},"2386":{"position":[[511,4]]},"2388":{"position":[[714,4]]},"2390":{"position":[[850,4]]},"2394":{"position":[[411,4]]},"2396":{"position":[[310,4]]},"2398":{"position":[[300,4],[534,4]]},"2400":{"position":[[1232,4],[1605,4],[2389,4]]},"2402":{"position":[[144,4]]},"2404":{"position":[[519,4]]},"2406":{"position":[[769,4]]},"2408":{"position":[[926,4],[1403,4],[2184,4]]},"2410":{"position":[[1072,4]]},"2412":{"position":[[746,4],[973,4]]},"2414":{"position":[[551,4],[907,4]]},"2416":{"position":[[375,4],[2398,4]]},"2418":{"position":[[588,4],[2348,4]]},"2420":{"position":[[692,4],[3618,4]]},"2422":{"position":[[345,4],[751,4]]},"2424":{"position":[[548,4],[833,4]]},"2426":{"position":[[580,4],[1400,4]]},"2428":{"position":[[522,4]]},"2430":{"position":[[493,4]]},"2432":{"position":[[711,4],[2128,4]]},"2434":{"position":[[173,4]]},"2436":{"position":[[374,4]]},"2438":{"position":[[1314,4]]},"2440":{"position":[[651,4],[1006,4]]},"2442":{"position":[[371,4],[1460,4]]},"2444":{"position":[[687,4],[1656,4]]},"2446":{"position":[[285,4],[1274,4]]},"2448":{"position":[[601,4],[952,4]]},"2450":{"position":[[430,4],[1808,4]]},"2452":{"position":[[301,4],[2170,4]]},"2454":{"position":[[503,4],[2258,4]]},"2456":{"position":[[297,4],[687,4]]},"2458":{"position":[[489,4],[759,4]]},"2460":{"position":[[517,4]]},"2462":{"position":[[318,4]]},"2464":{"position":[[232,4]]},"2466":{"position":[[319,4]]},"2468":{"position":[[205,4]]},"2470":{"position":[[392,4]]},"2472":{"position":[[234,4]]},"2474":{"position":[[187,4],[424,4]]},"2476":{"position":[[858,4],[1600,4]]},"2478":{"position":[[354,4]]},"2480":{"position":[[368,4]]},"2482":{"position":[[1344,4],[1696,4]]},"2484":{"position":[[370,4]]},"2488":{"position":[[236,4]]},"2490":{"position":[[232,4]]},"2492":{"position":[[443,4]]},"2494":{"position":[[462,4]]},"2496":{"position":[[374,4]]},"2498":{"position":[[285,4]]},"2500":{"position":[[471,4]]},"2502":{"position":[[493,4]]},"2504":{"position":[[314,4]]},"2506":{"position":[[190,4]]},"2510":{"position":[[143,4]]},"2512":{"position":[[235,4]]},"2514":{"position":[[202,4]]},"2516":{"position":[[326,4]]},"2518":{"position":[[644,4]]},"2522":{"position":[[165,4]]},"2526":{"position":[[786,4]]},"2528":{"position":[[852,4]]},"2530":{"position":[[835,4]]},"2532":{"position":[[628,4]]},"2534":{"position":[[538,4]]},"2536":{"position":[[666,4]]},"2538":{"position":[[948,4]]},"2540":{"position":[[632,4]]},"2544":{"position":[[1327,4]]},"2546":{"position":[[502,4]]},"2548":{"position":[[178,4]]},"2552":{"position":[[157,4]]},"2554":{"position":[[282,4]]},"2557":{"position":[[193,4]]}}}],["postgresql",{"_index":2762,"t":{"964":{"position":[[291,10]]}}}],["postman",{"_index":60,"t":{"4":{"position":[[36,7],[100,7],[180,8]]},"1299":{"position":[[48,7],[104,7],[168,7],[248,8]]},"1752":{"position":[[553,7],[617,7],[697,8]]},"2330":{"position":[[523,7],[587,7],[667,8]]}}}],["potenti",{"_index":439,"t":{"67":{"position":[[872,9]]},"293":{"position":[[67,11]]},"1541":{"position":[[1257,10]]}}}],["pow",{"_index":442,"t":{"69":{"position":[[105,3]]},"912":{"position":[[239,6]]},"1189":{"position":[[442,5]]},"1779":{"position":[[561,3]]},"1864":{"position":[[42,3],[156,3],[931,3],[1025,3]]},"2180":{"position":[[595,3],[704,3],[773,3]]},"2460":{"position":[[241,4]]},"2480":{"position":[[194,4]]},"2518":{"position":[[245,3],[326,3]]}}}],["pprof",{"_index":1480,"t":{"417":{"position":[[2483,6],[2519,7]]}}}],["practic",{"_index":2506,"t":{"906":{"position":[[339,10]]},"930":{"position":[[120,10]]},"932":{"position":[[264,9]]},"1709":{"position":[[1135,10]]}}}],["pragma",{"_index":1604,"t":{"457":{"position":[[210,6]]},"797":{"position":[[51,6]]},"1150":{"position":[[521,6]]},"1152":{"position":[[387,6]]}}}],["pre",{"_index":1182,"t":{"289":{"position":[[888,3]]},"321":{"position":[[3,3]]},"339":{"position":[[224,3]]},"817":{"position":[[528,3]]},"819":{"position":[[428,3]]},"883":{"position":[[127,3]]},"938":{"position":[[852,3]]},"1197":{"position":[[1462,3]]},"1213":{"position":[[731,3]]},"1451":{"position":[[281,3]]},"1453":{"position":[[161,3]]},"1485":{"position":[[191,3]]},"1842":{"position":[[84,3]]},"1854":{"position":[[1463,3]]},"1999":{"position":[[539,3]]},"2194":{"position":[[137,3]]}}}],["preced",{"_index":3673,"t":{"1453":{"position":[[55,10]]},"1934":{"position":[[1156,9]]},"1938":{"position":[[218,10],[305,11]]}}}],["precompil",{"_index":586,"t":{"111":{"position":[[176,11]]},"113":{"position":[[212,10],[338,10],[430,10],[483,10],[577,10]]},"119":{"position":[[56,11],[422,11],[2080,10],[2206,10],[2287,10],[2335,10],[2460,10]]},"449":{"position":[[660,11],[2319,10]]},"455":{"position":[[1353,10]]},"731":{"position":[[35,11],[216,10]]},"1658":{"position":[[1305,11]]},"1997":{"position":[[55,11]]},"1999":{"position":[[1303,11]]}}}],["preconfigur",{"_index":2565,"t":{"906":{"position":[[5011,13]]}}}],["predefin",{"_index":833,"t":{"180":{"position":[[327,10]]},"566":{"position":[[122,10]]},"1541":{"position":[[1052,10]]},"2076":{"position":[[523,10]]},"2180":{"position":[[136,10]]},"2210":{"position":[[370,10]]}}}],["prefer",{"_index":809,"t":{"164":{"position":[[463,9]]},"257":{"position":[[2487,7]]},"325":{"position":[[16868,7]]},"523":{"position":[[191,6]]},"641":{"position":[[124,9]]},"993":{"position":[[188,12]]},"1197":{"position":[[409,9]]},"1237":{"position":[[80,10]]},"1510":{"position":[[348,9]]},"1512":{"position":[[137,7]]}}}],["prefix",{"_index":1019,"t":{"231":{"position":[[39,7]]},"257":{"position":[[1121,7]]},"325":{"position":[[15184,7]]},"586":{"position":[[214,7]]},"633":{"position":[[360,6]]},"769":{"position":[[2078,7]]},"1634":{"position":[[260,7],[307,7]]},"1846":{"position":[[317,8]]},"2056":{"position":[[214,7]]},"2066":{"position":[[428,7]]},"2346":{"position":[[646,7]]}}}],["premis",{"_index":1364,"t":{"393":{"position":[[286,7]]},"864":{"position":[[40,7]]},"870":{"position":[[507,8]]},"906":{"position":[[1078,7]]},"908":{"position":[[1172,7]]},"910":{"position":[[172,9]]},"914":{"position":[[261,7]]},"971":{"position":[[780,7]]}}}],["prepar",{"_index":2588,"t":{"914":{"position":[[220,11]]},"1797":{"position":[[0,7]]},"1909":{"position":[[0,8]]}}}],["prerequisit",{"_index":873,"t":{"190":{"position":[[0,14]]},"309":{"position":[[106,14]]},"315":{"position":[[69,14]]},"362":{"position":[[0,14]]},"2007":{"position":[[43,13]]},"2027":{"position":[[43,13]]}}}],["presenc",{"_index":3796,"t":{"1541":{"position":[[834,8]]}}}],["present",{"_index":306,"t":{"43":{"position":[[116,8]]},"621":{"position":[[323,9]]},"665":{"position":[[217,7]]},"683":{"position":[[217,7]]},"751":{"position":[[217,7]]},"920":{"position":[[466,8]]},"930":{"position":[[299,7],[2698,7]]},"1447":{"position":[[47,8]]},"1858":{"position":[[133,8]]},"2246":{"position":[[356,9]]}}}],["preset",{"_index":4300,"t":{"1838":{"position":[[287,6]]}}}],["press",{"_index":1851,"t":{"586":{"position":[[540,8]]},"643":{"position":[[458,8]]},"1063":{"position":[[247,5]]},"1860":{"position":[[427,8]]},"2056":{"position":[[540,8]]}}}],["prestat",{"_index":4529,"t":{"1969":{"position":[[206,8]]}}}],["pretti",{"_index":3988,"t":{"1666":{"position":[[194,6],[218,6]]},"2128":{"position":[[62,6],[105,6],[172,6],[222,6]]}}}],["prevent",{"_index":139,"t":{"11":{"position":[[448,7],[506,7]]},"37":{"position":[[128,7]]},"142":{"position":[[151,8],[1033,10]]},"215":{"position":[[411,8]]},"540":{"position":[[18,10]]},"952":{"position":[[49,7]]},"1179":{"position":[[367,7]]},"1379":{"position":[[151,8],[1039,10]]},"1547":{"position":[[0,7],[623,7]]},"1559":{"position":[[709,9],[739,7]]},"1676":{"position":[[3,7]]},"1697":{"position":[[534,7]]},"1792":{"position":[[3,7]]},"2196":{"position":[[313,7]]},"2200":{"position":[[580,7]]},"2210":{"position":[[298,7],[386,10],[518,8]]}}}],["preview",{"_index":2567,"t":{"908":{"position":[[223,7],[2032,7],[2249,8],[2610,7],[2656,7],[2695,7]]}}}],["previou",{"_index":512,"t":{"83":{"position":[[403,8]]},"87":{"position":[[210,8]]},"89":{"position":[[191,8]]},"97":{"position":[[25,8]]},"103":{"position":[[251,8]]},"168":{"position":[[115,8]]},"455":{"position":[[282,8]]},"755":{"position":[[928,8]]},"791":{"position":[[2470,8]]},"932":{"position":[[1162,8]]},"1067":{"position":[[90,8]]},"1150":{"position":[[938,8]]},"1152":{"position":[[1296,8]]},"1187":{"position":[[715,8]]},"1203":{"position":[[915,8]]},"1315":{"position":[[74,8],[817,8]]},"1327":{"position":[[392,8]]},"1610":{"position":[[332,8]]},"1854":{"position":[[437,8]]},"1886":{"position":[[184,8]]},"2050":{"position":[[1320,8],[1748,8]]},"2052":{"position":[[799,8]]},"2070":{"position":[[261,8]]}}}],["previous",{"_index":827,"t":{"178":{"position":[[52,10]]},"327":{"position":[[2251,10]]},"1191":{"position":[[80,11],[145,11]]},"1201":{"position":[[639,10]]},"1233":{"position":[[798,10]]},"1375":{"position":[[203,10]]},"1393":{"position":[[52,10]]},"1553":{"position":[[156,10]]},"1822":{"position":[[357,10]]},"2326":{"position":[[422,10]]}}}],["prevrandao",{"_index":1035,"t":{"235":{"position":[[304,10],[404,10]]},"265":{"position":[[304,10],[404,10]]},"333":{"position":[[304,10],[404,10]]},"1799":{"position":[[1076,13]]},"1801":{"position":[[1004,13]]},"1909":{"position":[[1334,13]]},"1911":{"position":[[1126,13],[2389,13]]},"1915":{"position":[[416,10]]},"1919":{"position":[[135,10],[175,10]]}}}],["price",{"_index":1176,"t":{"289":{"position":[[102,5],[115,5],[178,6],[570,5],[674,5],[773,5],[809,5],[1103,5],[1197,7]]},"297":{"position":[[41,5],[178,5],[243,5],[318,6]]},"299":{"position":[[531,5]]},"303":{"position":[[47,5]]},"469":{"position":[[638,5]]},"574":{"position":[[161,6]]},"787":{"position":[[3878,5]]},"789":{"position":[[680,5]]},"1069":{"position":[[1015,5]]},"1225":{"position":[[237,5],[1062,6],[1192,6]]},"1240":{"position":[[109,6],[214,5],[249,5],[296,5],[444,5],[482,5],[529,5],[666,5],[705,5],[828,5],[872,5]]},"1242":{"position":[[180,5],[244,5],[271,5],[322,5],[358,5],[435,5]]},"1244":{"position":[[1465,5],[1505,5],[1644,5],[1677,5]]},"1309":{"position":[[2258,5]]},"1638":{"position":[[579,5]]},"1746":{"position":[[403,6]]},"1784":{"position":[[139,5],[228,5],[333,5]]},"1840":{"position":[[346,6]]},"1850":{"position":[[667,6]]},"1852":{"position":[[421,6]]},"1947":{"position":[[44,5]]},"2058":{"position":[[73,5],[106,5],[159,5]]},"2060":{"position":[[73,5],[103,5],[156,5],[184,5]]},"2062":{"position":[[73,5],[109,5],[170,5],[302,5],[321,5],[358,5],[377,5]]},"2160":{"position":[[172,5],[256,5],[484,5],[549,5],[624,6]]},"2296":{"position":[[70,5],[106,5],[165,5],[190,5],[268,6]]},"2312":{"position":[[195,6]]},"2316":{"position":[[65,5],[96,5],[145,5],[163,5],[278,6]]},"2412":{"position":[[30,5],[150,5],[245,5],[325,5],[345,5],[409,5],[433,5],[466,5],[606,5]]},"2488":{"position":[[125,5]]},"2492":{"position":[[21,5],[133,5],[287,6],[349,5]]},"2500":{"position":[[21,5],[133,5],[284,6],[337,5],[403,5]]},"2544":{"position":[[471,5],[869,6]]}}}],["price=\"2000",{"_index":5108,"t":{"2312":{"position":[[166,12]]}}}],["price=0",{"_index":1197,"t":{"297":{"position":[[98,7],[114,7]]},"1019":{"position":[[394,7]]},"1069":{"position":[[328,7],[606,7]]},"1071":{"position":[[473,7],[820,7]]},"1073":{"position":[[473,7],[820,7]]},"1075":{"position":[[473,7],[820,7]]}}}],["price=10",{"_index":4505,"t":{"1947":{"position":[[35,8]]}}}],["price=1337",{"_index":4864,"t":{"2160":{"position":[[106,10],[149,10]]}}}],["price=2000",{"_index":5106,"t":{"2312":{"position":[[107,10]]}}}],["price=[,:8545",{"_index":691,"t":{"140":{"position":[[354,9]]},"1377":{"position":[[354,9]]}}}],["rpc_tcp_8545",{"_index":3716,"t":{"1502":{"position":[[416,12]]}}}],["rpcendpointservic",{"_index":1829,"t":{"582":{"position":[[993,18]]}}}],["rpcnode",{"_index":3475,"t":{"1307":{"position":[[71,7]]}}}],["rs256",{"_index":4032,"t":{"1709":{"position":[[162,6],[290,6],[486,5]]},"1711":{"position":[[203,6]]},"2220":{"position":[[354,6],[415,6]]},"2268":{"position":[[351,6],[412,6]]}}}],["rs384",{"_index":4033,"t":{"1709":{"position":[[169,6]]},"1711":{"position":[[210,6]]},"2220":{"position":[[361,6]]},"2268":{"position":[[358,6]]}}}],["rs512",{"_index":4034,"t":{"1709":{"position":[[179,6]]},"1711":{"position":[[217,6]]},"2220":{"position":[[368,6]]},"2268":{"position":[[365,6]]}}}],["rsa",{"_index":4030,"t":{"1709":{"position":[[96,3],[492,3],[630,3]]}}}],["rsync",{"_index":812,"t":{"164":{"position":[[517,6]]}}}],["rule",{"_index":127,"t":{"11":{"position":[[226,5],[366,6],[416,6]]},"19":{"position":[[460,5]]},"21":{"position":[[244,6],[406,7],[527,6],[684,6]]},"25":{"position":[[501,5],[599,5]]},"31":{"position":[[174,5],[189,5],[235,6]]},"483":{"position":[[1378,6]]},"883":{"position":[[112,5]]},"926":{"position":[[2802,5]]},"938":{"position":[[151,6],[864,5],[1007,5],[1269,5],[1323,5]]},"946":{"position":[[146,6],[508,5]]},"1569":{"position":[[436,5]]},"1999":{"position":[[1669,4]]},"2050":{"position":[[201,6],[308,6]]},"2052":{"position":[[367,6]]}}}],["run",{"_index":68,"t":{"4":{"position":[[173,3],[243,3]]},"63":{"position":[[401,3]]},"67":{"position":[[768,3]]},"119":{"position":[[2956,3]]},"129":{"position":[[272,7]]},"136":{"position":[[32,3],[96,3]]},"138":{"position":[[56,3]]},"140":{"position":[[283,3],[332,3],[629,3],[669,3],[784,3]]},"142":{"position":[[191,3],[363,7],[597,3],[749,7]]},"144":{"position":[[3,3],[103,3]]},"146":{"position":[[10,7],[140,3]]},"166":{"position":[[32,8]]},"182":{"position":[[117,8]]},"184":{"position":[[3,3]]},"186":{"position":[[3,3],[515,7]]},"213":{"position":[[590,7]]},"217":{"position":[[262,7]]},"221":{"position":[[771,3]]},"257":{"position":[[1492,7]]},"261":{"position":[[1216,3]]},"287":{"position":[[165,7]]},"289":{"position":[[437,3]]},"325":{"position":[[15877,7]]},"403":{"position":[[248,3],[486,3]]},"407":{"position":[[30,8],[39,3]]},"417":{"position":[[2749,3],[2843,3],[3039,3],[3368,3]]},"421":{"position":[[212,3],[271,7],[325,7],[474,3]]},"425":{"position":[[3,3]]},"429":{"position":[[298,3]]},"432":{"position":[[223,7]]},"434":{"position":[[46,3],[668,3],[699,7],[728,3]]},"439":{"position":[[82,3],[256,3]]},"443":{"position":[[227,8]]},"479":{"position":[[48,8]]},"487":{"position":[[50,8]]},"491":{"position":[[719,7]]},"493":{"position":[[760,7],[1104,3]]},"515":{"position":[[146,4]]},"523":{"position":[[0,7]]},"528":{"position":[[104,7]]},"558":{"position":[[92,3]]},"562":{"position":[[37,7],[88,7]]},"627":{"position":[[230,8]]},"641":{"position":[[195,8],[204,3]]},"643":{"position":[[339,4]]},"759":{"position":[[263,7]]},"787":{"position":[[1379,3],[1451,3],[1769,3],[4145,3]]},"791":{"position":[[454,7],[559,7]]},"821":{"position":[[391,7]]},"837":{"position":[[263,7]]},"887":{"position":[[41,7]]},"899":{"position":[[226,3]]},"901":{"position":[[54,7],[152,3]]},"903":{"position":[[189,4],[224,3],[276,3]]},"906":{"position":[[2037,3]]},"908":{"position":[[2128,3],[2493,8],[3230,3]]},"918":{"position":[[41,7]]},"924":{"position":[[290,3]]},"938":{"position":[[1617,7]]},"948":{"position":[[58,3],[735,3]]},"956":{"position":[[842,7]]},"962":{"position":[[41,7]]},"967":{"position":[[24,8]]},"973":{"position":[[744,8]]},"977":{"position":[[41,7]]},"983":{"position":[[98,4]]},"991":{"position":[[83,4],[417,4],[513,7]]},"993":{"position":[[3,3]]},"996":{"position":[[49,4],[112,3]]},"998":{"position":[[11,7],[38,3]]},"1052":{"position":[[257,7]]},"1071":{"position":[[997,7]]},"1079":{"position":[[510,7]]},"1109":{"position":[[265,7]]},"1139":{"position":[[139,3]]},"1172":{"position":[[579,3],[704,3]]},"1187":{"position":[[238,7]]},"1189":{"position":[[329,4]]},"1193":{"position":[[248,3]]},"1195":{"position":[[487,3],[669,3],[901,3]]},"1197":{"position":[[106,3],[211,3],[316,3]]},"1201":{"position":[[244,4]]},"1205":{"position":[[192,7],[667,7]]},"1250":{"position":[[36,4],[646,7]]},"1252":{"position":[[79,7]]},"1254":{"position":[[99,3]]},"1260":{"position":[[1472,7]]},"1262":{"position":[[67,3],[243,3]]},"1266":{"position":[[34,7],[121,3]]},"1271":{"position":[[0,3]]},"1273":{"position":[[10,7],[100,7]]},"1275":{"position":[[0,3]]},"1277":{"position":[[105,7]]},"1279":{"position":[[3052,7],[3135,7]]},"1283":{"position":[[62,3],[156,4],[252,7]]},"1285":{"position":[[381,7]]},"1287":{"position":[[59,4],[122,3]]},"1289":{"position":[[111,4],[166,4],[1996,4]]},"1291":{"position":[[524,3],[932,8],[941,3]]},"1295":{"position":[[8,3]]},"1299":{"position":[[13,3],[241,3],[311,3]]},"1301":{"position":[[0,3],[204,7],[545,7],[586,7],[646,3],[836,3]]},"1313":{"position":[[27,8],[72,3],[147,3],[163,3],[224,3]]},"1315":{"position":[[9,4],[133,8],[245,3],[294,3]]},"1317":{"position":[[1038,3]]},"1321":{"position":[[83,7]]},"1323":{"position":[[114,7],[290,7]]},"1325":{"position":[[53,7]]},"1327":{"position":[[143,7]]},"1341":{"position":[[0,3],[243,3]]},"1346":{"position":[[0,3]]},"1348":{"position":[[10,7],[100,7]]},"1350":{"position":[[0,3]]},"1352":{"position":[[105,7]]},"1354":{"position":[[3056,7],[3139,7]]},"1362":{"position":[[270,7]]},"1371":{"position":[[32,3],[96,3]]},"1373":{"position":[[52,3]]},"1375":{"position":[[3,3],[76,3],[236,4]]},"1377":{"position":[[283,3],[332,3],[629,3],[669,3],[784,3]]},"1379":{"position":[[191,3],[363,7],[605,3],[755,7]]},"1381":{"position":[[3,3],[103,3]]},"1383":{"position":[[3,3],[33,3]]},"1385":{"position":[[3,3],[81,3]]},"1387":{"position":[[10,7],[140,3]]},"1399":{"position":[[3,3]]},"1401":{"position":[[3,3]]},"1403":{"position":[[3,3]]},"1405":{"position":[[3,3],[47,3]]},"1407":{"position":[[117,8]]},"1411":{"position":[[45,4]]},"1419":{"position":[[7,7]]},"1423":{"position":[[10,7],[496,3]]},"1425":{"position":[[282,7],[410,3],[472,3],[621,3],[667,7],[714,7],[3128,3]]},"1429":{"position":[[213,7]]},"1439":{"position":[[123,7]]},"1443":{"position":[[196,8],[247,7]]},"1447":{"position":[[69,3]]},"1449":{"position":[[145,7],[221,3]]},"1457":{"position":[[342,3]]},"1465":{"position":[[87,3]]},"1485":{"position":[[350,3]]},"1493":{"position":[[185,3],[340,4]]},"1500":{"position":[[105,7]]},"1508":{"position":[[67,7]]},"1512":{"position":[[70,4],[427,3]]},"1517":{"position":[[440,3]]},"1519":{"position":[[124,8]]},"1523":{"position":[[834,7]]},"1527":{"position":[[173,3]]},"1531":{"position":[[145,7],[218,7]]},"1533":{"position":[[640,7]]},"1541":{"position":[[171,7]]},"1557":{"position":[[509,3],[661,3]]},"1559":{"position":[[416,3],[560,5],[928,8]]},"1563":{"position":[[332,8]]},"1565":{"position":[[24,7],[94,7],[163,7],[230,7]]},"1567":{"position":[[235,7]]},"1569":{"position":[[49,7],[121,7]]},"1571":{"position":[[45,7],[234,3],[278,3]]},"1588":{"position":[[64,3]]},"1592":{"position":[[383,8]]},"1600":{"position":[[5,7]]},"1602":{"position":[[196,7]]},"1604":{"position":[[206,3]]},"1628":{"position":[[28,3],[842,3],[1401,7],[1711,3]]},"1630":{"position":[[123,7],[312,3],[725,3],[1302,3]]},"1634":{"position":[[0,3]]},"1646":{"position":[[22,3]]},"1648":{"position":[[3,3],[48,3]]},"1650":{"position":[[31,4]]},"1654":{"position":[[121,7]]},"1658":{"position":[[686,7],[1103,7],[1162,7],[1375,3],[1470,7],[1568,3],[1602,3]]},"1697":{"position":[[664,7]]},"1752":{"position":[[690,3],[760,3]]},"1782":{"position":[[1198,7]]},"1790":{"position":[[194,7]]},"1844":{"position":[[428,7]]},"1860":{"position":[[308,4]]},"1866":{"position":[[470,7]]},"1870":{"position":[[654,8]]},"1882":{"position":[[269,4],[357,3],[405,7]]},"1886":{"position":[[142,3]]},"1888":{"position":[[239,3]]},"1896":{"position":[[87,7]]},"1901":{"position":[[135,4]]},"1979":{"position":[[447,7]]},"1989":{"position":[[505,3]]},"1991":{"position":[[49,3],[498,3],[902,3]]},"1999":{"position":[[308,7]]},"2005":{"position":[[0,3]]},"2009":{"position":[[0,3]]},"2011":{"position":[[10,7],[84,7]]},"2013":{"position":[[0,3]]},"2017":{"position":[[3,3],[62,3]]},"2019":{"position":[[3,3],[64,3]]},"2021":{"position":[[3040,7],[3107,7]]},"2025":{"position":[[0,3],[162,3]]},"2029":{"position":[[0,3]]},"2031":{"position":[[10,7],[84,7]]},"2033":{"position":[[0,3]]},"2037":{"position":[[3,3],[62,3]]},"2039":{"position":[[3,3],[64,3],[626,3]]},"2041":{"position":[[3040,7],[3107,7]]},"2050":{"position":[[933,8],[2688,4]]},"2150":{"position":[[477,8]]},"2160":{"position":[[334,7]]},"2162":{"position":[[279,7]]},"2190":{"position":[[328,7]]},"2224":{"position":[[686,3]]},"2290":{"position":[[528,7],[660,7]]},"2292":{"position":[[884,8]]},"2330":{"position":[[660,3],[730,3]]},"2342":{"position":[[264,7]]},"2344":{"position":[[142,7],[577,7]]},"2438":{"position":[[155,3]]}}}],["run.sh",{"_index":2792,"t":{"998":{"position":[[124,8]]},"1289":{"position":[[116,8]]},"1335":{"position":[[41,9]]}}}],["runasus",{"_index":4654,"t":{"2050":{"position":[[3141,10],[4160,10]]}}}],["runner/docs/config#hd",{"_index":3838,"t":{"1582":{"position":[[425,21]]}}}],["runtim",{"_index":725,"t":{"142":{"position":[[933,8]]},"1379":{"position":[[939,8]]},"1525":{"position":[[279,7]]},"1559":{"position":[[496,7]]},"1584":{"position":[[103,7]]}}}],["s",{"_index":1801,"t":{"574":{"position":[[577,1],[610,2]]},"733":{"position":[[2292,4]]},"1221":{"position":[[243,2]]},"1820":{"position":[[1774,4]]},"1840":{"position":[[1181,1],[1214,2]]},"1850":{"position":[[1700,1],[1733,2]]},"2358":{"position":[[2945,4],[7508,4]]},"2442":{"position":[[1374,4]]},"2444":{"position":[[1570,4]]},"2446":{"position":[[1188,4]]},"2544":{"position":[[2166,4]]}}}],["s\":\"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8",{"_index":4259,"t":{"1816":{"position":[[3355,73]]}}}],["s3",{"_index":815,"t":{"164":{"position":[[554,3]]}}}],["sa",{"_index":2537,"t":{"906":{"position":[[2969,2],[4774,2],[5001,2]]},"920":{"position":[[1354,3],[1442,2]]},"928":{"position":[[540,3],[628,2]]},"930":{"position":[[1007,3],[1095,2]]},"1015":{"position":[[155,5]]},"1065":{"position":[[336,5],[1069,5],[1802,5],[2535,5]]}}}],["safe",{"_index":709,"t":{"142":{"position":[[170,6]]},"663":{"position":[[200,5]]},"665":{"position":[[408,5],[597,5]]},"683":{"position":[[421,5],[610,5]]},"687":{"position":[[214,5]]},"709":{"position":[[418,5]]},"713":{"position":[[289,5]]},"721":{"position":[[390,5]]},"751":{"position":[[421,5],[610,5]]},"755":{"position":[[1149,5]]},"1179":{"position":[[761,5]]},"1379":{"position":[[170,6]]},"1447":{"position":[[62,6]]},"1517":{"position":[[370,6]]},"1709":{"position":[[1047,4]]},"1771":{"position":[[1235,4],[1278,4]]},"1917":{"position":[[162,6]]},"2340":{"position":[[214,5],[397,5]]},"2360":{"position":[[210,5]]},"2362":{"position":[[220,5]]},"2364":{"position":[[238,5]]},"2370":{"position":[[346,5]]},"2374":{"position":[[252,5]]},"2388":{"position":[[246,5]]},"2390":{"position":[[382,5]]},"2400":{"position":[[1008,5]]},"2406":{"position":[[278,5]]},"2410":{"position":[[707,5]]},"2414":{"position":[[317,5]]},"2418":{"position":[[234,5]]},"2420":{"position":[[459,5]]},"2424":{"position":[[244,5]]},"2426":{"position":[[359,5]]},"2436":{"position":[[205,5]]},"2438":{"position":[[572,5]]},"2440":{"position":[[346,5]]},"2444":{"position":[[256,5]]},"2448":{"position":[[382,5]]},"2454":{"position":[[212,5]]},"2458":{"position":[[238,5]]},"2526":{"position":[[404,5]]},"2528":{"position":[[407,5]]},"2530":{"position":[[563,5]]},"2538":{"position":[[347,5]]}}}],["safeblockhash",{"_index":4186,"t":{"1797":{"position":[[264,16]]},"1803":{"position":[[267,16]]},"1903":{"position":[[507,16],[885,16]]},"1917":{"position":[[133,13]]}}}],["same",{"_index":414,"t":{"65":{"position":[[553,4]]},"73":{"position":[[247,4],[763,4]]},"77":{"position":[[1305,4]]},"79":{"position":[[140,4]]},"85":{"position":[[70,4]]},"89":{"position":[[161,4]]},"93":{"position":[[30,4]]},"103":{"position":[[302,4]]},"111":{"position":[[757,4]]},"113":{"position":[[138,4]]},"119":{"position":[[1681,4],[2006,4]]},"166":{"position":[[184,4]]},"172":{"position":[[54,4]]},"184":{"position":[[377,4]]},"229":{"position":[[377,4]]},"243":{"position":[[63,4]]},"257":{"position":[[1385,4]]},"263":{"position":[[246,4]]},"271":{"position":[[69,4]]},"287":{"position":[[517,4]]},"325":{"position":[[15770,4]]},"331":{"position":[[246,4]]},"337":{"position":[[2155,4]]},"403":{"position":[[760,4]]},"455":{"position":[[960,4],[1041,4]]},"475":{"position":[[997,4]]},"481":{"position":[[338,4],[500,4]]},"483":{"position":[[2352,4]]},"491":{"position":[[368,4]]},"493":{"position":[[311,4]]},"521":{"position":[[29,4]]},"528":{"position":[[124,4]]},"532":{"position":[[280,4]]},"542":{"position":[[266,4]]},"562":{"position":[[120,4]]},"589":{"position":[[534,4]]},"597":{"position":[[519,4]]},"611":{"position":[[445,4]]},"663":{"position":[[263,4]]},"665":{"position":[[660,4]]},"683":{"position":[[673,4]]},"687":{"position":[[277,4]]},"709":{"position":[[129,4],[481,4]]},"713":{"position":[[352,4]]},"721":{"position":[[453,4]]},"723":{"position":[[176,4]]},"727":{"position":[[123,4]]},"729":{"position":[[104,4]]},"735":{"position":[[145,4]]},"739":{"position":[[238,4]]},"743":{"position":[[271,4]]},"751":{"position":[[673,4]]},"755":{"position":[[631,5]]},"769":{"position":[[238,4]]},"805":{"position":[[40,4]]},"807":{"position":[[477,4]]},"809":{"position":[[43,4]]},"829":{"position":[[268,4]]},"866":{"position":[[89,4]]},"870":{"position":[[380,4]]},"891":{"position":[[339,4]]},"908":{"position":[[1853,4]]},"932":{"position":[[1824,4]]},"964":{"position":[[46,4]]},"1048":{"position":[[1032,4]]},"1050":{"position":[[576,4]]},"1071":{"position":[[859,4]]},"1073":{"position":[[859,4]]},"1075":{"position":[[859,4]]},"1144":{"position":[[565,4]]},"1183":{"position":[[98,4],[492,5]]},"1185":{"position":[[30,4]]},"1187":{"position":[[475,4]]},"1195":{"position":[[912,4]]},"1197":{"position":[[354,4]]},"1205":{"position":[[1870,4]]},"1240":{"position":[[70,4]]},"1246":{"position":[[228,4]]},"1323":{"position":[[65,4]]},"1399":{"position":[[377,4]]},"1425":{"position":[[355,4]]},"1455":{"position":[[277,4],[867,4]]},"1479":{"position":[[115,4]]},"1481":{"position":[[115,4]]},"1485":{"position":[[501,4]]},"1491":{"position":[[43,4]]},"1500":{"position":[[64,4]]},"1541":{"position":[[1895,4]]},"1549":{"position":[[525,4]]},"1561":{"position":[[538,4]]},"1567":{"position":[[666,4]]},"1573":{"position":[[355,4]]},"1579":{"position":[[41,4]]},"1594":{"position":[[156,4]]},"1658":{"position":[[1137,4],[1485,4],[1635,4]]},"1695":{"position":[[656,4]]},"1744":{"position":[[137,4]]},"1759":{"position":[[473,4]]},"1761":{"position":[[676,4]]},"1816":{"position":[[288,4]]},"1818":{"position":[[1087,4]]},"1820":{"position":[[527,4]]},"1822":{"position":[[490,4]]},"1932":{"position":[[251,4]]},"2052":{"position":[[34,4]]},"2066":{"position":[[539,4]]},"2110":{"position":[[345,4]]},"2180":{"position":[[950,4]]},"2182":{"position":[[249,4]]},"2194":{"position":[[303,4]]},"2212":{"position":[[604,4]]},"2242":{"position":[[696,4]]},"2252":{"position":[[492,4]]},"2260":{"position":[[597,4]]},"2292":{"position":[[541,4]]},"2326":{"position":[[378,4],[450,4]]},"2340":{"position":[[460,4]]},"2356":{"position":[[118,4]]},"2360":{"position":[[273,4]]},"2362":{"position":[[283,4]]},"2364":{"position":[[301,4]]},"2370":{"position":[[409,4]]},"2374":{"position":[[315,4]]},"2382":{"position":[[172,4]]},"2388":{"position":[[309,4]]},"2390":{"position":[[445,4]]},"2400":{"position":[[1071,4]]},"2406":{"position":[[342,4]]},"2410":{"position":[[771,4]]},"2414":{"position":[[380,4]]},"2418":{"position":[[298,4]]},"2420":{"position":[[523,4]]},"2424":{"position":[[308,4]]},"2426":{"position":[[422,4]]},"2436":{"position":[[269,4]]},"2438":{"position":[[635,4]]},"2440":{"position":[[409,4]]},"2444":{"position":[[319,4]]},"2454":{"position":[[275,4]]},"2458":{"position":[[301,4]]},"2482":{"position":[[591,4],[785,4]]},"2496":{"position":[[141,4]]},"2518":{"position":[[405,5]]},"2526":{"position":[[467,4]]},"2528":{"position":[[470,4]]},"2530":{"position":[[44,4],[626,4]]},"2538":{"position":[[410,4]]},"2544":{"position":[[542,4]]}}}],["sampl",{"_index":753,"t":{"150":{"position":[[109,6]]},"409":{"position":[[846,6]]},"411":{"position":[[598,6]]},"491":{"position":[[829,6]]},"1293":{"position":[[4,6]]},"1317":{"position":[[173,6]]},"1321":{"position":[[95,6]]},"1409":{"position":[[126,6]]},"1455":{"position":[[1007,6]]},"1551":{"position":[[401,6]]},"1624":{"position":[[168,6]]},"1683":{"position":[[467,6]]},"1711":{"position":[[99,6]]},"2410":{"position":[[880,6]]}}}],["sapm",{"_index":1471,"t":{"417":{"position":[[2235,5],[2617,5]]}}}],["satisfi",{"_index":1095,"t":{"257":{"position":[[2075,9]]},"325":{"position":[[16456,9]]},"2544":{"position":[[588,9]]}}}],["satur",{"_index":3769,"t":{"1525":{"position":[[351,8]]}}}],["save",{"_index":868,"t":{"186":{"position":[[241,4]]},"434":{"position":[[647,4]]},"765":{"position":[[88,5]]},"769":{"position":[[335,4]]},"827":{"position":[[88,5]]},"829":{"position":[[480,4]]},"908":{"position":[[3138,5]]},"1030":{"position":[[496,4]]},"1038":{"position":[[168,4]]},"1063":{"position":[[336,5]]},"1087":{"position":[[488,4]]},"1117":{"position":[[496,4]]},"1174":{"position":[[174,5],[618,4]]},"1244":{"position":[[724,4],[754,4],[1967,4],[2008,6]]},"1273":{"position":[[316,4]]},"1311":{"position":[[231,4]]},"1313":{"position":[[842,4]]},"1348":{"position":[[595,4]]},"1401":{"position":[[181,4]]},"1403":{"position":[[181,4]]},"1425":{"position":[[1863,6]]},"1510":{"position":[[746,4]]},"1525":{"position":[[261,5],[537,5]]},"1559":{"position":[[104,4]]},"1656":{"position":[[396,5]]},"2011":{"position":[[303,4]]},"2031":{"position":[[555,4]]},"2050":{"position":[[2763,5]]},"2298":{"position":[[72,4],[117,4],[188,4],[226,6],[414,4]]},"2322":{"position":[[65,4],[92,4],[201,4],[318,4],[383,4]]}}}],["sbin/entrypoint.sh",{"_index":1522,"t":{"429":{"position":[[582,22]]}}}],["scale",{"_index":2408,"t":{"868":{"position":[[346,5]]},"1227":{"position":[[54,7]]},"2396":{"position":[[78,7]]}}}],["scenario",{"_index":544,"t":{"101":{"position":[[465,9]]},"821":{"position":[[193,9]]},"1260":{"position":[[2660,8]]},"1656":{"position":[[342,10]]}}}],["schedul",{"_index":2768,"t":{"971":{"position":[[495,9]]},"1658":{"position":[[1722,9]]}}}],["schema",{"_index":1950,"t":{"655":{"position":[[132,6],[182,6],[315,6],[335,10]]},"1744":{"position":[[208,6]]},"1748":{"position":[[165,6]]},"2392":{"position":[[283,7]]}}}],["schema.org/draft",{"_index":1953,"t":{"655":{"position":[[359,16]]}}}],["scheme",{"_index":1109,"t":{"259":{"position":[[653,6]]},"327":{"position":[[1191,6]]},"536":{"position":[[353,7]]},"1331":{"position":[[317,7]]},"1628":{"position":[[325,7],[579,7]]},"1630":{"position":[[552,7]]},"1773":{"position":[[147,8],[330,6],[349,7]]},"1777":{"position":[[69,7],[547,7],[631,6],[663,6]]},"1779":{"position":[[524,7],[608,7]]},"2104":{"position":[[471,7]]}}}],["scope",{"_index":1716,"t":{"521":{"position":[[132,5]]},"873":{"position":[[282,7]]},"906":{"position":[[4614,5]]},"1529":{"position":[[325,5]]},"1594":{"position":[[1008,5]]}}}],["scrape",{"_index":2629,"t":{"926":{"position":[[639,7]]}}}],["scrape_config",{"_index":3548,"t":{"1331":{"position":[[131,14]]},"1628":{"position":[[130,14],[411,15]]},"1630":{"position":[[455,14]]}}}],["scrape_interv",{"_index":3550,"t":{"1331":{"position":[[253,16]]},"1628":{"position":[[261,16],[390,16],[515,16],[708,15]]}}}],["scrape_timeout",{"_index":3551,"t":{"1331":{"position":[[274,15]]},"1628":{"position":[[282,15],[536,15]]}}}],["scraper",{"_index":2436,"t":{"881":{"position":[[203,7]]}}}],["scratch",{"_index":3491,"t":{"1309":{"position":[[1802,7]]}}}],["screenshot",{"_index":1405,"t":{"405":{"position":[[76,11]]},"1602":{"position":[[14,10]]},"1604":{"position":[[261,10]]},"1614":{"position":[[122,10]]}}}],["script",{"_index":1429,"t":{"409":{"position":[[870,7]]},"411":{"position":[[622,7]]},"515":{"position":[[204,6]]},"787":{"position":[[1891,7]]},"791":{"position":[[339,7]]},"908":{"position":[[3248,7]]},"924":{"position":[[270,7]]},"998":{"position":[[137,6]]},"1000":{"position":[[880,6]]},"1289":{"position":[[129,6]]},"1307":{"position":[[406,6],[685,6]]},"1311":{"position":[[519,7],[536,7]]},"1325":{"position":[[75,7]]},"1527":{"position":[[243,7]]},"1588":{"position":[[56,7]]},"1961":{"position":[[187,8]]}}}],["script/bootstrap.sh",{"_index":2603,"t":{"920":{"position":[[1515,19]]},"928":{"position":[[701,19]]},"930":{"position":[[1168,19]]}}}],["scripts/bootstrap.sh",{"_index":2584,"t":{"908":{"position":[[3439,22]]}}}],["scripts/deploy_my_contract.t",{"_index":3847,"t":{"1588":{"position":[[68,31]]}}}],["scripts/deploy_quorumtoken.t",{"_index":3525,"t":{"1317":{"position":[[1042,31]]}}}],["scripts/private/private_tx.j",{"_index":2815,"t":{"1000":{"position":[[846,29],[1215,29]]}}}],["scripts/public/hre_1559_public_tx.j",{"_index":3476,"t":{"1307":{"position":[[227,36]]}}}],["scripts/public/hre_eth_tx.j",{"_index":3487,"t":{"1307":{"position":[[1890,28]]}}}],["scripts/public/hre_public_tx.j",{"_index":3477,"t":{"1307":{"position":[[285,31]]}}}],["scsi",{"_index":786,"t":{"156":{"position":[[158,4]]},"1417":{"position":[[158,4]]}}}],["sdk",{"_index":1493,"t":{"417":{"position":[[3916,3]]},"942":{"position":[[545,4]]},"954":{"position":[[447,4]]},"956":{"position":[[590,4]]},"958":{"position":[[443,4]]},"1565":{"position":[[582,4]]}}}],["seal",{"_index":1103,"t":{"259":{"position":[[248,5],[298,5],[584,8]]},"327":{"position":[[337,5],[387,5],[1013,8],[1122,8]]}}}],["sealer",{"_index":5687,"t":{"2462":{"position":[[158,7]]}}}],["search",{"_index":233,"t":{"29":{"position":[[643,6]]},"399":{"position":[[347,9]]},"421":{"position":[[123,7]]},"434":{"position":[[1282,6],[1320,6],[1416,6]]},"439":{"position":[[415,6]]},"493":{"position":[[1201,6]]},"908":{"position":[[2916,6]]},"985":{"position":[[140,6],[204,6]]},"1150":{"position":[[378,6]]},"1281":{"position":[[110,9]]},"1289":{"position":[[1110,7]]},"1291":{"position":[[103,9]]},"1309":{"position":[[1950,6],[2048,6]]},"1315":{"position":[[1171,6]]},"1356":{"position":[[126,9]]},"1664":{"position":[[35,6]]},"2023":{"position":[[110,9]]},"2043":{"position":[[126,9]]}}}],["searchabl",{"_index":3026,"t":{"1150":{"position":[[131,10]]}}}],["second",{"_index":565,"t":{"103":{"position":[[524,8]]},"227":{"position":[[1002,8]]},"243":{"position":[[120,6]]},"257":{"position":[[813,8],[976,8],[2220,7],[2278,8],[2326,7],[2339,7]]},"261":{"position":[[1129,7],[1442,6]]},"271":{"position":[[128,6]]},"325":{"position":[[14876,8],[15039,8],[16601,7],[16659,8],[16707,7],[16720,7]]},"329":{"position":[[1146,7]]},"337":{"position":[[2214,6]]},"403":{"position":[[640,6]]},"429":{"position":[[374,7],[502,7],[520,7],[608,7],[626,7],[776,7],[794,7]]},"523":{"position":[[325,7]]},"647":{"position":[[484,6]]},"858":{"position":[[124,6]]},"926":{"position":[[3164,6]]},"971":{"position":[[213,6]]},"1030":{"position":[[326,6]]},"1087":{"position":[[318,6]]},"1117":{"position":[[326,6]]},"1154":{"position":[[299,6],[362,6],[446,6]]},"1209":{"position":[[128,8],[533,8]]},"1213":{"position":[[1165,7]]},"1307":{"position":[[1713,6]]},"1618":{"position":[[154,7]]},"1620":{"position":[[158,8]]},"1628":{"position":[[730,8]]},"1779":{"position":[[323,6]]},"1816":{"position":[[375,6]]},"1901":{"position":[[159,7],[257,8]]},"2126":{"position":[[178,6]]},"2152":{"position":[[188,8]]},"2462":{"position":[[33,6],[256,6]]}}}],["seconds_per_slot",{"_index":3218,"t":{"1209":{"position":[[513,16]]}}}],["secp256k1",{"_index":1170,"t":{"287":{"position":[[120,9],[439,12],[719,9]]},"1709":{"position":[[231,11]]},"1878":{"position":[[712,10],[767,9]]},"1880":{"position":[[733,10],[788,9]]},"1930":{"position":[[900,10]]}}}],["secp256r1",{"_index":1173,"t":{"287":{"position":[[748,9]]},"1709":{"position":[[217,10],[507,9],[742,9]]},"1878":{"position":[[780,10]]},"1880":{"position":[[801,10]]}}}],["secret",{"_index":1372,"t":{"395":{"position":[[235,6],[287,7]]},"862":{"position":[[693,7],[750,8]]},"877":{"position":[[174,7]]},"906":{"position":[[381,7],[3415,7],[3608,7],[3759,7],[3773,7],[4074,7],[4672,7],[4766,7],[4993,7]]},"908":{"position":[[468,7]]},"920":{"position":[[1346,7],[1434,7],[2056,7]]},"928":{"position":[[532,7],[620,7],[2720,8]]},"930":{"position":[[999,7],[1087,7]]},"1271":{"position":[[174,6]]},"1275":{"position":[[456,6]]},"1346":{"position":[[174,6]]},"1350":{"position":[[730,6]]},"1521":{"position":[[582,7]]},"1709":{"position":[[927,7]]},"1794":{"position":[[232,6],[265,6]]},"2009":{"position":[[158,6]]},"2013":{"position":[[460,6]]},"2017":{"position":[[197,6],[452,6]]},"2019":{"position":[[199,6],[586,6]]},"2029":{"position":[[158,6]]},"2033":{"position":[[690,6]]},"2037":{"position":[[233,6],[479,6],[734,6]]},"2039":{"position":[[235,6],[786,6]]},"2098":{"position":[[178,6]]}}}],["secret=\"jwt.hex",{"_index":4762,"t":{"2098":{"position":[[154,16]]}}}],["secret=[,,target=/var/lib/besu",{"_index":3569,"t":{"1383":{"position":[[60,62]]}}}],["type=bind,source=/,target=/var/lib/besu",{"_index":3570,"t":{"1385":{"position":[[106,62]]}}}],["type=bind,source=/,target=/var/lib/besu",{"_index":731,"t":{"144":{"position":[[128,63]]},"1381":{"position":[[128,63]]}}}],["type=blob=6",{"_index":5096,"t":{"2308":{"position":[[133,11]]}}}],["type=ibft_extra_data",{"_index":1940,"t":{"651":{"position":[[190,20]]},"653":{"position":[[195,20]]}}}],["type=jk",{"_index":904,"t":{"203":{"position":[[110,8]]},"209":{"position":[[114,8]]},"373":{"position":[[88,8]]},"379":{"position":[[92,8]]}}}],["type=qbft_extra_data",{"_index":1294,"t":{"327":{"position":[[1392,20]]}}}],["typechain",{"_index":3508,"t":{"1313":{"position":[[391,9]]}}}],["typic",{"_index":88,"t":{"6":{"position":[[238,9]]},"148":{"position":[[298,9]]},"633":{"position":[[617,9]]},"1213":{"position":[[1188,10]]},"1409":{"position":[[218,9]]},"1650":{"position":[[295,7]]},"1987":{"position":[[84,7]]}}}],["ubuntu",{"_index":676,"t":{"132":{"position":[[344,7]]},"1365":{"position":[[344,7]]},"1510":{"position":[[27,6],[290,7]]},"1515":{"position":[[18,7],[104,6]]},"1658":{"position":[[1367,7]]}}}],["udp",{"_index":696,"t":{"140":{"position":[[534,3],[553,4]]},"866":{"position":[[70,3]]},"1166":{"position":[[653,3],[685,3],[963,3]]},"1377":{"position":[[534,3],[553,4]]},"1533":{"position":[[34,3]]},"1541":{"position":[[55,3],[282,3],[883,3],[1159,3]]},"1734":{"position":[[194,3]]},"2050":{"position":[[371,3],[375,3],[451,3],[455,3],[585,3],[4993,3]]},"2052":{"position":[[198,4]]},"2192":{"position":[[198,4]]}}}],["ui",{"_index":1505,"t":{"423":{"position":[[134,3]]},"1315":{"position":[[1254,2]]}}}],["uint",{"_index":2279,"t":{"797":{"position":[[100,4],[266,5]]}}}],["uint256",{"_index":3031,"t":{"1150":{"position":[[564,7],[593,7],[668,7],[735,7]]},"1152":{"position":[[430,7],[453,7]]}}}],["uint64(14",{"_index":3232,"t":{"1211":{"position":[[1073,10],[1147,10]]}}}],["uint64(2",{"_index":3239,"t":{"1211":{"position":[[1182,9]]}}}],["uint64(26",{"_index":3235,"t":{"1211":{"position":[[1111,10]]}}}],["uint64(64",{"_index":3244,"t":{"1211":{"position":[[1248,10]]}}}],["uint64(8",{"_index":3242,"t":{"1211":{"position":[[1214,9]]}}}],["ulimit",{"_index":669,"t":{"132":{"position":[[174,7]]},"1365":{"position":[[174,7]]}}}],["unabl",{"_index":2783,"t":{"987":{"position":[[733,6]]},"1445":{"position":[[33,6]]},"2438":{"position":[[145,6]]}}}],["unauthor",{"_index":1609,"t":{"457":{"position":[[319,15],[639,15]]}}}],["unavail",{"_index":1792,"t":{"560":{"position":[[393,11]]},"1443":{"position":[[159,11]]},"1469":{"position":[[759,12]]},"1763":{"position":[[145,11]]},"2290":{"position":[[1126,12],[1172,11]]}}}],["unawar",{"_index":2820,"t":{"1000":{"position":[[1182,7]]}}}],["unbound",{"_index":1746,"t":{"536":{"position":[[98,9]]}}}],["uncach",{"_index":4710,"t":{"2064":{"position":[[497,8]]}}}],["unchang",{"_index":3172,"t":{"1203":{"position":[[1216,9]]}}}],["uncl",{"_index":1341,"t":{"387":{"position":[[186,5],[374,7]]},"1773":{"position":[[240,6]]},"1816":{"position":[[2408,9]]},"1830":{"position":[[937,5],[1505,6],[1527,5]]},"1838":{"position":[[476,5],[578,5],[601,5]]},"2358":{"position":[[2000,9],[6564,9]]},"2416":{"position":[[2189,9]]},"2418":{"position":[[2279,9]]},"2452":{"position":[[8,5],[130,5],[180,6],[2145,9]]},"2454":{"position":[[8,5],[331,5],[381,6],[2233,9]]},"2456":{"position":[[22,6],[192,6]]},"2458":{"position":[[22,6],[384,6]]}}}],["uncle'",{"_index":4287,"t":{"1830":{"position":[[381,7]]}}}],["uncleinclusionreward",{"_index":4299,"t":{"1838":{"position":[[193,21],[433,20]]},"2434":{"position":[[673,23]]},"2436":{"position":[[760,23]]}}}],["uncleindex",{"_index":5629,"t":{"2452":{"position":[[96,11]]},"2454":{"position":[[297,11]]}}}],["unclereward",{"_index":4304,"t":{"1838":{"position":[[554,12]]},"2434":{"position":[[718,15]]},"2436":{"position":[[805,15]]}}}],["uncompress",{"_index":3597,"t":{"1411":{"position":[[1042,10]]}}}],["unconnect",{"_index":3822,"t":{"1557":{"position":[[172,11]]}}}],["under",{"_index":152,"t":{"19":{"position":[[256,5]]},"162":{"position":[[103,5]]},"215":{"position":[[1075,5]]},"353":{"position":[[456,5]]},"391":{"position":[[476,5]]},"523":{"position":[[359,5]]},"926":{"position":[[2865,5]]},"938":{"position":[[1380,5]]},"1191":{"position":[[0,5]]},"1197":{"position":[[75,5]]},"1201":{"position":[[127,5]]},"1331":{"position":[[125,5]]},"1455":{"position":[[759,5],[900,5]]},"1493":{"position":[[154,5]]},"1652":{"position":[[192,5]]},"1771":{"position":[[1303,5]]},"1917":{"position":[[203,5]]}}}],["underli",{"_index":2510,"t":{"906":{"position":[[569,10]]},"908":{"position":[[660,10]]},"1172":{"position":[[344,10]]},"1174":{"position":[[332,10]]},"1179":{"position":[[111,10]]}}}],["underscor",{"_index":2305,"t":{"807":{"position":[[975,10]]},"809":{"position":[[526,10]]}}}],["understand",{"_index":3274,"t":{"1217":{"position":[[19,13]]},"2112":{"position":[[566,10]]}}}],["unencod",{"_index":1594,"t":{"453":{"position":[[123,9],[176,9],[1076,9]]}}}],["unexpect",{"_index":978,"t":{"221":{"position":[[2669,10]]},"247":{"position":[[353,10]]},"279":{"position":[[357,10]]},"343":{"position":[[375,10]]},"1934":{"position":[[821,10]]}}}],["uninstal",{"_index":2131,"t":{"743":{"position":[[0,10],[479,11]]},"1515":{"position":[[26,9],[177,9]]},"1517":{"position":[[138,9],[203,9]]},"1693":{"position":[[57,11]]},"2484":{"position":[[0,10],[303,11]]}}}],["uniqu",{"_index":466,"t":{"75":{"position":[[170,6],[321,6],[479,6]]},"81":{"position":[[52,6]]},"87":{"position":[[161,6]]},"501":{"position":[[147,6]]},"868":{"position":[[408,6]]},"873":{"position":[[203,7]]},"906":{"position":[[1279,6]]},"908":{"position":[[1365,6]]},"1219":{"position":[[156,6]]}}}],["unit",{"_index":1175,"t":{"289":{"position":[[85,4],[129,5]]},"787":{"position":[[3024,4],[3077,5],[3893,4]]},"789":{"position":[[695,4]]},"817":{"position":[[1668,4],[1722,5]]},"819":{"position":[[1171,4],[1224,5]]},"1844":{"position":[[198,5]]},"2412":{"position":[[25,4],[145,4],[601,4]]}}}],["unix",{"_index":3581,"t":{"1411":{"position":[[489,4]]},"1830":{"position":[[1330,4]]},"1915":{"position":[[716,4]]}}}],["unknown",{"_index":4312,"t":{"1844":{"position":[[475,7]]},"1894":{"position":[[267,7]]}}}],["unless",{"_index":3327,"t":{"1242":{"position":[[382,6]]},"1469":{"position":[[739,6]]},"1553":{"position":[[139,6]]},"1870":{"position":[[299,6]]},"1949":{"position":[[187,6]]},"2072":{"position":[[411,6]]},"2082":{"position":[[712,6]]},"2318":{"position":[[588,7]]},"2338":{"position":[[201,6]]}}}],["unlik",{"_index":542,"t":{"101":{"position":[[0,6],[230,6]]},"725":{"position":[[193,6]]},"1806":{"position":[[478,6]]},"1945":{"position":[[127,8]]},"2408":{"position":[[632,7]]}}}],["unlock",{"_index":887,"t":{"190":{"position":[[1065,6],[1559,6]]},"201":{"position":[[266,6]]},"207":{"position":[[272,6]]},"362":{"position":[[892,6],[1207,6]]},"371":{"position":[[233,6]]},"377":{"position":[[239,6]]},"1013":{"position":[[118,8]]},"1063":{"position":[[24,8],[272,8]]}}}],["unmatch",{"_index":4402,"t":{"1894":{"position":[[239,9]]}}}],["unnecessari",{"_index":3618,"t":{"1425":{"position":[[86,11]]},"1547":{"position":[[237,11]]},"2198":{"position":[[288,11]]}}}],["unpack",{"_index":681,"t":{"134":{"position":[[37,6]]},"1367":{"position":[[37,6]]}}}],["unreli",{"_index":4753,"t":{"2092":{"position":[[286,10]]}}}],["unrespons",{"_index":359,"t":{"53":{"position":[[312,12],[374,12]]}}}],["unrestrict",{"_index":529,"t":{"93":{"position":[[389,13],[522,12]]}}}],["unsign",{"_index":1593,"t":{"453":{"position":[[110,8],[190,8],[1090,8]]}}}],["unstabl",{"_index":5128,"t":{"2328":{"position":[[122,8]]}}}],["unsubscrib",{"_index":4285,"t":{"1826":{"position":[[144,11],[332,13],[378,11],[502,11]]}}}],["unsuit",{"_index":5082,"t":{"2302":{"position":[[717,10]]}}}],["unsupport",{"_index":722,"t":{"142":{"position":[[707,12],[822,11]]},"1379":{"position":[[715,11],[828,11]]}}}],["unsur",{"_index":1256,"t":{"317":{"position":[[548,6]]}}}],["until",{"_index":244,"t":{"31":{"position":[[66,5]]},"103":{"position":[[887,5]]},"261":{"position":[[1674,5]]},"329":{"position":[[1426,5]]},"493":{"position":[[845,5]]},"560":{"position":[[511,5],[616,5]]},"948":{"position":[[788,5]]},"1067":{"position":[[295,5]]},"1260":{"position":[[1019,5]]},"1830":{"position":[[884,5]]},"1838":{"position":[[938,5]]}}}],["untrust",{"_index":5569,"t":{"2438":{"position":[[198,9]]}}}],["untun",{"_index":3778,"t":{"1527":{"position":[[229,7]]}}}],["unus",{"_index":4570,"t":{"1997":{"position":[[730,6]]}}}],["up",{"_index":354,"t":{"53":{"position":[[71,2]]},"77":{"position":[[587,2],[1162,2],[1343,2],[1427,2],[1552,2]]},"154":{"position":[[11,2]]},"160":{"position":[[92,2]]},"221":{"position":[[576,2],[2372,2]]},"223":{"position":[[1807,2],[3435,2]]},"277":{"position":[[139,2]]},"403":{"position":[[411,2],[449,2],[903,3]]},"405":{"position":[[590,2]]},"409":{"position":[[509,2]]},"429":{"position":[[362,2],[514,2],[620,2],[788,2]]},"443":{"position":[[259,2]]},"641":{"position":[[53,2]]},"755":{"position":[[61,2]]},"769":{"position":[[1929,2]]},"829":{"position":[[1385,2]]},"868":{"position":[[556,3]]},"899":{"position":[[52,2]]},"906":{"position":[[1499,2]]},"908":{"position":[[1585,2]]},"930":{"position":[[215,3]]},"932":{"position":[[1074,2],[2098,3]]},"971":{"position":[[646,2],[1053,2]]},"973":{"position":[[378,2],[737,2],[1019,2],[1213,3]]},"993":{"position":[[145,2]]},"998":{"position":[[378,2]]},"1023":{"position":[[24,2]]},"1056":{"position":[[232,2]]},"1087":{"position":[[1952,2]]},"1103":{"position":[[2180,3]]},"1117":{"position":[[1967,2]]},"1133":{"position":[[2247,3]]},"1148":{"position":[[20,2],[87,2]]},"1150":{"position":[[0,2]]},"1195":{"position":[[531,2]]},"1197":{"position":[[1011,2]]},"1205":{"position":[[919,2]]},"1250":{"position":[[386,2]]},"1281":{"position":[[184,2]]},"1285":{"position":[[353,2]]},"1291":{"position":[[708,2],[805,3]]},"1313":{"position":[[20,2]]},"1335":{"position":[[33,2]]},"1356":{"position":[[208,2]]},"1375":{"position":[[285,2]]},"1411":{"position":[[730,2]]},"1419":{"position":[[175,2]]},"1425":{"position":[[3010,2],[3066,2]]},"1510":{"position":[[100,2]]},"1523":{"position":[[432,2]]},"1525":{"position":[[382,2],[473,2]]},"1541":{"position":[[813,2]]},"1582":{"position":[[242,2]]},"1624":{"position":[[421,2]]},"1728":{"position":[[705,2]]},"1734":{"position":[[47,2]]},"1740":{"position":[[47,2]]},"1767":{"position":[[54,3],[175,3]]},"1934":{"position":[[1208,2]]},"1969":{"position":[[160,2]]},"2023":{"position":[[184,2]]},"2043":{"position":[[208,2]]},"2048":{"position":[[4,2]]},"2050":{"position":[[790,2],[2280,2],[2327,3],[3771,2]]},"2408":{"position":[[245,2]]}}}],["up.\",\"throw",{"_index":3395,"t":{"1279":{"position":[[531,20]]},"1354":{"position":[[531,20]]},"2021":{"position":[[515,20]]},"2041":{"position":[[515,20]]}}}],["upcom",{"_index":963,"t":{"221":{"position":[[988,8]]},"223":{"position":[[511,8],[2027,8]]},"249":{"position":[[186,8]]},"251":{"position":[[185,8]]},"281":{"position":[[186,8]]},"283":{"position":[[179,8]]},"285":{"position":[[186,8]]},"345":{"position":[[186,8]]},"347":{"position":[[179,8]]},"349":{"position":[[239,8]]},"351":{"position":[[186,8]]}}}],["updat",{"_index":163,"t":{"21":{"position":[[132,6],[233,6],[423,6],[457,6],[519,7]]},"29":{"position":[[169,6],[900,6]]},"57":{"position":[[113,7]]},"81":{"position":[[481,8]]},"158":{"position":[[570,6]]},"188":{"position":[[193,7]]},"217":{"position":[[126,6],[280,8]]},"221":{"position":[[535,6],[2283,7],[2328,6]]},"223":{"position":[[1718,7],[1763,6],[3346,7],[3391,6]]},"247":{"position":[[184,6]]},"249":{"position":[[3,6],[258,7],[849,7],[1006,7]]},"251":{"position":[[3,6],[256,7],[807,7]]},"253":{"position":[[517,7]]},"257":{"position":[[2386,6]]},"261":{"position":[[1885,6]]},"279":{"position":[[186,6]]},"281":{"position":[[3,6],[258,7],[758,7],[915,7]]},"283":{"position":[[3,6],[244,7],[1013,7],[1127,7]]},"285":{"position":[[3,6],[259,7],[1428,7]]},"303":{"position":[[0,6]]},"325":{"position":[[16767,6]]},"329":{"position":[[1637,6]]},"343":{"position":[[175,6]]},"345":{"position":[[3,6],[258,7],[754,7],[911,7]]},"347":{"position":[[3,6],[244,7],[1009,7],[1123,7]]},"349":{"position":[[1122,7]]},"351":{"position":[[3,6],[259,7],[1156,7]]},"361":{"position":[[307,7]]},"381":{"position":[[221,7]]},"449":{"position":[[1070,8]]},"469":{"position":[[435,6]]},"473":{"position":[[377,6]]},"479":{"position":[[3,6],[165,6],[223,6],[293,7]]},"487":{"position":[[3,6],[164,6],[266,6],[289,7]]},"493":{"position":[[602,6],[1458,6]]},"511":{"position":[[44,6]]},"515":{"position":[[77,6]]},"546":{"position":[[362,6],[482,8]]},"578":{"position":[[229,8]]},"657":{"position":[[331,6]]},"801":{"position":[[52,6],[483,7]]},"803":{"position":[[32,8],[72,6]]},"811":{"position":[[32,8],[72,6]]},"817":{"position":[[2205,7],[2379,7]]},"819":{"position":[[1568,7]]},"870":{"position":[[263,6]]},"881":{"position":[[508,6],[952,6]]},"889":{"position":[[295,6],[328,6],[608,6]]},"891":{"position":[[15,8],[65,7],[86,6],[286,7],[432,7],[480,6],[509,7],[658,6]]},"906":{"position":[[496,7],[525,8],[1868,6],[2207,6],[2438,7]]},"908":{"position":[[587,7],[616,8],[2577,6],[2677,6],[3288,6]]},"920":{"position":[[680,6]]},"926":{"position":[[113,6],[387,6],[1092,6],[2226,6]]},"938":{"position":[[317,6]]},"940":{"position":[[77,6],[321,6],[1200,6]]},"942":{"position":[[502,6]]},"954":{"position":[[404,6]]},"956":{"position":[[547,6]]},"958":{"position":[[400,6]]},"971":{"position":[[310,8]]},"973":{"position":[[285,6]]},"979":{"position":[[473,6]]},"1000":{"position":[[1762,6]]},"1015":{"position":[[33,6]]},"1040":{"position":[[1054,6]]},"1042":{"position":[[957,6]]},"1044":{"position":[[979,6]]},"1046":{"position":[[997,6]]},"1077":{"position":[[330,6]]},"1105":{"position":[[451,8]]},"1168":{"position":[[564,6]]},"1174":{"position":[[245,7]]},"1187":{"position":[[7,6],[399,6]]},"1193":{"position":[[98,8]]},"1260":{"position":[[147,6]]},"1307":{"position":[[1397,6],[1564,7],[2149,7],[2211,7]]},"1309":{"position":[[2520,7]]},"1323":{"position":[[429,6]]},"1331":{"position":[[0,6],[219,7]]},"1411":{"position":[[1355,6],[1437,6],[1496,6]]},"1504":{"position":[[25,6]]},"1510":{"position":[[121,6],[256,7],[275,6],[461,6],[818,7]]},"1512":{"position":[[353,6]]},"1515":{"position":[[3,6]]},"1517":{"position":[[8,6],[85,6],[409,6]]},"1559":{"position":[[381,6],[600,7]]},"1565":{"position":[[539,6]]},"1582":{"position":[[28,6]]},"1610":{"position":[[75,7]]},"1634":{"position":[[105,6]]},"1638":{"position":[[278,7]]},"1654":{"position":[[292,7]]},"1759":{"position":[[678,6]]},"1803":{"position":[[0,6]]},"1903":{"position":[[0,7]]},"2050":{"position":[[3478,6],[4497,6]]},"2290":{"position":[[985,6]]},"2292":{"position":[[842,6],[928,7]]},"2302":{"position":[[940,6]]},"2330":{"position":[[319,6]]},"2488":{"position":[[0,7]]}}}],["updatedbal",{"_index":2344,"t":{"817":{"position":[[2514,14]]},"819":{"position":[[1703,14]]}}}],["upfront",{"_index":4301,"t":{"1838":{"position":[[382,7]]}}}],["upgrad",{"_index":448,"t":{"71":{"position":[[495,7]]},"73":{"position":[[583,7],[708,7]]},"129":{"position":[[96,7],[155,7],[200,8],[251,9],[285,7],[406,9]]},"156":{"position":[[235,9]]},"172":{"position":[[86,9]]},"217":{"position":[[368,11]]},"467":{"position":[[10,8],[19,7],[93,7],[142,8],[173,9],[215,8],[249,9],[355,9],[402,8],[485,8],[521,9],[609,8]]},"469":{"position":[[3,7],[118,7],[229,8],[605,9],[670,11],[716,8],[739,7]]},"511":{"position":[[425,7]]},"889":{"position":[[639,7]]},"891":{"position":[[697,7]]},"1211":{"position":[[954,9]]},"1217":{"position":[[0,9]]},"1233":{"position":[[847,7]]},"1362":{"position":[[96,7],[155,7],[198,8],[249,9],[283,7],[401,9]]},"1417":{"position":[[235,9]]},"1423":{"position":[[259,7]]},"1510":{"position":[[140,7]]},"1517":{"position":[[448,7],[470,7]]},"1652":{"position":[[5,9]]},"1654":{"position":[[84,7]]},"2082":{"position":[[410,8]]}}}],["upnp",{"_index":716,"t":{"142":{"position":[[482,5]]},"1379":{"position":[[482,5]]},"1531":{"position":[[334,4]]},"1563":{"position":[[68,5]]},"1567":{"position":[[8,4],[96,4],[195,4],[248,4],[295,4],[377,4],[436,4],[467,4],[584,4],[633,5]]},"1730":{"position":[[313,4]]},"1734":{"position":[[231,5]]},"2176":{"position":[[137,4],[241,4],[349,4],[405,4],[460,4],[542,4]]}}}],["upnpp2ponli",{"_index":3828,"t":{"1567":{"position":[[402,11]]},"1734":{"position":[[265,12]]},"2176":{"position":[[142,11],[371,11]]}}}],["upper",{"_index":2575,"t":{"908":{"position":[[2897,5]]}}}],["uppercas",{"_index":1841,"t":{"586":{"position":[[177,10]]},"2056":{"position":[[177,10]]}}}],["upstream",{"_index":3712,"t":{"1502":{"position":[[212,9],[253,8],[292,9],[328,8],[407,8]]}}}],["uptim",{"_index":1343,"t":{"387":{"position":[[302,7]]},"1215":{"position":[[530,7]]}}}],["upykixtu7hgdcdl5tfx3dkoksbqkbl3u3vfwxzmfnuu3daisfvjyuna",{"_index":4029,"t":{"1705":{"position":[[1031,56]]}}}],["uri",{"_index":3733,"t":{"1504":{"position":[[205,4]]}}}],["url",{"_index":917,"t":{"211":{"position":[[673,4]]},"391":{"position":[[172,4]]},"417":{"position":[[358,3],[1341,3]]},"441":{"position":[[237,3]]},"473":{"position":[[216,4]]},"493":{"position":[[441,4]]},"627":{"position":[[197,3]]},"695":{"position":[[64,5],[175,3],[280,4],[349,4],[529,5]]},"699":{"position":[[95,4]]},"705":{"position":[[93,4],[162,4],[342,6]]},"771":{"position":[[729,3],[758,3]]},"773":{"position":[[100,3],[248,4],[493,4],[844,3]]},"775":{"position":[[100,3],[248,4],[493,4]]},"831":{"position":[[934,3],[963,3]]},"833":{"position":[[100,3],[256,4],[371,4],[505,3]]},"835":{"position":[[100,3],[256,4],[371,4]]},"850":{"position":[[101,3],[201,4],[593,3]]},"1015":{"position":[[177,6],[582,6],[618,6],[654,6]]},"1019":{"position":[[693,3]]},"1040":{"position":[[985,3],[1018,3]]},"1042":{"position":[[917,3],[950,3]]},"1044":{"position":[[939,3],[972,3]]},"1046":{"position":[[957,3],[990,3]]},"1048":{"position":[[232,3]]},"1050":{"position":[[134,3],[665,3],[991,3]]},"1052":{"position":[[1469,3]]},"1065":{"position":[[358,6],[763,6],[799,6],[835,6],[1091,6],[1496,6],[1532,6],[1568,6],[1824,6],[2229,6],[2265,6],[2301,6],[2557,6],[2962,6],[2998,6],[3034,6]]},"1069":{"position":[[702,3],[1294,3],[1323,3]]},"1071":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"1073":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"1075":{"position":[[71,3],[213,4],[560,4],[924,4],[972,3]]},"1077":{"position":[[414,4]]},"1095":{"position":[[800,3],[829,3]]},"1097":{"position":[[100,3],[242,4],[462,4],[854,3]]},"1099":{"position":[[100,3],[242,4],[462,4]]},"1101":{"position":[[100,3],[242,4],[462,4]]},"1125":{"position":[[800,3],[829,3]]},"1127":{"position":[[100,3],[242,4],[462,4],[854,3]]},"1129":{"position":[[100,3],[242,4],[462,4]]},"1131":{"position":[[100,3],[242,4],[462,4]]},"1160":{"position":[[138,3]]},"1166":{"position":[[10,3],[125,4],[140,3],[509,4],[1007,3],[1414,3],[1584,3],[1679,3]]},"1168":{"position":[[14,3],[150,5],[265,3]]},"1315":{"position":[[440,4]]},"1317":{"position":[[656,4]]},"1455":{"position":[[642,5]]},"1541":{"position":[[971,3]]},"1559":{"position":[[55,4],[900,3]]},"1561":{"position":[[118,5]]},"1582":{"position":[[546,4]]},"1732":{"position":[[21,4],[82,4]]},"1938":{"position":[[81,3]]},"2017":{"position":[[364,4],[554,3],[616,3],[686,3]]},"2019":{"position":[[327,4],[610,3],[672,3],[1099,3]]},"2037":{"position":[[400,4],[646,4],[836,3],[898,3]]},"2039":{"position":[[402,4],[888,3],[950,3]]},"2076":{"position":[[425,4],[548,5]]},"2090":{"position":[[84,4],[308,3]]},"2104":{"position":[[255,3],[446,4]]},"2114":{"position":[[392,4]]},"2224":{"position":[[363,4]]},"2334":{"position":[[91,3],[141,3]]},"2344":{"position":[[296,3]]},"2346":{"position":[[697,3],[890,3]]},"2348":{"position":[[57,3]]},"2510":{"position":[[18,4],[72,3]]}}}],["url=\"enrtree://am5fcqlwizx2qfpnjap7vuerccrngrhwzg3yyhiuv7bvdq5fdprt2@nodes.example.org",{"_index":4750,"t":{"2090":{"position":[[208,87]]}}}],["url=\"http://127.0.0.1:8888",{"_index":1908,"t":{"627":{"position":[[165,27]]}}}],["url=// - - + + - + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index e281fe43cc8..5c8667a8df9 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://besu.hyperledger.org/searchweekly0.5https://besu.hyperledger.org/weekly0.5https://besu.hyperledger.org/24.7.1/tagsweekly0.5https://besu.hyperledger.org/24.7.1/tags/private-networksweekly0.5https://besu.hyperledger.org/24.7.1/tags/public-networksweekly0.5https://besu.hyperledger.org/24.7.1/global/postmanweekly0.5https://besu.hyperledger.org/24.7.1/global/test_accountsweekly0.5https://besu.hyperledger.org/24.7.1/private-networksweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/chatbotweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/conceptsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/permissioningweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/permissioning/onchainweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/permissioning/pluginweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/pkiweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/pluginsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/poaweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacyweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/flexible-privacyweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/pluginweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/private-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/concepts/privacy/private-transactions/processingweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-startedweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-started/installweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-toweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/backupweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/block-proposal-permissioningweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/bootnodesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/consensusweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/consensus/add-validators-without-votingweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/consensus/cliqueweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/consensus/ibftweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/consensus/qbftweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/contractsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/curvesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/free-gasweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/tls/client-and-serverweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/tls/p2pweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/configure/validatorsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/deploy/ansibleweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/deploy/cloudweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/deploy/ethstatsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/deploy/kubernetesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/chainlensweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/elastic-stackweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/lokiweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/opentelemetryweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/quorum-hibernateweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/monitor/splunkweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/send-transactions/concurrent-private-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/send-transactions/private-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/send-transactions/revert-reasonweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/upgradeweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-permissioning/localweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-permissioning/onchainweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/access-private-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/besu-extendedweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/eea-compliantweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/flexibleweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/performance-best-practicesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/sign-pmtsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/tesseraweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/how-to/use-privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/referenceweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/accounts-for-testingweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/apiweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/reference/plugin-api-interfacesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorialsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/azureweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/cliqueweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/contractsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/contracts/interactweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/contracts/transfer-fundsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/ethashweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/ibftweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/ibft/validatorsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/chartsweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/clusterweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/maintenanceweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/nat-managerweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/playgroundweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/productionweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/kubernetes/quorum-explorerweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/permissioningweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/privacyweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/privacy/quickstartweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/qbftweekly0.5https://besu.hyperledger.org/24.7.1/private-networks/tutorials/quickstartweekly0.5https://besu.hyperledger.org/24.7.1/public-networksweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/chatbotweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/conceptsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/data-storage-formatsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/events-and-logsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/genesis-fileweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/network-and-chain-idweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/node-clientsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/node-keysweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/parallel-transaction-executionweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/proof-of-stakeweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/proof-of-stake/attestationsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/transactions/poolweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/transactions/typesweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/concepts/transactions/validationweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-startedweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/connectweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/connect/mainnetweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/connect/sync-nodeweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/connect/testnetweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/installweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/migrate-to-besuweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-toweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/bonsai-limit-trie-logsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-besuweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-besu/profileweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-haweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-ha/sample-configurationweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-java/install-update-javaweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-java/java-flight-recorderweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-java/manage-memoryweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/configure-java/pass-jvm-optionsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/connect/configure-portsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/connect/manage-peersweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/connect/specify-natweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/connect/static-nodesweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/develop/client-librariesweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/develop/hardhatweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/monitor/loggingweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/monitor/metricsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/monitor/understand-metricsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/troubleshoot/evm-toolweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/troubleshoot/peeringweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/troubleshoot/performanceweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/troubleshoot/trace-transactionsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/upgrade-nodeweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-apiweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-api/access-logsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-api/authenticateweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-api/graphqlweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-api/json-rpcweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-besu-api/rpc-pubsubweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-engine-apiweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/how-to/use-pow/miningweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/referenceweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/apiweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/disclosureweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/engine-apiweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/engine-api/objectsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/evm-toolweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/genesis-itemsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/projects-using-besuweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/reference/trace-typesweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/tutorialsweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/tutorials/besu-teku-mainnetweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/tutorials/besu-teku-testnetweekly0.5https://besu.hyperledger.org/24.7.1/public-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/24.8.0/tagsweekly0.5https://besu.hyperledger.org/24.8.0/tags/private-networksweekly0.5https://besu.hyperledger.org/24.8.0/tags/public-networksweekly0.5https://besu.hyperledger.org/24.8.0/global/postmanweekly0.5https://besu.hyperledger.org/24.8.0/global/test_accountsweekly0.5https://besu.hyperledger.org/24.8.0/private-networksweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/chatbotweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/conceptsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/permissioningweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/permissioning/onchainweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/permissioning/pluginweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/pkiweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/pluginsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/poaweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacyweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/flexible-privacyweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/pluginweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/private-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/concepts/privacy/private-transactions/processingweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-startedweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-started/installweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-toweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/backupweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/block-proposal-permissioningweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/bootnodesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/consensusweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/consensus/add-validators-without-votingweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/consensus/cliqueweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/consensus/ibftweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/consensus/qbftweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/contractsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/curvesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/free-gasweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/tls/client-and-serverweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/tls/p2pweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/configure/validatorsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/deploy/ansibleweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/deploy/cloudweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/deploy/ethstatsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/deploy/kubernetesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/chainlensweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/elastic-stackweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/lokiweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/opentelemetryweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/quorum-hibernateweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/monitor/splunkweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/send-transactions/concurrent-private-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/send-transactions/private-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/send-transactions/revert-reasonweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/upgradeweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-permissioning/localweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-permissioning/onchainweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/access-private-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/besu-extendedweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/eea-compliantweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/flexibleweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/performance-best-practicesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/sign-pmtsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/tesseraweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/how-to/use-privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/referenceweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/accounts-for-testingweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/apiweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/reference/plugin-api-interfacesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorialsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/azureweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/cliqueweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/contractsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/contracts/interactweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/contracts/transfer-fundsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/ethashweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/ibftweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/ibft/validatorsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/chartsweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/clusterweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/maintenanceweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/nat-managerweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/playgroundweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/productionweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/kubernetes/quorum-explorerweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/permissioningweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/privacyweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/privacy/quickstartweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/qbftweekly0.5https://besu.hyperledger.org/24.8.0/private-networks/tutorials/quickstartweekly0.5https://besu.hyperledger.org/24.8.0/public-networksweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/chatbotweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/conceptsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/data-storage-formatsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/events-and-logsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/genesis-fileweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/network-and-chain-idweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/node-clientsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/node-keysweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/parallel-transaction-executionweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/proof-of-stakeweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/proof-of-stake/attestationsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/transactions/poolweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/transactions/typesweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/concepts/transactions/validationweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-startedweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/connectweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/connect/mainnetweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/connect/sync-nodeweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/connect/testnetweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/installweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/migrate-to-besuweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-toweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/bonsai-limit-trie-logsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-besuweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-besu/profileweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-haweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-ha/sample-configurationweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-java/install-update-javaweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-java/java-flight-recorderweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-java/manage-memoryweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/configure-java/pass-jvm-optionsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/connect/configure-portsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/connect/manage-peersweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/connect/specify-natweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/connect/static-nodesweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/develop/client-librariesweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/develop/hardhatweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/monitor/loggingweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/monitor/metricsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/monitor/understand-metricsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/troubleshoot/evm-toolweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/troubleshoot/peeringweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/troubleshoot/performanceweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/troubleshoot/trace-transactionsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/upgrade-nodeweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-apiweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-api/access-logsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-api/authenticateweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-api/graphqlweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-api/json-rpcweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-besu-api/rpc-pubsubweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-engine-apiweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/how-to/use-pow/miningweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/referenceweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/apiweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/disclosureweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/engine-apiweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/engine-api/objectsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/evm-toolweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/genesis-itemsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/projects-using-besuweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/reference/trace-typesweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/tutorialsweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/tutorials/besu-teku-mainnetweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/tutorials/besu-teku-testnetweekly0.5https://besu.hyperledger.org/24.8.0/public-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/development/tagsweekly0.5https://besu.hyperledger.org/development/tags/private-networksweekly0.5https://besu.hyperledger.org/development/tags/public-networksweekly0.5https://besu.hyperledger.org/development/global/postmanweekly0.5https://besu.hyperledger.org/development/global/test_accountsweekly0.5https://besu.hyperledger.org/development/private-networksweekly0.5https://besu.hyperledger.org/development/private-networks/chatbotweekly0.5https://besu.hyperledger.org/development/private-networks/conceptsweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/permissioningweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/permissioning/onchainweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/permissioning/pluginweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/pkiweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/pluginsweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/poaweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacyweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/flexible-privacyweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/pluginweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/private-transactionsweekly0.5https://besu.hyperledger.org/development/private-networks/concepts/privacy/private-transactions/processingweekly0.5https://besu.hyperledger.org/development/private-networks/get-startedweekly0.5https://besu.hyperledger.org/development/private-networks/get-started/installweekly0.5https://besu.hyperledger.org/development/private-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/development/private-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/development/private-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/development/private-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/development/private-networks/how-toweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/backupweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/block-proposal-permissioningweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/bootnodesweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/consensusweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/consensus/add-validators-without-votingweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/consensus/cliqueweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/consensus/ibftweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/consensus/qbftweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/contractsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/curvesweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/free-gasweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/tls/client-and-serverweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/tls/p2pweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/configure/validatorsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/deploy/ansibleweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/deploy/cloudweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/deploy/ethstatsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/deploy/kubernetesweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/chainlensweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/elastic-stackweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/lokiweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/opentelemetryweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/quorum-hibernateweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/monitor/splunkweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/send-transactions/concurrent-private-transactionsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/send-transactions/private-transactionsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/send-transactions/revert-reasonweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/upgradeweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-permissioning/localweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-permissioning/onchainweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/access-private-transactionsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/besu-extendedweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/eea-compliantweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/flexibleweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/performance-best-practicesweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/sign-pmtsweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/tesseraweekly0.5https://besu.hyperledger.org/development/private-networks/how-to/use-privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/development/private-networks/referenceweekly0.5https://besu.hyperledger.org/development/private-networks/reference/accounts-for-testingweekly0.5https://besu.hyperledger.org/development/private-networks/reference/apiweekly0.5https://besu.hyperledger.org/development/private-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/development/private-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/development/private-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/development/private-networks/reference/plugin-api-interfacesweekly0.5https://besu.hyperledger.org/development/private-networks/tutorialsweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/azureweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/cliqueweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/contractsweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/contracts/interactweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/contracts/transfer-fundsweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/ethashweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/ibftweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/ibft/validatorsweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/chartsweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/clusterweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/maintenanceweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/nat-managerweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/playgroundweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/productionweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/kubernetes/quorum-explorerweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/permissioningweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/privacyweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/privacy/quickstartweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/qbftweekly0.5https://besu.hyperledger.org/development/private-networks/tutorials/quickstartweekly0.5https://besu.hyperledger.org/development/public-networksweekly0.5https://besu.hyperledger.org/development/public-networks/chatbotweekly0.5https://besu.hyperledger.org/development/public-networks/conceptsweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/data-storage-formatsweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/events-and-logsweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/genesis-fileweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/network-and-chain-idweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/node-clientsweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/node-keysweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/parallel-transaction-executionweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/proof-of-stakeweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/proof-of-stake/attestationsweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/transactions/poolweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/transactions/typesweekly0.5https://besu.hyperledger.org/development/public-networks/concepts/transactions/validationweekly0.5https://besu.hyperledger.org/development/public-networks/get-startedweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/connectweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/connect/mainnetweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/connect/sync-nodeweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/connect/testnetweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/installweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/migrate-to-besuweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/development/public-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/development/public-networks/how-toweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/bonsai-limit-trie-logsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-besuweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-besu/profileweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-haweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-ha/sample-configurationweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-java/install-update-javaweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-java/java-flight-recorderweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-java/manage-memoryweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/configure-java/pass-jvm-optionsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/connect/configure-portsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/connect/manage-peersweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/connect/specify-natweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/connect/static-nodesweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/develop/client-librariesweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/develop/hardhatweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/monitor/loggingweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/monitor/metricsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/monitor/understand-metricsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/troubleshoot/evm-toolweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/troubleshoot/peeringweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/troubleshoot/performanceweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/troubleshoot/trace-transactionsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/upgrade-nodeweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-apiweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-api/access-logsweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-api/authenticateweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-api/graphqlweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-api/json-rpcweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-besu-api/rpc-pubsubweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-engine-apiweekly0.5https://besu.hyperledger.org/development/public-networks/how-to/use-pow/miningweekly0.5https://besu.hyperledger.org/development/public-networks/referenceweekly0.5https://besu.hyperledger.org/development/public-networks/reference/apiweekly0.5https://besu.hyperledger.org/development/public-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/development/public-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/development/public-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/development/public-networks/reference/disclosureweekly0.5https://besu.hyperledger.org/development/public-networks/reference/engine-apiweekly0.5https://besu.hyperledger.org/development/public-networks/reference/engine-api/objectsweekly0.5https://besu.hyperledger.org/development/public-networks/reference/evm-toolweekly0.5https://besu.hyperledger.org/development/public-networks/reference/genesis-itemsweekly0.5https://besu.hyperledger.org/development/public-networks/reference/projects-using-besuweekly0.5https://besu.hyperledger.org/development/public-networks/reference/trace-typesweekly0.5https://besu.hyperledger.org/development/public-networks/tutorialsweekly0.5https://besu.hyperledger.org/development/public-networks/tutorials/besu-teku-mainnetweekly0.5https://besu.hyperledger.org/development/public-networks/tutorials/besu-teku-testnetweekly0.5https://besu.hyperledger.org/development/public-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/tagsweekly0.5https://besu.hyperledger.org/tags/private-networksweekly0.5https://besu.hyperledger.org/tags/public-networksweekly0.5https://besu.hyperledger.org/global/postmanweekly0.5https://besu.hyperledger.org/global/test_accountsweekly0.5https://besu.hyperledger.org/private-networksweekly0.5https://besu.hyperledger.org/private-networks/chatbotweekly0.5https://besu.hyperledger.org/private-networks/conceptsweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioningweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioning/onchainweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioning/pluginweekly0.5https://besu.hyperledger.org/private-networks/concepts/pkiweekly0.5https://besu.hyperledger.org/private-networks/concepts/pluginsweekly0.5https://besu.hyperledger.org/private-networks/concepts/poaweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/flexible-privacyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/pluginweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/private-transactions/processingweekly0.5https://besu.hyperledger.org/private-networks/get-startedweekly0.5https://besu.hyperledger.org/private-networks/get-started/installweekly0.5https://besu.hyperledger.org/private-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/private-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/private-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/private-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/private-networks/how-toweekly0.5https://besu.hyperledger.org/private-networks/how-to/backupweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/block-proposal-permissioningweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/bootnodesweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensusweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/add-validators-without-votingweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/cliqueweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/ibftweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/qbftweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/contractsweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/curvesweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/free-gasweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/tls/client-and-serverweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/tls/p2pweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/validatorsweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/ansibleweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/cloudweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/ethstatsweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/kubernetesweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/chainlensweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/elastic-stackweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/lokiweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/opentelemetryweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/quorum-hibernateweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/splunkweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/concurrent-private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/revert-reasonweekly0.5https://besu.hyperledger.org/private-networks/how-to/upgradeweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-permissioning/localweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-permissioning/onchainweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/access-private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/besu-extendedweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/eea-compliantweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/flexibleweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/performance-best-practicesweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/sign-pmtsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/tesseraweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/private-networks/referenceweekly0.5https://besu.hyperledger.org/private-networks/reference/accounts-for-testingweekly0.5https://besu.hyperledger.org/private-networks/reference/apiweekly0.5https://besu.hyperledger.org/private-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/private-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/private-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/private-networks/reference/plugin-api-interfacesweekly0.5https://besu.hyperledger.org/private-networks/tutorialsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/azureweekly0.5https://besu.hyperledger.org/private-networks/tutorials/cliqueweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contractsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contracts/interactweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contracts/transfer-fundsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ethashweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ibftweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ibft/validatorsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/chartsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/clusterweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/maintenanceweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/nat-managerweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/playgroundweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/productionweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/quorum-explorerweekly0.5https://besu.hyperledger.org/private-networks/tutorials/permissioningweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacyweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/quickstartweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/private-networks/tutorials/qbftweekly0.5https://besu.hyperledger.org/private-networks/tutorials/quickstartweekly0.5https://besu.hyperledger.org/public-networksweekly0.5https://besu.hyperledger.org/public-networks/chatbotweekly0.5https://besu.hyperledger.org/public-networks/conceptsweekly0.5https://besu.hyperledger.org/public-networks/concepts/data-storage-formatsweekly0.5https://besu.hyperledger.org/public-networks/concepts/events-and-logsweekly0.5https://besu.hyperledger.org/public-networks/concepts/genesis-fileweekly0.5https://besu.hyperledger.org/public-networks/concepts/network-and-chain-idweekly0.5https://besu.hyperledger.org/public-networks/concepts/node-clientsweekly0.5https://besu.hyperledger.org/public-networks/concepts/node-keysweekly0.5https://besu.hyperledger.org/public-networks/concepts/parallel-transaction-executionweekly0.5https://besu.hyperledger.org/public-networks/concepts/proof-of-stakeweekly0.5https://besu.hyperledger.org/public-networks/concepts/proof-of-stake/attestationsweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/poolweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/typesweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/validationweekly0.5https://besu.hyperledger.org/public-networks/get-startedweekly0.5https://besu.hyperledger.org/public-networks/get-started/connectweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/mainnetweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/sync-nodeweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/testnetweekly0.5https://besu.hyperledger.org/public-networks/get-started/installweekly0.5https://besu.hyperledger.org/public-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/public-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/public-networks/get-started/migrate-to-besuweekly0.5https://besu.hyperledger.org/public-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/public-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/public-networks/how-toweekly0.5https://besu.hyperledger.org/public-networks/how-to/bonsai-limit-trie-logsweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-besuweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-besu/profileweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-haweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-ha/sample-configurationweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/install-update-javaweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/java-flight-recorderweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/manage-memoryweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/pass-jvm-optionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/configure-portsweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/manage-peersweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/specify-natweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/static-nodesweekly0.5https://besu.hyperledger.org/public-networks/how-to/develop/client-librariesweekly0.5https://besu.hyperledger.org/public-networks/how-to/develop/hardhatweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/loggingweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/metricsweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/understand-metricsweekly0.5https://besu.hyperledger.org/public-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/evm-toolweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peeringweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/performanceweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/trace-transactionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/upgrade-nodeweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-apiweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/access-logsweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/authenticateweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/graphqlweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/json-rpcweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/rpc-pubsubweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-engine-apiweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-pow/miningweekly0.5https://besu.hyperledger.org/public-networks/referenceweekly0.5https://besu.hyperledger.org/public-networks/reference/apiweekly0.5https://besu.hyperledger.org/public-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/public-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/public-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/public-networks/reference/disclosureweekly0.5https://besu.hyperledger.org/public-networks/reference/engine-apiweekly0.5https://besu.hyperledger.org/public-networks/reference/engine-api/objectsweekly0.5https://besu.hyperledger.org/public-networks/reference/evm-toolweekly0.5https://besu.hyperledger.org/public-networks/reference/genesis-itemsweekly0.5https://besu.hyperledger.org/public-networks/reference/projects-using-besuweekly0.5https://besu.hyperledger.org/public-networks/reference/trace-typesweekly0.5https://besu.hyperledger.org/public-networks/tutorialsweekly0.5https://besu.hyperledger.org/public-networks/tutorials/besu-teku-mainnetweekly0.5https://besu.hyperledger.org/public-networks/tutorials/besu-teku-testnetweekly0.5https://besu.hyperledger.org/public-networks/tutorials/kubernetesweekly0.5 \ No newline at end of file +https://besu.hyperledger.org/searchweekly0.5https://besu.hyperledger.org/weekly0.5https://besu.hyperledger.org/tagsweekly0.5https://besu.hyperledger.org/tags/private-networksweekly0.5https://besu.hyperledger.org/tags/public-networksweekly0.5https://besu.hyperledger.org/global/postmanweekly0.5https://besu.hyperledger.org/global/test_accountsweekly0.5https://besu.hyperledger.org/private-networksweekly0.5https://besu.hyperledger.org/private-networks/chatbotweekly0.5https://besu.hyperledger.org/private-networks/conceptsweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioningweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioning/onchainweekly0.5https://besu.hyperledger.org/private-networks/concepts/permissioning/pluginweekly0.5https://besu.hyperledger.org/private-networks/concepts/pkiweekly0.5https://besu.hyperledger.org/private-networks/concepts/pluginsweekly0.5https://besu.hyperledger.org/private-networks/concepts/poaweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/flexible-privacyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/pluginweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/concepts/privacy/private-transactions/processingweekly0.5https://besu.hyperledger.org/private-networks/get-startedweekly0.5https://besu.hyperledger.org/private-networks/get-started/installweekly0.5https://besu.hyperledger.org/private-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/private-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/private-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/private-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/private-networks/how-toweekly0.5https://besu.hyperledger.org/private-networks/how-to/backupweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/block-proposal-permissioningweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/bootnodesweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensusweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/add-validators-without-votingweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/cliqueweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/ibftweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/consensus/qbftweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/contractsweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/curvesweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/free-gasweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/tls/client-and-serverweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/tls/p2pweekly0.5https://besu.hyperledger.org/private-networks/how-to/configure/validatorsweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/ansibleweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/cloudweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/ethstatsweekly0.5https://besu.hyperledger.org/private-networks/how-to/deploy/kubernetesweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/chainlensweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/elastic-stackweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/lokiweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/opentelemetryweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/quorum-hibernateweekly0.5https://besu.hyperledger.org/private-networks/how-to/monitor/splunkweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/concurrent-private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/send-transactions/revert-reasonweekly0.5https://besu.hyperledger.org/private-networks/how-to/upgradeweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-permissioning/localweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-permissioning/onchainweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/access-private-transactionsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/besu-extendedweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/eea-compliantweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/flexibleweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/performance-best-practicesweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/privacy-groupsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/sign-pmtsweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/tesseraweekly0.5https://besu.hyperledger.org/private-networks/how-to/use-privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/private-networks/referenceweekly0.5https://besu.hyperledger.org/private-networks/reference/accounts-for-testingweekly0.5https://besu.hyperledger.org/private-networks/reference/apiweekly0.5https://besu.hyperledger.org/private-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/private-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/private-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/private-networks/reference/plugin-api-interfacesweekly0.5https://besu.hyperledger.org/private-networks/tutorialsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/azureweekly0.5https://besu.hyperledger.org/private-networks/tutorials/cliqueweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contractsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contracts/interactweekly0.5https://besu.hyperledger.org/private-networks/tutorials/contracts/transfer-fundsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ethashweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ibftweekly0.5https://besu.hyperledger.org/private-networks/tutorials/ibft/validatorsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetesweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/chartsweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/clusterweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/maintenanceweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/nat-managerweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/playgroundweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/productionweekly0.5https://besu.hyperledger.org/private-networks/tutorials/kubernetes/quorum-explorerweekly0.5https://besu.hyperledger.org/private-networks/tutorials/permissioningweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacyweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/multi-tenancyweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/quickstartweekly0.5https://besu.hyperledger.org/private-networks/tutorials/privacy/web3js-quorumweekly0.5https://besu.hyperledger.org/private-networks/tutorials/qbftweekly0.5https://besu.hyperledger.org/private-networks/tutorials/quickstartweekly0.5https://besu.hyperledger.org/public-networksweekly0.5https://besu.hyperledger.org/public-networks/chatbotweekly0.5https://besu.hyperledger.org/public-networks/conceptsweekly0.5https://besu.hyperledger.org/public-networks/concepts/data-storage-formatsweekly0.5https://besu.hyperledger.org/public-networks/concepts/events-and-logsweekly0.5https://besu.hyperledger.org/public-networks/concepts/genesis-fileweekly0.5https://besu.hyperledger.org/public-networks/concepts/network-and-chain-idweekly0.5https://besu.hyperledger.org/public-networks/concepts/node-clientsweekly0.5https://besu.hyperledger.org/public-networks/concepts/node-keysweekly0.5https://besu.hyperledger.org/public-networks/concepts/parallel-transaction-executionweekly0.5https://besu.hyperledger.org/public-networks/concepts/proof-of-stakeweekly0.5https://besu.hyperledger.org/public-networks/concepts/proof-of-stake/attestationsweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/poolweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/typesweekly0.5https://besu.hyperledger.org/public-networks/concepts/transactions/validationweekly0.5https://besu.hyperledger.org/public-networks/get-startedweekly0.5https://besu.hyperledger.org/public-networks/get-started/connectweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/mainnetweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/sync-nodeweekly0.5https://besu.hyperledger.org/public-networks/get-started/connect/testnetweekly0.5https://besu.hyperledger.org/public-networks/get-started/installweekly0.5https://besu.hyperledger.org/public-networks/get-started/install/binary-distributionweekly0.5https://besu.hyperledger.org/public-networks/get-started/install/run-docker-imageweekly0.5https://besu.hyperledger.org/public-networks/get-started/migrate-to-besuweekly0.5https://besu.hyperledger.org/public-networks/get-started/start-nodeweekly0.5https://besu.hyperledger.org/public-networks/get-started/system-requirementsweekly0.5https://besu.hyperledger.org/public-networks/how-toweekly0.5https://besu.hyperledger.org/public-networks/how-to/bonsai-limit-trie-logsweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-besuweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-besu/profileweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-haweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-ha/sample-configurationweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/install-update-javaweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/java-flight-recorderweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/manage-memoryweekly0.5https://besu.hyperledger.org/public-networks/how-to/configure-java/pass-jvm-optionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/configure-portsweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/manage-peersweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/specify-natweekly0.5https://besu.hyperledger.org/public-networks/how-to/connect/static-nodesweekly0.5https://besu.hyperledger.org/public-networks/how-to/develop/client-librariesweekly0.5https://besu.hyperledger.org/public-networks/how-to/develop/hardhatweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitorweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/loggingweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/metricsweekly0.5https://besu.hyperledger.org/public-networks/how-to/monitor/understand-metricsweekly0.5https://besu.hyperledger.org/public-networks/how-to/send-transactionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/evm-toolweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peeringweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/performanceweekly0.5https://besu.hyperledger.org/public-networks/how-to/troubleshoot/trace-transactionsweekly0.5https://besu.hyperledger.org/public-networks/how-to/upgrade-nodeweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-apiweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/access-logsweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/authenticateweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/graphqlweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/json-rpcweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-besu-api/rpc-pubsubweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-engine-apiweekly0.5https://besu.hyperledger.org/public-networks/how-to/use-pow/miningweekly0.5https://besu.hyperledger.org/public-networks/referenceweekly0.5https://besu.hyperledger.org/public-networks/reference/apiweekly0.5https://besu.hyperledger.org/public-networks/reference/api/objectsweekly0.5https://besu.hyperledger.org/public-networks/reference/cli/optionsweekly0.5https://besu.hyperledger.org/public-networks/reference/cli/subcommandsweekly0.5https://besu.hyperledger.org/public-networks/reference/disclosureweekly0.5https://besu.hyperledger.org/public-networks/reference/engine-apiweekly0.5https://besu.hyperledger.org/public-networks/reference/engine-api/objectsweekly0.5https://besu.hyperledger.org/public-networks/reference/evm-toolweekly0.5https://besu.hyperledger.org/public-networks/reference/genesis-itemsweekly0.5https://besu.hyperledger.org/public-networks/reference/projects-using-besuweekly0.5https://besu.hyperledger.org/public-networks/reference/trace-typesweekly0.5https://besu.hyperledger.org/public-networks/tutorialsweekly0.5https://besu.hyperledger.org/public-networks/tutorials/besu-teku-mainnetweekly0.5https://besu.hyperledger.org/public-networks/tutorials/besu-teku-testnetweekly0.5https://besu.hyperledger.org/public-networks/tutorials/kubernetesweekly0.5 \ No newline at end of file diff --git a/tags.html b/tags.html index cfe804df287..b6efe8902b0 100644 --- a/tags.html +++ b/tags.html @@ -1,21 +1,21 @@ - + -Tags | Besu documentation +Tags | Besu documentation - - + + - + \ No newline at end of file diff --git a/tags/private-networks.html b/tags/private-networks.html index 523bc0b99ca..d81757d9379 100644 --- a/tags/private-networks.html +++ b/tags/private-networks.html @@ -1,21 +1,21 @@ - + -128 docs tagged with "private networks" | Besu documentation +128 docs tagged with "private networks" | Besu documentation - - + + -

    128 docs tagged with "private networks"

    View all tags

    Besu API

    Besu JSON-RPC API methods reference

    Client and server TLS

    Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.

    Clique

    Besu Clique Proof-of-Authority (PoA) consensus protocol implementation

    Concepts

    private networks concepts overview

    Configure ports

    To enable communication you must expose Besu ports appropriately

    Genesis file

    Learn about configuring a network using the genesis file.

    How to

    Private networks how to overview

    IBFT 2.0

    Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation

    Maintenance

    Maintenance for Besu on a Kubernetes cluster

    Node keys

    Learn about node public and private keys, and the node address.

    Options

    Besu command line interface reference

    Production

    Deploying Besu Helm Charts for production on a Kubernetes cluster

    QBFT

    Besu QBFT proof of authority (PoA) consensus protocol implementation

    Start Besu

    Start Besu on a private Ethereum network.

    Use a profile

    You can load a profile to extend Besu's default configuration, using the --profile option.

    Validators

    Configuring validators in production networks

    +

    128 docs tagged with "private networks"

    View all tags

    Besu API

    Besu JSON-RPC API methods reference

    Client and server TLS

    Besu supports TLS for client and server communication. For example, you can configure TLS for communication between Web3Signer and Besu, and Besu and Tessera.

    Clique

    Besu Clique Proof-of-Authority (PoA) consensus protocol implementation

    Concepts

    private networks concepts overview

    Configure ports

    To enable communication you must expose Besu ports appropriately

    Genesis file

    Learn about configuring a network using the genesis file.

    How to

    Private networks how to overview

    IBFT 2.0

    Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation

    Maintenance

    Maintenance for Besu on a Kubernetes cluster

    Node keys

    Learn about node public and private keys, and the node address.

    Options

    Besu command line interface reference

    Production

    Deploying Besu Helm Charts for production on a Kubernetes cluster

    QBFT

    Besu QBFT proof of authority (PoA) consensus protocol implementation

    Start Besu

    Start Besu on a private Ethereum network.

    Use a profile

    You can load a profile to extend Besu's default configuration, using the --profile option.

    Validators

    Configuring validators in production networks

    \ No newline at end of file diff --git a/tags/public-networks.html b/tags/public-networks.html index cab1524e366..f41f0a6bb27 100644 --- a/tags/public-networks.html +++ b/tags/public-networks.html @@ -1,21 +1,21 @@ - + -71 docs tagged with "public networks" | Besu documentation +71 docs tagged with "public networks" | Besu documentation - - + + -

    71 docs tagged with "public networks"

    View all tags

    Besu API

    Besu JSON-RPC API methods reference

    Configure ports

    To enable communication you must expose Besu ports appropriately

    Connect to a testnet

    Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.

    Genesis file

    Learn about configuring a network using the genesis file.

    Node keys

    Learn about node public and private keys, and the node address.

    Objects

    Engine API objects reference

    Options

    Besu command line interface reference

    Start Besu

    Start Besu on a public Ethereum network.

    Use a profile

    You can load a profile to extend Besu's default configuration, using the --profile option.

    +

    71 docs tagged with "public networks"

    View all tags

    Besu API

    Besu JSON-RPC API methods reference

    Configure ports

    To enable communication you must expose Besu ports appropriately

    Connect to a testnet

    Run Besu as an execution client with any consensus client on the Holesky and Sepolia testnets.

    Genesis file

    Learn about configuring a network using the genesis file.

    Node keys

    Learn about node public and private keys, and the node address.

    Objects

    Engine API objects reference

    Options

    Besu command line interface reference

    Start Besu

    Start Besu on a public Ethereum network.

    Use a profile

    You can load a profile to extend Besu's default configuration, using the --profile option.

    \ No newline at end of file